X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fapplicationwindow.cpp;h=23629bca9976e3ef78a5780e5b45d4da6169bada;hb=fd5a80446b2abfdfb9d8951fcc03fb1b55ad707c;hp=cb4f020f5e9ab531217feeef9f62bdd7d076d453;hpb=c58b8a9f8b1ae5494857fc423ed8e33b2bbcf329;p=architektonas diff --git a/src/applicationwindow.cpp b/src/applicationwindow.cpp index cb4f020..23629bc 100644 --- a/src/applicationwindow.cpp +++ b/src/applicationwindow.cpp @@ -37,6 +37,7 @@ #include "drawlineaction.h" #include "fileio.h" #include "generaltab.h" +#include "geometry.h" #include "layerwidget.h" #include "mirroraction.h" #include "painter.h" @@ -500,6 +501,59 @@ else } +void ApplicationWindow::HandleConnection(void) +{ +//double tt = Geometry::ParameterOfLineAndPoint(Vector(0, 0), Vector(10, 0), Vector(8, 2)); +//printf("Parameter of point @ (8,2) of line (0,0), (10,0): %lf\n", tt); + int itemsSelected = drawing->document.ItemsSelected(); + + // If nothing selected, do nothing + if (itemsSelected == 0) + { + statusBar()->showMessage(tr("No objects selected to connect.")); + return; + } + + // If one thing selected, do nothing + if (itemsSelected == 1) + { + statusBar()->showMessage(tr("Nothing to connect object to.")); + return; + } + + // This is O(n^2 / 2) :-P + for(int i=0; idocument.SelectedItem(i); + + for(int j=i+1; jdocument.SelectedItem(j); + double t, u; + + if ((obj1->type != OTLine) || (obj2->type != OTLine)) + continue; + +//printf("Testing objects for intersection (%X, %X)...\n", obj1, obj2); + int intersects = Geometry::Intersects((Line *)obj1, (Line *)obj2, &t, &u); +//printf(" (%s) --> t=%lf, u=%lf\n", (intersects ? "true" : "FALSE"), t, u); + + if (intersects) + { +printf("Connecting objects (%X, %X)...\n", obj1, obj2); + obj1->Connect(obj2, u); + obj2->Connect(obj1, t); + } + } + } +} + + +void ApplicationWindow::HandleDisconnection(void) +{ +} + + void ApplicationWindow::HandleGridSizeInPixels(int size) { drawing->SetGridSize(size); @@ -612,8 +666,10 @@ void ApplicationWindow::CreateActions(void) connect(groupAct, SIGNAL(triggered()), this, SLOT(HandleGrouping())); connectAct = CreateAction(tr("&Connect"), tr("Connect"), tr("Connect objects at point."), QIcon(":/res/connect-tool.png"), QKeySequence("c,c")); + connect(connectAct, SIGNAL(triggered()), this, SLOT(HandleConnection())); disconnectAct = CreateAction(tr("&Disconnect"), tr("Disconnect"), tr("Disconnect objects joined at point."), QIcon(":/res/disconnect-tool.png"), QKeySequence("d,d")); + connect(disconnectAct, SIGNAL(triggered()), this, SLOT(HandleDisconnection())); mirrorAct = CreateAction(tr("&Mirror"), tr("Mirror"), tr("Mirror selected objects around a line."), QIcon(":/res/mirror-tool.png"), QKeySequence("m,i"), true); connect(mirrorAct, SIGNAL(triggered()), this, SLOT(MirrorTool()));