]> Shamusworld >> Repos - architektonas/blobdiff - src/drawingview.cpp
Initial bring-back of line to line intersection detection.
[architektonas] / src / drawingview.cpp
index fff56da8ef77bbd2e78a0f28a0278d82339fad4e..8c581bfc1df8e904ccb41bd2b724b26b3c3ae7d5 100644 (file)
@@ -689,7 +689,7 @@ void DrawingView::ToolDraw(Painter * painter)
                {
                        if (toolPoint[0] == toolPoint[1])
                                return;
-                       
+
                        painter->DrawLine(toolPoint[0], toolPoint[1]);
                        // Likely we need a tool container for this... (now we do!)
 #if 0
@@ -704,7 +704,6 @@ void DrawingView::ToolDraw(Painter * painter)
 #endif
 
                        double absAngle = (Vector(toolPoint[1] - toolPoint[0]).Angle()) * RADIANS_TO_DEGREES;
-
                        QString text = QChar(0x2221) + QObject::tr(": %1");
                        informativeText = text.arg(absAngle);
 
@@ -723,7 +722,9 @@ void DrawingView::ToolDraw(Painter * painter)
                        if (toolPoint[0] == toolPoint[1])
                                return;
                        
-                       painter->DrawLine(toolPoint[0], toolPoint[1]);
+                       Point mirrorPoint = toolPoint[0] + Vector(toolPoint[1], toolPoint[0]);
+//                     painter->DrawLine(toolPoint[0], toolPoint[1]);
+                       painter->DrawLine(mirrorPoint, toolPoint[1]);
                        // Likely we need a tool container for this... (now we do!)
 #if 0
                        if (ctrlDown)
@@ -738,6 +739,9 @@ void DrawingView::ToolDraw(Painter * painter)
 
                        double absAngle = (Vector(toolPoint[1] - toolPoint[0]).Angle()) * RADIANS_TO_DEGREES;
 
+                       if (absAngle > 180.0)
+                               absAngle -= 180.0;
+
                        QString text = QChar(0x2221) + QObject::tr(": %1");
                        informativeText = text.arg(absAngle);
 
@@ -1045,10 +1049,7 @@ void DrawingView::MirrorHandler(int mode, Point p)
 
                                if (obj.type == OTArc)
                                {
-#if 0
-                                       // This is WRONG for mirroring...
-                                       obj2->angle[0] = obj.angle[0] + angle;
-#endif
+                                       // This is 2*mirror angle - obj angle - obj span
                                        obj2->angle[0] = (2.0 * angle) - obj.angle[0] - obj.angle[1];
 
                                        if (obj2->angle[0] > PI_TIMES_2)
@@ -1215,6 +1216,21 @@ void DrawingView::mouseMoveEvent(QMouseEvent * event)
        // Do object hit testing...
        bool needUpdate = HitTestObjects(point);
 
+       // Check for multi-hover...
+       if (numHovered > 1)
+       {
+               GetHovered(hover);
+
+               double t, u;
+               int numIntersecting = Geometry::Intersects((Object *)hover[0], (Object *)hover[1], &t, &u);
+
+               if (numIntersecting > 0)
+               {
+                       QString text = tr("Intersection t=%1, u=%2");
+                       informativeText = text.arg(t).arg(u);
+               }
+       }
+
        // Do tool handling, if any are active...
        if (Global::tool)
        {