Revit family Array & Stretch

Revit family Array & Stretch

Anonymous
Not applicable
14,355 Views
13 Replies
Message 1 of 14

Revit family Array & Stretch

Anonymous
Not applicable

Hey Revit People, I have scouring the depths of many Revit forums for an answer to an error that Revit keeps giving me. I am trying to create a family for a flooring grate, a peditred type family that runs an array to add more grates as the length is stretched out. I also want to be able to flex the width to make it variable. The issue that I am having is when I apply the array, I lose the ability to stretch the width, previous to applying the array everything flexes as it should. Is there a fix for this, that will allow my family to both have an array and an instance parameter for my width, to allow stretch in both directions. Thanks!

0 Likes
Accepted solutions (1)
14,356 Views
13 Replies
Replies (13)
Message 2 of 14

L.Maas
Mentor
Mentor

I do not have Revit 2014 at the moment so can not send you an example.

 

But basically this is how I do this kind of thing. Create a family of the object you are going to array (in your case a single piece of grate). In this object add some parameters to control the flexing you want. In your case maybe width is sufficient

Create a new family (in your case the peditred family). Load (i.e. nest)  the other family in this peditred (i.e. host) family

Place the nested family. Link the the width parameter of this nested family to a new parameter in the host family (e.g WidthGrate).

 

In your host you can now create a formula for the width of the grate (WidthGrate). Something like "= Width -( 2 * Trim Width)"

In the family you can array/constrain the grate family and control the stretch part. The formula will take care of the width of the grate.

Louis

EESignature

Please mention Revit version, especially when uploading Revit files.

0 Likes
Message 3 of 14

Anonymous
Not applicable

Hi, 

 

Thanks for your reply. I think I understand how you are explaining to perform the stretch. My problem lies with the extrusions that I create to show the grates, no longer stay locked to the reference planes controlling the width once I apply the array.

Perhaps I may not understand fully your solution, what version of Revit are you working in, I may be able to post a family which you can read. I appreciate your help with this!

 

Thanks!

0 Likes
Message 4 of 14

L.Maas
Mentor
Mentor

I wil try it with a screenshot (Revit 2016).

 

Array.png

 

On the left you see a new family named "SinglePceGrate". It is basically a simple extrusion, the same object you arrayed in your family.

With some reference lines and and a parameter I can control the width of this extrusion.

 

-This family I load into the host family, your Peditred Family (where I already removed the array you created).

 

-I place an instance of the SinglePceGrate. I link the WidthGrate to new Parameter in the host family (in this instance als named WidthGrate).

-I added a formula to control the width of this SinglePceGrate.

 

-After this I can array this instance of the SinglePceGrate and control the length (i.e. stretch) and amount of pieces.

 

The width of the peditred will now control the width of the SinglePceGrate through the formula

Louis

EESignature

Please mention Revit version, especially when uploading Revit files.

0 Likes
Message 5 of 14

chrisplyler
Mentor
Mentor

I have a service ladder family in which the rungs:

 

1. Are an array of the first rung, that is...

2. stretchable in width via the ladder's width type parameter, and

3. have quantity as a parameter calculated by dividing the ladder's length instance parameter by it's type rung-spacing parameter.

 

It took me a bunch of trial and error. I'm not entirely sure I remember how I did it finally. But...

 

I think I made and constrained a reference line between the two side reference planes that would represent the lowest rung between the two stringers. Of course I created the ladder width parameter between the two planes. Think I created a "first rung height" parameter to control the line's distance from the end. Got it flexing correctly. Then made a sweep along the line for the rung. Got it flexing correctly. Only then did I array it on up the ladder (I think only 3 instances to start with). Made sure the array was a "to first" distance instead of a "to last" distance. Made that distance my "run spacing" parameter. Got it to flex correctly with the 3 rungs. Then built the stringers, got length flexing correctly, and only then made a calculated parameter for the array quantity. Finally put lines on the two side planes and swept the stringers along them.

 

For a grating with constant (or at least type driven) stringer spacing, you could do the same thing, except your would have an array in two directions instead of just in the length. Basically you would build my ladder except instead of two stringers you would have an array in the width direction just like the array in the length direction.

 

Be warned...do NOT load such a family into a project and then make it a mile long. You WILL crash Revit. Honestly, for a grating, unless you absolutely need the accurate detail for a close-up 3D rendering or something, I strongly recommend just making a single extrusion with a length, a width, a thickness, and giving it a cross hatch model surface pattern.

 

Now as far as getting something stretchable with the little blue arrows when loaded in a project...you've got to make sure the reference planes/lines constraining it are set to be "Strong references" and you've got to make sure the parameter in question isn't "locked" Only then will you get the grip arrows for manual stretching. I think. Maybe.

0 Likes
Message 6 of 14

Anonymous
Not applicable

Hi, 

 

Thanks for your reply! I appreciate you taking the time to help me out!

 

I have uploaded a revit 2016 family, following your steps of nesting a singular tread family inside the main family, and using Instance Parameters & a formula to control the stretch. Everything flewes perfectly until I apply the array. I have attached a screenshot of what happens if I remove the constraints to see how it flexes after the array is applied. 

 

Any help would be appreciated, as I have tried a few things now without much luck. 

 

 

 

Peditred - Constraints.JPG

 

0 Likes
Message 7 of 14

L.Maas
Mentor
Mentor
Accepted solution

You are almost there. First you have to make sure that everything flexes in same direction.

You made the carprets strip to flex around the center. Than it will be easiest to flex also crate around center. That is why I added the EQ constraint for the crate (see arrow).

Further you still have to link the width of the carpet strip to the width of the crate so that they flex with the same length. Therefore I linked the width of the crate parameter of the carpet strip to width of crate parameter of the host family (see other arrow).

 

PEDITRED.png

 

 

Louis

EESignature

Please mention Revit version, especially when uploading Revit files.

Message 8 of 14

Anonymous
Not applicable

You are amazing!

Thank you very much, I truly do appreciate your help!

0 Likes
Message 9 of 14

troy_troy
Enthusiast
Enthusiast

This is most of the solution I am looking for.

 

I am trying to create a curtain panel made up of an array in the same format as this example.  When using a simple extrusion family in the panel, the extrusion stretches as expected, but this is lost when I create the array, which does not have a width (as far as I know).

The problem I am having is that the width of my curtain panel is not linked to the dynamic width of the panels in the project, and so defaults to the arbitrary number set when creating the parameter.

 

The curtain panel by default inherits the panel width in project, until I create the width parameter.  Is there a parameter in curtain wall that I can inherit into the panel?

 

Thanks.

 

EDIT: A suggestion from 2004 is to create custom curtain wall and insert as panel into a parent curtain wall, where mullions in child act as my fence slats.  I will come back with results.

0 Likes
Message 10 of 14

chrisplyler
Mentor
Mentor

If you just need to array in a single direction - for example a louver that needs its blades arrayed from bottom to top - you make one blade extrusion at the bottom, along a reference line that is constrained up 3" (or whatever) from the bottom plane of the panel family, that is width constrained to the side planes of the panel family.

 

Now of course an array doesn't have a "width." But what it DOES have is a number and a first/last selection choice that you make when you create the array. So you make the array (just use a number of 4 blades or something to start out with) using the last selection choice, and put the last blade on a horizontal reference line that's constrained down 3" (or whatever) from the top plane of the panel family.

 

Now your blade array should be the panel height minus 6" (because the first one was 3" above the bottom and the second one was 3" from the top). You still have to manually change the number of blades, but they should space out evenly up and down the height of the panel.

0 Likes
Message 11 of 14

troy_troy
Enthusiast
Enthusiast

Thanks for the response Chris.

 

I have the vertical stretching working fine, where a taller fence means more slats (NumSlats=Height/Spacing parameter).

The issue that I'm having is when my fence posts aren't at exactly the same spacing as my default array width in the family, they do not align because the panel isn't resizing to dynamic panel width.

 

As mentioned, this is specific to the array, because the extrusion family works as expected prior to creating the array.

 

I need a way to lock the edges of a single-column array to the reference planes, or the equivalent.

0 Likes
Message 12 of 14

chrisplyler
Mentor
Mentor

@jesteroftroy wrote:

Thanks for the response Chris.

 

I have the vertical stretching working fine, where a taller fence means more slats (NumSlats=Height/Spacing parameter).

The issue that I'm having is when my fence posts aren't at exactly the same spacing as my default array width in the family, they do not align because the panel isn't resizing to dynamic panel width.

 

As mentioned, this is specific to the array, because the extrusion family works as expected prior to creating the array.

 

I need a way to lock the edges of a single-column array to the reference planes, or the equivalent.


 

Before you extrude anything at all...make a REFERENCE LINE going left to right between the two side planes. Pull its ends back from the lines a bit. Align/lock those ends back to the planes. Now make your fence slat extrusion ON THAT LINE. Then array it up.

0 Likes
Message 13 of 14

troy_troy
Enthusiast
Enthusiast

I will give that a try for experience's sake.

 

I have since made a curtain wall that acts as a slatted panel, and inserted the wall as a panel into the parent curtain wall.

The reason I was trying the array panel was so that the fence would step between posts on a sloped site, rather than cutting mullions on the profile angle.

For current purposes I will just step the profile manually in line with post locations.

0 Likes
Message 14 of 14

Anonymous
Not applicable

Thanks, 

0 Likes