diff --git a/src/Gui/PreferencePackTemplates/Sketcher_Colors.cfg b/src/Gui/PreferencePackTemplates/Sketcher_Colors.cfg index 47b0f20ecd..34146e780d 100644 --- a/src/Gui/PreferencePackTemplates/Sketcher_Colors.cfg +++ b/src/Gui/PreferencePackTemplates/Sketcher_Colors.cfg @@ -9,6 +9,7 @@ + diff --git a/src/Mod/Sketcher/Gui/EditModeCoinManager.cpp b/src/Mod/Sketcher/Gui/EditModeCoinManager.cpp index 98b81d0623..008930cd6c 100644 --- a/src/Mod/Sketcher/Gui/EditModeCoinManager.cpp +++ b/src/Mod/Sketcher/Gui/EditModeCoinManager.cpp @@ -161,6 +161,10 @@ void EditModeCoinManager::ParameterObserver::initParameters() [this, &drawingParameters = Client.drawingParameters](const std::string& param) { updateWidth(drawingParameters.ExternalWidth, param, 2); }}, + {"ExternalDefiningWidth", + [this, &drawingParameters = Client.drawingParameters](const std::string& param) { + updateWidth(drawingParameters.ExternalDefiningWidth, param, 2); + }}, {"EdgePattern", [this, &drawingParameters = Client.drawingParameters](const std::string& param) { updatePattern(drawingParameters.CurvePattern, param, 0b1111111111111111); @@ -177,6 +181,10 @@ void EditModeCoinManager::ParameterObserver::initParameters() [this, &drawingParameters = Client.drawingParameters](const std::string& param) { updatePattern(drawingParameters.ExternalPattern, param, 0b1111110011111100); }}, + {"ExternalDefiningPattern", + [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); @@ -241,6 +249,10 @@ void EditModeCoinManager::ParameterObserver::initParameters() [this, drawingParameters = Client.drawingParameters](const std::string& param) { updateColor(drawingParameters.CurveExternalColor, param); }}, + {"ExternalDefiningColor", + [this, drawingParameters = Client.drawingParameters](const std::string& param) { + updateColor(drawingParameters.CurveExternalDefiningColor, param); + }}, {"HighlightColor", [this, drawingParameters = Client.drawingParameters](const std::string& param) { updateColor(drawingParameters.PreselectColor, param); @@ -1119,6 +1131,8 @@ void EditModeCoinManager::updateInventorWidths() drawingParameters.InternalWidth * drawingParameters.pixelScalingFactor; editModeScenegraphNodes.CurvesExternalDrawStyle->lineWidth = drawingParameters.ExternalWidth * drawingParameters.pixelScalingFactor; + editModeScenegraphNodes.CurvesExternalDefiningDrawStyle->lineWidth = + drawingParameters.ExternalDefiningWidth * drawingParameters.pixelScalingFactor; } void EditModeCoinManager::updateInventorPatterns() @@ -1130,6 +1144,8 @@ void EditModeCoinManager::updateInventorPatterns() drawingParameters.InternalPattern; editModeScenegraphNodes.CurvesExternalDrawStyle->linePattern = drawingParameters.ExternalPattern; + editModeScenegraphNodes.CurvesExternalDefiningDrawStyle->linePattern = + drawingParameters.ExternalDefiningPattern; } void EditModeCoinManager::updateInventorColors() diff --git a/src/Mod/Sketcher/Gui/EditModeCoinManagerParameters.cpp b/src/Mod/Sketcher/Gui/EditModeCoinManagerParameters.cpp index 9c90003eb8..d235028826 100644 --- a/src/Mod/Sketcher/Gui/EditModeCoinManagerParameters.cpp +++ b/src/Mod/Sketcher/Gui/EditModeCoinManagerParameters.cpp @@ -41,9 +41,7 @@ int GeometryLayerParameters::getSubLayerIndex(const int geoId, if (isExternal) { auto egf = Sketcher::ExternalGeometryFacade::getFacade(geom->clone()); if (egf->testFlag(Sketcher::ExternalGeometryExtension::Defining)) { - // Defining external are added to the Normal sublayers because they - // share the same line style. - return static_cast(SubLayer::Normal); + return static_cast(SubLayer::ExternalDefining); } } @@ -82,7 +80,9 @@ SbColor DrawingParameters::PreselectColor(0.88f, 0.88f, 0.0f); // #E1E SbColor DrawingParameters::SelectColor(0.11f, 0.68f, 0.11f); // #1CAD1C -> ( 28,173, 28) SbColor DrawingParameters::PreselectSelectedColor(0.36f, 0.48f, 0.11f); // #5D7B1C -> ( 93,123, 28) SbColor DrawingParameters::CurveExternalColor(0.8f, 0.2f, 0.6f); // #CC3399 -> (204, 51,153) -SbColor DrawingParameters::CurveDraftColor(0.0f, 0.0f, 0.86f); // #0000DC -> ( 0, 0,220) +SbColor + DrawingParameters::CurveExternalDefiningColor(0.8f, 0.2f, 0.6f); // #CC3399 -> (204, 51,153) +SbColor DrawingParameters::CurveDraftColor(0.0f, 0.0f, 0.86f); // #0000DC -> ( 0, 0,220) SbColor DrawingParameters::FullyConstraintConstructionElementColor(0.56f, 0.66f, diff --git a/src/Mod/Sketcher/Gui/EditModeCoinManagerParameters.h b/src/Mod/Sketcher/Gui/EditModeCoinManagerParameters.h index b08c679095..067aeb6f7d 100644 --- a/src/Mod/Sketcher/Gui/EditModeCoinManagerParameters.h +++ b/src/Mod/Sketcher/Gui/EditModeCoinManagerParameters.h @@ -116,8 +116,9 @@ struct DrawingParameters static SbColor PreselectSelectedColor; // Color used for preselection when geometry is already selected static SbColor SelectColor; // Color used for selected geometry - static SbColor CurveExternalColor; // Color used for external geometry - static SbColor CurveDraftColor; // Color used for construction geometry + static SbColor CurveExternalColor; // Color used for external geometry + static SbColor CurveExternalDefiningColor; // Color used for external defining geometry + static SbColor CurveDraftColor; // Color used for construction geometry static SbColor FullyConstraintConstructionElementColor; // Color used for a fully constrained // construction element static SbColor ConstrDimColor; // Color used for a dimensional constraints @@ -139,15 +140,18 @@ struct DrawingParameters int constraintIconSize = 15; // Size of constraint icons int markerSize = 7; // Size used for markers - int CurveWidth = 2; // width of normal edges - int ConstructionWidth = 1; // width of construction edges - int InternalWidth = 1; // width of internal edges - int ExternalWidth = 1; // width of external edges + int CurveWidth = 2; // width of normal edges + int ConstructionWidth = 1; // width of construction edges + int InternalWidth = 1; // width of internal edges + int ExternalWidth = 1; // width of external edges + int ExternalDefiningWidth = 1; // width of external defining edges unsigned int CurvePattern = 0b1111111111111111; // pattern of normal edges unsigned int ConstructionPattern = 0b1111110011111100; // pattern of construction edges unsigned int InternalPattern = 0b1111110011111100; // pattern of internal edges unsigned int ExternalPattern = 0b1111110011111100; // pattern of external edges + unsigned int ExternalDefiningPattern = + 0b1111111111111111; // pattern of external defining edges //@} DrawingParameters() @@ -289,6 +293,7 @@ public: Construction = 1, Internal = 2, External = 3, + ExternalDefining = 4 }; void reset() @@ -342,9 +347,15 @@ public: return t == static_cast(SubLayer::External); } + bool isExternalDefiningSubLayer(int t) const + { + return t == static_cast(SubLayer::ExternalDefining); + } + + private: int CoinLayers = 1; // defaults to a single Coin Geometry Layer. - int SubLayers = 4; // Normal, Construction, Internal, External. + int SubLayers = 5; // Normal, Construction, Internal, External. }; /** @brief Struct to hold the results of analysis performed on geometry @@ -410,6 +421,7 @@ struct EditModeScenegraphNodes SoDrawStyle* CurvesConstructionDrawStyle; SoDrawStyle* CurvesInternalDrawStyle; SoDrawStyle* CurvesExternalDrawStyle; + SoDrawStyle* CurvesExternalDefiningDrawStyle; SoDrawStyle* HiddenCurvesDrawStyle; //@} diff --git a/src/Mod/Sketcher/Gui/EditModeGeometryCoinManager.cpp b/src/Mod/Sketcher/Gui/EditModeGeometryCoinManager.cpp index b215874e0d..63ae303c5f 100644 --- a/src/Mod/Sketcher/Gui/EditModeGeometryCoinManager.cpp +++ b/src/Mod/Sketcher/Gui/EditModeGeometryCoinManager.cpp @@ -135,6 +135,16 @@ void EditModeGeometryCoinManager::updateGeometryColor(const GeoListFacade& geoli return false; }; + auto isExternalDefiningGeomPoint = [&geolistfacade](int GeoId) { + auto geom = geolistfacade.getGeometryFacadeFromGeoId(GeoId); + if (geom) { + auto egf = ExternalGeometryFacade::getFacade(geom->clone()); + auto ref = egf->getRef(); + return egf->testFlag(ExternalGeometryExtension::Defining); + } + return false; + }; + auto isCoincident = [&](int GeoId, Sketcher::PointPos PosId) { const std::vector& constraints = ViewProviderSketchCoinAttorney::getConstraints(viewProvider); @@ -202,7 +212,9 @@ void EditModeGeometryCoinManager::updateGeometryColor(const GeoListFacade& geoli pcolor[i] = drawingParameters.ConstrIcoColor; } else { - pcolor[i] = drawingParameters.CurveExternalColor; + pcolor[i] = isExternalDefiningGeomPoint(GeoId) + ? drawingParameters.CurveExternalDefiningColor + : drawingParameters.CurveExternalColor; } } else if (issketchinvalid) { @@ -423,7 +435,9 @@ void EditModeGeometryCoinManager::updateGeometryColor(const GeoListFacade& geoli color[i] = drawingParameters.InvalidSketchColor; } else { - color[i] = drawingParameters.CurveExternalColor; + color[i] = egf->testFlag(ExternalGeometryExtension::Defining) + ? drawingParameters.CurveExternalDefiningColor + : drawingParameters.CurveExternalColor; } for (int k = j; j < k + indexes; j++) { verts[j].getValue(x, y, z); @@ -642,6 +656,15 @@ void EditModeGeometryCoinManager::createEditModeCurveInventorNodes() drawingParameters.ExternalPattern; editModeScenegraphNodes.CurvesExternalDrawStyle->linePatternScaleFactor = 2; + editModeScenegraphNodes.CurvesExternalDefiningDrawStyle = new SoDrawStyle; + editModeScenegraphNodes.CurvesExternalDefiningDrawStyle->setName( + "CurvesExternalDefiningDrawStyle"); + editModeScenegraphNodes.CurvesExternalDefiningDrawStyle->lineWidth = + drawingParameters.ExternalDefiningWidth * drawingParameters.pixelScalingFactor; + editModeScenegraphNodes.CurvesExternalDefiningDrawStyle->linePattern = + drawingParameters.ExternalDefiningPattern; + editModeScenegraphNodes.CurvesExternalDefiningDrawStyle->linePatternScaleFactor = 2; + for (int i = 0; i < geometryLayerParameters.getCoinLayerCount(); i++) { editModeScenegraphNodes.CurvesMaterials.emplace_back(); editModeScenegraphNodes.CurvesCoordinate.emplace_back(); @@ -674,6 +697,9 @@ void EditModeGeometryCoinManager::createEditModeCurveInventorNodes() else if (geometryLayerParameters.isExternalSubLayer(t)) { sep->addChild(editModeScenegraphNodes.CurvesExternalDrawStyle); } + else if (geometryLayerParameters.isExternalDefiningSubLayer(t)) { + sep->addChild(editModeScenegraphNodes.CurvesExternalDefiningDrawStyle); + } else { sep->addChild(editModeScenegraphNodes.CurvesDrawStyle); } diff --git a/src/Mod/Sketcher/Gui/SketcherSettings.cpp b/src/Mod/Sketcher/Gui/SketcherSettings.cpp index 33e72b09ca..82ef50a389 100644 --- a/src/Mod/Sketcher/Gui/SketcherSettings.cpp +++ b/src/Mod/Sketcher/Gui/SketcherSettings.cpp @@ -518,6 +518,7 @@ SketcherSettingsAppearance::SketcherSettingsAppearance(QWidget* parent) ui->ConstructionPattern->setIconSize(QSize(70, 12)); ui->InternalPattern->setIconSize(QSize(70, 12)); ui->ExternalPattern->setIconSize(QSize(70, 12)); + ui->ExternalDefiningPattern->setIconSize(QSize(70, 12)); for (auto& style : styles) { QPixmap px(ui->EdgePattern->iconSize()); px.fill(Qt::transparent); @@ -537,6 +538,7 @@ SketcherSettingsAppearance::SketcherSettingsAppearance(QWidget* parent) ui->ConstructionPattern->addItem(QIcon(px), QString(), QVariant(style)); ui->InternalPattern->addItem(QIcon(px), QString(), QVariant(style)); ui->ExternalPattern->addItem(QIcon(px), QString(), QVariant(style)); + ui->ExternalDefiningPattern->addItem(QIcon(px), QString(), QVariant(style)); } } @@ -556,6 +558,7 @@ void SketcherSettingsAppearance::saveSettings() ui->EditedEdgeColor->onSave(); ui->ConstructionColor->onSave(); ui->ExternalColor->onSave(); + ui->ExternalDefiningColor->onSave(); ui->InvalidSketchColor->onSave(); ui->FullyConstrainedColor->onSave(); ui->InternalAlignedGeoColor->onSave(); @@ -577,6 +580,7 @@ void SketcherSettingsAppearance::saveSettings() ui->ConstructionWidth->onSave(); ui->InternalWidth->onSave(); ui->ExternalWidth->onSave(); + ui->ExternalDefiningWidth->onSave(); ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath( "User parameter:BaseApp/Preferences/Mod/Sketcher/View"); @@ -595,6 +599,10 @@ void SketcherSettingsAppearance::saveSettings() data = ui->ExternalPattern->itemData(ui->ExternalPattern->currentIndex()); pattern = data.toInt(); hGrp->SetInt("ExternalPattern", pattern); + + data = ui->ExternalDefiningPattern->itemData(ui->ExternalDefiningPattern->currentIndex()); + pattern = data.toInt(); + hGrp->SetInt("ExternalDefiningPattern", pattern); } void SketcherSettingsAppearance::loadSettings() @@ -605,6 +613,7 @@ void SketcherSettingsAppearance::loadSettings() ui->EditedEdgeColor->onRestore(); ui->ConstructionColor->onRestore(); ui->ExternalColor->onRestore(); + ui->ExternalDefiningColor->onRestore(); ui->InvalidSketchColor->onRestore(); ui->FullyConstrainedColor->onRestore(); ui->InternalAlignedGeoColor->onRestore(); @@ -626,6 +635,7 @@ void SketcherSettingsAppearance::loadSettings() ui->ConstructionWidth->onRestore(); ui->InternalWidth->onRestore(); ui->ExternalWidth->onRestore(); + ui->ExternalDefiningWidth->onRestore(); ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath( "User parameter:BaseApp/Preferences/Mod/Sketcher/View"); @@ -656,6 +666,13 @@ void SketcherSettingsAppearance::loadSettings() index = 0; } ui->ExternalPattern->setCurrentIndex(index); + + pattern = hGrp->GetInt("ExternalDefiningPattern", 0b1111111111111111); + index = ui->ExternalDefiningPattern->findData(QVariant(pattern)); + if (index < 0) { + index = 0; + } + ui->ExternalDefiningPattern->setCurrentIndex(index); } /** diff --git a/src/Mod/Sketcher/Gui/SketcherSettingsAppearance.ui b/src/Mod/Sketcher/Gui/SketcherSettingsAppearance.ui index 2d6052949a..f279c9ee5c 100644 --- a/src/Mod/Sketcher/Gui/SketcherSettingsAppearance.ui +++ b/src/Mod/Sketcher/Gui/SketcherSettingsAppearance.ui @@ -487,7 +487,7 @@ - External geometry + External reference geometry @@ -555,7 +555,78 @@ - + + + + External defining geometry + + + + + + + + 0 + 0 + + + + Color of external defining geometry in edit mode + + + + 204 + 51 + 153 + + + + ExternalDefiningColor + + + View + + + + + + + Line pattern of external defining edges. + + + -1 + + + + + + + Width of external defining edges. + + + px + + + px + + + 1 + + + 99 + + + 2 + + + ExternalDefiningWidth + + + Mod/Sketcher/View + + + + @@ -568,7 +639,7 @@ - + @@ -594,14 +665,14 @@ - + Invalid sketch - +