]> Shamusworld >> Repos - architektonas/blobdiff - src/applicationwindow.cpp
Readded click to add dimension to object (for Line).
[architektonas] / src / applicationwindow.cpp
index 23629bca9976e3ef78a5780e5b45d4da6169bada..5261dd11a2488037d601f1b0e44e836edb51f16f 100644 (file)
@@ -30,6 +30,7 @@
 
 #include "about.h"
 #include "blockwidget.h"
+#include "dimension.h"
 #include "drawingview.h"
 #include "drawarcaction.h"
 #include "drawcircleaction.h"
@@ -39,6 +40,7 @@
 #include "generaltab.h"
 #include "geometry.h"
 #include "layerwidget.h"
+#include "line.h"
 #include "mirroraction.h"
 #include "painter.h"
 #include "rotateaction.h"
@@ -84,7 +86,7 @@ ApplicationWindow::ApplicationWindow():
        dock2->setObjectName("Blocks");
 
        //      Create status bar
-       zoomIndicator = new QLabel("Grid: 12.0\" Zoom: 12.5%");
+       zoomIndicator = new QLabel("Grid: 12.0\" BU: Inch");
        statusBar()->addPermanentWidget(zoomIndicator);
        statusBar()->showMessage(tr("Ready"));
 
@@ -119,6 +121,11 @@ void ApplicationWindow::FileOpen(void)
 {
        QString filename = QFileDialog::getOpenFileName(this, tr("Open Drawing"),
                "", tr("Architektonas files (*.drawing)"));
+
+       // User cancelled open
+       if (filename.isEmpty())
+               return;
+
        FILE * file = fopen(filename.toAscii().data(), "r");
 
        if (file == 0)
@@ -529,20 +536,39 @@ void ApplicationWindow::HandleConnection(void)
                for(int j=i+1; j<itemsSelected; j++)
                {
                        Object * obj2 = drawing->document.SelectedItem(j);
-                       double t, u;
+                       double t, u, v, w;
 
-                       if ((obj1->type != OTLine) || (obj2->type != OTLine))
-                               continue;
+//                     if ((obj1->type != OTLine) || (obj2->type != OTLine))
+//                             continue;
 
+                       if ((obj1->type == OTLine) && (obj2->type == OTLine))
+                       {
 //printf("Testing objects for intersection (%X, %X)...\n", obj1, obj2);
-                       int intersects = Geometry::Intersects((Line *)obj1, (Line *)obj2, &t, &u);
+                               int intersects = Geometry::Intersects((Line *)obj1, (Line *)obj2, &t, &u);
 //printf("  (%s) --> t=%lf, u=%lf\n", (intersects ? "true" : "FALSE"), t, u);
 
-                       if (intersects)
+                               if (intersects)
+                               {
+       //printf("Connecting objects (%X, %X)...\n", obj1, obj2);
+                                       obj1->Connect(obj2, u);
+                                       obj2->Connect(obj1, t);
+                               }
+                       }
+                       else if (((obj1->type == OTLine) && (obj2->type == OTDimension))
+                               || ((obj2->type == OTLine) && (obj1->type == OTDimension)))
                        {
-printf("Connecting objects (%X, %X)...\n", obj1, obj2);
-                               obj1->Connect(obj2, u);
-                               obj2->Connect(obj1, t);
+printf("Testing Line<->Dimension intersection...\n");
+                               Line * line = (Line *)(obj1->type == OTLine ? obj1 : obj2);
+                               Dimension * dim = (Dimension *)(obj1->type == OTDimension ? obj1 : obj2);
+
+                               int intersects = Geometry::Intersects(line, dim, &t, &u);
+printf("   -> intersects = %i, t=%lf, u=%lf\n", intersects, t, u);
+
+                               if (intersects)
+                               {
+                                       obj1->Connect(obj2, u);
+                                       obj2->Connect(obj1, t);
+                               }
                        }
                }
        }