diff options
-rw-r--r-- | release/scripts/DirectX8Exporter.py | 13 | ||||
-rw-r--r-- | release/scripts/export-iv-0.1.py | 300 |
2 files changed, 309 insertions, 4 deletions
diff --git a/release/scripts/DirectX8Exporter.py b/release/scripts/DirectX8Exporter.py index 0bb436ac86a..227d425820b 100644 --- a/release/scripts/DirectX8Exporter.py +++ b/release/scripts/DirectX8Exporter.py @@ -318,9 +318,14 @@ class xExport: vert_list = mesh.getVertsFromGroup(name,1) le = 0 for indx in vert_list: - ver_infl = v_dict[indx[0]] - len_infl = float(len(ver_infl)) - infl = 1 / len_infl + infl = 0.0 + if len(ver_infl) != 0: + sum = 0.0 + for bone_name, weight in ver_infl: + if bone_name == name: + infl = weight + sum += weight + infl/= sum i = -1 for el in index_list : i += 1 @@ -885,4 +890,4 @@ if arg == 'exportsel': else: fname = Blender.sys.makename(ext = ".x") Blender.Window.FileSelector(my_callback, "Export DirectX", fname) -
\ No newline at end of file + diff --git a/release/scripts/export-iv-0.1.py b/release/scripts/export-iv-0.1.py new file mode 100644 index 00000000000..66fded7755b --- /dev/null +++ b/release/scripts/export-iv-0.1.py @@ -0,0 +1,300 @@ +#!BPY + +""" +Name: 'OpenInventor (.iv)' +Blender: 236 +Group: 'Export' +Tip: 'Export to OpenInventor file format. (.iv)' +""" +__author__ = ("Radek Barton") +__url__ = ["http://blackhex.no-ip.org/"] +__email__ = ["scripts"] +__version__ = "0.1" + + +__bpydoc__ = """\ +This script exports to the Open Inventor format. + +Usage: + +Run this script from "File->Export" menu. + +Note: +""" + +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# ***** END GPL LICENCE BLOCK ***** +# + +import Blender +import os +import math + +def WriteHeader(file): + file.write("#Inventor V2.1 ascii\n\n") + file.write("Separator\n") + file.write("{\n") + file.write(" ShapeHints\n") + file.write(" {\n") + file.write(" vertexOrdering COUNTERCLOCKWISE\n") + file.write(" }\n") + +def WriteFooter(file): + file.write("}\n") + +def WriteMesh(file, object): + file.write(" Separator\n") + file.write(" {\n") + file.write(" # %s\n" % object.getName()) + WriteMatrix(file, object) + mesh = object.getData() + WriteMaterials(file, mesh) + WriteTexture(file, mesh) + WriteNormals(file, mesh) + WriteVertices(file, mesh) + WriteFaces(file, mesh) + file.write(" }\n") + +def WriteMatrix(file, object): + matrix = object.getMatrix() + file.write(" MatrixTransform\n") + file.write(" {\n") + file.write(" matrix\n") + for line in matrix: + file.write(" %s %s %s %s\n" % (line[0], line[1], line[2], line[3])) + file.write(" }\n") + +def WriteColors(file, mesh): + file.write(" vertexProperty VertexProperty\n") + file.write(" {\n") + file.write(" orderedRGBA\n") + file.write(" [\n") + for face in mesh.faces: + for I in range(len(face.v)): + file.write(" 0x%02x%02x%02x%02x,\n" % (face.col[I].r, + face.col[I].g, face.col[I].b, face.col[I].a)) + file.write(" ]\n") + file.write(" materialBinding PER_VERTEX\n") + file.write(" }\n") + +def WriteMaterials(file, mesh): + if mesh.materials: + file.write(" Material\n") + file.write(" {\n") + file.write(" ambientColor\n") + file.write(" [\n") + for mat in mesh.materials: + file.write(" %s %s %s,\n" % (mat.mirCol[0], mat.mirCol[1], + mat.mirCol[2])) + file.write(" ]\n") + file.write(" diffuseColor\n") + file.write(" [\n") + for mat in mesh.materials: + file.write(" %s %s %s,\n" % (mat.rgbCol[0], mat.rgbCol[1], + mat.rgbCol[2])) + file.write(" ]\n") + file.write(" specularColor\n") + file.write(" [\n") + for mat in mesh.materials: + file.write(" %s %s %s,\n" % (mat.specCol[0] * mat.spec / 2.0, + mat.specCol[1] * mat.spec / 2.0, mat.specCol[2] * mat.spec / 2.0)) + file.write(" ]\n") + file.write(" emissiveColor\n") + file.write(" [\n") + for mat in mesh.materials: + file.write(" %s %s %s,\n" % (mat.rgbCol[0] * mat.emit, + mat.rgbCol[1] * mat.emit, mat.rgbCol[0] * mat.emit)) + file.write(" ]\n") + file.write(" shininess\n") + file.write(" [\n") + for mat in mesh.materials: + file.write(" %s,\n" % (mat.hard / 255.0)) + file.write(" ]\n") + file.write(" transparency\n") + file.write(" [\n") + for mat in mesh.materials: + file.write(" %s,\n" % (1.0 - mat.alpha)) + file.write(" ]\n") + file.write(" }\n") + file.write(" MaterialBinding\n") + file.write(" {\n") + file.write(" value PER_FACE_INDEXED\n") + file.write(" }\n") + +def WriteTexture(file, mesh): + texture = mesh.faces[0].image + if texture: + file.write(" Texture2\n") + file.write(" {\n") + file.write(' filename "%s"\n' % texture.getName()) + file.write(" }\n") + file.write(" TextureCoordinate2\n") + file.write(" {\n") + file.write(" point\n") + file.write(" [\n") + if mesh.hasVertexUV(): + for vert in mesh.verts: + file.write(" %s %s,\n" % (vert.uvco[0], vert.uvco[1])) + file.write(" ]\n") + file.write(" }\n") + file.write(" TextureCoordinateBinding\n") + file.write(" {\n") + file.write(" value PER_VERTEX_INDEXED\n") + file.write(" }\n") + elif mesh.hasFaceUV(): + for face in mesh.faces: + for uv in face.uv: + file.write(" %s %s,\n" % (uv[0], uv[1])) + file.write(" ]\n") + file.write(" }\n") + file.write(" TextureCoordinateBinding\n") + file.write(" {\n") + file.write(" value PER_VERTEX\n") + file.write(" }\n") + +def WriteVertices(file, mesh): + file.write(" Coordinate3\n") + file.write(" {\n") + file.write(" point\n") + file.write(" [\n") + for vert in mesh.verts: + file.write(" %s %s %s,\n" % (vert[0], vert[1], vert[2])) + file.write(" ]\n") + file.write(" }\n") + +def WriteNormals(file, mesh): + file.write(" Normal\n") + file.write(" {\n") + file.write(" vector\n") + file.write(" [\n") + + # make copy of vertex normals + normals = [] + for face in mesh.faces: + if len(face.v) in [3, 4]: + if face.smooth: + for v in face.v: + normals.append(v.no) + else: + for v in face.v: + normals.append(face.no) + + # write normals + for no in normals: + file.write(" %s %s %s,\n" % (no[0], no[1], no[2])) + file.write(" ]\n") + file.write(" }\n") + + # write way how normals are binded + file.write(" NormalBinding\n") + file.write(" {\n") + file.write(" value PER_VERTEX\n") + file.write(" }\n") + +def WriteFaces(file, mesh): + file.write(" IndexedFaceSet\n") + file.write(" {\n") + + # write vertex paint + if mesh.hasVertexColours(): + WriteColors(file, mesh) + + # write material indexes + file.write(" materialIndex\n") + file.write(" [\n") + for face in mesh.faces: + file.write(" %s,\n" % (face.mat)); + file.write(" ]\n") + + # write faces with coordinate indexes + file.write(" coordIndex\n") + file.write(" [\n") + for face in mesh.faces: + if len(face.v) == 3: + file.write(" %s, %s, %s, -1,\n" % (face.v[0].index, + face.v[1].index, face.v[2].index)) + elif len(face.v) == 4: + file.write(" %s, %s, %s, %s, -1,\n"% (face.v[0].index, + face.v[1].index, face.v[2].index, face.v[3].index)) + file.write(" ]\n") + file.write(" }\n") + + +def WriteCamera(file, object): + camera = object.getData(); + # perspective camera + if camera.type == 0: + file.write(" PerspectiveCamera\n") + file.write(" {\n") + file.write(" nearDistance %s\n" % (camera.clipStart)) + file.write(" farDistance %s\n" % (camera.clipEnd)) + file.write(" }\n") + # ortho camera + else: + print camera.type + +def WriteLamp(file, object): + lamp = object.getData(); + # spot lamp + if lamp.type == 2: + file.write(" SpotLight\n") + file.write(" {\n") + file.write(" intensity %s\n" % (lamp.energy / 10.0)) + file.write(" color %s %s %s\n" % (lamp.col[0], lamp.col[1], + lamp.col[2])) + #file.write(" location %s\n" % ()) + #file.write(" direction %s\n" % ()) + file.write(" dropOffRate %s\n" % (lamp.spotBlend)) + file.write(" cutOffAngle %s\n" % (lamp.spotSize * math.pi / 180.0)) + file.write(" }\n") + +# script main function +def ExportToIv(file_name): + scene = Blender.Scene.GetCurrent() + file = open(file_name, "w") + + # make lists of individual object types + meshes = [] + lamps = [] + cameras = [] + for object in Blender.Object.Get(): + if object.getType() == "Mesh": + meshes.append(object); + elif object.getType() == "Lamp": + lamps.append(object); + elif object.getType() == "Camera": + cameras.append(object); + else: + print "Exporting %s objects isn't supported!" % object.getType() + + # write header, footer and groups of object types + WriteHeader(file); + #for camera in cameras: + # WriteCamera(file, camera); + #for lamp in lamps: + # WriteLamp(file, lamp) + for mesh in meshes: + WriteMesh(file, mesh) + WriteFooter(file) + + file.close() + +def FileSelectorCB(file_name): + if(file_name.find('.iv', -3) <= 0): + file_name += '.iv' + ExportToIv(file_name) + +Blender.Window.FileSelector(FileSelectorCB, "Export IV") |