Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'intern/python/modules/beta/Objects.py')
-rw-r--r--intern/python/modules/beta/Objects.py167
1 files changed, 167 insertions, 0 deletions
diff --git a/intern/python/modules/beta/Objects.py b/intern/python/modules/beta/Objects.py
new file mode 100644
index 00000000000..0ae56870fd6
--- /dev/null
+++ b/intern/python/modules/beta/Objects.py
@@ -0,0 +1,167 @@
+from Blender import Scene
+import Blender.NMesh as _NMesh
+import Blender.Material as Material
+
+
+defaultUV = [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 1.0)]
+
+FACEFLAGS = _NMesh.Const
+DEFAULTFLAGS = FACEFLAGS.LIGHT + FACEFLAGS.DYNAMIC
+
+curface = None
+tessfaces = None
+
+def error():
+ pass
+def beginPolygon():
+ global curface
+ global tessfaces
+ curface = _NMesh.Face()
+def endPolygon():
+ global curface
+ global tessfaces
+ tessfaces.append(curface)
+def addVertex(v):
+ global curface
+ curface.v.append(v)
+ curface.uv.append((v.uvco[0], v.uvco[1]))
+
+class Face:
+ def __init__(self, vlist):
+ self.v= vlist
+ self.uv = []
+ self.mode = 0
+
+class shadow:
+ def __setattr__(self, name, val):
+ setattr(self.data, name, val)
+ def __getattr__(self, name):
+ return getattr(self.data, name)
+ def __repr__(self):
+ return repr(self.data)
+
+##########################################
+# replacement xMesh (NMesh shadow class)
+
+class shadowNVert: #shadow NMVert class for the tesselator
+ def __init__(self):
+ self.vert = None
+ self.uv = []
+ def __len__(self):
+ return 3
+ def __getitem__(self, i):
+ return self.vert.co[i]
+
+def Color(r, g, b, a = 1.0):
+ return _NMesh.Col(255 * r, 255 * g, 255 * b, 255 * a)
+
+class shadowNMesh:
+ def __init__(self, name = None, default_flags = None):
+ self.scene = Scene.getCurrent()
+ self.data = _NMesh.GetRaw()
+ self.name = name
+ if default_flags:
+ flags = default_flags
+ else:
+ flags = DEFAULTFLAGS
+ self.flags = flags
+ self.smooth = 0
+ self.faces = []
+ try:
+ import tess
+ self.tess = tess.Tess(256, beginPolygon, endPolygon, error, addVertex)
+ except:
+ #print "couldn't import tesselator"
+ self.tess = None
+ self.curface = None
+ self.tessfaces = []
+ self.recalc_normals = 1
+
+ def __del__(self):
+ del self.data
+
+ def __getattr__(self, name):
+ if name == 'vertices':
+ return self.data.verts
+ else:
+ return getattr(self.data, name)
+
+ def __repr__(self):
+ return "Mesh: %d faces, %d vertices" % (len(self.faces), len(self.verts))
+ def toNMFaces(self, ngon):
+ # This should be a Publisher only feature...once the tesselation
+ # is improved. The GLU tesselator of Mesa < 4.0 is crappy...
+ if not self.tess:
+ return [] # no faces converted
+ import tess
+ i = 0
+ global tessfaces
+ tessfaces = []
+ tess.beginPolygon(self.tess)
+ for v in ngon.v:
+ if len(ngon.uv) == len(ngon.v):
+ v.uvco = ngon.uv[i]
+ tess.vertex(self.tess, (v.co[0], v.co[1], v.co[2]), v)
+ i += 1
+ tess.endPolygon(self.tess)
+ return tessfaces
+
+ def hasFaceUV(self, true):
+ self.data.hasFaceUV(true)
+
+ def addVert(self, v):
+ vert = _NMesh.Vert(v[0], v[1], v[2])
+ self.data.verts.append(vert)
+ return vert
+
+ def addFace(self, vlist, flags = None, makedefaultUV = 0):
+ n = len(vlist)
+ if n > 4:
+ face = Face(vlist)
+ else:
+ face = _NMesh.Face()
+ for v in vlist:
+ face.v.append(v)
+ if makedefaultUV:
+ face.uv = defaultUV[:n]
+ self.faces.append(face)
+ # turn on default flags:
+ if not flags:
+ face.mode = self.flags
+ else:
+ face.mode = flags
+ return face
+
+ def write(self):
+ from Blender import Object
+ # new API style:
+ self.update()
+ ob = Object.New(Object.Types.MESH) # create object
+ ob.link(self.data) # link mesh data to it
+ self.scene.link(ob)
+ return ob
+
+ def update(self):
+ from Blender.Types import NMFaceType
+ smooth = self.smooth
+ for f in self.faces:
+ if type(f) == NMFaceType:
+ f.smooth = smooth
+ self.data.faces.append(f)
+ f.materialIndex = 0
+ else: #it's a NGON (shadow face)
+ faces = self.toNMFaces(f)
+ for nf in faces:
+ nf.smooth = smooth
+ nf.materialIndex = 0
+ self.data.faces.append(nf)
+
+ if not self.name:
+ self.name = "Mesh"
+
+ def assignMaterial(self, material):
+ self.data.materials = [material._object]
+
+Mesh = shadowNMesh
+Vert = shadowNVert
+