diff --git a/src/Mod/Sketcher/Gui/EditModeCoinManager.cpp b/src/Mod/Sketcher/Gui/EditModeCoinManager.cpp index 9888733500..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); @@ -1123,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() @@ -1134,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 c5a61ecf6f..42d7923739 100644 --- a/src/Mod/Sketcher/Gui/EditModeCoinManagerParameters.cpp +++ b/src/Mod/Sketcher/Gui/EditModeCoinManagerParameters.cpp @@ -40,10 +40,8 @@ int GeometryLayerParameters::getSubLayerIndex(const int geoId, bool isExternal = geoId <= Sketcher::GeoEnum::RefExt; 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); + if (egf->testFlag(Sketcher::ExternalGeometryExtension::Defining)) { + return static_cast(SubLayer::ExternalDefining); } } @@ -83,7 +81,7 @@ SbColor DrawingParameters::SelectColor(0.11f, 0.68f, 0.11f); // #1CA 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::CurveExternalDefiningColor(1.0f, 0.5f, 0.69f); // #FF7FAF -> (255,127,175) + 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, diff --git a/src/Mod/Sketcher/Gui/EditModeCoinManagerParameters.h b/src/Mod/Sketcher/Gui/EditModeCoinManagerParameters.h index b5013f4b74..3d33fa0326 100644 --- a/src/Mod/Sketcher/Gui/EditModeCoinManagerParameters.h +++ b/src/Mod/Sketcher/Gui/EditModeCoinManagerParameters.h @@ -144,11 +144,13 @@ struct DrawingParameters 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() @@ -290,6 +292,7 @@ public: Construction = 1, Internal = 2, External = 3, + ExternalDefining = 4 }; void reset() @@ -343,9 +346,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 @@ -411,6 +420,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 8f50b6aa8d..592b3a418e 100644 --- a/src/Mod/Sketcher/Gui/EditModeGeometryCoinManager.cpp +++ b/src/Mod/Sketcher/Gui/EditModeGeometryCoinManager.cpp @@ -656,6 +656,14 @@ 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(); @@ -688,6 +696,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 7cb8fe1c8b..9150b7aba1 100644 --- a/src/Mod/Sketcher/Gui/SketcherSettings.cpp +++ b/src/Mod/Sketcher/Gui/SketcherSettings.cpp @@ -512,6 +512,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); @@ -531,6 +532,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)); } } @@ -572,6 +574,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"); @@ -590,6 +593,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() @@ -622,6 +629,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"); @@ -652,6 +660,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 b1bb992cdb..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 @@ -575,9 +575,9 @@ - 255 - 114 - 243 + 204 + 51 + 153 @@ -587,6 +587,44 @@ View + + + + + Line pattern of external defining edges. + + + -1 + + + + + + + Width of external defining edges. + + + px + + + px + + + 1 + + + 99 + + + 2 + + + ExternalDefiningWidth + + + Mod/Sketcher/View + +