I have a rotated empty object, and I want to make a mirror image of it, relative to the global X-axis.

I placed the 3D cursor at the axis origin, selected the empty and used Ctrl-M X. But the result is not what I want. As you can see in the image, the empty is merely translated to its mirror image location, and its rotation is unaffected. I expected the new empty to be a perfect mirror image of the previous one.

Is this a bug, and is there a way to achieve what I want ?


Edit: After suggestion by Fweeb, I displayed arrows instead of plain axes. It's sort of transformed, but it's not what I expect from mirroring relative to X-axis.


Edit 2: What I expect is roughly this:


Edit 3: After the answer by Gandalf3, I played with rotations and obtained the desired effect by setting the rot and scale of the new empty manually: scale x = -1, y = -1, z = -1 to obtain a negatively oriented emtpy, then rotX' = rotX + 180, rotY' = -rotY, rotZ' = - rotZ. It is certainly possible to do the same relative to other axis. But I'm still surprised by Blender's behaviour, and I thought it would do this automatically. http://s1357.photobucket.com/user/adrien79/media/Divers%20forums/mirror_empty_4_zps9a3806d3.jpg.html

  • $\begingroup$ Thanks, Adrien! That was really helpful. It would be nice if one could just use S, X, -1, like you can with bones to obtain a mirrored empty, but you can't. Thanks to your tip, the trick that worked for me was (using the 3D cursor as a pivot) S, X, -1; S, Y, -1, S, Z, -1, then R, X, 180. Sorry about the incomplete comment initially... Stackexchange is set to post as soon as you hit enter... no paragraph breaks! :-) $\endgroup$ – Copperplate Jun 16 '17 at 18:38

It would seem that the only way to do this is by mirroring, then inverting the rotation manually:

  1. Mirror your empty with CtrlM:

    enter image description here

  2. Invert the rotation of the mirrored empty by adding a - (or removing it if the rotation is already negative):

    enter image description here

You can automate inverting the rotation with a simple python script:

import bpy

ob = bpy.context.object

ob.rotation_euler.x = ob.rotation_euler.x * -1
ob.rotation_euler.y = ob.rotation_euler.y * -1
ob.rotation_euler.z = ob.rotation_euler.z * -1

To use, first mirror the object with CtrlM, then run in the text editor with the mirrored object selected.

  • $\begingroup$ It's more complicated than that, because the original rotation has X, Y, Z components. I finally obtained the wanted effect by scaling x = -1, y = -1, z = -1 (to obtain a negatively oriented empty) and rotX' = rotX + 180, rotY' = -rotY and rotZ' = -rotZ. It's not exactly intuitive, and I would expect Blender to do this transformation by itself. $\endgroup$ – Adrien Dec 17 '13 at 18:41
  • $\begingroup$ It is documented on the wiki that the mirror tool is equivalent to scaling by -1. This works fine on mesh objects that don't have any rotation, but since applying the rotation to an empty doesn't work this behaves unexpectedly. $\endgroup$ – gandalf3 Dec 17 '13 at 22:43
  • $\begingroup$ Then why does it scale by -1 on X and Z axis when I do Ctrl-M X only ? (I just checked, on Ctrl-M Y or Ctrl-M Z it scales by -1 on all three axis. Maybe there is a specific bug with X axis.) And why does it move the object as if doing plane symmetry through Oyz plane on translation only, without rotation ? I'm sorry, but I fail to understand the logic. $\endgroup$ – Adrien Dec 18 '13 at 18:03
  • $\begingroup$ @Adrien Pressing Ctrl+M+Y is identical to pressing S+Y+-1. It should only change the scale along the specified axis, however it seems that when the object has a rotation it scales on other axes too.. I'm not sure why that is, there might be a bug somewhere.. $\endgroup$ – gandalf3 Dec 18 '13 at 21:09
  • 1
    $\begingroup$ Agree, it's strange, quite like a bug. $\endgroup$ – Leon Cheung Dec 21 '13 at 4:37

Its rotation actually is changed. You can see this by changing the Empty's display type from "Plain Axes" to "Arrows" (you can do this from the Properties editor).

  • $\begingroup$ The rotation is not changed, but the scale is now x = -1, y = 1, z = -1. (Why was the z-axis mirrored too ?) The arrows show that some mirroring took place, but it's definitely not what I would expect. It seems that the mirror only negatively scales some of the local axis. If it's not a bug, then it is counter-intuitive, and I'm still looking for a way to actually achieve global mirroring. $\endgroup$ – Adrien Dec 16 '13 at 15:46
  • $\begingroup$ @Adrien I'm not sure what you want (to me it looks like it's been mirrored on the X axis..) You can get a lot of different behaviors from this tool based on the origin, pivot, and transform orientation tools. Could you post an image of how you want it to be mirrored (just by roughly placing it)? $\endgroup$ – gandalf3 Dec 16 '13 at 19:28
  • $\begingroup$ @gandalf3 I've added a third picture to explain what I expect from mirroring on the X axis, centred on the 3D cursor. $\endgroup$ – Adrien Dec 17 '13 at 7:44

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.