Scaling / Nesting / 'Shared'

  • Hi all,


    I'm trying to create a Revit family which incorporates two Enscape assets - a Tree, and Tree Grate (at the base).


    I'd like to set this up so that the grate and tree are independently scalable.


    It seems that it is possible to nest an Enscape asset family (eg a tree) into another family, then load the 'host' family into a project file - the nested Enscape asset family must be set to 'shared' in order for it to display in Enscape (if it isn't, the placeholder geometry will show instead).


    The problem is that when the Enscape asset is nested, I seem to lose control of it's scale.


    In the family file attached, I've changed the 'Height' parameter in the Enscape families for the tree and grate to instance parameters (so it can be associated) - then I've associated the height parameters to the parameters in another family.

    Once I load this into the project and change the height parameter of the host family, the scaling no longer works, though I can see that the height parameter in the nested families is changing as it should.. what gives? :/

    If anyone has any insight over this it would be most appreciated.

  • Thanks Phil.


    The issue here is that the nested Enscape family needs to be 'shared', in order for it to display when opened in Enscape (I'm fairly sure). And you can't associate type to type with shared families. I was able to switch the parameter over to an instance in the nested family and associate it (to the Type parameter Height in the host family), but even when the value of that parameter changes, the nested Enscape asset doesn't seem to change scale..

  • I've tried doing this by using the in-built 'Height' parameter in the nested Enscape Asset - I use a workaround to change that to an instance parameter by creating a dimension in the family, labelling it with the Height parameter, and then ticking the 'Instance parameter' tickbox.


    Then once that's nested in to the host family, I associate the Height parameter for the nested Enscape asset with the Height parameter of the host family (which I leave as a type parameter).


    If I load the host family into a project, I can tab select the nested Enscape asset (as I've made it shared) - the Height parameter is indeed changing as I adjust the host family's Height, but there is no change visually (the nested enscape asset doesn't scale up / down).


    I also tried associating the nativeassetscale parameter with the Height parameter of the host in the same way, but that doesn't seem to scale the nested enscape asset either.

  • Tested unsuccessfully. There doesn't seem to be a way to control the nested scale with a parameter. The Height value is also a type parameters (which references the Enscape asset scale parameter).


    IMO just add them both to the project then group them together,

  • Thanks for trying this anyway Phil. Don't know if this something that could be added in future or if it's some kind of hard limitation?


    The issue with groups is that they inevitably need to be added to other groups, which can cause issues. We have families such as bathroom assemblies which contain a number of different individual fixtures (WC, basin, shower etc) - we can't really group the whole thing for this reason, it needs to be added to another model group of the apartment it resides within. Our project teams usually create a secondary version of the apartment composed of Enscape assets which requires duplicate effort.


    Good to know this can't be done currently, but I think it would be very worthwhile functionality to add in future!

  • Hi oolaef

    It is possible to have nested elements in Revit Families and control the Height/Scaling independent in Enscape

    The way you gone about it will not work as you nested two Meshes and Revit will see them as One and not scale the Mesh separate

    But you can add a simple Revit Family with Revit Geometry controlled by the Height Parameter and link whatever Enscape Asset you want to It

    then select the shared nested Family and adjust the Height and the Enscape Asset will scale separate from the Tree

    I just attached a quick mockup nesting a Person into my Tree Family

    the Person does not scale in Revit because its a mesh and not nested

    That's why for something like a Tree Grate, make a quick parametric Revit family and add the Enscape Parameters.

    But on a different note, we had the same discussion hers but decided to place the Grates separate with a quick and simple Dynamo Script

    that gives us more flexibility.



  • Hi Michael,


    Thanks for taking the time to input on this.

    I've slightly reconfigured my family based on what you were saying - adding the Enscape parameters directly into my tree family which consists of Revit geometry (extrusions) etc. I can control the height of the tree parametrically.

    I tried creating a secondary, shared nested family for the tree grate by starting from the planting template, and adding the required Enscape parameters. I can nest that in to my host tree family and it does show up separately in the project. There are now no meshes at all - only Revit geometry.


    The scale of this nested family does not change with the tree's height - see screenshot below with 3 different tree heights, the nested grate family stays the same. I tried associating the height and / or EnscapeNativeHeight parameter with a parameter in the host tree family, by switching them to instance parameters. I don't think this works though.




    Just to confirm - does this match your experience (it's possible to scale one family, eg the tree, with the other family staying a constant size, eg the grate), or should I be able to also control the size of the nested grate family as well?

    We may in the end bundle the grate and tree together in a group, or use a Dynamo script as you're saying if this doesn't work.

  • Hi oolaef

    It works also as a linked Instance parameter

    But you must trick the nested shared Family with an extra parameter.

    Shared families' parameters turn into type parameters by default like in groups

    If you link them directly nothing will happen

    But linking them by an intermedia parameter does the Magic

    see the below screenshots you can control them completely independent or link them via a formula

    Make the Lantern shared add an instance parameter "EnscapeHeight" add EnscapeHeight as Formula

    to Height then nest into Tree Family and create New LinkedAssetHeight Parameter and link the Nested EnscapeHeigth Parameter to it.

    Now you can control both scaling independently

    and you don't need even a nested Planting Family in this case I changed it to a Lighting Family, and I can still control the height of both independently.

    Having said this working with shared families can be very confusing for new Revit users.

    Therefore, I do try to avoid using them when I have other options. For instance, if you must deal with Phases then this quickly becomes a liability.

    As said, we use 2 Dynamo Scripts one to Place a Family at the same place as the tree and another one that will move a family based on the tree location



  • Thanks Michael - I'm following you around creating a secondary instance parameter for the nested families height, and making the Height parameter equal that, then associating the second parameter with another parameter in the host family. Only it doesn't seem to work on my side! The tree grate stays the same despite the parameter value changing.

    You wouldn't be able to attach your family by any chance so I can see if there's anything I've missed?

  • Very much appreciated - example attached. The nested family w/ tree grate is called Nested_TreeGrate - I haven't made the Revit geometry (a circular extrusion) parametric, but I believe I've set up the parameters controlling the nested Enscape asset's size as you mentioned.

  • Thank you Michael - using your example I have something working!

    I actually need to control the grate size and tree size using type parameters - but I found I could do that by equating the instance parameter to a type parameter using a formula, as you have done with instance to instance.

    Doing subsequent tests, there are some mysterious aspects to how instance/type, association and Enscape asset size works that I don't fully understand - I tried nesting another Enscape tree family and following the same principle as the nested grate in your example family, but it wouldn't scale once the host family was inserted into the project. So in the end I used the grate family you had, but swapped the Enscape ID out for a tree instead, and that worked!


    How are you doing the conversion from type to instance? I do this by drawing 2 ref planes, creating a dimension, applying the height parameter to it, and then clicking the 'instance parameter' checkbox - but this seems to disable scaling..

  • Hi oolaef

    I do the same type of instance conversion as you described

    I think you may be trying too many tricks at the same time

    If you want the tree to be Type and the Grate Type as well but independent

    Simply nest the shared Grate family but don't link those parameters at all

    you can change the type size by tap selection the Grate and then change the type or change the type in the Project browser.

    This is normal shared family behaviour

    We need our trees to be Instance for Width and Height and a few more parameters and then it gets far more complex

    I attached a tree and grate just taken from the Escape Library and this should just give you what you want