Developable surface - exact ruling lines from edge curves

I have developed a process to determine the exact ruling lines of a developable surface between pairs of curves prior to the creation of the surface. The process uses ordinary Rhino commands without any iteration. An example file is attached. RLMDev Basic.3dm (43.3 KB)


  • In the example file I use a separate layer for the construction geometry in each step of the process . Usually I only use a single “temporary” layer for the construction geometry.

  • Precision is key to making the process work. The use of Osnaps is essential.

The process:

  1. Select the location on the first edge curve of the ruling line. This will be the start of the ruling line. In this example I place a point at that location using Point and the Near Osnap. Creating a point is an aid but not essential.

  2. Create a planar surface normal edge curve at the start point of the ruling line. One method to create such a surface is to first use Circle with the AroundCurve option, and then fill the circle using PlanarSrf.

  3. Pull the second edge curve onto the planar surface. If the planar surface is not large enough then use Scale to enlarge the planar surface with the center of the circle as the base point.

  4. Create a line between the pulled curve and the start point of the ruling line… One way to do this is to the Line command with the Tangent option and selecting the pulled curve as the start of the curve and the ruling line end point as the end point. Another way is to use Line with the ruling line start point as the start location and then use the Tan Osnap to find the tangent point on the pulled curve. In some situations it may not be possible to create the tangent line. Those situations will be discussed in a future post.

  5. Create a line normal to the planar surface using Line with the Normal option. The start point of this line is at the end of the tangent line on the pulled curve, and the line needs to be long enough to intersect the second edge curve. The intersection of the normal line and second edge curve will be the end of the ruling line. In this example I place a point at that location using the Int Osnap. An alternative would be to use the Intersect command.

  6. Draw the ruling line between the start point selected in step 1 and the end point from step 5.


Hi David - nice - here’s a quick and dirty bundling up if your process in a Python - so far it seems to agree with your example at least, and it’s way less work. (1.3 KB)

To use the Python script use RunPythonScript or a macro:

_-RunPythonScript "Full path to py file inside double-quotes"


1 Like

Not native English speaker here.
What do you mean by Rulling Line? Missing that term in my head prevents me from getting what you’re trying to do. Seems like a weird way of getting a line between two curves.

Thanks in advance.

A developable surface is a surface which can be created by bending a flat surface without any distortion - stretching, shrinking or shearing. All developable surfaces are ruled surfaces (though not all ruled surfaces are developable surfaces) which can be described as a straight line swept through space. The straight lines of a ruled surface are “ruling lines”. A developable surface is a special case of a ruled surface. Along any ruling line of a developable surface the surface normals are parallel so that there is no twist along the ruling line.

Developable surfaces are useful for objects which are created by bending thin sheets; for example boats made of metal or plywood, metal ducts for air, etc. Thin material will bend more easily into a developable surface than other shapes because the material does not have significant stretching, shrinking or shearing when bent.

Frequently when designing an object to be built using sheet materials two edge curves are known, and there is a need to determine several ruling lines of the developable surface which conforms to those edge curves. Creation of a developable surface based on edge curves can often be easier and more accurate if certain ruling lines are available. The method I described above is a method to exactly determine the ruling lines of a developable surface from the edge curves.


Thanks, this is what I was missing.

Would be great if you could show the complete way up to building the surface and unrolling.
From what I can see devsrf set to least twist gives similar rulings, while it is not possible to build a surface from these edge curves. Devsrf set to “shortest” gives a complete surface, but different rulings.
I made a surface in an other program, (JH1) but rulings differ from your solution, and the developability seems not to be really good.RLMDev JH1.3dm (1.9 MB)

(Don’t read this post until you’ve read the first post in this thread. Otherwise this post won’t make sense.)

In certain situations the method I described in the first post needs to be modified because it isn’t possible to create a line which is tangent to the pulled curve and passes through the ruling line start point. I’ll describe these situations below and how to find the desired ruling line.

The first situation is when the pulled curve has a cusp. This occurs when the second edge curve has the same tangential direction as the first edge curve at the ends of the ruling line, and the second edge curve is not planar. In this situation create the “tangent line” from the start of the ruling line to the tip of the cusp. The Int Osnap simplifies precisely locating the tip of the cusp. Then continue as described in the first post. Create a line normal to the planar surface, intersect the normal line with the second edge curve, and draw the ruling line. Example file: RLMDev Cusp.3dm (56.9 KB)

The second situation is then the pulled curve is just a smooth curve (assuming the second edge curve is smooth) without a cusp. This can have several causes. The first is the planar surface used in pulling the second edge curve is not large enough and the pulled curve runs to the edge of the planar surface. In this situation enlarge the planar surface and pull the second edge curve a second time.

In this situation create the “tangent line” from the start of the ruling line to the tip of the folded curve. Note that the tip of the pulled curve will usually not be an end of the pulled curve. There is not a Osnap which will snap only to the tip. Neither End, Int or Quad OSnaps work. The best way I’ve found to snap to the tip is to make sure the Near OSnap is turned on, then star with the curve beyond the tip of the edge curve and slowly approach the tip. When the cursor is close enough to the tip it will snap to the tip. Stop moving the cursor and select that location as the tip. Then continue as described in the first post. Create a line normal to the planar surface, intersect the normal line with the second edge curve, and draw the ruling line. Example file: RLMDev Parallel 01.3dm (53.4 KB)

Added: If the ruling line ends at an end of the second edge curve then there are two possibilities:

a) The other end of the pulled curve should have been used for the “tangent line”.

b) There is a ruling line from the selected start point for the ruling line to the end of the second edge curve. This is usually unlikely but if you think it may be a valid untwisted ruling line you check for twist using the method described in Ruling line from edge curves twist check

c) There is not an untwisted ruling line from the selected start point on the first edge curve to the second edge curve. There is no guarantee of untwisted ruling lines the entire lengths of a pair of edge curves. There may be portions of one or both edge curves without untwisted ruling lines to the other edge curves.

1 Like

That could be the topic of a new thread. I plan to start another thread on creating developable surfaces in the future.

There are several ways to use exact ruling lines between edge curves in the creation of developed surfaces. One method would be determine a sufficient number of ruling lines and then use Sweep2 with the edge curves as the rails and the ruling lines as the sections. Another method involves using DevLoft which is the V6 replacement for DevSrf.

DevSrf is from Rhino V5. It can be a good tool but can be difficult to understand properly. It’s been a while since I used DevSrf but the “shortest” option in general does not create a developable surface.

See Verifying developable surfaces and Ruling line from edge curves twist check for discussions of checking developable surfaces and ruling lines.

Thanks for the script. I’ll give it a try and it should be useful. However as you can see from my later post there are situations where the method of the first post fails. These would be more difficult to script. We discussed determining the tip of a kinked or folded curve in Kinked and folded curves - split

If I was writing code I’d use an iterative approach to determine “exact” untwisted ruling lines between edge curves based on minimizing the sine of the twist angle until the sine was less than a requested tolerance. The sine of the twist angle and be calculated as the magnitude of the cross product of (the unit vectors normal to both the candidate ruling line and the tangent vectors of the edge curves). At one time I had a compact method for doing the calculation and I’ll try to recreate it.

Edit: comment withdrawn

I’ve totally confused with that step

So, a bunch of questions:

  1. Is the Second edge curve the second black long line or green pulled curve?
  2. What is this green line, why does it have exactly such a shape? 3) How do I should position it onto the planar surface (the position and shape play a crucial role for following lines)?

The edge curves are the two curves which are to define two edges of a developable surface.

The first edge curve is the edge curve which a planar surface was created normal to.

The second edge curve is the other edge curve.

The green curve is the result of pulling the second edge curve onto the planar surface. Because the surface is planar pulling the curve onto the surface is exactly the same as projecting the curve in the direction normal to the surface.

The shape is the result of the shape of the edge curve and the direction of the surface normal.

The user does not decide on the location of the green curve. The shape and location of the green curve are the result of pulling the second edge curve onto the planar surface.

1 Like

That is the thing, thank you @davidcockey!

It’s black magic for me, to be honest, how you come up with this idea. Why does that intricate method give better results than others, for instance, if simply drawing ruling lines as a perpendicular line to both edge curves (probably in my example is rubbish as in the result we can get an undevelopable surface, but anyway)? Apparently, I should investigate the question through a bunch of special material. Could you poke me into the right direction to somehow a little bit more get an idea of your method?

And one thing is not obvious to me, following your method, if the ruling line starts at the end of the first edge curve then the endpoint of the ruling line can be placed not on the end of the second edge curve. What needs to be done to build a developable surface at the end of the edge curves (maybe extend the shortest edge curve and then trim unwanted part of the surface)?

Yes, extend the shorter curve(s), and then trim the extended curves if needed. Note that the shape of the extension curves is not unique but not all extension shapes will work. I usually use ExtendDynamic with the To point option so that I have control of the shape of the curve extension.

Example of curve extensions:
Developable Example DC01.3dm (1.6 MB)

If a ruled surface is developable then there is not twist along each ruling line. That means a planar surface can be positioned so that it is tangent to a developable surface along the entire length of a ruling line. Another way to say the same thing is that along a ruling line the surface normals are parallel.

1 Like

Apparently, I have stumbled across one more case when there is no viable tangent line on the projection of the second edge curve from the start point. The case when the start point is all the way up “inside” the projected second edge curve. Wonder what the solution for this case for a point from which should go normal line is?

SadovshikovV.3dm (2.6 MB)

For that pair of curves a developable surface does not exist with a ruling line which passes through the selected point on curve and through the other curve.

Developable surfaces may exist which coincide with both curves. For such a developable surface the ruling line which passes through the point will not intersect the other curve. The curves need to be extended.

Here is a method to find such a surface:
ExtendDynamic the curve projection to the point.
ExtrudeCrv the extended projected curve normal to the plane.
ExtendCrvOnSrf the original curve on the extruded surface.
Create the ruling line.
SadovshikovV_DC01.3dm (2.7 MB)

1 Like

Awesome thank you @davidcockey

In some cases, the pulled curve with a cusp does have the tangent point with the start point. However, employing the tangent point evidently gives us the wrong ruling line. Should we always use the cusp tip if it is there on the pulled curve?

Cusp&Tangent.3dm (2.7 MB)