Sketcher: Preference pattern and width added for External defining geometry

This commit is contained in:
Andrew Shkolik
2025-03-03 23:51:26 -06:00
parent 269f0aed20
commit 76611ef3dc
6 changed files with 94 additions and 10 deletions

View File

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

View File

@@ -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<int>(SubLayer::Normal);
if (egf->testFlag(Sketcher::ExternalGeometryExtension::Defining)) {
return static_cast<int>(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,

View File

@@ -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<int>(SubLayer::External);
}
bool isExternalDefiningSubLayer(int t) const
{
return t == static_cast<int>(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;
//@}

View File

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

View File

@@ -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);
}
/**

View File

@@ -487,7 +487,7 @@
<item row="9" column="0">
<widget class="QLabel" name="label_20">
<property name="text">
<string>External geometry</string>
<string>External reference geometry</string>
</property>
</widget>
</item>
@@ -575,9 +575,9 @@
</property>
<property name="color" stdset="0">
<color>
<red>255</red>
<green>114</green>
<blue>243</blue>
<red>204</red>
<green>51</green>
<blue>153</blue>
</color>
</property>
<property name="prefEntry" stdset="0">
@@ -587,6 +587,44 @@
<cstring>View</cstring>
</property>
</widget>
</item>
<item row="10" column="3">
<widget class="QComboBox" name="ExternalDefiningPattern">
<property name="toolTip">
<string>Line pattern of external defining edges.</string>
</property>
<property name="currentIndex">
<number>-1</number>
</property>
</widget>
</item>
<item row="10" column="4">
<widget class="Gui::PrefSpinBox" name="ExternalDefiningWidth">
<property name="toolTip">
<string>Width of external defining edges.</string>
</property>
<property name="unit" stdset="0">
<string notr="true">px</string>
</property>
<property name="suffix">
<string notr="true"> px</string>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>99</number>
</property>
<property name="value">
<number>2</number>
</property>
<property name="prefEntry" stdset="0">
<cstring>ExternalDefiningWidth</cstring>
</property>
<property name="prefPath" stdset="0">
<cstring>Mod/Sketcher/View</cstring>
</property>
</widget>
</item>
<item row="11" column="0">
<widget class="QLabel" name="label_45">