Praew and I have been discussing how to design the walkway around the first house and the corresponding walkway roof for a few months now. We looked at different examples and nothing seemed to fit our sense of style. A few weeks back, Praew came up with the interesting idea of using a more tree-like structure for the roof support poles. We spoke with the workers and they thought that welding something like this wouldn’t be too difficult.
I did a little bit of work with using fractals to create tree structures to help a friend on her senior project when I was an undergrad at USC, so I figured it wouldn’t be too difficult to apply this to making a walkway. 🙂
(And you thought you wouldn’t use the math you studied once you finished school?)
I’ve never before done this kind of thing using scripting in FreeCAD, but since FreeCAD has a strong Python scripting functionality, I went ahead and wrote up a Python script to generate the structures I imagined. It uses a constant branching angle and hits the support points on the roof that we want for structural reasons. This first version of the design is made from an alternating sequence of two different “tree” designs. Here is what it looks like:

Note that the square cross-section on the “trees” isn’t just a simplification in the CAD model. It is meant to represent the kind of square cross-section steel we are likely to use. There are some issues that might come up about the strength of the welded “branches” in terms of supporting the roof, but I figure the best way to test it would be to simply build a full-scale prototype on the land and see how strong it is.

One of the coolest parts of this process that will open up a number of new doors for me is the fact that you can easily generate FreeCAD documents from a Python script. The entire above scene was generated from a script with everything but the human proxy created from primitives. (The human proxy was downloaded from the net and imported from an OBJ file and placed from inside the script.)
If you want to try this yourself, all you have to do is place the following code into a file called ‘freecad_test.py’ and run ‘freecad freecad_test.py’ from the command-line:
import Draft, Part

# create freecad document
doc = App.newDocument(“CylinderTest”)

# create a cylinder
cyl = doc.addObject( ‘Part::Cylinder’, ‘MyCylinder’ )
cyl.Radius = 10
cyl.Height = 100

# hide the cylinder
cyl.ViewObject.Visibility = False

# clone the cylinder 5 times
for i in range( 5 ):
Draft.clone( cyl, App.Vector( 50*i, 0, 0 ) )