pmdとmqoの入出力ライブラリと、それを使ったBlender2.5向けのaddon。
Revision | f4ab30fd28a4cb62ba6f7dd5fc7023182b8a2371 (tree) |
---|---|
Time | 2011-10-14 23:23:18 |
Author | ousttrue <ousttrue@gmai...> |
Commiter | ousttrue |
implement shape key
@@ -178,7 +178,7 @@ def _execute(filepath): | ||
178 | 178 | print("%s(%d)" % (name, letter_count)) |
179 | 179 | return name |
180 | 180 | for i, m in enumerate(model.materials): |
181 | - print(m.name) | |
181 | + #print(m.name) | |
182 | 182 | # material作成 |
183 | 183 | material=__create_a_material(m, m.name, textures_and_images) |
184 | 184 | # object名はutf-8で21byteまで |
@@ -235,5 +235,23 @@ def _execute(filepath): | ||
235 | 235 | else: |
236 | 236 | raise Exception("unknown deform: %s" % v.deform) |
237 | 237 | |
238 | + # set shape_key pin | |
239 | + bl.object.pinShape(mesh_object, True) | |
240 | + # create base key | |
241 | + baseShapeBlock=bl.object.addShapeKey(mesh_object, bl.BASE_SHAPE_NAME) | |
242 | + mesh.update() | |
243 | + for m in model.morphs: | |
244 | + new_shape_key=bl.object.addShapeKey(mesh_object, m.name) | |
245 | + for o in m.offsets: | |
246 | + if isinstance(o, pmx.VertexMorphOffset): | |
247 | + bl.shapekey.assign(new_shape_key, | |
248 | + o.vertex_index, | |
249 | + mesh.vertices[o.vertex_index].co+ | |
250 | + bl.createVector(*convert_coord(o.position_offset))) | |
251 | + else: | |
252 | + raise Exception("unknown morph type: %s" % o) | |
253 | + # select base shape | |
254 | + bl.object.setActivateShapeKey(mesh_object, 0) | |
255 | + | |
238 | 256 | return {'FINISHED'} |
239 | 257 |
@@ -275,7 +275,7 @@ def pmd_to_pmx(src): | ||
275 | 275 | english_name=m.english_name.decode('cp932'), |
276 | 276 | panel=get_panel(m), |
277 | 277 | morph_type=1, |
278 | - offsets=[pmx.VerexMorphOffset(base.indices[i], pos) | |
278 | + offsets=[pmx.VertexMorphOffset(base.indices[i], pos) | |
279 | 279 | for i, pos in zip(m.indices, m.pos_list)] |
280 | 280 | ) |
281 | 281 | for i, m in enumerate(src.morphs) if m.name!=b"base"] |
@@ -107,8 +107,8 @@ class IkLink(Diff): | ||
107 | 107 | def __init__(self, bone_index, limit_angle, limit_min=None, limit_max=None): |
108 | 108 | self.bone_index=bone_index |
109 | 109 | self.limit_angle=limit_angle |
110 | - self.limit_min=limit_min or common.Vector3 | |
111 | - self.limit_max=limit_max or common.Vector3 | |
110 | + self.limit_min=limit_min or common.Vector3() | |
111 | + self.limit_max=limit_max or common.Vector3() | |
112 | 112 | |
113 | 113 | def __eq__(self, rhs): |
114 | 114 | return ( |
@@ -171,13 +171,13 @@ class Bone(Diff): | ||
171 | 171 | self.parent_index=parent_index |
172 | 172 | self.layer=layer |
173 | 173 | self.flag=flag |
174 | - self.tail_position=tail_position or common.Vector3 | |
174 | + self.tail_position=tail_position or common.Vector3() | |
175 | 175 | self.tail_index=tail_index |
176 | 176 | self.effect_index=effect_index |
177 | 177 | self.effect_factor=effect_factor |
178 | - self.fixed_axis=fixed_axis or common.Vector3 | |
179 | - self.local_x_vector=local_x_vector or common.Vector3 | |
180 | - self.local_z_vector=local_z_vector or common.Vector3 | |
178 | + self.fixed_axis=fixed_axis or common.Vector3() | |
179 | + self.local_x_vector=local_x_vector or common.Vector3() | |
180 | + self.local_z_vector=local_z_vector or common.Vector3() | |
181 | 181 | self.external_key=external_key |
182 | 182 | self.ik=ik |
183 | 183 |
@@ -497,7 +497,7 @@ class Morph(Diff): | ||
497 | 497 | self._diff_array(rhs, 'offsets') |
498 | 498 | |
499 | 499 | |
500 | -class VerexMorphOffset(Diff): | |
500 | +class VertexMorphOffset(Diff): | |
501 | 501 | """pmx vertex morph offset |
502 | 502 | |
503 | 503 | Attributes: |
@@ -216,7 +216,7 @@ class Reader(common.BinaryReader): | ||
216 | 216 | "unknown morph type: {0}".format(morph_type)) |
217 | 217 | |
218 | 218 | def read_vertex_morph_offset(self): |
219 | - return pmx.VerexMorphOffset( | |
219 | + return pmx.VertexMorphOffset( | |
220 | 220 | self.read_vertex_index(), self.read_vector3()) |
221 | 221 | |
222 | 222 | def read_display_slot(self): |