////////////////////////////////////////////////////////////
//! \83{\81[\83\93\95\\8e¦\98g
////////////////////////////////////////////////////////////
-struct BoneDisplayName
+struct BoneGroup
{
char name[50];
char english_name[50];
void setName(const char *src);
void setEnglishName(const char *src);
+ std::wstring getName()const;
};
////////////////////////////////////////////////////////////
std::vector<IK> ik_list;
std::vector<Morph> morph_list;
std::vector<unsigned short> face_list;
- std::vector<BoneDisplayName> bone_display_name_list;
+ std::vector<BoneGroup> bone_group_list;
std::vector<std::pair<unsigned short, unsigned char> > bone_display_list;
ToonTexture toon_textures[10];
std::vector<RigidBody> rigidbodies;
}
std::wstring
+ BoneGroup::getName()const
+ {
+ return text::trim(text::to_WideChar(CP_OEMCP,
+ std::string(name, name+50)));
+ }
+
+std::wstring
IO::getName()const
{
return text::trim(text::to_WideChar(CP_OEMCP,
if(!parseFaceList()){
return false;
}
- if(!parseBoneNameList()){
+ if(!parseBoneGroupList()){
return false;
}
if(!parseBoneList()){
bool parseEnglishBoneList()
{
- for(size_t i=0; i<io_.bone_display_name_list.size(); ++i){
+ for(size_t i=0; i<io_.bone_group_list.size(); ++i){
text::copyStringAndFillZero(
- io_.bone_display_name_list[i].english_name,
+ io_.bone_group_list[i].english_name,
reader_.getString(50));
}
return true;
return true;
}
- bool parseBoneNameList()
+ bool parseBoneGroupList()
{
unsigned int count=reader_.getUchar();
for(unsigned int i=0; i<count; ++i){
- io_.bone_display_name_list.push_back(BoneDisplayName());
+ io_.bone_group_list.push_back(BoneGroup());
text::copyStringAndFillZero(
- io_.bone_display_name_list.back().name,
+ io_.bone_group_list.back().name,
reader_.getString(50));
}
return true;
// bone naem list
//std::cout << "bone name list" << std::endl;
- w.writeValue<BYTE>(bone_display_name_list.size());
- for(size_t i=0; i<bone_display_name_list.size(); ++i){
+ w.writeValue<BYTE>(bone_group_list.size());
+ for(size_t i=0; i<bone_group_list.size(); ++i){
// 50bytes
- w.writeArray<char>(bone_display_name_list[i].name, 50);
+ w.writeArray<char>(bone_group_list[i].name, 50);
}
// bone list
w.writeArray<char>(morph_list[i].english_name, 20);
}
- for(size_t i=0; i<bone_display_name_list.size(); ++i){
- w.writeArray<char>(bone_display_name_list[i].english_name, 50);
+ for(size_t i=0; i<bone_group_list.size(); ++i){
+ w.writeArray<char>(bone_group_list[i].english_name, 50);
}
////////////////////////////////////////////////////////////
strncpy(name, src, 20);
}
-void BoneDisplayName::setName(const char *src)
+void BoneGroup::setName(const char *src)
{
strncpy(name, src, 20);
}
-void BoneDisplayName::setEnglishName(const char *src)
+void BoneGroup::setEnglishName(const char *src)
{
strncpy(english_name, src, 20);
}
def enterEditMode():
Blender.Window.EditMode(1)
-def exitEditMode():
+def enterObjectMode():
Blender.Window.EditMode(0)
+def enterPoseMode():
+ Blender.Window.PoseMode(1)
+
def createVector(x, y, z):
return Mathutils.Vector(x, y, z)
indices.append(index)
return indices
+ @staticmethod
+ def createBoneGroup(o, name, color_set='DEFAULT'):
+ # create group
+ object.activate(o)
+ enterPoseMode()
+ bpy.ops.pose.group_add()
+ # set name
+ pose=object.getPose(o)
+ g=pose.active_bone_group
+ g.name=name
+ g.color_set=color_set
+
class modifier:
@staticmethod
@staticmethod
@to_internal_encoding
def create(path):
- image = Blender.Image.Load(path)
+ try:
+ image = Blender.Image.Load(path)
+ except IOError:
+ image = None
texture = Blender.Texture.New(path)
texture.type = Blender.Texture.Types.IMAGE
texture.image = image
def enterEditMode():
bpy.ops.object.mode_set(mode='EDIT', toggle=False)
-def exitEditMode():
+def enterObjectMode():
bpy.ops.object.mode_set(mode='OBJECT', toggle=False)
+def enterPoseMode():
+ bpy.ops.object.mode_set(mode='POSE', toggle=False)
+
def createVector(x, y, z):
return mathutils.Vector([x, y, z])
o.add_vertex_to_group(index,
o.vertex_groups[name], weight, 'ADD')
+ @staticmethod
+ def createBoneGroup(o, name, color_set='DEFAULT'):
+ # create group
+ object.activate(o)
+ enterPoseMode()
+ bpy.ops.pose.group_add()
+ # set name
+ pose=object.getPose(o)
+ g=pose.active_bone_group
+ g.name=name
+ g.color_set=color_set
+
class modifier:
@staticmethod
def vertsDelete(mesh, remove_vertices):
enterEditMode()
bpy.ops.mesh.select_all(action='DESELECT')
- exitEditMode()
+ enterObjectMode()
for i in remove_vertices:
mesh.verts[i].selected=True
enterEditMode()
bpy.ops.mesh.delete(type='VERT')
- exitEditMode()
+ enterObjectMode()
@staticmethod
def setSmooth(mesh, smoothing):
object.activate(mesh_object)
enterEditMode()
bpy.ops.mesh.normals_make_consistent()
- exitEditMode()
+ enterObjectMode()
@staticmethod
def flipNormals(mesh):
armature_object.x_ray=True
armature.draw_names=True
- armature.drawtype='OCTAHEDRAL'
+ #armature.drawtype='OCTAHEDRAL'
+ armature.drawtype='STICK'
armature.deform_envelope=False
armature.deform_vertexgroups=True
armature.x_axis_mirror=True
1.4 20100623: fix constraint name.
1.5 20100626: refactoring.
1.6 20100629: sphere map.
+1.7 20100703: implement bone group.
"""
MMD_SHAPE_GROUP_NAME='_MMD_SHAPE'
def __importArmature(scene, l):
- # build bone
armature, armature_object=bl.armature.create()
+
+ # build bone
bl.armature.makeEditable(armature_object)
for b in l.bones:
if not b.parent:
__build(armature, b, None, None)
bl.armature.update(armature)
- bl.exitEditMode()
+ bl.enterObjectMode()
# IK constraint
pose = bl.object.getPose(armature_object)
bl.armature.makeEditable(armature_object)
bl.armature.update(armature)
- bl.exitEditMode()
+ bl.enterObjectMode()
+
+ if isBlender24():
+ pass
+ else:
+ # create bone group
+ for i, g in enumerate(l.bone_group_list):
+ name=englishmap.getEnglishBoneGroupName(g.getName().strip())
+ if not name:
+ name=g.getName()
+ bl.object.createBoneGroup(armature_object, name, "THEME%02d" % (i+1))
+
+ # assign bone to group
+ for b_index, g_index in l.bone_display_list:
+ # bone
+ b=l.bones[b_index]
+ bone_name=englishmap.getEnglishBoneName(b.getName())
+ if not bone_name:
+ bone_name=b.getName()
+ # group
+ g=l.bone_group_list[g_index-1]
+ group_name=englishmap.getEnglishBoneGroupName(g.getName().strip())
+ if not group_name:
+ group_name=g.getName()
+
+ # assign
+ pose.bones[bone_name].bone_group=pose.bone_groups[group_name]
+
+ bl.enterObjectMode()
return armature_object
%include "std_vector.i"
%include "std_wstring.i"
%include "std_string.i"
+%include "std_pair.i"
%include "../include/color.h"
%include "../include/la.h"
%include "../include/pmd.h"
%template(UshortVector) std::vector<unsigned short>;
%template(Vector3Vector) std::vector<meshio::pmd::Vector3>;
%template(PBoneVector) std::vector<meshio::pmd::Bone*>;
+%template(BoneGroupVector) std::vector<meshio::pmd::BoneGroup>;
+%template(DisplayPair) std::pair<unsigned short, unsigned char>;
+%template(BoneDisplayVector) std::vector<std::pair<unsigned short, unsigned char> >;
///////////////////////////////////////////////////////////////////////////////
// meshio::pmd::IO::each_vertex
std::make_pair(bone_index, display_index));
}
-meshio::pmd::BoneDisplayName *addBoneDisplayName()
+meshio::pmd::BoneGroup *addBoneGroup()
{
- $self->bone_display_name_list.push_back(meshio::pmd::BoneDisplayName());
- return &($self->bone_display_name_list.back());
+ $self->bone_group_list.push_back(meshio::pmd::BoneGroup());
+ return &($self->bone_group_list.back());
}
meshio::pmd::ToonTexture *getToonTexture(int index)
for i in range(len(ext_modules)+1):
try:
setup(name="meshio",
- version='0.13',
+ version='0.14',
description='polygon mesh io utilities',
author='ousttrue',
author_email='ousttrue@gmail.com',