Sel dup basically sucks and should be reworked

Sel dup needs serious work or we need a new command like sel similar.
I’ve found that if you have identical circles with same radius and xyz location but with differing orientations nothing can select them outside of manual selection.
Please tune this it needs work.

Please post a file so we are looking at exactly the same geometry. This will help explain the request to development. There may be a script that can help here too.

It sounds like one of the circles is rotated so that the start points don’t match up thus making them different to the command you threw under the bus.

Hi Brian,
That’s exactly it. Circles are the same with different orientations.
The reason I’m so down on this command is that when it fails it wastes stock and cutting time for me. My cutter will skip a cutting path if there are duplicated curves in the same spot so please take time to understand my position and that not having anything to select these is a time cruncher for me. I can understand selDup is meant for exact dups, but that was 10 years ago it’s time to rewrite this command and make it more functional instead of letting scriptwriters take the brunt.

It should have many more options like a tolerance setting a setting to ignore orientations and one to find duplicates or copies that are not in the same location.

Also now that all these script methods exist the only way to extend selection of objects currently is to use scripts, but this functionality should be in Rhino not just in scripts.

I can get my circles thanks to djordje’s script and I can get my tolerance curves thanks to Mitch’s script but this should be in Rhino proper and I do think the command is worthless for many tasks it’s a leftover and needs the above or add another selection command like sel similar. Because I am doing repeating patterns I sometimes need to duplicate things while I am copying them and that’s how this circle problem as well as other problems with sel dup not working arose.
Thanks for interest I hope this can be added for V6. Sorry for the harsh language and thanks for your understanding.

Can you post or email with some files? I know it seems silly to ask for files rather than just making examples to match your descriptions but it is very often the case that specific conditions exist in a user’s file that would otherwise go unknown.

@tim @GregArden
I see some open items regarding SelDup that are on your lists. Any thoughts?

Just so you know, the command was written for a very specific purpose and any modification will likely break it for that intended purpose.

AutoCAD has a tendency to make a lot of perfectly duplicate objects. This command was intended to cull out those perfect duplicates.
I understand that you want to use it for a different purpose but not at the expense of breaking it for it’s original and still needed use.

No doubt the developers will take all this into consideration.

Yes exactly John I don’t want to break this command so leave it and for V6 let’s get a select similar command that has the above considerations in it.
The only reason I’m harping on this command because it’s the only one in this category that sort of works for my needs but for v6 we need a sel similar command or an extended and filtered select command.
Likely you guys already have something planned.

So now lets get into the weeds…
How similar?
I understand the two circles with perfectly identical center points and radii but a different start/end point location you want selected.
How about line segments that have their start and ends reversed?
How about the same circle but the center point is 2x tolerance away from the other? Is that close enough or not?
what we need are specific examples of objects that you think should be caught by the SelSimilar command.
Another thing to consider is the U/I,
As you can see, this is going to get super complicated very quickly.
Here are the questions to answer:
How close is close enough and how do we control it?

Those are already selected with SelDup.


Given a user-specified tolerance, the curve deviation between curve objects should not be more than the tolerance anywhere. I think that could also apply to single surface objects. Polysurfaces will certainly be more complicated…


It would be easy to make a script for selecting Duplicate rotated circles, with a tolerance for both position and size, but that is only one object type. But maybe making custom tools for the different shapes can be the right way to go.

Roland, I’m going to echo what others have suggested: next time you have a real project where you’d use the scripts you mentioned to get rid of the similar geometry, save the “before” geometry, then do your normal process and save the “after” geometry.

You might forget that none of us actually build anything with Rhino - we spend our days sitting in front of compilers and email programs - so we never see the problems you see.

Having before and after models to compare will let our developers think about the problem globally. Often better solutions come out that way.

What I’m thinking is how do the duplicated objects arise in the first place…? Some of the common ones I see are:

  • sloppy modelling or simple mistakes
  • projecting to the cplane
  • make2D output
  • imported geometry from external files

Related are other problems like parts of curves completely obscured by other longer ones, and short curves - both of which often turn up after a Make2D command, and within imported files, especially a 2D file that has been created from a 3D model in other software.

We have the select duplicates command, and also the select short curves command. Perhaps there are others that might be included…purge for example?

Anyway, I’d like to see a composite command (cleanup…?) that when run addresses all of the above.
It would bring up a dialog with default options, so it could be run directly in its default state, but if the user wanted to set custom options, these would be remembered next time the command was run.

I would expect it to initially default to the tolerance of the rhino file, which could be changed in the dialog, and would relate to this command only.

It might have a “strict” and a “real world” setting. Strict means an object has to be 100% a duplicate in a geek sense; real world means for example a circle on top of another circle within tolerance is a duplicate, regardless of where its start/end point is.
Real world might also optionally ignore other attributes like layer, or colour…

The command might have two parts - one that deals with 2D curves only, and the other that deals with everything else.
Why? Because almost all the problems I come across with duplicates are 2D curves left over from project, make2D or imported files.

How would it get rid of unwanted part curves obscured by others? One way might be for the command to itself create a fresh set of curves that it laid over the top of the existing, these new curves being continuous between the furtherest end points, or closed in the case of there being no end points free “in space” - ie if multiple curves were always overlapping other curves, it could be assumed there could be created one closed curve that would “rule them all”.
So the command would make these new curves, and then delete all the part curves and short curves that were the originals.

Conceptually it might work as a modified chain command, where the command would keep rolling till it got either to free end points, or came back to itself, rather like a toy train running on a closed set of tracks…

Maybe another option here is that the make2D (and project curves) commands always run code at the end to find and remove short and overlapping curves, and repair the result accordingly.

Anyway, there is certainly a real need for rhino to upgrade its capacity to weed out overlapping and part curves, which are very commonly created both as by products of some of its own commands, and far too often come in with imported files from elsewhere.


1 Like

Hi Brian,
Will do but it’s pretty typical stuff for the most part. The one that drove me nuts was the duplicate circles that have exact same radius and xyz coordinates but different orientations. For me that was troublesome as my cutter won’t cut if duplicate curves are in the same spot and I end up wasting stock and imagine you have to click on 100s of circles to see which ones had dups under them and since there is no indication of them or how to find them in Rhino outside of manual selection.

Now that I have a script from djordje to find them no problems there, look at the sel circle script that’s he posted that’s all I needed maybe this type of stuff can be added to V6 in the future?

So then I can rename this conversation from “SelDup basically sucks and should be reworked” to “Please add duplicate circle detection to SelDup”?

Once we add detection of circles with identical centers and radii, but different orientations, then SelDup will do everything you need?

I don’t think that is sufficient. Real world users (we have lots of them in this building) see two or more objects that occupy the same space and look exactly the same as duplicates. I’ve argued (in Rhino’s defense) that they aren’t truly duplicates, but the general response is a blank stare. Generally, they just want those duplicates gone. To them, the SelDup command is supposed to find them. Of course, seldom are two seemingly duplicate objects really exact duplicates, as the circle example above well illustrates, so of course it fails. To 99.9% of our users, that makes no sense.

I think what we need is a command that doesn’t analyze objects the same way. I’ve often wondered if there was a way to graphically compare objects and ignore their underlying structure. I clearly don’t have an actual real solution, but I think it must be worth considering.

I wonder how some products can compare two objects and either highlight the difference or report no changes between the two, when the two files compared were both imported. Clearly they could not be duplicates by Rhino’s strict definition, yet, it works for them. WorkNC is a product we use for CAM that has this ability. I believe RhinoMold can do part comparisons as well (based off of their website).

What about a SelApparentDup command?



How about

  • SelSimilar

To add to the complexity:
How would an object of same shape but on a different layer or with a different color be treated?

This tool should deal with objects of similar geometry right? And in addition they should occupy the same part of space. So SelSimilar is not covering the part of being on the same spot. More a

  • SelNearDuplicates

Regardless of the naming I think it is a tool much needed. Over the years this has been popping up quite a bit and having dealt with files from novice/average and expert users, it is a tool with great benefit for many users.


Hi Willem- I think to please every body in all situations, ha ha, you’d ultimately need settings to filter with -

Look for same:

Bounding box
3d shape

blah blah, and then

Tolerance: .001

And yes, this has been coming up ‘since forever’.


@dalelear, do you think the renderer you wrote for Greg to use in Make2D would be useful at all in detecting near-duplicate objects?

Yes. The ON_DepthImage tool would be a reasonable way to detect objects that were good candidates to be considered as duplicates. It would be most effective for curve and point objects. Some additional pre and post processing would be needed. If somebody starts working on this, I have several implementation ideas I would like to discuss with them.


Yes now you guys are getting it.