Sketcher: Constraint Widget extended filter

===========================================

- Remove "Normal" as it did exactly the same as "All".
- Add "Geometric" to filter only Geometric (non datum) constraints
- Add all individual constraint types to filter.

As per request:
https://forum.freecadweb.org/viewtopic.php?p=534176#p534176
This commit is contained in:
Abdullah Tahiri
2021-09-19 18:45:10 +02:00
parent e233ba54e6
commit 4243790627
3 changed files with 164 additions and 16 deletions

View File

@@ -912,45 +912,71 @@ void TaskSketcherConstrains::slotConstraintsChanged(void)
ConstraintItem * it = static_cast<ConstraintItem*>(ui->listWidgetConstraints->item(i));
bool visible = true;
/* Filter
0 <=> All
1 <=> Normal
2 <=> Datums
3 <=> Named
4 <=> Non-Driving
*/
bool showNormal = (Filter < 2);
bool showDatums = (Filter < 3);
bool showNamed = (Filter == 3 && !(constraint->Name.empty()));
bool showNonDriving = (Filter == 4 && !constraint->isDriving);
bool showAll = (Filter == FilterValue::All);
bool showGeometric = (Filter == FilterValue::Geometric);
bool showDatums = (Filter == FilterValue::Datums);
bool showNamed = (Filter == FilterValue::Named && !(constraint->Name.empty()));
bool showNonDriving = (Filter == FilterValue::NonDriving && !constraint->isDriving);
bool hideInternalAlignment = this->ui->filterInternalAlignment->isChecked();
switch(constraint->Type) {
case Sketcher::Horizontal:
visible = showAll || showGeometric || showNamed || (Filter == FilterValue::Horizontal);
break;
case Sketcher::Vertical:
visible = showAll || showGeometric || showNamed || (Filter == FilterValue::Vertical);
break;
case Sketcher::Coincident:
visible = showAll || showGeometric || showNamed || (Filter == FilterValue::Coincident);
break;
case Sketcher::PointOnObject:
visible = showAll || showGeometric || showNamed || (Filter == FilterValue::PointOnObject);
break;
case Sketcher::Parallel:
visible = showAll || showGeometric || showNamed || (Filter == FilterValue::Parallel);
break;
case Sketcher::Perpendicular:
visible = showAll || showGeometric || showNamed || (Filter == FilterValue::Perpendicular);
break;
case Sketcher::Tangent:
visible = showAll || showGeometric || showNamed || (Filter == FilterValue::Tangent);
break;
case Sketcher::Equal:
visible = showAll || showGeometric || showNamed || (Filter == FilterValue::Equality);
break;
case Sketcher::Symmetric:
visible = showAll || showGeometric || showNamed || (Filter == FilterValue::Symmetric);
break;
case Sketcher::Block:
visible = showNormal || showNamed;
visible = showAll || showGeometric || showNamed || (Filter == FilterValue::Block);
break;
case Sketcher::Distance:
visible = ( showAll || showDatums || showNamed || showNonDriving) || (Filter == FilterValue::Distance);
break;
case Sketcher::DistanceX:
visible = ( showAll || showDatums || showNamed || showNonDriving) || (Filter == FilterValue::HorizontalDistance);
break;
case Sketcher::DistanceY:
visible = ( showAll || showDatums || showNamed || showNonDriving) || (Filter == FilterValue::VerticalDistance);
break;
case Sketcher::Radius:
visible = ( showAll || showDatums || showNamed || showNonDriving) || (Filter == FilterValue::Radius);
break;
case Sketcher::Weight:
visible = ( showAll || showDatums || showNamed || showNonDriving) || (Filter == FilterValue::Weight);
break;
case Sketcher::Diameter:
visible = ( showAll || showDatums || showNamed || showNonDriving) || (Filter == FilterValue::Diameter);
break;
case Sketcher::Angle:
visible = ( showAll || showDatums || showNamed || showNonDriving) || (Filter == FilterValue::Angle);
break;
case Sketcher::SnellsLaw:
visible = (showDatums || showNamed || showNonDriving);
visible = ( showAll || showDatums || showNamed || showNonDriving) || (Filter == FilterValue::SnellsLaw);
break;
case Sketcher::InternalAlignment:
visible = ((showNormal || showNamed) && !hideInternalAlignment);
visible = (( showAll || showGeometric || showNamed || Filter == FilterValue::InternalAlignment) &&
(!hideInternalAlignment || (Filter == FilterValue::InternalAlignment)));
default:
break;
}

View File

@@ -71,6 +71,33 @@ class TaskSketcherConstrains : public Gui::TaskView::TaskBox, public Gui::Select
{
Q_OBJECT
enum FilterValue {
All = 0,
Geometric = 1,
Datums = 2,
Named = 3,
NonDriving = 4,
Horizontal = 5,
Vertical = 6,
Coincident = 7,
PointOnObject = 8,
Parallel = 9,
Perpendicular = 10,
Tangent = 11,
Equality = 12,
Symmetric = 13,
Block = 14,
Distance = 15,
HorizontalDistance = 16,
VerticalDistance = 17,
Radius = 18,
Weight = 19,
Diameter = 20,
Angle = 21,
SnellsLaw = 22,
InternalAlignment = 23
};
public:
TaskSketcherConstrains(ViewProviderSketch *sketchView);
~TaskSketcherConstrains();

View File

@@ -47,7 +47,7 @@
</item>
<item>
<property name="text">
<string>Normal</string>
<string>Geometric</string>
</property>
</item>
<item>
@@ -65,6 +65,101 @@
<string>Reference</string>
</property>
</item>
<item>
<property name="text">
<string>Horizontal</string>
</property>
</item>
<item>
<property name="text">
<string>Vertical</string>
</property>
</item>
<item>
<property name="text">
<string>Coincident</string>
</property>
</item>
<item>
<property name="text">
<string>Point on Object</string>
</property>
</item>
<item>
<property name="text">
<string>Parallel</string>
</property>
</item>
<item>
<property name="text">
<string>Perpendicular</string>
</property>
</item>
<item>
<property name="text">
<string>Tangent</string>
</property>
</item>
<item>
<property name="text">
<string>Equality</string>
</property>
</item>
<item>
<property name="text">
<string>Symmetric</string>
</property>
</item>
<item>
<property name="text">
<string>Block</string>
</property>
</item>
<item>
<property name="text">
<string>Distance</string>
</property>
</item>
<item>
<property name="text">
<string>Horizontal Distance</string>
</property>
</item>
<item>
<property name="text">
<string>Vertical Distance</string>
</property>
</item>
<item>
<property name="text">
<string>Radius</string>
</property>
</item>
<item>
<property name="text">
<string>Weight</string>
</property>
</item>
<item>
<property name="text">
<string>Diameter</string>
</property>
</item>
<item>
<property name="text">
<string>Angle</string>
</property>
</item>
<item>
<property name="text">
<string>Snell's Law</string>
</property>
</item>
<item>
<property name="text">
<string>Internal Alignment</string>
</property>
</item>
</widget>
</item>
</layout>