Пример #1
0
    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
Пример #2
0
    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
Пример #3
0
    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
Пример #4
0
 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 = []
Пример #5
0
    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)
Пример #6
0
    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)
Пример #7
0
    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