Page MenuHome

Copy Attributes copy visual transformation (e.g. location/rotation) problem with Child Of constraint
Open, Needs Triage by DeveloperPublic


System Information
Operating system: Windows-10-10.0.17763 64 Bits
Graphics card: GeForce GTX 1080/PCIe/SSE2 NVIDIA Corporation 4.5.0 NVIDIA 419.67

Blender Version
Broken: version: 2.80 (sub 74), branch: blender2.7, commit date: 2019-06-06 00:27, hash: rB8b2b79c2108b

Short description of error
Exact same problem as T53361. Creating a new bug report per suggestion, but may want to follow the discussion on the task.

Original writeup:
I'm trying to use the "Copy Visual Location" and "Copy Visual Rotation" functions from the Copy Attributes addon to get around a problem in rigging a character.
(BlenderArtists post:

Normally, copying visual transformation works perfectly fine. But when the bone having the visual transformation applied to has a Child Of constraint, the result is always offset. Demo:

Example file attached.

Exact steps for others to reproduce the error
To see the problem, you can download the .blend file and copy the steps as in the animated .gif. Here're written steps if needed:

  1. Enable the "Copy Attributes" addon.
  2. Create a bone (Bone A, let's say) with a Child Of constraint to another bone (Bone B).
  3. Move Bone B.
  4. Create another bone (Bone C).
  5. Select Bone A (The one with the Child Of constraint), then shift select Bone C.
  6. Press [Ctrl]+[c] to bring up the Copy Attributes menu.
  7. Select a visual transformation (e.g. "Copy Visual Location")

You'll see that it doesn't do the expected behavior (snapping Bone A to exact location of Bone C), but is offset due to the Child Of constraint.



Event Timeline

The behavior of "Copy visual location of Bone Middle to exact location of Bone Left", is working wrong due to the Constraint affecting bone Middle to copy bone Left (Loc,Rot,Scale).

What the Copy Attributes Add-on needs to take into account before doing the "Copy Visual Location" operation is to first check the constraint and how much it moves the bone and then counter that movement before placing it to it's new location.

Alternatively maybe it should just find movement vector between 2 visual locations in space and move exactly along that vector through space which is what humans do in this situation anyway, it just takes time.