This is the long promised follow up and download post.
I have taken a standard ootb Revit planting family (RPC deciduous) and modified it to achieve several ends.
The symbol family, aka "deciduous base", contains a vertical model line, (invisible) controlled by a "height" parameter; plus a bunch of symbolic lines to represent the tree in plan views.
Normally this is contained within the nested planting family. (i.e. the nested family has 2 things inside it, the deciduous base, and a strange object called "render appearance" which is not a family.)
I have separated these 2 components into separate planting families, each nested into the host planting family. There is only one "render appearance" family, which has the capacity to represent many trees. I have opted for 5 "base symbols" which can be selected by means of a type parameter.
Rotation is achieved very simply by a labelled angular dimension. This only affects the "render appearance" It would be possible to also rotate the plan symbol by random amounts, but it didn't seem to me that this was necessary. Plans are by the nature rather abstract and formalised. It is in the 3d views that we really want to inject some random variation to better simulate natural plants.
The size of the "base symbol" is controlled by a width factor. This varies the height of the invisible line (the "stick") by way of a formula. What matters is the relationship between symbol size and stick size. So a fat tree needs a shorter stick. Hence the formula divides Height by Width Factor to derive Stick Height. By a process of trial and error, you can find an appropriate Width Factor for each species of tree contained within the render appearance. Once set this is good for all time.
The way the height scaling works is a bit tricky to explain. All planting families have a type parameter called "Height" baked into them. In the nested family this controls the height of the stick. For each species of tree, the stick height is adjusted to match the height of the Render Appearance. Planting families have a special behaviour. Double nested families will automatically scale so that the tallest piece of geometry in the nested family scales to match the Height parameter in the Host family. You don't have to link any parameters, it just works that way.
BUT the Render Appearance is not a normal family, it doesn't count as geometry. So if the Render Appearance is 10% taller than the stick, it will eventually be 10% taller than the stated height in the Host family when this is placed in a project.
Even if the stick is removed the Render Appearance will act "as if" there was a stick of the stated height. Don't worry it also confuses me. In the end I solved this by trial and error with only a hazy idea of what was going on behind the scenes.
Download the family from here
TREE FAMILY (many types)
Or a project file with a fuller explanation from here
TREES COLLECTION
I have taken a standard ootb Revit planting family (RPC deciduous) and modified it to achieve several ends.
- plan symbol to match the width of the 3d object
- an instance parameter to enable random variation of rotation angle
- an instance parameter to enable (small) random variations of height
The symbol family, aka "deciduous base", contains a vertical model line, (invisible) controlled by a "height" parameter; plus a bunch of symbolic lines to represent the tree in plan views.
Normally this is contained within the nested planting family. (i.e. the nested family has 2 things inside it, the deciduous base, and a strange object called "render appearance" which is not a family.)
I have separated these 2 components into separate planting families, each nested into the host planting family. There is only one "render appearance" family, which has the capacity to represent many trees. I have opted for 5 "base symbols" which can be selected by means of a type parameter.
Rotation is achieved very simply by a labelled angular dimension. This only affects the "render appearance" It would be possible to also rotate the plan symbol by random amounts, but it didn't seem to me that this was necessary. Plans are by the nature rather abstract and formalised. It is in the 3d views that we really want to inject some random variation to better simulate natural plants.
The size of the "base symbol" is controlled by a width factor. This varies the height of the invisible line (the "stick") by way of a formula. What matters is the relationship between symbol size and stick size. So a fat tree needs a shorter stick. Hence the formula divides Height by Width Factor to derive Stick Height. By a process of trial and error, you can find an appropriate Width Factor for each species of tree contained within the render appearance. Once set this is good for all time.
The way the height scaling works is a bit tricky to explain. All planting families have a type parameter called "Height" baked into them. In the nested family this controls the height of the stick. For each species of tree, the stick height is adjusted to match the height of the Render Appearance. Planting families have a special behaviour. Double nested families will automatically scale so that the tallest piece of geometry in the nested family scales to match the Height parameter in the Host family. You don't have to link any parameters, it just works that way.
BUT the Render Appearance is not a normal family, it doesn't count as geometry. So if the Render Appearance is 10% taller than the stick, it will eventually be 10% taller than the stated height in the Host family when this is placed in a project.
Even if the stick is removed the Render Appearance will act "as if" there was a stick of the stated height. Don't worry it also confuses me. In the end I solved this by trial and error with only a hazy idea of what was going on behind the scenes.
Download the family from here
TREE FAMILY (many types)
Or a project file with a fuller explanation from here
TREES COLLECTION