[DISCUSSION] Constraint's Widget - Open topics

Have some feature requests, feedback, cool stuff to share, or want to know where FreeCAD is going? This is the place.
Forum rules
Be nice to others! Read the FreeCAD code of conduct!
abdullah
Veteran
Posts: 4935
Joined: Sun May 04, 2014 3:16 pm
Contact:

[DISCUSSION] Constraint's Widget - Open topics

Post by abdullah »

This new post attempts to be a restart of the discussions regarding the new functionalities of the constraint widget. If you need or want to dive into previous posts, they are here. However, there is no need to. This topic is to discuss the open topics of the current solution in master, and to provide feedback for further improvement.

First we need to identify which one is the starting point. There have been several iterations (there might be future versions). This is what we are discussing ATM:

Current master
Screenshot_20211015_132608.png
Screenshot_20211015_132608.png (160.56 KiB) Viewed 3105 times
Screenshot_20211015_133316.png
Screenshot_20211015_133316.png (33.2 KiB) Viewed 3105 times
Starting Point
This is where we are originally coming from:
Screenshot_20211015_133024.png
Screenshot_20211015_133024.png (81.01 KiB) Viewed 3105 times
I do not have an old screenshot, but we used to have the first 5 filters of the previous screenshot ('Geometric' was called 'Normal' and did not work properly).

Working:
1. The selection of the filter will cause the list of constraints to be filtered and thus reduced to match the filter.
2. The first checkbox would regulate whether Internal Alignment constraints should follow the filter or be systematically omitted.
3. The second checkbox would regulate whether the additional information (intended for power users) should be shown or not.

Original Problem requirements

The feature was started by Uwe, who identified the problem as relating to constraints cluttering the 3D View.

Requirements for the solution should be:
1) that it allows a faster and more comfortable/ergonomic showing and hiding of groups of constraints in the 3D view.

Additional requirements

Over the discussion the following additional requirements were identified:
2) that the UI controls take the shortest vertical space in the widget, so that the actual list shown in the widget can be longer, as searching constraints was cumbersome.
3) that the filter allowed for a finer grade control, allowing to select individual types of constraints.
4) that the filter could be defined by the aggregation of multiple filters.
5) that not only the constraints matching the filter selection are shown and hidden, but in addition it is possible to make all constraints matching the filter show while making all constraints not in the filter hide.
6) That, in a mode, the operation of (5) is automatically executed when a new filter is selected (filter change), while it is not automatic in another mode.
7) That the mechanism to activate the automatic mode of (6) is "handy" without requiring to go to separate dialogs.
8) That a filter shows the selected constraints
9) That a filter shows the constraints associated to selected geometry element(s).

Description of the current solution

A) Buttons "Show Listed" / "Hide Listed" implement requirement (1). This buttons do not hide anything not selected. This functionality cannot be provided by the button "Restrict Visibility".
B) The separation of the options in a separate dialog (constraint widget settings) is directed to meet requirement (2). As a consequence, the options are less "at hand", but they do not occupy constraint widget vertical space.
C) The increased list of filter types (see screenshot above) is directed to meet requirement (3).
D) The button "Select Multiple" and the corresponding dialog with the list of filters is directed to meet requirement (4)
E) The button "Restrict Visibility" takes care of (5). This functionality cannot be implemented via the buttons of solution (A)
F) The dialog of solution (B) include a 3D view control section (which will be enlarged with new options in the near future when geometry layer are introduced). In this section the "show only filtered constraints" implements the functionality of (6).
G) While it is desirable to have all settings in one place in an appropriately grouped fashion, this makes them "not handy". In the widget directly they would occupy vertical space or, if "hidden" and "shown" on the demand, the dialog will need to be vertically resized creating problems with other widgets. For this reason, visibility shortcuts are provided as checkable items in the drop down of "Restrict Visibility". This dual solution allows selected options to be handy without cluttering the view, while still having all the relevant information in a single point (settings). This implements (7).
H) New filter "Selection Filter" implements (8)
I) New filter "Associated Constraints Filter" implements (9)
Last edited by abdullah on Fri Oct 15, 2021 2:10 pm, edited 1 time in total.
Reason: Go signal for feedback.
abdullah
Veteran
Posts: 4935
Joined: Sun May 04, 2014 3:16 pm
Contact:

Re: [DISCUSSION] Constraint's Widget - Open topics

Post by abdullah »

Open Points on the current solution

There are three open points in my solution, on which I would appreciate feedback in order to move forward with the solution:

ISSUE 1 - Hierarchy - multi-filter - Datum/reference

There is still the open discussion on whether the multi-filter dialog should show a list or a tree.

In a nutshell a tree can be more visual in terms of separation and make better use of the space as the buttons at the bottom could go. A list is more flexible in defining dependencies. One can have different "hierarchies" of filters and groups of filters.

I think we have different "hierarchies", as datums can be named or not, and datums have the issue I describe below.

Related to this, I need to resolve the hierarchy of datum and Reference filters. I would like feedback in how you see this part hierarchically.

1. We have references in the constraint list. This is a reality unlikely to change.
2. We have a filter called "Datum". Should the filter comprise all Datum constraints and References? (This was the case before this feature started) or Should the filter comprise only actual constraints and not the references? (This is the current behaviour). In the current behaviour, if one wants to have both datum constraints and references, one should use either the "All" filter, or a multifilter having "Datum" and "Reference" selected.

This relates to the fact that the "Reference" filter might group a subset of "Datums" that may be of all the "Datums" subgroup types, but are not all of them, as it only applies to the ones that are "References". This all depends on the actual definition of the groups.

I am interested not only in the philosophical discussion, but the practicality of the choices.

Another caveat of the current implementation: If one selects in a multi-filter "Radius", ATM, Reference and non reference Radius are shown. I just realised this doing some testing.

So we need to find which behaviour is the wanted one, so that we can fix the unwanted one (which is one or the other depending what we decide).

ISSUE 2 - Length/Position of the multi-filter dialog

Some voiced concern that in small screens (14/15 inches), the multifilter dialog is too tall by default. Others that in bigger screens, the dialog appears not big enough to show all the filter options. We need to find a consensus.

If we choose to keep the list for flexibility, it might be possible to make some calculations to dynamically resize the dialog if the parent window is big enough. It might be possible to "move" the dialog so that it appears closer to the button triggering it for convenience.

ISSUE 3 - Hide internal alignment option

There is another caveat for discussion and it relates to the behaviour of the setting "hide internal alignment".

It has always been the case that internal alignment constraints are filtered out of the list when this option was active. I think this is the intended behaviour. With the introduction of specific filters per constraint type, there is now a filter option "Internal Alignment".

The current behaviour ATM is showing Internal Alignment constraints regardless of the "hide internal alignment" setting. This is, it violates the setting. However, it appears that it is the only meaningful thing to do. An empty list is not better. But this is caveat 1 of Issue 3 "for discussion".

The second caveat of issue 3 is when the "Internal Alignment" is selected in the multifilter. Currently, the "hide internal alignment" setting is enforced. This is, if active, the Internal Alignment constraints are not shown in the list. From the perspective of a "multiple filter" "all checked" being the same as an all filter. This is consistent. However, when only the "Internal Alignment" is selected in the multifilter, an empty list is shown. This is inconsistent with the behaviour under caveat 1, so this is Caveat 2 of Issue 3 "for discussion".

If the behaviour of Caveat 1 is acceptable, one could deactivate the "Internal Alignment" checkbox if the "hide internal alignment" setting is active. The Check All and Uncheck All buttons of the multi-filter may need to change behaviour.

Here I need to know which behaviour you want to have.
abdullah
Veteran
Posts: 4935
Joined: Sun May 04, 2014 3:16 pm
Contact:

Re: [DISCUSSION] Constraint's Widget - Open topics

Post by abdullah »

Criticisms on the current solution

This post is about showing what has been proposed already and explaining the problems I see with the solutions and the requirements. This should help identify if we drop requirements to adopt other solutions or not.

Use a tree for filters - by user jonasb
show hierarchy - by Shalmeneser
Originally in:
https://forum.freecadweb.org/viewtopic. ... 60#p537760

I think a tree has many advantages if there are not overlapping hierarchies. It provides natural separators. One can remove the two buttons below that list. It is convenient if it is fixed to always be full deployed.

The only problem with this solution, is that we have overlapping hierarchies. Currently at least the "Named" and the "Reference" filters. In the future we might decided to introduce a new filter which groups elements introducing a new overlapping category.

It is in this ability and flexibility that the list is superior to the tree.

The size of the multifilter widget - by uwestoehr

It is acknowledged that the size is too big for small monitors. For the solution it is necessary feedback as said above.

Several problems with the UI - by OpenBrain

Is this post: https://forum.freecadweb.org/viewtopic. ... 93#p539993

This one I will quote it and reply below:
Regarding new feature, I think it's a good feature but doesn't like much the implementation.
I'd prefer that there is a checkbox in front of "Filter" to enable/disable filtering, disabled by default, all associated settings hidden.
The constraint widget has two functionalities: 1) Showing the list of constraints and 2) Handling 3D visibility.

The filter has always affected the list of constraints (as opposed to the visibility). If you want to "disable" the filter you can select "All", which is the same as not filtering. The main problem with a checkbox is that it would be redundant.

If you refer to the checkbox being for handling "3D visibility", there are several problems:
1) Do you want the "Restrict visibility" behaviour or the "hide all"/"show all" behaviour? Explaining what is meant would require, I think, quite a substantial amount of horizontal widget space.
2) In the case of the "Restrict visibility" behaviour, do you want a single shot action, or do you want a continued tracking of the filter?
3) In the case of the "hide all"/"show all" behaviour, a checkbox has state, what should happen upon changing filter? upon manually checking or unchecking individual constraints?
* When you enable filtering by checking the box : associated settings become visible. Settings previously used in the same sketch editing session are preserved (they are lost as soon as sketch editing mode is exited).
* When you disable filtering by unchecking the box, everything is back visible as it was before enabling filtering.
It is unclear if you mean 3D visibility settings or general settings. There are two groups of settings in the constraint widget dialog.

To my knowledge, the last selected option is maintained, as it is stored as a parameter for the current checkboxes. I am unsure if I am missing something. There might be a bug.

Visibility implies modifying the constraint, in that the virtual space in which the constraint is visible is a member of the constraint.

I am not sure what you are proposing.
I don't like the "Show only filtered" to be present at 2 places ("Settings" + "Restrict visibility").
As for information in two places, I think this is a feature, as it allows to have all the settings in one place and accessing the ones that need to be at hand alternatively from an "at hand" location. All in the drop down would not be clear, because only the visibility settings relate to the button. Not all the visibility settings may need to be in the button. The drop down button does not allow for clear grouping. I would tend to leave this drop list as shorter as possible to avoid confusion while having the convenience of being at hand. This was a user request too.
Also to me it consumes a lot of space, and also so strongly impact behavior that it shall be immediately visible.
I realise that space consumption is a general concern of several users. If possible, please, separate functionality from the space problem. The class of solutions for solving the problem are very different.

This button does not actually consume much space, as it is the first line with the Label, Combobox, Button for multifilter and Button for settings which define line length. The button is "large" because it is expanding. I found it better aesthetics to have the other two buttons in the same line as minimum and the visibility one expanding.

I have not found a better option to have separate trigger and state behaviours.
So I would implement it just as a toggle button with a symbol (for example an eye and a list) placed near left the "Settings" button. As it is a toggle button, user immediately sees if it's active or not.
"Select multiple" should IMO be enabled only if "Multiple" is selected as a filter.
By doing so, you would:
1. Increase further the dialog in width.
2. Remove the trigger functionality. Previous feedback wanted to have the option as a one time click and then have full control again, or a mode. Making a stateful button to cover both would imply checking and unchecking in a row to have the trigger only behaviour. This may not be acceptable for many users.

Cutted text - by Shalmeneser
https://forum.freecadweb.org/viewtopic. ... 26#p540026

Please, check that this is a previous version of the UI.

Multiple filter selection APPLY to modify without leaving - by Shalmeneser

A third button or updating on checkbox check should be possible. Never thought about it. Anybody against?

Another dialog layout - by adrianinsaval

This dialog:
Image

This dialog does not meet several requirements (assuming that with AutoView the tracking is intended). See the first post.
In addition, it also restitutes options that are not commonly used and for which there is not a reason to have them there (thus why they were removed to a separate dialog).

Now please, your feedback.
Last edited by abdullah on Fri Oct 15, 2021 2:12 pm, edited 1 time in total.
Reason: Remove rests from drafting.
openBrain
Veteran
Posts: 9031
Joined: Fri Nov 09, 2018 5:38 pm
Contact:

Re: [DISCUSSION] Constraint's Widget - Open topics

Post by openBrain »

OK, these 3 posts are a piece of bravour. :) I read them already once. Will need to read again. :) Expect my feedback in the coming days. ;)
chrisb
Veteran
Posts: 53785
Joined: Tue Mar 17, 2015 9:14 am

Re: [DISCUSSION] Constraint's Widget - Open topics

Post by chrisb »

abdullah wrote: Fri Oct 15, 2021 1:07 pm Requirements for the solution should be:
1) that it allows a faster and more comfortable/ergonomic showing and hiding of groups of constraints in the 3D view.

Additional requirements

Over the discussion the following additional requirements were identified:
2) that the UI controls take the shortest vertical space in the widget, so that the actual list shown in the widget can be longer, as searching constraints was cumbersome.
3) that the filter allowed for a finer grade control, allowing to select individual types of constraints.
4) that the filter could be defined by the aggregation of multiple filters.
5) that not only the constraints matching the filter selection are shown and hidden, but in addition it is possible to make all constraints matching the filter show while making all constraints not in the filter hide.
6) That, in a mode, the operation of (5) is automatically executed when a new filter is selected (filter change), while it is not automatic in another mode.
7) That the mechanism to activate the automatic mode of (6) is "handy" without requiring to go to separate dialogs.
8) That a filter shows the selected constraints
9) That a filter shows the constraints associated to selected geometry element(s).
Others may correct me, but I think that the very vast majority of sketcher edits uses hardly any filter. In order not to burden them, point 2) seems to be important so that the cost of a few more clicks for other requirements seems appropriate

So I would go for a checkbox "use filter" and a button "configure filter ..." which opens the configure dialog.

This would take care of 2) where not only no additional space should be consumed, but some is even saved.

3) and 4) would be met by a multiselect as it is implemented now.

5) The configure dialog could have a button "invert selection" which replaces the "hide" option. It would make a clear concept if only selected constraints are shown.

6) This seems useful for newly added constraints, which should always be shown.
Another checkbox in the configure dialog "Always show newly added constraints" could do it.

7) What's the use case? It is that after adding some constraints you want them to be filtered. With my proposal it would be unchecking the "use filter" checkbox in the main window and then checking it again. This would be nearly as fast as a single click.
Another option would be a "Reload" or "Recompute" icon. It would still fit in the single line.

8), 9) Not sure about these, it could be implemented by special list entries or by a button. As these are sort of "on-time-filter-now" things they could set the checkbox from 6).

If you want me to make a mockup, I would go for it, but it would take a while for me to learn a few steps Qt Designer.
A Sketcher Lecture with in-depth information is available in English, auf Deutsch, en français, en español.
Syres
Veteran
Posts: 2891
Joined: Thu Aug 09, 2018 11:14 am

Re: [DISCUSSION] Constraint's Widget - Open topics

Post by Syres »

chrisb wrote: Sat Oct 16, 2021 9:01 am If you want me to make a mockup, I would go for it, but it would take a while for me to learn a few steps Qt Designer.
I'm sure the community doesn't need an actual UI file at this stage, just use your favourite image editor and some cut & pasting to give the rough idea.

Purely from a personal point of view in the four years I've used FreeCAD I can't ever remember thinking 'I really need to hide this type of constraint', so for me less is more, keep it simple please.
abdullah
Veteran
Posts: 4935
Joined: Sun May 04, 2014 3:16 pm
Contact:

Re: [DISCUSSION] Constraint's Widget - Open topics

Post by abdullah »

chrisb wrote: Sat Oct 16, 2021 9:01 am If you want me to make a mockup, I would go for it, but it would take a while for me to learn a few steps Qt Designer.
For me there are two phases: 1) Requirements 2) Solutions/Implementations

If we are changing the requirements, we need to find a consensus of which requirements stay and which are dropped. Then we can think of the UI.

I want to stress that the current solution in master meets all those requirements.
chrisb wrote: Sat Oct 16, 2021 9:01 am Others may correct me, but I think that the very vast majority of sketcher edits uses hardly any filter. In order not to burden them, point 2) seems to be important so that the cost of a few more clicks for other requirements seems appropriate
Until now, the filter was a mere convenience to find the right constraint in a long list (and was still not very useful when the resulting list was still long). This may have changed now.

This morning I was doing some sketching. I wanted to remove the right coincidence constraint where there were several overlapping. I enabled the "Associated Constraints filter", with the auto tracking "Show only filtered constraints" (I keep this always on), and clicked on one edge. The list would show me only the coincidents affecting this edge. This was a quick way to find it.

Allow me to summarise what I understand from your proposal (correct me if I am wrong):

1. Removing the second row of controls (So only one row would remain)
2. Have the settings button display a separate dialog with all the settings and the multi-filter configuration (not sure if also with the current buttons "show Listed" and "Hide Listed").
4. Add a check box to the first row of controls to activate/deactivate a functionality of the visibility filter (the functionality being defined by the settings dialog).

This would result in dropping at least requirements (1) and (7), unclear what exactly would happen with (5)-(6) which could be in the separate dialog.

Note: This solution will not save horizontal space, only vertical space.

This would remove the functionality Uwe coded in his original PR in full (unless the buttons are in the settings dialog, which is not handy, and probably misleading).
chrisb wrote: Sat Oct 16, 2021 9:01 am 5) The configure dialog could have a button "invert selection" which replaces the "hide" option. It would make a clear concept if only selected constraints are shown.
Not sure if "invert" is the "Restrict Visibility" trigger button, or if you mean by "invert selection" "hide was is in the scope of the filter and do nothing to the rest".
chrisb wrote: Sat Oct 16, 2021 9:01 am 7) What's the use case? It is that after adding some constraints you want them to be filtered. With my proposal it would be unchecking the "use filter" checkbox in the main window and then checking it again. This would be nearly as fast as a single click.
Another option would be a "Reload" or "Recompute" icon. It would still fit in the single line.
That is possible, but I do not think it is good UI to double click a checkbox to get execute once an action.

Anything can fit in a sufficiently long single row...Your row is getting wider and wider :D

Do not be fooled by the length of the "Restrict Visibility" button. This is big because the first row defines the width of the dialog. It can be substituted by a same button with drop and with an icon and be much smaller. Yet if put on the current first row, it will only make it wider.
chrisb wrote: Sat Oct 16, 2021 9:01 am 8), 9) Not sure about these, it could be implemented by special list entries or by a button. As these are sort of "on-time-filter-now" things they could set the checkbox from 6).
No, they are not. The filter gets executed on every selection change. Please check it.

Grab that new master and use the "Associated Constraint Filter" from the Filter combobox with or without the option "Show only filtered constraints" (your choice). This is quite a cool inspection tool in my opinion.

These are implemented and do not take space at all.
Syres wrote: Sat Oct 16, 2021 11:49 am Purely from a personal point of view in the four years I've used FreeCAD I can't ever remember thinking 'I really need to hide this type of constraint', so for me less is more, keep it simple please.
Almost No one of us has probably have that thought. The tool was not there either.

Parts of the current implementation cover a niche usage. Others might be more practical than it initially meets the eye.

I won't change the current implementation for a couple of weeks to enable everybody to have reasonable time to check it and find what is useful and what is not. Please try to see what is useful for you (if any part of it).
User avatar
Shalmeneser
Veteran
Posts: 9443
Joined: Wed Dec 23, 2020 12:04 am
Location: Fr

Re: [DISCUSSION] Constraint's Widget - Open topics

Post by Shalmeneser »

* If you are looking for a sketch to try hide/show : https://forum.freecadweb.org/viewtopic. ... 67#p540401

* I need an [APPLY] button in Multiple Filter Selection to modify instantly the selection.
Or better the view change automatically with the selection.

* In Simple Filter Selection, would it be possible to just show existing constraints ?
User avatar
adrianinsaval
Veteran
Posts: 5534
Joined: Thu Apr 05, 2018 5:15 pm

Re: [DISCUSSION] Constraint's Widget - Open topics

Post by adrianinsaval »

abdullah wrote: As far as I have understood, the usage case is to hide a whole selected filter with "hide listed" button, then selectively show one or two or several, then activate all in the filter again with the button "show listed". All this while showing in the 3D view all other constraints. This cannot be done with the "tracking option", which would hide all the other constraints.
IMO it's easily done using multiple filters, I can't think of anything those buttons can do that the multi filter can't.
Also, IMO the tracking option should be on by default.
For this reason, visibility shortcuts are provided as checkable items in the drop down of "Restrict Visibility". This dual solution allows selected options to be handy without cluttering the view, while still having all the relevant information in a single point (settings). This implements (7).
I don't think it's necessary to have the tracking checkbox in the settings widget if it's already in the dropdown
ISSUE 3 - Hide internal alignment option
what if we remove the hide internal alignment option and add a new filter All - except internal alignment that will be the default instead of All
Multiple filter selection APPLY to modify without leaving - by Shalmeneser

A third button or updating on checkbox check should be possible. Never thought about it. Anybody against?
how about modifying it live while checking the box? that is, it will apply every time you check a box so you won't need a button not even an ok button.
drmacro
Veteran
Posts: 8806
Joined: Sun Mar 02, 2014 4:35 pm

Re: [DISCUSSION] Constraint's Widget - Open topics

Post by drmacro »

I noticed in today's git that I could only see one element in the element display, scrolling one at a time, and the elements box wouldn't expand any further.

Didn't have time to pursue more.
Star Trek II: The Wrath of Khan: Spock: "...His pattern indicates two-dimensional thinking."
Post Reply