Found no duplicate when 2 boxes are exactly the same

nodup.3dm (62.5 KB)

How was the duplicate made?

The internal representations of the two polysurfaces’ geometry differ. I guess that is why they are not seen as duplicates.

If you use copy in place to make a new copy of one of them then that has the same internal representation and is recognised as a duplicate. Ditto for ctrl-c ctrl-v.

But mirror creates a different representation and SelDup fails.

So @JimCarruthers’ question is very pertinent.


the duplicate was made with orient i believe, but i am not very sure since i am a bit riddled as to how it actually happened to become a duplicate.

experimenting a bit i found that creating two boxes with the same coordinates from scratch also does not yield any duplicate which is strange.

@jeremy5 where do you see that they have different internal representations?

the funny thing is that when i create two lines from scratch they actually act as duplicates. my understanding was, that geometry that is congruent to a very tiny tolerance is checked as duplicate. in this case it just should also work i think.

No, that’s not how it works - would be nice if it did, but no. For SelDup to work the two objects have to be completely identical in every aspect NURBS-mathematically - for example if you have a cube and you rotate it 90° about it’s center, it’s no longer a dupe because the order of the 6 faces on one doesn’t match the face order of the other.

Lines have been special-cased to select if the end points are identical but the direction reversed, and circles if the radius and center point/plane are absolutely identical, but seam point is different or the orientation is reversed. There are a few others, polylines as well if the points are the same but the directions reversed, but it doesn’t go much beyond that. People have been requesting a “SelNearDup” within tolerance for a long time (lots of discussions here), for simple objects it’s not too hard to do, but for more complex ones it’s very difficult.

I ran the “List” command on them (nb when you run this it says ‘DEVELOPER DEBUGGING INFORMATION ONLY Use the Rhino “What” command’, but it gives more info than “What”). The differences lie in an array of Curve3d entries.