Easy way to check if a block is mirrored?

Hi! Ive found that mirrored blocks are essentially exploded when exporting a STP into solidworks, is there any easy way to check if a block has been mirrored in object properties or object description etc?

I’m dealing with a lot of blocks that are visually symmetrical but have been mirrored about a lot in my model… I can add some geo to see but I was curious if there’s something in properties, without modifying a lot of blocks just to see.


If you look in the Properties > Details for a mirrored block instance, the Geometry transform will start with “-1”

is only that first digit relevant for the -1? or anywhere in the rest of that set of digits?

would later digits reverse the mirroring? I’ve got this block which is exporting through as not mirrored, but starts with a -1…

Block Instance
-1, 0, 0, 24.986116243540209
0, -1, 0, -81.999999999999829
0, 0, 1, -2.8337759133680789e-12
0, 0, 0, 1

Draw a box in the positive quadrant and mirror is around over the origin axes.
Then you’ll have an example that makes sense to you.

Hi I think I can tell the basics with this, but it gets pretty confusing once things are mirrored about odd angles and z axis as well etc. I have a lot of bolt blocks that have been mirrored all over in multiple directions which seem pretty impossible to tell which are mirrored…

Hi @John_Brock,

Isn’t this specifically a reflection in the y-axis?


I don’t do any coding, but I think you’re making this more difficult that it really it.
If the first value in the transform matrix shown in Properties > Details has a negative sign, the block instance is Mirrored.

If the original question was complete, then that’s the specific information you asked for.
What you do with that information relative to modifying the block instances again, or changing the process you use to position them initially, will probably take someone with some scripting skills.

That’s why I suggested making a simple test case you can run through your export process to get the results you’re after.

Hi @John_Brock,

I am making an assumption here (not in front of Rhino) that the transformation matrix you refer to is a standard 4x4 transformation matrix and not some special annotation called that to confuse people. If I am wrong I heartily apologise for what I am about to say.

If the first cell in the matrix (1,1) is negative, then it may indicate mirroring. Or it may indicate rotation around the z-axis, or around the y-axis, or around an arbitrary axis (but not the x-axis). If is positive, but cell (2,2) is negative, that may be mirroring. If (1,1) is positive but (3,3) is negative, that may be mirroring. But again, each of these could be part of various rotations.

So it genuinely is more difficult than you think. @rajaa, any chance you could shed some insight here?

On a lighter note, @nscross, I suggest you build a prototype: any bolt that is mirrored will be left hand thread and the nuts won’t go on :laughing:


That could very well be.
I am not a developer.
In years past, when this question has come up, I checked with a developer and he said to check the sign of the first number in the transform.
If it’s negative, it’s mirrored.
That’s what I was passing along and intended to convey I was not a developer with deep knowledge on this.


This sounds like something we may want to fix in our exporter

Hello - how are you seeing that they are exploded, in SW?


Hi Pascal!

So when importing a stp file, the blocks in the rhino file come in as part files or assemblies with the correct name and heirarchy. The mirrored blocks will come in as a cluster of generically named parts per each polysurface etc.
This example is some text in a block named “block 01” mirrored about both axis. the doubly mirrored one and the source one are fine. The other two are a string of parts. This can get messy on a big model where you’d end up with a string of unnamed polysurfaces as parts.

Also, on a side note, for some reason it seems to import with an additional assembly level above the imported file which is redundant. Not sure if this is just solidworks or if rhino is doing anything in the export to cause this. This ones not as problematic.


OK, thanks - clearly my initial test was over-simple…

@nscross - I see this now. I do not know what the solution is … it is ringing a faint bell that I’ve chatted with the developer in the past about this - I’ll ask him to refresh my memory when he gets back from… vacation.


I’m also pretty novice at solidworks, so this could just be an issue where solidworks does not allow for a mirrored block without a mirror feature being applied in the assembly, which would make some sense in manufacturing, it becomes a new physical part once its mirrored.

If that’s the case, it would just be helpful if there was any way to find mirrored blocks. If there was some selection option or something. Maybe something similar to how rhino can tell a block is non uniformly scaled?


Sounds good thanks!

Hi, @John_Brock .
I just got the same result for a block I oriented by 3 points.
That would not be a mirroring-action.

So is is possible that the -1 in M00 is not the right indicator?


Dear @tobias.stoltmann
this transformation:
-1, 0, 0, 0
0, 1, 0, 0
0, 0, -1, 0
0, 0, 0, 1
will do a 180 degree rotation arround the y-Axis. No mirroring but a -1 at M00.

Transformation Matrix is nothing i deal with every day… as fare is i remember you have to calculate the determinant of the upper left 3x3 Matrix (+ or - ) …

this is mentioned here - stackexchange

@menno is a clever guy and may know !

if you find some nice resource that explains matrices in a accessible way for the design-World… please post it.

If you re on the programming side and want a more graphic solution:
use two vectors a,b, and their crossproduct c.
apply the transformation to a b c
create a second crossproduct “test” and compare it to transformed c.
if the angle is more then Pi/2 the right-hand rule is destroyed and the transformation is doeing reflection…
(but any mathematician will have a nicer solution for sure…)

hope that helps. kind regards -tom

First of all thanks for the detailled reply.
I just tested what you said and I think what you say is true:
If we receive a negative determinant the block is mirrored.

I will check this out and dig myself into this, as I have been struggling with transformation matrices BIG TIME and let you know.