Transform a Location "Constrained" Object?

What I’m overall attempting to do here is be able to move an arrayed object with an empty which will always rest at the center of the array of objects. If the count in that object’s array is raised or lowered the empty would adjust to remain in the center of the objects in the updated count.

In the image below I’ve visually annotated how the scene would look with this concept.


^ (The Main CTRL empty would be aligned on the same Z axis as other empty’s I have in the scene, as apposed to what I have annotated here with the Z location for the empty also shown as being centered.)


The image above shows the basic concept. The cube empty would be the main control point, located in the middle (referenced with the large plain axis empty) of the start and end of the theoretical arrayed object, of which both ends are represented by the two arrow empty’s.

To summarize on the key functions of this concept:

  • The main control empty must remain in the center of the two points
  • If the array count changes the empty must adjust to remain centered
  • When moved the empty will also move the theoretical arrayed object

I’ve linked a detailed video below along with a blend file that demonstrates the basic functionality I’m aiming for.

Google Drive - Video Link
Youtube - Video Link

Modular Array Mover.blend (557.6 KB)

For those with potential ideas for a solution to this challenge, I thank you for your efforts in advance.

I’ve created a work around for my problem by removing the main control empty (along with my ability to move everything from a dynamic center) and replace its functionality with a driver that outputs half of the array’s distance.

This will allow me to use that drivers value to offset the start empty manually (though for my use case, I can still semi automate this if the desired location for the center of the array is located in the center of two points which have location values I can reference for use with the start empty).

While this does not achieve the functionality I had laid out, this will do as a passable workaround for now.