How to get the same starting point and direction of points on different curves?


I have created a set of curves and on each curve I want to create the same amount of point at the same location. I started out by selecting the base curve in Revit. Then I offset-ed each curves to a different height. Some curves are generated through intersecting/projected on a sloped surface. This is done because the perimeter of the center curve is llarger than the base and top curve. At the end I extruded lines in the z axis that are perpendicular to the base curve and intersects all curves. This is done to get the same amount of points on each curve and at the same location in the z-axis.

Here is the problem. Each array of points start at a different location.

Each curve also has a different direction. and the number sequence on each segment of the curves isn’t continuous. So If each segment of a curve consist of 5 points, then the 6 points isn’t located adjacent to the 5th point but jumps somewhere completely different on the curve.

My question is:

  1. How can I get all point sequences to start at the same location on each curve?
  2. How do I get the points numbering to follow a clockwise or counter-clockwise sequence without jumping to a different location on the curve? I want to prevent that for example points 0 to 4 follows a counterclockwise direction…then points 5 to 11 follows a counterclockwise direction somewhere else on the same curve
  3. How can I get all point numbering on each curve to follow the same direction?


Join the curves into one polycurve, then get the curves from the polycurve. This will fix the clockwise/counterclockwise issue.

Try using a curve.pointatsegmentlength node and a sequence node based off the desired spacing and total line length to get points along the line. Something like:

I think those two steps will solve the issue but I’m not sure. If not post your dyn and an explaination of what you’re after in the end (I need points like this so I can do this) and I’ll try and help later today.


Actually I did join the curves into polycurve and got the result listed above. Alternatively, I created two lofted surfaces and trimmed them horizontal and vertically. This leaves me with the desired rectangular surfaces
in the middle of each individual facade face and special corner surfaces . Once I got the surfaces, I can generate four points to place adaptive components. Unfortunately, for some reason dynamo freezes and I need to crash Revit.

Extruding lines and trimming surfaces is a workaround for now, but I would prefer to use curves and points to places adaptive components. I posted the file which got both graphs in it. You only need to select a minimun of two curves Revit that are at an angle of each other to recreate my situation.

Curtain wall.dyn (136.9 KB)


Point at parameter 0 for the first base curve.
Closest point in upper curves to this point.
This gives you some start points.
Sastrugi package, sort points as perimeter node.
Use that one for each set of points at each level based on the start points.
Depending on the shape of the curves this should be OK as long as your re-entrant corners aren’t to severe.
Not at a PC so I can’t show an example.

Alternatively, if the above doesn’t handle the job, you could split the point sets to avoid re-entrant corners becoming an issue. This is because the node will use a centrod average point based on the input list and if points coincide based on angle it gets a bit confused.


Also, remember have your points for the adaptive family sorted into lists. 4 point family = list with points in groups of 4. You may also need to sort these points as perimeters to ensure the family is placed correctly.


BTW…the second method I tried using surfaces to trim the main surface, gave me weird results. Doing a loft results into 35 surfaces on on the bottom and top part of the main surface loft. Splitting this in two surface results into 70 new surface. Then splitting these surface vertically by 4, should give me 280 surfaces. Instead I’m getting over 7000 new surfaces.