2 "name": "meshio. (.pmd)(.mqo)",
7 "location": "File > Import-Export",
8 "description": "Import-Export PMD/MQO meshes",
10 "url": "http://meshio.sourceforge.jp/",
12 "support": 'COMMUNITY',
13 "category": "Import-Export"
16 # To support reload properly, try to access a package var, if it's there, reload everything
19 if "import_pmd" in locals():
20 imp.reload(import_pmd)
21 if "export_pmd" in locals():
22 imp.reload(export_pmd)
26 from bpy.props import StringProperty, FloatProperty, BoolProperty
28 from io_utils import ImportHelper, ExportHelper
30 from bpy_extras.io_utils import ImportHelper, ExportHelper
37 class ImportPmd(bpy.types.Operator, ImportHelper):
38 '''Import from PMD file format (.pmd)'''
39 bl_idname = "import_scene.mmd_pmd"
40 bl_label = 'Import PMD'
43 filter_glob = StringProperty(default="*.pmd", options={'HIDDEN'})
45 def execute(self, context):
47 bl.initialize('pmd_import', context.scene)
48 import_pmd._execute(**self.as_keywords(
49 ignore=("filter_glob",)))
53 def menu_pmd_import(self, context):
54 self.layout.operator(ImportPmd.bl_idname,
55 text="MikuMikuDance model (.pmd)",
63 class ExportPMD(bpy.types.Operator, ExportHelper):
64 '''Export to PMD file format (.pmd)'''
65 bl_idname = "export_scene.mmd_pmd"
66 bl_label = 'Export PMD'
69 filter_glob = StringProperty(default="*.pmd", options={'HIDDEN'})
71 use_selection = BoolProperty(name="Selection Only", description="Export selected objects only", default=False)
73 def execute(self, context):
75 bl.initialize('pmd_export', context.scene)
76 export_pmd._execute(**self.as_keywords(
77 ignore=("check_existing", "filter_glob", "use_selection")))
81 def menu_pmd_export(self, context):
82 default_path=bpy.data.filepath.replace(".blend", ".pmd")
85 text="Miku Miku Dance Model(.pmd)",
87 ).filepath=default_path
93 class ImportMQO(bpy.types.Operator, ImportHelper):
94 '''Import from MQO file format (.mqo)'''
95 bl_idname = "import_scene.metasequioa_mqo"
96 bl_label = 'Import MQO'
99 filter_glob = StringProperty(default="*.mqo", options={'HIDDEN'})
101 scale = bpy.props.FloatProperty(
103 description="Scale the MQO by this value",
104 min=0.0001, max=1000000.0,
105 soft_min=0.001, soft_max=100.0, default=0.1)
107 def execute(self, context):
109 bl.initialize('mqo_import', context.scene)
110 import_mqo._execute(**self.as_keywords(
111 ignore=("filter_glob",)))
115 def menu_mqo_import(self, context):
116 self.layout.operator(
118 text="Metasequoia (.mqo)",
126 class ExportMQO(bpy.types.Operator, ExportHelper):
127 '''Save a Metasequoia MQO file.'''
128 bl_idname = "export_scene.metasequioa_mqo"
129 bl_label = 'Export MQO'
131 filename_ext = ".mqo"
132 filter_glob = StringProperty(default="*.mqo", options={'HIDDEN'})
134 use_selection = BoolProperty(name="Selection Only", description="Export selected objects only", default=False)
136 scale = bpy.props.FloatProperty(
138 description="Scale the MQO by this value",
139 min=0.0001, max=1000000.0,
140 soft_min=0.001, soft_max=100.0, default=10.0)
142 apply_modifier = bpy.props.BoolProperty(
143 name="ApplyModifier",
144 description="Would apply modifiers",
147 def execute(self, context):
149 export_mqo._execute(**self.as_keywords(
150 ignore=("check_existing", "filter_glob", "use_selection")))
153 def menu_mqo_export(self, context):
154 default_path=bpy.data.filepath.replace(".blend", ".mqo")
155 self.layout.operator(
157 text="Metasequoia (.mqo)",
159 ).filepath=default_path
166 bpy.utils.register_module(__name__)
167 bpy.types.INFO_MT_file_import.append(menu_pmd_import)
168 bpy.types.INFO_MT_file_export.append(menu_pmd_export)
169 bpy.types.INFO_MT_file_import.append(menu_mqo_import)
170 bpy.types.INFO_MT_file_export.append(menu_mqo_export)
173 bpy.utils.unregister_module(__name__)
174 bpy.types.INFO_MT_file_import.remove(menu_pmd_import)
175 bpy.types.INFO_MT_file_export.remove(menu_pmd_export)
176 bpy.types.INFO_MT_file_import.remove(menu_mqo_import)
177 bpy.types.INFO_MT_file_export.remove(menu_mqo_export)
179 if __name__ == "__main__":