I am exploring all kinds of urban design workflows for a project I am working on. Here is a go of procedural urban design with Freecad.
masterplan01.gif (719.15 KiB) Viewed 2519 times
The current workflow is as follows:
Create a sketch for the roads
Create walls in BIM WB from roads sketch for main road areas with an 8m width
Create another plain rectangular sketch and extrude thinly in Part WB.
Create pavements from same roads sketch and use formula for 2 or 3m wider "wall" depth based on wall
Boolean difference between extrusion and pavements to create extruded blocks
Create a third "wall" from roads sketch with about 40m depth to represent the maximum bounds of the buildings and boolean intersect with building block to create building masses
Use the rectangle sketch to create a thin extrusion 4m above ground, and make it an array with 3.5m height. These are the indicative floors.
Use the rectangle sketch with the "wide walls" to boolean difference to show the remaining courtyard plots enclosed by the building mass
Procedural Urban Design.jpg (724.69 KiB) Viewed 2519 times
So far it's working well, although every once in a while, the walls from sketch create odd intersections.
I am interested in further developing this model in a few ways. I am aware that there may be some python scripting requirements to potentially make new tools. I am comfortable with that if someone can show me how to start and/or similar scripts or templates.
How can I fillet the edges of the roads. It feels like it needs to somehow be a function of the walls tool. If not in the walls, is there a smart way to select fillet the edges that are less than a specific length so if the underlying roads sketch changes, the fillets always correctly updates, without topological issues.
How can I go at picking the top faces within each plot in order to inset the top faces 2m inwards and extrude Roof Mezzanine levels?
How can I measure the areas of the building floors that are topology independent
I would like to to break down the buildings further by random height. For this, I would need to evaluate the points and tangents of the enclosing plot boundaries, and use the tangents to create lines inwards, then generate the lines, sketches, and extrusions.
How can I fillet the edges of the roads. It feels like it needs to somehow be a function of the walls tool. If not in the walls, is there a smart way to select fillet the edges that are less than a specific length so if the underlying roads sketch changes, the fillets always correctly updates, without topological issues.
How can I go at picking the top faces within each plot in order to inset the top faces 2m inwards and extrude Roof Mezzanine levels?
How can I measure the areas of the building floors that are topology independent
I would like to to break down the buildings further by random height. For this, I would need to evaluate the points and tangents of the enclosing plot boundaries, and use the tangents to create lines inwards, then generate the lines, sketches, and extrusions.
Seems no immediate solution to your problem
That's seem same problem as Wall Junction Type, probably harder one for Wall tool at the moment. Hope some one has better ideas.
(BTW, in a much earlier discussion, with @regis, use of an ArchStair - without steps - would result in something like a sideway / ramp also)
That's doable with Part, you should already know, but with topologic naming issue. See next point.
May doing another Sketch, with LinkToExternalEdge to the 'base/master' Sketch. Otherwise, try ShapeBinder. All with topologic issue. In the ArchSketch implementation, I do lots of 'link to external edge' which survive topologic issue, but that feature is not exposed - hope @realthunder's branch already handle that
Your study is inspiring. Hope peoples have ways to solve your problem and share here
dimitar wrote: ↑Sat Sep 11, 2021 3:09 pm
Yes. The wall seems to be the most robust way to go about turning a bunch of lines into something with thickness
BTW, it can handle different thickness for each 'segment' at the moment, but the implementation is not friendly.
And there is some case an self-intersecting wire create some void, would like to solve that when there is a gap.