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!
Duplicar objetos y desvincular malla (BGE Python)
Re: Duplicar objetos y desvincular malla (BGE Python)
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
sin ver el código que tienes es lo mas que puedo ayudar
saludos
Diego
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
saludos
Diego
Re: Duplicar objetos y desvincular malla (BGE Python)
Primero, gracias por la respuesta.
Cierto que falta información por mi parte ) 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!
Cierto que falta información por mi parte ) 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)
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
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