]> Shamusworld >> Repos - architektonas/commitdiff
Add Dimension sizing.
authorShamus Hammons <jlhamm@acm.org>
Tue, 6 Aug 2013 23:50:46 +0000 (18:50 -0500)
committerShamus Hammons <jlhamm@acm.org>
Tue, 6 Aug 2013 23:50:46 +0000 (18:50 -0500)
src/applicationwindow.cpp
src/applicationwindow.h
src/container.cpp
src/container.h
src/dimension.cpp
src/dimension.h

index 96b13ca8b6a66964d8094784d17f062d96342ab2..bf181a882d50629fb27c30e079a34c4ba29af86f 100644 (file)
 #include "settingsdialog.h"
 
 
-ApplicationWindow::ApplicationWindow(): settings("Underground Software", "Architektonas")
+ApplicationWindow::ApplicationWindow():
+       baseUnitInput(new QLineEdit),
+       dimensionSizeInput(new QLineEdit),
+       settings("Underground Software", "Architektonas")
 {
        drawing = new DrawingView(this);
        drawing->setMouseTracking(true);                // We want *all* mouse events...!
@@ -292,11 +295,13 @@ when zooming in, new origin will be (xCenter - origin.x) / 2, (yCenter - origin.
        // This just zooms leaving origin intact... should zoom in at the current center! [DONE]
        // This should actually be calculated by drawing->gridPixels / grid size.
        Painter::zoom *= zoomFactor;
-       drawing->gridSpacing = 12.0 / Painter::zoom;
+       drawing->gridSpacing = drawing->gridPixels / Painter::zoom;
 //     zoomIndicator->setText(QString("Grid: %2\" Zoom: %1%").arg(Painter::zoom * 100.0 * SCREEN_ZOOM).arg(drawing->gridSpacing));
        zoomIndicator->setText(QString("Grid: %1\", BU: Inch").arg(drawing->gridSpacing));
        drawing->UpdateGridBackground();
        drawing->update();
+
+       baseUnitInput->setText(QString("%1").arg(drawing->gridSpacing));
 }
 
 
@@ -329,11 +334,13 @@ x 2 = (-426, -301)
 //printf("Zoom out...\n");
        // This just zooms leaving origin intact... should zoom out at the current center! [DONE]
        Painter::zoom /= zoomFactor;
-       drawing->gridSpacing = 12.0 / Painter::zoom;
+       drawing->gridSpacing = drawing->gridPixels / Painter::zoom;
 //     zoomIndicator->setText(QString("Grid: %2\" Zoom: %1%").arg(Painter::zoom * 100.0 * SCREEN_ZOOM).arg(drawing->gridSpacing));
        zoomIndicator->setText(QString("Grid: %1\", BU: Inch").arg(drawing->gridSpacing));
        drawing->UpdateGridBackground();
        drawing->update();
+
+       baseUnitInput->setText(QString("%1").arg(drawing->gridSpacing));
 }
 
 
@@ -476,11 +483,30 @@ void ApplicationWindow::HandleGridSizeInBaseUnits(QString text)
        double value = text.toDouble(&ok);
 
        // Nothing parsable to a double, so quit...
-       if (!ok)
+       if (!ok || value == 0)
                return;
 
        drawing->gridSpacing = value;
        Painter::zoom = drawing->gridPixels / drawing->gridSpacing;
+       drawing->UpdateGridBackground();
+       drawing->update();
+}
+
+
+void ApplicationWindow::HandleDimensionSize(QString text)
+{
+       // Parse the text...
+       bool ok;
+       double value = text.toDouble(&ok);
+
+       // Nothing parsable to a double, so quit...
+       if (!ok || value == 0)
+               return;
+
+       drawing->document.ResizeAllDimensions(value);
+//     drawing->gridSpacing = value;
+//     Painter::zoom = drawing->gridPixels / drawing->gridSpacing;
+//     drawing->UpdateGridBackground();
        drawing->update();
 }
 
@@ -649,8 +675,9 @@ void ApplicationWindow::CreateToolbars(void)
 
        QSpinBox * spinbox = new QSpinBox;
        toolbar->addWidget(spinbox);
-       QLineEdit * lineedit = new QLineEdit;
-       toolbar->addWidget(lineedit);
+//     QLineEdit * lineedit = new QLineEdit;
+       toolbar->addWidget(baseUnitInput);
+       toolbar->addWidget(dimensionSizeInput);
 
        toolbar = addToolBar(tr("Edit"));
        toolbar->setObjectName("Edit");
@@ -669,9 +696,10 @@ void ApplicationWindow::CreateToolbars(void)
 
        spinbox->setRange(4, 256);
        spinbox->setValue(12);
-       lineedit->setText("12");
+       baseUnitInput->setText("12");
        connect(spinbox, SIGNAL(valueChanged(int)), this, SLOT(HandleGridSizeInPixels(int)));
-       connect(lineedit, SIGNAL(textChanged(QString)), this, SLOT(HandleGridSizeInBaseUnits(QString)));
+       connect(baseUnitInput, SIGNAL(textChanged(QString)), this, SLOT(HandleGridSizeInBaseUnits(QString)));
+       connect(dimensionSizeInput, SIGNAL(textChanged(QString)), this, SLOT(HandleDimensionSize(QString)));
 }
 
 
index f20cd358fc1bf36f59b50033921f6e799886220e..0db2265340fb9969ff79dbe7da1834c257438626 100644 (file)
@@ -44,6 +44,7 @@ class ApplicationWindow: public QMainWindow
                void HandleGrouping(void);
                void HandleGridSizeInPixels(int);
                void HandleGridSizeInBaseUnits(QString);
+               void HandleDimensionSize(QString);
 
        private:
                void ClearUIToolStatesExcept(QAction *);
@@ -62,6 +63,8 @@ class ApplicationWindow: public QMainWindow
                AboutWindow * aboutWin;
                QLabel * zoomIndicator;
                QString documentName;
+               QLineEdit * baseUnitInput;
+               QLineEdit * dimensionSizeInput;
 
                QSettings settings;
 
index 25079d972e9cb0fb3f6ba925a40a3282baa69af6..e909c04ae14b1ba8f9a7e6c0af4b2464cf76aff0 100644 (file)
@@ -421,6 +421,25 @@ void Container::MoveSelectedContentsTo(Container * newContainer)
 }
 
 
+void Container::ResizeAllDimensions(double newSize)
+{
+       for(std::vector<Object *>::iterator i=objects.begin(); i!=objects.end(); i++)
+       {
+//             Object * object = *i;
+
+               if ((*i)->type == OTDimension)
+//             if (object->type == OTDimension)
+               {
+                       ((Dimension *)(*i))->size = newSize;
+               }
+               if ((*i)->type == OTContainer)
+               {
+                       ((Container *)(*i))->ResizeAllDimensions(newSize);
+               }
+       }
+}
+
+
 /*virtual*/ void Container::Enumerate(FILE * file)
 {
        // Only put "CONTAINER" markers if *not* the top level container
index d94357cd545b837187fb0554beb40705f2b15181..6be759dc0090e87b03c101a6d0cbd2082b914486 100644 (file)
@@ -31,6 +31,7 @@ class Container: public Object
                Object * SelectedItem(unsigned int);
                void MoveContentsTo(Container *);
                void MoveSelectedContentsTo(Container *);
+               void ResizeAllDimensions(double);
 
        protected:
                Vector oldPoint;                                        // Used for dragging
index 203e26ffead1dddb6400d67672fd4d29855f3395..2b49ff8d08e3d7564c5ae2c9c37ad223ec901188 100644 (file)
@@ -95,7 +95,7 @@ I believe they are pixels.
        double t = Vector::Parameter(position, endpoint, endpoint - (unit * 9.0 * size));
 //printf("Dimension::Draw(): t = %lf\n", t);
 
-       if (t > 0.5)
+       if (t > 0.42)
        {
                // Draw main dimension line + arrowheads
                painter->DrawLine(p1, p2);
@@ -113,7 +113,7 @@ I believe they are pixels.
        }
 
        // Draw length of dimension line...
-       painter->SetFont(QFont("Arial", 10.0 * Painter::zoom * size));
+       painter->SetFont(QFont("Arial", 8.0 * Painter::zoom * size));
        Vector v1((p1.x - p2.x) / 2.0, (p1.y - p2.y) / 2.0);
        Point ctr = p2 + v1;
        QString dimText = QString("%1\"").arg(Vector(endpoint - position).Magnitude());
index 4afc2ace68a2ac59c336efd8fac309cfc6c874f9..252c93375dfa3f2a0afe6ab66b8e98614d4046a0 100644 (file)
@@ -38,8 +38,10 @@ class Dimension: public Object
                bool objectWasDragged;
                double length;
                DimensionType dimensionType;
+       public:
                double size;                                            // Size of arrows/text in base units
 
+       private:
                // We use these in lieu of the built-in connected[] array; no reason to
                // do it this way especially
                Connection point1;