Part: [skip ci] add option to set two-side rendering of Part shapes

This commit is contained in:
wmayer
2020-02-22 12:09:26 +01:00
parent f43391524b
commit 8832356802
3 changed files with 141 additions and 122 deletions

View File

@@ -64,6 +64,7 @@ void DlgSettingsObjectColor::saveSettings()
ui->DefaultShapeVertexColor->onSave();
ui->DefaultShapeVertexSize->onSave();
ui->BoundingBoxColor->onSave();
ui->twosideRendering->onSave();
// Annotations
ui->AnnotationTextColor->onSave();
}
@@ -78,6 +79,7 @@ void DlgSettingsObjectColor::loadSettings()
ui->DefaultShapeVertexColor->onRestore();
ui->DefaultShapeVertexSize->onRestore();
ui->BoundingBoxColor->onRestore();
ui->twosideRendering->onRestore();
// Annotations
ui->AnnotationTextColor->onRestore();
}

View File

@@ -22,32 +22,6 @@
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<layout class="QGridLayout" name="gridLayout">
<item row="3" column="0">
<widget class="QLabel" name="label_10">
<property name="minimumSize">
<size>
<width>182</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>Default vertex color</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_8">
<property name="minimumSize">
<size>
<width>182</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>Bounding box color</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_6">
<property name="minimumSize">
@@ -61,6 +35,52 @@
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="Gui::PrefColorButton" name="DefaultShapeColor">
<property name="toolTip">
<string>The default color for new shapes</string>
</property>
<property name="color" stdset="0">
<color>
<red>204</red>
<green>204</green>
<blue>204</blue>
</color>
</property>
<property name="prefEntry" stdset="0">
<cstring>DefaultShapeColor</cstring>
</property>
<property name="prefPath" stdset="0">
<cstring>View</cstring>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="Gui::PrefCheckBox" name="checkRandomColor">
<property name="text">
<string>Random shape color</string>
</property>
<property name="prefEntry" stdset="0">
<cstring>RandomColor</cstring>
</property>
<property name="prefPath" stdset="0">
<cstring>View</cstring>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_7">
<property name="minimumSize">
<size>
<width>182</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>Default line color</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="Gui::PrefColorButton" name="DefaultShapeLineColor">
<property name="toolTip">
@@ -81,23 +101,16 @@
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="Gui::PrefColorButton" name="DefaultShapeColor">
<property name="toolTip">
<string>The default color for new shapes</string>
<item row="2" column="0">
<widget class="QLabel" name="label_9">
<property name="minimumSize">
<size>
<width>182</width>
<height>0</height>
</size>
</property>
<property name="color" stdset="0">
<color>
<red>204</red>
<green>204</green>
<blue>204</blue>
</color>
</property>
<property name="prefEntry" stdset="0">
<cstring>DefaultShapeColor</cstring>
</property>
<property name="prefPath" stdset="0">
<cstring>View</cstring>
<property name="text">
<string>Default line width</string>
</property>
</widget>
</item>
@@ -123,50 +136,8 @@
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="Gui::PrefSpinBox" name="DefaultShapeVertexSize">
<property name="toolTip">
<string>The default size for new vertices</string>
</property>
<property name="suffix">
<string>px</string>
</property>
<property name="maximum">
<number>9</number>
</property>
<property name="value">
<number>2</number>
</property>
<property name="prefEntry" stdset="0">
<cstring>DefaultShapePointSize</cstring>
</property>
<property name="prefPath" stdset="0">
<cstring>View</cstring>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="Gui::PrefColorButton" name="BoundingBoxColor">
<property name="toolTip">
<string>The color of bounding boxes in the 3D view</string>
</property>
<property name="color" stdset="0">
<color>
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</property>
<property name="prefEntry" stdset="0">
<cstring>BoundingBoxColor</cstring>
</property>
<property name="prefPath" stdset="0">
<cstring>View</cstring>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_11">
<item row="3" column="0">
<widget class="QLabel" name="label_10">
<property name="minimumSize">
<size>
<width>182</width>
@@ -174,33 +145,7 @@
</size>
</property>
<property name="text">
<string>Default vertex size</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_9">
<property name="minimumSize">
<size>
<width>182</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>Default line width</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_7">
<property name="minimumSize">
<size>
<width>182</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>Default line color</string>
<string>Default vertex color</string>
</property>
</widget>
</item>
@@ -224,19 +169,93 @@
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="Gui::PrefCheckBox" name="checkRandomColor">
<item row="4" column="0">
<widget class="QLabel" name="label_11">
<property name="minimumSize">
<size>
<width>182</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>Random shape color</string>
<string>Default vertex size</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="Gui::PrefSpinBox" name="DefaultShapeVertexSize">
<property name="toolTip">
<string>The default size for new vertices</string>
</property>
<property name="suffix">
<string>px</string>
</property>
<property name="maximum">
<number>9</number>
</property>
<property name="value">
<number>2</number>
</property>
<property name="prefEntry" stdset="0">
<cstring>RandomColor</cstring>
<cstring>DefaultShapePointSize</cstring>
</property>
<property name="prefPath" stdset="0">
<cstring>View</cstring>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_8">
<property name="minimumSize">
<size>
<width>182</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>Bounding box color</string>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="Gui::PrefColorButton" name="BoundingBoxColor">
<property name="toolTip">
<string>The color of bounding boxes in the 3D view</string>
</property>
<property name="color" stdset="0">
<color>
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</property>
<property name="prefEntry" stdset="0">
<cstring>BoundingBoxColor</cstring>
</property>
<property name="prefPath" stdset="0">
<cstring>View</cstring>
</property>
</widget>
</item>
<item row="6" column="0" colspan="3">
<widget class="Gui::PrefCheckBox" name="twosideRendering">
<property name="minimumSize">
<size>
<width>182</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>Two-side rendering</string>
</property>
<property name="prefEntry" stdset="0">
<cstring>TwoSideRendering</cstring>
</property>
<property name="prefPath" stdset="0">
<cstring>Mod/Part</cstring>
</property>
</widget>
</item>
</layout>
</item>
<item>

View File

@@ -246,6 +246,8 @@ ViewProviderPartExt::ViewProviderPartExt()
("User parameter:BaseApp/Preferences/Mod/Part");
NormalsFromUV = hPart->GetBool("NormalsFromUVNodes", NormalsFromUV);
long twoside = hPart->GetBool("TwoSideRendering", false) ? 1 : 0;
// Let the user define a custom lower limit but a value less than
// OCCT's epsilon is not allowed
double lowerLimit = hPart->GetFloat("MinimumDeviation", tessRange.LowerBound);
@@ -274,7 +276,7 @@ ViewProviderPartExt::ViewProviderPartExt()
Deviation.setConstraints(&tessRange);
ADD_PROPERTY(AngularDeflection,(28.65));
AngularDeflection.setConstraints(&angDeflectionRange);
ADD_PROPERTY(Lighting,(1));
ADD_PROPERTY(Lighting,(twoside));
Lighting.setEnums(LightingEnums);
ADD_PROPERTY(DrawStyle,((long int)0));
DrawStyle.setEnums(DrawStyleEnums);
@@ -502,10 +504,6 @@ void ViewProviderPartExt::attach(App::DocumentObject *pcFeat)
pcPointsRoot->boundingBoxCaching =
wireframe->boundingBoxCaching = SoSeparator::OFF;
// enable two-side rendering
pShapeHints->vertexOrdering = SoShapeHints::COUNTERCLOCKWISE;
pShapeHints->shapeType = SoShapeHints::UNKNOWN_SHAPE_TYPE;
// Avoid any Z-buffer artifacts, so that the lines always appear on top of the faces
// The correct order is Edges, Polygon offset, Faces.
SoPolygonOffset* offset = new SoPolygonOffset();