Python : l'objet copié ne s'affiche pas dans l'Outliner

Aug 22 2020

Lorsque je copie un objet à l'aide bpy.context.active_object.copy()du nouvel objet, il n'apparaît pas dans l' Outliner même s'il apparaît lorsque j'utilise list()des objets dans le shell Python.

Des questions:

  1. Y a-t-il une deuxième étape pour que l'objet s'affiche dans l' Outliner ?
  2. Ou peut-être ne copie-t-il que les données de l'objet ? (Si oui, dans quel but ?)
  3. N'y a-t-il pas de fonctions compagnons, c'est-à-dire : coller () et/ou couper () ? (L'achèvement de la ligne de commande ne donne rien.)

Remarque : bpy.ops.object.duplicate()fait une copie qui s'affiche dans l' Outliner , donc ces questions ne portent pas sur la façon de faire une copie de travail/duplicata. Je veux comprendre le but de copy().

Réponses

5 batFINGER Aug 22 2020 at 20:57

Associez-le à une collection

Avant la version 2.8, un objet copié nécessitait d'être lié à la collection d'objets de la scène. Pour 2.8+, liez-le à une collection.

Il s'affichera dans l'outliner lorsque la collection est liée à une scène ou est la collection de scènes de base.

L'opérateur duplicate lie le dupe à la collection de contexte.

import bpy
from bpy import context


ob = context.object.copy()
context.collection.objects.link(ob)

lier un nouvel objet à la scène avec python en 2.8