def findMatName(self): if len(self.uvLayerNames) == 0: return # # search for matching Irrlicht material name # for lname in self.uvLayerNames: if iMaterials.getIrrMaterial(lname) != None: self.uvMatName = lname return # # if not found look for custom name: '$' prefix # for lname in self.uvLayerNames: if lname[0] == '$': self.uvMatName = lname return
def writeBillboardNodeData(self,file,bObject,bbImage,level): if bObject.getType() != 'Mesh': return bMaterial = None mesh = bObject.getData(False, True) if len(mesh.materials) > 0: bMaterial = mesh.materials[0] material = iMaterials.DefaultMaterial(bObject,'billboard', self.exporter,bMaterial) i1 = iUtils.getIndent(level,3) i2 = iUtils.getIndent(level,6) localSpace = bObject.getMatrix('localspace') ipos = iUtils.b2iPosition(localSpace, bObject) spos = '%.6f, %.6f, %.6f' % (ipos.x, ipos.y, ipos.z) srot = '%.6f, %.6f, %.6f' % (0.0, 0.0, 0.0) sscale = '%.6f, %.6f, %.6f' % (1.0, 1.0, 1.0) self.writeSTDAttributes(file,i1,i2,bObject,spos,srot,sscale,'false') # billboard quad vertex positions: ul:3, ur:0, lr:1, ll:2 ul = mesh.verts[3].co ur = mesh.verts[0].co lr = mesh.verts[1].co scale = bObject.getSize() dx = (ul.x - ur.x) * scale[0] dy = (ul.y - ur.y) * scale[1] dz = (ul.z - ur.z) * scale[2] width = math.fabs(math.sqrt((dx * dx) + (dy * dy) + (dz * dz))) dx = (ur.x - lr.x) * scale[0] dy = (ur.y - lr.y) * scale[1] dz = (ur.z - lr.z) * scale[2] height = math.fabs(math.sqrt((dx * dx) + (dy * dy) + (dz * dz))) file.write(i2 + '<int name="Width" value="%.6f" />\n' % width) file.write(i2 + '<int name="Height" value="%.6f" />\n' % height) file.write(i2 + '<color name="Shade_Top" value="ffffffff" />\n') file.write(i2 + '<color name="Shade_Down" value="ffffffff" />\n') file.write(i1 + '</attributes>\n') file.write(i1 + '<materials>\n') # extract material type based on irrb UV layer rules bMesh = bObject.getData(False,True) uvLayerNames = bMesh.getUVLayerNames() irrMatInfo = None for name in uvLayerNames: irrMatInfo = iMaterials.getIrrMaterial(name) if irrMatInfo != None: break if irrMatInfo == None: irrMatInfo = ('solid',1) self._writeSBImageAttributes(file, i2, material, irrMatInfo[0], bbImage, bObject) file.write(i1 + '</materials>\n')