diff --git a/io_scene_psk_psa/psa/importer.py b/io_scene_psk_psa/psa/importer.py index 44f2572..d9438f6 100644 --- a/io_scene_psk_psa/psa/importer.py +++ b/io_scene_psk_psa/psa/importer.py @@ -176,15 +176,15 @@ def import_psa(context: Context, psa_reader: PsaReader, armature_object: Object, action = bpy.data.actions.new(name=action_name) # Calculate the target FPS. - target_fps = sequence.fps - if options.fps_source == 'CUSTOM': - target_fps = options.fps_custom - elif options.fps_source == 'SCENE': - target_fps = context.scene.render.fps - elif options.fps_source == 'SEQUENCE': - target_fps = sequence.fps - else: - raise ValueError(f'Unknown FPS source: {options.fps_source}') + match options.fps_source: + case 'CUSTOM': + target_fps = options.fps_custom + case 'SCENE': + target_fps = context.scene.render.fps + case 'SEQUENCE': + target_fps = sequence.fps + case _: + raise ValueError(f'Unknown FPS source: {options.fps_source}') keyframe_time_dilation = target_fps / sequence.fps diff --git a/io_scene_psk_psa/psk/import_/operators.py b/io_scene_psk_psa/psk/import_/operators.py index 3ebc084..ea57ccc 100644 --- a/io_scene_psk_psa/psk/import_/operators.py +++ b/io_scene_psk_psa/psk/import_/operators.py @@ -27,8 +27,8 @@ class PSK_OT_import(Operator, ImportHelper): should_import_vertex_colors: BoolProperty( default=True, options=empty_set, - name='Vertex Colors', - description='Import vertex colors from PSKX files, if available' + name='Import Vertex Colors', + description='Import vertex colors, if available' ) vertex_color_space: EnumProperty( name='Vertex Color Space', @@ -42,13 +42,13 @@ class PSK_OT_import(Operator, ImportHelper): ) should_import_vertex_normals: BoolProperty( default=True, - name='Vertex Normals', + name='Import Vertex Normals', options=empty_set, description='Import vertex normals, if available' ) should_import_extra_uvs: BoolProperty( default=True, - name='Extra UVs', + name='Import Extra UVs', options=empty_set, description='Import extra UV maps, if available' ) @@ -63,12 +63,6 @@ class PSK_OT_import(Operator, ImportHelper): name='Import Materials', options=empty_set, ) - should_reuse_materials: BoolProperty( - default=True, - name='Reuse Materials', - options=empty_set, - description='Existing materials with matching names will be reused when available' - ) should_import_skeleton: BoolProperty( default=True, name='Import Skeleton', @@ -87,10 +81,15 @@ class PSK_OT_import(Operator, ImportHelper): ) should_import_shape_keys: BoolProperty( default=True, - name='Shape Keys', + name='Import Shape Keys', options=empty_set, description='Import shape keys, if available' ) + scale: FloatProperty( + name='Scale', + default=1.0, + soft_min=0.0, + ) def execute(self, context): psk = read_psk(self.filepath) @@ -106,6 +105,7 @@ class PSK_OT_import(Operator, ImportHelper): options.bone_length = self.bone_length options.should_import_materials = self.should_import_materials options.should_import_shape_keys = self.should_import_shape_keys + options.scale = self.scale result = import_psk(psk, context, options) @@ -120,24 +120,36 @@ class PSK_OT_import(Operator, ImportHelper): def draw(self, context): layout = self.layout - layout.prop(self, 'should_import_materials') + + row = layout.row() + + col = row.column() + col.use_property_split = True + col.use_property_decorate = False + col.prop(self, 'scale') + layout.prop(self, 'should_import_mesh') - row = layout.column() - row.use_property_split = True - row.use_property_decorate = False + if self.should_import_mesh: - row.prop(self, 'should_import_vertex_normals') - row.prop(self, 'should_import_extra_uvs') - row.prop(self, 'should_import_vertex_colors') + row = layout.row() + col = row.column() + col.use_property_split = True + col.use_property_decorate = False + col.prop(self, 'should_import_materials', text='Materials') + col.prop(self, 'should_import_vertex_normals', text='Vertex Normals') + col.prop(self, 'should_import_extra_uvs', text='Extra UVs') + col.prop(self, 'should_import_vertex_colors', text='Vertex Colors') if self.should_import_vertex_colors: - row.prop(self, 'vertex_color_space') - row.prop(self, 'should_import_shape_keys') + col.prop(self, 'vertex_color_space') + col.prop(self, 'should_import_shape_keys', text='Shape Keys') + layout.prop(self, 'should_import_skeleton') - row = layout.column() - row.use_property_split = True - row.use_property_decorate = False if self.should_import_skeleton: - row.prop(self, 'bone_length') + row = layout.row() + col = row.column() + col.use_property_split = True + col.use_property_decorate = False + col.prop(self, 'bone_length') classes = ( diff --git a/io_scene_psk_psa/psk/importer.py b/io_scene_psk_psa/psk/importer.py index 2594e8f..e6efe89 100644 --- a/io_scene_psk_psa/psk/importer.py +++ b/io_scene_psk_psa/psk/importer.py @@ -23,6 +23,7 @@ class PskImportOptions: self.should_import_shape_keys = True self.bone_length = 1.0 self.should_import_materials = True + self.scale = 1.0 class ImportBone: @@ -51,6 +52,10 @@ class PskImportResult: def import_psk(psk: Psk, context, options: PskImportOptions) -> PskImportResult: result = PskImportResult() armature_object = None + mesh_object = None + + if not options.should_import_mesh and not options.should_import_skeleton: + raise Exception('Nothing to import') if options.should_import_skeleton: # ARMATURE @@ -266,6 +271,9 @@ def import_psk(psk: Psk, context, options: PskImportOptions) -> PskImportResult: armature_modifier.object = armature_object mesh_object.parent = armature_object + root_object = armature_object if options.should_import_skeleton else mesh_object + root_object.scale = (options.scale, options.scale, options.scale) + try: bpy.ops.object.mode_set(mode='OBJECT') except: