mirror of
https://github.com/red031000/nitrog3d.git
synced 2025-06-18 13:15:35 -04:00
109 lines
3.3 KiB
Python
109 lines
3.3 KiB
Python
import bpy
|
|
from bpy.props import StringProperty, BoolProperty, CollectionProperty
|
|
from bpy_extras.io_utils import ImportHelper
|
|
from .utils import log, debug
|
|
import os
|
|
|
|
bl_info = {
|
|
"name": "Nitro G3D Importer/Exporter",
|
|
"author": "red031000",
|
|
"version": (0, 1, 0),
|
|
"blender": (3, 6, 0),
|
|
"location": "File > Import-Export",
|
|
"description": "Import/Export 3D compiled files for Nitro",
|
|
'support': 'COMMUNITY',
|
|
"category": "Import-Export",
|
|
}
|
|
|
|
def reload_package(module_dict_main):
|
|
import importlib
|
|
from pathlib import Path
|
|
|
|
def reload_package_recursive(current_dir, module_dict):
|
|
for path in current_dir.iterdir():
|
|
if "__init__" in str(path) or path.stem not in module_dict:
|
|
continue
|
|
|
|
if path.is_file() and path.suffix == ".py":
|
|
importlib.reload(module_dict[path.stem])
|
|
elif path.is_dir():
|
|
reload_package_recursive(path, module_dict[path.stem].__dict__)
|
|
|
|
reload_package_recursive(Path(__file__).parent, module_dict_main)
|
|
|
|
|
|
if "bpy" in locals():
|
|
reload_package(locals())
|
|
|
|
class ImportNitro(bpy.types.Operator, ImportHelper):
|
|
bl_idname = "import_scene.g3d"
|
|
bl_label = "Import Nitro"
|
|
bl_options = {'PRESET'}
|
|
|
|
filter_glob: StringProperty(
|
|
default="*.nsbmd",
|
|
options={'HIDDEN'},
|
|
)
|
|
|
|
files: CollectionProperty(
|
|
name="File Path",
|
|
type=bpy.types.OperatorFileListElement,
|
|
)
|
|
|
|
#generate_log: BoolProperty(name="Generate Log", default=False)
|
|
|
|
def execute(self, context):
|
|
return self.process_import()
|
|
|
|
def draw(self, context):
|
|
pass
|
|
#layout = self.layout
|
|
|
|
#layout.use_property_split = True
|
|
#layout.use_property_decorate = False
|
|
|
|
#layout.prop(self, "generate_log")
|
|
|
|
def process_import(self):
|
|
import_settings = self.as_keywords()
|
|
|
|
if self.files:
|
|
ret = {'FINISHED'}
|
|
dirname = os.path.dirname(self.filepath)
|
|
for file in self.files:
|
|
path = os.path.join(dirname, file.name)
|
|
if self.try_import(path, import_settings) != {'FINISHED'}:
|
|
ret = {'CANCELLED'}
|
|
return ret
|
|
else:
|
|
return self.try_import(self.filepath, import_settings)
|
|
|
|
def try_import(self, filename, import_settings):
|
|
try:
|
|
if filename.lower().endswith('.nsbmd'):
|
|
log("Valid file type", self.report)
|
|
from .import_nsbmd import NSBMDImporter
|
|
nsbmd_importer = NSBMDImporter(filename, import_settings, self.report)
|
|
data = nsbmd_importer.read()
|
|
else:
|
|
raise Exception('Unsupported file type')
|
|
#todo
|
|
return {'FINISHED'}
|
|
except Exception as e:
|
|
self.report(type={'ERROR'}, message=str(e))
|
|
return {'CANCELLED'}
|
|
|
|
def menu_func_import(self, context):
|
|
self.layout.operator(ImportNitro.bl_idname, text="Nitro Compiled (.nsbmd)")
|
|
|
|
def register():
|
|
bpy.utils.register_class(ImportNitro)
|
|
bpy.types.TOPBAR_MT_file_import.append(menu_func_import)
|
|
|
|
def unregister():
|
|
bpy.utils.unregister_class(ImportNitro)
|
|
bpy.types.TOPBAR_MT_file_import.remove(menu_func_import)
|
|
|
|
if __name__ == "__main__":
|
|
register()
|