From: Shamus Hammons Date: Tue, 6 Aug 2013 23:50:46 +0000 (-0500) Subject: Add Dimension sizing. X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?p=architektonas;a=commitdiff_plain;h=3047a65eb459ddb4a85e1a694aa2b2491437472e Add Dimension sizing. --- diff --git a/src/applicationwindow.cpp b/src/applicationwindow.cpp index 96b13ca..bf181a8 100644 --- a/src/applicationwindow.cpp +++ b/src/applicationwindow.cpp @@ -38,7 +38,10 @@ #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))); } diff --git a/src/applicationwindow.h b/src/applicationwindow.h index f20cd35..0db2265 100644 --- a/src/applicationwindow.h +++ b/src/applicationwindow.h @@ -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; diff --git a/src/container.cpp b/src/container.cpp index 25079d9..e909c04 100644 --- a/src/container.cpp +++ b/src/container.cpp @@ -421,6 +421,25 @@ void Container::MoveSelectedContentsTo(Container * newContainer) } +void Container::ResizeAllDimensions(double newSize) +{ + for(std::vector::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 diff --git a/src/container.h b/src/container.h index d94357c..6be759d 100644 --- a/src/container.h +++ b/src/container.h @@ -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 diff --git a/src/dimension.cpp b/src/dimension.cpp index 203e26f..2b49ff8 100644 --- a/src/dimension.cpp +++ b/src/dimension.cpp @@ -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()); diff --git a/src/dimension.h b/src/dimension.h index 4afc2ac..252c933 100644 --- a/src/dimension.h +++ b/src/dimension.h @@ -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;