BiMorph Curve.SolidIntersection

First, thanks again to Thomas for the updated package. This is going to make a graph I’ve been dealing with much faster.

I’ve got a series of curves intersecting a solid (some fully within, others partially, some completely outside) and the Curve.SolidIntersection node works well except I’ve got one solid, and one curve out of 529 that might intersect that solid, that won’t play nice. If I yank the curve it works great but I don’t see why that curve in particular is causing the problem.

Offending curve included;

Offending curve excluded;

Offending curve isolated;

Thoughts? What more do you want/need from me to help figure out what’s going on?

Hi @Greg_McDowell you’re welcome, it’s great to hear the new nodes are alreadying having a positive impact, minus that one annoying curve!

My suspicion is it’s likely to be a hermite spline which can’t cast correctly - I hit a similar problem with the CurveFromCADLayers nodes (meaning I have the infrastructure in place to resolve this rapidly).

Can you upload an example file with the offending curve and I’ll debug?

But, of course!

The curve is being generated from a larger graph and is just a line between two points. I’ll see if I can reduce the graph to just this issue and send it along with a RVT file.

1 Like

It’s as small as I could make it and still get the same result (though the index of the line moved).

The RVT is too big for the site so here’s a link to the zip on Dropbox. It includes the RVT that the DYN uses to create the lines, the DYN itself, and an unpublished node I’m using in the graph.

1 Like

Hi @Greg_McDowell

Thanks for sharing the files - I’m getting errors with the Geometry.ClosestTo nodes so I cant troubleshoot. Any chance you can simply process the lines your end, extract the start/end points to Excel and then I can simply rebuild the lines my side and select the relevant room? It will make this process much quicker and easier.

Yeah… that’s quite a bit easier…

Egress Path Finder_BiMorph_Culled.xlsx (13.7 KB)

Thanks @Greg_McDowell

I’ve replicated the problem, however its not good news as the issue appears to be triggered by Revits awful handling of tolerances which prevents any meaningful solution other than to just ignore the exception should it be thrown.

Here you can see the problem curve and another copy I’ve made of it slight offset to the left. It works without issue:

However, once that line is near the corner, it fails:

A close-up of the problem area (fractional distances):

The only solution therefore, is to catch the exception and ignore it so all the other valid curves are processed. The downside of catching it without warning the user is that they may think the node is malfunctioning if it cant output the correct intersections due to this error. The upside is any valid curves will be processed and the node will output the segments.

What would be most useful?

I think it would be better to catch it and report it than dump the entire results. Can that one line list out as Null in the larger list?

I guess that last didn’t make sense considering the node lists intersected curves, not all curves.

Maybe instead it’s in another output showing curves that failed. Them they can be processed in other, less efficient, ways.

I agree with this - jumping from the quick error prone intersection method to the slow dynamo method when an error is thrown would be best.

Yeah that’s a good idea, so an output like “failure”, and the curve is returned? What if the user wants to simply identify which curve(s) from their list is/are the problem? An alternative which may be better would be to return the indexes of any curves that fail. Thoughts?

I like that better. Much more flexible. You need the curve… grab it from the list by the index. Or you can use the index elsewhere if it’s needed. Good idea!

Great, so what do you think about this then:

image

Looks great! Thanks, Thomas!

@Thomas_Mahon - When do you think the revised version will be on the Package Manager? No pressure! :wink:

1 Like

Monday hopefully, I’m currently reviewing the output name and data type to ensure it makes sense and is consistent.

1 Like

@Greg_McDowell BimorphNodes v2.1.3 is now available on the package manager with the new exceptions[] output for both Curve.SolidIntersection and Element.IntersectsSolid. In the example below, List.GetItemAtIndex can be used to return the curves that fail so you are able to troubleshoot without the Element.IntersectsSolid node throwing an exception:

2 Likes

I’ve added additional commentary to the output too:
image

2 Likes

A thing of beauty, is a joy forever. This result used to take many hours to achieve in this model. This time it took maybe 15 minutes or so with most of that time spent in determining shortest path.!

Thanks again, @Thomas_Mahon!

3 Likes