2 "name": "meshio. (.pmd)(.mqo)",
6 "location": "File > Import-Export",
7 "description": "Import-Export PMD/MQO meshes",
9 "url": "http://meshio.sourceforge.jp/",
11 "support": 'COMMUNITY',
12 "category": "Import-Export"
15 # To support reload properly, try to access a package var, if it's there, reload everything
18 if "import_pmd" in locals():
19 imp.reload(import_pmd)
20 if "export_pmd" in locals():
21 imp.reload(export_pmd)
25 from bpy.props import StringProperty, FloatProperty, BoolProperty
26 from io_utils import ImportHelper, ExportHelper
27 from . import bl25 as bl
33 class ImportPmd(bpy.types.Operator, ImportHelper):
34 '''Import from PMD file format (.pmd)'''
35 bl_idname = "import_scene.mmd_pmd"
36 bl_label = 'Import PMD'
39 filter_glob = StringProperty(default="*.pmd", options={'HIDDEN'})
41 def execute(self, context):
42 from . import import_pmd
43 bl.initialize('pmd_import', context.scene)
44 import_pmd._execute(**self.as_keywords(
45 ignore=("filter_glob",)))
49 def menu_pmd_import(self, context):
50 self.layout.operator(ImportPmd.bl_idname,
51 text="MikuMikuDance model (.pmd)",
59 class ExportPMD(bpy.types.Operator, ExportHelper):
60 '''Export to PMD file format (.pmd)'''
61 bl_idname = "export_scene.mmd_pmd"
62 bl_label = 'Export PMD'
65 filter_glob = StringProperty(default="*.pmd", options={'HIDDEN'})
67 use_selection = BoolProperty(name="Selection Only", description="Export selected objects only", default=False)
69 def execute(self, context):
70 from . import export_pmd
71 export_pmd._execute(**self.as_keywords(
72 ignore=("check_existing", "filter_glob")))
75 def menu_pmd_export(self, context):
76 default_path=bpy.data.filepath.replace(".blend", ".pmd")
79 text="Miku Miku Dance Model(.pmd)",
81 ).filepath=default_path
87 class ImportMQO(bpy.types.Operator, ImportHelper):
88 '''Import from MQO file format (.mqo)'''
89 bl_idname = "import_scene.metasequioa_mqo"
90 bl_label = 'Import MQO'
93 filter_glob = StringProperty(default="*.mqo", options={'HIDDEN'})
95 scale = bpy.props.FloatProperty(
97 description="Scale the MQO by this value",
98 min=0.0001, max=1000000.0,
99 soft_min=0.001, soft_max=100.0, default=0.1)
101 def execute(self, context):
102 from . import import_mqo
103 bl.initialize('mqo_import', scene)
104 import_mqo._execute(**self.as_keywords(
105 ignore=("filter_glob",)))
109 def menu_mqo_import(self, context):
110 self.layout.operator(
112 text="Metasequoia (.mqo)",
120 class ExportMQO(bpy.types.Operator, ExportHelper):
121 '''Save a Metasequoia MQO file.'''
122 bl_idname = "export_scene.metasequioa_mqo"
123 bl_label = 'Export MQO'
125 filename_ext = ".mqo"
126 filter_glob = StringProperty(default="*.mqo", options={'HIDDEN'})
128 use_selection = BoolProperty(name="Selection Only", description="Export selected objects only", default=False)
130 scale = bpy.props.FloatProperty(
132 description="Scale the MQO by this value",
133 min=0.0001, max=1000000.0,
134 soft_min=0.001, soft_max=100.0, default=10.0)
136 apply_modifier = bpy.props.BoolProperty(
137 name="ApplyModifier",
138 description="Would apply modifiers",
141 def execute(self, context):
142 from . import export_mqo
143 export_pmd._execute(**self.as_keywords(
144 ignore=("check_existing", "filter_glob")))
147 def menu_mqo_export(self, context):
148 default_path=bpy.data.filepath.replace(".blend", ".mqo")
149 self.layout.operator(
151 text="Metasequoia (.mqo)",
153 ).filepath=default_path
160 bpy.utils.register_module(__name__)
161 bpy.types.INFO_MT_file_import.append(menu_pmd_import)
162 bpy.types.INFO_MT_file_export.append(menu_pmd_export)
163 bpy.types.INFO_MT_file_import.append(menu_mqo_import)
164 bpy.types.INFO_MT_file_export.append(menu_mqo_export)
167 bpy.utils.unregister_module(__name__)
168 bpy.types.INFO_MT_file_import.remove(menu_pmd_import)
169 bpy.types.INFO_MT_file_export.remove(menu_pmd_export)
170 bpy.types.INFO_MT_file_import.remove(menu_mqo_import)
171 bpy.types.INFO_MT_file_export.remove(menu_mqo_export)
173 if __name__ == "__main__":