24
$\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$
  • $\begingroup$ What's wrong with using Alt+D? Also a possible duplicate of Array modifier to create individually manipulatable objects? $\endgroup$ – Aldrik Aug 24 '13 at 9:56
  • 2
    $\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 Aug 24 '13 at 22:46
16
$\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:

| improve this answer | |
$\endgroup$
  • $\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 Nov 23 '16 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$ – GiantCowFilms Nov 23 '16 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 Nov 6 '19 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$ – GiantCowFilms Nov 6 '19 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 Nov 12 '19 at 4:48
11
$\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.

| improve this answer | |
$\endgroup$
  • $\begingroup$ Wow, I never new about Shift+R.. Here I was pressing F3 constantly.. great shortcut :) $\endgroup$ – gandalf3 Aug 24 '13 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

| improve this answer | |
$\endgroup$
  • $\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 Aug 24 '13 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 Aug 24 '13 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 Aug 24 '13 at 13:07

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.