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