0.1 20080128:\r
0.2 20100518: refactoring.\r
0.3 20100606: integrate 2.4 and 2.5.\r
+0.4 20100626: refactoring.\r
"""\r
\r
-\r
-###############################################################################\r
-# import\r
-###############################################################################\r
import os\r
import sys\r
\r
# wrapper\r
import bl24 as bl\r
\r
+ def materialToMqo(m):\r
+ return "\"%s\" shader(3) col(%f %f %f %f)" % (\r
+ m.name, m.rgbCol[0], m.rgbCol[1], m.rgbCol[2], m.alpha)\r
+\r
else:\r
# for 2.5\r
import bpy\r
# wrapper\r
import bl25 as bl\r
\r
+ def materialToMqo(m):\r
+ return "\"%s\" shader(3) col(%f %f %f %f)" % (\r
+ m.name, \r
+ m.diffuse_color[0], m.diffuse_color[1], m.diffuse_color[2], \r
+ m.alpha)\r
+\r
def apply_transform(vec, matrix):\r
x, y, z = vec\r
xloc, yloc, zloc = matrix[3][0], matrix[3][1], matrix[3][2]\r
self.objects=[]\r
self.materials=[]\r
self.scale=scale\r
- print('scaling', self.scale)\r
\r
def setup(self, scene):\r
# 木構造を構築する\r
self.materials.append(material)\r
return index\r
\r
- def write(self, path, scene):\r
+ def write(self, path):\r
io=bl.Writer(path, 'cp932')\r
self.__write_header(io)\r
self.__write_scene(io)\r
self.__write_materials(io, os.path.dirname(path))\r
print("Writing ObjectChunk")\r
for info in self.objects:\r
- self.__write_object(io, info, scene)\r
+ self.__write_object(io, info)\r
io.write("Eof\r\n")\r
io.flush()\r
io.close()\r
# each material \r
io.write("Material %d {\r\n" % (len(self.materials)))\r
for m in self.materials:\r
- tex, aplane=bl.getTexture(m, dirname)\r
+ tex, aplane=bl.material.getTexturePath(m, dirname)\r
if len(tex):\r
# textureがある場合は下地を白に\r
io.write("\"%s\" shader(3) col(1 1 1 1)" % m.name)\r
else:\r
# 無い場合はそのまま\r
- io.write(bl.materialToMqo(m))\r
+ io.write(materialToMqo(m))\r
io.write(tex)\r
io.write(aplane)\r
io.write("\r\n") \r
# end of chunk\r
io.write("}\r\n") \r
\r
- def __write_object(self, io, info, scene):\r
+ def __write_object(self, io, info):\r
print(info)\r
\r
obj=info.object\r
# depth\r
io.write("\tdepth %d\r\n" % info.depth)\r
\r
- # mirroring \r
- isMirrorring=False\r
- for mod in obj.modifiers:\r
- if mod.name.upper()=="MIRROR":\r
- isMirrorring=True\r
- break\r
- if isMirrorring:\r
+ if bl.modifier.hasType(obj, 'MIRROR'):\r
io.write("\tmirror 1\r\n")\r
io.write("\tmirror_axis 1\r\n")\r
\r
if obj.type.upper()=='MESH':\r
# duplicate and applyMatrix\r
- mesh, dumy=bl.objectDuplicate(scene, obj)\r
+ mesh, dumy=bl.object.duplicate(obj)\r
\r
# vertices\r
io.write("\tvertex %d {\r\n" % len(mesh.verts))\r
# faces\r
io.write("\tface %d {\r\n" % len(mesh.faces))\r
for i, face in enumerate(mesh.faces):\r
- count=bl.faceVertexCount(face)\r
+ count=bl.face.getVertexCount(face)\r
# V\r
io.write("\t\t%d V(" % count)\r
- face_list=[]\r
- for j in bl.faceVertices(face):\r
- face_list.insert(0, j)\r
- # flip face\r
- for j in face_list:\r
+ for j in reversed(bl.face.getVertices(face)):\r
io.write("%d " % j)\r
io.write(")")\r
# mat\r
if len(mesh.materials):\r
io.write(" M(%d)" % \r
- info.material_map[bl.faceMaterialIndex(face)])\r
+ info.material_map[bl.face.getMaterialIndex(face)])\r
# UV\r
- if bl.meshHasUV(mesh) and bl.faceHasUV(mesh, i, face):\r
+ if bl.mesh.hasUV(mesh) and bl.mesh.hasFaceUV(mesh, i, face):\r
io.write(" UV(")\r
- uv_list=[]\r
- for uv in bl.faceGetUV(mesh, i, face, count):\r
+ for uv in reversed(bl.mesh.getFaceUV(mesh, i, face, count)):\r
# reverse vertical value\r
- uv_list.insert(0, uv)\r
- # flip face\r
- for uv in uv_list:\r
io.write("%f %f " % (uv[0], 1.0-uv[1])) \r
io.write(")")\r
io.write("\r\n")\r
io.write("\t}\r\n") # end of faces\r
\r
# 削除する\r
- scene.objects.unlink(dumy)\r
+ bl.object.delete(dumy)\r
\r
io.write("}\r\n") # end of object\r
\r
\r
def __execute(filename, scene, scale=10):\r
+ if not scene.objects.active:\r
+ bl.message('no active object !')\r
+ return\r
+\r
exporter=MqoExporter(scale)\r
exporter.setup(scene)\r
- exporter.write(filename, scene)\r
+ exporter.write(filename)\r
\r
\r
if isBlender24():\r
# for 2.4\r
def execute_24(filename):\r
- """\r
- export mqo.\r
- """\r
- filename=filename.decode(bl.INTERNAL_ENCODING)\r
- print("mqo exporter: %s" % filename)\r
-\r
- Blender.Window.WaitCursor(1) \r
- t = Blender.sys.time() \r
-\r
- __execute(filename, Blender.Scene.GetCurrent())\r
-\r
- print('finished in %.2f seconds' % (Blender.sys.time()-t) )\r
- Blender.Redraw()\r
- Blender.Window.WaitCursor(0) \r
+ scene=Blender.Scene.GetCurrent()\r
+ bl.initialize('mqo_export', scene)\r
+ __execute(\r
+ filename.decode(bl.INTERNAL_ENCODING), \r
+ scene)\r
+ bl.finalize()\r
\r
# execute\r
Blender.Window.FileSelector(\r
\r
else:\r
# for 2.5\r
- def execute_25(*args):\r
- __execute(*args)\r
+ def execute_25(path, scene, scale):\r
+ bl.initialize('mqo_export', scene)\r
+ __execute(path, scene, scale)\r
+ bl.finalize()\r
\r
# operator\r
class EXPORT_OT_mqo(bpy.types.Operator):\r
name="Scale", \r
description="Scale the MQO by this value", \r
min=0.0001, max=1000000.0, \r
- soft_min=0.001, soft_max=100.0, default=100.0)\r
+ soft_min=0.001, soft_max=100.0, default=10.0)\r
\r
check_existing = BoolProperty(\r
name="Check Existing",\r