Lines sdl - direction - sorting list

Hi guys, I need some help with my bridge analysis and its list structures. summary of the goal: I need to unroll flat a crv (axe of a bridge) that is bent in 3D, along with lines that are connected to it (stairs) and accompany its with data about its inclination, length etc…

  1. The definition gets already messed up in the part of unrolling (see blue Error 1) - gives me 120 lines, crv as an output of one input crv - with list item it was me trying to get away with it, it works but does not take the whole crv.

  2. part and its error (see marked blue Error 2) is restoring the connection lines of the 3d bent crv (red bridge) in the flat, unrolled crv. Some connections are lost or represented on the wrong side of the unrolled crv (axis of the unrolled bridge), not sure where the problem is. I will be grateful for any advice.

Thank you very much in advance (47.1 KB)

Hey, I have figured out some parts (all the lines are in the correct place and have the correct length :slight_smile: ) still, 20 % of them are unrolled on the wrong side of the crv.

I think the first error is when the 3d crv unrolls - I can not understand why the unrolled crv is becoming 120 crv instead of one. My explanation is the bad brep so I have tried to create brep in many different ways, always with the same result;( I assume that this is messing with the direction of the line SDL afterward…

Do you have an idea how to deal with it?
Attached simplified definition and some screenshots (82.7 KB)

OK, ive fixed the many unrolled crv part. It was the foult of the brep. It sadly did not fix my problem tho. I think the line SDL will not work for what I want to do. Any idea how to unroll the crv together with attached lines so that they are displayed with its length on the right side of the crv after unrolling? (79.1 KB)

Thank you for any advice in advance :slight_smile:

The reason your curves are getting multiplied is that you are inputing a DataTree at the Points input to the Unroll Brep component.

If you flatten the Points input, you now get 4 curves at the output of the Unroll Brep component (we will fix another issue later so you only get 1 curve at the output).

If you needed those points in a DataTree for downstream processing, you can restore the DataTree structure with the Unflatten Tree component.

You are correct that the Brep input to the Unroll Brep is causing problems.

If you look closely at the offset curves you are using to loft (or sweep) the brep you will see a problem:

Here you can see the original curve in yellow, its curvature graph in green, and the offset curves in cyan:

I rebuilt you input curve with a point count of 200 to maintain accuracy and used the output of the Sweep 2 component that you set up as the input to the Unroll Brep component. This produces one untrimmed surface, one curve, and 29 points at the output (this matches the inputs).

After these changes, I flattened some of the data trees and now this is what the output looks like with labels:

Changes and/or additions are in yellow groups. (80.8 KB)


1 Like

Hi Kevin,
thanks for stopping my monologue here with your constructive comments on this definition :slight_smile: It’s impressive how neatly you solved it. Thanks!
There’s just one thing, I’d like to have them on the same side of the crv as in the 3D primary.

I partially managed it yesterday in a not-so-neat way - flowing the planes of the points on the crv and taking the same vector as in the primary version from that frame to the flowed point outside the crv. It worked, but of course, they now have now the same angle to the main crv as in the original, which is hard to read… I would like to have them tangent like in your example but on the right side of the main crv. Do you have any idea how I can do this?

I don’t exactly understand what’s happening with the multiplication of the dotprod yet but it opens a new door def.

Thanks :sparkles:

here my try: (82.3 KB)

I think this accomplishes your goal:

In the process of working on this, I noticed that when looking from a top view, the unrolled 3D curve was a mirror image of the original. I flipped the surface before unrolling to correct this.

Some of this is a bit messy, but it should give you some ideas to work with. (98.4 KB)


More options for the placement of the labels on your lines:

Alignment points at start, middle, or end of line. Adjustable horizontal and vertical offsets. (96.6 KB)


1 Like

@Just1 I was looking at you file more closely, and you have some problems with the way you are calculating the slope of the lines.

In your file, instead of (rise / run) x 100 you are using (rise / length) x 100

There is also a problem in the cluster where (i think) you are trying to calculate the absolute value of the rise. The output is the absolute values, but the list order is changed making downstream calculations erroneous (you are dividing the length of one line by the rise of a different line).

You can more easily calculate slope by passing the Theta (T) outupt of a To Polar component through a Tangent component then multiplying by 100. If you don’t want to display negative slope values, you can pass the output through the Absolute component. (112.8 KB)



Hey Kevin, thank you so much for the response and correction of the definition, super nice! I have learned so much from it. Filter, Bang, and Pick’n’choose save so much time! Also great idea with the bounding box to figure out on which side the crv should be!
I have two questions about the definition, if you could explain it would be great:

  1. You used the main crv itself and the end pts (blue) of crv - connections (magenta) for defining the bounding box. Should I not first sort the start-end pt to have them alway on or outside the main crv ?

  1. At the moment you figured out if the end pts are inside of the one or another close crv you get boolean output that you change into 1,-1 output:

Clear, you use it later once for the direction of the plane:

why do you change it to boolean here again:

I guess i could just take the out put from the first Bang, right?

Thank you so much in advance.

Hey Kevin, yes, i did figure it out too :slight_smile: but solved it again in 1k steps (deconstruct the start, end pt and subtract z values)
I like your solution much more!


The start-end points were already oriented in this group so that the start point always connects to the main curve.

I wanted to use the 1, -1 output with a multiply component to determine if a vector was reversed or not (to differentiate between the 2 sides of the main curve).

To use as the Pattern input for the 2 Pick’n’Choose components downstream.

Yes, the output from the Filter component here could have been used since it already has the desired boolean pattern.

Here’s another version with a few changes (biggest change is combining the 2 groups for label placement). Also reorganized to eliminate a few components and improve layout. (43.9 KB)


1 Like