Node to link beams to a slab point?

Say I have a structural slab with a point in the middle indicating the drain slope. Now let’s say that the slope of that slab needs to change, and subsequently, all of the beams need to have their slopes changed as well to match up with the new slab slope.

I’m able to select all the beams and I’m able to select the slab point, but what I’m missing is the connection between them.

As you can see I was originally planning to just make a simple script that would change the slopes of the beams, but then I realized that there’s really no reason to do that in Dynamo when I can change multiple beams in Revit manually and just as fast. So ignoring what the script currently does, what is the basic syntax I require to create an “If/than” statement? Simply put, “If Slab Point A moves -5” on the Z axis, than Beams A B & C will move -5" on the Z-axis."

See first how the If node works here:
http://dictionary.dynamobim.com/#/Core/Logic/Action/If
and here written as a conditional statement in a code block:
http://dynamoprimer.com/en/07_Code-Block/7-3_shorthand.html
then you’ll find easily related threads such as this one:

This depends on how you’re monitoring changes. In order to know that Point A moved you would have to have its previous location and its current (new) location - you’d likely have to save the point’s location to a file (text, excel, etc) so that you can check it every time you run the graph.

An easier thing to do would be to determine the relationship between Point A and the elevation of the beams, ie. if the beams sit 18" below Point A then always move the beams to Point A’s elevation minus 18".

The primer on Code Blocks was very helpful, thank you. Also knowing that an If node actually exists has boosted my spirits. Thanks!

This gives me a lot to think about. That second option seems the most promising. I will begin experimenting with conditional statements and we’ll see what happens. Thank you!

1 Like

please feel free to post your findings and if you come up with a solution!

Crazy thought: set the workplace of the beams to be the underside of the slab. If the pitch or elevation of the slab changes than the beams will move with it. I haven’t tried setting work planes in Dynamo though. Anyone have any insight?

This is a workflow I have used successfully for this task.

For this to work:

  1. Beams must occur underneath floor instances (no points on beam sticking out past edges)
  2. For dynamic update, this will need to be run in Automatic (move the slab falls=move the beams) but workflow allows for the beams to be updated at a later date.

Steps:

  1. Extract floor geometry
  2. Extract beam curves
  3. Project Curves to a flat reference plane below the level of the floor geometry (best to use Datum 0.00 as it gives you a nice number to work with later in the process.
  4. Project the beam curves start and end points in the Z-Axis up towards the floor
  5. Get the intersection point of the projected geometry (this will be the point on the underside of the floor)
  6. Calculate the relative distance from the reference plane mentioned earlier to the intersect point (taking into account the beams reference level elevation from the reference plane.
  7. Update the start and end offset for each beam based on this new relative distance.

If you have double curvature in your floor you will need to interrogate your design further for build-ability, as point to point set out of beams may result in overlaps in beam / floor geometry.

You could then export the new set out data with GUID’s for the beams to excel for linking back purposes after editing values.

Good luck!! :grinning:

1 Like

Thanks for this post Ewan, I’ve been experimenting for the past week now.

The Beam Curve Projection grouping is meant to project a single beam’s curves down to a reference plane (I made it at 0.0 directly underneath my beam system), however, neither the reference plane nor the curve appear in Dynamo graphically. I can only assume I’m missing some crucial steps here. Likewise, I also had the Project Start & End Points grouping originally projecting down to the reference plane but nothing would happen. I changed it to the floor just to see if it would get a reaction, but no luck.

Once again, thanks for the step-by-step post. It’s been very helpful.

Hi @rufin, it looks like you have had a decent go at this. When I am back on the office on Monday I will post a couple of script images that should help with your workflow. :slightly_smiling_face:

1 Like

Thanks Ewan. I’ve actually done a decent amount of work since my post yesterday.

I gave up on the reference plan stuff because I just do not understand it. Instead I just projected the points down and up along the Z axis and made intersection lines between them. Which brings me to my current dilemma: now that I have the intersection point, what should I do to actually measure the distance from that point to the beams? I tried the DistanceTo node but it doesn’t like being linked from Geometry.Intersect. I’m also a tad confused on how this will allow for automatic updates, I haven’t quite figured out what I’ll need to do on that end.

But in any case, I wouldn’t have made it this far without all your advice so thank you again!

Hi @rufin

The below #share is a partial workflow that you may be able to adjust for your purposes. This has been adapted from my other scripting and will only update the Structural Framing if it occurs below the slab for a start. The workflow I mentioned earlier negates this limitation, so if you want to continue to develop your understanding perhaps you should keep going there. Hope this helps :grinning:
(D1.3) Framing to Underside of Floor.dyn (19.2 KB)

3) Framing to Underside of Floor

Framing Update to Slab

2 Likes