ExtrudeCrvTapered - bad result

In general ExtrudeCrvTapered does what I expect and you described. But in the example I posted above the result is close but not quite there.

@davidcockey
David, here is what I did:

  1. Make an exact copy (copy-paste) of the original curve
  2. draw a line between the start and edn points (both curves share those points for now)
  3. select one of the curves and relocate gumball so it is in the mid–point of the line drawn in step 2.
  4. scale (in the appropriate ortogonal view… Right in your case) proportionaly till it fits the desired profile (compare to the tampered dummy object if you want to preserve the temper angle to some acceptable degree; select CVs scale nonprop, etc. if closer fit is needed)
  5. move the scaled curve forward or to watever direction needed
  6. either ‘Loft’ or ‘Sweep rail’ both curves

· this ensures the smaller curve has the same construction geometry (offseting the original gives just multiple span curve with many contorl points)
· profiles of the curves are identical (although scaled)
· ends of both curves lie on the same line (if wanted)
· surface has equal height (the move distance between original and scaled curve)
TaperedExt03-scale.3dm (205.9 KB)

@adXox Thank you for your effort. Unfortunately the resulting surface is not a “tapered extrusion” with constant draft angle, which has a very precise definition as Jeff and I discussed above.

TaperedExt04.3dm (894.5 KB)

ExtrudeCrvTaper should work in reverse. Start with a curve, create a tapered extrusion, duplicate the edge at the end of the extrusion, and then extrude the same distance but in the reverse direction. The second tapered extrusion should match the first.

But in this case it doesn’t work. The reverse tapered extrusion is a different shape with a fold. See “Reverse Ext” the attached file.

However when I create the offset curve, positioned it at the bottom of the taper, use the repositioned offset curve as the starting curve, and extrude in the reverse direction, ExtrudeCrvTaper produces a single surface tapered extrusion with the correct shape. The maximum deviation between the edge of the extrusion and the original curve from which the offset curve was derived is 0.0022, and at least part of that deviation is probably due to a very small rounding error in the size of the offset. See “Ext Offset Crv” in the attached file.

Next, I duplicated the edge at the large end of the “Ext Offset Crv”. This curve has 2248 control points compared to 6 in the original starting curve. I used the duplicated edge as the starting curve for a new tapered extrusion, “Taper Ext 2” in the attached file, and it extrudes correctly.

So a curve with 6 control points does not extrude correctly, but a matching curve with 2248 control points extrudes correctly. There appears to be a problem in the algorithm for ExtrudeCrvTapered.

yeah, there’s something wishywashy going on in there… i still haven’t figured out what exactly the command is doing ‘wrong’ when compared to the what i think should be happening but i do now see what you were originally talking about… that crease shouldn’t be happening at the distance you’ve extruded-- or, the offset curve hasn’t kinked yet at that distance…

of note maybe… the crease is occurring at the point where the original curve changes direction:

I think there is nothing wrong. It is just the non–planar curves have their CPs also not planar, knot vector is rolls thus when Taper is involved the bigger the curvature the more pronounced the deformation would be, especially at the points of small curvature and C3 (G3) continuity kinks.

@davidcockey
Yeah, it is obvious that something is not right with the way ‘ExtrudeCrvTapered’ works. With more CPs you have detailed control over the flow so small curvatures are better handled but sacrificing the flow between spans (G3) wich is not a big deal but the resulting surface is a nightmare to tweak and manipulate… drastically multiplied CPs on it.
With the offset curves the resulting surface is not good too. Isolines are so many and so dense in the most curved areas that is imposible to evaluate properly = not good.

The result edge (curve) should in any case be some (scaled–offset) version of the original curve (the one being tapered). That is at least what I would expect as a designer.

The problem comes with the deviation angle between the taper (direction) and the knot vectors I think. CP hull polygon is not planar in your example.

What I would suggest is the curve to be refered to a normal to the taper angle vector throughout the whole curve. Then the results could be as intended. I will try it in Solid Edge to see if the result is like in Rhino.

Basically, Extrude Taper works great if you start with tangent lines and arcs that are planar and you extrude direction is normal to the plane. For every other input curve it produces a result that is less than optimal. What you are getting is much better than I would expect given your input curve.

The biggest problem with surfaces made is that they have fully multiple knots that almost always the surfaces have tiny discontinuities at the knots. That means the surfaces are bad objects which will tend to cause commands to fail. Of course Rhino won’t tell you this. You can use the split at tangents command, but that will make a lot of little surfaces.

You haven’t explained what your goals and requirements are. Do you need a certain accuracy on the draft angle? Does the surface have to match the input curve to within some tolerance.? What are your plans for using the surface?

My advice is to use extrude taper to create a short surface. Then rebuild the surface then insert extra knots in the problem areas and then extend the surface up to the level you need it to be. Check the accuracy of the draft angle with draft angle analysis and do some point editing to improve the accuracy of the angle if needed. You can also point edit to smooth the top edge depending. You could also use matchsrf to match the surface to the input and the offset curve if you want accuracy in absolute tolerance as opposed to angle tolerance accuracy. It all depends on your needs.

Enclosed is an example

TaperedExtX.3dm (224.9 KB)

nah, there is… it’s less obvious when using david’s curve as an example since it’s pretty tough to imagine what the proper result should be at first glance.

if you take his curve then SetPt in order to flatten it then taper_extrude it perpendicular (i.e.- basically, the simplest scenario to do the tapering), you’ll still get the error…

see attached .3dm:

TapExt_Setpt.3dm (205.5 KB)


.
something interesting to note-

if you _Offset the flattened curve using the option ‘through point’ (which gives a live preview of the offset), you’ll see that the same error being produced with ExtrudeCrvTapered is being shown in the preview… however, with _Offset, the error corrects itself upon committing…

Well, Jeff your solution also needs a little tweaking of two CP s on the smaller top curve in order the isoparms to be matchiong the distribution of the original big curve.
You can do that on the othe rsurface too.\

Oh, its not an error. It tries to avoid overlapping or self intersecting. It depends on the taper angle of corse (offset distance in the example above). The offset curves is described by the perpendiculars (distance lines) and very surely could intersect each other the more longer they are. That is the problem… form my point of view.

The problem is the ‘ExtrudeCrvTemepred’ algorythm I guess.
In general… from a non–planar curve it is very difficult to decide towards what angle to extrude. Theres perpendicular planes involved I suppose. The resulting curve on the other end of the extrusion is very simmilar to an offset curve without any doubt. The problem is tha inital curve and the the fact thet the tapered end is a curve fith much more curvy profile… thus requieres higher degree or much more spans, either bringing many isoparms and the surface breaks if it doesnt rebuld the original one at least in higher degree.

hmm… i haven’t offered a solution in the thread…

if you’re talking about the flattened curve (file-> TapExt_Setpt.3dm) then that’s not a solution for david… just a simpler way to show that there is a problem in the command…
but if you’re saying that file needs a little tweaking then yeah, i drew that on the bus this morning… just using sweep1… i spot checked the isoparms in a few places and noticed very small fluctuations so i wrote the note in the .3dm as “expected result is more like this one” instead of “this is the expected result”… regardless, the point was to show the error in ExtrudeCrvTapered in a more simple manner.

not really… not in this case at least… there’s a direction constraint being applied so the angle should always be 15º from the X axis (or whatever angle/direction you assign)

Another way to make a decent 15° tapered extrude out of the original curve is to use Sweep 1 rail

First make a line 4.64072" long perpendicular to one end of the curve and then sweep that line along the curve using the “Roadlike Right” option. Then turn on the control points of the result and select all the inner cvs (selU) and move them vertical 17.319".

See enclosed file:
TaperedExtX2.3dm (124.8 KB)

Bad thing is there are finite number but uncountable number straight lines that are perpendicular to a curve’s endpoint. In fact they are peprendicular to the tangent of that end point.
So is Rhino capable of making a planar surface that should be perpendicular to a curve? Does Rhino even have a concept of a pierce point? Can Rhino make such entities like pierce points between any curve and any surface?
Then we have to make a tangent (planar for simplicity) surface to each point form which tangent surface to calculate the constantly changing extrude angle in order to keep and maintain the angle difined in the ExtrudeCrvTapered command.
At least I see it that way being the right way. Just my opinion… maybe there is a better (right) way.

That was what I was refering to. The taper direction is not a problem. The problem comes when that taper surface (angle) has to come out form the initial non–planar curve. At each point it has to come out in diferent angles (the tangent surface that should be perpendicular to the surface that is perpendicular to the curve at that point).

Anyway, the short story: any taper extrusion is something like cone, just imagine the cone being cut with a free surface, the resulting 3D intersection curve is offset onto the same surface.
Bad thing is Rhino does not correctly offset an open curve on a surface! It extends the offset curve till the edge of the surface onto which is being offset. Well, that’s wrong.

and another… you still have to manually calculate the offset distance in order to achieve the proper angle but…

basically, that’s what ExtrudeCrvTapered should do except it’s messing up on the offset part of it.

i don’t know what pierce point means but the other stuff, rhino handles just fine…

_Line > Perpendicular for instance will draw a line perpendicular from (or to) any point on a curve including the endpoints… _OrientOnCrv >Perpendicular will place a planar surface perpendicular to a curve… etcetc…

i use the various perpendicular-to-curve commands quite a bit in my own work and have found them to be extremely accurate. (at least when the designs are being built out of wood… i’ve never tested them on something requiring millionth-inch tolerances so ‘extreme’ may not be the right word to use. :wink: …(or maybe they’re accurate enough for that scenario too. ))

My testing has shown Loft can result in a different surface than the correct ExtrudeCrvTapered even when the end edges are identical.

When I’m back at the computer I’ll look at the Sweep1 result.

The purpose of the original post was to alert McNeel of a problem with ExtrudeCrvTapered in a particlar example. The example included is just an example.

Jeff has confirmed there is a problem with the planar curve example.

maybe re-experiment with the lofting method. with the one i drew, i didn’t super-thoroughly check it but i did an _ExtractWireframe on the lofted surface and spot checked a few of the isocurves… they were all correct…

@pascal saw the offsetting error right away (way back at the beginning of the thread :wink: )

whether or not he’s reported it or revisited the topic is unknown but i was assuming the developer had it brought to his attention.
?

As Jeff suggested I did a straight extrusion of the curve, offset the extruded surface, and lofted between the curve and the edge of the offset surface. The lofted surface matches the correct tapered extruded surface.

Previously I had lofted between the curve and a shifted offset curve. That lofted surface was considerably different. I then compared the offset curve from Offset with the edge of the offset surface from OffsetSrf and found they have different structure and presumable different parameterization which presumably changes the results from Loft. So using Loft to produce a correct extruded taper requires using Jeff’s method with an offset straight taper.

39 posts in a thread to report a problem. Interesting.