X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fapplicationwindow.cpp;h=5261dd11a2488037d601f1b0e44e836edb51f16f;hb=4d6ba8a6eb781dbee818b6a55d21df7b52468936;hp=23629bca9976e3ef78a5780e5b45d4da6169bada;hpb=fd5a80446b2abfdfb9d8951fcc03fb1b55ad707c;p=architektonas diff --git a/src/applicationwindow.cpp b/src/applicationwindow.cpp index 23629bc..5261dd1 100644 --- a/src/applicationwindow.cpp +++ b/src/applicationwindow.cpp @@ -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; jdocument.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); + } } } }