diff --git a/src/Mod/TechDraw/App/DrawViewDimension.cpp b/src/Mod/TechDraw/App/DrawViewDimension.cpp index dd98dba830..c0b94bb77d 100644 --- a/src/Mod/TechDraw/App/DrawViewDimension.cpp +++ b/src/Mod/TechDraw/App/DrawViewDimension.cpp @@ -231,6 +231,8 @@ DrawViewDimension::DrawViewDimension() "If true, area dimensions return the area of the face minus the areas of any enclosed faces. \ If false, the area of the face's outer boundary is returned."); + ADD_PROPERTY_TYPE(ShowUnits, (Preferences::showUnits()), "Format", App::Prop_None, + "Show or hide the units."); measurement = new Measure::Measurement(); // TODO: should have better initial datumLabel position than (0, 0) in the DVP?? something // closer to the object being measured? @@ -2076,7 +2078,7 @@ bool DrawViewDimension::hasOverUnderTolerance() const bool DrawViewDimension::showUnits() const { - return Preferences::getPreferenceGroup("Dimensions")->GetBool("ShowUnits", false); + return ShowUnits.getValue(); } bool DrawViewDimension::useDecimals() const diff --git a/src/Mod/TechDraw/App/DrawViewDimension.h b/src/Mod/TechDraw/App/DrawViewDimension.h index c45ab4f0d1..5ee5380e34 100644 --- a/src/Mod/TechDraw/App/DrawViewDimension.h +++ b/src/Mod/TechDraw/App/DrawViewDimension.h @@ -94,6 +94,8 @@ public: App::PropertyVectorList BoxCorners; App::PropertyBool UseActualArea; + App::PropertyBool ShowUnits; + enum RefType { invalidRef, diff --git a/src/Mod/TechDraw/App/Preferences.cpp b/src/Mod/TechDraw/App/Preferences.cpp index 6577a700fe..ef2c5b625e 100644 --- a/src/Mod/TechDraw/App/Preferences.cpp +++ b/src/Mod/TechDraw/App/Preferences.cpp @@ -682,3 +682,11 @@ bool Preferences::useLegacySvgScaling() { return getPreferenceGroup("General")->GetBool("LegacySvgScaling", false); } + + +bool Preferences::showUnits() +{ + return Preferences::getPreferenceGroup("Dimensions")->GetBool("ShowUnits", false); +} + + diff --git a/src/Mod/TechDraw/App/Preferences.h b/src/Mod/TechDraw/App/Preferences.h index 2a62f585bc..33243531ea 100644 --- a/src/Mod/TechDraw/App/Preferences.h +++ b/src/Mod/TechDraw/App/Preferences.h @@ -159,6 +159,8 @@ public: static bool useLegacySvgScaling(); + static bool showUnits(); + }; diff --git a/src/Mod/TechDraw/Gui/DlgPrefsTechDrawDimensions.ui b/src/Mod/TechDraw/Gui/DlgPrefsTechDrawDimensions.ui index d5c885c36c..ace78652d9 100644 --- a/src/Mod/TechDraw/Gui/DlgPrefsTechDrawDimensions.ui +++ b/src/Mod/TechDraw/Gui/DlgPrefsTechDrawDimensions.ui @@ -6,8 +6,8 @@ 0 0 - 440 - 508 + 495 + 692 @@ -35,7 +35,7 @@ - + 0 @@ -45,7 +45,7 @@ Arrowhead size - + 5.000000000000000 @@ -156,6 +156,11 @@ 0 + + + true + + Append unit to dimension values @@ -183,7 +188,7 @@ - + 0 @@ -193,7 +198,7 @@ Dimension text font size - + 4.000000000000000 @@ -544,7 +549,7 @@ Multiplier of 'Font Size' - + Select the type of dimensioning tools for your toolbar: @@ -562,7 +567,7 @@ This setting is only for the toolbar. Whichever you choose, all tools are always - + While using the Dimension tool you may choose how to handle circles and arcs: @@ -627,9 +632,7 @@ This setting is only for the toolbar. Whichever you choose, all tools are always
Gui/PrefWidgets.h
- - - + cbGlobalDecimals diff --git a/src/Mod/TechDraw/Gui/DlgPrefsTechDrawScale.ui b/src/Mod/TechDraw/Gui/DlgPrefsTechDrawScale.ui index 4a4c6549ac..3402bb854f 100644 --- a/src/Mod/TechDraw/Gui/DlgPrefsTechDrawScale.ui +++ b/src/Mod/TechDraw/Gui/DlgPrefsTechDrawScale.ui @@ -6,8 +6,8 @@ 0 0 - 440 - 342 + 457 + 481
@@ -49,6 +49,19 @@ + + + + Qt::Horizontal + + + + 40 + 20 + + + + @@ -61,49 +74,15 @@ - - - - - 0 - 0 - - - - - 174 - 0 - - - - Default scale for new pages - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - 2 - - - 1.000000000000000 - - - DefaultScale - - - Mod/TechDraw/General - - - - - + + true - View Scale Type + View Custom Scale @@ -150,30 +129,39 @@
- - - - - true - + + + + + 0 + 0 + - - View Custom Scale - - - - - - - Qt::Horizontal - - + - 40 - 20 + 174 + 0 - + + Default scale for new pages + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + 1.000000000000000 + + + DefaultScale + + + Mod/TechDraw/General + + @@ -215,6 +203,39 @@
+ + + + + true + + + + View Scale Type + + + + + + + + true + + + + <html><head/><body><p>If checked, Svg symbols, spreadsheet views and Draft views will use the original (incorrect) scaling method as used in v1.0 and earlier. If unchecked, a more accurate method will be used. </p></body></html> + + + Legacy Symbol Scaling + + + LegacySvgScaling + + + Mod/TechDraw/General + + + @@ -306,7 +327,7 @@ - + @@ -351,7 +372,7 @@ - + 0 @@ -367,10 +388,7 @@ Size of template field click handles - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - + 3.000000000000000 @@ -410,7 +428,7 @@ - + @@ -424,7 +442,7 @@ - <html><head/><body><p><span style=" font-weight:600;">Note:</span> Items in <span style=" font-style:italic;">italics</span> are default values for new objects. They have no effect on existing objects.</p></body></html> + <html><head/><body><p><span style=" font-weight:600;">Note:</span> Items in <span style=" font-style:italic;">italics</span> are default values for new objects. They have no effect on existing objects.</p></body></html> true @@ -452,6 +470,11 @@ QWidget
Gui/QuantitySpinBox.h
+ + Gui::PrefCheckBox + QCheckBox +
Gui/PrefWidgets.h
+
Gui::PrefComboBox QComboBox diff --git a/src/Mod/TechDraw/Gui/DlgPrefsTechDrawScaleImp.cpp b/src/Mod/TechDraw/Gui/DlgPrefsTechDrawScaleImp.cpp index 11c9ad0052..010f000f74 100644 --- a/src/Mod/TechDraw/Gui/DlgPrefsTechDrawScaleImp.cpp +++ b/src/Mod/TechDraw/Gui/DlgPrefsTechDrawScaleImp.cpp @@ -67,6 +67,7 @@ void DlgPrefsTechDrawScaleImp::saveSettings() ui->pdsbCenterScale->onSave(); ui->pdsbTemplateMark->onSave(); ui->pdsbSymbolScale->onSave(); + ui->cbLegacyScale->onSave(); } void DlgPrefsTechDrawScaleImp::loadSettings() @@ -80,6 +81,7 @@ void DlgPrefsTechDrawScaleImp::loadSettings() ui->pdsbTemplateMark->setValue(markDefault); ui->pdsbTemplateMark->onRestore(); ui->pdsbSymbolScale->onRestore(); + ui->cbLegacyScale->onRestore(); } /** diff --git a/src/Mod/TechDraw/Gui/QGIViewDimension.cpp b/src/Mod/TechDraw/Gui/QGIViewDimension.cpp index b390dbd62d..d028a022d0 100644 --- a/src/Mod/TechDraw/Gui/QGIViewDimension.cpp +++ b/src/Mod/TechDraw/Gui/QGIViewDimension.cpp @@ -556,19 +556,6 @@ void QGIDatumLabel::setToleranceString() updateFrameRect(); } -void QGIDatumLabel::setUnitString(QString text) -{ - prepareGeometryChange(); - if (text.isEmpty()) { - m_unitText->hide(); - } - else { - m_unitText->setPlainText(text); - m_unitText->show(); - } - updateFrameRect(); -} - int QGIDatumLabel::getPrecision() { diff --git a/src/Mod/TechDraw/Gui/QGIViewDimension.h b/src/Mod/TechDraw/Gui/QGIViewDimension.h index 70a8efca50..87f300d724 100644 --- a/src/Mod/TechDraw/Gui/QGIViewDimension.h +++ b/src/Mod/TechDraw/Gui/QGIViewDimension.h @@ -84,7 +84,6 @@ public: QFont getFont() const { return m_dimText->font(); } void setDimString(QString text); void setDimString(QString text, qreal maxWidth); - void setUnitString(QString text); void setToleranceString(); void setPrettySel(); void setPrettyPre(); diff --git a/src/Mod/TechDraw/Gui/QGIViewSymbol.cpp b/src/Mod/TechDraw/Gui/QGIViewSymbol.cpp index 8bfe2c5483..f04bbfec13 100644 --- a/src/Mod/TechDraw/Gui/QGIViewSymbol.cpp +++ b/src/Mod/TechDraw/Gui/QGIViewSymbol.cpp @@ -42,6 +42,7 @@ #include "QGCustomSvg.h" #include "QGDisplayArea.h" #include "Rez.h" +#include "ViewProviderSymbol.h" using namespace TechDrawGui; @@ -110,8 +111,14 @@ void QGIViewSymbol::drawSvg() return; } + auto vp = getViewProvider(viewSymbol); + auto vps = dynamic_cast(vp); + if (!vp || !vps) { + return; + } + double scaling{1}; - if (Preferences::useLegacySvgScaling()) { + if (vps->LegacyScaling.getValue()) { scaling = legacyScaler(viewSymbol); } else { scaling = symbolScaler(viewSymbol); @@ -206,18 +213,15 @@ double QGIViewSymbol::symbolScaler(TechDraw::DrawViewSymbol* feature) const matchUnits = matchHeight.captured(1); } - if (matchUnits.isEmpty() || - matchUnits == pxToken) { - scaling *= rezfactor; - } + // if there are no units specified, or the units are px, we just draw the symbol if (matchUnits == mmToken) { auto svgSize = m_svgItem->renderer()->defaultSize(); - auto vpSize = m_svgItem->renderer()->viewBox(); + auto vportSize = m_svgItem->renderer()->viewBox(); // wf: this calculation works, but I don't know why. :( // hints here: https://stackoverflow.com/questions/49866474/get-svg-size-from-qsvgrenderer // and here: https://stackoverflow.com/questions/7544921/qt-qgraphicssvgitem-renders-too-big-0-5-unit-on-each-side - scaling *= rezfactor * vpSize.width() / svgSize.width(); + scaling *= rezfactor * vportSize.width() / svgSize.width(); } return scaling; diff --git a/src/Mod/TechDraw/Gui/TaskCosmeticCircle.cpp b/src/Mod/TechDraw/Gui/TaskCosmeticCircle.cpp index f9aa011f31..0a145bc904 100644 --- a/src/Mod/TechDraw/Gui/TaskCosmeticCircle.cpp +++ b/src/Mod/TechDraw/Gui/TaskCosmeticCircle.cpp @@ -72,6 +72,8 @@ TaskCosmeticCircle::TaskCosmeticCircle(TechDraw::DrawViewPart* partFeat, connect(ui->qsbRadius, qOverload(&QuantitySpinBox::valueChanged), this, &TaskCosmeticCircle::radiusChanged); + connect(ui->rbArc, &QRadioButton::clicked, this, &TaskCosmeticCircle::arcButtonClicked); + } @@ -91,6 +93,11 @@ TaskCosmeticCircle::TaskCosmeticCircle(TechDraw::DrawViewPart* partFeat, ui->setupUi(this); setUiPrimary(); + + connect(ui->qsbRadius, qOverload(&QuantitySpinBox::valueChanged), + this, &TaskCosmeticCircle::radiusChanged); + connect(ui->rbArc, &QRadioButton::clicked, this, &TaskCosmeticCircle::arcButtonClicked); + } TaskCosmeticCircle::~TaskCosmeticCircle() @@ -154,8 +161,13 @@ void TaskCosmeticCircle::setUiPrimary() double radius = (mathPoints[1] - mathPoints[0]).Length() / m_partFeat->getScale(); ui->qsbRadius->setValue(radius); - ui->qsbStartAngle->setValue(Base::toDegrees(DU::angleWithX(mathPoints[1] - mathPoints[0]))); - ui->qsbEndAngle->setValue(Base::toDegrees(DU::angleWithX(mathPoints[2] - mathPoints[0]))); + ui->qsbStartAngle->setValue(0); + ui->qsbEndAngle->setValue(360); + + enableArcWidgets(false); + ui->qsbStartAngle->setEnabled(false); + ui->qsbEndAngle->setEnabled(false); + ui->cbClockwise->setEnabled(false); } void TaskCosmeticCircle::setUiEdit() @@ -174,6 +186,15 @@ void TaskCosmeticCircle::setUiEdit() ui->qsbStartAngle->setValue(Base::toDegrees(m_ce->m_geometry->getStartAngle())); ui->qsbEndAngle->setValue(Base::toDegrees(m_ce->m_geometry->getEndAngle())); + + if (m_ce->m_geometry->getGeomType() == GeomType::ARCOFCIRCLE) { + ui->rbArc->setChecked(true); + enableArcWidgets(true); + } else { + ui->rbArc->setChecked(false); + enableArcWidgets(false); + } + } void TaskCosmeticCircle::radiusChanged() @@ -184,6 +205,23 @@ void TaskCosmeticCircle::radiusChanged() } } +void TaskCosmeticCircle::arcButtonClicked() +{ + if (ui->rbArc->isChecked()) { + enableArcWidgets(true); + } else { + enableArcWidgets(false); + } +} + +void TaskCosmeticCircle::enableArcWidgets(bool newState) +{ + ui->qsbStartAngle->setEnabled(newState); + ui->qsbEndAngle->setEnabled(newState); + ui->cbClockwise->setEnabled(newState); + +} + //****************************************************************************** void TaskCosmeticCircle::createCosmeticCircle(void) @@ -205,8 +243,7 @@ void TaskCosmeticCircle::createCosmeticCircle(void) } TechDraw::BaseGeomPtr bg; - if (ui->qsbStartAngle->value().getValue() == 0.0 && - ui->qsbEndAngle->value().getValue() == 0.0) { + if (!ui->rbArc->isChecked()) { bg = std::make_shared (center, ui->qsbRadius->value().getValue()); } else { bg = std::make_shared(center, ui->qsbRadius->value().getValue(), @@ -234,8 +271,7 @@ void TaskCosmeticCircle::updateCosmeticCircle(void) m_ce->permaRadius = ui->qsbRadius->value().getValue(); TechDraw::BaseGeomPtr bg; - if (ui->qsbStartAngle->value().getValue() == 0.0 && - ui->qsbEndAngle->value().getValue() == 0.0) { + if (!ui->rbArc->isChecked()) { bg = std::make_shared (p0, m_ce->permaRadius); } else { bg = std::make_shared(p0, ui->qsbRadius->value().getValue(), diff --git a/src/Mod/TechDraw/Gui/TaskCosmeticCircle.h b/src/Mod/TechDraw/Gui/TaskCosmeticCircle.h index 55ce1ecac9..c65597d77a 100644 --- a/src/Mod/TechDraw/Gui/TaskCosmeticCircle.h +++ b/src/Mod/TechDraw/Gui/TaskCosmeticCircle.h @@ -66,6 +66,7 @@ public: protected Q_SLOTS: void radiusChanged(); + void arcButtonClicked(); protected: void changeEvent(QEvent *e) override; @@ -76,6 +77,8 @@ protected: void createCosmeticCircle(); void updateCosmeticCircle(); + void enableArcWidgets(bool newState); + private: std::unique_ptr ui; diff --git a/src/Mod/TechDraw/Gui/TaskCosmeticCircle.ui b/src/Mod/TechDraw/Gui/TaskCosmeticCircle.ui index 3e54cbf3d0..b238e20ad5 100644 --- a/src/Mod/TechDraw/Gui/TaskCosmeticCircle.ui +++ b/src/Mod/TechDraw/Gui/TaskCosmeticCircle.ui @@ -7,7 +7,7 @@ 0 0 350 - 390 + 409
@@ -103,7 +103,7 @@ - + @@ -117,7 +117,7 @@ - + @@ -131,7 +131,7 @@ - + @@ -149,14 +149,14 @@ - + - + 0.000000000000000 - + 10.000000000000000 @@ -166,7 +166,7 @@ - + Start angle (conventional) of arc in degrees. @@ -175,13 +175,6 @@ - - - - Arc of Circle - - - @@ -189,8 +182,18 @@ + + + + Check this box to make an arc from start angle to end angle in a clockwise direction. + + + Clockwise Angle + + + - + End angle (conventional) of arc in degrees. @@ -206,13 +209,13 @@ - - + + - Check this box to make an arc from start angle to end angle in a clockwise direction. + Select to enter angles and create a circular arc. - Clockwise Angle + Arc of Circle diff --git a/src/Mod/TechDraw/Gui/ViewProviderSymbol.cpp b/src/Mod/TechDraw/Gui/ViewProviderSymbol.cpp index d15b5f2adb..d41d311588 100644 --- a/src/Mod/TechDraw/Gui/ViewProviderSymbol.cpp +++ b/src/Mod/TechDraw/Gui/ViewProviderSymbol.cpp @@ -24,9 +24,15 @@ #include "PreCompiled.h" #include + +#include + +#include "QGIViewSymbol.h" #include "ViewProviderSymbol.h" using namespace TechDrawGui; +using namespace TechDraw; + PROPERTY_SOURCE(TechDrawGui::ViewProviderSymbol, TechDrawGui::ViewProviderDrawingView) @@ -36,6 +42,11 @@ PROPERTY_SOURCE(TechDrawGui::ViewProviderSymbol, TechDrawGui::ViewProviderDrawin ViewProviderSymbol::ViewProviderSymbol() { sPixmap = "TechDraw_TreeSymbol"; + + ADD_PROPERTY_TYPE(LegacyScaling, (Preferences::useLegacySvgScaling()), "Svg Scaling", App::Prop_None, + "If true, Svg will be scaled using the original (v1.0 and earlier) scaling method.\ + If false, a more accurate method will be used."); + } ViewProviderSymbol::~ViewProviderSymbol() @@ -55,6 +66,18 @@ void ViewProviderSymbol::updateData(const App::Property* prop) ViewProviderDrawingView::updateData(prop); } +void ViewProviderSymbol::onChanged(const App::Property* prop) +{ + if (prop == &(LegacyScaling)) { + QGIView* qgiv = getQView(); + if (qgiv) { + qgiv->updateView(true); + } + } + + ViewProviderDrawingView::onChanged(prop); +} + TechDraw::DrawViewSymbol* ViewProviderSymbol::getViewObject() const { return dynamic_cast(pcObject); diff --git a/src/Mod/TechDraw/Gui/ViewProviderSymbol.h b/src/Mod/TechDraw/Gui/ViewProviderSymbol.h index 23053c601f..67e31603ab 100644 --- a/src/Mod/TechDraw/Gui/ViewProviderSymbol.h +++ b/src/Mod/TechDraw/Gui/ViewProviderSymbol.h @@ -43,8 +43,11 @@ public: /// destructor ~ViewProviderSymbol() override; + App::PropertyBool LegacyScaling; + bool useNewSelectionModel() const override {return false;} void updateData(const App::Property*) override; + void onChanged(const App::Property* prop) override; TechDraw::DrawViewSymbol* getViewObject() const override; };