Move points until it intersect with the surface or a strategy to find the air terminals location on ceiling while avoiding the electrical equipments below

I’ve been trying to determine the air terminal location points on the ceiling using iso curves and finding their intersections, but sometimes these points end up directly above electrical equipment. I want to keep adjusting these points and their corresponding curves until they intersect with the surface or come up with a new strategy to find the optimal location for the air terminals.

air terminals.dyn (72.9 KB)

Best to show us a screenshot of your graph in action. While providing the dyn can be helpful at times, it’s frankly more work for what can often be identified and fixed just by viewing the graph.

It’s also a little bit unclear what you’re trying to accomplish. I think what you’re attempting to do is locate air terminals in a given ceiling without intersecting existing equipment. How do you want to “adjust” those cases of intersection? Do you want to move only the terminals that intersect? Do you want to move full rows/columns of terminals if any intersect? Do you want to shift the entire array until no terminals intersect? We need more information to provide the best suggestion forward.

You might look at some generative design threads to get some ideas here. Depending on how you want to tackle this, a generative design approach could be beneficial. This is a fairly common task for generative equipment placement.

2 Likes

I agree with @Nick_Boyts - sounds like you are trying to do something akin to generative fixture placement.

One possible path forward that isn’t generative design based but ‘just give me a solution’ might be this though:

  1. Get the ceiling surface.
  2. Get the minimum volume bounding box of all the objects intersecting the ceiling.
  3. Convert the bounding boxes to cuboids and then union to a single solid.
  4. Expand the walls outward by the required space from your equipment to adjacent objects by using the Solid.ThinShell.
  5. Intersect the solid with the ceiling surface.
  6. Remove the resulting surfaces from the ceiling surface.
  7. Generate points in the surface using a Surface.PointAtParameter node with a list of sliders for the U input and a list of sliders for the V input.
  8. Use Geometry.ClosestPointTo to find the closest point on the surface from each selected point.

These points won’t intersect the equipment and will be on the ceiling, however they might intersect each other. Using a grid of points at the origin and a coordinate system at a UV parameter of the ceiling and a rotation parameter to control it’s orientation would prevent that though.

1 Like

I Have followed the same process before getting the closest point i have also sorted the longest curve along which I will distribute the air terminals
vectors by 2 points
translate by the distance and offset
but what if they end up again on void surface

I tried to export the image but it hides the names of the nodes

I can tell you the work flow

  1. Get the bounding box of ceiling
  2. Get bounding box of electrical equipments
  3. Scale electrical bounding box in z
  4. Convert solids
  5. Solid difference ceiling and scaled electrical equipments bbox
  6. Now i will have a solid with void of electrical equipment
  7. Get any top or bottom surface
  8. Create isocurve
  9. Get the surface perimeter curves
  10. Get longest curve and its direction of perimeter curveb extrude curve z direction and merge into polysurface
  11. Now get all || isocurves
  12. Now check for does intersect point with surface the ones which are not interesting and get closest point on extruded surface.
  13. Now i wll have 2 points vector by 2 points to get direction and distance
  14. Now move curve in tht direction with distance + air terminal width/2 + custom offset.
  15. Now there is a problem what if after the offset it doesn’t intersect with the surface so i have to check again for nearest point and vector by 2 points again and again until it intersect with the surface

The export option will export the entire workspace, regardless of what’s visible on your screen. Just make sure you’re zoomed in far enough that the node names are visible then export. Be sure you have all the node preview bubbles pinned (or Watch nodes attached) so that we can see the actual dataflow between your nodes as well.

That’s better, but we still can’t see what’s actually happening within the nodes without seeing the data. Be sure to pin the node preview bubble or use a Watch node for every node. You never know which nodes will be helpful.

Hi Jacob, I am trying a different approach can we get the lines from Points whatever the orientation either in x or y

Not sure what you mean by this.

These are the point locations of electrical equipment in a room. I have all the equipment inside a particular room, and now I wonder if there’s a way to get all the points that are aligned in a straight line.

Assuming you have a coordinate system for the room, you could transform the point from that coordinate system to the global one, and extract the Y or X component, and group by that. You’ll want to add a rounding component as otherwise something with a value of 1 meter won’t be in line with something with a value of 0.99999998 meters,and something with value of 1mm won’t be in line with something with a value of 2mm.