… and I have a gazillion of spans, not single span product and G0 on edges of patches. Not nice. I can convert it to a single span in Rhino8 but I will have a gazillion of small surfaces. In both ways, fillet done on top of that refuses cooperation most of the time. This is not possible to convert it to something useful if you have 100 surfaces like that. This is very stressful work with that.
So I`m trying to inspect it further…
I did DupBorder over those new surfaces and I see:
In order to understand why this is happening, it is perhaps useful to understand how a tapered extrusion actually is made (as far as I know). Basically it relies on an offset of the original curve. Once the height of the extrusion is fixed, the correct offset is calculated, made, and raised to the height of the extrusion. The original and the offset are then connected with surfaces like a Loft. The problem is that offsetting the original curve will always produce a dense curve in order to stay within tolerance, and if I understand correctly can also have 1 order less continuity in spots. Imagine a radius on the original that is smaller than the required offset for the taper. There will be a kink produced at that spot…
The easiest way to deal with this type of situation is to extrudetaper the curve a small distance and then extend the result.
In this file I extruded .5mm and then extended the result 40mm ExtrudeCrvTaperedx.3dm (1.9 MB)
The original geometry is on layers turned off.
There are several stupid things the developers have done in the implementation of extrude tapered. The biggest stupidity is that they have made the command pay attention to the users absolute tolerance. In real life applications 99.99% of the time the user does not want that level of accuracy, but of course the only option they give you is the one that caters to the .01% needs. Why? because the developers are lazy and to change things would mean writing a couple lines of code.
Nobody who uses extrudetaper to model objects for molding purposes ever needs the kind of accuracy on drafted surfaces that extrudetaper delivers. You say you want about 5 degrees (maybe +/- .1 degree) but you don’t have any choice you get a result that is +/- .0001 degrees which is completely absurd.
You are right. Angle is not so crucial for me, it should be more than 2 degrees but 4 or 5 is no difference for me.
You are also right that is the crucial command for moulding production and should be polished IMHO.
I hope they will find how important is that command and v8 will deliver some improvements with density and loose options for people who don’t need so accurate output.
It’s often used also for making text tapering for moulding and it`s a nightmare there.
It`s often a problem that developers don’t use the tools which they produce. They are tested but not used in real-life problems.
Well that’s just another one of the stupidities that the developers have foisted on the users.
Extrude taper has no option for the user to choose SplitAtTangents like the regular extrude command does. Extrude taper splits or doesn’t split based on who knows what?
In my example file I extruded .5 mm and got a single surface which I extended.
I didn’t convert I used the same curve you did and extruded it only .5mm. Then I extended the surface 40mm. If you are not getting one surface - I don’t know why its doing that. After extending you can use DivideAlongCreases to split the surface up into tangent surfaces.
In v8 you won’t do that trick cause it`s forced to SplitAtTangents So you will get many surfaces but still multispanned with a gazillion of control points.
I tried to use ConvertToSingleSpan command from v8 and I i`ve got single span what is below (grayish strip).
But of course both have no G1. What is strange that even single surface before ConvertToSingleSpans has edges which contains G0. I`ve thought that is not possible to have surface which has G0 edge inside.
It looks like they have included a SplitAtTangents option in V8. That only took 20 years.
However, your example illustrates how poorly this is handled. You can set SplitAtTangents=No but when you extrude 40mm you still get a bunch of individual surfaces. Apparently with more control points its harder for the developers to preserve tangency between segments, which is another absurdity. The biggest absurdity is the persistence in making the result composed of 1000s of G0 bezier segments. Its as as if they think there is no possibility of preserving the original tangent polycurve structure except by breaking those original curve segments into 100s of G0 pieces.
In cases like this I usually made offset curves (using the “Loose” option), then move them away (backwards in your example), then use “Loft” to create very clean surfaces in-between. If needed, I also use “Match surface” to make sure that the transitional surfaces on the rounded corners are either G1 or G2.
To get around this, at least in some cases, I extrude a very short distance - very short - making the offset small and the added complexity, well, less. Then ExtendSrf to get the depth.
That is possible because the surface is composed of a multitude of internal segments that only guarantee G0 continuity.
The option “SplitAtTangents=No” is available in ExtrudeCrvTapered in Rhino8.
But as you point out using that option doesn’t always produce a single surface that you can extend which means that option doesn’t make things much better.
This whole business of the users can workaround the developers inability to make this command work well has got to stop.
The users pay the developers to be smarter than us. This whole concept that the users can find a way to use the tools to get a good result but the developers can’t find a way in 25 years is simply not credible.
yes that is one of several methods that can produce a much better result than the garbage that the developers think is an adequate result.
Unfortunately, the loft command has its own inadequacies. Loft can’t always figure out how to coordinate the two curves being lofted. That means to make it work the user has to divide both curves into individual segments that can be lofted one at a time so that the loft command doesn’t get confused about how the 2 curves line up.
I did like you said. I had two input curves (one single curve, and one joined curve to test). I did ExtrudeCrveTapered with 0.5 mm value. Next, I did ExtendSrf on it and extended it to 40mm.
Yes, I have a single surface which looks like multi-span G1 from a distance but when you examine that closer, you will find kinks on Zebra also when you do DupEdge command on the back edge you will find that edge contains G0 inside and of course kinks on zebra.
So it’s not a solution cause you can’t even fix it manually. It`s not also G0 in my opinion.
Please correct me if I`m wrong with my assumptions.
Edit: There is also one thing which I can’t explain. Maybe you will have more luck.
When I took the surface from the last test- one split manually on tangents and the second moved to v8 to do ConvertToSingleSpan (also split on tangents). Then that converted manually doesn’t have G0 only pure G1 and that converted to single span in v8 contains G0 which is strange because it was the same surface as input. Also strange is that surface edges still show that there is G0 on it. When I examine that pseudo-G1 surface split manually (adding curves with ExtractIsoCurve command and checking GCon there) I still found there is G0 in many places even if GlobalEdgeContinuity tells me that the surface is fully G1. It’s possible that I’m doing something bad but I don`t know what.
I have to say that during the examination, I lost a lot of time and I’m confused as hell. I’m doing that manually but it takes so much time that the client often asks me why it took so much time and I can’t answer him because I think the same. We are living in an age when modelling soon will be obsolete and 3d models will be generated by AI and we still have to correct 1000 surfaces by hand click after click to get G1 output from G1 input. It’s very frustrating. And I understand that the command should do kinks in some depth but I think 40mm in that case should be possible to produce without G0.
or maybe it’s doing G1 already so why GlobalEdgeContinuity and GCon show me G0 there? I can`t find a solution here.
In my opinion, extend should also work on polysurface edge if the long joined edge is G0. In my opinion also ConvertToSingleSpan in v8 should produce G1 output from G1 input. I can’t understand why this changes continuity. It shouldn`t.
Edit2:
When I divide those new single surfaces produced from an extension of tiny ExtrudeCrvTapered with DivideAlongCreases and check them with GlobalEdgeContinuity I also find G0 there (DivideAlongCreases - split on tangents and kinks turned on).
Thanks. The problem with that solution on many long curved examples is that you will have many G0 after the offset curve and you will have to do a match on every one of them which is time-consuming.