From 28d5711baa98bc5fdd53626d5794417b10c393bf Mon Sep 17 00:00:00 2001 From: Ryan Inch Date: Tue, 15 Nov 2022 08:16:28 -0500 Subject: [PATCH] PEP 8 formatting. --- .../components/definitions/image.py | 3 +- .../components/definitions/loop_animation.py | 108 ++++++++++++------ .../definitions/reflection_probe.py | 15 ++- .../components/definitions/visible.py | 1 + addons/io_hubs_addon/components/gizmos.py | 19 +-- addons/io_hubs_addon/io/gltf_exporter.py | 3 +- addons/io_hubs_addon/utils.py | 5 +- addons/scripts/export_gizmo.py | 7 +- 8 files changed, 107 insertions(+), 54 deletions(-) diff --git a/addons/io_hubs_addon/components/definitions/image.py b/addons/io_hubs_addon/components/definitions/image.py index 736a0e6c..88445806 100644 --- a/addons/io_hubs_addon/components/definitions/image.py +++ b/addons/io_hubs_addon/components/definitions/image.py @@ -19,7 +19,8 @@ class Image(HubsComponent): src: StringProperty( name="Image URL", description="The web address of the image", default="https://mozilla.org") - controls: BoolProperty(name="Controls", description="When enabled, shows an \"open link\" button when hovering your cursor over it in Hubs that allows you to open the image in a new tab", default=True) + controls: BoolProperty( + name="Controls", description="When enabled, shows an \"open link\" button when hovering your cursor over it in Hubs that allows you to open the image in a new tab", default=True) alphaMode: EnumProperty( name="Transparency Mode", diff --git a/addons/io_hubs_addon/components/definitions/loop_animation.py b/addons/io_hubs_addon/components/definitions/loop_animation.py index e8440e6c..cd8b2db5 100644 --- a/addons/io_hubs_addon/components/definitions/loop_animation.py +++ b/addons/io_hubs_addon/components/definitions/loop_animation.py @@ -8,6 +8,7 @@ msgbus_owner = None + class TrackPropertyType(PropertyGroup): name: StringProperty( name="Display Name", @@ -17,11 +18,11 @@ class TrackPropertyType(PropertyGroup): name="Track Name", description="Track Name", ) - strip_name: StringProperty( # Will only contain data if the track name is generic + strip_name: StringProperty( # Will only contain data if the track name is generic name="Strip Name", description="Strip Name", ) - action_name: StringProperty( # Will only contain data if the track name is generic + action_name: StringProperty( # Will only contain data if the track name is generic name="Action Name", description="Action Name", ) @@ -31,10 +32,11 @@ class TrackPropertyType(PropertyGroup): items=[ ("object", "Object", "Object"), ("shape_key", "Shape Key", "Shape Key") - ], + ], default="object" ) + class Errors(): _errors = {} @@ -42,7 +44,8 @@ class Errors(): def log(cls, track, error_type, error_message, severity='Error'): has_error = cls._errors.get(track.track_type+track.name, '') if not has_error: - cls._errors[track.track_type+track.name] = {'type': error_type, 'message': error_message, 'severity': severity} + cls._errors[track.track_type+track.name] = { + 'type': error_type, 'message': error_message, 'severity': severity} @classmethod def get(cls, track): @@ -67,7 +70,8 @@ def display_error(cls, layout, error): error_row.scale_y = 0.7 if i == 0: - error_row.label(text=f"{error['severity']}: {line}", icon='ERROR') + error_row.label( + text=f"{error['severity']}: {line}", icon='ERROR') else: error_row.label(text=line, icon='BLANK1') @@ -75,6 +79,7 @@ def display_error(cls, layout, error): padding.scale_y = 0.2 padding.label() + def register_msgbus(): global msgbus_owner @@ -104,6 +109,7 @@ def register_msgbus(): notify=redraw_component_ui, ) + def unregister_msgbus(): global msgbus_owner if not msgbus_owner: @@ -112,37 +118,45 @@ def unregister_msgbus(): bpy.msgbus.clear_by_owner(msgbus_owner) msgbus_owner = None + @persistent def load_post(dummy): unregister_msgbus() register_msgbus() + @persistent def undo_redo_post(dummy): unregister_msgbus() register_msgbus() + def is_default_name(track_name): return bool(track_name.startswith("NlaTrack") or track_name.startswith("[Action Stash]")) + def get_display_name(track_name, strip_name): return track_name if not is_default_name(track_name) else f"{track_name} ({strip_name})" + def get_strip_name(nla_track): try: return nla_track.strips[0].name except IndexError: return '' + def get_action_name(nla_track): try: return nla_track.strips[0].action.name except (IndexError, AttributeError): return '' + def get_menu_id(nla_track, track_type, display_name): return display_name if not is_default_name(nla_track.name) else track_type+display_name + def is_unique_action(animation_data, target_nla_track): try: target_action = target_nla_track.strips[0].action @@ -163,6 +177,7 @@ def is_unique_action(animation_data, target_nla_track): return True + def has_track(tracks_list, nla_track, invalid_track=None): strip_name = get_strip_name(nla_track) action_name = get_action_name(nla_track) @@ -180,6 +195,7 @@ def has_track(tracks_list, nla_track, invalid_track=None): return exists + def is_matching_track(nla_track_type, nla_track, track): if nla_track_type != track.track_type: return False @@ -190,7 +206,8 @@ def is_matching_track(nla_track_type, nla_track, track): if get_action_name(nla_track) == track.action_name: return True - Errors.log(track, 'INVALID_ACTION', "The action has changed for this strip/track.\nChoose the track again to update.") + Errors.log(track, 'INVALID_ACTION', + "The action has changed for this strip/track.\nChoose the track again to update.") else: if nla_track.name == track.track_name: @@ -198,6 +215,7 @@ def is_matching_track(nla_track_type, nla_track, track): return False + def is_useable_nla_track(animation_data, nla_track, track): track_name = nla_track.name action_name = get_action_name(nla_track) @@ -209,16 +227,19 @@ def is_useable_nla_track(animation_data, nla_track, track): forbidden_chars = [",", " "] if not is_default_name(track_name): if any([c for c in forbidden_chars if c in track_name]): - Errors.log(track, 'FORBIDDEN_NAME', "Custom track names can't contain commas or spaces.") + Errors.log(track, 'FORBIDDEN_NAME', + "Custom track names can't contain commas or spaces.") return False else: if any([c for c in forbidden_chars if c in action_name]): - Errors.log(track, 'FORBIDDEN_NAME', "Action names can't contain commas or spaces.") + Errors.log(track, 'FORBIDDEN_NAME', + "Action names can't contain commas or spaces.") return False if len(nla_track.strips) > 1: - Errors.log(track, 'MULTIPLE_STRIPS', "Only one strip is allowed in the track.") + Errors.log(track, 'MULTIPLE_STRIPS', + "Only one strip is allowed in the track.") return False if not nla_track.strips: @@ -226,23 +247,28 @@ def is_useable_nla_track(animation_data, nla_track, track): return False if nla_track.strips[0].mute: - Errors.log(track, 'MUTED_STRIP', "The strip is muted and won't export.") + Errors.log(track, 'MUTED_STRIP', + "The strip is muted and won't export.") return False if not action_name: - Errors.log(track, 'NO_ACTION', "The strip/track doesn't have an action.") + Errors.log(track, 'NO_ACTION', + "The strip/track doesn't have an action.") return False if not nla_track.strips[0].action.fcurves: - Errors.log(track, 'NO_FCURVES', "The strip/track's action doesn't have any animation and\nwon't be exported.") + Errors.log(track, 'NO_FCURVES', + "The strip/track's action doesn't have any animation and\nwon't be exported.") return False if not is_unique_action(animation_data, nla_track): - Errors.log(track, 'NON_UNIQUE_ACTION', "This strip/track contains an action that is present in multiple\nstrips/tracks on this object and may not export correctly.", severity="Warning") + Errors.log(track, 'NON_UNIQUE_ACTION', + "This strip/track contains an action that is present in multiple\nstrips/tracks on this object and may not export correctly.", severity="Warning") return False return True + def is_valid_regular_track(ob, track): if ob.animation_data: for nla_track in ob.animation_data.nla_tracks: @@ -256,6 +282,7 @@ def is_valid_regular_track(ob, track): return False + def is_valid_shape_key_track(ob, track): if hasattr(ob.data, 'shape_keys') and ob.data.shape_keys and ob.data.shape_keys.animation_data: for nla_track in ob.data.shape_keys.animation_data.nla_tracks: @@ -287,15 +314,17 @@ def draw_item(self, context, layout, data, item, icon, active_data, active_propn emboss=False, icon='SHAPEKEY_DATA') split.enabled = False else: - spacer = ' ' # needed so the menu arrow doesn't intersect with the name + spacer = ' ' # needed so the menu arrow doesn't intersect with the name row = split.row(align=False) row.emboss = 'NONE' row.alignment = 'LEFT' row.context_pointer_set('hubs_component', data) row.context_pointer_set('track', item) - row.menu(UpdateTrackContextMenu.bl_idname, text=item.name+spacer, icon='ERROR') + row.menu(UpdateTrackContextMenu.bl_idname, + text=item.name+spacer, icon='ERROR') row = split.row(align=True) - row.emboss = 'UI_EMBOSS_NONE_OR_STATUS' if bpy.app.version < (3, 0, 0) else 'NONE_OR_STATUS' + row.emboss = 'UI_EMBOSS_NONE_OR_STATUS' if bpy.app.version < ( + 3, 0, 0) else 'NONE_OR_STATUS' elif self.layout_type == 'GRID': layout.alignment = 'CENTER' layout.label(text="", icon_value=icon) @@ -321,7 +350,6 @@ class UpdateTrack(Operator): track_type: StringProperty( name="Track Type", description="Track Type", default="") - def execute(self, context): track = context.track track.name = self.name @@ -445,11 +473,13 @@ def draw(self, context): row.context_pointer_set('track', track) update_track = row.operator(UpdateTrack.bl_idname, - icon='OBJECT_DATA', text=display_name) + icon='OBJECT_DATA', text=display_name) update_track.name = display_name update_track.track_name = nla_track.name - update_track.strip_name = strip_name if is_default_name(nla_track.name) else '' - update_track.action_name = action_name if is_default_name(nla_track.name) else '' + update_track.strip_name = strip_name if is_default_name( + nla_track.name) else '' + update_track.action_name = action_name if is_default_name( + nla_track.name) else '' update_track.track_type = track_type no_tracks = False @@ -468,11 +498,13 @@ def draw(self, context): row.context_pointer_set('track', track) update_track = row.operator(UpdateTrack.bl_idname, - icon='SHAPEKEY_DATA', text=display_name) + icon='SHAPEKEY_DATA', text=display_name) update_track.name = display_name update_track.track_name = nla_track.name - update_track.strip_name = strip_name if is_default_name(nla_track.name) else '' - update_track.action_name = action_name if is_default_name(nla_track.name) else '' + update_track.strip_name = strip_name if is_default_name( + nla_track.name) else '' + update_track.action_name = action_name if is_default_name( + nla_track.name) else '' update_track.track_type = track_type no_tracks = False @@ -505,11 +537,13 @@ def draw(self, context): if menu_id not in menu_tracks and not has_track(component_tracks_list, nla_track): add_track = layout.operator(AddTrackOperator.bl_idname, - icon='OBJECT_DATA', text=display_name) + icon='OBJECT_DATA', text=display_name) add_track.name = display_name add_track.track_name = nla_track.name - add_track.strip_name = strip_name if is_default_name(nla_track.name) else '' - add_track.action_name = action_name if is_default_name(nla_track.name) else '' + add_track.strip_name = strip_name if is_default_name( + nla_track.name) else '' + add_track.action_name = action_name if is_default_name( + nla_track.name) else '' add_track.track_type = track_type add_track.panel_type = panel_type.value @@ -526,11 +560,13 @@ def draw(self, context): if menu_id not in menu_tracks and not has_track(component_tracks_list, nla_track): add_track = layout.operator(AddTrackOperator.bl_idname, - icon='SHAPEKEY_DATA', text=display_name) + icon='SHAPEKEY_DATA', text=display_name) add_track.name = display_name add_track.track_name = nla_track.name - add_track.strip_name = strip_name if is_default_name(nla_track.name) else '' - add_track.action_name = action_name if is_default_name(nla_track.name) else '' + add_track.strip_name = strip_name if is_default_name( + nla_track.name) else '' + add_track.action_name = action_name if is_default_name( + nla_track.name) else '' add_track.track_type = track_type add_track.panel_type = panel_type.value @@ -608,7 +644,8 @@ def draw(self, context, layout, panel): def gather(self, export_settings, object): final_track_names = [] for track in object.hubs_component_loop_animation.tracks_list.values(): - final_track_names.append(track.track_name if not is_default_name(track.track_name) else track.action_name) + final_track_names.append(track.track_name if not is_default_name( + track.track_name) else track.action_name) fps = bpy.context.scene.render.fps/bpy.context.scene.render.fps_base @@ -619,7 +656,6 @@ def gather(self, export_settings, object): 'timeScale': self.timeScale } - @staticmethod def register(): bpy.utils.register_class(TracksList) @@ -638,7 +674,6 @@ def register(): register_msgbus() - @staticmethod def unregister(): bpy.utils.unregister_class(TracksList) @@ -680,10 +715,13 @@ def migrate_data(ob, host): track = host.hubs_component_loop_animation.tracks_list.add() strip_name = get_strip_name(nla_track) action_name = get_action_name(nla_track) - track.name = get_display_name(nla_track.name, strip_name) + track.name = get_display_name( + nla_track.name, strip_name) track.track_name = nla_track.name - track.strip_name = strip_name if is_default_name(nla_track.name) else '' - track.action_name = action_name if is_default_name(nla_track.name) else '' + track.strip_name = strip_name if is_default_name( + nla_track.name) else '' + track.action_name = action_name if is_default_name( + nla_track.name) else '' track.track_type = track_type for ob in bpy.data.objects: diff --git a/addons/io_hubs_addon/components/definitions/reflection_probe.py b/addons/io_hubs_addon/components/definitions/reflection_probe.py index f05ad3f6..4720965f 100644 --- a/addons/io_hubs_addon/components/definitions/reflection_probe.py +++ b/addons/io_hubs_addon/components/definitions/reflection_probe.py @@ -91,9 +91,9 @@ class ReflectionProbeSceneProps(PropertyGroup): default='256x128', options={'HIDDEN'}) use_compositor: BoolProperty(name="Use Compositor", - description="Controls whether the baked images will be processed by the compositor after baking", - default=False - ) + description="Controls whether the baked images will be processed by the compositor after baking", + default=False + ) class BakeProbeOperator(bpy.types.Operator): @@ -245,7 +245,7 @@ def modal(self, context, event): def restore_render_props(self): for prop in self.saved_props: - rsetattr(bpy.context, prop, self.saved_props[prop]) + rsetattr(bpy.context, prop, self.saved_props[prop]) def render_probe(self, context): probe = self.probes[self.probe_index] @@ -267,7 +267,8 @@ def render_probe(self, context): resolution = context.scene.hubs_scene_reflection_probe_properties.resolution (x, y) = [int(i) for i in resolution.split('x')] - output_path = "%s/%s.hdr" % (get_addon_pref(context).tmp_path, probe.name) + output_path = "%s/%s.hdr" % ( + get_addon_pref(context).tmp_path, probe.name) use_compositor = context.scene.hubs_scene_reflection_probe_properties.use_compositor overrides = [ @@ -292,6 +293,7 @@ def render_probe(self, context): self.report({'INFO'}, 'Baking probe %s' % probe.name) bpy.ops.render.render("INVOKE_DEFAULT", write_still=True) + class ReflectionProbe(HubsComponent): _definition = { 'name': 'reflection-probe', @@ -357,7 +359,8 @@ def draw_global(cls, context, layout, panel): icon='ERROR') row = col.row() - row.prop(context.scene.hubs_scene_reflection_probe_properties, "use_compositor") + row.prop( + context.scene.hubs_scene_reflection_probe_properties, "use_compositor") global bake_mode diff --git a/addons/io_hubs_addon/components/definitions/visible.py b/addons/io_hubs_addon/components/definitions/visible.py index 479ed5e0..99d91230 100644 --- a/addons/io_hubs_addon/components/definitions/visible.py +++ b/addons/io_hubs_addon/components/definitions/visible.py @@ -3,6 +3,7 @@ from ..hubs_component import HubsComponent from ..types import Category, PanelType, NodeType + class Visible(HubsComponent): _definition = { 'name': 'visible', diff --git a/addons/io_hubs_addon/components/gizmos.py b/addons/io_hubs_addon/components/gizmos.py index f5b25f85..cc149840 100644 --- a/addons/io_hubs_addon/components/gizmos.py +++ b/addons/io_hubs_addon/components/gizmos.py @@ -84,7 +84,7 @@ def add_gizmo(self, ob, host, host_type): 'host_name': host.name, 'host_type': host_type, 'gizmo': gizmo - } + } if host_type == 'OBJECT': owner = object() @@ -138,21 +138,22 @@ def refresh(self, context): if ob.mode == 'EDIT': edit_bone = ob.data.edit_bones[host_name] self.update_bone_gizmo( - component_name, ob, edit_bone, edit_bone, gizmo) + component_name, ob, edit_bone, edit_bone, gizmo) else: bone = ob.data.bones[host_name] pose_bone = ob.pose.bones[host_name] self.update_bone_gizmo( - component_name, ob, bone, pose_bone, gizmo) + component_name, ob, bone, pose_bone, gizmo) else: self.update_object_gizmo( - component_name, ob, gizmo) + component_name, ob, gizmo) global objects_count gizmo_system_registered = False msgbus_owners = [] + def msgbus_callback(*args): update_gizmos() @@ -213,10 +214,10 @@ def register_gizmo_system(): notify=msgbus_callback, ) - register_gizmos() gizmo_system_registered = True + def register_gizmos(): try: bpy.utils.register_class(CustomModelGizmo) @@ -224,6 +225,7 @@ def register_gizmos(): except: pass + def unregister_gizmo_system(): global gizmo_system_registered global msgbus_owners @@ -245,6 +247,7 @@ def unregister_gizmo_system(): unregister_gizmos() gizmo_system_registered = False + def unregister_gizmos(): try: bpy.utils.unregister_class(HubsGizmoGroup) @@ -252,17 +255,20 @@ def unregister_gizmos(): except: pass + def update_gizmos(): global gizmo_system_registered unregister_gizmos() register_gizmos() if gizmo_system_registered else register_gizmo_system() + def register_functions(): def register(): if not load_post in bpy.app.handlers.load_post: bpy.app.handlers.load_post.append(load_post) - bpy.types.Armature.hubs_old_bones_length = IntProperty(options={'HIDDEN', 'SKIP_SAVE'}) + bpy.types.Armature.hubs_old_bones_length = IntProperty( + options={'HIDDEN', 'SKIP_SAVE'}) register_gizmo_system() @@ -270,7 +276,6 @@ def unregister(): if load_post in bpy.app.handlers.load_post: bpy.app.handlers.load_post.remove(load_post) - unregister_gizmo_system() del bpy.types.Armature.hubs_old_bones_length diff --git a/addons/io_hubs_addon/io/gltf_exporter.py b/addons/io_hubs_addon/io/gltf_exporter.py index 97e6f6c3..c295717f 100644 --- a/addons/io_hubs_addon/io/gltf_exporter.py +++ b/addons/io_hubs_addon/io/gltf_exporter.py @@ -170,7 +170,8 @@ def add_hubs_components(self, gltf2_object, blender_object, export_settings): blender_object, component_class.get_id()) data = component.gather(export_settings, blender_object) if hasattr(data, "delayed_gather"): - self.delayed_gathers.append((component_data, component_class.get_name(), data)) + self.delayed_gathers.append( + (component_data, component_class.get_name(), data)) else: component_data[component_class.get_name()] = data else: diff --git a/addons/io_hubs_addon/utils.py b/addons/io_hubs_addon/utils.py index a1611fea..2a970d69 100644 --- a/addons/io_hubs_addon/utils.py +++ b/addons/io_hubs_addon/utils.py @@ -1,12 +1,15 @@ +import functools + + def get_addon_package(): return __package__ -import functools def rsetattr(obj, attr, val): pre, _, post = attr.rpartition('.') return setattr(rgetattr(obj, pre) if pre else obj, post, val) + def rgetattr(obj, attr, *args): def _getattr(obj, attr): return getattr(obj, attr, *args) diff --git a/addons/scripts/export_gizmo.py b/addons/scripts/export_gizmo.py index 22328fae..6611245f 100644 --- a/addons/scripts/export_gizmo.py +++ b/addons/scripts/export_gizmo.py @@ -26,24 +26,25 @@ def convert(objects): out += ')' return out + class SaveGizmoOperator(Operator, ImportHelper): bl_idname = "hubs.save_gizmo" bl_label = "Save Gizmo" - + filter_glob: StringProperty( default='*.py;', options={'HIDDEN'} ) def execute(self, context): - """Save gizmo outout to a file.""" + """Save gizmo outout to a file.""" gizmo = convert(context.selected_objects) f = open(self.filepath, "w") f.write(gizmo) f.close() - + return {'FINISHED'}