Dynamic Parametric Array not working with multiple array

Dynamic Parametric Array not working with multiple array

Anonymous
Not applicable
8,463 Views
38 Replies
Message 1 of 39

Dynamic Parametric Array not working with multiple array

Anonymous
Not applicable

Hi, I have spent many hours/days trying to get this parametric array object to function properly, to no avail. It is a multi-panel roof/canopy system that I have tried creating as a 'line-based generic model (metric)', as the overall width determines the number of panels and the centres of each.

I have worked with the basic formula patterns for Revit and have managed to get the intermediate rails to work parametrically, but not the roofing sheets! It is also not adjusting the width of the panels (centres) to suit the overall width (i.e. overall width / number of panels = panel width). To add additional levels of complexity to this component, the width of the panels needs to have a 'variant' values added to it, in that its minimum width is 450mm and the maximum is 1245mm.

 

This has become extremely frustrating and I need to get this solved, sooner rather than later, as I am spending too much time on the one object - regardless of its complexity.

 

I am sure it is a minor thing that I have missed in the set up of the fomulas, but I really need some assistance on completing this, as its driving me insane!

 

I have attached a few images to show you where I'm at so far.

 

Image 1 - Appears to be graphically correct

Image 2 - Reduction in width and it 'breaks'

Image 3 - Formulas used, so far

0 Likes
Accepted solutions (2)
8,464 Views
38 Replies
Replies (38)
Message 2 of 39

Keith_Wilkinson
Advisor
Advisor

Can you post the family?



"Give a man a fish and you feed him for a day; teach a man to fish and you feed him for a lifetime."
Maimonides
0 Likes
Message 3 of 39

dzanta
Mentor
Mentor

This may help....

 

arrays in families is a little complex.  Your line based family needs to have nested families that are both arrayed.  I have attached an image showing a line based fence family with the same principles that you will need to correct your family.  I have also attached the family itself so you can see the formulas.

 

Hope this helps.

 

AEE Contest CFW15


Dzan Ta, AEE, ASM, ACI.

EESignature



Did you find this post helpful? Feel free to Like this post.
Did your question get successfully answered? Then click on the ACCEPT SOLUTION button.

EESignature


Autodesk Community | Twitter | YouTube | Facebook | LinkedIn |

Win 11 Pro/DELL XPS 15 9510/i9 3.2GHz/32GB RAM/Nvidia RTX 3050Ti/1TB PCIe SSD/4K 15.4" Non-Touch Display

0 Likes
Message 4 of 39

L.Maas
Mentor
Mentor

If I have to work on these kind of things I try to separate things out. In those cases I work with nested families.

Viewing your system I see three different components, Panel, Center rail and end rail.

You could make the panel family and then nest the center rail family (e.g on right side of panel). This will be your repeating element.

In your line based family you can array this panel with center rail. You will have to create a separate panel for the last panel (not part of the array) without a center rail on right.

Then what is left to create the two end rails.

 

On a side note have you considered to use curtain walls and sloped glazing in your project?

Louis

EESignature

Please mention Revit version, especially when uploading Revit files.

0 Likes
Message 5 of 39

Anonymous
Not applicable

Here's the .rfa in question...

0 Likes
Message 6 of 39

Anonymous
Not applicable

I have nested a number of families within the final component. These being:

1. End Rail

2. Intermediate Rail

3. Panel

4. Rail Array with Panel

 

I assume from what you are saying that there should be 2no. arrays - 1no. for the rails and 1no. for the panels. Is that correct?

0 Likes
Message 7 of 39

L.Maas
Mentor
Mentor

Looked at your family. It is not easy to decipher how everything is constrained so maybe I misinterpret some things.

 

If you look into the nested family "Array Family.rfa" you will notice that when you change the length parameter Revit is complaining about constraints, basically breaking the family.

If I look at your formulas you have a length for the whole system you have a quantity for your arrays and you have a width for your panels.

If your length changes and the panelwidth stays the same you wil have a problem as the chances that your length is equal to panel length * array qty is probably not equal to your length.

So what should follow what? Is the total length going to be equal to the width of the panels * quantity of panels or are your panel width and quantity adopting to the total length?

 

I would also look into making better use of nesting components. Trying to control too many things in a single famiily will not be easy.

You have made use of groups in your family. I would advice to create a family containing your panel and a center rail together with relevant reference planes. (In that family you could nest the rail again as separate family). In your host family you would only have to array a single family and complete it with some endrails and the last panel.

 

As a quick example (Revit 2016) Underneath screenshot

 

Panels.png

 

 

-I first created the panel family together with the center rail (nested into the panel family)

-In the host family (line based) loaded the panel together with the end rail family.

-Arrayed the panel along the line (2) 

-Added the end rail at both ends (1 & 4) . Added a panel without center rail as last panel (3)

 

Created some formulas to fill the length of the line with all the panels. 

There are still limitations to this family. System will always consist of at least 3 panels (2 in array and 1 end panel).

 

Arraying a single family is much easier to control than several loose components or grouped elements.

 

 

 

 

Louis

EESignature

Please mention Revit version, especially when uploading Revit files.

0 Likes
Message 8 of 39

Anonymous
Not applicable

Thank Louis. That's a great help.

 

Further to my initial query, there is a slight change to the brief...

 

I need the intermediate panels to remain at a fixed dimension (say 1245mm) and the 2no. end panels to take up half of the remainder.

 

So, if the length = 6000mm, there would be 4no. (intermediate) panels at 1245mm each and 2no. end panels at 510mm each (Eq.).

 

What is the best way to do this if there is a 'rail' attached to one side of a 'panel' (each time) and I need the two most outer panels to be equal to each other, but different to the main fixed value panels (1245mm)?

 

Do I make a 'Rail array' in one family, a 'panel array' in another family and bring them together to add the end panels, in a 'third family', before adding to a 'host' family (line based)? 

 

0 Likes
Message 9 of 39

L.Maas
Mentor
Mentor

Than I probably will do it slightly different. You will then need one panel.

 

The panel can be constructed of an end rail (left), panel and center rail (right). It also contains a mirror control.

The center rail (nested family) and end rail  (other nested family) you can give an instance visibility parameter.

 

In your host family you load and place the panel with end rail (hide the center rail)  Then the array (hide the end rail). Then a mirrored end-panel with the center rail on.

Then it is a way of modifying the formulas to set the width of the arrayed panels and the width of the end panels.

 

 Panels.png

 

Louis

EESignature

Please mention Revit version, especially when uploading Revit files.

0 Likes
Message 10 of 39

Anonymous
Not applicable

Thanks EnIInt.

 

A clearly defined response. However, it is the formulas that are proving to be the issue.

 

AS I'm sure you've already established, I need this line based (host) family to do a number of things:

 

1.) array needs to extend, from the centre, of the Overall Width (eg. 6000mm), in multiples of 1245mm (Centre Panel Width)

2.) then, divide the difference (< 1245mm) by 2, to give the 'End Panel Widths'.

 

This is the one thing I cannot seem to get my head around!

 

If you can figure out this mathematical puzzle, I would both very impressed and extremely grateful :).

0 Likes
Message 11 of 39

Keith_Wilkinson
Advisor
Advisor

Sorry Marc,

 

I've not had a chance to look at your specific issue here but I'm working on something similiar on and off for WC cubicles where i need a workout panel on the end.  In principle it's much the same as what you are doing - the biggest problem I had was working out the size of the 'workout' module which in my case always need to be bigger than the standard module size.

 

I've attached it here for you to have a look at but if I get a chance at lunch I'll see if I can look over your specific problem.

 

K.



"Give a man a fish and you feed him for a day; teach a man to fish and you feed him for a lifetime."
Maimonides
0 Likes
Message 12 of 39

Anonymous
Not applicable

Thank Keith.

 

This is similar, only I need 2no. 'Workout Panels' (to use your example) to be equal to each other, at both ends of the overall family.

 

I have attached the family, as it currently stands, after following methodologies from Louis (EnlInt). Have a look, if you can, because my head is 'fried' with this and I need to get this completed and be able to move on from it.

 

Any assistance is hugely appreciated.

0 Likes
Message 13 of 39

Keith_Wilkinson
Advisor
Advisor

Marc,

 

the principle is the same - you just take the workout panel size and divide that value by 2.  then control your reference planes at either end with this new calculated parameter.  So your regular array in the middle is offset by that amount.

 

I'm pretty sure I can get this working for you but won't get to look at it in detail for another hour or so.

 

K.



"Give a man a fish and you feed him for a day; teach a man to fish and you feed him for a lifetime."
Maimonides
0 Likes
Message 14 of 39

L.Maas
Mentor
Mentor

Have a look at this one (Revit 2015).

 

At the moment this system always consists of at least 4 panels, 2 endpanels and 2 center panels. This means that with a setting of 1245 mm for center panels the system has to be a minimum of around 4 meters. With some extra complications (visibility settings and additional formulas) this could be reduced.

The attached family is a concept. Constraints could be added to prevent breaking the family (drawing line smaller than +/- 4 m will break the family).

 

 

Louis

EESignature

Please mention Revit version, especially when uploading Revit files.

0 Likes
Message 15 of 39

Keith_Wilkinson
Advisor
Advisor

Hi Marc,

 

the attached family provides a framework to give you what you need.  It works thus;

 

Set the standard panel size to your required dim (Module).

Set the overall length of the family (Length) - this would be your line length in your line based family.

 

the formula will then calculate how many 'full' panels it can fit within the length and split the remainder in two.  This dim (EndPanel) is then used to offset the first element in the standard panel array.

 

In the case of the overall length being divisible exactly by the module number it will make the panel either end equal to the ones in the middle.

 

Hope this give you what you want, I'm assuming you can add in the geometry etc.  I would use two arrays probably - one for the glazing bars and one for the panels but it's personal preference.

 

K.



"Give a man a fish and you feed him for a day; teach a man to fish and you feed him for a lifetime."
Maimonides
Message 16 of 39

Anonymous
Not applicable

This is great! Thank you.

 

I'm currently adding the geometry and about to try both methods - Panel and Rail family (with visibility setting) and 2no. arrays, as you suggest.

 

It would be great if I could get this down to 1no. module panel (1245mm) and two small end panels - say 1500mm minimum width!

Dare I ask...! Smiley Wink

0 Likes
Message 17 of 39

Keith_Wilkinson
Advisor
Advisor

As you can't have an array of 1 you need to tackle that with visibility parameters which is controlled by an If statement.

 

For example ArrayPanelVis (Visbility parameter) =  If(ModuleNumber<2, 1<0, 1>0).  

 

Using "1<0" will return a false value (deselect) and "1>0" will return a true value (select).  Then link one visibility parameter to the other e.g SingePanelVis = Not(ArrayPanelVis) so that when one is visible the other isn't.

 

You might also need to add in a 'Stop' formula to stop the array breaking (even though it wouldn't be visible) this would be along the lines of ModuleNumberCalc = If(ModuleNumber<2, 2, ModuleNumber).

 

All very doable you just need to be methodical.  Get it working in principle first and then deal with the extremes.

 

Post what you have later on and if you can't get it working I'll try and have a look at it tonight.

 

K.

 



"Give a man a fish and you feed him for a day; teach a man to fish and you feed him for a lifetime."
Maimonides
0 Likes
Message 18 of 39

Anonymous
Not applicable

Hi Keith.

 

I've added the geometry to your template and after a bit of jiggery pokery, I've got it to work. I've attached the file for you to review.

You'll notice that the 'end panel' consists of (L-R) one end rail, one panel and one centre rail (visibility parameter). This seems to be working, as it should now - Thank you.

 

With regards the minimum of 1 panel (with 2no. end panels), it would be great if I could do that, but as it has taken me so long to get this far, I'm worried I break it again. I'm not 100% how I would add the visibility parameter to the existing formula, for starters.

 

Could you please explain this method further?

0 Likes
Message 19 of 39

Keith_Wilkinson
Advisor
Advisor

Hi Marc,

 

Been looking at this tonight (I know, rock'n'roll eh?) - I have it working but it's a bit more complicated than I had expected becuase of the way the values of the different arrays vary (10 telegraph poles, only 9 spaces).  I just want to tidy it up a bit before I post it so I should get something posted early tomorrow morning.

 

K.



"Give a man a fish and you feed him for a day; teach a man to fish and you feed him for a lifetime."
Maimonides
0 Likes
Message 20 of 39

Anonymous
Not applicable

Thanks Keith.

 

You're efforts are much appreciated.

 

If it's any concellation, I too am working on this, in a desperate attempt to get this resolved asap!

 

Thanks again.

 

Marc

0 Likes