From 098cd44f2140d5390e7f26816c8a0a78375f53c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20Br=C3=A6strup=20Sayoc?= Date: Thu, 6 Apr 2023 22:23:02 +0200 Subject: [PATCH] [TechDraw] Add customizability for dimension line spacing --- .../Gui/DlgPrefsTechDrawDimensions.ui | 34 +++++++++++++++++++ src/Mod/TechDraw/Gui/QGIViewDimension.cpp | 25 +++++++++----- src/Mod/TechDraw/Gui/QGIViewDimension.h | 1 + .../TechDraw/Gui/ViewProviderDimension.cpp | 7 ++-- src/Mod/TechDraw/Gui/ViewProviderDimension.h | 3 +- 5 files changed, 58 insertions(+), 12 deletions(-) diff --git a/src/Mod/TechDraw/Gui/DlgPrefsTechDrawDimensions.ui b/src/Mod/TechDraw/Gui/DlgPrefsTechDrawDimensions.ui index 958eb04f9b..f64d0e683a 100644 --- a/src/Mod/TechDraw/Gui/DlgPrefsTechDrawDimensions.ui +++ b/src/Mod/TechDraw/Gui/DlgPrefsTechDrawDimensions.ui @@ -559,6 +559,40 @@ Multiplier of 'Font Size' + + + + + true + + + + Controls the size of spacing between dimension line and dimension text for ISO dimensions. + + + Line Spacing - ISO + + + + + + + <html><head/><body><p>Controls the size of spacing between dimension line and dimension text. Value * linewidth is the line spacing.</p></body></html> + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + LineSpacingFactorISO + + + Mod/TechDraw/Dimensions + + + diff --git a/src/Mod/TechDraw/Gui/QGIViewDimension.cpp b/src/Mod/TechDraw/Gui/QGIViewDimension.cpp index 168bff0b35..3a3371b7a1 100644 --- a/src/Mod/TechDraw/Gui/QGIViewDimension.cpp +++ b/src/Mod/TechDraw/Gui/QGIViewDimension.cpp @@ -849,7 +849,7 @@ Base::Vector2d QGIViewDimension::getIsoRefOutsetPoint(const Base::BoundBox2d& la { return Base::Vector2d(right ? labelRectangle.MinX - getDefaultIsoReferenceLineOverhang() : labelRectangle.MaxX + getDefaultIsoReferenceLineOverhang(), - labelRectangle.MinY - getDefaultIsoDimensionLineSpacing()); + labelRectangle.MinY - getIsoDimensionLineSpacing()); } Base::Vector2d QGIViewDimension::getIsoRefJointPoint(const Base::BoundBox2d& labelRectangle, @@ -1146,10 +1146,10 @@ bool QGIViewDimension::constructDimensionArc( double borderRadius = (labelRectangle.GetCenter() - arcCenter).Length(); if (borderRadius > arcRadius) { - borderRadius = arcRadius + getDefaultIsoDimensionLineSpacing(); + borderRadius = arcRadius + getIsoDimensionLineSpacing(); } else if (borderRadius < arcRadius) { - borderRadius = arcRadius - getDefaultIsoDimensionLineSpacing(); + borderRadius = arcRadius - getIsoDimensionLineSpacing(); } // ISO oriented labels are symmetrical along their center axis @@ -1576,7 +1576,7 @@ void QGIViewDimension::drawDistanceExecutive(const Base::Vector2d& startPoint, labelCenter + Base::Vector2d::FromPolar( placementFactor - * (labelRectangle.Height() * 0.5 + getDefaultIsoDimensionLineSpacing()), + * (labelRectangle.Height() * 0.5 + getIsoDimensionLineSpacing()), lineAngle + M_PI_2)); // Compute the dimensional line start and end crossings with (virtual) extension lines @@ -1786,7 +1786,7 @@ void QGIViewDimension::drawDistanceOverride(const Base::Vector2d& startPoint, labelCenter + Base::Vector2d::FromPolar( placementFactor - * (labelRectangle.Height() * 0.5 + getDefaultIsoDimensionLineSpacing()), + * (labelRectangle.Height() * 0.5 + getIsoDimensionLineSpacing()), lineAngle + M_PI_2)); // Compute the dimensional line start and end crossings with (virtual) extension lines @@ -1990,7 +1990,7 @@ void QGIViewDimension::drawRadiusExecutive(const Base::Vector2d& centerPoint, double lineAngle; double devAngle = computeLineAndLabelAngles(centerPoint, labelCenter, labelRectangle.Height() * 0.5 - + getDefaultIsoDimensionLineSpacing(), + + getIsoDimensionLineSpacing(), lineAngle, labelAngle); // Is there point on the arc, where line from center intersects it perpendicularly? @@ -2014,7 +2014,7 @@ void QGIViewDimension::drawRadiusExecutive(const Base::Vector2d& centerPoint, devAngle = computeLineAndLabelAngles(arcPoint, labelCenter, labelRectangle.Height() * 0.5 - + getDefaultIsoDimensionLineSpacing(), + + getIsoDimensionLineSpacing(), lineAngle, labelAngle); lineAngle = DrawUtil::angleComposition(lineAngle, M_PI); @@ -2239,7 +2239,7 @@ void QGIViewDimension::drawDiameter(TechDraw::DrawViewDimension* dimension, double lineAngle; double devAngle = computeLineAndLabelAngles(curveCenter, labelCenter, labelRectangle.Height() * 0.5 - + getDefaultIsoDimensionLineSpacing(), + + getIsoDimensionLineSpacing(), lineAngle, labelAngle); // Correct the label center distance projected on the leader line and subtract radius @@ -2437,7 +2437,7 @@ void QGIViewDimension::drawAngle(TechDraw::DrawViewDimension* dimension, arcRadius = labelDirection.Length() - placementFactor - * (labelRectangle.Height() * 0.5 + getDefaultIsoDimensionLineSpacing()); + * (labelRectangle.Height() * 0.5 + getIsoDimensionLineSpacing()); if (arcRadius < 0.0) { arcRadius = labelDirection.Length(); } @@ -2633,6 +2633,13 @@ double QGIViewDimension::getDefaultIsoDimensionLineSpacing() const return Rez::appX(m_lineWidth * 2.0); } +// Returns the line spacing for ISO dimension based on the user inputted factor +double QGIViewDimension::getIsoDimensionLineSpacing() const +{ + auto vp = static_cast(getViewProvider(getViewObject())); + return Rez::appX(m_lineWidth * vp->LineSpacingFactorISO.getValue()); +} + double QGIViewDimension::getDefaultIsoReferenceLineOverhang() const { // Not specified directly but seems to be exactly Line Width according to ISO 129-1 Annex A diff --git a/src/Mod/TechDraw/Gui/QGIViewDimension.h b/src/Mod/TechDraw/Gui/QGIViewDimension.h index 70c25d7d88..ce6708a68a 100644 --- a/src/Mod/TechDraw/Gui/QGIViewDimension.h +++ b/src/Mod/TechDraw/Gui/QGIViewDimension.h @@ -294,6 +294,7 @@ private: double getDefaultExtensionLineOverhang() const; double getDefaultArrowTailLength() const; double getDefaultIsoDimensionLineSpacing() const; + double getIsoDimensionLineSpacing() const; double getDefaultIsoReferenceLineOverhang() const; double getDefaultAsmeHorizontalLeaderLength() const; diff --git a/src/Mod/TechDraw/Gui/ViewProviderDimension.cpp b/src/Mod/TechDraw/Gui/ViewProviderDimension.cpp index 63a50ae4cc..8732c238d6 100644 --- a/src/Mod/TechDraw/Gui/ViewProviderDimension.cpp +++ b/src/Mod/TechDraw/Gui/ViewProviderDimension.cpp @@ -1,4 +1,4 @@ -/*************************************************************************** +/*************************************************************************** * Copyright (c) 2004 Jürgen Riegel * * Copyright (c) 2012 Luke Parry * * * @@ -86,6 +86,8 @@ ViewProviderDimension::ViewProviderDimension() "Adjusts the gap between dimension point and extension line"); ADD_PROPERTY_TYPE(GapFactorASME, (Preferences::GapASME()), group, App::Prop_None, "Adjusts the gap between dimension point and extension line"); + ADD_PROPERTY_TYPE(LineSpacingFactorISO, (2.0), group, App::Prop_None, + "Adjusts the gap between dimension line and dimension text"); StackOrder.setValue(ZVALUE::DIMENSION); } @@ -198,7 +200,8 @@ void ViewProviderDimension::onChanged(const App::Property* p) (p == &RenderingExtent) || (p == &FlipArrowheads) || (p == &GapFactorASME) || - (p == &GapFactorISO)) { + (p == &GapFactorISO) || + p == &LineSpacingFactorISO) { QGIView* qgiv = getQView(); if (qgiv) { qgiv->updateView(true); diff --git a/src/Mod/TechDraw/Gui/ViewProviderDimension.h b/src/Mod/TechDraw/Gui/ViewProviderDimension.h index 783c16943a..8a72f9abec 100644 --- a/src/Mod/TechDraw/Gui/ViewProviderDimension.h +++ b/src/Mod/TechDraw/Gui/ViewProviderDimension.h @@ -1,4 +1,4 @@ -/*************************************************************************** +/*************************************************************************** * Copyright (c) 2004 Jürgen Riegel * * Copyright (c) 2012 Luke Parry * * * @@ -66,6 +66,7 @@ public: App::PropertyFloat GapFactorISO; App::PropertyFloat GapFactorASME; + App::PropertyFloat LineSpacingFactorISO; void attach(App::DocumentObject *) override; bool useNewSelectionModel() const override {return false;}