this post is a combination of giving feedback, asking for feedback/review and exploring some ideas about future Arch tools. One of the reasons I'm writing this, is because this sentence in the Arch roadmap kind of provoked me. I hope this turns into a useful discussion:
I should metion that I'm not a CAD designer, but a programmer who accidentally happens to deal with buildings a lot recently. I guess that makes me very poor at drawing things and love parametric design for the sake of it. I sure am biased.Mech engineering parametric design is usually based on changes history and constraint solving. Those two concept have much less importance in building design, since you rarely want to crawl back in the steps you did (they are usually very simple), and keeping constraints like horizontality, angle, or distance, even if they are useful, is not as important as in mech design.
The current Arch workflow seems to be more about automated drawing than about parametric design. I guess this works well if
- the user is experienced drawing (ie knows how to copy and rotate objects, so they end up in the proper place)
- the building has a rectangular shape, so it's easy to use the grid or just plainly type coordinates
- the building is modelled from scratch or based on high quality drawings
In an ideal world I would print a copy of the original plan, visit the building and note everything that's wrong in the plan and then start modelling in FreeCAD. However many wrong details are only noticed during refurbishments, which are based on the plan I'm supposed to create. So there is a need to edit the modell history.
So this is my current FreeCAD workflow:
- draw the circumference of the building in the sketcher
- create a second sketch and map it to the first and import the first as external geometry
- draw the thick interior walls in the second sketch
- create a compound of both sketches and map a third sketch to it and import most edges as external geometry again
- draw the thin interior walls in the third sketch
- use the three sketches as base objects for three types of Arch Walls.
The next thing is doors and windows. This is where the trouble starts: Windows are not really parametric objects in the way I'd need them. There is a MoveWithHost feature, but it only works when manually drawing, not when changeing constraints in the sketches of the walls. I tried several workflows so far:
1. Creating each window on its own
pros:
- quite easy to place each window where I want it to be
- robust against topological nameing issues (unless I attach the sketch to the face of the wall)
- doesn't move with the host wall most of the time
- a chore to enter parameters all the time without scripting (reading the code it seems it should be possible to use an existing window as a blue-print for the new one, but no matter which compination of windows and wall-faces I select, it doesn't work for me)
- impractical to change the windows later without a custom macro
pros:
- robust against TN
- Some parameters are easily updated globally, with others (like changing the glass into a panel) I couldn't force a recompute propagating the changes
- difficult to move the clones in the right place without good drawing skills (again maybe there is a feature in the window-button, that I couldn't get to work yet)
- doesn't move with the host wall most of the time
- no way to attach windows to wall-faces AFAIK
pros:
- robost against TN (I think)
- parameters stored in the sketch are easily updated globally
- easy to place with the tools I know
- still doesn't move with the host wall (but reattaching is somewhat easier I expect)
- parameters stored in obj.WindowParts are not copied updated across objects (BTW: The Window Parts property is only visible in the properties editor after saving/reloading the document)
pros:
- finally moves with host wall
- possible to place constraints with external geometry (but expect even more TN problems)
- see (3)
- suffers from TN (since each new window changes topology of the wall, probably badly so)
- see (3)
In trying to solve this, I also read about Facebinder objects. However from reading the documentation in the wiki it wasn't clear to me, what they are for nor what they do. I guess this is unrelated, but just feedback that the documentation is somewhat unclear about them.