26
$\begingroup$

Is it possible to array a group of objects?

For example, if I have three objects in a group, (I want to keep them as separate objects) is it possible to easily duplicate them as if I pressed AltD for every single one?

$\endgroup$
2
  • $\begingroup$ What's wrong with using Alt+D? Also a possible duplicate of Array modifier to create individually manipulatable objects? $\endgroup$
    – Aldrik
    Commented Aug 24, 2013 at 9:56
  • 3
    $\begingroup$ @Aldrik I don't want to create individual objects, I want to array multiple objects. (multiple objects in, multiple objects out.) and Alt+D is just too tedious for large amounts objects. :/ $\endgroup$
    – gandalf3
    Commented Aug 24, 2013 at 22:46

3 Answers 3

19
$\begingroup$

This answer was inspired by this answer here

here is a solution that actually allows use to use the array modifier to duplicate grouped objects. It does, however, require one extra mesh.

We begin with our grouped object:

enter image description here

Then add a plane. Go into the object properties for that plane, and enter the instancing tab (called duplication in 2.7). Select faces.

enter image description here

Finally, select your group object then your plane, and hit Ctrl-P to parent them, selecting Object.

enter image description here

Now, finally, if you add an array modifier to your plane, the group object will be duplicated:

enter image description here

Demo file to see final result:

$\endgroup$
7
  • $\begingroup$ good method but after setting the count to some number and if we want to delete or hide the plane the hole array disappears. How to delete the plane that is unwanted. I donot want to apply the array modifier and just want to delete the plane which we have insert. Is it possible.. $\endgroup$
    – atek
    Commented Nov 23, 2016 at 14:43
  • $\begingroup$ @atek during my tests the planes did not show up in renders - but yes, there is no way to hid them. $\endgroup$ Commented Nov 23, 2016 at 15:46
  • $\begingroup$ weird things happen when I resized and rotated the instancer ( "Duplication" changed to "instancing" in 2.8, instancer is able to be hide now ) before parenting objects to it. All object messed up in different locations. $\endgroup$
    – Albert
    Commented Nov 6, 2019 at 8:13
  • $\begingroup$ @Albert I tried rotating and scaling the instancer, everything seemed to behave normally. Could you describe more clearly what went wrong? $\endgroup$ Commented Nov 6, 2019 at 16:43
  • $\begingroup$ @GiantCowFilms I created multiple objects 'A1,A2,A3' and then edit each of it ( G/R/S, extrude, etc. ). Parent all of it to the active selected 'B', then parent 'B' to an instancer. Each duplications of 'A1,A2,A3' rotates in random axis. I'm not sure which step cause this problem, probably ctrl a is needed on 'A1,A2,A3' before parenting. $\endgroup$
    – Albert
    Commented Nov 12, 2019 at 4:48
12
$\begingroup$
  1. Select all the objects you want to multiply.
  2. Make linked duplicates with Alt-D and place them at the proper distance.
  3. Repeat your last step with Shift-R as often as you like.

Another way for more flexible needs:

  1. Select your objects.
  2. Give them a keyframe with I > location.
  3. If you want a row of ten objects, go nine frames forward and move your selection to the end of your substitute array. Set another keyframe
  4. Enable Dupliframes for each of your objects in the Object Properties, Duplication panel. Adjust start and end accordingly or you'll get a hundred copies.
  5. Use the Graph Editor to set the interpolation to linear with T,2 if you need even distribution of your objects.
  6. Make the Duplis real with CtrlShift + A

This process makes it possible to move, scale and rotate your objects freely.

$\endgroup$
1
  • $\begingroup$ Wow, I never new about Shift+R.. Here I was pressing F3 constantly.. great shortcut :) $\endgroup$
    – gandalf3
    Commented Aug 24, 2013 at 22:58
10
$\begingroup$

One way to do that is to execute Shift-A / Add > Group Instance > [group name] to instance the group as a single object. Though it's basically an Empty, so we can't put an Array modifier on it, we can still Alt-D on the instance to create linked-duplicates.

Edit: For a more automated tool, we do need some basic scripting. I've written a short operator to do just that. Here's the key part:

for count in count_product:
    loc = center + Vector([count[0] * self.offset[0],
                           count[1] * self.offset[1],
                           count[2] * self.offset[2]])

    dup_obj = bpy.data.objects.new(group.name + '_array.000', None)
    dup_obj.location = loc
    dup_obj.dupli_type = 'GROUP'
    dup_obj.dupli_group = group
    context.scene.objects.link(dup_obj)

It just creates an array of group instances along three axis:

group_array

$\endgroup$
3
  • $\begingroup$ Thanks, though it's more or less the same as selecting the group and duplicating that way.. Maybe some basic python to quickly place 30 or so along an axis? $\endgroup$
    – gandalf3
    Commented Aug 24, 2013 at 0:43
  • 1
    $\begingroup$ You could use dupliverts: Define your group, create an instance of that group, make that instance a child of some mesh (say, a mesh that consists of an edge with 30 subdivisions), then enable dupliverts on the parent mesh. $\endgroup$
    – Fweeb
    Commented Aug 24, 2013 at 4:33
  • $\begingroup$ @gandalf3: Edited my answer. I wrote a sample operator, sort of like Array modifier, but for Group instances. Can't upload a screenshot at the moment... $\endgroup$
    – Adhi
    Commented Aug 24, 2013 at 13:07

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .