Mirroring objects ignores orientation?

I am modelling some character in Blender 2.79a and finished the claws (4 indivdual objects with different local orientation) on one foot. Now I want to duplicate and mirror them to the other foot, mirroring them in the global X axis (or the y-z-plane). After some attempts I found out how to mirror them around the 3D cursor located at the scene origin so that the positions are mirrored to the other side. But as you can see on the screenshot, they are still oriented in the same direction.
Is there a quick way to just mirror multiple objects with the orientation being adjusted properly?


Blendfile: http://pasteall.org/blend/index.php?id=49067

To reproduce do the following:

  • open the file “Klaatu_Body_Model_BA.blend”
  • center the 3D cursor to the world origin with SHIFT+C
  • set the “Pivot Point” type to “3D cursor”
  • set the “Transform Orientation” to “Global”
  • Select all 4 FootClaws
  • Press SHIFT+D and then RMB to cancel
  • From the menu choose “Object -> Mirror -> X Global”

Update 3/3/18:
Now I learned, that I have to apply Rotation and Scale to make that work properly.
But if I try that, I get the following error message:



The reason for that is, that the claws are linked objects, copied with ALT+D instead of SHIFT+D, because I would like them to share the same mesh datablock. maybe I am still not understanding Blender’s datablock system here, but I would assume that even with shared mesh datablocks, the rot/scale of the object datablock should still be independant.
However, just let’s make the object and mesh datablocks local again, but that doesn’t seem to work aswell…

Please try the following:

  • In the “Klaatu_Body_Model_BA.blend” scene select any of the “FootClawLx”
  • Press L, select “Selected Objects and Data” to make the linked object local.
  • with the same object still selected, press SHIFT+L -> “Object and Data”
    The result is, that the other claws get still selected. Also, if you switch to edit mode and edit the mesh, the other claws are still affected, therefore still sharing the same mesh datablock.
    However, it works the other way around, making normal copies first, doing all the apply-mirror stuff and then linking the datablocks with CTRL+L -> “Object Data”.

So, thanks to all of you who replied to this thread, I now understand how to use the mirror feature, if using it the way it is supposed to work.
The only thing that still bothers me is the fact that I loose the local orientation of the claws which makes it more difficult to change their orientation later, if needed.

Use the mirror modifier.

Apply scale and rotation using ctrl+A
Join all the claws using ctrl+J
Snap the cursor to center
Set the claws origin to 3d cursor.
Add mirror modifier.

To make the claws saperate object again:
Apply the mirror
Go to edit mode
Select a claw and press ‘P’
Then select selection.
Do this for all.

If I’m mirroring geometry where I don’t want to use a modifier or Symmetry, I tend to put the 3D cursor where I want it, duplicate the geometry, with pivot point set to the 3D cursor, scale in the relevant axis by -1 then CTRL+N to ensure the normals are correct. Takes longer to type that than to do it. :wink:

Thanx for the tips guys, but those are workarounds. I hoped it would be just me using this feature (CTRL+M) the wrong way, but it seems that I should write a bug report.

If the rotation and scale isn’t applied then you are using it wrong way…

I agree with GrimZA it is almost always a good idea to apply scale and rotation once you have created the object. Helps with more than just mirroring. It isn’t a big deal or a bug. Just select each toenail then ctrl+a > scale and rotation and repeat for the others then try selecting all the toenails shift+d then ctrl+m x axis all the duplicated nails should now be mirrored correctly just need moved into position.

If using the mirror modifier then just select the main mesh as the object in the mirror modifier properties.



A bug report? You haven’t even posted a support thread properly yet.

You’ve cropped the screenshot so it doesn’t give any information of your blender version or how your objects are set up, or any additional information to your text description. You haven’t posted an example .blend so people can’t test it on their systems, find out if the cause is in your setup or if blender is doing something wrong, and you’re not helping them writing a reply by taking screenshots of their findings.

All of that is written in bug reporting instructions: version(s), test on multiple systems, how to repeat based on an example file. The same apply when you ask questions involving a .blend. Tutorial linked in my signature shows how to prepare a post and the file.

@bb3d

Im sorry, but thoses, are not workaround, but basic of modeling, if you dont apply scale, rotation to the object, or have a wrong origin for the object, modifiers and tools will not work properly. it is like using wrong normals…

@Flyingbanana:
Thanx, that seems to be the best workflow for this!

@JA12:
I am such a noob, sorry. Just updated my original post with the .blend and additional info.

@Lane:
Well, I am a long-time Softimage user, now slowly migrating to Blender and I still have to learn how to do things the “Blender way” instead of trying to do it like in Softimage, because in Soft, that copy/mirror thing is done with just one function and 3 mouseclicks, no matter what the scale/orientation of the objects is. And this is how a basic modeling feature like this should work in my opinion, because sometimes I need to keep the local orientation. For example, how should I move the claws along their local Z axis or rotate them around their local X axis to make them point more upwards or downwards after applying the rotation?

Mirror operator doesn’t affect rotations but object scale. It’s the same as scaling along an axis by -1. Since the scaling is done along a common pivot point (3d cursor), it also changes the object location.


The shown transforms are local, flipping the scale of an object doesn’t change its appearance because object transforms do not affect the object data, which is the mesh in this case. That is the biggest problem with mirroring objects like that, because the geometry you’re looking at is not the same that tools and modifiers see, they operate on object data level.

Or in other words, negative object scale makes the geometry go inside out but you don’t see it until there’s a problem with a tool, modifier, exporting, or you apply object scale which transfers the scale to object data and then resets it. Another example http://pasteall.org/pic/show.php?id=72366


Parenting the objects and scaling the parent would put the objects visually in the correct position and orientation but it doesn’t solve the problem. The objects are scaled through a parent. Could remove the parenting, make the object and object data unique, apply scale, flip the normals on one and have others share the object data with that. The rotations are still wrong if they were to share the same object data with the ones on the other side. They were scaled, not rotated.


What is peculiar in this case is the object scale when scaled along a point and global axis. When the object is not aligned with the global axis like 3 of them aren’t, scaling flips one or two axes depending on how far they’re scaled. The corner object gets a negative Z scale instead of negative X like the others. Scaling it further than that, it would get negative scale on both X and Z. Can’t get my head around why it does that. Clearing the scale and then flipping the X would be consistent with the others.


What one could do is use manipulate center points only, scale along X which only moves the objects. Then flip the Z rotations

Or do the same with instances with procedural duplication if there’s a lot of geometry and need to save memory


Making those objects real would make unique objects that again share object data.

Mirror modifier and symmetry tools are usually enough.

@JA12:
Wow, thanx for the effort and the explanation you put into your reply, really appreciate it!

I think, the second method with an Empty as parent and then applying the negative scaling is the way to go for me in this case, because it results in the local orientation to be like I want to have it.

However, it involves many work steps for a simple thing that I am used to do in Softimage with just one operation and a few mouseclicks, so I still hope this will be fixed/improved in the future, or I have to learn Python to write a script that automates the process.