/
Node.py
104 lines (78 loc) · 2.21 KB
/
Node.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
from Math import Transform
class Node(object):
USE_LOCAL = True
def __init__(self):
self.transform = Transform()
self.name = None
self.mesh = None
self.children = None
self._parent = None
self.materials = {}
@property
def position(self): return self.transform.position
@position.setter
def position(self, pos):
self.transform.setPosition(pos)
@property
def scale(self):
return self.transform.scale
@scale.setter
def scale(self, scl):
self.transform.setScale(scl)
@property
def rotation(self):
return self.transform.rotation
@rotation.setter
def rotation(self, rot):
self.transform.rotation = rot
@property
def parent(self):
return self._parent
@parent.setter
def parent(self, parent):
if self.USE_LOCAL:
self._parent = parent
self.transform.parent = parent
def rotate(self, *args):
self.transform.rotate(*args)
def addChild(self, node):
if self.children is None: self.children = []
self.children.append(node)
if self.USE_LOCAL: node.parent = self
def removeChild(self, node):
if self.children is None: return
try:
self.children.remove(node)
except ValueError:
print 'Node not child of this node'
def getAllChildren(self, parent=False):
# if parent:
# nodes = [self]
# else:
# nodes = []
nodes = [self] if parent else []
if self.children is not None:
for child in self.children:
nodes += child.getAllChildren(True)
return nodes
def getChildMeshes(self, parent=False):
# if parent and self.mesh is not None:
# meshes = [self.mesh]
# else:
# meshes = []
meshes = [self.mesh] if parent and self.mesh is not None else []
if self.children is not None:
for child in self.children:
meshes += child.getChildMeshes(True)
return meshes
def setMaterial(self, face, material):
if type(face) is int: face = self.mesh.faces[face]
if material not in self.materials: self.materials[material] = set()
for i in range(0, len(self.materials.keys())):
faces = self.materials[i]
if face in faces: faces.remove(face)
self.materials[material].add(face)
def getMaterial(self, face):
if type(face) is int: face = self.mesh.faces[face]
for mat, faces in self.materials.items():
if face in faces: return mat