From 2da7c9ff17fe5af25c3d4961e8a1b7d65a168d6e Mon Sep 17 00:00:00 2001 From: theo-vt Date: Sun, 27 Jul 2025 22:33:25 -0400 Subject: [PATCH] Sketcher: Change the style of the curves in creation to match the construction/defining flag (#22407) * Sketcher: Change EditCurvesDrawStyle to match either CurvesDrawStyle or CurvesConstructionDrawStyle in editDraw() * Match color as well * Match pattern scale as well * Use enum instead of boolean flag * Update src/Mod/Sketcher/Gui/Utils.h --------- Co-authored-by: Kacper Donat --- src/Mod/Sketcher/Gui/EditModeCoinManager.cpp | 57 +++++++++++++++---- src/Mod/Sketcher/Gui/EditModeCoinManager.h | 7 ++- .../Gui/EditModeCoinManagerParameters.cpp | 1 - .../Gui/EditModeCoinManagerParameters.h | 1 - src/Mod/Sketcher/Gui/Utils.h | 5 ++ src/Mod/Sketcher/Gui/ViewProviderSketch.cpp | 4 +- 6 files changed, 59 insertions(+), 16 deletions(-) diff --git a/src/Mod/Sketcher/Gui/EditModeCoinManager.cpp b/src/Mod/Sketcher/Gui/EditModeCoinManager.cpp index 8335f1da0a..78c5c0e38f 100644 --- a/src/Mod/Sketcher/Gui/EditModeCoinManager.cpp +++ b/src/Mod/Sketcher/Gui/EditModeCoinManager.cpp @@ -185,10 +185,6 @@ void EditModeCoinManager::ParameterObserver::initParameters() [this, &drawingParameters = Client.drawingParameters](const std::string& param) { updatePattern(drawingParameters.ExternalDefiningPattern, param, 0b1111111111111111); }}, - {"CreateLineColor", - [this, drawingParameters = Client.drawingParameters](const std::string& param) { - updateColor(drawingParameters.CreateCurveColor, param); - }}, {"EditedEdgeColor", [this, drawingParameters = Client.drawingParameters](const std::string& param) { updateColor(drawingParameters.CurveColor, param); @@ -609,7 +605,8 @@ void EditModeCoinManager::drawEditMarkers(const std::vector& Edi editModeScenegraphNodes.EditMarkerSet->markerIndex.finishEditing(); } -void EditModeCoinManager::drawEdit(const std::vector& EditCurve) +void EditModeCoinManager::drawEdit(const std::vector& EditCurve, + GeometryCreationMode mode) { editModeScenegraphNodes.EditCurveSet->numVertices.setNum(1); editModeScenegraphNodes.EditCurvesCoordinate->point.setNum(EditCurve.size()); @@ -618,6 +615,8 @@ void EditModeCoinManager::drawEdit(const std::vector& EditCurve) int32_t* index = editModeScenegraphNodes.EditCurveSet->numVertices.startEditing(); SbColor* color = editModeScenegraphNodes.EditCurvesMaterials->diffuseColor.startEditing(); + setEditDrawStyle(mode); + int i = 0; // setting up the line set for (std::vector::const_iterator it = EditCurve.begin(); it != EditCurve.end(); ++it, i++) { @@ -625,7 +624,14 @@ void EditModeCoinManager::drawEdit(const std::vector& EditCurve) it->y, ViewProviderSketchCoinAttorney::getViewOrientationFactor(viewProvider) * drawingParameters.zEdit); - color[i] = drawingParameters.CreateCurveColor; + switch (mode) { + case GeometryCreationMode::Normal: + color[i] = drawingParameters.CurveColor; + break; + case GeometryCreationMode::Construction: + color[i] = drawingParameters.CurveDraftColor; + break; + } } index[0] = EditCurve.size(); @@ -634,7 +640,8 @@ void EditModeCoinManager::drawEdit(const std::vector& EditCurve) editModeScenegraphNodes.EditCurvesMaterials->diffuseColor.finishEditing(); } -void EditModeCoinManager::drawEdit(const std::list>& list) +void EditModeCoinManager::drawEdit(const std::list>& list, + GeometryCreationMode mode) { int ncoords = 0; @@ -649,6 +656,8 @@ void EditModeCoinManager::drawEdit(const std::list>& int32_t* index = editModeScenegraphNodes.EditCurveSet->numVertices.startEditing(); SbColor* color = editModeScenegraphNodes.EditCurvesMaterials->diffuseColor.startEditing(); + setEditDrawStyle(mode); + int coordindex = 0; int indexindex = 0; for (const auto& v : list) { @@ -658,7 +667,16 @@ void EditModeCoinManager::drawEdit(const std::list>& p.y, ViewProviderSketchCoinAttorney::getViewOrientationFactor(viewProvider) * drawingParameters.zEdit); - color[coordindex] = drawingParameters.CreateCurveColor; + + switch (mode) { + case GeometryCreationMode::Normal: + color[coordindex] = drawingParameters.CurveColor; + break; + case GeometryCreationMode::Construction: + color[coordindex] = drawingParameters.CurveDraftColor; + break; + } + coordindex++; } index[indexindex] = v.size(); @@ -960,8 +978,9 @@ void EditModeCoinManager::createEditModeInventorNodes() editModeScenegraphNodes.EditCurvesDrawStyle = new SoDrawStyle; editModeScenegraphNodes.EditCurvesDrawStyle->setName("EditCurvesDrawStyle"); - editModeScenegraphNodes.EditCurvesDrawStyle->lineWidth = - 3 * drawingParameters.pixelScalingFactor; + editModeScenegraphNodes.EditCurvesDrawStyle->lineWidth = 3 + * drawingParameters + .pixelScalingFactor; // This default value will be overriden in drawEdit() editCurvesRoot->addChild(editModeScenegraphNodes.EditCurvesDrawStyle); editModeScenegraphNodes.EditCurveSet = new SoLineSet; @@ -1046,6 +1065,24 @@ void EditModeCoinManager::redrawViewProvider() { viewProvider.draw(false, false); } +void EditModeCoinManager::setEditDrawStyle(GeometryCreationMode mode) +{ + SoDrawStyle* toCopy = nullptr; + + switch (mode) { + case GeometryCreationMode::Normal: + toCopy = editModeScenegraphNodes.CurvesDrawStyle; + break; + case GeometryCreationMode::Construction: + toCopy = editModeScenegraphNodes.CurvesConstructionDrawStyle; + break; + } + + editModeScenegraphNodes.EditCurvesDrawStyle->lineWidth = toCopy->lineWidth; + editModeScenegraphNodes.EditCurvesDrawStyle->linePattern = toCopy->linePattern; + editModeScenegraphNodes.EditCurvesDrawStyle->linePatternScaleFactor = + toCopy->linePatternScaleFactor; +} /************************ Delegated constraint public interface **********/ diff --git a/src/Mod/Sketcher/Gui/EditModeCoinManager.h b/src/Mod/Sketcher/Gui/EditModeCoinManager.h index baa7a4801f..0c719adffc 100644 --- a/src/Mod/Sketcher/Gui/EditModeCoinManager.h +++ b/src/Mod/Sketcher/Gui/EditModeCoinManager.h @@ -28,6 +28,7 @@ #include #include +#include "GeometryCreationMode.h" #include "EditModeCoinManagerParameters.h" @@ -211,8 +212,8 @@ public: //@{ void drawEditMarkers(const std::vector& EditMarkers, unsigned int augmentationlevel); - void drawEdit(const std::vector& EditCurve); - void drawEdit(const std::list>& list); + void drawEdit(const std::vector& EditCurve, GeometryCreationMode mode); + void drawEdit(const std::list>& list, GeometryCreationMode mode); void setPositionText(const Base::Vector2d& Pos, const SbString& txt); void setPositionText(const Base::Vector2d& Pos); void resetPositionText(); @@ -278,6 +279,8 @@ private: // causes the ViewProvider to draw void redrawViewProvider(); + void setEditDrawStyle(GeometryCreationMode mode); + int defaultApplicationFontSizePixels() const; double getDevicePixelRatio() const; diff --git a/src/Mod/Sketcher/Gui/EditModeCoinManagerParameters.cpp b/src/Mod/Sketcher/Gui/EditModeCoinManagerParameters.cpp index d235028826..a5dc822c39 100644 --- a/src/Mod/Sketcher/Gui/EditModeCoinManagerParameters.cpp +++ b/src/Mod/Sketcher/Gui/EditModeCoinManagerParameters.cpp @@ -52,7 +52,6 @@ int GeometryLayerParameters::getSubLayerIndex(const int geoId, } SbColor DrawingParameters::InformationColor(0.0f, 1.0f, 0.0f); // #00FF00 -> ( 0,255, 0) -SbColor DrawingParameters::CreateCurveColor(0.5f, 0.5f, 0.5f); // ##7f7f7f -> (127,127,127) namespace { // Anonymous namespace to avoid making those variables global diff --git a/src/Mod/Sketcher/Gui/EditModeCoinManagerParameters.h b/src/Mod/Sketcher/Gui/EditModeCoinManagerParameters.h index dbc65e3e47..4d6324491d 100644 --- a/src/Mod/Sketcher/Gui/EditModeCoinManagerParameters.h +++ b/src/Mod/Sketcher/Gui/EditModeCoinManagerParameters.h @@ -102,7 +102,6 @@ struct DrawingParameters /** @name Rendering Coin Colors **/ //@{ static SbColor InformationColor; // Information Overlay Color - static SbColor CreateCurveColor; // Color for Edit Curves during creation static SbColor CrossColorH; // Color for the Horizontal Axis static SbColor CrossColorV; // Color for the Vertical Axis static SbColor InvalidSketchColor; // Color for rendering an invalid sketch diff --git a/src/Mod/Sketcher/Gui/Utils.h b/src/Mod/Sketcher/Gui/Utils.h index 4e39d199d9..0e354bf06d 100644 --- a/src/Mod/Sketcher/Gui/Utils.h +++ b/src/Mod/Sketcher/Gui/Utils.h @@ -163,6 +163,11 @@ inline bool isEdge(int GeoId, Sketcher::PointPos PosId) extern GeometryCreationMode geometryCreationMode; // defined in CommandCreateGeo.cpp +inline GeometryCreationMode currentGeometryCreationMode() +{ + return geometryCreationMode; +} + inline bool isConstructionMode() { return geometryCreationMode == GeometryCreationMode::Construction; diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp index 41c6154d34..551ad03dce 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp @@ -2879,12 +2879,12 @@ bool ViewProviderSketch::getIsShownVirtualSpace() const void ViewProviderSketch::drawEdit(const std::vector& EditCurve) { - editCoinManager->drawEdit(EditCurve); + editCoinManager->drawEdit(EditCurve, currentGeometryCreationMode()); } void ViewProviderSketch::drawEdit(const std::list>& list) { - editCoinManager->drawEdit(list); + editCoinManager->drawEdit(list, currentGeometryCreationMode()); } void ViewProviderSketch::drawEditMarkers(const std::vector& EditMarkers,