Sunday, August 31, 2014


This is another one from RTC Chicago.  It's based on a picture of a chinese pot that I decided would be an interesting shape to model in Point World.

Once again we are lofting with loaded profile families, and the rig is a combination of "straight line" & "rectangle".

So we start with an octagon profile. There are different ways to set about this.  You can base it on points, 8 of them all spaced out equally from the centre with a parameter to control that distance.  Or you can dispense with the points and dimension directly to the lines.

Turn this into a scalable profile with a simple formula.  R = input * Scale. ( I use R for consistency, because the simplest profile of all is a circle, radius R)

So we have a mass profile.  Load this into another mass family.  Draw a vertical reference line at the origin point. Host points on that line.  Reveal the normal reference planes.  Host instances of the profile on each of these, then play around with the input values so as to build up the shape of the chinese pot.

You need to select the profiles in groups and create form.  First 4 profiles, then 2, then 2 again, then 4 again.  Sometimes two forms share the same profile.  By the way I forgot to mention the height parameter.  And of course the profiles and the height are all linked to the same global scale factor.

At the top of the pot, there is a little pointed knob for lifting the lid off.  This is a revolve.  We could use a series of circular profiles, but I'm opting to illustrate a different technique.  Typically, the rectangular rig takes the form of a ladder.  So I'm building one of these off the top portion of the vertical line.  It involves hosting points on points and giving them an offset.

Create a loop using splines with 3d snapping.  Select this and the vertical line to create form.  Revit should interpret this as a revolve.

You can see that the 3 instances shown above vary in both height and slenderness.  Quite easy to set up. The scale parameter (used to control the nested profiles) is calculated from height & slenderness via a simple formula.

That's as far as I went for RTC, just a quick example in passing.  But of course we can take this further by loading different profiles.  The possibilities are endless, but here are a few.

One way to achieve this is via type-based profiles. This involves a bit of heavy lifting, with 9 different types needed for each profile.  The amount of work can be reduced somewhat if you base the new profile on a copy of the old one.  That way you don't have to set up all the named types again.

I followed this through to create a family with three types (octagon, circle & square) plus instance parameters to vary height and slenderness.

To get more value from my effort, I "saved as" 3 times and played around with the positions of the profiles and the relative size of the knob.  The result is a systematic exploration of variations in shape.  I'm not sure why anyone would want to have so many different pots to choose from, but just in case you do, this is one way to achieve that end.

Another approach, would be to use instance based profiles.  That's how my original pot was built because it's much faster to set up that way.  But when you swap out the profiles with a parameter all those instance values get lost and you end up with a shapeless extrusion.

Not to worry, you can just create another family for each shape.  Even better, rename the profile in the new family to match the name of the profile you want to load.

I followed this approach to create families based on profiles incorporating my famous "bulge factor" parameter.  This dates back to my Doric Pumpkin experiments and uses a points-based profile.

The "bulge factor" will take you all the way from very concave to very convex.  I didn't do "very concave" in this example because it doesn't look right in a pot.

The nice thing about this kind of exercise is the way it reverses the diminishing returns principle.  Once you've done the initial work, adding a new profile takes very little effort.  Also varying the relative heights of the different sections is easy and before you know it you have dozens, if not hundreds of variations.

So just remember, these families belong to the mass category.  Other than that, they behave nicely.  If you want to play with them, follow the download link.


Tuesday, August 26, 2014


This is something that I developed for my Urban Design explorations talk at RTC Chicago.  The idea was to take the basic "blob on a stick" tree that is often used at an Urban scale, and make it more parametric.  Hence the universal lollipop tree.

It wasn't too hard to set up.  A revolve made from quarter ellipses.  You can vary the shape by moving the "waist" up and down, also by changing the proportion of width to height.

The family I used in my presentation looked fine in the images, but in reality was less than perfect.  The way I had hooked up the parameters led to somewhat counter-intuitive behaviour.  For example, increasing the trunk height factor would actually decrease the proportion of trunk to canopy.

So this weekend I decided to fix that family, make it more user friendly, and offer it up to the general public.  Version 2 was much better.

There are subtle changes to the formulae that make them work more as you would expect from the given names.  I set up 15 types, with names that I thought would be easier to follow.

That's all good, but the names really refer to shapes.  At one point I was actually adding the height to the type name, but this just seemed to make things more complicated.

I decided to go for a version 3 where height would become an instance parameter.  You probably know that the different family templates have slightly different behaviours baked into them.  The Planting Template has a "Height" parameter that you can't delete and you can't change to "Instance"  So I had to resort to creating a new parameter named "_Height"

Because all the "driven" values are ultimately dependent on "_Height" these also have to be instance parameters.  Revit won't let you have two instances of the same type with different Type Parameters (which is what could happen if you allow a Type Parameter to be dependent on an Instance Parameter)

Because of the way the parameters are all interconnected, I had to delete all the formulae (copy-paste them into a text document) change the parameters to instance, then copy all the formulae back in.

The end result is a tree whose shape is determined by four type parameters, and whose height is controlled by a single instance parameter.  There are a bunch of greyed out "formula driven" parameters that appear in the "other" section of instance parameters.  These record the actual dimensions of any given family instance.

So that what I decided to do with my lollipop.  You can probably get by with the 15 types built into the family, but it's quite easy to tweak them, if so desired.

Hope you like it.  Download from here.


Monday, August 18, 2014


When I was looking for everyday objects to model in point world (for my RTC presentation in Chicago) one of the first pieces of furniture that sprang to mind was the Space chair.  A Fritz Hansen original, much copied, classic use of moulded plastic sheet.

For the longest time I couldn't figure out how to make it.  I kept trying to see the form as a series of profiles hosted on a spline, but that turned out to be really clumsy.

Then one day the penny dropped.  Actually you don't need Point World.  The underlying form is a blend.  It's like one of those thached roofs that are round at both ends with a straight ridge in the middle.

Flip that upside down, at an angle.  Make a similar void, slightler smaller, cut away and you've got it.

Well it needs to be trimmed around the edges of course, but that shouldn't be too hard.  So I started with a profile.

The swept blend was a wonderful thing when it was first released, then a year later it got overshadowed by Point World and I've been neglecting it ever since.  First insight.  You can do a swept blend with a straight line.  Why bother ?  Because it allows you to use loaded profiles, something that ordinary blends don't accommodate (perhaps they should)

Using a straight line as the path for a swept blend gives me lots of control, easy to adjust the length and angle.  The profiles are parametric, easy to adjust their sizes and proportions.  I was using a CAD download from Fritz Hansen as a guide to get the size & shape right.

My first attempt to trim the edges was awful.  Second go was much better, but you can still see sharp edges when you zoom in close.

I decided that I needed a void blend.  Now you can make a void extrusion with a hole in the middle, but that won't work with a blend.  You can only have one closed loop at each end.  No donuts allowed  ... unless you leave a little sliver of a gap somewhere so that actually it's just one loop.

That's what I opted to do.  Not very elegant, but it works.  I leaves you with a spike of plastic sticking out sideways as if the shape had been injection moulded rather than pressed from sheet, but with care you can clip this off so that it's barely noticeable.

Now for the cushions.  I had a quick go at making these in Vanilla also, but it was never going to work, so I'm back in point world after all.  I isolated the cad object for the cushions.  It's a mesh.  Maybe some of you know how to convert this into a solid that will come into Revit and explode nicely.  That would save time, but I've never figured that one out, so I'm going to make if from a series of profiles ... in Point World.

I decided to set up a series of reference planes that slice through a cushion.  They don't actually cut it of course, but I can host splines on these planes and adjust them until they are pretty much sitting on the surface.  A bit tedious, but it was an interesting exercise.

I'm using conventional 2d splines here, the kind that stay resolutely on the reference plane you put them on.  So the only ref points belong to the straight lines that are used to close the loops using 3d snapping.

Use create form on the first 2 or 3 loops. Then progressively add more to create a reasonably convincing replicat of the CAD cushion.

You can easily see where your surface is proud of the original and where it dips below.  Select the nearest spline, look for a node, adjust to your heart's content.

There's always going to be a flat end where your last profile sits, but you can make this very small, or you can just decide that it's not going to show up, especially if the cushions are black, which they often are.

When exporting to cad from a family, your temporary hide/isolate settings are respected, so it's easy to push this out as an SAT solid.  Open this in autocad and you get a chance to round off the sharp edges.

Import SAT back into Revit and explode.  Now it's free-form native geometry and you can apply a material parameter.

The base is pretty straightforward to make so I won't go into much detail.  It helps to set up a ref plane with a parallel section plane when creating the extrusions for the legs and the revolves at the end where they attach to the plastic.

You might think that this results in a heavyweight family, but it's just over 1mb.  I'm not going to spray hundreds of these around anyway. There are a masking regions and symbolic lines to represent the object in plan views.  Interesting to note that the "free form element" for the cushions doesn't trigger a "visibility settings" button on the ribbon.  Fortunately you can turn it off in plan views via the "Visibility/Graphics Overrides" in the properties dialogue.  Another case of inconsistent terminology for Steve Stafford's record book.

I've turned all the 3d geometry off in orthographic views and at coarse detail level.  That should handle most performance issues

For the front & side elevations I used the CAD objects kindly provided by Fritz Hansen.  Just added a masking region.

Hope you found that interesting.  Download the family here

.Space Chair Download

I'm going to finish with a gag reel that illustrates the follies of cleverness.  More failed attempts to create the space chair using Point World gymnastics.

Along the way I developed the most complex trigonometric formula I have ever devised for Revit. (not saying much)  But none of the results lived up to expectations.  What a waste of effort.

Or maybe not.  Sometimes the simple solution will only come to mind after a long & difficult search.