X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fapplicationwindow.cpp;h=effcc1eb59904eefedb95ec5a66f019ea0e8a9e8;hb=9590e4ed45fd4e05eccc16bd8e9d51596aea5a6d;hp=23629bca9976e3ef78a5780e5b45d4da6169bada;hpb=565c33c91ea355528145ba94b31b2e44309d0834;p=architektonas diff --git a/src/applicationwindow.cpp b/src/applicationwindow.cpp index 23629bc..effcc1e 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" @@ -529,20 +531,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); + } } } }