def make_mesh(self, parent_node, obj): egg_group = None # merged nodes if self.can_merge(obj): collection = get_object_collection(obj) for child in parent_node.get_children(): if (isinstance(child, EggGroup) and child.get_name() == collection.name): egg_group = child break else: egg_group = EggGroup(collection.name) self._setup_node(egg_group, obj, can_merge=True) parent_node.add_child(egg_group) self.make_geom(egg_group, obj, can_merge=True) # separate nodes if not self.can_merge(obj) or self._keep: egg_group = EggGroup(obj.name) self._setup_node(egg_group, obj, can_merge=False) parent_node.add_child(egg_group) self.make_geom(egg_group, obj, can_merge=False) return egg_group
def make_armature(self, parent_node, armature): egg_group = EggGroup(armature.name) egg_group.set_dart_type(EggGroup.DT_structured) egg_joints = {} for bone_name, bone in armature.data.bones.items(): bone_matrix = get_bone_matrix(bone, armature) egg_transform = EggTransform() egg_transform.add_matrix4(matrix_to_panda(bone_matrix)) egg_joint = EggGroup(bone_name) egg_joint.set_group_type(EggGroup.GT_joint) egg_joint.add_matrix4(matrix_to_panda(bone_matrix)) egg_joint.set_default_pose(egg_transform) if bone.parent: egg_joints[bone.parent.name].add_child(egg_joint) else: # root bone egg_group.add_child(egg_joint) egg_joints[bone_name] = egg_joint self._setup_node(egg_group, armature) parent_node.add_child(egg_group) return egg_group
def make_empty(self, parent_node, obj): egg_group = EggGroup(obj.name) self._setup_node(egg_group, obj) parent_node.add_child(egg_group) return egg_group
def __init__(self): self.data = EggData() self.vtxPool = EggVertexPool('mopath') self.data.addChild(self.vtxPool) self.eggGroup = EggGroup('group') self.data.addChild(self.eggGroup) self.myverts = []
def __polylinestoegg(self, egg, objname, groupname): selectedlines = self.__linesby(objname, groupname) if len(selectedlines) == 0: return eobj = EggGroup(objname) egg.addChild(eobj) egrp = EggGroup(groupname) eobj.addChild(egrp) evpool = EggVertexPool(groupname) egrp.addChild(evpool) for line in selectedlines: (vlist, mdata) = line (wobj, wgrp, wmat) = mdata eline = EggLine() egrp.addChild(eline) self.__eggifymats(eline, wmat) self.__eggifyverts(eline, evpool, vlist)
def __facestoegg(self, egg, objname, groupname): selectedfaces = self.__facesby(objname, groupname) if len(selectedfaces) == 0: return eobj = EggGroup(objname) egg.addChild(eobj) egrp = EggGroup(groupname) eobj.addChild(egrp) evpool = EggVertexPool(groupname) egrp.addChild(evpool) for face in selectedfaces: (vlist, mdata) = face (wobj, wgrp, wmat) = mdata epoly = EggPolygon() egrp.addChild(epoly) self.__eggifymats(epoly, wmat) self.__eggifyverts(epoly, evpool, vlist)
def make_light(self, parent_node, obj): LIGHT_TYPES = { 'POINT': 'PointLight', 'SPOT': 'SpotLight', } egg_group = EggGroup(obj.name) egg_group.set_tag('type', 'Light') egg_group.set_tag('light', LIGHT_TYPES[obj.data.type]) egg_group.set_tag('color', json.dumps(tuple(obj.data.color))) egg_group.set_tag('scale', json.dumps(tuple(obj.scale))) egg_group.set_tag('energy', '{:.3f}'.format(obj.data.energy)) egg_group.set_tag('far', '{:.3f}'.format(obj.data.shadow_soft_size)) if obj.data.type == 'SPOT': egg_group.set_tag( 'fov', '{:.3f}'.format(math.degrees(obj.data.spot_size))) self._setup_node(egg_group, obj) parent_node.add_child(egg_group) return egg_group