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)

Notes:

  • 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.


1 Like

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.

AddRulingLine.py (1.3 KB)

To use the Python script use RunPythonScript or a macro:

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

-Pascal

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.

1 Like

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.

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