1
$\begingroup$

How can I move/transform a whole collection of objects, including invisible objects? I have invisible objects to facilitate boolean modifiers.

The popular advice to move a collection is to select all objects and then transform. However, this doesn't select invisible objects. Another suggestion is to select all objects in the collection using SHIFT. However, I have nested collections with some levels of child collections, and it would be cumbersome to expand everything.

Is there a better way of grouping objects together, in order to use them as one in the scene?

$\endgroup$
4
  • 1
    $\begingroup$ Use a collection instance? $\endgroup$
    – lemon
    Commented Sep 13, 2020 at 18:09
  • 2
    $\begingroup$ Hey :). Yeah, the fact that hidden objects cannot be selected is a bit frustrating... $\endgroup$ Commented Sep 13, 2020 at 19:03
  • $\begingroup$ Ah yeah collection instances seem to be the way to go! Then, I'd usually hide the original collection and place them somewhere far away in the scene? Or what would you recommend where to place the collection items themselves? $\endgroup$
    – Janos
    Commented Sep 14, 2020 at 18:20
  • $\begingroup$ Well, collection instances solves a whole spectrum of things - but it doesn't really solve the "hidden objects" problem. Objects invisible in the collection are still visible in the collection instance! I found visibility settings under the object properties -> Visibility. If I deselect "Viewports", the object will be invisible everywhere. But that's quite cumbersome if I want to edit a hidden object anyway. Blender 2.9 by the way. $\endgroup$
    – Janos
    Commented Sep 14, 2020 at 18:43

1 Answer 1

0
$\begingroup$

One way to overcome such a thing is this;

bpy.data.collections['target_coll'].objects.link(bpy.data.objects['issued_obj'])
bpy.data.collections['source_coll'].objects.unlink(bpy.data.objects['issued_obj'])

Object needs to be link to new than unlink from old but this is applicable if the source and target collections are known and to get this info;

source_coll = bpy.data.objects['issued_obj'].users_collection[0]

Additionally, if one want to use built in "Scene Collection" as source or target;

bpy.data.scenes['Scene'].collection.objects.link('issued_obj')
bpy.data.scenes['Scene'].collection.objects.unlink('issued_obj')

working on 3.6

$\endgroup$

You must log in to answer this question.

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