Added progress reporting for PSA import

This commit is contained in:
Colin Basnett
2023-08-04 16:44:14 -07:00
parent e750be474a
commit 73b967949d
2 changed files with 11 additions and 5 deletions

View File

@@ -167,7 +167,7 @@ class PSA_OT_import(Operator, ImportHelper):
options.should_convert_to_samples = pg.should_convert_to_samples
options.bone_mapping_mode = pg.bone_mapping_mode
result = import_psa(psa_reader, context.view_layer.objects.active, options)
result = import_psa(context, psa_reader, context.view_layer.objects.active, options)
if len(result.warnings) > 0:
message = f'Imported {len(sequence_names)} action(s) with {len(result.warnings)} warning(s)\n'

View File

@@ -3,7 +3,7 @@ from typing import List, Optional
import bpy
import numpy
from bpy.types import FCurve, Object
from bpy.types import FCurve, Object, Context
from mathutils import Vector, Quaternion
from .data import Psa
@@ -75,9 +75,9 @@ def _get_armature_bone_index_for_psa_bone(psa_bone_name: str, armature_bone_name
return None
def import_psa(psa_reader: PsaReader, armature_object: Object, options: PsaImportOptions) -> PsaImportResult:
def import_psa(context: Context, psa_reader: PsaReader, armature_object: Object, options: PsaImportOptions) -> PsaImportResult:
result = PsaImportResult()
sequences = map(lambda x: psa_reader.sequences[x], options.sequence_names)
sequences = [psa_reader.sequences[x] for x in options.sequence_names]
armature_data = typing.cast(bpy.types.Armature, armature_object.data)
# Create an index mapping from bones in the PSA to bones in the target armature.
@@ -158,9 +158,11 @@ def import_psa(psa_reader: PsaReader, armature_object: Object, options: PsaImpor
import_bone.orig_quat = armature_bone.matrix_local.to_quaternion()
import_bone.post_quat = import_bone.orig_quat.conjugated()
context.window_manager.progress_begin(0, len(sequences))
# Create and populate the data for new sequences.
actions = []
for sequence in sequences:
for sequence_index, sequence in enumerate(sequences):
# Add the action.
sequence_name = sequence.name.decode('windows-1252')
action_name = options.action_name_prefix + sequence_name
@@ -228,6 +230,8 @@ def import_psa(psa_reader: PsaReader, armature_object: Object, options: PsaImpor
actions.append(action)
context.window_manager.progress_update(sequence_index)
# If the user specifies, store the new animations as strips on a non-contributing NLA track.
if options.should_stash:
if armature_object.animation_data is None:
@@ -238,4 +242,6 @@ def import_psa(psa_reader: PsaReader, armature_object: Object, options: PsaImpor
nla_track.mute = True
nla_track.strips.new(name=action.name, start=0, action=action)
context.window_manager.progress_end()
return result