X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=swig%2Fblender%2Fbl25.py;h=f842242591790f405983437c42bc2c34c4fccda8;hb=af0f7ea2da9ace619ff51edef564fe4669582074;hp=e8b182c26a37b5212af0a20781b780230a520cce;hpb=5821b46e3d373f9e99c9a86c3260abf6ef7a2237;p=meshio%2Fmeshio.git diff --git a/swig/blender/bl25.py b/swig/blender/bl25.py index e8b182c..f842242 100644 --- a/swig/blender/bl25.py +++ b/swig/blender/bl25.py @@ -3,9 +3,19 @@ import bpy import mathutils import os +import sys import time import functools +# ファイルシステムの文字コード +# 改造版との共用のため +FS_ENCODING=sys.getfilesystemencoding() +if os.path.exists(os.path.dirname(sys.argv[0])+"/utf8"): + INTERNAL_ENCODING='utf-8' +else: + INTERNAL_ENCODING=FS_ENCODING + + ############################################################################### # ProgressBar ############################################################################### @@ -56,6 +66,9 @@ def createEmptyObject(scene, name): scene.objects.link(empty) return empty +def createMaterial(name): + material = bpy.data.materials.new(name) + return material def createMqoMaterial(m): material = bpy.data.materials.new(m.getName()) @@ -75,6 +88,7 @@ def createPmdMaterial(m): material.specular_hardness=int(m.shinness) material.specular_color=([m.specular.r, m.specular.g, m.specular.b]) material.mirror_color=([m.ambient.r, m.ambient.g, m.ambient.b]) + material.subsurface_scattering.enabled=True if m.flag==1 else False # temporary material.emit=1.0 return material @@ -225,6 +239,9 @@ def objectDuplicate(scene, obj): bpy.ops.object.location_apply() return dumy.data, dumy +def objectDelete(scene, obj): + scene.objects.unlink(obj) + def faceVertexCount(face): return len(face.verts) @@ -274,12 +291,15 @@ def poseBoneLimit(n, b): if n.endswith("_t"): return if n.startswith("knee_"): - b.lock_rotation[1]=True - b.lock_rotation[2]=True + b.ik_dof_y=False + b.ik_dof_z=False + b.ik_dof_x=True + b.ik_limit_x=True b.ik_min_x=0 b.ik_max_x=180 elif n.startswith("ankle_"): - b.lock_rotation[1]=True + #b.ik_dof_y=False + pass def enterEditMode(): bpy.ops.object.mode_set(mode='EDIT', toggle=False) @@ -324,8 +344,12 @@ def meshAddUV(mesh): def meshVertsDelete(mesh, remove_vertices): enterEditMode() bpy.ops.mesh.select_all(action='DESELECT') + exitEditMode() + for i in remove_vertices: mesh.verts[i].selected=True + + enterEditMode() bpy.ops.mesh.delete(type='VERT') exitEditMode() @@ -355,6 +379,9 @@ def createIkConstraint(armature_object, p_bone, effector_name, ik): constraint.target=armature_object constraint.subtarget=effector_name constraint.use_tail=False + # not used. place folder when export. + constraint.weight=ik.weight + constraint.iterations=ik.iterations * 10 return constraint def createArmatureBone(armature, name): @@ -369,7 +396,91 @@ def createVector(x, y, z): def armatureUpdate(armature): pass -def boneLayerMask(bone, mask): - for i, enable in enumerate(mask): - bone.layer[i]=True if enable else False +def boneLayerMask(bone, layers): + layer=[] + for i in range(32): + try: + layer.append(True if layers[i]!=0 else False) + except IndexError: + layer.append(False) + bone.layer=layer + +def objectPinShape(o): + o.shape_key_lock=True + +def objectAddShapeKey(o, name): + return o.add_shape_key(name) + +def objectActivateShapeKey(o, index): + o.active_shape_key_index=index + +def shapeKeyAssign(shapeKey, index, pos): + shapeKey.data[index].co=pos + +def objectIsVisible(obj): + return obj.restrict_view + +def meshVertexGroupNames(meshObject): + for g in meshObject.vertex_groups: + yield g.name + +def faceNormal(face): + return face.normal + +def meshFaceUv(mesh, i, face): + return mesh.uv_textures[0].data[i].uv + +def armatureModifierGetObject(m): + return m.object + +def objectHasShapeKey(o): + return o.data.shape_keys + +def objectShapeKeys(o): + return o.data.shape_keys.keys + +def meshVertexGroup(meshObject, name): + indices=[] + for i, v in enumerate(meshObject.data.verts): + for g in v.groups: + if meshObject.vertex_groups[g.group].name==name: + indices.append(i) + return indices + +def materialGet(scene, material_name): + return bpy.data.materials[material_name] + +def modifierIsArmature(m): + return m.type=="ARMATURE" + +def boneHeadLocal(b): + return b.head_local[0:3] + +def boneTailLocal(b): + return b.tail_local[0:3] + +def boneIsConnected(b): + return b.connected + +def constraintIsIKSolver(c): + return c.type=='IK' + +def ikChainLen(c): + return c.chain_length + +def ikTarget(c): + return c.subtarget + +def ikItration(c): + return c.iterations + +def ikRotationWeight(c): + return c.weight + +def shapeKeyGet(b, index): + return b.data[index].co + +def shapeKeys(b): + for k in b.data: + yield k.co