From baed15fb98bced05ebfa55e720517e33fcb65223 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Tue, 25 Jul 2023 11:54:48 +0100 Subject: [PATCH 01/69] initial commit of working Maya scene testing --- openpype/cli.py | 49 ++++++- openpype/pype_commands.py | 29 +++- tests/conftest.py | 38 ++++- tests/integration/hosts/maya/lib.py | 21 ++- .../hosts/maya/test_publish_in_maya.py | 27 +++- tests/lib/db_handler.py | 18 ++- tests/lib/testing_classes.py | 131 +++++++++++++----- 7 files changed, 249 insertions(+), 64 deletions(-) diff --git a/openpype/cli.py b/openpype/cli.py index bc837cdeba8..738e866b272 100644 --- a/openpype/cli.py +++ b/openpype/cli.py @@ -289,14 +289,22 @@ def run(script): "--pyargs", help="Run tests from package", default=None) +@click.option("--test_openpype_mongo", + help="MongoDB for testing.", + default=None) @click.option("-t", "--test_data_folder", - help="Unzipped directory path of test file", + help="Unzipped directory path of test file.", default=None) +@click.option("--keep_app_open", + help="Keep launched application open for interaction.", + is_flag=True, + default=False) @click.option("-s", "--persist", help="Persist test DB and published files after test end", - default=None) + is_flag=True, + default=False) @click.option("-a", "--app_variant", help="Provide specific app variant for test, empty for latest", @@ -308,12 +316,39 @@ def run(script): @click.option("-so", "--setup_only", help="Only create dbs, do not run tests", - default=None) -def runtests(folder, mark, pyargs, test_data_folder, persist, app_variant, - timeout, setup_only): + is_flag=True, + default=False) +@click.option("--dump_database", + help="Dump database to data folder.", + is_flag=True, + default=False) +def runtests( + folder, + mark, + pyargs, + test_openpype_mongo, + test_data_folder, + keep_app_open, + persist, + app_variant, + timeout, + setup_only, + dump_database +): """Run all automatic tests after proper initialization via start.py""" - PypeCommands().run_tests(folder, mark, pyargs, test_data_folder, - persist, app_variant, timeout, setup_only) + PypeCommands().run_tests( + folder, + mark, + pyargs, + test_openpype_mongo, + test_data_folder, + keep_app_open, + persist, + app_variant, + timeout, + setup_only, + dump_database + ) @main.command() diff --git a/openpype/pype_commands.py b/openpype/pype_commands.py index 8a3f25a0267..72bed20598d 100644 --- a/openpype/pype_commands.py +++ b/openpype/pype_commands.py @@ -268,8 +268,20 @@ def contextselection(output_path, project_name, asset_name, strict): def validate_jsons(self): pass - def run_tests(self, folder, mark, pyargs, - test_data_folder, persist, app_variant, timeout, setup_only): + def run_tests( + self, + folder, + mark, + pyargs, + test_openpype_mongo, + test_data_folder, + keep_app_open, + persist, + app_variant, + timeout, + setup_only, + dump_database + ): """ Runs tests from 'folder' @@ -305,11 +317,17 @@ def run_tests(self, folder, mark, pyargs, if pyargs: args.extend(["--pyargs", pyargs]) + if test_openpype_mongo: + args.extend(["--test_openpype_mongo", test_openpype_mongo]) + if test_data_folder: args.extend(["--test_data_folder", test_data_folder]) + if keep_app_open: + args.extend(["--keep_app_open"]) + if persist: - args.extend(["--persist", persist]) + args.extend(["--persist"]) if app_variant: args.extend(["--app_variant", app_variant]) @@ -318,7 +336,10 @@ def run_tests(self, folder, mark, pyargs, args.extend(["--timeout", timeout]) if setup_only: - args.extend(["--setup_only", setup_only]) + args.extend(["--setup_only"]) + + if dump_database: + args.extend(["--dump_database"]) print("run_tests args: {}".format(args)) import pytest diff --git a/tests/conftest.py b/tests/conftest.py index 4f7c17244b3..e0850fb1b5f 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -4,14 +4,24 @@ def pytest_addoption(parser): + parser.addoption( + "--test_openpype_mongo", action="store", default=None, + help="Provide url of the Mongo database." + ) + parser.addoption( "--test_data_folder", action="store", default=None, help="Provide url of a folder of unzipped test file" ) parser.addoption( - "--persist", action="store", default=None, - help="True - keep test_db, test_openpype, outputted test files" + "--keep_app_open", action="store_true", default=None, + help="Keeps the launched app open for interaction." + ) + + parser.addoption( + "--persist", action="store_true", default=None, + help="Keep test_db, test_openpype, outputted test files" ) parser.addoption( @@ -25,16 +35,31 @@ def pytest_addoption(parser): ) parser.addoption( - "--setup_only", action="store", default=None, - help="True - only setup test, do not run any tests" + "--setup_only", action="store_true", default=None, + help="Only setup test, do not run any tests" + ) + + parser.addoption( + "--dump_database", action="store_true", default=None, + help="Dump database to data folder." ) +@pytest.fixture(scope="module") +def test_openpype_mongo(request): + return request.config.getoption("--test_openpype_mongo") + + @pytest.fixture(scope="module") def test_data_folder(request): return request.config.getoption("--test_data_folder") +@pytest.fixture(scope="module") +def keep_app_open(request): + return request.config.getoption("--keep_app_open") + + @pytest.fixture(scope="module") def persist(request): return request.config.getoption("--persist") @@ -55,6 +80,11 @@ def setup_only(request): return request.config.getoption("--setup_only") +@pytest.fixture(scope="module") +def dump_database(request): + return request.config.getoption("--dump_database") + + @pytest.hookimpl(tryfirst=True, hookwrapper=True) def pytest_runtest_makereport(item, call): # execute all other hooks to obtain the report object diff --git a/tests/integration/hosts/maya/lib.py b/tests/integration/hosts/maya/lib.py index e7480e25fa2..2ae1a37c70c 100644 --- a/tests/integration/hosts/maya/lib.py +++ b/tests/integration/hosts/maya/lib.py @@ -9,6 +9,9 @@ ) +LOG_PATH = os.path.join("output.log") + + class MayaHostFixtures(HostFixtures): @pytest.fixture(scope="module") def last_workfile_path(self, download_test_data, output_folder_url): @@ -35,14 +38,18 @@ def last_workfile_path(self, download_test_data, output_folder_url): @pytest.fixture(scope="module") def startup_scripts(self, monkeypatch_session, download_test_data): """Points Maya to userSetup file from input data""" - startup_path = os.path.join(download_test_data, - "input", - "startup") + startup_path = os.path.join( + download_test_data, "input", "startup" + ) original_pythonpath = os.environ.get("PYTHONPATH") - monkeypatch_session.setenv("PYTHONPATH", - "{}{}{}".format(startup_path, - os.pathsep, - original_pythonpath)) + monkeypatch_session.setenv( + "PYTHONPATH", + "{}{}{}".format(startup_path, os.pathsep, original_pythonpath) + ) + + monkeypatch_session.setenv( + "MAYA_CMD_FILE_OUTPUT", os.path.join(download_test_data, LOG_PATH) + ) @pytest.fixture(scope="module") def skip_compare_folders(self): diff --git a/tests/integration/hosts/maya/test_publish_in_maya.py b/tests/integration/hosts/maya/test_publish_in_maya.py index b7ee228aaec..c69bcd28c04 100644 --- a/tests/integration/hosts/maya/test_publish_in_maya.py +++ b/tests/integration/hosts/maya/test_publish_in_maya.py @@ -1,5 +1,10 @@ +import os +import re + from tests.lib.assert_classes import DBAssert -from tests.integration.hosts.maya.lib import MayaLocalPublishTestClass +from tests.integration.hosts.maya.lib import ( + MayaLocalPublishTestClass, LOG_PATH +) class TestPublishInMaya(MayaLocalPublishTestClass): @@ -35,8 +40,26 @@ class TestPublishInMaya(MayaLocalPublishTestClass): TIMEOUT = 120 # publish timeout - def test_db_asserts(self, dbcon, publish_finished): + def test_publish(self, dbcon, publish_finished, download_test_data): + logging_path = os.path.join(download_test_data, LOG_PATH) + with open(logging_path, "r") as f: + logging_output = f.read() + + error_regex = r"pyblish \(ERROR\)((.|\n)*)" + matches = re.findall(error_regex, logging_output) + assert not matches, ("ERROR" + matches[0][0]) + + def test_db_asserts( + self, + dbcon, + publish_finished, + setup_only, + dump_database + ): """Host and input data dependent expected results in DB.""" + if setup_only or dump_database: + return + print("test_db_asserts") failures = [] failures.append(DBAssert.count_of_types(dbcon, "version", 2)) diff --git a/tests/lib/db_handler.py b/tests/lib/db_handler.py index 82e741cc3b3..d652a3ebdaa 100644 --- a/tests/lib/db_handler.py +++ b/tests/lib/db_handler.py @@ -114,8 +114,11 @@ def setup_from_dump(self, db_name, dump_dir, overwrite=False, db_name_out = db_name_out or db_name if self._db_exists(db_name_out): if not overwrite: - raise RuntimeError("DB {} already exists".format(db_name_out) + - "Run with overwrite=True") + raise RuntimeError( + "DB {} already exists run with overwrite=True".format( + db_name_out + ) + ) else: if collection: if collection in self.client[db_name_out].list_collection_names(): # noqa @@ -157,11 +160,14 @@ def backup_to_dump(self, db_name, dump_dir, overwrite=False, dir_path = os.path.join(dump_dir, db_name) if os.path.exists(dir_path) and not overwrite: - raise RuntimeError("Backup already exists, " - "run with overwrite=True") + raise RuntimeError( + "Backup already exists. Remove existing database dumps in " + "\"{}\" or run with overwrite=True".format(dir_path) + ) - query = self._dump_query(self.uri, dump_dir, - db_name=db_name, collection=collection) + query = self._dump_query( + self.uri, dump_dir, db_name=db_name, collection=collection + ) print("Mongodump query:: {}".format(query)) subprocess.run(query) diff --git a/tests/lib/testing_classes.py b/tests/lib/testing_classes.py index f04607dc27b..781568c5dee 100644 --- a/tests/lib/testing_classes.py +++ b/tests/lib/testing_classes.py @@ -105,13 +105,30 @@ def output_folder_url(self, download_test_data): yield path @pytest.fixture(scope="module") - def env_var(self, monkeypatch_session, download_test_data): + def env_var( + self, monkeypatch_session, download_test_data, test_openpype_mongo + ): """Sets temporary env vars from json file.""" - env_url = os.path.join(download_test_data, "input", - "env_vars", "env_var.json") + # Collect openpype mongo. + if test_openpype_mongo: + self.TEST_OPENPYPE_MONGO = test_openpype_mongo + + # Get class attributes for environment. + attributes = {} + for attribute in ModuleUnitTest.__dict__.keys(): + if attribute[:2] != '__': + value = getattr(self, attribute) + if not callable(value): + attributes[attribute] = value + + # Set environment variables from input json and class attributes. + env_url = os.path.join( + download_test_data, "input", "env_vars", "env_var.json" + ) if not os.path.exists(env_url): - raise ValueError("Env variable file {} doesn't exist". - format(env_url)) + raise ValueError( + "Env variable file {} doesn't exist".format(env_url) + ) env_dict = {} try: @@ -122,13 +139,11 @@ def env_var(self, monkeypatch_session, download_test_data): six.reraise(*sys.exc_info()) for key, value in env_dict.items(): - all_vars = globals() - all_vars.update(vars(ModuleUnitTest)) # TODO check - value = value.format(**all_vars) + value = value.format(**attributes) print("Setting {}:{}".format(key, value)) monkeypatch_session.setenv(key, str(value)) - #reset connection to openpype DB with new env var + # Reset connection to openpype DB with new env var. import openpype.settings.lib as sett_lib sett_lib._SETTINGS_HANDLER = None sett_lib._LOCAL_SETTINGS_HANDLER = None @@ -138,28 +153,44 @@ def env_var(self, monkeypatch_session, download_test_data): import openpype openpype_root = os.path.dirname(os.path.dirname(openpype.__file__)) - # ?? why 2 of those - monkeypatch_session.setenv("OPENPYPE_ROOT", openpype_root) monkeypatch_session.setenv("OPENPYPE_REPOS_ROOT", openpype_root) # for remapping purposes (currently in Nuke) monkeypatch_session.setenv("TEST_SOURCE_FOLDER", download_test_data) @pytest.fixture(scope="module") - def db_setup(self, download_test_data, env_var, monkeypatch_session, - request): + def db_setup( + self, + download_test_data, + env_var, + monkeypatch_session, + request, + dump_database + ): """Restore prepared MongoDB dumps into selected DB.""" backup_dir = os.path.join(download_test_data, "input", "dumps") uri = os.environ.get("OPENPYPE_MONGO") db_handler = DBHandler(uri) - db_handler.setup_from_dump(self.TEST_DB_NAME, backup_dir, - overwrite=True, - db_name_out=self.TEST_DB_NAME) - db_handler.setup_from_dump(self.TEST_OPENPYPE_NAME, backup_dir, - overwrite=True, - db_name_out=self.TEST_OPENPYPE_NAME) + if dump_database: + db_handler.backup_to_dump( + self.TEST_DB_NAME, + backup_dir + ) + else: + db_handler.setup_from_dump( + self.TEST_DB_NAME, + backup_dir, + overwrite=True, + db_name_out=self.TEST_DB_NAME + ) + db_handler.setup_from_dump( + self.TEST_OPENPYPE_NAME, + backup_dir, + overwrite=True, + db_name_out=self.TEST_OPENPYPE_NAME + ) yield db_handler @@ -287,12 +318,22 @@ def app_args(self, download_test_data): yield app_args @pytest.fixture(scope="module") - def launched_app(self, dbcon, download_test_data, last_workfile_path, - startup_scripts, app_args, app_name, output_folder_url, - setup_only): + def launched_app( + self, + dbcon, + download_test_data, + last_workfile_path, + startup_scripts, + app_args, + app_name, + output_folder_url, + setup_only, + keep_app_open, + dump_database + ): """Launch host app""" - if setup_only or self.SETUP_ONLY: - print("Creating only setup for test, not launching app") + if setup_only or self.SETUP_ONLY or dump_database: + print("Not launching app") yield return # set schema - for integrate_new @@ -305,6 +346,10 @@ def launched_app(self, dbcon, download_test_data, last_workfile_path, os.environ["AVALON_SCHEMA"] = schema_path os.environ["OPENPYPE_EXECUTABLE"] = sys.executable + + if keep_app_open: + os.environ["KEEP_APP_OPEN"] = "1" + from openpype.lib import ApplicationManager application_manager = ApplicationManager() @@ -322,16 +367,28 @@ def launched_app(self, dbcon, download_test_data, last_workfile_path, yield app_process @pytest.fixture(scope="module") - def publish_finished(self, dbcon, launched_app, download_test_data, - timeout, setup_only): + def publish_finished( + self, + dbcon, + launched_app, + download_test_data, + timeout, + setup_only, + keep_app_open, + dump_database + ): """Dummy fixture waiting for publish to finish""" - if setup_only or self.SETUP_ONLY: - print("Creating only setup for test, not launching app") + if setup_only or self.SETUP_ONLY or dump_database: + print("Not launching app") yield False return import time time_start = time.time() timeout = timeout or self.TIMEOUT + + if keep_app_open: + timeout = 100000 + timeout = float(timeout) while launched_app.poll() is None: time.sleep(0.5) @@ -343,16 +400,22 @@ def publish_finished(self, dbcon, launched_app, download_test_data, print("Publish finished") yield True - def test_folder_structure_same(self, dbcon, publish_finished, - download_test_data, output_folder_url, - skip_compare_folders, - setup_only): + def test_folder_structure_same( + self, + dbcon, + publish_finished, + download_test_data, + output_folder_url, + skip_compare_folders, + setup_only, + dump_database + ): """Check if expected and published subfolders contain same files. Compares only presence, not size nor content! """ - if setup_only or self.SETUP_ONLY: - print("Creating only setup for test, not launching app") + if setup_only or self.SETUP_ONLY or dump_database: + print("Not launching app") return published_dir_base = output_folder_url From 63e15ab677a1f46cc73fc44175749b87f97cab4b Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Tue, 25 Jul 2023 12:26:14 +0100 Subject: [PATCH 02/69] Ingest userSetup.py --- tests/integration/hosts/maya/lib.py | 39 ++++++++++++------- .../hosts/maya/startup_scripts/userSetup.py | 31 +++++++++++++++ 2 files changed, 57 insertions(+), 13 deletions(-) create mode 100644 tests/integration/hosts/maya/startup_scripts/userSetup.py diff --git a/tests/integration/hosts/maya/lib.py b/tests/integration/hosts/maya/lib.py index 2ae1a37c70c..98a6b5f56e3 100644 --- a/tests/integration/hosts/maya/lib.py +++ b/tests/integration/hosts/maya/lib.py @@ -19,18 +19,19 @@ def last_workfile_path(self, download_test_data, output_folder_url): Maya expects workfile in proper folder, so copy is done first. """ - src_path = os.path.join(download_test_data, - "input", - "workfile", - "test_project_test_asset_test_task_v001.mb") - dest_folder = os.path.join(output_folder_url, - self.PROJECT, - self.ASSET, - "work", - self.TASK) + src_path = os.path.join( + download_test_data, + "input", + "workfile", + "test_project_test_asset_test_task_v001.mb" + ) + dest_folder = os.path.join( + output_folder_url, self.PROJECT, self.ASSET, "work", self.TASK + ) os.makedirs(dest_folder) - dest_path = os.path.join(dest_folder, - "test_project_test_asset_test_task_v001.mb") + dest_path = os.path.join( + dest_folder, "test_project_test_asset_test_task_v001.mb" + ) shutil.copy(src_path, dest_path) yield dest_path @@ -38,13 +39,25 @@ def last_workfile_path(self, download_test_data, output_folder_url): @pytest.fixture(scope="module") def startup_scripts(self, monkeypatch_session, download_test_data): """Points Maya to userSetup file from input data""" - startup_path = os.path.join( + source_startup_path = os.path.join( + os.path.dirname(__file__), "startup_scripts" + ) + destination_startup_path = os.path.join( download_test_data, "input", "startup" ) + + for f in os.listdir(source_startup_path): + shutil.copyfile( + os.path.join(source_startup_path, f), + os.path.join(destination_startup_path, f) + ) + original_pythonpath = os.environ.get("PYTHONPATH") monkeypatch_session.setenv( "PYTHONPATH", - "{}{}{}".format(startup_path, os.pathsep, original_pythonpath) + "{}{}{}".format( + destination_startup_path, os.pathsep, original_pythonpath + ) ) monkeypatch_session.setenv( diff --git a/tests/integration/hosts/maya/startup_scripts/userSetup.py b/tests/integration/hosts/maya/startup_scripts/userSetup.py new file mode 100644 index 00000000000..de553e93312 --- /dev/null +++ b/tests/integration/hosts/maya/startup_scripts/userSetup.py @@ -0,0 +1,31 @@ +import os + +import logging + +from maya import cmds + + +def setup_logging(): + # Fetch the logger Pyblish uses for all of its messages + log = logging.getLogger("pyblish") + + # Do what `basicConfig` does, except explicitly + # and with control over where and how messages go + hnd = logging.StreamHandler() + fmt = logging.Formatter( + "pyblish (%(levelname)s) (line: %(lineno)d) %(name)s:" + "\n%(message)s" + ) + hnd.setFormatter(fmt) + log.addHandler(hnd) + + +print("starting OpenPype usersetup for testing") +cmds.evalDeferred("setup_logging()", evaluateNext=True) +cmds.evalDeferred( + "import pyblish.util;pyblish.util.publish()", lowestPriority=True +) + +print("finished OpenPype usersetup for testing") +if not os.environ.get("KEEP_APP_OPEN"): + cmds.evalDeferred("cmds.quit(force=True)", lowestPriority=True) From 23ce48da598f94f62b4bb04a8c4fcde0b333affc Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Tue, 25 Jul 2023 12:52:32 +0100 Subject: [PATCH 03/69] Ingest Maya workfile --- tests/integration/hosts/maya/lib.py | 25 +- .../test_project_test_asset_test_task_v001.ma | 351 ++++++++++++++++++ .../userSetup.py | 0 .../hosts/maya/test_publish_in_maya.py | 2 +- 4 files changed, 363 insertions(+), 15 deletions(-) create mode 100644 tests/integration/hosts/maya/resources/test_project_test_asset_test_task_v001.ma rename tests/integration/hosts/maya/{startup_scripts => resources}/userSetup.py (100%) diff --git a/tests/integration/hosts/maya/lib.py b/tests/integration/hosts/maya/lib.py index 98a6b5f56e3..fbfa129b20c 100644 --- a/tests/integration/hosts/maya/lib.py +++ b/tests/integration/hosts/maya/lib.py @@ -20,17 +20,16 @@ def last_workfile_path(self, download_test_data, output_folder_url): Maya expects workfile in proper folder, so copy is done first. """ src_path = os.path.join( - download_test_data, - "input", - "workfile", - "test_project_test_asset_test_task_v001.mb" + os.path.dirname(__file__), + "resources", + "test_project_test_asset_test_task_v001.ma" ) dest_folder = os.path.join( output_folder_url, self.PROJECT, self.ASSET, "work", self.TASK ) os.makedirs(dest_folder) dest_path = os.path.join( - dest_folder, "test_project_test_asset_test_task_v001.mb" + dest_folder, "test_project_test_asset_test_task_v001.ma" ) shutil.copy(src_path, dest_path) @@ -39,24 +38,22 @@ def last_workfile_path(self, download_test_data, output_folder_url): @pytest.fixture(scope="module") def startup_scripts(self, monkeypatch_session, download_test_data): """Points Maya to userSetup file from input data""" - source_startup_path = os.path.join( - os.path.dirname(__file__), "startup_scripts" + user_setup_path = os.path.join( + os.path.dirname(__file__), "resources", "userSetup.py" ) - destination_startup_path = os.path.join( + startup_path = os.path.join( download_test_data, "input", "startup" ) - for f in os.listdir(source_startup_path): - shutil.copyfile( - os.path.join(source_startup_path, f), - os.path.join(destination_startup_path, f) - ) + shutil.copyfile( + user_setup_path, os.path.join(startup_path, "userSetup.py") + ) original_pythonpath = os.environ.get("PYTHONPATH") monkeypatch_session.setenv( "PYTHONPATH", "{}{}{}".format( - destination_startup_path, os.pathsep, original_pythonpath + startup_path, os.pathsep, original_pythonpath ) ) diff --git a/tests/integration/hosts/maya/resources/test_project_test_asset_test_task_v001.ma b/tests/integration/hosts/maya/resources/test_project_test_asset_test_task_v001.ma new file mode 100644 index 00000000000..4022cf7263e --- /dev/null +++ b/tests/integration/hosts/maya/resources/test_project_test_asset_test_task_v001.ma @@ -0,0 +1,351 @@ +//Maya ASCII 2023 scene +//Name: test_project_test_asset_test_task_v001.ma +//Last modified: Tue, Jul 25, 2023 12:37:00 PM +//Codeset: 1252 +requires maya "2023"; +requires -nodeType "renderSetup" "renderSetup.py" "1.0"; +requires -nodeType "aiOptions" -nodeType "aiAOVDriver" -nodeType "aiAOVFilter" "mtoa" "5.3.1"; +requires -nodeType "polyDisc" "modelingToolkit" "0.0.0.0"; +currentUnit -l centimeter -a degree -t pal; +fileInfo "application" "maya"; +fileInfo "product" "Maya 2023"; +fileInfo "version" "2023"; +fileInfo "cutIdentifier" "202211021031-847a9f9623"; +fileInfo "osv" "Windows 10 Pro v2009 (Build: 19044)"; +fileInfo "license" "education"; +fileInfo "UUID" "257B5A36-45C6-9CC1-802A-738829BA2DC1"; +fileInfo "OpenPypeContext" "eyJwdWJsaXNoX2F0dHJpYnV0ZXMiOiB7IlZhbGlkYXRlQ29udGFpbmVycyI6IHsiYWN0aXZlIjogdHJ1ZX19fQ=="; +createNode transform -s -n "persp"; + rename -uid "D52C935B-47C9-D868-A875-D799DD17B3A1"; + setAttr ".v" no; + setAttr ".t" -type "double3" 33.329836010894773 18.034068470832839 24.890981774804157 ; + setAttr ".r" -type "double3" 79.461647270402509 -44.999999999997357 183.99999999999159 ; + setAttr ".rp" -type "double3" -2.0401242849359917e-14 2.2609331405046354e-14 -44.821869662029947 ; + setAttr ".rpt" -type "double3" -27.999999999999989 -21.000000000000025 16.82186966202995 ; +createNode camera -s -n "perspShape" -p "persp"; + rename -uid "2399E6C0-490F-BA1F-485F-5AA8A01D27BC"; + setAttr -k off ".v" no; + setAttr ".fl" 34.999999999999993; + setAttr ".coi" 50.609449488607154; + setAttr ".imn" -type "string" "persp"; + setAttr ".den" -type "string" "persp_depth"; + setAttr ".man" -type "string" "persp_mask"; + setAttr ".hc" -type "string" "viewSet -p %camera"; + setAttr ".ai_translator" -type "string" "perspective"; +createNode transform -s -n "top"; + rename -uid "415C7426-413E-0FAE-FCC3-3DAED7443A52"; + setAttr ".v" no; + setAttr ".t" -type "double3" 0 1000.1 0 ; + setAttr ".r" -type "double3" 90 0 0 ; + setAttr ".rp" -type "double3" 0 0 -1000.1 ; + setAttr ".rpt" -type "double3" 0 -1000.1 1000.1 ; +createNode camera -s -n "topShape" -p "top"; + rename -uid "3BD0CF60-40DB-5278-5D8B-06ACBDA32122"; + setAttr -k off ".v" no; + setAttr ".rnd" no; + setAttr ".coi" 1000.1; + setAttr ".ow" 30; + setAttr ".imn" -type "string" "top"; + setAttr ".den" -type "string" "top_depth"; + setAttr ".man" -type "string" "top_mask"; + setAttr ".hc" -type "string" "viewSet -t %camera"; + setAttr ".o" yes; + setAttr ".ai_translator" -type "string" "orthographic"; +createNode transform -s -n "front"; + rename -uid "D83DD5CE-4FE0-AB1B-81B2-87A63F0B7A05"; + setAttr ".v" no; + setAttr ".t" -type "double3" 0 0 1000.1 ; + setAttr ".r" -type "double3" 180 0 0 ; + setAttr ".rp" -type "double3" 0 0 -1000.1 ; +createNode camera -s -n "frontShape" -p "front"; + rename -uid "23313CBA-42C2-0B3A-0FCF-EA965EAC5DEC"; + setAttr -k off ".v" no; + setAttr ".rnd" no; + setAttr ".coi" 1000.1; + setAttr ".ow" 30; + setAttr ".imn" -type "string" "front"; + setAttr ".den" -type "string" "front_depth"; + setAttr ".man" -type "string" "front_mask"; + setAttr ".hc" -type "string" "viewSet -f %camera"; + setAttr ".o" yes; + setAttr ".ai_translator" -type "string" "orthographic"; +createNode transform -s -n "side"; + rename -uid "F70F692C-4A0D-BE64-9EE4-A99B6FA2D56E"; + setAttr ".v" no; + setAttr ".t" -type "double3" 1000.1 0 0 ; + setAttr ".r" -type "double3" 180 -90 0 ; + setAttr ".rp" -type "double3" 0 0 -1000.1 ; + setAttr ".rpt" -type "double3" -1000.1 0 1000.1 ; +createNode camera -s -n "sideShape" -p "side"; + rename -uid "C05669C3-420E-CA11-E5FC-7EB64EF8B632"; + setAttr -k off ".v" no; + setAttr ".rnd" no; + setAttr ".coi" 1000.1; + setAttr ".ow" 30; + setAttr ".imn" -type "string" "side"; + setAttr ".den" -type "string" "side_depth"; + setAttr ".man" -type "string" "side_mask"; + setAttr ".hc" -type "string" "viewSet -s %camera"; + setAttr ".o" yes; + setAttr ".ai_translator" -type "string" "orthographic"; +createNode transform -n "pSphere1_GEO"; + rename -uid "7445A43F-444F-B2D3-4315-2AA013D2E0B6"; + addAttr -ci true -sn "cbId" -ln "cbId" -dt "string"; + setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:440654b3dfe4"; +createNode mesh -n "pSphere1_GEOShape1" -p "pSphere1_GEO"; + rename -uid "7C731260-45C6-339E-07BF-359446B08EA1"; + addAttr -ci true -sn "cbId" -ln "cbId" -dt "string"; + setAttr -k off ".v"; + setAttr ".vir" yes; + setAttr ".vif" yes; + setAttr ".uvst[0].uvsn" -type "string" "map1"; + setAttr ".cuvs" -type "string" "map1"; + setAttr ".dcc" -type "string" "Ambient+Diffuse"; + setAttr ".covm[0]" 0 1 1; + setAttr ".cdvm[0]" 0 1 1; + setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:bf8e49bb98ec"; +createNode transform -n "pDisc1"; + rename -uid "DED70CCF-4C19-16E4-9E5D-66A05037BA47"; + addAttr -ci true -sn "cbId" -ln "cbId" -dt "string"; + setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:90e762703f08"; +createNode mesh -n "pDiscShape1" -p "pDisc1"; + rename -uid "E1FCDCCF-4DE1-D3B9-C4F8-3285F1CF5B25"; + addAttr -ci true -sn "cbId" -ln "cbId" -dt "string"; + setAttr -k off ".v"; + setAttr ".vir" yes; + setAttr ".vif" yes; + setAttr ".uvst[0].uvsn" -type "string" "map1"; + setAttr ".cuvs" -type "string" "map1"; + setAttr ".dcc" -type "string" "Ambient+Diffuse"; + setAttr ".covm[0]" 0 1 1; + setAttr ".cdvm[0]" 0 1 1; + setAttr ".ai_translator" -type "string" "polymesh"; + setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:4ee3da11a1a4"; +createNode lightLinker -s -n "lightLinker1"; + rename -uid "DC94B53F-40F5-0880-68DF-9DB3C2E58867"; + setAttr -s 2 ".lnk"; + setAttr -s 2 ".slnk"; +createNode shapeEditorManager -n "shapeEditorManager"; + rename -uid "24D8DE75-4814-8FB0-8085-4783DD93A677"; +createNode poseInterpolatorManager -n "poseInterpolatorManager"; + rename -uid "14585EF5-4E8A-77DB-74C8-A0A4ECF7AEEC"; +createNode displayLayerManager -n "layerManager"; + rename -uid "AB0E325B-43C2-278D-6AF0-18B336147BE8"; +createNode displayLayer -n "defaultLayer"; + rename -uid "4A776D1B-401F-7069-1C74-A7AAE84CEE03"; + setAttr ".ufem" -type "stringArray" 0 ; +createNode renderLayerManager -n "renderLayerManager"; + rename -uid "725341DF-4E0B-AAC3-F73A-67B8C9D1495D"; +createNode renderLayer -n "defaultRenderLayer"; + rename -uid "B134920D-4508-23BD-A6CA-11B43DE03F53"; + setAttr ".g" yes; +createNode renderSetup -n "renderSetup"; + rename -uid "9A8F0D15-41AB-CA70-C2D8-B78840BF9BC1"; +createNode polySphere -n "polySphere1"; + rename -uid "DA319706-4ACF-B15C-53B2-48AC80D202EA"; +createNode objectSet -n "modelMain"; + rename -uid "A76AD4F8-4CF5-AA0D-4E98-BABEE6454CC3"; + addAttr -ci true -sn "cbId" -ln "cbId" -dt "string"; + addAttr -ci true -sn "id" -ln "id" -dt "string"; + addAttr -ci true -sn "family" -ln "family" -dt "string"; + addAttr -ci true -sn "subset" -ln "subset" -dt "string"; + addAttr -ci true -sn "active" -ln "active" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "creator_identifier" -ln "creator_identifier" -dt "string"; + addAttr -ci true -sn "variant" -ln "variant" -dt "string"; + addAttr -ci true -sn "asset" -ln "asset" -dt "string"; + addAttr -ci true -sn "writeColorSets" -ln "writeColorSets" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "writeFaceSets" -ln "writeFaceSets" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "attr" -ln "attr" -dt "string"; + addAttr -ci true -sn "attrPrefix" -ln "attrPrefix" -dt "string"; + addAttr -ci true -sn "includeParentHierarchy" -ln "includeParentHierarchy" -min + 0 -max 1 -at "bool"; + addAttr -ci true -sn "task" -ln "task" -dt "string"; + addAttr -ci true -sn "instance_id" -ln "instance_id" -dt "string"; + addAttr -ci true -sn "publish_attributes" -ln "publish_attributes" -dt "string"; + addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" + -dt "string"; + setAttr ".ihi" 0; + setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:7364ea6776c9"; + setAttr ".id" -type "string" "pyblish.avalon.instance"; + setAttr ".family" -type "string" "model"; + setAttr ".subset" -type "string" "modelMain"; + setAttr -cb on ".active" yes; + setAttr ".creator_identifier" -type "string" "io.openpype.creators.maya.model"; + setAttr ".variant" -type "string" "Main"; + setAttr ".asset" -type "string" "test_asset"; + setAttr -cb on ".writeColorSets"; + setAttr -cb on ".writeFaceSets"; + setAttr ".attr" -type "string" ""; + setAttr ".attrPrefix" -type "string" ""; + setAttr -cb on ".includeParentHierarchy"; + setAttr ".task" -type "string" "TestTask"; + setAttr ".instance_id" -type "string" "6889d3db-b813-43db-96de-9ba555dc4472"; + setAttr ".publish_attributes" -type "string" "{\"ValidateNodeIDsRelated\": {\"active\": true}, \"ValidateTransformNamingSuffix\": {\"active\": true}, \"ValidateColorSets\": {\"active\": true}, \"ValidateMeshArnoldAttributes\": {\"active\": true}, \"ValidateMeshHasUVs\": {\"active\": true}, \"ValidateMeshNonZeroEdgeLength\": {\"active\": true}, \"ExtractModel\": {\"active\": true}}"; + setAttr ".__creator_attributes_keys" -type "string" "writeColorSets,writeFaceSets,includeParentHierarchy,attr,attrPrefix"; +createNode script -n "uiConfigurationScriptNode"; + rename -uid "4B7AFB53-452E-E870-63E1-CCA1DD6EAF13"; + setAttr ".b" -type "string" ( + "// Maya Mel UI Configuration File.\n//\n// This script is machine generated. Edit at your own risk.\n//\n//\n\nglobal string $gMainPane;\nif (`paneLayout -exists $gMainPane`) {\n\n\tglobal int $gUseScenePanelConfig;\n\tint $useSceneConfig = $gUseScenePanelConfig;\n\tint $nodeEditorPanelVisible = stringArrayContains(\"nodeEditorPanel1\", `getPanel -vis`);\n\tint $nodeEditorWorkspaceControlOpen = (`workspaceControl -exists nodeEditorPanel1Window` && `workspaceControl -q -visible nodeEditorPanel1Window`);\n\tint $menusOkayInPanels = `optionVar -q allowMenusInPanels`;\n\tint $nVisPanes = `paneLayout -q -nvp $gMainPane`;\n\tint $nPanes = 0;\n\tstring $editorName;\n\tstring $panelName;\n\tstring $itemFilterName;\n\tstring $panelConfig;\n\n\t//\n\t// get current state of the UI\n\t//\n\tsceneUIReplacement -update $gMainPane;\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Top View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Top View\")) -mbv $menusOkayInPanels $panelName;\n" + + "\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"|front\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n" + + " -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n" + + " -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -bluePencil 1\n -greasePencils 0\n -shadows 0\n -captureSequenceNumber -1\n -width 600\n -height 344\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Side View\")) `;\n" + + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Side View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"|front\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n" + + " -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n" + + " -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -bluePencil 1\n -greasePencils 0\n -shadows 0\n -captureSequenceNumber -1\n -width 600\n -height 344\n -sceneRenderFilter 0\n $editorName;\n" + + " modelEditor -e -viewSelected 0 $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Front View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Front View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"|top\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n" + + " -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n" + + " -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -bluePencil 1\n" + + " -greasePencils 0\n -shadows 0\n -captureSequenceNumber -1\n -width 600\n -height 344\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Persp View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Persp View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"|persp\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n" + + " -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n" + + " -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n" + + " -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -bluePencil 1\n -greasePencils 0\n -shadows 0\n -captureSequenceNumber -1\n -width 600\n -height 344\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"outlinerPanel\" (localizedPanelLabel(\"ToggledOutliner\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\toutlinerPanel -edit -l (localizedPanelLabel(\"ToggledOutliner\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n outlinerEditor -e \n -showShapes 0\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 1\n -showReferenceMembers 1\n -showAttributes 0\n" + + " -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -organizeByClip 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showParentContainers 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -isSet 0\n -isSetMember 0\n" + + " -showUfeItems 1\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n -renderFilterIndex 0\n -selectionOrder \"chronological\" \n -expandAttribute 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"outlinerPanel\" (localizedPanelLabel(\"Outliner\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n" + + "\t\toutlinerPanel -edit -l (localizedPanelLabel(\"Outliner\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n outlinerEditor -e \n -showShapes 0\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -organizeByClip 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showParentContainers 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n" + + " -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -showUfeItems 1\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n" + + "\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"graphEditor\" (localizedPanelLabel(\"Graph Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Graph Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -organizeByClip 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 1\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n" + + " -showParentContainers 1\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 0\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 1\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 1\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -showUfeItems 1\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n" + + " -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 1\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"GraphEd\");\n animCurveEditor -e \n -displayValues 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -showPlayRangeShades \"on\" \n -lockPlayRangeShades \"off\" \n -smoothness \"fine\" \n -resultSamples 1.041667\n -resultScreenSamples 0\n -resultUpdate \"delayed\" \n -showUpstreamCurves 1\n -keyMinScale 1\n -stackedCurvesMin -1\n -stackedCurvesMax 1\n -stackedCurvesSpace 0.2\n" + + " -preSelectionHighlight 0\n -constrainDrag 0\n -valueLinesToggle 1\n -highlightAffectedCurves 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dopeSheetPanel\" (localizedPanelLabel(\"Dope Sheet\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Dope Sheet\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -organizeByClip 1\n -showAnimLayerWeight 1\n" + + " -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showParentContainers 1\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 0\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 1\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -showUfeItems 1\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n" + + " -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"DopeSheetEd\");\n dopeSheetEditor -e \n -displayValues 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -outliner \"dopeSheetPanel1OutlineEd\" \n -showSummary 1\n -showScene 0\n -hierarchyBelow 0\n -showTicks 1\n -selectionWindow 0 0 0 0 \n" + + " $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"timeEditorPanel\" (localizedPanelLabel(\"Time Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Time Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"clipEditorPanel\" (localizedPanelLabel(\"Trax Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Trax Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = clipEditorNameFromPanel($panelName);\n clipEditor -e \n -displayValues 0\n -snapTime \"none\" \n -snapValue \"none\" \n -initialized 0\n -manageSequencer 0 \n $editorName;\n\t\tif (!$useSceneConfig) {\n" + + "\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"sequenceEditorPanel\" (localizedPanelLabel(\"Camera Sequencer\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Camera Sequencer\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = sequenceEditorNameFromPanel($panelName);\n clipEditor -e \n -displayValues 0\n -snapTime \"none\" \n -snapValue \"none\" \n -initialized 0\n -manageSequencer 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"hyperGraphPanel\" (localizedPanelLabel(\"Hypergraph Hierarchy\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Hypergraph Hierarchy\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"HyperGraphEd\");\n" + + " hyperGraph -e \n -graphLayoutStyle \"hierarchicalLayout\" \n -orientation \"horiz\" \n -mergeConnections 0\n -zoom 1\n -animateTransition 0\n -showRelationships 1\n -showShapes 0\n -showDeformers 0\n -showExpressions 0\n -showConstraints 0\n -showConnectionFromSelected 0\n -showConnectionToSelected 0\n -showConstraintLabels 0\n -showUnderworld 0\n -showInvisible 0\n -transitionFrames 1\n -opaqueContainers 0\n -freeform 0\n -imagePosition 0 0 \n -imageScale 1\n -imageEnabled 0\n -graphType \"DAG\" \n -heatMapDisplay 0\n -updateSelection 1\n -updateNodeAdded 1\n -useDrawOverrideColor 0\n -limitGraphTraversal -1\n -range 0 0 \n" + + " -iconSize \"smallIcons\" \n -showCachedConnections 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"hyperShadePanel\" (localizedPanelLabel(\"Hypershade\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Hypershade\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"visorPanel\" (localizedPanelLabel(\"Visor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Visor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"nodeEditorPanel\" (localizedPanelLabel(\"Node Editor\")) `;\n\tif ($nodeEditorPanelVisible || $nodeEditorWorkspaceControlOpen) {\n" + + "\t\tif (\"\" == $panelName) {\n\t\t\tif ($useSceneConfig) {\n\t\t\t\t$panelName = `scriptedPanel -unParent -type \"nodeEditorPanel\" -l (localizedPanelLabel(\"Node Editor\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"NodeEditorEd\");\n nodeEditor -e \n -allAttributes 0\n -allNodes 0\n -autoSizeNodes 1\n -consistentNameSize 1\n -createNodeCommand \"nodeEdCreateNodeCommand\" \n -connectNodeOnCreation 0\n -connectOnDrop 0\n -copyConnectionsOnPaste 0\n -connectionStyle \"bezier\" \n -defaultPinnedState 0\n -additiveGraphingMode 0\n -connectedGraphingMode 1\n -settingsChangedCallback \"nodeEdSyncControls\" \n -traversalDepthLimit -1\n -keyPressCommand \"nodeEdKeyPressCommand\" \n -nodeTitleMode \"name\" \n -gridSnap 0\n -gridVisibility 1\n -crosshairOnEdgeDragging 0\n" + + " -popupMenuScript \"nodeEdBuildPanelMenus\" \n -showNamespace 1\n -showShapes 1\n -showSGShapes 0\n -showTransforms 1\n -useAssets 1\n -syncedSelection 1\n -extendToShapes 1\n -showUnitConversions 0\n -editorMode \"default\" \n -hasWatchpoint 0\n $editorName;\n\t\t\t}\n\t\t} else {\n\t\t\t$label = `panel -q -label $panelName`;\n\t\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Node Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"NodeEditorEd\");\n nodeEditor -e \n -allAttributes 0\n -allNodes 0\n -autoSizeNodes 1\n -consistentNameSize 1\n -createNodeCommand \"nodeEdCreateNodeCommand\" \n -connectNodeOnCreation 0\n -connectOnDrop 0\n -copyConnectionsOnPaste 0\n -connectionStyle \"bezier\" \n -defaultPinnedState 0\n" + + " -additiveGraphingMode 0\n -connectedGraphingMode 1\n -settingsChangedCallback \"nodeEdSyncControls\" \n -traversalDepthLimit -1\n -keyPressCommand \"nodeEdKeyPressCommand\" \n -nodeTitleMode \"name\" \n -gridSnap 0\n -gridVisibility 1\n -crosshairOnEdgeDragging 0\n -popupMenuScript \"nodeEdBuildPanelMenus\" \n -showNamespace 1\n -showShapes 1\n -showSGShapes 0\n -showTransforms 1\n -useAssets 1\n -syncedSelection 1\n -extendToShapes 1\n -showUnitConversions 0\n -editorMode \"default\" \n -hasWatchpoint 0\n $editorName;\n\t\t\tif (!$useSceneConfig) {\n\t\t\t\tpanel -e -l $label $panelName;\n\t\t\t}\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"createNodePanel\" (localizedPanelLabel(\"Create Node\")) `;\n\tif (\"\" != $panelName) {\n" + + "\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Create Node\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"polyTexturePlacementPanel\" (localizedPanelLabel(\"UV Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"UV Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"renderWindowPanel\" (localizedPanelLabel(\"Render View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Render View\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"shapePanel\" (localizedPanelLabel(\"Shape Editor\")) `;\n\tif (\"\" != $panelName) {\n" + + "\t\t$label = `panel -q -label $panelName`;\n\t\tshapePanel -edit -l (localizedPanelLabel(\"Shape Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"posePanel\" (localizedPanelLabel(\"Pose Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tposePanel -edit -l (localizedPanelLabel(\"Pose Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dynRelEdPanel\" (localizedPanelLabel(\"Dynamic Relationships\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Dynamic Relationships\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"relationshipPanel\" (localizedPanelLabel(\"Relationship Editor\")) `;\n" + + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Relationship Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"referenceEditorPanel\" (localizedPanelLabel(\"Reference Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Reference Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dynPaintScriptedPanelType\" (localizedPanelLabel(\"Paint Effects\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Paint Effects\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"scriptEditorPanel\" (localizedPanelLabel(\"Script Editor\")) `;\n" + + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Script Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"profilerPanel\" (localizedPanelLabel(\"Profiler Tool\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Profiler Tool\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"contentBrowserPanel\" (localizedPanelLabel(\"Content Browser\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Content Browser\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\tif ($useSceneConfig) {\n string $configName = `getPanel -cwl (localizedPanelLabel(\"Current Layout\"))`;\n" + + " if (\"\" != $configName) {\n\t\t\tpanelConfiguration -edit -label (localizedPanelLabel(\"Current Layout\")) \n\t\t\t\t-userCreated false\n\t\t\t\t-defaultImage \"vacantCell.xP:/\"\n\t\t\t\t-image \"\"\n\t\t\t\t-sc false\n\t\t\t\t-configString \"global string $gMainPane; paneLayout -e -cn \\\"quad\\\" -ps 1 50 50 -ps 2 50 50 -ps 3 50 50 -ps 4 50 50 $gMainPane;\"\n\t\t\t\t-removeAllPanels\n\t\t\t\t-ap false\n\t\t\t\t\t(localizedPanelLabel(\"Top View\")) \n\t\t\t\t\t\"modelPanel\"\n" + + "\t\t\t\t\t\"$panelName = `modelPanel -unParent -l (localizedPanelLabel(\\\"Top View\\\")) -mbv $menusOkayInPanels `;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera top` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 16384\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -controllers 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -bluePencil 1\\n -greasePencils 0\\n -shadows 0\\n -captureSequenceNumber -1\\n -width 600\\n -height 344\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName\"\n" + + "\t\t\t\t\t\"modelPanel -edit -l (localizedPanelLabel(\\\"Top View\\\")) -mbv $menusOkayInPanels $panelName;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera top` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 16384\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -controllers 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -bluePencil 1\\n -greasePencils 0\\n -shadows 0\\n -captureSequenceNumber -1\\n -width 600\\n -height 344\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName\"\n" + + "\t\t\t\t-ap false\n\t\t\t\t\t(localizedPanelLabel(\"Persp View\")) \n\t\t\t\t\t\"modelPanel\"\n" + + "\t\t\t\t\t\"$panelName = `modelPanel -unParent -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels `;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera persp` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 16384\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -controllers 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -bluePencil 1\\n -greasePencils 0\\n -shadows 0\\n -captureSequenceNumber -1\\n -width 600\\n -height 344\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName\"\n" + + "\t\t\t\t\t\"modelPanel -edit -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels $panelName;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera persp` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 16384\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -controllers 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -bluePencil 1\\n -greasePencils 0\\n -shadows 0\\n -captureSequenceNumber -1\\n -width 600\\n -height 344\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName\"\n" + + "\t\t\t\t-ap false\n\t\t\t\t\t(localizedPanelLabel(\"Side View\")) \n\t\t\t\t\t\"modelPanel\"\n" + + "\t\t\t\t\t\"$panelName = `modelPanel -unParent -l (localizedPanelLabel(\\\"Side View\\\")) -mbv $menusOkayInPanels `;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera side` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 16384\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -controllers 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -bluePencil 1\\n -greasePencils 0\\n -shadows 0\\n -captureSequenceNumber -1\\n -width 600\\n -height 344\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName\"\n" + + "\t\t\t\t\t\"modelPanel -edit -l (localizedPanelLabel(\\\"Side View\\\")) -mbv $menusOkayInPanels $panelName;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera side` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 16384\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -controllers 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -bluePencil 1\\n -greasePencils 0\\n -shadows 0\\n -captureSequenceNumber -1\\n -width 600\\n -height 344\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName\"\n" + + "\t\t\t\t-ap false\n\t\t\t\t\t(localizedPanelLabel(\"Front View\")) \n\t\t\t\t\t\"modelPanel\"\n" + + "\t\t\t\t\t\"$panelName = `modelPanel -unParent -l (localizedPanelLabel(\\\"Front View\\\")) -mbv $menusOkayInPanels `;\\n$editorName = $panelName;\\nmodelEditor -e \\n -camera \\\"|top\\\" \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 16384\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -controllers 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -bluePencil 1\\n -greasePencils 0\\n -shadows 0\\n -captureSequenceNumber -1\\n -width 600\\n -height 344\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName\"\n" + + "\t\t\t\t\t\"modelPanel -edit -l (localizedPanelLabel(\\\"Front View\\\")) -mbv $menusOkayInPanels $panelName;\\n$editorName = $panelName;\\nmodelEditor -e \\n -camera \\\"|top\\\" \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 16384\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -controllers 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -bluePencil 1\\n -greasePencils 0\\n -shadows 0\\n -captureSequenceNumber -1\\n -width 600\\n -height 344\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName\"\n" + + "\t\t\t\t$configName;\n\n setNamedPanelLayout (localizedPanelLabel(\"Current Layout\"));\n }\n\n panelHistory -e -clear mainPanelHistory;\n sceneUIReplacement -clear;\n\t}\n\n\ngrid -spacing 5 -size 12 -divisions 5 -displayAxes yes -displayGridLines yes -displayDivisionLines yes -displayPerspectiveLabels no -displayOrthographicLabels no -displayAxesBold yes -perspectiveLabelPosition axis -orthographicLabelPosition edge;\nviewManip -drawCompass 0 -compassAngle 0 -frontParameters \"\" -homeParameters \"\" -selectionLockParameters \"\";\n}\n"); + setAttr ".st" 3; +createNode script -n "sceneConfigurationScriptNode"; + rename -uid "72B19BC2-43A2-E229-0A73-2CB861A291D1"; + setAttr ".b" -type "string" "playbackOptions -min 1000 -max 1001 -ast 1000 -aet 1001 "; + setAttr ".st" 6; +createNode polyDisc -n "polyDisc1"; + rename -uid "9ED8A7BD-4FFD-6107-4322-35ACD1D3AC42"; +createNode aiOptions -s -n "defaultArnoldRenderOptions"; + rename -uid "51BB3D7A-4C7D-FCDD-1B21-D89934107F98"; + setAttr ".version" -type "string" "5.3.1"; +createNode aiAOVFilter -s -n "defaultArnoldFilter"; + rename -uid "989A5992-46C8-0CB2-B2B8-4E868F31FEA8"; + setAttr ".ai_translator" -type "string" "gaussian"; +createNode aiAOVDriver -s -n "defaultArnoldDriver"; + rename -uid "B8469AD8-47C8-9EF1-FE5E-5AB50ABC1536"; + setAttr ".ai_translator" -type "string" "exr"; +createNode aiAOVDriver -s -n "defaultArnoldDisplayDriver"; + rename -uid "21D4F4CD-4D78-001C-610D-798402CD7CF0"; + setAttr ".output_mode" 0; + setAttr ".ai_translator" -type "string" "maya"; +createNode objectSet -n "workfileMain"; + rename -uid "3C9B5D6F-4579-8E3B-5B7D-4C88865A1C68"; + addAttr -ci true -sn "id" -ln "id" -dt "string"; + addAttr -ci true -sn "family" -ln "family" -dt "string"; + addAttr -ci true -sn "subset" -ln "subset" -dt "string"; + addAttr -ci true -sn "active" -ln "active" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "creator_identifier" -ln "creator_identifier" -dt "string"; + addAttr -ci true -sn "variant" -ln "variant" -dt "string"; + addAttr -ci true -sn "asset" -ln "asset" -dt "string"; + addAttr -ci true -sn "task" -ln "task" -dt "string"; + addAttr -ci true -sn "instance_id" -ln "instance_id" -dt "string"; + addAttr -ci true -sn "publish_attributes" -ln "publish_attributes" -dt "string"; + addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" + -dt "string"; + addAttr -ci true -sn "cbId" -ln "cbId" -dt "string"; + setAttr ".ihi" 0; + setAttr ".hio" yes; + setAttr ".id" -type "string" "pyblish.avalon.instance"; + setAttr ".family" -type "string" "workfile"; + setAttr ".subset" -type "string" "workfileTestTask"; + setAttr -cb on ".active" yes; + setAttr ".creator_identifier" -type "string" "io.openpype.creators.maya.workfile"; + setAttr ".variant" -type "string" "Main"; + setAttr ".asset" -type "string" "test_asset"; + setAttr ".task" -type "string" "TestTask"; + setAttr ".instance_id" -type "string" "911dc92a-ad29-41e5-bbf9-733d56174fb9"; + setAttr ".publish_attributes" -type "string" "{\"ExtractImportReference\": {\"active\": false}}"; + setAttr ".__creator_attributes_keys" -type "string" ""; + setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:30d256dac64c"; +select -ne :time1; + setAttr ".o" 1001; + setAttr ".unw" 1001; +select -ne :hardwareRenderingGlobals; + setAttr ".otfna" -type "stringArray" 22 "NURBS Curves" "NURBS Surfaces" "Polygons" "Subdiv Surface" "Particles" "Particle Instance" "Fluids" "Strokes" "Image Planes" "UI" "Lights" "Cameras" "Locators" "Joints" "IK Handles" "Deformers" "Motion Trails" "Components" "Hair Systems" "Follicles" "Misc. UI" "Ornaments" ; + setAttr ".otfva" -type "Int32Array" 22 0 1 1 1 1 1 + 1 1 1 0 0 0 0 0 0 0 0 0 + 0 0 0 0 ; + setAttr ".fprt" yes; +select -ne :renderPartition; + setAttr -s 2 ".st"; +select -ne :renderGlobalsList1; +select -ne :defaultShaderList1; + setAttr -s 5 ".s"; +select -ne :postProcessList1; + setAttr -s 2 ".p"; +select -ne :defaultRenderingList1; +select -ne :standardSurface1; + setAttr ".b" 0.80000001192092896; + setAttr ".bc" -type "float3" 1 1 1 ; + setAttr ".s" 0.20000000298023224; +select -ne :initialShadingGroup; + setAttr -s 2 ".dsm"; + setAttr ".ro" yes; +select -ne :initialParticleSE; + setAttr ".ro" yes; +select -ne :defaultRenderGlobals; + addAttr -ci true -h true -sn "dss" -ln "defaultSurfaceShader" -dt "string"; + setAttr ".ren" -type "string" "arnold"; + setAttr ".fs" 1001; + setAttr ".ef" 1001; + setAttr ".dss" -type "string" "lambert1"; +select -ne :defaultResolution; + setAttr ".w" 1920; + setAttr ".h" 1080; + setAttr ".pa" 1; +select -ne :defaultColorMgtGlobals; + setAttr ".cfe" yes; + setAttr ".cfp" -type "string" "/OCIO-configs/Maya-legacy/config.ocio"; + setAttr ".vtn" -type "string" "sRGB gamma (legacy)"; + setAttr ".vn" -type "string" "sRGB gamma"; + setAttr ".dn" -type "string" "legacy"; + setAttr ".wsn" -type "string" "scene-linear Rec 709/sRGB"; + setAttr ".ovt" no; + setAttr ".povt" no; + setAttr ".otn" -type "string" "sRGB gamma (legacy)"; + setAttr ".potn" -type "string" "sRGB gamma (legacy)"; +select -ne :hardwareRenderGlobals; + setAttr ".ctrs" 256; + setAttr ".btrs" 512; +connectAttr "polySphere1.out" "pSphere1_GEOShape1.i"; +connectAttr "polyDisc1.output" "pDiscShape1.i"; +relationship "link" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message"; +relationship "link" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message"; +connectAttr "layerManager.dli[0]" "defaultLayer.id"; +connectAttr "renderLayerManager.rlmi[0]" "defaultRenderLayer.rlid"; +connectAttr "pSphere1_GEO.iog" "modelMain.dsm" -na; +connectAttr ":defaultArnoldDisplayDriver.msg" ":defaultArnoldRenderOptions.drivers" + -na; +connectAttr ":defaultArnoldFilter.msg" ":defaultArnoldRenderOptions.filt"; +connectAttr ":defaultArnoldDriver.msg" ":defaultArnoldRenderOptions.drvr"; +connectAttr "defaultRenderLayer.msg" ":defaultRenderingList1.r" -na; +connectAttr "pSphere1_GEOShape1.iog" ":initialShadingGroup.dsm" -na; +connectAttr "pDiscShape1.iog" ":initialShadingGroup.dsm" -na; +// End of test_project_test_asset_test_task_v001.ma diff --git a/tests/integration/hosts/maya/startup_scripts/userSetup.py b/tests/integration/hosts/maya/resources/userSetup.py similarity index 100% rename from tests/integration/hosts/maya/startup_scripts/userSetup.py rename to tests/integration/hosts/maya/resources/userSetup.py diff --git a/tests/integration/hosts/maya/test_publish_in_maya.py b/tests/integration/hosts/maya/test_publish_in_maya.py index c69bcd28c04..5f8f565fd9e 100644 --- a/tests/integration/hosts/maya/test_publish_in_maya.py +++ b/tests/integration/hosts/maya/test_publish_in_maya.py @@ -90,7 +90,7 @@ def test_db_asserts( additional_args=additional_args)) additional_args = {"context.subset": "workfileTest_task", - "context.ext": "mb"} + "context.ext": "ma"} failures.append( DBAssert.count_of_types(dbcon, "representation", 1, additional_args=additional_args)) From 0dd82cd5f4ccb779ba17e8e8bcbcd8d2ae9c97f9 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Tue, 25 Jul 2023 12:52:47 +0100 Subject: [PATCH 04/69] Ingest Maya workfile --- .../resources/test_project_test_asset_test_task_v001.ma | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/integration/hosts/maya/resources/test_project_test_asset_test_task_v001.ma b/tests/integration/hosts/maya/resources/test_project_test_asset_test_task_v001.ma index 4022cf7263e..614eb317691 100644 --- a/tests/integration/hosts/maya/resources/test_project_test_asset_test_task_v001.ma +++ b/tests/integration/hosts/maya/resources/test_project_test_asset_test_task_v001.ma @@ -157,12 +157,12 @@ createNode objectSet -n "modelMain"; addAttr -ci true -sn "writeFaceSets" -ln "writeFaceSets" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "attr" -ln "attr" -dt "string"; addAttr -ci true -sn "attrPrefix" -ln "attrPrefix" -dt "string"; - addAttr -ci true -sn "includeParentHierarchy" -ln "includeParentHierarchy" -min + addAttr -ci true -sn "includeParentHierarchy" -ln "includeParentHierarchy" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "task" -ln "task" -dt "string"; addAttr -ci true -sn "instance_id" -ln "instance_id" -dt "string"; addAttr -ci true -sn "publish_attributes" -ln "publish_attributes" -dt "string"; - addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" + addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" -dt "string"; setAttr ".ihi" 0; setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:7364ea6776c9"; @@ -265,7 +265,7 @@ createNode objectSet -n "workfileMain"; addAttr -ci true -sn "task" -ln "task" -dt "string"; addAttr -ci true -sn "instance_id" -ln "instance_id" -dt "string"; addAttr -ci true -sn "publish_attributes" -ln "publish_attributes" -dt "string"; - addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" + addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" -dt "string"; addAttr -ci true -sn "cbId" -ln "cbId" -dt "string"; setAttr ".ihi" 0; From e16e8323bc87fcfa70d489df8d60593de157e90c Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Tue, 25 Jul 2023 14:46:58 +0100 Subject: [PATCH 05/69] Simplify the resources naming --- tests/integration/hosts/maya/lib.py | 4 +--- ...{test_project_test_asset_test_task_v001.ma => workfile.ma} | 0 2 files changed, 1 insertion(+), 3 deletions(-) rename tests/integration/hosts/maya/resources/{test_project_test_asset_test_task_v001.ma => workfile.ma} (100%) diff --git a/tests/integration/hosts/maya/lib.py b/tests/integration/hosts/maya/lib.py index fbfa129b20c..f10ee419ab4 100644 --- a/tests/integration/hosts/maya/lib.py +++ b/tests/integration/hosts/maya/lib.py @@ -20,9 +20,7 @@ def last_workfile_path(self, download_test_data, output_folder_url): Maya expects workfile in proper folder, so copy is done first. """ src_path = os.path.join( - os.path.dirname(__file__), - "resources", - "test_project_test_asset_test_task_v001.ma" + os.path.dirname(__file__), "resources", "workfile.ma" ) dest_folder = os.path.join( output_folder_url, self.PROJECT, self.ASSET, "work", self.TASK diff --git a/tests/integration/hosts/maya/resources/test_project_test_asset_test_task_v001.ma b/tests/integration/hosts/maya/resources/workfile.ma similarity index 100% rename from tests/integration/hosts/maya/resources/test_project_test_asset_test_task_v001.ma rename to tests/integration/hosts/maya/resources/workfile.ma From 7b4b1ba8e01c1871a45c050582da94ff70d5f729 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Tue, 25 Jul 2023 15:12:51 +0100 Subject: [PATCH 06/69] test_data_folder > data_folder and test_openpype_mongo > openpype_mongo --- openpype/cli.py | 12 +++++----- openpype/pype_commands.py | 14 ++++++------ tests/conftest.py | 12 +++++----- tests/integration/README.md | 20 ++++++++--------- .../nuke/test_deadline_publish_in_nuke.py | 2 +- .../hosts/nuke/test_publish_in_nuke.py | 2 +- tests/lib/testing_classes.py | 22 +++++++++---------- 7 files changed, 42 insertions(+), 42 deletions(-) diff --git a/openpype/cli.py b/openpype/cli.py index 738e866b272..69a44d322f1 100644 --- a/openpype/cli.py +++ b/openpype/cli.py @@ -289,11 +289,11 @@ def run(script): "--pyargs", help="Run tests from package", default=None) -@click.option("--test_openpype_mongo", +@click.option("--openpype_mongo", help="MongoDB for testing.", default=None) @click.option("-t", - "--test_data_folder", + "--data_folder", help="Unzipped directory path of test file.", default=None) @click.option("--keep_app_open", @@ -326,8 +326,8 @@ def runtests( folder, mark, pyargs, - test_openpype_mongo, - test_data_folder, + openpype_mongo, + data_folder, keep_app_open, persist, app_variant, @@ -340,8 +340,8 @@ def runtests( folder, mark, pyargs, - test_openpype_mongo, - test_data_folder, + openpype_mongo, + data_folder, keep_app_open, persist, app_variant, diff --git a/openpype/pype_commands.py b/openpype/pype_commands.py index 72bed20598d..2188217a87d 100644 --- a/openpype/pype_commands.py +++ b/openpype/pype_commands.py @@ -273,8 +273,8 @@ def run_tests( folder, mark, pyargs, - test_openpype_mongo, - test_data_folder, + openpype_mongo, + data_folder, keep_app_open, persist, app_variant, @@ -289,7 +289,7 @@ def run_tests( folder (str): relative path to folder with tests mark (str): label to run tests marked by it (slow etc) pyargs (str): package path to test - test_data_folder (str): url to unzipped folder of test data + data_folder (str): url to unzipped folder of test data persist (bool): True if keep test db and published after test end app_variant (str): variant (eg 2020 for AE), empty if use @@ -317,11 +317,11 @@ def run_tests( if pyargs: args.extend(["--pyargs", pyargs]) - if test_openpype_mongo: - args.extend(["--test_openpype_mongo", test_openpype_mongo]) + if openpype_mongo: + args.extend(["--openpype_mongo", openpype_mongo]) - if test_data_folder: - args.extend(["--test_data_folder", test_data_folder]) + if data_folder: + args.extend(["--data_folder", data_folder]) if keep_app_open: args.extend(["--keep_app_open"]) diff --git a/tests/conftest.py b/tests/conftest.py index e0850fb1b5f..61ebf07749d 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -5,12 +5,12 @@ def pytest_addoption(parser): parser.addoption( - "--test_openpype_mongo", action="store", default=None, + "--openpype_mongo", action="store", default=None, help="Provide url of the Mongo database." ) parser.addoption( - "--test_data_folder", action="store", default=None, + "--data_folder", action="store", default=None, help="Provide url of a folder of unzipped test file" ) @@ -46,13 +46,13 @@ def pytest_addoption(parser): @pytest.fixture(scope="module") -def test_openpype_mongo(request): - return request.config.getoption("--test_openpype_mongo") +def openpype_mongo(request): + return request.config.getoption("--openpype_mongo") @pytest.fixture(scope="module") -def test_data_folder(request): - return request.config.getoption("--test_data_folder") +def data_folder(request): + return request.config.getoption("--data_folder") @pytest.fixture(scope="module") diff --git a/tests/integration/README.md b/tests/integration/README.md index eef81411279..6c8b3e88ff1 100644 --- a/tests/integration/README.md +++ b/tests/integration/README.md @@ -14,13 +14,13 @@ How to run - run in cmd `{OPENPYPE_ROOT}/.venv/Scripts/python.exe {OPENPYPE_ROOT}/start.py runtests {OPENPYPE_ROOT}/tests/integration` - add `hosts/APP_NAME` after integration part to limit only on specific app (eg. `{OPENPYPE_ROOT}/tests/integration/hosts/maya`) - -OR can use built executables + +OR can use built executables `openpype_console runtests {ABS_PATH}/tests/integration` How to check logs/errors from app -------------------------------- -Keep PERSIST to True in the class and check `test_openpype.logs` collection. +Keep PERSIST to True in the class and check `test_openpype.logs` collection. How to create test for publishing from host ------------------------------------------ @@ -29,7 +29,7 @@ How to create test for publishing from host - Put workfile into `test_data.zip/input/workfile` - If you require other than base DB dumps provide them to `test_data.zip/input/dumps` -- (Check commented code in `db_handler.py` how to dump specific DB. Currently all collections will be dumped.) -- Implement `last_workfile_path` +- Implement `last_workfile_path` - `startup_scripts` - must contain pointing host to startup script saved into `test_data.zip/input/startup` -- Script must contain something like (pseudocode) ``` @@ -39,7 +39,7 @@ from avalon import api, HOST from openpype.api import Logger log = Logger().get_logger(__name__) - + api.install(HOST) log_lines = [] for result in pyblish.util.publish_iter(): @@ -57,15 +57,15 @@ EXIT_APP (command to exit host) - If you would like add any command line arguments for your host app add it to `test_data.zip/input/app_args/app_args.json` (as a json list) - Provide any required environment variables to `test_data.zip/input/env_vars/env_vars.json` (as a json dictionary) - Zip `test_data.zip`, named it with descriptive name, upload it to Google Drive, right click - `Get link`, copy hash id (file must be accessible to anyone with a link!) -- Put this hash id and zip file name into TEST_FILES [(HASH_ID, FILE_NAME, MD5_OPTIONAL)]. If you want to check MD5 of downloaded +- Put this hash id and zip file name into TEST_FILES [(HASH_ID, FILE_NAME, MD5_OPTIONAL)]. If you want to check MD5 of downloaded file, provide md5 value of zipped file. - Implement any assert checks you need in extended class - Run test class manually (via Pycharm or pytest runner (TODO)) - If you want test to visually compare expected files to published one, set PERSIST to True, run test manually -- Locate temporary `publish` subfolder of temporary folder (found in debugging console log) - -- Copy whole folder content into .zip file into `expected` subfolder + -- Copy whole folder content into .zip file into `expected` subfolder -- By default tests are comparing only structure of `expected` and published format (eg. if you want to save space, replace published files with empty files, but with expected names!) -- Zip and upload again, change PERSIST to False - -- Use `TEST_DATA_FOLDER` variable in your class to reuse existing downloaded and unzipped test data (for faster creation of tests) -- Keep `APP_VARIANT` empty if you want to trigger test on latest version of app, or provide explicit value (as '2022' for Photoshop for example) \ No newline at end of file + +- Use `DATA_FOLDER` variable in your class to reuse existing downloaded and unzipped test data (for faster creation of tests) +- Keep `APP_VARIANT` empty if you want to trigger test on latest version of app, or provide explicit value (as '2022' for Photoshop for example) diff --git a/tests/integration/hosts/nuke/test_deadline_publish_in_nuke.py b/tests/integration/hosts/nuke/test_deadline_publish_in_nuke.py index a4026f195b0..d99ab48e99f 100644 --- a/tests/integration/hosts/nuke/test_deadline_publish_in_nuke.py +++ b/tests/integration/hosts/nuke/test_deadline_publish_in_nuke.py @@ -48,7 +48,7 @@ class TestDeadlinePublishInNuke(NukeDeadlinePublishTestClass): # keep empty to locate latest installed variant or explicit APP_VARIANT = "" PERSIST = False # True - keep test_db, test_openpype, outputted test files - TEST_DATA_FOLDER = None + DATA_FOLDER = None def test_db_asserts(self, dbcon, publish_finished): """Host and input data dependent expected results in DB.""" diff --git a/tests/integration/hosts/nuke/test_publish_in_nuke.py b/tests/integration/hosts/nuke/test_publish_in_nuke.py index bfd84e4fd57..19befce37f7 100644 --- a/tests/integration/hosts/nuke/test_publish_in_nuke.py +++ b/tests/integration/hosts/nuke/test_publish_in_nuke.py @@ -47,7 +47,7 @@ class TestPublishInNuke(NukeLocalPublishTestClass): # keep empty to locate latest installed variant or explicit APP_VARIANT = "" PERSIST = False # True - keep test_db, test_openpype, outputted test files - TEST_DATA_FOLDER = None + DATA_FOLDER = None def test_db_asserts(self, dbcon, publish_finished): """Host and input data dependent expected results in DB.""" diff --git a/tests/lib/testing_classes.py b/tests/lib/testing_classes.py index 781568c5dee..3f048d9e923 100644 --- a/tests/lib/testing_classes.py +++ b/tests/lib/testing_classes.py @@ -40,7 +40,7 @@ class ModuleUnitTest(BaseTest): """ PERSIST = False # True to not purge temporary folder nor test DB - TEST_OPENPYPE_MONGO = "mongodb://localhost:27017" + OPENPYPE_MONGO = "mongodb://localhost:27017" TEST_DB_NAME = "avalon_tests" TEST_PROJECT_NAME = "test_project" TEST_OPENPYPE_NAME = "openpype_tests" @@ -51,7 +51,7 @@ class ModuleUnitTest(BaseTest): ASSET = "test_asset" TASK = "test_task" - TEST_DATA_FOLDER = None + DATA_FOLDER = None @pytest.fixture(scope='session') def monkeypatch_session(self): @@ -68,11 +68,11 @@ def project_settings(self): ) @pytest.fixture(scope="module") - def download_test_data(self, test_data_folder, persist, request): - test_data_folder = test_data_folder or self.TEST_DATA_FOLDER - if test_data_folder: - print("Using existing folder {}".format(test_data_folder)) - yield test_data_folder + def download_test_data(self, data_folder, persist, request): + data_folder = data_folder or self.DATA_FOLDER + if data_folder: + print("Using existing folder {}".format(data_folder)) + yield data_folder else: tmpdir = tempfile.mkdtemp() print("Temporary folder created:: {}".format(tmpdir)) @@ -106,12 +106,12 @@ def output_folder_url(self, download_test_data): @pytest.fixture(scope="module") def env_var( - self, monkeypatch_session, download_test_data, test_openpype_mongo + self, monkeypatch_session, download_test_data, openpype_mongo ): """Sets temporary env vars from json file.""" # Collect openpype mongo. - if test_openpype_mongo: - self.TEST_OPENPYPE_MONGO = test_openpype_mongo + if openpype_mongo: + self.OPENPYPE_MONGO = openpype_mongo # Get class attributes for environment. attributes = {} @@ -272,7 +272,7 @@ class PublishTest(ModuleUnitTest): # keep empty to locate latest installed variant or explicit APP_VARIANT = "" PERSIST = True # True - keep test_db, test_openpype, outputted test files - TEST_DATA_FOLDER = None # use specific folder of unzipped test file + data_folder = None # use specific folder of unzipped test file SETUP_ONLY = False From cc5652007de68c6b98e74c9e15778c00734ca667 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Tue, 25 Jul 2023 15:25:07 +0100 Subject: [PATCH 07/69] Rename class variables --- tests/integration/hosts/maya/lib.py | 6 ++- .../maya/test_deadline_publish_in_maya.py | 2 +- .../hosts/maya/test_publish_in_maya.py | 2 +- tests/lib/testing_classes.py | 47 +++++++++---------- 4 files changed, 30 insertions(+), 27 deletions(-) diff --git a/tests/integration/hosts/maya/lib.py b/tests/integration/hosts/maya/lib.py index f10ee419ab4..2fdf585047b 100644 --- a/tests/integration/hosts/maya/lib.py +++ b/tests/integration/hosts/maya/lib.py @@ -23,7 +23,11 @@ def last_workfile_path(self, download_test_data, output_folder_url): os.path.dirname(__file__), "resources", "workfile.ma" ) dest_folder = os.path.join( - output_folder_url, self.PROJECT, self.ASSET, "work", self.TASK + output_folder_url, + self.PROJECT_NAME, + self.ASSET_NAME, + "work", + self.TASK_NAME ) os.makedirs(dest_folder) dest_path = os.path.join( diff --git a/tests/integration/hosts/maya/test_deadline_publish_in_maya.py b/tests/integration/hosts/maya/test_deadline_publish_in_maya.py index c5bf526f524..ea543eaee4a 100644 --- a/tests/integration/hosts/maya/test_deadline_publish_in_maya.py +++ b/tests/integration/hosts/maya/test_deadline_publish_in_maya.py @@ -23,7 +23,7 @@ class TestDeadlinePublishInMaya(MayaDeadlinePublishTestClass): """ PERSIST = True - TEST_FILES = [ + FILES = [ ("1dDY7CbdFXfRksGVoiuwjhnPoTRCCf5ea", "test_maya_deadline_publish.zip", "") ] diff --git a/tests/integration/hosts/maya/test_publish_in_maya.py b/tests/integration/hosts/maya/test_publish_in_maya.py index 5f8f565fd9e..4b67dfc7439 100644 --- a/tests/integration/hosts/maya/test_publish_in_maya.py +++ b/tests/integration/hosts/maya/test_publish_in_maya.py @@ -30,7 +30,7 @@ class TestPublishInMaya(MayaLocalPublishTestClass): """ PERSIST = False - TEST_FILES = [ + FILES = [ ("1BTSIIULJTuDc8VvXseuiJV_fL6-Bu7FP", "test_maya_publish.zip", "") ] diff --git a/tests/lib/testing_classes.py b/tests/lib/testing_classes.py index 3f048d9e923..6d2831df340 100644 --- a/tests/lib/testing_classes.py +++ b/tests/lib/testing_classes.py @@ -41,15 +41,14 @@ class ModuleUnitTest(BaseTest): PERSIST = False # True to not purge temporary folder nor test DB OPENPYPE_MONGO = "mongodb://localhost:27017" - TEST_DB_NAME = "avalon_tests" - TEST_PROJECT_NAME = "test_project" - TEST_OPENPYPE_NAME = "openpype_tests" + DATABASE_PRODUCTION_NAME = "avalon_tests" + DATABASE_SETTINGS_NAME = "openpype_tests" - TEST_FILES = [] + FILES = [] - PROJECT = "test_project" - ASSET = "test_asset" - TASK = "test_task" + PROJECT_NAME = "test_project" + ASSET_NAME = "test_asset" + TASK_NAME = "test_task" DATA_FOLDER = None @@ -64,7 +63,7 @@ def monkeypatch_session(self): @pytest.fixture(scope='module') def project_settings(self): yield get_project_settings( - self.PROJECT + self.PROJECT_NAME ) @pytest.fixture(scope="module") @@ -76,7 +75,7 @@ def download_test_data(self, data_folder, persist, request): else: tmpdir = tempfile.mkdtemp() print("Temporary folder created:: {}".format(tmpdir)) - for test_file in self.TEST_FILES: + for test_file in self.FILES: file_id, file_name, md5 = test_file f_name, ext = os.path.splitext(file_name) @@ -175,29 +174,29 @@ def db_setup( if dump_database: db_handler.backup_to_dump( - self.TEST_DB_NAME, + self.DATABASE_PRODUCTION_NAME, backup_dir ) else: db_handler.setup_from_dump( - self.TEST_DB_NAME, + self.DATABASE_PRODUCTION_NAME, backup_dir, overwrite=True, - db_name_out=self.TEST_DB_NAME + db_name_out=self.DATABASE_PRODUCTION_NAME ) db_handler.setup_from_dump( - self.TEST_OPENPYPE_NAME, + self.DATABASE_SETTINGS_NAME, backup_dir, overwrite=True, - db_name_out=self.TEST_OPENPYPE_NAME + db_name_out=self.DATABASE_SETTINGS_NAME ) yield db_handler persist = self.PERSIST or self.is_test_failed(request) if not persist: - db_handler.teardown(self.TEST_DB_NAME) - db_handler.teardown(self.TEST_OPENPYPE_NAME) + db_handler.teardown(self.DATABASE_PRODUCTION_NAME) + db_handler.teardown(self.DATABASE_SETTINGS_NAME) @pytest.fixture(scope="module") def dbcon(self, db_setup, output_folder_url): @@ -207,9 +206,9 @@ def dbcon(self, db_setup, output_folder_url): """ from openpype.pipeline import AvalonMongoDB dbcon = AvalonMongoDB() - dbcon.Session["AVALON_PROJECT"] = self.PROJECT - dbcon.Session["AVALON_ASSET"] = self.ASSET - dbcon.Session["AVALON_TASK"] = self.TASK + dbcon.Session["AVALON_PROJECT"] = self.PROJECT_NAME + dbcon.Session["AVALON_ASSET"] = self.ASSET_NAME + dbcon.Session["AVALON_TASK"] = self.TASK_NAME # set project root to temp folder platform_str = platform.system().lower() @@ -231,7 +230,7 @@ def dbcon_openpype(self, db_setup): """ from openpype.lib import OpenPypeMongoConnection mongo_client = OpenPypeMongoConnection.get_mongo_client() - yield mongo_client[self.TEST_OPENPYPE_NAME]["settings"] + yield mongo_client[self.DATABASE_SETTINGS_NAME]["settings"] def is_test_failed(self, request): # if request.node doesn't have rep_call, something failed @@ -272,7 +271,7 @@ class PublishTest(ModuleUnitTest): # keep empty to locate latest installed variant or explicit APP_VARIANT = "" PERSIST = True # True - keep test_db, test_openpype, outputted test files - data_folder = None # use specific folder of unzipped test file + DATA_FOLDER = None # use specific folder of unzipped test file SETUP_ONLY = False @@ -356,9 +355,9 @@ def launched_app( data = { "last_workfile_path": last_workfile_path, "start_last_workfile": True, - "project_name": self.PROJECT, - "asset_name": self.ASSET, - "task_name": self.TASK + "project_name": self.PROJECT_NAME, + "asset_name": self.ASSET_NAME, + "task_name": self.TASK_NAME } if app_args: data["app_args"] = app_args From 1a88975d023740783d9bab8b2af8a627c62caa48 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Tue, 25 Jul 2023 15:46:27 +0100 Subject: [PATCH 08/69] Ingest environment json --- tests/integration/hosts/maya/lib.py | 14 ++--------- .../hosts/maya/resources/environment.json | 11 +++++++++ .../hosts/maya/test_publish_in_maya.py | 10 ++++++++ tests/lib/testing_classes.py | 24 ++++++++++++------- 4 files changed, 39 insertions(+), 20 deletions(-) create mode 100644 tests/integration/hosts/maya/resources/environment.json diff --git a/tests/integration/hosts/maya/lib.py b/tests/integration/hosts/maya/lib.py index 2fdf585047b..ea797f23176 100644 --- a/tests/integration/hosts/maya/lib.py +++ b/tests/integration/hosts/maya/lib.py @@ -40,22 +40,12 @@ def last_workfile_path(self, download_test_data, output_folder_url): @pytest.fixture(scope="module") def startup_scripts(self, monkeypatch_session, download_test_data): """Points Maya to userSetup file from input data""" - user_setup_path = os.path.join( - os.path.dirname(__file__), "resources", "userSetup.py" - ) - startup_path = os.path.join( - download_test_data, "input", "startup" - ) - - shutil.copyfile( - user_setup_path, os.path.join(startup_path, "userSetup.py") - ) - + user_setup_path = os.path.join(os.path.dirname(__file__), "resources") original_pythonpath = os.environ.get("PYTHONPATH") monkeypatch_session.setenv( "PYTHONPATH", "{}{}{}".format( - startup_path, os.pathsep, original_pythonpath + user_setup_path, os.pathsep, original_pythonpath ) ) diff --git a/tests/integration/hosts/maya/resources/environment.json b/tests/integration/hosts/maya/resources/environment.json new file mode 100644 index 00000000000..07dbe8b8bb2 --- /dev/null +++ b/tests/integration/hosts/maya/resources/environment.json @@ -0,0 +1,11 @@ +{ + "OPENPYPE_MONGO": "{OPENPYPE_MONGO}", + "AVALON_MONGO": "{OPENPYPE_MONGO}", + "OPENPYPE_DATABASE_NAME": "{DATABASE_SETTINGS_NAME}", + "AVALON_TIMEOUT": "3000", + "AVALON_DB": "{DATABASE_PRODUCTION_NAME}", + "AVALON_PROJECT": "{PROJECT_NAME}", + "PYPE_DEBUG": "3", + "AVALON_CONFIG": "openpype", + "IS_TEST": "1" +} diff --git a/tests/integration/hosts/maya/test_publish_in_maya.py b/tests/integration/hosts/maya/test_publish_in_maya.py index 4b67dfc7439..cd31e187302 100644 --- a/tests/integration/hosts/maya/test_publish_in_maya.py +++ b/tests/integration/hosts/maya/test_publish_in_maya.py @@ -1,6 +1,8 @@ import os import re +import pytest + from tests.lib.assert_classes import DBAssert from tests.integration.hosts.maya.lib import ( MayaLocalPublishTestClass, LOG_PATH @@ -40,6 +42,14 @@ class TestPublishInMaya(MayaLocalPublishTestClass): TIMEOUT = 120 # publish timeout + @pytest.fixture(scope="module") + def environment_json(self, download_test_data): + # Set environment variables from input json and class attributes. + environment_path = os.path.join( + os.path.dirname(__file__), "resources", "environment.json" + ) + yield environment_path + def test_publish(self, dbcon, publish_finished, download_test_data): logging_path = os.path.join(download_test_data, LOG_PATH) with open(logging_path, "r") as f: diff --git a/tests/lib/testing_classes.py b/tests/lib/testing_classes.py index 6d2831df340..9af41fc9f97 100644 --- a/tests/lib/testing_classes.py +++ b/tests/lib/testing_classes.py @@ -103,9 +103,21 @@ def output_folder_url(self, download_test_data): shutil.rmtree(path) yield path + @pytest.fixture(scope="module") + def environment_json(self, download_test_data): + # Set environment variables from input json and class attributes. + environment_path = os.path.join( + download_test_data, "input", "env_vars", "env_var.json" + ) + yield environment_path + @pytest.fixture(scope="module") def env_var( - self, monkeypatch_session, download_test_data, openpype_mongo + self, + monkeypatch_session, + download_test_data, + openpype_mongo, + environment_json ): """Sets temporary env vars from json file.""" # Collect openpype mongo. @@ -120,18 +132,14 @@ def env_var( if not callable(value): attributes[attribute] = value - # Set environment variables from input json and class attributes. - env_url = os.path.join( - download_test_data, "input", "env_vars", "env_var.json" - ) - if not os.path.exists(env_url): + if not os.path.exists(environment_json): raise ValueError( - "Env variable file {} doesn't exist".format(env_url) + "Env variable file {} doesn't exist".format(environment_json) ) env_dict = {} try: - with open(env_url) as json_file: + with open(environment_json) as json_file: env_dict = json.load(json_file) except ValueError: print("{} doesn't contain valid JSON") From 3d2d53dfd51b90922bfe34abeed2b08b27e57a7a Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Tue, 25 Jul 2023 16:27:01 +0100 Subject: [PATCH 09/69] Part-refactor of setup code --- tests/lib/testing_classes.py | 73 ++++++++++++++++++++++-------------- 1 file changed, 45 insertions(+), 28 deletions(-) diff --git a/tests/lib/testing_classes.py b/tests/lib/testing_classes.py index 9af41fc9f97..39df7e63f4c 100644 --- a/tests/lib/testing_classes.py +++ b/tests/lib/testing_classes.py @@ -17,6 +17,42 @@ from openpype.settings import get_project_settings +def download_test_data(data_folder, files): + if data_folder: + print("Using existing folder {}".format(data_folder)) + return data_folder + + data_folder = tempfile.mkdtemp() + print("Temporary folder created:: {}".format(data_folder)) + for test_file in files: + file_id, file_name, md5 = test_file + + f_name, ext = os.path.splitext(file_name) + + RemoteFileHandler.download_file_from_google_drive( + file_id, str(data_folder), file_name + ) + + if ext.lstrip('.') in RemoteFileHandler.IMPLEMENTED_ZIP_FORMATS: + RemoteFileHandler.unzip(os.path.join(data_folder, file_name)) + + return data_folder + + +def output_folder_url(data_folder): + path = os.path.join(data_folder, "output") + if os.path.exists(path): + print("Purging {}".format(path)) + shutil.rmtree(path) + return path + + +def setup(data_folder, files): + download_test_data(data_folder, files) + output_folder_url(data_folder) + #db_setup + + class BaseTest: """Empty base test class""" @@ -68,39 +104,21 @@ def project_settings(self): @pytest.fixture(scope="module") def download_test_data(self, data_folder, persist, request): - data_folder = data_folder or self.DATA_FOLDER - if data_folder: - print("Using existing folder {}".format(data_folder)) - yield data_folder - else: - tmpdir = tempfile.mkdtemp() - print("Temporary folder created:: {}".format(tmpdir)) - for test_file in self.FILES: - file_id, file_name, md5 = test_file - - f_name, ext = os.path.splitext(file_name) - - RemoteFileHandler.download_file_from_google_drive(file_id, - str(tmpdir), - file_name) + data_folder = download_test_data( + data_folder or self.DATA_FOLDER, self.FILES + ) - if ext.lstrip('.') in RemoteFileHandler.IMPLEMENTED_ZIP_FORMATS: # noqa: E501 - RemoteFileHandler.unzip(os.path.join(tmpdir, file_name)) - yield tmpdir + yield data_folder - persist = (persist or self.PERSIST or - self.is_test_failed(request)) - if not persist: - print("Removing {}".format(tmpdir)) - shutil.rmtree(tmpdir) + persist = (persist or self.PERSIST or self.is_test_failed(request)) + if not persist: + print("Removing {}".format(data_folder)) + shutil.rmtree(data_folder) @pytest.fixture(scope="module") def output_folder_url(self, download_test_data): """Returns location of published data, cleans it first if exists.""" - path = os.path.join(download_test_data, "output") - if os.path.exists(path): - print("Purging {}".format(path)) - shutil.rmtree(path) + path = output_folder_url(download_test_data) yield path @pytest.fixture(scope="module") @@ -170,7 +188,6 @@ def db_setup( self, download_test_data, env_var, - monkeypatch_session, request, dump_database ): From 423123dc602631a827cb3e9126b7f65df5ff6de5 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Tue, 25 Jul 2023 17:09:45 +0100 Subject: [PATCH 10/69] refactor db_setup --- tests/lib/testing_classes.py | 90 ++++++++++++++++++++++++------------ 1 file changed, 60 insertions(+), 30 deletions(-) diff --git a/tests/lib/testing_classes.py b/tests/lib/testing_classes.py index 39df7e63f4c..5aeae2b19ca 100644 --- a/tests/lib/testing_classes.py +++ b/tests/lib/testing_classes.py @@ -47,10 +47,54 @@ def output_folder_url(data_folder): return path -def setup(data_folder, files): +def db_setup( + backup_directory, + openpype_mongo, + database_production_name, + database_settings_name +): + db_handler = DBHandler(openpype_mongo) + + db_handler.setup_from_dump( + database_production_name, + backup_directory, + overwrite=True, + db_name_out=database_production_name + ) + db_handler.setup_from_dump( + database_settings_name, + backup_directory, + overwrite=True, + db_name_out=database_settings_name + ) + + return db_handler + + +def dump_database(openpype_mongo, database_name, backup_directory): + db_handler = DBHandler(openpype_mongo) + db_handler.backup_to_dump( + database_name, + backup_directory + ) + + +def setup( + data_folder, + files, + backup_directory, + openpype_mongo, + database_production_name, + database_settings_name +): download_test_data(data_folder, files) output_folder_url(data_folder) - #db_setup + db_setup( + backup_directory, + openpype_mongo, + database_production_name, + database_settings_name + ) class BaseTest: @@ -130,7 +174,7 @@ def environment_json(self, download_test_data): yield environment_path @pytest.fixture(scope="module") - def env_var( + def environment_setup( self, monkeypatch_session, download_test_data, @@ -187,34 +231,20 @@ def env_var( def db_setup( self, download_test_data, - env_var, - request, - dump_database + openpype_mongo, + request ): """Restore prepared MongoDB dumps into selected DB.""" - backup_dir = os.path.join(download_test_data, "input", "dumps") - uri = os.environ.get("OPENPYPE_MONGO") - db_handler = DBHandler(uri) + if openpype_mongo: + self.OPENPYPE_MONGO = openpype_mongo - if dump_database: - db_handler.backup_to_dump( - self.DATABASE_PRODUCTION_NAME, - backup_dir - ) - else: - db_handler.setup_from_dump( - self.DATABASE_PRODUCTION_NAME, - backup_dir, - overwrite=True, - db_name_out=self.DATABASE_PRODUCTION_NAME - ) - db_handler.setup_from_dump( - self.DATABASE_SETTINGS_NAME, - backup_dir, - overwrite=True, - db_name_out=self.DATABASE_SETTINGS_NAME - ) + db_handler = db_setup( + os.path.join(download_test_data, "input", "dumps"), + self.OPENPYPE_MONGO, + self.DATABASE_PRODUCTION_NAME, + self.DATABASE_SETTINGS_NAME + ) yield db_handler @@ -224,7 +254,7 @@ def db_setup( db_handler.teardown(self.DATABASE_SETTINGS_NAME) @pytest.fixture(scope="module") - def dbcon(self, db_setup, output_folder_url): + def dbcon(self, environment_setup, db_setup, output_folder_url): """Provide test database connection. Database prepared from dumps with 'db_setup' fixture. @@ -248,7 +278,7 @@ def dbcon(self, db_setup, output_folder_url): yield dbcon @pytest.fixture(scope="module") - def dbcon_openpype(self, db_setup): + def dbcon_openpype(self, environment_setup, db_setup): """Provide test database connection for OP settings. Database prepared from dumps with 'db_setup' fixture. @@ -301,7 +331,7 @@ class PublishTest(ModuleUnitTest): SETUP_ONLY = False @pytest.fixture(scope="module") - def app_name(self, app_variant): + def app_name(self, environment_setup, app_variant): """Returns calculated value for ApplicationManager. Eg.(nuke/12-2)""" from openpype.lib import ApplicationManager app_variant = app_variant or self.APP_VARIANT From 99e878509a81dd5dae6408867433686b0ed52590 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Tue, 25 Jul 2023 17:16:45 +0100 Subject: [PATCH 11/69] db > database --- .../{db_handler.py => database_handler.py} | 182 ++++++++++-------- tests/lib/testing_classes.py | 42 ++-- 2 files changed, 126 insertions(+), 98 deletions(-) rename tests/lib/{db_handler.py => database_handler.py} (56%) diff --git a/tests/lib/db_handler.py b/tests/lib/database_handler.py similarity index 56% rename from tests/lib/db_handler.py rename to tests/lib/database_handler.py index d652a3ebdaa..d3d6d6ef1da 100644 --- a/tests/lib/db_handler.py +++ b/tests/lib/database_handler.py @@ -9,7 +9,7 @@ import subprocess -class DBHandler: +class DataBaseHandler: def __init__(self, uri=None, host=None, port=None, user=None, password=None): @@ -29,17 +29,17 @@ def setup_empty(self, name): # not much sense self.db = self.client[name] - def setup_from_sql(self, db_name, sql_dir, collection=None, + def setup_from_sql(self, database_name, sql_dir, collection=None, drop=True, mode=None): """ - Restores 'db_name' from 'sql_url'. + Restores 'database_name' from 'sql_url'. Works with directory with .json files, if 'collection' arg is empty, name of .json file is used as name of target collection. Args: - db_name (str): source DB name + database_name (str): source DB name sql_dir (str): folder with json files collection (str): if all sql files are meant for single coll. drop (bool): True if drop whole collection @@ -56,7 +56,7 @@ def setup_from_sql(self, db_name, sql_dir, collection=None, for file_name in filenames: sql_url = os.path.join(dirpath, file_name) query = self._import_query(self.uri, sql_url, - db_name=db_name, + database_name=database_name, collection=collection, drop=drop, mode=mode) @@ -64,17 +64,17 @@ def setup_from_sql(self, db_name, sql_dir, collection=None, print("mongoimport query:: {}".format(query)) subprocess.run(query) - def setup_from_sql_file(self, db_name, sql_url, + def setup_from_sql_file(self, database_name, sql_url, collection=None, drop=True, mode=None): """ - Restores 'db_name' from 'sql_url'. + Restores 'database_name' from 'sql_url'. Works with single .json file. If 'collection' arg is empty, name of .json file is used as name of target collection. Args: - db_name (str): source DB name + database_name (str): source DB name sql_file (str): folder with json files collection (str): name of target collection drop (bool): True if drop collection @@ -88,7 +88,7 @@ def setup_from_sql_file(self, db_name, sql_url, "Sql file {} doesn't exist".format(sql_url)) query = self._import_query(self.uri, sql_url, - db_name=db_name, + database_name=database_name, collection=collection, drop=drop, mode=mode) @@ -96,44 +96,48 @@ def setup_from_sql_file(self, db_name, sql_url, print("mongoimport query:: {}".format(query)) subprocess.run(query) - def setup_from_dump(self, db_name, dump_dir, overwrite=False, - collection=None, db_name_out=None): + def setup_from_dump(self, database_name, dump_dir, overwrite=False, + collection=None, database_name_out=None): """ - Restores 'db_name' from 'dump_dir'. + Restores 'database_name' from 'dump_dir'. - Works with BSON folders exported by mongodump + Works with BSON folders exported by mongodump - Args: - db_name (str): source DB name - dump_dir (str): folder with dumped subfolders - overwrite (bool): True if overwrite target - collection (str): name of source project - db_name_out (str): name of target DB, if empty restores to - source 'db_name' + Args: + database_name (str): source DB name + dump_dir (str): folder with dumped subfolders + overwrite (bool): True if overwrite target + collection (str): name of source project + database_name_out (str): name of target DB, if empty restores to + source 'database_name' """ - db_name_out = db_name_out or db_name - if self._db_exists(db_name_out): + database_name_out = database_name_out or database_name + if self._database_exists(database_name_out): if not overwrite: raise RuntimeError( "DB {} already exists run with overwrite=True".format( - db_name_out + database_name_out ) ) else: if collection: - if collection in self.client[db_name_out].list_collection_names(): # noqa - self.client[db_name_out][collection].drop() + if collection in self.client[database_name_out].list_collection_names(): # noqa + self.client[database_name_out][collection].drop() else: - self.teardown(db_name_out) + self.teardown(database_name_out) - dir_path = os.path.join(dump_dir, db_name) + dir_path = os.path.join(dump_dir, database_name) if not os.path.exists(dir_path): raise RuntimeError( "Backup folder {} doesn't exist".format(dir_path)) - query = self._restore_query(self.uri, dump_dir, - db_name=db_name, db_name_out=db_name_out, - collection=collection) + query = self._restore_query( + self.uri, + dump_dir, + database_name=database_name, + database_name_out=database_name_out, + collection=collection + ) print("mongorestore query:: {}".format(query)) try: subprocess.run(query) @@ -141,24 +145,24 @@ def setup_from_dump(self, db_name, dump_dir, overwrite=False, raise RuntimeError("'mongorestore' utility must be on path." "Please install it.") - def teardown(self, db_name): - """Drops 'db_name' if exists.""" - if not self._db_exists(db_name): - print("{} doesn't exist".format(db_name)) + def teardown(self, database_name): + """Drops 'database_name' if exists.""" + if not self._database_exists(database_name): + print("{} doesn't exist".format(database_name)) return - print("Dropping {} database".format(db_name)) - self.client.drop_database(db_name) + print("Dropping {} database".format(database_name)) + self.client.drop_database(database_name) - def backup_to_dump(self, db_name, dump_dir, overwrite=False, + def backup_to_dump(self, database_name, dump_dir, overwrite=False, collection=None): """ - Helper method for running mongodump for specific 'db_name' + Helper method for running mongodump for specific 'database_name' """ - if not self._db_exists(db_name) and not overwrite: - raise RuntimeError("DB {} doesn't exists".format(db_name)) + if not self._database_exists(database_name) and not overwrite: + raise RuntimeError("DB {} doesn't exists".format(database_name)) - dir_path = os.path.join(dump_dir, db_name) + dir_path = os.path.join(dump_dir, database_name) if os.path.exists(dir_path) and not overwrite: raise RuntimeError( "Backup already exists. Remove existing database dumps in " @@ -166,64 +170,88 @@ def backup_to_dump(self, db_name, dump_dir, overwrite=False, ) query = self._dump_query( - self.uri, dump_dir, db_name=db_name, collection=collection + self.uri, + dump_dir, + database_name=database_name, + collection=collection ) print("Mongodump query:: {}".format(query)) subprocess.run(query) - def _db_exists(self, db_name): - return db_name in self.client.list_database_names() - - def _dump_query(self, uri, output_path, db_name=None, collection=None): - """Prepares dump query based on 'db_name' or 'collection'.""" - db_part = coll_part = "" - if db_name: - db_part = "--db={}".format(db_name) + def _database_exists(self, database_name): + return database_name in self.client.list_database_names() + + def _dump_query( + self, + uri, + output_path, + database_name=None, + collection=None + ): + """Prepares dump query based on 'database_name' or 'collection'.""" + database_part = coll_part = "" + if database_name: + database_part = "--db={}".format(database_name) if collection: - if not db_name: - raise ValueError("db_name must be present") + if not database_name: + raise ValueError("database_name must be present") coll_part = "--collection={}".format(collection) query = "\"{}\" --uri=\"{}\" --out={} {} {}".format( - "mongodump", uri, output_path, db_part, coll_part + "mongodump", uri, output_path, database_part, coll_part ) return query - def _restore_query(self, uri, dump_dir, - db_name=None, db_name_out=None, - collection=None, drop=True): + def _restore_query( + self, + uri, + dump_dir, + database_name=None, + database_name_out=None, + collection=None, + drop=True + ): """Prepares query for mongorestore base on arguments""" - db_part = coll_part = drop_part = "" - if db_name: - db_part = "--nsInclude={}.* --nsFrom={}.*".format(db_name, db_name) + database_part = coll_part = drop_part = "" + if database_name: + database_part = "--nsInclude={}.* --nsFrom={}.*".format( + database_name, database_name + ) if collection: - assert db_name, "Must provide db name too" - db_part = "--nsInclude={}.{} --nsFrom={}.{}".format(db_name, - collection, - db_name, - collection) + assert database_name, "Must provide db name too" + database_part = "--nsInclude={}.{} --nsFrom={}.{}".format( + database_name, collection, database_name, collection + ) if drop: drop_part = "--drop" - if db_name_out: + if database_name_out: collection_str = collection or '*' - db_part += " --nsTo={}.{}".format(db_name_out, collection_str) + database_part += " --nsTo={}.{}".format( + database_name_out, collection_str + ) query = "\"{}\" --uri=\"{}\" --dir=\"{}\" {} {} {}".format( - "mongorestore", uri, dump_dir, db_part, coll_part, drop_part + "mongorestore", uri, dump_dir, database_part, coll_part, drop_part ) return query - def _import_query(self, uri, sql_url, - db_name=None, - collection=None, drop=True, mode=None): - - db_part = coll_part = drop_part = mode_part = "" - if db_name: - db_part = "--db {}".format(db_name) + def _import_query( + self, + uri, + sql_url, + database_name=None, + collection=None, + drop=True, + mode=None + ): + + database_part = coll_part = drop_part = mode_part = "" + if database_name: + database_part = "--db {}".format(database_name) if collection: - assert db_name, "Must provide db name too" + assert database_name, "Must provide db name too" coll_part = "--collection {}".format(collection) if drop: drop_part = "--drop" @@ -233,7 +261,7 @@ def _import_query(self, uri, sql_url, query = \ "\"{}\" --legacy --uri=\"{}\" --file=\"{}\" {} {} {} {}".format( "mongoimport", uri, sql_url, - db_part, coll_part, drop_part, mode_part) + database_part, coll_part, drop_part, mode_part) return query @@ -245,7 +273,7 @@ def _import_query(self, uri, sql_url, # handler.backup_to_dump("avalon_tests", backup_dir, True, collection="test_project") # noqa #handler.backup_to_dump("openpype_tests", backup_dir, True, collection="settings") # noqa -# handler.setup_from_dump("avalon_tests", backup_dir, True, db_name_out="avalon_tests", collection="test_project") # noqa +# handler.setup_from_dump("avalon_tests", backup_dir, True, database_name_out="avalon_tests", collection="test_project") # noqa # handler.setup_from_sql_file("avalon_tests", "c:\\projects\\sql\\item.sql", # collection="test_project", # drop=False, mode="upsert") diff --git a/tests/lib/testing_classes.py b/tests/lib/testing_classes.py index 5aeae2b19ca..a295a5fc234 100644 --- a/tests/lib/testing_classes.py +++ b/tests/lib/testing_classes.py @@ -11,7 +11,7 @@ import requests import re -from tests.lib.db_handler import DBHandler +from tests.lib.database_handler import DataBaseHandler from common.ayon_common.distribution.file_handler import RemoteFileHandler from openpype.modules import ModulesManager from openpype.settings import get_project_settings @@ -47,33 +47,33 @@ def output_folder_url(data_folder): return path -def db_setup( +def database_setup( backup_directory, openpype_mongo, database_production_name, database_settings_name ): - db_handler = DBHandler(openpype_mongo) + database_handler = DataBaseHandler(openpype_mongo) - db_handler.setup_from_dump( + database_handler.setup_from_dump( database_production_name, backup_directory, overwrite=True, - db_name_out=database_production_name + database_name_out=database_production_name ) - db_handler.setup_from_dump( + database_handler.setup_from_dump( database_settings_name, backup_directory, overwrite=True, - db_name_out=database_settings_name + database_name_out=database_settings_name ) - return db_handler + return database_handler def dump_database(openpype_mongo, database_name, backup_directory): - db_handler = DBHandler(openpype_mongo) - db_handler.backup_to_dump( + database_handler = DataBaseHandler(openpype_mongo) + database_handler.backup_to_dump( database_name, backup_directory ) @@ -89,7 +89,7 @@ def setup( ): download_test_data(data_folder, files) output_folder_url(data_folder) - db_setup( + database_setup( backup_directory, openpype_mongo, database_production_name, @@ -112,7 +112,7 @@ class ModuleUnitTest(BaseTest): project_settings - fixture for project settings with session scope download_test_data - tmp folder with extracted data from GDrive env_var - sets env vars from input file - db_setup - prepares avalon AND openpype DBs for testing from + database_setup - prepares avalon AND openpype DBs for testing from binary dumps from input data dbcon - returns DBConnection to AvalonDB dbcon_openpype - returns DBConnection for OpenpypeMongoDB @@ -228,7 +228,7 @@ def environment_setup( monkeypatch_session.setenv("TEST_SOURCE_FOLDER", download_test_data) @pytest.fixture(scope="module") - def db_setup( + def database_setup( self, download_test_data, openpype_mongo, @@ -239,25 +239,25 @@ def db_setup( if openpype_mongo: self.OPENPYPE_MONGO = openpype_mongo - db_handler = db_setup( + database_handler = database_setup( os.path.join(download_test_data, "input", "dumps"), self.OPENPYPE_MONGO, self.DATABASE_PRODUCTION_NAME, self.DATABASE_SETTINGS_NAME ) - yield db_handler + yield database_handler persist = self.PERSIST or self.is_test_failed(request) if not persist: - db_handler.teardown(self.DATABASE_PRODUCTION_NAME) - db_handler.teardown(self.DATABASE_SETTINGS_NAME) + database_handler.teardown(self.DATABASE_PRODUCTION_NAME) + database_handler.teardown(self.DATABASE_SETTINGS_NAME) @pytest.fixture(scope="module") - def dbcon(self, environment_setup, db_setup, output_folder_url): + def dbcon(self, environment_setup, database_setup, output_folder_url): """Provide test database connection. - Database prepared from dumps with 'db_setup' fixture. + Database prepared from dumps with 'database_setup' fixture. """ from openpype.pipeline import AvalonMongoDB dbcon = AvalonMongoDB() @@ -278,10 +278,10 @@ def dbcon(self, environment_setup, db_setup, output_folder_url): yield dbcon @pytest.fixture(scope="module") - def dbcon_openpype(self, environment_setup, db_setup): + def dbcon_openpype(self, environment_setup, database_setup): """Provide test database connection for OP settings. - Database prepared from dumps with 'db_setup' fixture. + Database prepared from dumps with 'database_setup' fixture. """ from openpype.lib import OpenPypeMongoConnection mongo_client = OpenPypeMongoConnection.get_mongo_client() From b56d7e73b0683307cc52980d4d7e1c30add1a678 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Wed, 26 Jul 2023 09:03:59 +0100 Subject: [PATCH 12/69] Move setup only out of testing classes --- openpype/cli.py | 5 + openpype/pype_commands.py | 25 ++++- tests/conftest.py | 10 -- .../hosts/maya/test_publish_in_maya.py | 11 +-- tests/lib/testing_classes.py | 92 ++++++------------- 5 files changed, 59 insertions(+), 84 deletions(-) diff --git a/openpype/cli.py b/openpype/cli.py index 69a44d322f1..216a79f8883 100644 --- a/openpype/cli.py +++ b/openpype/cli.py @@ -318,6 +318,9 @@ def run(script): help="Only create dbs, do not run tests", is_flag=True, default=False) +@click.option("--class_name", + help="Specific test class to setup.", + multiple=True) @click.option("--dump_database", help="Dump database to data folder.", is_flag=True, @@ -333,6 +336,7 @@ def runtests( app_variant, timeout, setup_only, + class_name, dump_database ): """Run all automatic tests after proper initialization via start.py""" @@ -347,6 +351,7 @@ def runtests( app_variant, timeout, setup_only, + class_name, dump_database ) diff --git a/openpype/pype_commands.py b/openpype/pype_commands.py index 2188217a87d..ecfada8a9a6 100644 --- a/openpype/pype_commands.py +++ b/openpype/pype_commands.py @@ -280,6 +280,7 @@ def run_tests( app_variant, timeout, setup_only, + class_names, dump_database ): """ @@ -336,7 +337,29 @@ def run_tests( args.extend(["--timeout", timeout]) if setup_only: - args.extend(["--setup_only"]) + from tests.lib.testing_classes import ( + FILES, download_test_data, output_folder_url, database_setup + ) + + # Collect files to setup. + files = {} + for name in class_names: + files[name] = FILES[name] + + if not class_names: + files = FILES + + data_folders = [] + for class_name, class_files in files.items(): + data_folder = download_test_data(data_folder, class_files) + data_folders.append(data_folder) + output_folder_url(data_folder) + database_setup(data_folder, openpype_mongo) + + # Feedback to user about data folders. + print("Setup in folders:\n" + "\n".join(data_folders)) + + return if dump_database: args.extend(["--dump_database"]) diff --git a/tests/conftest.py b/tests/conftest.py index 61ebf07749d..7533c8c395f 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -34,11 +34,6 @@ def pytest_addoption(parser): help="Overwrite default timeout" ) - parser.addoption( - "--setup_only", action="store_true", default=None, - help="Only setup test, do not run any tests" - ) - parser.addoption( "--dump_database", action="store_true", default=None, help="Dump database to data folder." @@ -75,11 +70,6 @@ def timeout(request): return request.config.getoption("--timeout") -@pytest.fixture(scope="module") -def setup_only(request): - return request.config.getoption("--setup_only") - - @pytest.fixture(scope="module") def dump_database(request): return request.config.getoption("--dump_database") diff --git a/tests/integration/hosts/maya/test_publish_in_maya.py b/tests/integration/hosts/maya/test_publish_in_maya.py index cd31e187302..35c296d361e 100644 --- a/tests/integration/hosts/maya/test_publish_in_maya.py +++ b/tests/integration/hosts/maya/test_publish_in_maya.py @@ -32,10 +32,6 @@ class TestPublishInMaya(MayaLocalPublishTestClass): """ PERSIST = False - FILES = [ - ("1BTSIIULJTuDc8VvXseuiJV_fL6-Bu7FP", "test_maya_publish.zip", "") - ] - APP_GROUP = "maya" # keep empty to locate latest installed variant or explicit APP_VARIANT = "" @@ -62,14 +58,9 @@ def test_publish(self, dbcon, publish_finished, download_test_data): def test_db_asserts( self, dbcon, - publish_finished, - setup_only, - dump_database + publish_finished ): """Host and input data dependent expected results in DB.""" - if setup_only or dump_database: - return - print("test_db_asserts") failures = [] failures.append(DBAssert.count_of_types(dbcon, "version", 2)) diff --git a/tests/lib/testing_classes.py b/tests/lib/testing_classes.py index a295a5fc234..6f73041d6af 100644 --- a/tests/lib/testing_classes.py +++ b/tests/lib/testing_classes.py @@ -17,6 +17,15 @@ from openpype.settings import get_project_settings +FILES = { + "TestPublishInMaya": [ + ("1BTSIIULJTuDc8VvXseuiJV_fL6-Bu7FP", "test_maya_publish.zip", "") + ] +} +DATABASE_PRODUCTION_NAME = "avalon_tests" +DATABASE_SETTINGS_NAME = "openpype_tests" + + def download_test_data(data_folder, files): if data_folder: print("Using existing folder {}".format(data_folder)) @@ -38,7 +47,7 @@ def download_test_data(data_folder, files): return data_folder - +#rename to purge_folder def output_folder_url(data_folder): path = os.path.join(data_folder, "output") if os.path.exists(path): @@ -47,25 +56,20 @@ def output_folder_url(data_folder): return path -def database_setup( - backup_directory, - openpype_mongo, - database_production_name, - database_settings_name -): +def database_setup(data_folder, openpype_mongo): database_handler = DataBaseHandler(openpype_mongo) - + backup_directory = os.path.join(data_folder, "input", "dumps") database_handler.setup_from_dump( - database_production_name, + DATABASE_PRODUCTION_NAME, backup_directory, overwrite=True, - database_name_out=database_production_name + database_name_out=DATABASE_PRODUCTION_NAME ) database_handler.setup_from_dump( - database_settings_name, + DATABASE_SETTINGS_NAME, backup_directory, overwrite=True, - database_name_out=database_settings_name + database_name_out=DATABASE_SETTINGS_NAME ) return database_handler @@ -79,24 +83,6 @@ def dump_database(openpype_mongo, database_name, backup_directory): ) -def setup( - data_folder, - files, - backup_directory, - openpype_mongo, - database_production_name, - database_settings_name -): - download_test_data(data_folder, files) - output_folder_url(data_folder) - database_setup( - backup_directory, - openpype_mongo, - database_production_name, - database_settings_name - ) - - class BaseTest: """Empty base test class""" @@ -111,7 +97,7 @@ class ModuleUnitTest(BaseTest): monkeypatch_session - fixture for env vars with session scope project_settings - fixture for project settings with session scope download_test_data - tmp folder with extracted data from GDrive - env_var - sets env vars from input file + environment_setup - sets env vars from input file database_setup - prepares avalon AND openpype DBs for testing from binary dumps from input data dbcon - returns DBConnection to AvalonDB @@ -121,10 +107,6 @@ class ModuleUnitTest(BaseTest): PERSIST = False # True to not purge temporary folder nor test DB OPENPYPE_MONGO = "mongodb://localhost:27017" - DATABASE_PRODUCTION_NAME = "avalon_tests" - DATABASE_SETTINGS_NAME = "openpype_tests" - - FILES = [] PROJECT_NAME = "test_project" ASSET_NAME = "test_asset" @@ -149,7 +131,7 @@ def project_settings(self): @pytest.fixture(scope="module") def download_test_data(self, data_folder, persist, request): data_folder = download_test_data( - data_folder or self.DATA_FOLDER, self.FILES + data_folder or self.DATA_FOLDER, FILES[self.__class__.__name__] ) yield data_folder @@ -194,6 +176,10 @@ def environment_setup( if not callable(value): attributes[attribute] = value + # Module attributes. + attributes["DATABASE_PRODUCTION_NAME"] = DATABASE_PRODUCTION_NAME + attributes["DATABASE_SETTINGS_NAME"] = DATABASE_SETTINGS_NAME + if not os.path.exists(environment_json): raise ValueError( "Env variable file {} doesn't exist".format(environment_json) @@ -240,18 +226,16 @@ def database_setup( self.OPENPYPE_MONGO = openpype_mongo database_handler = database_setup( - os.path.join(download_test_data, "input", "dumps"), - self.OPENPYPE_MONGO, - self.DATABASE_PRODUCTION_NAME, - self.DATABASE_SETTINGS_NAME + download_test_data, + self.OPENPYPE_MONGO ) yield database_handler persist = self.PERSIST or self.is_test_failed(request) if not persist: - database_handler.teardown(self.DATABASE_PRODUCTION_NAME) - database_handler.teardown(self.DATABASE_SETTINGS_NAME) + database_handler.teardown(DATABASE_PRODUCTION_NAME) + database_handler.teardown(DATABASE_SETTINGS_NAME) @pytest.fixture(scope="module") def dbcon(self, environment_setup, database_setup, output_folder_url): @@ -381,15 +365,9 @@ def launched_app( app_args, app_name, output_folder_url, - setup_only, - keep_app_open, - dump_database + keep_app_open ): """Launch host app""" - if setup_only or self.SETUP_ONLY or dump_database: - print("Not launching app") - yield - return # set schema - for integrate_new from openpype import PACKAGE_DIR # Path to OpenPype's schema @@ -427,15 +405,9 @@ def publish_finished( launched_app, download_test_data, timeout, - setup_only, - keep_app_open, - dump_database + keep_app_open ): """Dummy fixture waiting for publish to finish""" - if setup_only or self.SETUP_ONLY or dump_database: - print("Not launching app") - yield False - return import time time_start = time.time() timeout = timeout or self.TIMEOUT @@ -460,18 +432,12 @@ def test_folder_structure_same( publish_finished, download_test_data, output_folder_url, - skip_compare_folders, - setup_only, - dump_database + skip_compare_folders ): """Check if expected and published subfolders contain same files. Compares only presence, not size nor content! """ - if setup_only or self.SETUP_ONLY or dump_database: - print("Not launching app") - return - published_dir_base = output_folder_url expected_dir_base = os.path.join(download_test_data, "expected") From 4c3ac77413bcae5ce585d17d14f9816c6e919c27 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Wed, 26 Jul 2023 09:39:26 +0100 Subject: [PATCH 13/69] Separate dump_database from tests. --- openpype/cli.py | 3 +- openpype/pype_commands.py | 33 +++++++-------------- tests/lib/testing_classes.py | 57 +++++++++++++++++++++++++++--------- 3 files changed, 54 insertions(+), 39 deletions(-) diff --git a/openpype/cli.py b/openpype/cli.py index 216a79f8883..5b29ce1932c 100644 --- a/openpype/cli.py +++ b/openpype/cli.py @@ -323,8 +323,7 @@ def run(script): multiple=True) @click.option("--dump_database", help="Dump database to data folder.", - is_flag=True, - default=False) + multiple=True) def runtests( folder, mark, diff --git a/openpype/pype_commands.py b/openpype/pype_commands.py index ecfada8a9a6..a9c45950c56 100644 --- a/openpype/pype_commands.py +++ b/openpype/pype_commands.py @@ -281,7 +281,7 @@ def run_tests( timeout, setup_only, class_names, - dump_database + database_names ): """ Runs tests from 'folder' @@ -337,33 +337,20 @@ def run_tests( args.extend(["--timeout", timeout]) if setup_only: - from tests.lib.testing_classes import ( - FILES, download_test_data, output_folder_url, database_setup - ) - - # Collect files to setup. - files = {} - for name in class_names: - files[name] = FILES[name] - - if not class_names: - files = FILES + assert openpype_mongo, "No openpype_mongo provided" - data_folders = [] - for class_name, class_files in files.items(): - data_folder = download_test_data(data_folder, class_files) - data_folders.append(data_folder) - output_folder_url(data_folder) - database_setup(data_folder, openpype_mongo) + from tests.lib.testing_classes import setup + setup(class_names, data_folder, openpype_mongo) + return - # Feedback to user about data folders. - print("Setup in folders:\n" + "\n".join(data_folders)) + if database_names: + assert data_folder, "No data_folder provided." + assert openpype_mongo, "No openpype_mongo provided" + from tests.lib.testing_classes import dump_databases + dump_databases(database_names, data_folder, openpype_mongo) return - if dump_database: - args.extend(["--dump_database"]) - print("run_tests args: {}".format(args)) import pytest pytest.main(args) diff --git a/tests/lib/testing_classes.py b/tests/lib/testing_classes.py index 6f73041d6af..1c78d5c6603 100644 --- a/tests/lib/testing_classes.py +++ b/tests/lib/testing_classes.py @@ -25,7 +25,7 @@ DATABASE_PRODUCTION_NAME = "avalon_tests" DATABASE_SETTINGS_NAME = "openpype_tests" - +#needs testing def download_test_data(data_folder, files): if data_folder: print("Using existing folder {}".format(data_folder)) @@ -47,8 +47,8 @@ def download_test_data(data_folder, files): return data_folder -#rename to purge_folder -def output_folder_url(data_folder): +#needs testing +def purge_folder(data_folder): path = os.path.join(data_folder, "output") if os.path.exists(path): print("Purging {}".format(path)) @@ -56,9 +56,13 @@ def output_folder_url(data_folder): return path +def get_backup_directory(data_folder): + return os.path.join(data_folder, "input", "dumps") + +#needs testing def database_setup(data_folder, openpype_mongo): database_handler = DataBaseHandler(openpype_mongo) - backup_directory = os.path.join(data_folder, "input", "dumps") + backup_directory = get_backup_directory(data_folder) database_handler.setup_from_dump( DATABASE_PRODUCTION_NAME, backup_directory, @@ -74,14 +78,39 @@ def database_setup(data_folder, openpype_mongo): return database_handler +#needs testing +def dump_databases(database_names, data_folder, openpype_mongo,): + for database_name in database_names: + dump_database(database_name, data_folder, openpype_mongo) -def dump_database(openpype_mongo, database_name, backup_directory): +#needs testing +def dump_database(database_name, data_folder, openpype_mongo,): database_handler = DataBaseHandler(openpype_mongo) database_handler.backup_to_dump( database_name, - backup_directory + get_backup_directory(data_folder) ) +#needs testing +def setup(class_names, data_folder, openpype_mongo): + # Collect files to setup. + files = {} + for name in class_names: + files[name] = FILES[name] + + if not class_names: + files = FILES + + data_folders = [] + for class_name, class_files in files.items(): + data_folder = download_test_data(data_folder, class_files) + data_folders.append(data_folder) + purge_folder(data_folder) + database_setup(data_folder, openpype_mongo) + + # Feedback to user about data folders. + print("Setup in folders:\n" + "\n".join(data_folders)) + class BaseTest: """Empty base test class""" @@ -142,9 +171,9 @@ def download_test_data(self, data_folder, persist, request): shutil.rmtree(data_folder) @pytest.fixture(scope="module") - def output_folder_url(self, download_test_data): + def purge_folder(self, download_test_data): """Returns location of published data, cleans it first if exists.""" - path = output_folder_url(download_test_data) + path = purge_folder(download_test_data) yield path @pytest.fixture(scope="module") @@ -238,7 +267,7 @@ def database_setup( database_handler.teardown(DATABASE_SETTINGS_NAME) @pytest.fixture(scope="module") - def dbcon(self, environment_setup, database_setup, output_folder_url): + def dbcon(self, environment_setup, database_setup, purge_folder): """Provide test database connection. Database prepared from dumps with 'database_setup' fixture. @@ -256,7 +285,7 @@ def dbcon(self, environment_setup, database_setup, output_folder_url): {"type": "project"}, {"$set": { - root_key: output_folder_url + root_key: purge_folder }} ) yield dbcon @@ -364,7 +393,7 @@ def launched_app( startup_scripts, app_args, app_name, - output_folder_url, + purge_folder, keep_app_open ): """Launch host app""" @@ -431,14 +460,14 @@ def test_folder_structure_same( dbcon, publish_finished, download_test_data, - output_folder_url, + purge_folder, skip_compare_folders ): """Check if expected and published subfolders contain same files. Compares only presence, not size nor content! """ - published_dir_base = output_folder_url + published_dir_base = purge_folder expected_dir_base = os.path.join(download_test_data, "expected") @@ -543,7 +572,7 @@ def publish_finished(self, dbcon, launched_app, download_test_data, class HostFixtures(): """Host specific fixtures. Should be implemented once per host.""" @pytest.fixture(scope="module") - def last_workfile_path(self, download_test_data, output_folder_url): + def last_workfile_path(self, download_test_data, purge_folder): """Returns url of workfile""" raise NotImplementedError From 1d84e57c0918ddca5b2b0f5d6fbdf3dcc67e9a8f Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Wed, 26 Jul 2023 11:46:23 +0100 Subject: [PATCH 14/69] Ingested database dumps --- openpype/cli.py | 2 +- openpype/pype_commands.py | 6 +- .../avalon_tests.test_project.json | 325 ++++++++++++++++++ .../openpype_tests/openpype_tests.logs.json | 151 ++++++++ .../openpype_tests.settings.json | 2 + .../env_vars/env_var.json} | 0 .../{resources => input/startup}/userSetup.py | 0 ...test_project_test_asset_test_task_v001.ma} | 0 tests/integration/hosts/maya/lib.py | 13 +- .../hosts/maya/test_publish_in_maya.py | 5 +- tests/lib/database_handler.py | 141 ++++++-- tests/lib/testing_classes.py | 47 +-- 12 files changed, 642 insertions(+), 50 deletions(-) create mode 100644 tests/integration/hosts/maya/input/dumps/avalon_tests/avalon_tests.test_project.json create mode 100644 tests/integration/hosts/maya/input/dumps/openpype_tests/openpype_tests.logs.json create mode 100644 tests/integration/hosts/maya/input/dumps/openpype_tests/openpype_tests.settings.json rename tests/integration/hosts/maya/{resources/environment.json => input/env_vars/env_var.json} (100%) rename tests/integration/hosts/maya/{resources => input/startup}/userSetup.py (100%) rename tests/integration/hosts/maya/{resources/workfile.ma => input/workfile/test_project_test_asset_test_task_v001.ma} (100%) diff --git a/openpype/cli.py b/openpype/cli.py index 5b29ce1932c..f3fde36902c 100644 --- a/openpype/cli.py +++ b/openpype/cli.py @@ -322,7 +322,7 @@ def run(script): help="Specific test class to setup.", multiple=True) @click.option("--dump_database", - help="Dump database to data folder.", + help="Dump database url to data folder.", multiple=True) def runtests( folder, diff --git a/openpype/pype_commands.py b/openpype/pype_commands.py index a9c45950c56..35e8b9ef15b 100644 --- a/openpype/pype_commands.py +++ b/openpype/pype_commands.py @@ -281,7 +281,7 @@ def run_tests( timeout, setup_only, class_names, - database_names + database_urls ): """ Runs tests from 'folder' @@ -343,12 +343,12 @@ def run_tests( setup(class_names, data_folder, openpype_mongo) return - if database_names: + if database_urls: assert data_folder, "No data_folder provided." assert openpype_mongo, "No openpype_mongo provided" from tests.lib.testing_classes import dump_databases - dump_databases(database_names, data_folder, openpype_mongo) + dump_databases(database_urls, data_folder, openpype_mongo) return print("run_tests args: {}".format(args)) diff --git a/tests/integration/hosts/maya/input/dumps/avalon_tests/avalon_tests.test_project.json b/tests/integration/hosts/maya/input/dumps/avalon_tests/avalon_tests.test_project.json new file mode 100644 index 00000000000..7b8e3d6516d --- /dev/null +++ b/tests/integration/hosts/maya/input/dumps/avalon_tests/avalon_tests.test_project.json @@ -0,0 +1,325 @@ +[{ + "_id": { + "$oid": "60df31bcbe2b48bd3695c055" + }, + "type": "project", + "name": "test_project", + "data": { + "code": "test_project", + "library_project": false, + "clipIn": 1, + "clipOut": 1, + "fps": 25.0, + "frameEnd": 1001, + "frameStart": 1001, + "handleEnd": 0, + "handleStart": 0, + "pixelAspect": 1.0, + "resolutionHeight": 1080, + "resolutionWidth": 1920, + "tools_env": [] + }, + "schema": "openpype:project-3.0", + "config": { + "apps": [ + { + "name": "maya/2020" + }, + { + "name": "nuke/12-2" + }, + { + "name": "nukex/12-2" + }, + { + "name": "hiero/12-2" + }, + { + "name": "resolve/stable" + }, + { + "name": "houdini/18-5" + }, + { + "name": "blender/2-91" + }, + { + "name": "harmony/20" + }, + { + "name": "photoshop/2020" + }, + { + "name": "aftereffects/2021" + }, + { + "name": "unreal/4-26" + } + ], + "imageio": { + "hiero": { + "workfile": { + "ocioConfigName": "nuke-default", + "ocioconfigpath": { + "windows": [], + "darwin": [], + "linux": [] + }, + "workingSpace": "linear", + "sixteenBitLut": "sRGB", + "eightBitLut": "sRGB", + "floatLut": "linear", + "logLut": "Cineon", + "viewerLut": "sRGB", + "thumbnailLut": "sRGB" + }, + "regexInputs": { + "inputs": [ + { + "regex": "[^-a-zA-Z0-9](plateRef).*(?=mp4)", + "colorspace": "sRGB" + } + ] + }, + "__overriden_keys__": [ + "workfile", + "regexInputs" + ] + }, + "nuke": { + "viewer": { + "viewerProcess": "sRGB" + }, + "workfile": { + "colorManagement": "Nuke", + "OCIO_config": "nuke-default", + "customOCIOConfigPath": { + "windows": [], + "darwin": [], + "linux": [] + }, + "workingSpaceLUT": "linear", + "monitorLut": "sRGB", + "int8Lut": "sRGB", + "int16Lut": "sRGB", + "logLut": "Cineon", + "floatLut": "linear" + }, + "nodes": { + "requiredNodes": [ + { + "plugins": [ + "CreateWriteRender" + ], + "nukeNodeClass": "Write", + "knobs": [ + { + "name": "file_type", + "value": "exr" + }, + { + "name": "datatype", + "value": "16 bit half" + }, + { + "name": "compression", + "value": "Zip (1 scanline)" + }, + { + "name": "autocrop", + "value": "True" + }, + { + "name": "tile_color", + "value": "0xff0000ff" + }, + { + "name": "channels", + "value": "rgb" + }, + { + "name": "colorspace", + "value": "linear" + }, + { + "name": "create_directories", + "value": "True" + } + ] + }, + { + "plugins": [ + "CreateWritePrerender" + ], + "nukeNodeClass": "Write", + "knobs": [ + { + "name": "file_type", + "value": "exr" + }, + { + "name": "datatype", + "value": "16 bit half" + }, + { + "name": "compression", + "value": "Zip (1 scanline)" + }, + { + "name": "autocrop", + "value": "False" + }, + { + "name": "tile_color", + "value": "0xadab1dff" + }, + { + "name": "channels", + "value": "rgb" + }, + { + "name": "colorspace", + "value": "linear" + }, + { + "name": "create_directories", + "value": "True" + } + ] + } + ], + "customNodes": [] + }, + "regexInputs": { + "inputs": [ + { + "regex": "[^-a-zA-Z0-9]beauty[^-a-zA-Z0-9]", + "colorspace": "linear" + } + ] + }, + "__overriden_keys__": [ + "viewer", + "workfile", + "nodes", + "regexInputs" + ] + } + }, + "roots": { + "work": { + "windows": "C:/projects", + "darwin": "/Volumes/path", + "linux": "/mnt/share/projects" + } + }, + "tasks": { + "Generic": { + "short_name": "gener" + }, + "Art": { + "short_name": "art" + }, + "Modeling": { + "short_name": "mdl" + }, + "Texture": { + "short_name": "tex" + }, + "Lookdev": { + "short_name": "look" + }, + "Rigging": { + "short_name": "rig" + }, + "Edit": { + "short_name": "edit" + }, + "Layout": { + "short_name": "lay" + }, + "Setdress": { + "short_name": "dress" + }, + "Animation": { + "short_name": "anim" + }, + "FX": { + "short_name": "fx" + }, + "Lighting": { + "short_name": "lgt" + }, + "Paint": { + "short_name": "paint" + }, + "Compositing": { + "short_name": "comp" + } + }, + "templates": { + "defaults": { + "version_padding": 3, + "version": "v{version:0>{@version_padding}}", + "frame_padding": 4, + "frame": "{frame:0>{@frame_padding}}" + }, + "work": { + "folder": "{root[work]}/{project[name]}/{hierarchy}/{asset}/work/{task}", + "file": "{project[code]}_{asset}_{task}_{@version}<_{comment}>.{ext}", + "path": "{@folder}/{@file}" + }, + "render": { + "folder": "{root[work]}/{project[name]}/{hierarchy}/{asset}/publish/{family}/{subset}/{@version}", + "file": "{project[code]}_{asset}_{subset}_{@version}<_{output}><.{@frame}>.{ext}", + "path": "{@folder}/{@file}" + }, + "publish": { + "folder": "{root[work]}/{project[name]}/{hierarchy}/{asset}/publish/{family}/{subset}/{@version}", + "file": "{project[code]}_{asset}_{subset}_{@version}<_{output}><.{@frame}>.{ext}", + "path": "{@folder}/{@file}", + "thumbnail": "{thumbnail_root}/{project[name]}/{_id}_{thumbnail_type}.{ext}" + }, + "hero": { + "folder": "{root[work]}/{project[name]}/{hierarchy}/{asset}/publish/{family}/{subset}/hero", + "file": "{project[code]}_{asset}_{subset}_hero<_{output}><.{frame}>.{ext}", + "path": "{@folder}/{@file}" + }, + "delivery": { + "test_delivery": "{root[work]}/{project[name]}/{hierarchy}/{asset}/publish/{family}/{subset}/{@version}/{project[code]}_{asset}_{subset}_{@version}<_{output}><.{frame}>.{ext}" + }, + "others": {} + } + } +}, +{ + "_id": { + "$oid": "60df31e2be2b48bd3695c056" + }, + "name": "test_asset", + "type": "asset", + "schema": "openpype:asset-3.0", + "data": { + "parents": [], + "visualParent": null, + "tasks": { + "test_task": { + "type": "Generic" + } + }, + "fps": 25.0, + "resolutionWidth": 1920, + "resolutionHeight": 1080, + "pixelAspect": 1.0, + "frameStart": 1001, + "handleStart": 0, + "frameEnd": 1001, + "clipOut": 1, + "clipIn": 1, + "tools_env": [], + "handleEnd": 0 + }, + "parent": { + "$oid": "60df31bcbe2b48bd3695c055" + } +}] diff --git a/tests/integration/hosts/maya/input/dumps/openpype_tests/openpype_tests.logs.json b/tests/integration/hosts/maya/input/dumps/openpype_tests/openpype_tests.logs.json new file mode 100644 index 00000000000..ea383cc7baa --- /dev/null +++ b/tests/integration/hosts/maya/input/dumps/openpype_tests/openpype_tests.logs.json @@ -0,0 +1,151 @@ +[{ + "_id": { + "$oid": "60e5c1db13f8c29e6b95ab2e" + }, + "timestamp": { + "$date": "2021-07-07T17:01:47.021Z" + }, + "level": "INFO", + "thread": 28316, + "threadName": "MainThread", + "message": "Please sign in to Ftrack", + "loggerName": "FtrackModule", + "fileName": "C:\\Users\\petrk\\PycharmProjects\\Pype3.0\\pype\\openpype\\modules\\ftrack\\tray\\ftrack_tray.py", + "module": "ftrack_tray", + "method": "validate", + "lineNumber": 72, + "process_id": { + "$oid": "60e5c1d213f8c29e6b95ab2b" + }, + "hostname": "LAPTOP-UB778LHG", + "hostip": "10.28.18.11", + "username": "petrk", + "system_name": "Windows", + "process_name": "Tray" +}, +{ + "_id": { + "$oid": "60e5c1db13f8c29e6b95ab2f" + }, + "timestamp": { + "$date": "2021-07-07T17:01:47.164Z" + }, + "level": "INFO", + "thread": 28448, + "threadName": "Thread-2", + "message": "IdleManagerThread has started", + "loggerName": "IdleManagerThread", + "fileName": "C:\\Users\\petrk\\PycharmProjects\\Pype3.0\\pype\\openpype\\modules\\idle_manager\\idle_threads.py", + "module": "idle_threads", + "method": "run", + "lineNumber": 57, + "process_id": { + "$oid": "60e5c1d213f8c29e6b95ab2b" + }, + "hostname": "LAPTOP-UB778LHG", + "hostip": "10.28.18.11", + "username": "petrk", + "system_name": "Windows", + "process_name": "Tray" +}, +{ + "_id": { + "$oid": "60e5c1db13f8c29e6b95ab30" + }, + "timestamp": { + "$date": "2021-07-07T17:01:47.169Z" + }, + "level": "INFO", + "thread": 29832, + "threadName": "Thread-1", + "message": "Starting WebServer server", + "loggerName": "WebServer", + "fileName": "C:\\Users\\petrk\\PycharmProjects\\Pype3.0\\pype\\openpype\\modules\\webserver\\server.py", + "module": "server", + "method": "run", + "lineNumber": 85, + "process_id": { + "$oid": "60e5c1d213f8c29e6b95ab2b" + }, + "hostname": "LAPTOP-UB778LHG", + "hostip": "10.28.18.11", + "username": "petrk", + "system_name": "Windows", + "process_name": "Tray" +}, +{ + "_id": { + "$oid": "60e5c28613f8c29e6b95ab31" + }, + "timestamp": { + "$date": "2021-07-07T17:04:38.609Z" + }, + "level": "INFO", + "thread": 28316, + "threadName": "MainThread", + "message": "Ftrack action server was forced to stop", + "loggerName": "FtrackModule", + "fileName": "C:\\Users\\petrk\\PycharmProjects\\Pype3.0\\pype\\openpype\\modules\\ftrack\\tray\\ftrack_tray.py", + "module": "ftrack_tray", + "method": "stop_action_server", + "lineNumber": 241, + "process_id": { + "$oid": "60e5c1d213f8c29e6b95ab2b" + }, + "hostname": "LAPTOP-UB778LHG", + "hostip": "10.28.18.11", + "username": "petrk", + "system_name": "Windows", + "process_name": "Tray" +}, +{ + "_id": { + "$oid": "60e5c28613f8c29e6b95ab32" + }, + "timestamp": { + "$date": "2021-07-07T17:04:38.618Z" + }, + "level": "INFO", + "thread": 28448, + "threadName": "Thread-2", + "message": "IdleManagerThread has stopped", + "loggerName": "IdleManagerThread", + "fileName": "C:\\Users\\petrk\\PycharmProjects\\Pype3.0\\pype\\openpype\\modules\\idle_manager\\idle_threads.py", + "module": "idle_threads", + "method": "on_stop", + "lineNumber": 53, + "process_id": { + "$oid": "60e5c1d213f8c29e6b95ab2b" + }, + "hostname": "LAPTOP-UB778LHG", + "hostip": "10.28.18.11", + "username": "petrk", + "system_name": "Windows", + "process_name": "Tray" +}, +{ + "_id": { + "$oid": "60e5c28613f8c29e6b95ab33" + }, + "timestamp": { + "$date": "2021-07-07T17:04:38.783Z" + }, + "level": "INFO", + "thread": 29832, + "threadName": "Thread-1", + "message": "Web server stopped", + "loggerName": "WebServer", + "fileName": "C:\\Users\\petrk\\PycharmProjects\\Pype3.0\\pype\\openpype\\modules\\webserver\\server.py", + "module": "server", + "method": "run", + "lineNumber": 107, + "process_id": { + "$oid": "60e5c1d213f8c29e6b95ab2b" + }, + "hostname": "LAPTOP-UB778LHG", + "hostip": "10.28.18.11", + "username": "petrk", + "system_name": "Windows", + "process_name": "Tray" +}] + diff --git a/tests/integration/hosts/maya/input/dumps/openpype_tests/openpype_tests.settings.json b/tests/integration/hosts/maya/input/dumps/openpype_tests/openpype_tests.settings.json new file mode 100644 index 00000000000..7dd43875219 --- /dev/null +++ b/tests/integration/hosts/maya/input/dumps/openpype_tests/openpype_tests.settings.json @@ -0,0 +1,2 @@ +[] + diff --git a/tests/integration/hosts/maya/resources/environment.json b/tests/integration/hosts/maya/input/env_vars/env_var.json similarity index 100% rename from tests/integration/hosts/maya/resources/environment.json rename to tests/integration/hosts/maya/input/env_vars/env_var.json diff --git a/tests/integration/hosts/maya/resources/userSetup.py b/tests/integration/hosts/maya/input/startup/userSetup.py similarity index 100% rename from tests/integration/hosts/maya/resources/userSetup.py rename to tests/integration/hosts/maya/input/startup/userSetup.py diff --git a/tests/integration/hosts/maya/resources/workfile.ma b/tests/integration/hosts/maya/input/workfile/test_project_test_asset_test_task_v001.ma similarity index 100% rename from tests/integration/hosts/maya/resources/workfile.ma rename to tests/integration/hosts/maya/input/workfile/test_project_test_asset_test_task_v001.ma diff --git a/tests/integration/hosts/maya/lib.py b/tests/integration/hosts/maya/lib.py index ea797f23176..265780eb3a8 100644 --- a/tests/integration/hosts/maya/lib.py +++ b/tests/integration/hosts/maya/lib.py @@ -14,16 +14,19 @@ class MayaHostFixtures(HostFixtures): @pytest.fixture(scope="module") - def last_workfile_path(self, download_test_data, output_folder_url): + def last_workfile_path(self, download_test_data, output_folder): """Get last_workfile_path from source data. Maya expects workfile in proper folder, so copy is done first. """ src_path = os.path.join( - os.path.dirname(__file__), "resources", "workfile.ma" + os.path.dirname(__file__), + "input", + "workfile", + "test_project_test_asset_test_task_v001.ma" ) dest_folder = os.path.join( - output_folder_url, + output_folder, self.PROJECT_NAME, self.ASSET_NAME, "work", @@ -40,7 +43,9 @@ def last_workfile_path(self, download_test_data, output_folder_url): @pytest.fixture(scope="module") def startup_scripts(self, monkeypatch_session, download_test_data): """Points Maya to userSetup file from input data""" - user_setup_path = os.path.join(os.path.dirname(__file__), "resources") + user_setup_path = os.path.join( + os.path.dirname(__file__), "input", "startup" + ) original_pythonpath = os.environ.get("PYTHONPATH") monkeypatch_session.setenv( "PYTHONPATH", diff --git a/tests/integration/hosts/maya/test_publish_in_maya.py b/tests/integration/hosts/maya/test_publish_in_maya.py index 35c296d361e..a39b4a0ae7d 100644 --- a/tests/integration/hosts/maya/test_publish_in_maya.py +++ b/tests/integration/hosts/maya/test_publish_in_maya.py @@ -38,11 +38,14 @@ class TestPublishInMaya(MayaLocalPublishTestClass): TIMEOUT = 120 # publish timeout + INPUT_DATA_FOLDER = None + DATABASE_DUMPS = os.path.join(os.path.dirname(__file__), "input", "dumps") + @pytest.fixture(scope="module") def environment_json(self, download_test_data): # Set environment variables from input json and class attributes. environment_path = os.path.join( - os.path.dirname(__file__), "resources", "environment.json" + os.path.dirname(__file__), "input", "env_vars", "env_var.json" ) yield environment_path diff --git a/tests/lib/database_handler.py b/tests/lib/database_handler.py index d3d6d6ef1da..fcde4e26c42 100644 --- a/tests/lib/database_handler.py +++ b/tests/lib/database_handler.py @@ -131,19 +131,32 @@ def setup_from_dump(self, database_name, dump_dir, overwrite=False, raise RuntimeError( "Backup folder {} doesn't exist".format(dir_path)) - query = self._restore_query( - self.uri, - dump_dir, - database_name=database_name, - database_name_out=database_name_out, - collection=collection - ) - print("mongorestore query:: {}".format(query)) - try: - subprocess.run(query) - except FileNotFoundError: - raise RuntimeError("'mongorestore' utility must be on path." - "Please install it.") + # Finf bson files to determine how to restore the database dump. + bson_files = [x for x in os.listdir(dir_path) if x.endswith(".bson")] + + queries = [] + if bson_files: + queries.apend( + self._restore_query( + self.uri, + dump_dir, + database_name=database_name, + database_name_out=database_name_out, + collection=collection + ) + ) + else: + queries = self._restore_queries_json(self.uri, dir_path) + + for query in queries: + print("mongorestore query:: {}".format(query)) + try: + subprocess.run(query) + except FileNotFoundError: + raise RuntimeError( + "'mongorestore' or 'mongoimport' utility must be on path. " + "Please install it." + ) def teardown(self, database_name): """Drops 'database_name' if exists.""" @@ -154,8 +167,14 @@ def teardown(self, database_name): print("Dropping {} database".format(database_name)) self.client.drop_database(database_name) - def backup_to_dump(self, database_name, dump_dir, overwrite=False, - collection=None): + def backup_to_dump( + self, + database_name, + dump_dir, + overwrite=False, + collection=None, + json=False + ): """ Helper method for running mongodump for specific 'database_name' """ @@ -169,18 +188,53 @@ def backup_to_dump(self, database_name, dump_dir, overwrite=False, "\"{}\" or run with overwrite=True".format(dir_path) ) - query = self._dump_query( - self.uri, - dump_dir, - database_name=database_name, - collection=collection - ) + if json: + query = self._dump_query_json( + self.uri, + dump_dir, + database_name=database_name, + collection=collection + ) + else: + query = self._dump_query( + self.uri, + dump_dir, + database_name=database_name, + collection=collection + ) print("Mongodump query:: {}".format(query)) subprocess.run(query) def _database_exists(self, database_name): return database_name in self.client.list_database_names() + def _dump_query_json( + self, + uri, + output_path, + database_name=None, + collection=None + ): + """Prepares dump query based on 'database_name' or 'collection'.""" + database_part = coll_part = "" + if database_name: + database_part = "--db={}".format(database_name) + if collection: + if not database_name: + raise ValueError("database_name must be present") + coll_part = "--collection={}".format(collection) + filename = "{}.{}.json".format(database_name, collection) + query = ( + "mongoexport --uri=\"{}\" --jsonArray --pretty" + " --out={} {} {}".format( + uri, + os.path.join(output_path, filename), + database_part, + coll_part + ) + ) + return query + def _dump_query( self, uri, @@ -202,6 +256,51 @@ def _dump_query( return query + def _restore_queries_json( + self, + uri, + dump_dir + ): + """Prepares query for mongorestore base on arguments""" + queries = [] + + for json_file in os.listdir(dump_dir): + database_name, collection, ext = json_file.split(".") + queries.append( + self._restore_query_json( + uri, + os.path.join(dump_dir, json_file), + database_name, + collection, + True + ) + ) + + return queries + + def _restore_query_json( + self, + uri, + json_file, + database_name=None, + collection=None, + drop=True + ): + """Prepares query for mongorestore base on arguments""" + query = "mongoimport --jsonArray --uri=\"{}\" --file=\"{}\"".format( + uri, json_file + ) + + if database_name: + query += " --db " + database_name + if collection: + assert database_name, "Must provide db name too" + query += " --collection " + collection + if drop: + query += " --drop" + + return query + def _restore_query( self, uri, diff --git a/tests/lib/testing_classes.py b/tests/lib/testing_classes.py index 1c78d5c6603..c53b4f23be5 100644 --- a/tests/lib/testing_classes.py +++ b/tests/lib/testing_classes.py @@ -48,7 +48,7 @@ def download_test_data(data_folder, files): return data_folder #needs testing -def purge_folder(data_folder): +def output_folder(data_folder): path = os.path.join(data_folder, "output") if os.path.exists(path): print("Purging {}".format(path)) @@ -60,9 +60,8 @@ def get_backup_directory(data_folder): return os.path.join(data_folder, "input", "dumps") #needs testing -def database_setup(data_folder, openpype_mongo): +def database_setup(backup_directory, openpype_mongo): database_handler = DataBaseHandler(openpype_mongo) - backup_directory = get_backup_directory(data_folder) database_handler.setup_from_dump( DATABASE_PRODUCTION_NAME, backup_directory, @@ -79,16 +78,19 @@ def database_setup(data_folder, openpype_mongo): return database_handler #needs testing -def dump_databases(database_names, data_folder, openpype_mongo,): - for database_name in database_names: - dump_database(database_name, data_folder, openpype_mongo) +def dump_databases(database_urls, data_folder, openpype_mongo,): + for database_url in database_urls: + dump_database(database_url, data_folder, openpype_mongo) #needs testing -def dump_database(database_name, data_folder, openpype_mongo,): +def dump_database(database_url, data_folder, openpype_mongo,): database_handler = DataBaseHandler(openpype_mongo) + database_name, database_collection = database_url.split(".") database_handler.backup_to_dump( database_name, - get_backup_directory(data_folder) + os.path.join(get_backup_directory(data_folder), database_name), + collection=database_collection, + json=True ) #needs testing @@ -105,8 +107,8 @@ def setup(class_names, data_folder, openpype_mongo): for class_name, class_files in files.items(): data_folder = download_test_data(data_folder, class_files) data_folders.append(data_folder) - purge_folder(data_folder) - database_setup(data_folder, openpype_mongo) + output_folder(data_folder) + database_setup(get_backup_directory(data_folder), openpype_mongo) # Feedback to user about data folders. print("Setup in folders:\n" + "\n".join(data_folders)) @@ -142,6 +144,7 @@ class ModuleUnitTest(BaseTest): TASK_NAME = "test_task" DATA_FOLDER = None + DATABASE_DUMPS = None @pytest.fixture(scope='session') def monkeypatch_session(self): @@ -171,9 +174,9 @@ def download_test_data(self, data_folder, persist, request): shutil.rmtree(data_folder) @pytest.fixture(scope="module") - def purge_folder(self, download_test_data): + def output_folder(self, download_test_data): """Returns location of published data, cleans it first if exists.""" - path = purge_folder(download_test_data) + path = output_folder(download_test_data) yield path @pytest.fixture(scope="module") @@ -242,10 +245,14 @@ def environment_setup( # for remapping purposes (currently in Nuke) monkeypatch_session.setenv("TEST_SOURCE_FOLDER", download_test_data) + @pytest.fixture(scope="module") + def database_dumps(self, download_test_data): + yield self.DATABASE_DUMPS or get_backup_directory(download_test_data) + @pytest.fixture(scope="module") def database_setup( self, - download_test_data, + database_dumps, openpype_mongo, request ): @@ -255,7 +262,7 @@ def database_setup( self.OPENPYPE_MONGO = openpype_mongo database_handler = database_setup( - download_test_data, + database_dumps, self.OPENPYPE_MONGO ) @@ -267,7 +274,7 @@ def database_setup( database_handler.teardown(DATABASE_SETTINGS_NAME) @pytest.fixture(scope="module") - def dbcon(self, environment_setup, database_setup, purge_folder): + def dbcon(self, environment_setup, database_setup, output_folder): """Provide test database connection. Database prepared from dumps with 'database_setup' fixture. @@ -285,7 +292,7 @@ def dbcon(self, environment_setup, database_setup, purge_folder): {"type": "project"}, {"$set": { - root_key: purge_folder + root_key: output_folder }} ) yield dbcon @@ -393,7 +400,7 @@ def launched_app( startup_scripts, app_args, app_name, - purge_folder, + output_folder, keep_app_open ): """Launch host app""" @@ -460,14 +467,14 @@ def test_folder_structure_same( dbcon, publish_finished, download_test_data, - purge_folder, + output_folder, skip_compare_folders ): """Check if expected and published subfolders contain same files. Compares only presence, not size nor content! """ - published_dir_base = purge_folder + published_dir_base = output_folder expected_dir_base = os.path.join(download_test_data, "expected") @@ -572,7 +579,7 @@ def publish_finished(self, dbcon, launched_app, download_test_data, class HostFixtures(): """Host specific fixtures. Should be implemented once per host.""" @pytest.fixture(scope="module") - def last_workfile_path(self, download_test_data, purge_folder): + def last_workfile_path(self, download_test_data, output_folder): """Returns url of workfile""" raise NotImplementedError From a9c7e7b4844ff07084ef7efbe08311a56de63e8f Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Wed, 26 Jul 2023 11:46:36 +0100 Subject: [PATCH 15/69] Ingested database dumps --- .../maya/input/dumps/openpype_tests/openpype_tests.logs.json | 1 - .../maya/input/dumps/openpype_tests/openpype_tests.settings.json | 1 - 2 files changed, 2 deletions(-) diff --git a/tests/integration/hosts/maya/input/dumps/openpype_tests/openpype_tests.logs.json b/tests/integration/hosts/maya/input/dumps/openpype_tests/openpype_tests.logs.json index ea383cc7baa..5cdf2ad76ab 100644 --- a/tests/integration/hosts/maya/input/dumps/openpype_tests/openpype_tests.logs.json +++ b/tests/integration/hosts/maya/input/dumps/openpype_tests/openpype_tests.logs.json @@ -148,4 +148,3 @@ "system_name": "Windows", "process_name": "Tray" }] - diff --git a/tests/integration/hosts/maya/input/dumps/openpype_tests/openpype_tests.settings.json b/tests/integration/hosts/maya/input/dumps/openpype_tests/openpype_tests.settings.json index 7dd43875219..fe51488c706 100644 --- a/tests/integration/hosts/maya/input/dumps/openpype_tests/openpype_tests.settings.json +++ b/tests/integration/hosts/maya/input/dumps/openpype_tests/openpype_tests.settings.json @@ -1,2 +1 @@ [] - From 810d28140b6eb5c6eac4515109b2860235d0499c Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Wed, 26 Jul 2023 11:58:03 +0100 Subject: [PATCH 16/69] Refactor input environment to optional class attribute --- .../hosts/maya/test_publish_in_maya.py | 16 ++++------ tests/lib/testing_classes.py | 30 +++++++++++-------- 2 files changed, 24 insertions(+), 22 deletions(-) diff --git a/tests/integration/hosts/maya/test_publish_in_maya.py b/tests/integration/hosts/maya/test_publish_in_maya.py index a39b4a0ae7d..81fff03e60c 100644 --- a/tests/integration/hosts/maya/test_publish_in_maya.py +++ b/tests/integration/hosts/maya/test_publish_in_maya.py @@ -38,16 +38,12 @@ class TestPublishInMaya(MayaLocalPublishTestClass): TIMEOUT = 120 # publish timeout - INPUT_DATA_FOLDER = None - DATABASE_DUMPS = os.path.join(os.path.dirname(__file__), "input", "dumps") - - @pytest.fixture(scope="module") - def environment_json(self, download_test_data): - # Set environment variables from input json and class attributes. - environment_path = os.path.join( - os.path.dirname(__file__), "input", "env_vars", "env_var.json" - ) - yield environment_path + INPUT_DUMPS = os.path.join( + os.path.dirname(__file__), "input", "dumps" + ) + INPUT_ENVIRONMENT_JSON = os.path.join( + os.path.dirname(__file__), "input", "env_vars", "env_var.json" + ) def test_publish(self, dbcon, publish_finished, download_test_data): logging_path = os.path.join(download_test_data, LOG_PATH) diff --git a/tests/lib/testing_classes.py b/tests/lib/testing_classes.py index c53b4f23be5..9bc74286469 100644 --- a/tests/lib/testing_classes.py +++ b/tests/lib/testing_classes.py @@ -144,7 +144,8 @@ class ModuleUnitTest(BaseTest): TASK_NAME = "test_task" DATA_FOLDER = None - DATABASE_DUMPS = None + INPUT_DUMPS = None + INPUT_ENVIRONMENT_JSON = None @pytest.fixture(scope='session') def monkeypatch_session(self): @@ -180,12 +181,13 @@ def output_folder(self, download_test_data): yield path @pytest.fixture(scope="module") - def environment_json(self, download_test_data): - # Set environment variables from input json and class attributes. - environment_path = os.path.join( - download_test_data, "input", "env_vars", "env_var.json" - ) - yield environment_path + def input_environment_json(self, download_test_data): + path = self.INPUT_ENVIRONMENT_JSON + if path is None: + path = os.path.join( + download_test_data, "input", "env_vars", "env_var.json" + ) + yield path @pytest.fixture(scope="module") def environment_setup( @@ -193,7 +195,7 @@ def environment_setup( monkeypatch_session, download_test_data, openpype_mongo, - environment_json + input_environment_json ): """Sets temporary env vars from json file.""" # Collect openpype mongo. @@ -212,14 +214,14 @@ def environment_setup( attributes["DATABASE_PRODUCTION_NAME"] = DATABASE_PRODUCTION_NAME attributes["DATABASE_SETTINGS_NAME"] = DATABASE_SETTINGS_NAME - if not os.path.exists(environment_json): + if not os.path.exists(input_environment_json): raise ValueError( - "Env variable file {} doesn't exist".format(environment_json) + "Env variable file {} doesn't exist".format(input_environment_json) ) env_dict = {} try: - with open(environment_json) as json_file: + with open(input_environment_json) as json_file: env_dict = json.load(json_file) except ValueError: print("{} doesn't contain valid JSON") @@ -247,7 +249,11 @@ def environment_setup( @pytest.fixture(scope="module") def database_dumps(self, download_test_data): - yield self.DATABASE_DUMPS or get_backup_directory(download_test_data) + path = ( + self.INPUT_DUMPS or + get_backup_directory(download_test_data) + ) + yield path @pytest.fixture(scope="module") def database_setup( From 2e8d9a0f75c02a63adee15f17f03cf53746a364b Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Thu, 27 Jul 2023 09:22:19 +0100 Subject: [PATCH 17/69] Move input files to unique folder --- tests/integration/hosts/maya/lib.py | 57 +------------------ .../avalon_tests.test_project.json | 0 .../openpype_tests/openpype_tests.logs.json | 0 .../openpype_tests.settings.json | 0 .../input/env_vars/env_var.json | 0 .../input/startup/userSetup.py | 0 .../test_project_test_asset_test_task_v001.ma | 0 .../test_publish_in_maya.py | 50 ++++++++++++++++ tests/lib/testing_classes.py | 3 +- 9 files changed, 54 insertions(+), 56 deletions(-) rename tests/integration/hosts/maya/{ => test_publish_in_maya}/input/dumps/avalon_tests/avalon_tests.test_project.json (100%) rename tests/integration/hosts/maya/{ => test_publish_in_maya}/input/dumps/openpype_tests/openpype_tests.logs.json (100%) rename tests/integration/hosts/maya/{ => test_publish_in_maya}/input/dumps/openpype_tests/openpype_tests.settings.json (100%) rename tests/integration/hosts/maya/{ => test_publish_in_maya}/input/env_vars/env_var.json (100%) rename tests/integration/hosts/maya/{ => test_publish_in_maya}/input/startup/userSetup.py (100%) rename tests/integration/hosts/maya/{ => test_publish_in_maya}/input/workfile/test_project_test_asset_test_task_v001.ma (100%) rename tests/integration/hosts/maya/{ => test_publish_in_maya}/test_publish_in_maya.py (68%) diff --git a/tests/integration/hosts/maya/lib.py b/tests/integration/hosts/maya/lib.py index 265780eb3a8..71df5c6b7d0 100644 --- a/tests/integration/hosts/maya/lib.py +++ b/tests/integration/hosts/maya/lib.py @@ -1,6 +1,4 @@ import os -import pytest -import shutil from tests.lib.testing_classes import ( HostFixtures, @@ -12,60 +10,9 @@ LOG_PATH = os.path.join("output.log") -class MayaHostFixtures(HostFixtures): - @pytest.fixture(scope="module") - def last_workfile_path(self, download_test_data, output_folder): - """Get last_workfile_path from source data. - - Maya expects workfile in proper folder, so copy is done first. - """ - src_path = os.path.join( - os.path.dirname(__file__), - "input", - "workfile", - "test_project_test_asset_test_task_v001.ma" - ) - dest_folder = os.path.join( - output_folder, - self.PROJECT_NAME, - self.ASSET_NAME, - "work", - self.TASK_NAME - ) - os.makedirs(dest_folder) - dest_path = os.path.join( - dest_folder, "test_project_test_asset_test_task_v001.ma" - ) - shutil.copy(src_path, dest_path) - - yield dest_path - - @pytest.fixture(scope="module") - def startup_scripts(self, monkeypatch_session, download_test_data): - """Points Maya to userSetup file from input data""" - user_setup_path = os.path.join( - os.path.dirname(__file__), "input", "startup" - ) - original_pythonpath = os.environ.get("PYTHONPATH") - monkeypatch_session.setenv( - "PYTHONPATH", - "{}{}{}".format( - user_setup_path, os.pathsep, original_pythonpath - ) - ) - - monkeypatch_session.setenv( - "MAYA_CMD_FILE_OUTPUT", os.path.join(download_test_data, LOG_PATH) - ) - - @pytest.fixture(scope="module") - def skip_compare_folders(self): - yield [] - - -class MayaLocalPublishTestClass(MayaHostFixtures, PublishTest): +class MayaLocalPublishTestClass(HostFixtures, PublishTest): """Testing class for local publishes.""" -class MayaDeadlinePublishTestClass(MayaHostFixtures, DeadlinePublishTest): +class MayaDeadlinePublishTestClass(HostFixtures, DeadlinePublishTest): """Testing class for Deadline publishes.""" diff --git a/tests/integration/hosts/maya/input/dumps/avalon_tests/avalon_tests.test_project.json b/tests/integration/hosts/maya/test_publish_in_maya/input/dumps/avalon_tests/avalon_tests.test_project.json similarity index 100% rename from tests/integration/hosts/maya/input/dumps/avalon_tests/avalon_tests.test_project.json rename to tests/integration/hosts/maya/test_publish_in_maya/input/dumps/avalon_tests/avalon_tests.test_project.json diff --git a/tests/integration/hosts/maya/input/dumps/openpype_tests/openpype_tests.logs.json b/tests/integration/hosts/maya/test_publish_in_maya/input/dumps/openpype_tests/openpype_tests.logs.json similarity index 100% rename from tests/integration/hosts/maya/input/dumps/openpype_tests/openpype_tests.logs.json rename to tests/integration/hosts/maya/test_publish_in_maya/input/dumps/openpype_tests/openpype_tests.logs.json diff --git a/tests/integration/hosts/maya/input/dumps/openpype_tests/openpype_tests.settings.json b/tests/integration/hosts/maya/test_publish_in_maya/input/dumps/openpype_tests/openpype_tests.settings.json similarity index 100% rename from tests/integration/hosts/maya/input/dumps/openpype_tests/openpype_tests.settings.json rename to tests/integration/hosts/maya/test_publish_in_maya/input/dumps/openpype_tests/openpype_tests.settings.json diff --git a/tests/integration/hosts/maya/input/env_vars/env_var.json b/tests/integration/hosts/maya/test_publish_in_maya/input/env_vars/env_var.json similarity index 100% rename from tests/integration/hosts/maya/input/env_vars/env_var.json rename to tests/integration/hosts/maya/test_publish_in_maya/input/env_vars/env_var.json diff --git a/tests/integration/hosts/maya/input/startup/userSetup.py b/tests/integration/hosts/maya/test_publish_in_maya/input/startup/userSetup.py similarity index 100% rename from tests/integration/hosts/maya/input/startup/userSetup.py rename to tests/integration/hosts/maya/test_publish_in_maya/input/startup/userSetup.py diff --git a/tests/integration/hosts/maya/input/workfile/test_project_test_asset_test_task_v001.ma b/tests/integration/hosts/maya/test_publish_in_maya/input/workfile/test_project_test_asset_test_task_v001.ma similarity index 100% rename from tests/integration/hosts/maya/input/workfile/test_project_test_asset_test_task_v001.ma rename to tests/integration/hosts/maya/test_publish_in_maya/input/workfile/test_project_test_asset_test_task_v001.ma diff --git a/tests/integration/hosts/maya/test_publish_in_maya.py b/tests/integration/hosts/maya/test_publish_in_maya/test_publish_in_maya.py similarity index 68% rename from tests/integration/hosts/maya/test_publish_in_maya.py rename to tests/integration/hosts/maya/test_publish_in_maya/test_publish_in_maya.py index 81fff03e60c..2c683861df7 100644 --- a/tests/integration/hosts/maya/test_publish_in_maya.py +++ b/tests/integration/hosts/maya/test_publish_in_maya/test_publish_in_maya.py @@ -1,5 +1,6 @@ import os import re +import shutil import pytest @@ -45,6 +46,55 @@ class TestPublishInMaya(MayaLocalPublishTestClass): os.path.dirname(__file__), "input", "env_vars", "env_var.json" ) + @pytest.fixture(scope="module") + def last_workfile_path(self, download_test_data, output_folder): + """Get last_workfile_path from source data. + + Maya expects workfile in proper folder, so copy is done first. + """ + src_path = os.path.join( + os.path.dirname(__file__), + "input", + "workfile", + "test_project_test_asset_test_task_v001.ma" + ) + dest_folder = os.path.join( + output_folder, + self.PROJECT_NAME, + self.ASSET_NAME, + "work", + self.TASK_NAME + ) + os.makedirs(dest_folder) + dest_path = os.path.join( + dest_folder, "test_project_test_asset_test_task_v001.ma" + ) + shutil.copy(src_path, dest_path) + + yield dest_path + + @pytest.fixture(scope="module") + def startup_scripts(self, monkeypatch_session, download_test_data): + """Points Maya to userSetup file from input data""" + user_setup_path = os.path.join( + os.path.dirname(__file__), "input", "startup" + ) + original_pythonpath = os.environ.get("PYTHONPATH") + monkeypatch_session.setenv( + "PYTHONPATH", + "{}{}{}".format( + user_setup_path, os.pathsep, original_pythonpath + ) + ) + + monkeypatch_session.setenv( + "MAYA_CMD_FILE_OUTPUT", os.path.join(download_test_data, LOG_PATH) + ) + + @pytest.fixture(scope="module") + def skip_compare_folders(self): + pass + def test_publish(self, dbcon, publish_finished, download_test_data): logging_path = os.path.join(download_test_data, LOG_PATH) with open(logging_path, "r") as f: diff --git a/tests/lib/testing_classes.py b/tests/lib/testing_classes.py index 9bc74286469..47678e1bf70 100644 --- a/tests/lib/testing_classes.py +++ b/tests/lib/testing_classes.py @@ -420,7 +420,7 @@ def launched_app( os.environ["AVALON_SCHEMA"] = schema_path os.environ["OPENPYPE_EXECUTABLE"] = sys.executable - + print(os.environ["PYTHONPATH"]) if keep_app_open: os.environ["KEEP_APP_OPEN"] = "1" @@ -437,6 +437,7 @@ def launched_app( if app_args: data["app_args"] = app_args + print("Launching {} with {}".format(app_name, data)) app_process = application_manager.launch(app_name, **data) yield app_process From 0640705caf760393d407b9953e4bbbef08e0c9cc Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Thu, 27 Jul 2023 17:49:11 +0100 Subject: [PATCH 18/69] Working MayaPy and Maya app variants --- openpype/hosts/maya/api/pipeline.py | 3 +- openpype/hosts/maya/startup/userSetup.py | 4 +- openpype/lib/applications.py | 9 +++ openpype/pype_commands.py | 5 +- .../system_settings/applications.json | 20 ++++++ .../input/startup/userSetup.py | 46 ++++++++++--- .../test_publish_in_maya.py | 69 +++++++++++++++---- tests/lib/testing_classes.py | 17 +++-- 8 files changed, 141 insertions(+), 32 deletions(-) diff --git a/openpype/hosts/maya/api/pipeline.py b/openpype/hosts/maya/api/pipeline.py index 60495ac6526..dc93d5a63fa 100644 --- a/openpype/hosts/maya/api/pipeline.py +++ b/openpype/hosts/maya/api/pipeline.py @@ -97,6 +97,8 @@ def install(self): self.log.info("Installing callbacks ... ") register_event_callback("init", on_init) + _set_project() + if lib.IS_HEADLESS: self.log.info(( "Running in headless mode, skipping Maya save/open/new" @@ -105,7 +107,6 @@ def install(self): return - _set_project() self._register_callbacks() menu.install() diff --git a/openpype/hosts/maya/startup/userSetup.py b/openpype/hosts/maya/startup/userSetup.py index f2899cdb370..f41f5ea780f 100644 --- a/openpype/hosts/maya/startup/userSetup.py +++ b/openpype/hosts/maya/startup/userSetup.py @@ -7,11 +7,11 @@ from maya import cmds +print("Starting OpenPype usersetup...") + host = MayaHost() install_host(host) -print("Starting OpenPype usersetup...") - project_name = get_current_project_name() settings = get_project_settings(project_name) diff --git a/openpype/lib/applications.py b/openpype/lib/applications.py index f47e11926ca..620f813dbc0 100644 --- a/openpype/lib/applications.py +++ b/openpype/lib/applications.py @@ -900,6 +900,9 @@ def __init__(self, application, executable, env_group=None, **data): self.env_group = env_group + stdout = data.pop("stdout", None) + stderr = data.pop("stderr", None) + self.data = dict(data) # subprocess.Popen launch arguments (first argument in constructor) @@ -941,6 +944,12 @@ def __init__(self, application, executable, env_group=None, **data): self.kwargs["stdout"] = subprocess.DEVNULL self.kwargs["stderr"] = subprocess.DEVNULL + if stdout: + self.kwargs["stdout"] = stdout + + if stderr: + self.kwargs["stderr"] = stderr + self.prelaunch_hooks = None self.postlaunch_hooks = None diff --git a/openpype/pype_commands.py b/openpype/pype_commands.py index 35e8b9ef15b..6ffab6418f6 100644 --- a/openpype/pype_commands.py +++ b/openpype/pype_commands.py @@ -296,7 +296,8 @@ def run_tests( app_variant (str): variant (eg 2020 for AE), empty if use latest installed version """ - print("run_tests") + start_time = time.time() + end_time_msg = "\"run_test\" took {} seconds to execute." if folder: folder = " ".join(list(folder)) else: @@ -341,6 +342,7 @@ def run_tests( from tests.lib.testing_classes import setup setup(class_names, data_folder, openpype_mongo) + print(end_time_msg.format(time.time() - start_time)) return if database_urls: @@ -349,6 +351,7 @@ def run_tests( from tests.lib.testing_classes import dump_databases dump_databases(database_urls, data_folder, openpype_mongo) + print(end_time_msg.format(time.time() - start_time)) return print("run_tests args: {}".format(args)) diff --git a/openpype/settings/defaults/system_settings/applications.json b/openpype/settings/defaults/system_settings/applications.json index f2fc7d933aa..592a22ef84c 100644 --- a/openpype/settings/defaults/system_settings/applications.json +++ b/openpype/settings/defaults/system_settings/applications.json @@ -32,6 +32,26 @@ "MAYA_VERSION": "2023" } }, + "py2023": { + "use_python_2": false, + "executables": { + "windows": [ + "C:\\Program Files\\Autodesk\\Maya2023\\bin\\mayapy.exe" + ], + "darwin": [], + "linux": [ + "/usr/autodesk/maya2023/bin/maya" + ] + }, + "arguments": { + "windows": [], + "darwin": [], + "linux": [] + }, + "environment": { + "MAYA_VERSION": "2023" + } + }, "2022": { "use_python_2": false, "executables": { diff --git a/tests/integration/hosts/maya/test_publish_in_maya/input/startup/userSetup.py b/tests/integration/hosts/maya/test_publish_in_maya/input/startup/userSetup.py index de553e93312..cedf2c06bef 100644 --- a/tests/integration/hosts/maya/test_publish_in_maya/input/startup/userSetup.py +++ b/tests/integration/hosts/maya/test_publish_in_maya/input/startup/userSetup.py @@ -1,11 +1,22 @@ +import sys import os - import logging -from maya import cmds +sys.stderr = sys.stdout + +MAYA_STANDALONE = False +try: + import maya.standalone + maya.standalone.initialize() + MAYA_STANDALONE = True + print("maya standalone initialized") +except RuntimeError: + pass + +from maya import cmds # noqa: E402 -def setup_logging(): +def setup_pyblish_logging(): # Fetch the logger Pyblish uses for all of its messages log = logging.getLogger("pyblish") @@ -20,12 +31,25 @@ def setup_logging(): log.addHandler(hnd) -print("starting OpenPype usersetup for testing") -cmds.evalDeferred("setup_logging()", evaluateNext=True) -cmds.evalDeferred( - "import pyblish.util;pyblish.util.publish()", lowestPriority=True -) +def main(): + if MAYA_STANDALONE: + setup_pyblish_logging() + + cmds.file(os.environ["AVALON_LAST_WORKFILE"], open=True, force=True) + + import pyblish.util + pyblish.util.publish() + + return + + cmds.evalDeferred("setup_pyblish_logging()", evaluateNext=True) + cmds.evalDeferred( + "import pyblish.util;pyblish.util.publish()", lowestPriority=True + ) + + print("finished OpenPype usersetup for testing") + if not os.environ.get("KEEP_APP_OPEN") or not MAYA_STANDALONE: + cmds.evalDeferred("cmds.quit(force=True)", lowestPriority=True) + -print("finished OpenPype usersetup for testing") -if not os.environ.get("KEEP_APP_OPEN"): - cmds.evalDeferred("cmds.quit(force=True)", lowestPriority=True) +main() diff --git a/tests/integration/hosts/maya/test_publish_in_maya/test_publish_in_maya.py b/tests/integration/hosts/maya/test_publish_in_maya/test_publish_in_maya.py index 2c683861df7..42a4f611fa4 100644 --- a/tests/integration/hosts/maya/test_publish_in_maya/test_publish_in_maya.py +++ b/tests/integration/hosts/maya/test_publish_in_maya/test_publish_in_maya.py @@ -34,8 +34,10 @@ class TestPublishInMaya(MayaLocalPublishTestClass): PERSIST = False APP_GROUP = "maya" - # keep empty to locate latest installed variant or explicit - APP_VARIANT = "" + + # By default run through mayapy. For interactive mode, change to 2023 or + # input `--app_variant 2023` in cli. + APP_VARIANT = "py2023" TIMEOUT = 120 # publish timeout @@ -46,6 +48,34 @@ class TestPublishInMaya(MayaLocalPublishTestClass): os.path.dirname(__file__), "input", "env_vars", "env_var.json" ) + def running_in_mayapy(self, app_variant): + app_variant = app_variant or self.APP_VARIANT + + # Running in mayapy. + if app_variant.startswith("py"): + return True + + # Running in maya. + return False + + def get_usersetup_path(self): + return os.path.join( + os.path.dirname(__file__), "input", "startup", "userSetup.py" + ) + + @pytest.fixture(scope="module") + def app_args(self, app_variant): + args = [] + if self.running_in_mayapy(app_variant): + args = ["-I", self.get_usersetup_path()] + + yield args + + @pytest.fixture(scope="module") + def start_last_workfile(self, app_variant): + """Returns url of workfile""" + return not self.running_in_mayapy(app_variant) + @pytest.fixture(scope="module") def last_workfile_path(self, download_test_data, output_folder): """Get last_workfile_path from source data. @@ -74,18 +104,22 @@ def last_workfile_path(self, download_test_data, output_folder): yield dest_path @pytest.fixture(scope="module") - def startup_scripts(self, monkeypatch_session, download_test_data): + def startup_scripts( + self, monkeypatch_session, download_test_data, app_variant + ): """Points Maya to userSetup file from input data""" - user_setup_path = os.path.join( - os.path.dirname(__file__), "input", "startup" - ) - original_pythonpath = os.environ.get("PYTHONPATH") - monkeypatch_session.setenv( - "PYTHONPATH", - "{}{}{}".format( - user_setup_path, os.pathsep, original_pythonpath + if not self.running_in_mayapy(app_variant): + # Not needed for running MayaPy since the testing userSetup.py will + # be passed in directly to the executable. + original_pythonpath = os.environ.get("PYTHONPATH") + monkeypatch_session.setenv( + "PYTHONPATH", + "{}{}{}".format( + os.path.dirname(self.get_usersetup_path()), + os.pathsep, + original_pythonpath + ) ) - ) monkeypatch_session.setenv( "MAYA_CMD_FILE_OUTPUT", os.path.join(download_test_data, LOG_PATH) @@ -100,9 +134,18 @@ def test_publish(self, dbcon, publish_finished, download_test_data): with open(logging_path, "r") as f: logging_output = f.read() + # Check for pyblish errors. error_regex = r"pyblish \(ERROR\)((.|\n)*)" matches = re.findall(error_regex, logging_output) - assert not matches, ("ERROR" + matches[0][0]) + assert not matches, logging_output + + matches = re.findall(error_regex, publish_finished) + assert not matches, publish_finished + + # Check for python errors. + error_regex = r"// Error((.|\n)*)" + matches = re.findall(error_regex, logging_output) + assert not matches, logging_output def test_db_asserts( self, diff --git a/tests/lib/testing_classes.py b/tests/lib/testing_classes.py index 47678e1bf70..95c3d7c5b44 100644 --- a/tests/lib/testing_classes.py +++ b/tests/lib/testing_classes.py @@ -10,6 +10,7 @@ import platform import requests import re +import subprocess from tests.lib.database_handler import DataBaseHandler from common.ayon_common.distribution.file_handler import RemoteFileHandler @@ -397,12 +398,18 @@ def app_args(self, download_test_data): yield app_args + @pytest.fixture(scope="module") + def start_last_workfile(self): + """Returns url of workfile""" + return True + @pytest.fixture(scope="module") def launched_app( self, dbcon, download_test_data, last_workfile_path, + start_last_workfile, startup_scripts, app_args, app_name, @@ -420,7 +427,7 @@ def launched_app( os.environ["AVALON_SCHEMA"] = schema_path os.environ["OPENPYPE_EXECUTABLE"] = sys.executable - print(os.environ["PYTHONPATH"]) + if keep_app_open: os.environ["KEEP_APP_OPEN"] = "1" @@ -429,10 +436,11 @@ def launched_app( application_manager = ApplicationManager() data = { "last_workfile_path": last_workfile_path, - "start_last_workfile": True, + "start_last_workfile": start_last_workfile, "project_name": self.PROJECT_NAME, "asset_name": self.ASSET_NAME, - "task_name": self.TASK_NAME + "task_name": self.TASK_NAME, + "stdout": subprocess.PIPE } if app_args: data["app_args"] = app_args @@ -460,6 +468,7 @@ def publish_finished( timeout = float(timeout) while launched_app.poll() is None: + out, err = launched_app.communicate() time.sleep(0.5) if time.time() - time_start > timeout: launched_app.terminate() @@ -467,7 +476,7 @@ def publish_finished( # some clean exit test possible? print("Publish finished") - yield True + yield out.decode("utf-8") def test_folder_structure_same( self, From ba7ebf9f2c2a064605d344bb3d4870983c897cea Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Fri, 28 Jul 2023 09:23:31 +0100 Subject: [PATCH 19/69] Tested succesfully in Maya 2022 --- .../hosts/maya/plugins/publish/save_scene.py | 6 +- .../input/startup/userSetup.py | 2 +- .../test_project_test_asset_test_task_v001.ma | 118 ++++++++---------- .../test_publish_in_maya.py | 9 +- 4 files changed, 67 insertions(+), 68 deletions(-) diff --git a/openpype/hosts/maya/plugins/publish/save_scene.py b/openpype/hosts/maya/plugins/publish/save_scene.py index 495c3397317..61d87ec2d3d 100644 --- a/openpype/hosts/maya/plugins/publish/save_scene.py +++ b/openpype/hosts/maya/plugins/publish/save_scene.py @@ -32,4 +32,8 @@ def process(self, context): if is_workfile_lock_enabled("maya", project_name, project_settings): remove_workfile_lock(current) self.log.info("Saving current file: {}".format(current)) - cmds.file(save=True, force=True) + + # There is a known issue where Maya looses its scene name, so just + # using "save" wont work. Forcing a rename to the current scene name + # covers all cases. + cmds.file(rename=current) diff --git a/tests/integration/hosts/maya/test_publish_in_maya/input/startup/userSetup.py b/tests/integration/hosts/maya/test_publish_in_maya/input/startup/userSetup.py index cedf2c06bef..18bfa7e216d 100644 --- a/tests/integration/hosts/maya/test_publish_in_maya/input/startup/userSetup.py +++ b/tests/integration/hosts/maya/test_publish_in_maya/input/startup/userSetup.py @@ -48,7 +48,7 @@ def main(): ) print("finished OpenPype usersetup for testing") - if not os.environ.get("KEEP_APP_OPEN") or not MAYA_STANDALONE: + if not bool(os.environ.get("KEEP_APP_OPEN")) and not MAYA_STANDALONE: cmds.evalDeferred("cmds.quit(force=True)", lowestPriority=True) diff --git a/tests/integration/hosts/maya/test_publish_in_maya/input/workfile/test_project_test_asset_test_task_v001.ma b/tests/integration/hosts/maya/test_publish_in_maya/input/workfile/test_project_test_asset_test_task_v001.ma index 614eb317691..70d7f238476 100644 --- a/tests/integration/hosts/maya/test_publish_in_maya/input/workfile/test_project_test_asset_test_task_v001.ma +++ b/tests/integration/hosts/maya/test_publish_in_maya/input/workfile/test_project_test_asset_test_task_v001.ma @@ -1,19 +1,19 @@ -//Maya ASCII 2023 scene +//Maya ASCII 2022 scene //Name: test_project_test_asset_test_task_v001.ma -//Last modified: Tue, Jul 25, 2023 12:37:00 PM +//Last modified: Fri, Jul 28, 2023 09:19:26 AM //Codeset: 1252 -requires maya "2023"; -requires -nodeType "renderSetup" "renderSetup.py" "1.0"; -requires -nodeType "aiOptions" -nodeType "aiAOVDriver" -nodeType "aiAOVFilter" "mtoa" "5.3.1"; +requires maya "2022"; requires -nodeType "polyDisc" "modelingToolkit" "0.0.0.0"; +requires -nodeType "aiOptions" -nodeType "aiAOVDriver" -nodeType "aiAOVFilter" "mtoa" "5.2.2.1"; +requires -nodeType "renderSetup" "renderSetup.py" "1.0"; currentUnit -l centimeter -a degree -t pal; fileInfo "application" "maya"; -fileInfo "product" "Maya 2023"; -fileInfo "version" "2023"; -fileInfo "cutIdentifier" "202211021031-847a9f9623"; +fileInfo "product" "Maya 2022"; +fileInfo "version" "2022"; +fileInfo "cutIdentifier" "202205171752-c25c06f306"; fileInfo "osv" "Windows 10 Pro v2009 (Build: 19044)"; fileInfo "license" "education"; -fileInfo "UUID" "257B5A36-45C6-9CC1-802A-738829BA2DC1"; +fileInfo "UUID" "8ACB2272-4349-C7EA-3DEE-2CBDCE90E6E2"; fileInfo "OpenPypeContext" "eyJwdWJsaXNoX2F0dHJpYnV0ZXMiOiB7IlZhbGlkYXRlQ29udGFpbmVycyI6IHsiYWN0aXZlIjogdHJ1ZX19fQ=="; createNode transform -s -n "persp"; rename -uid "D52C935B-47C9-D868-A875-D799DD17B3A1"; @@ -122,20 +122,19 @@ createNode mesh -n "pDiscShape1" -p "pDisc1"; setAttr ".ai_translator" -type "string" "polymesh"; setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:4ee3da11a1a4"; createNode lightLinker -s -n "lightLinker1"; - rename -uid "DC94B53F-40F5-0880-68DF-9DB3C2E58867"; + rename -uid "299D7A10-4A35-CB9E-8436-32818DBFA63D"; setAttr -s 2 ".lnk"; setAttr -s 2 ".slnk"; createNode shapeEditorManager -n "shapeEditorManager"; - rename -uid "24D8DE75-4814-8FB0-8085-4783DD93A677"; + rename -uid "3972C4F6-4401-0797-E0D1-F2BA68014EA1"; createNode poseInterpolatorManager -n "poseInterpolatorManager"; - rename -uid "14585EF5-4E8A-77DB-74C8-A0A4ECF7AEEC"; + rename -uid "31ECBCB5-4460-79E3-5F91-85B75E9A0CEF"; createNode displayLayerManager -n "layerManager"; - rename -uid "AB0E325B-43C2-278D-6AF0-18B336147BE8"; + rename -uid "918287B5-4F46-C062-900A-3FBCD12C1420"; createNode displayLayer -n "defaultLayer"; rename -uid "4A776D1B-401F-7069-1C74-A7AAE84CEE03"; - setAttr ".ufem" -type "stringArray" 0 ; createNode renderLayerManager -n "renderLayerManager"; - rename -uid "725341DF-4E0B-AAC3-F73A-67B8C9D1495D"; + rename -uid "7BE3B58B-4503-28D8-3B39-2293B6E5B3D6"; createNode renderLayer -n "defaultRenderLayer"; rename -uid "B134920D-4508-23BD-A6CA-11B43DE03F53"; setAttr ".g" yes; @@ -157,12 +156,12 @@ createNode objectSet -n "modelMain"; addAttr -ci true -sn "writeFaceSets" -ln "writeFaceSets" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "attr" -ln "attr" -dt "string"; addAttr -ci true -sn "attrPrefix" -ln "attrPrefix" -dt "string"; - addAttr -ci true -sn "includeParentHierarchy" -ln "includeParentHierarchy" -min + addAttr -ci true -sn "includeParentHierarchy" -ln "includeParentHierarchy" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "task" -ln "task" -dt "string"; addAttr -ci true -sn "instance_id" -ln "instance_id" -dt "string"; addAttr -ci true -sn "publish_attributes" -ln "publish_attributes" -dt "string"; - addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" + addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" -dt "string"; setAttr ".ihi" 0; setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:7364ea6776c9"; @@ -186,52 +185,43 @@ createNode script -n "uiConfigurationScriptNode"; rename -uid "4B7AFB53-452E-E870-63E1-CCA1DD6EAF13"; setAttr ".b" -type "string" ( "// Maya Mel UI Configuration File.\n//\n// This script is machine generated. Edit at your own risk.\n//\n//\n\nglobal string $gMainPane;\nif (`paneLayout -exists $gMainPane`) {\n\n\tglobal int $gUseScenePanelConfig;\n\tint $useSceneConfig = $gUseScenePanelConfig;\n\tint $nodeEditorPanelVisible = stringArrayContains(\"nodeEditorPanel1\", `getPanel -vis`);\n\tint $nodeEditorWorkspaceControlOpen = (`workspaceControl -exists nodeEditorPanel1Window` && `workspaceControl -q -visible nodeEditorPanel1Window`);\n\tint $menusOkayInPanels = `optionVar -q allowMenusInPanels`;\n\tint $nVisPanes = `paneLayout -q -nvp $gMainPane`;\n\tint $nPanes = 0;\n\tstring $editorName;\n\tstring $panelName;\n\tstring $itemFilterName;\n\tstring $panelConfig;\n\n\t//\n\t// get current state of the UI\n\t//\n\tsceneUIReplacement -update $gMainPane;\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Top View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Top View\")) -mbv $menusOkayInPanels $panelName;\n" - + "\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"|front\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n" + + "\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"|top\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n" + " -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n" - + " -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -bluePencil 1\n -greasePencils 0\n -shadows 0\n -captureSequenceNumber -1\n -width 600\n -height 344\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Side View\")) `;\n" - + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Side View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"|front\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n" - + " -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n" - + " -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -bluePencil 1\n -greasePencils 0\n -shadows 0\n -captureSequenceNumber -1\n -width 600\n -height 344\n -sceneRenderFilter 0\n $editorName;\n" - + " modelEditor -e -viewSelected 0 $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Front View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Front View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"|top\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n" - + " -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n" - + " -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -bluePencil 1\n" - + " -greasePencils 0\n -shadows 0\n -captureSequenceNumber -1\n -width 600\n -height 344\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Persp View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Persp View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"|persp\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n" - + " -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n" - + " -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n" - + " -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -bluePencil 1\n -greasePencils 0\n -shadows 0\n -captureSequenceNumber -1\n -width 600\n -height 344\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"outlinerPanel\" (localizedPanelLabel(\"ToggledOutliner\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\toutlinerPanel -edit -l (localizedPanelLabel(\"ToggledOutliner\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n outlinerEditor -e \n -showShapes 0\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 1\n -showReferenceMembers 1\n -showAttributes 0\n" - + " -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -organizeByClip 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showParentContainers 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -isSet 0\n -isSetMember 0\n" - + " -showUfeItems 1\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n -renderFilterIndex 0\n -selectionOrder \"chronological\" \n -expandAttribute 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"outlinerPanel\" (localizedPanelLabel(\"Outliner\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n" - + "\t\toutlinerPanel -edit -l (localizedPanelLabel(\"Outliner\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n outlinerEditor -e \n -showShapes 0\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -organizeByClip 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showParentContainers 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n" - + " -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -showUfeItems 1\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n" - + "\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"graphEditor\" (localizedPanelLabel(\"Graph Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Graph Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -organizeByClip 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 1\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n" - + " -showParentContainers 1\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 0\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 1\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 1\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -showUfeItems 1\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n" - + " -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 1\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"GraphEd\");\n animCurveEditor -e \n -displayValues 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -showPlayRangeShades \"on\" \n -lockPlayRangeShades \"off\" \n -smoothness \"fine\" \n -resultSamples 1.041667\n -resultScreenSamples 0\n -resultUpdate \"delayed\" \n -showUpstreamCurves 1\n -keyMinScale 1\n -stackedCurvesMin -1\n -stackedCurvesMax 1\n -stackedCurvesSpace 0.2\n" - + " -preSelectionHighlight 0\n -constrainDrag 0\n -valueLinesToggle 1\n -highlightAffectedCurves 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dopeSheetPanel\" (localizedPanelLabel(\"Dope Sheet\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Dope Sheet\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -organizeByClip 1\n -showAnimLayerWeight 1\n" - + " -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showParentContainers 1\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 0\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 1\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -showUfeItems 1\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n" - + " -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"DopeSheetEd\");\n dopeSheetEditor -e \n -displayValues 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -outliner \"dopeSheetPanel1OutlineEd\" \n -showSummary 1\n -showScene 0\n -hierarchyBelow 0\n -showTicks 1\n -selectionWindow 0 0 0 0 \n" - + " $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"timeEditorPanel\" (localizedPanelLabel(\"Time Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Time Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"clipEditorPanel\" (localizedPanelLabel(\"Trax Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Trax Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = clipEditorNameFromPanel($panelName);\n clipEditor -e \n -displayValues 0\n -snapTime \"none\" \n -snapValue \"none\" \n -initialized 0\n -manageSequencer 0 \n $editorName;\n\t\tif (!$useSceneConfig) {\n" - + "\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"sequenceEditorPanel\" (localizedPanelLabel(\"Camera Sequencer\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Camera Sequencer\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = sequenceEditorNameFromPanel($panelName);\n clipEditor -e \n -displayValues 0\n -snapTime \"none\" \n -snapValue \"none\" \n -initialized 0\n -manageSequencer 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"hyperGraphPanel\" (localizedPanelLabel(\"Hypergraph Hierarchy\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Hypergraph Hierarchy\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"HyperGraphEd\");\n" - + " hyperGraph -e \n -graphLayoutStyle \"hierarchicalLayout\" \n -orientation \"horiz\" \n -mergeConnections 0\n -zoom 1\n -animateTransition 0\n -showRelationships 1\n -showShapes 0\n -showDeformers 0\n -showExpressions 0\n -showConstraints 0\n -showConnectionFromSelected 0\n -showConnectionToSelected 0\n -showConstraintLabels 0\n -showUnderworld 0\n -showInvisible 0\n -transitionFrames 1\n -opaqueContainers 0\n -freeform 0\n -imagePosition 0 0 \n -imageScale 1\n -imageEnabled 0\n -graphType \"DAG\" \n -heatMapDisplay 0\n -updateSelection 1\n -updateNodeAdded 1\n -useDrawOverrideColor 0\n -limitGraphTraversal -1\n -range 0 0 \n" - + " -iconSize \"smallIcons\" \n -showCachedConnections 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"hyperShadePanel\" (localizedPanelLabel(\"Hypershade\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Hypershade\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"visorPanel\" (localizedPanelLabel(\"Visor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Visor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"nodeEditorPanel\" (localizedPanelLabel(\"Node Editor\")) `;\n\tif ($nodeEditorPanelVisible || $nodeEditorWorkspaceControlOpen) {\n" - + "\t\tif (\"\" == $panelName) {\n\t\t\tif ($useSceneConfig) {\n\t\t\t\t$panelName = `scriptedPanel -unParent -type \"nodeEditorPanel\" -l (localizedPanelLabel(\"Node Editor\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"NodeEditorEd\");\n nodeEditor -e \n -allAttributes 0\n -allNodes 0\n -autoSizeNodes 1\n -consistentNameSize 1\n -createNodeCommand \"nodeEdCreateNodeCommand\" \n -connectNodeOnCreation 0\n -connectOnDrop 0\n -copyConnectionsOnPaste 0\n -connectionStyle \"bezier\" \n -defaultPinnedState 0\n -additiveGraphingMode 0\n -connectedGraphingMode 1\n -settingsChangedCallback \"nodeEdSyncControls\" \n -traversalDepthLimit -1\n -keyPressCommand \"nodeEdKeyPressCommand\" \n -nodeTitleMode \"name\" \n -gridSnap 0\n -gridVisibility 1\n -crosshairOnEdgeDragging 0\n" - + " -popupMenuScript \"nodeEdBuildPanelMenus\" \n -showNamespace 1\n -showShapes 1\n -showSGShapes 0\n -showTransforms 1\n -useAssets 1\n -syncedSelection 1\n -extendToShapes 1\n -showUnitConversions 0\n -editorMode \"default\" \n -hasWatchpoint 0\n $editorName;\n\t\t\t}\n\t\t} else {\n\t\t\t$label = `panel -q -label $panelName`;\n\t\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Node Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"NodeEditorEd\");\n nodeEditor -e \n -allAttributes 0\n -allNodes 0\n -autoSizeNodes 1\n -consistentNameSize 1\n -createNodeCommand \"nodeEdCreateNodeCommand\" \n -connectNodeOnCreation 0\n -connectOnDrop 0\n -copyConnectionsOnPaste 0\n -connectionStyle \"bezier\" \n -defaultPinnedState 0\n" - + " -additiveGraphingMode 0\n -connectedGraphingMode 1\n -settingsChangedCallback \"nodeEdSyncControls\" \n -traversalDepthLimit -1\n -keyPressCommand \"nodeEdKeyPressCommand\" \n -nodeTitleMode \"name\" \n -gridSnap 0\n -gridVisibility 1\n -crosshairOnEdgeDragging 0\n -popupMenuScript \"nodeEdBuildPanelMenus\" \n -showNamespace 1\n -showShapes 1\n -showSGShapes 0\n -showTransforms 1\n -useAssets 1\n -syncedSelection 1\n -extendToShapes 1\n -showUnitConversions 0\n -editorMode \"default\" \n -hasWatchpoint 0\n $editorName;\n\t\t\tif (!$useSceneConfig) {\n\t\t\t\tpanel -e -l $label $panelName;\n\t\t\t}\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"createNodePanel\" (localizedPanelLabel(\"Create Node\")) `;\n\tif (\"\" != $panelName) {\n" - + "\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Create Node\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"polyTexturePlacementPanel\" (localizedPanelLabel(\"UV Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"UV Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"renderWindowPanel\" (localizedPanelLabel(\"Render View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Render View\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"shapePanel\" (localizedPanelLabel(\"Shape Editor\")) `;\n\tif (\"\" != $panelName) {\n" - + "\t\t$label = `panel -q -label $panelName`;\n\t\tshapePanel -edit -l (localizedPanelLabel(\"Shape Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"posePanel\" (localizedPanelLabel(\"Pose Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tposePanel -edit -l (localizedPanelLabel(\"Pose Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dynRelEdPanel\" (localizedPanelLabel(\"Dynamic Relationships\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Dynamic Relationships\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"relationshipPanel\" (localizedPanelLabel(\"Relationship Editor\")) `;\n" - + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Relationship Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"referenceEditorPanel\" (localizedPanelLabel(\"Reference Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Reference Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dynPaintScriptedPanelType\" (localizedPanelLabel(\"Paint Effects\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Paint Effects\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"scriptEditorPanel\" (localizedPanelLabel(\"Script Editor\")) `;\n" - + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Script Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"profilerPanel\" (localizedPanelLabel(\"Profiler Tool\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Profiler Tool\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"contentBrowserPanel\" (localizedPanelLabel(\"Content Browser\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Content Browser\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\tif ($useSceneConfig) {\n string $configName = `getPanel -cwl (localizedPanelLabel(\"Current Layout\"))`;\n" - + " if (\"\" != $configName) {\n\t\t\tpanelConfiguration -edit -label (localizedPanelLabel(\"Current Layout\")) \n\t\t\t\t-userCreated false\n\t\t\t\t-defaultImage \"vacantCell.xP:/\"\n\t\t\t\t-image \"\"\n\t\t\t\t-sc false\n\t\t\t\t-configString \"global string $gMainPane; paneLayout -e -cn \\\"quad\\\" -ps 1 50 50 -ps 2 50 50 -ps 3 50 50 -ps 4 50 50 $gMainPane;\"\n\t\t\t\t-removeAllPanels\n\t\t\t\t-ap false\n\t\t\t\t\t(localizedPanelLabel(\"Top View\")) \n\t\t\t\t\t\"modelPanel\"\n" - + "\t\t\t\t\t\"$panelName = `modelPanel -unParent -l (localizedPanelLabel(\\\"Top View\\\")) -mbv $menusOkayInPanels `;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera top` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 16384\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -controllers 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -bluePencil 1\\n -greasePencils 0\\n -shadows 0\\n -captureSequenceNumber -1\\n -width 600\\n -height 344\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName\"\n" - + "\t\t\t\t\t\"modelPanel -edit -l (localizedPanelLabel(\\\"Top View\\\")) -mbv $menusOkayInPanels $panelName;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera top` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 16384\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -controllers 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -bluePencil 1\\n -greasePencils 0\\n -shadows 0\\n -captureSequenceNumber -1\\n -width 600\\n -height 344\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName\"\n" - + "\t\t\t\t-ap false\n\t\t\t\t\t(localizedPanelLabel(\"Persp View\")) \n\t\t\t\t\t\"modelPanel\"\n" - + "\t\t\t\t\t\"$panelName = `modelPanel -unParent -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels `;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera persp` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 16384\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -controllers 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -bluePencil 1\\n -greasePencils 0\\n -shadows 0\\n -captureSequenceNumber -1\\n -width 600\\n -height 344\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName\"\n" - + "\t\t\t\t\t\"modelPanel -edit -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels $panelName;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera persp` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 16384\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -controllers 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -bluePencil 1\\n -greasePencils 0\\n -shadows 0\\n -captureSequenceNumber -1\\n -width 600\\n -height 344\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName\"\n" - + "\t\t\t\t-ap false\n\t\t\t\t\t(localizedPanelLabel(\"Side View\")) \n\t\t\t\t\t\"modelPanel\"\n" - + "\t\t\t\t\t\"$panelName = `modelPanel -unParent -l (localizedPanelLabel(\\\"Side View\\\")) -mbv $menusOkayInPanels `;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera side` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 16384\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -controllers 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -bluePencil 1\\n -greasePencils 0\\n -shadows 0\\n -captureSequenceNumber -1\\n -width 600\\n -height 344\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName\"\n" - + "\t\t\t\t\t\"modelPanel -edit -l (localizedPanelLabel(\\\"Side View\\\")) -mbv $menusOkayInPanels $panelName;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera side` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 16384\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -controllers 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -bluePencil 1\\n -greasePencils 0\\n -shadows 0\\n -captureSequenceNumber -1\\n -width 600\\n -height 344\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName\"\n" - + "\t\t\t\t-ap false\n\t\t\t\t\t(localizedPanelLabel(\"Front View\")) \n\t\t\t\t\t\"modelPanel\"\n" - + "\t\t\t\t\t\"$panelName = `modelPanel -unParent -l (localizedPanelLabel(\\\"Front View\\\")) -mbv $menusOkayInPanels `;\\n$editorName = $panelName;\\nmodelEditor -e \\n -camera \\\"|top\\\" \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 16384\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -controllers 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -bluePencil 1\\n -greasePencils 0\\n -shadows 0\\n -captureSequenceNumber -1\\n -width 600\\n -height 344\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName\"\n" - + "\t\t\t\t\t\"modelPanel -edit -l (localizedPanelLabel(\\\"Front View\\\")) -mbv $menusOkayInPanels $panelName;\\n$editorName = $panelName;\\nmodelEditor -e \\n -camera \\\"|top\\\" \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 16384\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -controllers 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -bluePencil 1\\n -greasePencils 0\\n -shadows 0\\n -captureSequenceNumber -1\\n -width 600\\n -height 344\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName\"\n" + + " -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n" + + "\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Side View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Side View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"|side\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n" + + " -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n" + + " -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n" + + " -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Front View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Front View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"|front\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n" + + " -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n" + + " -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n" + + " -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Persp View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Persp View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"|persp\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n" + + " -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n" + + " -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n" + + " -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1112\n -height 732\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"outlinerPanel\" (localizedPanelLabel(\"ToggledOutliner\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\toutlinerPanel -edit -l (localizedPanelLabel(\"ToggledOutliner\")) -mbv $menusOkayInPanels $panelName;\n" + + "\t\t$editorName = $panelName;\n outlinerEditor -e \n -docTag \"isolOutln_fromSeln\" \n -showShapes 0\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 1\n -showReferenceMembers 1\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -organizeByClip 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showParentContainers 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n" + + " -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -isSet 0\n -isSetMember 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -selectCommand \"print(\\\"\\\")\" \n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 1\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n -renderFilterIndex 0\n" + + " -selectionOrder \"chronological\" \n -expandAttribute 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"outlinerPanel\" (localizedPanelLabel(\"Outliner\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\toutlinerPanel -edit -l (localizedPanelLabel(\"Outliner\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n outlinerEditor -e \n -showShapes 0\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -organizeByClip 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n" + + " -showParentContainers 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n" + + " -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"graphEditor\" (localizedPanelLabel(\"Graph Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Graph Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n" + + " -organizeByClip 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 1\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showParentContainers 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 0\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 1\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 1\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n" + + " -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 1\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"GraphEd\");\n animCurveEditor -e \n -displayValues 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -showPlayRangeShades \"on\" \n -lockPlayRangeShades \"off\" \n -smoothness \"fine\" \n -resultSamples 1.041667\n" + + " -resultScreenSamples 0\n -resultUpdate \"delayed\" \n -showUpstreamCurves 1\n -keyMinScale 1\n -stackedCurvesMin -1\n -stackedCurvesMax 1\n -stackedCurvesSpace 0.2\n -preSelectionHighlight 0\n -constrainDrag 0\n -valueLinesToggle 1\n -highlightAffectedCurves 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dopeSheetPanel\" (localizedPanelLabel(\"Dope Sheet\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Dope Sheet\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n" + + " -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -organizeByClip 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showParentContainers 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 0\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 1\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"0\" \n -showSetMembers 0\n" + + " -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"DopeSheetEd\");\n dopeSheetEditor -e \n -displayValues 0\n -snapTime \"integer\" \n" + + " -snapValue \"none\" \n -outliner \"dopeSheetPanel1OutlineEd\" \n -showSummary 1\n -showScene 0\n -hierarchyBelow 0\n -showTicks 1\n -selectionWindow 0 0 0 0 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"timeEditorPanel\" (localizedPanelLabel(\"Time Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Time Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"clipEditorPanel\" (localizedPanelLabel(\"Trax Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Trax Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = clipEditorNameFromPanel($panelName);\n" + + " clipEditor -e \n -displayValues 0\n -snapTime \"none\" \n -snapValue \"none\" \n -initialized 0\n -manageSequencer 0 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"sequenceEditorPanel\" (localizedPanelLabel(\"Camera Sequencer\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Camera Sequencer\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = sequenceEditorNameFromPanel($panelName);\n clipEditor -e \n -displayValues 0\n -snapTime \"none\" \n -snapValue \"none\" \n -initialized 0\n -manageSequencer 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"hyperGraphPanel\" (localizedPanelLabel(\"Hypergraph Hierarchy\")) `;\n" + + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Hypergraph Hierarchy\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"HyperGraphEd\");\n hyperGraph -e \n -graphLayoutStyle \"hierarchicalLayout\" \n -orientation \"horiz\" \n -mergeConnections 0\n -zoom 1\n -animateTransition 0\n -showRelationships 1\n -showShapes 0\n -showDeformers 0\n -showExpressions 0\n -showConstraints 0\n -showConnectionFromSelected 0\n -showConnectionToSelected 0\n -showConstraintLabels 0\n -showUnderworld 0\n -showInvisible 0\n -transitionFrames 1\n -opaqueContainers 0\n -freeform 0\n -imagePosition 0 0 \n -imageScale 1\n -imageEnabled 0\n -graphType \"DAG\" \n" + + " -heatMapDisplay 0\n -updateSelection 1\n -updateNodeAdded 1\n -useDrawOverrideColor 0\n -limitGraphTraversal -1\n -range 0 0 \n -iconSize \"smallIcons\" \n -showCachedConnections 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"hyperShadePanel\" (localizedPanelLabel(\"Hypershade\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Hypershade\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"visorPanel\" (localizedPanelLabel(\"Visor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Visor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n" + + "\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"nodeEditorPanel\" (localizedPanelLabel(\"Node Editor\")) `;\n\tif ($nodeEditorPanelVisible || $nodeEditorWorkspaceControlOpen) {\n\t\tif (\"\" == $panelName) {\n\t\t\tif ($useSceneConfig) {\n\t\t\t\t$panelName = `scriptedPanel -unParent -type \"nodeEditorPanel\" -l (localizedPanelLabel(\"Node Editor\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"NodeEditorEd\");\n nodeEditor -e \n -allAttributes 0\n -allNodes 0\n -autoSizeNodes 1\n -consistentNameSize 1\n -createNodeCommand \"nodeEdCreateNodeCommand\" \n -connectNodeOnCreation 0\n -connectOnDrop 0\n -copyConnectionsOnPaste 0\n -connectionStyle \"bezier\" \n -defaultPinnedState 0\n -additiveGraphingMode 0\n -settingsChangedCallback \"nodeEdSyncControls\" \n -traversalDepthLimit -1\n -keyPressCommand \"nodeEdKeyPressCommand\" \n" + + " -nodeTitleMode \"name\" \n -gridSnap 0\n -gridVisibility 1\n -crosshairOnEdgeDragging 0\n -popupMenuScript \"nodeEdBuildPanelMenus\" \n -showNamespace 1\n -showShapes 1\n -showSGShapes 0\n -showTransforms 1\n -useAssets 1\n -syncedSelection 1\n -extendToShapes 1\n -editorMode \"default\" \n -hasWatchpoint 0\n $editorName;\n\t\t\t}\n\t\t} else {\n\t\t\t$label = `panel -q -label $panelName`;\n\t\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Node Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"NodeEditorEd\");\n nodeEditor -e \n -allAttributes 0\n -allNodes 0\n -autoSizeNodes 1\n -consistentNameSize 1\n -createNodeCommand \"nodeEdCreateNodeCommand\" \n -connectNodeOnCreation 0\n -connectOnDrop 0\n" + + " -copyConnectionsOnPaste 0\n -connectionStyle \"bezier\" \n -defaultPinnedState 0\n -additiveGraphingMode 0\n -settingsChangedCallback \"nodeEdSyncControls\" \n -traversalDepthLimit -1\n -keyPressCommand \"nodeEdKeyPressCommand\" \n -nodeTitleMode \"name\" \n -gridSnap 0\n -gridVisibility 1\n -crosshairOnEdgeDragging 0\n -popupMenuScript \"nodeEdBuildPanelMenus\" \n -showNamespace 1\n -showShapes 1\n -showSGShapes 0\n -showTransforms 1\n -useAssets 1\n -syncedSelection 1\n -extendToShapes 1\n -editorMode \"default\" \n -hasWatchpoint 0\n $editorName;\n\t\t\tif (!$useSceneConfig) {\n\t\t\t\tpanel -e -l $label $panelName;\n\t\t\t}\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"createNodePanel\" (localizedPanelLabel(\"Create Node\")) `;\n" + + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Create Node\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"polyTexturePlacementPanel\" (localizedPanelLabel(\"UV Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"UV Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"renderWindowPanel\" (localizedPanelLabel(\"Render View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Render View\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"shapePanel\" (localizedPanelLabel(\"Shape Editor\")) `;\n" + + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tshapePanel -edit -l (localizedPanelLabel(\"Shape Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"posePanel\" (localizedPanelLabel(\"Pose Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tposePanel -edit -l (localizedPanelLabel(\"Pose Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dynRelEdPanel\" (localizedPanelLabel(\"Dynamic Relationships\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Dynamic Relationships\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"relationshipPanel\" (localizedPanelLabel(\"Relationship Editor\")) `;\n" + + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Relationship Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"referenceEditorPanel\" (localizedPanelLabel(\"Reference Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Reference Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"componentEditorPanel\" (localizedPanelLabel(\"Component Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Component Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dynPaintScriptedPanelType\" (localizedPanelLabel(\"Paint Effects\")) `;\n" + + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Paint Effects\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"scriptEditorPanel\" (localizedPanelLabel(\"Script Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Script Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"profilerPanel\" (localizedPanelLabel(\"Profiler Tool\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Profiler Tool\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"contentBrowserPanel\" (localizedPanelLabel(\"Content Browser\")) `;\n" + + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Content Browser\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\tif ($useSceneConfig) {\n string $configName = `getPanel -cwl (localizedPanelLabel(\"Current Layout\"))`;\n if (\"\" != $configName) {\n\t\t\tpanelConfiguration -edit -label (localizedPanelLabel(\"Current Layout\")) \n\t\t\t\t-userCreated false\n\t\t\t\t-defaultImage \"vacantCell.xP:/\"\n\t\t\t\t-image \"\"\n\t\t\t\t-sc false\n\t\t\t\t-configString \"global string $gMainPane; paneLayout -e -cn \\\"single\\\" -ps 1 100 100 $gMainPane;\"\n\t\t\t\t-removeAllPanels\n\t\t\t\t-ap false\n\t\t\t\t\t(localizedPanelLabel(\"Persp View\")) \n\t\t\t\t\t\"modelPanel\"\n" + + "\t\t\t\t\t\"$panelName = `modelPanel -unParent -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels `;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera persp` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 16384\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -controllers 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -greasePencils 1\\n -shadows 0\\n -captureSequenceNumber -1\\n -width 1112\\n -height 732\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName;\\nmodelEditor -e \\n -pluginObjects \\\"gpuCacheDisplayFilter\\\" 1 \\n $editorName\"\n" + + "\t\t\t\t\t\"modelPanel -edit -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels $panelName;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera persp` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 16384\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -controllers 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -greasePencils 1\\n -shadows 0\\n -captureSequenceNumber -1\\n -width 1112\\n -height 732\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName;\\nmodelEditor -e \\n -pluginObjects \\\"gpuCacheDisplayFilter\\\" 1 \\n $editorName\"\n" + "\t\t\t\t$configName;\n\n setNamedPanelLayout (localizedPanelLabel(\"Current Layout\"));\n }\n\n panelHistory -e -clear mainPanelHistory;\n sceneUIReplacement -clear;\n\t}\n\n\ngrid -spacing 5 -size 12 -divisions 5 -displayAxes yes -displayGridLines yes -displayDivisionLines yes -displayPerspectiveLabels no -displayOrthographicLabels no -displayAxesBold yes -perspectiveLabelPosition axis -orthographicLabelPosition edge;\nviewManip -drawCompass 0 -compassAngle 0 -frontParameters \"\" -homeParameters \"\" -selectionLockParameters \"\";\n}\n"); setAttr ".st" 3; createNode script -n "sceneConfigurationScriptNode"; @@ -265,7 +255,7 @@ createNode objectSet -n "workfileMain"; addAttr -ci true -sn "task" -ln "task" -dt "string"; addAttr -ci true -sn "instance_id" -ln "instance_id" -dt "string"; addAttr -ci true -sn "publish_attributes" -ln "publish_attributes" -dt "string"; - addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" + addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" -dt "string"; addAttr -ci true -sn "cbId" -ln "cbId" -dt "string"; setAttr ".ihi" 0; @@ -332,6 +322,8 @@ select -ne :defaultColorMgtGlobals; select -ne :hardwareRenderGlobals; setAttr ".ctrs" 256; setAttr ".btrs" 512; +select -ne :ikSystem; + setAttr -s 4 ".sol"; connectAttr "polySphere1.out" "pSphere1_GEOShape1.i"; connectAttr "polyDisc1.output" "pDiscShape1.i"; relationship "link" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message"; diff --git a/tests/integration/hosts/maya/test_publish_in_maya/test_publish_in_maya.py b/tests/integration/hosts/maya/test_publish_in_maya/test_publish_in_maya.py index 42a4f611fa4..3c9e87651af 100644 --- a/tests/integration/hosts/maya/test_publish_in_maya/test_publish_in_maya.py +++ b/tests/integration/hosts/maya/test_publish_in_maya/test_publish_in_maya.py @@ -134,18 +134,21 @@ def test_publish(self, dbcon, publish_finished, download_test_data): with open(logging_path, "r") as f: logging_output = f.read() + print(logging_output) + print(publish_finished) + # Check for pyblish errors. error_regex = r"pyblish \(ERROR\)((.|\n)*)" matches = re.findall(error_regex, logging_output) - assert not matches, logging_output + assert not matches, matches[0][0] matches = re.findall(error_regex, publish_finished) - assert not matches, publish_finished + assert not matches, matches[0][0] # Check for python errors. error_regex = r"// Error((.|\n)*)" matches = re.findall(error_regex, logging_output) - assert not matches, logging_output + assert not matches, matches[0][0] def test_db_asserts( self, From cc2b4aa396c4649a48539fc53d2106b085268c7b Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Fri, 28 Jul 2023 09:23:43 +0100 Subject: [PATCH 20/69] Tested successfully in Maya 2022 --- .../workfile/test_project_test_asset_test_task_v001.ma | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/integration/hosts/maya/test_publish_in_maya/input/workfile/test_project_test_asset_test_task_v001.ma b/tests/integration/hosts/maya/test_publish_in_maya/input/workfile/test_project_test_asset_test_task_v001.ma index 70d7f238476..6b5d1fada94 100644 --- a/tests/integration/hosts/maya/test_publish_in_maya/input/workfile/test_project_test_asset_test_task_v001.ma +++ b/tests/integration/hosts/maya/test_publish_in_maya/input/workfile/test_project_test_asset_test_task_v001.ma @@ -156,12 +156,12 @@ createNode objectSet -n "modelMain"; addAttr -ci true -sn "writeFaceSets" -ln "writeFaceSets" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "attr" -ln "attr" -dt "string"; addAttr -ci true -sn "attrPrefix" -ln "attrPrefix" -dt "string"; - addAttr -ci true -sn "includeParentHierarchy" -ln "includeParentHierarchy" -min + addAttr -ci true -sn "includeParentHierarchy" -ln "includeParentHierarchy" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "task" -ln "task" -dt "string"; addAttr -ci true -sn "instance_id" -ln "instance_id" -dt "string"; addAttr -ci true -sn "publish_attributes" -ln "publish_attributes" -dt "string"; - addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" + addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" -dt "string"; setAttr ".ihi" 0; setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:7364ea6776c9"; @@ -255,7 +255,7 @@ createNode objectSet -n "workfileMain"; addAttr -ci true -sn "task" -ln "task" -dt "string"; addAttr -ci true -sn "instance_id" -ln "instance_id" -dt "string"; addAttr -ci true -sn "publish_attributes" -ln "publish_attributes" -dt "string"; - addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" + addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" -dt "string"; addAttr -ci true -sn "cbId" -ln "cbId" -dt "string"; setAttr ".ihi" 0; From 3e6d7c2b2ef3f655ab96988cb8d3328371a9e823 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Fri, 28 Jul 2023 09:43:42 +0100 Subject: [PATCH 21/69] Add app_group flag --- openpype/cli.py | 5 + openpype/pype_commands.py | 4 + .../system_settings/applications.json | 105 +++++++++++++++++- tests/conftest.py | 10 ++ .../test_publish_in_maya.py | 27 ++--- tests/lib/testing_classes.py | 9 +- 6 files changed, 139 insertions(+), 21 deletions(-) diff --git a/openpype/cli.py b/openpype/cli.py index f3fde36902c..78dd458df8a 100644 --- a/openpype/cli.py +++ b/openpype/cli.py @@ -305,6 +305,9 @@ def run(script): help="Persist test DB and published files after test end", is_flag=True, default=False) +@click.option("--app_group", + help="Optional override of app_group.", + default=None) @click.option("-a", "--app_variant", help="Provide specific app variant for test, empty for latest", @@ -332,6 +335,7 @@ def runtests( data_folder, keep_app_open, persist, + app_group, app_variant, timeout, setup_only, @@ -347,6 +351,7 @@ def runtests( data_folder, keep_app_open, persist, + app_group, app_variant, timeout, setup_only, diff --git a/openpype/pype_commands.py b/openpype/pype_commands.py index 6ffab6418f6..a0fffc5828e 100644 --- a/openpype/pype_commands.py +++ b/openpype/pype_commands.py @@ -277,6 +277,7 @@ def run_tests( data_folder, keep_app_open, persist, + app_group, app_variant, timeout, setup_only, @@ -331,6 +332,9 @@ def run_tests( if persist: args.extend(["--persist"]) + if app_group: + args.extend(["--app_group", app_group]) + if app_variant: args.extend(["--app_variant", app_variant]) diff --git a/openpype/settings/defaults/system_settings/applications.json b/openpype/settings/defaults/system_settings/applications.json index 592a22ef84c..e2141e86813 100644 --- a/openpype/settings/defaults/system_settings/applications.json +++ b/openpype/settings/defaults/system_settings/applications.json @@ -1,5 +1,5 @@ { - "maya": { + "mayapy": { "enabled": true, "label": "Maya", "icon": "{}/app_icons/maya.png", @@ -16,11 +16,11 @@ "use_python_2": false, "executables": { "windows": [ - "C:\\Program Files\\Autodesk\\Maya2023\\bin\\maya.exe" + "C:\\Program Files\\Autodesk\\Maya2023\\bin\\mayapy.exe" ], "darwin": [], "linux": [ - "/usr/autodesk/maya2023/bin/maya" + "/usr/autodesk/maya2023/bin/mayapy" ] }, "arguments": { @@ -32,11 +32,106 @@ "MAYA_VERSION": "2023" } }, - "py2023": { + "2022": { "use_python_2": false, "executables": { "windows": [ - "C:\\Program Files\\Autodesk\\Maya2023\\bin\\mayapy.exe" + "C:\\Program Files\\Autodesk\\Maya2022\\bin\\mayapy.exe" + ], + "darwin": [], + "linux": [ + "/usr/autodesk/maya2022/bin/mayapy" + ] + }, + "arguments": { + "windows": [], + "darwin": [], + "linux": [] + }, + "environment": { + "MAYA_VERSION": "2022" + } + }, + "2020": { + "use_python_2": true, + "executables": { + "windows": [ + "C:\\Program Files\\Autodesk\\Maya2020\\bin\\mayapy.exe" + ], + "darwin": [], + "linux": [ + "/usr/autodesk/maya2020/bin/mayapy" + ] + }, + "arguments": { + "windows": [], + "darwin": [], + "linux": [] + }, + "environment": { + "MAYA_VERSION": "2020" + } + }, + "2019": { + "use_python_2": true, + "executables": { + "windows": [ + "C:\\Program Files\\Autodesk\\Maya2019\\bin\\mayapy.exe" + ], + "darwin": [], + "linux": [ + "/usr/autodesk/maya2019/bin/mayapy" + ] + }, + "arguments": { + "windows": [], + "darwin": [], + "linux": [] + }, + "environment": { + "MAYA_VERSION": "2019" + } + }, + "2018": { + "use_python_2": true, + "executables": { + "windows": [ + "C:\\Program Files\\Autodesk\\Maya2018\\bin\\mayapy.exe" + ], + "darwin": [], + "linux": [ + "/usr/autodesk/maya2018/bin/mayapy" + ] + }, + "arguments": { + "windows": [], + "darwin": [], + "linux": [] + }, + "environment": { + "MAYA_VERSION": "2018" + } + } + } + }, + "maya": { + "enabled": true, + "label": "Maya", + "icon": "{}/app_icons/maya.png", + "host_name": "maya", + "environment": { + "MAYA_DISABLE_CLIC_IPM": "Yes", + "MAYA_DISABLE_CIP": "Yes", + "MAYA_DISABLE_CER": "Yes", + "PYMEL_SKIP_MEL_INIT": "Yes", + "LC_ALL": "C" + }, + "variants": { + "2023": { + "use_python_2": false, + "executables": { + "windows": [ + "C:\\Program Files\\Autodesk\\Maya2023\\bin\\maya.exe" ], "darwin": [], "linux": [ diff --git a/tests/conftest.py b/tests/conftest.py index 7533c8c395f..e836e56da5d 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -24,6 +24,11 @@ def pytest_addoption(parser): help="Keep test_db, test_openpype, outputted test files" ) + parser.addoption( + "--app_group", action="store", default=None, + help="Optional override of app_group." + ) + parser.addoption( "--app_variant", action="store", default=None, help="Keep empty to locate latest installed variant or explicit" @@ -60,6 +65,11 @@ def persist(request): return request.config.getoption("--persist") +@pytest.fixture(scope="module") +def app_group(request): + return request.config.getoption("--app_group") + + @pytest.fixture(scope="module") def app_variant(request): return request.config.getoption("--app_variant") diff --git a/tests/integration/hosts/maya/test_publish_in_maya/test_publish_in_maya.py b/tests/integration/hosts/maya/test_publish_in_maya/test_publish_in_maya.py index 3c9e87651af..3502c2533ab 100644 --- a/tests/integration/hosts/maya/test_publish_in_maya/test_publish_in_maya.py +++ b/tests/integration/hosts/maya/test_publish_in_maya/test_publish_in_maya.py @@ -33,11 +33,12 @@ class TestPublishInMaya(MayaLocalPublishTestClass): """ PERSIST = False - APP_GROUP = "maya" + # By default run through mayapy. For interactive mode, change to "maya" or + # input `--app_group maya` in cli. + APP_GROUP = "mayapy" - # By default run through mayapy. For interactive mode, change to 2023 or - # input `--app_variant 2023` in cli. - APP_VARIANT = "py2023" + # By default running latest version of Maya. + APP_VARIANT = "" TIMEOUT = 120 # publish timeout @@ -48,11 +49,11 @@ class TestPublishInMaya(MayaLocalPublishTestClass): os.path.dirname(__file__), "input", "env_vars", "env_var.json" ) - def running_in_mayapy(self, app_variant): - app_variant = app_variant or self.APP_VARIANT + def running_in_mayapy(self, app_group): + app_group = app_group or self.APP_GROUP # Running in mayapy. - if app_variant.startswith("py"): + if app_group == "mayapy": return True # Running in maya. @@ -64,17 +65,17 @@ def get_usersetup_path(self): ) @pytest.fixture(scope="module") - def app_args(self, app_variant): + def app_args(self, app_group): args = [] - if self.running_in_mayapy(app_variant): + if self.running_in_mayapy(app_group): args = ["-I", self.get_usersetup_path()] yield args @pytest.fixture(scope="module") - def start_last_workfile(self, app_variant): + def start_last_workfile(self, app_group): """Returns url of workfile""" - return not self.running_in_mayapy(app_variant) + return not self.running_in_mayapy(app_group) @pytest.fixture(scope="module") def last_workfile_path(self, download_test_data, output_folder): @@ -105,10 +106,10 @@ def last_workfile_path(self, download_test_data, output_folder): @pytest.fixture(scope="module") def startup_scripts( - self, monkeypatch_session, download_test_data, app_variant + self, monkeypatch_session, download_test_data, app_group ): """Points Maya to userSetup file from input data""" - if not self.running_in_mayapy(app_variant): + if not self.running_in_mayapy(app_group): # Not needed for running MayaPy since the testing userSetup.py will # be passed in directly to the executable. original_pythonpath = os.environ.get("PYTHONPATH") diff --git a/tests/lib/testing_classes.py b/tests/lib/testing_classes.py index 95c3d7c5b44..41ab89aece3 100644 --- a/tests/lib/testing_classes.py +++ b/tests/lib/testing_classes.py @@ -358,19 +358,22 @@ class PublishTest(ModuleUnitTest): SETUP_ONLY = False @pytest.fixture(scope="module") - def app_name(self, environment_setup, app_variant): + def app_name(self, environment_setup, app_variant, app_group): """Returns calculated value for ApplicationManager. Eg.(nuke/12-2)""" from openpype.lib import ApplicationManager app_variant = app_variant or self.APP_VARIANT + app_group = app_group or self.APP_GROUP application_manager = ApplicationManager() if not app_variant: variant = ( application_manager.find_latest_available_variant_for_group( - self.APP_GROUP)) + app_group + ) + ) app_variant = variant.name - yield "{}/{}".format(self.APP_GROUP, app_variant) + yield "{}/{}".format(app_group, app_variant) @pytest.fixture(scope="module") def app_args(self, download_test_data): From 8e80c142bbfe8ac179dfde6dbf9b88b010cad9b2 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Fri, 28 Jul 2023 16:56:50 +0100 Subject: [PATCH 22/69] Support wildcard "*" app_variant --- openpype/lib/applications.py | 13 +++++++++++++ tests/conftest.py | 13 +++++++++++++ tests/lib/testing_classes.py | 11 +++++++++++ 3 files changed, 37 insertions(+) diff --git a/openpype/lib/applications.py b/openpype/lib/applications.py index 620f813dbc0..e56e599f66a 100644 --- a/openpype/lib/applications.py +++ b/openpype/lib/applications.py @@ -482,6 +482,19 @@ def find_latest_available_variant_for_group(self, group_name): break return output + def find_all_available_variants_for_group(self, group_name): + group = self.app_groups.get(group_name) + if group is None or not group.enabled: + return None + + result = [] + for _, variant in reversed(sorted(group.variants.items())): + executable = variant.find_executable() + if executable: + result.append(variant) + + return result + def launch(self, app_name, **data): """Launch procedure. diff --git a/tests/conftest.py b/tests/conftest.py index e836e56da5d..4c416edacc5 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -95,3 +95,16 @@ def pytest_runtest_makereport(item, call): # be "setup", "call", "teardown" setattr(item, "rep_" + rep.when, rep) + + +def pytest_generate_tests(metafunc): + if "app_variant" not in metafunc.fixturenames: + return + + if metafunc.config.getoption("app_variant") != "*": + return + + app_variants = metafunc.cls.app_variants( + metafunc.cls, metafunc.config.getoption("app_group") + ) + metafunc.parametrize("app_variant", app_variants, scope="module") diff --git a/tests/lib/testing_classes.py b/tests/lib/testing_classes.py index 41ab89aece3..fe2fd78823c 100644 --- a/tests/lib/testing_classes.py +++ b/tests/lib/testing_classes.py @@ -357,6 +357,17 @@ class PublishTest(ModuleUnitTest): SETUP_ONLY = False + def app_variants(self, app_group): + from openpype.lib import ApplicationManager + app_group = app_group or self.APP_GROUP + + application_manager = ApplicationManager() + variants = application_manager.find_all_available_variants_for_group( + app_group + ) + + return [x.name for x in variants] + @pytest.fixture(scope="module") def app_name(self, environment_setup, app_variant, app_group): """Returns calculated value for ApplicationManager. Eg.(nuke/12-2)""" From fd0774dc541a4ffe9eb88aa3c678596ef9547916 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Fri, 28 Jul 2023 18:02:23 +0100 Subject: [PATCH 23/69] Unique databases and output folder per variant --- tests/conftest.py | 19 ++-- tests/integration/hosts/maya/lib.py | 5 - .../test_publish_in_maya.py | 25 +++-- tests/lib/database_handler.py | 25 +++-- tests/lib/testing_classes.py | 91 +++++++++++++------ 5 files changed, 107 insertions(+), 58 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index 4c416edacc5..3ba5c53acb1 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -72,6 +72,8 @@ def app_group(request): @pytest.fixture(scope="module") def app_variant(request): + if request.config.getoption("--app_variant") is None: + return "" return request.config.getoption("--app_variant") @@ -98,13 +100,10 @@ def pytest_runtest_makereport(item, call): def pytest_generate_tests(metafunc): - if "app_variant" not in metafunc.fixturenames: - return - - if metafunc.config.getoption("app_variant") != "*": - return - - app_variants = metafunc.cls.app_variants( - metafunc.cls, metafunc.config.getoption("app_group") - ) - metafunc.parametrize("app_variant", app_variants, scope="module") + if "app_variant" in metafunc.fixturenames: + app_variants = metafunc.cls.app_variants( + metafunc.cls, + metafunc.config.getoption("app_group"), + metafunc.config.getoption("app_variant") + ) + metafunc.parametrize("app_variant", app_variants, scope="module") diff --git a/tests/integration/hosts/maya/lib.py b/tests/integration/hosts/maya/lib.py index 71df5c6b7d0..994af173edd 100644 --- a/tests/integration/hosts/maya/lib.py +++ b/tests/integration/hosts/maya/lib.py @@ -1,5 +1,3 @@ -import os - from tests.lib.testing_classes import ( HostFixtures, PublishTest, @@ -7,9 +5,6 @@ ) -LOG_PATH = os.path.join("output.log") - - class MayaLocalPublishTestClass(HostFixtures, PublishTest): """Testing class for local publishes.""" diff --git a/tests/integration/hosts/maya/test_publish_in_maya/test_publish_in_maya.py b/tests/integration/hosts/maya/test_publish_in_maya/test_publish_in_maya.py index 3502c2533ab..d78d62a5818 100644 --- a/tests/integration/hosts/maya/test_publish_in_maya/test_publish_in_maya.py +++ b/tests/integration/hosts/maya/test_publish_in_maya/test_publish_in_maya.py @@ -5,9 +5,7 @@ import pytest from tests.lib.assert_classes import DBAssert -from tests.integration.hosts.maya.lib import ( - MayaLocalPublishTestClass, LOG_PATH -) +from tests.integration.hosts.maya.lib import MayaLocalPublishTestClass class TestPublishInMaya(MayaLocalPublishTestClass): @@ -104,9 +102,14 @@ def last_workfile_path(self, download_test_data, output_folder): yield dest_path + def get_log_path(self, dirpath, app_variant): + return os.path.join( + dirpath, "output_{}.log".format(app_variant) + ) + @pytest.fixture(scope="module") def startup_scripts( - self, monkeypatch_session, download_test_data, app_group + self, monkeypatch_session, download_test_data, app_group, app_variant ): """Points Maya to userSetup file from input data""" if not self.running_in_mayapy(app_group): @@ -123,15 +126,23 @@ def startup_scripts( ) monkeypatch_session.setenv( - "MAYA_CMD_FILE_OUTPUT", os.path.join(download_test_data, LOG_PATH) + "MAYA_CMD_FILE_OUTPUT", + self.get_log_path(download_test_data, app_variant) ) @pytest.fixture(scope="module") def skip_compare_folders(self): pass - def test_publish(self, dbcon, publish_finished, download_test_data): - logging_path = os.path.join(download_test_data, LOG_PATH) + def test_publish( + self, + dbcon, + publish_finished, + download_test_data, + output_folder, + app_variant + ): + logging_path = self.get_log_path(download_test_data, app_variant) with open(logging_path, "r") as f: logging_output = f.read() diff --git a/tests/lib/database_handler.py b/tests/lib/database_handler.py index fcde4e26c42..3f906dd23e7 100644 --- a/tests/lib/database_handler.py +++ b/tests/lib/database_handler.py @@ -96,8 +96,15 @@ def setup_from_sql_file(self, database_name, sql_url, print("mongoimport query:: {}".format(query)) subprocess.run(query) - def setup_from_dump(self, database_name, dump_dir, overwrite=False, - collection=None, database_name_out=None): + def setup_from_dump( + self, + database_name, + dump_dir, + database_suffix, + overwrite=False, + collection=None, + database_name_out=None + ): """ Restores 'database_name' from 'dump_dir'. @@ -141,12 +148,14 @@ def setup_from_dump(self, database_name, dump_dir, overwrite=False, self.uri, dump_dir, database_name=database_name, - database_name_out=database_name_out, + database_name_out=database_name_out + database_suffix, collection=collection ) ) else: - queries = self._restore_queries_json(self.uri, dir_path) + queries = self._restore_queries_json( + self.uri, dir_path, database_suffix + ) for query in queries: print("mongorestore query:: {}".format(query)) @@ -256,11 +265,7 @@ def _dump_query( return query - def _restore_queries_json( - self, - uri, - dump_dir - ): + def _restore_queries_json(self, uri, dump_dir, database_suffix): """Prepares query for mongorestore base on arguments""" queries = [] @@ -270,7 +275,7 @@ def _restore_queries_json( self._restore_query_json( uri, os.path.join(dump_dir, json_file), - database_name, + database_name + database_suffix, collection, True ) diff --git a/tests/lib/testing_classes.py b/tests/lib/testing_classes.py index fe2fd78823c..c6a23865284 100644 --- a/tests/lib/testing_classes.py +++ b/tests/lib/testing_classes.py @@ -23,8 +23,21 @@ ("1BTSIIULJTuDc8VvXseuiJV_fL6-Bu7FP", "test_maya_publish.zip", "") ] } -DATABASE_PRODUCTION_NAME = "avalon_tests" -DATABASE_SETTINGS_NAME = "openpype_tests" + + +def get_database_names(): + return { + "production": "avalon_tests", + "settings": "openpype_tests" + } + + +def get_database_sufficed(suffix): + result = {} + for key, value in get_database_names().items(): + result[key] = "{}_{}".format(value, suffix) + return result + #needs testing def download_test_data(data_folder, files): @@ -49,8 +62,8 @@ def download_test_data(data_folder, files): return data_folder #needs testing -def output_folder(data_folder): - path = os.path.join(data_folder, "output") +def output_folder(data_folder, app_variant): + path = os.path.join(data_folder, "output_" + app_variant) if os.path.exists(path): print("Purging {}".format(path)) shutil.rmtree(path) @@ -61,19 +74,23 @@ def get_backup_directory(data_folder): return os.path.join(data_folder, "input", "dumps") #needs testing -def database_setup(backup_directory, openpype_mongo): +def database_setup(backup_directory, openpype_mongo, suffix): database_handler = DataBaseHandler(openpype_mongo) + database_names = get_database_names() + database_handler.setup_from_dump( - DATABASE_PRODUCTION_NAME, + database_names["production"], backup_directory, + suffix, overwrite=True, - database_name_out=DATABASE_PRODUCTION_NAME + database_name_out=database_names["production"] ) database_handler.setup_from_dump( - DATABASE_SETTINGS_NAME, + database_names["settings"], backup_directory, + suffix, overwrite=True, - database_name_out=DATABASE_SETTINGS_NAME + database_name_out=database_names["settings"] ) return database_handler @@ -176,9 +193,9 @@ def download_test_data(self, data_folder, persist, request): shutil.rmtree(data_folder) @pytest.fixture(scope="module") - def output_folder(self, download_test_data): + def output_folder(self, download_test_data, app_variant): """Returns location of published data, cleans it first if exists.""" - path = output_folder(download_test_data) + path = output_folder(download_test_data, app_variant) yield path @pytest.fixture(scope="module") @@ -196,7 +213,8 @@ def environment_setup( monkeypatch_session, download_test_data, openpype_mongo, - input_environment_json + input_environment_json, + app_variant ): """Sets temporary env vars from json file.""" # Collect openpype mongo. @@ -212,12 +230,15 @@ def environment_setup( attributes[attribute] = value # Module attributes. - attributes["DATABASE_PRODUCTION_NAME"] = DATABASE_PRODUCTION_NAME - attributes["DATABASE_SETTINGS_NAME"] = DATABASE_SETTINGS_NAME + database_names = get_database_sufficed(app_variant) + attributes["DATABASE_PRODUCTION_NAME"] = database_names["production"] + attributes["DATABASE_SETTINGS_NAME"] = database_names["settings"] if not os.path.exists(input_environment_json): raise ValueError( - "Env variable file {} doesn't exist".format(input_environment_json) + "Env variable file {} doesn't exist".format( + input_environment_json + ) ) env_dict = {} @@ -261,7 +282,8 @@ def database_setup( self, database_dumps, openpype_mongo, - request + request, + app_variant ): """Restore prepared MongoDB dumps into selected DB.""" @@ -270,15 +292,17 @@ def database_setup( database_handler = database_setup( database_dumps, - self.OPENPYPE_MONGO + self.OPENPYPE_MONGO, + "_" + app_variant ) yield database_handler persist = self.PERSIST or self.is_test_failed(request) if not persist: - database_handler.teardown(DATABASE_PRODUCTION_NAME) - database_handler.teardown(DATABASE_SETTINGS_NAME) + database_names = get_database_sufficed(app_variant) + database_handler.teardown(database_names["production"]) + database_handler.teardown(database_names["settings"]) @pytest.fixture(scope="module") def dbcon(self, environment_setup, database_setup, output_folder): @@ -305,14 +329,15 @@ def dbcon(self, environment_setup, database_setup, output_folder): yield dbcon @pytest.fixture(scope="module") - def dbcon_openpype(self, environment_setup, database_setup): + def dbcon_openpype(self, environment_setup, database_setup, app_variant): """Provide test database connection for OP settings. Database prepared from dumps with 'database_setup' fixture. """ from openpype.lib import OpenPypeMongoConnection mongo_client = OpenPypeMongoConnection.get_mongo_client() - yield mongo_client[self.DATABASE_SETTINGS_NAME]["settings"] + database_names = get_database_sufficed(app_variant) + yield mongo_client[database_names["settings"]]["settings"] def is_test_failed(self, request): # if request.node doesn't have rep_call, something failed @@ -357,16 +382,30 @@ class PublishTest(ModuleUnitTest): SETUP_ONLY = False - def app_variants(self, app_group): + def app_variants(self, app_group, app_variant): + app_variants = [] + from openpype.lib import ApplicationManager app_group = app_group or self.APP_GROUP application_manager = ApplicationManager() - variants = application_manager.find_all_available_variants_for_group( - app_group - ) - return [x.name for x in variants] + if app_variant == "*": + variants = application_manager.find_all_available_variants_for_group( + app_group + ) + + app_variants = [x.name for x in variants] + + if app_variant is None or not app_variant: + variant = ( + application_manager.find_latest_available_variant_for_group( + app_group + ) + ) + app_variants.append(variant.name) + + return app_variants @pytest.fixture(scope="module") def app_name(self, environment_setup, app_variant, app_group): From 48a34baf51b63605016b33ded84a60aade467efe Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Sat, 29 Jul 2023 08:14:19 +0100 Subject: [PATCH 24/69] Support explicit app_variant --- tests/lib/testing_classes.py | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/tests/lib/testing_classes.py b/tests/lib/testing_classes.py index c6a23865284..6a70713606b 100644 --- a/tests/lib/testing_classes.py +++ b/tests/lib/testing_classes.py @@ -391,20 +391,18 @@ def app_variants(self, app_group, app_variant): application_manager = ApplicationManager() if app_variant == "*": - variants = application_manager.find_all_available_variants_for_group( - app_group - ) - + func = application_manager.find_all_available_variants_for_group + variants = func(app_group) app_variants = [x.name for x in variants] if app_variant is None or not app_variant: - variant = ( - application_manager.find_latest_available_variant_for_group( - app_group - ) - ) + func = application_manager.find_latest_available_variant_for_group + variant = func(app_group) app_variants.append(variant.name) + if app_variant: + app_variants.append(app_variant) + return app_variants @pytest.fixture(scope="module") From fdb0a4b7f1f76a881b84dc8a958141df29b357f1 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Sat, 29 Jul 2023 09:27:28 +0100 Subject: [PATCH 25/69] Setup only uses test classes properly. --- openpype/pype_commands.py | 7 ++- tests/conftest.py | 30 +++++++++++ .../maya/test_deadline_publish_in_maya.py | 7 ++- .../test_publish_in_maya.py | 4 ++ tests/lib/testing_classes.py | 50 +++++++------------ 5 files changed, 61 insertions(+), 37 deletions(-) diff --git a/openpype/pype_commands.py b/openpype/pype_commands.py index a0fffc5828e..168da104281 100644 --- a/openpype/pype_commands.py +++ b/openpype/pype_commands.py @@ -327,10 +327,10 @@ def run_tests( args.extend(["--data_folder", data_folder]) if keep_app_open: - args.extend(["--keep_app_open"]) + args.append("--keep_app_open") if persist: - args.extend(["--persist"]) + args.append("--persist") if app_group: args.extend(["--app_group", app_group]) @@ -342,12 +342,15 @@ def run_tests( args.extend(["--timeout", timeout]) if setup_only: + """ assert openpype_mongo, "No openpype_mongo provided" from tests.lib.testing_classes import setup setup(class_names, data_folder, openpype_mongo) print(end_time_msg.format(time.time() - start_time)) return + """ + args.append("--setup_only") if database_urls: assert data_folder, "No data_folder provided." diff --git a/tests/conftest.py b/tests/conftest.py index 3ba5c53acb1..4c731a6b324 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -39,6 +39,11 @@ def pytest_addoption(parser): help="Overwrite default timeout" ) + parser.addoption( + "--setup_only", action="store_true", default=None, + help="Runs setup only and ignores tests." + ) + parser.addoption( "--dump_database", action="store_true", default=None, help="Dump database to data folder." @@ -82,6 +87,11 @@ def timeout(request): return request.config.getoption("--timeout") +@pytest.fixture(scope="module") +def setup_only(request): + return request.config.getoption("--setup_only") + + @pytest.fixture(scope="module") def dump_database(request): return request.config.getoption("--dump_database") @@ -100,6 +110,7 @@ def pytest_runtest_makereport(item, call): def pytest_generate_tests(metafunc): + # Generate tests from app variants. if "app_variant" in metafunc.fixturenames: app_variants = metafunc.cls.app_variants( metafunc.cls, @@ -107,3 +118,22 @@ def pytest_generate_tests(metafunc): metafunc.config.getoption("app_variant") ) metafunc.parametrize("app_variant", app_variants, scope="module") + + if metafunc.config.getoption("setup_only"): + app_variants = metafunc.cls.app_variants( + metafunc.cls, + metafunc.config.getoption("app_group"), + metafunc.config.getoption("app_variant") + ) + openpype_mongo = ( + metafunc.config.getoption("openpype_mongo") or + metafunc.cls.OPENPYPE_MONGO + ) + for app_variant in app_variants: + metafunc.cls.setup_only( + metafunc.cls, + metafunc.config.getoption("data_folder"), + openpype_mongo, + app_variant + ) + metafunc.parametrize("conf", pytest.skip("Setup only.")) diff --git a/tests/integration/hosts/maya/test_deadline_publish_in_maya.py b/tests/integration/hosts/maya/test_deadline_publish_in_maya.py index ea543eaee4a..c4ce232ce3f 100644 --- a/tests/integration/hosts/maya/test_deadline_publish_in_maya.py +++ b/tests/integration/hosts/maya/test_deadline_publish_in_maya.py @@ -24,8 +24,11 @@ class TestDeadlinePublishInMaya(MayaDeadlinePublishTestClass): PERSIST = True FILES = [ - ("1dDY7CbdFXfRksGVoiuwjhnPoTRCCf5ea", - "test_maya_deadline_publish.zip", "") + ( + "1dDY7CbdFXfRksGVoiuwjhnPoTRCCf5ea", + "test_maya_deadline_publish.zip", + "" + ) ] APP_GROUP = "maya" diff --git a/tests/integration/hosts/maya/test_publish_in_maya/test_publish_in_maya.py b/tests/integration/hosts/maya/test_publish_in_maya/test_publish_in_maya.py index d78d62a5818..af4e2e420c3 100644 --- a/tests/integration/hosts/maya/test_publish_in_maya/test_publish_in_maya.py +++ b/tests/integration/hosts/maya/test_publish_in_maya/test_publish_in_maya.py @@ -47,6 +47,10 @@ class TestPublishInMaya(MayaLocalPublishTestClass): os.path.dirname(__file__), "input", "env_vars", "env_var.json" ) + FILES = [ + ("1BTSIIULJTuDc8VvXseuiJV_fL6-Bu7FP", "test_maya_publish.zip", "") + ] + def running_in_mayapy(self, app_group): app_group = app_group or self.APP_GROUP diff --git a/tests/lib/testing_classes.py b/tests/lib/testing_classes.py index 6a70713606b..d8703ce6ad2 100644 --- a/tests/lib/testing_classes.py +++ b/tests/lib/testing_classes.py @@ -18,13 +18,6 @@ from openpype.settings import get_project_settings -FILES = { - "TestPublishInMaya": [ - ("1BTSIIULJTuDc8VvXseuiJV_fL6-Bu7FP", "test_maya_publish.zip", "") - ] -} - - def get_database_names(): return { "production": "avalon_tests", @@ -81,14 +74,14 @@ def database_setup(backup_directory, openpype_mongo, suffix): database_handler.setup_from_dump( database_names["production"], backup_directory, - suffix, + "_" + suffix, overwrite=True, database_name_out=database_names["production"] ) database_handler.setup_from_dump( database_names["settings"], backup_directory, - suffix, + "_" + suffix, overwrite=True, database_name_out=database_names["settings"] ) @@ -111,26 +104,6 @@ def dump_database(database_url, data_folder, openpype_mongo,): json=True ) -#needs testing -def setup(class_names, data_folder, openpype_mongo): - # Collect files to setup. - files = {} - for name in class_names: - files[name] = FILES[name] - - if not class_names: - files = FILES - - data_folders = [] - for class_name, class_files in files.items(): - data_folder = download_test_data(data_folder, class_files) - data_folders.append(data_folder) - output_folder(data_folder) - database_setup(get_backup_directory(data_folder), openpype_mongo) - - # Feedback to user about data folders. - print("Setup in folders:\n" + "\n".join(data_folders)) - class BaseTest: """Empty base test class""" @@ -182,7 +155,7 @@ def project_settings(self): @pytest.fixture(scope="module") def download_test_data(self, data_folder, persist, request): data_folder = download_test_data( - data_folder or self.DATA_FOLDER, FILES[self.__class__.__name__] + data_folder or self.DATA_FOLDER, self.FILES ) yield data_folder @@ -291,9 +264,7 @@ def database_setup( self.OPENPYPE_MONGO = openpype_mongo database_handler = database_setup( - database_dumps, - self.OPENPYPE_MONGO, - "_" + app_variant + database_dumps, self.OPENPYPE_MONGO, app_variant ) yield database_handler @@ -405,6 +376,16 @@ def app_variants(self, app_group, app_variant): return app_variants + #refactor to use same code for fixtures as here. + def setup_only(self, data_folder, openpype_mongo, app_variant): + data_folder = download_test_data(data_folder, self.FILES) + output_folder(data_folder, app_variant) + database_setup( + self.INPUT_DUMPS or get_backup_directory(data_folder), + openpype_mongo, + app_variant + ) + @pytest.fixture(scope="module") def app_name(self, environment_setup, app_variant, app_group): """Returns calculated value for ApplicationManager. Eg.(nuke/12-2)""" @@ -579,6 +560,9 @@ def _filter_files(self, source_files, skip_compare_folders): return filtered + def setup_only(self): + print("setup only") + class DeadlinePublishTest(PublishTest): @pytest.fixture(scope="module") From fb069e6345ffb71dc704281361408e28df308ce9 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Sat, 29 Jul 2023 09:58:11 +0100 Subject: [PATCH 26/69] Run setup_only and testing through same code. --- tests/conftest.py | 1 + .../test_publish_in_maya.py | 17 +- tests/lib/testing_classes.py | 150 ++++++++---------- 3 files changed, 74 insertions(+), 94 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index 4c731a6b324..460371f15dd 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -119,6 +119,7 @@ def pytest_generate_tests(metafunc): ) metafunc.parametrize("app_variant", app_variants, scope="module") + # Run setup_only class method and skip testing. if metafunc.config.getoption("setup_only"): app_variants = metafunc.cls.app_variants( metafunc.cls, diff --git a/tests/integration/hosts/maya/test_publish_in_maya/test_publish_in_maya.py b/tests/integration/hosts/maya/test_publish_in_maya/test_publish_in_maya.py index af4e2e420c3..7adc1d41ca3 100644 --- a/tests/integration/hosts/maya/test_publish_in_maya/test_publish_in_maya.py +++ b/tests/integration/hosts/maya/test_publish_in_maya/test_publish_in_maya.py @@ -80,11 +80,13 @@ def start_last_workfile(self, app_group): return not self.running_in_mayapy(app_group) @pytest.fixture(scope="module") - def last_workfile_path(self, download_test_data, output_folder): + def last_workfile_path(self, setup_fixture): """Get last_workfile_path from source data. Maya expects workfile in proper folder, so copy is done first. """ + _, output_folder, _ = setup_fixture + src_path = os.path.join( os.path.dirname(__file__), "input", @@ -113,8 +115,10 @@ def get_log_path(self, dirpath, app_variant): @pytest.fixture(scope="module") def startup_scripts( - self, monkeypatch_session, download_test_data, app_group, app_variant + self, monkeypatch_session, setup_fixture, app_group, app_variant ): + data_folder, _, _ = setup_fixture + """Points Maya to userSetup file from input data""" if not self.running_in_mayapy(app_group): # Not needed for running MayaPy since the testing userSetup.py will @@ -131,7 +135,7 @@ def startup_scripts( monkeypatch_session.setenv( "MAYA_CMD_FILE_OUTPUT", - self.get_log_path(download_test_data, app_variant) + self.get_log_path(data_folder, app_variant) ) @pytest.fixture(scope="module") @@ -142,11 +146,12 @@ def test_publish( self, dbcon, publish_finished, - download_test_data, - output_folder, + setup_fixture, app_variant ): - logging_path = self.get_log_path(download_test_data, app_variant) + data_folder, _, _ = setup_fixture + + logging_path = self.get_log_path(data_folder, app_variant) with open(logging_path, "r") as f: logging_output = f.read() diff --git a/tests/lib/testing_classes.py b/tests/lib/testing_classes.py index d8703ce6ad2..5efe8a06775 100644 --- a/tests/lib/testing_classes.py +++ b/tests/lib/testing_classes.py @@ -33,7 +33,7 @@ def get_database_sufficed(suffix): #needs testing -def download_test_data(data_folder, files): +def setup_data_folder(data_folder, files): if data_folder: print("Using existing folder {}".format(data_folder)) return data_folder @@ -55,7 +55,7 @@ def download_test_data(data_folder, files): return data_folder #needs testing -def output_folder(data_folder, app_variant): +def setup_output_folder(data_folder, app_variant): path = os.path.join(data_folder, "output_" + app_variant) if os.path.exists(path): print("Purging {}".format(path)) @@ -67,7 +67,7 @@ def get_backup_directory(data_folder): return os.path.join(data_folder, "input", "dumps") #needs testing -def database_setup(backup_directory, openpype_mongo, suffix): +def setup_database(backup_directory, openpype_mongo, suffix): database_handler = DataBaseHandler(openpype_mongo) database_names = get_database_names() @@ -118,7 +118,7 @@ class ModuleUnitTest(BaseTest): Implemented fixtures: monkeypatch_session - fixture for env vars with session scope project_settings - fixture for project settings with session scope - download_test_data - tmp folder with extracted data from GDrive + setup_fixture - tmp folder with extracted data from GDrive environment_setup - sets env vars from input file database_setup - prepares avalon AND openpype DBs for testing from binary dumps from input data @@ -138,6 +138,33 @@ class ModuleUnitTest(BaseTest): INPUT_DUMPS = None INPUT_ENVIRONMENT_JSON = None + #needs testing. + def setup_only(self, data_folder, openpype_mongo, app_variant): + data_folder = setup_data_folder(data_folder, self.FILES) + output_folder = setup_output_folder(data_folder, app_variant) + database_handler = setup_database( + self.INPUT_DUMPS or get_backup_directory(data_folder), + openpype_mongo, + app_variant + ) + + return data_folder, output_folder, database_handler + + @pytest.fixture(scope="module") + def setup_fixture( + self, data_folder, openpype_mongo, app_variant, persist, request + ): + data_folder, output_folder, database_handler = self.setup_only( + data_folder, openpype_mongo, app_variant + ) + + yield data_folder, output_folder, database_handler + + persist = (persist or self.PERSIST or self.is_test_failed(request)) + if not persist: + print("Removing {}".format(data_folder)) + shutil.rmtree(data_folder) + @pytest.fixture(scope='session') def monkeypatch_session(self): """Monkeypatch couldn't be used with module or session fixtures.""" @@ -153,30 +180,12 @@ def project_settings(self): ) @pytest.fixture(scope="module") - def download_test_data(self, data_folder, persist, request): - data_folder = download_test_data( - data_folder or self.DATA_FOLDER, self.FILES - ) - - yield data_folder - - persist = (persist or self.PERSIST or self.is_test_failed(request)) - if not persist: - print("Removing {}".format(data_folder)) - shutil.rmtree(data_folder) - - @pytest.fixture(scope="module") - def output_folder(self, download_test_data, app_variant): - """Returns location of published data, cleans it first if exists.""" - path = output_folder(download_test_data, app_variant) - yield path - - @pytest.fixture(scope="module") - def input_environment_json(self, download_test_data): + def input_environment_json(self, setup_fixture): + data_folder, _, _ = setup_fixture path = self.INPUT_ENVIRONMENT_JSON if path is None: path = os.path.join( - download_test_data, "input", "env_vars", "env_var.json" + data_folder, "input", "env_vars", "env_var.json" ) yield path @@ -184,12 +193,14 @@ def input_environment_json(self, download_test_data): def environment_setup( self, monkeypatch_session, - download_test_data, + setup_fixture, openpype_mongo, input_environment_json, app_variant ): """Sets temporary env vars from json file.""" + data_folder, _, _ = setup_fixture + # Collect openpype mongo. if openpype_mongo: self.OPENPYPE_MONGO = openpype_mongo @@ -240,47 +251,24 @@ def environment_setup( monkeypatch_session.setenv("OPENPYPE_REPOS_ROOT", openpype_root) # for remapping purposes (currently in Nuke) - monkeypatch_session.setenv("TEST_SOURCE_FOLDER", download_test_data) + monkeypatch_session.setenv("TEST_SOURCE_FOLDER", data_folder) @pytest.fixture(scope="module") - def database_dumps(self, download_test_data): + def database_dumps(self, setup_fixture): path = ( self.INPUT_DUMPS or - get_backup_directory(download_test_data) + get_backup_directory(setup_fixture) ) yield path @pytest.fixture(scope="module") - def database_setup( - self, - database_dumps, - openpype_mongo, - request, - app_variant - ): - """Restore prepared MongoDB dumps into selected DB.""" - - if openpype_mongo: - self.OPENPYPE_MONGO = openpype_mongo - - database_handler = database_setup( - database_dumps, self.OPENPYPE_MONGO, app_variant - ) - - yield database_handler - - persist = self.PERSIST or self.is_test_failed(request) - if not persist: - database_names = get_database_sufficed(app_variant) - database_handler.teardown(database_names["production"]) - database_handler.teardown(database_names["settings"]) - - @pytest.fixture(scope="module") - def dbcon(self, environment_setup, database_setup, output_folder): + def dbcon(self, environment_setup, setup_fixture): """Provide test database connection. Database prepared from dumps with 'database_setup' fixture. """ + _, output_folder, _ = setup_fixture + from openpype.pipeline import AvalonMongoDB dbcon = AvalonMongoDB() dbcon.Session["AVALON_PROJECT"] = self.PROJECT_NAME @@ -300,7 +288,7 @@ def dbcon(self, environment_setup, database_setup, output_folder): yield dbcon @pytest.fixture(scope="module") - def dbcon_openpype(self, environment_setup, database_setup, app_variant): + def dbcon_openpype(self, environment_setup, setup_fixture, app_variant): """Provide test database connection for OP settings. Database prepared from dumps with 'database_setup' fixture. @@ -376,16 +364,6 @@ def app_variants(self, app_group, app_variant): return app_variants - #refactor to use same code for fixtures as here. - def setup_only(self, data_folder, openpype_mongo, app_variant): - data_folder = download_test_data(data_folder, self.FILES) - output_folder(data_folder, app_variant) - database_setup( - self.INPUT_DUMPS or get_backup_directory(data_folder), - openpype_mongo, - app_variant - ) - @pytest.fixture(scope="module") def app_name(self, environment_setup, app_variant, app_group): """Returns calculated value for ApplicationManager. Eg.(nuke/12-2)""" @@ -405,16 +383,18 @@ def app_name(self, environment_setup, app_variant, app_group): yield "{}/{}".format(app_group, app_variant) @pytest.fixture(scope="module") - def app_args(self, download_test_data): + def app_args(self, setup_fixture): """Returns additional application arguments from a test file. Test zip file should contain file at: FOLDER_DIR/input/app_args/app_args.json containing a list of command line arguments (like '-x' etc.) """ + data_folder, _, _ = setup_fixture app_args = [] - args_url = os.path.join(download_test_data, "input", - "app_args", "app_args.json") + args_url = os.path.join( + data_folder, "input", "app_args", "app_args.json" + ) if not os.path.exists(args_url): print("App argument file {} doesn't exist".format(args_url)) else: @@ -439,13 +419,12 @@ def start_last_workfile(self): def launched_app( self, dbcon, - download_test_data, + setup_fixture, last_workfile_path, start_last_workfile, startup_scripts, app_args, app_name, - output_folder, keep_app_open ): """Launch host app""" @@ -486,7 +465,7 @@ def publish_finished( self, dbcon, launched_app, - download_test_data, + setup_fixture, timeout, keep_app_open ): @@ -514,23 +493,21 @@ def test_folder_structure_same( self, dbcon, publish_finished, - download_test_data, - output_folder, + setup_fixture, skip_compare_folders ): """Check if expected and published subfolders contain same files. Compares only presence, not size nor content! """ - published_dir_base = output_folder - expected_dir_base = os.path.join(download_test_data, - "expected") + data_folder, output_folder, _ = setup_fixture + expected_dir_base = os.path.join(data_folder, "expected") print("Comparing published:'{}' : expected:'{}'".format( - published_dir_base, expected_dir_base)) - published = set(f.replace(published_dir_base, '') for f in - glob.glob(published_dir_base + "\\**", recursive=True) - if f != published_dir_base and os.path.exists(f)) + output_folder, expected_dir_base)) + published = set(f.replace(output_folder, '') for f in + glob.glob(output_folder + "\\**", recursive=True) + if f != output_folder and os.path.exists(f)) expected = set(f.replace(expected_dir_base, '') for f in glob.glob(expected_dir_base + "\\**", recursive=True) if f != expected_dir_base and os.path.exists(f)) @@ -560,13 +537,10 @@ def _filter_files(self, source_files, skip_compare_folders): return filtered - def setup_only(self): - print("setup only") - class DeadlinePublishTest(PublishTest): @pytest.fixture(scope="module") - def publish_finished(self, dbcon, launched_app, download_test_data, + def publish_finished(self, dbcon, launched_app, setup_fixture, timeout): """Dummy fixture waiting for publish to finish""" import time @@ -579,7 +553,7 @@ def publish_finished(self, dbcon, launched_app, download_test_data, launched_app.terminate() raise ValueError("Timeout reached") - metadata_json = glob.glob(os.path.join(download_test_data, + metadata_json = glob.glob(os.path.join(setup_fixture, "output", "**/*_metadata.json"), recursive=True) @@ -630,12 +604,12 @@ def publish_finished(self, dbcon, launched_app, download_test_data, class HostFixtures(): """Host specific fixtures. Should be implemented once per host.""" @pytest.fixture(scope="module") - def last_workfile_path(self, download_test_data, output_folder): + def last_workfile_path(self, setup_fixture, output_folder): """Returns url of workfile""" raise NotImplementedError @pytest.fixture(scope="module") - def startup_scripts(self, monkeypatch_session, download_test_data): + def startup_scripts(self, monkeypatch_session, setup_fixture): """"Adds init scripts (like userSetup) to expected location""" raise NotImplementedError From 512a2a60043bf40721ea4b1f3b5cb2684007847c Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Sun, 30 Jul 2023 08:07:06 +0100 Subject: [PATCH 27/69] Code refactor --- openpype/pype_commands.py | 8 -- tests/conftest.py | 1 - tests/lib/testing_classes.py | 180 ++++++++++++++++++----------------- 3 files changed, 93 insertions(+), 96 deletions(-) diff --git a/openpype/pype_commands.py b/openpype/pype_commands.py index 168da104281..a1c811eba6c 100644 --- a/openpype/pype_commands.py +++ b/openpype/pype_commands.py @@ -342,14 +342,6 @@ def run_tests( args.extend(["--timeout", timeout]) if setup_only: - """ - assert openpype_mongo, "No openpype_mongo provided" - - from tests.lib.testing_classes import setup - setup(class_names, data_folder, openpype_mongo) - print(end_time_msg.format(time.time() - start_time)) - return - """ args.append("--setup_only") if database_urls: diff --git a/tests/conftest.py b/tests/conftest.py index 460371f15dd..8a12339997f 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -132,7 +132,6 @@ def pytest_generate_tests(metafunc): ) for app_variant in app_variants: metafunc.cls.setup_only( - metafunc.cls, metafunc.config.getoption("data_folder"), openpype_mongo, app_variant diff --git a/tests/lib/testing_classes.py b/tests/lib/testing_classes.py index 5efe8a06775..35c52c1304b 100644 --- a/tests/lib/testing_classes.py +++ b/tests/lib/testing_classes.py @@ -18,76 +18,9 @@ from openpype.settings import get_project_settings -def get_database_names(): - return { - "production": "avalon_tests", - "settings": "openpype_tests" - } - - -def get_database_sufficed(suffix): - result = {} - for key, value in get_database_names().items(): - result[key] = "{}_{}".format(value, suffix) - return result - - -#needs testing -def setup_data_folder(data_folder, files): - if data_folder: - print("Using existing folder {}".format(data_folder)) - return data_folder - - data_folder = tempfile.mkdtemp() - print("Temporary folder created:: {}".format(data_folder)) - for test_file in files: - file_id, file_name, md5 = test_file - - f_name, ext = os.path.splitext(file_name) - - RemoteFileHandler.download_file_from_google_drive( - file_id, str(data_folder), file_name - ) - - if ext.lstrip('.') in RemoteFileHandler.IMPLEMENTED_ZIP_FORMATS: - RemoteFileHandler.unzip(os.path.join(data_folder, file_name)) - - return data_folder - -#needs testing -def setup_output_folder(data_folder, app_variant): - path = os.path.join(data_folder, "output_" + app_variant) - if os.path.exists(path): - print("Purging {}".format(path)) - shutil.rmtree(path) - return path - - def get_backup_directory(data_folder): return os.path.join(data_folder, "input", "dumps") -#needs testing -def setup_database(backup_directory, openpype_mongo, suffix): - database_handler = DataBaseHandler(openpype_mongo) - database_names = get_database_names() - - database_handler.setup_from_dump( - database_names["production"], - backup_directory, - "_" + suffix, - overwrite=True, - database_name_out=database_names["production"] - ) - database_handler.setup_from_dump( - database_names["settings"], - backup_directory, - "_" + suffix, - overwrite=True, - database_name_out=database_names["settings"] - ) - - return database_handler - #needs testing def dump_databases(database_urls, data_folder, openpype_mongo,): for database_url in database_urls: @@ -138,14 +71,87 @@ class ModuleUnitTest(BaseTest): INPUT_DUMPS = None INPUT_ENVIRONMENT_JSON = None - #needs testing. - def setup_only(self, data_folder, openpype_mongo, app_variant): - data_folder = setup_data_folder(data_folder, self.FILES) - output_folder = setup_output_folder(data_folder, app_variant) - database_handler = setup_database( - self.INPUT_DUMPS or get_backup_directory(data_folder), - openpype_mongo, - app_variant + FILES = [] + + DATABASE_NAMES = { + "production": "avalon_tests", + "settings": "openpype_tests" + } + + #needs testing + @classmethod + def setup_database(cls, backup_directory, openpype_mongo, suffix): + database_handler = DataBaseHandler(openpype_mongo) + + database_handler.setup_from_dump( + cls.DATABASE_NAMES["production"], + backup_directory, + "_" + suffix, + overwrite=True, + database_name_out=cls.DATABASE_NAMES["production"] + ) + database_handler.setup_from_dump( + cls.DATABASE_NAMES["settings"], + backup_directory, + "_" + suffix, + overwrite=True, + database_name_out=cls.DATABASE_NAMES["settings"] + ) + + return database_handler + + #needs testing + @classmethod + def get_database_sufficed(cls, suffix): + result = {} + for key, value in cls.DATABASE_NAMES.items(): + result[key] = "{}_{}".format(value, suffix) + return result + + #needs testing + @classmethod + def setup_only(cls, data_folder, openpype_mongo, app_variant): + if data_folder: + print("Using existing folder {}".format(data_folder)) + else: + print("Temporary folder created: {}".format(data_folder)) + data_folder = tempfile.mkdtemp() + for test_file in cls.FILES: + file_id, file_name, md5 = test_file + + f_name, ext = os.path.splitext(file_name) + + RemoteFileHandler.download_file_from_google_drive( + file_id, str(data_folder), file_name + ) + + zip_formats = RemoteFileHandler.IMPLEMENTED_ZIP_FORMATS + if ext.lstrip(".") in zip_formats: + RemoteFileHandler.unzip( + os.path.join(data_folder, file_name) + ) + + output_folder = os.path.join(data_folder, "output_" + app_variant) + if os.path.exists(output_folder): + print("Purging {}".format(output_folder)) + shutil.rmtree(output_folder) + + database_handler = DataBaseHandler(openpype_mongo) + backup_directory = cls.INPUT_DUMPS or get_backup_directory(data_folder) + + database_handler.setup_from_dump( + cls.DATABASE_NAMES["production"], + backup_directory, + "_" + app_variant, + overwrite=True, + database_name_out=cls.DATABASE_NAMES["production"] + ) + database_handler.setup_from_dump( + cls.DATABASE_NAMES["settings"], + backup_directory, + "_" + app_variant, + overwrite=True, + database_name_out=cls.DATABASE_NAMES["settings"] ) return data_folder, output_folder, database_handler @@ -165,7 +171,7 @@ def setup_fixture( print("Removing {}".format(data_folder)) shutil.rmtree(data_folder) - @pytest.fixture(scope='session') + @pytest.fixture(scope="session") def monkeypatch_session(self): """Monkeypatch couldn't be used with module or session fixtures.""" from _pytest.monkeypatch import MonkeyPatch @@ -173,7 +179,7 @@ def monkeypatch_session(self): yield m m.undo() - @pytest.fixture(scope='module') + @pytest.fixture(scope="module") def project_settings(self): yield get_project_settings( self.PROJECT_NAME @@ -208,13 +214,13 @@ def environment_setup( # Get class attributes for environment. attributes = {} for attribute in ModuleUnitTest.__dict__.keys(): - if attribute[:2] != '__': + if attribute[:2] != "__": value = getattr(self, attribute) if not callable(value): attributes[attribute] = value # Module attributes. - database_names = get_database_sufficed(app_variant) + database_names = self.get_database_sufficed(app_variant) attributes["DATABASE_PRODUCTION_NAME"] = database_names["production"] attributes["DATABASE_SETTINGS_NAME"] = database_names["settings"] @@ -265,7 +271,7 @@ def database_dumps(self, setup_fixture): def dbcon(self, environment_setup, setup_fixture): """Provide test database connection. - Database prepared from dumps with 'database_setup' fixture. + Database prepared from dumps with "database_setup" fixture. """ _, output_folder, _ = setup_fixture @@ -291,11 +297,11 @@ def dbcon(self, environment_setup, setup_fixture): def dbcon_openpype(self, environment_setup, setup_fixture, app_variant): """Provide test database connection for OP settings. - Database prepared from dumps with 'database_setup' fixture. + Database prepared from dumps with "database_setup" fixture. """ from openpype.lib import OpenPypeMongoConnection mongo_client = OpenPypeMongoConnection.get_mongo_client() - database_names = get_database_sufficed(app_variant) + database_names = self.get_database_sufficed(app_variant) yield mongo_client[database_names["settings"]]["settings"] def is_test_failed(self, request): @@ -388,7 +394,7 @@ def app_args(self, setup_fixture): Test zip file should contain file at: FOLDER_DIR/input/app_args/app_args.json - containing a list of command line arguments (like '-x' etc.) + containing a list of command line arguments (like "-x" etc.) """ data_folder, _, _ = setup_fixture app_args = [] @@ -505,10 +511,10 @@ def test_folder_structure_same( print("Comparing published:'{}' : expected:'{}'".format( output_folder, expected_dir_base)) - published = set(f.replace(output_folder, '') for f in + published = set(f.replace(output_folder, "") for f in glob.glob(output_folder + "\\**", recursive=True) if f != output_folder and os.path.exists(f)) - expected = set(f.replace(expected_dir_base, '') for f in + expected = set(f.replace(expected_dir_base, "") for f in glob.glob(expected_dir_base + "\\**", recursive=True) if f != expected_dir_base and os.path.exists(f)) @@ -516,7 +522,7 @@ def test_folder_structure_same( skip_compare_folders) # filter out temp files also in expected - # could be polluted by accident by copying 'output' to zip file + # could be polluted by accident by copying "output" to zip file filtered_expected = self._filter_files(expected, skip_compare_folders) not_mtched = filtered_expected.symmetric_difference(filtered_published) @@ -593,7 +599,7 @@ def publish_finished(self, dbcon, launched_app, setup_fixture, if not response.json(): raise ValueError("Couldn't find {}".format(deadline_job_id)) - # '0001-...' returned until job is finished + # "0001-..." returned until job is finished valid_date_finished = response.json()[0]["DateComp"][:4] != "0001" # some clean exit test possible? From e8e3060308448310362f7dc9174e41f21b75a599 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Sun, 30 Jul 2023 16:17:48 +0100 Subject: [PATCH 28/69] Check app error --- tests/lib/testing_classes.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tests/lib/testing_classes.py b/tests/lib/testing_classes.py index 35c52c1304b..0e77d0bf5d5 100644 --- a/tests/lib/testing_classes.py +++ b/tests/lib/testing_classes.py @@ -457,7 +457,8 @@ def launched_app( "project_name": self.PROJECT_NAME, "asset_name": self.ASSET_NAME, "task_name": self.TASK_NAME, - "stdout": subprocess.PIPE + "stdout": subprocess.PIPE, + "stderr": subprocess.PIPE } if app_args: data["app_args"] = app_args @@ -491,8 +492,11 @@ def publish_finished( launched_app.terminate() raise ValueError("Timeout reached") - # some clean exit test possible? print("Publish finished") + + msg = "Launched app errored:\n{}" + assert launched_app.returncode == 0, msg.format(err.decode("utf-8")) + yield out.decode("utf-8") def test_folder_structure_same( From 04cb04b9ecade99cc0ef0157342b8cfe126789b3 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Sun, 30 Jul 2023 16:18:06 +0100 Subject: [PATCH 29/69] Dont support Maya 2020 for now --- .../hosts/maya/test_publish_in_maya/test_publish_in_maya.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/integration/hosts/maya/test_publish_in_maya/test_publish_in_maya.py b/tests/integration/hosts/maya/test_publish_in_maya/test_publish_in_maya.py index 7adc1d41ca3..f2af97b8c1c 100644 --- a/tests/integration/hosts/maya/test_publish_in_maya/test_publish_in_maya.py +++ b/tests/integration/hosts/maya/test_publish_in_maya/test_publish_in_maya.py @@ -67,7 +67,11 @@ def get_usersetup_path(self): ) @pytest.fixture(scope="module") - def app_args(self, app_group): + def app_args(self, app_group, app_variant): + # We should try and support 2020? + msg = "Maya 2020 and below is not supported for testing." + assert int(app_variant) > 2020, msg + args = [] if self.running_in_mayapy(app_group): args = ["-I", self.get_usersetup_path()] From 49364906bda92efd95160199c9cdcdee595f5179 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Mon, 31 Jul 2023 10:28:37 +0100 Subject: [PATCH 30/69] Dump databases without testing. --- openpype/cli.py | 11 ++-- openpype/pype_commands.py | 12 +--- tests/conftest.py | 27 ++++++-- tests/lib/database_handler.py | 14 +++-- tests/lib/testing_classes.py | 115 +++++++++++++--------------------- 5 files changed, 87 insertions(+), 92 deletions(-) diff --git a/openpype/cli.py b/openpype/cli.py index 78dd458df8a..9a3ea2a3046 100644 --- a/openpype/cli.py +++ b/openpype/cli.py @@ -324,9 +324,10 @@ def run(script): @click.option("--class_name", help="Specific test class to setup.", multiple=True) -@click.option("--dump_database", - help="Dump database url to data folder.", - multiple=True) +@click.option("--dump_databases", + help="Dump all databases to data folder.", + is_flag=True, + default=False) def runtests( folder, mark, @@ -340,7 +341,7 @@ def runtests( timeout, setup_only, class_name, - dump_database + dump_databases ): """Run all automatic tests after proper initialization via start.py""" PypeCommands().run_tests( @@ -356,7 +357,7 @@ def runtests( timeout, setup_only, class_name, - dump_database + dump_databases ) diff --git a/openpype/pype_commands.py b/openpype/pype_commands.py index a1c811eba6c..c6f01d55324 100644 --- a/openpype/pype_commands.py +++ b/openpype/pype_commands.py @@ -282,7 +282,7 @@ def run_tests( timeout, setup_only, class_names, - database_urls + dump_databases ): """ Runs tests from 'folder' @@ -344,14 +344,8 @@ def run_tests( if setup_only: args.append("--setup_only") - if database_urls: - assert data_folder, "No data_folder provided." - assert openpype_mongo, "No openpype_mongo provided" - - from tests.lib.testing_classes import dump_databases - dump_databases(database_urls, data_folder, openpype_mongo) - print(end_time_msg.format(time.time() - start_time)) - return + if dump_databases: + args.append("--dump_databases") print("run_tests args: {}".format(args)) import pytest diff --git a/tests/conftest.py b/tests/conftest.py index 8a12339997f..5b9f31da0c7 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -45,8 +45,8 @@ def pytest_addoption(parser): ) parser.addoption( - "--dump_database", action="store_true", default=None, - help="Dump database to data folder." + "--dump_databases", action="store_true", default=None, + help="Dump databases to data folder." ) @@ -93,8 +93,8 @@ def setup_only(request): @pytest.fixture(scope="module") -def dump_database(request): - return request.config.getoption("--dump_database") +def dump_databases(request): + return request.config.getoption("--dump_databases") @pytest.hookimpl(tryfirst=True, hookwrapper=True) @@ -137,3 +137,22 @@ def pytest_generate_tests(metafunc): app_variant ) metafunc.parametrize("conf", pytest.skip("Setup only.")) + + # Run dump_databases class method and skip testing. + if metafunc.config.getoption("dump_databases"): + app_variants = metafunc.cls.app_variants( + metafunc.cls, + metafunc.config.getoption("app_group"), + metafunc.config.getoption("app_variant") + ) + openpype_mongo = ( + metafunc.config.getoption("openpype_mongo") or + metafunc.cls.OPENPYPE_MONGO + ) + for app_variant in app_variants: + metafunc.cls.dump_databases( + metafunc.config.getoption("data_folder"), + openpype_mongo, + app_variant + ) + metafunc.parametrize("conf", pytest.skip("Setup only.")) diff --git a/tests/lib/database_handler.py b/tests/lib/database_handler.py index 3f906dd23e7..3aee38ec7d6 100644 --- a/tests/lib/database_handler.py +++ b/tests/lib/database_handler.py @@ -182,7 +182,8 @@ def backup_to_dump( dump_dir, overwrite=False, collection=None, - json=False + json=False, + filename=None ): """ Helper method for running mongodump for specific 'database_name' @@ -202,7 +203,8 @@ def backup_to_dump( self.uri, dump_dir, database_name=database_name, - collection=collection + collection=collection, + filename=filename ) else: query = self._dump_query( @@ -222,7 +224,8 @@ def _dump_query_json( uri, output_path, database_name=None, - collection=None + collection=None, + filename=None ): """Prepares dump query based on 'database_name' or 'collection'.""" database_part = coll_part = "" @@ -232,7 +235,10 @@ def _dump_query_json( if not database_name: raise ValueError("database_name must be present") coll_part = "--collection={}".format(collection) - filename = "{}.{}.json".format(database_name, collection) + + if not filename: + filename = "{}.{}.json".format(database_name, collection) + query = ( "mongoexport --uri=\"{}\" --jsonArray --pretty" " --out={} {} {}".format( diff --git a/tests/lib/testing_classes.py b/tests/lib/testing_classes.py index 0e77d0bf5d5..ab849f7dccb 100644 --- a/tests/lib/testing_classes.py +++ b/tests/lib/testing_classes.py @@ -18,26 +18,6 @@ from openpype.settings import get_project_settings -def get_backup_directory(data_folder): - return os.path.join(data_folder, "input", "dumps") - -#needs testing -def dump_databases(database_urls, data_folder, openpype_mongo,): - for database_url in database_urls: - dump_database(database_url, data_folder, openpype_mongo) - -#needs testing -def dump_database(database_url, data_folder, openpype_mongo,): - database_handler = DataBaseHandler(openpype_mongo) - database_name, database_collection = database_url.split(".") - database_handler.backup_to_dump( - database_name, - os.path.join(get_backup_directory(data_folder), database_name), - collection=database_collection, - json=True - ) - - class BaseTest: """Empty base test class""" @@ -74,39 +54,18 @@ class ModuleUnitTest(BaseTest): FILES = [] DATABASE_NAMES = { - "production": "avalon_tests", - "settings": "openpype_tests" + "production": { + "name": "avalon_tests", + "collections": [PROJECT_NAME] + }, + "settings": { + "name": "openpype_tests", + "collections": ["logs"] + } } - #needs testing - @classmethod - def setup_database(cls, backup_directory, openpype_mongo, suffix): - database_handler = DataBaseHandler(openpype_mongo) - - database_handler.setup_from_dump( - cls.DATABASE_NAMES["production"], - backup_directory, - "_" + suffix, - overwrite=True, - database_name_out=cls.DATABASE_NAMES["production"] - ) - database_handler.setup_from_dump( - cls.DATABASE_NAMES["settings"], - backup_directory, - "_" + suffix, - overwrite=True, - database_name_out=cls.DATABASE_NAMES["settings"] - ) - - return database_handler - - #needs testing - @classmethod - def get_database_sufficed(cls, suffix): - result = {} - for key, value in cls.DATABASE_NAMES.items(): - result[key] = "{}_{}".format(value, suffix) - return result + def get_backup_directory(self, data_folder): + return os.path.join(data_folder, "input", "dumps") #needs testing @classmethod @@ -137,25 +96,41 @@ def setup_only(cls, data_folder, openpype_mongo, app_variant): shutil.rmtree(output_folder) database_handler = DataBaseHandler(openpype_mongo) - backup_directory = cls.INPUT_DUMPS or get_backup_directory(data_folder) - - database_handler.setup_from_dump( - cls.DATABASE_NAMES["production"], - backup_directory, - "_" + app_variant, - overwrite=True, - database_name_out=cls.DATABASE_NAMES["production"] - ) - database_handler.setup_from_dump( - cls.DATABASE_NAMES["settings"], - backup_directory, - "_" + app_variant, - overwrite=True, - database_name_out=cls.DATABASE_NAMES["settings"] + backup_directory = ( + cls.INPUT_DUMPS or cls.get_backup_directory(data_folder) ) + for _, data in cls.DATABASE_NAMES.items(): + database_handler.setup_from_dump( + data["name"], + backup_directory, + "_" + app_variant, + overwrite=True, + database_name_out=data["name"] + ) + return data_folder, output_folder, database_handler + #needs testing + @classmethod + def dump_databases(cls, data_folder, openpype_mongo, app_variant): + database_handler = DataBaseHandler(openpype_mongo) + dumps_folder = ( + cls.INPUT_DUMPS or + os.path.join( + cls.get_backup_directory(data_folder), "inputs", "dumps" + ) + ) + for _, data in cls.DATABASE_NAMES.items(): + for collection in data["collections"]: + database_handler.backup_to_dump( + "{}_{}".format(data["name"], app_variant), + os.path.join(dumps_folder, data["name"]), + collection=collection, + json=True, + filename="{}.{}.json".format(data["name"], collection) + ) + @pytest.fixture(scope="module") def setup_fixture( self, data_folder, openpype_mongo, app_variant, persist, request @@ -220,9 +195,9 @@ def environment_setup( attributes[attribute] = value # Module attributes. - database_names = self.get_database_sufficed(app_variant) - attributes["DATABASE_PRODUCTION_NAME"] = database_names["production"] - attributes["DATABASE_SETTINGS_NAME"] = database_names["settings"] + for database_type, data in self.DATABASE_NAMES.items(): + attr = "DATABASE_{}_NAME".format(database_type.upper()) + attributes[attr] = "{}_{}".format(data["name"], app_variant) if not os.path.exists(input_environment_json): raise ValueError( @@ -263,7 +238,7 @@ def environment_setup( def database_dumps(self, setup_fixture): path = ( self.INPUT_DUMPS or - get_backup_directory(setup_fixture) + self.get_backup_directory(setup_fixture) ) yield path From 678868835a3d8cc4566137a8be063f83b8ebc673 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Mon, 31 Jul 2023 11:12:19 +0100 Subject: [PATCH 31/69] Unzip folders if needed. --- tests/lib/testing_classes.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/tests/lib/testing_classes.py b/tests/lib/testing_classes.py index ab849f7dccb..7188bc85d3d 100644 --- a/tests/lib/testing_classes.py +++ b/tests/lib/testing_classes.py @@ -11,6 +11,8 @@ import requests import re import subprocess +import zipfile +import collections from tests.lib.database_handler import DataBaseHandler from common.ayon_common.distribution.file_handler import RemoteFileHandler @@ -72,6 +74,26 @@ def get_backup_directory(self, data_folder): def setup_only(cls, data_folder, openpype_mongo, app_variant): if data_folder: print("Using existing folder {}".format(data_folder)) + + # Check root folder exists else extract from zip. This allows for + # testing with WIP zips locally. + for _, file_name, _ in cls.FILES: + file_path = os.path.join(data_folder, file_name) + if os.path.exists(file_path): + zip = zipfile.ZipFile(file_path) + + # Get all root folders and check against existing folders. + root_folder_names = [ + x for x in zip.namelist() if len(x.split("/")) == 2 + ] + for name in root_folder_names: + path = os.path.join(data_folder, name[:-1]) + if os.path.exists(path): + continue + + for zip_name in zip.namelist(): + if zip_name.startswith(name): + zip.extract(zip_name, data_folder) else: print("Temporary folder created: {}".format(data_folder)) data_folder = tempfile.mkdtemp() From 93fc02272905abb1ecbb6d3cf73468bea0f3ca35 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Mon, 31 Jul 2023 11:58:12 +0100 Subject: [PATCH 32/69] Fix missing modules in plugins. --- .../publish/submit_houdini_remote_publish.py | 2 +- .../publish/submit_houdini_render_deadline.py | 3 +-- .../plugins/publish/submit_max_deadline.py | 12 ++++++------ .../plugins/publish/submit_nuke_deadline.py | 4 ++-- .../publish/collect_otio_frame_ranges.py | 13 +++++++------ .../plugins/publish/collect_otio_review.py | 4 ++-- .../publish/collect_otio_subset_resources.py | 14 +++++++------- .../publish/extract_otio_audio_tracks.py | 3 ++- openpype/plugins/publish/extract_otio_file.py | 3 ++- .../plugins/publish/extract_otio_review.py | 19 +++++++++++-------- .../publish/extract_otio_trimming_video.py | 3 ++- 11 files changed, 43 insertions(+), 37 deletions(-) diff --git a/openpype/modules/deadline/plugins/publish/submit_houdini_remote_publish.py b/openpype/modules/deadline/plugins/publish/submit_houdini_remote_publish.py index 68aa653804f..044bd3ec0df 100644 --- a/openpype/modules/deadline/plugins/publish/submit_houdini_remote_publish.py +++ b/openpype/modules/deadline/plugins/publish/submit_houdini_remote_publish.py @@ -3,7 +3,6 @@ from datetime import datetime import requests -import hou import pyblish.api @@ -31,6 +30,7 @@ class HoudiniSubmitPublishDeadline(pyblish.api.ContextPlugin): targets = ["deadline"] def process(self, context): + import hou # Ensure no errors so far assert all( diff --git a/openpype/modules/deadline/plugins/publish/submit_houdini_render_deadline.py b/openpype/modules/deadline/plugins/publish/submit_houdini_render_deadline.py index af341ca8e8a..eefe751bdb4 100644 --- a/openpype/modules/deadline/plugins/publish/submit_houdini_render_deadline.py +++ b/openpype/modules/deadline/plugins/publish/submit_houdini_render_deadline.py @@ -1,5 +1,3 @@ -import hou - import os import attr import getpass @@ -117,6 +115,7 @@ def get_job_info(self): return job_info def get_plugin_info(self): + import hou instance = self._instance context = instance.context diff --git a/openpype/modules/deadline/plugins/publish/submit_max_deadline.py b/openpype/modules/deadline/plugins/publish/submit_max_deadline.py index fff7a4ced50..016a0469cd4 100644 --- a/openpype/modules/deadline/plugins/publish/submit_max_deadline.py +++ b/openpype/modules/deadline/plugins/publish/submit_max_deadline.py @@ -12,12 +12,6 @@ legacy_io, OpenPypePyblishPluginMixin ) -from openpype.settings import get_project_settings -from openpype.hosts.max.api.lib import ( - get_current_renderer, - get_multipass_setting -) -from openpype.hosts.max.api.lib_rendersettings import RenderSettings from openpype_modules.deadline import abstract_submit_deadline from openpype_modules.deadline.abstract_submit_deadline import DeadlineJobInfo from openpype.lib import is_running_from_build @@ -190,6 +184,12 @@ def process_submission(self): self.submit(self.assemble_payload(job_info, plugin_info)) def _use_published_name(self, data, project_settings): + from openpype.hosts.max.api.lib import ( + get_current_renderer, + get_multipass_setting + ) + from openpype.hosts.max.api.lib_rendersettings import RenderSettings + instance = self._instance job_info = copy.deepcopy(self.job_info) plugin_info = copy.deepcopy(self.plugin_info) diff --git a/openpype/modules/deadline/plugins/publish/submit_nuke_deadline.py b/openpype/modules/deadline/plugins/publish/submit_nuke_deadline.py index 49002317835..a098de15871 100644 --- a/openpype/modules/deadline/plugins/publish/submit_nuke_deadline.py +++ b/openpype/modules/deadline/plugins/publish/submit_nuke_deadline.py @@ -7,7 +7,6 @@ import requests import pyblish.api -import nuke from openpype.pipeline import legacy_io from openpype.pipeline.publish import ( OpenPypePyblishPluginMixin @@ -205,7 +204,6 @@ def payload_submit( if is_in_tests(): batch_name += datetime.now().strftime("%d%m%Y%H%M%S") - output_filename_0 = self.preview_fname(render_path) if not response_data: @@ -453,6 +451,8 @@ def get_limit_groups(self): Returning: list: captured groups list """ + import nuke + captured_groups = [] for lg_name, list_node_class in self.limit_groups.items(): for node_class in list_node_class: diff --git a/openpype/plugins/publish/collect_otio_frame_ranges.py b/openpype/plugins/publish/collect_otio_frame_ranges.py index 9a68b6e43df..0090b35e3fc 100644 --- a/openpype/plugins/publish/collect_otio_frame_ranges.py +++ b/openpype/plugins/publish/collect_otio_frame_ranges.py @@ -6,14 +6,8 @@ otioClipRange -> instance data attribute """ # import os -import opentimelineio as otio import pyblish.api from pprint import pformat -from openpype.pipeline.editorial import ( - get_media_range_with_retimes, - otio_range_to_frame_range, - otio_range_with_handles -) class CollectOtioFrameRanges(pyblish.api.InstancePlugin): @@ -27,6 +21,13 @@ class CollectOtioFrameRanges(pyblish.api.InstancePlugin): hosts = ["resolve", "hiero", "flame", "traypublisher"] def process(self, instance): + import opentimelineio as otio + from openpype.pipeline.editorial import ( + get_media_range_with_retimes, + otio_range_to_frame_range, + otio_range_with_handles + ) + # get basic variables otio_clip = instance.data["otioClip"] workfile_start = instance.data["workfileFrameStart"] diff --git a/openpype/plugins/publish/collect_otio_review.py b/openpype/plugins/publish/collect_otio_review.py index f0157282a11..c27490674f0 100644 --- a/openpype/plugins/publish/collect_otio_review.py +++ b/openpype/plugins/publish/collect_otio_review.py @@ -10,8 +10,6 @@ instance -> otioReviewClips instance -> families (adding ["review", "ftrack"]) """ - -import opentimelineio as otio import pyblish.api from pprint import pformat @@ -25,6 +23,8 @@ class CollectOtioReview(pyblish.api.InstancePlugin): hosts = ["resolve", "hiero", "flame"] def process(self, instance): + import opentimelineio as otio + # get basic variables otio_review_clips = [] otio_timeline = instance.context.data["otioTimeline"] diff --git a/openpype/plugins/publish/collect_otio_subset_resources.py b/openpype/plugins/publish/collect_otio_subset_resources.py index f659791d955..1721368e1c2 100644 --- a/openpype/plugins/publish/collect_otio_subset_resources.py +++ b/openpype/plugins/publish/collect_otio_subset_resources.py @@ -7,17 +7,12 @@ """ import os import clique -import opentimelineio as otio import pyblish.api -from openpype.pipeline.editorial import ( - get_media_range_with_retimes, - range_from_frames, - make_sequence_collection -) from openpype.pipeline.publish import ( get_publish_template_name ) + class CollectOtioSubsetResources(pyblish.api.InstancePlugin): """Get Resources for a subset version""" @@ -26,8 +21,13 @@ class CollectOtioSubsetResources(pyblish.api.InstancePlugin): families = ["clip"] hosts = ["resolve", "hiero", "flame"] - def process(self, instance): + import opentimelineio as otio + from openpype.pipeline.editorial import ( + get_media_range_with_retimes, + range_from_frames, + make_sequence_collection + ) if "audio" in instance.data["family"]: return diff --git a/openpype/plugins/publish/extract_otio_audio_tracks.py b/openpype/plugins/publish/extract_otio_audio_tracks.py index e19b7eeb137..0d736496486 100644 --- a/openpype/plugins/publish/extract_otio_audio_tracks.py +++ b/openpype/plugins/publish/extract_otio_audio_tracks.py @@ -5,7 +5,6 @@ run_subprocess ) import tempfile -import opentimelineio as otio class ExtractOtioAudioTracks(pyblish.api.ContextPlugin): @@ -158,6 +157,8 @@ def get_audio_track_items(self, otio_timeline): Returns: list: list of audio clip dictionaries """ + import opentimelineio as otio + output = [] # go trough all audio tracks for otio_track in otio_timeline.tracks: diff --git a/openpype/plugins/publish/extract_otio_file.py b/openpype/plugins/publish/extract_otio_file.py index 1a6a82117d9..a58deedcbbb 100644 --- a/openpype/plugins/publish/extract_otio_file.py +++ b/openpype/plugins/publish/extract_otio_file.py @@ -1,6 +1,5 @@ import os import pyblish.api -import opentimelineio as otio from openpype.pipeline import publish @@ -16,6 +15,8 @@ class ExtractOTIOFile(publish.Extractor): hosts = ["resolve", "hiero", "traypublisher"] def process(self, instance): + import opentimelineio as otio + if not instance.context.data.get("otioTimeline"): return # create representation data diff --git a/openpype/plugins/publish/extract_otio_review.py b/openpype/plugins/publish/extract_otio_review.py index 9ebcad2af1e..2a7bba71837 100644 --- a/openpype/plugins/publish/extract_otio_review.py +++ b/openpype/plugins/publish/extract_otio_review.py @@ -16,7 +16,6 @@ import os import clique -import opentimelineio as otio from pyblish import api from openpype.lib import ( @@ -24,13 +23,6 @@ run_subprocess, ) from openpype.pipeline import publish -from openpype.pipeline.editorial import ( - otio_range_to_frame_range, - trim_media_range, - range_from_frames, - frames_to_seconds, - make_sequence_collection -) class ExtractOTIOReview(publish.Extractor): @@ -62,6 +54,12 @@ class ExtractOTIOReview(publish.Extractor): output_ext = ".jpg" def process(self, instance): + import opentimelineio as otio + from openpype.pipeline.editorial import ( + otio_range_to_frame_range, + make_sequence_collection + ) + # TODO: convert resulting image sequence to mp4 # get otio clip and other time info from instance clip @@ -281,6 +279,11 @@ def _trim_available_range(self, avl_range, start, duration, fps): Returns: otio.time.TimeRange: trimmed available range """ + from openpype.pipeline.editorial import ( + trim_media_range, + range_from_frames + ) + avl_start = int(avl_range.start_time.value) src_start = int(avl_start + start) avl_durtation = int(avl_range.duration.value) diff --git a/openpype/plugins/publish/extract_otio_trimming_video.py b/openpype/plugins/publish/extract_otio_trimming_video.py index 70726338aaf..90c5ab09af2 100644 --- a/openpype/plugins/publish/extract_otio_trimming_video.py +++ b/openpype/plugins/publish/extract_otio_trimming_video.py @@ -15,7 +15,6 @@ run_subprocess, ) from openpype.pipeline import publish -from openpype.pipeline.editorial import frames_to_seconds class ExtractOTIOTrimmingVideo(publish.Extractor): @@ -75,6 +74,8 @@ def _ffmpeg_trim_seqment(self, input_file_path, otio_range): otio_range (opentime.TimeRange): range to trim to """ + from openpype.pipeline.editorial import frames_to_seconds + # get rendering app path ffmpeg_path = get_ffmpeg_tool_path("ffmpeg") From 521faa6c6e197f60c1a0ae829c525a3457063092 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Mon, 31 Jul 2023 12:04:11 +0100 Subject: [PATCH 33/69] Code cosmetics --- .../hosts/maya/test_publish_in_maya/test_publish_in_maya.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/integration/hosts/maya/test_publish_in_maya/test_publish_in_maya.py b/tests/integration/hosts/maya/test_publish_in_maya/test_publish_in_maya.py index f2af97b8c1c..69b19b11aac 100644 --- a/tests/integration/hosts/maya/test_publish_in_maya/test_publish_in_maya.py +++ b/tests/integration/hosts/maya/test_publish_in_maya/test_publish_in_maya.py @@ -69,6 +69,8 @@ def get_usersetup_path(self): @pytest.fixture(scope="module") def app_args(self, app_group, app_variant): # We should try and support 2020? + # Current issue is "-I" argument does not exist for 2020 and start up + # issues with color management. msg = "Maya 2020 and below is not supported for testing." assert int(app_variant) > 2020, msg From 238781406435c523e44e8cb4b15c8e9af1b043d4 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Tue, 1 Aug 2023 10:18:03 +0100 Subject: [PATCH 34/69] Initial working Deadline Maya testing --- .../plugins/publish/submit_maya_deadline.py | 3 +- .../plugins/publish/submit_publish_job.py | 3 +- tests/integration/hosts/maya/lib.py | 147 +++++++++- .../input => }/startup/userSetup.py | 9 +- .../maya/test_deadline_publish_in_maya.py | 9 +- .../avalon_tests.test_project.json | 63 ++--- .../openpype_tests/openpype_tests.logs.json | 99 +++---- .../openpype_tests.settings.json | 1 - .../test_project_test_asset_test_task_v001.ma | 260 +++++++++++++----- .../test_publish_in_maya.py | 254 ++++++----------- tests/lib/assert_classes.py | 13 +- tests/lib/database_handler.py | 2 +- tests/lib/testing_classes.py | 75 +++-- 13 files changed, 569 insertions(+), 369 deletions(-) rename tests/integration/hosts/maya/{test_publish_in_maya/input => }/startup/userSetup.py (83%) delete mode 100644 tests/integration/hosts/maya/test_publish_in_maya/input/dumps/openpype_tests/openpype_tests.settings.json diff --git a/openpype/modules/deadline/plugins/publish/submit_maya_deadline.py b/openpype/modules/deadline/plugins/publish/submit_maya_deadline.py index 1dfb6e0e5c0..564dc428086 100644 --- a/openpype/modules/deadline/plugins/publish/submit_maya_deadline.py +++ b/openpype/modules/deadline/plugins/publish/submit_maya_deadline.py @@ -206,7 +206,8 @@ def get_job_info(self): "AVALON_TASK", "AVALON_APP_NAME", "OPENPYPE_DEV" - "IS_TEST" + "IS_TEST", + "AVALON_DB" ] # Add OpenPype version if we are running from build. diff --git a/openpype/modules/deadline/plugins/publish/submit_publish_job.py b/openpype/modules/deadline/plugins/publish/submit_publish_job.py index 2ed21c0621c..af605b5c27e 100644 --- a/openpype/modules/deadline/plugins/publish/submit_publish_job.py +++ b/openpype/modules/deadline/plugins/publish/submit_publish_job.py @@ -123,7 +123,8 @@ class ProcessSubmittedJobOnFarm(pyblish.api.InstancePlugin, "FTRACK_SERVER", "AVALON_APP_NAME", "OPENPYPE_USERNAME", - "OPENPYPE_SG_USER" + "OPENPYPE_SG_USER", + "AVALON_DB" ] # Add OpenPype version if we are running from build. diff --git a/tests/integration/hosts/maya/lib.py b/tests/integration/hosts/maya/lib.py index 994af173edd..d7849da09d5 100644 --- a/tests/integration/hosts/maya/lib.py +++ b/tests/integration/hosts/maya/lib.py @@ -1,13 +1,142 @@ -from tests.lib.testing_classes import ( - HostFixtures, - PublishTest, - DeadlinePublishTest -) +import os +import shutil +import re +import pytest -class MayaLocalPublishTestClass(HostFixtures, PublishTest): - """Testing class for local publishes.""" +from tests.lib.testing_classes import HostFixtures, PublishTest + + +class MayaFixtures(HostFixtures): + + # By default run through mayapy. For interactive mode, change to "maya" or + # input `--app_group maya` in cli. + APP_GROUP = "mayapy" + + def running_in_mayapy(self, app_group): + app_group = app_group or self.APP_GROUP + + # Running in mayapy. + if app_group == "mayapy": + return True + + # Running in maya. + return False + + def get_usersetup_path(self): + return os.path.join( + os.path.dirname(__file__), "startup", "userSetup.py" + ) + + def get_log_path(self, dirpath, app_variant): + return os.path.join( + dirpath, "output_{}.log".format(app_variant) + ) + + @pytest.fixture(scope="module") + def app_args(self, app_group, app_variant): + # We should try and support 2020? + # Current issue is "-I" argument does not exist for 2020 and start up + # issues with color management. + msg = "Maya 2020 and below is not supported for testing." + assert int(app_variant) > 2020, msg + + args = [] + if self.running_in_mayapy(app_group): + args = ["-I", self.get_usersetup_path()] + + yield args + + @pytest.fixture(scope="module") + def start_last_workfile(self, app_group): + """Returns url of workfile""" + return not self.running_in_mayapy(app_group) + + @pytest.fixture(scope="module") + def last_workfile_path(self, setup_fixture): + """Get last_workfile_path from source data. + Maya expects workfile in proper folder, so copy is done first. + """ + data_folder, output_folder, _ = setup_fixture -class MayaDeadlinePublishTestClass(HostFixtures, DeadlinePublishTest): - """Testing class for Deadline publishes.""" + source_folder = ( + self.INPUT_WORKFILE or + os.path.join(data_folder, "input", "workfile") + ) + filename = os.listdir(source_folder)[0] + src_path = os.path.join(source_folder, filename) + dest_folder = os.path.join( + output_folder, + self.PROJECT_NAME, + self.ASSET_NAME, + "work", + self.TASK_NAME + ) + os.makedirs(dest_folder) + dest_path = os.path.join(dest_folder, filename) + shutil.copy(src_path, dest_path) + + yield dest_path + + @pytest.fixture(scope="module") + def startup_scripts( + self, monkeypatch_session, setup_fixture, app_group, app_variant + ): + data_folder, _, _ = setup_fixture + + """Points Maya to userSetup file from input data""" + if not self.running_in_mayapy(app_group): + # Not needed for running MayaPy since the testing userSetup.py will + # be passed in directly to the executable. + original_pythonpath = os.environ.get("PYTHONPATH") + monkeypatch_session.setenv( + "PYTHONPATH", + "{}{}{}".format( + os.path.dirname(self.get_usersetup_path()), + os.pathsep, + original_pythonpath + ) + ) + + monkeypatch_session.setenv( + "MAYA_CMD_FILE_OUTPUT", + self.get_log_path(data_folder, app_variant) + ) + + @pytest.fixture(scope="module") + def skip_compare_folders(self): + pass + + def test_publish( + self, + dbcon, + publish_finished, + setup_fixture, + app_variant + ): + data_folder, _, _ = setup_fixture + + logging_path = self.get_log_path(data_folder, app_variant) + with open(logging_path, "r") as f: + logging_output = f.read() + + print(logging_output) + print(publish_finished) + + # Check for pyblish errors. + error_regex = r"pyblish \(ERROR\)((.|\n)*)" + matches = re.findall(error_regex, logging_output) + assert not matches, matches[0][0] + + matches = re.findall(error_regex, publish_finished) + assert not matches, matches[0][0] + + # Check for python errors. + error_regex = r"// Error((.|\n)*)" + matches = re.findall(error_regex, logging_output) + assert not matches, matches[0][0] + + +class MayaPublishTest(MayaFixtures, PublishTest): + """Testing class for local publishes.""" diff --git a/tests/integration/hosts/maya/test_publish_in_maya/input/startup/userSetup.py b/tests/integration/hosts/maya/startup/userSetup.py similarity index 83% rename from tests/integration/hosts/maya/test_publish_in_maya/input/startup/userSetup.py rename to tests/integration/hosts/maya/startup/userSetup.py index 18bfa7e216d..d4bcab7abff 100644 --- a/tests/integration/hosts/maya/test_publish_in_maya/input/startup/userSetup.py +++ b/tests/integration/hosts/maya/startup/userSetup.py @@ -42,10 +42,11 @@ def main(): return - cmds.evalDeferred("setup_pyblish_logging()", evaluateNext=True) - cmds.evalDeferred( - "import pyblish.util;pyblish.util.publish()", lowestPriority=True - ) + if not bool(os.environ.get("KEEP_APP_OPEN")): + cmds.evalDeferred("setup_pyblish_logging()", evaluateNext=True) + cmds.evalDeferred( + "import pyblish.util;pyblish.util.publish()", lowestPriority=True + ) print("finished OpenPype usersetup for testing") if not bool(os.environ.get("KEEP_APP_OPEN")) and not MAYA_STANDALONE: diff --git a/tests/integration/hosts/maya/test_deadline_publish_in_maya.py b/tests/integration/hosts/maya/test_deadline_publish_in_maya.py index c4ce232ce3f..e3f6caa9209 100644 --- a/tests/integration/hosts/maya/test_deadline_publish_in_maya.py +++ b/tests/integration/hosts/maya/test_deadline_publish_in_maya.py @@ -1,3 +1,8 @@ +import os +import shutil + +import pytest + from tests.lib.assert_classes import DBAssert from tests.integration.hosts.maya.lib import MayaDeadlinePublishTestClass @@ -31,10 +36,6 @@ class TestDeadlinePublishInMaya(MayaDeadlinePublishTestClass): ) ] - APP_GROUP = "maya" - # keep empty to locate latest installed variant or explicit - APP_VARIANT = "" - TIMEOUT = 120 # publish timeout def test_db_asserts(self, dbcon, publish_finished): diff --git a/tests/integration/hosts/maya/test_publish_in_maya/input/dumps/avalon_tests/avalon_tests.test_project.json b/tests/integration/hosts/maya/test_publish_in_maya/input/dumps/avalon_tests/avalon_tests.test_project.json index 7b8e3d6516d..1a71b6ce09e 100644 --- a/tests/integration/hosts/maya/test_publish_in_maya/input/dumps/avalon_tests/avalon_tests.test_project.json +++ b/tests/integration/hosts/maya/test_publish_in_maya/input/dumps/avalon_tests/avalon_tests.test_project.json @@ -1,4 +1,35 @@ [{ + "_id": { + "$oid": "60df31e2be2b48bd3695c056" + }, + "name": "test_asset", + "type": "asset", + "schema": "openpype:asset-3.0", + "data": { + "parents": [], + "visualParent": null, + "tasks": { + "test_task": { + "type": "Generic" + } + }, + "fps": 25.0, + "resolutionWidth": 1920, + "resolutionHeight": 1080, + "pixelAspect": 1.0, + "frameStart": 1001, + "handleStart": 0, + "frameEnd": 1001, + "clipOut": 1, + "clipIn": 1, + "tools_env": [], + "handleEnd": 0 + }, + "parent": { + "$oid": "60df31bcbe2b48bd3695c055" + } +}, +{ "_id": { "$oid": "60df31bcbe2b48bd3695c055" }, @@ -291,35 +322,5 @@ "others": {} } } -}, -{ - "_id": { - "$oid": "60df31e2be2b48bd3695c056" - }, - "name": "test_asset", - "type": "asset", - "schema": "openpype:asset-3.0", - "data": { - "parents": [], - "visualParent": null, - "tasks": { - "test_task": { - "type": "Generic" - } - }, - "fps": 25.0, - "resolutionWidth": 1920, - "resolutionHeight": 1080, - "pixelAspect": 1.0, - "frameStart": 1001, - "handleStart": 0, - "frameEnd": 1001, - "clipOut": 1, - "clipIn": 1, - "tools_env": [], - "handleEnd": 0 - }, - "parent": { - "$oid": "60df31bcbe2b48bd3695c055" - } }] + diff --git a/tests/integration/hosts/maya/test_publish_in_maya/input/dumps/openpype_tests/openpype_tests.logs.json b/tests/integration/hosts/maya/test_publish_in_maya/input/dumps/openpype_tests/openpype_tests.logs.json index 5cdf2ad76ab..9aeaba16d19 100644 --- a/tests/integration/hosts/maya/test_publish_in_maya/input/dumps/openpype_tests/openpype_tests.logs.json +++ b/tests/integration/hosts/maya/test_publish_in_maya/input/dumps/openpype_tests/openpype_tests.logs.json @@ -1,44 +1,19 @@ [{ "_id": { - "$oid": "60e5c1db13f8c29e6b95ab2e" - }, - "timestamp": { - "$date": "2021-07-07T17:01:47.021Z" - }, - "level": "INFO", - "thread": 28316, - "threadName": "MainThread", - "message": "Please sign in to Ftrack", - "loggerName": "FtrackModule", - "fileName": "C:\\Users\\petrk\\PycharmProjects\\Pype3.0\\pype\\openpype\\modules\\ftrack\\tray\\ftrack_tray.py", - "module": "ftrack_tray", - "method": "validate", - "lineNumber": 72, - "process_id": { - "$oid": "60e5c1d213f8c29e6b95ab2b" - }, - "hostname": "LAPTOP-UB778LHG", - "hostip": "10.28.18.11", - "username": "petrk", - "system_name": "Windows", - "process_name": "Tray" -}, -{ - "_id": { - "$oid": "60e5c1db13f8c29e6b95ab2f" + "$oid": "60e5c1db13f8c29e6b95ab30" }, "timestamp": { - "$date": "2021-07-07T17:01:47.164Z" + "$date": "2021-07-07T17:01:47.169Z" }, "level": "INFO", - "thread": 28448, - "threadName": "Thread-2", - "message": "IdleManagerThread has started", - "loggerName": "IdleManagerThread", - "fileName": "C:\\Users\\petrk\\PycharmProjects\\Pype3.0\\pype\\openpype\\modules\\idle_manager\\idle_threads.py", - "module": "idle_threads", + "thread": 29832, + "threadName": "Thread-1", + "message": "Starting WebServer server", + "loggerName": "WebServer", + "fileName": "C:\\Users\\petrk\\PycharmProjects\\Pype3.0\\pype\\openpype\\modules\\webserver\\server.py", + "module": "server", "method": "run", - "lineNumber": 57, + "lineNumber": 85, "process_id": { "$oid": "60e5c1d213f8c29e6b95ab2b" }, @@ -50,20 +25,20 @@ }, { "_id": { - "$oid": "60e5c1db13f8c29e6b95ab30" + "$oid": "60e5c28613f8c29e6b95ab31" }, "timestamp": { - "$date": "2021-07-07T17:01:47.169Z" + "$date": "2021-07-07T17:04:38.609Z" }, "level": "INFO", - "thread": 29832, - "threadName": "Thread-1", - "message": "Starting WebServer server", - "loggerName": "WebServer", - "fileName": "C:\\Users\\petrk\\PycharmProjects\\Pype3.0\\pype\\openpype\\modules\\webserver\\server.py", - "module": "server", - "method": "run", - "lineNumber": 85, + "thread": 28316, + "threadName": "MainThread", + "message": "Ftrack action server was forced to stop", + "loggerName": "FtrackModule", + "fileName": "C:\\Users\\petrk\\PycharmProjects\\Pype3.0\\pype\\openpype\\modules\\ftrack\\tray\\ftrack_tray.py", + "module": "ftrack_tray", + "method": "stop_action_server", + "lineNumber": 241, "process_id": { "$oid": "60e5c1d213f8c29e6b95ab2b" }, @@ -75,20 +50,20 @@ }, { "_id": { - "$oid": "60e5c28613f8c29e6b95ab31" + "$oid": "60e5c1db13f8c29e6b95ab2e" }, "timestamp": { - "$date": "2021-07-07T17:04:38.609Z" + "$date": "2021-07-07T17:01:47.021Z" }, "level": "INFO", "thread": 28316, "threadName": "MainThread", - "message": "Ftrack action server was forced to stop", + "message": "Please sign in to Ftrack", "loggerName": "FtrackModule", "fileName": "C:\\Users\\petrk\\PycharmProjects\\Pype3.0\\pype\\openpype\\modules\\ftrack\\tray\\ftrack_tray.py", "module": "ftrack_tray", - "method": "stop_action_server", - "lineNumber": 241, + "method": "validate", + "lineNumber": 72, "process_id": { "$oid": "60e5c1d213f8c29e6b95ab2b" }, @@ -147,4 +122,30 @@ "username": "petrk", "system_name": "Windows", "process_name": "Tray" +}, +{ + "_id": { + "$oid": "60e5c1db13f8c29e6b95ab2f" + }, + "timestamp": { + "$date": "2021-07-07T17:01:47.164Z" + }, + "level": "INFO", + "thread": 28448, + "threadName": "Thread-2", + "message": "IdleManagerThread has started", + "loggerName": "IdleManagerThread", + "fileName": "C:\\Users\\petrk\\PycharmProjects\\Pype3.0\\pype\\openpype\\modules\\idle_manager\\idle_threads.py", + "module": "idle_threads", + "method": "run", + "lineNumber": 57, + "process_id": { + "$oid": "60e5c1d213f8c29e6b95ab2b" + }, + "hostname": "LAPTOP-UB778LHG", + "hostip": "10.28.18.11", + "username": "petrk", + "system_name": "Windows", + "process_name": "Tray" }] + diff --git a/tests/integration/hosts/maya/test_publish_in_maya/input/dumps/openpype_tests/openpype_tests.settings.json b/tests/integration/hosts/maya/test_publish_in_maya/input/dumps/openpype_tests/openpype_tests.settings.json deleted file mode 100644 index fe51488c706..00000000000 --- a/tests/integration/hosts/maya/test_publish_in_maya/input/dumps/openpype_tests/openpype_tests.settings.json +++ /dev/null @@ -1 +0,0 @@ -[] diff --git a/tests/integration/hosts/maya/test_publish_in_maya/input/workfile/test_project_test_asset_test_task_v001.ma b/tests/integration/hosts/maya/test_publish_in_maya/input/workfile/test_project_test_asset_test_task_v001.ma index 6b5d1fada94..61a75d1cc3f 100644 --- a/tests/integration/hosts/maya/test_publish_in_maya/input/workfile/test_project_test_asset_test_task_v001.ma +++ b/tests/integration/hosts/maya/test_publish_in_maya/input/workfile/test_project_test_asset_test_task_v001.ma @@ -1,19 +1,22 @@ -//Maya ASCII 2022 scene +//Maya ASCII 2023 scene //Name: test_project_test_asset_test_task_v001.ma -//Last modified: Fri, Jul 28, 2023 09:19:26 AM +//Last modified: Mon, Jul 31, 2023 06:29:29 PM //Codeset: 1252 -requires maya "2022"; +requires maya "2023"; +requires -nodeType "simpleSelector" -nodeType "renderSetupLayer" -nodeType "renderSetup" + -nodeType "collection" "renderSetup.py" "1.0"; +requires "stereoCamera" "10.0"; +requires -nodeType "aiOptions" -nodeType "aiAOVDriver" -nodeType "aiAOVFilter" "mtoa" "5.3.1"; requires -nodeType "polyDisc" "modelingToolkit" "0.0.0.0"; -requires -nodeType "aiOptions" -nodeType "aiAOVDriver" -nodeType "aiAOVFilter" "mtoa" "5.2.2.1"; -requires -nodeType "renderSetup" "renderSetup.py" "1.0"; +requires "stereoCamera" "10.0"; currentUnit -l centimeter -a degree -t pal; fileInfo "application" "maya"; -fileInfo "product" "Maya 2022"; -fileInfo "version" "2022"; -fileInfo "cutIdentifier" "202205171752-c25c06f306"; +fileInfo "product" "Maya 2023"; +fileInfo "version" "2023"; +fileInfo "cutIdentifier" "202211021031-847a9f9623"; fileInfo "osv" "Windows 10 Pro v2009 (Build: 19044)"; fileInfo "license" "education"; -fileInfo "UUID" "8ACB2272-4349-C7EA-3DEE-2CBDCE90E6E2"; +fileInfo "UUID" "9F823AB3-4E95-10BF-8730-7D8918BD74A0"; fileInfo "OpenPypeContext" "eyJwdWJsaXNoX2F0dHJpYnV0ZXMiOiB7IlZhbGlkYXRlQ29udGFpbmVycyI6IHsiYWN0aXZlIjogdHJ1ZX19fQ=="; createNode transform -s -n "persp"; rename -uid "D52C935B-47C9-D868-A875-D799DD17B3A1"; @@ -25,6 +28,7 @@ createNode transform -s -n "persp"; createNode camera -s -n "perspShape" -p "persp"; rename -uid "2399E6C0-490F-BA1F-485F-5AA8A01D27BC"; setAttr -k off ".v" no; + setAttr ".rnd" no; setAttr ".fl" 34.999999999999993; setAttr ".coi" 50.609449488607154; setAttr ".imn" -type "string" "persp"; @@ -121,20 +125,39 @@ createNode mesh -n "pDiscShape1" -p "pDisc1"; setAttr ".cdvm[0]" 0 1 1; setAttr ".ai_translator" -type "string" "polymesh"; setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:4ee3da11a1a4"; +createNode transform -n "persp1"; + rename -uid "292F1351-4E41-A890-D6D5-A5A4F7D94C76"; + setAttr ".t" -type "double3" 3.7889010960863949 2.8416759114717678 3.7889010364817537 ; + setAttr ".r" -type "double3" -27.938352729602379 44.999999999999972 -5.172681101354183e-14 ; +createNode camera -n "perspShape1" -p "persp1"; + rename -uid "9277418C-43C8-5064-A7C6-64AC829A76F2"; + setAttr -k off ".v"; + setAttr ".ovr" 1.3; + setAttr ".fl" 34.999999999999993; + setAttr ".coi" 6.0652013012246453; + setAttr ".imn" -type "string" "persp1"; + setAttr ".den" -type "string" "persp1_depth"; + setAttr ".man" -type "string" "persp1_mask"; + setAttr ".tp" -type "double3" -1.1920928955078125e-07 0 -1.7881393432617188e-07 ; + setAttr ".hc" -type "string" "viewSet -p %camera"; + setAttr ".dr" yes; createNode lightLinker -s -n "lightLinker1"; - rename -uid "299D7A10-4A35-CB9E-8436-32818DBFA63D"; + rename -uid "C7AABCC2-4C33-A7D1-69A5-19BD345F29E1"; setAttr -s 2 ".lnk"; setAttr -s 2 ".slnk"; createNode shapeEditorManager -n "shapeEditorManager"; - rename -uid "3972C4F6-4401-0797-E0D1-F2BA68014EA1"; + rename -uid "E556CB28-4651-2D44-1457-A4844F1C933B"; createNode poseInterpolatorManager -n "poseInterpolatorManager"; - rename -uid "31ECBCB5-4460-79E3-5F91-85B75E9A0CEF"; + rename -uid "E7EAA6F5-46CF-937D-9550-1B8D177A7C22"; createNode displayLayerManager -n "layerManager"; - rename -uid "918287B5-4F46-C062-900A-3FBCD12C1420"; + rename -uid "DE9B9703-49F6-94EB-CDAE-2F94ACD20661"; createNode displayLayer -n "defaultLayer"; rename -uid "4A776D1B-401F-7069-1C74-A7AAE84CEE03"; + setAttr ".ufem" -type "stringArray" 0 ; createNode renderLayerManager -n "renderLayerManager"; - rename -uid "7BE3B58B-4503-28D8-3B39-2293B6E5B3D6"; + rename -uid "3922E54B-45E9-AB90-019E-24BA345A1303"; + setAttr -s 2 ".rlmi[1]" 1; + setAttr -s 2 ".rlmi"; createNode renderLayer -n "defaultRenderLayer"; rename -uid "B134920D-4508-23BD-A6CA-11B43DE03F53"; setAttr ".g" yes; @@ -152,16 +175,16 @@ createNode objectSet -n "modelMain"; addAttr -ci true -sn "creator_identifier" -ln "creator_identifier" -dt "string"; addAttr -ci true -sn "variant" -ln "variant" -dt "string"; addAttr -ci true -sn "asset" -ln "asset" -dt "string"; + addAttr -ci true -sn "task" -ln "task" -dt "string"; + addAttr -ci true -sn "instance_id" -ln "instance_id" -dt "string"; addAttr -ci true -sn "writeColorSets" -ln "writeColorSets" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "writeFaceSets" -ln "writeFaceSets" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "includeParentHierarchy" -ln "includeParentHierarchy" -min + 0 -max 1 -at "bool"; addAttr -ci true -sn "attr" -ln "attr" -dt "string"; addAttr -ci true -sn "attrPrefix" -ln "attrPrefix" -dt "string"; - addAttr -ci true -sn "includeParentHierarchy" -ln "includeParentHierarchy" -min - 0 -max 1 -at "bool"; - addAttr -ci true -sn "task" -ln "task" -dt "string"; - addAttr -ci true -sn "instance_id" -ln "instance_id" -dt "string"; addAttr -ci true -sn "publish_attributes" -ln "publish_attributes" -dt "string"; - addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" + addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" -dt "string"; setAttr ".ihi" 0; setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:7364ea6776c9"; @@ -172,13 +195,13 @@ createNode objectSet -n "modelMain"; setAttr ".creator_identifier" -type "string" "io.openpype.creators.maya.model"; setAttr ".variant" -type "string" "Main"; setAttr ".asset" -type "string" "test_asset"; + setAttr ".task" -type "string" "test_task"; + setAttr ".instance_id" -type "string" "6889d3db-b813-43db-96de-9ba555dc4472"; setAttr -cb on ".writeColorSets"; setAttr -cb on ".writeFaceSets"; + setAttr -cb on ".includeParentHierarchy"; setAttr ".attr" -type "string" ""; setAttr ".attrPrefix" -type "string" ""; - setAttr -cb on ".includeParentHierarchy"; - setAttr ".task" -type "string" "TestTask"; - setAttr ".instance_id" -type "string" "6889d3db-b813-43db-96de-9ba555dc4472"; setAttr ".publish_attributes" -type "string" "{\"ValidateNodeIDsRelated\": {\"active\": true}, \"ValidateTransformNamingSuffix\": {\"active\": true}, \"ValidateColorSets\": {\"active\": true}, \"ValidateMeshArnoldAttributes\": {\"active\": true}, \"ValidateMeshHasUVs\": {\"active\": true}, \"ValidateMeshNonZeroEdgeLength\": {\"active\": true}, \"ExtractModel\": {\"active\": true}}"; setAttr ".__creator_attributes_keys" -type "string" "writeColorSets,writeFaceSets,includeParentHierarchy,attr,attrPrefix"; createNode script -n "uiConfigurationScriptNode"; @@ -187,41 +210,44 @@ createNode script -n "uiConfigurationScriptNode"; "// Maya Mel UI Configuration File.\n//\n// This script is machine generated. Edit at your own risk.\n//\n//\n\nglobal string $gMainPane;\nif (`paneLayout -exists $gMainPane`) {\n\n\tglobal int $gUseScenePanelConfig;\n\tint $useSceneConfig = $gUseScenePanelConfig;\n\tint $nodeEditorPanelVisible = stringArrayContains(\"nodeEditorPanel1\", `getPanel -vis`);\n\tint $nodeEditorWorkspaceControlOpen = (`workspaceControl -exists nodeEditorPanel1Window` && `workspaceControl -q -visible nodeEditorPanel1Window`);\n\tint $menusOkayInPanels = `optionVar -q allowMenusInPanels`;\n\tint $nVisPanes = `paneLayout -q -nvp $gMainPane`;\n\tint $nPanes = 0;\n\tstring $editorName;\n\tstring $panelName;\n\tstring $itemFilterName;\n\tstring $panelConfig;\n\n\t//\n\t// get current state of the UI\n\t//\n\tsceneUIReplacement -update $gMainPane;\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Top View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Top View\")) -mbv $menusOkayInPanels $panelName;\n" + "\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"|top\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n" + " -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n" - + " -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n" - + "\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Side View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Side View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"|side\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n" - + " -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n" - + " -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n" - + " -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Front View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Front View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"|front\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n" - + " -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n" - + " -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n" - + " -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Persp View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Persp View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"|persp\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n" - + " -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n" - + " -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n" - + " -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1112\n -height 732\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"outlinerPanel\" (localizedPanelLabel(\"ToggledOutliner\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\toutlinerPanel -edit -l (localizedPanelLabel(\"ToggledOutliner\")) -mbv $menusOkayInPanels $panelName;\n" - + "\t\t$editorName = $panelName;\n outlinerEditor -e \n -docTag \"isolOutln_fromSeln\" \n -showShapes 0\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 1\n -showReferenceMembers 1\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -organizeByClip 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showParentContainers 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n" - + " -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -isSet 0\n -isSetMember 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -selectCommand \"print(\\\"\\\")\" \n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 1\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n -renderFilterIndex 0\n" - + " -selectionOrder \"chronological\" \n -expandAttribute 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"outlinerPanel\" (localizedPanelLabel(\"Outliner\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\toutlinerPanel -edit -l (localizedPanelLabel(\"Outliner\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n outlinerEditor -e \n -showShapes 0\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -organizeByClip 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n" - + " -showParentContainers 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n" - + " -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"graphEditor\" (localizedPanelLabel(\"Graph Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Graph Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n" - + " -organizeByClip 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 1\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showParentContainers 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 0\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 1\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 1\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n" - + " -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 1\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"GraphEd\");\n animCurveEditor -e \n -displayValues 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -showPlayRangeShades \"on\" \n -lockPlayRangeShades \"off\" \n -smoothness \"fine\" \n -resultSamples 1.041667\n" - + " -resultScreenSamples 0\n -resultUpdate \"delayed\" \n -showUpstreamCurves 1\n -keyMinScale 1\n -stackedCurvesMin -1\n -stackedCurvesMax 1\n -stackedCurvesSpace 0.2\n -preSelectionHighlight 0\n -constrainDrag 0\n -valueLinesToggle 1\n -highlightAffectedCurves 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dopeSheetPanel\" (localizedPanelLabel(\"Dope Sheet\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Dope Sheet\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n" - + " -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -organizeByClip 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showParentContainers 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 0\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 1\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"0\" \n -showSetMembers 0\n" - + " -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"DopeSheetEd\");\n dopeSheetEditor -e \n -displayValues 0\n -snapTime \"integer\" \n" - + " -snapValue \"none\" \n -outliner \"dopeSheetPanel1OutlineEd\" \n -showSummary 1\n -showScene 0\n -hierarchyBelow 0\n -showTicks 1\n -selectionWindow 0 0 0 0 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"timeEditorPanel\" (localizedPanelLabel(\"Time Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Time Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"clipEditorPanel\" (localizedPanelLabel(\"Trax Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Trax Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = clipEditorNameFromPanel($panelName);\n" - + " clipEditor -e \n -displayValues 0\n -snapTime \"none\" \n -snapValue \"none\" \n -initialized 0\n -manageSequencer 0 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"sequenceEditorPanel\" (localizedPanelLabel(\"Camera Sequencer\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Camera Sequencer\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = sequenceEditorNameFromPanel($panelName);\n clipEditor -e \n -displayValues 0\n -snapTime \"none\" \n -snapValue \"none\" \n -initialized 0\n -manageSequencer 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"hyperGraphPanel\" (localizedPanelLabel(\"Hypergraph Hierarchy\")) `;\n" - + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Hypergraph Hierarchy\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"HyperGraphEd\");\n hyperGraph -e \n -graphLayoutStyle \"hierarchicalLayout\" \n -orientation \"horiz\" \n -mergeConnections 0\n -zoom 1\n -animateTransition 0\n -showRelationships 1\n -showShapes 0\n -showDeformers 0\n -showExpressions 0\n -showConstraints 0\n -showConnectionFromSelected 0\n -showConnectionToSelected 0\n -showConstraintLabels 0\n -showUnderworld 0\n -showInvisible 0\n -transitionFrames 1\n -opaqueContainers 0\n -freeform 0\n -imagePosition 0 0 \n -imageScale 1\n -imageEnabled 0\n -graphType \"DAG\" \n" - + " -heatMapDisplay 0\n -updateSelection 1\n -updateNodeAdded 1\n -useDrawOverrideColor 0\n -limitGraphTraversal -1\n -range 0 0 \n -iconSize \"smallIcons\" \n -showCachedConnections 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"hyperShadePanel\" (localizedPanelLabel(\"Hypershade\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Hypershade\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"visorPanel\" (localizedPanelLabel(\"Visor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Visor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n" - + "\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"nodeEditorPanel\" (localizedPanelLabel(\"Node Editor\")) `;\n\tif ($nodeEditorPanelVisible || $nodeEditorWorkspaceControlOpen) {\n\t\tif (\"\" == $panelName) {\n\t\t\tif ($useSceneConfig) {\n\t\t\t\t$panelName = `scriptedPanel -unParent -type \"nodeEditorPanel\" -l (localizedPanelLabel(\"Node Editor\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"NodeEditorEd\");\n nodeEditor -e \n -allAttributes 0\n -allNodes 0\n -autoSizeNodes 1\n -consistentNameSize 1\n -createNodeCommand \"nodeEdCreateNodeCommand\" \n -connectNodeOnCreation 0\n -connectOnDrop 0\n -copyConnectionsOnPaste 0\n -connectionStyle \"bezier\" \n -defaultPinnedState 0\n -additiveGraphingMode 0\n -settingsChangedCallback \"nodeEdSyncControls\" \n -traversalDepthLimit -1\n -keyPressCommand \"nodeEdKeyPressCommand\" \n" - + " -nodeTitleMode \"name\" \n -gridSnap 0\n -gridVisibility 1\n -crosshairOnEdgeDragging 0\n -popupMenuScript \"nodeEdBuildPanelMenus\" \n -showNamespace 1\n -showShapes 1\n -showSGShapes 0\n -showTransforms 1\n -useAssets 1\n -syncedSelection 1\n -extendToShapes 1\n -editorMode \"default\" \n -hasWatchpoint 0\n $editorName;\n\t\t\t}\n\t\t} else {\n\t\t\t$label = `panel -q -label $panelName`;\n\t\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Node Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"NodeEditorEd\");\n nodeEditor -e \n -allAttributes 0\n -allNodes 0\n -autoSizeNodes 1\n -consistentNameSize 1\n -createNodeCommand \"nodeEdCreateNodeCommand\" \n -connectNodeOnCreation 0\n -connectOnDrop 0\n" - + " -copyConnectionsOnPaste 0\n -connectionStyle \"bezier\" \n -defaultPinnedState 0\n -additiveGraphingMode 0\n -settingsChangedCallback \"nodeEdSyncControls\" \n -traversalDepthLimit -1\n -keyPressCommand \"nodeEdKeyPressCommand\" \n -nodeTitleMode \"name\" \n -gridSnap 0\n -gridVisibility 1\n -crosshairOnEdgeDragging 0\n -popupMenuScript \"nodeEdBuildPanelMenus\" \n -showNamespace 1\n -showShapes 1\n -showSGShapes 0\n -showTransforms 1\n -useAssets 1\n -syncedSelection 1\n -extendToShapes 1\n -editorMode \"default\" \n -hasWatchpoint 0\n $editorName;\n\t\t\tif (!$useSceneConfig) {\n\t\t\t\tpanel -e -l $label $panelName;\n\t\t\t}\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"createNodePanel\" (localizedPanelLabel(\"Create Node\")) `;\n" - + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Create Node\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"polyTexturePlacementPanel\" (localizedPanelLabel(\"UV Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"UV Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"renderWindowPanel\" (localizedPanelLabel(\"Render View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Render View\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"shapePanel\" (localizedPanelLabel(\"Shape Editor\")) `;\n" - + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tshapePanel -edit -l (localizedPanelLabel(\"Shape Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"posePanel\" (localizedPanelLabel(\"Pose Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tposePanel -edit -l (localizedPanelLabel(\"Pose Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dynRelEdPanel\" (localizedPanelLabel(\"Dynamic Relationships\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Dynamic Relationships\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"relationshipPanel\" (localizedPanelLabel(\"Relationship Editor\")) `;\n" - + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Relationship Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"referenceEditorPanel\" (localizedPanelLabel(\"Reference Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Reference Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"componentEditorPanel\" (localizedPanelLabel(\"Component Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Component Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dynPaintScriptedPanelType\" (localizedPanelLabel(\"Paint Effects\")) `;\n" - + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Paint Effects\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"scriptEditorPanel\" (localizedPanelLabel(\"Script Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Script Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"profilerPanel\" (localizedPanelLabel(\"Profiler Tool\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Profiler Tool\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"contentBrowserPanel\" (localizedPanelLabel(\"Content Browser\")) `;\n" - + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Content Browser\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\tif ($useSceneConfig) {\n string $configName = `getPanel -cwl (localizedPanelLabel(\"Current Layout\"))`;\n if (\"\" != $configName) {\n\t\t\tpanelConfiguration -edit -label (localizedPanelLabel(\"Current Layout\")) \n\t\t\t\t-userCreated false\n\t\t\t\t-defaultImage \"vacantCell.xP:/\"\n\t\t\t\t-image \"\"\n\t\t\t\t-sc false\n\t\t\t\t-configString \"global string $gMainPane; paneLayout -e -cn \\\"single\\\" -ps 1 100 100 $gMainPane;\"\n\t\t\t\t-removeAllPanels\n\t\t\t\t-ap false\n\t\t\t\t\t(localizedPanelLabel(\"Persp View\")) \n\t\t\t\t\t\"modelPanel\"\n" - + "\t\t\t\t\t\"$panelName = `modelPanel -unParent -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels `;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera persp` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 16384\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -controllers 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -greasePencils 1\\n -shadows 0\\n -captureSequenceNumber -1\\n -width 1112\\n -height 732\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName;\\nmodelEditor -e \\n -pluginObjects \\\"gpuCacheDisplayFilter\\\" 1 \\n $editorName\"\n" - + "\t\t\t\t\t\"modelPanel -edit -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels $panelName;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera persp` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 16384\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -controllers 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -greasePencils 1\\n -shadows 0\\n -captureSequenceNumber -1\\n -width 1112\\n -height 732\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName;\\nmodelEditor -e \\n -pluginObjects \\\"gpuCacheDisplayFilter\\\" 1 \\n $editorName\"\n" + + " -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -bluePencil 1\n -greasePencils 0\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Side View\")) `;\n" + + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Side View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"|side\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n" + + " -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n" + + " -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -bluePencil 1\n -greasePencils 0\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n" + + " modelEditor -e -viewSelected 0 $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Front View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Front View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"|front\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n" + + " -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n" + + " -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -bluePencil 1\n" + + " -greasePencils 0\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Persp View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Persp View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"|persp1\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n" + + " -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n" + + " -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n" + + " -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -bluePencil 1\n -greasePencils 0\n -shadows 0\n -captureSequenceNumber -1\n -width 1007\n -height 733\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"outlinerPanel\" (localizedPanelLabel(\"ToggledOutliner\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\toutlinerPanel -edit -l (localizedPanelLabel(\"ToggledOutliner\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n outlinerEditor -e \n -docTag \"isolOutln_fromSeln\" \n -showShapes 0\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 1\n -showReferenceMembers 1\n" + + " -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -organizeByClip 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showParentContainers 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n" + + " -isSet 0\n -isSetMember 0\n -showUfeItems 1\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -selectCommand \"print(\\\"\\\")\" \n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 1\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n -renderFilterIndex 0\n -selectionOrder \"chronological\" \n -expandAttribute 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"outlinerPanel\" (localizedPanelLabel(\"Outliner\")) `;\n" + + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\toutlinerPanel -edit -l (localizedPanelLabel(\"Outliner\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n outlinerEditor -e \n -showShapes 0\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -organizeByClip 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showParentContainers 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n" + + " -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -showUfeItems 1\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n" + + " $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"graphEditor\" (localizedPanelLabel(\"Graph Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Graph Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -organizeByClip 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 1\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n" + + " -showPublishedAsConnected 0\n -showParentContainers 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 0\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 1\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 1\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -showUfeItems 1\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n" + + " -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 1\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"GraphEd\");\n animCurveEditor -e \n -displayValues 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -showPlayRangeShades \"on\" \n -lockPlayRangeShades \"off\" \n -smoothness \"fine\" \n -resultSamples 1.041667\n -resultScreenSamples 0\n -resultUpdate \"delayed\" \n -showUpstreamCurves 1\n -keyMinScale 1\n -stackedCurvesMin -1\n -stackedCurvesMax 1\n" + + " -stackedCurvesSpace 0.2\n -preSelectionHighlight 0\n -constrainDrag 0\n -valueLinesToggle 1\n -highlightAffectedCurves 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dopeSheetPanel\" (localizedPanelLabel(\"Dope Sheet\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Dope Sheet\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -organizeByClip 1\n" + + " -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showParentContainers 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 0\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 1\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -showUfeItems 1\n -displayMode \"DAG\" \n -expandObjects 0\n" + + " -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"DopeSheetEd\");\n dopeSheetEditor -e \n -displayValues 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -outliner \"dopeSheetPanel1OutlineEd\" \n -showSummary 1\n -showScene 0\n -hierarchyBelow 0\n" + + " -showTicks 1\n -selectionWindow 0 0 0 0 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"timeEditorPanel\" (localizedPanelLabel(\"Time Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Time Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"clipEditorPanel\" (localizedPanelLabel(\"Trax Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Trax Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = clipEditorNameFromPanel($panelName);\n clipEditor -e \n -displayValues 0\n -snapTime \"none\" \n -snapValue \"none\" \n -initialized 0\n -manageSequencer 0 \n" + + " $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"sequenceEditorPanel\" (localizedPanelLabel(\"Camera Sequencer\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Camera Sequencer\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = sequenceEditorNameFromPanel($panelName);\n clipEditor -e \n -displayValues 0\n -snapTime \"none\" \n -snapValue \"none\" \n -initialized 0\n -manageSequencer 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"hyperGraphPanel\" (localizedPanelLabel(\"Hypergraph Hierarchy\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Hypergraph Hierarchy\")) -mbv $menusOkayInPanels $panelName;\n" + + "\n\t\t\t$editorName = ($panelName+\"HyperGraphEd\");\n hyperGraph -e \n -graphLayoutStyle \"hierarchicalLayout\" \n -orientation \"horiz\" \n -mergeConnections 0\n -zoom 1\n -animateTransition 0\n -showRelationships 1\n -showShapes 0\n -showDeformers 0\n -showExpressions 0\n -showConstraints 0\n -showConnectionFromSelected 0\n -showConnectionToSelected 0\n -showConstraintLabels 0\n -showUnderworld 0\n -showInvisible 0\n -transitionFrames 1\n -opaqueContainers 0\n -freeform 0\n -imagePosition 0 0 \n -imageScale 1\n -imageEnabled 0\n -graphType \"DAG\" \n -heatMapDisplay 0\n -updateSelection 1\n -updateNodeAdded 1\n -useDrawOverrideColor 0\n -limitGraphTraversal -1\n" + + " -range 0 0 \n -iconSize \"smallIcons\" \n -showCachedConnections 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"hyperShadePanel\" (localizedPanelLabel(\"Hypershade\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Hypershade\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"visorPanel\" (localizedPanelLabel(\"Visor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Visor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"nodeEditorPanel\" (localizedPanelLabel(\"Node Editor\")) `;\n\tif ($nodeEditorPanelVisible || $nodeEditorWorkspaceControlOpen) {\n" + + "\t\tif (\"\" == $panelName) {\n\t\t\tif ($useSceneConfig) {\n\t\t\t\t$panelName = `scriptedPanel -unParent -type \"nodeEditorPanel\" -l (localizedPanelLabel(\"Node Editor\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"NodeEditorEd\");\n nodeEditor -e \n -allAttributes 0\n -allNodes 0\n -autoSizeNodes 1\n -consistentNameSize 1\n -createNodeCommand \"nodeEdCreateNodeCommand\" \n -connectNodeOnCreation 0\n -connectOnDrop 0\n -copyConnectionsOnPaste 0\n -connectionStyle \"bezier\" \n -defaultPinnedState 0\n -additiveGraphingMode 0\n -connectedGraphingMode 1\n -settingsChangedCallback \"nodeEdSyncControls\" \n -traversalDepthLimit -1\n -keyPressCommand \"nodeEdKeyPressCommand\" \n -nodeTitleMode \"name\" \n -gridSnap 0\n -gridVisibility 1\n -crosshairOnEdgeDragging 0\n" + + " -popupMenuScript \"nodeEdBuildPanelMenus\" \n -showNamespace 1\n -showShapes 1\n -showSGShapes 0\n -showTransforms 1\n -useAssets 1\n -syncedSelection 1\n -extendToShapes 1\n -showUnitConversions 0\n -editorMode \"default\" \n -hasWatchpoint 0\n $editorName;\n\t\t\t}\n\t\t} else {\n\t\t\t$label = `panel -q -label $panelName`;\n\t\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Node Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"NodeEditorEd\");\n nodeEditor -e \n -allAttributes 0\n -allNodes 0\n -autoSizeNodes 1\n -consistentNameSize 1\n -createNodeCommand \"nodeEdCreateNodeCommand\" \n -connectNodeOnCreation 0\n -connectOnDrop 0\n -copyConnectionsOnPaste 0\n -connectionStyle \"bezier\" \n -defaultPinnedState 0\n" + + " -additiveGraphingMode 0\n -connectedGraphingMode 1\n -settingsChangedCallback \"nodeEdSyncControls\" \n -traversalDepthLimit -1\n -keyPressCommand \"nodeEdKeyPressCommand\" \n -nodeTitleMode \"name\" \n -gridSnap 0\n -gridVisibility 1\n -crosshairOnEdgeDragging 0\n -popupMenuScript \"nodeEdBuildPanelMenus\" \n -showNamespace 1\n -showShapes 1\n -showSGShapes 0\n -showTransforms 1\n -useAssets 1\n -syncedSelection 1\n -extendToShapes 1\n -showUnitConversions 0\n -editorMode \"default\" \n -hasWatchpoint 0\n $editorName;\n\t\t\tif (!$useSceneConfig) {\n\t\t\t\tpanel -e -l $label $panelName;\n\t\t\t}\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"createNodePanel\" (localizedPanelLabel(\"Create Node\")) `;\n\tif (\"\" != $panelName) {\n" + + "\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Create Node\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"polyTexturePlacementPanel\" (localizedPanelLabel(\"UV Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"UV Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"renderWindowPanel\" (localizedPanelLabel(\"Render View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Render View\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"shapePanel\" (localizedPanelLabel(\"Shape Editor\")) `;\n\tif (\"\" != $panelName) {\n" + + "\t\t$label = `panel -q -label $panelName`;\n\t\tshapePanel -edit -l (localizedPanelLabel(\"Shape Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"posePanel\" (localizedPanelLabel(\"Pose Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tposePanel -edit -l (localizedPanelLabel(\"Pose Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dynRelEdPanel\" (localizedPanelLabel(\"Dynamic Relationships\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Dynamic Relationships\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"relationshipPanel\" (localizedPanelLabel(\"Relationship Editor\")) `;\n" + + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Relationship Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"referenceEditorPanel\" (localizedPanelLabel(\"Reference Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Reference Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dynPaintScriptedPanelType\" (localizedPanelLabel(\"Paint Effects\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Paint Effects\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"scriptEditorPanel\" (localizedPanelLabel(\"Script Editor\")) `;\n" + + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Script Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"profilerPanel\" (localizedPanelLabel(\"Profiler Tool\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Profiler Tool\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"contentBrowserPanel\" (localizedPanelLabel(\"Content Browser\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Content Browser\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"Stereo\" (localizedPanelLabel(\"Stereo\")) `;\n" + + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Stereo\")) -mbv $menusOkayInPanels $panelName;\n{ string $editorName = ($panelName+\"Editor\");\n stereoCameraView -e \n -camera \"|persp\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"wireframe\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 1\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n" + + " -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 4 4 \n -bumpResolution 4 4 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 0\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n" + + " -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n" + + " -clipGhosts 1\n -bluePencil 1\n -greasePencils 0\n -shadows 0\n -captureSequenceNumber -1\n -width 0\n -height 0\n -sceneRenderFilter 0\n -displayMode \"centerEye\" \n -viewColor 0 0 0 1 \n -useCustomBackground 1\n $editorName;\n stereoCameraView -e -viewSelected 0 $editorName; };\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\tif ($useSceneConfig) {\n string $configName = `getPanel -cwl (localizedPanelLabel(\"Current Layout\"))`;\n if (\"\" != $configName) {\n\t\t\tpanelConfiguration -edit -label (localizedPanelLabel(\"Current Layout\")) \n\t\t\t\t-userCreated false\n\t\t\t\t-defaultImage \"vacantCell.xP:/\"\n\t\t\t\t-image \"\"\n\t\t\t\t-sc false\n\t\t\t\t-configString \"global string $gMainPane; paneLayout -e -cn \\\"single\\\" -ps 1 100 100 $gMainPane;\"\n\t\t\t\t-removeAllPanels\n\t\t\t\t-ap false\n\t\t\t\t\t(localizedPanelLabel(\"Persp View\")) \n\t\t\t\t\t\"modelPanel\"\n" + + "\t\t\t\t\t\"$panelName = `modelPanel -unParent -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels `;\\n$editorName = $panelName;\\nmodelEditor -e \\n -camera \\\"|persp1\\\" \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 16384\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -controllers 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -bluePencil 1\\n -greasePencils 0\\n -shadows 0\\n -captureSequenceNumber -1\\n -width 1007\\n -height 733\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName\"\n" + + "\t\t\t\t\t\"modelPanel -edit -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels $panelName;\\n$editorName = $panelName;\\nmodelEditor -e \\n -camera \\\"|persp1\\\" \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 16384\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -controllers 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -bluePencil 1\\n -greasePencils 0\\n -shadows 0\\n -captureSequenceNumber -1\\n -width 1007\\n -height 733\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName\"\n" + "\t\t\t\t$configName;\n\n setNamedPanelLayout (localizedPanelLabel(\"Current Layout\"));\n }\n\n panelHistory -e -clear mainPanelHistory;\n sceneUIReplacement -clear;\n\t}\n\n\ngrid -spacing 5 -size 12 -divisions 5 -displayAxes yes -displayGridLines yes -displayDivisionLines yes -displayPerspectiveLabels no -displayOrthographicLabels no -displayAxesBold yes -perspectiveLabelPosition axis -orthographicLabelPosition edge;\nviewManip -drawCompass 0 -compassAngle 0 -frontParameters \"\" -homeParameters \"\" -selectionLockParameters \"\";\n}\n"); setAttr ".st" 3; createNode script -n "sceneConfigurationScriptNode"; @@ -232,12 +258,13 @@ createNode polyDisc -n "polyDisc1"; rename -uid "9ED8A7BD-4FFD-6107-4322-35ACD1D3AC42"; createNode aiOptions -s -n "defaultArnoldRenderOptions"; rename -uid "51BB3D7A-4C7D-FCDD-1B21-D89934107F98"; - setAttr ".version" -type "string" "5.3.1"; + setAttr ".skip_license_check" yes; createNode aiAOVFilter -s -n "defaultArnoldFilter"; rename -uid "989A5992-46C8-0CB2-B2B8-4E868F31FEA8"; setAttr ".ai_translator" -type "string" "gaussian"; createNode aiAOVDriver -s -n "defaultArnoldDriver"; rename -uid "B8469AD8-47C8-9EF1-FE5E-5AB50ABC1536"; + setAttr ".merge_AOVs" yes; setAttr ".ai_translator" -type "string" "exr"; createNode aiAOVDriver -s -n "defaultArnoldDisplayDriver"; rename -uid "21D4F4CD-4D78-001C-610D-798402CD7CF0"; @@ -245,6 +272,7 @@ createNode aiAOVDriver -s -n "defaultArnoldDisplayDriver"; setAttr ".ai_translator" -type "string" "maya"; createNode objectSet -n "workfileMain"; rename -uid "3C9B5D6F-4579-8E3B-5B7D-4C88865A1C68"; + addAttr -ci true -sn "cbId" -ln "cbId" -dt "string"; addAttr -ci true -sn "id" -ln "id" -dt "string"; addAttr -ci true -sn "family" -ln "family" -dt "string"; addAttr -ci true -sn "subset" -ln "subset" -dt "string"; @@ -255,23 +283,92 @@ createNode objectSet -n "workfileMain"; addAttr -ci true -sn "task" -ln "task" -dt "string"; addAttr -ci true -sn "instance_id" -ln "instance_id" -dt "string"; addAttr -ci true -sn "publish_attributes" -ln "publish_attributes" -dt "string"; - addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" + addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" -dt "string"; - addAttr -ci true -sn "cbId" -ln "cbId" -dt "string"; setAttr ".ihi" 0; setAttr ".hio" yes; + setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:30d256dac64c"; setAttr ".id" -type "string" "pyblish.avalon.instance"; setAttr ".family" -type "string" "workfile"; - setAttr ".subset" -type "string" "workfileTestTask"; + setAttr ".subset" -type "string" "workfileTest_task"; setAttr -cb on ".active" yes; setAttr ".creator_identifier" -type "string" "io.openpype.creators.maya.workfile"; setAttr ".variant" -type "string" "Main"; setAttr ".asset" -type "string" "test_asset"; - setAttr ".task" -type "string" "TestTask"; + setAttr ".task" -type "string" "test_task"; setAttr ".instance_id" -type "string" "911dc92a-ad29-41e5-bbf9-733d56174fb9"; setAttr ".publish_attributes" -type "string" "{\"ExtractImportReference\": {\"active\": false}}"; setAttr ".__creator_attributes_keys" -type "string" ""; - setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:30d256dac64c"; +createNode objectSet -n "renderingMain"; + rename -uid "8A999C2F-4922-B15D-8D5C-45A16465B69F"; + addAttr -ci true -sn "pre_creator_identifier" -ln "pre_creator_identifier" -dt "string"; + addAttr -ci true -sn "cbId" -ln "cbId" -dt "string"; + setAttr ".ihi" 0; + setAttr ".pre_creator_identifier" -type "string" "io.openpype.creators.maya.renderlayer"; + setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:042447475732"; +createNode renderSetupLayer -n "Main"; + rename -uid "2202E438-4CEF-F64E-737C-F48C65E31126"; + addAttr -ci true -sn "es" -ln "expandedState" -min 0 -max 1 -at "bool"; + setAttr ".es" yes; +createNode renderLayer -n "rs_Main"; + rename -uid "DF0259B1-4F96-DA7E-C74F-B599FBE15C18"; + setAttr ".do" 1; +createNode collection -n "defaultCollection"; + rename -uid "E5014237-4DA9-6FC0-633D-69AFA56161B3"; + addAttr -ci true -sn "es" -ln "expandedState" -min 0 -max 1 -at "bool"; + setAttr ".es" yes; +createNode simpleSelector -n "defaultCollectionSelector"; + rename -uid "7CA2F6D8-483C-B020-BC03-EF9563A52163"; + setAttr ".pat" -type "string" "*"; +createNode objectSet -n "_renderingMain:Main"; + rename -uid "1EEC3A3B-49CF-0C79-5340-39805174FB8A"; + addAttr -s false -ci true -sn "renderlayer" -ln "renderlayer" -at "message"; + addAttr -ci true -sn "id" -ln "id" -dt "string"; + addAttr -ci true -sn "family" -ln "family" -dt "string"; + addAttr -ci true -sn "subset" -ln "subset" -dt "string"; + addAttr -ci true -sn "active" -ln "active" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "creator_identifier" -ln "creator_identifier" -dt "string"; + addAttr -ci true -sn "variant" -ln "variant" -dt "string"; + addAttr -ci true -sn "asset" -ln "asset" -dt "string"; + addAttr -ci true -sn "task" -ln "task" -dt "string"; + addAttr -ci true -sn "instance_id" -ln "instance_id" -dt "string"; + addAttr -ci true -sn "review" -ln "review" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "extendFrames" -ln "extendFrames" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "overrideExistingFrame" -ln "overrideExistingFrame" -min 0 + -max 1 -at "bool"; + addAttr -ci true -sn "tileRendering" -ln "tileRendering" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "tilesX" -ln "tilesX" -at "long"; + addAttr -ci true -sn "tilesY" -ln "tilesY" -at "long"; + addAttr -ci true -sn "convertToScanline" -ln "convertToScanline" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "useReferencedAovs" -ln "useReferencedAovs" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "renderSetupIncludeLights" -ln "renderSetupIncludeLights" -min + 0 -max 1 -at "bool"; + addAttr -ci true -sn "publish_attributes" -ln "publish_attributes" -dt "string"; + addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" + -dt "string"; + addAttr -ci true -sn "cbId" -ln "cbId" -dt "string"; + setAttr ".ihi" 0; + setAttr ".id" -type "string" "pyblish.avalon.instance"; + setAttr ".family" -type "string" "renderlayer"; + setAttr ".subset" -type "string" "renderMain"; + setAttr -cb on ".active" yes; + setAttr ".creator_identifier" -type "string" "io.openpype.creators.maya.renderlayer"; + setAttr ".variant" -type "string" "Main"; + setAttr ".asset" -type "string" "test_asset"; + setAttr ".task" -type "string" "test_task"; + setAttr ".instance_id" -type "string" "8a9cfb85-9602-4e5e-a4bc-27a2986bae7f"; + setAttr -cb on ".review" yes; + setAttr -cb on ".extendFrames"; + setAttr -cb on ".overrideExistingFrame" yes; + setAttr -cb on ".tileRendering"; + setAttr -cb on ".tilesX" 2; + setAttr -cb on ".tilesY" 2; + setAttr -cb on ".convertToScanline"; + setAttr -cb on ".useReferencedAovs"; + setAttr -cb on ".renderSetupIncludeLights" yes; + setAttr ".publish_attributes" -type "string" "{\"CollectDeadlinePools\": {\"primaryPool\": \"\", \"secondaryPool\": \"\"}, \"ValidateDeadlinePools\": {\"active\": true}, \"ValidateFrameRange\": {\"active\": true}, \"ExtractImportReference\": {\"active\": false}, \"MayaSubmitDeadline\": {\"priority\": 50, \"chunkSize\": 1, \"machineList\": \"\", \"whitelist\": false, \"tile_priority\": 50, \"strict_error_checking\": true}, \"ProcessSubmittedJobOnFarm\": {\"publishJobState\": \"Active\"}}"; + setAttr ".__creator_attributes_keys" -type "string" "review,extendFrames,overrideExistingFrame,tileRendering,tilesX,tilesY,convertToScanline,useReferencedAovs,renderSetupIncludeLights"; + setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:69960f336351"; select -ne :time1; setAttr ".o" 1001; setAttr ".unw" 1001; @@ -289,6 +386,7 @@ select -ne :defaultShaderList1; select -ne :postProcessList1; setAttr -s 2 ".p"; select -ne :defaultRenderingList1; + setAttr -s 2 ".r"; select -ne :standardSurface1; setAttr ".b" 0.80000001192092896; setAttr ".bc" -type "float3" 1 1 1 ; @@ -301,13 +399,27 @@ select -ne :initialParticleSE; select -ne :defaultRenderGlobals; addAttr -ci true -h true -sn "dss" -ln "defaultSurfaceShader" -dt "string"; setAttr ".ren" -type "string" "arnold"; + setAttr ".outf" 51; + setAttr ".imfkey" -type "string" "exr"; + setAttr ".an" yes; setAttr ".fs" 1001; setAttr ".ef" 1001; + setAttr ".oft" -type "string" ""; + setAttr ".pff" yes; + setAttr ".ifp" -type "string" "//"; + setAttr ".rv" -type "string" ""; + setAttr ".pram" -type "string" ""; + setAttr ".poam" -type "string" ""; + setAttr ".prlm" -type "string" ""; + setAttr ".polm" -type "string" ""; + setAttr ".prm" -type "string" ""; + setAttr ".pom" -type "string" ""; setAttr ".dss" -type "string" "lambert1"; select -ne :defaultResolution; setAttr ".w" 1920; setAttr ".h" 1080; setAttr ".pa" 1; + setAttr ".dar" 1.7777777910232544; select -ne :defaultColorMgtGlobals; setAttr ".cfe" yes; setAttr ".cfp" -type "string" "/OCIO-configs/Maya-legacy/config.ocio"; @@ -322,22 +434,40 @@ select -ne :defaultColorMgtGlobals; select -ne :hardwareRenderGlobals; setAttr ".ctrs" 256; setAttr ".btrs" 512; -select -ne :ikSystem; - setAttr -s 4 ".sol"; +connectAttr "rs_Main.ri" ":persp.rlio[0]"; +connectAttr "rs_Main.ri" ":top.rlio[0]"; +connectAttr "rs_Main.ri" ":front.rlio[0]"; +connectAttr "rs_Main.ri" ":side.rlio[0]"; +connectAttr "rs_Main.ri" "pSphere1_GEO.rlio[0]"; connectAttr "polySphere1.out" "pSphere1_GEOShape1.i"; +connectAttr "rs_Main.ri" "pDisc1.rlio[0]"; connectAttr "polyDisc1.output" "pDiscShape1.i"; +connectAttr "rs_Main.ri" "persp1.rlio[0]"; relationship "link" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message"; relationship "link" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message"; relationship "shadowLink" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message"; relationship "shadowLink" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message"; connectAttr "layerManager.dli[0]" "defaultLayer.id"; connectAttr "renderLayerManager.rlmi[0]" "defaultRenderLayer.rlid"; +connectAttr "Main.msg" "renderSetup.frl"; +connectAttr "Main.msg" "renderSetup.lrl"; connectAttr "pSphere1_GEO.iog" "modelMain.dsm" -na; connectAttr ":defaultArnoldDisplayDriver.msg" ":defaultArnoldRenderOptions.drivers" -na; connectAttr ":defaultArnoldFilter.msg" ":defaultArnoldRenderOptions.filt"; connectAttr ":defaultArnoldDriver.msg" ":defaultArnoldRenderOptions.drvr"; +connectAttr "_renderingMain:Main.msg" "renderingMain.dnsm" -na; +connectAttr "rs_Main.msg" "Main.lrl"; +connectAttr "renderSetup.lit" "Main.pls"; +connectAttr "defaultCollection.msg" "Main.cl"; +connectAttr "defaultCollection.msg" "Main.ch"; +connectAttr "renderLayerManager.rlmi[1]" "rs_Main.rlid"; +connectAttr "defaultCollectionSelector.c" "defaultCollection.sel"; +connectAttr "Main.lit" "defaultCollection.pls"; +connectAttr "Main.nic" "defaultCollection.pic"; +connectAttr "Main.msg" "_renderingMain:Main.renderlayer"; connectAttr "defaultRenderLayer.msg" ":defaultRenderingList1.r" -na; +connectAttr "rs_Main.msg" ":defaultRenderingList1.r" -na; connectAttr "pSphere1_GEOShape1.iog" ":initialShadingGroup.dsm" -na; connectAttr "pDiscShape1.iog" ":initialShadingGroup.dsm" -na; // End of test_project_test_asset_test_task_v001.ma diff --git a/tests/integration/hosts/maya/test_publish_in_maya/test_publish_in_maya.py b/tests/integration/hosts/maya/test_publish_in_maya/test_publish_in_maya.py index 69b19b11aac..46b63dab172 100644 --- a/tests/integration/hosts/maya/test_publish_in_maya/test_publish_in_maya.py +++ b/tests/integration/hosts/maya/test_publish_in_maya/test_publish_in_maya.py @@ -1,14 +1,10 @@ import os -import re -import shutil - -import pytest from tests.lib.assert_classes import DBAssert -from tests.integration.hosts.maya.lib import MayaLocalPublishTestClass +from tests.integration.hosts.maya.lib import MayaPublishTest -class TestPublishInMaya(MayaLocalPublishTestClass): +class TestPublishInMaya(MayaPublishTest): """Basic test case for publishing in Maya Shouldnt be running standalone only via 'runtests' pype command! (??) @@ -31,194 +27,120 @@ class TestPublishInMaya(MayaLocalPublishTestClass): """ PERSIST = False - # By default run through mayapy. For interactive mode, change to "maya" or - # input `--app_group maya` in cli. - APP_GROUP = "mayapy" - - # By default running latest version of Maya. - APP_VARIANT = "" - - TIMEOUT = 120 # publish timeout - INPUT_DUMPS = os.path.join( os.path.dirname(__file__), "input", "dumps" ) INPUT_ENVIRONMENT_JSON = os.path.join( os.path.dirname(__file__), "input", "env_vars", "env_var.json" ) + INPUT_WORKFILE = os.path.join( + os.path.dirname(__file__), "input", "workfile" + ) FILES = [ ("1BTSIIULJTuDc8VvXseuiJV_fL6-Bu7FP", "test_maya_publish.zip", "") ] - def running_in_mayapy(self, app_group): - app_group = app_group or self.APP_GROUP - - # Running in mayapy. - if app_group == "mayapy": - return True - - # Running in maya. - return False + def test_db_asserts(self, dbcon, deadline_finished): + """Host and input data dependent expected results in DB.""" + print("test_db_asserts") + asserts = [] + asserts.append(DBAssert.count_of_types(dbcon, "version", 3)) - def get_usersetup_path(self): - return os.path.join( - os.path.dirname(__file__), "input", "startup", "userSetup.py" + asserts.append( + DBAssert.count_of_types(dbcon, "version", 0, name={"$ne": 1}) ) - @pytest.fixture(scope="module") - def app_args(self, app_group, app_variant): - # We should try and support 2020? - # Current issue is "-I" argument does not exist for 2020 and start up - # issues with color management. - msg = "Maya 2020 and below is not supported for testing." - assert int(app_variant) > 2020, msg - - args = [] - if self.running_in_mayapy(app_group): - args = ["-I", self.get_usersetup_path()] - - yield args - - @pytest.fixture(scope="module") - def start_last_workfile(self, app_group): - """Returns url of workfile""" - return not self.running_in_mayapy(app_group) - - @pytest.fixture(scope="module") - def last_workfile_path(self, setup_fixture): - """Get last_workfile_path from source data. - - Maya expects workfile in proper folder, so copy is done first. - """ - _, output_folder, _ = setup_fixture - - src_path = os.path.join( - os.path.dirname(__file__), - "input", - "workfile", - "test_project_test_asset_test_task_v001.ma" - ) - dest_folder = os.path.join( - output_folder, - self.PROJECT_NAME, - self.ASSET_NAME, - "work", - self.TASK_NAME + asserts.append( + DBAssert.count_of_types(dbcon, "subset", 1, name="modelMain") ) - os.makedirs(dest_folder) - dest_path = os.path.join( - dest_folder, "test_project_test_asset_test_task_v001.ma" + + asserts.append( + DBAssert.count_of_types( + dbcon, "subset", 1, name="workfileTest_task" + ) ) - shutil.copy(src_path, dest_path) - yield dest_path + asserts.append(DBAssert.count_of_types(dbcon, "representation", 8)) - def get_log_path(self, dirpath, app_variant): - return os.path.join( - dirpath, "output_{}.log".format(app_variant) + asserts.append( + DBAssert.count_of_types( + dbcon, + "representation", + 2, + additional_args={ + "context.subset": "modelMain", "context.ext": "abc" + } + ) ) - @pytest.fixture(scope="module") - def startup_scripts( - self, monkeypatch_session, setup_fixture, app_group, app_variant - ): - data_folder, _, _ = setup_fixture - - """Points Maya to userSetup file from input data""" - if not self.running_in_mayapy(app_group): - # Not needed for running MayaPy since the testing userSetup.py will - # be passed in directly to the executable. - original_pythonpath = os.environ.get("PYTHONPATH") - monkeypatch_session.setenv( - "PYTHONPATH", - "{}{}{}".format( - os.path.dirname(self.get_usersetup_path()), - os.pathsep, - original_pythonpath - ) + asserts.append( + DBAssert.count_of_types( + dbcon, + "representation", + 2, + additional_args={ + "context.subset": "modelMain", "context.ext": "ma" + } ) - - monkeypatch_session.setenv( - "MAYA_CMD_FILE_OUTPUT", - self.get_log_path(data_folder, app_variant) ) - @pytest.fixture(scope="module") - def skip_compare_folders(self): - pass - - def test_publish( - self, - dbcon, - publish_finished, - setup_fixture, - app_variant - ): - data_folder, _, _ = setup_fixture - - logging_path = self.get_log_path(data_folder, app_variant) - with open(logging_path, "r") as f: - logging_output = f.read() - - print(logging_output) - print(publish_finished) - - # Check for pyblish errors. - error_regex = r"pyblish \(ERROR\)((.|\n)*)" - matches = re.findall(error_regex, logging_output) - assert not matches, matches[0][0] - - matches = re.findall(error_regex, publish_finished) - assert not matches, matches[0][0] - - # Check for python errors. - error_regex = r"// Error((.|\n)*)" - matches = re.findall(error_regex, logging_output) - assert not matches, matches[0][0] - - def test_db_asserts( - self, - dbcon, - publish_finished - ): - """Host and input data dependent expected results in DB.""" - print("test_db_asserts") - failures = [] - failures.append(DBAssert.count_of_types(dbcon, "version", 2)) - - failures.append( - DBAssert.count_of_types(dbcon, "version", 0, name={"$ne": 1})) - - failures.append( - DBAssert.count_of_types(dbcon, "subset", 1, - name="modelMain")) - - failures.append( - DBAssert.count_of_types(dbcon, "subset", 1, - name="workfileTest_task")) + asserts.append( + DBAssert.count_of_types( + dbcon, + "representation", + 1, + additional_args={ + "context.subset": "workfileTest_task", "context.ext": "ma" + } + ) + ) - failures.append(DBAssert.count_of_types(dbcon, "representation", 5)) + asserts.append( + DBAssert.count_of_types( + dbcon, "subset", 1, name="renderTest_taskRenderMain_beauty" + ) + ) - additional_args = {"context.subset": "modelMain", - "context.ext": "abc"} - failures.append( - DBAssert.count_of_types(dbcon, "representation", 2, - additional_args=additional_args)) + asserts.append( + DBAssert.count_of_types( + dbcon, + "representation", + 1, + additional_args={ + "context.subset": "renderTest_taskRenderMain_beauty", + "context.ext": "exr" + } + ) + ) - additional_args = {"context.subset": "modelMain", - "context.ext": "ma"} - failures.append( - DBAssert.count_of_types(dbcon, "representation", 2, - additional_args=additional_args)) + asserts.append( + DBAssert.count_of_types( + dbcon, + "representation", + 1, + additional_args={ + "context.subset": "renderTest_taskRenderMain_beauty", + "context.ext": "jpg" + } + ) + ) - additional_args = {"context.subset": "workfileTest_task", - "context.ext": "ma"} - failures.append( - DBAssert.count_of_types(dbcon, "representation", 1, - additional_args=additional_args)) + asserts.append( + DBAssert.count_of_types( + dbcon, + "representation", + 1, + additional_args={ + "context.subset": "renderTest_taskRenderMain_beauty", + "context.ext": "png" + } + ) + ) - assert not any(failures) + failures = [x for x in asserts if x is not None] + msg = "Failures:\n" + "\n".join(failures) + assert not failures, msg if __name__ == "__main__": diff --git a/tests/lib/assert_classes.py b/tests/lib/assert_classes.py index 9a94f89fd0a..ffe85f471dc 100644 --- a/tests/lib/assert_classes.py +++ b/tests/lib/assert_classes.py @@ -33,17 +33,16 @@ def count_of_types(cls, dbcon, queried_type, expected, **kwargs): detail_str = " with '{}'".format(args) if expected != no_of_docs: - msg = "Not expected no of '{}'{}."\ - "Expected {}, found {}".format(queried_type, - detail_str, - expected, no_of_docs) + msg = "{}{}".format(queried_type, detail_str) status = "successful" if msg: status = "failed" - print("Comparing count of {}{} {}".format(queried_type, - detail_str, - status)) + print( + "Comparing count of {}{} {}".format( + queried_type, detail_str, status + ) + ) return msg diff --git a/tests/lib/database_handler.py b/tests/lib/database_handler.py index 3aee38ec7d6..490eca2d488 100644 --- a/tests/lib/database_handler.py +++ b/tests/lib/database_handler.py @@ -143,7 +143,7 @@ def setup_from_dump( queries = [] if bson_files: - queries.apend( + queries.append( self._restore_query( self.uri, dump_dir, diff --git a/tests/lib/testing_classes.py b/tests/lib/testing_classes.py index 7188bc85d3d..652cdcb10ba 100644 --- a/tests/lib/testing_classes.py +++ b/tests/lib/testing_classes.py @@ -12,7 +12,7 @@ import re import subprocess import zipfile -import collections +import time from tests.lib.database_handler import DataBaseHandler from common.ayon_common.distribution.file_handler import RemoteFileHandler @@ -52,6 +52,7 @@ class ModuleUnitTest(BaseTest): DATA_FOLDER = None INPUT_DUMPS = None INPUT_ENVIRONMENT_JSON = None + INPUT_WORKFILE = None FILES = [] @@ -95,8 +96,8 @@ def setup_only(cls, data_folder, openpype_mongo, app_variant): if zip_name.startswith(name): zip.extract(zip_name, data_folder) else: - print("Temporary folder created: {}".format(data_folder)) data_folder = tempfile.mkdtemp() + print("Temporary folder created: {}".format(data_folder)) for test_file in cls.FILES: file_id, file_name, md5 = test_file @@ -119,7 +120,7 @@ def setup_only(cls, data_folder, openpype_mongo, app_variant): database_handler = DataBaseHandler(openpype_mongo) backup_directory = ( - cls.INPUT_DUMPS or cls.get_backup_directory(data_folder) + cls.INPUT_DUMPS or cls.get_backup_directory(cls, data_folder) ) for _, data in cls.DATABASE_NAMES.items(): @@ -227,7 +228,7 @@ def environment_setup( input_environment_json ) ) - + print("Loading " + input_environment_json) env_dict = {} try: with open(input_environment_json) as json_file: @@ -332,7 +333,7 @@ class PublishTest(ModuleUnitTest): APP_GROUP = "" - TIMEOUT = 120 # publish timeout + TIMEOUT = 240 # publish timeout # could be overwritten by command line arguments # command line value takes precedence @@ -342,8 +343,6 @@ class PublishTest(ModuleUnitTest): PERSIST = True # True - keep test_db, test_openpype, outputted test files DATA_FOLDER = None # use specific folder of unzipped test file - SETUP_ONLY = False - def app_variants(self, app_group, app_variant): app_variants = [] @@ -544,26 +543,24 @@ def _filter_files(self, source_files, skip_compare_folders): return filtered - -class DeadlinePublishTest(PublishTest): @pytest.fixture(scope="module") - def publish_finished(self, dbcon, launched_app, setup_fixture, - timeout): + def deadline_finished( + self, + dbcon, + launched_app, + setup_fixture, + timeout, + publish_finished, + app_variant + ): """Dummy fixture waiting for publish to finish""" - import time - time_start = time.time() - timeout = timeout or self.TIMEOUT - timeout = float(timeout) - while launched_app.poll() is None: - time.sleep(0.5) - if time.time() - time_start > timeout: - launched_app.terminate() - raise ValueError("Timeout reached") - metadata_json = glob.glob(os.path.join(setup_fixture, - "output", - "**/*_metadata.json"), - recursive=True) + data_folder, _, _ = setup_fixture + + metadata_json = glob.glob( + os.path.join(data_folder, "output_" + app_variant, "**/*_metadata.json"), + recursive=True + ) if not metadata_json: raise RuntimeError("No metadata file found. No job id.") @@ -587,10 +584,11 @@ def publish_finished(self, dbcon, launched_app, setup_fixture, valid_date_finished = None time_start = time.time() + timeout = timeout or self.TIMEOUT while not valid_date_finished: time.sleep(0.5) if time.time() - time_start > timeout: - raise ValueError("Timeout for DL finish reached") + raise ValueError("Timeout for Deadline finish reached") response = requests.get(url, timeout=10) if not response.ok: @@ -600,18 +598,35 @@ def publish_finished(self, dbcon, launched_app, setup_fixture, if not response.json(): raise ValueError("Couldn't find {}".format(deadline_job_id)) + errors = [] + resp_error = requests.get( + "{}/api/jobreports?JobID={}&Data=allerrorcontents".format( + deadline_url, deadline_job_id + ), + timeout=10 + ) + errors.extend(resp_error.json()) + for dependency in response.json()[0]["Props"]["Dep"]: + resp_error = requests.get( + "{}/api/jobreports?JobID={}&Data=allerrorcontents".format( + deadline_url, dependency["JobID"] + ), + timeout=10 + ) + errors.extend(resp_error.json()) + + msg = "Errors in Deadline:\n" + msg += "\n".join(errors) + assert not errors, msg + # "0001-..." returned until job is finished valid_date_finished = response.json()[0]["DateComp"][:4] != "0001" - # some clean exit test possible? - print("Publish finished") - yield True - class HostFixtures(): """Host specific fixtures. Should be implemented once per host.""" @pytest.fixture(scope="module") - def last_workfile_path(self, setup_fixture, output_folder): + def last_workfile_path(self, setup_fixture): """Returns url of workfile""" raise NotImplementedError From 8174256166cf2ed7e8cce0715c16225dc147272f Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Tue, 1 Aug 2023 10:18:13 +0100 Subject: [PATCH 35/69] Initial working Deadline Maya testing --- .../avalon_tests/avalon_tests.test_project.json | 1 - .../dumps/openpype_tests/openpype_tests.logs.json | 1 - .../test_project_test_asset_test_task_v001.ma | 12 ++++++------ 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/tests/integration/hosts/maya/test_publish_in_maya/input/dumps/avalon_tests/avalon_tests.test_project.json b/tests/integration/hosts/maya/test_publish_in_maya/input/dumps/avalon_tests/avalon_tests.test_project.json index 1a71b6ce09e..5a55e1d5e2d 100644 --- a/tests/integration/hosts/maya/test_publish_in_maya/input/dumps/avalon_tests/avalon_tests.test_project.json +++ b/tests/integration/hosts/maya/test_publish_in_maya/input/dumps/avalon_tests/avalon_tests.test_project.json @@ -323,4 +323,3 @@ } } }] - diff --git a/tests/integration/hosts/maya/test_publish_in_maya/input/dumps/openpype_tests/openpype_tests.logs.json b/tests/integration/hosts/maya/test_publish_in_maya/input/dumps/openpype_tests/openpype_tests.logs.json index 9aeaba16d19..4149f42bd68 100644 --- a/tests/integration/hosts/maya/test_publish_in_maya/input/dumps/openpype_tests/openpype_tests.logs.json +++ b/tests/integration/hosts/maya/test_publish_in_maya/input/dumps/openpype_tests/openpype_tests.logs.json @@ -148,4 +148,3 @@ "system_name": "Windows", "process_name": "Tray" }] - diff --git a/tests/integration/hosts/maya/test_publish_in_maya/input/workfile/test_project_test_asset_test_task_v001.ma b/tests/integration/hosts/maya/test_publish_in_maya/input/workfile/test_project_test_asset_test_task_v001.ma index 61a75d1cc3f..75f8f022fc7 100644 --- a/tests/integration/hosts/maya/test_publish_in_maya/input/workfile/test_project_test_asset_test_task_v001.ma +++ b/tests/integration/hosts/maya/test_publish_in_maya/input/workfile/test_project_test_asset_test_task_v001.ma @@ -179,12 +179,12 @@ createNode objectSet -n "modelMain"; addAttr -ci true -sn "instance_id" -ln "instance_id" -dt "string"; addAttr -ci true -sn "writeColorSets" -ln "writeColorSets" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "writeFaceSets" -ln "writeFaceSets" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "includeParentHierarchy" -ln "includeParentHierarchy" -min + addAttr -ci true -sn "includeParentHierarchy" -ln "includeParentHierarchy" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "attr" -ln "attr" -dt "string"; addAttr -ci true -sn "attrPrefix" -ln "attrPrefix" -dt "string"; addAttr -ci true -sn "publish_attributes" -ln "publish_attributes" -dt "string"; - addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" + addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" -dt "string"; setAttr ".ihi" 0; setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:7364ea6776c9"; @@ -283,7 +283,7 @@ createNode objectSet -n "workfileMain"; addAttr -ci true -sn "task" -ln "task" -dt "string"; addAttr -ci true -sn "instance_id" -ln "instance_id" -dt "string"; addAttr -ci true -sn "publish_attributes" -ln "publish_attributes" -dt "string"; - addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" + addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" -dt "string"; setAttr ".ihi" 0; setAttr ".hio" yes; @@ -334,17 +334,17 @@ createNode objectSet -n "_renderingMain:Main"; addAttr -ci true -sn "instance_id" -ln "instance_id" -dt "string"; addAttr -ci true -sn "review" -ln "review" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "extendFrames" -ln "extendFrames" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "overrideExistingFrame" -ln "overrideExistingFrame" -min 0 + addAttr -ci true -sn "overrideExistingFrame" -ln "overrideExistingFrame" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "tileRendering" -ln "tileRendering" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "tilesX" -ln "tilesX" -at "long"; addAttr -ci true -sn "tilesY" -ln "tilesY" -at "long"; addAttr -ci true -sn "convertToScanline" -ln "convertToScanline" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "useReferencedAovs" -ln "useReferencedAovs" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "renderSetupIncludeLights" -ln "renderSetupIncludeLights" -min + addAttr -ci true -sn "renderSetupIncludeLights" -ln "renderSetupIncludeLights" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "publish_attributes" -ln "publish_attributes" -dt "string"; - addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" + addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" -dt "string"; addAttr -ci true -sn "cbId" -ln "cbId" -dt "string"; setAttr ".ihi" 0; From 16637222a82dc5fd62ba892f738286036a8e21e5 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Tue, 1 Aug 2023 10:28:38 +0100 Subject: [PATCH 36/69] Code refactor --- .../avalon_tests.test_project.json | 0 .../openpype_tests/openpype_tests.logs.json | 0 .../input/env_vars/env_var.json | 0 .../maya/{ => input}/startup/userSetup.py | 0 .../test_project_test_asset_test_task_v001.ma | 0 tests/integration/hosts/maya/lib.py | 2 +- .../maya/test_deadline_publish_in_maya.py | 106 ------------------ .../test_publish_in_maya.py | 0 8 files changed, 1 insertion(+), 107 deletions(-) rename tests/integration/hosts/maya/{test_publish_in_maya => }/input/dumps/avalon_tests/avalon_tests.test_project.json (100%) rename tests/integration/hosts/maya/{test_publish_in_maya => }/input/dumps/openpype_tests/openpype_tests.logs.json (100%) rename tests/integration/hosts/maya/{test_publish_in_maya => }/input/env_vars/env_var.json (100%) rename tests/integration/hosts/maya/{ => input}/startup/userSetup.py (100%) rename tests/integration/hosts/maya/{test_publish_in_maya => }/input/workfile/test_project_test_asset_test_task_v001.ma (100%) delete mode 100644 tests/integration/hosts/maya/test_deadline_publish_in_maya.py rename tests/integration/hosts/maya/{test_publish_in_maya => }/test_publish_in_maya.py (100%) diff --git a/tests/integration/hosts/maya/test_publish_in_maya/input/dumps/avalon_tests/avalon_tests.test_project.json b/tests/integration/hosts/maya/input/dumps/avalon_tests/avalon_tests.test_project.json similarity index 100% rename from tests/integration/hosts/maya/test_publish_in_maya/input/dumps/avalon_tests/avalon_tests.test_project.json rename to tests/integration/hosts/maya/input/dumps/avalon_tests/avalon_tests.test_project.json diff --git a/tests/integration/hosts/maya/test_publish_in_maya/input/dumps/openpype_tests/openpype_tests.logs.json b/tests/integration/hosts/maya/input/dumps/openpype_tests/openpype_tests.logs.json similarity index 100% rename from tests/integration/hosts/maya/test_publish_in_maya/input/dumps/openpype_tests/openpype_tests.logs.json rename to tests/integration/hosts/maya/input/dumps/openpype_tests/openpype_tests.logs.json diff --git a/tests/integration/hosts/maya/test_publish_in_maya/input/env_vars/env_var.json b/tests/integration/hosts/maya/input/env_vars/env_var.json similarity index 100% rename from tests/integration/hosts/maya/test_publish_in_maya/input/env_vars/env_var.json rename to tests/integration/hosts/maya/input/env_vars/env_var.json diff --git a/tests/integration/hosts/maya/startup/userSetup.py b/tests/integration/hosts/maya/input/startup/userSetup.py similarity index 100% rename from tests/integration/hosts/maya/startup/userSetup.py rename to tests/integration/hosts/maya/input/startup/userSetup.py diff --git a/tests/integration/hosts/maya/test_publish_in_maya/input/workfile/test_project_test_asset_test_task_v001.ma b/tests/integration/hosts/maya/input/workfile/test_project_test_asset_test_task_v001.ma similarity index 100% rename from tests/integration/hosts/maya/test_publish_in_maya/input/workfile/test_project_test_asset_test_task_v001.ma rename to tests/integration/hosts/maya/input/workfile/test_project_test_asset_test_task_v001.ma diff --git a/tests/integration/hosts/maya/lib.py b/tests/integration/hosts/maya/lib.py index d7849da09d5..803e7565d9d 100644 --- a/tests/integration/hosts/maya/lib.py +++ b/tests/integration/hosts/maya/lib.py @@ -25,7 +25,7 @@ def running_in_mayapy(self, app_group): def get_usersetup_path(self): return os.path.join( - os.path.dirname(__file__), "startup", "userSetup.py" + os.path.dirname(__file__), "input", "startup", "userSetup.py" ) def get_log_path(self, dirpath, app_variant): diff --git a/tests/integration/hosts/maya/test_deadline_publish_in_maya.py b/tests/integration/hosts/maya/test_deadline_publish_in_maya.py deleted file mode 100644 index e3f6caa9209..00000000000 --- a/tests/integration/hosts/maya/test_deadline_publish_in_maya.py +++ /dev/null @@ -1,106 +0,0 @@ -import os -import shutil - -import pytest - -from tests.lib.assert_classes import DBAssert -from tests.integration.hosts.maya.lib import MayaDeadlinePublishTestClass - - -class TestDeadlinePublishInMaya(MayaDeadlinePublishTestClass): - """Basic test case for publishing in Maya - - - Always pulls and uses test data from GDrive! - - Opens Maya, runs publish on prepared workile. - - Sends file to be rendered on Deadline. - - Then checks content of DB (if subset, version, representations were - created. - Checks tmp folder if all expected files were published. - - How to run: - (in cmd with activated {OPENPYPE_ROOT}/.venv) - {OPENPYPE_ROOT}/.venv/Scripts/python.exe {OPENPYPE_ROOT}/start.py runtests ../tests/integration/hosts/maya # noqa: E501 - - """ - PERSIST = True - - FILES = [ - ( - "1dDY7CbdFXfRksGVoiuwjhnPoTRCCf5ea", - "test_maya_deadline_publish.zip", - "" - ) - ] - - TIMEOUT = 120 # publish timeout - - def test_db_asserts(self, dbcon, publish_finished): - """Host and input data dependent expected results in DB.""" - print("test_db_asserts") - failures = [] - failures.append(DBAssert.count_of_types(dbcon, "version", 3)) - - failures.append( - DBAssert.count_of_types(dbcon, "version", 0, name={"$ne": 1})) - - failures.append( - DBAssert.count_of_types(dbcon, "subset", 1, - name="modelMain")) - - failures.append( - DBAssert.count_of_types(dbcon, "subset", 1, - name="renderTest_taskMain_beauty")) - - failures.append( - DBAssert.count_of_types(dbcon, "subset", 1, - name="workfileTest_task")) - - failures.append(DBAssert.count_of_types(dbcon, "representation", 8)) - - # hero included - additional_args = {"context.subset": "modelMain", - "context.ext": "abc"} - failures.append( - DBAssert.count_of_types(dbcon, "representation", 2, - additional_args=additional_args)) - - # hero included - additional_args = {"context.subset": "modelMain", - "context.ext": "ma"} - failures.append( - DBAssert.count_of_types(dbcon, "representation", 2, - additional_args=additional_args)) - - additional_args = {"context.subset": "modelMain", - "context.ext": "mb"} - failures.append( - DBAssert.count_of_types(dbcon, "representation", 0, - additional_args=additional_args)) - - additional_args = {"context.subset": "renderTest_taskMain_beauty", - "context.ext": "exr"} - failures.append( - DBAssert.count_of_types(dbcon, "representation", 1, - additional_args=additional_args)) - - additional_args = {"context.subset": "renderTest_taskMain_beauty", - "context.ext": "jpg"} - failures.append( - DBAssert.count_of_types(dbcon, "representation", 1, - additional_args=additional_args)) - - additional_args = {"context.subset": "renderTest_taskMain_beauty", - "context.ext": "png"} - failures.append( - DBAssert.count_of_types(dbcon, "representation", 1, - additional_args=additional_args)) - - assert not any(failures) - - -if __name__ == "__main__": - test_case = TestDeadlinePublishInMaya() diff --git a/tests/integration/hosts/maya/test_publish_in_maya/test_publish_in_maya.py b/tests/integration/hosts/maya/test_publish_in_maya.py similarity index 100% rename from tests/integration/hosts/maya/test_publish_in_maya/test_publish_in_maya.py rename to tests/integration/hosts/maya/test_publish_in_maya.py From 080fa911660876db268b4d1f6ec3963cc66af061 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Tue, 1 Aug 2023 10:47:42 +0100 Subject: [PATCH 37/69] Speed up Deadline testing --- .../plugins/publish/submit_maya_deadline.py | 4 +-- .../plugins/publish/submit_publish_job.py | 3 +- .../test_project_test_asset_test_task_v001.ma | 33 ++++++++++--------- 3 files changed, 21 insertions(+), 19 deletions(-) diff --git a/openpype/modules/deadline/plugins/publish/submit_maya_deadline.py b/openpype/modules/deadline/plugins/publish/submit_maya_deadline.py index 564dc428086..244d7324f65 100644 --- a/openpype/modules/deadline/plugins/publish/submit_maya_deadline.py +++ b/openpype/modules/deadline/plugins/publish/submit_maya_deadline.py @@ -232,7 +232,7 @@ def get_job_info(self): job_info.EnvironmentKeyValue["OPENPYPE_LOG_NO_COLORS"] = "1" # Adding file dependencies. - if self.asset_dependencies: + if not bool(os.environ.get("IS_TEST")) and self.asset_dependencies: dependencies = instance.context.data["fileDependencies"] for dependency in dependencies: job_info.AssetDependency += dependency @@ -579,7 +579,7 @@ def _get_maya_payload(self, data): job_info = copy.deepcopy(self.job_info) - if self.asset_dependencies: + if not bool(os.environ.get("IS_TEST")) and self.asset_dependencies: # Asset dependency to wait for at least the scene file to sync. job_info.AssetDependency += self.scene_path diff --git a/openpype/modules/deadline/plugins/publish/submit_publish_job.py b/openpype/modules/deadline/plugins/publish/submit_publish_job.py index af605b5c27e..991f8c01fe1 100644 --- a/openpype/modules/deadline/plugins/publish/submit_publish_job.py +++ b/openpype/modules/deadline/plugins/publish/submit_publish_job.py @@ -295,7 +295,8 @@ def _submit_deadline_post_job(self, instance, job, instances): job_index)] = assembly_id # noqa: E501 job_index += 1 else: - payload["JobInfo"]["JobDependency0"] = job["_id"] + if not bool(os.environ.get("IS_TEST")): + payload["JobInfo"]["JobDependency0"] = job["_id"] for index, (key_, value_) in enumerate(environment.items()): payload["JobInfo"].update( diff --git a/tests/integration/hosts/maya/input/workfile/test_project_test_asset_test_task_v001.ma b/tests/integration/hosts/maya/input/workfile/test_project_test_asset_test_task_v001.ma index 75f8f022fc7..2f3f55de83e 100644 --- a/tests/integration/hosts/maya/input/workfile/test_project_test_asset_test_task_v001.ma +++ b/tests/integration/hosts/maya/input/workfile/test_project_test_asset_test_task_v001.ma @@ -1,6 +1,6 @@ //Maya ASCII 2023 scene //Name: test_project_test_asset_test_task_v001.ma -//Last modified: Mon, Jul 31, 2023 06:29:29 PM +//Last modified: Tue, Aug 01, 2023 10:44:10 AM //Codeset: 1252 requires maya "2023"; requires -nodeType "simpleSelector" -nodeType "renderSetupLayer" -nodeType "renderSetup" @@ -16,7 +16,7 @@ fileInfo "version" "2023"; fileInfo "cutIdentifier" "202211021031-847a9f9623"; fileInfo "osv" "Windows 10 Pro v2009 (Build: 19044)"; fileInfo "license" "education"; -fileInfo "UUID" "9F823AB3-4E95-10BF-8730-7D8918BD74A0"; +fileInfo "UUID" "A0B86AAF-4E1E-8844-2654-41A821E4C70F"; fileInfo "OpenPypeContext" "eyJwdWJsaXNoX2F0dHJpYnV0ZXMiOiB7IlZhbGlkYXRlQ29udGFpbmVycyI6IHsiYWN0aXZlIjogdHJ1ZX19fQ=="; createNode transform -s -n "persp"; rename -uid "D52C935B-47C9-D868-A875-D799DD17B3A1"; @@ -142,20 +142,20 @@ createNode camera -n "perspShape1" -p "persp1"; setAttr ".hc" -type "string" "viewSet -p %camera"; setAttr ".dr" yes; createNode lightLinker -s -n "lightLinker1"; - rename -uid "C7AABCC2-4C33-A7D1-69A5-19BD345F29E1"; + rename -uid "E236C16A-42B0-F85A-B7BE-A596F5A748DC"; setAttr -s 2 ".lnk"; setAttr -s 2 ".slnk"; createNode shapeEditorManager -n "shapeEditorManager"; - rename -uid "E556CB28-4651-2D44-1457-A4844F1C933B"; + rename -uid "8201187A-48E6-3A47-EF0D-3AAED03CC32D"; createNode poseInterpolatorManager -n "poseInterpolatorManager"; - rename -uid "E7EAA6F5-46CF-937D-9550-1B8D177A7C22"; + rename -uid "CF4CB203-4161-09E2-4AF3-AD8D1EF249B6"; createNode displayLayerManager -n "layerManager"; - rename -uid "DE9B9703-49F6-94EB-CDAE-2F94ACD20661"; + rename -uid "2850BE43-408B-946B-AB37-45BACBE06D23"; createNode displayLayer -n "defaultLayer"; rename -uid "4A776D1B-401F-7069-1C74-A7AAE84CEE03"; setAttr ".ufem" -type "stringArray" 0 ; createNode renderLayerManager -n "renderLayerManager"; - rename -uid "3922E54B-45E9-AB90-019E-24BA345A1303"; + rename -uid "73C48059-4706-AE9C-9DF3-CBAEC08726E2"; setAttr -s 2 ".rlmi[1]" 1; setAttr -s 2 ".rlmi"; createNode renderLayer -n "defaultRenderLayer"; @@ -179,12 +179,12 @@ createNode objectSet -n "modelMain"; addAttr -ci true -sn "instance_id" -ln "instance_id" -dt "string"; addAttr -ci true -sn "writeColorSets" -ln "writeColorSets" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "writeFaceSets" -ln "writeFaceSets" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "includeParentHierarchy" -ln "includeParentHierarchy" -min + addAttr -ci true -sn "includeParentHierarchy" -ln "includeParentHierarchy" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "attr" -ln "attr" -dt "string"; addAttr -ci true -sn "attrPrefix" -ln "attrPrefix" -dt "string"; addAttr -ci true -sn "publish_attributes" -ln "publish_attributes" -dt "string"; - addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" + addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" -dt "string"; setAttr ".ihi" 0; setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:7364ea6776c9"; @@ -283,7 +283,7 @@ createNode objectSet -n "workfileMain"; addAttr -ci true -sn "task" -ln "task" -dt "string"; addAttr -ci true -sn "instance_id" -ln "instance_id" -dt "string"; addAttr -ci true -sn "publish_attributes" -ln "publish_attributes" -dt "string"; - addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" + addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" -dt "string"; setAttr ".ihi" 0; setAttr ".hio" yes; @@ -334,17 +334,17 @@ createNode objectSet -n "_renderingMain:Main"; addAttr -ci true -sn "instance_id" -ln "instance_id" -dt "string"; addAttr -ci true -sn "review" -ln "review" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "extendFrames" -ln "extendFrames" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "overrideExistingFrame" -ln "overrideExistingFrame" -min 0 + addAttr -ci true -sn "overrideExistingFrame" -ln "overrideExistingFrame" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "tileRendering" -ln "tileRendering" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "tilesX" -ln "tilesX" -at "long"; addAttr -ci true -sn "tilesY" -ln "tilesY" -at "long"; addAttr -ci true -sn "convertToScanline" -ln "convertToScanline" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "useReferencedAovs" -ln "useReferencedAovs" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "renderSetupIncludeLights" -ln "renderSetupIncludeLights" -min + addAttr -ci true -sn "renderSetupIncludeLights" -ln "renderSetupIncludeLights" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "publish_attributes" -ln "publish_attributes" -dt "string"; - addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" + addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" -dt "string"; addAttr -ci true -sn "cbId" -ln "cbId" -dt "string"; setAttr ".ihi" 0; @@ -416,10 +416,11 @@ select -ne :defaultRenderGlobals; setAttr ".pom" -type "string" ""; setAttr ".dss" -type "string" "lambert1"; select -ne :defaultResolution; - setAttr ".w" 1920; - setAttr ".h" 1080; + setAttr ".w" 10; + setAttr ".h" 6; setAttr ".pa" 1; - setAttr ".dar" 1.7777777910232544; + setAttr ".al" yes; + setAttr ".dar" 1.6666666269302368; select -ne :defaultColorMgtGlobals; setAttr ".cfe" yes; setAttr ".cfp" -type "string" "/OCIO-configs/Maya-legacy/config.ocio"; From 968148da5f41a7b5610ee95c370709d299c6d680 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Tue, 1 Aug 2023 10:47:55 +0100 Subject: [PATCH 38/69] Speed up Deadline testing --- .../test_project_test_asset_test_task_v001.ma | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/integration/hosts/maya/input/workfile/test_project_test_asset_test_task_v001.ma b/tests/integration/hosts/maya/input/workfile/test_project_test_asset_test_task_v001.ma index 2f3f55de83e..50522c7dfde 100644 --- a/tests/integration/hosts/maya/input/workfile/test_project_test_asset_test_task_v001.ma +++ b/tests/integration/hosts/maya/input/workfile/test_project_test_asset_test_task_v001.ma @@ -179,12 +179,12 @@ createNode objectSet -n "modelMain"; addAttr -ci true -sn "instance_id" -ln "instance_id" -dt "string"; addAttr -ci true -sn "writeColorSets" -ln "writeColorSets" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "writeFaceSets" -ln "writeFaceSets" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "includeParentHierarchy" -ln "includeParentHierarchy" -min + addAttr -ci true -sn "includeParentHierarchy" -ln "includeParentHierarchy" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "attr" -ln "attr" -dt "string"; addAttr -ci true -sn "attrPrefix" -ln "attrPrefix" -dt "string"; addAttr -ci true -sn "publish_attributes" -ln "publish_attributes" -dt "string"; - addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" + addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" -dt "string"; setAttr ".ihi" 0; setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:7364ea6776c9"; @@ -283,7 +283,7 @@ createNode objectSet -n "workfileMain"; addAttr -ci true -sn "task" -ln "task" -dt "string"; addAttr -ci true -sn "instance_id" -ln "instance_id" -dt "string"; addAttr -ci true -sn "publish_attributes" -ln "publish_attributes" -dt "string"; - addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" + addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" -dt "string"; setAttr ".ihi" 0; setAttr ".hio" yes; @@ -334,17 +334,17 @@ createNode objectSet -n "_renderingMain:Main"; addAttr -ci true -sn "instance_id" -ln "instance_id" -dt "string"; addAttr -ci true -sn "review" -ln "review" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "extendFrames" -ln "extendFrames" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "overrideExistingFrame" -ln "overrideExistingFrame" -min 0 + addAttr -ci true -sn "overrideExistingFrame" -ln "overrideExistingFrame" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "tileRendering" -ln "tileRendering" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "tilesX" -ln "tilesX" -at "long"; addAttr -ci true -sn "tilesY" -ln "tilesY" -at "long"; addAttr -ci true -sn "convertToScanline" -ln "convertToScanline" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "useReferencedAovs" -ln "useReferencedAovs" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "renderSetupIncludeLights" -ln "renderSetupIncludeLights" -min + addAttr -ci true -sn "renderSetupIncludeLights" -ln "renderSetupIncludeLights" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "publish_attributes" -ln "publish_attributes" -dt "string"; - addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" + addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" -dt "string"; addAttr -ci true -sn "cbId" -ln "cbId" -dt "string"; setAttr ".ihi" 0; From 2ee1c4920672b053810d6b8245010c0e1f21e5e0 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Tue, 12 Sep 2023 18:09:17 +0100 Subject: [PATCH 39/69] Properly forward pyblish errors to stdout --- .../hosts/maya/input/startup/userSetup.py | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/tests/integration/hosts/maya/input/startup/userSetup.py b/tests/integration/hosts/maya/input/startup/userSetup.py index d4bcab7abff..b28db7cb4e0 100644 --- a/tests/integration/hosts/maya/input/startup/userSetup.py +++ b/tests/integration/hosts/maya/input/startup/userSetup.py @@ -1,8 +1,6 @@ -import sys import os import logging - -sys.stderr = sys.stdout +import sys MAYA_STANDALONE = False try: @@ -17,12 +15,8 @@ def setup_pyblish_logging(): - # Fetch the logger Pyblish uses for all of its messages log = logging.getLogger("pyblish") - - # Do what `basicConfig` does, except explicitly - # and with control over where and how messages go - hnd = logging.StreamHandler() + hnd = logging.StreamHandler(sys.stdout) fmt = logging.Formatter( "pyblish (%(levelname)s) (line: %(lineno)d) %(name)s:" "\n%(message)s" @@ -40,15 +34,12 @@ def main(): import pyblish.util pyblish.util.publish() - return - if not bool(os.environ.get("KEEP_APP_OPEN")): cmds.evalDeferred("setup_pyblish_logging()", evaluateNext=True) cmds.evalDeferred( "import pyblish.util;pyblish.util.publish()", lowestPriority=True ) - print("finished OpenPype usersetup for testing") if not bool(os.environ.get("KEEP_APP_OPEN")) and not MAYA_STANDALONE: cmds.evalDeferred("cmds.quit(force=True)", lowestPriority=True) From 5fcde4aa44826b73ae3b5b26122fae0f70692483 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Tue, 12 Sep 2023 18:10:21 +0100 Subject: [PATCH 40/69] Check for OPENPYPE_MONGO flag or environment variable --- openpype/pype_commands.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/openpype/pype_commands.py b/openpype/pype_commands.py index c6f01d55324..7cfc7fb191b 100644 --- a/openpype/pype_commands.py +++ b/openpype/pype_commands.py @@ -297,8 +297,6 @@ def run_tests( app_variant (str): variant (eg 2020 for AE), empty if use latest installed version """ - start_time = time.time() - end_time_msg = "\"run_test\" took {} seconds to execute." if folder: folder = " ".join(list(folder)) else: @@ -322,6 +320,12 @@ def run_tests( if openpype_mongo: args.extend(["--openpype_mongo", openpype_mongo]) + else: + msg = ( + "Either provide uri to MongoDB through environment variable" + " OPENPYPE_MONGO or the command flag --openpype_mongo" + ) + assert not os.environ.get("OPENPYPE_MONGO"), msg if data_folder: args.extend(["--data_folder", data_folder]) From b7850ef9b55c17b2c60430f6845836cfcfe48825 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Tue, 12 Sep 2023 18:10:58 +0100 Subject: [PATCH 41/69] Only output errors from publish --- tests/integration/hosts/maya/lib.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/tests/integration/hosts/maya/lib.py b/tests/integration/hosts/maya/lib.py index 803e7565d9d..2e0b30c47b8 100644 --- a/tests/integration/hosts/maya/lib.py +++ b/tests/integration/hosts/maya/lib.py @@ -121,11 +121,8 @@ def test_publish( with open(logging_path, "r") as f: logging_output = f.read() - print(logging_output) - print(publish_finished) - # Check for pyblish errors. - error_regex = r"pyblish \(ERROR\)((.|\n)*)" + error_regex = r"pyblish \(ERROR\)((.|\n)*?)((pyblish \())" matches = re.findall(error_regex, logging_output) assert not matches, matches[0][0] @@ -137,6 +134,11 @@ def test_publish( matches = re.findall(error_regex, logging_output) assert not matches, matches[0][0] + print(("-" * 50) + "LOGGING" + ("-" * 50)) + print(logging_output) + print(("-" * 50) + "PUBLISH" + ("-" * 50)) + print(publish_finished) + class MayaPublishTest(MayaFixtures, PublishTest): """Testing class for local publishes.""" From 830df688e959e64605f8f44d195ac3da4c3d01ad Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Tue, 12 Sep 2023 18:37:01 +0100 Subject: [PATCH 42/69] Always print publish logging --- tests/integration/hosts/maya/lib.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/integration/hosts/maya/lib.py b/tests/integration/hosts/maya/lib.py index 2e0b30c47b8..4f802f8faa7 100644 --- a/tests/integration/hosts/maya/lib.py +++ b/tests/integration/hosts/maya/lib.py @@ -121,6 +121,11 @@ def test_publish( with open(logging_path, "r") as f: logging_output = f.read() + print(("-" * 50) + "LOGGING" + ("-" * 50)) + print(logging_output) + print(("-" * 50) + "PUBLISH" + ("-" * 50)) + print(publish_finished) + # Check for pyblish errors. error_regex = r"pyblish \(ERROR\)((.|\n)*?)((pyblish \())" matches = re.findall(error_regex, logging_output) @@ -134,11 +139,6 @@ def test_publish( matches = re.findall(error_regex, logging_output) assert not matches, matches[0][0] - print(("-" * 50) + "LOGGING" + ("-" * 50)) - print(logging_output) - print(("-" * 50) + "PUBLISH" + ("-" * 50)) - print(publish_finished) - class MayaPublishTest(MayaFixtures, PublishTest): """Testing class for local publishes.""" From d07d6774f885c97b3974a5f600ce6583ae1a1188 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Tue, 12 Sep 2023 18:37:39 +0100 Subject: [PATCH 43/69] workspace mel with mayapy --- openpype/hosts/maya/hooks/pre_copy_mel.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openpype/hosts/maya/hooks/pre_copy_mel.py b/openpype/hosts/maya/hooks/pre_copy_mel.py index 9cea829ad74..685db894212 100644 --- a/openpype/hosts/maya/hooks/pre_copy_mel.py +++ b/openpype/hosts/maya/hooks/pre_copy_mel.py @@ -7,7 +7,7 @@ class PreCopyMel(PreLaunchHook): Hook `GlobalHostDataHook` must be executed before this hook. """ - app_groups = ["maya"] + app_groups = ["maya", "mayapy"] def execute(self): project_doc = self.data["project_doc"] From d0ec176319a3a7775539036ebf75d2410641f6bd Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Tue, 12 Sep 2023 18:41:52 +0100 Subject: [PATCH 44/69] Fix Maya usersetup --- tests/integration/hosts/maya/input/startup/userSetup.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/integration/hosts/maya/input/startup/userSetup.py b/tests/integration/hosts/maya/input/startup/userSetup.py index b28db7cb4e0..695b1e4fe47 100644 --- a/tests/integration/hosts/maya/input/startup/userSetup.py +++ b/tests/integration/hosts/maya/input/startup/userSetup.py @@ -34,6 +34,8 @@ def main(): import pyblish.util pyblish.util.publish() + return + if not bool(os.environ.get("KEEP_APP_OPEN")): cmds.evalDeferred("setup_pyblish_logging()", evaluateNext=True) cmds.evalDeferred( From 962ed68cd9d319666f1b361dcef7daaecca49277 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Thu, 14 Sep 2023 12:59:41 +0100 Subject: [PATCH 45/69] Change wildcard --- openpype/cli.py | 6 +++++- tests/lib/testing_classes.py | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/openpype/cli.py b/openpype/cli.py index 9a3ea2a3046..05671c84105 100644 --- a/openpype/cli.py +++ b/openpype/cli.py @@ -310,7 +310,11 @@ def run(script): default=None) @click.option("-a", "--app_variant", - help="Provide specific app variant for test, empty for latest", + help=( + "Provide specific app variant for test, empty for latest. " + "Supports wildcard \"all\" to test all available app " + "variants." + ), default=None) @click.option("-t", "--timeout", diff --git a/tests/lib/testing_classes.py b/tests/lib/testing_classes.py index 652cdcb10ba..8b3c75eee5c 100644 --- a/tests/lib/testing_classes.py +++ b/tests/lib/testing_classes.py @@ -351,7 +351,7 @@ def app_variants(self, app_group, app_variant): application_manager = ApplicationManager() - if app_variant == "*": + if app_variant == "all": func = application_manager.find_all_available_variants_for_group variants = func(app_group) app_variants = [x.name for x in variants] From a651eb52ec5949f2f620c3cc8a9585554f23bb53 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Thu, 14 Sep 2023 12:59:49 +0100 Subject: [PATCH 46/69] Code cosmetics --- tests/lib/testing_classes.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/lib/testing_classes.py b/tests/lib/testing_classes.py index 8b3c75eee5c..4b1a8ab24c0 100644 --- a/tests/lib/testing_classes.py +++ b/tests/lib/testing_classes.py @@ -558,7 +558,9 @@ def deadline_finished( data_folder, _, _ = setup_fixture metadata_json = glob.glob( - os.path.join(data_folder, "output_" + app_variant, "**/*_metadata.json"), + os.path.join( + data_folder, "output_" + app_variant, "**/*_metadata.json" + ), recursive=True ) if not metadata_json: From ca0627717b6aa17e2b7b1028a6ac61bca27f2909 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Thu, 14 Sep 2023 14:34:14 +0100 Subject: [PATCH 47/69] Add MayaPy and 2024 --- .../system_settings/applications.json | 88 ++++++++++++++----- .../host_settings/schema_mayapy.json | 39 ++++++++ .../system_schema/schema_applications.json | 4 + 3 files changed, 107 insertions(+), 24 deletions(-) create mode 100644 openpype/settings/entities/schemas/system_schema/host_settings/schema_mayapy.json diff --git a/openpype/settings/defaults/system_settings/applications.json b/openpype/settings/defaults/system_settings/applications.json index e2141e86813..beaaf881003 100644 --- a/openpype/settings/defaults/system_settings/applications.json +++ b/openpype/settings/defaults/system_settings/applications.json @@ -1,5 +1,5 @@ { - "mayapy": { + "maya": { "enabled": true, "label": "Maya", "icon": "{}/app_icons/maya.png", @@ -12,15 +12,35 @@ "LC_ALL": "C" }, "variants": { + "2024": { + "use_python_2": false, + "executables": { + "windows": [ + "C:\\Program Files\\Autodesk\\Maya2024\\bin\\maya.exe" + ], + "darwin": [], + "linux": [ + "/usr/autodesk/maya2024/bin/maya" + ] + }, + "arguments": { + "windows": [], + "darwin": [], + "linux": [] + }, + "environment": { + "MAYA_VERSION": "2024" + } + }, "2023": { "use_python_2": false, "executables": { "windows": [ - "C:\\Program Files\\Autodesk\\Maya2023\\bin\\mayapy.exe" + "C:\\Program Files\\Autodesk\\Maya2023\\bin\\maya.exe" ], "darwin": [], "linux": [ - "/usr/autodesk/maya2023/bin/mayapy" + "/usr/autodesk/maya2023/bin/maya" ] }, "arguments": { @@ -36,11 +56,11 @@ "use_python_2": false, "executables": { "windows": [ - "C:\\Program Files\\Autodesk\\Maya2022\\bin\\mayapy.exe" + "C:\\Program Files\\Autodesk\\Maya2022\\bin\\maya.exe" ], "darwin": [], "linux": [ - "/usr/autodesk/maya2022/bin/mayapy" + "/usr/autodesk/maya2022/bin/maya" ] }, "arguments": { @@ -56,11 +76,11 @@ "use_python_2": true, "executables": { "windows": [ - "C:\\Program Files\\Autodesk\\Maya2020\\bin\\mayapy.exe" + "C:\\Program Files\\Autodesk\\Maya2020\\bin\\maya.exe" ], "darwin": [], "linux": [ - "/usr/autodesk/maya2020/bin/mayapy" + "/usr/autodesk/maya2020/bin/maya" ] }, "arguments": { @@ -76,11 +96,11 @@ "use_python_2": true, "executables": { "windows": [ - "C:\\Program Files\\Autodesk\\Maya2019\\bin\\mayapy.exe" + "C:\\Program Files\\Autodesk\\Maya2019\\bin\\maya.exe" ], "darwin": [], "linux": [ - "/usr/autodesk/maya2019/bin/mayapy" + "/usr/autodesk/maya2019/bin/maya" ] }, "arguments": { @@ -96,11 +116,11 @@ "use_python_2": true, "executables": { "windows": [ - "C:\\Program Files\\Autodesk\\Maya2018\\bin\\mayapy.exe" + "C:\\Program Files\\Autodesk\\Maya2018\\bin\\maya.exe" ], "darwin": [], "linux": [ - "/usr/autodesk/maya2018/bin/mayapy" + "/usr/autodesk/maya2018/bin/maya" ] }, "arguments": { @@ -114,11 +134,11 @@ } } }, - "maya": { + "mayapy": { "enabled": true, - "label": "Maya", + "label": "MayaPy", "icon": "{}/app_icons/maya.png", - "host_name": "maya", + "host_name": "mayapy", "environment": { "MAYA_DISABLE_CLIC_IPM": "Yes", "MAYA_DISABLE_CIP": "Yes", @@ -127,15 +147,35 @@ "LC_ALL": "C" }, "variants": { + "2024": { + "use_python_2": false, + "executables": { + "windows": [ + "C:\\Program Files\\Autodesk\\Maya2024\\bin\\mayapy.exe" + ], + "darwin": [], + "linux": [ + "/usr/autodesk/maya2024/bin/mayapy" + ] + }, + "arguments": { + "windows": [], + "darwin": [], + "linux": [] + }, + "environment": { + "MAYA_VERSION": "2024" + } + }, "2023": { "use_python_2": false, "executables": { "windows": [ - "C:\\Program Files\\Autodesk\\Maya2023\\bin\\maya.exe" + "C:\\Program Files\\Autodesk\\Maya2023\\bin\\mayapy.exe" ], "darwin": [], "linux": [ - "/usr/autodesk/maya2023/bin/maya" + "/usr/autodesk/maya2023/bin/mayapy" ] }, "arguments": { @@ -151,11 +191,11 @@ "use_python_2": false, "executables": { "windows": [ - "C:\\Program Files\\Autodesk\\Maya2022\\bin\\maya.exe" + "C:\\Program Files\\Autodesk\\Maya2022\\bin\\mayapy.exe" ], "darwin": [], "linux": [ - "/usr/autodesk/maya2022/bin/maya" + "/usr/autodesk/maya2022/bin/mayapy" ] }, "arguments": { @@ -171,11 +211,11 @@ "use_python_2": true, "executables": { "windows": [ - "C:\\Program Files\\Autodesk\\Maya2020\\bin\\maya.exe" + "C:\\Program Files\\Autodesk\\Maya2020\\bin\\mayapy.exe" ], "darwin": [], "linux": [ - "/usr/autodesk/maya2020/bin/maya" + "/usr/autodesk/maya2020/bin/mayapy" ] }, "arguments": { @@ -191,11 +231,11 @@ "use_python_2": true, "executables": { "windows": [ - "C:\\Program Files\\Autodesk\\Maya2019\\bin\\maya.exe" + "C:\\Program Files\\Autodesk\\Maya2019\\bin\\mayapy.exe" ], "darwin": [], "linux": [ - "/usr/autodesk/maya2019/bin/maya" + "/usr/autodesk/maya2019/bin/mayapy" ] }, "arguments": { @@ -211,11 +251,11 @@ "use_python_2": true, "executables": { "windows": [ - "C:\\Program Files\\Autodesk\\Maya2018\\bin\\maya.exe" + "C:\\Program Files\\Autodesk\\Maya2018\\bin\\mayapy.exe" ], "darwin": [], "linux": [ - "/usr/autodesk/maya2018/bin/maya" + "/usr/autodesk/maya2018/bin/mayapy" ] }, "arguments": { diff --git a/openpype/settings/entities/schemas/system_schema/host_settings/schema_mayapy.json b/openpype/settings/entities/schemas/system_schema/host_settings/schema_mayapy.json new file mode 100644 index 00000000000..bbdc7e13b02 --- /dev/null +++ b/openpype/settings/entities/schemas/system_schema/host_settings/schema_mayapy.json @@ -0,0 +1,39 @@ +{ + "type": "dict", + "key": "mayapy", + "label": "Autodesk MayaPy", + "collapsible": true, + "checkbox_key": "enabled", + "children": [ + { + "type": "boolean", + "key": "enabled", + "label": "Enabled" + }, + { + "type": "schema_template", + "name": "template_host_unchangables" + }, + { + "key": "environment", + "label": "Environment", + "type": "raw-json" + }, + { + "type": "dict-modifiable", + "key": "variants", + "collapsible_key": true, + "use_label_wrap": false, + "object_type": { + "type": "dict", + "collapsible": true, + "children": [ + { + "type": "schema_template", + "name": "template_host_variant_items" + } + ] + } + } + ] +} diff --git a/openpype/settings/entities/schemas/system_schema/schema_applications.json b/openpype/settings/entities/schemas/system_schema/schema_applications.json index abea37a9ab7..7965c344aee 100644 --- a/openpype/settings/entities/schemas/system_schema/schema_applications.json +++ b/openpype/settings/entities/schemas/system_schema/schema_applications.json @@ -9,6 +9,10 @@ "type": "schema", "name": "schema_maya" }, + { + "type": "schema", + "name": "schema_mayapy" + }, { "type": "schema", "name": "schema_3dsmax" From 66784f22737fdeedf5c8b3d2c7df3729869e0380 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Thu, 14 Sep 2023 14:34:29 +0100 Subject: [PATCH 48/69] Fix app variants for "all" --- tests/lib/testing_classes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/lib/testing_classes.py b/tests/lib/testing_classes.py index 4b1a8ab24c0..6e42b92264c 100644 --- a/tests/lib/testing_classes.py +++ b/tests/lib/testing_classes.py @@ -361,7 +361,7 @@ def app_variants(self, app_group, app_variant): variant = func(app_group) app_variants.append(variant.name) - if app_variant: + if app_variant and app_variant != "all": app_variants.append(app_variant) return app_variants From 32f1b6af71fa1bc8dfcad7688a37b1a7c641f931 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Thu, 14 Sep 2023 17:32:03 +0100 Subject: [PATCH 49/69] Fix OpenPype Deadline plugin --- .../deadline/repository/custom/plugins/OpenPype/OpenPype.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/openpype/modules/deadline/repository/custom/plugins/OpenPype/OpenPype.py b/openpype/modules/deadline/repository/custom/plugins/OpenPype/OpenPype.py index 6e1b973fb91..04994ef448d 100644 --- a/openpype/modules/deadline/repository/custom/plugins/OpenPype/OpenPype.py +++ b/openpype/modules/deadline/repository/custom/plugins/OpenPype/OpenPype.py @@ -38,6 +38,8 @@ class OpenPypeDeadlinePlugin(DeadlinePlugin): for publish process. """ def __init__(self): + super().__init__() + self.InitializeProcessCallback += self.InitializeProcess self.RenderExecutableCallback += self.RenderExecutable self.RenderArgumentCallback += self.RenderArgument @@ -107,7 +109,7 @@ def RenderExecutable(self): "Scanning for compatible requested " f"version {requested_version}")) dir_list = self.GetConfigEntry("OpenPypeInstallationDirs") - + # clean '\ ' for MacOS pasting if platform.system().lower() == "darwin": dir_list = dir_list.replace("\\ ", " ") From 067b835e09b3ac9a2a58279b8bd9566a3dc82daa Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Thu, 14 Sep 2023 17:53:06 +0100 Subject: [PATCH 50/69] MayaPy uses maya host --- openpype/settings/defaults/system_settings/applications.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openpype/settings/defaults/system_settings/applications.json b/openpype/settings/defaults/system_settings/applications.json index beaaf881003..cd724f6e0eb 100644 --- a/openpype/settings/defaults/system_settings/applications.json +++ b/openpype/settings/defaults/system_settings/applications.json @@ -138,7 +138,7 @@ "enabled": true, "label": "MayaPy", "icon": "{}/app_icons/maya.png", - "host_name": "mayapy", + "host_name": "maya", "environment": { "MAYA_DISABLE_CLIC_IPM": "Yes", "MAYA_DISABLE_CIP": "Yes", From 297a10920a5e831614c3170068261a17011b77d1 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Fri, 15 Sep 2023 09:14:11 +0100 Subject: [PATCH 51/69] Convert Maya scene to 2022 --- .../test_project_test_asset_test_task_v001.ma | 128 +++++++++--------- 1 file changed, 65 insertions(+), 63 deletions(-) diff --git a/tests/integration/hosts/maya/input/workfile/test_project_test_asset_test_task_v001.ma b/tests/integration/hosts/maya/input/workfile/test_project_test_asset_test_task_v001.ma index 50522c7dfde..d8677f92831 100644 --- a/tests/integration/hosts/maya/input/workfile/test_project_test_asset_test_task_v001.ma +++ b/tests/integration/hosts/maya/input/workfile/test_project_test_asset_test_task_v001.ma @@ -1,28 +1,28 @@ -//Maya ASCII 2023 scene +//Maya ASCII 2022 scene //Name: test_project_test_asset_test_task_v001.ma -//Last modified: Tue, Aug 01, 2023 10:44:10 AM +//Last modified: Thu, Sep 14, 2023 06:31:00 PM //Codeset: 1252 -requires maya "2023"; +requires maya "2022"; +requires -nodeType "polyDisc" "modelingToolkit" "0.0.0.0"; +requires "stereoCamera" "10.0"; +requires -nodeType "aiOptions" -nodeType "aiAOVDriver" -nodeType "aiAOVFilter" "mtoa" "5.2.2.1"; requires -nodeType "simpleSelector" -nodeType "renderSetupLayer" -nodeType "renderSetup" -nodeType "collection" "renderSetup.py" "1.0"; requires "stereoCamera" "10.0"; -requires -nodeType "aiOptions" -nodeType "aiAOVDriver" -nodeType "aiAOVFilter" "mtoa" "5.3.1"; -requires -nodeType "polyDisc" "modelingToolkit" "0.0.0.0"; -requires "stereoCamera" "10.0"; currentUnit -l centimeter -a degree -t pal; fileInfo "application" "maya"; -fileInfo "product" "Maya 2023"; -fileInfo "version" "2023"; -fileInfo "cutIdentifier" "202211021031-847a9f9623"; +fileInfo "product" "Maya 2022"; +fileInfo "version" "2022"; +fileInfo "cutIdentifier" "202205171752-c25c06f306"; fileInfo "osv" "Windows 10 Pro v2009 (Build: 19044)"; fileInfo "license" "education"; -fileInfo "UUID" "A0B86AAF-4E1E-8844-2654-41A821E4C70F"; +fileInfo "UUID" "019C7F50-40EF-1435-E27F-729F64685E67"; fileInfo "OpenPypeContext" "eyJwdWJsaXNoX2F0dHJpYnV0ZXMiOiB7IlZhbGlkYXRlQ29udGFpbmVycyI6IHsiYWN0aXZlIjogdHJ1ZX19fQ=="; createNode transform -s -n "persp"; rename -uid "D52C935B-47C9-D868-A875-D799DD17B3A1"; setAttr ".v" no; - setAttr ".t" -type "double3" 33.329836010894773 18.034068470832839 24.890981774804157 ; - setAttr ".r" -type "double3" 79.461647270402509 -44.999999999997357 183.99999999999159 ; + setAttr ".t" -type "double3" 26.953352922736947 24.362683487437064 26.983403389430531 ; + setAttr ".r" -type "double3" 1064.7698975365424 54.173034578109736 1075.1660763544442 ; setAttr ".rp" -type "double3" -2.0401242849359917e-14 2.2609331405046354e-14 -44.821869662029947 ; setAttr ".rpt" -type "double3" -27.999999999999989 -21.000000000000025 16.82186966202995 ; createNode camera -s -n "perspShape" -p "persp"; @@ -30,7 +30,7 @@ createNode camera -s -n "perspShape" -p "persp"; setAttr -k off ".v" no; setAttr ".rnd" no; setAttr ".fl" 34.999999999999993; - setAttr ".coi" 50.609449488607154; + setAttr ".coi" 46.895362757145833; setAttr ".imn" -type "string" "persp"; setAttr ".den" -type "string" "persp_depth"; setAttr ".man" -type "string" "persp_mask"; @@ -142,20 +142,19 @@ createNode camera -n "perspShape1" -p "persp1"; setAttr ".hc" -type "string" "viewSet -p %camera"; setAttr ".dr" yes; createNode lightLinker -s -n "lightLinker1"; - rename -uid "E236C16A-42B0-F85A-B7BE-A596F5A748DC"; + rename -uid "6B9ADCD4-41B9-5BCC-826D-4A874A278510"; setAttr -s 2 ".lnk"; setAttr -s 2 ".slnk"; createNode shapeEditorManager -n "shapeEditorManager"; - rename -uid "8201187A-48E6-3A47-EF0D-3AAED03CC32D"; + rename -uid "5B4518C5-46C9-6921-690E-EFAF77B21A36"; createNode poseInterpolatorManager -n "poseInterpolatorManager"; - rename -uid "CF4CB203-4161-09E2-4AF3-AD8D1EF249B6"; + rename -uid "8518F293-4F06-BFF2-647A-72A099FBF025"; createNode displayLayerManager -n "layerManager"; - rename -uid "2850BE43-408B-946B-AB37-45BACBE06D23"; + rename -uid "04D880D5-4D86-0C58-CA3D-208ABE3E1E16"; createNode displayLayer -n "defaultLayer"; rename -uid "4A776D1B-401F-7069-1C74-A7AAE84CEE03"; - setAttr ".ufem" -type "stringArray" 0 ; createNode renderLayerManager -n "renderLayerManager"; - rename -uid "73C48059-4706-AE9C-9DF3-CBAEC08726E2"; + rename -uid "B719B8BE-46BF-12E6-BEBA-B0AD4DBDBA87"; setAttr -s 2 ".rlmi[1]" 1; setAttr -s 2 ".rlmi"; createNode renderLayer -n "defaultRenderLayer"; @@ -179,12 +178,12 @@ createNode objectSet -n "modelMain"; addAttr -ci true -sn "instance_id" -ln "instance_id" -dt "string"; addAttr -ci true -sn "writeColorSets" -ln "writeColorSets" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "writeFaceSets" -ln "writeFaceSets" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "includeParentHierarchy" -ln "includeParentHierarchy" -min + addAttr -ci true -sn "includeParentHierarchy" -ln "includeParentHierarchy" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "attr" -ln "attr" -dt "string"; addAttr -ci true -sn "attrPrefix" -ln "attrPrefix" -dt "string"; addAttr -ci true -sn "publish_attributes" -ln "publish_attributes" -dt "string"; - addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" + addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" -dt "string"; setAttr ".ihi" 0; setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:7364ea6776c9"; @@ -210,44 +209,45 @@ createNode script -n "uiConfigurationScriptNode"; "// Maya Mel UI Configuration File.\n//\n// This script is machine generated. Edit at your own risk.\n//\n//\n\nglobal string $gMainPane;\nif (`paneLayout -exists $gMainPane`) {\n\n\tglobal int $gUseScenePanelConfig;\n\tint $useSceneConfig = $gUseScenePanelConfig;\n\tint $nodeEditorPanelVisible = stringArrayContains(\"nodeEditorPanel1\", `getPanel -vis`);\n\tint $nodeEditorWorkspaceControlOpen = (`workspaceControl -exists nodeEditorPanel1Window` && `workspaceControl -q -visible nodeEditorPanel1Window`);\n\tint $menusOkayInPanels = `optionVar -q allowMenusInPanels`;\n\tint $nVisPanes = `paneLayout -q -nvp $gMainPane`;\n\tint $nPanes = 0;\n\tstring $editorName;\n\tstring $panelName;\n\tstring $itemFilterName;\n\tstring $panelConfig;\n\n\t//\n\t// get current state of the UI\n\t//\n\tsceneUIReplacement -update $gMainPane;\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Top View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Top View\")) -mbv $menusOkayInPanels $panelName;\n" + "\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"|top\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n" + " -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n" - + " -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -bluePencil 1\n -greasePencils 0\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Side View\")) `;\n" - + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Side View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"|side\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n" - + " -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n" - + " -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -bluePencil 1\n -greasePencils 0\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n" - + " modelEditor -e -viewSelected 0 $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Front View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Front View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"|front\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n" - + " -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n" - + " -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -bluePencil 1\n" - + " -greasePencils 0\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Persp View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Persp View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"|persp1\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n" - + " -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n" - + " -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n" - + " -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -bluePencil 1\n -greasePencils 0\n -shadows 0\n -captureSequenceNumber -1\n -width 1007\n -height 733\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"outlinerPanel\" (localizedPanelLabel(\"ToggledOutliner\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\toutlinerPanel -edit -l (localizedPanelLabel(\"ToggledOutliner\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n outlinerEditor -e \n -docTag \"isolOutln_fromSeln\" \n -showShapes 0\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 1\n -showReferenceMembers 1\n" - + " -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -organizeByClip 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showParentContainers 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n" - + " -isSet 0\n -isSetMember 0\n -showUfeItems 1\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -selectCommand \"print(\\\"\\\")\" \n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 1\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n -renderFilterIndex 0\n -selectionOrder \"chronological\" \n -expandAttribute 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"outlinerPanel\" (localizedPanelLabel(\"Outliner\")) `;\n" - + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\toutlinerPanel -edit -l (localizedPanelLabel(\"Outliner\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n outlinerEditor -e \n -showShapes 0\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -organizeByClip 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showParentContainers 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n" - + " -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -showUfeItems 1\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n" - + " $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"graphEditor\" (localizedPanelLabel(\"Graph Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Graph Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -organizeByClip 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 1\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n" - + " -showPublishedAsConnected 0\n -showParentContainers 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 0\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 1\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 1\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -showUfeItems 1\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n" - + " -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 1\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"GraphEd\");\n animCurveEditor -e \n -displayValues 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -showPlayRangeShades \"on\" \n -lockPlayRangeShades \"off\" \n -smoothness \"fine\" \n -resultSamples 1.041667\n -resultScreenSamples 0\n -resultUpdate \"delayed\" \n -showUpstreamCurves 1\n -keyMinScale 1\n -stackedCurvesMin -1\n -stackedCurvesMax 1\n" - + " -stackedCurvesSpace 0.2\n -preSelectionHighlight 0\n -constrainDrag 0\n -valueLinesToggle 1\n -highlightAffectedCurves 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dopeSheetPanel\" (localizedPanelLabel(\"Dope Sheet\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Dope Sheet\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -organizeByClip 1\n" - + " -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showParentContainers 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 0\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 1\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -showUfeItems 1\n -displayMode \"DAG\" \n -expandObjects 0\n" - + " -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"DopeSheetEd\");\n dopeSheetEditor -e \n -displayValues 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -outliner \"dopeSheetPanel1OutlineEd\" \n -showSummary 1\n -showScene 0\n -hierarchyBelow 0\n" - + " -showTicks 1\n -selectionWindow 0 0 0 0 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"timeEditorPanel\" (localizedPanelLabel(\"Time Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Time Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"clipEditorPanel\" (localizedPanelLabel(\"Trax Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Trax Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = clipEditorNameFromPanel($panelName);\n clipEditor -e \n -displayValues 0\n -snapTime \"none\" \n -snapValue \"none\" \n -initialized 0\n -manageSequencer 0 \n" - + " $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"sequenceEditorPanel\" (localizedPanelLabel(\"Camera Sequencer\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Camera Sequencer\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = sequenceEditorNameFromPanel($panelName);\n clipEditor -e \n -displayValues 0\n -snapTime \"none\" \n -snapValue \"none\" \n -initialized 0\n -manageSequencer 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"hyperGraphPanel\" (localizedPanelLabel(\"Hypergraph Hierarchy\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Hypergraph Hierarchy\")) -mbv $menusOkayInPanels $panelName;\n" - + "\n\t\t\t$editorName = ($panelName+\"HyperGraphEd\");\n hyperGraph -e \n -graphLayoutStyle \"hierarchicalLayout\" \n -orientation \"horiz\" \n -mergeConnections 0\n -zoom 1\n -animateTransition 0\n -showRelationships 1\n -showShapes 0\n -showDeformers 0\n -showExpressions 0\n -showConstraints 0\n -showConnectionFromSelected 0\n -showConnectionToSelected 0\n -showConstraintLabels 0\n -showUnderworld 0\n -showInvisible 0\n -transitionFrames 1\n -opaqueContainers 0\n -freeform 0\n -imagePosition 0 0 \n -imageScale 1\n -imageEnabled 0\n -graphType \"DAG\" \n -heatMapDisplay 0\n -updateSelection 1\n -updateNodeAdded 1\n -useDrawOverrideColor 0\n -limitGraphTraversal -1\n" - + " -range 0 0 \n -iconSize \"smallIcons\" \n -showCachedConnections 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"hyperShadePanel\" (localizedPanelLabel(\"Hypershade\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Hypershade\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"visorPanel\" (localizedPanelLabel(\"Visor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Visor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"nodeEditorPanel\" (localizedPanelLabel(\"Node Editor\")) `;\n\tif ($nodeEditorPanelVisible || $nodeEditorWorkspaceControlOpen) {\n" - + "\t\tif (\"\" == $panelName) {\n\t\t\tif ($useSceneConfig) {\n\t\t\t\t$panelName = `scriptedPanel -unParent -type \"nodeEditorPanel\" -l (localizedPanelLabel(\"Node Editor\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"NodeEditorEd\");\n nodeEditor -e \n -allAttributes 0\n -allNodes 0\n -autoSizeNodes 1\n -consistentNameSize 1\n -createNodeCommand \"nodeEdCreateNodeCommand\" \n -connectNodeOnCreation 0\n -connectOnDrop 0\n -copyConnectionsOnPaste 0\n -connectionStyle \"bezier\" \n -defaultPinnedState 0\n -additiveGraphingMode 0\n -connectedGraphingMode 1\n -settingsChangedCallback \"nodeEdSyncControls\" \n -traversalDepthLimit -1\n -keyPressCommand \"nodeEdKeyPressCommand\" \n -nodeTitleMode \"name\" \n -gridSnap 0\n -gridVisibility 1\n -crosshairOnEdgeDragging 0\n" - + " -popupMenuScript \"nodeEdBuildPanelMenus\" \n -showNamespace 1\n -showShapes 1\n -showSGShapes 0\n -showTransforms 1\n -useAssets 1\n -syncedSelection 1\n -extendToShapes 1\n -showUnitConversions 0\n -editorMode \"default\" \n -hasWatchpoint 0\n $editorName;\n\t\t\t}\n\t\t} else {\n\t\t\t$label = `panel -q -label $panelName`;\n\t\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Node Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"NodeEditorEd\");\n nodeEditor -e \n -allAttributes 0\n -allNodes 0\n -autoSizeNodes 1\n -consistentNameSize 1\n -createNodeCommand \"nodeEdCreateNodeCommand\" \n -connectNodeOnCreation 0\n -connectOnDrop 0\n -copyConnectionsOnPaste 0\n -connectionStyle \"bezier\" \n -defaultPinnedState 0\n" - + " -additiveGraphingMode 0\n -connectedGraphingMode 1\n -settingsChangedCallback \"nodeEdSyncControls\" \n -traversalDepthLimit -1\n -keyPressCommand \"nodeEdKeyPressCommand\" \n -nodeTitleMode \"name\" \n -gridSnap 0\n -gridVisibility 1\n -crosshairOnEdgeDragging 0\n -popupMenuScript \"nodeEdBuildPanelMenus\" \n -showNamespace 1\n -showShapes 1\n -showSGShapes 0\n -showTransforms 1\n -useAssets 1\n -syncedSelection 1\n -extendToShapes 1\n -showUnitConversions 0\n -editorMode \"default\" \n -hasWatchpoint 0\n $editorName;\n\t\t\tif (!$useSceneConfig) {\n\t\t\t\tpanel -e -l $label $panelName;\n\t\t\t}\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"createNodePanel\" (localizedPanelLabel(\"Create Node\")) `;\n\tif (\"\" != $panelName) {\n" - + "\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Create Node\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"polyTexturePlacementPanel\" (localizedPanelLabel(\"UV Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"UV Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"renderWindowPanel\" (localizedPanelLabel(\"Render View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Render View\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"shapePanel\" (localizedPanelLabel(\"Shape Editor\")) `;\n\tif (\"\" != $panelName) {\n" - + "\t\t$label = `panel -q -label $panelName`;\n\t\tshapePanel -edit -l (localizedPanelLabel(\"Shape Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"posePanel\" (localizedPanelLabel(\"Pose Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tposePanel -edit -l (localizedPanelLabel(\"Pose Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dynRelEdPanel\" (localizedPanelLabel(\"Dynamic Relationships\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Dynamic Relationships\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"relationshipPanel\" (localizedPanelLabel(\"Relationship Editor\")) `;\n" - + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Relationship Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"referenceEditorPanel\" (localizedPanelLabel(\"Reference Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Reference Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dynPaintScriptedPanelType\" (localizedPanelLabel(\"Paint Effects\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Paint Effects\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"scriptEditorPanel\" (localizedPanelLabel(\"Script Editor\")) `;\n" - + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Script Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"profilerPanel\" (localizedPanelLabel(\"Profiler Tool\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Profiler Tool\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"contentBrowserPanel\" (localizedPanelLabel(\"Content Browser\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Content Browser\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"Stereo\" (localizedPanelLabel(\"Stereo\")) `;\n" - + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Stereo\")) -mbv $menusOkayInPanels $panelName;\n{ string $editorName = ($panelName+\"Editor\");\n stereoCameraView -e \n -camera \"|persp\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"wireframe\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 1\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n" - + " -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 4 4 \n -bumpResolution 4 4 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 0\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n" - + " -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n" - + " -clipGhosts 1\n -bluePencil 1\n -greasePencils 0\n -shadows 0\n -captureSequenceNumber -1\n -width 0\n -height 0\n -sceneRenderFilter 0\n -displayMode \"centerEye\" \n -viewColor 0 0 0 1 \n -useCustomBackground 1\n $editorName;\n stereoCameraView -e -viewSelected 0 $editorName; };\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\tif ($useSceneConfig) {\n string $configName = `getPanel -cwl (localizedPanelLabel(\"Current Layout\"))`;\n if (\"\" != $configName) {\n\t\t\tpanelConfiguration -edit -label (localizedPanelLabel(\"Current Layout\")) \n\t\t\t\t-userCreated false\n\t\t\t\t-defaultImage \"vacantCell.xP:/\"\n\t\t\t\t-image \"\"\n\t\t\t\t-sc false\n\t\t\t\t-configString \"global string $gMainPane; paneLayout -e -cn \\\"single\\\" -ps 1 100 100 $gMainPane;\"\n\t\t\t\t-removeAllPanels\n\t\t\t\t-ap false\n\t\t\t\t\t(localizedPanelLabel(\"Persp View\")) \n\t\t\t\t\t\"modelPanel\"\n" - + "\t\t\t\t\t\"$panelName = `modelPanel -unParent -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels `;\\n$editorName = $panelName;\\nmodelEditor -e \\n -camera \\\"|persp1\\\" \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 16384\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -controllers 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -bluePencil 1\\n -greasePencils 0\\n -shadows 0\\n -captureSequenceNumber -1\\n -width 1007\\n -height 733\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName\"\n" - + "\t\t\t\t\t\"modelPanel -edit -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels $panelName;\\n$editorName = $panelName;\\nmodelEditor -e \\n -camera \\\"|persp1\\\" \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 16384\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -controllers 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -bluePencil 1\\n -greasePencils 0\\n -shadows 0\\n -captureSequenceNumber -1\\n -width 1007\\n -height 733\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName\"\n" + + " -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n" + + "\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Side View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Side View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"|side\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n" + + " -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n" + + " -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n" + + " -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Front View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Front View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"|front\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n" + + " -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n" + + " -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n" + + " -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Persp View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Persp View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"|persp\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n" + + " -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n" + + " -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n" + + " -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1312\n -height 732\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"outlinerPanel\" (localizedPanelLabel(\"ToggledOutliner\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\toutlinerPanel -edit -l (localizedPanelLabel(\"ToggledOutliner\")) -mbv $menusOkayInPanels $panelName;\n" + + "\t\t$editorName = $panelName;\n outlinerEditor -e \n -docTag \"isolOutln_fromSeln\" \n -showShapes 0\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 1\n -showReferenceMembers 1\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -organizeByClip 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showParentContainers 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n" + + " -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -isSet 0\n -isSetMember 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -selectCommand \"print(\\\"\\\")\" \n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 1\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n -renderFilterIndex 0\n" + + " -selectionOrder \"chronological\" \n -expandAttribute 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"outlinerPanel\" (localizedPanelLabel(\"Outliner\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\toutlinerPanel -edit -l (localizedPanelLabel(\"Outliner\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n outlinerEditor -e \n -showShapes 0\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -organizeByClip 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n" + + " -showParentContainers 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n" + + " -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"graphEditor\" (localizedPanelLabel(\"Graph Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Graph Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n" + + " -organizeByClip 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 1\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showParentContainers 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 0\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 1\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 1\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n" + + " -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 1\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"GraphEd\");\n animCurveEditor -e \n -displayValues 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -showPlayRangeShades \"on\" \n -lockPlayRangeShades \"off\" \n -smoothness \"fine\" \n -resultSamples 1.041667\n" + + " -resultScreenSamples 0\n -resultUpdate \"delayed\" \n -showUpstreamCurves 1\n -keyMinScale 1\n -stackedCurvesMin -1\n -stackedCurvesMax 1\n -stackedCurvesSpace 0.2\n -preSelectionHighlight 0\n -constrainDrag 0\n -valueLinesToggle 1\n -highlightAffectedCurves 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dopeSheetPanel\" (localizedPanelLabel(\"Dope Sheet\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Dope Sheet\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n" + + " -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -organizeByClip 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showParentContainers 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 0\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 1\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"0\" \n -showSetMembers 0\n" + + " -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"DopeSheetEd\");\n dopeSheetEditor -e \n -displayValues 0\n -snapTime \"integer\" \n" + + " -snapValue \"none\" \n -outliner \"dopeSheetPanel1OutlineEd\" \n -showSummary 1\n -showScene 0\n -hierarchyBelow 0\n -showTicks 1\n -selectionWindow 0 0 0 0 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"timeEditorPanel\" (localizedPanelLabel(\"Time Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Time Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"clipEditorPanel\" (localizedPanelLabel(\"Trax Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Trax Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = clipEditorNameFromPanel($panelName);\n" + + " clipEditor -e \n -displayValues 0\n -snapTime \"none\" \n -snapValue \"none\" \n -initialized 0\n -manageSequencer 0 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"sequenceEditorPanel\" (localizedPanelLabel(\"Camera Sequencer\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Camera Sequencer\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = sequenceEditorNameFromPanel($panelName);\n clipEditor -e \n -displayValues 0\n -snapTime \"none\" \n -snapValue \"none\" \n -initialized 0\n -manageSequencer 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"hyperGraphPanel\" (localizedPanelLabel(\"Hypergraph Hierarchy\")) `;\n" + + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Hypergraph Hierarchy\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"HyperGraphEd\");\n hyperGraph -e \n -graphLayoutStyle \"hierarchicalLayout\" \n -orientation \"horiz\" \n -mergeConnections 0\n -zoom 1\n -animateTransition 0\n -showRelationships 1\n -showShapes 0\n -showDeformers 0\n -showExpressions 0\n -showConstraints 0\n -showConnectionFromSelected 0\n -showConnectionToSelected 0\n -showConstraintLabels 0\n -showUnderworld 0\n -showInvisible 0\n -transitionFrames 1\n -opaqueContainers 0\n -freeform 0\n -imagePosition 0 0 \n -imageScale 1\n -imageEnabled 0\n -graphType \"DAG\" \n" + + " -heatMapDisplay 0\n -updateSelection 1\n -updateNodeAdded 1\n -useDrawOverrideColor 0\n -limitGraphTraversal -1\n -range 0 0 \n -iconSize \"smallIcons\" \n -showCachedConnections 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"hyperShadePanel\" (localizedPanelLabel(\"Hypershade\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Hypershade\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"visorPanel\" (localizedPanelLabel(\"Visor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Visor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n" + + "\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"nodeEditorPanel\" (localizedPanelLabel(\"Node Editor\")) `;\n\tif ($nodeEditorPanelVisible || $nodeEditorWorkspaceControlOpen) {\n\t\tif (\"\" == $panelName) {\n\t\t\tif ($useSceneConfig) {\n\t\t\t\t$panelName = `scriptedPanel -unParent -type \"nodeEditorPanel\" -l (localizedPanelLabel(\"Node Editor\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"NodeEditorEd\");\n nodeEditor -e \n -allAttributes 0\n -allNodes 0\n -autoSizeNodes 1\n -consistentNameSize 1\n -createNodeCommand \"nodeEdCreateNodeCommand\" \n -connectNodeOnCreation 0\n -connectOnDrop 0\n -copyConnectionsOnPaste 0\n -connectionStyle \"bezier\" \n -defaultPinnedState 0\n -additiveGraphingMode 0\n -settingsChangedCallback \"nodeEdSyncControls\" \n -traversalDepthLimit -1\n -keyPressCommand \"nodeEdKeyPressCommand\" \n" + + " -nodeTitleMode \"name\" \n -gridSnap 0\n -gridVisibility 1\n -crosshairOnEdgeDragging 0\n -popupMenuScript \"nodeEdBuildPanelMenus\" \n -showNamespace 1\n -showShapes 1\n -showSGShapes 0\n -showTransforms 1\n -useAssets 1\n -syncedSelection 1\n -extendToShapes 1\n -editorMode \"default\" \n -hasWatchpoint 0\n $editorName;\n\t\t\t}\n\t\t} else {\n\t\t\t$label = `panel -q -label $panelName`;\n\t\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Node Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"NodeEditorEd\");\n nodeEditor -e \n -allAttributes 0\n -allNodes 0\n -autoSizeNodes 1\n -consistentNameSize 1\n -createNodeCommand \"nodeEdCreateNodeCommand\" \n -connectNodeOnCreation 0\n -connectOnDrop 0\n" + + " -copyConnectionsOnPaste 0\n -connectionStyle \"bezier\" \n -defaultPinnedState 0\n -additiveGraphingMode 0\n -settingsChangedCallback \"nodeEdSyncControls\" \n -traversalDepthLimit -1\n -keyPressCommand \"nodeEdKeyPressCommand\" \n -nodeTitleMode \"name\" \n -gridSnap 0\n -gridVisibility 1\n -crosshairOnEdgeDragging 0\n -popupMenuScript \"nodeEdBuildPanelMenus\" \n -showNamespace 1\n -showShapes 1\n -showSGShapes 0\n -showTransforms 1\n -useAssets 1\n -syncedSelection 1\n -extendToShapes 1\n -editorMode \"default\" \n -hasWatchpoint 0\n $editorName;\n\t\t\tif (!$useSceneConfig) {\n\t\t\t\tpanel -e -l $label $panelName;\n\t\t\t}\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"createNodePanel\" (localizedPanelLabel(\"Create Node\")) `;\n" + + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Create Node\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"polyTexturePlacementPanel\" (localizedPanelLabel(\"UV Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"UV Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"renderWindowPanel\" (localizedPanelLabel(\"Render View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Render View\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"shapePanel\" (localizedPanelLabel(\"Shape Editor\")) `;\n" + + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tshapePanel -edit -l (localizedPanelLabel(\"Shape Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"posePanel\" (localizedPanelLabel(\"Pose Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tposePanel -edit -l (localizedPanelLabel(\"Pose Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dynRelEdPanel\" (localizedPanelLabel(\"Dynamic Relationships\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Dynamic Relationships\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"relationshipPanel\" (localizedPanelLabel(\"Relationship Editor\")) `;\n" + + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Relationship Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"referenceEditorPanel\" (localizedPanelLabel(\"Reference Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Reference Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"componentEditorPanel\" (localizedPanelLabel(\"Component Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Component Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dynPaintScriptedPanelType\" (localizedPanelLabel(\"Paint Effects\")) `;\n" + + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Paint Effects\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"scriptEditorPanel\" (localizedPanelLabel(\"Script Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Script Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"profilerPanel\" (localizedPanelLabel(\"Profiler Tool\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Profiler Tool\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"contentBrowserPanel\" (localizedPanelLabel(\"Content Browser\")) `;\n" + + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Content Browser\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"Stereo\" (localizedPanelLabel(\"Stereo\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Stereo\")) -mbv $menusOkayInPanels $panelName;\n{ string $editorName = ($panelName+\"Editor\");\n stereoCameraView -e \n -camera \"|persp\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"wireframe\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 1\n" + + " -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 4 4 \n -bumpResolution 4 4 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n" + + " -lowQualityLighting 0\n -maximumNumHardwareLights 0\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n" + + " -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 0\n -height 0\n -sceneRenderFilter 0\n -displayMode \"centerEye\" \n -viewColor 0 0 0 1 \n -useCustomBackground 1\n $editorName;\n stereoCameraView -e -viewSelected 0 $editorName;\n stereoCameraView -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName; };\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\tif ($useSceneConfig) {\n string $configName = `getPanel -cwl (localizedPanelLabel(\"Current Layout\"))`;\n" + + " if (\"\" != $configName) {\n\t\t\tpanelConfiguration -edit -label (localizedPanelLabel(\"Current Layout\")) \n\t\t\t\t-userCreated false\n\t\t\t\t-defaultImage \"vacantCell.xP:/\"\n\t\t\t\t-image \"\"\n\t\t\t\t-sc false\n\t\t\t\t-configString \"global string $gMainPane; paneLayout -e -cn \\\"single\\\" -ps 1 100 100 $gMainPane;\"\n\t\t\t\t-removeAllPanels\n\t\t\t\t-ap false\n\t\t\t\t\t(localizedPanelLabel(\"Persp View\")) \n\t\t\t\t\t\"modelPanel\"\n" + + "\t\t\t\t\t\"$panelName = `modelPanel -unParent -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels `;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera persp` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 16384\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -controllers 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -greasePencils 1\\n -shadows 0\\n -captureSequenceNumber -1\\n -width 1312\\n -height 732\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName;\\nmodelEditor -e \\n -pluginObjects \\\"gpuCacheDisplayFilter\\\" 1 \\n $editorName\"\n" + + "\t\t\t\t\t\"modelPanel -edit -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels $panelName;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera persp` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 16384\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -controllers 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -greasePencils 1\\n -shadows 0\\n -captureSequenceNumber -1\\n -width 1312\\n -height 732\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName;\\nmodelEditor -e \\n -pluginObjects \\\"gpuCacheDisplayFilter\\\" 1 \\n $editorName\"\n" + "\t\t\t\t$configName;\n\n setNamedPanelLayout (localizedPanelLabel(\"Current Layout\"));\n }\n\n panelHistory -e -clear mainPanelHistory;\n sceneUIReplacement -clear;\n\t}\n\n\ngrid -spacing 5 -size 12 -divisions 5 -displayAxes yes -displayGridLines yes -displayDivisionLines yes -displayPerspectiveLabels no -displayOrthographicLabels no -displayAxesBold yes -perspectiveLabelPosition axis -orthographicLabelPosition edge;\nviewManip -drawCompass 0 -compassAngle 0 -frontParameters \"\" -homeParameters \"\" -selectionLockParameters \"\";\n}\n"); setAttr ".st" 3; createNode script -n "sceneConfigurationScriptNode"; @@ -283,7 +283,7 @@ createNode objectSet -n "workfileMain"; addAttr -ci true -sn "task" -ln "task" -dt "string"; addAttr -ci true -sn "instance_id" -ln "instance_id" -dt "string"; addAttr -ci true -sn "publish_attributes" -ln "publish_attributes" -dt "string"; - addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" + addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" -dt "string"; setAttr ".ihi" 0; setAttr ".hio" yes; @@ -334,17 +334,17 @@ createNode objectSet -n "_renderingMain:Main"; addAttr -ci true -sn "instance_id" -ln "instance_id" -dt "string"; addAttr -ci true -sn "review" -ln "review" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "extendFrames" -ln "extendFrames" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "overrideExistingFrame" -ln "overrideExistingFrame" -min 0 + addAttr -ci true -sn "overrideExistingFrame" -ln "overrideExistingFrame" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "tileRendering" -ln "tileRendering" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "tilesX" -ln "tilesX" -at "long"; addAttr -ci true -sn "tilesY" -ln "tilesY" -at "long"; addAttr -ci true -sn "convertToScanline" -ln "convertToScanline" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "useReferencedAovs" -ln "useReferencedAovs" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "renderSetupIncludeLights" -ln "renderSetupIncludeLights" -min + addAttr -ci true -sn "renderSetupIncludeLights" -ln "renderSetupIncludeLights" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "publish_attributes" -ln "publish_attributes" -dt "string"; - addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" + addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" -dt "string"; addAttr -ci true -sn "cbId" -ln "cbId" -dt "string"; setAttr ".ihi" 0; @@ -435,6 +435,8 @@ select -ne :defaultColorMgtGlobals; select -ne :hardwareRenderGlobals; setAttr ".ctrs" 256; setAttr ".btrs" 512; +select -ne :ikSystem; + setAttr -s 4 ".sol"; connectAttr "rs_Main.ri" ":persp.rlio[0]"; connectAttr "rs_Main.ri" ":top.rlio[0]"; connectAttr "rs_Main.ri" ":front.rlio[0]"; From e03e148616b5965d8a56751549c0f5712a1dc73b Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Fri, 15 Sep 2023 09:14:32 +0100 Subject: [PATCH 52/69] Convert Maya scene to 2022 --- .../test_project_test_asset_test_task_v001.ma | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/integration/hosts/maya/input/workfile/test_project_test_asset_test_task_v001.ma b/tests/integration/hosts/maya/input/workfile/test_project_test_asset_test_task_v001.ma index d8677f92831..6664b75436c 100644 --- a/tests/integration/hosts/maya/input/workfile/test_project_test_asset_test_task_v001.ma +++ b/tests/integration/hosts/maya/input/workfile/test_project_test_asset_test_task_v001.ma @@ -178,12 +178,12 @@ createNode objectSet -n "modelMain"; addAttr -ci true -sn "instance_id" -ln "instance_id" -dt "string"; addAttr -ci true -sn "writeColorSets" -ln "writeColorSets" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "writeFaceSets" -ln "writeFaceSets" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "includeParentHierarchy" -ln "includeParentHierarchy" -min + addAttr -ci true -sn "includeParentHierarchy" -ln "includeParentHierarchy" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "attr" -ln "attr" -dt "string"; addAttr -ci true -sn "attrPrefix" -ln "attrPrefix" -dt "string"; addAttr -ci true -sn "publish_attributes" -ln "publish_attributes" -dt "string"; - addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" + addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" -dt "string"; setAttr ".ihi" 0; setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:7364ea6776c9"; @@ -283,7 +283,7 @@ createNode objectSet -n "workfileMain"; addAttr -ci true -sn "task" -ln "task" -dt "string"; addAttr -ci true -sn "instance_id" -ln "instance_id" -dt "string"; addAttr -ci true -sn "publish_attributes" -ln "publish_attributes" -dt "string"; - addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" + addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" -dt "string"; setAttr ".ihi" 0; setAttr ".hio" yes; @@ -334,17 +334,17 @@ createNode objectSet -n "_renderingMain:Main"; addAttr -ci true -sn "instance_id" -ln "instance_id" -dt "string"; addAttr -ci true -sn "review" -ln "review" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "extendFrames" -ln "extendFrames" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "overrideExistingFrame" -ln "overrideExistingFrame" -min 0 + addAttr -ci true -sn "overrideExistingFrame" -ln "overrideExistingFrame" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "tileRendering" -ln "tileRendering" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "tilesX" -ln "tilesX" -at "long"; addAttr -ci true -sn "tilesY" -ln "tilesY" -at "long"; addAttr -ci true -sn "convertToScanline" -ln "convertToScanline" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "useReferencedAovs" -ln "useReferencedAovs" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "renderSetupIncludeLights" -ln "renderSetupIncludeLights" -min + addAttr -ci true -sn "renderSetupIncludeLights" -ln "renderSetupIncludeLights" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "publish_attributes" -ln "publish_attributes" -dt "string"; - addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" + addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" -dt "string"; addAttr -ci true -sn "cbId" -ln "cbId" -dt "string"; setAttr ".ihi" 0; From d72e8f89cba7c57574ca5d3258ccfd09a5798c4b Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Mon, 18 Sep 2023 16:21:01 +0100 Subject: [PATCH 53/69] Remove old default Maya versions. --- .../system_settings/applications.json | 120 ------------------ 1 file changed, 120 deletions(-) diff --git a/openpype/settings/defaults/system_settings/applications.json b/openpype/settings/defaults/system_settings/applications.json index cd724f6e0eb..c6796a746ac 100644 --- a/openpype/settings/defaults/system_settings/applications.json +++ b/openpype/settings/defaults/system_settings/applications.json @@ -71,66 +71,6 @@ "environment": { "MAYA_VERSION": "2022" } - }, - "2020": { - "use_python_2": true, - "executables": { - "windows": [ - "C:\\Program Files\\Autodesk\\Maya2020\\bin\\maya.exe" - ], - "darwin": [], - "linux": [ - "/usr/autodesk/maya2020/bin/maya" - ] - }, - "arguments": { - "windows": [], - "darwin": [], - "linux": [] - }, - "environment": { - "MAYA_VERSION": "2020" - } - }, - "2019": { - "use_python_2": true, - "executables": { - "windows": [ - "C:\\Program Files\\Autodesk\\Maya2019\\bin\\maya.exe" - ], - "darwin": [], - "linux": [ - "/usr/autodesk/maya2019/bin/maya" - ] - }, - "arguments": { - "windows": [], - "darwin": [], - "linux": [] - }, - "environment": { - "MAYA_VERSION": "2019" - } - }, - "2018": { - "use_python_2": true, - "executables": { - "windows": [ - "C:\\Program Files\\Autodesk\\Maya2018\\bin\\maya.exe" - ], - "darwin": [], - "linux": [ - "/usr/autodesk/maya2018/bin/maya" - ] - }, - "arguments": { - "windows": [], - "darwin": [], - "linux": [] - }, - "environment": { - "MAYA_VERSION": "2018" - } } } }, @@ -206,66 +146,6 @@ "environment": { "MAYA_VERSION": "2022" } - }, - "2020": { - "use_python_2": true, - "executables": { - "windows": [ - "C:\\Program Files\\Autodesk\\Maya2020\\bin\\mayapy.exe" - ], - "darwin": [], - "linux": [ - "/usr/autodesk/maya2020/bin/mayapy" - ] - }, - "arguments": { - "windows": [], - "darwin": [], - "linux": [] - }, - "environment": { - "MAYA_VERSION": "2020" - } - }, - "2019": { - "use_python_2": true, - "executables": { - "windows": [ - "C:\\Program Files\\Autodesk\\Maya2019\\bin\\mayapy.exe" - ], - "darwin": [], - "linux": [ - "/usr/autodesk/maya2019/bin/mayapy" - ] - }, - "arguments": { - "windows": [], - "darwin": [], - "linux": [] - }, - "environment": { - "MAYA_VERSION": "2019" - } - }, - "2018": { - "use_python_2": true, - "executables": { - "windows": [ - "C:\\Program Files\\Autodesk\\Maya2018\\bin\\mayapy.exe" - ], - "darwin": [], - "linux": [ - "/usr/autodesk/maya2018/bin/mayapy" - ] - }, - "arguments": { - "windows": [], - "darwin": [], - "linux": [] - }, - "environment": { - "MAYA_VERSION": "2018" - } } } }, From 5e869291dee922a53708c2637844ce31b9bc0260 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Mon, 18 Sep 2023 16:21:37 +0100 Subject: [PATCH 54/69] Remove code for Maya 2020 --- tests/integration/hosts/maya/lib.py | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/tests/integration/hosts/maya/lib.py b/tests/integration/hosts/maya/lib.py index 4f802f8faa7..35cc2a66edf 100644 --- a/tests/integration/hosts/maya/lib.py +++ b/tests/integration/hosts/maya/lib.py @@ -35,13 +35,8 @@ def get_log_path(self, dirpath, app_variant): @pytest.fixture(scope="module") def app_args(self, app_group, app_variant): - # We should try and support 2020? - # Current issue is "-I" argument does not exist for 2020 and start up - # issues with color management. - msg = "Maya 2020 and below is not supported for testing." - assert int(app_variant) > 2020, msg - args = [] + if self.running_in_mayapy(app_group): args = ["-I", self.get_usersetup_path()] @@ -133,11 +128,12 @@ def test_publish( matches = re.findall(error_regex, publish_finished) assert not matches, matches[0][0] - + """ # Check for python errors. error_regex = r"// Error((.|\n)*)" matches = re.findall(error_regex, logging_output) assert not matches, matches[0][0] + """ class MayaPublishTest(MayaFixtures, PublishTest): From ec1a740a9c65c4068bddc2b8af3b5f1a16c384e6 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Mon, 18 Sep 2023 16:22:00 +0100 Subject: [PATCH 55/69] Fix block comments. --- tests/integration/hosts/maya/lib.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/integration/hosts/maya/lib.py b/tests/integration/hosts/maya/lib.py index 35cc2a66edf..0e1ae75bcd4 100644 --- a/tests/integration/hosts/maya/lib.py +++ b/tests/integration/hosts/maya/lib.py @@ -128,12 +128,11 @@ def test_publish( matches = re.findall(error_regex, publish_finished) assert not matches, matches[0][0] - """ + # Check for python errors. error_regex = r"// Error((.|\n)*)" matches = re.findall(error_regex, logging_output) assert not matches, matches[0][0] - """ class MayaPublishTest(MayaFixtures, PublishTest): From 03a792f4e315209c5064a229029dc1293714c7be Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Tue, 19 Sep 2023 12:39:53 +0100 Subject: [PATCH 56/69] Add info on MayaPy --- tests/integration/hosts/maya/lib.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/tests/integration/hosts/maya/lib.py b/tests/integration/hosts/maya/lib.py index 0e1ae75bcd4..c78b60d6e6a 100644 --- a/tests/integration/hosts/maya/lib.py +++ b/tests/integration/hosts/maya/lib.py @@ -38,7 +38,21 @@ def app_args(self, app_group, app_variant): args = [] if self.running_in_mayapy(app_group): - args = ["-I", self.get_usersetup_path()] + # Attempts to run MayaPy in 2022 has failed. + msg = "Maya 2022 and older is not supported through MayaPy" + assert int(app_variant) > 2022, msg + + # Maya 2023+ can isolate from the users environment. Although the + # command flag is present in older versions of Maya, it does not + # work resulting a fatal python error: + # Fatal Python error: initfsencoding: unable to load the file + # system codec + # ModuleNotFoundError: No module named 'encodings' + args.append("-I") + + # MayaPy can only be passed a python script, so Maya scene opening + # will happen post launch. + args.append(self.get_usersetup_path()) yield args From f6aaa0c23a2e03ed10dd6a16348acb368840103c Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Tue, 19 Sep 2023 15:38:48 +0100 Subject: [PATCH 57/69] Remove logs dumps --- .../openpype_tests/openpype_tests.logs.json | 150 ------------------ 1 file changed, 150 deletions(-) delete mode 100644 tests/integration/hosts/maya/input/dumps/openpype_tests/openpype_tests.logs.json diff --git a/tests/integration/hosts/maya/input/dumps/openpype_tests/openpype_tests.logs.json b/tests/integration/hosts/maya/input/dumps/openpype_tests/openpype_tests.logs.json deleted file mode 100644 index 4149f42bd68..00000000000 --- a/tests/integration/hosts/maya/input/dumps/openpype_tests/openpype_tests.logs.json +++ /dev/null @@ -1,150 +0,0 @@ -[{ - "_id": { - "$oid": "60e5c1db13f8c29e6b95ab30" - }, - "timestamp": { - "$date": "2021-07-07T17:01:47.169Z" - }, - "level": "INFO", - "thread": 29832, - "threadName": "Thread-1", - "message": "Starting WebServer server", - "loggerName": "WebServer", - "fileName": "C:\\Users\\petrk\\PycharmProjects\\Pype3.0\\pype\\openpype\\modules\\webserver\\server.py", - "module": "server", - "method": "run", - "lineNumber": 85, - "process_id": { - "$oid": "60e5c1d213f8c29e6b95ab2b" - }, - "hostname": "LAPTOP-UB778LHG", - "hostip": "10.28.18.11", - "username": "petrk", - "system_name": "Windows", - "process_name": "Tray" -}, -{ - "_id": { - "$oid": "60e5c28613f8c29e6b95ab31" - }, - "timestamp": { - "$date": "2021-07-07T17:04:38.609Z" - }, - "level": "INFO", - "thread": 28316, - "threadName": "MainThread", - "message": "Ftrack action server was forced to stop", - "loggerName": "FtrackModule", - "fileName": "C:\\Users\\petrk\\PycharmProjects\\Pype3.0\\pype\\openpype\\modules\\ftrack\\tray\\ftrack_tray.py", - "module": "ftrack_tray", - "method": "stop_action_server", - "lineNumber": 241, - "process_id": { - "$oid": "60e5c1d213f8c29e6b95ab2b" - }, - "hostname": "LAPTOP-UB778LHG", - "hostip": "10.28.18.11", - "username": "petrk", - "system_name": "Windows", - "process_name": "Tray" -}, -{ - "_id": { - "$oid": "60e5c1db13f8c29e6b95ab2e" - }, - "timestamp": { - "$date": "2021-07-07T17:01:47.021Z" - }, - "level": "INFO", - "thread": 28316, - "threadName": "MainThread", - "message": "Please sign in to Ftrack", - "loggerName": "FtrackModule", - "fileName": "C:\\Users\\petrk\\PycharmProjects\\Pype3.0\\pype\\openpype\\modules\\ftrack\\tray\\ftrack_tray.py", - "module": "ftrack_tray", - "method": "validate", - "lineNumber": 72, - "process_id": { - "$oid": "60e5c1d213f8c29e6b95ab2b" - }, - "hostname": "LAPTOP-UB778LHG", - "hostip": "10.28.18.11", - "username": "petrk", - "system_name": "Windows", - "process_name": "Tray" -}, -{ - "_id": { - "$oid": "60e5c28613f8c29e6b95ab32" - }, - "timestamp": { - "$date": "2021-07-07T17:04:38.618Z" - }, - "level": "INFO", - "thread": 28448, - "threadName": "Thread-2", - "message": "IdleManagerThread has stopped", - "loggerName": "IdleManagerThread", - "fileName": "C:\\Users\\petrk\\PycharmProjects\\Pype3.0\\pype\\openpype\\modules\\idle_manager\\idle_threads.py", - "module": "idle_threads", - "method": "on_stop", - "lineNumber": 53, - "process_id": { - "$oid": "60e5c1d213f8c29e6b95ab2b" - }, - "hostname": "LAPTOP-UB778LHG", - "hostip": "10.28.18.11", - "username": "petrk", - "system_name": "Windows", - "process_name": "Tray" -}, -{ - "_id": { - "$oid": "60e5c28613f8c29e6b95ab33" - }, - "timestamp": { - "$date": "2021-07-07T17:04:38.783Z" - }, - "level": "INFO", - "thread": 29832, - "threadName": "Thread-1", - "message": "Web server stopped", - "loggerName": "WebServer", - "fileName": "C:\\Users\\petrk\\PycharmProjects\\Pype3.0\\pype\\openpype\\modules\\webserver\\server.py", - "module": "server", - "method": "run", - "lineNumber": 107, - "process_id": { - "$oid": "60e5c1d213f8c29e6b95ab2b" - }, - "hostname": "LAPTOP-UB778LHG", - "hostip": "10.28.18.11", - "username": "petrk", - "system_name": "Windows", - "process_name": "Tray" -}, -{ - "_id": { - "$oid": "60e5c1db13f8c29e6b95ab2f" - }, - "timestamp": { - "$date": "2021-07-07T17:01:47.164Z" - }, - "level": "INFO", - "thread": 28448, - "threadName": "Thread-2", - "message": "IdleManagerThread has started", - "loggerName": "IdleManagerThread", - "fileName": "C:\\Users\\petrk\\PycharmProjects\\Pype3.0\\pype\\openpype\\modules\\idle_manager\\idle_threads.py", - "module": "idle_threads", - "method": "run", - "lineNumber": 57, - "process_id": { - "$oid": "60e5c1d213f8c29e6b95ab2b" - }, - "hostname": "LAPTOP-UB778LHG", - "hostip": "10.28.18.11", - "username": "petrk", - "system_name": "Windows", - "process_name": "Tray" -}] From d7460aa4cf0065ebba1b6dfe0fd8c36c55a6dd3d Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Tue, 19 Sep 2023 15:39:21 +0100 Subject: [PATCH 58/69] Removed logs dumps --- tests/lib/testing_classes.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tests/lib/testing_classes.py b/tests/lib/testing_classes.py index 6e42b92264c..740d8dd0dc4 100644 --- a/tests/lib/testing_classes.py +++ b/tests/lib/testing_classes.py @@ -63,7 +63,7 @@ class ModuleUnitTest(BaseTest): }, "settings": { "name": "openpype_tests", - "collections": ["logs"] + "collections": [] } } @@ -124,6 +124,9 @@ def setup_only(cls, data_folder, openpype_mongo, app_variant): ) for _, data in cls.DATABASE_NAMES.items(): + if not data["collections"]: + continue + database_handler.setup_from_dump( data["name"], backup_directory, From 1a2a0f17313f2bc971d86085cf799adea321210f Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Tue, 19 Sep 2023 15:39:38 +0100 Subject: [PATCH 59/69] Default thumbnails to input resolution --- openpype/settings/defaults/project_settings/global.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openpype/settings/defaults/project_settings/global.json b/openpype/settings/defaults/project_settings/global.json index b6eb2f52f18..96f4669e77b 100644 --- a/openpype/settings/defaults/project_settings/global.json +++ b/openpype/settings/defaults/project_settings/global.json @@ -115,8 +115,8 @@ 0, 255 ], - "width": 1920, - "height": 1080, + "width": 0, + "height": 0, "scale_pixel_aspect": true, "bg_color": [ 0, From d98502a2daaeebfd7f1b37db675c9e448a7b8cb9 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Tue, 19 Sep 2023 15:47:13 +0100 Subject: [PATCH 60/69] Ingested expected Maya data --- ...test_project_test_asset_modelMain_hero.abc | Bin 0 -> 24661 bytes .../test_project_test_asset_modelMain_hero.ma | 1224 +++++++++++++++++ ...test_project_test_asset_modelMain_v001.abc | Bin 0 -> 24661 bytes .../test_project_test_asset_modelMain_v001.ma | 1224 +++++++++++++++++ ..._renderTest_taskRenderMain_beauty_v001.exr | Bin 0 -> 2858 bytes ..._renderTest_taskRenderMain_beauty_v001.jpg | Bin 0 -> 1686 bytes ...derTest_taskRenderMain_beauty_v001_png.png | Bin 0 -> 155 bytes ...oject_test_asset_workfileTest_task_v001.ma | 476 +++++++ .../test_project_test_asset_test_task_v001.ma | 476 +++++++ .../test_project_test_asset_test_task_v002.ma | 436 ++++++ .../test_asset/work/test_task/workspace.mel | 10 + .../hosts/maya/test_publish_in_maya.py | 9 +- tests/lib/testing_classes.py | 5 +- 13 files changed, 3853 insertions(+), 7 deletions(-) create mode 100644 tests/integration/hosts/maya/expected/test_project/test_asset/publish/model/modelMain/hero/test_project_test_asset_modelMain_hero.abc create mode 100644 tests/integration/hosts/maya/expected/test_project/test_asset/publish/model/modelMain/hero/test_project_test_asset_modelMain_hero.ma create mode 100644 tests/integration/hosts/maya/expected/test_project/test_asset/publish/model/modelMain/v001/test_project_test_asset_modelMain_v001.abc create mode 100644 tests/integration/hosts/maya/expected/test_project/test_asset/publish/model/modelMain/v001/test_project_test_asset_modelMain_v001.ma create mode 100644 tests/integration/hosts/maya/expected/test_project/test_asset/publish/render/renderTest_taskRenderMain_beauty/v001/test_project_test_asset_renderTest_taskRenderMain_beauty_v001.exr create mode 100644 tests/integration/hosts/maya/expected/test_project/test_asset/publish/render/renderTest_taskRenderMain_beauty/v001/test_project_test_asset_renderTest_taskRenderMain_beauty_v001.jpg create mode 100644 tests/integration/hosts/maya/expected/test_project/test_asset/publish/render/renderTest_taskRenderMain_beauty/v001/test_project_test_asset_renderTest_taskRenderMain_beauty_v001_png.png create mode 100644 tests/integration/hosts/maya/expected/test_project/test_asset/publish/workfile/workfileTest_task/v001/test_project_test_asset_workfileTest_task_v001.ma create mode 100644 tests/integration/hosts/maya/expected/test_project/test_asset/work/test_task/test_project_test_asset_test_task_v001.ma create mode 100644 tests/integration/hosts/maya/expected/test_project/test_asset/work/test_task/test_project_test_asset_test_task_v002.ma create mode 100644 tests/integration/hosts/maya/expected/test_project/test_asset/work/test_task/workspace.mel diff --git a/tests/integration/hosts/maya/expected/test_project/test_asset/publish/model/modelMain/hero/test_project_test_asset_modelMain_hero.abc b/tests/integration/hosts/maya/expected/test_project/test_asset/publish/model/modelMain/hero/test_project_test_asset_modelMain_hero.abc new file mode 100644 index 0000000000000000000000000000000000000000..e7de9d7bc115560e5318565dac9b2932cacb4cd1 GIT binary patch literal 24661 zcmeI&X_Osh+4b>+c?bl;Oc)xKFdC9{0wLI^0tAp5nNc)!l5P@6(oJ_KBn%p7R7Mq~ z5iu$%&JdiQN9dp^4m9Abs3?Q;04k_B!Lxr=bzL%o_qb@=Nvd? zL2u{Oo@w*)zv(mQE$BS(;2HC$%s6n?^yyO$oH2b~=Yrmz>0>sjw;o&9_3FBJRaf=a zwY`@)ALu>d@!ht$ZS@_~Prh}(y%zr4z0B*K*)#p%dGijQ*)#v&?&Zq*-AC*C^wt&J zfB5ZN?Yigt{`%lqu{WGsU_N*OSdp>x{+P%gedFRE~k1e@4>5e<2E`Gd`J;xqd z@-b)aIO1LS-BUXFcjBYtcV!#AGV@p1CVWV|qw*SlPUgxWuncUrJ^(JkXgo*Z{a$pfn|8;MH({kS_u7Tz+xxqa!$OKZOq>y zJq}#3a19>1;ODLRbwA_cFRuIib>{!7?te+V&Fjy#Aae(@O?$t0PaI#|Iq}4`*7V{P zPqy$eKfZM&D*2)nPmX*ldGS9taeUb;-gV{nYvYgL&&GdYw!zCYe_4c&jJGzg;oCEJ z=WK(0-iF^As^=e(eMaTBgXzUK=8vSu9amnr2Jf_T`{LHRAO7KWp97hHLEZnH(yKm~ z_1`huwDOj?_c)H|8o?7 z1V0*on{0#MmHDe9JR#o0c@4iMbN`r%ecp!OYR}&)`;5x>d1rdDjrl(;d;G*2{L}_B zimU2=_*>L{-jw-d&iHr_)t~E{YHsPb)Nq8ioHsk8o-X!Nz{E@bQRkp!TX8!LZd}X|?vJL)W z=5Cm6u>CgtR%3o)8*_e_UTlN6OpjxC`tcgP{!R;uAJqM95&!bK&);VL6LtSr#2Z(C zu7@%==Wfy7?=P-6w^*6$rfaXY#yO|6e&b6X&HCi}+v5N1igU})i&y5_=emr48s9mL zt@W29d{?~3@)~wMUY2dJ&)e`@)|#Jlx^Q0OFQymU;78J9)^QCUTrrrns``02{+)H7 z*4mnyK9=Glb5h`&p=!Jo_g&qjD+JZp+C$@}MgT(^D0 zZ#l2c$@RN%4ad$?+hA*&ay!oVthFlp87SAf>T@LXou}rwhUfdXWZ%8{bR~POUf)(@ zeOrz7Z8g@n)mYzFV|`nV^=&oQx7AqRR%3n3UhDPcx7WATSl?D-eOrz7Z8g@n^y~F) zHP*M)Sl?D-earpU=WnZV{w?swi@Set8xCe8s~4TasFoA)}6n}YTfx;?zcXF z`R((!)i{4!jq^9x?{(*It8xCe8s~4TasIX%=WqKyYuzzXU!Plz>vOAdeQq_b&#lJw zxz)HnmwtVHZZ)pYt;Y4a)wn*FpSQj~^V`>F^V`?wR^$5IYFwXNjq7u(aeZzzuFtK; z^|{r!K9~EgzkiFy_ixeo{w*5czeVHww`hF-7LD)UqVfG(G`@e!@6!7Fw>+2X?_YlV z`?qL({}zq!-@@9}-@mzjulxQj{rda2{O+y4e~ZTVZ}zqB`?uV0eScLn?yri*{Z-Mp zzbYE{S4HFgs%YF_6^;9=qH%v!-YeDjSLJ@|`zwC?{;Fu)Ulon}tDUdHe^oT@ugd+__s>P+{<&z}KbLD=-#-_P`{$x@|6DZgpNq!*bJ4heE*kgG z<$mk?XMX$sxoF%!7mfSpqH+IRH13~EzrKGi*R;NWE*kgGMdSXt+;9E+sA&8?DjL6! zipKAwqVfBvX#74Z8o!T<#_yw|@%yM~{5~r8TmL@dw|^fMjo(K_#9fBzPZ-@oNr*S~+u^Sb{1TQq+E7LDJ(S?hJbe~ZTN-=gvR zw`lzSE%)ns?K?7l`}c3r`2Aa+*Y)q;d?&B_{aZAC|7NY%{r)W)zkiFy@86>F`?uV0 z{d}WnJl`l9&o_$3^NphMe4}VQ-zXZ-H;TsdjiT{4bN@ zWaW3Ryyc#4V{aF=pHkuNBTuV%c!y~Hh=;wEXJ$OSQ?y~k!#hVCMLaw)+Bo9jT_R7% zczD-n(};(6i#CgRc=u@Yh=)6(aS;#i5p5Ci@N=RqBOZQkG(O_t=S5pZJiKS*@fZ(J ziY7!nyjQeM#KSW4$MZCApGa&{Uf>Y@be?N@$lqGZajQIBsU(O z63LB+r$%z);c1cFc(^l?8xK#9IwBsP5y`EiW=|yL#={3ia^vBdk=%Ir;7D#fJS&nL z4<8cAjfZ6>E8YvDu1Ict+=}GJ!$l-F9-bY^jfW472`Zn_ctisdD4tGa|Y1@R^a^c=)VHZan0yvx$*FlNNzm5G?E(+_eFB! z;r>W&JbXbUHy$2{quZrZx!>^3w#>20Q^6x#>20RULG@Y^D}@$mJL+<166 zk{b`-5Xp^)-yX@0hi{DJ#>4N3o-PBsV^OcO*9+eorJf z9=258o2WjfX!F$&iOX7|D%?KNQK0hd&(2jfX!H$&H6U z8p(}^KNiW2hi{GK#>2Noa^vAOk=%Ir_DF6#ygHH<@8i)YBDt-u`ID(~1bF3x>1OOa^vA~k=%HAi%4!fyk#Ue9v&abjfc022Zta^vCMBDwMK?vdPh zxFeDq5APAljfbBT$&H7f8_A7_pBKrEhxd%+#>0~$x$*E`k=%HA??`SuyiX)I9^N;S z8xQXn$&H6)CM(|l(eop@@$uwHZajQIBsU(O63LB+r$%z);c1cFc(^l?8xK#9yt`1r6$ZajQ=BsU(O6UmK-kBH>P!$(GP@R)JS;O=@lK6S zi{!?~r$=(*;WHw+@$i|E+<5q`NNzm*;z({h{E|p+JbZQ}Hy(azBsU&@StK_eo*T)H zhtG-R#>3r_+<16iBsU(OAIXh}7esR7;hsotJlq?}jfc;T2}ax$*FYk=%HAMI<*KUKz=ahcAlc#={p!a^qo{$%=PLP9uI8`rFEQnR{g&FW?~tDD!Xj;mSSqGol=n$__&t6SBqZe6oFp=NcPnpJ<7<^wuL zWPlwX#@Ml8j2#!o*fC*@9S_FXv0#iH2gcYjV2rK5F}C)`*t#2IYi^9Kw=uTX#@IR= zV{2@Tt*pva%pf&uD{*%Ffj)DIi1OGV& z{`VaNzHk3GYj*ncH$36W)%zdw%uC;~WMHo|UiODq#hRU8r)#}d*Hw*iQQBjEt9HaM zzT^u&f2)q4@YHV~JA2D1Z#(mspPsz${k;1|kL&t}MoYe7c&AqFl{H(I^@ic$vQF>3 zy{z|-j+S*{?@!B`ufoE1_m7S%>)VHSD(k}DNoAeU*;&^0#>_731Ea^4^~T||%DSkx zx2y+t4wiLn{u@K@SM^!-cHgL4sp_-zv;Wb|)8}Yc)#qqe)#qsX(dTGa)#qqe)hAz{ zqg_>>Uf1VnSJmfe{u>T`j&@ajj&@ajj&@ajj&@ajdOv;If1Y30*|mF9+sbDtS)Y|R zTvmM=>r>UIs?W+FS5|#iuTLtgK8^LM>QmLHs!vs)sy@{!&*RE9)05uYy;bA#wahEm zJ-w9c-m2HV?9;q@-OE0W>veC{>z>!kb#K+{UiN8Tz3ye7#`U_FeHz#6UiR5O_S$RP z&aT~?+Lk`CK2>?D`c&mv`Qyr}&+7F_W!0y#JXL+F@>KPy%2U;+TCIC^ZnTd*Ro3n7 z+Pzi2*M`eJ)oR^`>vbP4`>cHHK3wLh%2Tb@eYjrt;dvbQl*L}ENckgH2Ws~3U z^|@Qs>KxH$du`jKt*57|Xu$s|;;x+?GDEJ}YlrS@mfwPgS3)K2?3H`c(C)>QmLHs?YiySa)qP zmS^pkRiBk#t+76hy@%SCJ}ZA*S@l`HHmR)oG}fo8PgS3)K2?3H`c(Dlz2#Ze>Kdre z+AnK$OuOb($6&Q4Rd(&()V8cU)@Swlq_XPMSf8psReh@ZRQ0LqQ`KjE4Ow?>Hr8kD zm$h2=>fGR0>t3y`vCph}PqnRT-Mwzz#}(DOk1P8$uGW2A*{5-}?&HcnjjMHc?a2Qx zna?cGs#f12`mFu3>eE=Bsyep&TtEKgORsytPFs`{+_YK`?-yr>UIs!vs)sy-{fItKMwyaj? zpQ=91)n`?!dl-Gzep&TttWQ;+syKxH$^?J3&`ZTt0wJm*OeX9CY^{ML9 z9DP=`y2sLI?Uz-b#`;wCsp?bJr>f7&ug+n8R&(OP^SusyP2l!pID!&K6(1AYITpQ z&)P4mK8^LM>QmLHs!vs)m0w*0^;x}Mox}Px)~BjZwVk1!jN8&D&i&>K^qT#b_sqfa zJ8F7oXIanf?JetlqnFp?_mwsO?|oTs7=Ey<(>tFmYj5vHL-%X;7F;<648udK)VEAN^7rr>2i?oIT!s;K&N&#ymY{h6mf z+v(4I{jDmh{#F%Lf97>Ww%6aPqUz5){h6mf^Uf)2)t`C#TUE6GJLhK(JMOh_>3QS6 z#~yOZ+Mcg%_{Qzh==M?8t^C6~M4mD8@Q#t+yga;9@*J9n_lP`;=Hcf=ey;NHb0g2BdH8ve=h8g9XXM#5 z4^N6bpXTAcBG0IKc<;z_Y98Jv+BV|t8|@d#O_q57NNzm*{77y*JUNmZ4<8W8jfba1 za^vBtk=%HAS|m3f?u_Kd!_y0n2a^vB{Bf0VLoJejwd_*KS9zHUX z8xJ29$&H6!7|D%?kB;QV!^cE&T;Pmbiq!>2?tl$XgVh7s*YQ`20wQJiIuP8xJpu<&Ya};W;%lQ-5f5J%$!%55Z%dUM4__b2jfaOLx$*D~k=%Ir?UCGg_{K4N6{>K4}T(B9r5rdBe|`v`BSNK1bF()^6+RRHy*w(k{b`-AIXh}ABg0}!(WZ$#=~EWWXSt^^o>Yv zvc%tv9)2{E8xKDg$&H799LbG`e-g=!hkqK$koU9b=aJlG ziGLBvjfa03$&H7970Hl?e;vt&a^vAA zBf0VLQ<2I|0z{&Jp6PdHy-|TBsU)ZOC&cQ{%a&d-ru6XM{<)T zekPI|4?i2pjfcmK{l|YdjK@ZDlOczApyHy++9k|A&F@PtTivc%g& za^vA`Bf0VLc9Gn8c>73hJiJ3BHy++Gk{b{26v>T;caG%7!xJO9@$fE@+<17`NNzm5 zTO>Cg-aV2V4|haz$&H7n zM{?ug8Ijz0_`pbRJbX|jHy)lD$&H5(j^xI}vmzPt4vAh6$xW8HE0P-zw<5Xma1qIk zhi6A}lr;x$*ERk=%Ir)JSeTd|D(o z9zH#i8xNlm$&H84jO50{XGL=3;TK18k#>20S@_t#>20T+HLPwFT^m+6j;;%ben zvi`;&iLAZxM{zPPLjXxP#V`FRR z?*~O$R+ayz?Y2K|+CTd{)f3*m_f})ZZa8^)_u|2mcgbO~$>c>#7c83JGw49@xA@Ge zo?6$}RCV1OFW#?weN{EwCMVE(+L7qnaU zGr->#XO+bYlz*R}T8+=G$G0t>GG^?ilLvbi_a3%%!Qi`R&K@&%>`C){nsJkRyXW^D zU45d`*}QZP?_0KXXwddsPVOFuru zEnDvB_IFU#&X_;cfjm^#FVuDS`t@pdj=0)Cs{R-q^$VB3?&>>k`sMGx{j;If_pJHL z{A=6u+qE5x=c^k|J~u74gZX5=he-@sx$#{XJ7Rn(@{1um03;E?so% zH-37+?;e}B%lF@Zb?+@RHaz#BsSmvF&Y9mRexOl9>!RBUT+Q;Pibw4gW{+{{D-XHtJd#=4~ z_Q)?@`}n0l{)Tz&x!Rl- zojlmRq*CxYKK|*>q5S)o_B2h`VRH$v+7SWw|mjtLl^ffnYU>E z={*C3i~5#!)x(adlV?uu?AUwWvPFxBI*#m_*D>{=j%ib-b#_cSXx5C*S)Eh%Ii%dW zzkl(f`Dr(s9^bvP+nnhght8XS#ESmDfuWA&QzuU;C(h{}>N#Uz(a=!O(ymjN^>m!l z)88@m;Et&?W_3=RHFa9~-qpmO!TAG=`pb8$-lS(iNAE!2l35*x&pP0=oaloG4E3Gg zb6!vXV9(M6=JX7nKh)QMz>@5I?%@2Mr9E?pdXnAJa}VfSHq^gtXs(V9;LYtH=sT}x z{!lgO9vti$I^e>-f%B{JQ1@U>^|bPR=9becG-K}aDO09SUeeuO!S*4M-}J>lxH@z$ z-u9zMJ#x{_rQhaz*CjtN(7p1A6^Uc0Yw97nSe!CHm#?ng%!H_dmV=|7GK;>oy)78c1vt z{$=;``c~|*uD#_$EB>{;{=RI`H8_7^&yw!0EW9q~Iy;Z=8C*Db`P4(Imk#S5>^XI1 zK4E)`dCW}d{r}p!-oc6U&O3F{(BgmWpwYvu@@l-pzwG8r*QvS7J6r$8|95ZP-fmWP grE_!T&&^K$R_#*PTkDhWtMy4Y;bqn9$JF(I02>_hl>h($ literal 0 HcmV?d00001 diff --git a/tests/integration/hosts/maya/expected/test_project/test_asset/publish/model/modelMain/hero/test_project_test_asset_modelMain_hero.ma b/tests/integration/hosts/maya/expected/test_project/test_asset/publish/model/modelMain/hero/test_project_test_asset_modelMain_hero.ma new file mode 100644 index 00000000000..2095b7aea2a --- /dev/null +++ b/tests/integration/hosts/maya/expected/test_project/test_asset/publish/model/modelMain/hero/test_project_test_asset_modelMain_hero.ma @@ -0,0 +1,1224 @@ +//Maya ASCII 2024 scene +//Name: modelMain.ma +//Last modified: Tue, Sep 19, 2023 03:32:09 PM +//Codeset: 1252 +requires maya "2024"; +requires "mtoa" "5.3.0"; +requires "stereoCamera" "10.0"; +currentUnit -l centimeter -a degree -t pal; +fileInfo "application" "maya"; +fileInfo "product" "Maya 2024"; +fileInfo "version" "2024"; +fileInfo "cutIdentifier" "202302170737-4500172811"; +fileInfo "osv" "Windows 10 Pro v2009 (Build: 19045)"; +fileInfo "UUID" "D1AE55EF-4393-3A0C-D975-1E920D093F6C"; +createNode transform -n "pSphere1_GEO"; + rename -uid "7445A43F-444F-B2D3-4315-2AA013D2E0B6"; + addAttr -ci true -sn "cbId" -ln "cbId" -dt "string"; + setAttr ".rlio[0]" 1 yes 0; + setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:440654b3dfe4"; +createNode mesh -n "pSphere1_GEOShape1" -p "pSphere1_GEO"; + rename -uid "7C731260-45C6-339E-07BF-359446B08EA1"; + addAttr -ci true -sn "cbId" -ln "cbId" -dt "string"; + setAttr -k off ".v"; + setAttr ".vir" yes; + setAttr ".vif" yes; + setAttr ".uvst[0].uvsn" -type "string" "map1"; + setAttr -s 439 ".uvst[0].uvsp"; + setAttr ".uvst[0].uvsp[0:249]" -type "float2" 0 0.050000001 0.050000001 0.050000001 + 0.1 0.050000001 0.15000001 0.050000001 0.2 0.050000001 0.25 0.050000001 0.30000001 + 0.050000001 0.35000002 0.050000001 0.40000004 0.050000001 0.45000005 0.050000001 + 0.50000006 0.050000001 0.55000007 0.050000001 0.60000008 0.050000001 0.6500001 0.050000001 + 0.70000011 0.050000001 0.75000012 0.050000001 0.80000013 0.050000001 0.85000014 0.050000001 + 0.90000015 0.050000001 0.95000017 0.050000001 1.000000119209 0.050000001 0 0.1 0.050000001 + 0.1 0.1 0.1 0.15000001 0.1 0.2 0.1 0.25 0.1 0.30000001 0.1 0.35000002 0.1 0.40000004 + 0.1 0.45000005 0.1 0.50000006 0.1 0.55000007 0.1 0.60000008 0.1 0.6500001 0.1 0.70000011 + 0.1 0.75000012 0.1 0.80000013 0.1 0.85000014 0.1 0.90000015 0.1 0.95000017 0.1 1.000000119209 + 0.1 0 0.15000001 0.050000001 0.15000001 0.1 0.15000001 0.15000001 0.15000001 0.2 + 0.15000001 0.25 0.15000001 0.30000001 0.15000001 0.35000002 0.15000001 0.40000004 + 0.15000001 0.45000005 0.15000001 0.50000006 0.15000001 0.55000007 0.15000001 0.60000008 + 0.15000001 0.6500001 0.15000001 0.70000011 0.15000001 0.75000012 0.15000001 0.80000013 + 0.15000001 0.85000014 0.15000001 0.90000015 0.15000001 0.95000017 0.15000001 1.000000119209 + 0.15000001 0 0.2 0.050000001 0.2 0.1 0.2 0.15000001 0.2 0.2 0.2 0.25 0.2 0.30000001 + 0.2 0.35000002 0.2 0.40000004 0.2 0.45000005 0.2 0.50000006 0.2 0.55000007 0.2 0.60000008 + 0.2 0.6500001 0.2 0.70000011 0.2 0.75000012 0.2 0.80000013 0.2 0.85000014 0.2 0.90000015 + 0.2 0.95000017 0.2 1.000000119209 0.2 0 0.25 0.050000001 0.25 0.1 0.25 0.15000001 + 0.25 0.2 0.25 0.25 0.25 0.30000001 0.25 0.35000002 0.25 0.40000004 0.25 0.45000005 + 0.25 0.50000006 0.25 0.55000007 0.25 0.60000008 0.25 0.6500001 0.25 0.70000011 0.25 + 0.75000012 0.25 0.80000013 0.25 0.85000014 0.25 0.90000015 0.25 0.95000017 0.25 1.000000119209 + 0.25 0 0.30000001 0.050000001 0.30000001 0.1 0.30000001 0.15000001 0.30000001 0.2 + 0.30000001 0.25 0.30000001 0.30000001 0.30000001 0.35000002 0.30000001 0.40000004 + 0.30000001 0.45000005 0.30000001 0.50000006 0.30000001 0.55000007 0.30000001 0.60000008 + 0.30000001 0.6500001 0.30000001 0.70000011 0.30000001 0.75000012 0.30000001 0.80000013 + 0.30000001 0.85000014 0.30000001 0.90000015 0.30000001 0.95000017 0.30000001 1.000000119209 + 0.30000001 0 0.35000002 0.050000001 0.35000002 0.1 0.35000002 0.15000001 0.35000002 + 0.2 0.35000002 0.25 0.35000002 0.30000001 0.35000002 0.35000002 0.35000002 0.40000004 + 0.35000002 0.45000005 0.35000002 0.50000006 0.35000002 0.55000007 0.35000002 0.60000008 + 0.35000002 0.6500001 0.35000002 0.70000011 0.35000002 0.75000012 0.35000002 0.80000013 + 0.35000002 0.85000014 0.35000002 0.90000015 0.35000002 0.95000017 0.35000002 1.000000119209 + 0.35000002 0 0.40000004 0.050000001 0.40000004 0.1 0.40000004 0.15000001 0.40000004 + 0.2 0.40000004 0.25 0.40000004 0.30000001 0.40000004 0.35000002 0.40000004 0.40000004 + 0.40000004 0.45000005 0.40000004 0.50000006 0.40000004 0.55000007 0.40000004 0.60000008 + 0.40000004 0.6500001 0.40000004 0.70000011 0.40000004 0.75000012 0.40000004 0.80000013 + 0.40000004 0.85000014 0.40000004 0.90000015 0.40000004 0.95000017 0.40000004 1.000000119209 + 0.40000004 0 0.45000005 0.050000001 0.45000005 0.1 0.45000005 0.15000001 0.45000005 + 0.2 0.45000005 0.25 0.45000005 0.30000001 0.45000005 0.35000002 0.45000005 0.40000004 + 0.45000005 0.45000005 0.45000005 0.50000006 0.45000005 0.55000007 0.45000005 0.60000008 + 0.45000005 0.6500001 0.45000005 0.70000011 0.45000005 0.75000012 0.45000005 0.80000013 + 0.45000005 0.85000014 0.45000005 0.90000015 0.45000005 0.95000017 0.45000005 1.000000119209 + 0.45000005 0 0.50000006 0.050000001 0.50000006 0.1 0.50000006 0.15000001 0.50000006 + 0.2 0.50000006 0.25 0.50000006 0.30000001 0.50000006 0.35000002 0.50000006 0.40000004 + 0.50000006 0.45000005 0.50000006 0.50000006 0.50000006 0.55000007 0.50000006 0.60000008 + 0.50000006 0.6500001 0.50000006 0.70000011 0.50000006 0.75000012 0.50000006 0.80000013 + 0.50000006 0.85000014 0.50000006 0.90000015 0.50000006 0.95000017 0.50000006 1.000000119209 + 0.50000006 0 0.55000007 0.050000001 0.55000007 0.1 0.55000007 0.15000001 0.55000007 + 0.2 0.55000007 0.25 0.55000007 0.30000001 0.55000007 0.35000002 0.55000007 0.40000004 + 0.55000007 0.45000005 0.55000007 0.50000006 0.55000007 0.55000007 0.55000007 0.60000008 + 0.55000007 0.6500001 0.55000007 0.70000011 0.55000007 0.75000012 0.55000007 0.80000013 + 0.55000007 0.85000014 0.55000007 0.90000015 0.55000007 0.95000017 0.55000007 1.000000119209 + 0.55000007 0 0.60000008 0.050000001 0.60000008 0.1 0.60000008 0.15000001 0.60000008 + 0.2 0.60000008 0.25 0.60000008 0.30000001 0.60000008 0.35000002 0.60000008 0.40000004 + 0.60000008 0.45000005 0.60000008 0.50000006 0.60000008 0.55000007 0.60000008 0.60000008 + 0.60000008 0.6500001 0.60000008 0.70000011 0.60000008 0.75000012 0.60000008 0.80000013 + 0.60000008 0.85000014 0.60000008 0.90000015 0.60000008; + setAttr ".uvst[0].uvsp[250:438]" 0.95000017 0.60000008 1.000000119209 0.60000008 + 0 0.6500001 0.050000001 0.6500001 0.1 0.6500001 0.15000001 0.6500001 0.2 0.6500001 + 0.25 0.6500001 0.30000001 0.6500001 0.35000002 0.6500001 0.40000004 0.6500001 0.45000005 + 0.6500001 0.50000006 0.6500001 0.55000007 0.6500001 0.60000008 0.6500001 0.6500001 + 0.6500001 0.70000011 0.6500001 0.75000012 0.6500001 0.80000013 0.6500001 0.85000014 + 0.6500001 0.90000015 0.6500001 0.95000017 0.6500001 1.000000119209 0.6500001 0 0.70000011 + 0.050000001 0.70000011 0.1 0.70000011 0.15000001 0.70000011 0.2 0.70000011 0.25 0.70000011 + 0.30000001 0.70000011 0.35000002 0.70000011 0.40000004 0.70000011 0.45000005 0.70000011 + 0.50000006 0.70000011 0.55000007 0.70000011 0.60000008 0.70000011 0.6500001 0.70000011 + 0.70000011 0.70000011 0.75000012 0.70000011 0.80000013 0.70000011 0.85000014 0.70000011 + 0.90000015 0.70000011 0.95000017 0.70000011 1.000000119209 0.70000011 0 0.75000012 + 0.050000001 0.75000012 0.1 0.75000012 0.15000001 0.75000012 0.2 0.75000012 0.25 0.75000012 + 0.30000001 0.75000012 0.35000002 0.75000012 0.40000004 0.75000012 0.45000005 0.75000012 + 0.50000006 0.75000012 0.55000007 0.75000012 0.60000008 0.75000012 0.6500001 0.75000012 + 0.70000011 0.75000012 0.75000012 0.75000012 0.80000013 0.75000012 0.85000014 0.75000012 + 0.90000015 0.75000012 0.95000017 0.75000012 1.000000119209 0.75000012 0 0.80000013 + 0.050000001 0.80000013 0.1 0.80000013 0.15000001 0.80000013 0.2 0.80000013 0.25 0.80000013 + 0.30000001 0.80000013 0.35000002 0.80000013 0.40000004 0.80000013 0.45000005 0.80000013 + 0.50000006 0.80000013 0.55000007 0.80000013 0.60000008 0.80000013 0.6500001 0.80000013 + 0.70000011 0.80000013 0.75000012 0.80000013 0.80000013 0.80000013 0.85000014 0.80000013 + 0.90000015 0.80000013 0.95000017 0.80000013 1.000000119209 0.80000013 0 0.85000014 + 0.050000001 0.85000014 0.1 0.85000014 0.15000001 0.85000014 0.2 0.85000014 0.25 0.85000014 + 0.30000001 0.85000014 0.35000002 0.85000014 0.40000004 0.85000014 0.45000005 0.85000014 + 0.50000006 0.85000014 0.55000007 0.85000014 0.60000008 0.85000014 0.6500001 0.85000014 + 0.70000011 0.85000014 0.75000012 0.85000014 0.80000013 0.85000014 0.85000014 0.85000014 + 0.90000015 0.85000014 0.95000017 0.85000014 1.000000119209 0.85000014 0 0.90000015 + 0.050000001 0.90000015 0.1 0.90000015 0.15000001 0.90000015 0.2 0.90000015 0.25 0.90000015 + 0.30000001 0.90000015 0.35000002 0.90000015 0.40000004 0.90000015 0.45000005 0.90000015 + 0.50000006 0.90000015 0.55000007 0.90000015 0.60000008 0.90000015 0.6500001 0.90000015 + 0.70000011 0.90000015 0.75000012 0.90000015 0.80000013 0.90000015 0.85000014 0.90000015 + 0.90000015 0.90000015 0.95000017 0.90000015 1.000000119209 0.90000015 0 0.95000017 + 0.050000001 0.95000017 0.1 0.95000017 0.15000001 0.95000017 0.2 0.95000017 0.25 0.95000017 + 0.30000001 0.95000017 0.35000002 0.95000017 0.40000004 0.95000017 0.45000005 0.95000017 + 0.50000006 0.95000017 0.55000007 0.95000017 0.60000008 0.95000017 0.6500001 0.95000017 + 0.70000011 0.95000017 0.75000012 0.95000017 0.80000013 0.95000017 0.85000014 0.95000017 + 0.90000015 0.95000017 0.95000017 0.95000017 1.000000119209 0.95000017 0.025 0 0.075000003 + 0 0.125 0 0.17500001 0 0.22500001 0 0.27500001 0 0.32500002 0 0.375 0 0.42500001 + 0 0.47500002 0 0.52499998 0 0.57499999 0 0.625 0 0.67500001 0 0.72499996 0 0.77499998 + 0 0.82499999 0 0.875 0 0.92500001 0 0.97499996 0 0.025 1 0.075000003 1 0.125 1 0.17500001 + 1 0.22500001 1 0.27500001 1 0.32500002 1 0.375 1 0.42500001 1 0.47500002 1 0.52499998 + 1 0.57499999 1 0.625 1 0.67500001 1 0.72499996 1 0.77499998 1 0.82499999 1 0.875 + 1 0.92500001 1 0.97499996 1; + setAttr ".cuvs" -type "string" "map1"; + setAttr ".dcc" -type "string" "Ambient+Diffuse"; + setAttr ".covm[0]" 0 1 1; + setAttr ".cdvm[0]" 0 1 1; + setAttr -s 382 ".vt"; + setAttr ".vt[0:165]" 0.14877813 -0.98768836 -0.048340943 0.12655823 -0.98768836 -0.091949932 + 0.091949932 -0.98768836 -0.12655823 0.048340935 -0.98768836 -0.14877811 0 -0.98768836 -0.15643455 + -0.048340935 -0.98768836 -0.1487781 -0.091949917 -0.98768836 -0.1265582 -0.12655818 -0.98768836 -0.091949902 + -0.14877807 -0.98768836 -0.048340924 -0.15643452 -0.98768836 0 -0.14877807 -0.98768836 0.048340924 + -0.12655818 -0.98768836 0.091949895 -0.091949895 -0.98768836 0.12655817 -0.048340924 -0.98768836 0.14877805 + -4.6621107e-09 -0.98768836 0.15643449 0.048340909 -0.98768836 0.14877804 0.09194988 -0.98768836 0.12655815 + 0.12655815 -0.98768836 0.091949888 0.14877804 -0.98768836 0.048340913 0.15643448 -0.98768836 0 + 0.29389283 -0.95105654 -0.095491566 0.25000018 -0.95105654 -0.18163574 0.18163574 -0.95105654 -0.25000015 + 0.095491551 -0.95105654 -0.2938928 0 -0.95105654 -0.30901715 -0.095491551 -0.95105654 -0.29389277 + -0.18163571 -0.95105654 -0.25000009 -0.25000009 -0.95105654 -0.18163569 -0.29389271 -0.95105654 -0.095491529 + -0.30901706 -0.95105654 0 -0.29389271 -0.95105654 0.095491529 -0.25000006 -0.95105654 0.18163568 + -0.18163568 -0.95105654 0.25000006 -0.095491529 -0.95105654 0.29389268 -9.2094243e-09 -0.95105654 0.30901703 + 0.095491499 -0.95105654 0.29389265 0.18163563 -0.95105654 0.25000003 0.25 -0.95105654 0.18163565 + 0.29389265 -0.95105654 0.095491506 0.309017 -0.95105654 0 0.43177092 -0.89100653 -0.14029087 + 0.36728629 -0.89100653 -0.2668491 0.2668491 -0.89100653 -0.36728626 0.14029086 -0.89100653 -0.43177086 + 0 -0.89100653 -0.45399073 -0.14029086 -0.89100653 -0.43177083 -0.26684904 -0.89100653 -0.36728618 + -0.36728615 -0.89100653 -0.26684901 -0.43177077 -0.89100653 -0.14029081 -0.45399064 -0.89100653 0 + -0.43177077 -0.89100653 0.14029081 -0.36728612 -0.89100653 0.26684898 -0.26684898 -0.89100653 0.36728612 + -0.14029081 -0.89100653 0.43177071 -1.3529972e-08 -0.89100653 0.45399058 0.14029078 -0.89100653 0.43177068 + 0.26684892 -0.89100653 0.36728609 0.36728606 -0.89100653 0.26684895 0.43177065 -0.89100653 0.1402908 + 0.45399052 -0.89100653 0 0.55901736 -0.809017 -0.18163574 0.47552857 -0.809017 -0.34549171 + 0.34549171 -0.809017 -0.47552854 0.18163572 -0.809017 -0.5590173 0 -0.809017 -0.58778554 + -0.18163572 -0.809017 -0.55901724 -0.34549165 -0.809017 -0.47552842 -0.47552839 -0.809017 -0.34549159 + -0.55901712 -0.809017 -0.18163566 -0.58778536 -0.809017 0 -0.55901712 -0.809017 0.18163566 + -0.47552836 -0.809017 0.34549156 -0.34549156 -0.809017 0.47552833 -0.18163566 -0.809017 0.55901706 + -1.7517365e-08 -0.809017 0.5877853 0.18163562 -0.809017 0.55901706 0.3454915 -0.809017 0.4755283 + 0.47552827 -0.809017 0.34549153 0.559017 -0.809017 0.18163563 0.58778524 -0.809017 0 + 0.67249894 -0.70710677 -0.21850814 0.57206178 -0.70710677 -0.41562718 0.41562718 -0.70710677 -0.57206172 + 0.21850812 -0.70710677 -0.67249888 0 -0.70710677 -0.70710713 -0.21850812 -0.70710677 -0.67249882 + -0.41562709 -0.70710677 -0.5720616 -0.57206154 -0.70710677 -0.41562706 -0.6724987 -0.70710677 -0.21850805 + -0.70710695 -0.70710677 0 -0.6724987 -0.70710677 0.21850805 -0.57206154 -0.70710677 0.415627 + -0.415627 -0.70710677 0.57206148 -0.21850805 -0.70710677 0.67249858 -2.1073424e-08 -0.70710677 0.70710683 + 0.21850799 -0.70710677 0.67249858 0.41562691 -0.70710677 0.57206142 0.57206142 -0.70710677 0.41562697 + 0.67249852 -0.70710677 0.21850802 0.70710677 -0.70710677 0 0.7694214 -0.58778524 -0.25000015 + 0.65450895 -0.58778524 -0.47552854 0.47552854 -0.58778524 -0.65450889 0.25000012 -0.58778524 -0.76942128 + 0 -0.58778524 -0.80901736 -0.25000012 -0.58778524 -0.76942122 -0.47552845 -0.58778524 -0.65450877 + -0.65450871 -0.58778524 -0.47552839 -0.7694211 -0.58778524 -0.25000006 -0.80901718 -0.58778524 0 + -0.7694211 -0.58778524 0.25000006 -0.65450865 -0.58778524 0.47552836 -0.47552836 -0.58778524 0.65450859 + -0.25000006 -0.58778524 0.76942098 -2.4110586e-08 -0.58778524 0.80901712 0.24999999 -0.58778524 0.76942098 + 0.47552827 -0.58778524 0.65450853 0.65450853 -0.58778524 0.4755283 0.76942092 -0.58778524 0.25 + 0.809017 -0.58778524 0 0.8473981 -0.45399052 -0.27533633 0.72083992 -0.45399052 -0.5237208 + 0.5237208 -0.45399052 -0.72083986 0.2753363 -0.45399052 -0.84739798 0 -0.45399052 -0.89100695 + -0.2753363 -0.45399052 -0.84739798 -0.52372068 -0.45399052 -0.72083968 -0.72083962 -0.45399052 -0.52372062 + -0.8473978 -0.45399052 -0.27533621 -0.89100677 -0.45399052 0 -0.8473978 -0.45399052 0.27533621 + -0.72083962 -0.45399052 0.52372062 -0.52372062 -0.45399052 0.72083956 -0.27533621 -0.45399052 0.84739769 + -2.6554064e-08 -0.45399052 0.89100665 0.27533615 -0.45399052 0.84739763 0.5237205 -0.45399052 0.7208395 + 0.72083944 -0.45399052 0.52372056 0.84739757 -0.45399052 0.27533618 0.89100653 -0.45399052 0 + 0.90450913 -0.30901697 -0.2938928 0.7694214 -0.30901697 -0.55901736 0.55901736 -0.30901697 -0.76942134 + 0.29389277 -0.30901697 -0.90450901 0 -0.30901697 -0.95105702 -0.29389277 -0.30901697 -0.90450895 + -0.55901724 -0.30901697 -0.76942122 -0.76942116 -0.30901697 -0.55901718 -0.90450877 -0.30901697 -0.29389271 + -0.95105678 -0.30901697 0 -0.90450877 -0.30901697 0.29389271 -0.7694211 -0.30901697 0.55901712 + -0.55901712 -0.30901697 0.76942104 -0.29389271 -0.30901697 0.90450865 -2.8343694e-08 -0.30901697 0.95105666 + 0.29389262 -0.30901697 0.90450859 0.559017 -0.30901697 0.76942098 0.76942092 -0.30901697 0.55901706 + 0.90450853 -0.30901697 0.29389265 0.95105654 -0.30901697 0 0.93934804 -0.15643437 -0.30521268 + 0.79905719 -0.15643437 -0.580549 0.580549 -0.15643437 -0.79905713 0.30521265 -0.15643437 -0.93934792 + 0 -0.15643437 -0.98768884 -0.30521265 -0.15643437 -0.93934786; + setAttr ".vt[166:331]" -0.58054888 -0.15643437 -0.79905695 -0.79905689 -0.15643437 -0.58054882 + -0.93934768 -0.15643437 -0.30521256 -0.9876886 -0.15643437 0 -0.93934768 -0.15643437 0.30521256 + -0.79905683 -0.15643437 0.58054876 -0.58054876 -0.15643437 0.79905677 -0.30521256 -0.15643437 0.93934757 + -2.9435407e-08 -0.15643437 0.98768848 0.30521247 -0.15643437 0.93934757 0.58054864 -0.15643437 0.79905671 + 0.79905665 -0.15643437 0.5805487 0.93934751 -0.15643437 0.3052125 0.98768836 -0.15643437 0 + 0.95105714 0 -0.30901718 0.80901754 0 -0.5877856 0.5877856 0 -0.80901748 0.30901715 0 -0.95105702 + 0 0 -1.000000476837 -0.30901715 0 -0.95105696 -0.58778548 0 -0.8090173 -0.80901724 0 -0.58778542 + -0.95105678 0 -0.30901706 -1.000000238419 0 0 -0.95105678 0 0.30901706 -0.80901718 0 0.58778536 + -0.58778536 0 0.80901712 -0.30901706 0 0.95105666 -2.9802322e-08 0 1.000000119209 + 0.30901697 0 0.9510566 0.58778524 0 0.80901706 0.809017 0 0.5877853 0.95105654 0 0.309017 + 1 0 0 0.93934804 0.15643437 -0.30521268 0.79905719 0.15643437 -0.580549 0.580549 0.15643437 -0.79905713 + 0.30521265 0.15643437 -0.93934792 0 0.15643437 -0.98768884 -0.30521265 0.15643437 -0.93934786 + -0.58054888 0.15643437 -0.79905695 -0.79905689 0.15643437 -0.58054882 -0.93934768 0.15643437 -0.30521256 + -0.9876886 0.15643437 0 -0.93934768 0.15643437 0.30521256 -0.79905683 0.15643437 0.58054876 + -0.58054876 0.15643437 0.79905677 -0.30521256 0.15643437 0.93934757 -2.9435407e-08 0.15643437 0.98768848 + 0.30521247 0.15643437 0.93934757 0.58054864 0.15643437 0.79905671 0.79905665 0.15643437 0.5805487 + 0.93934751 0.15643437 0.3052125 0.98768836 0.15643437 0 0.90450913 0.30901697 -0.2938928 + 0.7694214 0.30901697 -0.55901736 0.55901736 0.30901697 -0.76942134 0.29389277 0.30901697 -0.90450901 + 0 0.30901697 -0.95105702 -0.29389277 0.30901697 -0.90450895 -0.55901724 0.30901697 -0.76942122 + -0.76942116 0.30901697 -0.55901718 -0.90450877 0.30901697 -0.29389271 -0.95105678 0.30901697 0 + -0.90450877 0.30901697 0.29389271 -0.7694211 0.30901697 0.55901712 -0.55901712 0.30901697 0.76942104 + -0.29389271 0.30901697 0.90450865 -2.8343694e-08 0.30901697 0.95105666 0.29389262 0.30901697 0.90450859 + 0.559017 0.30901697 0.76942098 0.76942092 0.30901697 0.55901706 0.90450853 0.30901697 0.29389265 + 0.95105654 0.30901697 0 0.8473981 0.45399052 -0.27533633 0.72083992 0.45399052 -0.5237208 + 0.5237208 0.45399052 -0.72083986 0.2753363 0.45399052 -0.84739798 0 0.45399052 -0.89100695 + -0.2753363 0.45399052 -0.84739798 -0.52372068 0.45399052 -0.72083968 -0.72083962 0.45399052 -0.52372062 + -0.8473978 0.45399052 -0.27533621 -0.89100677 0.45399052 0 -0.8473978 0.45399052 0.27533621 + -0.72083962 0.45399052 0.52372062 -0.52372062 0.45399052 0.72083956 -0.27533621 0.45399052 0.84739769 + -2.6554064e-08 0.45399052 0.89100665 0.27533615 0.45399052 0.84739763 0.5237205 0.45399052 0.7208395 + 0.72083944 0.45399052 0.52372056 0.84739757 0.45399052 0.27533618 0.89100653 0.45399052 0 + 0.7694214 0.58778524 -0.25000015 0.65450895 0.58778524 -0.47552854 0.47552854 0.58778524 -0.65450889 + 0.25000012 0.58778524 -0.76942128 0 0.58778524 -0.80901736 -0.25000012 0.58778524 -0.76942122 + -0.47552845 0.58778524 -0.65450877 -0.65450871 0.58778524 -0.47552839 -0.7694211 0.58778524 -0.25000006 + -0.80901718 0.58778524 0 -0.7694211 0.58778524 0.25000006 -0.65450865 0.58778524 0.47552836 + -0.47552836 0.58778524 0.65450859 -0.25000006 0.58778524 0.76942098 -2.4110586e-08 0.58778524 0.80901712 + 0.24999999 0.58778524 0.76942098 0.47552827 0.58778524 0.65450853 0.65450853 0.58778524 0.4755283 + 0.76942092 0.58778524 0.25 0.809017 0.58778524 0 0.67249894 0.70710677 -0.21850814 + 0.57206178 0.70710677 -0.41562718 0.41562718 0.70710677 -0.57206172 0.21850812 0.70710677 -0.67249888 + 0 0.70710677 -0.70710713 -0.21850812 0.70710677 -0.67249882 -0.41562709 0.70710677 -0.5720616 + -0.57206154 0.70710677 -0.41562706 -0.6724987 0.70710677 -0.21850805 -0.70710695 0.70710677 0 + -0.6724987 0.70710677 0.21850805 -0.57206154 0.70710677 0.415627 -0.415627 0.70710677 0.57206148 + -0.21850805 0.70710677 0.67249858 -2.1073424e-08 0.70710677 0.70710683 0.21850799 0.70710677 0.67249858 + 0.41562691 0.70710677 0.57206142 0.57206142 0.70710677 0.41562697 0.67249852 0.70710677 0.21850802 + 0.70710677 0.70710677 0 0.55901736 0.809017 -0.18163574 0.47552857 0.809017 -0.34549171 + 0.34549171 0.809017 -0.47552854 0.18163572 0.809017 -0.5590173 0 0.809017 -0.58778554 + -0.18163572 0.809017 -0.55901724 -0.34549165 0.809017 -0.47552842 -0.47552839 0.809017 -0.34549159 + -0.55901712 0.809017 -0.18163566 -0.58778536 0.809017 0 -0.55901712 0.809017 0.18163566 + -0.47552836 0.809017 0.34549156 -0.34549156 0.809017 0.47552833 -0.18163566 0.809017 0.55901706 + -1.7517365e-08 0.809017 0.5877853 0.18163562 0.809017 0.55901706 0.3454915 0.809017 0.4755283 + 0.47552827 0.809017 0.34549153 0.559017 0.809017 0.18163563 0.58778524 0.809017 0 + 0.43177092 0.89100653 -0.14029087 0.36728629 0.89100653 -0.2668491 0.2668491 0.89100653 -0.36728626 + 0.14029086 0.89100653 -0.43177086 0 0.89100653 -0.45399073 -0.14029086 0.89100653 -0.43177083 + -0.26684904 0.89100653 -0.36728618 -0.36728615 0.89100653 -0.26684901 -0.43177077 0.89100653 -0.14029081 + -0.45399064 0.89100653 0 -0.43177077 0.89100653 0.14029081 -0.36728612 0.89100653 0.26684898; + setAttr ".vt[332:381]" -0.26684898 0.89100653 0.36728612 -0.14029081 0.89100653 0.43177071 + -1.3529972e-08 0.89100653 0.45399058 0.14029078 0.89100653 0.43177068 0.26684892 0.89100653 0.36728609 + 0.36728606 0.89100653 0.26684895 0.43177065 0.89100653 0.1402908 0.45399052 0.89100653 0 + 0.29389283 0.95105654 -0.095491566 0.25000018 0.95105654 -0.18163574 0.18163574 0.95105654 -0.25000015 + 0.095491551 0.95105654 -0.2938928 0 0.95105654 -0.30901715 -0.095491551 0.95105654 -0.29389277 + -0.18163571 0.95105654 -0.25000009 -0.25000009 0.95105654 -0.18163569 -0.29389271 0.95105654 -0.095491529 + -0.30901706 0.95105654 0 -0.29389271 0.95105654 0.095491529 -0.25000006 0.95105654 0.18163568 + -0.18163568 0.95105654 0.25000006 -0.095491529 0.95105654 0.29389268 -9.2094243e-09 0.95105654 0.30901703 + 0.095491499 0.95105654 0.29389265 0.18163563 0.95105654 0.25000003 0.25 0.95105654 0.18163565 + 0.29389265 0.95105654 0.095491506 0.309017 0.95105654 0 0.14877813 0.98768836 -0.048340943 + 0.12655823 0.98768836 -0.091949932 0.091949932 0.98768836 -0.12655823 0.048340935 0.98768836 -0.14877811 + 0 0.98768836 -0.15643455 -0.048340935 0.98768836 -0.1487781 -0.091949917 0.98768836 -0.1265582 + -0.12655818 0.98768836 -0.091949902 -0.14877807 0.98768836 -0.048340924 -0.15643452 0.98768836 0 + -0.14877807 0.98768836 0.048340924 -0.12655818 0.98768836 0.091949895 -0.091949895 0.98768836 0.12655817 + -0.048340924 0.98768836 0.14877805 -4.6621107e-09 0.98768836 0.15643449 0.048340909 0.98768836 0.14877804 + 0.09194988 0.98768836 0.12655815 0.12655815 0.98768836 0.091949888 0.14877804 0.98768836 0.048340913 + 0.15643448 0.98768836 0 0 -1 0 0 1 0; + setAttr -s 780 ".ed"; + setAttr ".ed[0:165]" 0 1 1 1 2 1 2 3 1 3 4 1 4 5 1 5 6 1 6 7 1 7 8 1 8 9 1 + 9 10 1 10 11 1 11 12 1 12 13 1 13 14 1 14 15 1 15 16 1 16 17 1 17 18 1 18 19 1 19 0 1 + 20 21 1 21 22 1 22 23 1 23 24 1 24 25 1 25 26 1 26 27 1 27 28 1 28 29 1 29 30 1 30 31 1 + 31 32 1 32 33 1 33 34 1 34 35 1 35 36 1 36 37 1 37 38 1 38 39 1 39 20 1 40 41 1 41 42 1 + 42 43 1 43 44 1 44 45 1 45 46 1 46 47 1 47 48 1 48 49 1 49 50 1 50 51 1 51 52 1 52 53 1 + 53 54 1 54 55 1 55 56 1 56 57 1 57 58 1 58 59 1 59 40 1 60 61 1 61 62 1 62 63 1 63 64 1 + 64 65 1 65 66 1 66 67 1 67 68 1 68 69 1 69 70 1 70 71 1 71 72 1 72 73 1 73 74 1 74 75 1 + 75 76 1 76 77 1 77 78 1 78 79 1 79 60 1 80 81 1 81 82 1 82 83 1 83 84 1 84 85 1 85 86 1 + 86 87 1 87 88 1 88 89 1 89 90 1 90 91 1 91 92 1 92 93 1 93 94 1 94 95 1 95 96 1 96 97 1 + 97 98 1 98 99 1 99 80 1 100 101 1 101 102 1 102 103 1 103 104 1 104 105 1 105 106 1 + 106 107 1 107 108 1 108 109 1 109 110 1 110 111 1 111 112 1 112 113 1 113 114 1 114 115 1 + 115 116 1 116 117 1 117 118 1 118 119 1 119 100 1 120 121 1 121 122 1 122 123 1 123 124 1 + 124 125 1 125 126 1 126 127 1 127 128 1 128 129 1 129 130 1 130 131 1 131 132 1 132 133 1 + 133 134 1 134 135 1 135 136 1 136 137 1 137 138 1 138 139 1 139 120 1 140 141 1 141 142 1 + 142 143 1 143 144 1 144 145 1 145 146 1 146 147 1 147 148 1 148 149 1 149 150 1 150 151 1 + 151 152 1 152 153 1 153 154 1 154 155 1 155 156 1 156 157 1 157 158 1 158 159 1 159 140 1 + 160 161 1 161 162 1 162 163 1 163 164 1 164 165 1 165 166 1; + setAttr ".ed[166:331]" 166 167 1 167 168 1 168 169 1 169 170 1 170 171 1 171 172 1 + 172 173 1 173 174 1 174 175 1 175 176 1 176 177 1 177 178 1 178 179 1 179 160 1 180 181 1 + 181 182 1 182 183 1 183 184 1 184 185 1 185 186 1 186 187 1 187 188 1 188 189 1 189 190 1 + 190 191 1 191 192 1 192 193 1 193 194 1 194 195 1 195 196 1 196 197 1 197 198 1 198 199 1 + 199 180 1 200 201 1 201 202 1 202 203 1 203 204 1 204 205 1 205 206 1 206 207 1 207 208 1 + 208 209 1 209 210 1 210 211 1 211 212 1 212 213 1 213 214 1 214 215 1 215 216 1 216 217 1 + 217 218 1 218 219 1 219 200 1 220 221 1 221 222 1 222 223 1 223 224 1 224 225 1 225 226 1 + 226 227 1 227 228 1 228 229 1 229 230 1 230 231 1 231 232 1 232 233 1 233 234 1 234 235 1 + 235 236 1 236 237 1 237 238 1 238 239 1 239 220 1 240 241 1 241 242 1 242 243 1 243 244 1 + 244 245 1 245 246 1 246 247 1 247 248 1 248 249 1 249 250 1 250 251 1 251 252 1 252 253 1 + 253 254 1 254 255 1 255 256 1 256 257 1 257 258 1 258 259 1 259 240 1 260 261 1 261 262 1 + 262 263 1 263 264 1 264 265 1 265 266 1 266 267 1 267 268 1 268 269 1 269 270 1 270 271 1 + 271 272 1 272 273 1 273 274 1 274 275 1 275 276 1 276 277 1 277 278 1 278 279 1 279 260 1 + 280 281 1 281 282 1 282 283 1 283 284 1 284 285 1 285 286 1 286 287 1 287 288 1 288 289 1 + 289 290 1 290 291 1 291 292 1 292 293 1 293 294 1 294 295 1 295 296 1 296 297 1 297 298 1 + 298 299 1 299 280 1 300 301 1 301 302 1 302 303 1 303 304 1 304 305 1 305 306 1 306 307 1 + 307 308 1 308 309 1 309 310 1 310 311 1 311 312 1 312 313 1 313 314 1 314 315 1 315 316 1 + 316 317 1 317 318 1 318 319 1 319 300 1 320 321 1 321 322 1 322 323 1 323 324 1 324 325 1 + 325 326 1 326 327 1 327 328 1 328 329 1 329 330 1 330 331 1 331 332 1; + setAttr ".ed[332:497]" 332 333 1 333 334 1 334 335 1 335 336 1 336 337 1 337 338 1 + 338 339 1 339 320 1 340 341 1 341 342 1 342 343 1 343 344 1 344 345 1 345 346 1 346 347 1 + 347 348 1 348 349 1 349 350 1 350 351 1 351 352 1 352 353 1 353 354 1 354 355 1 355 356 1 + 356 357 1 357 358 1 358 359 1 359 340 1 360 361 1 361 362 1 362 363 1 363 364 1 364 365 1 + 365 366 1 366 367 1 367 368 1 368 369 1 369 370 1 370 371 1 371 372 1 372 373 1 373 374 1 + 374 375 1 375 376 1 376 377 1 377 378 1 378 379 1 379 360 1 0 20 1 1 21 1 2 22 1 + 3 23 1 4 24 1 5 25 1 6 26 1 7 27 1 8 28 1 9 29 1 10 30 1 11 31 1 12 32 1 13 33 1 + 14 34 1 15 35 1 16 36 1 17 37 1 18 38 1 19 39 1 20 40 1 21 41 1 22 42 1 23 43 1 24 44 1 + 25 45 1 26 46 1 27 47 1 28 48 1 29 49 1 30 50 1 31 51 1 32 52 1 33 53 1 34 54 1 35 55 1 + 36 56 1 37 57 1 38 58 1 39 59 1 40 60 1 41 61 1 42 62 1 43 63 1 44 64 1 45 65 1 46 66 1 + 47 67 1 48 68 1 49 69 1 50 70 1 51 71 1 52 72 1 53 73 1 54 74 1 55 75 1 56 76 1 57 77 1 + 58 78 1 59 79 1 60 80 1 61 81 1 62 82 1 63 83 1 64 84 1 65 85 1 66 86 1 67 87 1 68 88 1 + 69 89 1 70 90 1 71 91 1 72 92 1 73 93 1 74 94 1 75 95 1 76 96 1 77 97 1 78 98 1 79 99 1 + 80 100 1 81 101 1 82 102 1 83 103 1 84 104 1 85 105 1 86 106 1 87 107 1 88 108 1 + 89 109 1 90 110 1 91 111 1 92 112 1 93 113 1 94 114 1 95 115 1 96 116 1 97 117 1 + 98 118 1 99 119 1 100 120 1 101 121 1 102 122 1 103 123 1 104 124 1 105 125 1 106 126 1 + 107 127 1 108 128 1 109 129 1 110 130 1 111 131 1 112 132 1 113 133 1 114 134 1 115 135 1 + 116 136 1 117 137 1; + setAttr ".ed[498:663]" 118 138 1 119 139 1 120 140 1 121 141 1 122 142 1 123 143 1 + 124 144 1 125 145 1 126 146 1 127 147 1 128 148 1 129 149 1 130 150 1 131 151 1 132 152 1 + 133 153 1 134 154 1 135 155 1 136 156 1 137 157 1 138 158 1 139 159 1 140 160 1 141 161 1 + 142 162 1 143 163 1 144 164 1 145 165 1 146 166 1 147 167 1 148 168 1 149 169 1 150 170 1 + 151 171 1 152 172 1 153 173 1 154 174 1 155 175 1 156 176 1 157 177 1 158 178 1 159 179 1 + 160 180 1 161 181 1 162 182 1 163 183 1 164 184 1 165 185 1 166 186 1 167 187 1 168 188 1 + 169 189 1 170 190 1 171 191 1 172 192 1 173 193 1 174 194 1 175 195 1 176 196 1 177 197 1 + 178 198 1 179 199 1 180 200 1 181 201 1 182 202 1 183 203 1 184 204 1 185 205 1 186 206 1 + 187 207 1 188 208 1 189 209 1 190 210 1 191 211 1 192 212 1 193 213 1 194 214 1 195 215 1 + 196 216 1 197 217 1 198 218 1 199 219 1 200 220 1 201 221 1 202 222 1 203 223 1 204 224 1 + 205 225 1 206 226 1 207 227 1 208 228 1 209 229 1 210 230 1 211 231 1 212 232 1 213 233 1 + 214 234 1 215 235 1 216 236 1 217 237 1 218 238 1 219 239 1 220 240 1 221 241 1 222 242 1 + 223 243 1 224 244 1 225 245 1 226 246 1 227 247 1 228 248 1 229 249 1 230 250 1 231 251 1 + 232 252 1 233 253 1 234 254 1 235 255 1 236 256 1 237 257 1 238 258 1 239 259 1 240 260 1 + 241 261 1 242 262 1 243 263 1 244 264 1 245 265 1 246 266 1 247 267 1 248 268 1 249 269 1 + 250 270 1 251 271 1 252 272 1 253 273 1 254 274 1 255 275 1 256 276 1 257 277 1 258 278 1 + 259 279 1 260 280 1 261 281 1 262 282 1 263 283 1 264 284 1 265 285 1 266 286 1 267 287 1 + 268 288 1 269 289 1 270 290 1 271 291 1 272 292 1 273 293 1 274 294 1 275 295 1 276 296 1 + 277 297 1 278 298 1 279 299 1 280 300 1 281 301 1 282 302 1 283 303 1; + setAttr ".ed[664:779]" 284 304 1 285 305 1 286 306 1 287 307 1 288 308 1 289 309 1 + 290 310 1 291 311 1 292 312 1 293 313 1 294 314 1 295 315 1 296 316 1 297 317 1 298 318 1 + 299 319 1 300 320 1 301 321 1 302 322 1 303 323 1 304 324 1 305 325 1 306 326 1 307 327 1 + 308 328 1 309 329 1 310 330 1 311 331 1 312 332 1 313 333 1 314 334 1 315 335 1 316 336 1 + 317 337 1 318 338 1 319 339 1 320 340 1 321 341 1 322 342 1 323 343 1 324 344 1 325 345 1 + 326 346 1 327 347 1 328 348 1 329 349 1 330 350 1 331 351 1 332 352 1 333 353 1 334 354 1 + 335 355 1 336 356 1 337 357 1 338 358 1 339 359 1 340 360 1 341 361 1 342 362 1 343 363 1 + 344 364 1 345 365 1 346 366 1 347 367 1 348 368 1 349 369 1 350 370 1 351 371 1 352 372 1 + 353 373 1 354 374 1 355 375 1 356 376 1 357 377 1 358 378 1 359 379 1 380 0 1 380 1 1 + 380 2 1 380 3 1 380 4 1 380 5 1 380 6 1 380 7 1 380 8 1 380 9 1 380 10 1 380 11 1 + 380 12 1 380 13 1 380 14 1 380 15 1 380 16 1 380 17 1 380 18 1 380 19 1 360 381 1 + 361 381 1 362 381 1 363 381 1 364 381 1 365 381 1 366 381 1 367 381 1 368 381 1 369 381 1 + 370 381 1 371 381 1 372 381 1 373 381 1 374 381 1 375 381 1 376 381 1 377 381 1 378 381 1 + 379 381 1; + setAttr -s 400 -ch 1560 ".fc[0:399]" -type "polyFaces" + f 4 0 381 -21 -381 + mu 0 4 0 1 22 21 + f 4 1 382 -22 -382 + mu 0 4 1 2 23 22 + f 4 2 383 -23 -383 + mu 0 4 2 3 24 23 + f 4 3 384 -24 -384 + mu 0 4 3 4 25 24 + f 4 4 385 -25 -385 + mu 0 4 4 5 26 25 + f 4 5 386 -26 -386 + mu 0 4 5 6 27 26 + f 4 6 387 -27 -387 + mu 0 4 6 7 28 27 + f 4 7 388 -28 -388 + mu 0 4 7 8 29 28 + f 4 8 389 -29 -389 + mu 0 4 8 9 30 29 + f 4 9 390 -30 -390 + mu 0 4 9 10 31 30 + f 4 10 391 -31 -391 + mu 0 4 10 11 32 31 + f 4 11 392 -32 -392 + mu 0 4 11 12 33 32 + f 4 12 393 -33 -393 + mu 0 4 12 13 34 33 + f 4 13 394 -34 -394 + mu 0 4 13 14 35 34 + f 4 14 395 -35 -395 + mu 0 4 14 15 36 35 + f 4 15 396 -36 -396 + mu 0 4 15 16 37 36 + f 4 16 397 -37 -397 + mu 0 4 16 17 38 37 + f 4 17 398 -38 -398 + mu 0 4 17 18 39 38 + f 4 18 399 -39 -399 + mu 0 4 18 19 40 39 + f 4 19 380 -40 -400 + mu 0 4 19 20 41 40 + f 4 20 401 -41 -401 + mu 0 4 21 22 43 42 + f 4 21 402 -42 -402 + mu 0 4 22 23 44 43 + f 4 22 403 -43 -403 + mu 0 4 23 24 45 44 + f 4 23 404 -44 -404 + mu 0 4 24 25 46 45 + f 4 24 405 -45 -405 + mu 0 4 25 26 47 46 + f 4 25 406 -46 -406 + mu 0 4 26 27 48 47 + f 4 26 407 -47 -407 + mu 0 4 27 28 49 48 + f 4 27 408 -48 -408 + mu 0 4 28 29 50 49 + f 4 28 409 -49 -409 + mu 0 4 29 30 51 50 + f 4 29 410 -50 -410 + mu 0 4 30 31 52 51 + f 4 30 411 -51 -411 + mu 0 4 31 32 53 52 + f 4 31 412 -52 -412 + mu 0 4 32 33 54 53 + f 4 32 413 -53 -413 + mu 0 4 33 34 55 54 + f 4 33 414 -54 -414 + mu 0 4 34 35 56 55 + f 4 34 415 -55 -415 + mu 0 4 35 36 57 56 + f 4 35 416 -56 -416 + mu 0 4 36 37 58 57 + f 4 36 417 -57 -417 + mu 0 4 37 38 59 58 + f 4 37 418 -58 -418 + mu 0 4 38 39 60 59 + f 4 38 419 -59 -419 + mu 0 4 39 40 61 60 + f 4 39 400 -60 -420 + mu 0 4 40 41 62 61 + f 4 40 421 -61 -421 + mu 0 4 42 43 64 63 + f 4 41 422 -62 -422 + mu 0 4 43 44 65 64 + f 4 42 423 -63 -423 + mu 0 4 44 45 66 65 + f 4 43 424 -64 -424 + mu 0 4 45 46 67 66 + f 4 44 425 -65 -425 + mu 0 4 46 47 68 67 + f 4 45 426 -66 -426 + mu 0 4 47 48 69 68 + f 4 46 427 -67 -427 + mu 0 4 48 49 70 69 + f 4 47 428 -68 -428 + mu 0 4 49 50 71 70 + f 4 48 429 -69 -429 + mu 0 4 50 51 72 71 + f 4 49 430 -70 -430 + mu 0 4 51 52 73 72 + f 4 50 431 -71 -431 + mu 0 4 52 53 74 73 + f 4 51 432 -72 -432 + mu 0 4 53 54 75 74 + f 4 52 433 -73 -433 + mu 0 4 54 55 76 75 + f 4 53 434 -74 -434 + mu 0 4 55 56 77 76 + f 4 54 435 -75 -435 + mu 0 4 56 57 78 77 + f 4 55 436 -76 -436 + mu 0 4 57 58 79 78 + f 4 56 437 -77 -437 + mu 0 4 58 59 80 79 + f 4 57 438 -78 -438 + mu 0 4 59 60 81 80 + f 4 58 439 -79 -439 + mu 0 4 60 61 82 81 + f 4 59 420 -80 -440 + mu 0 4 61 62 83 82 + f 4 60 441 -81 -441 + mu 0 4 63 64 85 84 + f 4 61 442 -82 -442 + mu 0 4 64 65 86 85 + f 4 62 443 -83 -443 + mu 0 4 65 66 87 86 + f 4 63 444 -84 -444 + mu 0 4 66 67 88 87 + f 4 64 445 -85 -445 + mu 0 4 67 68 89 88 + f 4 65 446 -86 -446 + mu 0 4 68 69 90 89 + f 4 66 447 -87 -447 + mu 0 4 69 70 91 90 + f 4 67 448 -88 -448 + mu 0 4 70 71 92 91 + f 4 68 449 -89 -449 + mu 0 4 71 72 93 92 + f 4 69 450 -90 -450 + mu 0 4 72 73 94 93 + f 4 70 451 -91 -451 + mu 0 4 73 74 95 94 + f 4 71 452 -92 -452 + mu 0 4 74 75 96 95 + f 4 72 453 -93 -453 + mu 0 4 75 76 97 96 + f 4 73 454 -94 -454 + mu 0 4 76 77 98 97 + f 4 74 455 -95 -455 + mu 0 4 77 78 99 98 + f 4 75 456 -96 -456 + mu 0 4 78 79 100 99 + f 4 76 457 -97 -457 + mu 0 4 79 80 101 100 + f 4 77 458 -98 -458 + mu 0 4 80 81 102 101 + f 4 78 459 -99 -459 + mu 0 4 81 82 103 102 + f 4 79 440 -100 -460 + mu 0 4 82 83 104 103 + f 4 80 461 -101 -461 + mu 0 4 84 85 106 105 + f 4 81 462 -102 -462 + mu 0 4 85 86 107 106 + f 4 82 463 -103 -463 + mu 0 4 86 87 108 107 + f 4 83 464 -104 -464 + mu 0 4 87 88 109 108 + f 4 84 465 -105 -465 + mu 0 4 88 89 110 109 + f 4 85 466 -106 -466 + mu 0 4 89 90 111 110 + f 4 86 467 -107 -467 + mu 0 4 90 91 112 111 + f 4 87 468 -108 -468 + mu 0 4 91 92 113 112 + f 4 88 469 -109 -469 + mu 0 4 92 93 114 113 + f 4 89 470 -110 -470 + mu 0 4 93 94 115 114 + f 4 90 471 -111 -471 + mu 0 4 94 95 116 115 + f 4 91 472 -112 -472 + mu 0 4 95 96 117 116 + f 4 92 473 -113 -473 + mu 0 4 96 97 118 117 + f 4 93 474 -114 -474 + mu 0 4 97 98 119 118 + f 4 94 475 -115 -475 + mu 0 4 98 99 120 119 + f 4 95 476 -116 -476 + mu 0 4 99 100 121 120 + f 4 96 477 -117 -477 + mu 0 4 100 101 122 121 + f 4 97 478 -118 -478 + mu 0 4 101 102 123 122 + f 4 98 479 -119 -479 + mu 0 4 102 103 124 123 + f 4 99 460 -120 -480 + mu 0 4 103 104 125 124 + f 4 100 481 -121 -481 + mu 0 4 105 106 127 126 + f 4 101 482 -122 -482 + mu 0 4 106 107 128 127 + f 4 102 483 -123 -483 + mu 0 4 107 108 129 128 + f 4 103 484 -124 -484 + mu 0 4 108 109 130 129 + f 4 104 485 -125 -485 + mu 0 4 109 110 131 130 + f 4 105 486 -126 -486 + mu 0 4 110 111 132 131 + f 4 106 487 -127 -487 + mu 0 4 111 112 133 132 + f 4 107 488 -128 -488 + mu 0 4 112 113 134 133 + f 4 108 489 -129 -489 + mu 0 4 113 114 135 134 + f 4 109 490 -130 -490 + mu 0 4 114 115 136 135 + f 4 110 491 -131 -491 + mu 0 4 115 116 137 136 + f 4 111 492 -132 -492 + mu 0 4 116 117 138 137 + f 4 112 493 -133 -493 + mu 0 4 117 118 139 138 + f 4 113 494 -134 -494 + mu 0 4 118 119 140 139 + f 4 114 495 -135 -495 + mu 0 4 119 120 141 140 + f 4 115 496 -136 -496 + mu 0 4 120 121 142 141 + f 4 116 497 -137 -497 + mu 0 4 121 122 143 142 + f 4 117 498 -138 -498 + mu 0 4 122 123 144 143 + f 4 118 499 -139 -499 + mu 0 4 123 124 145 144 + f 4 119 480 -140 -500 + mu 0 4 124 125 146 145 + f 4 120 501 -141 -501 + mu 0 4 126 127 148 147 + f 4 121 502 -142 -502 + mu 0 4 127 128 149 148 + f 4 122 503 -143 -503 + mu 0 4 128 129 150 149 + f 4 123 504 -144 -504 + mu 0 4 129 130 151 150 + f 4 124 505 -145 -505 + mu 0 4 130 131 152 151 + f 4 125 506 -146 -506 + mu 0 4 131 132 153 152 + f 4 126 507 -147 -507 + mu 0 4 132 133 154 153 + f 4 127 508 -148 -508 + mu 0 4 133 134 155 154 + f 4 128 509 -149 -509 + mu 0 4 134 135 156 155 + f 4 129 510 -150 -510 + mu 0 4 135 136 157 156 + f 4 130 511 -151 -511 + mu 0 4 136 137 158 157 + f 4 131 512 -152 -512 + mu 0 4 137 138 159 158 + f 4 132 513 -153 -513 + mu 0 4 138 139 160 159 + f 4 133 514 -154 -514 + mu 0 4 139 140 161 160 + f 4 134 515 -155 -515 + mu 0 4 140 141 162 161 + f 4 135 516 -156 -516 + mu 0 4 141 142 163 162 + f 4 136 517 -157 -517 + mu 0 4 142 143 164 163 + f 4 137 518 -158 -518 + mu 0 4 143 144 165 164 + f 4 138 519 -159 -519 + mu 0 4 144 145 166 165 + f 4 139 500 -160 -520 + mu 0 4 145 146 167 166 + f 4 140 521 -161 -521 + mu 0 4 147 148 169 168 + f 4 141 522 -162 -522 + mu 0 4 148 149 170 169 + f 4 142 523 -163 -523 + mu 0 4 149 150 171 170 + f 4 143 524 -164 -524 + mu 0 4 150 151 172 171 + f 4 144 525 -165 -525 + mu 0 4 151 152 173 172 + f 4 145 526 -166 -526 + mu 0 4 152 153 174 173 + f 4 146 527 -167 -527 + mu 0 4 153 154 175 174 + f 4 147 528 -168 -528 + mu 0 4 154 155 176 175 + f 4 148 529 -169 -529 + mu 0 4 155 156 177 176 + f 4 149 530 -170 -530 + mu 0 4 156 157 178 177 + f 4 150 531 -171 -531 + mu 0 4 157 158 179 178 + f 4 151 532 -172 -532 + mu 0 4 158 159 180 179 + f 4 152 533 -173 -533 + mu 0 4 159 160 181 180 + f 4 153 534 -174 -534 + mu 0 4 160 161 182 181 + f 4 154 535 -175 -535 + mu 0 4 161 162 183 182 + f 4 155 536 -176 -536 + mu 0 4 162 163 184 183 + f 4 156 537 -177 -537 + mu 0 4 163 164 185 184 + f 4 157 538 -178 -538 + mu 0 4 164 165 186 185 + f 4 158 539 -179 -539 + mu 0 4 165 166 187 186 + f 4 159 520 -180 -540 + mu 0 4 166 167 188 187 + f 4 160 541 -181 -541 + mu 0 4 168 169 190 189 + f 4 161 542 -182 -542 + mu 0 4 169 170 191 190 + f 4 162 543 -183 -543 + mu 0 4 170 171 192 191 + f 4 163 544 -184 -544 + mu 0 4 171 172 193 192 + f 4 164 545 -185 -545 + mu 0 4 172 173 194 193 + f 4 165 546 -186 -546 + mu 0 4 173 174 195 194 + f 4 166 547 -187 -547 + mu 0 4 174 175 196 195 + f 4 167 548 -188 -548 + mu 0 4 175 176 197 196 + f 4 168 549 -189 -549 + mu 0 4 176 177 198 197 + f 4 169 550 -190 -550 + mu 0 4 177 178 199 198 + f 4 170 551 -191 -551 + mu 0 4 178 179 200 199 + f 4 171 552 -192 -552 + mu 0 4 179 180 201 200 + f 4 172 553 -193 -553 + mu 0 4 180 181 202 201 + f 4 173 554 -194 -554 + mu 0 4 181 182 203 202 + f 4 174 555 -195 -555 + mu 0 4 182 183 204 203 + f 4 175 556 -196 -556 + mu 0 4 183 184 205 204 + f 4 176 557 -197 -557 + mu 0 4 184 185 206 205 + f 4 177 558 -198 -558 + mu 0 4 185 186 207 206 + f 4 178 559 -199 -559 + mu 0 4 186 187 208 207 + f 4 179 540 -200 -560 + mu 0 4 187 188 209 208 + f 4 180 561 -201 -561 + mu 0 4 189 190 211 210 + f 4 181 562 -202 -562 + mu 0 4 190 191 212 211 + f 4 182 563 -203 -563 + mu 0 4 191 192 213 212 + f 4 183 564 -204 -564 + mu 0 4 192 193 214 213 + f 4 184 565 -205 -565 + mu 0 4 193 194 215 214 + f 4 185 566 -206 -566 + mu 0 4 194 195 216 215 + f 4 186 567 -207 -567 + mu 0 4 195 196 217 216 + f 4 187 568 -208 -568 + mu 0 4 196 197 218 217 + f 4 188 569 -209 -569 + mu 0 4 197 198 219 218 + f 4 189 570 -210 -570 + mu 0 4 198 199 220 219 + f 4 190 571 -211 -571 + mu 0 4 199 200 221 220 + f 4 191 572 -212 -572 + mu 0 4 200 201 222 221 + f 4 192 573 -213 -573 + mu 0 4 201 202 223 222 + f 4 193 574 -214 -574 + mu 0 4 202 203 224 223 + f 4 194 575 -215 -575 + mu 0 4 203 204 225 224 + f 4 195 576 -216 -576 + mu 0 4 204 205 226 225 + f 4 196 577 -217 -577 + mu 0 4 205 206 227 226 + f 4 197 578 -218 -578 + mu 0 4 206 207 228 227 + f 4 198 579 -219 -579 + mu 0 4 207 208 229 228 + f 4 199 560 -220 -580 + mu 0 4 208 209 230 229 + f 4 200 581 -221 -581 + mu 0 4 210 211 232 231 + f 4 201 582 -222 -582 + mu 0 4 211 212 233 232 + f 4 202 583 -223 -583 + mu 0 4 212 213 234 233 + f 4 203 584 -224 -584 + mu 0 4 213 214 235 234 + f 4 204 585 -225 -585 + mu 0 4 214 215 236 235 + f 4 205 586 -226 -586 + mu 0 4 215 216 237 236 + f 4 206 587 -227 -587 + mu 0 4 216 217 238 237 + f 4 207 588 -228 -588 + mu 0 4 217 218 239 238 + f 4 208 589 -229 -589 + mu 0 4 218 219 240 239 + f 4 209 590 -230 -590 + mu 0 4 219 220 241 240 + f 4 210 591 -231 -591 + mu 0 4 220 221 242 241 + f 4 211 592 -232 -592 + mu 0 4 221 222 243 242 + f 4 212 593 -233 -593 + mu 0 4 222 223 244 243 + f 4 213 594 -234 -594 + mu 0 4 223 224 245 244 + f 4 214 595 -235 -595 + mu 0 4 224 225 246 245 + f 4 215 596 -236 -596 + mu 0 4 225 226 247 246 + f 4 216 597 -237 -597 + mu 0 4 226 227 248 247 + f 4 217 598 -238 -598 + mu 0 4 227 228 249 248 + f 4 218 599 -239 -599 + mu 0 4 228 229 250 249 + f 4 219 580 -240 -600 + mu 0 4 229 230 251 250 + f 4 220 601 -241 -601 + mu 0 4 231 232 253 252 + f 4 221 602 -242 -602 + mu 0 4 232 233 254 253 + f 4 222 603 -243 -603 + mu 0 4 233 234 255 254 + f 4 223 604 -244 -604 + mu 0 4 234 235 256 255 + f 4 224 605 -245 -605 + mu 0 4 235 236 257 256 + f 4 225 606 -246 -606 + mu 0 4 236 237 258 257 + f 4 226 607 -247 -607 + mu 0 4 237 238 259 258 + f 4 227 608 -248 -608 + mu 0 4 238 239 260 259 + f 4 228 609 -249 -609 + mu 0 4 239 240 261 260 + f 4 229 610 -250 -610 + mu 0 4 240 241 262 261 + f 4 230 611 -251 -611 + mu 0 4 241 242 263 262 + f 4 231 612 -252 -612 + mu 0 4 242 243 264 263 + f 4 232 613 -253 -613 + mu 0 4 243 244 265 264 + f 4 233 614 -254 -614 + mu 0 4 244 245 266 265 + f 4 234 615 -255 -615 + mu 0 4 245 246 267 266 + f 4 235 616 -256 -616 + mu 0 4 246 247 268 267 + f 4 236 617 -257 -617 + mu 0 4 247 248 269 268 + f 4 237 618 -258 -618 + mu 0 4 248 249 270 269 + f 4 238 619 -259 -619 + mu 0 4 249 250 271 270 + f 4 239 600 -260 -620 + mu 0 4 250 251 272 271 + f 4 240 621 -261 -621 + mu 0 4 252 253 274 273 + f 4 241 622 -262 -622 + mu 0 4 253 254 275 274 + f 4 242 623 -263 -623 + mu 0 4 254 255 276 275 + f 4 243 624 -264 -624 + mu 0 4 255 256 277 276 + f 4 244 625 -265 -625 + mu 0 4 256 257 278 277 + f 4 245 626 -266 -626 + mu 0 4 257 258 279 278 + f 4 246 627 -267 -627 + mu 0 4 258 259 280 279 + f 4 247 628 -268 -628 + mu 0 4 259 260 281 280 + f 4 248 629 -269 -629 + mu 0 4 260 261 282 281 + f 4 249 630 -270 -630 + mu 0 4 261 262 283 282 + f 4 250 631 -271 -631 + mu 0 4 262 263 284 283 + f 4 251 632 -272 -632 + mu 0 4 263 264 285 284 + f 4 252 633 -273 -633 + mu 0 4 264 265 286 285 + f 4 253 634 -274 -634 + mu 0 4 265 266 287 286 + f 4 254 635 -275 -635 + mu 0 4 266 267 288 287 + f 4 255 636 -276 -636 + mu 0 4 267 268 289 288 + f 4 256 637 -277 -637 + mu 0 4 268 269 290 289 + f 4 257 638 -278 -638 + mu 0 4 269 270 291 290 + f 4 258 639 -279 -639 + mu 0 4 270 271 292 291 + f 4 259 620 -280 -640 + mu 0 4 271 272 293 292 + f 4 260 641 -281 -641 + mu 0 4 273 274 295 294 + f 4 261 642 -282 -642 + mu 0 4 274 275 296 295 + f 4 262 643 -283 -643 + mu 0 4 275 276 297 296 + f 4 263 644 -284 -644 + mu 0 4 276 277 298 297 + f 4 264 645 -285 -645 + mu 0 4 277 278 299 298 + f 4 265 646 -286 -646 + mu 0 4 278 279 300 299 + f 4 266 647 -287 -647 + mu 0 4 279 280 301 300 + f 4 267 648 -288 -648 + mu 0 4 280 281 302 301 + f 4 268 649 -289 -649 + mu 0 4 281 282 303 302 + f 4 269 650 -290 -650 + mu 0 4 282 283 304 303 + f 4 270 651 -291 -651 + mu 0 4 283 284 305 304 + f 4 271 652 -292 -652 + mu 0 4 284 285 306 305 + f 4 272 653 -293 -653 + mu 0 4 285 286 307 306 + f 4 273 654 -294 -654 + mu 0 4 286 287 308 307 + f 4 274 655 -295 -655 + mu 0 4 287 288 309 308 + f 4 275 656 -296 -656 + mu 0 4 288 289 310 309 + f 4 276 657 -297 -657 + mu 0 4 289 290 311 310 + f 4 277 658 -298 -658 + mu 0 4 290 291 312 311 + f 4 278 659 -299 -659 + mu 0 4 291 292 313 312 + f 4 279 640 -300 -660 + mu 0 4 292 293 314 313 + f 4 280 661 -301 -661 + mu 0 4 294 295 316 315 + f 4 281 662 -302 -662 + mu 0 4 295 296 317 316 + f 4 282 663 -303 -663 + mu 0 4 296 297 318 317 + f 4 283 664 -304 -664 + mu 0 4 297 298 319 318 + f 4 284 665 -305 -665 + mu 0 4 298 299 320 319 + f 4 285 666 -306 -666 + mu 0 4 299 300 321 320 + f 4 286 667 -307 -667 + mu 0 4 300 301 322 321 + f 4 287 668 -308 -668 + mu 0 4 301 302 323 322 + f 4 288 669 -309 -669 + mu 0 4 302 303 324 323 + f 4 289 670 -310 -670 + mu 0 4 303 304 325 324 + f 4 290 671 -311 -671 + mu 0 4 304 305 326 325 + f 4 291 672 -312 -672 + mu 0 4 305 306 327 326 + f 4 292 673 -313 -673 + mu 0 4 306 307 328 327 + f 4 293 674 -314 -674 + mu 0 4 307 308 329 328 + f 4 294 675 -315 -675 + mu 0 4 308 309 330 329 + f 4 295 676 -316 -676 + mu 0 4 309 310 331 330 + f 4 296 677 -317 -677 + mu 0 4 310 311 332 331 + f 4 297 678 -318 -678 + mu 0 4 311 312 333 332 + f 4 298 679 -319 -679 + mu 0 4 312 313 334 333 + f 4 299 660 -320 -680 + mu 0 4 313 314 335 334 + f 4 300 681 -321 -681 + mu 0 4 315 316 337 336 + f 4 301 682 -322 -682 + mu 0 4 316 317 338 337 + f 4 302 683 -323 -683 + mu 0 4 317 318 339 338 + f 4 303 684 -324 -684 + mu 0 4 318 319 340 339 + f 4 304 685 -325 -685 + mu 0 4 319 320 341 340 + f 4 305 686 -326 -686 + mu 0 4 320 321 342 341 + f 4 306 687 -327 -687 + mu 0 4 321 322 343 342 + f 4 307 688 -328 -688 + mu 0 4 322 323 344 343 + f 4 308 689 -329 -689 + mu 0 4 323 324 345 344 + f 4 309 690 -330 -690 + mu 0 4 324 325 346 345 + f 4 310 691 -331 -691 + mu 0 4 325 326 347 346 + f 4 311 692 -332 -692 + mu 0 4 326 327 348 347 + f 4 312 693 -333 -693 + mu 0 4 327 328 349 348 + f 4 313 694 -334 -694 + mu 0 4 328 329 350 349 + f 4 314 695 -335 -695 + mu 0 4 329 330 351 350 + f 4 315 696 -336 -696 + mu 0 4 330 331 352 351 + f 4 316 697 -337 -697 + mu 0 4 331 332 353 352 + f 4 317 698 -338 -698 + mu 0 4 332 333 354 353 + f 4 318 699 -339 -699 + mu 0 4 333 334 355 354 + f 4 319 680 -340 -700 + mu 0 4 334 335 356 355 + f 4 320 701 -341 -701 + mu 0 4 336 337 358 357 + f 4 321 702 -342 -702 + mu 0 4 337 338 359 358 + f 4 322 703 -343 -703 + mu 0 4 338 339 360 359 + f 4 323 704 -344 -704 + mu 0 4 339 340 361 360 + f 4 324 705 -345 -705 + mu 0 4 340 341 362 361 + f 4 325 706 -346 -706 + mu 0 4 341 342 363 362 + f 4 326 707 -347 -707 + mu 0 4 342 343 364 363 + f 4 327 708 -348 -708 + mu 0 4 343 344 365 364 + f 4 328 709 -349 -709 + mu 0 4 344 345 366 365 + f 4 329 710 -350 -710 + mu 0 4 345 346 367 366 + f 4 330 711 -351 -711 + mu 0 4 346 347 368 367 + f 4 331 712 -352 -712 + mu 0 4 347 348 369 368 + f 4 332 713 -353 -713 + mu 0 4 348 349 370 369 + f 4 333 714 -354 -714 + mu 0 4 349 350 371 370 + f 4 334 715 -355 -715 + mu 0 4 350 351 372 371 + f 4 335 716 -356 -716 + mu 0 4 351 352 373 372 + f 4 336 717 -357 -717 + mu 0 4 352 353 374 373 + f 4 337 718 -358 -718 + mu 0 4 353 354 375 374 + f 4 338 719 -359 -719 + mu 0 4 354 355 376 375 + f 4 339 700 -360 -720 + mu 0 4 355 356 377 376 + f 4 340 721 -361 -721 + mu 0 4 357 358 379 378 + f 4 341 722 -362 -722 + mu 0 4 358 359 380 379 + f 4 342 723 -363 -723 + mu 0 4 359 360 381 380 + f 4 343 724 -364 -724 + mu 0 4 360 361 382 381 + f 4 344 725 -365 -725 + mu 0 4 361 362 383 382 + f 4 345 726 -366 -726 + mu 0 4 362 363 384 383 + f 4 346 727 -367 -727 + mu 0 4 363 364 385 384 + f 4 347 728 -368 -728 + mu 0 4 364 365 386 385 + f 4 348 729 -369 -729 + mu 0 4 365 366 387 386 + f 4 349 730 -370 -730 + mu 0 4 366 367 388 387 + f 4 350 731 -371 -731 + mu 0 4 367 368 389 388 + f 4 351 732 -372 -732 + mu 0 4 368 369 390 389 + f 4 352 733 -373 -733 + mu 0 4 369 370 391 390 + f 4 353 734 -374 -734 + mu 0 4 370 371 392 391 + f 4 354 735 -375 -735 + mu 0 4 371 372 393 392 + f 4 355 736 -376 -736 + mu 0 4 372 373 394 393 + f 4 356 737 -377 -737 + mu 0 4 373 374 395 394 + f 4 357 738 -378 -738 + mu 0 4 374 375 396 395 + f 4 358 739 -379 -739 + mu 0 4 375 376 397 396 + f 4 359 720 -380 -740 + mu 0 4 376 377 398 397 + f 3 -1 -741 741 + mu 0 3 1 0 399 + f 3 -2 -742 742 + mu 0 3 2 1 400 + f 3 -3 -743 743 + mu 0 3 3 2 401 + f 3 -4 -744 744 + mu 0 3 4 3 402 + f 3 -5 -745 745 + mu 0 3 5 4 403 + f 3 -6 -746 746 + mu 0 3 6 5 404 + f 3 -7 -747 747 + mu 0 3 7 6 405 + f 3 -8 -748 748 + mu 0 3 8 7 406 + f 3 -9 -749 749 + mu 0 3 9 8 407 + f 3 -10 -750 750 + mu 0 3 10 9 408 + f 3 -11 -751 751 + mu 0 3 11 10 409 + f 3 -12 -752 752 + mu 0 3 12 11 410 + f 3 -13 -753 753 + mu 0 3 13 12 411 + f 3 -14 -754 754 + mu 0 3 14 13 412 + f 3 -15 -755 755 + mu 0 3 15 14 413 + f 3 -16 -756 756 + mu 0 3 16 15 414 + f 3 -17 -757 757 + mu 0 3 17 16 415 + f 3 -18 -758 758 + mu 0 3 18 17 416 + f 3 -19 -759 759 + mu 0 3 19 18 417 + f 3 -20 -760 740 + mu 0 3 20 19 418 + f 3 360 761 -761 + mu 0 3 378 379 419 + f 3 361 762 -762 + mu 0 3 379 380 420 + f 3 362 763 -763 + mu 0 3 380 381 421 + f 3 363 764 -764 + mu 0 3 381 382 422 + f 3 364 765 -765 + mu 0 3 382 383 423 + f 3 365 766 -766 + mu 0 3 383 384 424 + f 3 366 767 -767 + mu 0 3 384 385 425 + f 3 367 768 -768 + mu 0 3 385 386 426 + f 3 368 769 -769 + mu 0 3 386 387 427 + f 3 369 770 -770 + mu 0 3 387 388 428 + f 3 370 771 -771 + mu 0 3 388 389 429 + f 3 371 772 -772 + mu 0 3 389 390 430 + f 3 372 773 -773 + mu 0 3 390 391 431 + f 3 373 774 -774 + mu 0 3 391 392 432 + f 3 374 775 -775 + mu 0 3 392 393 433 + f 3 375 776 -776 + mu 0 3 393 394 434 + f 3 376 777 -777 + mu 0 3 394 395 435 + f 3 377 778 -778 + mu 0 3 395 396 436 + f 3 378 779 -779 + mu 0 3 396 397 437 + f 3 379 760 -780 + mu 0 3 397 398 438; + setAttr ".cd" -type "dataPolyComponent" Index_Data Edge 0 ; + setAttr ".cvd" -type "dataPolyComponent" Index_Data Vertex 0 ; + setAttr ".pd[0]" -type "dataPolyComponent" Index_Data UV 0 ; + setAttr ".hfd" -type "dataPolyComponent" Index_Data Face 0 ; + setAttr ".ndt" 0; + setAttr ".dr" 1; + setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:bf8e49bb98ec"; +select -ne :time1; + setAttr ".o" 1001; + setAttr ".unw" 1001; +select -ne :hardwareRenderingGlobals; + setAttr ".otfna" -type "stringArray" 22 "NURBS Curves" "NURBS Surfaces" "Polygons" "Subdiv Surface" "Particles" "Particle Instance" "Fluids" "Strokes" "Image Planes" "UI" "Lights" "Cameras" "Locators" "Joints" "IK Handles" "Deformers" "Motion Trails" "Components" "Hair Systems" "Follicles" "Misc. UI" "Ornaments" ; + setAttr ".otfva" -type "Int32Array" 22 0 1 1 1 1 1 + 1 1 1 0 0 0 0 0 0 0 0 0 + 0 0 0 0 ; + setAttr ".dli" 1; + setAttr ".fprt" yes; + setAttr ".rtfm" 1; +select -ne :renderPartition; + setAttr -s 2 ".st"; +select -ne :renderGlobalsList1; +select -ne :defaultShaderList1; + setAttr -s 5 ".s"; +select -ne :postProcessList1; + setAttr -s 2 ".p"; +select -ne :defaultRenderingList1; + setAttr -s 2 ".r"; +select -ne :standardSurface1; + setAttr ".b" 0.80000001192092896; + setAttr ".bc" -type "float3" 1 1 1 ; + setAttr ".s" 0.20000000298023224; + setAttr ".sr" 0.40000000596046448; +select -ne :initialShadingGroup; + setAttr -s 2 ".dsm"; + setAttr ".ro" yes; +select -ne :initialParticleSE; + setAttr ".ro" yes; +select -ne :defaultRenderGlobals; + addAttr -ci true -h true -sn "dss" -ln "defaultSurfaceShader" -dt "string"; + setAttr ".ren" -type "string" "arnold"; + setAttr ".outf" 51; + setAttr ".imfkey" -type "string" "exr"; + setAttr ".an" yes; + setAttr ".fs" 1001; + setAttr ".ef" 1001; + setAttr ".oft" -type "string" ""; + setAttr ".pff" yes; + setAttr ".ifp" -type "string" "//"; + setAttr ".rv" -type "string" ""; + setAttr ".pram" -type "string" ""; + setAttr ".poam" -type "string" ""; + setAttr ".prlm" -type "string" ""; + setAttr ".polm" -type "string" ""; + setAttr ".prm" -type "string" ""; + setAttr ".pom" -type "string" ""; + setAttr ".dss" -type "string" "lambert1"; +select -ne :defaultResolution; + setAttr ".w" 10; + setAttr ".h" 6; + setAttr ".pa" 1; + setAttr ".al" yes; + setAttr ".dar" 1.6666666269302368; +select -ne :defaultColorMgtGlobals; + setAttr ".cfe" yes; + setAttr ".cfp" -type "string" "/OCIO-configs/Maya-legacy/config.ocio"; + setAttr ".vtn" -type "string" "sRGB gamma (legacy)"; + setAttr ".vn" -type "string" "sRGB gamma"; + setAttr ".dn" -type "string" "legacy"; + setAttr ".wsn" -type "string" "scene-linear Rec 709/sRGB"; + setAttr ".ovt" no; + setAttr ".povt" no; + setAttr ".otn" -type "string" "sRGB gamma (legacy)"; + setAttr ".potn" -type "string" "sRGB gamma (legacy)"; +select -ne :hardwareRenderGlobals; + setAttr ".ctrs" 256; + setAttr ".btrs" 512; +connectAttr "pSphere1_GEOShape1.iog" ":initialShadingGroup.dsm" -na; +// End of modelMain.ma diff --git a/tests/integration/hosts/maya/expected/test_project/test_asset/publish/model/modelMain/v001/test_project_test_asset_modelMain_v001.abc b/tests/integration/hosts/maya/expected/test_project/test_asset/publish/model/modelMain/v001/test_project_test_asset_modelMain_v001.abc new file mode 100644 index 0000000000000000000000000000000000000000..e7de9d7bc115560e5318565dac9b2932cacb4cd1 GIT binary patch literal 24661 zcmeI&X_Osh+4b>+c?bl;Oc)xKFdC9{0wLI^0tAp5nNc)!l5P@6(oJ_KBn%p7R7Mq~ z5iu$%&JdiQN9dp^4m9Abs3?Q;04k_B!Lxr=bzL%o_qb@=Nvd? zL2u{Oo@w*)zv(mQE$BS(;2HC$%s6n?^yyO$oH2b~=Yrmz>0>sjw;o&9_3FBJRaf=a zwY`@)ALu>d@!ht$ZS@_~Prh}(y%zr4z0B*K*)#p%dGijQ*)#v&?&Zq*-AC*C^wt&J zfB5ZN?Yigt{`%lqu{WGsU_N*OSdp>x{+P%gedFRE~k1e@4>5e<2E`Gd`J;xqd z@-b)aIO1LS-BUXFcjBYtcV!#AGV@p1CVWV|qw*SlPUgxWuncUrJ^(JkXgo*Z{a$pfn|8;MH({kS_u7Tz+xxqa!$OKZOq>y zJq}#3a19>1;ODLRbwA_cFRuIib>{!7?te+V&Fjy#Aae(@O?$t0PaI#|Iq}4`*7V{P zPqy$eKfZM&D*2)nPmX*ldGS9taeUb;-gV{nYvYgL&&GdYw!zCYe_4c&jJGzg;oCEJ z=WK(0-iF^As^=e(eMaTBgXzUK=8vSu9amnr2Jf_T`{LHRAO7KWp97hHLEZnH(yKm~ z_1`huwDOj?_c)H|8o?7 z1V0*on{0#MmHDe9JR#o0c@4iMbN`r%ecp!OYR}&)`;5x>d1rdDjrl(;d;G*2{L}_B zimU2=_*>L{-jw-d&iHr_)t~E{YHsPb)Nq8ioHsk8o-X!Nz{E@bQRkp!TX8!LZd}X|?vJL)W z=5Cm6u>CgtR%3o)8*_e_UTlN6OpjxC`tcgP{!R;uAJqM95&!bK&);VL6LtSr#2Z(C zu7@%==Wfy7?=P-6w^*6$rfaXY#yO|6e&b6X&HCi}+v5N1igU})i&y5_=emr48s9mL zt@W29d{?~3@)~wMUY2dJ&)e`@)|#Jlx^Q0OFQymU;78J9)^QCUTrrrns``02{+)H7 z*4mnyK9=Glb5h`&p=!Jo_g&qjD+JZp+C$@}MgT(^D0 zZ#l2c$@RN%4ad$?+hA*&ay!oVthFlp87SAf>T@LXou}rwhUfdXWZ%8{bR~POUf)(@ zeOrz7Z8g@n)mYzFV|`nV^=&oQx7AqRR%3n3UhDPcx7WATSl?D-eOrz7Z8g@n^y~F) zHP*M)Sl?D-earpU=WnZV{w?swi@Set8xCe8s~4TasFoA)}6n}YTfx;?zcXF z`R((!)i{4!jq^9x?{(*It8xCe8s~4TasIX%=WqKyYuzzXU!Plz>vOAdeQq_b&#lJw zxz)HnmwtVHZZ)pYt;Y4a)wn*FpSQj~^V`>F^V`?wR^$5IYFwXNjq7u(aeZzzuFtK; z^|{r!K9~EgzkiFy_ixeo{w*5czeVHww`hF-7LD)UqVfG(G`@e!@6!7Fw>+2X?_YlV z`?qL({}zq!-@@9}-@mzjulxQj{rda2{O+y4e~ZTVZ}zqB`?uV0eScLn?yri*{Z-Mp zzbYE{S4HFgs%YF_6^;9=qH%v!-YeDjSLJ@|`zwC?{;Fu)Ulon}tDUdHe^oT@ugd+__s>P+{<&z}KbLD=-#-_P`{$x@|6DZgpNq!*bJ4heE*kgG z<$mk?XMX$sxoF%!7mfSpqH+IRH13~EzrKGi*R;NWE*kgGMdSXt+;9E+sA&8?DjL6! zipKAwqVfBvX#74Z8o!T<#_yw|@%yM~{5~r8TmL@dw|^fMjo(K_#9fBzPZ-@oNr*S~+u^Sb{1TQq+E7LDJ(S?hJbe~ZTN-=gvR zw`lzSE%)ns?K?7l`}c3r`2Aa+*Y)q;d?&B_{aZAC|7NY%{r)W)zkiFy@86>F`?uV0 z{d}WnJl`l9&o_$3^NphMe4}VQ-zXZ-H;TsdjiT{4bN@ zWaW3Ryyc#4V{aF=pHkuNBTuV%c!y~Hh=;wEXJ$OSQ?y~k!#hVCMLaw)+Bo9jT_R7% zczD-n(};(6i#CgRc=u@Yh=)6(aS;#i5p5Ci@N=RqBOZQkG(O_t=S5pZJiKS*@fZ(J ziY7!nyjQeM#KSW4$MZCApGa&{Uf>Y@be?N@$lqGZajQIBsU(O z63LB+r$%z);c1cFc(^l?8xK#9IwBsP5y`EiW=|yL#={3ia^vBdk=%Ir;7D#fJS&nL z4<8cAjfZ6>E8YvDu1Ict+=}GJ!$l-F9-bY^jfW472`Zn_ctisdD4tGa|Y1@R^a^c=)VHZan0yvx$*FlNNzm5G?E(+_eFB! z;r>W&JbXbUHy$2{quZrZx!>^3w#>20Q^6x#>20RULG@Y^D}@$mJL+<166 zk{b`-5Xp^)-yX@0hi{DJ#>4N3o-PBsV^OcO*9+eorJf z9=258o2WjfX!F$&iOX7|D%?KNQK0hd&(2jfX!H$&H6U z8p(}^KNiW2hi{GK#>2Noa^vAOk=%Ir_DF6#ygHH<@8i)YBDt-u`ID(~1bF3x>1OOa^vA~k=%HAi%4!fyk#Ue9v&abjfc022Zta^vCMBDwMK?vdPh zxFeDq5APAljfbBT$&H7f8_A7_pBKrEhxd%+#>0~$x$*E`k=%HA??`SuyiX)I9^N;S z8xQXn$&H6)CM(|l(eop@@$uwHZajQIBsU(O63LB+r$%z);c1cFc(^l?8xK#9yt`1r6$ZajQ=BsU(O6UmK-kBH>P!$(GP@R)JS;O=@lK6S zi{!?~r$=(*;WHw+@$i|E+<5q`NNzm*;z({h{E|p+JbZQ}Hy(azBsU&@StK_eo*T)H zhtG-R#>3r_+<16iBsU(OAIXh}7esR7;hsotJlq?}jfc;T2}ax$*FYk=%HAMI<*KUKz=ahcAlc#={p!a^qo{$%=PLP9uI8`rFEQnR{g&FW?~tDD!Xj;mSSqGol=n$__&t6SBqZe6oFp=NcPnpJ<7<^wuL zWPlwX#@Ml8j2#!o*fC*@9S_FXv0#iH2gcYjV2rK5F}C)`*t#2IYi^9Kw=uTX#@IR= zV{2@Tt*pva%pf&uD{*%Ffj)DIi1OGV& z{`VaNzHk3GYj*ncH$36W)%zdw%uC;~WMHo|UiODq#hRU8r)#}d*Hw*iQQBjEt9HaM zzT^u&f2)q4@YHV~JA2D1Z#(mspPsz${k;1|kL&t}MoYe7c&AqFl{H(I^@ic$vQF>3 zy{z|-j+S*{?@!B`ufoE1_m7S%>)VHSD(k}DNoAeU*;&^0#>_731Ea^4^~T||%DSkx zx2y+t4wiLn{u@K@SM^!-cHgL4sp_-zv;Wb|)8}Yc)#qqe)#qsX(dTGa)#qqe)hAz{ zqg_>>Uf1VnSJmfe{u>T`j&@ajj&@ajj&@ajj&@ajdOv;If1Y30*|mF9+sbDtS)Y|R zTvmM=>r>UIs?W+FS5|#iuTLtgK8^LM>QmLHs!vs)sy@{!&*RE9)05uYy;bA#wahEm zJ-w9c-m2HV?9;q@-OE0W>veC{>z>!kb#K+{UiN8Tz3ye7#`U_FeHz#6UiR5O_S$RP z&aT~?+Lk`CK2>?D`c&mv`Qyr}&+7F_W!0y#JXL+F@>KPy%2U;+TCIC^ZnTd*Ro3n7 z+Pzi2*M`eJ)oR^`>vbP4`>cHHK3wLh%2Tb@eYjrt;dvbQl*L}ENckgH2Ws~3U z^|@Qs>KxH$du`jKt*57|Xu$s|;;x+?GDEJ}YlrS@mfwPgS3)K2?3H`c(C)>QmLHs?YiySa)qP zmS^pkRiBk#t+76hy@%SCJ}ZA*S@l`HHmR)oG}fo8PgS3)K2?3H`c(Dlz2#Ze>Kdre z+AnK$OuOb($6&Q4Rd(&()V8cU)@Swlq_XPMSf8psReh@ZRQ0LqQ`KjE4Ow?>Hr8kD zm$h2=>fGR0>t3y`vCph}PqnRT-Mwzz#}(DOk1P8$uGW2A*{5-}?&HcnjjMHc?a2Qx zna?cGs#f12`mFu3>eE=Bsyep&TtEKgORsytPFs`{+_YK`?-yr>UIs!vs)sy-{fItKMwyaj? zpQ=91)n`?!dl-Gzep&TttWQ;+syKxH$^?J3&`ZTt0wJm*OeX9CY^{ML9 z9DP=`y2sLI?Uz-b#`;wCsp?bJr>f7&ug+n8R&(OP^SusyP2l!pID!&K6(1AYITpQ z&)P4mK8^LM>QmLHs!vs)m0w*0^;x}Mox}Px)~BjZwVk1!jN8&D&i&>K^qT#b_sqfa zJ8F7oXIanf?JetlqnFp?_mwsO?|oTs7=Ey<(>tFmYj5vHL-%X;7F;<648udK)VEAN^7rr>2i?oIT!s;K&N&#ymY{h6mf z+v(4I{jDmh{#F%Lf97>Ww%6aPqUz5){h6mf^Uf)2)t`C#TUE6GJLhK(JMOh_>3QS6 z#~yOZ+Mcg%_{Qzh==M?8t^C6~M4mD8@Q#t+yga;9@*J9n_lP`;=Hcf=ey;NHb0g2BdH8ve=h8g9XXM#5 z4^N6bpXTAcBG0IKc<;z_Y98Jv+BV|t8|@d#O_q57NNzm*{77y*JUNmZ4<8W8jfba1 za^vBtk=%HAS|m3f?u_Kd!_y0n2a^vB{Bf0VLoJejwd_*KS9zHUX z8xJ29$&H6!7|D%?kB;QV!^cE&T;Pmbiq!>2?tl$XgVh7s*YQ`20wQJiIuP8xJpu<&Ya};W;%lQ-5f5J%$!%55Z%dUM4__b2jfaOLx$*D~k=%Ir?UCGg_{K4N6{>K4}T(B9r5rdBe|`v`BSNK1bF()^6+RRHy*w(k{b`-AIXh}ABg0}!(WZ$#=~EWWXSt^^o>Yv zvc%tv9)2{E8xKDg$&H799LbG`e-g=!hkqK$koU9b=aJlG ziGLBvjfa03$&H7970Hl?e;vt&a^vAA zBf0VLQ<2I|0z{&Jp6PdHy-|TBsU)ZOC&cQ{%a&d-ru6XM{<)T zekPI|4?i2pjfcmK{l|YdjK@ZDlOczApyHy++9k|A&F@PtTivc%g& za^vA`Bf0VLc9Gn8c>73hJiJ3BHy++Gk{b{26v>T;caG%7!xJO9@$fE@+<17`NNzm5 zTO>Cg-aV2V4|haz$&H7n zM{?ug8Ijz0_`pbRJbX|jHy)lD$&H5(j^xI}vmzPt4vAh6$xW8HE0P-zw<5Xma1qIk zhi6A}lr;x$*ERk=%Ir)JSeTd|D(o z9zH#i8xNlm$&H84jO50{XGL=3;TK18k#>20S@_t#>20T+HLPwFT^m+6j;;%ben zvi`;&iLAZxM{zPPLjXxP#V`FRR z?*~O$R+ayz?Y2K|+CTd{)f3*m_f})ZZa8^)_u|2mcgbO~$>c>#7c83JGw49@xA@Ge zo?6$}RCV1OFW#?weN{EwCMVE(+L7qnaU zGr->#XO+bYlz*R}T8+=G$G0t>GG^?ilLvbi_a3%%!Qi`R&K@&%>`C){nsJkRyXW^D zU45d`*}QZP?_0KXXwddsPVOFuru zEnDvB_IFU#&X_;cfjm^#FVuDS`t@pdj=0)Cs{R-q^$VB3?&>>k`sMGx{j;If_pJHL z{A=6u+qE5x=c^k|J~u74gZX5=he-@sx$#{XJ7Rn(@{1um03;E?so% zH-37+?;e}B%lF@Zb?+@RHaz#BsSmvF&Y9mRexOl9>!RBUT+Q;Pibw4gW{+{{D-XHtJd#=4~ z_Q)?@`}n0l{)Tz&x!Rl- zojlmRq*CxYKK|*>q5S)o_B2h`VRH$v+7SWw|mjtLl^ffnYU>E z={*C3i~5#!)x(adlV?uu?AUwWvPFxBI*#m_*D>{=j%ib-b#_cSXx5C*S)Eh%Ii%dW zzkl(f`Dr(s9^bvP+nnhght8XS#ESmDfuWA&QzuU;C(h{}>N#Uz(a=!O(ymjN^>m!l z)88@m;Et&?W_3=RHFa9~-qpmO!TAG=`pb8$-lS(iNAE!2l35*x&pP0=oaloG4E3Gg zb6!vXV9(M6=JX7nKh)QMz>@5I?%@2Mr9E?pdXnAJa}VfSHq^gtXs(V9;LYtH=sT}x z{!lgO9vti$I^e>-f%B{JQ1@U>^|bPR=9becG-K}aDO09SUeeuO!S*4M-}J>lxH@z$ z-u9zMJ#x{_rQhaz*CjtN(7p1A6^Uc0Yw97nSe!CHm#?ng%!H_dmV=|7GK;>oy)78c1vt z{$=;``c~|*uD#_$EB>{;{=RI`H8_7^&yw!0EW9q~Iy;Z=8C*Db`P4(Imk#S5>^XI1 zK4E)`dCW}d{r}p!-oc6U&O3F{(BgmWpwYvu@@l-pzwG8r*QvS7J6r$8|95ZP-fmWP grE_!T&&^K$R_#*PTkDhWtMy4Y;bqn9$JF(I02>_hl>h($ literal 0 HcmV?d00001 diff --git a/tests/integration/hosts/maya/expected/test_project/test_asset/publish/model/modelMain/v001/test_project_test_asset_modelMain_v001.ma b/tests/integration/hosts/maya/expected/test_project/test_asset/publish/model/modelMain/v001/test_project_test_asset_modelMain_v001.ma new file mode 100644 index 00000000000..2095b7aea2a --- /dev/null +++ b/tests/integration/hosts/maya/expected/test_project/test_asset/publish/model/modelMain/v001/test_project_test_asset_modelMain_v001.ma @@ -0,0 +1,1224 @@ +//Maya ASCII 2024 scene +//Name: modelMain.ma +//Last modified: Tue, Sep 19, 2023 03:32:09 PM +//Codeset: 1252 +requires maya "2024"; +requires "mtoa" "5.3.0"; +requires "stereoCamera" "10.0"; +currentUnit -l centimeter -a degree -t pal; +fileInfo "application" "maya"; +fileInfo "product" "Maya 2024"; +fileInfo "version" "2024"; +fileInfo "cutIdentifier" "202302170737-4500172811"; +fileInfo "osv" "Windows 10 Pro v2009 (Build: 19045)"; +fileInfo "UUID" "D1AE55EF-4393-3A0C-D975-1E920D093F6C"; +createNode transform -n "pSphere1_GEO"; + rename -uid "7445A43F-444F-B2D3-4315-2AA013D2E0B6"; + addAttr -ci true -sn "cbId" -ln "cbId" -dt "string"; + setAttr ".rlio[0]" 1 yes 0; + setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:440654b3dfe4"; +createNode mesh -n "pSphere1_GEOShape1" -p "pSphere1_GEO"; + rename -uid "7C731260-45C6-339E-07BF-359446B08EA1"; + addAttr -ci true -sn "cbId" -ln "cbId" -dt "string"; + setAttr -k off ".v"; + setAttr ".vir" yes; + setAttr ".vif" yes; + setAttr ".uvst[0].uvsn" -type "string" "map1"; + setAttr -s 439 ".uvst[0].uvsp"; + setAttr ".uvst[0].uvsp[0:249]" -type "float2" 0 0.050000001 0.050000001 0.050000001 + 0.1 0.050000001 0.15000001 0.050000001 0.2 0.050000001 0.25 0.050000001 0.30000001 + 0.050000001 0.35000002 0.050000001 0.40000004 0.050000001 0.45000005 0.050000001 + 0.50000006 0.050000001 0.55000007 0.050000001 0.60000008 0.050000001 0.6500001 0.050000001 + 0.70000011 0.050000001 0.75000012 0.050000001 0.80000013 0.050000001 0.85000014 0.050000001 + 0.90000015 0.050000001 0.95000017 0.050000001 1.000000119209 0.050000001 0 0.1 0.050000001 + 0.1 0.1 0.1 0.15000001 0.1 0.2 0.1 0.25 0.1 0.30000001 0.1 0.35000002 0.1 0.40000004 + 0.1 0.45000005 0.1 0.50000006 0.1 0.55000007 0.1 0.60000008 0.1 0.6500001 0.1 0.70000011 + 0.1 0.75000012 0.1 0.80000013 0.1 0.85000014 0.1 0.90000015 0.1 0.95000017 0.1 1.000000119209 + 0.1 0 0.15000001 0.050000001 0.15000001 0.1 0.15000001 0.15000001 0.15000001 0.2 + 0.15000001 0.25 0.15000001 0.30000001 0.15000001 0.35000002 0.15000001 0.40000004 + 0.15000001 0.45000005 0.15000001 0.50000006 0.15000001 0.55000007 0.15000001 0.60000008 + 0.15000001 0.6500001 0.15000001 0.70000011 0.15000001 0.75000012 0.15000001 0.80000013 + 0.15000001 0.85000014 0.15000001 0.90000015 0.15000001 0.95000017 0.15000001 1.000000119209 + 0.15000001 0 0.2 0.050000001 0.2 0.1 0.2 0.15000001 0.2 0.2 0.2 0.25 0.2 0.30000001 + 0.2 0.35000002 0.2 0.40000004 0.2 0.45000005 0.2 0.50000006 0.2 0.55000007 0.2 0.60000008 + 0.2 0.6500001 0.2 0.70000011 0.2 0.75000012 0.2 0.80000013 0.2 0.85000014 0.2 0.90000015 + 0.2 0.95000017 0.2 1.000000119209 0.2 0 0.25 0.050000001 0.25 0.1 0.25 0.15000001 + 0.25 0.2 0.25 0.25 0.25 0.30000001 0.25 0.35000002 0.25 0.40000004 0.25 0.45000005 + 0.25 0.50000006 0.25 0.55000007 0.25 0.60000008 0.25 0.6500001 0.25 0.70000011 0.25 + 0.75000012 0.25 0.80000013 0.25 0.85000014 0.25 0.90000015 0.25 0.95000017 0.25 1.000000119209 + 0.25 0 0.30000001 0.050000001 0.30000001 0.1 0.30000001 0.15000001 0.30000001 0.2 + 0.30000001 0.25 0.30000001 0.30000001 0.30000001 0.35000002 0.30000001 0.40000004 + 0.30000001 0.45000005 0.30000001 0.50000006 0.30000001 0.55000007 0.30000001 0.60000008 + 0.30000001 0.6500001 0.30000001 0.70000011 0.30000001 0.75000012 0.30000001 0.80000013 + 0.30000001 0.85000014 0.30000001 0.90000015 0.30000001 0.95000017 0.30000001 1.000000119209 + 0.30000001 0 0.35000002 0.050000001 0.35000002 0.1 0.35000002 0.15000001 0.35000002 + 0.2 0.35000002 0.25 0.35000002 0.30000001 0.35000002 0.35000002 0.35000002 0.40000004 + 0.35000002 0.45000005 0.35000002 0.50000006 0.35000002 0.55000007 0.35000002 0.60000008 + 0.35000002 0.6500001 0.35000002 0.70000011 0.35000002 0.75000012 0.35000002 0.80000013 + 0.35000002 0.85000014 0.35000002 0.90000015 0.35000002 0.95000017 0.35000002 1.000000119209 + 0.35000002 0 0.40000004 0.050000001 0.40000004 0.1 0.40000004 0.15000001 0.40000004 + 0.2 0.40000004 0.25 0.40000004 0.30000001 0.40000004 0.35000002 0.40000004 0.40000004 + 0.40000004 0.45000005 0.40000004 0.50000006 0.40000004 0.55000007 0.40000004 0.60000008 + 0.40000004 0.6500001 0.40000004 0.70000011 0.40000004 0.75000012 0.40000004 0.80000013 + 0.40000004 0.85000014 0.40000004 0.90000015 0.40000004 0.95000017 0.40000004 1.000000119209 + 0.40000004 0 0.45000005 0.050000001 0.45000005 0.1 0.45000005 0.15000001 0.45000005 + 0.2 0.45000005 0.25 0.45000005 0.30000001 0.45000005 0.35000002 0.45000005 0.40000004 + 0.45000005 0.45000005 0.45000005 0.50000006 0.45000005 0.55000007 0.45000005 0.60000008 + 0.45000005 0.6500001 0.45000005 0.70000011 0.45000005 0.75000012 0.45000005 0.80000013 + 0.45000005 0.85000014 0.45000005 0.90000015 0.45000005 0.95000017 0.45000005 1.000000119209 + 0.45000005 0 0.50000006 0.050000001 0.50000006 0.1 0.50000006 0.15000001 0.50000006 + 0.2 0.50000006 0.25 0.50000006 0.30000001 0.50000006 0.35000002 0.50000006 0.40000004 + 0.50000006 0.45000005 0.50000006 0.50000006 0.50000006 0.55000007 0.50000006 0.60000008 + 0.50000006 0.6500001 0.50000006 0.70000011 0.50000006 0.75000012 0.50000006 0.80000013 + 0.50000006 0.85000014 0.50000006 0.90000015 0.50000006 0.95000017 0.50000006 1.000000119209 + 0.50000006 0 0.55000007 0.050000001 0.55000007 0.1 0.55000007 0.15000001 0.55000007 + 0.2 0.55000007 0.25 0.55000007 0.30000001 0.55000007 0.35000002 0.55000007 0.40000004 + 0.55000007 0.45000005 0.55000007 0.50000006 0.55000007 0.55000007 0.55000007 0.60000008 + 0.55000007 0.6500001 0.55000007 0.70000011 0.55000007 0.75000012 0.55000007 0.80000013 + 0.55000007 0.85000014 0.55000007 0.90000015 0.55000007 0.95000017 0.55000007 1.000000119209 + 0.55000007 0 0.60000008 0.050000001 0.60000008 0.1 0.60000008 0.15000001 0.60000008 + 0.2 0.60000008 0.25 0.60000008 0.30000001 0.60000008 0.35000002 0.60000008 0.40000004 + 0.60000008 0.45000005 0.60000008 0.50000006 0.60000008 0.55000007 0.60000008 0.60000008 + 0.60000008 0.6500001 0.60000008 0.70000011 0.60000008 0.75000012 0.60000008 0.80000013 + 0.60000008 0.85000014 0.60000008 0.90000015 0.60000008; + setAttr ".uvst[0].uvsp[250:438]" 0.95000017 0.60000008 1.000000119209 0.60000008 + 0 0.6500001 0.050000001 0.6500001 0.1 0.6500001 0.15000001 0.6500001 0.2 0.6500001 + 0.25 0.6500001 0.30000001 0.6500001 0.35000002 0.6500001 0.40000004 0.6500001 0.45000005 + 0.6500001 0.50000006 0.6500001 0.55000007 0.6500001 0.60000008 0.6500001 0.6500001 + 0.6500001 0.70000011 0.6500001 0.75000012 0.6500001 0.80000013 0.6500001 0.85000014 + 0.6500001 0.90000015 0.6500001 0.95000017 0.6500001 1.000000119209 0.6500001 0 0.70000011 + 0.050000001 0.70000011 0.1 0.70000011 0.15000001 0.70000011 0.2 0.70000011 0.25 0.70000011 + 0.30000001 0.70000011 0.35000002 0.70000011 0.40000004 0.70000011 0.45000005 0.70000011 + 0.50000006 0.70000011 0.55000007 0.70000011 0.60000008 0.70000011 0.6500001 0.70000011 + 0.70000011 0.70000011 0.75000012 0.70000011 0.80000013 0.70000011 0.85000014 0.70000011 + 0.90000015 0.70000011 0.95000017 0.70000011 1.000000119209 0.70000011 0 0.75000012 + 0.050000001 0.75000012 0.1 0.75000012 0.15000001 0.75000012 0.2 0.75000012 0.25 0.75000012 + 0.30000001 0.75000012 0.35000002 0.75000012 0.40000004 0.75000012 0.45000005 0.75000012 + 0.50000006 0.75000012 0.55000007 0.75000012 0.60000008 0.75000012 0.6500001 0.75000012 + 0.70000011 0.75000012 0.75000012 0.75000012 0.80000013 0.75000012 0.85000014 0.75000012 + 0.90000015 0.75000012 0.95000017 0.75000012 1.000000119209 0.75000012 0 0.80000013 + 0.050000001 0.80000013 0.1 0.80000013 0.15000001 0.80000013 0.2 0.80000013 0.25 0.80000013 + 0.30000001 0.80000013 0.35000002 0.80000013 0.40000004 0.80000013 0.45000005 0.80000013 + 0.50000006 0.80000013 0.55000007 0.80000013 0.60000008 0.80000013 0.6500001 0.80000013 + 0.70000011 0.80000013 0.75000012 0.80000013 0.80000013 0.80000013 0.85000014 0.80000013 + 0.90000015 0.80000013 0.95000017 0.80000013 1.000000119209 0.80000013 0 0.85000014 + 0.050000001 0.85000014 0.1 0.85000014 0.15000001 0.85000014 0.2 0.85000014 0.25 0.85000014 + 0.30000001 0.85000014 0.35000002 0.85000014 0.40000004 0.85000014 0.45000005 0.85000014 + 0.50000006 0.85000014 0.55000007 0.85000014 0.60000008 0.85000014 0.6500001 0.85000014 + 0.70000011 0.85000014 0.75000012 0.85000014 0.80000013 0.85000014 0.85000014 0.85000014 + 0.90000015 0.85000014 0.95000017 0.85000014 1.000000119209 0.85000014 0 0.90000015 + 0.050000001 0.90000015 0.1 0.90000015 0.15000001 0.90000015 0.2 0.90000015 0.25 0.90000015 + 0.30000001 0.90000015 0.35000002 0.90000015 0.40000004 0.90000015 0.45000005 0.90000015 + 0.50000006 0.90000015 0.55000007 0.90000015 0.60000008 0.90000015 0.6500001 0.90000015 + 0.70000011 0.90000015 0.75000012 0.90000015 0.80000013 0.90000015 0.85000014 0.90000015 + 0.90000015 0.90000015 0.95000017 0.90000015 1.000000119209 0.90000015 0 0.95000017 + 0.050000001 0.95000017 0.1 0.95000017 0.15000001 0.95000017 0.2 0.95000017 0.25 0.95000017 + 0.30000001 0.95000017 0.35000002 0.95000017 0.40000004 0.95000017 0.45000005 0.95000017 + 0.50000006 0.95000017 0.55000007 0.95000017 0.60000008 0.95000017 0.6500001 0.95000017 + 0.70000011 0.95000017 0.75000012 0.95000017 0.80000013 0.95000017 0.85000014 0.95000017 + 0.90000015 0.95000017 0.95000017 0.95000017 1.000000119209 0.95000017 0.025 0 0.075000003 + 0 0.125 0 0.17500001 0 0.22500001 0 0.27500001 0 0.32500002 0 0.375 0 0.42500001 + 0 0.47500002 0 0.52499998 0 0.57499999 0 0.625 0 0.67500001 0 0.72499996 0 0.77499998 + 0 0.82499999 0 0.875 0 0.92500001 0 0.97499996 0 0.025 1 0.075000003 1 0.125 1 0.17500001 + 1 0.22500001 1 0.27500001 1 0.32500002 1 0.375 1 0.42500001 1 0.47500002 1 0.52499998 + 1 0.57499999 1 0.625 1 0.67500001 1 0.72499996 1 0.77499998 1 0.82499999 1 0.875 + 1 0.92500001 1 0.97499996 1; + setAttr ".cuvs" -type "string" "map1"; + setAttr ".dcc" -type "string" "Ambient+Diffuse"; + setAttr ".covm[0]" 0 1 1; + setAttr ".cdvm[0]" 0 1 1; + setAttr -s 382 ".vt"; + setAttr ".vt[0:165]" 0.14877813 -0.98768836 -0.048340943 0.12655823 -0.98768836 -0.091949932 + 0.091949932 -0.98768836 -0.12655823 0.048340935 -0.98768836 -0.14877811 0 -0.98768836 -0.15643455 + -0.048340935 -0.98768836 -0.1487781 -0.091949917 -0.98768836 -0.1265582 -0.12655818 -0.98768836 -0.091949902 + -0.14877807 -0.98768836 -0.048340924 -0.15643452 -0.98768836 0 -0.14877807 -0.98768836 0.048340924 + -0.12655818 -0.98768836 0.091949895 -0.091949895 -0.98768836 0.12655817 -0.048340924 -0.98768836 0.14877805 + -4.6621107e-09 -0.98768836 0.15643449 0.048340909 -0.98768836 0.14877804 0.09194988 -0.98768836 0.12655815 + 0.12655815 -0.98768836 0.091949888 0.14877804 -0.98768836 0.048340913 0.15643448 -0.98768836 0 + 0.29389283 -0.95105654 -0.095491566 0.25000018 -0.95105654 -0.18163574 0.18163574 -0.95105654 -0.25000015 + 0.095491551 -0.95105654 -0.2938928 0 -0.95105654 -0.30901715 -0.095491551 -0.95105654 -0.29389277 + -0.18163571 -0.95105654 -0.25000009 -0.25000009 -0.95105654 -0.18163569 -0.29389271 -0.95105654 -0.095491529 + -0.30901706 -0.95105654 0 -0.29389271 -0.95105654 0.095491529 -0.25000006 -0.95105654 0.18163568 + -0.18163568 -0.95105654 0.25000006 -0.095491529 -0.95105654 0.29389268 -9.2094243e-09 -0.95105654 0.30901703 + 0.095491499 -0.95105654 0.29389265 0.18163563 -0.95105654 0.25000003 0.25 -0.95105654 0.18163565 + 0.29389265 -0.95105654 0.095491506 0.309017 -0.95105654 0 0.43177092 -0.89100653 -0.14029087 + 0.36728629 -0.89100653 -0.2668491 0.2668491 -0.89100653 -0.36728626 0.14029086 -0.89100653 -0.43177086 + 0 -0.89100653 -0.45399073 -0.14029086 -0.89100653 -0.43177083 -0.26684904 -0.89100653 -0.36728618 + -0.36728615 -0.89100653 -0.26684901 -0.43177077 -0.89100653 -0.14029081 -0.45399064 -0.89100653 0 + -0.43177077 -0.89100653 0.14029081 -0.36728612 -0.89100653 0.26684898 -0.26684898 -0.89100653 0.36728612 + -0.14029081 -0.89100653 0.43177071 -1.3529972e-08 -0.89100653 0.45399058 0.14029078 -0.89100653 0.43177068 + 0.26684892 -0.89100653 0.36728609 0.36728606 -0.89100653 0.26684895 0.43177065 -0.89100653 0.1402908 + 0.45399052 -0.89100653 0 0.55901736 -0.809017 -0.18163574 0.47552857 -0.809017 -0.34549171 + 0.34549171 -0.809017 -0.47552854 0.18163572 -0.809017 -0.5590173 0 -0.809017 -0.58778554 + -0.18163572 -0.809017 -0.55901724 -0.34549165 -0.809017 -0.47552842 -0.47552839 -0.809017 -0.34549159 + -0.55901712 -0.809017 -0.18163566 -0.58778536 -0.809017 0 -0.55901712 -0.809017 0.18163566 + -0.47552836 -0.809017 0.34549156 -0.34549156 -0.809017 0.47552833 -0.18163566 -0.809017 0.55901706 + -1.7517365e-08 -0.809017 0.5877853 0.18163562 -0.809017 0.55901706 0.3454915 -0.809017 0.4755283 + 0.47552827 -0.809017 0.34549153 0.559017 -0.809017 0.18163563 0.58778524 -0.809017 0 + 0.67249894 -0.70710677 -0.21850814 0.57206178 -0.70710677 -0.41562718 0.41562718 -0.70710677 -0.57206172 + 0.21850812 -0.70710677 -0.67249888 0 -0.70710677 -0.70710713 -0.21850812 -0.70710677 -0.67249882 + -0.41562709 -0.70710677 -0.5720616 -0.57206154 -0.70710677 -0.41562706 -0.6724987 -0.70710677 -0.21850805 + -0.70710695 -0.70710677 0 -0.6724987 -0.70710677 0.21850805 -0.57206154 -0.70710677 0.415627 + -0.415627 -0.70710677 0.57206148 -0.21850805 -0.70710677 0.67249858 -2.1073424e-08 -0.70710677 0.70710683 + 0.21850799 -0.70710677 0.67249858 0.41562691 -0.70710677 0.57206142 0.57206142 -0.70710677 0.41562697 + 0.67249852 -0.70710677 0.21850802 0.70710677 -0.70710677 0 0.7694214 -0.58778524 -0.25000015 + 0.65450895 -0.58778524 -0.47552854 0.47552854 -0.58778524 -0.65450889 0.25000012 -0.58778524 -0.76942128 + 0 -0.58778524 -0.80901736 -0.25000012 -0.58778524 -0.76942122 -0.47552845 -0.58778524 -0.65450877 + -0.65450871 -0.58778524 -0.47552839 -0.7694211 -0.58778524 -0.25000006 -0.80901718 -0.58778524 0 + -0.7694211 -0.58778524 0.25000006 -0.65450865 -0.58778524 0.47552836 -0.47552836 -0.58778524 0.65450859 + -0.25000006 -0.58778524 0.76942098 -2.4110586e-08 -0.58778524 0.80901712 0.24999999 -0.58778524 0.76942098 + 0.47552827 -0.58778524 0.65450853 0.65450853 -0.58778524 0.4755283 0.76942092 -0.58778524 0.25 + 0.809017 -0.58778524 0 0.8473981 -0.45399052 -0.27533633 0.72083992 -0.45399052 -0.5237208 + 0.5237208 -0.45399052 -0.72083986 0.2753363 -0.45399052 -0.84739798 0 -0.45399052 -0.89100695 + -0.2753363 -0.45399052 -0.84739798 -0.52372068 -0.45399052 -0.72083968 -0.72083962 -0.45399052 -0.52372062 + -0.8473978 -0.45399052 -0.27533621 -0.89100677 -0.45399052 0 -0.8473978 -0.45399052 0.27533621 + -0.72083962 -0.45399052 0.52372062 -0.52372062 -0.45399052 0.72083956 -0.27533621 -0.45399052 0.84739769 + -2.6554064e-08 -0.45399052 0.89100665 0.27533615 -0.45399052 0.84739763 0.5237205 -0.45399052 0.7208395 + 0.72083944 -0.45399052 0.52372056 0.84739757 -0.45399052 0.27533618 0.89100653 -0.45399052 0 + 0.90450913 -0.30901697 -0.2938928 0.7694214 -0.30901697 -0.55901736 0.55901736 -0.30901697 -0.76942134 + 0.29389277 -0.30901697 -0.90450901 0 -0.30901697 -0.95105702 -0.29389277 -0.30901697 -0.90450895 + -0.55901724 -0.30901697 -0.76942122 -0.76942116 -0.30901697 -0.55901718 -0.90450877 -0.30901697 -0.29389271 + -0.95105678 -0.30901697 0 -0.90450877 -0.30901697 0.29389271 -0.7694211 -0.30901697 0.55901712 + -0.55901712 -0.30901697 0.76942104 -0.29389271 -0.30901697 0.90450865 -2.8343694e-08 -0.30901697 0.95105666 + 0.29389262 -0.30901697 0.90450859 0.559017 -0.30901697 0.76942098 0.76942092 -0.30901697 0.55901706 + 0.90450853 -0.30901697 0.29389265 0.95105654 -0.30901697 0 0.93934804 -0.15643437 -0.30521268 + 0.79905719 -0.15643437 -0.580549 0.580549 -0.15643437 -0.79905713 0.30521265 -0.15643437 -0.93934792 + 0 -0.15643437 -0.98768884 -0.30521265 -0.15643437 -0.93934786; + setAttr ".vt[166:331]" -0.58054888 -0.15643437 -0.79905695 -0.79905689 -0.15643437 -0.58054882 + -0.93934768 -0.15643437 -0.30521256 -0.9876886 -0.15643437 0 -0.93934768 -0.15643437 0.30521256 + -0.79905683 -0.15643437 0.58054876 -0.58054876 -0.15643437 0.79905677 -0.30521256 -0.15643437 0.93934757 + -2.9435407e-08 -0.15643437 0.98768848 0.30521247 -0.15643437 0.93934757 0.58054864 -0.15643437 0.79905671 + 0.79905665 -0.15643437 0.5805487 0.93934751 -0.15643437 0.3052125 0.98768836 -0.15643437 0 + 0.95105714 0 -0.30901718 0.80901754 0 -0.5877856 0.5877856 0 -0.80901748 0.30901715 0 -0.95105702 + 0 0 -1.000000476837 -0.30901715 0 -0.95105696 -0.58778548 0 -0.8090173 -0.80901724 0 -0.58778542 + -0.95105678 0 -0.30901706 -1.000000238419 0 0 -0.95105678 0 0.30901706 -0.80901718 0 0.58778536 + -0.58778536 0 0.80901712 -0.30901706 0 0.95105666 -2.9802322e-08 0 1.000000119209 + 0.30901697 0 0.9510566 0.58778524 0 0.80901706 0.809017 0 0.5877853 0.95105654 0 0.309017 + 1 0 0 0.93934804 0.15643437 -0.30521268 0.79905719 0.15643437 -0.580549 0.580549 0.15643437 -0.79905713 + 0.30521265 0.15643437 -0.93934792 0 0.15643437 -0.98768884 -0.30521265 0.15643437 -0.93934786 + -0.58054888 0.15643437 -0.79905695 -0.79905689 0.15643437 -0.58054882 -0.93934768 0.15643437 -0.30521256 + -0.9876886 0.15643437 0 -0.93934768 0.15643437 0.30521256 -0.79905683 0.15643437 0.58054876 + -0.58054876 0.15643437 0.79905677 -0.30521256 0.15643437 0.93934757 -2.9435407e-08 0.15643437 0.98768848 + 0.30521247 0.15643437 0.93934757 0.58054864 0.15643437 0.79905671 0.79905665 0.15643437 0.5805487 + 0.93934751 0.15643437 0.3052125 0.98768836 0.15643437 0 0.90450913 0.30901697 -0.2938928 + 0.7694214 0.30901697 -0.55901736 0.55901736 0.30901697 -0.76942134 0.29389277 0.30901697 -0.90450901 + 0 0.30901697 -0.95105702 -0.29389277 0.30901697 -0.90450895 -0.55901724 0.30901697 -0.76942122 + -0.76942116 0.30901697 -0.55901718 -0.90450877 0.30901697 -0.29389271 -0.95105678 0.30901697 0 + -0.90450877 0.30901697 0.29389271 -0.7694211 0.30901697 0.55901712 -0.55901712 0.30901697 0.76942104 + -0.29389271 0.30901697 0.90450865 -2.8343694e-08 0.30901697 0.95105666 0.29389262 0.30901697 0.90450859 + 0.559017 0.30901697 0.76942098 0.76942092 0.30901697 0.55901706 0.90450853 0.30901697 0.29389265 + 0.95105654 0.30901697 0 0.8473981 0.45399052 -0.27533633 0.72083992 0.45399052 -0.5237208 + 0.5237208 0.45399052 -0.72083986 0.2753363 0.45399052 -0.84739798 0 0.45399052 -0.89100695 + -0.2753363 0.45399052 -0.84739798 -0.52372068 0.45399052 -0.72083968 -0.72083962 0.45399052 -0.52372062 + -0.8473978 0.45399052 -0.27533621 -0.89100677 0.45399052 0 -0.8473978 0.45399052 0.27533621 + -0.72083962 0.45399052 0.52372062 -0.52372062 0.45399052 0.72083956 -0.27533621 0.45399052 0.84739769 + -2.6554064e-08 0.45399052 0.89100665 0.27533615 0.45399052 0.84739763 0.5237205 0.45399052 0.7208395 + 0.72083944 0.45399052 0.52372056 0.84739757 0.45399052 0.27533618 0.89100653 0.45399052 0 + 0.7694214 0.58778524 -0.25000015 0.65450895 0.58778524 -0.47552854 0.47552854 0.58778524 -0.65450889 + 0.25000012 0.58778524 -0.76942128 0 0.58778524 -0.80901736 -0.25000012 0.58778524 -0.76942122 + -0.47552845 0.58778524 -0.65450877 -0.65450871 0.58778524 -0.47552839 -0.7694211 0.58778524 -0.25000006 + -0.80901718 0.58778524 0 -0.7694211 0.58778524 0.25000006 -0.65450865 0.58778524 0.47552836 + -0.47552836 0.58778524 0.65450859 -0.25000006 0.58778524 0.76942098 -2.4110586e-08 0.58778524 0.80901712 + 0.24999999 0.58778524 0.76942098 0.47552827 0.58778524 0.65450853 0.65450853 0.58778524 0.4755283 + 0.76942092 0.58778524 0.25 0.809017 0.58778524 0 0.67249894 0.70710677 -0.21850814 + 0.57206178 0.70710677 -0.41562718 0.41562718 0.70710677 -0.57206172 0.21850812 0.70710677 -0.67249888 + 0 0.70710677 -0.70710713 -0.21850812 0.70710677 -0.67249882 -0.41562709 0.70710677 -0.5720616 + -0.57206154 0.70710677 -0.41562706 -0.6724987 0.70710677 -0.21850805 -0.70710695 0.70710677 0 + -0.6724987 0.70710677 0.21850805 -0.57206154 0.70710677 0.415627 -0.415627 0.70710677 0.57206148 + -0.21850805 0.70710677 0.67249858 -2.1073424e-08 0.70710677 0.70710683 0.21850799 0.70710677 0.67249858 + 0.41562691 0.70710677 0.57206142 0.57206142 0.70710677 0.41562697 0.67249852 0.70710677 0.21850802 + 0.70710677 0.70710677 0 0.55901736 0.809017 -0.18163574 0.47552857 0.809017 -0.34549171 + 0.34549171 0.809017 -0.47552854 0.18163572 0.809017 -0.5590173 0 0.809017 -0.58778554 + -0.18163572 0.809017 -0.55901724 -0.34549165 0.809017 -0.47552842 -0.47552839 0.809017 -0.34549159 + -0.55901712 0.809017 -0.18163566 -0.58778536 0.809017 0 -0.55901712 0.809017 0.18163566 + -0.47552836 0.809017 0.34549156 -0.34549156 0.809017 0.47552833 -0.18163566 0.809017 0.55901706 + -1.7517365e-08 0.809017 0.5877853 0.18163562 0.809017 0.55901706 0.3454915 0.809017 0.4755283 + 0.47552827 0.809017 0.34549153 0.559017 0.809017 0.18163563 0.58778524 0.809017 0 + 0.43177092 0.89100653 -0.14029087 0.36728629 0.89100653 -0.2668491 0.2668491 0.89100653 -0.36728626 + 0.14029086 0.89100653 -0.43177086 0 0.89100653 -0.45399073 -0.14029086 0.89100653 -0.43177083 + -0.26684904 0.89100653 -0.36728618 -0.36728615 0.89100653 -0.26684901 -0.43177077 0.89100653 -0.14029081 + -0.45399064 0.89100653 0 -0.43177077 0.89100653 0.14029081 -0.36728612 0.89100653 0.26684898; + setAttr ".vt[332:381]" -0.26684898 0.89100653 0.36728612 -0.14029081 0.89100653 0.43177071 + -1.3529972e-08 0.89100653 0.45399058 0.14029078 0.89100653 0.43177068 0.26684892 0.89100653 0.36728609 + 0.36728606 0.89100653 0.26684895 0.43177065 0.89100653 0.1402908 0.45399052 0.89100653 0 + 0.29389283 0.95105654 -0.095491566 0.25000018 0.95105654 -0.18163574 0.18163574 0.95105654 -0.25000015 + 0.095491551 0.95105654 -0.2938928 0 0.95105654 -0.30901715 -0.095491551 0.95105654 -0.29389277 + -0.18163571 0.95105654 -0.25000009 -0.25000009 0.95105654 -0.18163569 -0.29389271 0.95105654 -0.095491529 + -0.30901706 0.95105654 0 -0.29389271 0.95105654 0.095491529 -0.25000006 0.95105654 0.18163568 + -0.18163568 0.95105654 0.25000006 -0.095491529 0.95105654 0.29389268 -9.2094243e-09 0.95105654 0.30901703 + 0.095491499 0.95105654 0.29389265 0.18163563 0.95105654 0.25000003 0.25 0.95105654 0.18163565 + 0.29389265 0.95105654 0.095491506 0.309017 0.95105654 0 0.14877813 0.98768836 -0.048340943 + 0.12655823 0.98768836 -0.091949932 0.091949932 0.98768836 -0.12655823 0.048340935 0.98768836 -0.14877811 + 0 0.98768836 -0.15643455 -0.048340935 0.98768836 -0.1487781 -0.091949917 0.98768836 -0.1265582 + -0.12655818 0.98768836 -0.091949902 -0.14877807 0.98768836 -0.048340924 -0.15643452 0.98768836 0 + -0.14877807 0.98768836 0.048340924 -0.12655818 0.98768836 0.091949895 -0.091949895 0.98768836 0.12655817 + -0.048340924 0.98768836 0.14877805 -4.6621107e-09 0.98768836 0.15643449 0.048340909 0.98768836 0.14877804 + 0.09194988 0.98768836 0.12655815 0.12655815 0.98768836 0.091949888 0.14877804 0.98768836 0.048340913 + 0.15643448 0.98768836 0 0 -1 0 0 1 0; + setAttr -s 780 ".ed"; + setAttr ".ed[0:165]" 0 1 1 1 2 1 2 3 1 3 4 1 4 5 1 5 6 1 6 7 1 7 8 1 8 9 1 + 9 10 1 10 11 1 11 12 1 12 13 1 13 14 1 14 15 1 15 16 1 16 17 1 17 18 1 18 19 1 19 0 1 + 20 21 1 21 22 1 22 23 1 23 24 1 24 25 1 25 26 1 26 27 1 27 28 1 28 29 1 29 30 1 30 31 1 + 31 32 1 32 33 1 33 34 1 34 35 1 35 36 1 36 37 1 37 38 1 38 39 1 39 20 1 40 41 1 41 42 1 + 42 43 1 43 44 1 44 45 1 45 46 1 46 47 1 47 48 1 48 49 1 49 50 1 50 51 1 51 52 1 52 53 1 + 53 54 1 54 55 1 55 56 1 56 57 1 57 58 1 58 59 1 59 40 1 60 61 1 61 62 1 62 63 1 63 64 1 + 64 65 1 65 66 1 66 67 1 67 68 1 68 69 1 69 70 1 70 71 1 71 72 1 72 73 1 73 74 1 74 75 1 + 75 76 1 76 77 1 77 78 1 78 79 1 79 60 1 80 81 1 81 82 1 82 83 1 83 84 1 84 85 1 85 86 1 + 86 87 1 87 88 1 88 89 1 89 90 1 90 91 1 91 92 1 92 93 1 93 94 1 94 95 1 95 96 1 96 97 1 + 97 98 1 98 99 1 99 80 1 100 101 1 101 102 1 102 103 1 103 104 1 104 105 1 105 106 1 + 106 107 1 107 108 1 108 109 1 109 110 1 110 111 1 111 112 1 112 113 1 113 114 1 114 115 1 + 115 116 1 116 117 1 117 118 1 118 119 1 119 100 1 120 121 1 121 122 1 122 123 1 123 124 1 + 124 125 1 125 126 1 126 127 1 127 128 1 128 129 1 129 130 1 130 131 1 131 132 1 132 133 1 + 133 134 1 134 135 1 135 136 1 136 137 1 137 138 1 138 139 1 139 120 1 140 141 1 141 142 1 + 142 143 1 143 144 1 144 145 1 145 146 1 146 147 1 147 148 1 148 149 1 149 150 1 150 151 1 + 151 152 1 152 153 1 153 154 1 154 155 1 155 156 1 156 157 1 157 158 1 158 159 1 159 140 1 + 160 161 1 161 162 1 162 163 1 163 164 1 164 165 1 165 166 1; + setAttr ".ed[166:331]" 166 167 1 167 168 1 168 169 1 169 170 1 170 171 1 171 172 1 + 172 173 1 173 174 1 174 175 1 175 176 1 176 177 1 177 178 1 178 179 1 179 160 1 180 181 1 + 181 182 1 182 183 1 183 184 1 184 185 1 185 186 1 186 187 1 187 188 1 188 189 1 189 190 1 + 190 191 1 191 192 1 192 193 1 193 194 1 194 195 1 195 196 1 196 197 1 197 198 1 198 199 1 + 199 180 1 200 201 1 201 202 1 202 203 1 203 204 1 204 205 1 205 206 1 206 207 1 207 208 1 + 208 209 1 209 210 1 210 211 1 211 212 1 212 213 1 213 214 1 214 215 1 215 216 1 216 217 1 + 217 218 1 218 219 1 219 200 1 220 221 1 221 222 1 222 223 1 223 224 1 224 225 1 225 226 1 + 226 227 1 227 228 1 228 229 1 229 230 1 230 231 1 231 232 1 232 233 1 233 234 1 234 235 1 + 235 236 1 236 237 1 237 238 1 238 239 1 239 220 1 240 241 1 241 242 1 242 243 1 243 244 1 + 244 245 1 245 246 1 246 247 1 247 248 1 248 249 1 249 250 1 250 251 1 251 252 1 252 253 1 + 253 254 1 254 255 1 255 256 1 256 257 1 257 258 1 258 259 1 259 240 1 260 261 1 261 262 1 + 262 263 1 263 264 1 264 265 1 265 266 1 266 267 1 267 268 1 268 269 1 269 270 1 270 271 1 + 271 272 1 272 273 1 273 274 1 274 275 1 275 276 1 276 277 1 277 278 1 278 279 1 279 260 1 + 280 281 1 281 282 1 282 283 1 283 284 1 284 285 1 285 286 1 286 287 1 287 288 1 288 289 1 + 289 290 1 290 291 1 291 292 1 292 293 1 293 294 1 294 295 1 295 296 1 296 297 1 297 298 1 + 298 299 1 299 280 1 300 301 1 301 302 1 302 303 1 303 304 1 304 305 1 305 306 1 306 307 1 + 307 308 1 308 309 1 309 310 1 310 311 1 311 312 1 312 313 1 313 314 1 314 315 1 315 316 1 + 316 317 1 317 318 1 318 319 1 319 300 1 320 321 1 321 322 1 322 323 1 323 324 1 324 325 1 + 325 326 1 326 327 1 327 328 1 328 329 1 329 330 1 330 331 1 331 332 1; + setAttr ".ed[332:497]" 332 333 1 333 334 1 334 335 1 335 336 1 336 337 1 337 338 1 + 338 339 1 339 320 1 340 341 1 341 342 1 342 343 1 343 344 1 344 345 1 345 346 1 346 347 1 + 347 348 1 348 349 1 349 350 1 350 351 1 351 352 1 352 353 1 353 354 1 354 355 1 355 356 1 + 356 357 1 357 358 1 358 359 1 359 340 1 360 361 1 361 362 1 362 363 1 363 364 1 364 365 1 + 365 366 1 366 367 1 367 368 1 368 369 1 369 370 1 370 371 1 371 372 1 372 373 1 373 374 1 + 374 375 1 375 376 1 376 377 1 377 378 1 378 379 1 379 360 1 0 20 1 1 21 1 2 22 1 + 3 23 1 4 24 1 5 25 1 6 26 1 7 27 1 8 28 1 9 29 1 10 30 1 11 31 1 12 32 1 13 33 1 + 14 34 1 15 35 1 16 36 1 17 37 1 18 38 1 19 39 1 20 40 1 21 41 1 22 42 1 23 43 1 24 44 1 + 25 45 1 26 46 1 27 47 1 28 48 1 29 49 1 30 50 1 31 51 1 32 52 1 33 53 1 34 54 1 35 55 1 + 36 56 1 37 57 1 38 58 1 39 59 1 40 60 1 41 61 1 42 62 1 43 63 1 44 64 1 45 65 1 46 66 1 + 47 67 1 48 68 1 49 69 1 50 70 1 51 71 1 52 72 1 53 73 1 54 74 1 55 75 1 56 76 1 57 77 1 + 58 78 1 59 79 1 60 80 1 61 81 1 62 82 1 63 83 1 64 84 1 65 85 1 66 86 1 67 87 1 68 88 1 + 69 89 1 70 90 1 71 91 1 72 92 1 73 93 1 74 94 1 75 95 1 76 96 1 77 97 1 78 98 1 79 99 1 + 80 100 1 81 101 1 82 102 1 83 103 1 84 104 1 85 105 1 86 106 1 87 107 1 88 108 1 + 89 109 1 90 110 1 91 111 1 92 112 1 93 113 1 94 114 1 95 115 1 96 116 1 97 117 1 + 98 118 1 99 119 1 100 120 1 101 121 1 102 122 1 103 123 1 104 124 1 105 125 1 106 126 1 + 107 127 1 108 128 1 109 129 1 110 130 1 111 131 1 112 132 1 113 133 1 114 134 1 115 135 1 + 116 136 1 117 137 1; + setAttr ".ed[498:663]" 118 138 1 119 139 1 120 140 1 121 141 1 122 142 1 123 143 1 + 124 144 1 125 145 1 126 146 1 127 147 1 128 148 1 129 149 1 130 150 1 131 151 1 132 152 1 + 133 153 1 134 154 1 135 155 1 136 156 1 137 157 1 138 158 1 139 159 1 140 160 1 141 161 1 + 142 162 1 143 163 1 144 164 1 145 165 1 146 166 1 147 167 1 148 168 1 149 169 1 150 170 1 + 151 171 1 152 172 1 153 173 1 154 174 1 155 175 1 156 176 1 157 177 1 158 178 1 159 179 1 + 160 180 1 161 181 1 162 182 1 163 183 1 164 184 1 165 185 1 166 186 1 167 187 1 168 188 1 + 169 189 1 170 190 1 171 191 1 172 192 1 173 193 1 174 194 1 175 195 1 176 196 1 177 197 1 + 178 198 1 179 199 1 180 200 1 181 201 1 182 202 1 183 203 1 184 204 1 185 205 1 186 206 1 + 187 207 1 188 208 1 189 209 1 190 210 1 191 211 1 192 212 1 193 213 1 194 214 1 195 215 1 + 196 216 1 197 217 1 198 218 1 199 219 1 200 220 1 201 221 1 202 222 1 203 223 1 204 224 1 + 205 225 1 206 226 1 207 227 1 208 228 1 209 229 1 210 230 1 211 231 1 212 232 1 213 233 1 + 214 234 1 215 235 1 216 236 1 217 237 1 218 238 1 219 239 1 220 240 1 221 241 1 222 242 1 + 223 243 1 224 244 1 225 245 1 226 246 1 227 247 1 228 248 1 229 249 1 230 250 1 231 251 1 + 232 252 1 233 253 1 234 254 1 235 255 1 236 256 1 237 257 1 238 258 1 239 259 1 240 260 1 + 241 261 1 242 262 1 243 263 1 244 264 1 245 265 1 246 266 1 247 267 1 248 268 1 249 269 1 + 250 270 1 251 271 1 252 272 1 253 273 1 254 274 1 255 275 1 256 276 1 257 277 1 258 278 1 + 259 279 1 260 280 1 261 281 1 262 282 1 263 283 1 264 284 1 265 285 1 266 286 1 267 287 1 + 268 288 1 269 289 1 270 290 1 271 291 1 272 292 1 273 293 1 274 294 1 275 295 1 276 296 1 + 277 297 1 278 298 1 279 299 1 280 300 1 281 301 1 282 302 1 283 303 1; + setAttr ".ed[664:779]" 284 304 1 285 305 1 286 306 1 287 307 1 288 308 1 289 309 1 + 290 310 1 291 311 1 292 312 1 293 313 1 294 314 1 295 315 1 296 316 1 297 317 1 298 318 1 + 299 319 1 300 320 1 301 321 1 302 322 1 303 323 1 304 324 1 305 325 1 306 326 1 307 327 1 + 308 328 1 309 329 1 310 330 1 311 331 1 312 332 1 313 333 1 314 334 1 315 335 1 316 336 1 + 317 337 1 318 338 1 319 339 1 320 340 1 321 341 1 322 342 1 323 343 1 324 344 1 325 345 1 + 326 346 1 327 347 1 328 348 1 329 349 1 330 350 1 331 351 1 332 352 1 333 353 1 334 354 1 + 335 355 1 336 356 1 337 357 1 338 358 1 339 359 1 340 360 1 341 361 1 342 362 1 343 363 1 + 344 364 1 345 365 1 346 366 1 347 367 1 348 368 1 349 369 1 350 370 1 351 371 1 352 372 1 + 353 373 1 354 374 1 355 375 1 356 376 1 357 377 1 358 378 1 359 379 1 380 0 1 380 1 1 + 380 2 1 380 3 1 380 4 1 380 5 1 380 6 1 380 7 1 380 8 1 380 9 1 380 10 1 380 11 1 + 380 12 1 380 13 1 380 14 1 380 15 1 380 16 1 380 17 1 380 18 1 380 19 1 360 381 1 + 361 381 1 362 381 1 363 381 1 364 381 1 365 381 1 366 381 1 367 381 1 368 381 1 369 381 1 + 370 381 1 371 381 1 372 381 1 373 381 1 374 381 1 375 381 1 376 381 1 377 381 1 378 381 1 + 379 381 1; + setAttr -s 400 -ch 1560 ".fc[0:399]" -type "polyFaces" + f 4 0 381 -21 -381 + mu 0 4 0 1 22 21 + f 4 1 382 -22 -382 + mu 0 4 1 2 23 22 + f 4 2 383 -23 -383 + mu 0 4 2 3 24 23 + f 4 3 384 -24 -384 + mu 0 4 3 4 25 24 + f 4 4 385 -25 -385 + mu 0 4 4 5 26 25 + f 4 5 386 -26 -386 + mu 0 4 5 6 27 26 + f 4 6 387 -27 -387 + mu 0 4 6 7 28 27 + f 4 7 388 -28 -388 + mu 0 4 7 8 29 28 + f 4 8 389 -29 -389 + mu 0 4 8 9 30 29 + f 4 9 390 -30 -390 + mu 0 4 9 10 31 30 + f 4 10 391 -31 -391 + mu 0 4 10 11 32 31 + f 4 11 392 -32 -392 + mu 0 4 11 12 33 32 + f 4 12 393 -33 -393 + mu 0 4 12 13 34 33 + f 4 13 394 -34 -394 + mu 0 4 13 14 35 34 + f 4 14 395 -35 -395 + mu 0 4 14 15 36 35 + f 4 15 396 -36 -396 + mu 0 4 15 16 37 36 + f 4 16 397 -37 -397 + mu 0 4 16 17 38 37 + f 4 17 398 -38 -398 + mu 0 4 17 18 39 38 + f 4 18 399 -39 -399 + mu 0 4 18 19 40 39 + f 4 19 380 -40 -400 + mu 0 4 19 20 41 40 + f 4 20 401 -41 -401 + mu 0 4 21 22 43 42 + f 4 21 402 -42 -402 + mu 0 4 22 23 44 43 + f 4 22 403 -43 -403 + mu 0 4 23 24 45 44 + f 4 23 404 -44 -404 + mu 0 4 24 25 46 45 + f 4 24 405 -45 -405 + mu 0 4 25 26 47 46 + f 4 25 406 -46 -406 + mu 0 4 26 27 48 47 + f 4 26 407 -47 -407 + mu 0 4 27 28 49 48 + f 4 27 408 -48 -408 + mu 0 4 28 29 50 49 + f 4 28 409 -49 -409 + mu 0 4 29 30 51 50 + f 4 29 410 -50 -410 + mu 0 4 30 31 52 51 + f 4 30 411 -51 -411 + mu 0 4 31 32 53 52 + f 4 31 412 -52 -412 + mu 0 4 32 33 54 53 + f 4 32 413 -53 -413 + mu 0 4 33 34 55 54 + f 4 33 414 -54 -414 + mu 0 4 34 35 56 55 + f 4 34 415 -55 -415 + mu 0 4 35 36 57 56 + f 4 35 416 -56 -416 + mu 0 4 36 37 58 57 + f 4 36 417 -57 -417 + mu 0 4 37 38 59 58 + f 4 37 418 -58 -418 + mu 0 4 38 39 60 59 + f 4 38 419 -59 -419 + mu 0 4 39 40 61 60 + f 4 39 400 -60 -420 + mu 0 4 40 41 62 61 + f 4 40 421 -61 -421 + mu 0 4 42 43 64 63 + f 4 41 422 -62 -422 + mu 0 4 43 44 65 64 + f 4 42 423 -63 -423 + mu 0 4 44 45 66 65 + f 4 43 424 -64 -424 + mu 0 4 45 46 67 66 + f 4 44 425 -65 -425 + mu 0 4 46 47 68 67 + f 4 45 426 -66 -426 + mu 0 4 47 48 69 68 + f 4 46 427 -67 -427 + mu 0 4 48 49 70 69 + f 4 47 428 -68 -428 + mu 0 4 49 50 71 70 + f 4 48 429 -69 -429 + mu 0 4 50 51 72 71 + f 4 49 430 -70 -430 + mu 0 4 51 52 73 72 + f 4 50 431 -71 -431 + mu 0 4 52 53 74 73 + f 4 51 432 -72 -432 + mu 0 4 53 54 75 74 + f 4 52 433 -73 -433 + mu 0 4 54 55 76 75 + f 4 53 434 -74 -434 + mu 0 4 55 56 77 76 + f 4 54 435 -75 -435 + mu 0 4 56 57 78 77 + f 4 55 436 -76 -436 + mu 0 4 57 58 79 78 + f 4 56 437 -77 -437 + mu 0 4 58 59 80 79 + f 4 57 438 -78 -438 + mu 0 4 59 60 81 80 + f 4 58 439 -79 -439 + mu 0 4 60 61 82 81 + f 4 59 420 -80 -440 + mu 0 4 61 62 83 82 + f 4 60 441 -81 -441 + mu 0 4 63 64 85 84 + f 4 61 442 -82 -442 + mu 0 4 64 65 86 85 + f 4 62 443 -83 -443 + mu 0 4 65 66 87 86 + f 4 63 444 -84 -444 + mu 0 4 66 67 88 87 + f 4 64 445 -85 -445 + mu 0 4 67 68 89 88 + f 4 65 446 -86 -446 + mu 0 4 68 69 90 89 + f 4 66 447 -87 -447 + mu 0 4 69 70 91 90 + f 4 67 448 -88 -448 + mu 0 4 70 71 92 91 + f 4 68 449 -89 -449 + mu 0 4 71 72 93 92 + f 4 69 450 -90 -450 + mu 0 4 72 73 94 93 + f 4 70 451 -91 -451 + mu 0 4 73 74 95 94 + f 4 71 452 -92 -452 + mu 0 4 74 75 96 95 + f 4 72 453 -93 -453 + mu 0 4 75 76 97 96 + f 4 73 454 -94 -454 + mu 0 4 76 77 98 97 + f 4 74 455 -95 -455 + mu 0 4 77 78 99 98 + f 4 75 456 -96 -456 + mu 0 4 78 79 100 99 + f 4 76 457 -97 -457 + mu 0 4 79 80 101 100 + f 4 77 458 -98 -458 + mu 0 4 80 81 102 101 + f 4 78 459 -99 -459 + mu 0 4 81 82 103 102 + f 4 79 440 -100 -460 + mu 0 4 82 83 104 103 + f 4 80 461 -101 -461 + mu 0 4 84 85 106 105 + f 4 81 462 -102 -462 + mu 0 4 85 86 107 106 + f 4 82 463 -103 -463 + mu 0 4 86 87 108 107 + f 4 83 464 -104 -464 + mu 0 4 87 88 109 108 + f 4 84 465 -105 -465 + mu 0 4 88 89 110 109 + f 4 85 466 -106 -466 + mu 0 4 89 90 111 110 + f 4 86 467 -107 -467 + mu 0 4 90 91 112 111 + f 4 87 468 -108 -468 + mu 0 4 91 92 113 112 + f 4 88 469 -109 -469 + mu 0 4 92 93 114 113 + f 4 89 470 -110 -470 + mu 0 4 93 94 115 114 + f 4 90 471 -111 -471 + mu 0 4 94 95 116 115 + f 4 91 472 -112 -472 + mu 0 4 95 96 117 116 + f 4 92 473 -113 -473 + mu 0 4 96 97 118 117 + f 4 93 474 -114 -474 + mu 0 4 97 98 119 118 + f 4 94 475 -115 -475 + mu 0 4 98 99 120 119 + f 4 95 476 -116 -476 + mu 0 4 99 100 121 120 + f 4 96 477 -117 -477 + mu 0 4 100 101 122 121 + f 4 97 478 -118 -478 + mu 0 4 101 102 123 122 + f 4 98 479 -119 -479 + mu 0 4 102 103 124 123 + f 4 99 460 -120 -480 + mu 0 4 103 104 125 124 + f 4 100 481 -121 -481 + mu 0 4 105 106 127 126 + f 4 101 482 -122 -482 + mu 0 4 106 107 128 127 + f 4 102 483 -123 -483 + mu 0 4 107 108 129 128 + f 4 103 484 -124 -484 + mu 0 4 108 109 130 129 + f 4 104 485 -125 -485 + mu 0 4 109 110 131 130 + f 4 105 486 -126 -486 + mu 0 4 110 111 132 131 + f 4 106 487 -127 -487 + mu 0 4 111 112 133 132 + f 4 107 488 -128 -488 + mu 0 4 112 113 134 133 + f 4 108 489 -129 -489 + mu 0 4 113 114 135 134 + f 4 109 490 -130 -490 + mu 0 4 114 115 136 135 + f 4 110 491 -131 -491 + mu 0 4 115 116 137 136 + f 4 111 492 -132 -492 + mu 0 4 116 117 138 137 + f 4 112 493 -133 -493 + mu 0 4 117 118 139 138 + f 4 113 494 -134 -494 + mu 0 4 118 119 140 139 + f 4 114 495 -135 -495 + mu 0 4 119 120 141 140 + f 4 115 496 -136 -496 + mu 0 4 120 121 142 141 + f 4 116 497 -137 -497 + mu 0 4 121 122 143 142 + f 4 117 498 -138 -498 + mu 0 4 122 123 144 143 + f 4 118 499 -139 -499 + mu 0 4 123 124 145 144 + f 4 119 480 -140 -500 + mu 0 4 124 125 146 145 + f 4 120 501 -141 -501 + mu 0 4 126 127 148 147 + f 4 121 502 -142 -502 + mu 0 4 127 128 149 148 + f 4 122 503 -143 -503 + mu 0 4 128 129 150 149 + f 4 123 504 -144 -504 + mu 0 4 129 130 151 150 + f 4 124 505 -145 -505 + mu 0 4 130 131 152 151 + f 4 125 506 -146 -506 + mu 0 4 131 132 153 152 + f 4 126 507 -147 -507 + mu 0 4 132 133 154 153 + f 4 127 508 -148 -508 + mu 0 4 133 134 155 154 + f 4 128 509 -149 -509 + mu 0 4 134 135 156 155 + f 4 129 510 -150 -510 + mu 0 4 135 136 157 156 + f 4 130 511 -151 -511 + mu 0 4 136 137 158 157 + f 4 131 512 -152 -512 + mu 0 4 137 138 159 158 + f 4 132 513 -153 -513 + mu 0 4 138 139 160 159 + f 4 133 514 -154 -514 + mu 0 4 139 140 161 160 + f 4 134 515 -155 -515 + mu 0 4 140 141 162 161 + f 4 135 516 -156 -516 + mu 0 4 141 142 163 162 + f 4 136 517 -157 -517 + mu 0 4 142 143 164 163 + f 4 137 518 -158 -518 + mu 0 4 143 144 165 164 + f 4 138 519 -159 -519 + mu 0 4 144 145 166 165 + f 4 139 500 -160 -520 + mu 0 4 145 146 167 166 + f 4 140 521 -161 -521 + mu 0 4 147 148 169 168 + f 4 141 522 -162 -522 + mu 0 4 148 149 170 169 + f 4 142 523 -163 -523 + mu 0 4 149 150 171 170 + f 4 143 524 -164 -524 + mu 0 4 150 151 172 171 + f 4 144 525 -165 -525 + mu 0 4 151 152 173 172 + f 4 145 526 -166 -526 + mu 0 4 152 153 174 173 + f 4 146 527 -167 -527 + mu 0 4 153 154 175 174 + f 4 147 528 -168 -528 + mu 0 4 154 155 176 175 + f 4 148 529 -169 -529 + mu 0 4 155 156 177 176 + f 4 149 530 -170 -530 + mu 0 4 156 157 178 177 + f 4 150 531 -171 -531 + mu 0 4 157 158 179 178 + f 4 151 532 -172 -532 + mu 0 4 158 159 180 179 + f 4 152 533 -173 -533 + mu 0 4 159 160 181 180 + f 4 153 534 -174 -534 + mu 0 4 160 161 182 181 + f 4 154 535 -175 -535 + mu 0 4 161 162 183 182 + f 4 155 536 -176 -536 + mu 0 4 162 163 184 183 + f 4 156 537 -177 -537 + mu 0 4 163 164 185 184 + f 4 157 538 -178 -538 + mu 0 4 164 165 186 185 + f 4 158 539 -179 -539 + mu 0 4 165 166 187 186 + f 4 159 520 -180 -540 + mu 0 4 166 167 188 187 + f 4 160 541 -181 -541 + mu 0 4 168 169 190 189 + f 4 161 542 -182 -542 + mu 0 4 169 170 191 190 + f 4 162 543 -183 -543 + mu 0 4 170 171 192 191 + f 4 163 544 -184 -544 + mu 0 4 171 172 193 192 + f 4 164 545 -185 -545 + mu 0 4 172 173 194 193 + f 4 165 546 -186 -546 + mu 0 4 173 174 195 194 + f 4 166 547 -187 -547 + mu 0 4 174 175 196 195 + f 4 167 548 -188 -548 + mu 0 4 175 176 197 196 + f 4 168 549 -189 -549 + mu 0 4 176 177 198 197 + f 4 169 550 -190 -550 + mu 0 4 177 178 199 198 + f 4 170 551 -191 -551 + mu 0 4 178 179 200 199 + f 4 171 552 -192 -552 + mu 0 4 179 180 201 200 + f 4 172 553 -193 -553 + mu 0 4 180 181 202 201 + f 4 173 554 -194 -554 + mu 0 4 181 182 203 202 + f 4 174 555 -195 -555 + mu 0 4 182 183 204 203 + f 4 175 556 -196 -556 + mu 0 4 183 184 205 204 + f 4 176 557 -197 -557 + mu 0 4 184 185 206 205 + f 4 177 558 -198 -558 + mu 0 4 185 186 207 206 + f 4 178 559 -199 -559 + mu 0 4 186 187 208 207 + f 4 179 540 -200 -560 + mu 0 4 187 188 209 208 + f 4 180 561 -201 -561 + mu 0 4 189 190 211 210 + f 4 181 562 -202 -562 + mu 0 4 190 191 212 211 + f 4 182 563 -203 -563 + mu 0 4 191 192 213 212 + f 4 183 564 -204 -564 + mu 0 4 192 193 214 213 + f 4 184 565 -205 -565 + mu 0 4 193 194 215 214 + f 4 185 566 -206 -566 + mu 0 4 194 195 216 215 + f 4 186 567 -207 -567 + mu 0 4 195 196 217 216 + f 4 187 568 -208 -568 + mu 0 4 196 197 218 217 + f 4 188 569 -209 -569 + mu 0 4 197 198 219 218 + f 4 189 570 -210 -570 + mu 0 4 198 199 220 219 + f 4 190 571 -211 -571 + mu 0 4 199 200 221 220 + f 4 191 572 -212 -572 + mu 0 4 200 201 222 221 + f 4 192 573 -213 -573 + mu 0 4 201 202 223 222 + f 4 193 574 -214 -574 + mu 0 4 202 203 224 223 + f 4 194 575 -215 -575 + mu 0 4 203 204 225 224 + f 4 195 576 -216 -576 + mu 0 4 204 205 226 225 + f 4 196 577 -217 -577 + mu 0 4 205 206 227 226 + f 4 197 578 -218 -578 + mu 0 4 206 207 228 227 + f 4 198 579 -219 -579 + mu 0 4 207 208 229 228 + f 4 199 560 -220 -580 + mu 0 4 208 209 230 229 + f 4 200 581 -221 -581 + mu 0 4 210 211 232 231 + f 4 201 582 -222 -582 + mu 0 4 211 212 233 232 + f 4 202 583 -223 -583 + mu 0 4 212 213 234 233 + f 4 203 584 -224 -584 + mu 0 4 213 214 235 234 + f 4 204 585 -225 -585 + mu 0 4 214 215 236 235 + f 4 205 586 -226 -586 + mu 0 4 215 216 237 236 + f 4 206 587 -227 -587 + mu 0 4 216 217 238 237 + f 4 207 588 -228 -588 + mu 0 4 217 218 239 238 + f 4 208 589 -229 -589 + mu 0 4 218 219 240 239 + f 4 209 590 -230 -590 + mu 0 4 219 220 241 240 + f 4 210 591 -231 -591 + mu 0 4 220 221 242 241 + f 4 211 592 -232 -592 + mu 0 4 221 222 243 242 + f 4 212 593 -233 -593 + mu 0 4 222 223 244 243 + f 4 213 594 -234 -594 + mu 0 4 223 224 245 244 + f 4 214 595 -235 -595 + mu 0 4 224 225 246 245 + f 4 215 596 -236 -596 + mu 0 4 225 226 247 246 + f 4 216 597 -237 -597 + mu 0 4 226 227 248 247 + f 4 217 598 -238 -598 + mu 0 4 227 228 249 248 + f 4 218 599 -239 -599 + mu 0 4 228 229 250 249 + f 4 219 580 -240 -600 + mu 0 4 229 230 251 250 + f 4 220 601 -241 -601 + mu 0 4 231 232 253 252 + f 4 221 602 -242 -602 + mu 0 4 232 233 254 253 + f 4 222 603 -243 -603 + mu 0 4 233 234 255 254 + f 4 223 604 -244 -604 + mu 0 4 234 235 256 255 + f 4 224 605 -245 -605 + mu 0 4 235 236 257 256 + f 4 225 606 -246 -606 + mu 0 4 236 237 258 257 + f 4 226 607 -247 -607 + mu 0 4 237 238 259 258 + f 4 227 608 -248 -608 + mu 0 4 238 239 260 259 + f 4 228 609 -249 -609 + mu 0 4 239 240 261 260 + f 4 229 610 -250 -610 + mu 0 4 240 241 262 261 + f 4 230 611 -251 -611 + mu 0 4 241 242 263 262 + f 4 231 612 -252 -612 + mu 0 4 242 243 264 263 + f 4 232 613 -253 -613 + mu 0 4 243 244 265 264 + f 4 233 614 -254 -614 + mu 0 4 244 245 266 265 + f 4 234 615 -255 -615 + mu 0 4 245 246 267 266 + f 4 235 616 -256 -616 + mu 0 4 246 247 268 267 + f 4 236 617 -257 -617 + mu 0 4 247 248 269 268 + f 4 237 618 -258 -618 + mu 0 4 248 249 270 269 + f 4 238 619 -259 -619 + mu 0 4 249 250 271 270 + f 4 239 600 -260 -620 + mu 0 4 250 251 272 271 + f 4 240 621 -261 -621 + mu 0 4 252 253 274 273 + f 4 241 622 -262 -622 + mu 0 4 253 254 275 274 + f 4 242 623 -263 -623 + mu 0 4 254 255 276 275 + f 4 243 624 -264 -624 + mu 0 4 255 256 277 276 + f 4 244 625 -265 -625 + mu 0 4 256 257 278 277 + f 4 245 626 -266 -626 + mu 0 4 257 258 279 278 + f 4 246 627 -267 -627 + mu 0 4 258 259 280 279 + f 4 247 628 -268 -628 + mu 0 4 259 260 281 280 + f 4 248 629 -269 -629 + mu 0 4 260 261 282 281 + f 4 249 630 -270 -630 + mu 0 4 261 262 283 282 + f 4 250 631 -271 -631 + mu 0 4 262 263 284 283 + f 4 251 632 -272 -632 + mu 0 4 263 264 285 284 + f 4 252 633 -273 -633 + mu 0 4 264 265 286 285 + f 4 253 634 -274 -634 + mu 0 4 265 266 287 286 + f 4 254 635 -275 -635 + mu 0 4 266 267 288 287 + f 4 255 636 -276 -636 + mu 0 4 267 268 289 288 + f 4 256 637 -277 -637 + mu 0 4 268 269 290 289 + f 4 257 638 -278 -638 + mu 0 4 269 270 291 290 + f 4 258 639 -279 -639 + mu 0 4 270 271 292 291 + f 4 259 620 -280 -640 + mu 0 4 271 272 293 292 + f 4 260 641 -281 -641 + mu 0 4 273 274 295 294 + f 4 261 642 -282 -642 + mu 0 4 274 275 296 295 + f 4 262 643 -283 -643 + mu 0 4 275 276 297 296 + f 4 263 644 -284 -644 + mu 0 4 276 277 298 297 + f 4 264 645 -285 -645 + mu 0 4 277 278 299 298 + f 4 265 646 -286 -646 + mu 0 4 278 279 300 299 + f 4 266 647 -287 -647 + mu 0 4 279 280 301 300 + f 4 267 648 -288 -648 + mu 0 4 280 281 302 301 + f 4 268 649 -289 -649 + mu 0 4 281 282 303 302 + f 4 269 650 -290 -650 + mu 0 4 282 283 304 303 + f 4 270 651 -291 -651 + mu 0 4 283 284 305 304 + f 4 271 652 -292 -652 + mu 0 4 284 285 306 305 + f 4 272 653 -293 -653 + mu 0 4 285 286 307 306 + f 4 273 654 -294 -654 + mu 0 4 286 287 308 307 + f 4 274 655 -295 -655 + mu 0 4 287 288 309 308 + f 4 275 656 -296 -656 + mu 0 4 288 289 310 309 + f 4 276 657 -297 -657 + mu 0 4 289 290 311 310 + f 4 277 658 -298 -658 + mu 0 4 290 291 312 311 + f 4 278 659 -299 -659 + mu 0 4 291 292 313 312 + f 4 279 640 -300 -660 + mu 0 4 292 293 314 313 + f 4 280 661 -301 -661 + mu 0 4 294 295 316 315 + f 4 281 662 -302 -662 + mu 0 4 295 296 317 316 + f 4 282 663 -303 -663 + mu 0 4 296 297 318 317 + f 4 283 664 -304 -664 + mu 0 4 297 298 319 318 + f 4 284 665 -305 -665 + mu 0 4 298 299 320 319 + f 4 285 666 -306 -666 + mu 0 4 299 300 321 320 + f 4 286 667 -307 -667 + mu 0 4 300 301 322 321 + f 4 287 668 -308 -668 + mu 0 4 301 302 323 322 + f 4 288 669 -309 -669 + mu 0 4 302 303 324 323 + f 4 289 670 -310 -670 + mu 0 4 303 304 325 324 + f 4 290 671 -311 -671 + mu 0 4 304 305 326 325 + f 4 291 672 -312 -672 + mu 0 4 305 306 327 326 + f 4 292 673 -313 -673 + mu 0 4 306 307 328 327 + f 4 293 674 -314 -674 + mu 0 4 307 308 329 328 + f 4 294 675 -315 -675 + mu 0 4 308 309 330 329 + f 4 295 676 -316 -676 + mu 0 4 309 310 331 330 + f 4 296 677 -317 -677 + mu 0 4 310 311 332 331 + f 4 297 678 -318 -678 + mu 0 4 311 312 333 332 + f 4 298 679 -319 -679 + mu 0 4 312 313 334 333 + f 4 299 660 -320 -680 + mu 0 4 313 314 335 334 + f 4 300 681 -321 -681 + mu 0 4 315 316 337 336 + f 4 301 682 -322 -682 + mu 0 4 316 317 338 337 + f 4 302 683 -323 -683 + mu 0 4 317 318 339 338 + f 4 303 684 -324 -684 + mu 0 4 318 319 340 339 + f 4 304 685 -325 -685 + mu 0 4 319 320 341 340 + f 4 305 686 -326 -686 + mu 0 4 320 321 342 341 + f 4 306 687 -327 -687 + mu 0 4 321 322 343 342 + f 4 307 688 -328 -688 + mu 0 4 322 323 344 343 + f 4 308 689 -329 -689 + mu 0 4 323 324 345 344 + f 4 309 690 -330 -690 + mu 0 4 324 325 346 345 + f 4 310 691 -331 -691 + mu 0 4 325 326 347 346 + f 4 311 692 -332 -692 + mu 0 4 326 327 348 347 + f 4 312 693 -333 -693 + mu 0 4 327 328 349 348 + f 4 313 694 -334 -694 + mu 0 4 328 329 350 349 + f 4 314 695 -335 -695 + mu 0 4 329 330 351 350 + f 4 315 696 -336 -696 + mu 0 4 330 331 352 351 + f 4 316 697 -337 -697 + mu 0 4 331 332 353 352 + f 4 317 698 -338 -698 + mu 0 4 332 333 354 353 + f 4 318 699 -339 -699 + mu 0 4 333 334 355 354 + f 4 319 680 -340 -700 + mu 0 4 334 335 356 355 + f 4 320 701 -341 -701 + mu 0 4 336 337 358 357 + f 4 321 702 -342 -702 + mu 0 4 337 338 359 358 + f 4 322 703 -343 -703 + mu 0 4 338 339 360 359 + f 4 323 704 -344 -704 + mu 0 4 339 340 361 360 + f 4 324 705 -345 -705 + mu 0 4 340 341 362 361 + f 4 325 706 -346 -706 + mu 0 4 341 342 363 362 + f 4 326 707 -347 -707 + mu 0 4 342 343 364 363 + f 4 327 708 -348 -708 + mu 0 4 343 344 365 364 + f 4 328 709 -349 -709 + mu 0 4 344 345 366 365 + f 4 329 710 -350 -710 + mu 0 4 345 346 367 366 + f 4 330 711 -351 -711 + mu 0 4 346 347 368 367 + f 4 331 712 -352 -712 + mu 0 4 347 348 369 368 + f 4 332 713 -353 -713 + mu 0 4 348 349 370 369 + f 4 333 714 -354 -714 + mu 0 4 349 350 371 370 + f 4 334 715 -355 -715 + mu 0 4 350 351 372 371 + f 4 335 716 -356 -716 + mu 0 4 351 352 373 372 + f 4 336 717 -357 -717 + mu 0 4 352 353 374 373 + f 4 337 718 -358 -718 + mu 0 4 353 354 375 374 + f 4 338 719 -359 -719 + mu 0 4 354 355 376 375 + f 4 339 700 -360 -720 + mu 0 4 355 356 377 376 + f 4 340 721 -361 -721 + mu 0 4 357 358 379 378 + f 4 341 722 -362 -722 + mu 0 4 358 359 380 379 + f 4 342 723 -363 -723 + mu 0 4 359 360 381 380 + f 4 343 724 -364 -724 + mu 0 4 360 361 382 381 + f 4 344 725 -365 -725 + mu 0 4 361 362 383 382 + f 4 345 726 -366 -726 + mu 0 4 362 363 384 383 + f 4 346 727 -367 -727 + mu 0 4 363 364 385 384 + f 4 347 728 -368 -728 + mu 0 4 364 365 386 385 + f 4 348 729 -369 -729 + mu 0 4 365 366 387 386 + f 4 349 730 -370 -730 + mu 0 4 366 367 388 387 + f 4 350 731 -371 -731 + mu 0 4 367 368 389 388 + f 4 351 732 -372 -732 + mu 0 4 368 369 390 389 + f 4 352 733 -373 -733 + mu 0 4 369 370 391 390 + f 4 353 734 -374 -734 + mu 0 4 370 371 392 391 + f 4 354 735 -375 -735 + mu 0 4 371 372 393 392 + f 4 355 736 -376 -736 + mu 0 4 372 373 394 393 + f 4 356 737 -377 -737 + mu 0 4 373 374 395 394 + f 4 357 738 -378 -738 + mu 0 4 374 375 396 395 + f 4 358 739 -379 -739 + mu 0 4 375 376 397 396 + f 4 359 720 -380 -740 + mu 0 4 376 377 398 397 + f 3 -1 -741 741 + mu 0 3 1 0 399 + f 3 -2 -742 742 + mu 0 3 2 1 400 + f 3 -3 -743 743 + mu 0 3 3 2 401 + f 3 -4 -744 744 + mu 0 3 4 3 402 + f 3 -5 -745 745 + mu 0 3 5 4 403 + f 3 -6 -746 746 + mu 0 3 6 5 404 + f 3 -7 -747 747 + mu 0 3 7 6 405 + f 3 -8 -748 748 + mu 0 3 8 7 406 + f 3 -9 -749 749 + mu 0 3 9 8 407 + f 3 -10 -750 750 + mu 0 3 10 9 408 + f 3 -11 -751 751 + mu 0 3 11 10 409 + f 3 -12 -752 752 + mu 0 3 12 11 410 + f 3 -13 -753 753 + mu 0 3 13 12 411 + f 3 -14 -754 754 + mu 0 3 14 13 412 + f 3 -15 -755 755 + mu 0 3 15 14 413 + f 3 -16 -756 756 + mu 0 3 16 15 414 + f 3 -17 -757 757 + mu 0 3 17 16 415 + f 3 -18 -758 758 + mu 0 3 18 17 416 + f 3 -19 -759 759 + mu 0 3 19 18 417 + f 3 -20 -760 740 + mu 0 3 20 19 418 + f 3 360 761 -761 + mu 0 3 378 379 419 + f 3 361 762 -762 + mu 0 3 379 380 420 + f 3 362 763 -763 + mu 0 3 380 381 421 + f 3 363 764 -764 + mu 0 3 381 382 422 + f 3 364 765 -765 + mu 0 3 382 383 423 + f 3 365 766 -766 + mu 0 3 383 384 424 + f 3 366 767 -767 + mu 0 3 384 385 425 + f 3 367 768 -768 + mu 0 3 385 386 426 + f 3 368 769 -769 + mu 0 3 386 387 427 + f 3 369 770 -770 + mu 0 3 387 388 428 + f 3 370 771 -771 + mu 0 3 388 389 429 + f 3 371 772 -772 + mu 0 3 389 390 430 + f 3 372 773 -773 + mu 0 3 390 391 431 + f 3 373 774 -774 + mu 0 3 391 392 432 + f 3 374 775 -775 + mu 0 3 392 393 433 + f 3 375 776 -776 + mu 0 3 393 394 434 + f 3 376 777 -777 + mu 0 3 394 395 435 + f 3 377 778 -778 + mu 0 3 395 396 436 + f 3 378 779 -779 + mu 0 3 396 397 437 + f 3 379 760 -780 + mu 0 3 397 398 438; + setAttr ".cd" -type "dataPolyComponent" Index_Data Edge 0 ; + setAttr ".cvd" -type "dataPolyComponent" Index_Data Vertex 0 ; + setAttr ".pd[0]" -type "dataPolyComponent" Index_Data UV 0 ; + setAttr ".hfd" -type "dataPolyComponent" Index_Data Face 0 ; + setAttr ".ndt" 0; + setAttr ".dr" 1; + setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:bf8e49bb98ec"; +select -ne :time1; + setAttr ".o" 1001; + setAttr ".unw" 1001; +select -ne :hardwareRenderingGlobals; + setAttr ".otfna" -type "stringArray" 22 "NURBS Curves" "NURBS Surfaces" "Polygons" "Subdiv Surface" "Particles" "Particle Instance" "Fluids" "Strokes" "Image Planes" "UI" "Lights" "Cameras" "Locators" "Joints" "IK Handles" "Deformers" "Motion Trails" "Components" "Hair Systems" "Follicles" "Misc. UI" "Ornaments" ; + setAttr ".otfva" -type "Int32Array" 22 0 1 1 1 1 1 + 1 1 1 0 0 0 0 0 0 0 0 0 + 0 0 0 0 ; + setAttr ".dli" 1; + setAttr ".fprt" yes; + setAttr ".rtfm" 1; +select -ne :renderPartition; + setAttr -s 2 ".st"; +select -ne :renderGlobalsList1; +select -ne :defaultShaderList1; + setAttr -s 5 ".s"; +select -ne :postProcessList1; + setAttr -s 2 ".p"; +select -ne :defaultRenderingList1; + setAttr -s 2 ".r"; +select -ne :standardSurface1; + setAttr ".b" 0.80000001192092896; + setAttr ".bc" -type "float3" 1 1 1 ; + setAttr ".s" 0.20000000298023224; + setAttr ".sr" 0.40000000596046448; +select -ne :initialShadingGroup; + setAttr -s 2 ".dsm"; + setAttr ".ro" yes; +select -ne :initialParticleSE; + setAttr ".ro" yes; +select -ne :defaultRenderGlobals; + addAttr -ci true -h true -sn "dss" -ln "defaultSurfaceShader" -dt "string"; + setAttr ".ren" -type "string" "arnold"; + setAttr ".outf" 51; + setAttr ".imfkey" -type "string" "exr"; + setAttr ".an" yes; + setAttr ".fs" 1001; + setAttr ".ef" 1001; + setAttr ".oft" -type "string" ""; + setAttr ".pff" yes; + setAttr ".ifp" -type "string" "//"; + setAttr ".rv" -type "string" ""; + setAttr ".pram" -type "string" ""; + setAttr ".poam" -type "string" ""; + setAttr ".prlm" -type "string" ""; + setAttr ".polm" -type "string" ""; + setAttr ".prm" -type "string" ""; + setAttr ".pom" -type "string" ""; + setAttr ".dss" -type "string" "lambert1"; +select -ne :defaultResolution; + setAttr ".w" 10; + setAttr ".h" 6; + setAttr ".pa" 1; + setAttr ".al" yes; + setAttr ".dar" 1.6666666269302368; +select -ne :defaultColorMgtGlobals; + setAttr ".cfe" yes; + setAttr ".cfp" -type "string" "/OCIO-configs/Maya-legacy/config.ocio"; + setAttr ".vtn" -type "string" "sRGB gamma (legacy)"; + setAttr ".vn" -type "string" "sRGB gamma"; + setAttr ".dn" -type "string" "legacy"; + setAttr ".wsn" -type "string" "scene-linear Rec 709/sRGB"; + setAttr ".ovt" no; + setAttr ".povt" no; + setAttr ".otn" -type "string" "sRGB gamma (legacy)"; + setAttr ".potn" -type "string" "sRGB gamma (legacy)"; +select -ne :hardwareRenderGlobals; + setAttr ".ctrs" 256; + setAttr ".btrs" 512; +connectAttr "pSphere1_GEOShape1.iog" ":initialShadingGroup.dsm" -na; +// End of modelMain.ma diff --git a/tests/integration/hosts/maya/expected/test_project/test_asset/publish/render/renderTest_taskRenderMain_beauty/v001/test_project_test_asset_renderTest_taskRenderMain_beauty_v001.exr b/tests/integration/hosts/maya/expected/test_project/test_asset/publish/render/renderTest_taskRenderMain_beauty/v001/test_project_test_asset_renderTest_taskRenderMain_beauty_v001.exr new file mode 100644 index 0000000000000000000000000000000000000000..b8892a2e2ee30026d7c6d4c35d711e1e3769b170 GIT binary patch literal 2858 zcmai0ZHQD=7`}d`m0=}B8-=GI$*wtb=g!wUi!rkwx@s;fVcddk??OzCC`a_Yhj18rqLhqTmcjnH_W*25S_q@;h zyzhCx&aJ50vgOMaWf+^p!P_Y_2W{fGol{pn4nd z`0<_q$U(B3SS7a{B074b)|6L5`^V3}G=v?CGeaF5EC_7cj0lBV4f89&fsm9CqbWMF z>DMV=gn31%`O%?4wMdyu97VVewMxo5&@N$52#T#jL-ZdSg(@}L+y%{C7na$iX?|JD zvzB=P6iCf>2$^7Ezc0ZJeL<-2V26%4zcvF^J4V zE&G$)vkXx%ajj4bMOIPfgCm3x(`|^EP6V|&IGSMyH~`VXk@a2H>m{WYu~X0)wZn#T zPj7DrS)?2F^TNUl0g5y3z=%!R9#t3mR| zflWg-w9|44>&^F}VeXLLiLpLJ`y*N`rN#E4;XV6M4r$RXvC$oeQEw9IfDxO~7Q}c- zc4Hr^Qn!o}@l;A13l3N}WJy0lO);`1CY8+W3j4%G0Ne;Z9iW!Ms{&~; z)LS8rtZGWN11`NOe~q|^Ys~pU_&g0i`}NV)xbin3TD*sVZtW5#~}Uf1s#fc z6LFuQ3n99uMJOlI2ca4vN1g;nCOm@n5*yq`T52E>A4sNAJQhy`p4F8~gsZyeRNx?_ zWD?75&u%mA4HFU#(*|25Ik&=tbAOQQ2GArXccxXF;HeO7=CvzJ!a&DyLpWvTSUb+a z(?Z3JsWz>V@Wd__UkU23VYrEOdB<#@v6kTUySS6~+Er}{S|8lSJioD>*`+2?VT>8j z&8--1xbyDTw$RsMg1BCIcs$oT5?FRgP2N=XQP+rPVQeTw2)ETXpU^Ek1RJfJWDTT0 z5Xm@nR9|SE)`zZ1>m$4a6(*6RIY8Z~PW`S4n(73&F<8IuP=7QYg;qib6RC8}NN0*K zL;p6~t+pjyNJE1&C@W}xfN6+R$|Lb;QZ5CHXi*K+QN@^y^hegmVCXmC-h$dwz#BG<>BI#%v2xR%IvA7ybBP|X6Fc6RVVXAQEnVpjn+z-O& z%a=O4j_r|9>#YYRX=fmo83?tWUdEP1m{9aGqrz2o%GfBfiRB~bf&2}1?TmKq-lKkHT*7JP3B8#|d~<$&_2tjj z-TLCwx2Ioy#${J;R}cR4@K=em3s){5yngP(yYH{xxBI8BztsMI{^-p^7puQ$r$5G{ Xr@p)R=X>h+CvO)1SfF|l;)W)4+9`|lhp-eaE(n5KCYemjE1g0+LuV>rqH*66 z6LHrs!QDUH^-C1@FI)kC#9b2;aMz#ly%sf^n5f_0%)Goi@7^=_+l3~vs`YFXMQX_p2-;6MaZn+iBaobc)PSl9CP@>PI2=xPwkSp7i`|J` zTyxZxE#sPbK3+7>S69sRlzWytdA>+dN<~fN`B}1GY``Zdtnj?j;%ku9prC~nVQFoC zI1~sL@H~NyBMMqD7WUagN*$yWp?#@Su?*ygtV@78a+#Q=_?K`K_B8NW`v zw__dV;#XP^0g>cpEI?uqfGsAn0<1;{)tcB-Gy_t$(jWtejv-fpuuP|Cs~H! zfKwv?P2s{|yc~SGj7SJt4awu2MaGm$(UjSk%B^f|GmkIs=uE5X9+=?rMOP(R(npTU z7(H>)dg=Q;S>MIy#fayQ&7#e9>-8`h=YRiGze%oY|idTlG)Oz7zYws}Brk VC_FsI3JQS^3cqBvuPD@ezXEkZ8j=72 literal 0 HcmV?d00001 diff --git a/tests/integration/hosts/maya/expected/test_project/test_asset/publish/render/renderTest_taskRenderMain_beauty/v001/test_project_test_asset_renderTest_taskRenderMain_beauty_v001_png.png b/tests/integration/hosts/maya/expected/test_project/test_asset/publish/render/renderTest_taskRenderMain_beauty/v001/test_project_test_asset_renderTest_taskRenderMain_beauty_v001_png.png new file mode 100644 index 0000000000000000000000000000000000000000..064330013edf09b94551b74b968101921df2b254 GIT binary patch literal 155 zcmeAS@N?(olHy`uVBq!ia0vp^AU2x-8<1R;aJdyoaTa()76WNUF!onHat+Av^>lFz zshE?Tus~m+j$`3#odsVcIdrAmmNiQ13jFF9Z~1qcZ(;HL2^j*H`8i@Y^JYCz)8G|d wU+=h#+x50$$vu0H*a|Ku@2QhA6<#th=$Qz;JNx3*O`yRHp00i_>zopr0K9Q7X8-^I literal 0 HcmV?d00001 diff --git a/tests/integration/hosts/maya/expected/test_project/test_asset/publish/workfile/workfileTest_task/v001/test_project_test_asset_workfileTest_task_v001.ma b/tests/integration/hosts/maya/expected/test_project/test_asset/publish/workfile/workfileTest_task/v001/test_project_test_asset_workfileTest_task_v001.ma new file mode 100644 index 00000000000..6664b75436c --- /dev/null +++ b/tests/integration/hosts/maya/expected/test_project/test_asset/publish/workfile/workfileTest_task/v001/test_project_test_asset_workfileTest_task_v001.ma @@ -0,0 +1,476 @@ +//Maya ASCII 2022 scene +//Name: test_project_test_asset_test_task_v001.ma +//Last modified: Thu, Sep 14, 2023 06:31:00 PM +//Codeset: 1252 +requires maya "2022"; +requires -nodeType "polyDisc" "modelingToolkit" "0.0.0.0"; +requires "stereoCamera" "10.0"; +requires -nodeType "aiOptions" -nodeType "aiAOVDriver" -nodeType "aiAOVFilter" "mtoa" "5.2.2.1"; +requires -nodeType "simpleSelector" -nodeType "renderSetupLayer" -nodeType "renderSetup" + -nodeType "collection" "renderSetup.py" "1.0"; +requires "stereoCamera" "10.0"; +currentUnit -l centimeter -a degree -t pal; +fileInfo "application" "maya"; +fileInfo "product" "Maya 2022"; +fileInfo "version" "2022"; +fileInfo "cutIdentifier" "202205171752-c25c06f306"; +fileInfo "osv" "Windows 10 Pro v2009 (Build: 19044)"; +fileInfo "license" "education"; +fileInfo "UUID" "019C7F50-40EF-1435-E27F-729F64685E67"; +fileInfo "OpenPypeContext" "eyJwdWJsaXNoX2F0dHJpYnV0ZXMiOiB7IlZhbGlkYXRlQ29udGFpbmVycyI6IHsiYWN0aXZlIjogdHJ1ZX19fQ=="; +createNode transform -s -n "persp"; + rename -uid "D52C935B-47C9-D868-A875-D799DD17B3A1"; + setAttr ".v" no; + setAttr ".t" -type "double3" 26.953352922736947 24.362683487437064 26.983403389430531 ; + setAttr ".r" -type "double3" 1064.7698975365424 54.173034578109736 1075.1660763544442 ; + setAttr ".rp" -type "double3" -2.0401242849359917e-14 2.2609331405046354e-14 -44.821869662029947 ; + setAttr ".rpt" -type "double3" -27.999999999999989 -21.000000000000025 16.82186966202995 ; +createNode camera -s -n "perspShape" -p "persp"; + rename -uid "2399E6C0-490F-BA1F-485F-5AA8A01D27BC"; + setAttr -k off ".v" no; + setAttr ".rnd" no; + setAttr ".fl" 34.999999999999993; + setAttr ".coi" 46.895362757145833; + setAttr ".imn" -type "string" "persp"; + setAttr ".den" -type "string" "persp_depth"; + setAttr ".man" -type "string" "persp_mask"; + setAttr ".hc" -type "string" "viewSet -p %camera"; + setAttr ".ai_translator" -type "string" "perspective"; +createNode transform -s -n "top"; + rename -uid "415C7426-413E-0FAE-FCC3-3DAED7443A52"; + setAttr ".v" no; + setAttr ".t" -type "double3" 0 1000.1 0 ; + setAttr ".r" -type "double3" 90 0 0 ; + setAttr ".rp" -type "double3" 0 0 -1000.1 ; + setAttr ".rpt" -type "double3" 0 -1000.1 1000.1 ; +createNode camera -s -n "topShape" -p "top"; + rename -uid "3BD0CF60-40DB-5278-5D8B-06ACBDA32122"; + setAttr -k off ".v" no; + setAttr ".rnd" no; + setAttr ".coi" 1000.1; + setAttr ".ow" 30; + setAttr ".imn" -type "string" "top"; + setAttr ".den" -type "string" "top_depth"; + setAttr ".man" -type "string" "top_mask"; + setAttr ".hc" -type "string" "viewSet -t %camera"; + setAttr ".o" yes; + setAttr ".ai_translator" -type "string" "orthographic"; +createNode transform -s -n "front"; + rename -uid "D83DD5CE-4FE0-AB1B-81B2-87A63F0B7A05"; + setAttr ".v" no; + setAttr ".t" -type "double3" 0 0 1000.1 ; + setAttr ".r" -type "double3" 180 0 0 ; + setAttr ".rp" -type "double3" 0 0 -1000.1 ; +createNode camera -s -n "frontShape" -p "front"; + rename -uid "23313CBA-42C2-0B3A-0FCF-EA965EAC5DEC"; + setAttr -k off ".v" no; + setAttr ".rnd" no; + setAttr ".coi" 1000.1; + setAttr ".ow" 30; + setAttr ".imn" -type "string" "front"; + setAttr ".den" -type "string" "front_depth"; + setAttr ".man" -type "string" "front_mask"; + setAttr ".hc" -type "string" "viewSet -f %camera"; + setAttr ".o" yes; + setAttr ".ai_translator" -type "string" "orthographic"; +createNode transform -s -n "side"; + rename -uid "F70F692C-4A0D-BE64-9EE4-A99B6FA2D56E"; + setAttr ".v" no; + setAttr ".t" -type "double3" 1000.1 0 0 ; + setAttr ".r" -type "double3" 180 -90 0 ; + setAttr ".rp" -type "double3" 0 0 -1000.1 ; + setAttr ".rpt" -type "double3" -1000.1 0 1000.1 ; +createNode camera -s -n "sideShape" -p "side"; + rename -uid "C05669C3-420E-CA11-E5FC-7EB64EF8B632"; + setAttr -k off ".v" no; + setAttr ".rnd" no; + setAttr ".coi" 1000.1; + setAttr ".ow" 30; + setAttr ".imn" -type "string" "side"; + setAttr ".den" -type "string" "side_depth"; + setAttr ".man" -type "string" "side_mask"; + setAttr ".hc" -type "string" "viewSet -s %camera"; + setAttr ".o" yes; + setAttr ".ai_translator" -type "string" "orthographic"; +createNode transform -n "pSphere1_GEO"; + rename -uid "7445A43F-444F-B2D3-4315-2AA013D2E0B6"; + addAttr -ci true -sn "cbId" -ln "cbId" -dt "string"; + setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:440654b3dfe4"; +createNode mesh -n "pSphere1_GEOShape1" -p "pSphere1_GEO"; + rename -uid "7C731260-45C6-339E-07BF-359446B08EA1"; + addAttr -ci true -sn "cbId" -ln "cbId" -dt "string"; + setAttr -k off ".v"; + setAttr ".vir" yes; + setAttr ".vif" yes; + setAttr ".uvst[0].uvsn" -type "string" "map1"; + setAttr ".cuvs" -type "string" "map1"; + setAttr ".dcc" -type "string" "Ambient+Diffuse"; + setAttr ".covm[0]" 0 1 1; + setAttr ".cdvm[0]" 0 1 1; + setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:bf8e49bb98ec"; +createNode transform -n "pDisc1"; + rename -uid "DED70CCF-4C19-16E4-9E5D-66A05037BA47"; + addAttr -ci true -sn "cbId" -ln "cbId" -dt "string"; + setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:90e762703f08"; +createNode mesh -n "pDiscShape1" -p "pDisc1"; + rename -uid "E1FCDCCF-4DE1-D3B9-C4F8-3285F1CF5B25"; + addAttr -ci true -sn "cbId" -ln "cbId" -dt "string"; + setAttr -k off ".v"; + setAttr ".vir" yes; + setAttr ".vif" yes; + setAttr ".uvst[0].uvsn" -type "string" "map1"; + setAttr ".cuvs" -type "string" "map1"; + setAttr ".dcc" -type "string" "Ambient+Diffuse"; + setAttr ".covm[0]" 0 1 1; + setAttr ".cdvm[0]" 0 1 1; + setAttr ".ai_translator" -type "string" "polymesh"; + setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:4ee3da11a1a4"; +createNode transform -n "persp1"; + rename -uid "292F1351-4E41-A890-D6D5-A5A4F7D94C76"; + setAttr ".t" -type "double3" 3.7889010960863949 2.8416759114717678 3.7889010364817537 ; + setAttr ".r" -type "double3" -27.938352729602379 44.999999999999972 -5.172681101354183e-14 ; +createNode camera -n "perspShape1" -p "persp1"; + rename -uid "9277418C-43C8-5064-A7C6-64AC829A76F2"; + setAttr -k off ".v"; + setAttr ".ovr" 1.3; + setAttr ".fl" 34.999999999999993; + setAttr ".coi" 6.0652013012246453; + setAttr ".imn" -type "string" "persp1"; + setAttr ".den" -type "string" "persp1_depth"; + setAttr ".man" -type "string" "persp1_mask"; + setAttr ".tp" -type "double3" -1.1920928955078125e-07 0 -1.7881393432617188e-07 ; + setAttr ".hc" -type "string" "viewSet -p %camera"; + setAttr ".dr" yes; +createNode lightLinker -s -n "lightLinker1"; + rename -uid "6B9ADCD4-41B9-5BCC-826D-4A874A278510"; + setAttr -s 2 ".lnk"; + setAttr -s 2 ".slnk"; +createNode shapeEditorManager -n "shapeEditorManager"; + rename -uid "5B4518C5-46C9-6921-690E-EFAF77B21A36"; +createNode poseInterpolatorManager -n "poseInterpolatorManager"; + rename -uid "8518F293-4F06-BFF2-647A-72A099FBF025"; +createNode displayLayerManager -n "layerManager"; + rename -uid "04D880D5-4D86-0C58-CA3D-208ABE3E1E16"; +createNode displayLayer -n "defaultLayer"; + rename -uid "4A776D1B-401F-7069-1C74-A7AAE84CEE03"; +createNode renderLayerManager -n "renderLayerManager"; + rename -uid "B719B8BE-46BF-12E6-BEBA-B0AD4DBDBA87"; + setAttr -s 2 ".rlmi[1]" 1; + setAttr -s 2 ".rlmi"; +createNode renderLayer -n "defaultRenderLayer"; + rename -uid "B134920D-4508-23BD-A6CA-11B43DE03F53"; + setAttr ".g" yes; +createNode renderSetup -n "renderSetup"; + rename -uid "9A8F0D15-41AB-CA70-C2D8-B78840BF9BC1"; +createNode polySphere -n "polySphere1"; + rename -uid "DA319706-4ACF-B15C-53B2-48AC80D202EA"; +createNode objectSet -n "modelMain"; + rename -uid "A76AD4F8-4CF5-AA0D-4E98-BABEE6454CC3"; + addAttr -ci true -sn "cbId" -ln "cbId" -dt "string"; + addAttr -ci true -sn "id" -ln "id" -dt "string"; + addAttr -ci true -sn "family" -ln "family" -dt "string"; + addAttr -ci true -sn "subset" -ln "subset" -dt "string"; + addAttr -ci true -sn "active" -ln "active" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "creator_identifier" -ln "creator_identifier" -dt "string"; + addAttr -ci true -sn "variant" -ln "variant" -dt "string"; + addAttr -ci true -sn "asset" -ln "asset" -dt "string"; + addAttr -ci true -sn "task" -ln "task" -dt "string"; + addAttr -ci true -sn "instance_id" -ln "instance_id" -dt "string"; + addAttr -ci true -sn "writeColorSets" -ln "writeColorSets" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "writeFaceSets" -ln "writeFaceSets" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "includeParentHierarchy" -ln "includeParentHierarchy" -min + 0 -max 1 -at "bool"; + addAttr -ci true -sn "attr" -ln "attr" -dt "string"; + addAttr -ci true -sn "attrPrefix" -ln "attrPrefix" -dt "string"; + addAttr -ci true -sn "publish_attributes" -ln "publish_attributes" -dt "string"; + addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" + -dt "string"; + setAttr ".ihi" 0; + setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:7364ea6776c9"; + setAttr ".id" -type "string" "pyblish.avalon.instance"; + setAttr ".family" -type "string" "model"; + setAttr ".subset" -type "string" "modelMain"; + setAttr -cb on ".active" yes; + setAttr ".creator_identifier" -type "string" "io.openpype.creators.maya.model"; + setAttr ".variant" -type "string" "Main"; + setAttr ".asset" -type "string" "test_asset"; + setAttr ".task" -type "string" "test_task"; + setAttr ".instance_id" -type "string" "6889d3db-b813-43db-96de-9ba555dc4472"; + setAttr -cb on ".writeColorSets"; + setAttr -cb on ".writeFaceSets"; + setAttr -cb on ".includeParentHierarchy"; + setAttr ".attr" -type "string" ""; + setAttr ".attrPrefix" -type "string" ""; + setAttr ".publish_attributes" -type "string" "{\"ValidateNodeIDsRelated\": {\"active\": true}, \"ValidateTransformNamingSuffix\": {\"active\": true}, \"ValidateColorSets\": {\"active\": true}, \"ValidateMeshArnoldAttributes\": {\"active\": true}, \"ValidateMeshHasUVs\": {\"active\": true}, \"ValidateMeshNonZeroEdgeLength\": {\"active\": true}, \"ExtractModel\": {\"active\": true}}"; + setAttr ".__creator_attributes_keys" -type "string" "writeColorSets,writeFaceSets,includeParentHierarchy,attr,attrPrefix"; +createNode script -n "uiConfigurationScriptNode"; + rename -uid "4B7AFB53-452E-E870-63E1-CCA1DD6EAF13"; + setAttr ".b" -type "string" ( + "// Maya Mel UI Configuration File.\n//\n// This script is machine generated. Edit at your own risk.\n//\n//\n\nglobal string $gMainPane;\nif (`paneLayout -exists $gMainPane`) {\n\n\tglobal int $gUseScenePanelConfig;\n\tint $useSceneConfig = $gUseScenePanelConfig;\n\tint $nodeEditorPanelVisible = stringArrayContains(\"nodeEditorPanel1\", `getPanel -vis`);\n\tint $nodeEditorWorkspaceControlOpen = (`workspaceControl -exists nodeEditorPanel1Window` && `workspaceControl -q -visible nodeEditorPanel1Window`);\n\tint $menusOkayInPanels = `optionVar -q allowMenusInPanels`;\n\tint $nVisPanes = `paneLayout -q -nvp $gMainPane`;\n\tint $nPanes = 0;\n\tstring $editorName;\n\tstring $panelName;\n\tstring $itemFilterName;\n\tstring $panelConfig;\n\n\t//\n\t// get current state of the UI\n\t//\n\tsceneUIReplacement -update $gMainPane;\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Top View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Top View\")) -mbv $menusOkayInPanels $panelName;\n" + + "\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"|top\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n" + + " -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n" + + " -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n" + + "\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Side View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Side View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"|side\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n" + + " -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n" + + " -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n" + + " -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Front View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Front View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"|front\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n" + + " -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n" + + " -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n" + + " -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Persp View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Persp View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"|persp\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n" + + " -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n" + + " -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n" + + " -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1312\n -height 732\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"outlinerPanel\" (localizedPanelLabel(\"ToggledOutliner\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\toutlinerPanel -edit -l (localizedPanelLabel(\"ToggledOutliner\")) -mbv $menusOkayInPanels $panelName;\n" + + "\t\t$editorName = $panelName;\n outlinerEditor -e \n -docTag \"isolOutln_fromSeln\" \n -showShapes 0\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 1\n -showReferenceMembers 1\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -organizeByClip 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showParentContainers 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n" + + " -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -isSet 0\n -isSetMember 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -selectCommand \"print(\\\"\\\")\" \n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 1\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n -renderFilterIndex 0\n" + + " -selectionOrder \"chronological\" \n -expandAttribute 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"outlinerPanel\" (localizedPanelLabel(\"Outliner\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\toutlinerPanel -edit -l (localizedPanelLabel(\"Outliner\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n outlinerEditor -e \n -showShapes 0\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -organizeByClip 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n" + + " -showParentContainers 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n" + + " -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"graphEditor\" (localizedPanelLabel(\"Graph Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Graph Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n" + + " -organizeByClip 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 1\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showParentContainers 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 0\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 1\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 1\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n" + + " -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 1\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"GraphEd\");\n animCurveEditor -e \n -displayValues 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -showPlayRangeShades \"on\" \n -lockPlayRangeShades \"off\" \n -smoothness \"fine\" \n -resultSamples 1.041667\n" + + " -resultScreenSamples 0\n -resultUpdate \"delayed\" \n -showUpstreamCurves 1\n -keyMinScale 1\n -stackedCurvesMin -1\n -stackedCurvesMax 1\n -stackedCurvesSpace 0.2\n -preSelectionHighlight 0\n -constrainDrag 0\n -valueLinesToggle 1\n -highlightAffectedCurves 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dopeSheetPanel\" (localizedPanelLabel(\"Dope Sheet\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Dope Sheet\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n" + + " -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -organizeByClip 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showParentContainers 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 0\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 1\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"0\" \n -showSetMembers 0\n" + + " -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"DopeSheetEd\");\n dopeSheetEditor -e \n -displayValues 0\n -snapTime \"integer\" \n" + + " -snapValue \"none\" \n -outliner \"dopeSheetPanel1OutlineEd\" \n -showSummary 1\n -showScene 0\n -hierarchyBelow 0\n -showTicks 1\n -selectionWindow 0 0 0 0 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"timeEditorPanel\" (localizedPanelLabel(\"Time Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Time Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"clipEditorPanel\" (localizedPanelLabel(\"Trax Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Trax Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = clipEditorNameFromPanel($panelName);\n" + + " clipEditor -e \n -displayValues 0\n -snapTime \"none\" \n -snapValue \"none\" \n -initialized 0\n -manageSequencer 0 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"sequenceEditorPanel\" (localizedPanelLabel(\"Camera Sequencer\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Camera Sequencer\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = sequenceEditorNameFromPanel($panelName);\n clipEditor -e \n -displayValues 0\n -snapTime \"none\" \n -snapValue \"none\" \n -initialized 0\n -manageSequencer 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"hyperGraphPanel\" (localizedPanelLabel(\"Hypergraph Hierarchy\")) `;\n" + + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Hypergraph Hierarchy\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"HyperGraphEd\");\n hyperGraph -e \n -graphLayoutStyle \"hierarchicalLayout\" \n -orientation \"horiz\" \n -mergeConnections 0\n -zoom 1\n -animateTransition 0\n -showRelationships 1\n -showShapes 0\n -showDeformers 0\n -showExpressions 0\n -showConstraints 0\n -showConnectionFromSelected 0\n -showConnectionToSelected 0\n -showConstraintLabels 0\n -showUnderworld 0\n -showInvisible 0\n -transitionFrames 1\n -opaqueContainers 0\n -freeform 0\n -imagePosition 0 0 \n -imageScale 1\n -imageEnabled 0\n -graphType \"DAG\" \n" + + " -heatMapDisplay 0\n -updateSelection 1\n -updateNodeAdded 1\n -useDrawOverrideColor 0\n -limitGraphTraversal -1\n -range 0 0 \n -iconSize \"smallIcons\" \n -showCachedConnections 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"hyperShadePanel\" (localizedPanelLabel(\"Hypershade\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Hypershade\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"visorPanel\" (localizedPanelLabel(\"Visor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Visor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n" + + "\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"nodeEditorPanel\" (localizedPanelLabel(\"Node Editor\")) `;\n\tif ($nodeEditorPanelVisible || $nodeEditorWorkspaceControlOpen) {\n\t\tif (\"\" == $panelName) {\n\t\t\tif ($useSceneConfig) {\n\t\t\t\t$panelName = `scriptedPanel -unParent -type \"nodeEditorPanel\" -l (localizedPanelLabel(\"Node Editor\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"NodeEditorEd\");\n nodeEditor -e \n -allAttributes 0\n -allNodes 0\n -autoSizeNodes 1\n -consistentNameSize 1\n -createNodeCommand \"nodeEdCreateNodeCommand\" \n -connectNodeOnCreation 0\n -connectOnDrop 0\n -copyConnectionsOnPaste 0\n -connectionStyle \"bezier\" \n -defaultPinnedState 0\n -additiveGraphingMode 0\n -settingsChangedCallback \"nodeEdSyncControls\" \n -traversalDepthLimit -1\n -keyPressCommand \"nodeEdKeyPressCommand\" \n" + + " -nodeTitleMode \"name\" \n -gridSnap 0\n -gridVisibility 1\n -crosshairOnEdgeDragging 0\n -popupMenuScript \"nodeEdBuildPanelMenus\" \n -showNamespace 1\n -showShapes 1\n -showSGShapes 0\n -showTransforms 1\n -useAssets 1\n -syncedSelection 1\n -extendToShapes 1\n -editorMode \"default\" \n -hasWatchpoint 0\n $editorName;\n\t\t\t}\n\t\t} else {\n\t\t\t$label = `panel -q -label $panelName`;\n\t\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Node Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"NodeEditorEd\");\n nodeEditor -e \n -allAttributes 0\n -allNodes 0\n -autoSizeNodes 1\n -consistentNameSize 1\n -createNodeCommand \"nodeEdCreateNodeCommand\" \n -connectNodeOnCreation 0\n -connectOnDrop 0\n" + + " -copyConnectionsOnPaste 0\n -connectionStyle \"bezier\" \n -defaultPinnedState 0\n -additiveGraphingMode 0\n -settingsChangedCallback \"nodeEdSyncControls\" \n -traversalDepthLimit -1\n -keyPressCommand \"nodeEdKeyPressCommand\" \n -nodeTitleMode \"name\" \n -gridSnap 0\n -gridVisibility 1\n -crosshairOnEdgeDragging 0\n -popupMenuScript \"nodeEdBuildPanelMenus\" \n -showNamespace 1\n -showShapes 1\n -showSGShapes 0\n -showTransforms 1\n -useAssets 1\n -syncedSelection 1\n -extendToShapes 1\n -editorMode \"default\" \n -hasWatchpoint 0\n $editorName;\n\t\t\tif (!$useSceneConfig) {\n\t\t\t\tpanel -e -l $label $panelName;\n\t\t\t}\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"createNodePanel\" (localizedPanelLabel(\"Create Node\")) `;\n" + + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Create Node\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"polyTexturePlacementPanel\" (localizedPanelLabel(\"UV Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"UV Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"renderWindowPanel\" (localizedPanelLabel(\"Render View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Render View\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"shapePanel\" (localizedPanelLabel(\"Shape Editor\")) `;\n" + + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tshapePanel -edit -l (localizedPanelLabel(\"Shape Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"posePanel\" (localizedPanelLabel(\"Pose Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tposePanel -edit -l (localizedPanelLabel(\"Pose Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dynRelEdPanel\" (localizedPanelLabel(\"Dynamic Relationships\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Dynamic Relationships\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"relationshipPanel\" (localizedPanelLabel(\"Relationship Editor\")) `;\n" + + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Relationship Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"referenceEditorPanel\" (localizedPanelLabel(\"Reference Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Reference Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"componentEditorPanel\" (localizedPanelLabel(\"Component Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Component Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dynPaintScriptedPanelType\" (localizedPanelLabel(\"Paint Effects\")) `;\n" + + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Paint Effects\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"scriptEditorPanel\" (localizedPanelLabel(\"Script Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Script Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"profilerPanel\" (localizedPanelLabel(\"Profiler Tool\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Profiler Tool\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"contentBrowserPanel\" (localizedPanelLabel(\"Content Browser\")) `;\n" + + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Content Browser\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"Stereo\" (localizedPanelLabel(\"Stereo\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Stereo\")) -mbv $menusOkayInPanels $panelName;\n{ string $editorName = ($panelName+\"Editor\");\n stereoCameraView -e \n -camera \"|persp\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"wireframe\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 1\n" + + " -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 4 4 \n -bumpResolution 4 4 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n" + + " -lowQualityLighting 0\n -maximumNumHardwareLights 0\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n" + + " -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 0\n -height 0\n -sceneRenderFilter 0\n -displayMode \"centerEye\" \n -viewColor 0 0 0 1 \n -useCustomBackground 1\n $editorName;\n stereoCameraView -e -viewSelected 0 $editorName;\n stereoCameraView -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName; };\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\tif ($useSceneConfig) {\n string $configName = `getPanel -cwl (localizedPanelLabel(\"Current Layout\"))`;\n" + + " if (\"\" != $configName) {\n\t\t\tpanelConfiguration -edit -label (localizedPanelLabel(\"Current Layout\")) \n\t\t\t\t-userCreated false\n\t\t\t\t-defaultImage \"vacantCell.xP:/\"\n\t\t\t\t-image \"\"\n\t\t\t\t-sc false\n\t\t\t\t-configString \"global string $gMainPane; paneLayout -e -cn \\\"single\\\" -ps 1 100 100 $gMainPane;\"\n\t\t\t\t-removeAllPanels\n\t\t\t\t-ap false\n\t\t\t\t\t(localizedPanelLabel(\"Persp View\")) \n\t\t\t\t\t\"modelPanel\"\n" + + "\t\t\t\t\t\"$panelName = `modelPanel -unParent -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels `;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera persp` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 16384\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -controllers 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -greasePencils 1\\n -shadows 0\\n -captureSequenceNumber -1\\n -width 1312\\n -height 732\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName;\\nmodelEditor -e \\n -pluginObjects \\\"gpuCacheDisplayFilter\\\" 1 \\n $editorName\"\n" + + "\t\t\t\t\t\"modelPanel -edit -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels $panelName;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera persp` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 16384\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -controllers 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -greasePencils 1\\n -shadows 0\\n -captureSequenceNumber -1\\n -width 1312\\n -height 732\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName;\\nmodelEditor -e \\n -pluginObjects \\\"gpuCacheDisplayFilter\\\" 1 \\n $editorName\"\n" + + "\t\t\t\t$configName;\n\n setNamedPanelLayout (localizedPanelLabel(\"Current Layout\"));\n }\n\n panelHistory -e -clear mainPanelHistory;\n sceneUIReplacement -clear;\n\t}\n\n\ngrid -spacing 5 -size 12 -divisions 5 -displayAxes yes -displayGridLines yes -displayDivisionLines yes -displayPerspectiveLabels no -displayOrthographicLabels no -displayAxesBold yes -perspectiveLabelPosition axis -orthographicLabelPosition edge;\nviewManip -drawCompass 0 -compassAngle 0 -frontParameters \"\" -homeParameters \"\" -selectionLockParameters \"\";\n}\n"); + setAttr ".st" 3; +createNode script -n "sceneConfigurationScriptNode"; + rename -uid "72B19BC2-43A2-E229-0A73-2CB861A291D1"; + setAttr ".b" -type "string" "playbackOptions -min 1000 -max 1001 -ast 1000 -aet 1001 "; + setAttr ".st" 6; +createNode polyDisc -n "polyDisc1"; + rename -uid "9ED8A7BD-4FFD-6107-4322-35ACD1D3AC42"; +createNode aiOptions -s -n "defaultArnoldRenderOptions"; + rename -uid "51BB3D7A-4C7D-FCDD-1B21-D89934107F98"; + setAttr ".skip_license_check" yes; +createNode aiAOVFilter -s -n "defaultArnoldFilter"; + rename -uid "989A5992-46C8-0CB2-B2B8-4E868F31FEA8"; + setAttr ".ai_translator" -type "string" "gaussian"; +createNode aiAOVDriver -s -n "defaultArnoldDriver"; + rename -uid "B8469AD8-47C8-9EF1-FE5E-5AB50ABC1536"; + setAttr ".merge_AOVs" yes; + setAttr ".ai_translator" -type "string" "exr"; +createNode aiAOVDriver -s -n "defaultArnoldDisplayDriver"; + rename -uid "21D4F4CD-4D78-001C-610D-798402CD7CF0"; + setAttr ".output_mode" 0; + setAttr ".ai_translator" -type "string" "maya"; +createNode objectSet -n "workfileMain"; + rename -uid "3C9B5D6F-4579-8E3B-5B7D-4C88865A1C68"; + addAttr -ci true -sn "cbId" -ln "cbId" -dt "string"; + addAttr -ci true -sn "id" -ln "id" -dt "string"; + addAttr -ci true -sn "family" -ln "family" -dt "string"; + addAttr -ci true -sn "subset" -ln "subset" -dt "string"; + addAttr -ci true -sn "active" -ln "active" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "creator_identifier" -ln "creator_identifier" -dt "string"; + addAttr -ci true -sn "variant" -ln "variant" -dt "string"; + addAttr -ci true -sn "asset" -ln "asset" -dt "string"; + addAttr -ci true -sn "task" -ln "task" -dt "string"; + addAttr -ci true -sn "instance_id" -ln "instance_id" -dt "string"; + addAttr -ci true -sn "publish_attributes" -ln "publish_attributes" -dt "string"; + addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" + -dt "string"; + setAttr ".ihi" 0; + setAttr ".hio" yes; + setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:30d256dac64c"; + setAttr ".id" -type "string" "pyblish.avalon.instance"; + setAttr ".family" -type "string" "workfile"; + setAttr ".subset" -type "string" "workfileTest_task"; + setAttr -cb on ".active" yes; + setAttr ".creator_identifier" -type "string" "io.openpype.creators.maya.workfile"; + setAttr ".variant" -type "string" "Main"; + setAttr ".asset" -type "string" "test_asset"; + setAttr ".task" -type "string" "test_task"; + setAttr ".instance_id" -type "string" "911dc92a-ad29-41e5-bbf9-733d56174fb9"; + setAttr ".publish_attributes" -type "string" "{\"ExtractImportReference\": {\"active\": false}}"; + setAttr ".__creator_attributes_keys" -type "string" ""; +createNode objectSet -n "renderingMain"; + rename -uid "8A999C2F-4922-B15D-8D5C-45A16465B69F"; + addAttr -ci true -sn "pre_creator_identifier" -ln "pre_creator_identifier" -dt "string"; + addAttr -ci true -sn "cbId" -ln "cbId" -dt "string"; + setAttr ".ihi" 0; + setAttr ".pre_creator_identifier" -type "string" "io.openpype.creators.maya.renderlayer"; + setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:042447475732"; +createNode renderSetupLayer -n "Main"; + rename -uid "2202E438-4CEF-F64E-737C-F48C65E31126"; + addAttr -ci true -sn "es" -ln "expandedState" -min 0 -max 1 -at "bool"; + setAttr ".es" yes; +createNode renderLayer -n "rs_Main"; + rename -uid "DF0259B1-4F96-DA7E-C74F-B599FBE15C18"; + setAttr ".do" 1; +createNode collection -n "defaultCollection"; + rename -uid "E5014237-4DA9-6FC0-633D-69AFA56161B3"; + addAttr -ci true -sn "es" -ln "expandedState" -min 0 -max 1 -at "bool"; + setAttr ".es" yes; +createNode simpleSelector -n "defaultCollectionSelector"; + rename -uid "7CA2F6D8-483C-B020-BC03-EF9563A52163"; + setAttr ".pat" -type "string" "*"; +createNode objectSet -n "_renderingMain:Main"; + rename -uid "1EEC3A3B-49CF-0C79-5340-39805174FB8A"; + addAttr -s false -ci true -sn "renderlayer" -ln "renderlayer" -at "message"; + addAttr -ci true -sn "id" -ln "id" -dt "string"; + addAttr -ci true -sn "family" -ln "family" -dt "string"; + addAttr -ci true -sn "subset" -ln "subset" -dt "string"; + addAttr -ci true -sn "active" -ln "active" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "creator_identifier" -ln "creator_identifier" -dt "string"; + addAttr -ci true -sn "variant" -ln "variant" -dt "string"; + addAttr -ci true -sn "asset" -ln "asset" -dt "string"; + addAttr -ci true -sn "task" -ln "task" -dt "string"; + addAttr -ci true -sn "instance_id" -ln "instance_id" -dt "string"; + addAttr -ci true -sn "review" -ln "review" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "extendFrames" -ln "extendFrames" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "overrideExistingFrame" -ln "overrideExistingFrame" -min 0 + -max 1 -at "bool"; + addAttr -ci true -sn "tileRendering" -ln "tileRendering" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "tilesX" -ln "tilesX" -at "long"; + addAttr -ci true -sn "tilesY" -ln "tilesY" -at "long"; + addAttr -ci true -sn "convertToScanline" -ln "convertToScanline" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "useReferencedAovs" -ln "useReferencedAovs" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "renderSetupIncludeLights" -ln "renderSetupIncludeLights" -min + 0 -max 1 -at "bool"; + addAttr -ci true -sn "publish_attributes" -ln "publish_attributes" -dt "string"; + addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" + -dt "string"; + addAttr -ci true -sn "cbId" -ln "cbId" -dt "string"; + setAttr ".ihi" 0; + setAttr ".id" -type "string" "pyblish.avalon.instance"; + setAttr ".family" -type "string" "renderlayer"; + setAttr ".subset" -type "string" "renderMain"; + setAttr -cb on ".active" yes; + setAttr ".creator_identifier" -type "string" "io.openpype.creators.maya.renderlayer"; + setAttr ".variant" -type "string" "Main"; + setAttr ".asset" -type "string" "test_asset"; + setAttr ".task" -type "string" "test_task"; + setAttr ".instance_id" -type "string" "8a9cfb85-9602-4e5e-a4bc-27a2986bae7f"; + setAttr -cb on ".review" yes; + setAttr -cb on ".extendFrames"; + setAttr -cb on ".overrideExistingFrame" yes; + setAttr -cb on ".tileRendering"; + setAttr -cb on ".tilesX" 2; + setAttr -cb on ".tilesY" 2; + setAttr -cb on ".convertToScanline"; + setAttr -cb on ".useReferencedAovs"; + setAttr -cb on ".renderSetupIncludeLights" yes; + setAttr ".publish_attributes" -type "string" "{\"CollectDeadlinePools\": {\"primaryPool\": \"\", \"secondaryPool\": \"\"}, \"ValidateDeadlinePools\": {\"active\": true}, \"ValidateFrameRange\": {\"active\": true}, \"ExtractImportReference\": {\"active\": false}, \"MayaSubmitDeadline\": {\"priority\": 50, \"chunkSize\": 1, \"machineList\": \"\", \"whitelist\": false, \"tile_priority\": 50, \"strict_error_checking\": true}, \"ProcessSubmittedJobOnFarm\": {\"publishJobState\": \"Active\"}}"; + setAttr ".__creator_attributes_keys" -type "string" "review,extendFrames,overrideExistingFrame,tileRendering,tilesX,tilesY,convertToScanline,useReferencedAovs,renderSetupIncludeLights"; + setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:69960f336351"; +select -ne :time1; + setAttr ".o" 1001; + setAttr ".unw" 1001; +select -ne :hardwareRenderingGlobals; + setAttr ".otfna" -type "stringArray" 22 "NURBS Curves" "NURBS Surfaces" "Polygons" "Subdiv Surface" "Particles" "Particle Instance" "Fluids" "Strokes" "Image Planes" "UI" "Lights" "Cameras" "Locators" "Joints" "IK Handles" "Deformers" "Motion Trails" "Components" "Hair Systems" "Follicles" "Misc. UI" "Ornaments" ; + setAttr ".otfva" -type "Int32Array" 22 0 1 1 1 1 1 + 1 1 1 0 0 0 0 0 0 0 0 0 + 0 0 0 0 ; + setAttr ".fprt" yes; +select -ne :renderPartition; + setAttr -s 2 ".st"; +select -ne :renderGlobalsList1; +select -ne :defaultShaderList1; + setAttr -s 5 ".s"; +select -ne :postProcessList1; + setAttr -s 2 ".p"; +select -ne :defaultRenderingList1; + setAttr -s 2 ".r"; +select -ne :standardSurface1; + setAttr ".b" 0.80000001192092896; + setAttr ".bc" -type "float3" 1 1 1 ; + setAttr ".s" 0.20000000298023224; +select -ne :initialShadingGroup; + setAttr -s 2 ".dsm"; + setAttr ".ro" yes; +select -ne :initialParticleSE; + setAttr ".ro" yes; +select -ne :defaultRenderGlobals; + addAttr -ci true -h true -sn "dss" -ln "defaultSurfaceShader" -dt "string"; + setAttr ".ren" -type "string" "arnold"; + setAttr ".outf" 51; + setAttr ".imfkey" -type "string" "exr"; + setAttr ".an" yes; + setAttr ".fs" 1001; + setAttr ".ef" 1001; + setAttr ".oft" -type "string" ""; + setAttr ".pff" yes; + setAttr ".ifp" -type "string" "//"; + setAttr ".rv" -type "string" ""; + setAttr ".pram" -type "string" ""; + setAttr ".poam" -type "string" ""; + setAttr ".prlm" -type "string" ""; + setAttr ".polm" -type "string" ""; + setAttr ".prm" -type "string" ""; + setAttr ".pom" -type "string" ""; + setAttr ".dss" -type "string" "lambert1"; +select -ne :defaultResolution; + setAttr ".w" 10; + setAttr ".h" 6; + setAttr ".pa" 1; + setAttr ".al" yes; + setAttr ".dar" 1.6666666269302368; +select -ne :defaultColorMgtGlobals; + setAttr ".cfe" yes; + setAttr ".cfp" -type "string" "/OCIO-configs/Maya-legacy/config.ocio"; + setAttr ".vtn" -type "string" "sRGB gamma (legacy)"; + setAttr ".vn" -type "string" "sRGB gamma"; + setAttr ".dn" -type "string" "legacy"; + setAttr ".wsn" -type "string" "scene-linear Rec 709/sRGB"; + setAttr ".ovt" no; + setAttr ".povt" no; + setAttr ".otn" -type "string" "sRGB gamma (legacy)"; + setAttr ".potn" -type "string" "sRGB gamma (legacy)"; +select -ne :hardwareRenderGlobals; + setAttr ".ctrs" 256; + setAttr ".btrs" 512; +select -ne :ikSystem; + setAttr -s 4 ".sol"; +connectAttr "rs_Main.ri" ":persp.rlio[0]"; +connectAttr "rs_Main.ri" ":top.rlio[0]"; +connectAttr "rs_Main.ri" ":front.rlio[0]"; +connectAttr "rs_Main.ri" ":side.rlio[0]"; +connectAttr "rs_Main.ri" "pSphere1_GEO.rlio[0]"; +connectAttr "polySphere1.out" "pSphere1_GEOShape1.i"; +connectAttr "rs_Main.ri" "pDisc1.rlio[0]"; +connectAttr "polyDisc1.output" "pDiscShape1.i"; +connectAttr "rs_Main.ri" "persp1.rlio[0]"; +relationship "link" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message"; +relationship "link" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message"; +connectAttr "layerManager.dli[0]" "defaultLayer.id"; +connectAttr "renderLayerManager.rlmi[0]" "defaultRenderLayer.rlid"; +connectAttr "Main.msg" "renderSetup.frl"; +connectAttr "Main.msg" "renderSetup.lrl"; +connectAttr "pSphere1_GEO.iog" "modelMain.dsm" -na; +connectAttr ":defaultArnoldDisplayDriver.msg" ":defaultArnoldRenderOptions.drivers" + -na; +connectAttr ":defaultArnoldFilter.msg" ":defaultArnoldRenderOptions.filt"; +connectAttr ":defaultArnoldDriver.msg" ":defaultArnoldRenderOptions.drvr"; +connectAttr "_renderingMain:Main.msg" "renderingMain.dnsm" -na; +connectAttr "rs_Main.msg" "Main.lrl"; +connectAttr "renderSetup.lit" "Main.pls"; +connectAttr "defaultCollection.msg" "Main.cl"; +connectAttr "defaultCollection.msg" "Main.ch"; +connectAttr "renderLayerManager.rlmi[1]" "rs_Main.rlid"; +connectAttr "defaultCollectionSelector.c" "defaultCollection.sel"; +connectAttr "Main.lit" "defaultCollection.pls"; +connectAttr "Main.nic" "defaultCollection.pic"; +connectAttr "Main.msg" "_renderingMain:Main.renderlayer"; +connectAttr "defaultRenderLayer.msg" ":defaultRenderingList1.r" -na; +connectAttr "rs_Main.msg" ":defaultRenderingList1.r" -na; +connectAttr "pSphere1_GEOShape1.iog" ":initialShadingGroup.dsm" -na; +connectAttr "pDiscShape1.iog" ":initialShadingGroup.dsm" -na; +// End of test_project_test_asset_test_task_v001.ma diff --git a/tests/integration/hosts/maya/expected/test_project/test_asset/work/test_task/test_project_test_asset_test_task_v001.ma b/tests/integration/hosts/maya/expected/test_project/test_asset/work/test_task/test_project_test_asset_test_task_v001.ma new file mode 100644 index 00000000000..6664b75436c --- /dev/null +++ b/tests/integration/hosts/maya/expected/test_project/test_asset/work/test_task/test_project_test_asset_test_task_v001.ma @@ -0,0 +1,476 @@ +//Maya ASCII 2022 scene +//Name: test_project_test_asset_test_task_v001.ma +//Last modified: Thu, Sep 14, 2023 06:31:00 PM +//Codeset: 1252 +requires maya "2022"; +requires -nodeType "polyDisc" "modelingToolkit" "0.0.0.0"; +requires "stereoCamera" "10.0"; +requires -nodeType "aiOptions" -nodeType "aiAOVDriver" -nodeType "aiAOVFilter" "mtoa" "5.2.2.1"; +requires -nodeType "simpleSelector" -nodeType "renderSetupLayer" -nodeType "renderSetup" + -nodeType "collection" "renderSetup.py" "1.0"; +requires "stereoCamera" "10.0"; +currentUnit -l centimeter -a degree -t pal; +fileInfo "application" "maya"; +fileInfo "product" "Maya 2022"; +fileInfo "version" "2022"; +fileInfo "cutIdentifier" "202205171752-c25c06f306"; +fileInfo "osv" "Windows 10 Pro v2009 (Build: 19044)"; +fileInfo "license" "education"; +fileInfo "UUID" "019C7F50-40EF-1435-E27F-729F64685E67"; +fileInfo "OpenPypeContext" "eyJwdWJsaXNoX2F0dHJpYnV0ZXMiOiB7IlZhbGlkYXRlQ29udGFpbmVycyI6IHsiYWN0aXZlIjogdHJ1ZX19fQ=="; +createNode transform -s -n "persp"; + rename -uid "D52C935B-47C9-D868-A875-D799DD17B3A1"; + setAttr ".v" no; + setAttr ".t" -type "double3" 26.953352922736947 24.362683487437064 26.983403389430531 ; + setAttr ".r" -type "double3" 1064.7698975365424 54.173034578109736 1075.1660763544442 ; + setAttr ".rp" -type "double3" -2.0401242849359917e-14 2.2609331405046354e-14 -44.821869662029947 ; + setAttr ".rpt" -type "double3" -27.999999999999989 -21.000000000000025 16.82186966202995 ; +createNode camera -s -n "perspShape" -p "persp"; + rename -uid "2399E6C0-490F-BA1F-485F-5AA8A01D27BC"; + setAttr -k off ".v" no; + setAttr ".rnd" no; + setAttr ".fl" 34.999999999999993; + setAttr ".coi" 46.895362757145833; + setAttr ".imn" -type "string" "persp"; + setAttr ".den" -type "string" "persp_depth"; + setAttr ".man" -type "string" "persp_mask"; + setAttr ".hc" -type "string" "viewSet -p %camera"; + setAttr ".ai_translator" -type "string" "perspective"; +createNode transform -s -n "top"; + rename -uid "415C7426-413E-0FAE-FCC3-3DAED7443A52"; + setAttr ".v" no; + setAttr ".t" -type "double3" 0 1000.1 0 ; + setAttr ".r" -type "double3" 90 0 0 ; + setAttr ".rp" -type "double3" 0 0 -1000.1 ; + setAttr ".rpt" -type "double3" 0 -1000.1 1000.1 ; +createNode camera -s -n "topShape" -p "top"; + rename -uid "3BD0CF60-40DB-5278-5D8B-06ACBDA32122"; + setAttr -k off ".v" no; + setAttr ".rnd" no; + setAttr ".coi" 1000.1; + setAttr ".ow" 30; + setAttr ".imn" -type "string" "top"; + setAttr ".den" -type "string" "top_depth"; + setAttr ".man" -type "string" "top_mask"; + setAttr ".hc" -type "string" "viewSet -t %camera"; + setAttr ".o" yes; + setAttr ".ai_translator" -type "string" "orthographic"; +createNode transform -s -n "front"; + rename -uid "D83DD5CE-4FE0-AB1B-81B2-87A63F0B7A05"; + setAttr ".v" no; + setAttr ".t" -type "double3" 0 0 1000.1 ; + setAttr ".r" -type "double3" 180 0 0 ; + setAttr ".rp" -type "double3" 0 0 -1000.1 ; +createNode camera -s -n "frontShape" -p "front"; + rename -uid "23313CBA-42C2-0B3A-0FCF-EA965EAC5DEC"; + setAttr -k off ".v" no; + setAttr ".rnd" no; + setAttr ".coi" 1000.1; + setAttr ".ow" 30; + setAttr ".imn" -type "string" "front"; + setAttr ".den" -type "string" "front_depth"; + setAttr ".man" -type "string" "front_mask"; + setAttr ".hc" -type "string" "viewSet -f %camera"; + setAttr ".o" yes; + setAttr ".ai_translator" -type "string" "orthographic"; +createNode transform -s -n "side"; + rename -uid "F70F692C-4A0D-BE64-9EE4-A99B6FA2D56E"; + setAttr ".v" no; + setAttr ".t" -type "double3" 1000.1 0 0 ; + setAttr ".r" -type "double3" 180 -90 0 ; + setAttr ".rp" -type "double3" 0 0 -1000.1 ; + setAttr ".rpt" -type "double3" -1000.1 0 1000.1 ; +createNode camera -s -n "sideShape" -p "side"; + rename -uid "C05669C3-420E-CA11-E5FC-7EB64EF8B632"; + setAttr -k off ".v" no; + setAttr ".rnd" no; + setAttr ".coi" 1000.1; + setAttr ".ow" 30; + setAttr ".imn" -type "string" "side"; + setAttr ".den" -type "string" "side_depth"; + setAttr ".man" -type "string" "side_mask"; + setAttr ".hc" -type "string" "viewSet -s %camera"; + setAttr ".o" yes; + setAttr ".ai_translator" -type "string" "orthographic"; +createNode transform -n "pSphere1_GEO"; + rename -uid "7445A43F-444F-B2D3-4315-2AA013D2E0B6"; + addAttr -ci true -sn "cbId" -ln "cbId" -dt "string"; + setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:440654b3dfe4"; +createNode mesh -n "pSphere1_GEOShape1" -p "pSphere1_GEO"; + rename -uid "7C731260-45C6-339E-07BF-359446B08EA1"; + addAttr -ci true -sn "cbId" -ln "cbId" -dt "string"; + setAttr -k off ".v"; + setAttr ".vir" yes; + setAttr ".vif" yes; + setAttr ".uvst[0].uvsn" -type "string" "map1"; + setAttr ".cuvs" -type "string" "map1"; + setAttr ".dcc" -type "string" "Ambient+Diffuse"; + setAttr ".covm[0]" 0 1 1; + setAttr ".cdvm[0]" 0 1 1; + setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:bf8e49bb98ec"; +createNode transform -n "pDisc1"; + rename -uid "DED70CCF-4C19-16E4-9E5D-66A05037BA47"; + addAttr -ci true -sn "cbId" -ln "cbId" -dt "string"; + setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:90e762703f08"; +createNode mesh -n "pDiscShape1" -p "pDisc1"; + rename -uid "E1FCDCCF-4DE1-D3B9-C4F8-3285F1CF5B25"; + addAttr -ci true -sn "cbId" -ln "cbId" -dt "string"; + setAttr -k off ".v"; + setAttr ".vir" yes; + setAttr ".vif" yes; + setAttr ".uvst[0].uvsn" -type "string" "map1"; + setAttr ".cuvs" -type "string" "map1"; + setAttr ".dcc" -type "string" "Ambient+Diffuse"; + setAttr ".covm[0]" 0 1 1; + setAttr ".cdvm[0]" 0 1 1; + setAttr ".ai_translator" -type "string" "polymesh"; + setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:4ee3da11a1a4"; +createNode transform -n "persp1"; + rename -uid "292F1351-4E41-A890-D6D5-A5A4F7D94C76"; + setAttr ".t" -type "double3" 3.7889010960863949 2.8416759114717678 3.7889010364817537 ; + setAttr ".r" -type "double3" -27.938352729602379 44.999999999999972 -5.172681101354183e-14 ; +createNode camera -n "perspShape1" -p "persp1"; + rename -uid "9277418C-43C8-5064-A7C6-64AC829A76F2"; + setAttr -k off ".v"; + setAttr ".ovr" 1.3; + setAttr ".fl" 34.999999999999993; + setAttr ".coi" 6.0652013012246453; + setAttr ".imn" -type "string" "persp1"; + setAttr ".den" -type "string" "persp1_depth"; + setAttr ".man" -type "string" "persp1_mask"; + setAttr ".tp" -type "double3" -1.1920928955078125e-07 0 -1.7881393432617188e-07 ; + setAttr ".hc" -type "string" "viewSet -p %camera"; + setAttr ".dr" yes; +createNode lightLinker -s -n "lightLinker1"; + rename -uid "6B9ADCD4-41B9-5BCC-826D-4A874A278510"; + setAttr -s 2 ".lnk"; + setAttr -s 2 ".slnk"; +createNode shapeEditorManager -n "shapeEditorManager"; + rename -uid "5B4518C5-46C9-6921-690E-EFAF77B21A36"; +createNode poseInterpolatorManager -n "poseInterpolatorManager"; + rename -uid "8518F293-4F06-BFF2-647A-72A099FBF025"; +createNode displayLayerManager -n "layerManager"; + rename -uid "04D880D5-4D86-0C58-CA3D-208ABE3E1E16"; +createNode displayLayer -n "defaultLayer"; + rename -uid "4A776D1B-401F-7069-1C74-A7AAE84CEE03"; +createNode renderLayerManager -n "renderLayerManager"; + rename -uid "B719B8BE-46BF-12E6-BEBA-B0AD4DBDBA87"; + setAttr -s 2 ".rlmi[1]" 1; + setAttr -s 2 ".rlmi"; +createNode renderLayer -n "defaultRenderLayer"; + rename -uid "B134920D-4508-23BD-A6CA-11B43DE03F53"; + setAttr ".g" yes; +createNode renderSetup -n "renderSetup"; + rename -uid "9A8F0D15-41AB-CA70-C2D8-B78840BF9BC1"; +createNode polySphere -n "polySphere1"; + rename -uid "DA319706-4ACF-B15C-53B2-48AC80D202EA"; +createNode objectSet -n "modelMain"; + rename -uid "A76AD4F8-4CF5-AA0D-4E98-BABEE6454CC3"; + addAttr -ci true -sn "cbId" -ln "cbId" -dt "string"; + addAttr -ci true -sn "id" -ln "id" -dt "string"; + addAttr -ci true -sn "family" -ln "family" -dt "string"; + addAttr -ci true -sn "subset" -ln "subset" -dt "string"; + addAttr -ci true -sn "active" -ln "active" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "creator_identifier" -ln "creator_identifier" -dt "string"; + addAttr -ci true -sn "variant" -ln "variant" -dt "string"; + addAttr -ci true -sn "asset" -ln "asset" -dt "string"; + addAttr -ci true -sn "task" -ln "task" -dt "string"; + addAttr -ci true -sn "instance_id" -ln "instance_id" -dt "string"; + addAttr -ci true -sn "writeColorSets" -ln "writeColorSets" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "writeFaceSets" -ln "writeFaceSets" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "includeParentHierarchy" -ln "includeParentHierarchy" -min + 0 -max 1 -at "bool"; + addAttr -ci true -sn "attr" -ln "attr" -dt "string"; + addAttr -ci true -sn "attrPrefix" -ln "attrPrefix" -dt "string"; + addAttr -ci true -sn "publish_attributes" -ln "publish_attributes" -dt "string"; + addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" + -dt "string"; + setAttr ".ihi" 0; + setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:7364ea6776c9"; + setAttr ".id" -type "string" "pyblish.avalon.instance"; + setAttr ".family" -type "string" "model"; + setAttr ".subset" -type "string" "modelMain"; + setAttr -cb on ".active" yes; + setAttr ".creator_identifier" -type "string" "io.openpype.creators.maya.model"; + setAttr ".variant" -type "string" "Main"; + setAttr ".asset" -type "string" "test_asset"; + setAttr ".task" -type "string" "test_task"; + setAttr ".instance_id" -type "string" "6889d3db-b813-43db-96de-9ba555dc4472"; + setAttr -cb on ".writeColorSets"; + setAttr -cb on ".writeFaceSets"; + setAttr -cb on ".includeParentHierarchy"; + setAttr ".attr" -type "string" ""; + setAttr ".attrPrefix" -type "string" ""; + setAttr ".publish_attributes" -type "string" "{\"ValidateNodeIDsRelated\": {\"active\": true}, \"ValidateTransformNamingSuffix\": {\"active\": true}, \"ValidateColorSets\": {\"active\": true}, \"ValidateMeshArnoldAttributes\": {\"active\": true}, \"ValidateMeshHasUVs\": {\"active\": true}, \"ValidateMeshNonZeroEdgeLength\": {\"active\": true}, \"ExtractModel\": {\"active\": true}}"; + setAttr ".__creator_attributes_keys" -type "string" "writeColorSets,writeFaceSets,includeParentHierarchy,attr,attrPrefix"; +createNode script -n "uiConfigurationScriptNode"; + rename -uid "4B7AFB53-452E-E870-63E1-CCA1DD6EAF13"; + setAttr ".b" -type "string" ( + "// Maya Mel UI Configuration File.\n//\n// This script is machine generated. Edit at your own risk.\n//\n//\n\nglobal string $gMainPane;\nif (`paneLayout -exists $gMainPane`) {\n\n\tglobal int $gUseScenePanelConfig;\n\tint $useSceneConfig = $gUseScenePanelConfig;\n\tint $nodeEditorPanelVisible = stringArrayContains(\"nodeEditorPanel1\", `getPanel -vis`);\n\tint $nodeEditorWorkspaceControlOpen = (`workspaceControl -exists nodeEditorPanel1Window` && `workspaceControl -q -visible nodeEditorPanel1Window`);\n\tint $menusOkayInPanels = `optionVar -q allowMenusInPanels`;\n\tint $nVisPanes = `paneLayout -q -nvp $gMainPane`;\n\tint $nPanes = 0;\n\tstring $editorName;\n\tstring $panelName;\n\tstring $itemFilterName;\n\tstring $panelConfig;\n\n\t//\n\t// get current state of the UI\n\t//\n\tsceneUIReplacement -update $gMainPane;\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Top View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Top View\")) -mbv $menusOkayInPanels $panelName;\n" + + "\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"|top\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n" + + " -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n" + + " -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n" + + "\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Side View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Side View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"|side\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n" + + " -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n" + + " -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n" + + " -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Front View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Front View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"|front\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n" + + " -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n" + + " -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n" + + " -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Persp View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Persp View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"|persp\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n" + + " -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n" + + " -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n" + + " -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1312\n -height 732\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"outlinerPanel\" (localizedPanelLabel(\"ToggledOutliner\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\toutlinerPanel -edit -l (localizedPanelLabel(\"ToggledOutliner\")) -mbv $menusOkayInPanels $panelName;\n" + + "\t\t$editorName = $panelName;\n outlinerEditor -e \n -docTag \"isolOutln_fromSeln\" \n -showShapes 0\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 1\n -showReferenceMembers 1\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -organizeByClip 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showParentContainers 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n" + + " -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -isSet 0\n -isSetMember 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -selectCommand \"print(\\\"\\\")\" \n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 1\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n -renderFilterIndex 0\n" + + " -selectionOrder \"chronological\" \n -expandAttribute 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"outlinerPanel\" (localizedPanelLabel(\"Outliner\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\toutlinerPanel -edit -l (localizedPanelLabel(\"Outliner\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n outlinerEditor -e \n -showShapes 0\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -organizeByClip 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n" + + " -showParentContainers 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n" + + " -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"graphEditor\" (localizedPanelLabel(\"Graph Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Graph Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n" + + " -organizeByClip 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 1\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showParentContainers 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 0\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 1\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 1\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n" + + " -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 1\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"GraphEd\");\n animCurveEditor -e \n -displayValues 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -showPlayRangeShades \"on\" \n -lockPlayRangeShades \"off\" \n -smoothness \"fine\" \n -resultSamples 1.041667\n" + + " -resultScreenSamples 0\n -resultUpdate \"delayed\" \n -showUpstreamCurves 1\n -keyMinScale 1\n -stackedCurvesMin -1\n -stackedCurvesMax 1\n -stackedCurvesSpace 0.2\n -preSelectionHighlight 0\n -constrainDrag 0\n -valueLinesToggle 1\n -highlightAffectedCurves 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dopeSheetPanel\" (localizedPanelLabel(\"Dope Sheet\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Dope Sheet\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n" + + " -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -organizeByClip 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showParentContainers 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 0\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 1\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"0\" \n -showSetMembers 0\n" + + " -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"DopeSheetEd\");\n dopeSheetEditor -e \n -displayValues 0\n -snapTime \"integer\" \n" + + " -snapValue \"none\" \n -outliner \"dopeSheetPanel1OutlineEd\" \n -showSummary 1\n -showScene 0\n -hierarchyBelow 0\n -showTicks 1\n -selectionWindow 0 0 0 0 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"timeEditorPanel\" (localizedPanelLabel(\"Time Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Time Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"clipEditorPanel\" (localizedPanelLabel(\"Trax Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Trax Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = clipEditorNameFromPanel($panelName);\n" + + " clipEditor -e \n -displayValues 0\n -snapTime \"none\" \n -snapValue \"none\" \n -initialized 0\n -manageSequencer 0 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"sequenceEditorPanel\" (localizedPanelLabel(\"Camera Sequencer\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Camera Sequencer\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = sequenceEditorNameFromPanel($panelName);\n clipEditor -e \n -displayValues 0\n -snapTime \"none\" \n -snapValue \"none\" \n -initialized 0\n -manageSequencer 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"hyperGraphPanel\" (localizedPanelLabel(\"Hypergraph Hierarchy\")) `;\n" + + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Hypergraph Hierarchy\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"HyperGraphEd\");\n hyperGraph -e \n -graphLayoutStyle \"hierarchicalLayout\" \n -orientation \"horiz\" \n -mergeConnections 0\n -zoom 1\n -animateTransition 0\n -showRelationships 1\n -showShapes 0\n -showDeformers 0\n -showExpressions 0\n -showConstraints 0\n -showConnectionFromSelected 0\n -showConnectionToSelected 0\n -showConstraintLabels 0\n -showUnderworld 0\n -showInvisible 0\n -transitionFrames 1\n -opaqueContainers 0\n -freeform 0\n -imagePosition 0 0 \n -imageScale 1\n -imageEnabled 0\n -graphType \"DAG\" \n" + + " -heatMapDisplay 0\n -updateSelection 1\n -updateNodeAdded 1\n -useDrawOverrideColor 0\n -limitGraphTraversal -1\n -range 0 0 \n -iconSize \"smallIcons\" \n -showCachedConnections 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"hyperShadePanel\" (localizedPanelLabel(\"Hypershade\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Hypershade\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"visorPanel\" (localizedPanelLabel(\"Visor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Visor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n" + + "\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"nodeEditorPanel\" (localizedPanelLabel(\"Node Editor\")) `;\n\tif ($nodeEditorPanelVisible || $nodeEditorWorkspaceControlOpen) {\n\t\tif (\"\" == $panelName) {\n\t\t\tif ($useSceneConfig) {\n\t\t\t\t$panelName = `scriptedPanel -unParent -type \"nodeEditorPanel\" -l (localizedPanelLabel(\"Node Editor\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"NodeEditorEd\");\n nodeEditor -e \n -allAttributes 0\n -allNodes 0\n -autoSizeNodes 1\n -consistentNameSize 1\n -createNodeCommand \"nodeEdCreateNodeCommand\" \n -connectNodeOnCreation 0\n -connectOnDrop 0\n -copyConnectionsOnPaste 0\n -connectionStyle \"bezier\" \n -defaultPinnedState 0\n -additiveGraphingMode 0\n -settingsChangedCallback \"nodeEdSyncControls\" \n -traversalDepthLimit -1\n -keyPressCommand \"nodeEdKeyPressCommand\" \n" + + " -nodeTitleMode \"name\" \n -gridSnap 0\n -gridVisibility 1\n -crosshairOnEdgeDragging 0\n -popupMenuScript \"nodeEdBuildPanelMenus\" \n -showNamespace 1\n -showShapes 1\n -showSGShapes 0\n -showTransforms 1\n -useAssets 1\n -syncedSelection 1\n -extendToShapes 1\n -editorMode \"default\" \n -hasWatchpoint 0\n $editorName;\n\t\t\t}\n\t\t} else {\n\t\t\t$label = `panel -q -label $panelName`;\n\t\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Node Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"NodeEditorEd\");\n nodeEditor -e \n -allAttributes 0\n -allNodes 0\n -autoSizeNodes 1\n -consistentNameSize 1\n -createNodeCommand \"nodeEdCreateNodeCommand\" \n -connectNodeOnCreation 0\n -connectOnDrop 0\n" + + " -copyConnectionsOnPaste 0\n -connectionStyle \"bezier\" \n -defaultPinnedState 0\n -additiveGraphingMode 0\n -settingsChangedCallback \"nodeEdSyncControls\" \n -traversalDepthLimit -1\n -keyPressCommand \"nodeEdKeyPressCommand\" \n -nodeTitleMode \"name\" \n -gridSnap 0\n -gridVisibility 1\n -crosshairOnEdgeDragging 0\n -popupMenuScript \"nodeEdBuildPanelMenus\" \n -showNamespace 1\n -showShapes 1\n -showSGShapes 0\n -showTransforms 1\n -useAssets 1\n -syncedSelection 1\n -extendToShapes 1\n -editorMode \"default\" \n -hasWatchpoint 0\n $editorName;\n\t\t\tif (!$useSceneConfig) {\n\t\t\t\tpanel -e -l $label $panelName;\n\t\t\t}\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"createNodePanel\" (localizedPanelLabel(\"Create Node\")) `;\n" + + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Create Node\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"polyTexturePlacementPanel\" (localizedPanelLabel(\"UV Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"UV Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"renderWindowPanel\" (localizedPanelLabel(\"Render View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Render View\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"shapePanel\" (localizedPanelLabel(\"Shape Editor\")) `;\n" + + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tshapePanel -edit -l (localizedPanelLabel(\"Shape Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"posePanel\" (localizedPanelLabel(\"Pose Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tposePanel -edit -l (localizedPanelLabel(\"Pose Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dynRelEdPanel\" (localizedPanelLabel(\"Dynamic Relationships\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Dynamic Relationships\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"relationshipPanel\" (localizedPanelLabel(\"Relationship Editor\")) `;\n" + + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Relationship Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"referenceEditorPanel\" (localizedPanelLabel(\"Reference Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Reference Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"componentEditorPanel\" (localizedPanelLabel(\"Component Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Component Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dynPaintScriptedPanelType\" (localizedPanelLabel(\"Paint Effects\")) `;\n" + + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Paint Effects\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"scriptEditorPanel\" (localizedPanelLabel(\"Script Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Script Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"profilerPanel\" (localizedPanelLabel(\"Profiler Tool\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Profiler Tool\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"contentBrowserPanel\" (localizedPanelLabel(\"Content Browser\")) `;\n" + + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Content Browser\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"Stereo\" (localizedPanelLabel(\"Stereo\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Stereo\")) -mbv $menusOkayInPanels $panelName;\n{ string $editorName = ($panelName+\"Editor\");\n stereoCameraView -e \n -camera \"|persp\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"wireframe\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 1\n" + + " -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 4 4 \n -bumpResolution 4 4 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n" + + " -lowQualityLighting 0\n -maximumNumHardwareLights 0\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n" + + " -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 0\n -height 0\n -sceneRenderFilter 0\n -displayMode \"centerEye\" \n -viewColor 0 0 0 1 \n -useCustomBackground 1\n $editorName;\n stereoCameraView -e -viewSelected 0 $editorName;\n stereoCameraView -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName; };\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\tif ($useSceneConfig) {\n string $configName = `getPanel -cwl (localizedPanelLabel(\"Current Layout\"))`;\n" + + " if (\"\" != $configName) {\n\t\t\tpanelConfiguration -edit -label (localizedPanelLabel(\"Current Layout\")) \n\t\t\t\t-userCreated false\n\t\t\t\t-defaultImage \"vacantCell.xP:/\"\n\t\t\t\t-image \"\"\n\t\t\t\t-sc false\n\t\t\t\t-configString \"global string $gMainPane; paneLayout -e -cn \\\"single\\\" -ps 1 100 100 $gMainPane;\"\n\t\t\t\t-removeAllPanels\n\t\t\t\t-ap false\n\t\t\t\t\t(localizedPanelLabel(\"Persp View\")) \n\t\t\t\t\t\"modelPanel\"\n" + + "\t\t\t\t\t\"$panelName = `modelPanel -unParent -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels `;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera persp` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 16384\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -controllers 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -greasePencils 1\\n -shadows 0\\n -captureSequenceNumber -1\\n -width 1312\\n -height 732\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName;\\nmodelEditor -e \\n -pluginObjects \\\"gpuCacheDisplayFilter\\\" 1 \\n $editorName\"\n" + + "\t\t\t\t\t\"modelPanel -edit -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels $panelName;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera persp` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 16384\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -controllers 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -greasePencils 1\\n -shadows 0\\n -captureSequenceNumber -1\\n -width 1312\\n -height 732\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName;\\nmodelEditor -e \\n -pluginObjects \\\"gpuCacheDisplayFilter\\\" 1 \\n $editorName\"\n" + + "\t\t\t\t$configName;\n\n setNamedPanelLayout (localizedPanelLabel(\"Current Layout\"));\n }\n\n panelHistory -e -clear mainPanelHistory;\n sceneUIReplacement -clear;\n\t}\n\n\ngrid -spacing 5 -size 12 -divisions 5 -displayAxes yes -displayGridLines yes -displayDivisionLines yes -displayPerspectiveLabels no -displayOrthographicLabels no -displayAxesBold yes -perspectiveLabelPosition axis -orthographicLabelPosition edge;\nviewManip -drawCompass 0 -compassAngle 0 -frontParameters \"\" -homeParameters \"\" -selectionLockParameters \"\";\n}\n"); + setAttr ".st" 3; +createNode script -n "sceneConfigurationScriptNode"; + rename -uid "72B19BC2-43A2-E229-0A73-2CB861A291D1"; + setAttr ".b" -type "string" "playbackOptions -min 1000 -max 1001 -ast 1000 -aet 1001 "; + setAttr ".st" 6; +createNode polyDisc -n "polyDisc1"; + rename -uid "9ED8A7BD-4FFD-6107-4322-35ACD1D3AC42"; +createNode aiOptions -s -n "defaultArnoldRenderOptions"; + rename -uid "51BB3D7A-4C7D-FCDD-1B21-D89934107F98"; + setAttr ".skip_license_check" yes; +createNode aiAOVFilter -s -n "defaultArnoldFilter"; + rename -uid "989A5992-46C8-0CB2-B2B8-4E868F31FEA8"; + setAttr ".ai_translator" -type "string" "gaussian"; +createNode aiAOVDriver -s -n "defaultArnoldDriver"; + rename -uid "B8469AD8-47C8-9EF1-FE5E-5AB50ABC1536"; + setAttr ".merge_AOVs" yes; + setAttr ".ai_translator" -type "string" "exr"; +createNode aiAOVDriver -s -n "defaultArnoldDisplayDriver"; + rename -uid "21D4F4CD-4D78-001C-610D-798402CD7CF0"; + setAttr ".output_mode" 0; + setAttr ".ai_translator" -type "string" "maya"; +createNode objectSet -n "workfileMain"; + rename -uid "3C9B5D6F-4579-8E3B-5B7D-4C88865A1C68"; + addAttr -ci true -sn "cbId" -ln "cbId" -dt "string"; + addAttr -ci true -sn "id" -ln "id" -dt "string"; + addAttr -ci true -sn "family" -ln "family" -dt "string"; + addAttr -ci true -sn "subset" -ln "subset" -dt "string"; + addAttr -ci true -sn "active" -ln "active" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "creator_identifier" -ln "creator_identifier" -dt "string"; + addAttr -ci true -sn "variant" -ln "variant" -dt "string"; + addAttr -ci true -sn "asset" -ln "asset" -dt "string"; + addAttr -ci true -sn "task" -ln "task" -dt "string"; + addAttr -ci true -sn "instance_id" -ln "instance_id" -dt "string"; + addAttr -ci true -sn "publish_attributes" -ln "publish_attributes" -dt "string"; + addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" + -dt "string"; + setAttr ".ihi" 0; + setAttr ".hio" yes; + setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:30d256dac64c"; + setAttr ".id" -type "string" "pyblish.avalon.instance"; + setAttr ".family" -type "string" "workfile"; + setAttr ".subset" -type "string" "workfileTest_task"; + setAttr -cb on ".active" yes; + setAttr ".creator_identifier" -type "string" "io.openpype.creators.maya.workfile"; + setAttr ".variant" -type "string" "Main"; + setAttr ".asset" -type "string" "test_asset"; + setAttr ".task" -type "string" "test_task"; + setAttr ".instance_id" -type "string" "911dc92a-ad29-41e5-bbf9-733d56174fb9"; + setAttr ".publish_attributes" -type "string" "{\"ExtractImportReference\": {\"active\": false}}"; + setAttr ".__creator_attributes_keys" -type "string" ""; +createNode objectSet -n "renderingMain"; + rename -uid "8A999C2F-4922-B15D-8D5C-45A16465B69F"; + addAttr -ci true -sn "pre_creator_identifier" -ln "pre_creator_identifier" -dt "string"; + addAttr -ci true -sn "cbId" -ln "cbId" -dt "string"; + setAttr ".ihi" 0; + setAttr ".pre_creator_identifier" -type "string" "io.openpype.creators.maya.renderlayer"; + setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:042447475732"; +createNode renderSetupLayer -n "Main"; + rename -uid "2202E438-4CEF-F64E-737C-F48C65E31126"; + addAttr -ci true -sn "es" -ln "expandedState" -min 0 -max 1 -at "bool"; + setAttr ".es" yes; +createNode renderLayer -n "rs_Main"; + rename -uid "DF0259B1-4F96-DA7E-C74F-B599FBE15C18"; + setAttr ".do" 1; +createNode collection -n "defaultCollection"; + rename -uid "E5014237-4DA9-6FC0-633D-69AFA56161B3"; + addAttr -ci true -sn "es" -ln "expandedState" -min 0 -max 1 -at "bool"; + setAttr ".es" yes; +createNode simpleSelector -n "defaultCollectionSelector"; + rename -uid "7CA2F6D8-483C-B020-BC03-EF9563A52163"; + setAttr ".pat" -type "string" "*"; +createNode objectSet -n "_renderingMain:Main"; + rename -uid "1EEC3A3B-49CF-0C79-5340-39805174FB8A"; + addAttr -s false -ci true -sn "renderlayer" -ln "renderlayer" -at "message"; + addAttr -ci true -sn "id" -ln "id" -dt "string"; + addAttr -ci true -sn "family" -ln "family" -dt "string"; + addAttr -ci true -sn "subset" -ln "subset" -dt "string"; + addAttr -ci true -sn "active" -ln "active" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "creator_identifier" -ln "creator_identifier" -dt "string"; + addAttr -ci true -sn "variant" -ln "variant" -dt "string"; + addAttr -ci true -sn "asset" -ln "asset" -dt "string"; + addAttr -ci true -sn "task" -ln "task" -dt "string"; + addAttr -ci true -sn "instance_id" -ln "instance_id" -dt "string"; + addAttr -ci true -sn "review" -ln "review" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "extendFrames" -ln "extendFrames" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "overrideExistingFrame" -ln "overrideExistingFrame" -min 0 + -max 1 -at "bool"; + addAttr -ci true -sn "tileRendering" -ln "tileRendering" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "tilesX" -ln "tilesX" -at "long"; + addAttr -ci true -sn "tilesY" -ln "tilesY" -at "long"; + addAttr -ci true -sn "convertToScanline" -ln "convertToScanline" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "useReferencedAovs" -ln "useReferencedAovs" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "renderSetupIncludeLights" -ln "renderSetupIncludeLights" -min + 0 -max 1 -at "bool"; + addAttr -ci true -sn "publish_attributes" -ln "publish_attributes" -dt "string"; + addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" + -dt "string"; + addAttr -ci true -sn "cbId" -ln "cbId" -dt "string"; + setAttr ".ihi" 0; + setAttr ".id" -type "string" "pyblish.avalon.instance"; + setAttr ".family" -type "string" "renderlayer"; + setAttr ".subset" -type "string" "renderMain"; + setAttr -cb on ".active" yes; + setAttr ".creator_identifier" -type "string" "io.openpype.creators.maya.renderlayer"; + setAttr ".variant" -type "string" "Main"; + setAttr ".asset" -type "string" "test_asset"; + setAttr ".task" -type "string" "test_task"; + setAttr ".instance_id" -type "string" "8a9cfb85-9602-4e5e-a4bc-27a2986bae7f"; + setAttr -cb on ".review" yes; + setAttr -cb on ".extendFrames"; + setAttr -cb on ".overrideExistingFrame" yes; + setAttr -cb on ".tileRendering"; + setAttr -cb on ".tilesX" 2; + setAttr -cb on ".tilesY" 2; + setAttr -cb on ".convertToScanline"; + setAttr -cb on ".useReferencedAovs"; + setAttr -cb on ".renderSetupIncludeLights" yes; + setAttr ".publish_attributes" -type "string" "{\"CollectDeadlinePools\": {\"primaryPool\": \"\", \"secondaryPool\": \"\"}, \"ValidateDeadlinePools\": {\"active\": true}, \"ValidateFrameRange\": {\"active\": true}, \"ExtractImportReference\": {\"active\": false}, \"MayaSubmitDeadline\": {\"priority\": 50, \"chunkSize\": 1, \"machineList\": \"\", \"whitelist\": false, \"tile_priority\": 50, \"strict_error_checking\": true}, \"ProcessSubmittedJobOnFarm\": {\"publishJobState\": \"Active\"}}"; + setAttr ".__creator_attributes_keys" -type "string" "review,extendFrames,overrideExistingFrame,tileRendering,tilesX,tilesY,convertToScanline,useReferencedAovs,renderSetupIncludeLights"; + setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:69960f336351"; +select -ne :time1; + setAttr ".o" 1001; + setAttr ".unw" 1001; +select -ne :hardwareRenderingGlobals; + setAttr ".otfna" -type "stringArray" 22 "NURBS Curves" "NURBS Surfaces" "Polygons" "Subdiv Surface" "Particles" "Particle Instance" "Fluids" "Strokes" "Image Planes" "UI" "Lights" "Cameras" "Locators" "Joints" "IK Handles" "Deformers" "Motion Trails" "Components" "Hair Systems" "Follicles" "Misc. UI" "Ornaments" ; + setAttr ".otfva" -type "Int32Array" 22 0 1 1 1 1 1 + 1 1 1 0 0 0 0 0 0 0 0 0 + 0 0 0 0 ; + setAttr ".fprt" yes; +select -ne :renderPartition; + setAttr -s 2 ".st"; +select -ne :renderGlobalsList1; +select -ne :defaultShaderList1; + setAttr -s 5 ".s"; +select -ne :postProcessList1; + setAttr -s 2 ".p"; +select -ne :defaultRenderingList1; + setAttr -s 2 ".r"; +select -ne :standardSurface1; + setAttr ".b" 0.80000001192092896; + setAttr ".bc" -type "float3" 1 1 1 ; + setAttr ".s" 0.20000000298023224; +select -ne :initialShadingGroup; + setAttr -s 2 ".dsm"; + setAttr ".ro" yes; +select -ne :initialParticleSE; + setAttr ".ro" yes; +select -ne :defaultRenderGlobals; + addAttr -ci true -h true -sn "dss" -ln "defaultSurfaceShader" -dt "string"; + setAttr ".ren" -type "string" "arnold"; + setAttr ".outf" 51; + setAttr ".imfkey" -type "string" "exr"; + setAttr ".an" yes; + setAttr ".fs" 1001; + setAttr ".ef" 1001; + setAttr ".oft" -type "string" ""; + setAttr ".pff" yes; + setAttr ".ifp" -type "string" "//"; + setAttr ".rv" -type "string" ""; + setAttr ".pram" -type "string" ""; + setAttr ".poam" -type "string" ""; + setAttr ".prlm" -type "string" ""; + setAttr ".polm" -type "string" ""; + setAttr ".prm" -type "string" ""; + setAttr ".pom" -type "string" ""; + setAttr ".dss" -type "string" "lambert1"; +select -ne :defaultResolution; + setAttr ".w" 10; + setAttr ".h" 6; + setAttr ".pa" 1; + setAttr ".al" yes; + setAttr ".dar" 1.6666666269302368; +select -ne :defaultColorMgtGlobals; + setAttr ".cfe" yes; + setAttr ".cfp" -type "string" "/OCIO-configs/Maya-legacy/config.ocio"; + setAttr ".vtn" -type "string" "sRGB gamma (legacy)"; + setAttr ".vn" -type "string" "sRGB gamma"; + setAttr ".dn" -type "string" "legacy"; + setAttr ".wsn" -type "string" "scene-linear Rec 709/sRGB"; + setAttr ".ovt" no; + setAttr ".povt" no; + setAttr ".otn" -type "string" "sRGB gamma (legacy)"; + setAttr ".potn" -type "string" "sRGB gamma (legacy)"; +select -ne :hardwareRenderGlobals; + setAttr ".ctrs" 256; + setAttr ".btrs" 512; +select -ne :ikSystem; + setAttr -s 4 ".sol"; +connectAttr "rs_Main.ri" ":persp.rlio[0]"; +connectAttr "rs_Main.ri" ":top.rlio[0]"; +connectAttr "rs_Main.ri" ":front.rlio[0]"; +connectAttr "rs_Main.ri" ":side.rlio[0]"; +connectAttr "rs_Main.ri" "pSphere1_GEO.rlio[0]"; +connectAttr "polySphere1.out" "pSphere1_GEOShape1.i"; +connectAttr "rs_Main.ri" "pDisc1.rlio[0]"; +connectAttr "polyDisc1.output" "pDiscShape1.i"; +connectAttr "rs_Main.ri" "persp1.rlio[0]"; +relationship "link" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message"; +relationship "link" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message"; +connectAttr "layerManager.dli[0]" "defaultLayer.id"; +connectAttr "renderLayerManager.rlmi[0]" "defaultRenderLayer.rlid"; +connectAttr "Main.msg" "renderSetup.frl"; +connectAttr "Main.msg" "renderSetup.lrl"; +connectAttr "pSphere1_GEO.iog" "modelMain.dsm" -na; +connectAttr ":defaultArnoldDisplayDriver.msg" ":defaultArnoldRenderOptions.drivers" + -na; +connectAttr ":defaultArnoldFilter.msg" ":defaultArnoldRenderOptions.filt"; +connectAttr ":defaultArnoldDriver.msg" ":defaultArnoldRenderOptions.drvr"; +connectAttr "_renderingMain:Main.msg" "renderingMain.dnsm" -na; +connectAttr "rs_Main.msg" "Main.lrl"; +connectAttr "renderSetup.lit" "Main.pls"; +connectAttr "defaultCollection.msg" "Main.cl"; +connectAttr "defaultCollection.msg" "Main.ch"; +connectAttr "renderLayerManager.rlmi[1]" "rs_Main.rlid"; +connectAttr "defaultCollectionSelector.c" "defaultCollection.sel"; +connectAttr "Main.lit" "defaultCollection.pls"; +connectAttr "Main.nic" "defaultCollection.pic"; +connectAttr "Main.msg" "_renderingMain:Main.renderlayer"; +connectAttr "defaultRenderLayer.msg" ":defaultRenderingList1.r" -na; +connectAttr "rs_Main.msg" ":defaultRenderingList1.r" -na; +connectAttr "pSphere1_GEOShape1.iog" ":initialShadingGroup.dsm" -na; +connectAttr "pDiscShape1.iog" ":initialShadingGroup.dsm" -na; +// End of test_project_test_asset_test_task_v001.ma diff --git a/tests/integration/hosts/maya/expected/test_project/test_asset/work/test_task/test_project_test_asset_test_task_v002.ma b/tests/integration/hosts/maya/expected/test_project/test_asset/work/test_task/test_project_test_asset_test_task_v002.ma new file mode 100644 index 00000000000..87fe4e4aa0a --- /dev/null +++ b/tests/integration/hosts/maya/expected/test_project/test_asset/work/test_task/test_project_test_asset_test_task_v002.ma @@ -0,0 +1,436 @@ +//Maya ASCII 2024 scene +//Name: test_project_test_asset_test_task_v002.ma +//Last modified: Tue, Sep 19, 2023 03:32:13 PM +//Codeset: 1252 +requires maya "2024"; +requires -nodeType "aiOptions" -nodeType "aiAOVDriver" -nodeType "aiAOVFilter" "mtoa" "5.3.0"; +requires -nodeType "simpleSelector" -nodeType "renderSetupLayer" -nodeType "renderSetup" + -nodeType "collection" "renderSetup.py" "1.0"; +requires -nodeType "polyDisc" "modelingToolkit" "0.0.0.0"; +requires "stereoCamera" "10.0"; +currentUnit -l centimeter -a degree -t pal; +fileInfo "application" "maya"; +fileInfo "product" "Maya 2024"; +fileInfo "version" "2024"; +fileInfo "cutIdentifier" "202302170737-4500172811"; +fileInfo "osv" "Windows 10 Pro v2009 (Build: 19045)"; +fileInfo "license" "education"; +fileInfo "UUID" "EE32580D-4D56-AA7C-A321-50AB519C5D75"; +fileInfo "OpenPypeContext" "eyJwdWJsaXNoX2F0dHJpYnV0ZXMiOiB7IlZhbGlkYXRlQ29udGFpbmVycyI6IHsiYWN0aXZlIjogdHJ1ZX19fQ=="; +createNode transform -s -n "persp"; + rename -uid "D52C935B-47C9-D868-A875-D799DD17B3A1"; + setAttr ".v" no; + setAttr ".t" -type "double3" 26.953352922736947 24.362683487437064 26.983403389430531 ; + setAttr ".r" -type "double3" 1064.7698975365424 54.173034578109736 1075.1660763544442 ; + setAttr ".rp" -type "double3" -2.0401242849359917e-14 2.2609331405046354e-14 -44.821869662029947 ; + setAttr ".rpt" -type "double3" -27.999999999999989 -21.000000000000025 16.82186966202995 ; +createNode camera -s -n "perspShape" -p "persp"; + rename -uid "2399E6C0-490F-BA1F-485F-5AA8A01D27BC"; + setAttr -k off ".v" no; + setAttr ".rnd" no; + setAttr ".fl" 34.999999999999993; + setAttr ".coi" 46.895362757145833; + setAttr ".imn" -type "string" "persp"; + setAttr ".den" -type "string" "persp_depth"; + setAttr ".man" -type "string" "persp_mask"; + setAttr ".hc" -type "string" "viewSet -p %camera"; + setAttr ".ai_translator" -type "string" "perspective"; +createNode transform -s -n "top"; + rename -uid "415C7426-413E-0FAE-FCC3-3DAED7443A52"; + setAttr ".v" no; + setAttr ".t" -type "double3" 0 1000.1 0 ; + setAttr ".r" -type "double3" 90 0 0 ; + setAttr ".rp" -type "double3" 0 0 -1000.1 ; + setAttr ".rpt" -type "double3" 0 -1000.1 1000.1 ; +createNode camera -s -n "topShape" -p "top"; + rename -uid "3BD0CF60-40DB-5278-5D8B-06ACBDA32122"; + setAttr -k off ".v" no; + setAttr ".rnd" no; + setAttr ".coi" 1000.1; + setAttr ".ow" 30; + setAttr ".imn" -type "string" "top"; + setAttr ".den" -type "string" "top_depth"; + setAttr ".man" -type "string" "top_mask"; + setAttr ".hc" -type "string" "viewSet -t %camera"; + setAttr ".o" yes; + setAttr ".ai_translator" -type "string" "orthographic"; +createNode transform -s -n "front"; + rename -uid "D83DD5CE-4FE0-AB1B-81B2-87A63F0B7A05"; + setAttr ".v" no; + setAttr ".t" -type "double3" 0 0 1000.1 ; + setAttr ".r" -type "double3" 180 0 0 ; + setAttr ".rp" -type "double3" 0 0 -1000.1 ; +createNode camera -s -n "frontShape" -p "front"; + rename -uid "23313CBA-42C2-0B3A-0FCF-EA965EAC5DEC"; + setAttr -k off ".v" no; + setAttr ".rnd" no; + setAttr ".coi" 1000.1; + setAttr ".ow" 30; + setAttr ".imn" -type "string" "front"; + setAttr ".den" -type "string" "front_depth"; + setAttr ".man" -type "string" "front_mask"; + setAttr ".hc" -type "string" "viewSet -f %camera"; + setAttr ".o" yes; + setAttr ".ai_translator" -type "string" "orthographic"; +createNode transform -s -n "side"; + rename -uid "F70F692C-4A0D-BE64-9EE4-A99B6FA2D56E"; + setAttr ".v" no; + setAttr ".t" -type "double3" 1000.1 0 0 ; + setAttr ".r" -type "double3" 180 -90 0 ; + setAttr ".rp" -type "double3" 0 0 -1000.1 ; + setAttr ".rpt" -type "double3" -1000.1 0 1000.1 ; +createNode camera -s -n "sideShape" -p "side"; + rename -uid "C05669C3-420E-CA11-E5FC-7EB64EF8B632"; + setAttr -k off ".v" no; + setAttr ".rnd" no; + setAttr ".coi" 1000.1; + setAttr ".ow" 30; + setAttr ".imn" -type "string" "side"; + setAttr ".den" -type "string" "side_depth"; + setAttr ".man" -type "string" "side_mask"; + setAttr ".hc" -type "string" "viewSet -s %camera"; + setAttr ".o" yes; + setAttr ".ai_translator" -type "string" "orthographic"; +createNode transform -n "pSphere1_GEO"; + rename -uid "7445A43F-444F-B2D3-4315-2AA013D2E0B6"; + addAttr -ci true -sn "cbId" -ln "cbId" -dt "string"; + setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:440654b3dfe4"; +createNode mesh -n "pSphere1_GEOShape1" -p "pSphere1_GEO"; + rename -uid "7C731260-45C6-339E-07BF-359446B08EA1"; + addAttr -ci true -sn "cbId" -ln "cbId" -dt "string"; + setAttr -k off ".v"; + setAttr ".vir" yes; + setAttr ".vif" yes; + setAttr ".uvst[0].uvsn" -type "string" "map1"; + setAttr ".cuvs" -type "string" "map1"; + setAttr ".dcc" -type "string" "Ambient+Diffuse"; + setAttr ".covm[0]" 0 1 1; + setAttr ".cdvm[0]" 0 1 1; + setAttr ".ndt" 0; + setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:bf8e49bb98ec"; +createNode transform -n "pDisc1"; + rename -uid "DED70CCF-4C19-16E4-9E5D-66A05037BA47"; + addAttr -ci true -sn "cbId" -ln "cbId" -dt "string"; + setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:90e762703f08"; +createNode mesh -n "pDiscShape1" -p "pDisc1"; + rename -uid "E1FCDCCF-4DE1-D3B9-C4F8-3285F1CF5B25"; + addAttr -ci true -sn "cbId" -ln "cbId" -dt "string"; + setAttr -k off ".v"; + setAttr ".vir" yes; + setAttr ".vif" yes; + setAttr ".uvst[0].uvsn" -type "string" "map1"; + setAttr ".cuvs" -type "string" "map1"; + setAttr ".dcc" -type "string" "Ambient+Diffuse"; + setAttr ".covm[0]" 0 1 1; + setAttr ".cdvm[0]" 0 1 1; + setAttr ".ndt" 0; + setAttr ".ai_translator" -type "string" "polymesh"; + setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:4ee3da11a1a4"; +createNode transform -n "persp1"; + rename -uid "292F1351-4E41-A890-D6D5-A5A4F7D94C76"; + setAttr ".t" -type "double3" 3.7889010960863949 2.8416759114717678 3.7889010364817537 ; + setAttr ".r" -type "double3" -27.938352729602379 44.999999999999972 -5.172681101354183e-14 ; +createNode camera -n "perspShape1" -p "persp1"; + rename -uid "9277418C-43C8-5064-A7C6-64AC829A76F2"; + setAttr -k off ".v"; + setAttr ".ovr" 1.3; + setAttr ".fl" 34.999999999999993; + setAttr ".coi" 6.0652013012246453; + setAttr ".imn" -type "string" "persp1"; + setAttr ".den" -type "string" "persp1_depth"; + setAttr ".man" -type "string" "persp1_mask"; + setAttr ".tp" -type "double3" -1.1920928955078125e-07 0 -1.7881393432617188e-07 ; + setAttr ".hc" -type "string" "viewSet -p %camera"; + setAttr ".dr" yes; +createNode lightLinker -s -n "lightLinker1"; + rename -uid "DE23EE64-42DE-81CD-D647-7BBB19BCBFA3"; + setAttr -s 2 ".lnk"; + setAttr -s 2 ".slnk"; +createNode shapeEditorManager -n "shapeEditorManager"; + rename -uid "BD03B23E-4D67-AF2D-851B-A9ABC29B43C4"; +createNode poseInterpolatorManager -n "poseInterpolatorManager"; + rename -uid "84F2093C-4C3A-51D2-E808-8F9C285E6515"; +createNode displayLayerManager -n "layerManager"; + rename -uid "358B01A7-4863-7070-F637-AC888D0F48F4"; +createNode displayLayer -n "defaultLayer"; + rename -uid "4A776D1B-401F-7069-1C74-A7AAE84CEE03"; + setAttr ".ufem" -type "stringArray" 0 ; +createNode renderLayerManager -n "renderLayerManager"; + rename -uid "5401FA40-4494-5536-F0B8-A6AC42B548AF"; + setAttr -s 2 ".rlmi[1]" 1; + setAttr -s 2 ".rlmi"; +createNode renderLayer -n "defaultRenderLayer"; + rename -uid "B134920D-4508-23BD-A6CA-11B43DE03F53"; + setAttr ".g" yes; +createNode renderSetup -n "renderSetup"; + rename -uid "9A8F0D15-41AB-CA70-C2D8-B78840BF9BC1"; +createNode polySphere -n "polySphere1"; + rename -uid "DA319706-4ACF-B15C-53B2-48AC80D202EA"; +createNode objectSet -n "modelMain"; + rename -uid "A76AD4F8-4CF5-AA0D-4E98-BABEE6454CC3"; + addAttr -ci true -sn "cbId" -ln "cbId" -dt "string"; + addAttr -ci true -sn "id" -ln "id" -dt "string"; + addAttr -ci true -sn "family" -ln "family" -dt "string"; + addAttr -ci true -sn "subset" -ln "subset" -dt "string"; + addAttr -ci true -sn "active" -ln "active" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "creator_identifier" -ln "creator_identifier" -dt "string"; + addAttr -ci true -sn "variant" -ln "variant" -dt "string"; + addAttr -ci true -sn "asset" -ln "asset" -dt "string"; + addAttr -ci true -sn "task" -ln "task" -dt "string"; + addAttr -ci true -sn "instance_id" -ln "instance_id" -dt "string"; + addAttr -ci true -sn "writeColorSets" -ln "writeColorSets" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "writeFaceSets" -ln "writeFaceSets" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "includeParentHierarchy" -ln "includeParentHierarchy" -min + 0 -max 1 -at "bool"; + addAttr -ci true -sn "attr" -ln "attr" -dt "string"; + addAttr -ci true -sn "attrPrefix" -ln "attrPrefix" -dt "string"; + addAttr -ci true -sn "publish_attributes" -ln "publish_attributes" -dt "string"; + addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" + -dt "string"; + setAttr ".ihi" 0; + setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:7364ea6776c9"; + setAttr ".id" -type "string" "pyblish.avalon.instance"; + setAttr ".family" -type "string" "model"; + setAttr ".subset" -type "string" "modelMain"; + setAttr -cb on ".active" yes; + setAttr ".creator_identifier" -type "string" "io.openpype.creators.maya.model"; + setAttr ".variant" -type "string" "Main"; + setAttr ".asset" -type "string" "test_asset"; + setAttr ".task" -type "string" "test_task"; + setAttr ".instance_id" -type "string" "6889d3db-b813-43db-96de-9ba555dc4472"; + setAttr -cb on ".writeColorSets"; + setAttr -cb on ".writeFaceSets"; + setAttr -cb on ".includeParentHierarchy"; + setAttr ".attr" -type "string" ""; + setAttr ".attrPrefix" -type "string" ""; + setAttr ".publish_attributes" -type "string" "{\"ValidateNodeIDsRelated\": {\"active\": true}, \"ValidateTransformNamingSuffix\": {\"active\": true}, \"ValidateColorSets\": {\"active\": true}, \"ValidateMeshArnoldAttributes\": {\"active\": true}, \"ValidateMeshHasUVs\": {\"active\": true}, \"ValidateMeshNonZeroEdgeLength\": {\"active\": true}, \"ExtractModel\": {\"active\": true}}"; + setAttr ".__creator_attributes_keys" -type "string" "writeColorSets,writeFaceSets,includeParentHierarchy,attr,attrPrefix"; +createNode script -n "uiConfigurationScriptNode"; + rename -uid "4B7AFB53-452E-E870-63E1-CCA1DD6EAF13"; + setAttr ".b" -type "string" "// Maya Mel UI Configuration File.\n// No UI generated in batch mode.\n"; + setAttr ".st" 3; +createNode script -n "sceneConfigurationScriptNode"; + rename -uid "72B19BC2-43A2-E229-0A73-2CB861A291D1"; + setAttr ".b" -type "string" "playbackOptions -min 1000 -max 1001 -ast 1000 -aet 1001 "; + setAttr ".st" 6; +createNode polyDisc -n "polyDisc1"; + rename -uid "9ED8A7BD-4FFD-6107-4322-35ACD1D3AC42"; +createNode aiOptions -s -n "defaultArnoldRenderOptions"; + rename -uid "51BB3D7A-4C7D-FCDD-1B21-D89934107F98"; + setAttr ".skip_license_check" yes; +createNode aiAOVFilter -s -n "defaultArnoldFilter"; + rename -uid "989A5992-46C8-0CB2-B2B8-4E868F31FEA8"; + setAttr ".ai_translator" -type "string" "gaussian"; +createNode aiAOVDriver -s -n "defaultArnoldDriver"; + rename -uid "B8469AD8-47C8-9EF1-FE5E-5AB50ABC1536"; + setAttr ".merge_AOVs" yes; + setAttr ".ai_translator" -type "string" "exr"; +createNode aiAOVDriver -s -n "defaultArnoldDisplayDriver"; + rename -uid "21D4F4CD-4D78-001C-610D-798402CD7CF0"; + setAttr ".output_mode" 0; + setAttr ".ai_translator" -type "string" "maya"; +createNode objectSet -n "workfileMain"; + rename -uid "3C9B5D6F-4579-8E3B-5B7D-4C88865A1C68"; + addAttr -ci true -sn "cbId" -ln "cbId" -dt "string"; + addAttr -ci true -sn "id" -ln "id" -dt "string"; + addAttr -ci true -sn "family" -ln "family" -dt "string"; + addAttr -ci true -sn "subset" -ln "subset" -dt "string"; + addAttr -ci true -sn "active" -ln "active" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "creator_identifier" -ln "creator_identifier" -dt "string"; + addAttr -ci true -sn "variant" -ln "variant" -dt "string"; + addAttr -ci true -sn "asset" -ln "asset" -dt "string"; + addAttr -ci true -sn "task" -ln "task" -dt "string"; + addAttr -ci true -sn "instance_id" -ln "instance_id" -dt "string"; + addAttr -ci true -sn "publish_attributes" -ln "publish_attributes" -dt "string"; + addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" + -dt "string"; + setAttr ".ihi" 0; + setAttr ".hio" yes; + setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:30d256dac64c"; + setAttr ".id" -type "string" "pyblish.avalon.instance"; + setAttr ".family" -type "string" "workfile"; + setAttr ".subset" -type "string" "workfileTest_task"; + setAttr -cb on ".active" yes; + setAttr ".creator_identifier" -type "string" "io.openpype.creators.maya.workfile"; + setAttr ".variant" -type "string" "Main"; + setAttr ".asset" -type "string" "test_asset"; + setAttr ".task" -type "string" "test_task"; + setAttr ".instance_id" -type "string" "911dc92a-ad29-41e5-bbf9-733d56174fb9"; + setAttr ".publish_attributes" -type "string" "{\"ExtractImportReference\": {\"active\": false}}"; + setAttr ".__creator_attributes_keys" -type "string" ""; +createNode objectSet -n "renderingMain"; + rename -uid "8A999C2F-4922-B15D-8D5C-45A16465B69F"; + addAttr -ci true -sn "pre_creator_identifier" -ln "pre_creator_identifier" -dt "string"; + addAttr -ci true -sn "cbId" -ln "cbId" -dt "string"; + setAttr ".ihi" 0; + setAttr ".pre_creator_identifier" -type "string" "io.openpype.creators.maya.renderlayer"; + setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:042447475732"; +createNode renderSetupLayer -n "Main"; + rename -uid "2202E438-4CEF-F64E-737C-F48C65E31126"; + addAttr -ci true -sn "es" -ln "expandedState" -min 0 -max 1 -at "bool"; + setAttr ".es" yes; +createNode renderLayer -n "rs_Main"; + rename -uid "DF0259B1-4F96-DA7E-C74F-B599FBE15C18"; + setAttr ".do" 1; +createNode collection -n "defaultCollection"; + rename -uid "E5014237-4DA9-6FC0-633D-69AFA56161B3"; + addAttr -ci true -sn "es" -ln "expandedState" -min 0 -max 1 -at "bool"; + setAttr ".es" yes; +createNode simpleSelector -n "defaultCollectionSelector"; + rename -uid "7CA2F6D8-483C-B020-BC03-EF9563A52163"; + setAttr ".pat" -type "string" "*"; +createNode objectSet -n "_renderingMain:Main"; + rename -uid "1EEC3A3B-49CF-0C79-5340-39805174FB8A"; + addAttr -s false -ci true -sn "renderlayer" -ln "renderlayer" -at "message"; + addAttr -ci true -sn "id" -ln "id" -dt "string"; + addAttr -ci true -sn "family" -ln "family" -dt "string"; + addAttr -ci true -sn "subset" -ln "subset" -dt "string"; + addAttr -ci true -sn "active" -ln "active" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "creator_identifier" -ln "creator_identifier" -dt "string"; + addAttr -ci true -sn "variant" -ln "variant" -dt "string"; + addAttr -ci true -sn "asset" -ln "asset" -dt "string"; + addAttr -ci true -sn "task" -ln "task" -dt "string"; + addAttr -ci true -sn "instance_id" -ln "instance_id" -dt "string"; + addAttr -ci true -sn "review" -ln "review" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "extendFrames" -ln "extendFrames" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "overrideExistingFrame" -ln "overrideExistingFrame" -min 0 + -max 1 -at "bool"; + addAttr -ci true -sn "tileRendering" -ln "tileRendering" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "tilesX" -ln "tilesX" -at "long"; + addAttr -ci true -sn "tilesY" -ln "tilesY" -at "long"; + addAttr -ci true -sn "convertToScanline" -ln "convertToScanline" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "useReferencedAovs" -ln "useReferencedAovs" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "renderSetupIncludeLights" -ln "renderSetupIncludeLights" -min + 0 -max 1 -at "bool"; + addAttr -ci true -sn "publish_attributes" -ln "publish_attributes" -dt "string"; + addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" + -dt "string"; + addAttr -ci true -sn "cbId" -ln "cbId" -dt "string"; + setAttr ".ihi" 0; + setAttr ".id" -type "string" "pyblish.avalon.instance"; + setAttr ".family" -type "string" "renderlayer"; + setAttr ".subset" -type "string" "renderMain"; + setAttr -cb on ".active" yes; + setAttr ".creator_identifier" -type "string" "io.openpype.creators.maya.renderlayer"; + setAttr ".variant" -type "string" "Main"; + setAttr ".asset" -type "string" "test_asset"; + setAttr ".task" -type "string" "test_task"; + setAttr ".instance_id" -type "string" "8a9cfb85-9602-4e5e-a4bc-27a2986bae7f"; + setAttr -cb on ".review" yes; + setAttr -cb on ".extendFrames"; + setAttr -cb on ".overrideExistingFrame" yes; + setAttr -cb on ".tileRendering"; + setAttr -cb on ".tilesX" 2; + setAttr -cb on ".tilesY" 2; + setAttr -cb on ".convertToScanline"; + setAttr -cb on ".useReferencedAovs"; + setAttr -cb on ".renderSetupIncludeLights" yes; + setAttr ".publish_attributes" -type "string" "{\"CollectDeadlinePools\": {\"primaryPool\": \"\", \"secondaryPool\": \"\"}, \"ValidateDeadlinePools\": {\"active\": true}, \"ValidateFrameRange\": {\"active\": true}, \"ExtractImportReference\": {\"active\": false}, \"MayaSubmitDeadline\": {\"priority\": 50, \"chunkSize\": 1, \"machineList\": \"\", \"whitelist\": false, \"tile_priority\": 50, \"strict_error_checking\": true}, \"ProcessSubmittedJobOnFarm\": {\"publishJobState\": \"Active\"}}"; + setAttr ".__creator_attributes_keys" -type "string" "review,extendFrames,overrideExistingFrame,tileRendering,tilesX,tilesY,convertToScanline,useReferencedAovs,renderSetupIncludeLights"; + setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:69960f336351"; +select -ne :time1; + setAttr ".o" 1001; + setAttr ".unw" 1001; +select -ne :hardwareRenderingGlobals; + setAttr ".otfna" -type "stringArray" 22 "NURBS Curves" "NURBS Surfaces" "Polygons" "Subdiv Surface" "Particles" "Particle Instance" "Fluids" "Strokes" "Image Planes" "UI" "Lights" "Cameras" "Locators" "Joints" "IK Handles" "Deformers" "Motion Trails" "Components" "Hair Systems" "Follicles" "Misc. UI" "Ornaments" ; + setAttr ".otfva" -type "Int32Array" 22 0 1 1 1 1 1 + 1 1 1 0 0 0 0 0 0 0 0 0 + 0 0 0 0 ; + setAttr ".dli" 1; + setAttr ".fprt" yes; + setAttr ".rtfm" 1; +select -ne :renderPartition; + setAttr -s 2 ".st"; +select -ne :renderGlobalsList1; +select -ne :defaultShaderList1; + setAttr -s 5 ".s"; +select -ne :postProcessList1; + setAttr -s 2 ".p"; +select -ne :defaultRenderingList1; + setAttr -s 2 ".r"; +select -ne :standardSurface1; + setAttr ".b" 0.80000001192092896; + setAttr ".bc" -type "float3" 1 1 1 ; + setAttr ".s" 0.20000000298023224; + setAttr ".sr" 0.40000000596046448; +select -ne :initialShadingGroup; + setAttr -s 2 ".dsm"; + setAttr ".ro" yes; +select -ne :initialParticleSE; + setAttr ".ro" yes; +select -ne :defaultRenderGlobals; + addAttr -ci true -h true -sn "dss" -ln "defaultSurfaceShader" -dt "string"; + setAttr ".ren" -type "string" "arnold"; + setAttr ".outf" 51; + setAttr ".imfkey" -type "string" "exr"; + setAttr ".an" yes; + setAttr ".fs" 1001; + setAttr ".ef" 1001; + setAttr ".oft" -type "string" ""; + setAttr ".pff" yes; + setAttr ".ifp" -type "string" "//"; + setAttr ".rv" -type "string" ""; + setAttr ".pram" -type "string" ""; + setAttr ".poam" -type "string" ""; + setAttr ".prlm" -type "string" ""; + setAttr ".polm" -type "string" ""; + setAttr ".prm" -type "string" ""; + setAttr ".pom" -type "string" ""; + setAttr ".dss" -type "string" "lambert1"; +select -ne :defaultResolution; + setAttr ".w" 10; + setAttr ".h" 6; + setAttr ".pa" 1; + setAttr ".al" yes; + setAttr ".dar" 1.6666666269302368; +select -ne :defaultColorMgtGlobals; + setAttr ".cfe" yes; + setAttr ".cfp" -type "string" "/OCIO-configs/Maya-legacy/config.ocio"; + setAttr ".vtn" -type "string" "sRGB gamma (legacy)"; + setAttr ".vn" -type "string" "sRGB gamma"; + setAttr ".dn" -type "string" "legacy"; + setAttr ".wsn" -type "string" "scene-linear Rec 709/sRGB"; + setAttr ".ovt" no; + setAttr ".povt" no; + setAttr ".otn" -type "string" "sRGB gamma (legacy)"; + setAttr ".potn" -type "string" "sRGB gamma (legacy)"; +select -ne :hardwareRenderGlobals; + setAttr ".ctrs" 256; + setAttr ".btrs" 512; +connectAttr "rs_Main.ri" ":persp.rlio[0]"; +connectAttr "rs_Main.ri" ":top.rlio[0]"; +connectAttr "rs_Main.ri" ":front.rlio[0]"; +connectAttr "rs_Main.ri" ":side.rlio[0]"; +connectAttr "rs_Main.ri" "pSphere1_GEO.rlio[0]"; +connectAttr "polySphere1.out" "pSphere1_GEOShape1.i"; +connectAttr "rs_Main.ri" "pDisc1.rlio[0]"; +connectAttr "polyDisc1.output" "pDiscShape1.i"; +connectAttr "rs_Main.ri" "persp1.rlio[0]"; +relationship "link" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message"; +relationship "link" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message"; +connectAttr "layerManager.dli[0]" "defaultLayer.id"; +connectAttr "renderLayerManager.rlmi[0]" "defaultRenderLayer.rlid"; +connectAttr "Main.msg" "renderSetup.frl"; +connectAttr "Main.msg" "renderSetup.lrl"; +connectAttr "pSphere1_GEO.iog" "modelMain.dsm" -na; +connectAttr ":defaultArnoldDisplayDriver.msg" ":defaultArnoldRenderOptions.drivers" + -na; +connectAttr ":defaultArnoldFilter.msg" ":defaultArnoldRenderOptions.filt"; +connectAttr ":defaultArnoldDriver.msg" ":defaultArnoldRenderOptions.drvr"; +connectAttr "_renderingMain:Main.msg" "renderingMain.dnsm" -na; +connectAttr "rs_Main.msg" "Main.lrl"; +connectAttr "renderSetup.lit" "Main.pls"; +connectAttr "defaultCollection.msg" "Main.cl"; +connectAttr "defaultCollection.msg" "Main.ch"; +connectAttr "renderLayerManager.rlmi[1]" "rs_Main.rlid"; +connectAttr "defaultCollectionSelector.c" "defaultCollection.sel"; +connectAttr "Main.lit" "defaultCollection.pls"; +connectAttr "Main.nic" "defaultCollection.pic"; +connectAttr "Main.msg" "_renderingMain:Main.renderlayer"; +connectAttr "defaultRenderLayer.msg" ":defaultRenderingList1.r" -na; +connectAttr "rs_Main.msg" ":defaultRenderingList1.r" -na; +connectAttr "pSphere1_GEOShape1.iog" ":initialShadingGroup.dsm" -na; +connectAttr "pDiscShape1.iog" ":initialShadingGroup.dsm" -na; +// End of test_project_test_asset_test_task_v002.ma diff --git a/tests/integration/hosts/maya/expected/test_project/test_asset/work/test_task/workspace.mel b/tests/integration/hosts/maya/expected/test_project/test_asset/work/test_task/workspace.mel new file mode 100644 index 00000000000..7b4dc18c555 --- /dev/null +++ b/tests/integration/hosts/maya/expected/test_project/test_asset/work/test_task/workspace.mel @@ -0,0 +1,10 @@ +workspace -fr "shaders" "renderData/shaders"; +workspace -fr "images" "renders/maya"; +workspace -fr "particles" "particles"; +workspace -fr "mayaAscii" ""; +workspace -fr "mayaBinary" ""; +workspace -fr "scene" ""; +workspace -fr "alembicCache" "cache/alembic"; +workspace -fr "renderData" "renderData"; +workspace -fr "sourceImages" "sourceimages"; +workspace -fr "fileCache" "cache/nCache"; diff --git a/tests/integration/hosts/maya/test_publish_in_maya.py b/tests/integration/hosts/maya/test_publish_in_maya.py index 46b63dab172..89dce0a6536 100644 --- a/tests/integration/hosts/maya/test_publish_in_maya.py +++ b/tests/integration/hosts/maya/test_publish_in_maya.py @@ -27,9 +27,8 @@ class TestPublishInMaya(MayaPublishTest): """ PERSIST = False - INPUT_DUMPS = os.path.join( - os.path.dirname(__file__), "input", "dumps" - ) + EXPECTED_FOLDER = os.path.join(os.path.dirname(__file__), "expected") + INPUT_DUMPS = os.path.join(os.path.dirname(__file__), "input", "dumps") INPUT_ENVIRONMENT_JSON = os.path.join( os.path.dirname(__file__), "input", "env_vars", "env_var.json" ) @@ -37,9 +36,7 @@ class TestPublishInMaya(MayaPublishTest): os.path.dirname(__file__), "input", "workfile" ) - FILES = [ - ("1BTSIIULJTuDc8VvXseuiJV_fL6-Bu7FP", "test_maya_publish.zip", "") - ] + FILES = [] def test_db_asserts(self, dbcon, deadline_finished): """Host and input data dependent expected results in DB.""" diff --git a/tests/lib/testing_classes.py b/tests/lib/testing_classes.py index 740d8dd0dc4..8e9aaff6cb6 100644 --- a/tests/lib/testing_classes.py +++ b/tests/lib/testing_classes.py @@ -49,6 +49,7 @@ class ModuleUnitTest(BaseTest): ASSET_NAME = "test_asset" TASK_NAME = "test_task" + EXPECTED_FOLDER = None DATA_FOLDER = None INPUT_DUMPS = None INPUT_ENVIRONMENT_JSON = None @@ -510,7 +511,9 @@ def test_folder_structure_same( Compares only presence, not size nor content! """ data_folder, output_folder, _ = setup_fixture - expected_dir_base = os.path.join(data_folder, "expected") + expected_dir_base = self.EXPECTED_FOLDER + if expected_dir_base is None: + expected_dir_base = os.path.join(data_folder, "expected") print("Comparing published:'{}' : expected:'{}'".format( output_folder, expected_dir_base)) From d7797977c12300ca044cfdcde6ddcd51467028f0 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Tue, 19 Sep 2023 15:47:24 +0100 Subject: [PATCH 61/69] Ingest expected Maya data --- .../hero/test_project_test_asset_modelMain_hero.ma | 2 +- .../v001/test_project_test_asset_modelMain_v001.ma | 2 +- .../test_project_test_asset_test_task_v002.ma | 12 ++++++------ 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/tests/integration/hosts/maya/expected/test_project/test_asset/publish/model/modelMain/hero/test_project_test_asset_modelMain_hero.ma b/tests/integration/hosts/maya/expected/test_project/test_asset/publish/model/modelMain/hero/test_project_test_asset_modelMain_hero.ma index 2095b7aea2a..6274de44da5 100644 --- a/tests/integration/hosts/maya/expected/test_project/test_asset/publish/model/modelMain/hero/test_project_test_asset_modelMain_hero.ma +++ b/tests/integration/hosts/maya/expected/test_project/test_asset/publish/model/modelMain/hero/test_project_test_asset_modelMain_hero.ma @@ -343,7 +343,7 @@ createNode mesh -n "pSphere1_GEOShape1" -p "pSphere1_GEO"; 361 381 1 362 381 1 363 381 1 364 381 1 365 381 1 366 381 1 367 381 1 368 381 1 369 381 1 370 381 1 371 381 1 372 381 1 373 381 1 374 381 1 375 381 1 376 381 1 377 381 1 378 381 1 379 381 1; - setAttr -s 400 -ch 1560 ".fc[0:399]" -type "polyFaces" + setAttr -s 400 -ch 1560 ".fc[0:399]" -type "polyFaces" f 4 0 381 -21 -381 mu 0 4 0 1 22 21 f 4 1 382 -22 -382 diff --git a/tests/integration/hosts/maya/expected/test_project/test_asset/publish/model/modelMain/v001/test_project_test_asset_modelMain_v001.ma b/tests/integration/hosts/maya/expected/test_project/test_asset/publish/model/modelMain/v001/test_project_test_asset_modelMain_v001.ma index 2095b7aea2a..6274de44da5 100644 --- a/tests/integration/hosts/maya/expected/test_project/test_asset/publish/model/modelMain/v001/test_project_test_asset_modelMain_v001.ma +++ b/tests/integration/hosts/maya/expected/test_project/test_asset/publish/model/modelMain/v001/test_project_test_asset_modelMain_v001.ma @@ -343,7 +343,7 @@ createNode mesh -n "pSphere1_GEOShape1" -p "pSphere1_GEO"; 361 381 1 362 381 1 363 381 1 364 381 1 365 381 1 366 381 1 367 381 1 368 381 1 369 381 1 370 381 1 371 381 1 372 381 1 373 381 1 374 381 1 375 381 1 376 381 1 377 381 1 378 381 1 379 381 1; - setAttr -s 400 -ch 1560 ".fc[0:399]" -type "polyFaces" + setAttr -s 400 -ch 1560 ".fc[0:399]" -type "polyFaces" f 4 0 381 -21 -381 mu 0 4 0 1 22 21 f 4 1 382 -22 -382 diff --git a/tests/integration/hosts/maya/expected/test_project/test_asset/work/test_task/test_project_test_asset_test_task_v002.ma b/tests/integration/hosts/maya/expected/test_project/test_asset/work/test_task/test_project_test_asset_test_task_v002.ma index 87fe4e4aa0a..85b8f2f1054 100644 --- a/tests/integration/hosts/maya/expected/test_project/test_asset/work/test_task/test_project_test_asset_test_task_v002.ma +++ b/tests/integration/hosts/maya/expected/test_project/test_asset/work/test_task/test_project_test_asset_test_task_v002.ma @@ -180,12 +180,12 @@ createNode objectSet -n "modelMain"; addAttr -ci true -sn "instance_id" -ln "instance_id" -dt "string"; addAttr -ci true -sn "writeColorSets" -ln "writeColorSets" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "writeFaceSets" -ln "writeFaceSets" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "includeParentHierarchy" -ln "includeParentHierarchy" -min + addAttr -ci true -sn "includeParentHierarchy" -ln "includeParentHierarchy" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "attr" -ln "attr" -dt "string"; addAttr -ci true -sn "attrPrefix" -ln "attrPrefix" -dt "string"; addAttr -ci true -sn "publish_attributes" -ln "publish_attributes" -dt "string"; - addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" + addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" -dt "string"; setAttr ".ihi" 0; setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:7364ea6776c9"; @@ -242,7 +242,7 @@ createNode objectSet -n "workfileMain"; addAttr -ci true -sn "task" -ln "task" -dt "string"; addAttr -ci true -sn "instance_id" -ln "instance_id" -dt "string"; addAttr -ci true -sn "publish_attributes" -ln "publish_attributes" -dt "string"; - addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" + addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" -dt "string"; setAttr ".ihi" 0; setAttr ".hio" yes; @@ -293,17 +293,17 @@ createNode objectSet -n "_renderingMain:Main"; addAttr -ci true -sn "instance_id" -ln "instance_id" -dt "string"; addAttr -ci true -sn "review" -ln "review" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "extendFrames" -ln "extendFrames" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "overrideExistingFrame" -ln "overrideExistingFrame" -min 0 + addAttr -ci true -sn "overrideExistingFrame" -ln "overrideExistingFrame" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "tileRendering" -ln "tileRendering" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "tilesX" -ln "tilesX" -at "long"; addAttr -ci true -sn "tilesY" -ln "tilesY" -at "long"; addAttr -ci true -sn "convertToScanline" -ln "convertToScanline" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "useReferencedAovs" -ln "useReferencedAovs" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "renderSetupIncludeLights" -ln "renderSetupIncludeLights" -min + addAttr -ci true -sn "renderSetupIncludeLights" -ln "renderSetupIncludeLights" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "publish_attributes" -ln "publish_attributes" -dt "string"; - addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" + addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" -dt "string"; addAttr -ci true -sn "cbId" -ln "cbId" -dt "string"; setAttr ".ihi" 0; From eca39ebbd2a6f6803abe0b17bf3a452e3093d3e5 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Tue, 19 Sep 2023 16:15:51 +0100 Subject: [PATCH 62/69] Fix imports --- tests/lib/testing_classes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/lib/testing_classes.py b/tests/lib/testing_classes.py index 8e9aaff6cb6..c10afda66e1 100644 --- a/tests/lib/testing_classes.py +++ b/tests/lib/testing_classes.py @@ -15,7 +15,7 @@ import time from tests.lib.database_handler import DataBaseHandler -from common.ayon_common.distribution.file_handler import RemoteFileHandler +from tests.lib.file_handler import RemoteFileHandler from openpype.modules import ModulesManager from openpype.settings import get_project_settings From d90869b842f6d19ce8e24b4f09b1686facce8c1e Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Tue, 19 Sep 2023 16:50:55 +0100 Subject: [PATCH 63/69] Fix imports --- .../modules/deadline/plugins/publish/submit_max_deadline.py | 5 ----- .../modules/deadline/plugins/publish/submit_nuke_deadline.py | 2 -- 2 files changed, 7 deletions(-) diff --git a/openpype/modules/deadline/plugins/publish/submit_max_deadline.py b/openpype/modules/deadline/plugins/publish/submit_max_deadline.py index 6a70172b365..7cd869e194e 100644 --- a/openpype/modules/deadline/plugins/publish/submit_max_deadline.py +++ b/openpype/modules/deadline/plugins/publish/submit_max_deadline.py @@ -15,11 +15,6 @@ from openpype.pipeline.publish.lib import ( replace_with_published_scene_path ) -from openpype.hosts.max.api.lib import ( - get_current_renderer, - get_multipass_setting -) -from openpype.hosts.max.api.lib_rendersettings import RenderSettings from openpype_modules.deadline import abstract_submit_deadline from openpype_modules.deadline.abstract_submit_deadline import DeadlineJobInfo from openpype.lib import is_running_from_build diff --git a/openpype/modules/deadline/plugins/publish/submit_nuke_deadline.py b/openpype/modules/deadline/plugins/publish/submit_nuke_deadline.py index 79ea76e7fa3..2657320beaa 100644 --- a/openpype/modules/deadline/plugins/publish/submit_nuke_deadline.py +++ b/openpype/modules/deadline/plugins/publish/submit_nuke_deadline.py @@ -7,8 +7,6 @@ import requests import pyblish.api -import nuke - from openpype import AYON_SERVER_ENABLED from openpype.pipeline import legacy_io from openpype.pipeline.publish import ( From fee9d617caf44a158d2197356ee1e867ef8eae92 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Tue, 19 Sep 2023 16:51:09 +0100 Subject: [PATCH 64/69] Fix tests for latest develop --- ...ect_test_asset_renderMain_beauty_v001.exr} | Bin 2858 -> 2858 bytes ...ject_test_asset_renderMain_beauty_v001.jpg | Bin 0 -> 1692 bytes ...test_asset_renderMain_beauty_v001_png.png} | Bin ..._renderTest_taskRenderMain_beauty_v001.jpg | Bin 1686 -> 0 bytes .../hosts/maya/test_publish_in_maya.py | 8 ++++---- 5 files changed, 4 insertions(+), 4 deletions(-) rename tests/integration/hosts/maya/expected/test_project/test_asset/publish/render/{renderTest_taskRenderMain_beauty/v001/test_project_test_asset_renderTest_taskRenderMain_beauty_v001.exr => renderMain_beauty/v001/test_project_test_asset_renderMain_beauty_v001.exr} (90%) create mode 100644 tests/integration/hosts/maya/expected/test_project/test_asset/publish/render/renderMain_beauty/v001/test_project_test_asset_renderMain_beauty_v001.jpg rename tests/integration/hosts/maya/expected/test_project/test_asset/publish/render/{renderTest_taskRenderMain_beauty/v001/test_project_test_asset_renderTest_taskRenderMain_beauty_v001_png.png => renderMain_beauty/v001/test_project_test_asset_renderMain_beauty_v001_png.png} (100%) delete mode 100644 tests/integration/hosts/maya/expected/test_project/test_asset/publish/render/renderTest_taskRenderMain_beauty/v001/test_project_test_asset_renderTest_taskRenderMain_beauty_v001.jpg diff --git a/tests/integration/hosts/maya/expected/test_project/test_asset/publish/render/renderTest_taskRenderMain_beauty/v001/test_project_test_asset_renderTest_taskRenderMain_beauty_v001.exr b/tests/integration/hosts/maya/expected/test_project/test_asset/publish/render/renderMain_beauty/v001/test_project_test_asset_renderMain_beauty_v001.exr similarity index 90% rename from tests/integration/hosts/maya/expected/test_project/test_asset/publish/render/renderTest_taskRenderMain_beauty/v001/test_project_test_asset_renderTest_taskRenderMain_beauty_v001.exr rename to tests/integration/hosts/maya/expected/test_project/test_asset/publish/render/renderMain_beauty/v001/test_project_test_asset_renderMain_beauty_v001.exr index b8892a2e2ee30026d7c6d4c35d711e1e3769b170..744206ba1fb8113edc703712680672d13248b810 100644 GIT binary patch delta 63 zcmZ1_wn}URCo8*|m655Hk>O+k)_SG|y^|-hsxd97p1hOwGIM6ww#of$%FOTA*=^p+ OcAgQYbaOYyd?o;iAQa&M delta 63 zcmZ1_wn}URCo8+Dm9dePiP>ZU)_SIfmdO)Y)tDF>Chugu%q;(D+T?yVWoA_km(5$* O&NIT4Ztmuo&jbKh^%D&M diff --git a/tests/integration/hosts/maya/expected/test_project/test_asset/publish/render/renderMain_beauty/v001/test_project_test_asset_renderMain_beauty_v001.jpg b/tests/integration/hosts/maya/expected/test_project/test_asset/publish/render/renderMain_beauty/v001/test_project_test_asset_renderMain_beauty_v001.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1778c2370a622ee85a3849050eb3dc1271a48abb GIT binary patch literal 1692 zcmeHHNlX(_7=APJN(*|RY;Gi$O_797r!7l+A*@=Iun2CMq?y7%2PiXirYt5J!3Fgs zxO)=Zy`kcE62!E|>AWDQGk?5zqXYd3k@{|9|s+@BcFDkopva7Z$h* z06~CYsH5cF{1%}a0GBHT)Q|vJEmoV;;&3t!6O-<=ra7$)5CuV0M6uq?xA3M^&Xnt< zD`eg;)8)m>^9%DgGIX{i<#7r}uMjJ_db*tVNwngV9R5I69cK^FVnC4siW_0uX@!>+ zx8xUV`AQ|2aI(xRbhGHM3+4(Z*U^5yp$dP($F*|5^|&w;(TO zpjYUC0Nb(?nGgpAV3!`R06Ee^bO!eXNrA{N5-dQavAFE;WDS}$PSy8BNr@M^RrZRK z$!4~I%p6w{#4v!c$CB9uJu|XtSzLVra?uatw;;6)ujEuv6r^yFB;G(AB&E|qh#m+r z$Rq;lA|ZvUrXA`PU^IXb5JnO4fHV@6kx&P~LNr)i5E~B}2QmrNh3E~TVY5&{UpOEM zL=0+l(CG$jB52e_#4*_+k)@nIzA?($*4b@H$m#8mE*l(6w0ZpPpm3UK_Z6T&?ih(~#=?zI7srG|WS8o> z#>jYUn;|Nvv%9xHG{IIj7VYs5hQ%b>N0Y{}G)>vR32Xl^Wj}@e(lr8RQv@0wWdvD3 N1z8ixJ)5%B;UDF?7BT<; literal 0 HcmV?d00001 diff --git a/tests/integration/hosts/maya/expected/test_project/test_asset/publish/render/renderTest_taskRenderMain_beauty/v001/test_project_test_asset_renderTest_taskRenderMain_beauty_v001_png.png b/tests/integration/hosts/maya/expected/test_project/test_asset/publish/render/renderMain_beauty/v001/test_project_test_asset_renderMain_beauty_v001_png.png similarity index 100% rename from tests/integration/hosts/maya/expected/test_project/test_asset/publish/render/renderTest_taskRenderMain_beauty/v001/test_project_test_asset_renderTest_taskRenderMain_beauty_v001_png.png rename to tests/integration/hosts/maya/expected/test_project/test_asset/publish/render/renderMain_beauty/v001/test_project_test_asset_renderMain_beauty_v001_png.png diff --git a/tests/integration/hosts/maya/expected/test_project/test_asset/publish/render/renderTest_taskRenderMain_beauty/v001/test_project_test_asset_renderTest_taskRenderMain_beauty_v001.jpg b/tests/integration/hosts/maya/expected/test_project/test_asset/publish/render/renderTest_taskRenderMain_beauty/v001/test_project_test_asset_renderTest_taskRenderMain_beauty_v001.jpg deleted file mode 100644 index 8085914b31117b7f79b5c297a5c9956d26990c54..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1686 zcmeHHSxggA6n!)Ex={VFY>F|l;)W)4+9`|lhp-eaE(n5KCYemjE1g0+LuV>rqH*66 z6LHrs!QDUH^-C1@FI)kC#9b2;aMz#ly%sf^n5f_0%)Goi@7^=_+l3~vs`YFXMQX_p2-;6MaZn+iBaobc)PSl9CP@>PI2=xPwkSp7i`|J` zTyxZxE#sPbK3+7>S69sRlzWytdA>+dN<~fN`B}1GY``Zdtnj?j;%ku9prC~nVQFoC zI1~sL@H~NyBMMqD7WUagN*$yWp?#@Su?*ygtV@78a+#Q=_?K`K_B8NW`v zw__dV;#XP^0g>cpEI?uqfGsAn0<1;{)tcB-Gy_t$(jWtejv-fpuuP|Cs~H! zfKwv?P2s{|yc~SGj7SJt4awu2MaGm$(UjSk%B^f|GmkIs=uE5X9+=?rMOP(R(npTU z7(H>)dg=Q;S>MIy#fayQ&7#e9>-8`h=YRiGze%oY|idTlG)Oz7zYws}Brk VC_FsI3JQS^3cqBvuPD@ezXEkZ8j=72 diff --git a/tests/integration/hosts/maya/test_publish_in_maya.py b/tests/integration/hosts/maya/test_publish_in_maya.py index 89dce0a6536..05d78824e87 100644 --- a/tests/integration/hosts/maya/test_publish_in_maya.py +++ b/tests/integration/hosts/maya/test_publish_in_maya.py @@ -95,7 +95,7 @@ def test_db_asserts(self, dbcon, deadline_finished): asserts.append( DBAssert.count_of_types( - dbcon, "subset", 1, name="renderTest_taskRenderMain_beauty" + dbcon, "subset", 1, name="renderMain_beauty" ) ) @@ -105,7 +105,7 @@ def test_db_asserts(self, dbcon, deadline_finished): "representation", 1, additional_args={ - "context.subset": "renderTest_taskRenderMain_beauty", + "context.subset": "renderMain_beauty", "context.ext": "exr" } ) @@ -117,7 +117,7 @@ def test_db_asserts(self, dbcon, deadline_finished): "representation", 1, additional_args={ - "context.subset": "renderTest_taskRenderMain_beauty", + "context.subset": "renderMain_beauty", "context.ext": "jpg" } ) @@ -129,7 +129,7 @@ def test_db_asserts(self, dbcon, deadline_finished): "representation", 1, additional_args={ - "context.subset": "renderTest_taskRenderMain_beauty", + "context.subset": "renderMain_beauty", "context.ext": "png" } ) From f99e0f5488e80cc8caf2afc6351a5fe57d484fb7 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Tue, 19 Sep 2023 17:08:45 +0100 Subject: [PATCH 65/69] Merge all Maya code to one file. --- tests/integration/hosts/maya/lib.py | 153 ------------------ .../hosts/maya/test_publish_in_maya.py | 150 ++++++++++++++++- 2 files changed, 148 insertions(+), 155 deletions(-) delete mode 100644 tests/integration/hosts/maya/lib.py diff --git a/tests/integration/hosts/maya/lib.py b/tests/integration/hosts/maya/lib.py deleted file mode 100644 index c78b60d6e6a..00000000000 --- a/tests/integration/hosts/maya/lib.py +++ /dev/null @@ -1,153 +0,0 @@ -import os -import shutil -import re - -import pytest - -from tests.lib.testing_classes import HostFixtures, PublishTest - - -class MayaFixtures(HostFixtures): - - # By default run through mayapy. For interactive mode, change to "maya" or - # input `--app_group maya` in cli. - APP_GROUP = "mayapy" - - def running_in_mayapy(self, app_group): - app_group = app_group or self.APP_GROUP - - # Running in mayapy. - if app_group == "mayapy": - return True - - # Running in maya. - return False - - def get_usersetup_path(self): - return os.path.join( - os.path.dirname(__file__), "input", "startup", "userSetup.py" - ) - - def get_log_path(self, dirpath, app_variant): - return os.path.join( - dirpath, "output_{}.log".format(app_variant) - ) - - @pytest.fixture(scope="module") - def app_args(self, app_group, app_variant): - args = [] - - if self.running_in_mayapy(app_group): - # Attempts to run MayaPy in 2022 has failed. - msg = "Maya 2022 and older is not supported through MayaPy" - assert int(app_variant) > 2022, msg - - # Maya 2023+ can isolate from the users environment. Although the - # command flag is present in older versions of Maya, it does not - # work resulting a fatal python error: - # Fatal Python error: initfsencoding: unable to load the file - # system codec - # ModuleNotFoundError: No module named 'encodings' - args.append("-I") - - # MayaPy can only be passed a python script, so Maya scene opening - # will happen post launch. - args.append(self.get_usersetup_path()) - - yield args - - @pytest.fixture(scope="module") - def start_last_workfile(self, app_group): - """Returns url of workfile""" - return not self.running_in_mayapy(app_group) - - @pytest.fixture(scope="module") - def last_workfile_path(self, setup_fixture): - """Get last_workfile_path from source data. - - Maya expects workfile in proper folder, so copy is done first. - """ - data_folder, output_folder, _ = setup_fixture - - source_folder = ( - self.INPUT_WORKFILE or - os.path.join(data_folder, "input", "workfile") - ) - filename = os.listdir(source_folder)[0] - src_path = os.path.join(source_folder, filename) - dest_folder = os.path.join( - output_folder, - self.PROJECT_NAME, - self.ASSET_NAME, - "work", - self.TASK_NAME - ) - os.makedirs(dest_folder) - dest_path = os.path.join(dest_folder, filename) - shutil.copy(src_path, dest_path) - - yield dest_path - - @pytest.fixture(scope="module") - def startup_scripts( - self, monkeypatch_session, setup_fixture, app_group, app_variant - ): - data_folder, _, _ = setup_fixture - - """Points Maya to userSetup file from input data""" - if not self.running_in_mayapy(app_group): - # Not needed for running MayaPy since the testing userSetup.py will - # be passed in directly to the executable. - original_pythonpath = os.environ.get("PYTHONPATH") - monkeypatch_session.setenv( - "PYTHONPATH", - "{}{}{}".format( - os.path.dirname(self.get_usersetup_path()), - os.pathsep, - original_pythonpath - ) - ) - - monkeypatch_session.setenv( - "MAYA_CMD_FILE_OUTPUT", - self.get_log_path(data_folder, app_variant) - ) - - @pytest.fixture(scope="module") - def skip_compare_folders(self): - pass - - def test_publish( - self, - dbcon, - publish_finished, - setup_fixture, - app_variant - ): - data_folder, _, _ = setup_fixture - - logging_path = self.get_log_path(data_folder, app_variant) - with open(logging_path, "r") as f: - logging_output = f.read() - - print(("-" * 50) + "LOGGING" + ("-" * 50)) - print(logging_output) - print(("-" * 50) + "PUBLISH" + ("-" * 50)) - print(publish_finished) - - # Check for pyblish errors. - error_regex = r"pyblish \(ERROR\)((.|\n)*?)((pyblish \())" - matches = re.findall(error_regex, logging_output) - assert not matches, matches[0][0] - - matches = re.findall(error_regex, publish_finished) - assert not matches, matches[0][0] - - # Check for python errors. - error_regex = r"// Error((.|\n)*)" - matches = re.findall(error_regex, logging_output) - assert not matches, matches[0][0] - - -class MayaPublishTest(MayaFixtures, PublishTest): - """Testing class for local publishes.""" diff --git a/tests/integration/hosts/maya/test_publish_in_maya.py b/tests/integration/hosts/maya/test_publish_in_maya.py index 05d78824e87..19cbfc813d6 100644 --- a/tests/integration/hosts/maya/test_publish_in_maya.py +++ b/tests/integration/hosts/maya/test_publish_in_maya.py @@ -1,10 +1,125 @@ import os +import shutil +import re + +import pytest from tests.lib.assert_classes import DBAssert -from tests.integration.hosts.maya.lib import MayaPublishTest +from tests.lib.testing_classes import HostFixtures, PublishTest + + +class MayaFixtures(HostFixtures): + + # By default run through mayapy. For interactive mode, change to "maya" or + # input `--app_group maya` in cli. + APP_GROUP = "mayapy" + + def running_in_mayapy(self, app_group): + app_group = app_group or self.APP_GROUP + + # Running in mayapy. + if app_group == "mayapy": + return True + + # Running in maya. + return False + + def get_usersetup_path(self): + return os.path.join( + os.path.dirname(__file__), "input", "startup", "userSetup.py" + ) + + def get_log_path(self, dirpath, app_variant): + return os.path.join( + dirpath, "output_{}.log".format(app_variant) + ) + + @pytest.fixture(scope="module") + def app_args(self, app_group, app_variant): + args = [] + + if self.running_in_mayapy(app_group): + # Attempts to run MayaPy in 2022 has failed. + msg = "Maya 2022 and older is not supported through MayaPy" + assert int(app_variant) > 2022, msg + + # Maya 2023+ can isolate from the users environment. Although the + # command flag is present in older versions of Maya, it does not + # work resulting a fatal python error: + # Fatal Python error: initfsencoding: unable to load the file + # system codec + # ModuleNotFoundError: No module named 'encodings' + args.append("-I") + + # MayaPy can only be passed a python script, so Maya scene opening + # will happen post launch. + args.append(self.get_usersetup_path()) + + yield args + + @pytest.fixture(scope="module") + def start_last_workfile(self, app_group): + """Returns url of workfile""" + return not self.running_in_mayapy(app_group) + + @pytest.fixture(scope="module") + def last_workfile_path(self, setup_fixture): + """Get last_workfile_path from source data. + Maya expects workfile in proper folder, so copy is done first. + """ + data_folder, output_folder, _ = setup_fixture -class TestPublishInMaya(MayaPublishTest): + source_folder = ( + self.INPUT_WORKFILE or + os.path.join(data_folder, "input", "workfile") + ) + filename = os.listdir(source_folder)[0] + src_path = os.path.join(source_folder, filename) + dest_folder = os.path.join( + output_folder, + self.PROJECT_NAME, + self.ASSET_NAME, + "work", + self.TASK_NAME + ) + os.makedirs(dest_folder) + dest_path = os.path.join(dest_folder, filename) + shutil.copy(src_path, dest_path) + + yield dest_path + + @pytest.fixture(scope="module") + def startup_scripts( + self, monkeypatch_session, setup_fixture, app_group, app_variant + ): + data_folder, _, _ = setup_fixture + + """Points Maya to userSetup file from input data""" + if not self.running_in_mayapy(app_group): + # Not needed for running MayaPy since the testing userSetup.py will + # be passed in directly to the executable. + original_pythonpath = os.environ.get("PYTHONPATH") + monkeypatch_session.setenv( + "PYTHONPATH", + "{}{}{}".format( + os.path.dirname(self.get_usersetup_path()), + os.pathsep, + original_pythonpath + ) + ) + + monkeypatch_session.setenv( + "MAYA_CMD_FILE_OUTPUT", + self.get_log_path(data_folder, app_variant) + ) + + @pytest.fixture(scope="module") + def skip_compare_folders(self): + pass + + +class TestPublishInMaya(MayaFixtures, PublishTest): """Basic test case for publishing in Maya Shouldnt be running standalone only via 'runtests' pype command! (??) @@ -38,6 +153,37 @@ class TestPublishInMaya(MayaPublishTest): FILES = [] + def test_publish( + self, + dbcon, + publish_finished, + setup_fixture, + app_variant + ): + data_folder, _, _ = setup_fixture + + logging_path = self.get_log_path(data_folder, app_variant) + with open(logging_path, "r") as f: + logging_output = f.read() + + print(("-" * 50) + "LOGGING" + ("-" * 50)) + print(logging_output) + print(("-" * 50) + "PUBLISH" + ("-" * 50)) + print(publish_finished) + + # Check for pyblish errors. + error_regex = r"pyblish \(ERROR\)((.|\n)*?)((pyblish \())" + matches = re.findall(error_regex, logging_output) + assert not matches, matches[0][0] + + matches = re.findall(error_regex, publish_finished) + assert not matches, matches[0][0] + + # Check for python errors. + error_regex = r"// Error((.|\n)*)" + matches = re.findall(error_regex, logging_output) + assert not matches, matches[0][0] + def test_db_asserts(self, dbcon, deadline_finished): """Host and input data dependent expected results in DB.""" print("test_db_asserts") From e68587a65347ef0d5c8a88d5196b8b097d7a1eca Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Thu, 21 Sep 2023 18:58:12 +0100 Subject: [PATCH 66/69] Ingest expected database --- .../expected/avalon_tests.test_project.json | 944 ++++++++++++++++++ ...test_project_test_asset_modelMain_hero.abc | Bin .../test_project_test_asset_modelMain_hero.ma | 0 ...test_project_test_asset_modelMain_v001.abc | Bin .../test_project_test_asset_modelMain_v001.ma | 0 ...ject_test_asset_renderMain_beauty_v001.exr | Bin ...ject_test_asset_renderMain_beauty_v001.jpg | Bin ..._test_asset_renderMain_beauty_v001_png.png | Bin ...oject_test_asset_workfileTest_task_v001.ma | 0 .../test_project_test_asset_test_task_v001.ma | 0 .../test_project_test_asset_test_task_v002.ma | 0 .../test_asset/work/test_task/workspace.mel | 0 .../hosts/maya/test_publish_in_maya.py | 193 ++-- tests/lib/testing_classes.py | 2 +- 14 files changed, 1051 insertions(+), 88 deletions(-) create mode 100644 tests/integration/hosts/maya/expected/avalon_tests.test_project.json rename tests/integration/hosts/maya/expected/{ => files}/test_project/test_asset/publish/model/modelMain/hero/test_project_test_asset_modelMain_hero.abc (100%) rename tests/integration/hosts/maya/expected/{ => files}/test_project/test_asset/publish/model/modelMain/hero/test_project_test_asset_modelMain_hero.ma (100%) rename tests/integration/hosts/maya/expected/{ => files}/test_project/test_asset/publish/model/modelMain/v001/test_project_test_asset_modelMain_v001.abc (100%) rename tests/integration/hosts/maya/expected/{ => files}/test_project/test_asset/publish/model/modelMain/v001/test_project_test_asset_modelMain_v001.ma (100%) rename tests/integration/hosts/maya/expected/{ => files}/test_project/test_asset/publish/render/renderMain_beauty/v001/test_project_test_asset_renderMain_beauty_v001.exr (100%) rename tests/integration/hosts/maya/expected/{ => files}/test_project/test_asset/publish/render/renderMain_beauty/v001/test_project_test_asset_renderMain_beauty_v001.jpg (100%) rename tests/integration/hosts/maya/expected/{ => files}/test_project/test_asset/publish/render/renderMain_beauty/v001/test_project_test_asset_renderMain_beauty_v001_png.png (100%) rename tests/integration/hosts/maya/expected/{ => files}/test_project/test_asset/publish/workfile/workfileTest_task/v001/test_project_test_asset_workfileTest_task_v001.ma (100%) rename tests/integration/hosts/maya/expected/{ => files}/test_project/test_asset/work/test_task/test_project_test_asset_test_task_v001.ma (100%) rename tests/integration/hosts/maya/expected/{ => files}/test_project/test_asset/work/test_task/test_project_test_asset_test_task_v002.ma (100%) rename tests/integration/hosts/maya/expected/{ => files}/test_project/test_asset/work/test_task/workspace.mel (100%) diff --git a/tests/integration/hosts/maya/expected/avalon_tests.test_project.json b/tests/integration/hosts/maya/expected/avalon_tests.test_project.json new file mode 100644 index 00000000000..134f2f12809 --- /dev/null +++ b/tests/integration/hosts/maya/expected/avalon_tests.test_project.json @@ -0,0 +1,944 @@ +[{ + "_id": { + "$oid": "60df31e2be2b48bd3695c056" + }, + "name": "test_asset", + "type": "asset", + "schema": "openpype:asset-3.0", + "data": { + "parents": [], + "visualParent": null, + "tasks": { + "test_task": { + "type": "Generic" + } + }, + "fps": 25.0, + "resolutionWidth": 1920, + "resolutionHeight": 1080, + "pixelAspect": 1.0, + "frameStart": 1001, + "handleStart": 0, + "frameEnd": 1001, + "clipOut": 1, + "clipIn": 1, + "tools_env": [], + "handleEnd": 0 + }, + "parent": { + "$oid": "60df31bcbe2b48bd3695c055" + } +}, +{ + "_id": { + "$oid": "60df31bcbe2b48bd3695c055" + }, + "type": "project", + "name": "test_project", + "data": { + "code": "test_project", + "library_project": false, + "clipIn": 1, + "clipOut": 1, + "fps": 25.0, + "frameEnd": 1001, + "frameStart": 1001, + "handleEnd": 0, + "handleStart": 0, + "pixelAspect": 1.0, + "resolutionHeight": 1080, + "resolutionWidth": 1920, + "tools_env": [] + }, + "schema": "openpype:project-3.0", + "config": { + "apps": [ + { + "name": "maya/2020" + }, + { + "name": "nuke/12-2" + }, + { + "name": "nukex/12-2" + }, + { + "name": "hiero/12-2" + }, + { + "name": "resolve/stable" + }, + { + "name": "houdini/18-5" + }, + { + "name": "blender/2-91" + }, + { + "name": "harmony/20" + }, + { + "name": "photoshop/2020" + }, + { + "name": "aftereffects/2021" + }, + { + "name": "unreal/4-26" + } + ], + "imageio": { + "hiero": { + "workfile": { + "ocioConfigName": "nuke-default", + "ocioconfigpath": { + "windows": [], + "darwin": [], + "linux": [] + }, + "workingSpace": "linear", + "sixteenBitLut": "sRGB", + "eightBitLut": "sRGB", + "floatLut": "linear", + "logLut": "Cineon", + "viewerLut": "sRGB", + "thumbnailLut": "sRGB" + }, + "regexInputs": { + "inputs": [ + { + "regex": "[^-a-zA-Z0-9](plateRef).*(?=mp4)", + "colorspace": "sRGB" + } + ] + }, + "__overriden_keys__": [ + "workfile", + "regexInputs" + ] + }, + "nuke": { + "viewer": { + "viewerProcess": "sRGB" + }, + "workfile": { + "colorManagement": "Nuke", + "OCIO_config": "nuke-default", + "customOCIOConfigPath": { + "windows": [], + "darwin": [], + "linux": [] + }, + "workingSpaceLUT": "linear", + "monitorLut": "sRGB", + "int8Lut": "sRGB", + "int16Lut": "sRGB", + "logLut": "Cineon", + "floatLut": "linear" + }, + "nodes": { + "requiredNodes": [ + { + "plugins": [ + "CreateWriteRender" + ], + "nukeNodeClass": "Write", + "knobs": [ + { + "name": "file_type", + "value": "exr" + }, + { + "name": "datatype", + "value": "16 bit half" + }, + { + "name": "compression", + "value": "Zip (1 scanline)" + }, + { + "name": "autocrop", + "value": "True" + }, + { + "name": "tile_color", + "value": "0xff0000ff" + }, + { + "name": "channels", + "value": "rgb" + }, + { + "name": "colorspace", + "value": "linear" + }, + { + "name": "create_directories", + "value": "True" + } + ] + }, + { + "plugins": [ + "CreateWritePrerender" + ], + "nukeNodeClass": "Write", + "knobs": [ + { + "name": "file_type", + "value": "exr" + }, + { + "name": "datatype", + "value": "16 bit half" + }, + { + "name": "compression", + "value": "Zip (1 scanline)" + }, + { + "name": "autocrop", + "value": "False" + }, + { + "name": "tile_color", + "value": "0xadab1dff" + }, + { + "name": "channels", + "value": "rgb" + }, + { + "name": "colorspace", + "value": "linear" + }, + { + "name": "create_directories", + "value": "True" + } + ] + } + ], + "customNodes": [] + }, + "regexInputs": { + "inputs": [ + { + "regex": "[^-a-zA-Z0-9]beauty[^-a-zA-Z0-9]", + "colorspace": "linear" + } + ] + }, + "__overriden_keys__": [ + "viewer", + "workfile", + "nodes", + "regexInputs" + ] + } + }, + "roots": { + "work": { + "windows": "C:/projects", + "darwin": "/Volumes/path", + "linux": "/mnt/share/projects" + } + }, + "tasks": { + "Generic": { + "short_name": "gener" + }, + "Art": { + "short_name": "art" + }, + "Modeling": { + "short_name": "mdl" + }, + "Texture": { + "short_name": "tex" + }, + "Lookdev": { + "short_name": "look" + }, + "Rigging": { + "short_name": "rig" + }, + "Edit": { + "short_name": "edit" + }, + "Layout": { + "short_name": "lay" + }, + "Setdress": { + "short_name": "dress" + }, + "Animation": { + "short_name": "anim" + }, + "FX": { + "short_name": "fx" + }, + "Lighting": { + "short_name": "lgt" + }, + "Paint": { + "short_name": "paint" + }, + "Compositing": { + "short_name": "comp" + } + }, + "templates": { + "defaults": { + "version_padding": 3, + "version": "v{version:0>{@version_padding}}", + "frame_padding": 4, + "frame": "{frame:0>{@frame_padding}}" + }, + "work": { + "folder": "{root[work]}/{project[name]}/{hierarchy}/{asset}/work/{task}", + "file": "{project[code]}_{asset}_{task}_{@version}<_{comment}>.{ext}", + "path": "{@folder}/{@file}" + }, + "render": { + "folder": "{root[work]}/{project[name]}/{hierarchy}/{asset}/publish/{family}/{subset}/{@version}", + "file": "{project[code]}_{asset}_{subset}_{@version}<_{output}><.{@frame}>.{ext}", + "path": "{@folder}/{@file}" + }, + "publish": { + "folder": "{root[work]}/{project[name]}/{hierarchy}/{asset}/publish/{family}/{subset}/{@version}", + "file": "{project[code]}_{asset}_{subset}_{@version}<_{output}><.{@frame}>.{ext}", + "path": "{@folder}/{@file}", + "thumbnail": "{thumbnail_root}/{project[name]}/{_id}_{thumbnail_type}.{ext}" + }, + "hero": { + "folder": "{root[work]}/{project[name]}/{hierarchy}/{asset}/publish/{family}/{subset}/hero", + "file": "{project[code]}_{asset}_{subset}_hero<_{output}><.{frame}>.{ext}", + "path": "{@folder}/{@file}" + }, + "delivery": { + "test_delivery": "{root[work]}/{project[name]}/{hierarchy}/{asset}/publish/{family}/{subset}/{@version}/{project[code]}_{asset}_{subset}_{@version}<_{output}><.{frame}>.{ext}" + }, + "others": {} + } + } +}, +{ + "_id": { + "$oid": "6509c6162ded86cb55ad6b49" + }, + "schema": "openpype:subset-3.0", + "type": "subset", + "name": "modelMain", + "data": { + "families": [ + "model" + ], + "family": "model" + }, + "parent": { + "$oid": "60df31e2be2b48bd3695c056" + } +}, +{ + "_id": { + "$oid": "6509c6162ded86cb55ad6b4b" + }, + "schema": "openpype:version-3.0", + "type": "version", + "name": 1, + "parent": { + "$oid": "6509c6162ded86cb55ad6b49" + }, + "data": { + "families": [ + "model" + ], + "time": "20230919T170229Z", + "author": "tokejepsen", + "source": "{root[work]}/test_project/test_asset/work/test_task/test_project_test_asset_test_task_v001.ma", + "comment": "", + "machine": "DESKTOP-969549J", + "fps": 25.0, + "frameStart": 1001.0, + "frameEnd": 1001.0, + "inputLinks": [ + { + "type": "generative", + "id": { + "$oid": "6509c6162ded86cb55ad6b54" + }, + "linkedBy": "publish" + } + ] + } +}, +{ + "_id": { + "$oid": "6509c6162ded86cb55ad6b4c" + }, + "schema": "openpype:representation-2.0", + "type": "representation", + "parent": { + "$oid": "6509c6162ded86cb55ad6b4b" + }, + "name": "ma", + "data": { + "path": "C:\\Users\\TOKEJE~1\\AppData\\Local\\Temp\\tmpg2tu1jdt\\output_2024\\test_project\\test_asset\\publish\\model\\modelMain\\v001\\test_project_test_asset_modelMain_v001.ma", + "template": "{root[work]}\\{project[name]}\\{hierarchy}\\{asset}\\publish\\{family}\\{subset}\\v{version:0>3}\\{project[code]}_{asset}_{subset}_v{version:0>3}<_{output}><.{frame:0>4}>.{ext}" + }, + "context": { + "root": { + "work": "C:\\Users\\TOKEJE~1\\AppData\\Local\\Temp\\tmpg2tu1jdt\\output_2024" + }, + "project": { + "name": "test_project", + "code": "test_project" + }, + "hierarchy": "", + "asset": "test_asset", + "family": "model", + "subset": "modelMain", + "version": 1, + "ext": "ma", + "task": { + "name": "test_task", + "type": "Generic", + "short": "gener" + }, + "representation": "ma", + "username": "tokejepsen", + "user": "tokejepsen" + }, + "files": [ + { + "_id": { + "$oid": "6509c6162ded86cb55ad6b4e" + }, + "path": "{root[work]}/test_project/test_asset/publish/model/modelMain/v001/test_project_test_asset_modelMain_v001.ma", + "size": 52137, + "hash": "test_project_test_asset_modelMain_v001,ma|1695139350,1763413|52137", + "sites": [ + { + "name": "studio", + "created_dt": { + "$date": "2023-09-19T17:02:30.359Z" + } + } + ] + } + ] +}, +{ + "_id": { + "$oid": "6509c6162ded86cb55ad6b4d" + }, + "schema": "openpype:representation-2.0", + "type": "representation", + "parent": { + "$oid": "6509c6162ded86cb55ad6b4b" + }, + "name": "abc", + "data": { + "path": "C:\\Users\\TOKEJE~1\\AppData\\Local\\Temp\\tmpg2tu1jdt\\output_2024\\test_project\\test_asset\\publish\\model\\modelMain\\v001\\test_project_test_asset_modelMain_v001.abc", + "template": "{root[work]}\\{project[name]}\\{hierarchy}\\{asset}\\publish\\{family}\\{subset}\\v{version:0>3}\\{project[code]}_{asset}_{subset}_v{version:0>3}<_{output}><.{frame:0>4}>.{ext}" + }, + "context": { + "root": { + "work": "C:\\Users\\TOKEJE~1\\AppData\\Local\\Temp\\tmpg2tu1jdt\\output_2024" + }, + "project": { + "name": "test_project", + "code": "test_project" + }, + "hierarchy": "", + "asset": "test_asset", + "family": "model", + "subset": "modelMain", + "version": 1, + "ext": "abc", + "task": { + "name": "test_task", + "type": "Generic", + "short": "gener" + }, + "representation": "abc", + "username": "tokejepsen", + "user": "tokejepsen" + }, + "files": [ + { + "_id": { + "$oid": "6509c6162ded86cb55ad6b50" + }, + "path": "{root[work]}/test_project/test_asset/publish/model/modelMain/v001/test_project_test_asset_modelMain_v001.abc", + "size": 24663, + "hash": "test_project_test_asset_modelMain_v001,abc|1695139350,289114|24663", + "sites": [ + { + "name": "studio", + "created_dt": { + "$date": "2023-09-19T17:02:30.359Z" + } + } + ] + } + ] +}, +{ + "_id": { + "$oid": "6509c6162ded86cb55ad6b52" + }, + "schema": "openpype:subset-3.0", + "type": "subset", + "name": "workfileTest_task", + "data": { + "families": [ + "workfile" + ], + "family": "workfile" + }, + "parent": { + "$oid": "60df31e2be2b48bd3695c056" + } +}, +{ + "_id": { + "$oid": "6509c6162ded86cb55ad6b54" + }, + "schema": "openpype:version-3.0", + "type": "version", + "name": 1, + "parent": { + "$oid": "6509c6162ded86cb55ad6b52" + }, + "data": { + "families": [ + "workfile" + ], + "time": "20230919T170229Z", + "author": "tokejepsen", + "source": "{root[work]}/test_project/test_asset/work/test_task/test_project_test_asset_test_task_v001.ma", + "comment": "", + "machine": "DESKTOP-969549J", + "fps": 25.0, + "frameStart": 1001, + "frameEnd": 1001, + "handleEnd": 0, + "handleStart": 0 + } +}, +{ + "_id": { + "$oid": "6509c6162ded86cb55ad6b55" + }, + "schema": "openpype:representation-2.0", + "type": "representation", + "parent": { + "$oid": "6509c6162ded86cb55ad6b54" + }, + "name": "ma", + "data": { + "path": "C:\\Users\\TOKEJE~1\\AppData\\Local\\Temp\\tmpg2tu1jdt\\output_2024\\test_project\\test_asset\\publish\\workfile\\workfileTest_task\\v001\\test_project_test_asset_workfileTest_task_v001.ma", + "template": "{root[work]}\\{project[name]}\\{hierarchy}\\{asset}\\publish\\{family}\\{subset}\\v{version:0>3}\\{project[code]}_{asset}_{subset}_v{version:0>3}<_{output}><.{frame:0>4}>.{ext}" + }, + "context": { + "root": { + "work": "C:\\Users\\TOKEJE~1\\AppData\\Local\\Temp\\tmpg2tu1jdt\\output_2024" + }, + "project": { + "name": "test_project", + "code": "test_project" + }, + "hierarchy": "", + "asset": "test_asset", + "family": "workfile", + "subset": "workfileTest_task", + "version": 1, + "ext": "ma", + "task": { + "name": "test_task", + "type": "Generic", + "short": "gener" + }, + "representation": "ma", + "username": "tokejepsen", + "user": "tokejepsen" + }, + "files": [ + { + "_id": { + "$oid": "6509c6162ded86cb55ad6b56" + }, + "path": "{root[work]}/test_project/test_asset/publish/workfile/workfileTest_task/v001/test_project_test_asset_workfileTest_task_v001.ma", + "size": 71697, + "hash": "test_project_test_asset_workfileTest_task_v001,ma|1695139327,5880704|71697", + "sites": [ + { + "name": "studio", + "created_dt": { + "$date": "2023-09-19T17:02:30.379Z" + } + } + ] + } + ] +}, +{ + "_id": { + "$oid": "6509c6162ded86cb55ad6b58" + }, + "schema": "openpype:hero_version-1.0", + "type": "hero_version", + "version_id": { + "$oid": "6509c6162ded86cb55ad6b4b" + }, + "parent": { + "$oid": "6509c6162ded86cb55ad6b49" + }, + "data": {} +}, +{ + "_id": { + "$oid": "6509c6162ded86cb55ad6b5b" + }, + "schema": "openpype:representation-2.0", + "type": "representation", + "parent": { + "$oid": "6509c6162ded86cb55ad6b58" + }, + "name": "ma", + "data": { + "path": "C:\\Users\\TOKEJE~1\\AppData\\Local\\Temp\\tmpg2tu1jdt\\output_2024/test_project//test_asset/publish/model/modelMain/hero/test_project_test_asset_modelMain_hero.ma", + "template": "{root[work]}/{project[name]}/{hierarchy}/{asset}/publish/{family}/{subset}/hero/{project[code]}_{asset}_{subset}_hero<_{output}><.{frame}>.{ext}" + }, + "context": { + "root": { + "work": "C:\\Users\\TOKEJE~1\\AppData\\Local\\Temp\\tmpg2tu1jdt\\output_2024" + }, + "project": { + "name": "test_project", + "code": "test_project" + }, + "hierarchy": "", + "asset": "test_asset", + "family": "model", + "subset": "modelMain", + "ext": "ma", + "task": { + "name": "test_task", + "type": "Generic", + "short": "gener" + }, + "representation": "ma", + "username": "tokejepsen", + "user": "tokejepsen" + }, + "files": [ + { + "_id": { + "$oid": "6509c6162ded86cb55ad6b4e" + }, + "path": "{root[work]}/test_project//test_asset/publish/model/modelMain/hero/test_project_test_asset_modelMain_hero.ma", + "size": 52137, + "hash": "test_project_test_asset_modelMain_hero,ma|1695139350,1763413|52137", + "sites": [ + { + "name": "studio", + "created_dt": { + "$date": "2023-09-19T17:02:30.359Z" + } + } + ] + } + ] +}, +{ + "_id": { + "$oid": "6509c6162ded86cb55ad6b5e" + }, + "schema": "openpype:representation-2.0", + "type": "representation", + "parent": { + "$oid": "6509c6162ded86cb55ad6b58" + }, + "name": "abc", + "data": { + "path": "C:\\Users\\TOKEJE~1\\AppData\\Local\\Temp\\tmpg2tu1jdt\\output_2024/test_project//test_asset/publish/model/modelMain/hero/test_project_test_asset_modelMain_hero.abc", + "template": "{root[work]}/{project[name]}/{hierarchy}/{asset}/publish/{family}/{subset}/hero/{project[code]}_{asset}_{subset}_hero<_{output}><.{frame}>.{ext}" + }, + "context": { + "root": { + "work": "C:\\Users\\TOKEJE~1\\AppData\\Local\\Temp\\tmpg2tu1jdt\\output_2024" + }, + "project": { + "name": "test_project", + "code": "test_project" + }, + "hierarchy": "", + "asset": "test_asset", + "family": "model", + "subset": "modelMain", + "ext": "abc", + "task": { + "name": "test_task", + "type": "Generic", + "short": "gener" + }, + "representation": "abc", + "username": "tokejepsen", + "user": "tokejepsen" + }, + "files": [ + { + "_id": { + "$oid": "6509c6162ded86cb55ad6b50" + }, + "path": "{root[work]}/test_project//test_asset/publish/model/modelMain/hero/test_project_test_asset_modelMain_hero.abc", + "size": 24663, + "hash": "test_project_test_asset_modelMain_hero,abc|1695139350,289114|24663", + "sites": [ + { + "name": "studio", + "created_dt": { + "$date": "2023-09-19T17:02:30.359Z" + } + } + ] + } + ] +}, +{ + "_id": { + "$oid": "6509c65694e6258a59c475fa" + }, + "schema": "openpype:subset-3.0", + "type": "subset", + "name": "renderMain_beauty", + "data": { + "families": [ + "render", + "review" + ], + "subsetGroup": "renderMain", + "family": "render" + }, + "parent": { + "$oid": "60df31e2be2b48bd3695c056" + } +}, +{ + "_id": { + "$oid": "6509c65694e6258a59c475fb" + }, + "schema": "openpype:version-3.0", + "type": "version", + "name": 1, + "parent": { + "$oid": "6509c65694e6258a59c475fa" + }, + "data": { + "families": [ + "render", + "review" + ], + "time": "20230919T170333Z", + "author": "tokejepsen", + "source": "{root[work]}/test_project/test_asset/work/test_task/test_project_test_asset_test_task_v001.ma", + "comment": "", + "machine": "DESKTOP-969549J", + "fps": 25.0, + "frameStart": 1001, + "frameEnd": 1001, + "handleEnd": 0, + "handleStart": 0 + } +}, +{ + "_id": { + "$oid": "6509c65694e6258a59c475fc" + }, + "schema": "openpype:representation-2.0", + "type": "representation", + "parent": { + "$oid": "6509c65694e6258a59c475fb" + }, + "name": "exr", + "data": { + "path": "C:\\Users\\TOKEJE~1\\AppData\\Local\\Temp\\tmpg2tu1jdt\\output_2024\\test_project\\test_asset\\publish\\render\\renderMain_beauty\\v001\\test_project_test_asset_renderMain_beauty_v001.exr", + "template": "{root[work]}\\{project[name]}\\{hierarchy}\\{asset}\\publish\\{family}\\{subset}\\v{version:0>3}\\{project[code]}_{asset}_{subset}_v{version:0>3}<_{output}><.{frame:0>4}>.{ext}", + "colorspaceData": { + "colorspace": "scene-linear Rec 709/sRGB", + "config": { + "path": "C:/Program Files/Autodesk/Maya2024/resources/OCIO-configs/Maya-legacy/config.ocio", + "template": "C:/Program Files/Autodesk/Maya2024/resources/OCIO-configs/Maya-legacy/config.ocio" + }, + "display": "legacy", + "view": "sRGB gamma" + } + }, + "context": { + "root": { + "work": "C:\\Users\\TOKEJE~1\\AppData\\Local\\Temp\\tmpg2tu1jdt\\output_2024" + }, + "project": { + "name": "test_project", + "code": "test_project" + }, + "hierarchy": "", + "asset": "test_asset", + "family": "render", + "subset": "renderMain_beauty", + "version": 1, + "ext": "exr", + "task": { + "name": "test_task", + "type": "Generic", + "short": "gener" + }, + "representation": "exr", + "username": "tokejepsen", + "user": "tokejepsen" + }, + "files": [ + { + "_id": { + "$oid": "6509c65694e6258a59c475ff" + }, + "path": "{root[work]}/test_project/test_asset/publish/render/renderMain_beauty/v001/test_project_test_asset_renderMain_beauty_v001.exr", + "size": 2858, + "hash": "test_project_test_asset_renderMain_beauty_v001,exr|1695139382,9292474|2858", + "sites": [ + { + "name": "studio", + "created_dt": { + "$date": "2023-09-19T17:03:34.682Z" + } + } + ] + } + ] +}, +{ + "_id": { + "$oid": "6509c65694e6258a59c475fd" + }, + "schema": "openpype:representation-2.0", + "type": "representation", + "parent": { + "$oid": "6509c65694e6258a59c475fb" + }, + "name": "thumbnail", + "data": { + "path": "C:\\Users\\TOKEJE~1\\AppData\\Local\\Temp\\tmpg2tu1jdt\\output_2024\\test_project\\test_asset\\publish\\render\\renderMain_beauty\\v001\\test_project_test_asset_renderMain_beauty_v001.jpg", + "template": "{root[work]}\\{project[name]}\\{hierarchy}\\{asset}\\publish\\{family}\\{subset}\\v{version:0>3}\\{project[code]}_{asset}_{subset}_v{version:0>3}<_{output}><.{frame:0>4}>.{ext}" + }, + "context": { + "root": { + "work": "C:\\Users\\TOKEJE~1\\AppData\\Local\\Temp\\tmpg2tu1jdt\\output_2024" + }, + "project": { + "name": "test_project", + "code": "test_project" + }, + "hierarchy": "", + "asset": "test_asset", + "family": "render", + "subset": "renderMain_beauty", + "version": 1, + "ext": "jpg", + "task": { + "name": "test_task", + "type": "Generic", + "short": "gener" + }, + "representation": "thumbnail", + "username": "tokejepsen", + "user": "tokejepsen" + }, + "files": [ + { + "_id": { + "$oid": "6509c65694e6258a59c47601" + }, + "path": "{root[work]}/test_project/test_asset/publish/render/renderMain_beauty/v001/test_project_test_asset_renderMain_beauty_v001.jpg", + "size": 1692, + "hash": "test_project_test_asset_renderMain_beauty_v001,jpg|1695139414,1045067|1692", + "sites": [ + { + "name": "studio", + "created_dt": { + "$date": "2023-09-19T17:03:34.682Z" + } + } + ] + } + ] +}, +{ + "_id": { + "$oid": "6509c65694e6258a59c475fe" + }, + "schema": "openpype:representation-2.0", + "type": "representation", + "parent": { + "$oid": "6509c65694e6258a59c475fb" + }, + "name": "png_exr", + "data": { + "path": "C:\\Users\\TOKEJE~1\\AppData\\Local\\Temp\\tmpg2tu1jdt\\output_2024\\test_project\\test_asset\\publish\\render\\renderMain_beauty\\v001\\test_project_test_asset_renderMain_beauty_v001_png.png", + "template": "{root[work]}\\{project[name]}\\{hierarchy}\\{asset}\\publish\\{family}\\{subset}\\v{version:0>3}\\{project[code]}_{asset}_{subset}_v{version:0>3}<_{output}><.{frame:0>4}>.{ext}", + "colorspaceData": { + "colorspace": "scene-linear Rec 709/sRGB", + "config": { + "path": "C:/Program Files/Autodesk/Maya2024/resources/OCIO-configs/Maya-legacy/config.ocio", + "template": "C:/Program Files/Autodesk/Maya2024/resources/OCIO-configs/Maya-legacy/config.ocio" + }, + "display": "legacy", + "view": "sRGB gamma" + } + }, + "context": { + "root": { + "work": "C:\\Users\\TOKEJE~1\\AppData\\Local\\Temp\\tmpg2tu1jdt\\output_2024" + }, + "project": { + "name": "test_project", + "code": "test_project" + }, + "hierarchy": "", + "asset": "test_asset", + "family": "render", + "subset": "renderMain_beauty", + "version": 1, + "output": "png", + "ext": "png", + "task": { + "name": "test_task", + "type": "Generic", + "short": "gener" + }, + "representation": "png_exr", + "username": "tokejepsen", + "user": "tokejepsen" + }, + "files": [ + { + "_id": { + "$oid": "6509c65694e6258a59c47603" + }, + "path": "{root[work]}/test_project/test_asset/publish/render/renderMain_beauty/v001/test_project_test_asset_renderMain_beauty_v001_png.png", + "size": 155, + "hash": "test_project_test_asset_renderMain_beauty_v001_png,png|1695139414,6511261|155", + "sites": [ + { + "name": "studio", + "created_dt": { + "$date": "2023-09-19T17:03:34.682Z" + } + } + ] + } + ] +}] + diff --git a/tests/integration/hosts/maya/expected/test_project/test_asset/publish/model/modelMain/hero/test_project_test_asset_modelMain_hero.abc b/tests/integration/hosts/maya/expected/files/test_project/test_asset/publish/model/modelMain/hero/test_project_test_asset_modelMain_hero.abc similarity index 100% rename from tests/integration/hosts/maya/expected/test_project/test_asset/publish/model/modelMain/hero/test_project_test_asset_modelMain_hero.abc rename to tests/integration/hosts/maya/expected/files/test_project/test_asset/publish/model/modelMain/hero/test_project_test_asset_modelMain_hero.abc diff --git a/tests/integration/hosts/maya/expected/test_project/test_asset/publish/model/modelMain/hero/test_project_test_asset_modelMain_hero.ma b/tests/integration/hosts/maya/expected/files/test_project/test_asset/publish/model/modelMain/hero/test_project_test_asset_modelMain_hero.ma similarity index 100% rename from tests/integration/hosts/maya/expected/test_project/test_asset/publish/model/modelMain/hero/test_project_test_asset_modelMain_hero.ma rename to tests/integration/hosts/maya/expected/files/test_project/test_asset/publish/model/modelMain/hero/test_project_test_asset_modelMain_hero.ma diff --git a/tests/integration/hosts/maya/expected/test_project/test_asset/publish/model/modelMain/v001/test_project_test_asset_modelMain_v001.abc b/tests/integration/hosts/maya/expected/files/test_project/test_asset/publish/model/modelMain/v001/test_project_test_asset_modelMain_v001.abc similarity index 100% rename from tests/integration/hosts/maya/expected/test_project/test_asset/publish/model/modelMain/v001/test_project_test_asset_modelMain_v001.abc rename to tests/integration/hosts/maya/expected/files/test_project/test_asset/publish/model/modelMain/v001/test_project_test_asset_modelMain_v001.abc diff --git a/tests/integration/hosts/maya/expected/test_project/test_asset/publish/model/modelMain/v001/test_project_test_asset_modelMain_v001.ma b/tests/integration/hosts/maya/expected/files/test_project/test_asset/publish/model/modelMain/v001/test_project_test_asset_modelMain_v001.ma similarity index 100% rename from tests/integration/hosts/maya/expected/test_project/test_asset/publish/model/modelMain/v001/test_project_test_asset_modelMain_v001.ma rename to tests/integration/hosts/maya/expected/files/test_project/test_asset/publish/model/modelMain/v001/test_project_test_asset_modelMain_v001.ma diff --git a/tests/integration/hosts/maya/expected/test_project/test_asset/publish/render/renderMain_beauty/v001/test_project_test_asset_renderMain_beauty_v001.exr b/tests/integration/hosts/maya/expected/files/test_project/test_asset/publish/render/renderMain_beauty/v001/test_project_test_asset_renderMain_beauty_v001.exr similarity index 100% rename from tests/integration/hosts/maya/expected/test_project/test_asset/publish/render/renderMain_beauty/v001/test_project_test_asset_renderMain_beauty_v001.exr rename to tests/integration/hosts/maya/expected/files/test_project/test_asset/publish/render/renderMain_beauty/v001/test_project_test_asset_renderMain_beauty_v001.exr diff --git a/tests/integration/hosts/maya/expected/test_project/test_asset/publish/render/renderMain_beauty/v001/test_project_test_asset_renderMain_beauty_v001.jpg b/tests/integration/hosts/maya/expected/files/test_project/test_asset/publish/render/renderMain_beauty/v001/test_project_test_asset_renderMain_beauty_v001.jpg similarity index 100% rename from tests/integration/hosts/maya/expected/test_project/test_asset/publish/render/renderMain_beauty/v001/test_project_test_asset_renderMain_beauty_v001.jpg rename to tests/integration/hosts/maya/expected/files/test_project/test_asset/publish/render/renderMain_beauty/v001/test_project_test_asset_renderMain_beauty_v001.jpg diff --git a/tests/integration/hosts/maya/expected/test_project/test_asset/publish/render/renderMain_beauty/v001/test_project_test_asset_renderMain_beauty_v001_png.png b/tests/integration/hosts/maya/expected/files/test_project/test_asset/publish/render/renderMain_beauty/v001/test_project_test_asset_renderMain_beauty_v001_png.png similarity index 100% rename from tests/integration/hosts/maya/expected/test_project/test_asset/publish/render/renderMain_beauty/v001/test_project_test_asset_renderMain_beauty_v001_png.png rename to tests/integration/hosts/maya/expected/files/test_project/test_asset/publish/render/renderMain_beauty/v001/test_project_test_asset_renderMain_beauty_v001_png.png diff --git a/tests/integration/hosts/maya/expected/test_project/test_asset/publish/workfile/workfileTest_task/v001/test_project_test_asset_workfileTest_task_v001.ma b/tests/integration/hosts/maya/expected/files/test_project/test_asset/publish/workfile/workfileTest_task/v001/test_project_test_asset_workfileTest_task_v001.ma similarity index 100% rename from tests/integration/hosts/maya/expected/test_project/test_asset/publish/workfile/workfileTest_task/v001/test_project_test_asset_workfileTest_task_v001.ma rename to tests/integration/hosts/maya/expected/files/test_project/test_asset/publish/workfile/workfileTest_task/v001/test_project_test_asset_workfileTest_task_v001.ma diff --git a/tests/integration/hosts/maya/expected/test_project/test_asset/work/test_task/test_project_test_asset_test_task_v001.ma b/tests/integration/hosts/maya/expected/files/test_project/test_asset/work/test_task/test_project_test_asset_test_task_v001.ma similarity index 100% rename from tests/integration/hosts/maya/expected/test_project/test_asset/work/test_task/test_project_test_asset_test_task_v001.ma rename to tests/integration/hosts/maya/expected/files/test_project/test_asset/work/test_task/test_project_test_asset_test_task_v001.ma diff --git a/tests/integration/hosts/maya/expected/test_project/test_asset/work/test_task/test_project_test_asset_test_task_v002.ma b/tests/integration/hosts/maya/expected/files/test_project/test_asset/work/test_task/test_project_test_asset_test_task_v002.ma similarity index 100% rename from tests/integration/hosts/maya/expected/test_project/test_asset/work/test_task/test_project_test_asset_test_task_v002.ma rename to tests/integration/hosts/maya/expected/files/test_project/test_asset/work/test_task/test_project_test_asset_test_task_v002.ma diff --git a/tests/integration/hosts/maya/expected/test_project/test_asset/work/test_task/workspace.mel b/tests/integration/hosts/maya/expected/files/test_project/test_asset/work/test_task/workspace.mel similarity index 100% rename from tests/integration/hosts/maya/expected/test_project/test_asset/work/test_task/workspace.mel rename to tests/integration/hosts/maya/expected/files/test_project/test_asset/work/test_task/workspace.mel diff --git a/tests/integration/hosts/maya/test_publish_in_maya.py b/tests/integration/hosts/maya/test_publish_in_maya.py index 19cbfc813d6..b62884501aa 100644 --- a/tests/integration/hosts/maya/test_publish_in_maya.py +++ b/tests/integration/hosts/maya/test_publish_in_maya.py @@ -1,6 +1,8 @@ import os import shutil import re +import json +from collections import defaultdict import pytest @@ -142,7 +144,9 @@ class TestPublishInMaya(MayaFixtures, PublishTest): """ PERSIST = False - EXPECTED_FOLDER = os.path.join(os.path.dirname(__file__), "expected") + EXPECTED_FOLDER = os.path.join( + os.path.dirname(__file__), "expected", "files" + ) INPUT_DUMPS = os.path.join(os.path.dirname(__file__), "input", "dumps") INPUT_ENVIRONMENT_JSON = os.path.join( os.path.dirname(__file__), "input", "env_vars", "env_var.json" @@ -184,106 +188,121 @@ def test_publish( matches = re.findall(error_regex, logging_output) assert not matches, matches[0][0] - def test_db_asserts(self, dbcon, deadline_finished): - """Host and input data dependent expected results in DB.""" - print("test_db_asserts") - asserts = [] - asserts.append(DBAssert.count_of_types(dbcon, "version", 3)) - - asserts.append( - DBAssert.count_of_types(dbcon, "version", 0, name={"$ne": 1}) - ) + def count_of_types(self, dbcon, queried_type, **kwargs): + """Queries 'dbcon' and counts documents of type 'queried_type' - asserts.append( - DBAssert.count_of_types(dbcon, "subset", 1, name="modelMain") - ) + Args: + dbcon (AvalonMongoDB) + queried_type (str): type of document ("asset", "version"...) + expected (int): number of documents found + any number of additional keyword arguments - asserts.append( - DBAssert.count_of_types( - dbcon, "subset", 1, name="workfileTest_task" - ) - ) + special handling of argument additional_args (dict) + with additional args like + {"context.subset": "XXX"} + """ + args = {"type": queried_type} + for key, val in kwargs.items(): + if key == "additional_args": + args.update(val) + else: + args[key] = val - asserts.append(DBAssert.count_of_types(dbcon, "representation", 8)) + return dbcon.count_documents(args) - asserts.append( - DBAssert.count_of_types( - dbcon, - "representation", - 2, - additional_args={ - "context.subset": "modelMain", "context.ext": "abc" - } - ) - ) + def test_db_asserts(self, dbcon, deadline_finished): + """Host and input data dependent expected results in DB.""" - asserts.append( - DBAssert.count_of_types( - dbcon, - "representation", - 2, - additional_args={ - "context.subset": "modelMain", "context.ext": "ma" - } - ) + expected_data = None + json_path = os.path.join( + os.path.dirname(__file__), + "expected", + "avalon_tests.test_project.json" ) + with open(json_path, "r") as f: + expected_data = json.load(f) + + expected_entities = { + "subset": [], + "version": [], + "representation": [], + "hero_version": [] + } + for entity in expected_data: + if entity["type"] in expected_entities.keys(): + expected_entities[entity["type"]].append(entity) - asserts.append( - DBAssert.count_of_types( - dbcon, - "representation", - 1, - additional_args={ - "context.subset": "workfileTest_task", "context.ext": "ma" - } - ) - ) + asserts = [] - asserts.append( - DBAssert.count_of_types( - dbcon, "subset", 1, name="renderMain_beauty" + for entity_type, entities in expected_entities.items(): + # Ensure entity counts are correct. + current = self.count_of_types(dbcon, entity_type) + expected = len(entities) + msg = ( + "{} count is not the same as expected. Current: {}." + " Expected: {}.".format(entity_type, current, expected) ) + if current != expected: + asserts.append(msg) + + # Ensure there is only 1 version of each subset. + current = self.count_of_types(dbcon, "version", name={"$ne": 1}) + expected = 0 + msg = ( + "Found versions that are not the first (1) version. Only one" + " version per subset expected." ) - - asserts.append( - DBAssert.count_of_types( - dbcon, - "representation", - 1, - additional_args={ - "context.subset": "renderMain_beauty", - "context.ext": "exr" - } + if current != expected: + asserts.append(msg) + + # Ensure names of subset entities are the same. + subset_names = [x["name"] for x in expected_entities["subset"]] + for name in subset_names: + current = self.count_of_types( + dbcon, entity_type, type="subset", name=name ) - ) - - asserts.append( - DBAssert.count_of_types( - dbcon, - "representation", - 1, - additional_args={ - "context.subset": "renderMain_beauty", - "context.ext": "jpg" - } + msg = "Subset with name \"{}\" was not found.".format(name) + if current != 1: + asserts.append(msg) + + # Ensure correct amount of representations by their context. + context_keys = [ + "asset", + "family", + "subset", + "ext", + "representation", + ] + temp = [] + representation_contexts = defaultdict(list) + for entity in expected_entities["representation"]: + context = {} + for key in context_keys: + context["context." + key] = entity["context"][key] + + index = len(temp) + if context in temp: + index = temp.index(context) + else: + temp.append(context) + + representation_contexts[index].append(context) + + for _, contexts in representation_contexts.items(): + context = contexts[0] + current = self.count_of_types( + dbcon, "representation", additional_args=context ) - ) - - asserts.append( - DBAssert.count_of_types( - dbcon, - "representation", - 1, - additional_args={ - "context.subset": "renderMain_beauty", - "context.ext": "png" - } + expected = len(contexts) + msg = ( + "Representation(s) with context as below was not found." + " Current: {}." + " Expected: {}.\n{}".format(current, expected, context) ) - ) + if current != expected: + asserts.append(msg) - failures = [x for x in asserts if x is not None] - msg = "Failures:\n" + "\n".join(failures) - assert not failures, msg + assert asserts == [], "\n".join(asserts) if __name__ == "__main__": diff --git a/tests/lib/testing_classes.py b/tests/lib/testing_classes.py index c10afda66e1..49ba1dcc849 100644 --- a/tests/lib/testing_classes.py +++ b/tests/lib/testing_classes.py @@ -502,7 +502,7 @@ def publish_finished( def test_folder_structure_same( self, dbcon, - publish_finished, + deadline_finished, setup_fixture, skip_compare_folders ): From d57e4eaabadb90d54a12164ce3577f55f72a6279 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Thu, 21 Sep 2023 18:58:24 +0100 Subject: [PATCH 67/69] Ingest expected database --- .../hosts/maya/expected/avalon_tests.test_project.json | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/integration/hosts/maya/expected/avalon_tests.test_project.json b/tests/integration/hosts/maya/expected/avalon_tests.test_project.json index 134f2f12809..21d0b753431 100644 --- a/tests/integration/hosts/maya/expected/avalon_tests.test_project.json +++ b/tests/integration/hosts/maya/expected/avalon_tests.test_project.json @@ -941,4 +941,3 @@ } ] }] - From b96a99340dd9c6b0ad39c64c676759b7a6d749ca Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Sat, 23 Sep 2023 15:50:31 +0100 Subject: [PATCH 68/69] Remove class_name --- openpype/cli.py | 5 ----- openpype/pype_commands.py | 1 - 2 files changed, 6 deletions(-) diff --git a/openpype/cli.py b/openpype/cli.py index cf37af49c96..52b96428392 100644 --- a/openpype/cli.py +++ b/openpype/cli.py @@ -306,9 +306,6 @@ def run(script): help="Only create dbs, do not run tests", is_flag=True, default=False) -@click.option("--class_name", - help="Specific test class to setup.", - multiple=True) @click.option("--dump_databases", help="Dump all databases to data folder.", is_flag=True, @@ -325,7 +322,6 @@ def runtests( app_variant, timeout, setup_only, - class_name, dump_databases ): """Run all automatic tests after proper initialization via start.py""" @@ -341,7 +337,6 @@ def runtests( app_variant, timeout, setup_only, - class_name, dump_databases ) diff --git a/openpype/pype_commands.py b/openpype/pype_commands.py index 88b705d4035..e423fbb6fda 100644 --- a/openpype/pype_commands.py +++ b/openpype/pype_commands.py @@ -225,7 +225,6 @@ def run_tests( app_variant, timeout, setup_only, - class_names, dump_databases ): """ From 15e82c8af836283561ee975fd7bc1741fbc1b691 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Sat, 23 Sep 2023 15:50:44 +0100 Subject: [PATCH 69/69] Remove redundant import --- tests/integration/hosts/maya/test_publish_in_maya.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/integration/hosts/maya/test_publish_in_maya.py b/tests/integration/hosts/maya/test_publish_in_maya.py index b62884501aa..68e8bbe239b 100644 --- a/tests/integration/hosts/maya/test_publish_in_maya.py +++ b/tests/integration/hosts/maya/test_publish_in_maya.py @@ -6,7 +6,6 @@ import pytest -from tests.lib.assert_classes import DBAssert from tests.lib.testing_classes import HostFixtures, PublishTest