Sketcher: Edges pattern and width by type.

This commit is contained in:
Paddle
2024-01-15 18:38:59 +01:00
committed by Chris Hennes
parent 90d3ede49a
commit b140feabaf
13 changed files with 1565 additions and 1102 deletions

View File

@@ -145,6 +145,38 @@ void EditModeCoinManager::ParameterObserver::initParameters()
[this](const std::string& param) {
updateElementSizeParameters(param);
}},
{"EdgeWidth",
[this, &drawingParameters = Client.drawingParameters](const std::string& param) {
updateWidth(drawingParameters.CurveWidth, param, 2);
}},
{"ConstructionWidth",
[this, &drawingParameters = Client.drawingParameters](const std::string& param) {
updateWidth(drawingParameters.ConstructionWidth, param, 1);
}},
{"InternalWidth",
[this, &drawingParameters = Client.drawingParameters](const std::string& param) {
updateWidth(drawingParameters.InternalWidth, param, 1);
}},
{"ExternalWidth",
[this, &drawingParameters = Client.drawingParameters](const std::string& param) {
updateWidth(drawingParameters.ExternalWidth, param, 1);
}},
{"EdgePattern",
[this, &drawingParameters = Client.drawingParameters](const std::string& param) {
updatePattern(drawingParameters.CurvePattern, param, 0b1111111111111111);
}},
{"ConstructionPattern",
[this, &drawingParameters = Client.drawingParameters](const std::string& param) {
updatePattern(drawingParameters.ConstructionPattern, param, 0b1111110011111100);
}},
{"InternalPattern",
[this, &drawingParameters = Client.drawingParameters](const std::string& param) {
updatePattern(drawingParameters.InternalPattern, param, 0b1111110011111100);
}},
{"ExternalPattern",
[this, &drawingParameters = Client.drawingParameters](const std::string& param) {
updatePattern(drawingParameters.ExternalPattern, param, 0b1110010011100100);
}},
{"CreateLineColor",
[this, drawingParameters = Client.drawingParameters](const std::string& param) {
updateColor(drawingParameters.CreateCurveColor, param);
@@ -384,6 +416,30 @@ void EditModeCoinManager::ParameterObserver::updateElementSizeParameters(
Client.updateInventorNodeSizes();
}
void EditModeCoinManager::ParameterObserver::updateWidth(int& width,
const std::string& parametername,
int def)
{
ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath(
"User parameter:BaseApp/Preferences/Mod/Sketcher/View");
width = hGrp->GetInt(parametername.c_str(), def);
Client.updateInventorWidths();
}
void EditModeCoinManager::ParameterObserver::updatePattern(unsigned int& pattern,
const std::string& parametername,
unsigned int def)
{
ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath(
"User parameter:BaseApp/Preferences/Mod/Sketcher/View");
pattern = hGrp->GetInt(parametername.c_str(), def);
Client.updateInventorPatterns();
}
void EditModeCoinManager::ParameterObserver::updateColor(SbColor& sbcolor,
const std::string& parametername)
{
@@ -691,14 +747,17 @@ EditModeCoinManager::detectPreselection(SoPickedPoint* Point, const SbVec2s& cur
}
// checking for a hit in the curves
if (tail == editModeScenegraphNodes.CurveSet[l]) {
const SoDetail* curve_detail = Point->getDetail(editModeScenegraphNodes.CurveSet[l]);
if (curve_detail && curve_detail->getTypeId() == SoLineDetail::getClassTypeId()) {
// get the index
int curveIndex = static_cast<const SoLineDetail*>(curve_detail)->getLineIndex();
result.GeoIndex = coinMapping.getCurveGeoId(curveIndex, l);
for (int t = 0; t < geometryLayerParameters.getSubLayerCount(); t++) {
if (tail == editModeScenegraphNodes.CurveSet[l][t]) {
const SoDetail* curve_detail =
Point->getDetail(editModeScenegraphNodes.CurveSet[l][t]);
if (curve_detail && curve_detail->getTypeId() == SoLineDetail::getClassTypeId()) {
// get the index
int curveIndex = static_cast<const SoLineDetail*>(curve_detail)->getLineIndex();
result.GeoIndex = coinMapping.getCurveGeoId(curveIndex, l, t);
return result;
return result;
}
}
}
}
@@ -1036,14 +1095,14 @@ void EditModeCoinManager::updateInventorNodeSizes()
{
auto layersconfiguration = viewProvider.VisualLayerList.getValues();
updateInventorWidths();
for (int l = 0; l < geometryLayerParameters.getCoinLayerCount(); l++) {
editModeScenegraphNodes.PointsDrawStyle[l]->pointSize =
8 * drawingParameters.pixelScalingFactor;
editModeScenegraphNodes.PointSet[l]->markerIndex =
Gui::Inventor::MarkerBitmaps::getMarkerIndex("CIRCLE_FILLED",
drawingParameters.markerSize);
editModeScenegraphNodes.CurvesDrawStyle[l]->lineWidth =
layersconfiguration[l].getLineWidth() * drawingParameters.pixelScalingFactor;
}
editModeScenegraphNodes.RootCrossDrawStyle->lineWidth =
@@ -1064,6 +1123,29 @@ void EditModeCoinManager::updateInventorNodeSizes()
pEditModeConstraintCoinManager->rebuildConstraintNodes();
}
void EditModeCoinManager::updateInventorWidths()
{
editModeScenegraphNodes.CurvesDrawStyle->lineWidth =
drawingParameters.CurveWidth * drawingParameters.pixelScalingFactor;
editModeScenegraphNodes.CurvesConstructionDrawStyle->lineWidth =
drawingParameters.ConstructionWidth * drawingParameters.pixelScalingFactor;
editModeScenegraphNodes.CurvesInternalDrawStyle->lineWidth =
drawingParameters.InternalWidth * drawingParameters.pixelScalingFactor;
editModeScenegraphNodes.CurvesExternalDrawStyle->lineWidth =
drawingParameters.ExternalWidth * drawingParameters.pixelScalingFactor;
}
void EditModeCoinManager::updateInventorPatterns()
{
editModeScenegraphNodes.CurvesDrawStyle->linePattern = drawingParameters.CurvePattern;
editModeScenegraphNodes.CurvesConstructionDrawStyle->linePattern =
drawingParameters.ConstructionPattern;
editModeScenegraphNodes.CurvesInternalDrawStyle->linePattern =
drawingParameters.InternalPattern;
editModeScenegraphNodes.CurvesExternalDrawStyle->linePattern =
drawingParameters.ExternalPattern;
}
void EditModeCoinManager::updateInventorColors()
{
editModeScenegraphNodes.RootCrossMaterials->diffuseColor.set1Value(