Surface.SubtractFrom Returns Inconsistent Surfaces

Hi everyone!

I’m working on a definition to calculate internal area to IPMS standards, which involves measuring rooms up to their glazing lines in some instances. This is just a dummy / test file, but I’ve been having trouble getting consistent behaviour out of the Surface.SubtractFrom node.

The big idea is to put a plane (slightly larger than the room boundaries) at 50% the height of a room, and intersect this plane against the wall / window geometry, which has been unioned into a single solid . In the example on the left I’m getting the behaviour I want - a single internal perimeter curve is generated. But in the example on the right, the Surface.SubtractFrom node is instead subtracting the wrong geometry.

Is there a way I can make the correct subtraction behaviour happen consistently?

Many Thanks

Ollie

Isn’t the Room.CoreBoundary curve already what you’re looking for?
Otherwise, if you keep your offset polycurve within the boundary of your walls, you should always get the curve on the interior of the walls when you subtract your surface.

Hi Nick,

the CoreBoundary tends to stop at the walls, whereas I need this line to extend into the window reveals and up to the face of glazing - but only when deemed necessary by the IPMS standards!

If there’s a way to make the core boundary do the above and I’m not aware then I’d love to hear it :slight_smile:

I thin that Nick’s gut was right on the offset being too great - you’ve offset further than the thickness of the wall in this case and so you have the extra polyline. Can you adjust that offset number to less than the thickness of the thinnest bounding wall and see if you get better results?

Try reversing the perimeter points/curves order of the input surface.

1 Like

If you can get the thickness of the corresponding wall with each line you can set your offset to be just less than that.

Random thought number 2: If you want to play it safe and make your surface “much” larger than your wall boundaries you will always be left with an extra perimeter curve. You should be able to check for the larger of the two perimeters and remove it from your list.

1 Like

Thanks for the help guys :slight_smile: I wound up resolving it by taking a slightly different approach and using the Geometry.Split node to break the cutting surface into two surfaces - one inside and out outside the walls. Then I filter for the larger area (which is inside the walls).