From b1db23727095dd72f33fc0444073fbd4c71c7c01 Mon Sep 17 00:00:00 2001 From: Abdullah Tahiri Date: Sat, 19 Dec 2020 09:31:50 +0100 Subject: [PATCH] Sketcher: ViewProviderSketch - Show constrained elements in new color ===================================================================== Provide different colors for full constrained edge, construction edge, internal alignment element and construction vertex. This should enable users to select what they want in their specific situation. --- src/Mod/Sketcher/Gui/ViewProviderSketch.cpp | 104 +++++++++++++++----- src/Mod/Sketcher/Gui/ViewProviderSketch.h | 4 + 2 files changed, 82 insertions(+), 26 deletions(-) diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp index d4e64bd154..9f8b0ac95e 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp @@ -121,6 +121,7 @@ #include "TaskSketcherValidation.h" #include "CommandConstraints.h" #include "ViewProviderSketchGeometryExtension.h" +#include FC_LOG_LEVEL_INIT("Sketch",true,true) @@ -143,24 +144,28 @@ using namespace SketcherGui; using namespace Sketcher; namespace bp = boost::placeholders; -SbColor ViewProviderSketch::VertexColor (1.0f,0.149f,0.0f); // #FF2600 -> (255, 38, 0) -SbColor ViewProviderSketch::CurveColor (1.0f,1.0f,1.0f); // #FFFFFF -> (255,255,255) -SbColor ViewProviderSketch::CurveDraftColor (0.0f,0.0f,0.86f); // #0000DC -> ( 0, 0,220) -SbColor ViewProviderSketch::CurveExternalColor (0.8f,0.2f,0.6f); // #CC3399 -> (204, 51,153) -SbColor ViewProviderSketch::CrossColorH (0.8f,0.4f,0.4f); // #CC6666 -> (204,102,102) -SbColor ViewProviderSketch::CrossColorV (0.4f,0.8f,0.4f); // #66CC66 -> (102,204,102) -SbColor ViewProviderSketch::FullyConstrainedColor (0.0f,1.0f,0.0f); // #00FF00 -> ( 0,255, 0) -SbColor ViewProviderSketch::ConstrDimColor (1.0f,0.149f,0.0f); // #FF2600 -> (255, 38, 0) -SbColor ViewProviderSketch::ConstrIcoColor (1.0f,0.149f,0.0f); // #FF2600 -> (255, 38, 0) -SbColor ViewProviderSketch::NonDrivingConstrDimColor (0.0f,0.149f,1.0f); // #0026FF -> ( 0, 38,255) -SbColor ViewProviderSketch::ExprBasedConstrDimColor (1.0f,0.5f,0.149f); // #FF7F26 -> (255, 127, 38) -SbColor ViewProviderSketch::InformationColor (0.0f,1.0f,0.0f); // #00FF00 -> ( 0,255, 0) -SbColor ViewProviderSketch::PreselectColor (0.88f,0.88f,0.0f); // #E1E100 -> (225,225, 0) -SbColor ViewProviderSketch::SelectColor (0.11f,0.68f,0.11f); // #1CAD1C -> ( 28,173, 28) -SbColor ViewProviderSketch::PreselectSelectedColor (0.36f,0.48f,0.11f); // #5D7B1C -> ( 93,123, 28) -SbColor ViewProviderSketch::CreateCurveColor (0.8f,0.8f,0.8f); // #CCCCCC -> (204,204,204) -SbColor ViewProviderSketch::DeactivatedConstrDimColor (0.8f,0.8f,0.8f); // #CCCCCC -> (204,204,204) -SbColor ViewProviderSketch::InternalAlignedGeoColor (0.7f,0.7f,0.5f); // #B2B27F -> (178,178,127) +SbColor ViewProviderSketch::VertexColor (1.0f,0.149f,0.0f); // #FF2600 -> (255, 38, 0) +SbColor ViewProviderSketch::CurveColor (1.0f,1.0f,1.0f); // #FFFFFF -> (255,255,255) +SbColor ViewProviderSketch::CurveDraftColor (0.0f,0.0f,0.86f); // #0000DC -> ( 0, 0,220) +SbColor ViewProviderSketch::CurveExternalColor (0.8f,0.2f,0.6f); // #CC3399 -> (204, 51,153) +SbColor ViewProviderSketch::CrossColorH (0.8f,0.4f,0.4f); // #CC6666 -> (204,102,102) +SbColor ViewProviderSketch::CrossColorV (0.4f,0.8f,0.4f); // #66CC66 -> (102,204,102) +SbColor ViewProviderSketch::FullyConstrainedColor (0.0f,1.0f,0.0f); // #00FF00 -> ( 0,255, 0) +SbColor ViewProviderSketch::ConstrDimColor (1.0f,0.149f,0.0f); // #FF2600 -> (255, 38, 0) +SbColor ViewProviderSketch::ConstrIcoColor (1.0f,0.149f,0.0f); // #FF2600 -> (255, 38, 0) +SbColor ViewProviderSketch::NonDrivingConstrDimColor (0.0f,0.149f,1.0f); // #0026FF -> ( 0, 38,255) +SbColor ViewProviderSketch::ExprBasedConstrDimColor (1.0f,0.5f,0.149f); // #FF7F26 -> (255, 127, 38) +SbColor ViewProviderSketch::InformationColor (0.0f,1.0f,0.0f); // #00FF00 -> ( 0,255, 0) +SbColor ViewProviderSketch::PreselectColor (0.88f,0.88f,0.0f); // #E1E100 -> (225,225, 0) +SbColor ViewProviderSketch::SelectColor (0.11f,0.68f,0.11f); // #1CAD1C -> ( 28,173, 28) +SbColor ViewProviderSketch::PreselectSelectedColor (0.36f,0.48f,0.11f); // #5D7B1C -> ( 93,123, 28) +SbColor ViewProviderSketch::CreateCurveColor (0.8f,0.8f,0.8f); // #CCCCCC -> (204,204,204) +SbColor ViewProviderSketch::DeactivatedConstrDimColor (0.8f,0.8f,0.8f); // #CCCCCC -> (204,204,204) +SbColor ViewProviderSketch::InternalAlignedGeoColor (0.7f,0.7f,0.5f); // #B2B27F -> (178,178,127) +SbColor ViewProviderSketch::FullyConstraintElementColor (0.50f,0.81f,0.62f); // #80D0A0 -> (128,208,160) +SbColor ViewProviderSketch::FullyConstraintConstructionElementColor (0.56f,0.66f,0.99f); // #80D0A0 -> (128,208,160) +SbColor ViewProviderSketch::FullyConstraintInternalAlignmentColor (0.87f,0.87f,0.78f); // #80D0A0 -> (128,208,160) +SbColor ViewProviderSketch::FullyConstraintConstructionPointColor (1.0f,0.58f,0.50f); // #80D0A0 -> (128,208,160) // Variables for holding previous click SbTime ViewProviderSketch::prvClickTime; SbVec2s ViewProviderSketch::prvClickPos; @@ -2796,6 +2801,22 @@ void ViewProviderSketch::updateColor(void) return false; }; + auto isFullyConstraintElement = [](Sketcher::SketchObject* obj, int GeoId) -> bool { + + const Part::Geometry* geom = obj->getGeometry(GeoId); + + if(geom) { + if(geom->hasExtension(Sketcher::SolverGeometryExtension::getClassTypeId())) { + + auto solvext = std::static_pointer_cast( + geom->getExtension(Sketcher::SolverGeometryExtension::getClassTypeId()).lock()); + + return (solvext->getGeometry() == Sketcher::SolverGeometryExtension::FullyConstraint); + } + } + return false; + }; + // colors of the point set if (edit->FullyConstrained) { for (int i=0; i < PtNum; i++) @@ -2805,10 +2826,20 @@ void ViewProviderSketch::updateColor(void) for (int i=0; i < PtNum; i++) { int GeoId = edit->PointIdToGeoId[i]; - if(isInternalAlignedGeom(getSketchObject(), GeoId)) - pcolor[i] = InternalAlignedGeoColor; - else - pcolor[i] = VertexColor; + bool constrainedElement = isFullyConstraintElement(getSketchObject(), GeoId); + + if(isInternalAlignedGeom(getSketchObject(), GeoId)) { + if(constrainedElement) + pcolor[i] = FullyConstraintInternalAlignmentColor; + else + pcolor[i] = InternalAlignedGeoColor; + } + else { + if(constrainedElement) + pcolor[i] = FullyConstraintConstructionPointColor; + else + pcolor[i] = VertexColor; + } } } @@ -2860,6 +2891,8 @@ void ViewProviderSketch::updateColor(void) bool selected = (edit->SelCurvSet.find(GeoId) != edit->SelCurvSet.end()); bool preselected = (edit->PreselectCurve == GeoId); + bool constrainedElement = isFullyConstraintElement(getSketchObject(), GeoId); + if (selected && preselected) { color[i] = PreselectSelectedColor; for (int k=j; jGetUnsigned("InternalAlignedGeoColor", color); InternalAlignedGeoColor.setPackedValue((uint32_t)color, transparency); + // set fullyconstraint element color + color = (unsigned long)(FullyConstraintElementColor.getPackedValue()); + color = hGrp->GetUnsigned("FullyConstraintElementColor", color); + FullyConstraintElementColor.setPackedValue((uint32_t)color, transparency); // set the cross lines color //CrossColorV.setPackedValue((uint32_t)color, transparency); //CrossColorH.setPackedValue((uint32_t)color, transparency); diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.h b/src/Mod/Sketcher/Gui/ViewProviderSketch.h index ab0aad8701..ab64445c54 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.h +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.h @@ -401,6 +401,10 @@ protected: static SbColor InformationColor; static SbColor DeactivatedConstrDimColor; static SbColor InternalAlignedGeoColor; + static SbColor FullyConstraintElementColor; + static SbColor FullyConstraintConstructionElementColor; + static SbColor FullyConstraintInternalAlignmentColor; + static SbColor FullyConstraintConstructionPointColor; static SbTime prvClickTime; static SbVec2s prvClickPos; //used by double-click-detector