From ec5289acc7a87656007c49b63b03427a2a85d0b4 Mon Sep 17 00:00:00 2001 From: Guilherme Trevisan Date: Tue, 25 Jul 2023 20:44:17 -0700 Subject: [PATCH 01/28] Updated icon names --- .../attributes_to_python.py | 2 +- gt/tools/auto_rigger/rigger_biped_gui.py | 2 +- gt/tools/color_manager/color_manager.py | 2 +- .../create_sphere_types.py | 2 +- gt/tools/fspy_importer/fspy_importer.py | 2 +- gt/tools/outliner_sorter/outliner_sorter.py | 2 +- gt/tools/package_setup/gt_tools_maya_menu.py | 62 ++-- gt/tools/package_setup/setup_view.py | 2 +- gt/tools/path_manager/path_manager.py | 2 +- gt/tools/renamer/renamer.py | 2 +- .../render_calculator/render_calculator.py | 2 +- gt/tools/render_checklist/render_checklist.py | 2 +- gt/tools/sample_tool/sample_view.py | 2 +- .../selection_manager/selection_manager.py | 2 +- .../shape_curve_to_python.py | 2 +- .../shape_extract_state.py | 2 +- .../shape_text_to_curve.py | 2 +- gt/tools/startup_booster/startup_booster.py | 2 +- .../transfer_transforms.py | 2 +- gt/tools/transfer_uvs/transfer_uvs.py | 2 +- .../world_space_baker/world_space_baker.py | 2 +- gt/ui/resource_library.py | 71 ++-- .../icons/{about.svg => misc_about.svg} | 0 .../resources/icons/{cog.svg => misc_cog.svg} | 0 ...t_version.svg => misc_current_version.svg} | 0 ...rebuild_menu.svg => misc_rebuild_menu.svg} | 0 gt/ui/resources/icons/package_icon.png | Bin 74703 -> 0 bytes gt/ui/resources/icons/package_icon.svg | 303 ++++++++++++++++++ ...thon.svg => tool_attributes_to_python.svg} | 0 ...g_auto_rigger.svg => tool_auto_rigger.svg} | 0 ...updates.svg => tool_check_for_updates.svg} | 0 ...lor_manager.svg => tool_color_manager.svg} | 0 ...v_state.svg => tool_crv_extract_state.svg} | 0 ...{crv_to_python.svg => tool_crv_python.svg} | 0 .../icons/{crv_text.svg => tool_crv_text.svg} | 0 ...py_importer.svg => tool_fspy_importer.svg} | 0 ...o_discord.svg => tool_maya_to_discord.svg} | 0 ...er_sorter.svg => tool_outliner_sorter.svg} | 0 ...path_manager.svg => tool_path_manager.svg} | 0 .../icons/{renamer.svg => tool_renamer.svg} | 0 ...culator.svg => tool_render_calculator.svg} | 0 ...hecklist.svg => tool_render_checklist.svg} | 0 ...manager.svg => tool_selection_manager.svg} | 0 ...sphere_types.svg => tool_sphere_types.svg} | 0 ...p_booster.svg => tool_startup_booster.svg} | 0 ...forms.svg => tool_transfer_transforms.svg} | 0 ...transfer_uvs.svg => tool_transfer_uvs.svg} | 0 ...e_baker.svg => tool_world_space_baker.svg} | 0 .../{crv_combine.svg => util_crv_combine.svg} | 0 ...crv_separate.svg => util_crv_separate.svg} | 0 ...f_to_mesh.svg => util_mod_bif_to_mesh.svg} | 0 ...aterial.svg => util_mod_copy_material.svg} | 0 ...load_udims.svg => util_mod_load_udims.svg} | 0 ...terial.svg => util_mod_paste_material.svg} | 0 54 files changed, 390 insertions(+), 86 deletions(-) rename gt/ui/resources/icons/{about.svg => misc_about.svg} (100%) rename gt/ui/resources/icons/{cog.svg => misc_cog.svg} (100%) rename gt/ui/resources/icons/{current_version.svg => misc_current_version.svg} (100%) rename gt/ui/resources/icons/{rebuild_menu.svg => misc_rebuild_menu.svg} (100%) delete mode 100644 gt/ui/resources/icons/package_icon.png create mode 100644 gt/ui/resources/icons/package_icon.svg rename gt/ui/resources/icons/{attributes_to_python.svg => tool_attributes_to_python.svg} (100%) rename gt/ui/resources/icons/{rig_auto_rigger.svg => tool_auto_rigger.svg} (100%) rename gt/ui/resources/icons/{check_for_updates.svg => tool_check_for_updates.svg} (100%) rename gt/ui/resources/icons/{color_manager.svg => tool_color_manager.svg} (100%) rename gt/ui/resources/icons/{crv_state.svg => tool_crv_extract_state.svg} (100%) rename gt/ui/resources/icons/{crv_to_python.svg => tool_crv_python.svg} (100%) rename gt/ui/resources/icons/{crv_text.svg => tool_crv_text.svg} (100%) rename gt/ui/resources/icons/{fspy_importer.svg => tool_fspy_importer.svg} (100%) rename gt/ui/resources/icons/{maya_to_discord.svg => tool_maya_to_discord.svg} (100%) rename gt/ui/resources/icons/{outliner_sorter.svg => tool_outliner_sorter.svg} (100%) rename gt/ui/resources/icons/{path_manager.svg => tool_path_manager.svg} (100%) rename gt/ui/resources/icons/{renamer.svg => tool_renamer.svg} (100%) rename gt/ui/resources/icons/{render_calculator.svg => tool_render_calculator.svg} (100%) rename gt/ui/resources/icons/{render_checklist.svg => tool_render_checklist.svg} (100%) rename gt/ui/resources/icons/{selection_manager.svg => tool_selection_manager.svg} (100%) rename gt/ui/resources/icons/{mod_sphere_types.svg => tool_sphere_types.svg} (100%) rename gt/ui/resources/icons/{startup_booster.svg => tool_startup_booster.svg} (100%) rename gt/ui/resources/icons/{transfer_transforms.svg => tool_transfer_transforms.svg} (100%) rename gt/ui/resources/icons/{mod_transfer_uvs.svg => tool_transfer_uvs.svg} (100%) rename gt/ui/resources/icons/{world_space_baker.svg => tool_world_space_baker.svg} (100%) rename gt/ui/resources/icons/{crv_combine.svg => util_crv_combine.svg} (100%) rename gt/ui/resources/icons/{crv_separate.svg => util_crv_separate.svg} (100%) rename gt/ui/resources/icons/{mod_bif_to_mesh.svg => util_mod_bif_to_mesh.svg} (100%) rename gt/ui/resources/icons/{mod_copy_material.svg => util_mod_copy_material.svg} (100%) rename gt/ui/resources/icons/{mod_load_udims.svg => util_mod_load_udims.svg} (100%) rename gt/ui/resources/icons/{mod_paste_material.svg => util_mod_paste_material.svg} (100%) diff --git a/gt/tools/attributes_to_python/attributes_to_python.py b/gt/tools/attributes_to_python/attributes_to_python.py index 346ad5f9..02f2febf 100644 --- a/gt/tools/attributes_to_python/attributes_to_python.py +++ b/gt/tools/attributes_to_python/attributes_to_python.py @@ -329,7 +329,7 @@ def _btn_extract_attr(attr_type='default'): # Set Window Icon qw = OpenMayaUI.MQtUtil.findWindow(window_name) widget = wrapInstance(int(qw), QWidget) - icon = QIcon(resource_library.Icon.attributes_to_python) + icon = QIcon(resource_library.Icon.tool_attributes_to_python) widget.setWindowIcon(icon) # Main GUI Ends Here ================================================================================= diff --git a/gt/tools/auto_rigger/rigger_biped_gui.py b/gt/tools/auto_rigger/rigger_biped_gui.py index c2c6f232..08a1ef3c 100644 --- a/gt/tools/auto_rigger/rigger_biped_gui.py +++ b/gt/tools/auto_rigger/rigger_biped_gui.py @@ -605,7 +605,7 @@ def build_gui_auto_biped_rig(): # Set Window Icon qw = OpenMayaUI.MQtUtil.findWindow(window_name) widget = wrapInstance(int(qw), QWidget) - icon = QIcon(resource_library.Icon.rig_auto_rigger) + icon = QIcon(resource_library.Icon.tool_auto_rigger) widget.setWindowIcon(icon) # ### GUI Functions ### diff --git a/gt/tools/color_manager/color_manager.py b/gt/tools/color_manager/color_manager.py index 914be720..720a7c44 100644 --- a/gt/tools/color_manager/color_manager.py +++ b/gt/tools/color_manager/color_manager.py @@ -456,7 +456,7 @@ def set_color_reset(obj_to_set, reset_overrides=False, reset_wireframe=False, re # Set Window Icon qw = OpenMayaUI.MQtUtil.findWindow(window_name) widget = wrapInstance(int(qw), QWidget) - icon = QIcon(resource_library.Icon.color_manager) + icon = QIcon(resource_library.Icon.tool_color_manager) widget.setWindowIcon(icon) # Main GUI Ends Here ================================================================================= diff --git a/gt/tools/create_sphere_types/create_sphere_types.py b/gt/tools/create_sphere_types/create_sphere_types.py index 074c8a76..dc3e1beb 100644 --- a/gt/tools/create_sphere_types/create_sphere_types.py +++ b/gt/tools/create_sphere_types/create_sphere_types.py @@ -70,7 +70,7 @@ def build_gui_sphere_type(): # Set Window Icon qw = OpenMayaUI.MQtUtil.findWindow(window_gui_sphere_type) widget = wrapInstance(int(qw), QWidget) - icon = QIcon(resource_library.Icon.mod_sphere_types) + icon = QIcon(resource_library.Icon.tool_sphere_types) widget.setWindowIcon(icon) diff --git a/gt/tools/fspy_importer/fspy_importer.py b/gt/tools/fspy_importer/fspy_importer.py index 7c3f3fed..a93ddd55 100644 --- a/gt/tools/fspy_importer/fspy_importer.py +++ b/gt/tools/fspy_importer/fspy_importer.py @@ -182,7 +182,7 @@ def load_image_path(): # Set Window Icon qw = OpenMayaUI.MQtUtil.findWindow(window_name) widget = wrapInstance(int(qw), QWidget) - icon = QIcon(resource_library.Icon.fspy_importer) + icon = QIcon(resource_library.Icon.tool_fspy_importer) widget.setWindowIcon(icon) # Main GUI Ends Here ================================================================================= diff --git a/gt/tools/outliner_sorter/outliner_sorter.py b/gt/tools/outliner_sorter/outliner_sorter.py index 05ffda0d..67e4f3ca 100644 --- a/gt/tools/outliner_sorter/outliner_sorter.py +++ b/gt/tools/outliner_sorter/outliner_sorter.py @@ -327,7 +327,7 @@ def update_sort_attr(*args): # Set Window Icon qw = OpenMayaUI.MQtUtil.findWindow(window_name) widget = wrapInstance(int(qw), QWidget) - icon = QIcon(resource_library.Icon.outliner_sorter) + icon = QIcon(resource_library.Icon.tool_outliner_sorter) widget.setWindowIcon(icon) # Remove the focus from the textfield and give it to the window diff --git a/gt/tools/package_setup/gt_tools_maya_menu.py b/gt/tools/package_setup/gt_tools_maya_menu.py index aacb9d0d..3522df98 100644 --- a/gt/tools/package_setup/gt_tools_maya_menu.py +++ b/gt/tools/package_setup/gt_tools_maya_menu.py @@ -97,40 +97,40 @@ def load_menu(*args): menu.add_menu_item(label='Renamer', command=partial(_open_named_tool, "renamer"), tooltip='Script for renaming multiple objects.', - icon=resource_library.Icon.renamer) + icon=resource_library.Icon.tool_renamer) menu.add_menu_item(label='Outliner Sorter', command=partial(_open_named_tool, "outliner_sorter"), tooltip='Manages the order of the elements in the outliner.', - icon=resource_library.Icon.outliner_sorter) + icon=resource_library.Icon.tool_outliner_sorter) menu.add_menu_item(label='Selection Manager', command=partial(_open_named_tool, "selection_manager"), tooltip='Manages or creates custom selections.', - icon=resource_library.Icon.selection_manager) + icon=resource_library.Icon.tool_selection_manager) menu.add_menu_item(label='Path Manager', command=partial(_open_named_tool, "path_manager"), tooltip='A script for managing and repairing the path of many nodes.', - icon=resource_library.Icon.path_manager) + icon=resource_library.Icon.tool_path_manager) menu.add_menu_item(label='Color Manager', command=partial(_open_named_tool, "color_manager"), tooltip='A way to quickly change colors of objects and objects names (outliner).', - icon=resource_library.Icon.color_manager) + icon=resource_library.Icon.tool_color_manager) menu.add_menu_item(label='Transfer Transforms', command=partial(_open_named_tool, "transfer_transforms"), tooltip='Script for quickly transferring Translate, Rotate, and Scale between objects.', - icon=resource_library.Icon.transfer_transforms) + icon=resource_library.Icon.tool_transfer_transforms) menu.add_menu_item(label='World Space Baker', command=partial(_open_named_tool, "world_space_baker"), tooltip='Script for getting and setting translate and rotate world space data.', - icon=resource_library.Icon.world_space_baker) + icon=resource_library.Icon.tool_world_space_baker) menu.add_menu_item(label='Attributes to Python', command=partial(_open_named_tool, "attributes_to_python"), tooltip='Converts attributes into Python code. TRS Channels or User-defined.', - icon=resource_library.Icon.attributes_to_python) + icon=resource_library.Icon.tool_attributes_to_python) menu.add_menu_item(label='Render Checklist', command=partial(_open_named_tool, "render_checklist"), tooltip='Performs a series of checks to detect common issues that are often accidentally ' 'ignored/unnoticed.', - icon=resource_library.Icon.render_checklist) + icon=resource_library.Icon.tool_render_checklist) # ------------------------------------ Curves ------------------------------------ menu.add_sub_menu("Curves", @@ -139,25 +139,25 @@ def load_menu(*args): menu.add_menu_item(label='Extract Python Curve', command=partial(_open_named_tool, "shape_curve_to_python"), tooltip='Generates the python code necessary to create a selected curve.', - icon=resource_library.Icon.crv_to_python) + icon=resource_library.Icon.tool_crv_python) menu.add_menu_item(label='Generate Text Curve', command=partial(_open_named_tool, "shape_text_to_curve"), tooltip='Generates a single curve containing all shapes necessary to produce a word/text.', - icon=resource_library.Icon.crv_text) + icon=resource_library.Icon.tool_crv_text) menu.add_menu_item(label='Extract Curve State', command=partial(_open_named_tool, "shape_extract_state"), tooltip='Generates the python command necessary to reshape curves back to their stored state.', - icon=resource_library.Icon.crv_state) + icon=resource_library.Icon.tool_crv_extract_state) menu.add_divider() # Utility Section +++++++++++++++++++++++++++++++++ menu.add_menu_item(label='Combine Curves', command=partial(_run_utility, "curve_utils", "selected_curves_combine"), tooltip='Combine curves by moving all the shape objects inside one single transform.', - icon=resource_library.Icon.crv_combine) + icon=resource_library.Icon.util_crv_combine) menu.add_menu_item(label='Separate Curves', command=partial(_run_utility, "curve_utils", "selected_curves_separate"), tooltip='Separate curves by moving every shape object to their own separated transform.', - icon=resource_library.Icon.crv_separate) + icon=resource_library.Icon.util_crv_separate) # ------------------------------------ Modeling ------------------------------------ menu.add_sub_menu("Modeling", @@ -166,32 +166,32 @@ def load_menu(*args): menu.add_menu_item(label='Transfer UVs', command=partial(_open_named_tool, "transfer_uvs"), tooltip='A script to export/import UVs as well as transfer them between objects.', - icon=resource_library.Icon.mod_transfer_uvs) + icon=resource_library.Icon.tool_transfer_uvs) menu.add_menu_item(label='Sphere Types', command=partial(_open_named_tool, "create_sphere_types"), tooltip='A reminder for students that there are other sphere types.', - icon=resource_library.Icon.mod_sphere_types) + icon=resource_library.Icon.tool_sphere_types) menu.add_divider() # Utility Section +++++++++++++++++++++++++++++++++ menu.add_menu_item(label='Preview All UDIMs', command=partial(_run_utility, "display_utils", "generate_udim_previews"), tooltip='Generates UDIM previews for all file nodes.', - icon=resource_library.Icon.mod_load_udims) + icon=resource_library.Icon.util_mod_load_udims) menu.add_menu_item(label='Convert Bif to Mesh', command=partial(_run_utility, "geometry_utils", "convert_bif_to_mesh"), tooltip='Converts Bifrost Geometry into Maya Geometry (Mesh). ' 'If used with volume or particles the output will be empty.', - icon=resource_library.Icon.mod_bif_to_mesh) + icon=resource_library.Icon.util_mod_bif_to_mesh) menu.add_divider() # Material Section +++++++++++++++++++++++++++++++++ menu.add_menu_item(label='Copy Material', command=partial(_run_utility, "misc_utils", "material_copy"), tooltip='Copies material to clipboard.', - icon=resource_library.Icon.mod_copy_material) + icon=resource_library.Icon.util_mod_copy_material) menu.add_menu_item(label='Paste Material', command=partial(_run_utility, "misc_utils", "material_paste"), tooltip='Pastes material from clipboard.', - icon=resource_library.Icon.mod_paste_material) + icon=resource_library.Icon.util_mod_paste_material) # ------------------------------------ Rigging ------------------------------------ menu.add_sub_menu("Rigging", icon=resource_library.Icon.root_rigging, @@ -199,7 +199,7 @@ def load_menu(*args): menu.add_menu_item(label='Biped Auto Rigger', command=partial(_open_named_tool, "auto_rigger"), tooltip='Automated solution for creating a biped rig.', - icon=resource_library.Icon.rig_auto_rigger) + icon=resource_library.Icon.tool_auto_rigger) menu.add_menu_item(label='Biped Rig Interface', command=partial(_open_named_tool, "auto_rigger", "launch_biped_rig_interface"), tooltip='Custom Rig Interface for GT Biped Auto Rigger.', @@ -388,29 +388,29 @@ def load_menu(*args): menu.add_menu_item(label='Startup Booster', command=partial(_open_named_tool, "startup_booster"), tooltip='Improve startup times by managing which plugins get loaded when starting Maya.', - icon=resource_library.Icon.startup_booster) + icon=resource_library.Icon.tool_startup_booster) menu.add_menu_item(label='fSpy Importer', command=partial(_open_named_tool, "fspy_importer"), tooltip='Imports the JSON data exported out of fSpy (Camera Matching software).', - icon=resource_library.Icon.fspy_importer) + icon=resource_library.Icon.tool_fspy_importer) menu.add_menu_item(label='Maya to Discord', command=partial(_open_named_tool, "maya_to_discord"), tooltip='Send images and videos (playblasts) from Maya to Discord using a ' 'Discord Webhook to bridge the two programs.', - icon=resource_library.Icon.maya_to_discord_icon) + icon=resource_library.Icon.tool_maya_to_discord) menu.add_menu_item(label='Render Calculator', command=partial(_open_named_tool, "render_calculator"), tooltip="Helps calculate how long it's going to take to render an image sequence.", - icon=resource_library.Icon.render_calculator) + icon=resource_library.Icon.tool_render_calculator) # ------------------------------------ Development ------------------------------------ if False: # TODO - Replace with global variable menu.add_sub_menu("Develop", - icon=resource_library.Icon.about, + icon=resource_library.Icon.misc_about, parent_to_root=True) menu.add_menu_item(label='Sample Tool', command=partial(_open_named_tool, "sample_tool"), tooltip="Opens sample tool.", - icon=resource_library.Icon.about) + icon=resource_library.Icon.misc_about) # ------------------------------------ About/Help ------------------------------------ menu.add_divider(parent_to_root=True) menu.add_sub_menu("Help", @@ -419,18 +419,18 @@ def load_menu(*args): menu.add_menu_item(label='About', command=partial(_open_named_tool, "package_setup", "open_about_window"), tooltip="Opens about menu.", - icon=resource_library.Icon.about) + icon=resource_library.Icon.misc_about) menu.add_menu_item(label='Re-Build Menu', command=_rebuild_menu, tooltip="Re-Creates this menu, and does a rehash to pick up any new scripts.", - icon=resource_library.Icon.rebuild_menu) + icon=resource_library.Icon.misc_rebuild_menu) menu.add_menu_item(label='Check for Updates', command=partial(_open_named_tool, "check_for_updates"), tooltip="Check for updates by comparing current version with latest release.", - icon=resource_library.Icon.check_for_updates) + icon=resource_library.Icon.tool_check_for_updates) menu.add_menu_item(label=f'Installed Version: {str(package_version)}', enable=False, - icon=resource_library.Icon.current_version) + icon=resource_library.Icon.misc_current_version) # ------------------------------------ End ------------------------------------ menu_path = menu.create_menu() return menu_path diff --git a/gt/tools/package_setup/setup_view.py b/gt/tools/package_setup/setup_view.py index 4fc04ed3..1ec7c82f 100644 --- a/gt/tools/package_setup/setup_view.py +++ b/gt/tools/package_setup/setup_view.py @@ -74,7 +74,7 @@ def __init__(self, parent=None, controller=None): self.setMinimumWidth(self.width()) self.setMinimumHeight(self.height()) self.center() - self.setWindowFlag(QtCore.Qt.Tool, True) # Window Stay On Top Modality + self.setWindowFlag(QtCore.Qt.Tool, True) # self.setWindowFlags(self.windowFlags() | QtCore.Qt.FramelessWindowHint) # Todo: Custom window border def center(self): diff --git a/gt/tools/path_manager/path_manager.py b/gt/tools/path_manager/path_manager.py index f651d1a4..0874cb6b 100644 --- a/gt/tools/path_manager/path_manager.py +++ b/gt/tools/path_manager/path_manager.py @@ -86,7 +86,7 @@ def __init__(self, parent=maya_main_window()): self.resize(self.width() + 250, 500) # Set Icon - self.setWindowIcon(QtGui.QIcon(resource_library.Icon.selection_manager)) + self.setWindowIcon(QtGui.QIcon(resource_library.Icon.tool_selection_manager)) # Setup Window Content and Signals self.create_widgets() diff --git a/gt/tools/renamer/renamer.py b/gt/tools/renamer/renamer.py index 798be767..218e1325 100644 --- a/gt/tools/renamer/renamer.py +++ b/gt/tools/renamer/renamer.py @@ -557,7 +557,7 @@ def start_renaming(operation): # Set Window Icon qw = OpenMayaUI.MQtUtil.findWindow(window_name) widget = wrapInstance(int(qw), QWidget) - icon = QIcon(resource_library.Icon.renamer) + icon = QIcon(resource_library.Icon.tool_renamer) widget.setWindowIcon(icon) diff --git a/gt/tools/render_calculator/render_calculator.py b/gt/tools/render_calculator/render_calculator.py index 41f5a0e6..2fce4a44 100644 --- a/gt/tools/render_calculator/render_calculator.py +++ b/gt/tools/render_calculator/render_calculator.py @@ -183,7 +183,7 @@ def _btn_get_current_timeline(*args): # Set Window Icon qw = OpenMayaUI.MQtUtil.findWindow(window_name) widget = wrapInstance(int(qw), QWidget) - icon = QIcon(resource_library.Icon.render_calculator) + icon = QIcon(resource_library.Icon.tool_render_calculator) widget.setWindowIcon(icon) _recalculate_time() diff --git a/gt/tools/render_checklist/render_checklist.py b/gt/tools/render_checklist/render_checklist.py index 63e7842f..c5b813fb 100644 --- a/gt/tools/render_checklist/render_checklist.py +++ b/gt/tools/render_checklist/render_checklist.py @@ -280,7 +280,7 @@ def update_gui_settings(): # Set Window Icon qw = OpenMayaUI.MQtUtil.findWindow(window_name) widget = wrapInstance(int(qw), QWidget) - icon = QIcon(resource_library.Icon.render_checklist) + icon = QIcon(resource_library.Icon.tool_render_checklist) widget.setWindowIcon(icon) # Main GUI Ends ========================================================== diff --git a/gt/tools/sample_tool/sample_view.py b/gt/tools/sample_tool/sample_view.py index f9e4ecd1..d3c17584 100644 --- a/gt/tools/sample_tool/sample_view.py +++ b/gt/tools/sample_tool/sample_view.py @@ -55,7 +55,7 @@ def __init__(self, parent=None, controller=None): self.setWindowFlags(self.windowFlags() | QtCore.Qt.WindowMaximizeButtonHint | QtCore.Qt.WindowMinimizeButtonHint) - self.setWindowIcon(QIcon(resource_library.Icon.cog_icon)) + self.setWindowIcon(QIcon(resource_library.Icon.misc_cog)) sample_stylesheet = resource_library.Stylesheet.dark_scroll_bar sample_stylesheet += resource_library.Stylesheet.maya_basic_dialog diff --git a/gt/tools/selection_manager/selection_manager.py b/gt/tools/selection_manager/selection_manager.py index db4724e4..d0aeb007 100644 --- a/gt/tools/selection_manager/selection_manager.py +++ b/gt/tools/selection_manager/selection_manager.py @@ -477,7 +477,7 @@ def update_stored_values_and_run(is_new_selection): # Set Window Icon qw = OpenMayaUI.MQtUtil.findWindow(window_name) widget = wrapInstance(int(qw), QWidget) - icon = QIcon(resource_library.Icon.selection_manager) + icon = QIcon(resource_library.Icon.tool_selection_manager) widget.setWindowIcon(icon) # Main GUI Ends Here ================================================================================= diff --git a/gt/tools/shape_curve_to_python/shape_curve_to_python.py b/gt/tools/shape_curve_to_python/shape_curve_to_python.py index 60e480ba..87cb46ce 100644 --- a/gt/tools/shape_curve_to_python/shape_curve_to_python.py +++ b/gt/tools/shape_curve_to_python/shape_curve_to_python.py @@ -174,7 +174,7 @@ def generate_python_curve(): # Set Window Icon qw = OpenMayaUI.MQtUtil.findWindow(window_name) widget = wrapInstance(int(qw), QWidget) - icon = QIcon(resource_library.Icon.crv_to_python) + icon = QIcon(resource_library.Icon.tool_crv_python) widget.setWindowIcon(icon) # Main GUI Ends Here ================================================================================= diff --git a/gt/tools/shape_extract_state/shape_extract_state.py b/gt/tools/shape_extract_state/shape_extract_state.py index b514864b..7a1268b6 100644 --- a/gt/tools/shape_extract_state/shape_extract_state.py +++ b/gt/tools/shape_extract_state/shape_extract_state.py @@ -173,7 +173,7 @@ def _btn_extract_python_curve_shape(): # Set Window Icon qw = OpenMayaUI.MQtUtil.findWindow(window_name) widget = wrapInstance(int(qw), QWidget) - icon = QIcon(resource_library.Icon.crv_state) + icon = QIcon(resource_library.Icon.tool_crv_extract_state) widget.setWindowIcon(icon) # Main GUI Ends Here ================================================================================= diff --git a/gt/tools/shape_text_to_curve/shape_text_to_curve.py b/gt/tools/shape_text_to_curve/shape_text_to_curve.py index db0b2c12..71c93b24 100644 --- a/gt/tools/shape_text_to_curve/shape_text_to_curve.py +++ b/gt/tools/shape_text_to_curve/shape_text_to_curve.py @@ -82,7 +82,7 @@ def build_gui_generate_text_curve(): # Set Window Icon qw = OpenMayaUI.MQtUtil.findWindow(window_name) widget = wrapInstance(int(qw), QWidget) - icon = QIcon(resource_library.Icon.crv_text) + icon = QIcon(resource_library.Icon.tool_crv_text) widget.setWindowIcon(icon) # Main GUI Ends Here ================================================================================= diff --git a/gt/tools/startup_booster/startup_booster.py b/gt/tools/startup_booster/startup_booster.py index e35f454a..35890107 100644 --- a/gt/tools/startup_booster/startup_booster.py +++ b/gt/tools/startup_booster/startup_booster.py @@ -790,7 +790,7 @@ def add_button_custom(text_field_data): # Set Window Icon qw = OpenMayaUI.MQtUtil.findWindow(window_gui_startup_booster) widget = wrapInstance(int(qw), QWidget) - icon = QIcon(resource_library.Icon.startup_booster) + icon = QIcon(resource_library.Icon.tool_startup_booster) widget.setWindowIcon(icon) # main dialog Ends Here ================================================================================= diff --git a/gt/tools/transfer_transforms/transfer_transforms.py b/gt/tools/transfer_transforms/transfer_transforms.py index ea796775..94eba5b5 100644 --- a/gt/tools/transfer_transforms/transfer_transforms.py +++ b/gt/tools/transfer_transforms/transfer_transforms.py @@ -482,7 +482,7 @@ def validate_import_export(operation): # Set Window Icon qw = OpenMayaUI.MQtUtil.findWindow(window_name) widget = wrapInstance(int(qw), QWidget) - icon = QIcon(resource_library.Icon.transfer_transforms) + icon = QIcon(resource_library.Icon.tool_transfer_transforms) widget.setWindowIcon(icon) # Deselect Text Field diff --git a/gt/tools/transfer_uvs/transfer_uvs.py b/gt/tools/transfer_uvs/transfer_uvs.py index 47330aa4..0e88af37 100644 --- a/gt/tools/transfer_uvs/transfer_uvs.py +++ b/gt/tools/transfer_uvs/transfer_uvs.py @@ -74,7 +74,7 @@ def build_gui_uv_transfer(): # Set Window Icon qw = OpenMayaUI.MQtUtil.findWindow(window_gui_uv_transfer) widget = wrapInstance(int(qw), QWidget) - icon = QIcon(resource_library.Icon.mod_transfer_uvs) + icon = QIcon(resource_library.Icon.tool_transfer_uvs) widget.setWindowIcon(icon) diff --git a/gt/tools/world_space_baker/world_space_baker.py b/gt/tools/world_space_baker/world_space_baker.py index bbd788ad..583f3f0c 100644 --- a/gt/tools/world_space_baker/world_space_baker.py +++ b/gt/tools/world_space_baker/world_space_baker.py @@ -250,7 +250,7 @@ def validate_operation(operation='extract'): # Set Window Icon qw = OpenMayaUI.MQtUtil.findWindow(window_name) widget = wrapInstance(int(qw), QWidget) - icon = QIcon(resource_library.Icon.world_space_baker) + icon = QIcon(resource_library.Icon.tool_world_space_baker) widget.setWindowIcon(icon) # Remove the focus from the textfield and give it to the window diff --git a/gt/ui/resource_library.py b/gt/ui/resource_library.py index 0e68e080..2354707d 100644 --- a/gt/ui/resource_library.py +++ b/gt/ui/resource_library.py @@ -235,46 +235,47 @@ def __init__(self): root_utilities = get_icon_path(r"root_utilities.svg") root_miscellaneous = get_icon_path(r"root_miscellaneous.svg") root_help = get_icon_path(r"root_help.svg") - # Tools - maya_to_discord_icon = get_icon_path(r"maya_to_discord.svg") - fspy_importer = get_icon_path(r"fspy_importer.svg") - render_calculator = get_icon_path(r"render_calculator.svg") - startup_booster = get_icon_path(r"startup_booster.svg") - renamer = get_icon_path(r"renamer.svg") - outliner_sorter = get_icon_path(r"outliner_sorter.svg") - selection_manager = get_icon_path(r"selection_manager.svg") - path_manager = get_icon_path(r"path_manager.svg") - color_manager = get_icon_path(r"color_manager.svg") - transfer_transforms = get_icon_path(r"transfer_transforms.svg") - world_space_baker = get_icon_path(r"world_space_baker.svg") - attributes_to_python = get_icon_path(r"attributes_to_python.svg") - render_checklist = get_icon_path(r"render_checklist.svg") + # General + tool_renamer = get_icon_path(r"tool_renamer.svg") + tool_outliner_sorter = get_icon_path(r"tool_outliner_sorter.svg") + tool_selection_manager = get_icon_path(r"tool_selection_manager.svg") + tool_path_manager = get_icon_path(r"tool_path_manager.svg") + tool_color_manager = get_icon_path(r"tool_color_manager.svg") + tool_transfer_transforms = get_icon_path(r"tool_transfer_transforms.svg") + tool_world_space_baker = get_icon_path(r"tool_world_space_baker.svg") + tool_attributes_to_python = get_icon_path(r"tool_attributes_to_python.svg") + tool_render_checklist = get_icon_path(r"tool_render_checklist.svg") # Curves - crv_to_python = get_icon_path(r"crv_to_python.svg") - crv_text = get_icon_path(r"crv_text.svg") - crv_state = get_icon_path(r"crv_state.svg") - crv_combine = get_icon_path(r"crv_combine.svg") - crv_separate = get_icon_path(r"crv_separate.svg") + tool_crv_python = get_icon_path(r"tool_crv_python.svg") + tool_crv_text = get_icon_path(r"tool_crv_text.svg") + tool_crv_extract_state = get_icon_path(r"tool_crv_extract_state.svg") + util_crv_combine = get_icon_path(r"util_crv_combine.svg") + util_crv_separate = get_icon_path(r"util_crv_separate.svg") # Modeling - mod_transfer_uvs = get_icon_path(r"mod_transfer_uvs.svg") - mod_sphere_types = get_icon_path(r"mod_sphere_types.svg") - mod_load_udims = get_icon_path(r"mod_load_udims.svg") - mod_bif_to_mesh = get_icon_path(r"mod_bif_to_mesh.svg") - mod_copy_material = get_icon_path(r"mod_copy_material.svg") - mod_paste_material = get_icon_path(r"mod_paste_material.svg") + tool_transfer_uvs = get_icon_path(r"tool_transfer_uvs.svg") + tool_sphere_types = get_icon_path(r"tool_sphere_types.svg") + util_mod_load_udims = get_icon_path(r"util_mod_load_udims.svg") + util_mod_bif_to_mesh = get_icon_path(r"util_mod_bif_to_mesh.svg") + util_mod_copy_material = get_icon_path(r"util_mod_copy_material.svg") + util_mod_paste_material = get_icon_path(r"util_mod_paste_material.svg") # Rigging - rig_auto_rigger = get_icon_path(r"rig_auto_rigger.svg") - # Help - rebuild_menu = get_icon_path(r"rebuild_menu.svg") - check_for_updates = get_icon_path(r"check_for_updates.svg") - about = get_icon_path(r"about.svg") - current_version = get_icon_path(r"current_version.svg") + tool_auto_rigger = get_icon_path(r"tool_auto_rigger.svg") # Misc + tool_maya_to_discord = get_icon_path(r"tool_maya_to_discord.svg") + tool_fspy_importer = get_icon_path(r"tool_fspy_importer.svg") + tool_render_calculator = get_icon_path(r"tool_render_calculator.svg") + tool_startup_booster = get_icon_path(r"tool_startup_booster.svg") + # Help + misc_rebuild_menu = get_icon_path(r"misc_rebuild_menu.svg") + tool_check_for_updates = get_icon_path(r"tool_check_for_updates.svg") + misc_about = get_icon_path(r"misc_about.svg") + misc_current_version = get_icon_path(r"misc_current_version.svg") + # Other + package_logo = get_icon_path(r"package_logo.png") + package_icon = get_icon_path(r"package_icon.svg") abr_create_proxy = get_icon_path(r"abr_create_proxy.svg") abr_create_rig = get_icon_path(r"abr_create_rig.svg") - package_logo = get_icon_path(r"package_logo.png") - package_icon = get_icon_path(r"package_icon.png") - cog_icon = get_icon_path(r"cog.svg") + misc_cog = get_icon_path(r"misc_cog.svg") scrollbar_up = get_icon_path(r"scrollbar_up.svg") scrollbar_down = get_icon_path(r"scrollbar_down.svg") setup_install = get_icon_path(r"setup_install.svg") @@ -480,6 +481,6 @@ def __init__(self): if __name__ == "__main__": from pprint import pprint out = None - out = Stylesheet.dark_progress_bar + out = Icon.package_icon pprint(out) diff --git a/gt/ui/resources/icons/about.svg b/gt/ui/resources/icons/misc_about.svg similarity index 100% rename from gt/ui/resources/icons/about.svg rename to gt/ui/resources/icons/misc_about.svg diff --git a/gt/ui/resources/icons/cog.svg b/gt/ui/resources/icons/misc_cog.svg similarity index 100% rename from gt/ui/resources/icons/cog.svg rename to gt/ui/resources/icons/misc_cog.svg diff --git a/gt/ui/resources/icons/current_version.svg b/gt/ui/resources/icons/misc_current_version.svg similarity index 100% rename from gt/ui/resources/icons/current_version.svg rename to gt/ui/resources/icons/misc_current_version.svg diff --git a/gt/ui/resources/icons/rebuild_menu.svg b/gt/ui/resources/icons/misc_rebuild_menu.svg similarity index 100% rename from gt/ui/resources/icons/rebuild_menu.svg rename to gt/ui/resources/icons/misc_rebuild_menu.svg diff --git a/gt/ui/resources/icons/package_icon.png b/gt/ui/resources/icons/package_icon.png deleted file mode 100644 index a9e9fa018652601b9d81e3f95f15e439f35ca7fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74703 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 z 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 z + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/gt/ui/resources/icons/attributes_to_python.svg b/gt/ui/resources/icons/tool_attributes_to_python.svg similarity index 100% rename from gt/ui/resources/icons/attributes_to_python.svg rename to gt/ui/resources/icons/tool_attributes_to_python.svg diff --git a/gt/ui/resources/icons/rig_auto_rigger.svg b/gt/ui/resources/icons/tool_auto_rigger.svg similarity index 100% rename from gt/ui/resources/icons/rig_auto_rigger.svg rename to gt/ui/resources/icons/tool_auto_rigger.svg diff --git a/gt/ui/resources/icons/check_for_updates.svg b/gt/ui/resources/icons/tool_check_for_updates.svg similarity index 100% rename from gt/ui/resources/icons/check_for_updates.svg rename to gt/ui/resources/icons/tool_check_for_updates.svg diff --git a/gt/ui/resources/icons/color_manager.svg b/gt/ui/resources/icons/tool_color_manager.svg similarity index 100% rename from gt/ui/resources/icons/color_manager.svg rename to gt/ui/resources/icons/tool_color_manager.svg diff --git a/gt/ui/resources/icons/crv_state.svg b/gt/ui/resources/icons/tool_crv_extract_state.svg similarity index 100% rename from gt/ui/resources/icons/crv_state.svg rename to gt/ui/resources/icons/tool_crv_extract_state.svg diff --git a/gt/ui/resources/icons/crv_to_python.svg b/gt/ui/resources/icons/tool_crv_python.svg similarity index 100% rename from gt/ui/resources/icons/crv_to_python.svg rename to gt/ui/resources/icons/tool_crv_python.svg diff --git a/gt/ui/resources/icons/crv_text.svg b/gt/ui/resources/icons/tool_crv_text.svg similarity index 100% rename from gt/ui/resources/icons/crv_text.svg rename to gt/ui/resources/icons/tool_crv_text.svg diff --git a/gt/ui/resources/icons/fspy_importer.svg b/gt/ui/resources/icons/tool_fspy_importer.svg similarity index 100% rename from gt/ui/resources/icons/fspy_importer.svg rename to gt/ui/resources/icons/tool_fspy_importer.svg diff --git a/gt/ui/resources/icons/maya_to_discord.svg b/gt/ui/resources/icons/tool_maya_to_discord.svg similarity index 100% rename from gt/ui/resources/icons/maya_to_discord.svg rename to gt/ui/resources/icons/tool_maya_to_discord.svg diff --git a/gt/ui/resources/icons/outliner_sorter.svg b/gt/ui/resources/icons/tool_outliner_sorter.svg similarity index 100% rename from gt/ui/resources/icons/outliner_sorter.svg rename to gt/ui/resources/icons/tool_outliner_sorter.svg diff --git a/gt/ui/resources/icons/path_manager.svg b/gt/ui/resources/icons/tool_path_manager.svg similarity index 100% rename from gt/ui/resources/icons/path_manager.svg rename to gt/ui/resources/icons/tool_path_manager.svg diff --git a/gt/ui/resources/icons/renamer.svg b/gt/ui/resources/icons/tool_renamer.svg similarity index 100% rename from gt/ui/resources/icons/renamer.svg rename to gt/ui/resources/icons/tool_renamer.svg diff --git a/gt/ui/resources/icons/render_calculator.svg b/gt/ui/resources/icons/tool_render_calculator.svg similarity index 100% rename from gt/ui/resources/icons/render_calculator.svg rename to gt/ui/resources/icons/tool_render_calculator.svg diff --git a/gt/ui/resources/icons/render_checklist.svg b/gt/ui/resources/icons/tool_render_checklist.svg similarity index 100% rename from gt/ui/resources/icons/render_checklist.svg rename to gt/ui/resources/icons/tool_render_checklist.svg diff --git a/gt/ui/resources/icons/selection_manager.svg b/gt/ui/resources/icons/tool_selection_manager.svg similarity index 100% rename from gt/ui/resources/icons/selection_manager.svg rename to gt/ui/resources/icons/tool_selection_manager.svg diff --git a/gt/ui/resources/icons/mod_sphere_types.svg b/gt/ui/resources/icons/tool_sphere_types.svg similarity index 100% rename from gt/ui/resources/icons/mod_sphere_types.svg rename to gt/ui/resources/icons/tool_sphere_types.svg diff --git a/gt/ui/resources/icons/startup_booster.svg b/gt/ui/resources/icons/tool_startup_booster.svg similarity index 100% rename from gt/ui/resources/icons/startup_booster.svg rename to gt/ui/resources/icons/tool_startup_booster.svg diff --git a/gt/ui/resources/icons/transfer_transforms.svg b/gt/ui/resources/icons/tool_transfer_transforms.svg similarity index 100% rename from gt/ui/resources/icons/transfer_transforms.svg rename to gt/ui/resources/icons/tool_transfer_transforms.svg diff --git a/gt/ui/resources/icons/mod_transfer_uvs.svg b/gt/ui/resources/icons/tool_transfer_uvs.svg similarity index 100% rename from gt/ui/resources/icons/mod_transfer_uvs.svg rename to gt/ui/resources/icons/tool_transfer_uvs.svg diff --git a/gt/ui/resources/icons/world_space_baker.svg b/gt/ui/resources/icons/tool_world_space_baker.svg similarity index 100% rename from gt/ui/resources/icons/world_space_baker.svg rename to gt/ui/resources/icons/tool_world_space_baker.svg diff --git a/gt/ui/resources/icons/crv_combine.svg b/gt/ui/resources/icons/util_crv_combine.svg similarity index 100% rename from gt/ui/resources/icons/crv_combine.svg rename to gt/ui/resources/icons/util_crv_combine.svg diff --git a/gt/ui/resources/icons/crv_separate.svg b/gt/ui/resources/icons/util_crv_separate.svg similarity index 100% rename from gt/ui/resources/icons/crv_separate.svg rename to gt/ui/resources/icons/util_crv_separate.svg diff --git a/gt/ui/resources/icons/mod_bif_to_mesh.svg b/gt/ui/resources/icons/util_mod_bif_to_mesh.svg similarity index 100% rename from gt/ui/resources/icons/mod_bif_to_mesh.svg rename to gt/ui/resources/icons/util_mod_bif_to_mesh.svg diff --git a/gt/ui/resources/icons/mod_copy_material.svg b/gt/ui/resources/icons/util_mod_copy_material.svg similarity index 100% rename from gt/ui/resources/icons/mod_copy_material.svg rename to gt/ui/resources/icons/util_mod_copy_material.svg diff --git a/gt/ui/resources/icons/mod_load_udims.svg b/gt/ui/resources/icons/util_mod_load_udims.svg similarity index 100% rename from gt/ui/resources/icons/mod_load_udims.svg rename to gt/ui/resources/icons/util_mod_load_udims.svg diff --git a/gt/ui/resources/icons/mod_paste_material.svg b/gt/ui/resources/icons/util_mod_paste_material.svg similarity index 100% rename from gt/ui/resources/icons/mod_paste_material.svg rename to gt/ui/resources/icons/util_mod_paste_material.svg From 16868c40c6108fb26e3533490bda7b31b0a44a22 Mon Sep 17 00:00:00 2001 From: Guilherme Trevisan Date: Wed, 26 Jul 2023 18:06:19 -0700 Subject: [PATCH 02/28] Updated tool order --- gt/tools/package_setup/gt_tools_maya_menu.py | 144 +++++++++---------- 1 file changed, 72 insertions(+), 72 deletions(-) diff --git a/gt/tools/package_setup/gt_tools_maya_menu.py b/gt/tools/package_setup/gt_tools_maya_menu.py index 3522df98..5784af43 100644 --- a/gt/tools/package_setup/gt_tools_maya_menu.py +++ b/gt/tools/package_setup/gt_tools_maya_menu.py @@ -94,26 +94,35 @@ def load_menu(*args): menu.add_sub_menu("General", icon=resource_library.Icon.root_general, parent_to_root=True) - menu.add_menu_item(label='Renamer', - command=partial(_open_named_tool, "renamer"), - tooltip='Script for renaming multiple objects.', - icon=resource_library.Icon.tool_renamer) + menu.add_menu_item(label='Attributes to Python', + command=partial(_open_named_tool, "attributes_to_python"), + tooltip='Converts attributes into Python code. TRS Channels or User-defined.', + icon=resource_library.Icon.tool_attributes_to_python) + menu.add_menu_item(label='Color Manager', + command=partial(_open_named_tool, "color_manager"), + tooltip='A way to quickly change colors of objects and objects names (outliner).', + icon=resource_library.Icon.tool_color_manager) menu.add_menu_item(label='Outliner Sorter', command=partial(_open_named_tool, "outliner_sorter"), tooltip='Manages the order of the elements in the outliner.', icon=resource_library.Icon.tool_outliner_sorter) - menu.add_menu_item(label='Selection Manager', - command=partial(_open_named_tool, "selection_manager"), - tooltip='Manages or creates custom selections.', - icon=resource_library.Icon.tool_selection_manager) menu.add_menu_item(label='Path Manager', command=partial(_open_named_tool, "path_manager"), tooltip='A script for managing and repairing the path of many nodes.', icon=resource_library.Icon.tool_path_manager) - menu.add_menu_item(label='Color Manager', - command=partial(_open_named_tool, "color_manager"), - tooltip='A way to quickly change colors of objects and objects names (outliner).', - icon=resource_library.Icon.tool_color_manager) + menu.add_menu_item(label='Renamer', + command=partial(_open_named_tool, "renamer"), + tooltip='Script for renaming multiple objects.', + icon=resource_library.Icon.tool_renamer) + menu.add_menu_item(label='Render Checklist', + command=partial(_open_named_tool, "render_checklist"), + tooltip='Performs a series of checks to detect common issues that are often accidentally ' + 'ignored/unnoticed.', + icon=resource_library.Icon.tool_render_checklist) + menu.add_menu_item(label='Selection Manager', + command=partial(_open_named_tool, "selection_manager"), + tooltip='Manages or creates custom selections.', + icon=resource_library.Icon.tool_selection_manager) menu.add_menu_item(label='Transfer Transforms', command=partial(_open_named_tool, "transfer_transforms"), tooltip='Script for quickly transferring Translate, Rotate, and Scale between objects.', @@ -122,28 +131,19 @@ def load_menu(*args): command=partial(_open_named_tool, "world_space_baker"), tooltip='Script for getting and setting translate and rotate world space data.', icon=resource_library.Icon.tool_world_space_baker) - menu.add_menu_item(label='Attributes to Python', - command=partial(_open_named_tool, "attributes_to_python"), - tooltip='Converts attributes into Python code. TRS Channels or User-defined.', - icon=resource_library.Icon.tool_attributes_to_python) - menu.add_menu_item(label='Render Checklist', - command=partial(_open_named_tool, "render_checklist"), - tooltip='Performs a series of checks to detect common issues that are often accidentally ' - 'ignored/unnoticed.', - icon=resource_library.Icon.tool_render_checklist) # ------------------------------------ Curves ------------------------------------ menu.add_sub_menu("Curves", icon=resource_library.Icon.root_curves, parent_to_root=True) - menu.add_menu_item(label='Extract Python Curve', - command=partial(_open_named_tool, "shape_curve_to_python"), - tooltip='Generates the python code necessary to create a selected curve.', - icon=resource_library.Icon.tool_crv_python) menu.add_menu_item(label='Generate Text Curve', command=partial(_open_named_tool, "shape_text_to_curve"), tooltip='Generates a single curve containing all shapes necessary to produce a word/text.', icon=resource_library.Icon.tool_crv_text) + menu.add_menu_item(label='Extract Python Curve', + command=partial(_open_named_tool, "shape_curve_to_python"), + tooltip='Generates the python code necessary to create a selected curve.', + icon=resource_library.Icon.tool_crv_python) menu.add_menu_item(label='Extract Curve State', command=partial(_open_named_tool, "shape_extract_state"), tooltip='Generates the python command necessary to reshape curves back to their stored state.', @@ -214,30 +214,14 @@ def load_menu(*args): icon='QR_QuickRigTool.png') menu.add_divider() # General Rigging Tools +++++++++++++++++++++++++++++++++ - menu.add_menu_item(label='Extract Influence Joints', - command=partial(_open_named_tool, "extract_influence_joints"), - tooltip='Generate Python code used to select influence (bound) joints.', - icon='smoothSkin.png') + menu.add_menu_item(label='Add Sine Attributes', + command=partial(_open_named_tool, "sine_attributes"), + tooltip='Create Sine function without using third-party plugins or expressions.', + icon='sineCurveProfile.png') menu.add_menu_item(label='Connect Attributes', command=partial(_open_named_tool, "connect_attributes"), tooltip='Automated solution for connecting multiple attributes.', icon='hsRearrange.png') - menu.add_menu_item(label='Morphing Attributes', - command=partial(_open_named_tool, "morphing_attributes"), - tooltip='Creates attributes to drive selected blend shapes.', - icon='blendShape.png') - menu.add_menu_item(label='Morphing Utilities', - command=partial(_open_named_tool, "morphing_utilities"), - tooltip='Morphing utilities (Blend Shapes).', - icon='falloff_blend.png') - menu.add_menu_item(label='Mirror Cluster Tool', - command=partial(_open_named_tool, "mirror_cluster_tool"), - tooltip='Automated solution for mirroring clusters.', - icon='cluster.png') - menu.add_menu_item(label='Generate In-Between', - command=partial(_open_named_tool, "generate_inbetween"), - tooltip='Generates inbetween transforms that can be used as layers for rigging/animation.', - icon='hsGraphMaterial.png') menu.add_menu_item(label='Create Auto FK', command=partial(_open_named_tool, "create_auto_fk"), tooltip='Automated solution for created an FK control curve.', @@ -246,14 +230,30 @@ def load_menu(*args): command=partial(_open_named_tool, "create_testing_keys"), tooltip='Automated solution for creating testing keyframes.', icon='setMaxInfluence.png') + menu.add_menu_item(label='Extract Influence Joints', + command=partial(_open_named_tool, "extract_influence_joints"), + tooltip='Generate Python code used to select influence (bound) joints.', + icon='smoothSkin.png') + menu.add_menu_item(label='Generate In-Between', + command=partial(_open_named_tool, "generate_inbetween"), + tooltip='Generates inbetween transforms that can be used as layers for rigging/animation.', + icon='hsGraphMaterial.png') menu.add_menu_item(label='Make IK Stretchy', command=partial(_open_named_tool, "make_ik_stretchy"), tooltip='Automated solution for making an IK system stretchy.', icon='ikSCsolver.svg') - menu.add_menu_item(label='Add Sine Attributes', - command=partial(_open_named_tool, "sine_attributes"), - tooltip='Create Sine function without using third-party plugins or expressions.', - icon='sineCurveProfile.png') + menu.add_menu_item(label='Mirror Cluster Tool', + command=partial(_open_named_tool, "mirror_cluster_tool"), + tooltip='Automated solution for mirroring clusters.', + icon='cluster.png') + menu.add_menu_item(label='Morphing Attributes', + command=partial(_open_named_tool, "morphing_attributes"), + tooltip='Creates attributes to drive selected blend shapes.', + icon='blendShape.png') + menu.add_menu_item(label='Morphing Utilities', + command=partial(_open_named_tool, "morphing_utilities"), + tooltip='Morphing utilities (Blend Shapes).', + icon='falloff_blend.png') # ------------------------------------ Utilities ------------------------------------ menu.add_sub_menu("Utilities", @@ -269,21 +269,24 @@ def load_menu(*args): icon='openLoadGeneric.png') menu.add_divider() # General +++++++++++++++++++++++++++++++++ + menu.add_menu_item(label='Complete HUD Toggle', + command=partial(_run_utility, "display_utils", "toggle_full_hud"), + tooltip='Toggles most of the Heads-Up Display (HUD) options according to the state of ' + 'the majority of them. (Keeps default elements intact when toggling it off)', + icon='channelBox.png') menu.add_menu_item(label='Resource Browser', command=partial(_run_utility, "misc_utils", "open_resource_browser"), tooltip="Opens Maya's Resource Browser. " "A good way to find icons or elements you may want to use.", icon='bsd-head.png') - menu.add_menu_item(label='Unlock Default Channels', - command=partial(_run_utility, "attribute_utils", "unlock_default_channels"), - tooltip='Unlocks the default channels of the selected objects. ' - '(Default channels : Translate, Rotate, Scale and Visibility)', - icon='Lock_OFF_grey.png') - menu.add_menu_item(label='Unhide Default Channels', - command=partial(_run_utility, "attribute_utils", "unhide_default_channels"), - tooltip='Un-hides the default channels of the selected objects. ' - '(Default channels : Translate, Rotate, Scale and Visibility)', - icon='RS_filter_list.png') + menu.add_menu_item(label='Select Non-Unique Objects', + command=partial(_run_utility, "selection_utils", "select_non_unique_objects"), + tooltip='Selects all objects with the same short name. (non-unique objects)', + icon='gotoLine.png') + menu.add_menu_item(label='Set Joint Name as Label', + command=partial(_run_utility, "display_utils", "set_joint_name_as_label"), + tooltip='Set the label of the selected joints to be the same as their short name.', + icon='falloff_transfer.png') menu.add_menu_item(label='Uniform LRA Toggle', command=partial(_run_utility, "display_utils", "toggle_uniform_lra"), tooltip='Makes the visibility of the Local Rotation Axis uniform among the selected ' @@ -294,19 +297,16 @@ def load_menu(*args): tooltip='Makes the visibility of the joint labels uniform according to the current ' 'state of the majority of them.', icon='QR_xRay.png') - menu.add_menu_item(label='Set Joint Name as Label', - command=partial(_run_utility, "display_utils", "set_joint_name_as_label"), - tooltip='Set the label of the selected joints to be the same as their short name.', - icon='falloff_transfer.png') - menu.add_menu_item(label='Select Non-Unique Objects', - command=partial(_run_utility, "selection_utils", "select_non_unique_objects"), - tooltip='Selects all objects with the same short name. (non-unique objects)', - icon='gotoLine.png') - menu.add_menu_item(label='Complete HUD Toggle', - command=partial(_run_utility, "display_utils", "toggle_full_hud"), - tooltip='Toggles most of the Heads-Up Display (HUD) options according to the state of ' - 'the majority of them. (Keeps default elements intact when toggling it off)', - icon='channelBox.png') + menu.add_menu_item(label='Unhide Default Channels', + command=partial(_run_utility, "attribute_utils", "unhide_default_channels"), + tooltip='Un-hides the default channels of the selected objects. ' + '(Default channels : Translate, Rotate, Scale and Visibility)', + icon='RS_filter_list.png') + menu.add_menu_item(label='Unlock Default Channels', + command=partial(_run_utility, "attribute_utils", "unlock_default_channels"), + tooltip='Unlocks the default channels of the selected objects. ' + '(Default channels : Translate, Rotate, Scale and Visibility)', + icon='Lock_OFF_grey.png') menu.add_divider() # Convert Section +++++++++++++++++++++++++++++++++ menu.add_menu_item(label='Convert Joints to Mesh', From a97d0c27208c2105e35dcd12dbe64ab47d712887 Mon Sep 17 00:00:00 2001 From: Guilherme Trevisan Date: Wed, 26 Jul 2023 18:06:30 -0700 Subject: [PATCH 03/28] Updated package logo --- gt/ui/resources/icons/package_logo.png | Bin 150884 -> 0 bytes gt/ui/resources/icons/package_logo.svg | 112 +++++++++++++++++++++++++ 2 files changed, 112 insertions(+) delete mode 100644 gt/ui/resources/icons/package_logo.png create mode 100644 gt/ui/resources/icons/package_logo.svg diff --git a/gt/ui/resources/icons/package_logo.png b/gt/ui/resources/icons/package_logo.png deleted file mode 100644 index f691b68dc0bb59fc05e9e756609e7b46aa66d19d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 150884 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

AAU+ZlK+>1=rn{QochrvK`m(|@*k&(#Pa>L z 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

O%u!1&C?=!swX&Dl@9{97MrS>D72Iv}grhi?%2 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 + + + + + + From d1d2407fd62ed7a7d0baca043c2a0c37a15f3087 Mon Sep 17 00:00:00 2001 From: Guilherme Trevisan Date: Wed, 26 Jul 2023 18:06:45 -0700 Subject: [PATCH 04/28] Added square invisible background --- .../resources/icons/tool_maya_to_discord.svg | 81 ++++++++++--------- 1 file changed, 41 insertions(+), 40 deletions(-) diff --git a/gt/ui/resources/icons/tool_maya_to_discord.svg b/gt/ui/resources/icons/tool_maya_to_discord.svg index 67715980..24afdd1b 100644 --- a/gt/ui/resources/icons/tool_maya_to_discord.svg +++ b/gt/ui/resources/icons/tool_maya_to_discord.svg @@ -1,52 +1,53 @@ - + - + viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> + + - - + + C288.276,283.498,305.481,302.47,326.421,302.47 M185.577,302.47c21.307,0,37.778-18.973,38.145-42.313 + c0.367-23.341-16.772-42.48-38.212-42.48c-21.44,0-38.112,19.139-38.112,42.48C147.399,283.498,164.671,302.47,185.577,302.47 + M196.22,63.435c-1.116,0-2.241,0.093-3.367,0.286c-31.921,5.443-63.038,15.033-92.485,28.503 + c-3.34,1.528-6.194,3.945-8.251,6.988c-53.288,78.841-74.94,161.785-66.193,253.572c0.539,5.654,3.457,10.813,8.025,14.188 + c34.346,25.376,72.483,44.522,113.352,56.905c1.914,0.58,3.867,0.861,5.798,0.861c6.214,0,12.211-2.902,16.052-8.068 + c8.588-11.551,16.327-23.848,23.036-36.599c20.9,5.041,42.395,7.636,63.813,7.636c21.391,0,42.862-2.589,63.737-7.618 + c6.708,12.757,14.455,25.054,23.058,36.598c3.841,5.153,9.832,8.05,16.038,8.05c1.923,0,3.865-0.278,5.772-0.853 + c40.917-12.337,79.087-31.476,113.45-56.884c4.559-3.371,7.473-8.518,8.017-14.162c4.512-46.792,0.87-92.34-10.823-135.378 + c-11.102-40.863-29.807-80.701-55.596-118.407c-2.051-2.999-4.88-5.382-8.183-6.894c-29.43-13.474-60.535-23.044-92.45-28.443 + c-1.117-0.189-2.235-0.281-3.342-0.281c-7.153,0-13.874,3.845-17.449,10.237c-1.989,3.555-3.903,7.176-5.732,10.841 + c-12.141-1.289-24.382-1.94-36.549-1.94c-12.168,0-24.408,0.651-36.55,1.94c-1.828-3.664-3.741-7.283-5.728-10.837 + C210.096,67.282,203.372,63.435,196.22,63.435L196.22,63.435z M326.421,282.47c-9.836,0-18.145-10.218-18.145-22.313 + c0-12.395,8.14-22.48,18.145-22.48c5.489,0,9.385,2.787,11.686,5.125c4.188,4.255,6.531,10.466,6.428,17.041 + C344.336,272.531,336.379,282.47,326.421,282.47L326.421,282.47z M185.577,282.47c-9.854,0-18.179-10.218-18.179-22.313 + c0-12.395,8.125-22.48,18.112-22.48c5.516,0,9.447,2.817,11.774,5.181c4.196,4.262,6.543,10.453,6.441,16.985 + C203.526,272.531,195.554,282.47,185.577,282.47L185.577,282.47z"/> From f2cd5f21b67bbb0de818fa9ec8c739431a518728 Mon Sep 17 00:00:00 2001 From: Guilherme Trevisan Date: Wed, 26 Jul 2023 18:06:54 -0700 Subject: [PATCH 05/28] Updated package logo --- gt/ui/resource_library.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gt/ui/resource_library.py b/gt/ui/resource_library.py index 2354707d..7b0a615b 100644 --- a/gt/ui/resource_library.py +++ b/gt/ui/resource_library.py @@ -266,12 +266,12 @@ def __init__(self): tool_render_calculator = get_icon_path(r"tool_render_calculator.svg") tool_startup_booster = get_icon_path(r"tool_startup_booster.svg") # Help - misc_rebuild_menu = get_icon_path(r"misc_rebuild_menu.svg") tool_check_for_updates = get_icon_path(r"tool_check_for_updates.svg") + misc_rebuild_menu = get_icon_path(r"misc_rebuild_menu.svg") misc_about = get_icon_path(r"misc_about.svg") misc_current_version = get_icon_path(r"misc_current_version.svg") # Other - package_logo = get_icon_path(r"package_logo.png") + package_logo = get_icon_path(r"package_logo.svg") package_icon = get_icon_path(r"package_icon.svg") abr_create_proxy = get_icon_path(r"abr_create_proxy.svg") abr_create_rig = get_icon_path(r"abr_create_rig.svg") From 4d169145431e2535997390f15d7eb74a009e81a4 Mon Sep 17 00:00:00 2001 From: Guilherme Trevisan Date: Wed, 26 Jul 2023 19:34:03 -0700 Subject: [PATCH 06/28] Created rig interface icon --- gt/tools/package_setup/gt_tools_maya_menu.py | 2 +- gt/ui/resource_library.py | 1 + gt/ui/resources/icons/tool_rig_interface.svg | 158 +++++++++++++++++++ 3 files changed, 160 insertions(+), 1 deletion(-) create mode 100644 gt/ui/resources/icons/tool_rig_interface.svg diff --git a/gt/tools/package_setup/gt_tools_maya_menu.py b/gt/tools/package_setup/gt_tools_maya_menu.py index 5784af43..ac8c0c48 100644 --- a/gt/tools/package_setup/gt_tools_maya_menu.py +++ b/gt/tools/package_setup/gt_tools_maya_menu.py @@ -203,7 +203,7 @@ def load_menu(*args): menu.add_menu_item(label='Biped Rig Interface', command=partial(_open_named_tool, "auto_rigger", "launch_biped_rig_interface"), tooltip='Custom Rig Interface for GT Biped Auto Rigger.', - icon='animateSnapshot.png') + icon=resource_library.Icon.tool_rig_interface) menu.add_menu_item(label='Retarget Assistant', command=partial(_open_named_tool, "auto_rigger", "launch_retarget_assistant"), tooltip='Script with HumanIK patches.', diff --git a/gt/ui/resource_library.py b/gt/ui/resource_library.py index 7b0a615b..ec09db35 100644 --- a/gt/ui/resource_library.py +++ b/gt/ui/resource_library.py @@ -260,6 +260,7 @@ def __init__(self): util_mod_paste_material = get_icon_path(r"util_mod_paste_material.svg") # Rigging tool_auto_rigger = get_icon_path(r"tool_auto_rigger.svg") + tool_rig_interface = get_icon_path(r"tool_rig_interface.svg") # Misc tool_maya_to_discord = get_icon_path(r"tool_maya_to_discord.svg") tool_fspy_importer = get_icon_path(r"tool_fspy_importer.svg") diff --git a/gt/ui/resources/icons/tool_rig_interface.svg b/gt/ui/resources/icons/tool_rig_interface.svg new file mode 100644 index 00000000..7ca386f1 --- /dev/null +++ b/gt/ui/resources/icons/tool_rig_interface.svg @@ -0,0 +1,158 @@ + + + + + + + + + + + + + + + + + + + + + + From 1c3891bb3fe1f1e5fdd60c0cd5e33a66214dbe35 Mon Sep 17 00:00:00 2001 From: Guilherme Trevisan Date: Thu, 27 Jul 2023 09:42:00 -0700 Subject: [PATCH 07/28] Created rig interface icon --- gt/tools/package_setup/gt_tools_maya_menu.py | 4 ++-- gt/ui/resource_library.py | 2 ++ gt/ui/resources/icons/tool_rig_interface.svg | 10 +++++----- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/gt/tools/package_setup/gt_tools_maya_menu.py b/gt/tools/package_setup/gt_tools_maya_menu.py index ac8c0c48..a3c1dd56 100644 --- a/gt/tools/package_setup/gt_tools_maya_menu.py +++ b/gt/tools/package_setup/gt_tools_maya_menu.py @@ -207,11 +207,11 @@ def load_menu(*args): menu.add_menu_item(label='Retarget Assistant', command=partial(_open_named_tool, "auto_rigger", "launch_retarget_assistant"), tooltip='Script with HumanIK patches.', - icon='p-add.png') + icon=resource_library.Icon.tool_retarget_assistant) menu.add_menu_item(label='Game FBX Exporter', command=partial(_open_named_tool, "auto_rigger", "launch_game_exporter"), tooltip='Automated solution for exporting real-time FBX files.', - icon='QR_QuickRigTool.png') + icon=resource_library.Icon.tool_game_fbx_exporter) menu.add_divider() # General Rigging Tools +++++++++++++++++++++++++++++++++ menu.add_menu_item(label='Add Sine Attributes', diff --git a/gt/ui/resource_library.py b/gt/ui/resource_library.py index ec09db35..636f3950 100644 --- a/gt/ui/resource_library.py +++ b/gt/ui/resource_library.py @@ -261,6 +261,8 @@ def __init__(self): # Rigging tool_auto_rigger = get_icon_path(r"tool_auto_rigger.svg") tool_rig_interface = get_icon_path(r"tool_rig_interface.svg") + tool_retarget_assistant = get_icon_path(r"tool_retarget_assistant.svg") + tool_game_fbx_exporter = get_icon_path(r"tool_game_fbx_exporter.svg") # Misc tool_maya_to_discord = get_icon_path(r"tool_maya_to_discord.svg") tool_fspy_importer = get_icon_path(r"tool_fspy_importer.svg") diff --git a/gt/ui/resources/icons/tool_rig_interface.svg b/gt/ui/resources/icons/tool_rig_interface.svg index 7ca386f1..7e21cbcd 100644 --- a/gt/ui/resources/icons/tool_rig_interface.svg +++ b/gt/ui/resources/icons/tool_rig_interface.svg @@ -5,7 +5,7 @@ - - - - - + + + + + + + + + + + + + + + From 8f2559cc94722bf2bb6d49bc18138452405c3aca Mon Sep 17 00:00:00 2001 From: Guilherme Trevisan Date: Thu, 27 Jul 2023 09:42:19 -0700 Subject: [PATCH 09/28] Created game fbx exporter icon --- .../icons/tool_game_fbx_exporter.svg | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 gt/ui/resources/icons/tool_game_fbx_exporter.svg diff --git a/gt/ui/resources/icons/tool_game_fbx_exporter.svg b/gt/ui/resources/icons/tool_game_fbx_exporter.svg new file mode 100644 index 00000000..0149e2e6 --- /dev/null +++ b/gt/ui/resources/icons/tool_game_fbx_exporter.svg @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + From 47a20d800edc023b4dcc72619a6d92df2247dc16 Mon Sep 17 00:00:00 2001 From: Guilherme Trevisan Date: Thu, 27 Jul 2023 09:42:29 -0700 Subject: [PATCH 10/28] Updated icon --- gt/ui/resources/icons/root_utilities.svg | 32 +----------- .../resources/icons/tool_outliner_sorter.svg | 52 +------------------ 2 files changed, 4 insertions(+), 80 deletions(-) diff --git a/gt/ui/resources/icons/root_utilities.svg b/gt/ui/resources/icons/root_utilities.svg index 4dc44616..d9b9583a 100644 --- a/gt/ui/resources/icons/root_utilities.svg +++ b/gt/ui/resources/icons/root_utilities.svg @@ -1,36 +1,8 @@ - + - - - - + diff --git a/gt/ui/resources/icons/tool_outliner_sorter.svg b/gt/ui/resources/icons/tool_outliner_sorter.svg index 96454b49..3685ce8f 100644 --- a/gt/ui/resources/icons/tool_outliner_sorter.svg +++ b/gt/ui/resources/icons/tool_outliner_sorter.svg @@ -1,56 +1,8 @@ - + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From e463717267b57b78b9ffd19ad4d1b029063aa8fa Mon Sep 17 00:00:00 2001 From: Guilherme Trevisan Date: Thu, 27 Jul 2023 11:53:40 -0700 Subject: [PATCH 12/28] Changed icon color --- gt/ui/resources/icons/tool_auto_rigger.svg | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gt/ui/resources/icons/tool_auto_rigger.svg b/gt/ui/resources/icons/tool_auto_rigger.svg index d2533ce0..c0b46f09 100644 --- a/gt/ui/resources/icons/tool_auto_rigger.svg +++ b/gt/ui/resources/icons/tool_auto_rigger.svg @@ -2,7 +2,7 @@ - + - + From 3520ef85d2a31ef8673ae147809764e2ae568ff2 Mon Sep 17 00:00:00 2001 From: Guilherme Trevisan Date: Thu, 27 Jul 2023 14:19:44 -0700 Subject: [PATCH 13/28] Updated import method to allow for shelf buttons #141 --- gt/tools/package_setup/gt_tools_maya_menu.py | 180 ++++++++----------- 1 file changed, 71 insertions(+), 109 deletions(-) diff --git a/gt/tools/package_setup/gt_tools_maya_menu.py b/gt/tools/package_setup/gt_tools_maya_menu.py index 65dcc12e..a3748b2b 100644 --- a/gt/tools/package_setup/gt_tools_maya_menu.py +++ b/gt/tools/package_setup/gt_tools_maya_menu.py @@ -5,16 +5,16 @@ from gt.utils.version_utils import get_package_version import gt.ui.resource_library as resource_library from gt.ui.maya_menu import MayaMenu -from functools import partial import logging import sys -import os # Setup Logger logging.basicConfig() logger = logging.getLogger(__name__) MENU_NAME = "GT Tools" +IMPORT_TOOL = "from gt.utils.system_utils import initialize_tool\n" +IMPORT_UTIL = "from gt.utils.system_utils import initialize_utility\n" def _rebuild_menu(*args): @@ -28,45 +28,6 @@ def _rebuild_menu(*args): load_menu() -def _open_named_tool(import_path, entry_point_function=None, *args): - """ - Opens a named tool using its import path and entry point function (when provided) - Parameters: - import_path (str): Tool package name (same as its folder) e.g. "renamer" - entry_point_function (str, optional): Name of the entry point function, if not provided it's assumed to be - the default name "launch_tool" - """ - logger.debug(f'Package Path: {str(str(import_path))}') - logger.debug(f'Entry Function: {str(entry_point_function)}') - logger.debug(f'Args: {str(args)}') - utils_dir = os.path.dirname(__file__) - package_dir = os.path.dirname(utils_dir) - if package_dir not in sys.path: - sys.path.append(package_dir) # Ensure package is available - from gt.utils import system_utils - if entry_point_function: - system_utils.initialize_tool(import_path=import_path, - entry_point_function=entry_point_function) - else: - system_utils.initialize_tool(import_path=import_path) - - -def _run_utility(import_path, util_name, *args): - """ - Runs a named utility - Parameters: - import_path (str): Util script name (same as its file name) e.g. "curve_utils" - util_name (str): Name of the utility (name of the function) - """ - logger.debug(f'Args: {str(args)}') - utils_dir = os.path.dirname(__file__) - package_dir = os.path.dirname(utils_dir) - if package_dir not in sys.path: - sys.path.append(package_dir) # Ensure package is available - from gt.utils import system_utils - system_utils.initialize_utility(import_path, util_name) - - def unload_menu(*args): """ Unloads the menu by deleting it (if found) @@ -95,40 +56,40 @@ def load_menu(*args): icon=resource_library.Icon.root_general, parent_to_root=True) menu.add_menu_item(label='Attributes to Python', - command=partial(_open_named_tool, "attributes_to_python"), + command=IMPORT_TOOL + 'initialize_tool("attributes_to_python")', tooltip='Converts attributes into Python code. TRS Channels or User-defined.', icon=resource_library.Icon.tool_attributes_to_python) menu.add_menu_item(label='Color Manager', - command=partial(_open_named_tool, "color_manager"), + command=IMPORT_TOOL + 'initialize_tool("color_manager")', tooltip='A way to quickly change colors of objects and objects names (outliner).', icon=resource_library.Icon.tool_color_manager) menu.add_menu_item(label='Outliner Sorter', - command=partial(_open_named_tool, "outliner_sorter"), + command=IMPORT_TOOL + 'initialize_tool("outliner_sorter")', tooltip='Manages the order of the elements in the outliner.', icon=resource_library.Icon.tool_outliner_sorter) menu.add_menu_item(label='Path Manager', - command=partial(_open_named_tool, "path_manager"), + command=IMPORT_TOOL + 'initialize_tool("path_manager")', tooltip='A script for managing and repairing the path of many nodes.', icon=resource_library.Icon.tool_path_manager) menu.add_menu_item(label='Renamer', - command=partial(_open_named_tool, "renamer"), + command=IMPORT_TOOL + 'initialize_tool("renamer")', tooltip='Script for renaming multiple objects.', icon=resource_library.Icon.tool_renamer) menu.add_menu_item(label='Render Checklist', - command=partial(_open_named_tool, "render_checklist"), + command=IMPORT_TOOL + 'initialize_tool("render_checklist")', tooltip='Performs a series of checks to detect common issues that are often accidentally ' 'ignored/unnoticed.', icon=resource_library.Icon.tool_render_checklist) menu.add_menu_item(label='Selection Manager', - command=partial(_open_named_tool, "selection_manager"), + command=IMPORT_TOOL + 'initialize_tool("selection_manager")', tooltip='Manages or creates custom selections.', icon=resource_library.Icon.tool_selection_manager) menu.add_menu_item(label='Transfer Transforms', - command=partial(_open_named_tool, "transfer_transforms"), + command=IMPORT_TOOL + 'initialize_tool("transfer_transforms")', tooltip='Script for quickly transferring Translate, Rotate, and Scale between objects.', icon=resource_library.Icon.tool_transfer_transforms) menu.add_menu_item(label='World Space Baker', - command=partial(_open_named_tool, "world_space_baker"), + command=IMPORT_TOOL + 'initialize_tool("world_space_baker")', tooltip='Script for getting and setting translate and rotate world space data.', icon=resource_library.Icon.tool_world_space_baker) @@ -137,25 +98,25 @@ def load_menu(*args): icon=resource_library.Icon.root_curves, parent_to_root=True) menu.add_menu_item(label='Generate Text Curve', - command=partial(_open_named_tool, "shape_text_to_curve"), + command=IMPORT_TOOL + 'initialize_tool("shape_text_to_curve")', tooltip='Generates a single curve containing all shapes necessary to produce a word/text.', icon=resource_library.Icon.tool_crv_text) menu.add_menu_item(label='Extract Python Curve', - command=partial(_open_named_tool, "shape_curve_to_python"), + command=IMPORT_TOOL + 'initialize_tool("shape_curve_to_python")', tooltip='Generates the python code necessary to create a selected curve.', icon=resource_library.Icon.tool_crv_python) menu.add_menu_item(label='Extract Curve State', - command=partial(_open_named_tool, "shape_extract_state"), + command=IMPORT_TOOL + 'initialize_tool("shape_extract_state")', tooltip='Generates the python command necessary to reshape curves back to their stored state.', icon=resource_library.Icon.tool_crv_extract_state) menu.add_divider() # Utility Section +++++++++++++++++++++++++++++++++ menu.add_menu_item(label='Combine Curves', - command=partial(_run_utility, "curve_utils", "selected_curves_combine"), + command=IMPORT_UTIL + 'initialize_utility("curve_utils", "selected_curves_combine")', tooltip='Combine curves by moving all the shape objects inside one single transform.', icon=resource_library.Icon.util_crv_combine) menu.add_menu_item(label='Separate Curves', - command=partial(_run_utility, "curve_utils", "selected_curves_separate"), + command=IMPORT_UTIL + 'initialize_utility("curve_utils", "selected_curves_separate")', tooltip='Separate curves by moving every shape object to their own separated transform.', icon=resource_library.Icon.util_crv_separate) @@ -164,32 +125,32 @@ def load_menu(*args): icon=resource_library.Icon.root_modeling, parent_to_root=True) menu.add_menu_item(label='Transfer UVs', - command=partial(_open_named_tool, "transfer_uvs"), + command=IMPORT_TOOL + 'initialize_tool("transfer_uvs")', tooltip='A script to export/import UVs as well as transfer them between objects.', icon=resource_library.Icon.tool_transfer_uvs) menu.add_menu_item(label='Sphere Types', - command=partial(_open_named_tool, "create_sphere_types"), + command=IMPORT_TOOL + 'initialize_tool("create_sphere_types")', tooltip='A reminder for students that there are other sphere types.', icon=resource_library.Icon.tool_sphere_types) menu.add_divider() # Utility Section +++++++++++++++++++++++++++++++++ menu.add_menu_item(label='Preview All UDIMs', - command=partial(_run_utility, "display_utils", "generate_udim_previews"), + command=IMPORT_UTIL + 'initialize_utility("display_utils", "generate_udim_previews")', tooltip='Generates UDIM previews for all file nodes.', icon=resource_library.Icon.util_mod_load_udims) menu.add_menu_item(label='Convert Bif to Mesh', - command=partial(_run_utility, "geometry_utils", "convert_bif_to_mesh"), + command=IMPORT_UTIL + 'initialize_utility("geometry_utils", "convert_bif_to_mesh")', tooltip='Converts Bifrost Geometry into Maya Geometry (Mesh). ' 'If used with volume or particles the output will be empty.', icon=resource_library.Icon.util_mod_bif_to_mesh) menu.add_divider() # Material Section +++++++++++++++++++++++++++++++++ menu.add_menu_item(label='Copy Material', - command=partial(_run_utility, "misc_utils", "material_copy"), + command=IMPORT_UTIL + 'initialize_utility("misc_utils", "material_copy")', tooltip='Copies material to clipboard.', icon=resource_library.Icon.util_mod_copy_material) menu.add_menu_item(label='Paste Material', - command=partial(_run_utility, "misc_utils", "material_paste"), + command=IMPORT_UTIL + 'initialize_utility("misc_utils", "material_paste")', tooltip='Pastes material from clipboard.', icon=resource_library.Icon.util_mod_paste_material) # ------------------------------------ Rigging ------------------------------------ @@ -197,61 +158,61 @@ def load_menu(*args): icon=resource_library.Icon.root_rigging, parent_to_root=True) menu.add_menu_item(label='Biped Auto Rigger', - command=partial(_open_named_tool, "auto_rigger"), + command=IMPORT_TOOL + 'initialize_tool("auto_rigger")', tooltip='Automated solution for creating a biped rig.', icon=resource_library.Icon.tool_auto_rigger) menu.add_menu_item(label='Biped Rig Interface', - command=partial(_open_named_tool, "auto_rigger", "launch_biped_rig_interface"), + command=IMPORT_TOOL + 'initialize_tool("auto_rigger", "launch_biped_rig_interface")', tooltip='Custom Rig Interface for GT Biped Auto Rigger.', icon=resource_library.Icon.tool_rig_interface) menu.add_menu_item(label='Retarget Assistant', - command=partial(_open_named_tool, "auto_rigger", "launch_retarget_assistant"), + command=IMPORT_TOOL + 'initialize_tool("auto_rigger", "launch_retarget_assistant")', tooltip='Script with HumanIK patches.', icon=resource_library.Icon.tool_retarget_assistant) menu.add_menu_item(label='Game FBX Exporter', - command=partial(_open_named_tool, "auto_rigger", "launch_game_exporter"), + command=IMPORT_TOOL + 'initialize_tool("auto_rigger", "launch_game_exporter")', tooltip='Automated solution for exporting real-time FBX files.', icon=resource_library.Icon.tool_game_fbx_exporter) menu.add_divider() # General Rigging Tools +++++++++++++++++++++++++++++++++ menu.add_menu_item(label='Add Sine Attributes', - command=partial(_open_named_tool, "sine_attributes"), + command=IMPORT_TOOL + 'initialize_tool("sine_attributes")', tooltip='Create Sine function without using third-party plugins or expressions.', - icon='sineCurveProfile.png') + icon=resource_library.Icon.tool_sine_attributes) menu.add_menu_item(label='Connect Attributes', - command=partial(_open_named_tool, "connect_attributes"), + command=IMPORT_TOOL + 'initialize_tool("connect_attributes")', tooltip='Automated solution for connecting multiple attributes.', icon='hsRearrange.png') menu.add_menu_item(label='Create Auto FK', - command=partial(_open_named_tool, "create_auto_fk"), + command=IMPORT_TOOL + 'initialize_tool("create_auto_fk")', tooltip='Automated solution for created an FK control curve.', icon='kinInsert.png') menu.add_menu_item(label='Create Testing Keys', - command=partial(_open_named_tool, "create_testing_keys"), + command=IMPORT_TOOL + 'initialize_tool("create_testing_keys")', tooltip='Automated solution for creating testing keyframes.', icon='setMaxInfluence.png') menu.add_menu_item(label='Extract Influence Joints', - command=partial(_open_named_tool, "extract_influence_joints"), + command=IMPORT_TOOL + 'initialize_tool("extract_influence_joints")', tooltip='Generate Python code used to select influence (bound) joints.', icon=resource_library.Icon.tool_influence_joints) menu.add_menu_item(label='Generate In-Between', - command=partial(_open_named_tool, "generate_inbetween"), + command=IMPORT_TOOL + 'initialize_tool("generate_inbetween")', tooltip='Generates inbetween transforms that can be used as layers for rigging/animation.', icon='hsGraphMaterial.png') menu.add_menu_item(label='Make IK Stretchy', - command=partial(_open_named_tool, "make_ik_stretchy"), + command=IMPORT_TOOL + 'initialize_tool("make_ik_stretchy")', tooltip='Automated solution for making an IK system stretchy.', icon='ikSCsolver.svg') menu.add_menu_item(label='Mirror Cluster Tool', - command=partial(_open_named_tool, "mirror_cluster_tool"), + command=IMPORT_TOOL + 'initialize_tool("mirror_cluster_tool")', tooltip='Automated solution for mirroring clusters.', icon='cluster.png') menu.add_menu_item(label='Morphing Attributes', - command=partial(_open_named_tool, "morphing_attributes"), + command=IMPORT_TOOL + 'initialize_tool("morphing_attributes")', tooltip='Creates attributes to drive selected blend shapes.', icon='blendShape.png') menu.add_menu_item(label='Morphing Utilities', - command=partial(_open_named_tool, "morphing_utilities"), + command=IMPORT_TOOL + 'initialize_tool("morphing_utilities")', tooltip='Morphing utilities (Blend Shapes).', icon='falloff_blend.png') @@ -260,124 +221,124 @@ def load_menu(*args): icon=resource_library.Icon.root_utilities, parent_to_root=True) menu.add_menu_item(label='Reload File', - command=partial(_run_utility, "scene_utils", "force_reload_file"), + command=IMPORT_UTIL + 'initialize_utility("scene_utils", "force_reload_file")', tooltip='Forces the re-opening of an opened file. (Changes are ignored)', icon='openScript.png') menu.add_menu_item(label='Open File Directory', - command=partial(_run_utility, "scene_utils", "open_file_dir"), + command=IMPORT_UTIL + 'initialize_utility("scene_utils", "open_file_dir")', tooltip='Opens the directory where the scene is located.', icon='openLoadGeneric.png') menu.add_divider() # General +++++++++++++++++++++++++++++++++ menu.add_menu_item(label='Complete HUD Toggle', - command=partial(_run_utility, "display_utils", "toggle_full_hud"), + command=IMPORT_UTIL + 'initialize_utility("display_utils", "toggle_full_hud")', tooltip='Toggles most of the Heads-Up Display (HUD) options according to the state of ' 'the majority of them. (Keeps default elements intact when toggling it off)', icon='channelBox.png') menu.add_menu_item(label='Resource Browser', - command=partial(_run_utility, "misc_utils", "open_resource_browser"), + command=IMPORT_UTIL + 'initialize_utility("misc_utils", "open_resource_browser")', tooltip="Opens Maya's Resource Browser. " "A good way to find icons or elements you may want to use.", icon='bsd-head.png') menu.add_menu_item(label='Select Non-Unique Objects', - command=partial(_run_utility, "selection_utils", "select_non_unique_objects"), + command=IMPORT_UTIL + 'initialize_utility("selection_utils", "select_non_unique_objects")', tooltip='Selects all objects with the same short name. (non-unique objects)', icon='gotoLine.png') menu.add_menu_item(label='Set Joint Name as Label', - command=partial(_run_utility, "display_utils", "set_joint_name_as_label"), + command=IMPORT_UTIL + 'initialize_utility("display_utils", "set_joint_name_as_label")', tooltip='Set the label of the selected joints to be the same as their short name.', icon='falloff_transfer.png') menu.add_menu_item(label='Uniform LRA Toggle', - command=partial(_run_utility, "display_utils", "toggle_uniform_lra"), + command=IMPORT_UTIL + 'initialize_utility("display_utils", "toggle_uniform_lra")', tooltip='Makes the visibility of the Local Rotation Axis uniform among the selected ' 'objects according to the current state of the majority of them.', icon='srt.png') menu.add_menu_item(label='Uniform Joint Label Toggle', - command=partial(_run_utility, "display_utils", "toggle_uniform_jnt_label"), + command=IMPORT_UTIL + 'initialize_utility("display_utils", "toggle_uniform_jnt_label")', tooltip='Makes the visibility of the joint labels uniform according to the current ' 'state of the majority of them.', icon='QR_xRay.png') menu.add_menu_item(label='Unhide Default Channels', - command=partial(_run_utility, "attribute_utils", "unhide_default_channels"), + command=IMPORT_UTIL + 'initialize_utility("attribute_utils", "unhide_default_channels")', tooltip='Un-hides the default channels of the selected objects. ' '(Default channels : Translate, Rotate, Scale and Visibility)', icon='RS_filter_list.png') menu.add_menu_item(label='Unlock Default Channels', - command=partial(_run_utility, "attribute_utils", "unlock_default_channels"), + command=IMPORT_UTIL + 'initialize_utility("attribute_utils", "unlock_default_channels")', tooltip='Unlocks the default channels of the selected objects. ' '(Default channels : Translate, Rotate, Scale and Visibility)', icon='Lock_OFF_grey.png') menu.add_divider() # Convert Section +++++++++++++++++++++++++++++++++ menu.add_menu_item(label='Convert Joints to Mesh', - command=partial(_run_utility, "joint_utils", "convert_joints_to_mesh"), + command=IMPORT_UTIL + 'initialize_utility("joint_utils", "convert_joints_to_mesh")', tooltip='Converts joints to mesh. (Helpful when sending references to other applications)', icon='HIKCharacterToolSkeleton.png') menu.add_menu_item(label='Convert to Locators', - command=partial(_run_utility, "transform_utils", "convert_transforms_to_locators"), + command=IMPORT_UTIL + 'initialize_utility("transform_utils", "convert_transforms_to_locators")', tooltip="Converts transforms to locators. Function doesn't affect selected objects.", icon='locator.svg') menu.add_divider() # References Section +++++++++++++++++++++++++++++++++ menu.add_menu_item(label='Import References', - command=partial(_run_utility, "reference_utils", "references_import"), + command=IMPORT_UTIL + 'initialize_utility("reference_utils", "references_import")', tooltip="Imports all references.", icon='reference.svg') menu.add_menu_item(label='Remove References', - command=partial(_run_utility, "reference_utils", "references_remove"), + command=IMPORT_UTIL + 'initialize_utility("reference_utils", "references_remove")', tooltip="Removes all references.", icon='referenceProxy.png') menu.add_divider() # Pivot Section +++++++++++++++++++++++++++++++++ menu.add_menu_item(label='Move Pivot to Top', - command=partial(_run_utility, "transform_utils", "move_pivot_top"), + command=IMPORT_UTIL + 'initialize_utility("transform_utils", "move_pivot_top")', tooltip="Moves pivot point to the top of the bounding box of every selected object.", icon='moveLayerUp.png') menu.add_menu_item(label='Move Pivot to Base', - command=partial(_run_utility, "transform_utils", "move_pivot_base"), + command=IMPORT_UTIL + 'initialize_utility("transform_utils", "move_pivot_base")', tooltip="Moves pivot point to the base of the bounding box of every selected object.", icon='moveLayerDown.png') menu.add_menu_item(label='Move Object to Origin', - command=partial(_run_utility, "transform_utils", "move_to_origin"), + command=IMPORT_UTIL + 'initialize_utility("transform_utils", "move_to_origin")', tooltip="Moves selected objects to origin according to their pivot point.", icon='grid.svg') menu.add_divider() # Reset Section +++++++++++++++++++++++++++++++++ menu.add_menu_item(label='Reset Transforms', - command=partial(_run_utility, "transform_utils", "reset_transforms"), + command=IMPORT_UTIL + 'initialize_utility("transform_utils", "reset_transforms")', tooltip="Reset transforms. It checks for incoming connections, then set the attribute to 0 " "if there are none. Currently affects Joints, meshes and transforms. (Only Rotation)", icon='CenterPivot.png') menu.add_menu_item(label='Reset Joints Display', - command=partial(_run_utility, "display_utils", "reset_joint_display"), + command=IMPORT_UTIL + 'initialize_utility("display_utils", "reset_joint_display")', tooltip="Resets the radius attribute back to one in all joints, then changes the global " "multiplier (jointDisplayScale) back to one.", icon='kinJoint.png') menu.add_menu_item(label='Reset "persp" Camera', - command=partial(_run_utility, "attribute_utils", "reset_persp_shape_attributes"), + command=IMPORT_UTIL + 'initialize_utility("attribute_utils", "reset_persp_shape_attributes")', tooltip="If persp camera exists (default camera), reset its attributes.", icon='camera.svg') menu.add_divider() # Delete Section +++++++++++++++++++++++++++++++++ menu.add_menu_item(label='Delete Namespaces', - command=partial(_run_utility, "namespace_utils", "delete_namespaces"), + command=IMPORT_UTIL + 'initialize_utility("namespace_utils", "delete_namespaces")', tooltip="Deletes all namespaces in the scene.", icon='renamePreset.png') menu.add_menu_item(label='Delete Display Layers', - command=partial(_run_utility, "display_utils", "delete_display_layers"), + command=IMPORT_UTIL + 'initialize_utility("display_utils", "delete_display_layers")', tooltip="Deletes all display layers.", icon='displayLayer.svg') menu.add_menu_item(label='Delete Unused Nodes', - command=partial(_run_utility, "cleanup_utils", "delete_unused_nodes"), + command=IMPORT_UTIL + 'initialize_utility("cleanup_utils", "delete_unused_nodes")', tooltip="Deletes unused nodes.", icon='nodeGrapherRemoveNodes.png') menu.add_menu_item(label='Delete Nucleus Nodes', - command=partial(_run_utility, "cleanup_utils", "delete_nucleus_nodes"), + command=IMPORT_UTIL + 'initialize_utility("cleanup_utils", "delete_nucleus_nodes")', tooltip="Deletes all nodes related to particles. " "(Nucleus, nHair, nCloth, nConstraints, Emitter, etc...)", icon='nParticle.svg') menu.add_menu_item(label='Delete Keyframes', - command=partial(_run_utility, "anim_utils", "delete_time_keyframes"), + command=IMPORT_UTIL + 'initialize_utility("anim_utils", "delete_time_keyframes")', tooltip='Deletes all nodes of the type "animCurveTA" (keyframes).', icon='keyIntoclip.png') @@ -386,20 +347,20 @@ def load_menu(*args): icon=resource_library.Icon.root_miscellaneous, parent_to_root=True) menu.add_menu_item(label='Startup Booster', - command=partial(_open_named_tool, "startup_booster"), + command=IMPORT_TOOL + 'initialize_tool("startup_booster")', tooltip='Improve startup times by managing which plugins get loaded when starting Maya.', icon=resource_library.Icon.tool_startup_booster) menu.add_menu_item(label='fSpy Importer', - command=partial(_open_named_tool, "fspy_importer"), + command=IMPORT_TOOL + 'initialize_tool("fspy_importer")', tooltip='Imports the JSON data exported out of fSpy (Camera Matching software).', icon=resource_library.Icon.tool_fspy_importer) menu.add_menu_item(label='Maya to Discord', - command=partial(_open_named_tool, "maya_to_discord"), + command=IMPORT_TOOL + 'initialize_tool("maya_to_discord")', tooltip='Send images and videos (playblasts) from Maya to Discord using a ' 'Discord Webhook to bridge the two programs.', icon=resource_library.Icon.tool_maya_to_discord) menu.add_menu_item(label='Render Calculator', - command=partial(_open_named_tool, "render_calculator"), + command=IMPORT_TOOL + 'initialize_tool("render_calculator")', tooltip="Helps calculate how long it's going to take to render an image sequence.", icon=resource_library.Icon.tool_render_calculator) # ------------------------------------ Development ------------------------------------ @@ -408,7 +369,7 @@ def load_menu(*args): icon=resource_library.Icon.misc_about, parent_to_root=True) menu.add_menu_item(label='Sample Tool', - command=partial(_open_named_tool, "sample_tool"), + command=IMPORT_TOOL + 'initialize_tool("sample_tool")', tooltip="Opens sample tool.", icon=resource_library.Icon.misc_about) # ------------------------------------ About/Help ------------------------------------ @@ -417,15 +378,16 @@ def load_menu(*args): icon=resource_library.Icon.root_help, parent_to_root=True) menu.add_menu_item(label='About', - command=partial(_open_named_tool, "package_setup", "open_about_window"), + command=IMPORT_TOOL + 'initialize_tool("package_setup", "open_about_window")', tooltip="Opens about menu.", icon=resource_library.Icon.misc_about) menu.add_menu_item(label='Re-Build Menu', - command=_rebuild_menu, + command="from gt.tools.package_setup.gt_tools_maya_menu import _rebuild_menu\n" + "_rebuild_menu()", tooltip="Re-Creates this menu, and does a rehash to pick up any new scripts.", icon=resource_library.Icon.misc_rebuild_menu) menu.add_menu_item(label='Check for Updates', - command=partial(_open_named_tool, "check_for_updates"), + command=IMPORT_TOOL + 'initialize_tool("check_for_updates")', tooltip="Check for updates by comparing current version with latest release.", icon=resource_library.Icon.tool_check_for_updates) menu.add_menu_item(label=f'Installed Version: {str(package_version)}', From 79f9582164b464c4ad6e48e3d3e2d0ab30e961c0 Mon Sep 17 00:00:00 2001 From: Guilherme Trevisan Date: Thu, 27 Jul 2023 14:20:58 -0700 Subject: [PATCH 14/28] Added sine attributes icon --- gt/ui/resource_library.py | 1 + 1 file changed, 1 insertion(+) diff --git a/gt/ui/resource_library.py b/gt/ui/resource_library.py index 879bca63..93af6110 100644 --- a/gt/ui/resource_library.py +++ b/gt/ui/resource_library.py @@ -264,6 +264,7 @@ def __init__(self): tool_retarget_assistant = get_icon_path(r"tool_retarget_assistant.svg") tool_game_fbx_exporter = get_icon_path(r"tool_game_fbx_exporter.svg") tool_influence_joints = get_icon_path(r"tool_influence_joints.svg") + tool_sine_attributes = get_icon_path(r"tool_sine_attributes.svg") # Misc tool_maya_to_discord = get_icon_path(r"tool_maya_to_discord.svg") tool_fspy_importer = get_icon_path(r"tool_fspy_importer.svg") From e14bb48b885128e039fad1ffea64d07cb893903e Mon Sep 17 00:00:00 2001 From: Guilherme Trevisan Date: Thu, 27 Jul 2023 14:21:08 -0700 Subject: [PATCH 15/28] Created sine attributes icon --- .../resources/icons/tool_sine_attributes.svg | 131 ++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 gt/ui/resources/icons/tool_sine_attributes.svg diff --git a/gt/ui/resources/icons/tool_sine_attributes.svg b/gt/ui/resources/icons/tool_sine_attributes.svg new file mode 100644 index 00000000..cc6e1810 --- /dev/null +++ b/gt/ui/resources/icons/tool_sine_attributes.svg @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From bfe2d7ee8de33e1226e73d4a39ac17f2f23a0274 Mon Sep 17 00:00:00 2001 From: Guilherme Trevisan Date: Thu, 27 Jul 2023 14:21:24 -0700 Subject: [PATCH 16/28] Created callback function --- gt/utils/feedback_utils.py | 12 ++------ gt/utils/system_utils.py | 44 +++++++++++++++++++++++++-- tests/test_utils/test_system_utils.py | 25 +++++++++++++++ 3 files changed, 68 insertions(+), 13 deletions(-) diff --git a/gt/utils/feedback_utils.py b/gt/utils/feedback_utils.py index 697c9a77..b2da53bd 100644 --- a/gt/utils/feedback_utils.py +++ b/gt/utils/feedback_utils.py @@ -2,6 +2,7 @@ Feedback Utilities github.com/TrevisanGMW/gt-tools """ +from gt.utils.system_utils import callback from dataclasses import dataclass, field import maya.cmds as cmds from io import StringIO @@ -239,16 +240,7 @@ def print_when_true(input_string, do_print=True, use_system_write=False, callbac if do_print: sys.stdout.write(f"{input_string}\n") if use_system_write else print(input_string) if callbacks: - if not isinstance(callbacks, list): - callbacks = [callbacks] # Convert to list in case arg was provided as function - for func in callbacks: - if callable(func): - try: - func(input_string) - except Exception as e: - logger.debug(f"Unable to execute passthrough function. Issue: {e}") - else: - logger.debug(f"Error: {func} is not a callable function.") + callback(callbacks, input_string) def redirect_output_to_function(process_func, logger_level=logging.INFO): diff --git a/gt/utils/system_utils.py b/gt/utils/system_utils.py index 8b43de24..e269f73e 100644 --- a/gt/utils/system_utils.py +++ b/gt/utils/system_utils.py @@ -538,11 +538,49 @@ def time_profiler_wrapper(*args, **kwargs): return time_profiler_wrapper +def callback(callbacks, *args, **kwargs): + """Execute a list of callback functions with the given arguments and keyword arguments. + + This function takes a list of callback functions, and for each function in the list, + it attempts to call the function with the provided arguments and keyword arguments. + + Parameters: + callbacks (list or callable): A list of callable functions or a single callable function. + If a single function is provided, it will be converted into a list with one element. + + *args: Variable-length argument list to be passed to the callback functions. + + **kwargs: Arbitrary keyword arguments to be passed to the callback functions. + + Note: + - If a callback function raises an exception during execution, the exception will be + caught and logged as a debug message using the logger. + + - If an element in the 'callbacks' list is not a callable function, it will be ignored, + and an error message will be logged using the logger. + """ + if callbacks: + if not isinstance(callbacks, list): + callbacks = [callbacks] # Convert to list in case arg was provided as a function + for func in callbacks: + if callable(func): + try: + func(*args, **kwargs) + except Exception as e: + logger.debug(f"Unable to execute callback function. Issue: {e}") + else: + logger.debug(f"Error: {func} is not a callable function.") + + if __name__ == "__main__": from pprint import pprint out = None logger.setLevel(logging.DEBUG) - out = os.environ.keys() - out = get_maya_preferences_dir(get_system()) - out = initialize_from_package() + # out = os.environ.keys() + # out = get_maya_preferences_dir(get_system()) + # out = initialize_from_package() + def test(one, two): + print(one) + print(two) + callback(test, "a", "b") pprint(out) diff --git a/tests/test_utils/test_system_utils.py b/tests/test_utils/test_system_utils.py index f8ef5a1f..5fcdade1 100644 --- a/tests/test_utils/test_system_utils.py +++ b/tests/test_utils/test_system_utils.py @@ -447,3 +447,28 @@ def greet_person(name, message="Hello"): result = greet_person("Barbara", message="Hi") self.assertEqual(result, "Hi, Barbara!") + + def test_single_valid_callback(self): + # Test with a single valid callback function + mock_callback = MagicMock() + system_utils.callback(mock_callback) + mock_callback.assert_called_once() + + def test_multiple_valid_callbacks(self): + # Test with multiple valid callback functions + mock_callback1 = MagicMock() + mock_callback2 = MagicMock() + system_utils.callback([mock_callback1, mock_callback2]) + mock_callback1.assert_called_once() + mock_callback2.assert_called_once() + + def test_list_conversion(self): + # Test that the input is correctly converted to a list + mock_callback = MagicMock() + system_utils.callback(mock_callback) + mock_callback.assert_called_once() + + # Make sure the function is called with correct arguments + mock_callback2 = MagicMock() + system_utils.callback(mock_callback2, 1, 2, key1='value1', key2='value2') + mock_callback2.assert_called_once_with(1, 2, key1='value1', key2='value2') From 39e7eeece60b4a806347b0e50201d68ddbfe02d6 Mon Sep 17 00:00:00 2001 From: Guilherme Trevisan Date: Thu, 27 Jul 2023 14:34:56 -0700 Subject: [PATCH 17/28] Created connect attributes icon --- gt/tools/package_setup/gt_tools_maya_menu.py | 2 +- gt/ui/resource_library.py | 1 + .../icons/tool_connect_attributes.svg | 53 +++++++++++++++++++ 3 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 gt/ui/resources/icons/tool_connect_attributes.svg diff --git a/gt/tools/package_setup/gt_tools_maya_menu.py b/gt/tools/package_setup/gt_tools_maya_menu.py index a3748b2b..4e2d5327 100644 --- a/gt/tools/package_setup/gt_tools_maya_menu.py +++ b/gt/tools/package_setup/gt_tools_maya_menu.py @@ -182,7 +182,7 @@ def load_menu(*args): menu.add_menu_item(label='Connect Attributes', command=IMPORT_TOOL + 'initialize_tool("connect_attributes")', tooltip='Automated solution for connecting multiple attributes.', - icon='hsRearrange.png') + icon=resource_library.Icon.tool_connect_attributes) menu.add_menu_item(label='Create Auto FK', command=IMPORT_TOOL + 'initialize_tool("create_auto_fk")', tooltip='Automated solution for created an FK control curve.', diff --git a/gt/ui/resource_library.py b/gt/ui/resource_library.py index 93af6110..91280be8 100644 --- a/gt/ui/resource_library.py +++ b/gt/ui/resource_library.py @@ -265,6 +265,7 @@ def __init__(self): tool_game_fbx_exporter = get_icon_path(r"tool_game_fbx_exporter.svg") tool_influence_joints = get_icon_path(r"tool_influence_joints.svg") tool_sine_attributes = get_icon_path(r"tool_sine_attributes.svg") + tool_connect_attributes = get_icon_path(r"tool_connect_attributes.svg") # Misc tool_maya_to_discord = get_icon_path(r"tool_maya_to_discord.svg") tool_fspy_importer = get_icon_path(r"tool_fspy_importer.svg") diff --git a/gt/ui/resources/icons/tool_connect_attributes.svg b/gt/ui/resources/icons/tool_connect_attributes.svg new file mode 100644 index 00000000..7351da76 --- /dev/null +++ b/gt/ui/resources/icons/tool_connect_attributes.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From c62d75978f34e82ea866589e7469769fb683f566 Mon Sep 17 00:00:00 2001 From: Guilherme Trevisan Date: Thu, 27 Jul 2023 14:56:59 -0700 Subject: [PATCH 18/28] Changed the name "generate in-between" to "add in-between" --- .../__init__.py | 6 +++--- .../add_inbetween.py} | 2 +- gt/tools/package_setup/gt_tools_maya_menu.py | 12 ++++++------ 3 files changed, 10 insertions(+), 10 deletions(-) rename gt/tools/{generate_inbetween => add_inbetween}/__init__.py (89%) rename gt/tools/{generate_inbetween/generate_inbetween.py => add_inbetween/add_inbetween.py} (99%) diff --git a/gt/tools/generate_inbetween/__init__.py b/gt/tools/add_inbetween/__init__.py similarity index 89% rename from gt/tools/generate_inbetween/__init__.py rename to gt/tools/add_inbetween/__init__.py index bc629889..957c8ea5 100644 --- a/gt/tools/generate_inbetween/__init__.py +++ b/gt/tools/add_inbetween/__init__.py @@ -38,9 +38,9 @@ def launch_tool(): Launch user interface and create any necessary connections for the tool to function. Entry point for when using the tool GT Generate Inbetween. """ - from gt.tools.generate_inbetween import generate_inbetween - generate_inbetween.script_version = __version__ - generate_inbetween.build_gui_generate_inbetween() + from gt.tools.add_inbetween import add_inbetween + add_inbetween.script_version = __version__ + add_inbetween.build_gui_generate_inbetween() if __name__ == "__main__": diff --git a/gt/tools/generate_inbetween/generate_inbetween.py b/gt/tools/add_inbetween/add_inbetween.py similarity index 99% rename from gt/tools/generate_inbetween/generate_inbetween.py rename to gt/tools/add_inbetween/add_inbetween.py index 2989f982..89f37af8 100644 --- a/gt/tools/generate_inbetween/generate_inbetween.py +++ b/gt/tools/add_inbetween/add_inbetween.py @@ -9,7 +9,7 @@ import maya.cmds as cmds # Script Name -script_name = "GT - In-between Generator" +script_name = "GT - Add In-between" # Version script_version = "?.?.?" # Module version (init) diff --git a/gt/tools/package_setup/gt_tools_maya_menu.py b/gt/tools/package_setup/gt_tools_maya_menu.py index 4e2d5327..7cf52b04 100644 --- a/gt/tools/package_setup/gt_tools_maya_menu.py +++ b/gt/tools/package_setup/gt_tools_maya_menu.py @@ -175,6 +175,10 @@ def load_menu(*args): icon=resource_library.Icon.tool_game_fbx_exporter) menu.add_divider() # General Rigging Tools +++++++++++++++++++++++++++++++++ + menu.add_menu_item(label='Add In-Between', + command=IMPORT_TOOL + 'initialize_tool("add_inbetween")', + tooltip='Generates inbetween transforms that can be used as layers for rigging/animation.', + icon=resource_library.Icon.tool_add_inbetween) menu.add_menu_item(label='Add Sine Attributes', command=IMPORT_TOOL + 'initialize_tool("sine_attributes")', tooltip='Create Sine function without using third-party plugins or expressions.', @@ -186,19 +190,15 @@ def load_menu(*args): menu.add_menu_item(label='Create Auto FK', command=IMPORT_TOOL + 'initialize_tool("create_auto_fk")', tooltip='Automated solution for created an FK control curve.', - icon='kinInsert.png') + icon=resource_library.Icon.tool_create_fk) menu.add_menu_item(label='Create Testing Keys', command=IMPORT_TOOL + 'initialize_tool("create_testing_keys")', tooltip='Automated solution for creating testing keyframes.', - icon='setMaxInfluence.png') + icon=resource_library.Icon.tool_testing_keys) menu.add_menu_item(label='Extract Influence Joints', command=IMPORT_TOOL + 'initialize_tool("extract_influence_joints")', tooltip='Generate Python code used to select influence (bound) joints.', icon=resource_library.Icon.tool_influence_joints) - menu.add_menu_item(label='Generate In-Between', - command=IMPORT_TOOL + 'initialize_tool("generate_inbetween")', - tooltip='Generates inbetween transforms that can be used as layers for rigging/animation.', - icon='hsGraphMaterial.png') menu.add_menu_item(label='Make IK Stretchy', command=IMPORT_TOOL + 'initialize_tool("make_ik_stretchy")', tooltip='Automated solution for making an IK system stretchy.', From 58ccfa83f18df326fab1cc23482bd72b0673b64b Mon Sep 17 00:00:00 2001 From: Guilherme Trevisan Date: Thu, 27 Jul 2023 14:57:09 -0700 Subject: [PATCH 19/28] Added a few new icons --- gt/ui/resource_library.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/gt/ui/resource_library.py b/gt/ui/resource_library.py index 91280be8..eddd6b1b 100644 --- a/gt/ui/resource_library.py +++ b/gt/ui/resource_library.py @@ -264,8 +264,11 @@ def __init__(self): tool_retarget_assistant = get_icon_path(r"tool_retarget_assistant.svg") tool_game_fbx_exporter = get_icon_path(r"tool_game_fbx_exporter.svg") tool_influence_joints = get_icon_path(r"tool_influence_joints.svg") + tool_add_inbetween = get_icon_path(r"tool_add_inbetween.svg") tool_sine_attributes = get_icon_path(r"tool_sine_attributes.svg") tool_connect_attributes = get_icon_path(r"tool_connect_attributes.svg") + tool_create_fk = get_icon_path(r"tool_create_fk.svg") + tool_testing_keys = get_icon_path(r"tool_testing_keys.svg") # Misc tool_maya_to_discord = get_icon_path(r"tool_maya_to_discord.svg") tool_fspy_importer = get_icon_path(r"tool_fspy_importer.svg") From 922107a55f8721ccc2d6d19e44d8ec257ff28698 Mon Sep 17 00:00:00 2001 From: Guilherme Trevisan Date: Thu, 27 Jul 2023 14:57:20 -0700 Subject: [PATCH 20/28] Created add inbetween icon --- gt/ui/resources/icons/tool_add_inbetween.svg | 44 ++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 gt/ui/resources/icons/tool_add_inbetween.svg diff --git a/gt/ui/resources/icons/tool_add_inbetween.svg b/gt/ui/resources/icons/tool_add_inbetween.svg new file mode 100644 index 00000000..6d4f2c2f --- /dev/null +++ b/gt/ui/resources/icons/tool_add_inbetween.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 3c43d935f3f9217ff232bdf501bf2a7a77545d87 Mon Sep 17 00:00:00 2001 From: Guilherme Trevisan Date: Thu, 27 Jul 2023 14:57:28 -0700 Subject: [PATCH 21/28] Created auto fk icon --- gt/ui/resources/icons/tool_create_fk.svg | 45 ++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 gt/ui/resources/icons/tool_create_fk.svg diff --git a/gt/ui/resources/icons/tool_create_fk.svg b/gt/ui/resources/icons/tool_create_fk.svg new file mode 100644 index 00000000..d748ee41 --- /dev/null +++ b/gt/ui/resources/icons/tool_create_fk.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + From e37bd8fcd733250988f218fe13bf6e4cbf639934 Mon Sep 17 00:00:00 2001 From: Guilherme Trevisan Date: Thu, 27 Jul 2023 14:57:34 -0700 Subject: [PATCH 22/28] Created testing keys icon --- gt/ui/resources/icons/tool_testing_keys.svg | 102 ++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 gt/ui/resources/icons/tool_testing_keys.svg diff --git a/gt/ui/resources/icons/tool_testing_keys.svg b/gt/ui/resources/icons/tool_testing_keys.svg new file mode 100644 index 00000000..7c44cbe0 --- /dev/null +++ b/gt/ui/resources/icons/tool_testing_keys.svg @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 99e5aa168f7c4da087c2140bea4714fb22d6ed36 Mon Sep 17 00:00:00 2001 From: Guilherme Trevisan Date: Thu, 27 Jul 2023 15:11:51 -0700 Subject: [PATCH 23/28] Created stretchy IK icon --- gt/tools/package_setup/gt_tools_maya_menu.py | 2 +- gt/ui/resource_library.py | 1 + .../resources/icons/tool_make_ik_stretchy.svg | 65 +++++++++++++++++++ 3 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 gt/ui/resources/icons/tool_make_ik_stretchy.svg diff --git a/gt/tools/package_setup/gt_tools_maya_menu.py b/gt/tools/package_setup/gt_tools_maya_menu.py index 7cf52b04..bca7efb6 100644 --- a/gt/tools/package_setup/gt_tools_maya_menu.py +++ b/gt/tools/package_setup/gt_tools_maya_menu.py @@ -202,7 +202,7 @@ def load_menu(*args): menu.add_menu_item(label='Make IK Stretchy', command=IMPORT_TOOL + 'initialize_tool("make_ik_stretchy")', tooltip='Automated solution for making an IK system stretchy.', - icon='ikSCsolver.svg') + icon=resource_library.Icon.tool_make_ik_stretchy) menu.add_menu_item(label='Mirror Cluster Tool', command=IMPORT_TOOL + 'initialize_tool("mirror_cluster_tool")', tooltip='Automated solution for mirroring clusters.', diff --git a/gt/ui/resource_library.py b/gt/ui/resource_library.py index eddd6b1b..f64f9763 100644 --- a/gt/ui/resource_library.py +++ b/gt/ui/resource_library.py @@ -269,6 +269,7 @@ def __init__(self): tool_connect_attributes = get_icon_path(r"tool_connect_attributes.svg") tool_create_fk = get_icon_path(r"tool_create_fk.svg") tool_testing_keys = get_icon_path(r"tool_testing_keys.svg") + tool_make_ik_stretchy = get_icon_path(r"tool_make_ik_stretchy.svg") # Misc tool_maya_to_discord = get_icon_path(r"tool_maya_to_discord.svg") tool_fspy_importer = get_icon_path(r"tool_fspy_importer.svg") diff --git a/gt/ui/resources/icons/tool_make_ik_stretchy.svg b/gt/ui/resources/icons/tool_make_ik_stretchy.svg new file mode 100644 index 00000000..f60ba427 --- /dev/null +++ b/gt/ui/resources/icons/tool_make_ik_stretchy.svg @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From b735e3d90b811b9b4cf7eba6d505647a1881f7bd Mon Sep 17 00:00:00 2001 From: Guilherme Trevisan Date: Thu, 27 Jul 2023 15:34:34 -0700 Subject: [PATCH 24/28] Created mirror cluster tool icon --- gt/tools/package_setup/gt_tools_maya_menu.py | 6 +- gt/ui/resource_library.py | 3 + gt/ui/resources/icons/tool_mirror_cluster.svg | 74 +++++++++++++++++++ 3 files changed, 80 insertions(+), 3 deletions(-) create mode 100644 gt/ui/resources/icons/tool_mirror_cluster.svg diff --git a/gt/tools/package_setup/gt_tools_maya_menu.py b/gt/tools/package_setup/gt_tools_maya_menu.py index bca7efb6..5f1243e7 100644 --- a/gt/tools/package_setup/gt_tools_maya_menu.py +++ b/gt/tools/package_setup/gt_tools_maya_menu.py @@ -206,15 +206,15 @@ def load_menu(*args): menu.add_menu_item(label='Mirror Cluster Tool', command=IMPORT_TOOL + 'initialize_tool("mirror_cluster_tool")', tooltip='Automated solution for mirroring clusters.', - icon='cluster.png') + icon=resource_library.Icon.tool_mirror_cluster) menu.add_menu_item(label='Morphing Attributes', command=IMPORT_TOOL + 'initialize_tool("morphing_attributes")', tooltip='Creates attributes to drive selected blend shapes.', - icon='blendShape.png') + icon=resource_library.Icon.tool_morphing_attributes) menu.add_menu_item(label='Morphing Utilities', command=IMPORT_TOOL + 'initialize_tool("morphing_utilities")', tooltip='Morphing utilities (Blend Shapes).', - icon='falloff_blend.png') + icon=resource_library.Icon.tool_morphing_utils) # ------------------------------------ Utilities ------------------------------------ menu.add_sub_menu("Utilities", diff --git a/gt/ui/resource_library.py b/gt/ui/resource_library.py index f64f9763..7755468e 100644 --- a/gt/ui/resource_library.py +++ b/gt/ui/resource_library.py @@ -270,6 +270,9 @@ def __init__(self): tool_create_fk = get_icon_path(r"tool_create_fk.svg") tool_testing_keys = get_icon_path(r"tool_testing_keys.svg") tool_make_ik_stretchy = get_icon_path(r"tool_make_ik_stretchy.svg") + tool_mirror_cluster = get_icon_path(r"tool_mirror_cluster.svg") + tool_morphing_attributes = get_icon_path(r"tool_morphing_attributes.svg") + tool_morphing_utils = get_icon_path(r"tool_morphing_utils.svg") # Misc tool_maya_to_discord = get_icon_path(r"tool_maya_to_discord.svg") tool_fspy_importer = get_icon_path(r"tool_fspy_importer.svg") diff --git a/gt/ui/resources/icons/tool_mirror_cluster.svg b/gt/ui/resources/icons/tool_mirror_cluster.svg new file mode 100644 index 00000000..84eedfb6 --- /dev/null +++ b/gt/ui/resources/icons/tool_mirror_cluster.svg @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 6be63b4ca0db93ce2b2f95bb04fd59b03e45bce7 Mon Sep 17 00:00:00 2001 From: Guilherme Trevisan Date: Thu, 27 Jul 2023 15:34:43 -0700 Subject: [PATCH 25/28] Created morphing attributes icon --- .../icons/tool_morphing_attributes.svg | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 gt/ui/resources/icons/tool_morphing_attributes.svg diff --git a/gt/ui/resources/icons/tool_morphing_attributes.svg b/gt/ui/resources/icons/tool_morphing_attributes.svg new file mode 100644 index 00000000..d953bbd1 --- /dev/null +++ b/gt/ui/resources/icons/tool_morphing_attributes.svg @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + From 3cf855946d40702e65a41c85dfa3d1a5b3289982 Mon Sep 17 00:00:00 2001 From: Guilherme Trevisan Date: Thu, 27 Jul 2023 15:34:51 -0700 Subject: [PATCH 26/28] Created morphing utils icon --- gt/ui/resources/icons/tool_morphing_utils.svg | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 gt/ui/resources/icons/tool_morphing_utils.svg diff --git a/gt/ui/resources/icons/tool_morphing_utils.svg b/gt/ui/resources/icons/tool_morphing_utils.svg new file mode 100644 index 00000000..db027c2c --- /dev/null +++ b/gt/ui/resources/icons/tool_morphing_utils.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From e7f8d365e0fc3d9af0745ea207d893c6476ee496 Mon Sep 17 00:00:00 2001 From: Guilherme Trevisan Date: Thu, 27 Jul 2023 15:41:35 -0700 Subject: [PATCH 27/28] Updated test to include package name --- tests/test_utils/test_system_utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_utils/test_system_utils.py b/tests/test_utils/test_system_utils.py index 5fcdade1..51612837 100644 --- a/tests/test_utils/test_system_utils.py +++ b/tests/test_utils/test_system_utils.py @@ -401,7 +401,7 @@ def test_initialize_from_package_arguments(self, mock_import_module, mock_eval): def test_initialize_utility(self, mock_initialize_from_package): system_utils.initialize_utility("mocked_import_path", "mocked_entry_point_function") mock_initialize_from_package.assert_called_once() - expected_one = "import_path='utils.mocked_import_path'" + expected_one = "import_path='gt.utils.mocked_import_path'" expected_two = "entry_point_function='mocked_entry_point_function'" result = str(mock_initialize_from_package.call_args_list) for expected in [expected_one, expected_two]: From 76dcdaf239e423e16da9369bb25732be6ca0ff94 Mon Sep 17 00:00:00 2001 From: Guilherme Trevisan Date: Thu, 27 Jul 2023 15:42:32 -0700 Subject: [PATCH 28/28] Updated package version --- gt/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gt/__init__.py b/gt/__init__.py index 733e0d61..734cd179 100644 --- a/gt/__init__.py +++ b/gt/__init__.py @@ -3,7 +3,7 @@ import sys # Package Variables -__version_tuple__ = (3, 0, 1) +__version_tuple__ = (3, 0, 2) __version_suffix__ = '' __version__ = '.'.join(str(n) for n in __version_tuple__) + __version_suffix__ __authors__ = ['Guilherme Trevisan']