Philosophical thoughts (?) About FreeCAD.

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!
freedman
Veteran
Posts: 3474
Joined: Thu Mar 22, 2018 3:02 am
Location: Washington State, USA

Re: Philosophical thoughts (?) About FreeCAD.

Post by freedman »

Somewhere in the time-line of complicated computer software the programmers quit using the icon as an indicator of is the process available.
Just making comments on the computer/user interaction and the human side of things. We open the program and there are 50+ icons and they are all enabled and the 3D screen is blank. That's a hand-full for a new user. I know FreeCAD isn't ready for this to be fixed now but I wanted to bring up the user experience and explore some thoughts. I think our fast computers will take care of the update rates.

I believe Apples goals were to make a program that almost didn't need a manual, it was self explanatory.

Could we have a text file that would allow 3rd rate programmers like me to put in a list which icons should be enabled at different times, the main programmers would only need to code in the hooks. This could make the selections dynamic and could easily evolve with the program for years to come.

What about making the icon not dim but actually change to a blank ( keep a place holder), this way my eyes only need to scan the icons that are relevant. When icons are dimmed my brain still has to resolve the image and what to do with it.
User avatar
onekk
Veteran
Posts: 6222
Joined: Sat Jan 17, 2015 7:48 am
Contact:

Re: Philosophical thoughts (?) About FreeCAD.

Post by onekk »

A program that don't need a manual, I think it is utopic, if you are not thinking of a program that has a "manual included", or some tutorial, like in some "android app" when you first use them they will guide you to a panoramic of some beginners functions, to get you started with the program.

I agree that some "common behaviour" has to be "stated", like open an save and close a file, cut copy and paste, but in a "complicate program" a manual is needed to explain at least some basics.

Take thi example in 3d graphics there are many "coordinate system" and manby other way to "write a rotation in 3d space" OCCT has 24 ways of such things, as example what is the "standard" coordinate system, what is the "usual way" to write a rotation, how you will change units and colors in the interface or colors of lines in the 3d view?

How you will explain this thing with only icons and greyed buttons?

Not to criticize, but it seems too utopic, even for visionary people like those worked at Apple in the "good old days".

Regards

Carlo D.
GitHub page: https://github.com/onekk/freecad-doc.
- In deep articles on FreeCAD.
- Learning how to model with scripting.
- Various other stuffs.

Blog: https://okkmkblog.wordpress.com/
chrisb
Veteran
Posts: 54293
Joined: Tue Mar 17, 2015 9:14 am

Re: Philosophical thoughts (?) About FreeCAD.

Post by chrisb »

The Apple way is good if not excellent for beginners. But I have always the feeling that users don't advance very much over the beginners level.
A Sketcher Lecture with in-depth information is available in English, auf Deutsch, en français, en español.
heda
Veteran
Posts: 1348
Joined: Sat Dec 12, 2015 5:49 pm

Re: Philosophical thoughts (?) About FreeCAD.

Post by heda »

@freedman

I'm sympathetic to the idea, in part it is already done that way - some confusion might be in that an abundance of commands are possible to use at most times. Some of course requires a selection first to work, whereas they could work so that if nothing is selected and the command is invoked - a hint of what to do could come up - in a lot of cases this hint is actually there, but it is in the report view, which I do not think is part of the window layout for a fresh install.

One can also notice that several new users needs a hint to understand that the toolbars in the default window layout are often compressed, so they need to be expanded for all buttons to show. It could be an idea to simply change the default toolbar layout so that a typical screen/window size does not have collapsed toolbars (like using one more row for the toolbars).

One could wonder how many new users that are actually aware of the "what's this" button, i.e. the shortcut to the correct place in the wiki.
Considering that of the 2-3 buttons I clicked just to confirm that it was working, one of them had a terrible layout with overlapping text and pictures, and another one was blank - one could suspect that not too many are actually using this feature (for myself I tend to just do the wiki directly, but if the layout was tip-top on the built-in, I think I would in general prefer that one).

Making one of those hooks for enabling/disabling icons in the toolbar is not complicated, and I do not think a specific text file is needed as such, a python dict should be text like enough.
The tricky things start when one would map out all different states (think "is something selected", "what is selected" etc) and their exceptions/conditions in order to make such a list that is truly useful - there will be a lot of things to check to find out how a button should be treated, that logic will need to be nested and divided into different categories.

the fruity way is to guide the path, the other way is to give a slap on the fingers afterwards in form of an info/error message, which hand on the heart can be as effective (at least after a couple of times), but for sure probably nicer for the user with the guiding from the start. The worst way is of course if the program is totally on strike and shares no info before you find that specific magic of buttons or selections that runs a command successfully.

the enabling/disabling of tool bar buttons is not the hard part, here is a hook that will do it.

Code: Select all

from PySide.QtGui import QToolBar, QToolButton

mw = Gui.getMainWindow()

control = {"What's This?": False}

for tb in mw.findChildren(QToolBar):
  for btn in tb.findChildren(QToolButton):
    print(btn.text(), btn.isEnabled())
    if btn.text() in control:
      print('should I do something now?')
      if not control.get(btn.text()):
        btn.setDisabled(True)
        print('it is now changed')
Python dicts can easily contain nested structures, like dicts or lists, so any good ideas of how a mapping of what is enabled/disabled could look like?
For the record, I imagine that making info/error messages after the fact is by far the easiest, it comes quite naturally with the coding, it is not hard to put a print statement inside an if statement to inform the user of that particular condition/state, making the same in a dict is basically repeating/reproducing the logic already existing in the code.

Now with all that said, having something like this would probably be great for one set of users, and less great for another set of users.
I put myself into the latter set, simply for the reason that I do not have much trouble to guess what commands are usable and not under which conditions, this is sprung out of a bit of basic knowledge of math and geometry. Simple things like connect 2 points makes a line, to sweep one needs a profile and a path to drag that profile along. If one does not have a decent understanding of some of those basic behaviours in generating different geometrical shapes, it might not be enabled/disabled icons that is the real hurdle, it might just be the understanding of what the basic steps for constructing different geometries and how the tools of the trade (extrude/revolve/sweep/loft) work that is the true hurdle to get over.
(maybe it would be a good idea to make a wiki page for these type of basics for new comers - just throwing it out there...)

most bang for the buck is probably to work on how to guide the individual workflows (for each button or construct), like "how to make it self explanatory in the gui when making a revolve", what is needed? a sketch/closed profile and an axis to revolve around. Is the text there today in the task dialogues good enough, should there be a help button in the task dialogue? If so, should that button be a preference setting for the ones that does not want to see them?

In general I think there are 2 "extreme" categories of learning, one that is going by the philosophy of "click and let's see what happens, there is always undo, either it works or not", another one is "will not click a single button unless I already know what is going to happen and what I need to do to avoid errors". The later one will read a complete book (or several books) without even starting the program.

fc somehow needs to cater for both of these extremes, while at the same time onboarding users that actually do not know the underlying basics that is needed to successfully use a 3d parametric cad-system.
Bance
Veteran
Posts: 4274
Joined: Wed Feb 11, 2015 3:00 pm
Location: London

Re: Philosophical thoughts (?) About FreeCAD.

Post by Bance »

@heda,
nicely presented. Let's get Euclid back on the curriculum!
heda wrote: Tue May 18, 2021 8:42 pmthere are 2 "extreme" categories of learning
I find the most frustrating posts on the forum are the ones that contain the phrase "what happens if I do that?" :lol:

Save the model then suck it and see......
User avatar
onekk
Veteran
Posts: 6222
Joined: Sat Jan 17, 2015 7:48 am
Contact:

Re: Philosophical thoughts (?) About FreeCAD.

Post by onekk »

The main obstacle is that there no one right way to do things, in 3d modeling you could reach same result using different ways.

So "suggestions" are difficult to do as it is more a chess game in which you have to think about future moves.

You coul create a polygon in many ways, joining lines or giving vertexes to a makePolygon method, what happens if implementations may vary in times the suggestions could become another "level of complexity".

Now the main blocker to beginners is the lack of update tutorials and documentation, so better focusing on this matter than to foresee other level of complexity.

I've opened recently a simply discussion on "improve docstrings" and add more documentation in form of comments in source code.

This is a relatively easy and not boocking task as comment don't affect the usability of the code and don't break compatibility at all.

But having a proper docstrings that could "evolve" in a better tooltip and maybe a F1 press to get help could be a very significant step. As every command could be typed in python console to get hints and helps, it's a matter of documenting the way FreeCAD is working.

When you see that for a Part.Face you could input various things and if you pass a list of wires first wire is treated as the main face and rest are intended as holes, you have seen anothervway to do things other than use directly Boolean operations.

This documentation is lacking in the docstrings, only a message if error will state some of this thing but didn't explain not much more. (Hoping it is the right way to express in English).


Idea is good on improving user interaction with messages and tooltips, but for some things a tooltip is not enough at least if you want that a tooltip is not an entire pdf file to be shown.

Hope to have been clear, not to criticize this discussion that have some very interesting idea and some interesting "point if views" that is ever a pleasure to see other than "help request".

Regards

Carlo D.
GitHub page: https://github.com/onekk/freecad-doc.
- In deep articles on FreeCAD.
- Learning how to model with scripting.
- Various other stuffs.

Blog: https://okkmkblog.wordpress.com/
User avatar
jpg87
Posts: 809
Joined: Thu Mar 16, 2017 7:16 am
Location: Limoges - France
Contact:

Re: Philosophical thoughts (?) About FreeCAD.

Post by jpg87 »

Hello,
After your various thoughts I got back to work :
I tried to organize a help for beginners, in which information arrives as and when needed (I will complete with small examples).
http://help-freecad-jpg87.fr/0130b_pi_princ_creat.php

Hope this will be helpful.
My website : http://help-freecad-jpg87.fr updated 2023/11/06
freedman
Veteran
Posts: 3474
Joined: Thu Mar 22, 2018 3:02 am
Location: Washington State, USA

Re: Philosophical thoughts (?) About FreeCAD.

Post by freedman »

jpg87, That is a well thought-out site you have there.

If your after any site feedback, I would change the FreeCAD icon (with the toy car under), I think it gives the impression of a "for-kids only".
User avatar
jpg87
Posts: 809
Joined: Thu Mar 16, 2017 7:16 am
Location: Limoges - France
Contact:

Re: Philosophical thoughts (?) About FreeCAD.

Post by jpg87 »

freedman wrote: Mon May 31, 2021 4:38 pm I think it gives the impression of a "for-kids only".
This is a very good remark: I have therefore changed the icon.
Thank you.
My website : http://help-freecad-jpg87.fr updated 2023/11/06
edwilliams16
Veteran
Posts: 3192
Joined: Thu Sep 24, 2020 10:31 pm
Location: Hawaii
Contact:

Re: Philosophical thoughts (?) About FreeCAD.

Post by edwilliams16 »

heda wrote: Tue May 18, 2021 8:42 pm @freedman


One could wonder how many new users that are actually aware of the "what's this" button, i.e. the shortcut to the correct place in the wiki.
Considering that of the 2-3 buttons I clicked just to confirm that it was working, one of them had a terrible layout with overlapping text and pictures, and another one was blank - one could suspect that not too many are actually using this feature (for myself I tend to just do the wiki directly, but if the layout was tip-top on the built-in, I think I would in general prefer that one).

I was unaware of the existence of the What's this button. But, in my version anyway, it doesn't work. I get an unable to launch Qt Assistant
message - consistent with there being no such file in the bin directory.

It also requires the finger dexterity of a pianist to get the Fn-Shift-F1 combination on a mac keyboard with my left hand!

OS: macOS High Sierra (10.13)
Word size of FreeCAD: 64-bit
Version: 0.20.24894 (Git)
Build type: Release
Branch: master
Hash: a378b6b66f8a5992fc1452567ff59bdb613abc80
Python version: 3.9.4
Qt version: 5.12.9
Coin version: 4.0.0
OCC version: 7.5.2
Locale: C/Default (C)
Post Reply