Extrusion Improvements

Hi there, just wondering if it would be possible to add the following features for extrusions:

  1. Exploding a closed extrusion should make it an extrusion and two polysurfaces (currently it destroys all extrusions), a 2nd explode command would then turn the extrusion into a surface.

  2. Using the ‘cap’ command on an extrusion should turn it into a closed extrusion, instead of a closed polysurface

  3. Commands such as extractsrf and trim, should retain extrusions where possible. Obviously trim would only work in specific circumstances where it is trimmed parallel to the original.

  4. Add a new command which attempts to convert a polysrf (open or closed) into an extrusion, perhaps with help from user input.

In other words, Rhino should make every attempt to use as many extrusions as possible and then failing that there should be a way to convert objects into extrusions.
Perhaps there’s a technical reason for the way it is now?

1 Like

Hi Steven - do you find the advantages of Extrusions to be very significant in your day to day work? I assume the answer is yes, but just checking - how do you use them, as distinct from polysurfaces?



Hi Pascal, yeah, I’m mostly working on building models, which have a huge number of extruded elements. I’m also importing a lot of these models from other CAD applications and they are really slow to navigate. It would be good if I could import it and convert as many elements as possible to extrusions so I can look at the model more easily.
Perhaps I’m overestimating the performance improvement that would be gained?

Hi Steven - thanks, I can easily understand the desire to convert breps to extrusions, especially with imported objects - it is not that straightforward but should be possible at least in some cases, especially if it’s ok for the user to provide some input - like the edge that would be the axis line. I’ll take a poke at that.

As for trimming - I hear you, it should be possible if the trim is equivalent to moving an and face along the axis. For now. however, instead of trimming, you can turn on extrusion points (f-10)and move them to change the length of the extrusion.

ExtractSrf should be possible as well, I think, if the extracted face is an end cap in the case of closed extrusions.

I don’t say any of this is likely in V6 - but it does seem (to me) technically not insurmountable at all - what I was trying to understand is in the case of trimming and other edits, if you do this to a large number of extrusions such that there would be a noticeable gain by keeping them extrusions.

In any case, just in case I can get somewhere, I’ll have a crack at a converter as time allows…


Thanks Pascal,

Yep, a ConvertToExtrusion command would be the most useful for me. I guess this would ideally be automated and only if it can’t figure out the extrusion would it ask for user input.
Explode, cap, extractsrf & join are the next most useful (in that order).
Trimming is probably not necessary now that I think about it. It would be very rare that I would do this to a large number of objects.


If one was to redesign the Extrusion objects, I suppose it could do with a more parametric interface. Rhino now reports “closed extrusion” on a box so, I guess, this is defined as a cross section, an extrusion distance, and a capping parameter. All of these could be exposed to the user with a check box for cap, a number field for the distance and possibly even a means of editing the cross section.

And the same goes for a Surface of Revolution.


Hi Wim - the underlying info is there. It should not be too hard to come up with some command line (at least) ui.


btw, converting is working here, at least for straightforward cases.


1 Like

Thanks Pascal, when do you think we’ll see that introduced? :smiley:

Hi Steven - If all goes well I’ll make a plug-in in the next day or so - for the moment, it makes you pick an extrusion direction edge per polysrf - if that actually works out in the real world (where you are), I’ll see about making a version that can guess what the likely direction should be - I have enough, I think, to get that right in the more obvious cases at least. if that works OK then multiple breps could be converted at once, which is probably where the biggest advantage would be.

@Steven, @wim - if you want to have a play, give this a spin -

ExtrusionTools.rhp (20 KB)

Save then drag and drop to add


Pick a linear edge in the desired extrusion direction. Currently it defaults to not deleting the input, but that is easily changed. Breps with ends that are not planar or not in a plane perp to the selected edge will be converted as ‘untrimmed’ so to speak. Probably all kinds of cases that will goof up - please let me know… for instance, it can do dumb things instead of nothing if you select an edge that is not reasonable for an extrusion direction. Working on that.

It might work as well to ask for one linear edge on a multiple selection of parallel candidates and attempt to use that edge direction for all.

I’ll add more ‘tools’ if and when I can…

Added SetExtrusionLength… let me know what’s broken…


1 Like

On this command, the mesh does not seem to update as expected.
A 102.45 high box becomes a 100 high box that looks like this:

Refreshing the shading fixes this.

I would like to add some other requests for improvements for Extrusions.

A “common” profile assignment to multiple extrusions would be great.
I’d also like to see additional history geometry objects such as revolutions and sweep (which could also share common profiles with extrusions).

On the brep to exrusion conversion, Bullant (now free) has a command ggConvertToExtrusion which might also help. http://www.geometrygym.com/downloads

Hi Wim - Thanks, I see that. I’ll fix it.

Wireframe rules.

@wim @Steven - fixed, in a hacky way for the moment. ExtrusionTools.rhp (20 KB)


Thanks Pascal, I’ll check it out on monday!



Hi Pascal, sorry to say the first example I tried didn’t work very well:

ExtrusionTest.3dm (217.6 KB)

I’ll keep playing and let you know if I have more success with other objects.

I’ll check it, thanks - most likely the surfaces need to be shrunk by the script - I did not consider that.

@Steven - yeah, it works if you ShrinkTrimmedSrf ahead of time, I’ll see if I can get that handled by the code.

@Steven - fixed in the attached - thanks.
ExtrusionTools.rhp (20 KB)



Pascal. I see you all are talking about extrusions . What would it take for a tapered extrusion to be able to have 4 different draft angles in a 4 sided object ? Say for box construction. You might have 3 on one side , 5 or 10 and do on ( thats degree).
Now I just build a wireframe of curves and use surface from x amount of points.—Mark

For me, I want to sub-select a face on an extrusion and then click on a point of this surface (a corner) and drag the face until it matches a point on another object. In woodworking, this is a normal process in which a part is made to fit between two other parts, where you don’t necessarily know what the distance is between the two parts. Further, when parts are moved around, I want to be able to easily stretch or shrink a part to fit the new space, without specifying a distance or scale.
Actually, I can do this now, but clicking on a snap point in the sub-selected face doesn’t show the tooltip info that I am clicking on a sanp point. I just have to guess that it works and start the move operation. It would be nice to see the osnap points on the surface sub-selected when performing this re-extrusion of an extrusion.

Hi Chris - You can do this now… I don’t yet see the snap problem you’re describing. I can Move an extrusion or Brep face and get osnaps - perhaps you need the ‘OnSrf’ one shot osnap?

Also, my guess is the ‘tab direction lock’ will be your friend - see Help.


Hi Mark - extrusions as ‘extrusion objects’ in Rhino are straight sided, period. One of the advantages of ‘lightweight extrusions’ is how simply they are defined. I think your real question is about how to create an object, whatever its type, that has variable taper - the current answer in plain Rhino is you need to build it however you build objects in general, that is, there is no built-in tool or procedure or ‘feature’ that would do this. Honk if I am missing the point…