Dynamic floor and bounding walls? (Shrinkwrap)

This is effectively a shrinkwrap inquiry…

Looking for a dynamo script that provides the following functionality:

  • Automatically detect the outermost edges of a collection of objects generated using the space-planning script and associated generic model families.
  • Create exterior walls following this outer edge perimeter.
  • Create floor object using this closed outer edge boundary.

Bonus functionality:
After the overall floor object and walls have been created, I would like to re-run the script after moving the space planning objects around and have the walls and floor adjust to the new boundary.

Is this already “a thing”?

Thanks!

Yes? Maybe?

If you post your current dyn I can brainstorm some for you. Likely wall by perimeter curves.

Jacob,
This is practically my first script from scratch so I’m elated to have successfully achieved what i think are baby-steps… I’ve successfully generated individual curves from a bunch of separate generic model family objects by extracted the bottom faces. Now I need to figure out how to union all these curves together to generate an overall curve for the full building floorplate. Because the individual curves don’t overlap, I think I need to grow/offset the curves to make them larger so they’ll overlap for a boolean function.
Using an offset node however results in individual segments that aren’t connected at the corners instead of larger curves/planes/faces.

Is there a different/better way to do what I’m trying to do?
Am I going in the right direction?

Thanks for your help.

Certainly going in the right direction!

Did you use a script to place these families or is this a manual space planing placement exercise?

I ask because there are many ways to bundle things together, and finding the ‘best’ (quoted because it’s a bit subjective) method for this will depend on the logic behind the initial layout. Hopefully this will provide answers to questions like:

  • Are hallways a consistent dimension? (Allow for a closing the gap at the halls)
  • Are separation walls always the same? (Allow for closing the gap at the walls)
  • Are spaces always rectangular and orthogonal? (Reduce overall number of checks)

Jacob,
Yes, I used a space planning script to generate all the families with the right programmed area, but not one that automatically tries to arrange them. That was manual…

Your next questions were already on my mind, but wanted to get a general understanding first of if I was going in the right direction. My responses:

  • Hallways can be different dimensions.
  • At this stage of programming the walls between the spaces should all be the same, approx 6". If I could program the “closing the gap at the walls” function to allow for thicker walls in certain spaces (12") that would be helpful.
  • Currently I only have the script looking at a rectangular family. I have an “L-shaped” family and another one with one angled side that I’d like to be able to use with this in the future.

Long term goal…
Each of the family instances has a cost per square foot value which I use in a schedule formula to calculate costs for each space object. I need to eventually be able to extract the overall area of the building footprint and subtract the sum of all the space object areas to yield the corridor area to which I will assign a different cost and then calculate total cost for the building.

Can you share a sample file?

Can I email you directly, instead of posting here? We signed a non-disclosure agreement and therefore cannot post the file publicly.

I just messaged you directly.

Did you see my PM reply?

I did, but have been a bit busy. I’ll have time later tonight and tomorrow morning.

Jacob,
Here’s a generic file containing the same programming families. Please take a look and let me know the next steps.
Thanks!

EDIT… I cannot upload??? I get this message:
“Sorry, new users can not upload attachments”.

Yeah, that’s a common issue - can you post to A360, dropbox, onedrive, google drive, or other file share?

Sure. Here’s a google drive link.
Test File

If you can extract bottom points from the objects and make sure they are level you can try the Points.ConvexHull2D from spring nodes for some 2D shrinkwrapping.

I was wondering if room separation lines might work here - Get the lowest surfaces, make the RSLs, place rooms, and then do one massive offset bounding box to place room separation lines on the perimeter of that. Lastly add your “exterior” room and you’d have a perimeter you could trace quickly. The key here is that the 'spacing" between RSLs needs to either offset by the thickness of the bounding walls, or the walls need to be thin enough that the room won’t want to “fill” the wall cavity. Once place you can get the boundaries of the exterior room, remove the lines created by the bounding box from the list, get the geometry of the room separation lines in Dynamo, and use them to create the exterior walls. You can then delete all the RSLs made in the script and the rooms if desired, but they may be useful in the rest of the workflow. Could be nice to leave as you’d be able to quickly place the hallway as a room as well.). This falls apart some when you have steps in the building or insets on a level, but by following a similar process for upper levels you’d be able to get the shell nailed down. I think.

Unless someone thinks this is insane (well more insane than usual for me) I’ll likely try something along this line later this week/weekend just as a proof of concept.

Building footprints will always have unpredictable ins and outs, sometimes angles and curves, so any solution that cant accommodate for nuances like this wont work in the end.
I’m trying Josein’s approach now…

Which node would you suggest I use to extract the bottom points? I’ve tried everything I can find, but end up with errors.

I wasn’t planning on one node/function, but instead looking at:
Element.Geometry
Geometry.Explode
Surface.NormalAtParameter
And a code block along the lines of:

List.Clean(
ResultingVector.Z==-1?
Surface:
Null,
False);

Trying to follow your steps exactly gives me this error on the code block:
“Error: Surface is class name, cant be used as a variable”

I feel like the code I started with already generated Dynamo curve geometry of all the bottom faces which seems like what you’re trying to do differently? Isn’t there a way to extract the points from the ends of my curves before moving to the next step?

Complicating things slightly, I think I also need to use some in-place family extrusions to create custom shapes that my external families cant easily handle (unusual geometries). Since I think its possible to process both in-place and external generic model families of the same object sub-category in one script, it seems like this would also be a good approach for interior corridors as well as an overall bounding volume shrink-wrapping all the internal spaces.

Question:
What node/s do I use to get/select the in-place extrusions to then extract the bottom face and eventually the points?