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 <kadet1090@gmail.com>
This commit is contained in:
theo-vt
2025-07-27 22:33:25 -04:00
committed by GitHub
parent 7481a5d8dd
commit 2da7c9ff17
6 changed files with 59 additions and 16 deletions

View File

@@ -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<Base::Vector2d>& Edi
editModeScenegraphNodes.EditMarkerSet->markerIndex.finishEditing();
}
void EditModeCoinManager::drawEdit(const std::vector<Base::Vector2d>& EditCurve)
void EditModeCoinManager::drawEdit(const std::vector<Base::Vector2d>& EditCurve,
GeometryCreationMode mode)
{
editModeScenegraphNodes.EditCurveSet->numVertices.setNum(1);
editModeScenegraphNodes.EditCurvesCoordinate->point.setNum(EditCurve.size());
@@ -618,6 +615,8 @@ void EditModeCoinManager::drawEdit(const std::vector<Base::Vector2d>& 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<Base::Vector2d>::const_iterator it = EditCurve.begin(); it != EditCurve.end();
++it, i++) {
@@ -625,7 +624,14 @@ void EditModeCoinManager::drawEdit(const std::vector<Base::Vector2d>& 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<Base::Vector2d>& EditCurve)
editModeScenegraphNodes.EditCurvesMaterials->diffuseColor.finishEditing();
}
void EditModeCoinManager::drawEdit(const std::list<std::vector<Base::Vector2d>>& list)
void EditModeCoinManager::drawEdit(const std::list<std::vector<Base::Vector2d>>& list,
GeometryCreationMode mode)
{
int ncoords = 0;
@@ -649,6 +656,8 @@ void EditModeCoinManager::drawEdit(const std::list<std::vector<Base::Vector2d>>&
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<std::vector<Base::Vector2d>>&
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 **********/

View File

@@ -28,6 +28,7 @@
#include <App/Application.h>
#include <Mod/Sketcher/App/GeoList.h>
#include "GeometryCreationMode.h"
#include "EditModeCoinManagerParameters.h"
@@ -211,8 +212,8 @@ public:
//@{
void drawEditMarkers(const std::vector<Base::Vector2d>& EditMarkers,
unsigned int augmentationlevel);
void drawEdit(const std::vector<Base::Vector2d>& EditCurve);
void drawEdit(const std::list<std::vector<Base::Vector2d>>& list);
void drawEdit(const std::vector<Base::Vector2d>& EditCurve, GeometryCreationMode mode);
void drawEdit(const std::list<std::vector<Base::Vector2d>>& 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;

View File

@@ -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

View File

@@ -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

View File

@@ -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;

View File

@@ -2879,12 +2879,12 @@ bool ViewProviderSketch::getIsShownVirtualSpace() const
void ViewProviderSketch::drawEdit(const std::vector<Base::Vector2d>& EditCurve)
{
editCoinManager->drawEdit(EditCurve);
editCoinManager->drawEdit(EditCurve, currentGeometryCreationMode());
}
void ViewProviderSketch::drawEdit(const std::list<std::vector<Base::Vector2d>>& list)
{
editCoinManager->drawEdit(list);
editCoinManager->drawEdit(list, currentGeometryCreationMode());
}
void ViewProviderSketch::drawEditMarkers(const std::vector<Base::Vector2d>& EditMarkers,