andydandy74 / ClockworkForDynamo

A collection of 450+ custom nodes for the Dynamo visual programming environment
MIT License
223 stars 96 forks source link

room.boundaries -> area surface issue: line direction #98

Closed ekkonap closed 8 years ago

ekkonap commented 8 years ago

Hi Andreas, I've been using room.boundaries to create Surfaces from Area Elements. Sometimes a boundary line is in the wrong direction (or a point in the wrong order), causing the line before that to connect to the wrong side. This causes an error if I try to create a Surface with the curve.patch node. Is this the Revit API throwing a curveball, and how could I compensate? I've had some succes making polycurves first by different methods and taking the shortest one, but that gets out of hand on complex areas.

I'd expect the room.boundaries node to consistently represent the actual area boundaries. Alternatively, do you happen to know if the actual Area surface is accessible directly trough the API?

My setup

Please make sure these boxes are checked before submitting your issue:

ekkonap commented 8 years ago

And Clockwork version matches too. Missed the checkbox.

andydandy74 commented 8 years ago

@ekkonap - could you provide a sample file with a room that has reversed boundary segment lines? Also - if you just need to get to the area surface, you could retrieve the room as a solid with Element.Geometry and then use Geometry.Explode to find the bottom surface (one possible method: find the average point for each surface and take the one with the lowest Z coordinate).

ekkonap commented 8 years ago

I'll send it first thing tomorrow, with my script. One of those cases where reality trumps theory. It should not be happening, and taking the end point from every boundary curve and creating a polycurve through these points should not yield a different result. In this case, it does. The Rooms indeed do have solid representations, so no problems there. Areas however do not produce any associated geometry through an Element.Geometry method. That is where room.boundaries saves the day. But in the end, it is a surface I need, and fixing a workaround when there might be a direct way would be silly.

ekkonap commented 8 years ago

Surface from Area.zip

This example has a reversed segment at index 1.

andydandy74 commented 8 years ago

The reason for this is that the room at index 1 has an outer and an inner boundary but the Revit API returns them as a flat list. Use archi-lab's Group Curves node to identify those two boundariee.

ekkonap commented 8 years ago

You're right. Thing is, I got around those multiple boundaries by filtering them out of my selection , but I left that part out of the script I sent to simplify matters, forgetting the inner boudary present in this Area element. My bad. There still is something there though, but after this I'll do my homework before sending you on another wild goosechase. Apologies.