Ruled Surface


Hi there, I have two curves in 3D space which I am trying to make a ruled surface from. So far I have divided these curves and run an adaptive component (a line) between them. The issue with this is that the lines are not straight when viewed from side on, refer to image below for explanation. What I thought I could do to get around this is to:

  1. Use the top chord's divisions to drive a perpendicular plane; and
  2. Find the intersecting point between this plane and the bottom chord - then the lines will be 'straight' from the side on view
I have tried to do this myself but get stuck when creating the plane from the points (for example, if I could move these points along Y-Axis like in Grasshopper this would be so much easier!) and am not sure if that plane can even be used to divide or intersect points on the bottom curve with.

Is this a good methodology? It’s tricky because the intersecting planes are not tangential to the curve.


Ruled Surface Explaination


The lines that you are creating between the 2 curves, are you using Dynamo to create it or in Revit?


All in Dynamo. In Dynamo I referenced the curves, divided them and then used those points to create the adaptive family, a simple line.



Konrad on another post I created (updating references) has suggested the Mantis Shrimp plugin which I think I will give a go. I can do all this in Grasshopper so I’m thinking I’ll get the points, lines that I need in Grasshopper and transfer them into Dynamo to create the Revit elements from that.

I’d still be interested if the above methodology work with Dynamo however :slight_smile:


A method that you can try is to create a simple ‘Structural Framing’ beam family, and then apply the family to the Curve in Dynamo


You said you wanted a “ruled surface”. Can you just take a line and sweep it between those two curves (rails)? That is a ruled surface in my definition as there will be a straight line through every point on that surface, unlike lofting which can cause distortion between the two curves. Is that what you want to do?


My understanding is that if you were to take perpendicular sections to the surface then those lines should be straight. What I was finding is if the two rail curves are not straight lines or start/end at the same ‘X’ position then these lines deviate from being perpendicular to the surface (when looking in plan or elevation as my image above) and this causes the section cut of the surface to be curved rather than straight. It’s hard to explain but if the Beam lines are to be perpendicular to the ridge line then the start and end points need to be on the same perpendicular plane, otherwise they skew (image above) causing inaccurate roof curvatures like a loft.

So yes in my understanding (correct me if I’m wrong!!) if I swept a line between the two curves I would get a ruled surface, so long as that line was always perpendicular to the ridge curve in plan


If you really need perpendicular lines, try the “Curve.HorizontalFrameAtParameter”. It creates a CS at every parameter, aligned with the global CS. Extract the YZ/XZ plane from that and intersect away :slight_smile:


Dimitar, thanks for jumping in and solving the issue.

Matthew, that is not necessarily true. Citing from definition of a ruled surface: In geometry, a surface S is ruled (also called a scroll) if through every point of Sthere is a straight line that lies on S.

This doesn’t necessarily mean that if you take a section cut that is perpendicular to that surface (through ZY plane of a surface normal point would be “perpendicular”) that you should get a straight line. As a matter of fact, when you take a section through the surface at its normal you will get a curve called “normal section”. In order to obtain a straight line section through a ruled surface you would have to cut perpendicular to the so called “generator” which is a line created by joining two corresponding points on curves (for every point n on a curve there is a point n’ on the second curve. if you cut through those you will get a line).

I hope I didn’t complicate this too much, also I hope I am not horribly wrong here. :slight_smile: