Source code for cgl.plugins.substance.utils
import logging
import os
from cgl.core.config.query import get_user_dir, AlchemyConfigManager
from cgl.core.utils.general import cgl_execute, cgl_copy
from cgl.core.utils.read_write import save_yaml
CFG = AlchemyConfigManager()
[docs]
def get_textures():
import substance_painter
texture_obj_list = substance_painter.textureset.all_texture_sets()
texture_list = []
for set_obj in texture_obj_list:
texture_list.append(set_obj.name())
return texture_list
[docs]
def get_export_list():
export_list = []
texture_list = get_textures()
for texture_set in texture_list:
texture_dict = dict({"rootPath": texture_set})
export_list.append(texture_dict)
return export_list
[docs]
def open_substance_painter():
program_files_path = os.getenv("ProgramFiles")
substance_path = os.path.join(
program_files_path,
"Adobe",
"Adobe Substance 3D Painter",
"Adobe Substance 3D Painter.exe",
)
substance_path2 = os.path.join(
program_files_path,
"Allegorithmic",
"Adobe Substance 3D Painter",
"Adobe Substance 3D Painter.exe",
)
if os.path.exists(substance_path):
cmd = '"{}"'.format(substance_path)
cgl_execute(cmd, new_window=True)
return
else:
logging.error(
"Cant Find Substance Painter Executable {}".format(substance_path)
)
if os.path.exists(substance_path2):
logging.error("Encountered older version of Substance - upgrade to use Alchemy")
[docs]
def import_export_preset(preset_name):
import substance_painter
code_root = CFG.get_code_root()
export_preset_path = (
os.path.join(code_root, "resources", "substance", "export_presets", preset_name)
+ ".spexp"
)
try:
new_resource = substance_painter.resource.import_session_resource(
export_preset_path, substance_painter.resource.Usage.EXPORT
)
except ValueError:
logging.info(f"Error Could Not Find Preset at: {export_preset_path}")
return None
return new_resource
[docs]
def save_mdl_path(path_object):
user_config_file = CFG.user_config_file
mdl_fbx_path = path_object.get_path()
user_config_dict = CFG.user_config
user_config_dict["current_substance_asset_path"] = mdl_fbx_path
save_yaml(user_config_file, user_config_dict)
# user_config_dict = path_object.cfg.user_config
# user_config_dict["paths"]["substance_asset_path"] = path_object.get_path()
#
# save_json(path_object.cfg.user_config_file, user_config_dict)
[docs]
def copy_user_setup():
code_root = CFG.get_code_root()
copy_source = os.path.join(code_root, "cgl", "plugins", "substance", "userSetup.py")
user_path = get_user_dir()
substance_startup_path = os.path.join(
user_path,
"Documents",
"Adobe",
"Adobe Substance 3D Painter",
"python",
"startup",
)
# TODO - i need to hard code the ALC_PYTHON_PATH as well as the ALC_CODE_ROOT, or we need them as env vars.
# so far this is one of the only places where we need to hard code the path to the code root.
if os.path.exists(substance_startup_path):
copy_destination = os.path.join(substance_startup_path, "userSetup.py")
print("Copying {} to {}".format(copy_source, copy_destination))
cgl_copy(source=copy_source, destination=copy_destination, verbose=True)
else:
print("Path Does Not Exist: {}".format(substance_startup_path))
if __name__ == "__main__":
copy_user_setup()
# C:\Users\tmiko\OneDrive\Documents\Adobe\Adobe Substance 3D Painter\python\startup
# C:\Users\tmiko\OneDrive\Adobe\Adobe Substance 3D Painter\python\startup