progress on geometry control
authorDavid Pánek <panek50@kte.zcu.cz>
Fri, 3 Feb 2012 07:49:07 +0000 (08:49 +0100)
committerDavid Pánek <panek50@kte.zcu.cz>
Fri, 3 Feb 2012 07:49:07 +0000 (08:49 +0100)
src/config.cpp
src/config.h
src/scene.cpp
src/scenebasic.cpp
src/scenebasic.h
src/sceneview.cpp
src/util.h

index 80dd236..34a4f7e 100644 (file)
@@ -80,6 +80,7 @@ void Config::load()
     colorSolutionMesh = settings.value("SceneViewSettings/ColorSolutionMesh", COLORSOLUTIONMESH).value<QColor>();
     colorHighlighted = settings.value("SceneViewSettings/ColorHighlighted", COLORHIGHLIGHTED).value<QColor>();
     colorSelected = settings.value("SceneViewSettings/ColorSelected", COLORSELECTED).value<QColor>();
+    colorCrossed = settings.value("SceneViewSettings/ColorCrossed", COLORCROSSED).value<QColor>();
 
     // geometry
     nodeSize = settings.value("SceneViewSettings/NodeSize", 6.0).toDouble();
index 37e9952..6e42a38 100644 (file)
@@ -144,6 +144,7 @@ public:
     QColor colorInitialMesh;
     QColor colorSolutionMesh;
     QColor colorHighlighted;
+    QColor colorCrossed;
     QColor colorSelected;
 
     // adaptivity
index 041b076..396f821 100644 (file)
@@ -372,6 +372,14 @@ void Scene::removeEdge(SceneEdge *edge)
     // clear solution
     m_sceneSolution->clear();
 
+    // clear crosses
+    foreach(SceneEdge *any_edge, edge->crossEdges)
+    {
+        any_edge->crossEdges.removeOne(edge);
+        if (any_edge->crossEdges.count() == 0)
+            any_edge->isCrossed = false;
+    }
+
     edges.removeOne(edge);
     // delete edge;
 
index 8c21b30..ce93693 100644 (file)
@@ -70,7 +70,6 @@ SceneEdge::SceneEdge(SceneNode *nodeStart, SceneNode *nodeEnd, SceneBoundary *ma
     : SceneBasic()
 {
     logMessage("SceneEdge::SceneEdge()");
-
     this->isCrossed = false;
     this->nodeStart = nodeStart;
     this->nodeEnd = nodeEnd;
index e259fc1..b40d358 100644 (file)
@@ -78,6 +78,7 @@ public:
     SceneNode *nodeEnd;
     double angle;
     int refineTowardsEdge;
+    QList<SceneEdge *> crossEdges;
     bool isCrossed;
 
     SceneEdge(SceneNode *nodeStart, SceneNode *nodeEnd, SceneBoundary *boundary, double angle, int refineTowardsEdge);
index 09d73bf..24053f5 100644 (file)
@@ -1019,8 +1019,12 @@ void SceneView::paintGeometry()
 
         // ToDo: make color in Util::config
         if (edge->isCrossed)
-            glColor3d(0.0, 1.0, 0.0);
-
+        {
+            glColor3d(Util::config()->colorCrossed.redF(),
+                      Util::config()->colorCrossed.greenF(),
+                      Util::config()->colorCrossed.blueF());
+            glLineWidth(Util::config()->edgeWidth + 2.0);
+        }
         if (edge->isHighlighted)
         {
             glColor3d(Util::config()->colorHighlighted.redF(),
@@ -4148,7 +4152,10 @@ void SceneView::mousePressEvent(QMouseEvent *event)
                                             (intersects.count() > 1))
                                     {
                                         anyEdge->isCrossed = true;
+                                        anyEdge->crossEdges.push_back(edgeAdded);
+
                                         edgeAdded->isCrossed = true;
+                                        edgeAdded->crossEdges.push_back(anyEdge);
                                     }
                                 }
 
index fdcc017..e52e7fd 100644 (file)
@@ -792,6 +792,7 @@ const QColor COLORINITIALMESH = QColor::fromRgb(250, 202, 119);
 const QColor COLORSOLUTIONMESH = QColor::fromRgb(150, 70, 0);
 const QColor COLORHIGHLIGHTED = QColor::fromRgb(250, 150, 0);
 const QColor COLORSELECTED = QColor::fromRgb(150, 0, 0);
+const QColor COLORCROSSED = QColor::fromRgb(0, 255, 0);
 
 // workspace
 const double GRIDSTEP = 0.05;