Beispiel #1
0
void GLWidget3D::mousePressEvent(QMouseEvent *event) {
	QVector2D pos;

	if (Qt::ControlModifier == event->modifiers()) {
		controlPressed = true;
	} else {
		controlPressed = false;
	}

	this->setFocus();

	lastPos = event->pos();
	mouseTo2D(event->x(), event->y(), pos);

	if (event->buttons() /*& Qt::LeftButton*/) {
		switch (mainWin->mode) {
		case MainWindow::MODE_AREA_SELECT:
			if (altPressed) {
					// normal Gaussian edition
					float change=mainWin->controlWidget->ui.terrainPaint_changeSlider->value()*0.003f;
					float radi=mainWin->controlWidget->ui.terrainPaint_sizeSlider->value()*0.01f;
					if (event->buttons() & Qt::RightButton) {
						change = -change;
					}
					if (event->buttons() & Qt::MiddleButton) {
						change=FLT_MAX;//hack: flat terrain
					}
					//mainWin->urbanGeometry->vboRenderManager->addValue(pos.x(), pos.y(), change);
					float xM=1.0f-(vboRenderManager.side/2.0f-pos.x())/vboRenderManager.side;
					float yM=1.0f-(vboRenderManager.side/2.0f-pos.y())/vboRenderManager.side;
					vboRenderManager.vboTerrain.updateTerrain(xM,yM,change,radi);//rad,change);
					mainWin->urbanGeometry->adaptToTerrain();/// !! GEN did not have it here (enough in move?)
					shadow.makeShadowMap(this);
					updateGL();
			} else {
				// select a vertex or an edge
				bool found = false;
				
				if (shiftPressed) {	// select am edge
					// select a vertex or an edge
						if (GraphUtil::getEdge(mainWin->urbanGeometry->roads, pos, 30, selectedEdgeDesc)) {
							selectEdge(mainWin->urbanGeometry->roads, selectedEdgeDesc);
						} else {
							vertexSelected = false;
							edgeSelected = false;
						}
				} else {	// select a vertex
					// select a vertex or an edge
						if (GraphUtil::getVertex(mainWin->urbanGeometry->roads, pos, 30, selectedVertexDesc)) {
							selectVertex(mainWin->urbanGeometry->roads, selectedVertexDesc);
						} else {
							vertexSelected = false;
							edgeSelected = false;
						}
				}
			}
			break;
		}
	}
}
Beispiel #2
0
// Retrieve the best edge to follow in the cycle joining phase
int Graph::getNextEdge(int edgeIndex, int toNode)
{
	updateCycle(edgeIndex, toNode);
	std::vector<int> connections = fetchConnections(toNode, edgeIndex);
	return selectEdge(connections);	
}
BOOL CEdgeContainer::isEdge(NUMBER from, NUMBER to) const
{
	CEdge& e = selectEdge(from, to);
	if (e.isNull()) return FALSE;
	return TRUE;
}