From 6731e605f516488280de5c3febe9cccb80e10a53 Mon Sep 17 00:00:00 2001 From: PaddleStroke Date: Sun, 2 Nov 2025 15:51:14 +0100 Subject: [PATCH] Sketcher: Constraint rendering (#24534) * Sketcher: Constraint rendering * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update EditModeConstraintCoinManager.h * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update EditModeConstraintCoinManager.cpp * Update SoDatumLabel.cpp * Update SoDatumLabel.cpp * Update EditModeConstraintCoinManager.cpp * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update EditModeConstraintCoinManager.cpp * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * revert changes drawing the box around fx * Update EditModeConstraintCoinManager.cpp * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../Gui/EditModeConstraintCoinManager.cpp | 88 +++++++++++-------- .../Gui/EditModeConstraintCoinManager.h | 2 +- 2 files changed, 50 insertions(+), 40 deletions(-) diff --git a/src/Mod/Sketcher/Gui/EditModeConstraintCoinManager.cpp b/src/Mod/Sketcher/Gui/EditModeConstraintCoinManager.cpp index 2c855d5f94..5698fa6531 100644 --- a/src/Mod/Sketcher/Gui/EditModeConstraintCoinManager.cpp +++ b/src/Mod/Sketcher/Gui/EditModeConstraintCoinManager.cpp @@ -905,9 +905,7 @@ Restart: asciiText->datumtype = SoDatumLabel::ARCLENGTH; asciiText->param1 = Constr->LabelDistance; asciiText->string = - SbString(std::string("◠ ") - .append(getPresentationString(Constr).toUtf8()) - .c_str()); + SbString(getPresentationString(Constr, "◠ ").toUtf8().constData()); asciiText->pnts.setNum(3); SbVec3f* verts = asciiText->pnts.startEditing(); @@ -1517,7 +1515,7 @@ Restart: // Get display string with units hidden if so requested asciiText->string = - SbString(getPresentationString(Constr).toUtf8().constData()); + SbString(getPresentationString(Constr, "⌀").toUtf8().constData()); asciiText->datumtype = SoDatumLabel::DIAMETER; asciiText->param1 = Constr->LabelDistance; @@ -1600,7 +1598,7 @@ Restart: } else { asciiText->string = - SbString(getPresentationString(Constr).toUtf8().constData()); + SbString(getPresentationString(Constr, "R").toUtf8().constData()); } asciiText->datumtype = SoDatumLabel::RADIUS; @@ -1877,10 +1875,8 @@ void EditModeConstraintCoinManager::updateConstraintColor( s->getChild(static_cast(ConstraintNodePosition::DatumLabelIndex))); l->textColor = constraint->isActive - ? ViewProviderSketchCoinAttorney::constraintHasExpression(viewProvider, i) - ? drawingParameters.ExprBasedConstrDimColor - : (constraint->isDriving ? drawingParameters.ConstrDimColor - : drawingParameters.NonDrivingConstrDimColor) + ? (constraint->isDriving ? drawingParameters.ConstrDimColor + : drawingParameters.NonDrivingConstrDimColor) : drawingParameters.DeactivatedConstrDimColor; } else if (hasMaterial) { @@ -2102,12 +2098,9 @@ void EditModeConstraintCoinManager::rebuildConstraintNodes( } } -QString EditModeConstraintCoinManager::getPresentationString(const Constraint* constraint) +QString EditModeConstraintCoinManager::getPresentationString(const Constraint* constraint, + std::string prefix) { - if (!constraint->isActive) { - return QStringLiteral(" "); - } - /** * Hide units if * - user has requested it, @@ -2143,38 +2136,55 @@ QString EditModeConstraintCoinManager::getPresentationString(const Constraint* c auto valueStr = QString::fromStdString(constrPresValue); auto fixedValueStr = fixValueStr(valueStr, unitStr).value_or(valueStr); - switch (constraint->Type) { - case Sketcher::Diameter: - fixedValueStr.prepend(QChar(0x2300)); - break; - case Sketcher::Radius: - fixedValueStr.prepend(QLatin1Char('R')); - break; - default: - break; + if (!prefix.empty()) { + fixedValueStr.prepend(QString::fromStdString(prefix)); } - if (!constraintParameters.bShowDimensionalName || constraint->Name.empty()) { - return fixedValueStr; + if (constraintParameters.bShowDimensionalName && !constraint->Name.empty()) { + /** + * Create the representation string from the user defined format string + * Format options are: + * %N - the constraint name parameter + * %V - the value of the dimensional constraint, including any unit characters + */ + auto sDimFmt {constraintParameters.sDimensionalStringFormat}; + if (!sDimFmt.contains(QLatin1String("%V")) + && !sDimFmt.contains(QLatin1String("%N"))) { // using default format "%N = %V" + + fixedValueStr = QString::fromStdString(constraint->Name) + QString::fromLatin1(" = ") + + fixedValueStr; + } + else { + sDimFmt.replace(QLatin1String("%N"), QString::fromStdString(constraint->Name)); + sDimFmt.replace(QLatin1String("%V"), fixedValueStr); + fixedValueStr = sDimFmt; + } } - /** - * Create the representation string from the user defined format string - * Format options are: - * %N - the constraint name parameter - * %V - the value of the dimensional constraint, including any unit characters - */ - auto sDimFmt {constraintParameters.sDimensionalStringFormat}; - if (!sDimFmt.contains(QLatin1String("%V")) - && !sDimFmt.contains(QLatin1String("%N"))) { // using default format "%N = %V" - - return QString::fromStdString(constraint->Name) + QString::fromLatin1(" = ") + valueStr; + int constraintIndex = -1; + const auto& constrlist = ViewProviderSketchCoinAttorney::getConstraints(viewProvider); + auto it = std::find(constrlist.begin(), constrlist.end(), constraint); + if (it != constrlist.end()) { + constraintIndex = std::distance(constrlist.begin(), it); + if (ViewProviderSketchCoinAttorney::constraintHasExpression(viewProvider, + constraintIndex)) { + fixedValueStr += QStringLiteral(" (ƒ𝑥)"); + } } - sDimFmt.replace(QLatin1String("%N"), QString::fromStdString(constraint->Name)); - sDimFmt.replace(QLatin1String("%V"), fixedValueStr); + if (!constraint->isDriving) { + fixedValueStr = QStringLiteral("(") + fixedValueStr + QStringLiteral(")"); + } - return sDimFmt; + if (!constraint->isActive) { + QString result = QStringLiteral("\u0336"); + for (auto c : std::as_const(fixedValueStr)) { + result += c + QStringLiteral("\u0336"); + } + return result; + } + + return fixedValueStr; } std::set EditModeConstraintCoinManager::detectPreselectionConstr(const SoPickedPoint* Point) diff --git a/src/Mod/Sketcher/Gui/EditModeConstraintCoinManager.h b/src/Mod/Sketcher/Gui/EditModeConstraintCoinManager.h index cb936bd84c..789191aed0 100644 --- a/src/Mod/Sketcher/Gui/EditModeConstraintCoinManager.h +++ b/src/Mod/Sketcher/Gui/EditModeConstraintCoinManager.h @@ -153,7 +153,7 @@ private: /// Return display string for constraint including hiding units if // requested. - QString getPresentationString(const Sketcher::Constraint* constraint); + QString getPresentationString(const Sketcher::Constraint* constraint, std::string prefix = ""); /// Returns the size that Coin should display the indicated image at SbVec3s getDisplayedSize(const SoImage*) const;