Página 1 de 1

Duplicar objetos y desvincular malla (BGE Python)

Publicado: Mié Jun 25, 2014 5:41 am
por vyos
Hola,

me gustaría que me ayudarais a saber si es posible resolver el siguiente problema en el que estoy atascado en un proyecto:

- Utilizo la versión Blender 2.59, python 3.2 y BGE
- Para copiar un objeto (con objetos hijos) que está en una capa inactiva utilizo scene.addObject() (También he utilizado el actuador "Add Object" junto con instantAddObject y objectLastCreated pero el resultado es el mismo)
- Hasta aquí todo bien, pero parece que la copia de estos objetos la hace vinculante (tipo ALT+D), de modo que cuando cambio cualquier cosa de uno de los objetos, me lo cambia también en el resto.

Mi pregunta es la siguiente, ¿es posible realizar copias desde python (BGE) que no sean vinculantes como si se utilizara SHIFT+D?

Muchas gracias!

Re: Duplicar objetos y desvincular malla (BGE Python)

Publicado: Mié Jun 25, 2014 7:40 am
por YHOYO0
hola hola

El truco esta en el parametro "linked=" ... si dicho parametro es TRUE pues si se modificara si el primero se modifica... si es FALSE no lo sera

supongo que adaptando el siguiente código a tus necesidades podras sortear el problema sin dificultades

Código: Seleccionar todo

bpy.ops.object.duplicate(linked=False, mode='TRANSLATION')
Duplicate selected objects

Parameters:	
linked (boolean, (optional)) – Linked, Duplicate object but not object data, linking to the original data
mode (enum in [‘INIT’, ‘DUMMY’, ‘TRANSLATION’, ‘ROTATION’, ‘RESIZE’, ‘SKIN_RESIZE’, ‘TOSPHERE’, ‘SHEAR’, ‘BEND’, ‘SHRINKFATTEN’, ‘TILT’, ‘TRACKBALL’, ‘PUSHPULL’, ‘CREASE’, ‘MIRROR’, ‘BONE_SIZE’, ‘BONE_ENVELOPE’, ‘CURVE_SHRINKFATTEN’, ‘MASK_SHRINKFATTEN’, ‘BONE_ROLL’, ‘TIME_TRANSLATE’, ‘TIME_SLIDE’, ‘TIME_SCALE’, ‘TIME_EXTEND’, ‘BAKE_TIME’, ‘BWEIGHT’, ‘ALIGN’, ‘EDGESLIDE’, ‘SEQSLIDE’], (optional)) – Mode
sin ver el código que tienes es lo mas que puedo ayudar :D
saludos

Diego

Re: Duplicar objetos y desvincular malla (BGE Python)

Publicado: Mié Jun 25, 2014 9:18 am
por vyos
Primero, gracias por la respuesta.

Cierto que falta información por mi parte :o) Lo explico un poco por encima:

- Al proceso Blender, en tiempo de ejecución, le llegan mensajes vía socket y el script principal carga una u otra escena. Dependiendo en la que esté, se le pasa al objeto que lleva la lógica de la escena el mensaje con la acción a realizar y otro script realiza dicha acción.

- En el caso que planteo, dicha lógica debe ir cargando en escena el mismo objeto pero con cambios en las texturas en sus objetos hijos:

*************************************
import GameLogic

me = cont.owner
scene = GameLogic.getCurrentScene()

def mostrar_fun(num_objetos,premio):
if (num_objetos > 0):
for i in range(num_objetos):

botin.lista.append(scene.addObject("obj_original",me))

ob = botin.lista[len(botin.lista)-1]
ob["move"] = True

if (premio > 0 and premio < 100):
ob["score"] = premio

Nota: obj_original es un objeto empty
**************************************

Cuando la propiedad del objeto copiado (score) cambia, se ejecuta otro script que toma los objetos hijos de este y cambia sus coordenadas UV. Aquí es cuando todos los objetos hijos de todos los objetos copiados cambian al mismo tiempo.

Con la función scene.addObject() me carga en la escena un nuevo objeto con todos sus objetos hijos también, pero parece que realmente es un objeto que referencia al original (como si fueran punteros apuntando al mismo objeto)

Con la función que me indicas he probado que solo te carga en escena el objeto que indicas pero no sus hijos ( o por lo menos no lo consigo ;o) )

Gracias!

Re: Duplicar objetos y desvincular malla (BGE Python)

Publicado: Mié Jun 25, 2014 9:31 am
por YHOYO0
hola hola....

umm hay opcion que me pases el blend para ver como lo estas haciendo???

asi le pongo mano directamente al blend que tienes a ver si puedo solucionarlo.. si no pues tambien te aviso....

raro que no te vincule los hijos tambien..

sigo pensando tambien.........

saludos

Diego