Extrude? Result is not like the input



I’m not sure what’s going on with the extrude command.

When I extrude a curve, I usually want the result to be a polysurface split in the same places where the curve splits when I explode it. My work-around in V5 was to explode the curves first, then extrude (DivideAlongCreases would only work if the continuity between curves was G1, so didn’t work if the continuity happened to be G2 or greater.) But in V6, extruding exploded curves doesn’t give me a surface split like the input. Instead, it seems to give me the same result that I’d get if my curves were joined.

This is also a huge problem and time-suck for me when I use Sweep1 with a single cross-section curve (95% of the time I have one cross-section curve.) I need the output to match the way the cross-section curve is split. Otherwise, I run into nightmares when I try to boolean parts later, or trim & split. I’m not sure I’m explaining it well. In the attached sweep1 file, I want the blue part to stop at the white part. This would be much easier if I had edges on the white part to use to split the top & bottom surfaces of the blue part. I’ve been building a lot of track lately & run into this problem a lot. I have to make sure that every time I sweep1 a shape, I explode it and then split it to match my input curves (otherwise, if I wait until later, I may not have the curves in the file anymore or things may have been moved, so it’s tedious to fix.) It’s very, very time-consuming.extrude.3dm (7.9 MB)
sweep1 no split.3dm (8.3 MB)


Here is a file showing what sweep1 does now, and what I wish it did (as an option - sometimes it’s best to have a result that’s simpler instead.)sweep1 wish.3dm (8.6 MB)


Here is a file showing what extrude does now vs option that I wish for.extrude wish.3dm (7.9 MB)


Turn off creating extrusion objects by default. Call the command _UseExtrusions and set output to Polysurfaces. Problem solved for extrusions at least.

I have lobbied for this to be the default setting for the last two versions, but it seems there is a willingness to continue to confuse the average user in this case.

Sweep 1 is difficult, as there is no way to sweep multiple individual curves without them being considered to be cross-sections of the same surface. Below is a script that might help you with the Sweep 1 problem - it does the equivalent of exploding the profile into its subcurves and sweeping those, then joining the result back together. You won’t have all the bells and whistles of the normal Sweep1 command, but in this case I’m not sure you need them.

CreatePolysurfaceSweep1.py (1.2 KB)


Shouldn’t extrusions split the same way that polysurfaces do? From a user perspective, I don’t see why they would be different.

Re sweep1, thanks for the script. I’d like Rhino to do that without a script, but I’ll use try your script for now.


How do I install that script? I thought I could just drag & drop…


That’s precisely my point… When first presented to us at the beginning of V5 development, it was promised that Extrusions would be “completely transparent” and that the user wouldn’t even notice them being there. Unfortunately, that has never been the case. They are different and they behave differently from polysurfaces. The fact is that 99% of Rhino users will not benefit at all from using extrusions, so the default setting is only valid for 1%. That has never made any sense to me.


Unfortunately Python scripts are not self-installing. Several ways to “install” and run the script -

A. If you are only going to use it occasionally, you can just type RunPythonScript at the command line, browse to where you have stored the script and OK to run it. Or you can type EditPythonScript, open it in the script editor and run it with the green button.

B. If you want to set it up more permanently to run as an alias or toolbar button, then the best way is to do it this:

  1. Find or create a safe place (folder) to store all your python scripts. McNeel has created a default location, it’s here: C:\Users\<username>\AppData\Roaming\McNeel\Rhinoceros\6.0\scripts (or 5.0)

  2. Open the editor with _EditPythonScript, go to Tools>Options and in the “Files” section, put the path in there. You only have to do this once. You can set multiple locations if you want, it will search for your script in those folders in order. Close the editor

  3. Now, in Options/Aliases, for any script, create your alias/command name in the left column, and in the right hand column, put the following: ! _-RunPythonScript "scriptfilename" where scriptfilename is the precise filename of the script.

  4. That’s it, when you type your alias, it will run. For any further script, you just have to throw them in the same folder and create a new alias (i.e. step 3).


I absolutely see your point, and I agree. But one aspect remains (or does it?); Extrusions are said to be more “lightweight” and so could have a benefit in certain models. If so, perhaps this would only benefit architectural models? if not, then it would be better to dump such redundancy.

// Rolf


I also agree the default setting should be to create surfaces/polysurfaces not extrusions. My guess is there probably was benefit to a significant number of users when development of the lightweight extrusion object started sometime prior to V5 release in 2012 given the capabilities of many computers then in use. Today the hardware situation has changed.


Thanks. I’m unclear why these are harder to install than rhinoscript files. Maybe that will change someday.

This script works well for sweep1 (still should be built in, IMHO.) - thanks!

(John Brock) #12

The lightweight extrusions are critical to architects that do huge models of simple objects. They are far more than 1% of the Rhino user base.
It is easy to to change an extrusion to a BREP. The reverse is not true.

Forum participation does not accurately match the user base. Industrial designers which are not well served by lightweight extrusions are far more likely to participate here.

We have seriously considered this change in default settings for use of extrusions and concluded having them on is the least painful way for the users in general.

I wish there was an easier way that running into the confusions to learn about how your Rhino should be configured to work best for you.


I disagree here - as soon as you do ANYTHING to an extrusion - cut a hole, trim the end, etc. it ceases to be an extrusion and becomes a polysurface anyway. I wonder how many architects actually use “pure” extrusions - by the thousands where it might slow down the display (not even certain in V6) - and in those cases, it is they that should be turning on “UseExtrusions” and not the other way around.

No, but the number of issues arising from using extrusions that are posted here does point to the magnitude of the problem.

(John Brock) #14

I completely understand your point of view.
I would prefer Extrusions were off myself, but I’ve been on the receiving end of problems with these huge architectural models.
I lost this battle myself but I’m in a place where I see the larger picture too.

As a result, when I install a new Rhino and see an extrusion with no isocurves, I run UseExtrusions, change it, and don’t think about it again.


Yep, I hope so. There is no drag-and-drop that has been implemented for python files, and creating plug-ins with them is a royal PITA.


I guess I never noticed b/c I always have isocurves turned off. In any case, how would I have known that I should run UseExtrusion & turn it off? I’m not sure what should be done, but my first thought is that extrusions should better match polysurfaces so that it doesn’t matter which one I’m using.

(John Brock) #17

Maybe this will help:

(John Brock) #18

That is ill advised.
Isocurve display is as handy as color. It tells you if it is an extrusion or a BREP, You can tell if is is a “clean” surface with minimal and evenly spaced isocurves. If the isocurves are shifted, you can tell it’s a trimmed surface.

No of this useful information is available with isocurve display turned off.


On the other hand, with isos turned off, I can see what I’m doing without a bunch of extra lines cluttering up my view.

Also, if I don’t have isos turned on, I can set edge thickness to 1 pixel (if I’m showing isos, the edges need to be thicker, so at least 2 pixels, which makes for giant edges that I can’t deal with.)

I turn on isos for individual surfaces when I think they will be useful.