I have built a script which takes spaces as an input, gets the center line of the surroundings walls, translates that to get the inner face of the wall, then create a grid on the surface to place points for sprinkler placement. It also allows for distance away from the wall and spacing of the sprinklers.
This works fine, there are some oddities in there but it’s not the end of the world.
The method I am using to get the inner face of the wall is a polycurve offset method… Which I have found is not working when there is an intersecting wall in the space somewhere, which is of course very common.
If anyone could help me out with this intersecting wall scenario I would be very grateful. In some instances the space might not be fully enclosed by walls either, which also fails…
I have attached the script for reference. I tried to attached the RVT file but it was too big. It’s simply any space surrounded by walls. Also using the default “Sprinkler - pendent” from the standard Revit library.
testing testing 4.dyn
I’m traveling today/tomorrow so I can’t open this up, but when I have written similar graphs I’ve used room geometry instead of boundary lines. This takes both sides of the T intersection into account which prevents your issue.
It helps to join geometry into a single solid before doing this, as if you have rooms separated by a room separation line instead of a bounding element (wall, generic model, door, roof, etc.) you get a single solid for all rooms. From there it’s as easy as intersecting the solid with a plane at the elevation you want the object to be hosted, and propagating your points from there.
Thanks for the feedback Jacob, I’m going to jump back on this project sometime this week so I will give your suggestion a go!
So I finally got back to this and just had a question about the process.
If you use room geometry, how do you build in a constraint for that? For example, by using wall curves and creating a polyline, I can offset that polyline inwards by a specified value that the user inputs (min distance away from wall). How would I do that with actual geometry?
Well, one way to do this would be a Room.Boundaries node which can then be used to create curve loops with the Group Curves node - first from Clockwork package, second from the Archi-lab package - before creating a polycurve with a Polycurve.ByJoinedCurves node.
Effectively what this will do is ask the room for it’s bounding edges (the reason for you initial offset), and group the loops and make each loop a single geometry which can be offset by your desired distance.
If there is a desire to only create offset lines at the location of walls instead of room separation lines you can then explode the offset curve loop, if needed reorder the curves by distance sorting (midpoint of original segments to midpoint of offset segments) and then filter the curves by the element type of the original bounding elements (the Room.Boundaries node) equal to ‘wall’ and other types as desired.
Ahh thank you so much Jacob, I really appreciate the detail. Works perfectly, I actually forgot about the Room.Boundaries node somehow That solved a lot of my issues.