Metapipe/MetaPipeFree24.py

1703 lines
88 KiB
Python
Raw Permalink Normal View History

2025-01-15 05:30:28 +08:00
#ALL RIGHTS BELONGS TO UZAY CALISKAN.
#PLEASE CHECK THE FULL LICENSE INSIDE PRODUCT FOLDER (Part of the agreement is below)
#You will not:
# make any copy of the Product except for archival or backup purposes;
# circumvent or disable any access control technology, security device, procedure, protocol, or technological protection mechanism that may be included or established in or as part of the Product;
# hack, reverse engineer, decompile, disassemble, modify or create derivative works of the Product or any part of the Product;
# publish, sell distribute or otherwise make the Product available to others to use, download or copy;
#transfer or sub-license the Product or any rights under this Agreement to any third party, whether voluntarily or by operation of law;
# use the Product for any purpose that may be defamatory, threatening, abusive, harmful or invasive of anyone's privacy, or that may otherwise violate any law or give rise to civil or other liability;
# misrepresent yourself as the creator or owner of the Property;
# remove or modify any proprietary notice, symbol or label in or on the Product;
# directly or indirectly assist, facilitate or encourage any third party to carry on any activity prohibited by this Agreement.
import importlib
import sys
import maya.cmds as cmds
import os
from os import path as ospath
from sys import path as syspath
from sys import platform
maya_version = int(cmds.about(version=True))
#MAYAPLUGINPATH
maya_plugin_path = os.environ.get('MAYA_PLUG_IN_PATH')
new_path = ""
if maya_version == 2022:
new_path = 'c:/dna_calibration/lib/Maya2022/windows'
if maya_version == 2023:
new_path = 'c:/dna_calibration/lib/Maya2023/windows'
if maya_version == 2024:
new_path = 'c:/dna_calibration/lib/Maya2024/windows'
if maya_plugin_path:
updated_path = maya_plugin_path + os.pathsep + new_path
else:
updated_path = new_path
os.environ['MAYA_PLUG_IN_PATH'] = updated_path
if maya_version < 2022 or maya_version > 2024:
raise ValueError("Metapipe only works with MAYA 2022/2023/2024")
ROOT_DIR = "c:/dna_calibration"
MAIN_PATH = "c:/Arts and Spells/Metapipe Free 2.4.0"
iconPath = MAIN_PATH + "/Icons/"
MAYA_VERSION = maya_version
ROOT_LIB_DIR = f"{ROOT_DIR}/lib/Maya{MAYA_VERSION}"
if platform == "win32":
LIB_DIR = f"{ROOT_LIB_DIR}/windows"
elif platform == "linux":
LIB_DIR = f"{ROOT_LIB_DIR}/linux"
else:
raise OSError(
"OS not supported, please compile dependencies and add value to LIB_DIR"
)
# Adds directories to path
syspath.insert(0, ROOT_DIR)
syspath.insert(0, LIB_DIR)
sys.path.append(MAIN_PATH)
sys.path.append("c:/Arts and Spells/Scripts")
#Dna Path
dnaPath= "C:/Users/MONSTER/Documents/Megascans Library/Downloaded/DHI/h344NMUV_asset/1k/asset_source/MetaHumans/CustomDNA/SourceAssets/CustomDNA.dna"
body_type= "m_med_nrw"
sceneLodN = str(0)
scenebodyLodN = str(0)
CHARACTER_NAME = os.path.basename(dnaPath).split(".")[0]
import time
import maya.cmds as cmds
import maya.OpenMayaUI as omui
from shiboken2 import wrapInstance
from PySide2 import QtWidgets, QtGui, QtCore
from os import environ
import logging
import maya.OpenMaya as om
from os import environ, makedirs
#import dna_viewer
cmds.select(clear=True)
if maya_version == 2024:
if sys.version_info < (3, 10, 8):
cmds.confirmDialog(title="ERROR", message="Python 3.11.0 or above is required. Please download correct Python Version!")
raise ValueError("Python 3.11.0 or above is required. Please download correct Python Version!")
if maya_version == 2023:
if sys.version_info < (3, 9, 7):
raise ValueError("Python 3.9.7 or above is required. Please download correct Python Version!")
if maya_version == 2022:
if sys.version_info < (3, 7, 0):
raise ValueError("Python 3.9.7 or above is required. Please download correct Python Version!")
auto_keyframe_toggle = cmds.autoKeyframe(q=True, state=True)
if auto_keyframe_toggle:
raise ValueError("Auto Keyframe Toggle is On! Turn it of and try again.")
global selChack
selCheck=0
worldCheck=0
file_path = "c:/Arts and Spells/Scripts/dat.py"
if os.path.exists(file_path):
import dat
importlib.reload(dat)
ROOT_DIR = dat.ROOT_DIR
MAIN_PATH = dat.MAIN_PATH
dnaPath = dat.dnaPath
body_type = dat.body_type
def newScene():
if cmds.file(query=True, modified=True):
result = cmds.confirmDialog(
title="Save Changes?",
message="Do you want to save changes to the current scene?",
button=["Save", "Don't Save", "Cancel"],
defaultButton="Save",
cancelButton="Cancel",
dismissString="Cancel")
if result == "Save":
# Save the current scene
cmds.file(save=True, force=True)
elif result == "Don't Save":
# Discard changes and create a new scene
cmds.file(new=True, force=True)
else:
# No unsaved changes, create a new scene directly
cmds.file(new=True, force=True)
if not cmds.objExists("metapipefreewindow"):
cmds.createNode("transform", name="metapipefreewindow")
leftPanelButtonV(0)
def saveScene():
if cmds.objExists("LoadedDNAInfoNode") or cmds.objExists("rl4Embedded_Archetype") or cmds.objExists ("rl4Embedded_Archtype"):
saveFileName = "Checkpoint"
else:
saveFileName = "Custom Head"
# Define the file path for the .mb file
file_path = f"{ROOT_DIR}/data/" + saveFileName + ".mb"
# Save the current scene as an .mb file
cmds.file(rename=file_path)
cmds.file(save=True, type="mayaBinary")
print(f"Saved as {file_path}")
def loadScene(saveFileName):
# Define the file path for the .mb file
file_path = f"{ROOT_DIR}/data/" + saveFileName + ".mb"
if os.path.isfile(file_path):
if cmds.file(query=True, modified=True):
result = cmds.confirmDialog(
title="Save Changes?",
message="Do you want to save changes to the current scene?",
button=["Save", "Don't Save", "Cancel"],
defaultButton="Save",
cancelButton="Cancel",
dismissString="Cancel")
if result == "Save":
# Save the current scene
cmds.file(save=True, force=True)
cmds.file(file_path, force=True, open=True)
elif result == "Don't Save":
# Discard changes and create a new scene
cmds.file(file_path, force=True, open=True)
else:
# No unsaved changes, create a new scene directly
cmds.file(file_path, force=True, open=True)
else:
cmds.confirmDialog(title="ERROR", message="Couldnt find any [Saved Scene]. You need to Save the scene to use this button.")
raise ValueError("Couldnt find any [Saved Scene]. You need to Save the scene to use this button.")
if not cmds.objExists("metapipefreewindow"):
cmds.createNode("transform", name="metapipefreewindow")
leftPanelButtonV(0)
def openDNAViewer():
"""calib_check = f"{ROOT_DIR}/dna_calibration.mod"
if not os.path.isfile(calib_check):
cmds.confirmDialog(title="ERROR", message="Please download Epic Games Dna Calibration 1.1.0 Version. Version is not matching or files are not found!")
raise ValueError("Please download Epic Games Dna Calibration 1.1.0 Version. Version is not matching or files are not found!")
calib_check = f"{ROOT_DIR}/data/mh4/additional_assemble_script.py"
if os.path.isfile(calib_check):
cmds.confirmDialog(title="ERROR", message="Please download Epic Games Dna Calibration 1.1.0 Version. Version is not matching or files are not found!")
raise ValueError("Please download Epic Games Dna Calibration 1.1.0 Version. Version is not matching or files are not found!")"""
metapipe_vcheck = f"{ROOT_DIR}/Metapipe_Free.py"
if os.path.isfile(metapipe_vcheck):
cmds.confirmDialog(title="ERROR", message="Old Version file found. Please delete Metapipe_Free.py file in your dna_calibration path!")
raise ValueError("Old Version file found. Please delete Metapipe_Free.py file in your dna_calibration path!")
root_check = f"{ROOT_DIR}/examples/dna_viewer_grab_changes_from_scene_and_propagate_to_dna.py"
if not os.path.isfile(root_check):
cmds.confirmDialog(title="ERROR", message="Please check ROOT_DIR path for the dna_calibration files! Files are not in ROOT_DIR")
raise ValueError("Please check ROOT_DIR path for the dna_calibration files! Files are not in ROOT_DIR")
dna_datas = f"{ROOT_DIR}/examples/datas_dna.py"
if not os.path.isfile(dna_datas):
cmds.confirmDialog(title="ERROR", message="Please save your preferences and try again")
raise ValueError("Please save your preferences and try again")
dna_viewer.show()
cmds.createNode("transform", name="OpenedDNAInfoNode")
leftPanelButtonV(1)
def datasBuild():
from dna_viewer import DNA, RigConfig, build_rig
#datas_dna.assemble_maya_scene()
result = cmds.confirmDialog(
title="Build DNA",
message="Please choose Build DNA Option.",
button=["Editable", "Rigged", "Cancel"],
defaultButton="Editable",
cancelButton="Cancel",
dismissString="Cancel")
if result == "Editable":
DATA_DIR = f"{ROOT_DIR}/data"
dna = DNA(dnaPath)
config = RigConfig(
gui_path=f"{DATA_DIR}/gui.ma",
analog_gui_path=f"{DATA_DIR}/analog_gui.ma",
aas_path=f"{DATA_DIR}/additional_assemble_script.py")
build_rig(dna=dna, config=config)
if cmds.objExists("rl4Embedded_Archetype"):
cmds.delete("rl4Embedded_Archetype")
if cmds.objExists("rl4Embedded_Archtype"):
cmds.delete("rl4Embedded_Archtype")
elif result == "Rigged":
DATA_DIR = f"{ROOT_DIR}/data"
dna = DNA(dnaPath)
config = RigConfig(
gui_path=f"{DATA_DIR}/gui.ma",
analog_gui_path=f"{DATA_DIR}/analog_gui.ma",
aas_path=f"{DATA_DIR}/additional_assemble_script.py")
build_rig(dna=dna, config=config)
def buildDNA():
"""calib_check = f"{ROOT_DIR}/dna_calibration.mod"
if not os.path.isfile(calib_check):
cmds.confirmDialog(title="ERROR", message="Please download Epic Games Dna Calibration 1.1.0 Version. Version is not matching or files are not found!")
raise ValueError("Please download Epic Games Dna Calibration 1.1.0 Version. Version is not matching or files are not found!")
calib_check = f"{ROOT_DIR}/UnrealFest.zip"
if os.path.isfile(calib_check):
cmds.confirmDialog(title="ERROR", message="Please download Epic Games Dna Calibration 1.1.0 Version. Version is not matching or files are not found!")
raise ValueError("Please download Epic Games Dna Calibration 1.1.0 Version. Version is not matching or files are not found!")"""
metapipe_vcheck = f"{ROOT_DIR}/Metapipe_Free.py"
if os.path.isfile(metapipe_vcheck):
cmds.confirmDialog(title="ERROR", message="Old Version file found. Please delete Metapipe_Free.py file in your dna_calibration path!")
raise ValueError("Old Version file found. Please delete Metapipe_Free.py file in your dna_calibration path!")
root_check = f"{ROOT_DIR}/examples/dna_viewer_grab_changes_from_scene_and_propagate_to_dna.py"
if not os.path.isfile(root_check):
cmds.confirmDialog(title="ERROR", message="Please check ROOT_DIR path for the dna_calibration files! Files are not in ROOT_DIR")
raise ValueError("Please check ROOT_DIR path for the dna_calibration files! Files are not in ROOT_DIR")
dna_datas = f"{ROOT_DIR}/examples/datas_dna.py"
if not os.path.isfile(dna_datas):
cmds.confirmDialog(title="ERROR", message="Please save your preferences and try again")
raise ValueError("Please save your preferences and try again")
if not os.path.isfile(dnaPath):
cmds.confirmDialog(title="ERROR", message="DNA not found. Please check your preferences and correct the DNA path.")
raise ValueError("DNA not found. Please check your preferences and correct the DNA path.")
# Create a progress window
datasBuild()
cmds.createNode("transform", name="OpenedDNAInfoNode")
if not cmds.objExists("metapipefreewindow"):
cmds.createNode("transform", name="metapipefreewindow")
leftPanelButtonV(1)
def datasLoad():
import datas_dna
datas_dna.load_dna_data()
def loadDNA():
dna_datas = f"{ROOT_DIR}/examples/datas_dna.py"
#if not os.path.isfile(dna_datas):
#raise ValueError("Please press Update button first")
sys.path.append(f"{ROOT_DIR}/examples")
if not os.path.isfile(dna_datas):
cmds.confirmDialog(title="ERROR", message="Please save [Metapipe Preferences] again")
raise ValueError("Please save [Metapipe Preferences] again")
datasLoad()
if not cmds.objExists("LoadedDNAInfoNode"):
cmds.createNode("transform", name="LoadedDNAInfoNode")
cmds.warning("Loaded Succesfully!")
cmds.warning("Already Loaded!")
leftPanelButtonV(2)
unlock()
def datasSave():
import datas_dna
datas_dna.save_dna_data()
def saveDNA():
sys.path.append(f"{ROOT_DIR}/examples")
datasSave()
if not cmds.objExists("metapipefreewindow"):
cmds.createNode("transform", name="metapipefreewindow")
leftPanelButtonV(3)
def prepare_export():
# Detach spine_04 from head_grp and move it to the top level of the Outliner
cmds.parent('spine_04', w=True, r=True)
if not cmds.namespace(exists="DHIhead"):
cmds.namespace(add="DHIhead", parent=":")
cmds.namespace(set="DHIhead")
cmds.namespace(set=":")
# Get a list of all the joints in the scene
joints = cmds.ls(type="joint")
# Add every joint to the "DHIhead" namespace and print a message if it already has the "DHIhead" prefix
for joint in joints:
if joint.startswith("DHIhead:"):
print(joint + " is already in the DHIhead namespace")
else:
cmds.rename(joint, "DHIhead:" + joint)
leftPanelButtonV(4)
print("Ready")
def fixbody():
#
#
# Transfer Body original skeleton to the new head Skeleton
CD = 15
lower_CD = -1
minCD = 0
# Define the joint names and namespaces
head_joint = "DHIhead:spine_04"
body_joint = "spine_04_drv"
# Split the joint names into their respective namespaces and joint names
head_namespace, head_joint_name = head_joint.split(":")
# Get the list of child joints for the head joint
head_child_joints = cmds.listRelatives(head_joint, children=True, allDescendents=True,type="joint")
body_child_joints = cmds.listRelatives(body_joint, children=True, allDescendents=True, type="joint")
def move2target_joint(moving_joint, target_joint):
lower_lip_rotation_pos = cmds.xform(moving_joint, query=True, worldSpace=True, rotatePivot=True)
jaw_pos = cmds.xform(target_joint, query=True, worldSpace=True, rotatePivot=True)
# Get the child joints
child_joints = cmds.listRelatives(moving_joint, c=True, type="joint")
# Store the initial positions of the child joints
child_positions = []
if child_joints:
for child_joint in child_joints:
child_positions.append(cmds.xform(child_joint, q=True, ws=True, t=True))
# Set the translate and rotate pivot attributes of the "FACIAL_C_LowerLipRotation" joint to match those of "FACIAL_C_MouthUpper"
cmds.xform(moving_joint, translation=jaw_pos, rotatePivot=lower_lip_rotation_pos, worldSpace=True)
if child_joints:
# Move each child joint back to its original position
for i, child_joint in enumerate(child_joints):
cmds.xform(child_joint, ws=True, t=child_positions[i])
moving_joint = body_joint
target_joint = head_joint
move2target_joint(moving_joint, target_joint)
while CD >= minCD:
joint_CD = [joint for joint in body_child_joints if cmds.getAttr(joint + ".chainDepth") == CD]
for joint_name in joint_CD:
drvname = joint_name.replace("_drv", "")
# Build the joint names for the current joint
head_current_joint = "{}:{}".format(head_namespace, drvname)
if cmds.objExists(head_current_joint):
if joint_name[-5] == "r":
offnamer = joint_name.replace("_r_drv", "Off_r_drv")
if cmds.objExists(offnamer):
joint_name = offnamer
if joint_name[-5] == "l":
offnamel = joint_name.replace("_l_drv", "Off_l_drv")
if cmds.objExists(offnamel):
joint_name = offnamel
moving_joint = joint_name
target_joint = head_current_joint
move2target_joint(moving_joint, target_joint)
lower_CD -= 1
CD -= 1
cmds.createNode("transform", name="FixBodyInfoNode")
leftPanelButtonV(6)
def bind_skin(gender_mesh):
# Body
mesh_obj = cmds.ls(gender_mesh)[0]
# Duplicate the mesh
duplicated_mesh_obj = cmds.duplicate(mesh_obj)[0]
cmds.select([duplicated_mesh_obj, "DHIbody:root"])
# Bind skin to the mesh
skin_cluster = cmds.skinCluster("DHIbody:root", duplicated_mesh_obj)[0]
cmds.select([mesh_obj, duplicated_mesh_obj])
cmds.copySkinWeights(noMirror=True, surfaceAssociation="closestPoint", influenceAssociation=["name", "oneToOne"])
cmds.delete(mesh_obj)
cmds.rename(duplicated_mesh_obj, gender_mesh)
gender=0
gender_mesh = body_type + "_body_lod0_mesh"
def build_body():
cmds.createNode("transform", name="body_gen_node")
leftPanelButtonV(5)
Body_DRV = f"{ROOT_DIR}/data/Body_Drv.mb"
if not os.path.isfile(Body_DRV):
raise ValueError("Please prepare the body file first. Body_Drv file is not found")
skeleton_file_path = f"{ROOT_DIR}/data/Body_Drv.mb"
# Import the FBX file
cmds.file(skeleton_file_path, i=True, ignoreVersion=True, mergeNamespacesOnClash=False)
def add_chain_depth_attribute(joints):
for joint in joints:
if not cmds.attributeQuery('chainDepth', node=joint, exists=True):
cmds.addAttr(joint, longName='chainDepth', attributeType='long', defaultValue=0)
cmds.setAttr(joint + '.chainDepth', keyable=True)
def set_chain_depth_value(joints, value):
for joint in joints:
cmds.setAttr(joint + '.chainDepth', value)
# Get all joints in the scene
all_joints = cmds.ls(type="joint")
# Remove joints in the "DHIhead:spine_04" hierarchy (Avoid HEAD)
exclude_joints = cmds.ls("DHIhead:spine_04", dag=True, type="joint")
all_joints = cmds.ls("root_drv", dag=True, type="joint")
add_chain_depth_attribute(all_joints)
# Filter end joints (joints with no child joints)
end_joints = [joint for joint in all_joints if not cmds.listRelatives(joint, children=True, type='joint')]
# Set chainDepth attribute to 0 for all end joints
set_chain_depth_value(all_joints, 100)
set_chain_depth_value(end_joints, 0)
parents1 = []
for joint_name in end_joints:
p_joint = cmds.listRelatives(joint_name, parent=True, type="joint")
if p_joint:
children = cmds.listRelatives(p_joint, children=True, type="joint") or []
if all(cmds.getAttr(child + ".chainDepth") == 0 for child in children):
parents1.append(p_joint[0])
set_chain_depth_value(parents1, 1)
#Chaindepth add Attr Loop
chainDepth = 1
while parents1:
chainDepth += 1
new_parents = []
for joint_name in parents1:
p_joint = cmds.listRelatives(joint_name, parent=True, type="joint")
if p_joint:
children = cmds.listRelatives(p_joint, children=True, type="joint") or []
if all(cmds.getAttr(child + ".chainDepth") < chainDepth for child in children):
new_parents.append(p_joint[0])
if new_parents:
set_chain_depth_value(new_parents, chainDepth)
parents1 = new_parents
else:
break
DHIBODY_name = 'DHIbody:root'
bind_skin(gender_mesh)
unlock()
def connect_body():
bodyNS = "DHIbody:"
headNS = "DHIhead:"
for i in cmds.ls(type="joint"):
if headNS in i:
if i.replace(headNS,bodyNS) in cmds.ls(type="joint"):
cmds.parentConstraint(i.replace(headNS,bodyNS),i,mo=True)
cmds.scaleConstraint(i.replace(headNS,bodyNS),i,mo=True)
def bindSkinC():
selected_objects = cmds.ls(selection=True)
sel = selected_objects[0]
cmds.select('DHIbody:root', add=True)
cmds.skinCluster()
cmds.rename(sel, body_type + "_binded_body_lod0_mesh")
cmds.hide(body_type + "_body_lod0_mesh")
def copySkin():
selected_objects = cmds.ls(selection=True)
sel = selected_objects[0]
cmds.select(clear=True)
cmds.select(body_type + "_body_lod0_mesh", add=True)
cmds.select(sel, add=True)
cmds.copySkinWeights(noMirror=True, surfaceAssociation="closestPoint", influenceAssociation=["name", "oneToOne"])
cmds.delete(body_type + "_body_lod0_mesh")
cmds.rename(sel, body_type + "_body_lod0_mesh")
def shapeEdit():
import maya.mel as mel
mel.eval("ShapeEditor")
def findCustom():
selected_objects = cmds.ls(selection=True)
for obj in selected_objects:
poly_Match = 0
poly_count = cmds.polyEvaluate(obj, vertex=True)
if poly_count == 24049:
cmds.rename(obj, "custom_head_lod0_mesh")
poly_Match = 1
cmds.symbolButton("gcustom_head",edit=True,enable=True)
continue
elif poly_count == 4246:
cmds.rename(obj, "custom_teeth_lod0_mesh")
poly_Match = 1
cmds.symbolButton("gcustom_teeth",edit=True,enable=True)
continue
elif poly_count == 660:
cmds.rename(obj, "custom_saliva_lod0_mesh")
poly_Match = 1
cmds.symbolButton("gcustom_saliva",edit=True,enable=True)
continue
elif poly_count == 770:
if not cmds.objExists("custom_eyeLeft_lod0_mesh1"):
cmds.rename(obj, "custom_eyeLeft_lod0_mesh0")
poly_count = 1
elif poly_count == 552:
cmds.rename(obj, "custom_eyeshell_lod0_mesh")
poly_Match = 1
cmds.symbolButton("gcustom_eyeshell",edit=True,enable=True)
continue
elif poly_count == 2144:
cmds.rename(obj, "custom_eyelashes_lod0_mesh")
poly_Match = 1
cmds.symbolButton("gcustom_eyelashes",edit=True,enable=True)
continue
elif poly_count == 268:
cmds.rename(obj, "custom_eyeEdge_lod0_mesh")
poly_Match = 1
cmds.symbolButton("gcustom_eyeEdge",edit=True,enable=True)
continue
elif poly_count == 386:
cmds.rename(obj, "_custom_cartilage_lod0_mesh")
poly_Match = 1
cmds.symbolButton("gcustom_cartilage",edit=True,enable=True)
continue
elif poly_count == 30455:
cmds.rename(obj, body_type + "_custom_body_lod0_mesh")
poly_Match = 1
cmds.symbolButton("gcustom_body",edit=True,enable=True)
continue
elif poly_count == 54412:
cmds.rename(obj, body_type + "_custom_combined_lod0_mesh")
poly_Match = 1
cmds.symbolButton("gcustom_combined",edit=True,enable=True)
continue
if cmds.objExists("custom_eyeLeft_lod0_mesh0") and cmds.objExists("custom_eyeLeft_lod0_mesh1"):
cmds.symbolButton("gcustom_eyeLeft",edit=True,enable=True)
cmds.symbolButton("gcustom_eyeRight",edit=True,enable=True)
cmds.xform("custom_eyeLeft_lod0_mesh0", centerPivots=True)
cmds.xform("custom_eyeLeft_lod0_mesh1", centerPivots=True)
pos1 = cmds.xform("custom_eyeLeft_lod0_mesh0", query=True, worldSpace=True, rotatePivot=True)
pos2 = cmds.xform("custom_eyeLeft_lod0_mesh1", query=True, worldSpace=True, rotatePivot=True)
# Check the model is in rigth or left
if pos1[0] > 0 and pos2[0] > 0:
print("Both eyes are on the positive X side of the origin")
elif pos1[0] < 0 and pos2[0] < 0:
print("Both eyes are on the negative X side of the origin")
elif pos1[0] < 0 and pos2[0] > 0:
if cmds.objExists("eyeRight") or cmds.objExists("eyeLeft"):
print("Eye names already exist, Delete or rename them")
else:
cmds.rename("custom_eyeLeft_lod0_mesh0", "custom_eyeRight_lod0_mesh")
cmds.rename("custom_eyeLeft_lod0_mesh1", "custom_eyeLeft_lod0_mesh")
elif pos1[0] > 0 and pos2[0] < 0:
if cmds.objExists("eyeRight") or cmds.objExists("eyeLeft"):
print("Eye names already exist, Delete or rename them")
else:
cmds.rename("custom_eyeLeft_lod0_mesh0", "custom_eyeLeft_lod0_mesh")
cmds.rename("custom_eyeLeft_lod0_mesh1", "eyeRight_lod0_mesh")
elif pos1[0] == 0 or pos2[0] == 0:
print("Eye is in the middle")
def jointSelectionC(butName):
print(butName)
if cmds.objExists(butName):
butNameS=butName
if cmds.objExists("DHIhead:"+butName):
butNameS="DHIhead:"+butName
if cmds.objExists(butName+"_drv"):
butNameS=butName+"_drv"
global selCheck
selected_objects = cmds.ls(selection=True)
if butNameS not in selected_objects:
cmds.symbolButton(butName, edit=True, image=iconPath + "JointButtonSelected.png")
cmds.select(butNameS, add=True)
selCheck=1
else:
cmds.symbolButton(butName, edit=True, image=iconPath + "JointButton.png")
cmds.select(butNameS, deselect=True)
selCheck=0
def meshSelC(mesh, toggleN):
if toggleN == 0:
meshN = mesh + "_lod" + sceneLodN + "_mesh"
selected_objects = cmds.ls(selection=True)
if meshN not in selected_objects:
cmds.symbolButton("g" + mesh,edit=True,image=iconPath + "UIGeo" + mesh + "Pressed.png")
cmds.select(meshN, add=True)
selCheck=1
else:
cmds.symbolButton("g" + mesh,edit=True,image=iconPath + "UIGeo" + mesh + ".png")
cmds.select(meshN, deselect=True)
selCheck=0
if toggleN == 1:
meshN = body_type + "_" + mesh + "_lod" + scenebodyLodN + "_mesh"
selected_objects = cmds.ls(selection=True)
if meshN not in selected_objects:
cmds.symbolButton("g" + mesh,edit=True,image=iconPath + "UIGeo" + mesh + "Pressed.png")
cmds.select(meshN, add=True)
selCheck=1
else:
cmds.symbolButton("g" + mesh,edit=True,image=iconPath + "UIGeo" + mesh + ".png")
cmds.select(meshN, deselect=True)
selCheck=0
if toggleN == 2:
meshN = mesh + "_drv"
selected_objects = cmds.ls(selection=True)
if meshN not in selected_objects:
cmds.symbolButton(mesh,edit=True,image=iconPath + "JointButtonHPressed.png")
cmds.select(meshN, add=True)
selCheck=1
else:
cmds.symbolButton(mesh,edit=True,image=iconPath + "JointButtonH.png")
cmds.select(meshN, deselect=True)
selCheck=0
def selectAllGeo(toggleN):
if toggleN==0:
gheadMesh = ['head_lod' + sceneLodN + '_mesh', 'teeth_lod' + sceneLodN + '_mesh', 'saliva_lod' + sceneLodN + '_mesh', 'eyeLeft_lod' + sceneLodN + '_mesh', 'eyeshell_lod' + sceneLodN + '_mesh', 'eyelashes_lod' + sceneLodN + '_mesh', 'eyeEdge_lod' + sceneLodN + '_mesh', 'cartilage_lod' + sceneLodN + '_mesh', 'eyeRight_lod' + sceneLodN + '_mesh']
for obj in gheadMesh:
if cmds.objExists(obj):
cmds.select(obj, add=True)
if toggleN==1:
gheadMesh = ['head_lod' + sceneLodN + '_mesh', 'teeth_lod' + sceneLodN + '_mesh', 'saliva_lod' + sceneLodN + '_mesh', 'eyeLeft_lod' + sceneLodN + '_mesh', 'eyeshell_lod' + sceneLodN + '_mesh', 'eyelashes_lod' + sceneLodN + '_mesh', 'eyeEdge_lod' + sceneLodN + '_mesh', 'cartilage_lod' + sceneLodN + '_mesh', 'eyeRight_lod' + sceneLodN + '_mesh']
for obj in gheadMesh:
if cmds.objExists("custom_" + obj):
cmds.select("custom_" + obj, add=True)
if toggleN==2:
gbodyMesh = [body_type + "_body_lod" + scenebodyLodN + '_mesh',body_type + "_combined_lod" + scenebodyLodN + '_mesh',body_type + "_flipflops_lod" + scenebodyLodN + '_mesh']
for obj in gbodyMesh:
if cmds.objExists(obj):
cmds.select(obj, add=True)
if toggleN==3:
gbodyMesh = [body_type + "_custom_body_lod" + scenebodyLodN + '_mesh',body_type + "_custom_combined_lod" + scenebodyLodN + '_mesh',body_type + "_custom_flipflops_lod" + scenebodyLodN + '_mesh']
for obj in gbodyMesh:
if cmds.objExists(obj):
cmds.select(obj, add=True)
def checkSceneSel():
if cmds.objExists("metapipefreewindow"):
global toggleCheck
selected_objects = cmds.ls(selection=True)
gheadMesh = ['head_lod' + sceneLodN + '_mesh', 'teeth_lod' + sceneLodN + '_mesh', 'saliva_lod' + sceneLodN + '_mesh', 'eyeLeft_lod' + sceneLodN + '_mesh', 'eyeshell_lod' + sceneLodN + '_mesh', 'eyelashes_lod' + sceneLodN + '_mesh', 'eyeEdge_lod' + sceneLodN + '_mesh', 'cartilage_lod' + sceneLodN + '_mesh', 'eyeRight_lod' + sceneLodN + '_mesh']
gbodyMesh = [body_type + "_body_lod" + scenebodyLodN + '_mesh',body_type + "_combined_lod" + scenebodyLodN + '_mesh',body_type + "_flipflops_lod" + scenebodyLodN + '_mesh']
gcustomheadMesh = ['custom_head_lod0_mesh', 'custom_teeth_lod0_mesh', 'custom_saliva_lod0_mesh', 'custom_eyeLeft_lod0_mesh', 'custom_eyeshell_lod0_mesh', 'custom_eyelashes_lod0_mesh', 'custom_eyeEdge_lod0_mesh', 'custom_cartilage_lod0_mesh', 'custom_eyeRight_lod0_mesh']
gcustombodyMesh = [body_type + "_custom_body_lod0_mesh", body_type + "_custom_combined_lod0_mesh"]
jointButs=["pelvis", "spine_01", "spine_02", "spine_03", "spine_04", "spine_05", "neck_02", "head", "clavicle_r", "clavicle_l", "thigh_r", "thigh_l", "calf_r", "calf_l", "foot_r", "foot_l", "upperarm_r", "upperarm_l", "lowerarm_r", "lowerarm_l", "hand_r", "hand_l", "FACIAL_C_Jaw", "FACIAL_C_TeethUpper", "FACIAL_C_TeethLower", "root",
'FACIAL_R_EyelidUpperB1', 'FACIAL_R_EyelidUpperA1', 'FACIAL_R_EyelidLowerA1', 'FACIAL_R_EyelidLowerB1', 'FACIAL_R_Eye', 'FACIAL_R_LipUpperOuter', 'FACIAL_R_LipUpper', 'FACIAL_R_LipLower', 'FACIAL_L_EyelidUpperB1', 'FACIAL_L_EyelidUpperA1', 'FACIAL_L_EyelidLowerA1', 'FACIAL_L_EyelidLowerB1', 'FACIAL_L_Eye', 'FACIAL_L_LipUpperOuter', 'FACIAL_R_LipUpper', 'FACIAL_R_LipLower', 'FACIAL_R_EyelidUpperB2', 'FACIAL_R_EyelidUpperA2', 'FACIAL_R_EyelidLowerA2', 'FACIAL_R_EyelidLowerB2', 'FACIAL_R_EyeCornerOuter', 'FACIAL_R_LipCorner', 'FACIAL_L_LipUpper', 'FACIAL_L_LipLower', 'FACIAL_L_EyelidUpperB2', 'FACIAL_L_EyelidUpperA2', 'FACIAL_L_EyelidLowerA2', 'FACIAL_L_EyelidLowerB2', 'FACIAL_L_EyeCornerOuter', 'FACIAL_L_LipCorner', 'FACIAL_L_LipUpper', 'FACIAL_L_LipLower', 'FACIAL_R_EyelidUpperB3', 'FACIAL_R_EyelidUpperA3', 'FACIAL_R_EyelidLowerA3', 'FACIAL_R_EyelidLowerB3', 'FACIAL_R_EyeCornerInner', 'FACIAL_R_LipLowerOuter', 'FACIAL_C_LipUpper', 'FACIAL_C_LipLower', 'FACIAL_L_EyelidUpperB3', 'FACIAL_L_EyelidUpperA3', 'FACIAL_L_EyelidLowerA3', 'FACIAL_L_EyelidLowerB3', 'FACIAL_L_EyeCornerInner', 'FACIAL_L_LipLowerOuter', 'FACIAL_C_LipUpper', 'FACIAL_C_LipLower']
handButs = ['index_01_r_drv', 'index_01_l_drv', 'index_02_r_drv', 'index_02_l_drv', 'index_03_r_drv', 'index_03_l_drv', 'middle_01_r_drv', 'middle_01_l_drv', 'middle_02_r_drv', 'middle_02_l_drv', 'middle_03_r_drv', 'middle_03_l_drv', 'ring_01_r_drv', 'ring_01_l_drv', 'ring_02_r_drv', 'ring_02_l_drv', 'ring_03_r_drv', 'ring_03_l_drv', 'pinky_01_r_drv', 'pinky_01_l_drv', 'pinky_02_r_drv', 'pinky_02_l_drv', 'pinky_03_r_drv', 'pinky_03_l_drv', 'thumb_01_r_drv', 'thumb_01_l_drv', 'thumb_02_r_drv', 'thumb_02_l_drv', 'thumb_03_r_drv', 'thumb_03_l_drv']
for obj in jointButs:
cmds.symbolButton(obj, edit=True, image=iconPath + "JointButton.png")
for obj in handButs:
obj = obj.split("_drv")
cmds.symbolButton(obj[0], edit=True, image=iconPath + "JointButtonH.png")
for obj in gheadMesh:
obj = obj.split('_lod' + sceneLodN + '_mesh')
if not cmds.objExists(obj[0] + '_lod' + sceneLodN + '_mesh'):
cmds.symbolButton("g" + obj[0],edit=True,image=iconPath + "UIGeo" + obj[0] + ".png", enable = False)
else:
cmds.symbolButton("g" + obj[0],edit=True,image=iconPath + "UIGeo" + obj[0] + ".png", enable = True)
for obj in gbodyMesh:
obj = obj.split('_lod' + scenebodyLodN + '_mesh')
obj = obj[0].split(body_type + "_")
if not cmds.objExists(body_type + "_" + obj[1] + '_lod' + scenebodyLodN + '_mesh'):
cmds.symbolButton("g" + obj[1],edit=True,image=iconPath + "UIGeo" + obj[1] + ".png", enable = False)
else:
cmds.symbolButton("g" + obj[1],edit=True,image=iconPath + "UIGeo" + obj[1] + ".png", enable = True)
for obj in gcustomheadMesh:
objCheck=obj.replace("0",sceneLodN)
if not cmds.objExists(objCheck):
obj = obj.split('_lod0_mesh')
cmds.symbolButton("g" + obj[0],edit=True,image=iconPath + "UIGeoC.png", enable = False)
else:
obj = obj.split('_lod0_mesh')
cmds.symbolButton("g" + obj[0],edit=True,image=iconPath + "UIGeoC.png", enable = True)
if toggleCheck == 0:
cmds.symbolButton("gcustom_all",edit=True,enable=True, visible=True)
for obj in gcustombodyMesh:
objCheck=obj.replace("0",scenebodyLodN)
if not cmds.objExists(objCheck):
obj = obj.split('_lod0_mesh')
obj = obj[0].split(body_type + "_")
cmds.symbolButton("g" + obj[1],edit=True,image=iconPath + "UIGeoC.png", enable = False)
else:
obj = obj.split('_lod0_mesh')
obj = obj[0].split(body_type + "_")
cmds.symbolButton("g" + obj[1],edit=True,image=iconPath + "UIGeoC.png", enable = True)
if toggleCheck == 1:
cmds.symbolButton("gcustom_all",edit=True,enable=True, visible=True)
for obj in selected_objects:
if "DHIhead:" in obj:
headObj = obj.split("DHIhead:")
if headObj[1] in jointButs:
cmds.symbolButton(headObj[1], edit=True, image=iconPath + "JointButtonSelected.png")
if "_drv" in obj:
bodyObj = obj.split("_drv")
if bodyObj[0] in jointButs:
cmds.symbolButton(bodyObj[0], edit=True, image=iconPath + "JointButtonSelected.png")
if obj in jointButs:
cmds.symbolButton(obj, edit=True, image=iconPath + "JointButtonSelected.png")
if obj in handButs:
obj = obj.split("_drv")
cmds.symbolButton(obj[0], edit=True, image=iconPath + "JointButtonHPressed.png")
if obj in gheadMesh:
obj = obj.split('_lod' + sceneLodN + '_mesh')
cmds.symbolButton("g" + obj[0],edit=True,image=iconPath + "UIGeo" + obj[0] + "Pressed.png")
if obj in gcustomheadMesh:
obj = obj.split('_lod' + sceneLodN + '_mesh')
cmds.symbolButton("g" + obj[0],edit=True,image=iconPath + "UIGeoCPressed.png")
if obj in gbodyMesh:
obj = obj.split('_lod' + scenebodyLodN + '_mesh')
obj = obj[0].split(body_type + "_")
cmds.symbolButton("g" + obj[1],edit=True,image=iconPath + "UIGeo" + obj[1] + "Pressed.png")
if obj in gcustombodyMesh:
obj = obj.split('_lod' + scenebodyLodN + '_mesh')
obj = obj[0].split(body_type + "_")
cmds.symbolButton("g" + obj[1],edit=True,image=iconPath + "UIGeoCPressed.png")
def sceneRT(*args):
checkSceneSel()
selection_change_callback = cmds.scriptJob(event=["SelectionChanged", sceneRT])
def newScene():
if cmds.file(query=True, modified=True):
result = cmds.confirmDialog(
title="Save Changes?",
message="Do you want to save changes to the current scene?",
button=["Save", "Don't Save", "Cancel"],
defaultButton="Save",
cancelButton="Cancel",
dismissString="Cancel"
)
if result == "Save":
# Save the current scene
cmds.file(save=True, force=True)
elif result == "Don't Save":
# Discard changes and create a new scene
cmds.file(new=True, force=True)
else:
# No unsaved changes, create a new scene directly
cmds.file(new=True, force=True)
leftPanelButtonV(0)
def import_obj():
# Open the import dialog with a filter set to OBJ files
file_path = cmds.fileDialog2(fileFilter="Obj (*.obj)", dialogStyle=2, fileMode=1)
# Check if the user selected a file
if file_path:
# Import the selected OBJ file into Maya
try:
cmds.file(file_path[0], i=True, type="OBJ", rpr="auto")
print("OBJ file imported successfully:", file_path[0])
except Exception as e:
print("Error importing OBJ file:", str(e))
def export_fbx():
if cmds.objExists("DHIbody:root"):
# Set the path and filename for the FBX file
path = f"{ROOT_DIR}/output"
filename = "body.fbx"
filepath = path + "/" + filename
cmds.select(clear=True)
cmds.select("body_rig", add=True)
cmds.select("DHIbody:root", add=True)
# Export the selected objects as FBX
cmds.file(filepath, force=True, options="groups=0;ptgroups=0;materials=0;smoothing=1;normals=1", type='FBX export', exportSelected=True)
filename = "head.fbx"
filepath = path + "/" + filename
cmds.select("DHIbody:spine_04", hi=True) # Select "DHIbody:spine_04" and its children
cmds.delete() # Delete the selected objects
cmds.select("DHIbody:thigh_r", hi=True) # Select "DHIbody:spine_04" and its children
cmds.delete() # Delete the selected objects
cmds.select("DHIbody:thigh_l", hi=True) # Select "DHIbody:spine_04" and its children
cmds.delete() # Delete the selected objects
# Parent "DHIhead:spine_04" under "DHIbody:spine_03"
cmds.parent("DHIhead:spine_04", "DHIbody:spine_03")
# Print the new parent of "DHIhead:spine_04"
print(cmds.listRelatives("DHIhead:spine_04", parent=True))
cmds.select(clear=True)
cmds.select("head_grp", add=True)
cmds.select("DHIbody:root", add=True)
# Export the selected objects as FBX
cmds.file(filepath, force=True, options="groups=0;ptgroups=0;materials=0;smoothing=1;normals=1", type='FBX export', exportSelected=True)
cmds.undo()
cmds.undo()
cmds.undo()
cmds.undo()
cmds.undo()
cmds.undo()
cmds.undo()
cmds.undo()
cmds.undo()
cmds.undo()
else:
raise ValueError("Process is not finished! Body is missing")
def unlock():
if cmds.objExists("body_gen_node") or cmds.objExists("root_drv"):
gbodyMesh = [body_type + "_body_lod" + scenebodyLodN + '_mesh',body_type + "_combined_lod" + scenebodyLodN + '_mesh',body_type + "_flipflops_lod" + scenebodyLodN + '_mesh']
for obj in gbodyMesh:
if cmds.objExists(obj):
for attr in ["tx", "ty", "tz", "rx", "ry", "rz", "sx", "sy", "sz"]:
cmds.setAttr(obj + "." + attr, lock=False)
else:
cmds.select("spine_04", hierarchy=True)
selected_objects = cmds.ls(selection=True)
gheadMesh = ['head_lod' + sceneLodN + '_mesh', 'teeth_lod' + sceneLodN + '_mesh', 'saliva_lod' + sceneLodN + '_mesh', 'eyeLeft_lod' + sceneLodN + '_mesh', 'eyeshell_lod' + sceneLodN + '_mesh', 'eyelashes_lod' + sceneLodN + '_mesh', 'eyeEdge_lod' + sceneLodN + '_mesh', 'cartilage_lod' + sceneLodN + '_mesh', 'eyeRight_lod' + sceneLodN + '_mesh']
for obj in selected_objects:
if cmds.attributeQuery("radius", node=obj, exists=True):
cmds.setAttr(obj + ".radius", 0.1)
for obj in gheadMesh:
if cmds.objExists(obj):
for attr in ["tx", "ty", "tz", "rx", "ry", "rz", "sx", "sy", "sz"]:
cmds.setAttr(obj + "." + attr, lock=False)
cmds.select(clear=True)
def headPanel(State):
imagepath=iconPath + "JointButton.png"
#LEFT BUTTONS
cmds.image("im4",edit=True,visible=State)
ebutTop = 325
ebutL = 157
ebutR = 50
ebutSpace=12
ebutWSpa=12
mbutTop = ebutTop + 105
mbutR = 92
mbutSpace=12
mbutWSpa=12
eyeList = ["", "CornerOuter", "CornerInner"]
mouthList = ["R", "L", "C"]
mouthSymList = ["UpperOuter", "Corner", "LowerOuter"]
propers = ["Upper","Lower", "A", "B"]
for i in range(3):
for y in range(2):
cmds.symbolButton("FACIAL_" + mouthList[y] + "_Eyelid" + propers[0] + propers[3] + str(i+1), edit=True, image=imagepath,visible=State)
cmds.symbolButton("FACIAL_" + mouthList[y] + "_Eyelid" + propers[0] + propers[2] + str(i+1), edit=True, image=imagepath,visible=State)
cmds.symbolButton("FACIAL_" + mouthList[y] + "_Eyelid" + propers[1] + propers[2] + str(i+1), edit=True, image=imagepath,visible=State)
cmds.symbolButton("FACIAL_" + mouthList[y] + "_Eyelid" + propers[1] + propers[3] + str(i+1), edit=True, image=imagepath,visible=State)
cmds.symbolButton("FACIAL_" + mouthList[y] + "_Eye" + eyeList[i], edit=True, image=imagepath,visible=State)
cmds.symbolButton("FACIAL_" + mouthList[y] + "_Lip" + mouthSymList[i], edit=True, image=imagepath,visible=State)
cmds.symbolButton("FACIAL_" + mouthList[i] + "_LipUpper", edit=True, image=imagepath,visible=State)
cmds.symbolButton("FACIAL_" + mouthList[i] + "_LipLower", edit=True, image=imagepath,visible=State)
bodyParent =0
headSelJ = ["FACIAL_C_Jaw", "FACIAL_C_TeethUpper", "FACIAL_C_TeethLower", "neck_02", "head"]
for i in range(len(headSelJ)):
cmds.symbolButton(headSelJ[i], edit=True,visible=State)
titleName = ["RIGHT EYE", "LEFT EYE", "MOUTH"]
for i in range(3):
cmds.text("title" + str(i+1), label= titleName[i], edit=True, p="formLay2",visible=State)
cmds.formLayout( "formLay2", edit=True, attachForm=[("FACIAL_R_EyelidUpperB3", 'top', ebutTop), ("FACIAL_R_EyelidUpperB3", 'left', ebutR),("FACIAL_R_EyelidUpperB2", 'top', ebutTop), ("FACIAL_R_EyelidUpperB2", 'left', ebutR+ebutSpace),("FACIAL_R_EyelidUpperB1", 'top', ebutTop), ("FACIAL_R_EyelidUpperB1", 'left',ebutR+2*ebutSpace),("FACIAL_R_EyelidUpperA3", 'top', ebutTop+ebutWSpa), ("FACIAL_R_EyelidUpperA3", 'left', ebutR),("FACIAL_R_EyelidUpperA2", 'top', ebutTop+ebutWSpa), ("FACIAL_R_EyelidUpperA2", 'left', ebutR+ebutSpace),("FACIAL_R_EyelidUpperA1", 'top', ebutTop+ebutWSpa), ("FACIAL_R_EyelidUpperA1", 'left',ebutR+2*ebutSpace),
("FACIAL_R_EyelidLowerA3", 'top', ebutTop+4*ebutWSpa), ("FACIAL_R_EyelidLowerA3", 'left', ebutR),("FACIAL_R_EyelidLowerA2", 'top', ebutTop+4*ebutWSpa), ("FACIAL_R_EyelidLowerA2", 'left', ebutR+ebutSpace),("FACIAL_R_EyelidLowerA1", 'top', ebutTop+4*ebutWSpa), ("FACIAL_R_EyelidLowerA1", 'left',ebutR+2*ebutSpace),("FACIAL_R_EyelidLowerB3", 'top', ebutTop+5*ebutWSpa), ("FACIAL_R_EyelidLowerB3", 'left', ebutR),("FACIAL_R_EyelidLowerB2", 'top', ebutTop+5*ebutWSpa), ("FACIAL_R_EyelidLowerB2", 'left', ebutR+ebutSpace),("FACIAL_R_EyelidLowerB1", 'top', ebutTop+5*ebutWSpa), ("FACIAL_R_EyelidLowerB1", 'left',ebutR+2*ebutSpace),
("FACIAL_L_EyelidUpperB1", 'top', ebutTop), ("FACIAL_L_EyelidUpperB1", 'left', ebutL),("FACIAL_L_EyelidUpperB2", 'top', ebutTop), ("FACIAL_L_EyelidUpperB2", 'left', ebutL+ebutSpace),("FACIAL_L_EyelidUpperB3", 'top', ebutTop), ("FACIAL_L_EyelidUpperB3", 'left',ebutL+2*ebutSpace),("FACIAL_L_EyelidUpperA1", 'top', ebutTop+ebutWSpa), ("FACIAL_L_EyelidUpperA1", 'left', ebutL),("FACIAL_L_EyelidUpperA2", 'top', ebutTop+ebutWSpa), ("FACIAL_L_EyelidUpperA2", 'left', ebutL+ebutSpace),("FACIAL_L_EyelidUpperA3", 'top', ebutTop+ebutWSpa), ("FACIAL_L_EyelidUpperA3", 'left',ebutL+2*ebutSpace),
("FACIAL_L_EyelidLowerA1", 'top', ebutTop+4*ebutWSpa), ("FACIAL_L_EyelidLowerA1", 'left', ebutL),("FACIAL_L_EyelidLowerA2", 'top', ebutTop+4*ebutWSpa), ("FACIAL_L_EyelidLowerA2", 'left', ebutL+ebutSpace),("FACIAL_L_EyelidLowerA3", 'top', ebutTop+4*ebutWSpa), ("FACIAL_L_EyelidLowerA3", 'left',ebutL+2*ebutSpace),("FACIAL_L_EyelidLowerB1", 'top', ebutTop+5*ebutWSpa), ("FACIAL_L_EyelidLowerB1", 'left', ebutL),("FACIAL_L_EyelidLowerB2", 'top', ebutTop+5*ebutWSpa), ("FACIAL_L_EyelidLowerB2", 'left', ebutL+ebutSpace),("FACIAL_L_EyelidLowerB3", 'top', ebutTop+5*ebutWSpa), ("FACIAL_L_EyelidLowerB3", 'left',ebutL+2*ebutSpace),
("FACIAL_R_EyeCornerOuter", 'top', ebutTop+2.5*ebutWSpa), ("FACIAL_R_EyeCornerOuter", 'left', ebutR-ebutSpace),("FACIAL_R_Eye", 'top', ebutTop+2.5*ebutWSpa), ("FACIAL_R_Eye", 'left', ebutR+ebutSpace),("FACIAL_R_EyeCornerInner", 'top', ebutTop+2.5*ebutWSpa), ("FACIAL_R_EyeCornerInner", 'left', ebutR+3*ebutSpace),
("FACIAL_L_EyeCornerInner", 'top', ebutTop+2.5*ebutWSpa), ("FACIAL_L_EyeCornerInner", 'left', ebutL-ebutSpace),("FACIAL_L_Eye", 'top', ebutTop+2.5*ebutWSpa), ("FACIAL_L_Eye", 'left', ebutL+ebutSpace),("FACIAL_L_EyeCornerOuter", 'top', ebutTop+2.5*ebutWSpa), ("FACIAL_L_EyeCornerOuter", 'left', ebutL+3*ebutSpace),
("FACIAL_R_LipUpperOuter", 'top', mbutTop), ("FACIAL_R_LipUpperOuter", 'left', mbutR),("FACIAL_R_LipUpper", 'top', mbutTop), ("FACIAL_R_LipUpper", 'left', mbutR+ebutSpace),("FACIAL_C_LipUpper", 'top', mbutTop), ("FACIAL_C_LipUpper", 'left',mbutR+2*mbutSpace),("FACIAL_L_LipUpper", 'top', mbutTop), ("FACIAL_L_LipUpper", 'left', mbutR+3*mbutSpace),("FACIAL_L_LipUpperOuter", 'top', mbutTop), ("FACIAL_L_LipUpperOuter", 'left', mbutR+4*mbutSpace),("FACIAL_R_LipCorner", 'top', mbutTop+0.5*mbutWSpa), ("FACIAL_R_LipCorner", 'left',mbutR-mbutSpace),
("FACIAL_R_LipLowerOuter", 'top', mbutTop+mbutWSpa), ("FACIAL_R_LipLowerOuter", 'left', mbutR),("FACIAL_R_LipLower", 'top', mbutTop+mbutWSpa), ("FACIAL_R_LipLower", 'left', mbutR+ebutSpace),("FACIAL_C_LipLower", 'top', mbutTop+mbutWSpa), ("FACIAL_C_LipLower", 'left',mbutR+2*mbutSpace),("FACIAL_L_LipLower", 'top', mbutTop+mbutWSpa), ("FACIAL_L_LipLower", 'left', mbutR+3*mbutSpace),("FACIAL_L_LipLowerOuter", 'top', mbutTop+mbutWSpa), ("FACIAL_L_LipLowerOuter", 'left', mbutR+4*mbutSpace),("FACIAL_L_LipCorner", 'top', mbutTop+0.5*mbutWSpa), ("FACIAL_L_LipCorner", 'left',mbutR+5*mbutSpace),
("FACIAL_C_Jaw", 'top', bodyParent+117),("FACIAL_C_Jaw", 'left', 97),("FACIAL_C_TeethUpper", 'top', bodyParent+122), ("FACIAL_C_TeethUpper", 'left', 62),("FACIAL_C_TeethLower", 'top', bodyParent+138), ("FACIAL_C_TeethLower", 'left', 67),
("neck_02", 'top', bodyParent+167), ("neck_02", 'left', 127),("head", 'top', bodyParent+67),("head", 'left', bodyParent+127),
("title1", 'top', ebutTop-35), ("title1", 'left', 41),("title2", 'top', ebutTop-35), ("title2", 'left', 153),("title3", 'top', mbutTop-35), ("title3", 'left', 100)])
bodyParent=0
geoTop=515
geoLeft=20
geoSpace=20
geoLSpace=109
cgeoLeft=10
gheadMesh = ["head","teeth","saliva","eyeLeft","eyeshell","eyelashes","eyeEdge","cartilage","eyeRight", "all"]
for i in range(len(gheadMesh)):
cmds.symbolButton("g" + gheadMesh[i],edit=True,command=lambda x, i=i:meshSelC(gheadMesh[i],0),visible=State)
cmds.symbolButton("g" + "custom_" + gheadMesh[i],edit=True,command=lambda x, i=i:meshSelC("custom_" + gheadMesh[i],0), visible=State)
cmds.symbolButton("gall",edit=True,command=lambda x: selectAllGeo(0))
cmds.symbolButton("gcustom_all",edit=True,command=lambda x: selectAllGeo(1))
lodTop=675
lodLeft=20
lodSpace=25
for i in range(8):
cmds.text("t" + str(i),edit=True, visible=State)
if i == 0:
cmds.symbolButton("lod" + str(i),edit=True, image=iconPath + "UIButtonEmptySRT.png", visible=State)
else:
cmds.symbolButton("lod" + str(i),edit=True, image=iconPath + "UIButtonEmptySRTPressed.png", visible=State)
lodtL=10
lodtT=-20
cmds.canvas("c1", edit=True, visible=State)
cmds.canvas("c2", edit=True, visible=State)
cmds.formLayout( "formLay2", edit=True,visible=True, attachForm=[("c1", 'top',bodyParent+483), ("c1", 'left', 20),("c2", 'top',bodyParent+690), ("c2", 'left', 20),
("ghead", 'top', geoTop), ("ghead", 'left', geoLeft),("gteeth", 'top', geoTop+geoSpace), ("gteeth", 'left', geoLeft),("gsaliva", 'top', geoTop+2*geoSpace), ("gsaliva", 'left', geoLeft),("geyeLeft", 'top', geoTop+3*geoSpace), ("geyeLeft", 'left', geoLeft),
("geyeshell", 'top', geoTop), ("geyeshell", 'left', geoLeft+geoLSpace),("geyelashes", 'top', geoTop+geoSpace), ("geyelashes", 'left', geoLeft+geoLSpace),("geyeEdge", 'top', geoTop+2*geoSpace), ("geyeEdge", 'left', geoLeft+geoLSpace),("gcartilage", 'top', geoTop+3*geoSpace), ("gcartilage", 'left', geoLeft+geoLSpace),
("geyeRight", 'top', geoTop+4*geoSpace), ("geyeRight", 'left', geoLeft), ("gall", 'top', geoTop+4*geoSpace), ("gall", 'left', geoLeft +geoLSpace),
("gcustom_head", 'top', geoTop), ("gcustom_head", 'left', cgeoLeft),("gcustom_teeth", 'top', geoTop+geoSpace), ("gcustom_teeth", 'left', cgeoLeft),("gcustom_saliva", 'top', geoTop+2*geoSpace), ("gcustom_saliva", 'left', cgeoLeft),("gcustom_eyeLeft", 'top', geoTop+3*geoSpace), ("gcustom_eyeLeft", 'left', cgeoLeft),
("gcustom_eyeshell", 'top', geoTop), ("gcustom_eyeshell", 'left', cgeoLeft+geoLSpace),("gcustom_eyelashes", 'top', geoTop+geoSpace), ("gcustom_eyelashes", 'left', cgeoLeft+geoLSpace),("gcustom_eyeEdge", 'top', geoTop+2*geoSpace), ("gcustom_eyeEdge", 'left', cgeoLeft+geoLSpace),("gcustom_cartilage", 'top', geoTop+3*geoSpace), ("gcustom_cartilage", 'left', cgeoLeft+geoLSpace),
("gcustom_eyeRight", 'top', geoTop+4*geoSpace), ("gcustom_eyeRight", 'left', cgeoLeft), ("gcustom_all", 'top', geoTop+4*geoSpace), ("gcustom_all", 'left', cgeoLeft +geoLSpace)])
def bodyPanel(State):
#LEFT BUTTONS
bodyParent=0
cmds.image("im2",edit=True,image=iconPath + "UIBODY.png",visible=State)
cmds.image("im3",edit=True,image=iconPath + "UIHAND.png",visible=State)
jointButs=["pelvis", "spine_01", "spine_02", "spine_03", "spine_04", "spine_05", "neck_02", "head", "clavicle_r", "clavicle_l", "thigh_r", "thigh_l", "calf_r", "calf_l", "foot_r", "foot_l", "upperarm_r", "upperarm_l", "lowerarm_r", "lowerarm_l", "hand_r", "hand_l", "root"]
for i in range(len(jointButs)):
cmds.symbolButton(jointButs[i], edit=True,visible=State)
cmds.canvas("c1", edit=True, visible=State)
cmds.canvas("c2", edit=True, visible=State)
geoTop=532
geoLeft=20
geoSpace=20
geoLSpace=109
cgeoLeft=10
gheadMesh = ["body","combined","flipflops", "all"]
for i in range(len(gheadMesh)):
cmds.symbolButton("g" + gheadMesh[i],edit=True,command=lambda x, i=i:meshSelC(gheadMesh[i],1),visible=State)
cmds.symbolButton("g" + "custom_" + gheadMesh[i],edit=True,command=lambda x, i=i:meshSelC("custom_" + gheadMesh[i],1),visible=State)
cmds.symbolButton("gall",edit=True,command=lambda x: selectAllGeo(2))
cmds.symbolButton("gcustom_all",edit=True,command=lambda x: selectAllGeo(3))
lodTop=675
lodLeft=20
lodSpace=25
for i in range(8):
cmds.text("t" + str(i),edit=True, visible=State)
if i == 0:
cmds.symbolButton("lod" + str(i),edit=True, image=iconPath + "UIButtonEmptySRT.png", visible=State)
else:
cmds.symbolButton("lod" + str(i),edit=True, image=iconPath + "UIButtonEmptySRTPressed.png", visible=State)
lodtL=10
lodtT=-20
cmds.formLayout( "formLay2", edit=True,visible=True, attachForm=[("im2", 'top', bodyParent+20), ("im2", 'left', 9),("im3", 'top', bodyParent+385), ("im3", 'left', 25),
("pelvis", 'top', bodyParent+187), ("pelvis", 'left', 117),("spine_01", 'top', bodyParent+167), ("spine_01", 'left', 117),("spine_02", 'top', bodyParent+147), ("spine_02", 'left', 117),("spine_03", 'top', bodyParent+127), ("spine_03", 'left', 117),("spine_04", 'top', bodyParent+107), ("spine_04", 'left', 117),("spine_05", 'top', bodyParent+87), ("spine_05", 'left', 117),
("neck_02", 'top', bodyParent+67), ("neck_02", 'left', 117),("head", 'top', bodyParent+47), ("head", 'left', 117),("clavicle_r", 'top', bodyParent+117), ("clavicle_r", 'left', 100),("clavicle_l", 'top', bodyParent+117), ("clavicle_l", 'left', 134), ("thigh_r", 'top', bodyParent+202), ("thigh_r", 'left', 100),("thigh_l", 'top', bodyParent+202), ("thigh_l", 'left', 134),
("calf_r", 'top', bodyParent+257), ("calf_r", 'left', 97),("calf_l", 'top', bodyParent+257), ("calf_l", 'left', 137),("foot_r", 'top', bodyParent+332), ("foot_r", 'left', 92),("foot_l", 'top', bodyParent+332), ("foot_l", 'left', 142),("upperarm_r", 'top', bodyParent+107), ("upperarm_r", 'left', 79),("upperarm_l", 'top', bodyParent+107), ("upperarm_l", 'left', 155),
("lowerarm_r", 'top', bodyParent+142), ("lowerarm_r", 'left', 54),("lowerarm_l", 'top', bodyParent+142), ("lowerarm_l", 'left', 180),("hand_r", 'top', bodyParent+172), ("hand_r", 'left', 35),("hand_l", 'top', bodyParent+172), ("hand_l", 'left', 200), ("root", 'top', bodyParent+347), ("root", 'left', 117),
("c1", 'top',bodyParent+510), ("c1", 'left', 20),("c2", 'top',bodyParent+690), ("c2", 'left', 20),
("gbody", 'top', geoTop), ("gbody", 'left', geoLeft),("gcombined", 'top', geoTop+geoSpace), ("gcombined", 'left', geoLeft),("gflipflops", 'top', geoTop+2*geoSpace), ("gflipflops", 'left', geoLeft), ("gall", 'top', geoTop+3*geoSpace), ("gall", 'left', geoLeft),
("gcustom_body", 'top', geoTop), ("gcustom_body", 'left', cgeoLeft),("gcustom_combined", 'top', geoTop+geoSpace), ("gcustom_combined", 'left', cgeoLeft),("gcustom_flipflops", 'top', geoTop+2*geoSpace), ("gcustom_flipflops", 'left', cgeoLeft), ("gcustom_all", 'top', geoTop+3*geoSpace), ("gcustom_all", 'left', cgeoLeft),])
hrIndexPos =[450,72]
hlIndexPos =[450,167]
hrjointButs=["index_0", "middle_0", "ring_0", "pinky_0", "thumb_0"]
direx = ["r", "l"]
for i in range(len(hrjointButs)):
for y in range(3):
for z in range(2):
cmds.symbolButton(hrjointButs[i] + str(y+1) + "_" + direx[z], edit=True, command=lambda x, i=i,y=y,z=z:meshSelC(hrjointButs[i] + str(y+1) + "_" + direx[z],2), image=iconPath + "JointButtonH.png", visible=State)
cmds.formLayout( "formLay2", edit=True, attachForm=[("index_01_r", 'top', hrIndexPos[0]), ("index_01_r", 'left', hrIndexPos[1]+2),("middle_01_r", 'top', hrIndexPos[0]+5), ("middle_01_r", 'left', hrIndexPos[1]-12),("ring_01_r", 'top', hrIndexPos[0]), ("ring_01_r", 'left', hrIndexPos[1]-22),("pinky_01_r", 'top', hrIndexPos[0]-8), ("pinky_01_r", 'left', hrIndexPos[1]-30),("thumb_01_r", 'top', hrIndexPos[0]-22), ("thumb_01_r", 'left', hrIndexPos[1]+12),
("index_02_r", 'top', hrIndexPos[0]+20), ("index_02_r", 'left', hrIndexPos[1]+5),("middle_02_r", 'top', hrIndexPos[0]+25), ("middle_02_r", 'left', hrIndexPos[1]-15),("ring_02_r", 'top', hrIndexPos[0]+18), ("ring_02_r", 'left', hrIndexPos[1]-30),("pinky_02_r", 'top', hrIndexPos[0]+2), ("pinky_02_r", 'left', hrIndexPos[1]-40),("thumb_02_r", 'top', hrIndexPos[0]-12), ("thumb_02_r", 'left', hrIndexPos[1]+26),
("index_03_r", 'top', hrIndexPos[0]+40), ("index_03_r", 'left', hrIndexPos[1]+10),("middle_03_r", 'top', hrIndexPos[0]+42), ("middle_03_r", 'left', hrIndexPos[1]-20),("ring_03_r", 'top', hrIndexPos[0]+32), ("ring_03_r", 'left', hrIndexPos[1]-36),("pinky_03_r", 'top', hrIndexPos[0]+12), ("pinky_03_r", 'left', hrIndexPos[1]-49),("thumb_03_r", 'top', hrIndexPos[0]-8), ("thumb_03_r", 'left', hrIndexPos[1]+39)])
cmds.formLayout( "formLay2", edit=True, attachForm=[("index_01_l", 'top', hlIndexPos[0]), ("index_01_l", 'left', hlIndexPos[1]-2),("middle_01_l", 'top', hlIndexPos[0]+5), ("middle_01_l", 'left', hlIndexPos[1]+12),("ring_01_l", 'top', hlIndexPos[0]), ("ring_01_l", 'left', hlIndexPos[1]+22),("pinky_01_l", 'top', hlIndexPos[0]-8), ("pinky_01_l", 'left', hlIndexPos[1]+30),("thumb_01_l", 'top', hlIndexPos[0]-22), ("thumb_01_l", 'left', hlIndexPos[1]-12),
("index_02_l", 'top', hlIndexPos[0]+20), ("index_02_l", 'left', hlIndexPos[1]-5),("middle_02_l", 'top', hlIndexPos[0]+25), ("middle_02_l", 'left', hlIndexPos[1]+15),("ring_02_l", 'top', hlIndexPos[0]+18), ("ring_02_l", 'left', hlIndexPos[1]+30),("pinky_02_l", 'top', hlIndexPos[0]+2), ("pinky_02_l", 'left', hlIndexPos[1]+40),("thumb_02_l", 'top', hlIndexPos[0]-12), ("thumb_02_l", 'left', hlIndexPos[1]-26),
("index_03_l", 'top', hlIndexPos[0]+40), ("index_03_l", 'left', hlIndexPos[1]-10),("middle_03_l", 'top', hlIndexPos[0]+42), ("middle_03_l", 'left', hlIndexPos[1]+20),("ring_03_l", 'top', hlIndexPos[0]+32), ("ring_03_l", 'left', hlIndexPos[1]+36),("pinky_03_l", 'top', hlIndexPos[0]+12), ("pinky_03_l", 'left', hlIndexPos[1]+49),("thumb_03_l", 'top', hlIndexPos[0]-8), ("thumb_03_l", 'left', hlIndexPos[1]-39)])
toggleCheck = 2
def togglePanel():
global toggleCheck
if toggleCheck == 0:
bodyPanel(False)
headPanel(True)
toggleCheck = 1
cmds.symbolButton("gcustom_all",edit=True, command=lambda x: selectAllGeo(1))
else:
headPanel(False)
bodyPanel(True)
toggleCheck = 0
cmds.symbolButton("gcustom_all",edit=True, command=lambda x: selectAllGeo(3))
#LEFTPANELBUTTON
def leftPanelButtonV(worldCheck):
global toggleCheck
imagepath=iconPath + "JointButton.png"
worldCheck = 0
if cmds.objExists("spine_04") or cmds.objExists("OpenedDNAInfoNode"):
worldCheck = 1
if cmds.objExists("LoadedDNAInfoNode"):
worldCheck = 2
if cmds.objExists ("rl4Embedded_Archetype") or cmds.objExists ("rl4Embedded_Archtype"):
worldCheck = 3
if cmds.objExists ("DHIhead:spine_04"):
worldCheck = 4
if cmds.objExists("body_gen_node") or cmds.objExists("root_drv"):
worldCheck = 5
if cmds.objExists("FixBodyInfoNode"):
worldCheck = 6
#OPEN DNA
if worldCheck==0:
toggleCheck = 2
headPanel(False)
bodyPanel(False)
#RIGHT BUTTONS
butTop = 250
butH = 41
butW=44
offsetTop=80
for i in range(10):
if i == 0:
StateVis = True
StateEnab = True
cmds.symbolButton("b" + str(i+1), edit=True, image=iconPath + "UIButton" + str(i+1) + ".png", visible=StateVis ,enable=StateEnab)
if i in [1,2,9]:
StateVis = True
StateEnab = False
cmds.symbolButton("b" + str(i+1), edit=True, image=iconPath + "UIButton" + str(i+1) + ".png", visible=StateVis ,enable=StateEnab)
if i in [3,4,5,6,7,8]:
StateVis = False
StateEnab = False
cmds.symbolButton("b" + str(i+1), edit=True, image=iconPath + "UIButton" + str(i+1) + ".png", visible=StateVis ,enable=StateEnab)
cmds.formLayout( "formLay", edit=True, attachForm=[("b" + str(i+1), 'top', butTop+i*butH+offsetTop), ("b" + str(i+1), 'left', butW)])
cmds.formLayout( "formLay", edit=True, attachForm=[("b10", 'top', butTop + 3*butH+offsetTop), ("b10", 'left', butW)])
cmds.formLayout("formLay2", edit=True,visible=False)
cmds.symbolButton("Toggle", edit=True, enable=False)
#LOAD DNA
if worldCheck==1:
toggleCheck = 2
headPanel(False)
bodyPanel(False)
#RIGHT BUTTONS
butTop = 250
butH = 41
butW=44
offsetTop=80
for i in range(10):
if i in [0,1]:
StateVis = True
StateEnab = True
cmds.symbolButton("b" + str(i+1), edit=True, image=iconPath + "UIButton" + str(i+1) + ".png", visible=StateVis ,enable=StateEnab)
if i in [2,9]:
StateVis = True
StateEnab = False
cmds.symbolButton("b" + str(i+1), edit=True, image=iconPath + "UIButton" + str(i+1) + ".png", visible=StateVis ,enable=StateEnab)
if i in [3,4,5,6,7,8]:
StateVis = False
StateEnab = False
cmds.symbolButton("b" + str(i+1), edit=True, image=iconPath + "UIButton" + str(i+1) + ".png", visible=StateVis ,enable=StateEnab)
cmds.formLayout( "formLay", edit=True, attachForm=[("b" + str(i+1), 'top', butTop+i*butH+offsetTop), ("b" + str(i+1), 'left', butW)])
cmds.formLayout( "formLay", edit=True, attachForm=[("b10", 'top', butTop + 3*butH+offsetTop), ("b10", 'left', butW)])
cmds.formLayout("formLay2", edit=True,visible=False)
cmds.symbolButton("Toggle", edit=True, enable=False)
#MODIFICATIONS
if worldCheck==2:
toggleCheck = 0
bodyPanel(False)
#RIGHT BUTTONS
butTop = 250
butH = 41
butW=44
offsetTop=80
for i in range(10):
if i in [2,9]:
StateVis = True
StateEnab = True
cmds.symbolButton("b" + str(i+1), edit=True, image=iconPath + "UIButton" + str(i+1) + ".png", visible=StateVis ,enable=StateEnab)
if i in [0,1]:
StateVis = True
StateEnab = False
cmds.symbolButton("b" + str(i+1), edit=True, image=iconPath + "UIButton" + str(i+1) + ".png", visible=StateVis ,enable=StateEnab)
if i in [3,4,5,6,7,8]:
StateVis = False
StateEnab = False
cmds.symbolButton("b" + str(i+1), edit=True, image=iconPath + "UIButton" + str(i+1) + ".png", visible=StateVis ,enable=StateEnab)
cmds.formLayout( "formLay", edit=True, attachForm=[("b" + str(i+1), 'top', butTop+i*butH+offsetTop), ("b" + str(i+1), 'left', butW)])
cmds.formLayout( "formLay", edit=True, attachForm=[("b10", 'top', butTop + 3*butH+offsetTop), ("b10", 'left', butW)])
cmds.formLayout("formLay2", edit=True,visible=True)
headPanel(True)
#cmds.symbolButton("Toggle", edit=True, enable=False)
#PREPARE TO EXPORT
if worldCheck==3:
toggleCheck = 2
headPanel(False)
bodyPanel(False)
#RIGHT BUTTONS
butTop = 250
butH = 41
butW=44
offsetTop=-80
for i in range(10):
if i in [3,9]:
StateVis = True
StateEnab = True
cmds.symbolButton("b" + str(i+1), edit=True, image=iconPath + "UIButton" + str(i+1) + ".png", visible=StateVis ,enable=StateEnab)
if i in [4,5,6,7,8]:
StateVis = True
StateEnab = False
cmds.symbolButton("b" + str(i+1), edit=True, image=iconPath + "UIButton" + str(i+1) + ".png", visible=StateVis ,enable=StateEnab)
if i in [0,1,2]:
StateVis = False
StateEnab = False
cmds.symbolButton("b" + str(i+1), edit=True, image=iconPath + "UIButton" + str(i+1) + ".png", visible=StateVis ,enable=StateEnab)
cmds.formLayout( "formLay", edit=True, attachForm=[("b" + str(i+1), 'top', butTop+i*butH+offsetTop), ("b" + str(i+1), 'left', butW)])
cmds.formLayout("formLay2", edit=True,visible=False)
cmds.symbolButton("Toggle", edit=True, enable=False)
#LOAD BODY
if worldCheck==4:
toggleCheck = 2
headPanel(False)
bodyPanel(False)
#RIGHT BUTTONS
butTop = 250
butH = 41
butW=44
offsetTop=-80
for i in range(10):
if i in [4,9]:
StateVis = True
StateEnab = True
cmds.symbolButton("b" + str(i+1), edit=True, image=iconPath + "UIButton" + str(i+1) + ".png", visible=StateVis ,enable=StateEnab)
if i in [3,5,6,7,8]:
StateVis = True
StateEnab = False
cmds.symbolButton("b" + str(i+1), edit=True, image=iconPath + "UIButton" + str(i+1) + ".png", visible=StateVis ,enable=StateEnab)
if i in [0,1,2]:
StateVis = False
StateEnab = False
cmds.symbolButton("b" + str(i+1), edit=True, image=iconPath + "UIButton" + str(i+1) + ".png", visible=StateVis ,enable=StateEnab)
cmds.formLayout( "formLay", edit=True, attachForm=[("b" + str(i+1), 'top', butTop+i*butH+offsetTop), ("b" + str(i+1), 'left', butW)])
cmds.formLayout("formLay2", edit=True,visible=False)
cmds.symbolButton("Toggle", edit=True, enable=False)
#BODY MODIFICATIONS
if worldCheck==5:
toggleCheck = 1
headPanel(False)
#RIGHT BUTTONS
butTop = 250
butH = 41
butW=44
offsetTop=-80
for i in range(10):
if i in [5,7,8,9]:
StateVis = True
StateEnab = True
cmds.symbolButton("b" + str(i+1), edit=True, image=iconPath + "UIButton" + str(i+1) + ".png", visible=StateVis ,enable=StateEnab)
if i in [3,4,6]:
StateVis = True
StateEnab = False
cmds.symbolButton("b" + str(i+1), edit=True, image=iconPath + "UIButton" + str(i+1) + ".png", visible=StateVis ,enable=StateEnab)
if i in [0,1,2]:
StateVis = False
StateEnab = False
cmds.symbolButton("b" + str(i+1), edit=True, image=iconPath + "UIButton" + str(i+1) + ".png", visible=StateVis ,enable=StateEnab)
cmds.formLayout( "formLay", edit=True, attachForm=[("b" + str(i+1), 'top', butTop+i*butH+offsetTop), ("b" + str(i+1), 'left', butW)])
cmds.formLayout("formLay2", edit=True,visible=True)
bodyPanel(True)
cmds.symbolButton("Toggle", edit=True, enable=True)
#FIXED BODY END
if worldCheck==6:
toggleCheck = 1
headPanel(False)
#RIGHT BUTTONS
butTop = 250
butH = 41
butW=44
offsetTop=-80
for i in range(10):
if i in [5,6,7,8,9]:
StateVis = True
StateEnab = True
cmds.symbolButton("b" + str(i+1), edit=True, image=iconPath + "UIButton" + str(i+1) + ".png", visible=StateVis ,enable=StateEnab)
if i in [3,4]:
StateVis = True
StateEnab = False
cmds.symbolButton("b" + str(i+1), edit=True, image=iconPath + "UIButton" + str(i+1) + ".png", visible=StateVis ,enable=StateEnab)
if i in [0,1,2]:
StateVis = False
StateEnab = False
cmds.symbolButton("b" + str(i+1), edit=True, image=iconPath + "UIButton" + str(i+1) + ".png", visible=StateVis ,enable=StateEnab)
cmds.formLayout( "formLay", edit=True, attachForm=[("b" + str(i+1), 'top', butTop+i*butH+offsetTop), ("b" + str(i+1), 'left', butW)])
cmds.formLayout("formLay2", edit=True,visible=True)
bodyPanel(True)
cmds.symbolButton("Toggle", edit=True, enable=True)
def yzUP():
# Get the current up axis from the preferences
up_axis = cmds.upAxis(q=True, axis=True)
# Toggle the up axis based on the current value
if up_axis == 'y':
cmds.upAxis(axis='z')
final_up_axis = 'z'
cmds.symbolButton("yUP", edit=True,image=iconPath + "Zup.png")
else:
cmds.upAxis(axis='y')
final_up_axis = 'y'
cmds.symbolButton("yUP",edit=True,image=iconPath + "Yup.png")
# Print the final up axis
print("Final up axis:", final_up_axis)
def centerF():
selected_objects = cmds.ls(selection=True)
for obj in selected_objects:
if cmds.objExists(obj):
cmds.xform(obj, translation=[0, 0, 0], worldSpace=True)
def freezeF():
selected_objects = cmds.ls(selection=True)
for obj in selected_objects:
if cmds.objExists(obj):
cmds.makeIdentity(obj, apply=True, t=1, r=1, s=1)
def unlockF():
selected_objects = cmds.ls(selection=True)
for obj in selected_objects:
if cmds.objExists(obj):
for attr in ["tx", "ty", "tz", "rx", "ry", "rz", "sx", "sy", "sz"]:
cmds.setAttr(obj + "." + attr, lock=False)
def lodLayerC(lodN):
for i in range(8):
cmds.symbolButton("lod"+str(i), edit=True, image=iconPath + "UIButtonEmptySRTPressed.png")
cmds.setAttr("head_lod"+str(i)+"_layer" + ".visibility", False)
if cmds.objExists("root_drv"):
cmds.setAttr("body_lod"+str(i//2)+"_layer" + ".visibility", False)
cmds.symbolButton("lod"+str(lodN), edit=True, image=iconPath + "UIButtonEmptySRT.png")
cmds.setAttr("head_lod"+str(lodN)+"_layer" + ".visibility", True)
if cmds.objExists("root_drv"):
cmds.setAttr("body_lod"+str(lodN//2)+"_layer" + ".visibility", True)
global sceneLodN
sceneLodN = str(lodN)
global scenebodyLodN
scenebodyLodN = str(lodN//2)
cmds.symbolButton("gcustom_all",edit=True,enable=False, visible=True)
checkSceneSel()
def codeblock (dnaPath, ROOT_DIR, CHARACTER_NAME, MAIN_PATH, body_type):
#DATAS DNA
output_file_path = os.path.join(f"{ROOT_DIR}/examples", "datas_dna.py")
with open(f"{ROOT_DIR}/examples/dna_viewer_grab_changes_from_scene_and_propagate_to_dna.py") as file:
lines_all = file.readlines()
lines = lines_all[43:204]
lineslists = lines_all[217:220]
linesload = lines_all[220:226]
lines2 = lines_all[232:247]
defload = ["def load_dna_data():\n"]
defsave = ["def save_dna_data():\n"]
lines = [line.replace('f"{ospath.dirname(ospath.abspath(__file__))}/..".replace("\\\\", "/")','"'+ROOT_DIR+'"') for line in lines]
lines = [line.replace('f"{DNA_DIR}/{CHARACTER_NAME}.dna"', '"'+dnaPath+'"') for line in lines]
lines = [line.replace('"Ada"','"'+CHARACTER_NAME+'"') for line in lines]
linesload = [" " + line for line in linesload]
lines2 = [" " + line for line in lines2]
code_block = ''.join(lines + lineslists + defload + linesload + defsave + lines2)
with open(output_file_path, "w") as output_file:
output_file.write(code_block)
#DAT FILE
file_path = os.path.join("c:/Arts and Spells/Scripts", "dat.py")
tRoot = ["ROOT_DIR = " + '"' +ROOT_DIR+ '"' + "\n"]
tMain = ["MAIN_PATH = " + '"' +MAIN_PATH+ '"' + "\n"]
tDNA = ["dnaPath= " + '"' +dnaPath+ '"' + "\n"]
tBody = ["body_type = " + '"' +body_type+ '"' + "\n"]
tVer = ["MAYA_VERSION = " + '"' + str(MAYA_VERSION) + '"' + "\n"]
dat_code_block = ''.join(tRoot + tMain + tDNA + tBody + tVer)
directory = 'c:/Arts and Spells/Scripts'
if not os.path.exists(directory):
os.makedirs(directory)
with open(file_path, "w") as datfile:
datfile.write(dat_code_block)
def savePref(textdnaPath, textROOT_DIR, textMAIN_PATH, textbody_type):
global body_type
global ROOT_DIR
global MAIN_PATH
global dnaPath
character_dna = cmds.textField(textdnaPath, q=True, text=True)
ROOT_DIR = cmds.textField(textROOT_DIR, q=True, text=True)
MAIN_PATH = cmds.textField(textMAIN_PATH, q=True, text=True)
body_type = cmds.textField(textbody_type, q=True, text=True)
CHARACTER_DNA = ospath.abspath(character_dna)
CHARACTER_DNA = CHARACTER_DNA.replace("\\", "/")
CHARACTER_NAME = os.path.basename(CHARACTER_DNA).split(".")[0]
chX=2
file_path = os.path.join("c:/Arts and Spells/Scripts", "dat.py")
if os.path.exists(file_path):
chX=0
else:
chX=1
print(f"New DNA_DIR: {CHARACTER_DNA}")
print(f"New DNA_Name: {CHARACTER_NAME}")
codeblock (CHARACTER_DNA, ROOT_DIR, CHARACTER_NAME, MAIN_PATH, body_type)
if os.path.exists(file_path):
import dat
importlib.reload(dat)
ROOT_DIR = dat.ROOT_DIR
MAIN_PATH = dat.MAIN_PATH
dnaPath = dat.dnaPath
body_type = dat.body_type
if chX==1:
cmds.deleteUI("prefWindow", window=True)
mFree_window()
else:
cmds.deleteUI("prefWindow", window=True)
def prefUI(dnaPath, ROOT_DIR, MAIN_PATH, body_type):
heightSpa=20
heightField=25
file_path = "c:/Arts and Spells/Scripts" + "/dat.py"
if os.path.exists(file_path):
import dat
importlib.reload(dat)
ROOT_DIR = dat.ROOT_DIR
MAIN_PATH = dat.MAIN_PATH
dnaPath = dat.dnaPath
body_type = dat.body_type
if cmds.window("prefWindow", exists=True):
cmds.deleteUI("prefWindow", window=True)
cmds.window("prefWindow", title="Metapipe Preferences", widthHeight=(200, 100), bgc=(0.3,0.3,0.3),resizeToFitChildren=True,sizeable=False)
cmds.columnLayout(adjustableColumn=True)
cmds.text(label="",height=25)
cmds.text(label="DNA CALIBRATION PATH:",height=30, font="boldLabelFont")
textROOT_DIR = cmds.textField(text=ROOT_DIR, bgc=(0.2,0.2,0.2), height=heightField)
cmds.text(label="",height=heightSpa)
cmds.text(label="METAPIPE FILES PATH:",height=30, font="boldLabelFont")
textMAIN_PATH = cmds.textField(text=MAIN_PATH, bgc=(0.2,0.2,0.2),height=heightField)
cmds.text(label="",height=heightSpa)
cmds.text(label="METAHUMAN DNA FILE PATH:",height=30, font="boldLabelFont")
textdnaPath = cmds.textField(text=dnaPath, bgc=(0.2,0.2,0.2),height=heightField)
cmds.text(label="",height=heightSpa)
cmds.text(label="METAHUMAN BODY TYPE:",height=30, font="boldLabelFont")
textbody_type = cmds.textField(text=body_type, bgc=(0.2,0.2,0.2),height=heightField)
cmds.text(label="",height=heightSpa)
cmds.rowLayout(numberOfColumns=2, columnWidth2=(250, 200))
cmds.button(label="SAVE", command=lambda x: savePref(textdnaPath, textROOT_DIR, textMAIN_PATH, textbody_type))
cmds.button(label="Cancel", command=lambda x: cmds.deleteUI("prefWindow", window=True))
cmds.showWindow("prefWindow")
def mFree_window():
# Create window
window_name = "MetaPipe"
if cmds.window(window_name, exists=True):
cmds.deleteUI(window_name)
cmds.window(window_name, title=window_name, width=1360, height=768, sizeable=True, resizeToFitChildren=True, menuBar=False, tlc=(0, 0), tb=False, tbm=False)
layout = cmds.formLayout(bgc=(0,0,0))
cmds.image(image=iconPath + "UICover.png", p=layout)
cmds.showWindow()
mFree_window()
time.sleep (1)
def mFree_window():
#WINDOW
window_name = "MetaPipe"
if cmds.window(window_name, exists=True):
cmds.deleteUI(window_name)
cmds.window(window_name, title=window_name, wh=(1368, 768), sizeable=True, resizeToFitChildren=True, menuBar=False, tlc=(0, 0))
color = (0.135135, 0.360326, 0.715)
backGr = (0.08, 0.08, 0.08)
buttonColor = (0.25, 0.25, 0.25)
layout = cmds.paneLayout(bgc=backGr, cn="quad", ps=[[1, 83,95], [2, 17, 95], [3, 1,5]], st=5)
layout2 = cmds.paneLayout(bgc=backGr, cn="vertical2", ps=[[1, 20, 1], [2, 80, 1]], st=5, p=layout)
formLay = cmds.formLayout("formLay", w=240, p=layout2)
#LEFT PANEL
#SETTINGS
settings=cmds.symbolButton("settings",image=iconPath + "UISettings.png")
cmds.popupMenu(parent="settings", button=1, mm=1)
cmds.menuItem(label="New", command=lambda x:newScene())
cmds.menuItem(label="Starter Scene", command=lambda x:loadScene("Custom Head"))
cmds.menuItem(label="Recent Scene", command=lambda x:loadScene("Checkpoint"))
cmds.menuItem(label="Save Scene", command=lambda x:saveScene())
cmds.menuItem(label="Import...", command=lambda x:import_obj())
cmds.menuItem(label="Export", command=lambda x:export_fbx())
cmds.menuItem(label="Shape Editor", command=lambda x:shapeEdit())
cmds.menuItem(label="Selection Panel", command=lambda x:cmds.formLayout( formLay2, edit=True,visible = True))
cmds.menuItem(label="Preferences", command=lambda x:prefUI(dnaPath, ROOT_DIR, MAIN_PATH, body_type))
im1 = cmds.image(image=iconPath + "UI LOGO.png")
#TOP
yUP=cmds.symbolButton("yUP", command=lambda x: yzUP(),image=iconPath + "yUP.png")
center0=cmds.symbolButton("center0", command=lambda x: centerF(),image=iconPath + "center.png")
freeze0=cmds.symbolButton("freeze0", command=lambda x: freezeF(),image=iconPath + "freeze.png")
unlock0=cmds.symbolButton("unlock0", command=lambda x: unlockF(),image=iconPath + "unlock.png")
#BUTTONS
butTop = 250
butH = 41
butW=44
offsetTop=0
b1=cmds.symbolButton("b1", command=lambda x: buildDNA(),image=iconPath + "UIButton1Pressed.png",enable=False)
b2=cmds.symbolButton("b2",command=lambda x: loadDNA(), image=iconPath + "UIButton2Pressed.png", enable=False)
b3=cmds.symbolButton("b3",command=lambda x: saveDNA(), image=iconPath + "UIButton3Pressed.png", enable=False)
b4=cmds.symbolButton("b4",command=lambda x: prepare_export(), image=iconPath + "UIButton4Pressed.png", enable=False)
b5=cmds.symbolButton("b5",command=lambda x: build_body(), image=iconPath + "UIButton5Pressed.png", enable=False)
b8=cmds.symbolButton("b6",command=lambda x: fixbody(), image=iconPath + "UIButton6Pressed.png", enable=False)
b9=cmds.symbolButton("b7",command=lambda x: connect_body(), image=iconPath + "UIButton7Pressed.png", enable=False)
b6=cmds.symbolButton("b8",command=lambda x: bindSkinC(), image=iconPath + "UIButton8Pressed.png", enable=False)
b7=cmds.symbolButton("b9",command=lambda x: copySkin(), image=iconPath + "UIButton9Pressed.png", enable=False)
b10=cmds.symbolButton("b10",command=lambda x:findCustom(), image=iconPath + "UIButton10Pressed.png", enable=False)
#MODIFY PANEL
t1=cmds.text(label="MODIFY PANEL", height=30, font="boldLabelFont", p=formLay)
#FORMLAY
cmds.formLayout(formLay, edit=True, attachForm=[(t1, 'top', 695), (t1, 'left', 83),
(im1, 'top', 20), (im1, 'left', 14),
(settings, 'top', 15), (settings, 'left', 5),(yUP, 'top', 7), (yUP, 'left', 210),
(center0, "top", 7), (center0, "left", 150), (freeze0, "top", 7), (freeze0, "left", 170), (unlock0, "top", 7), (unlock0, "left", 190)])
#MID PANEL 3D VIEWER
panel_name = cmds.modelPanel(p=layout2)
cmds.control(panel_name, edit=True)
cmds.modelEditor(panel_name, edit=True, da="smoothShaded")
cmds.grid(toggle=False)
cmds.viewFit()
#RIGHT PANEL
bodyParent=0
formLay2 = cmds.formLayout("formLay2", w=240, p=layout)
im2 = cmds.image("im2", image=iconPath + "UIBODY.png",visible=False)
im3 = cmds.image("im3", image=iconPath + "UIHAND.png",visible=False)
im4 = cmds.image("im4", image=iconPath + "UIHEAD.png",visible=False)
cmds.symbolButton("Toggle", command=lambda x: togglePanel(), image=iconPath + "Toggle.png",visible=True)
cmds.symbolButton("Close", command=lambda x: cmds.formLayout( formLay2, edit=True,visible = False), image=iconPath + "Close.png",visible=True)
cmds.formLayout( formLay2, edit=True, attachForm=[("Toggle", 'top', 10), ("Toggle", 'left', 10),("Close", 'top', 10), ("Close", 'left', 210)])
#SKELETON HIERARCHY
imagepath=iconPath + "JointButton.png"
jointButs=["pelvis", "spine_01", "spine_02", "spine_03", "spine_04", "spine_05", "neck_02", "head", "clavicle_r", "clavicle_l", "thigh_r", "thigh_l", "calf_r", "calf_l", "foot_r", "foot_l", "upperarm_r", "upperarm_l", "lowerarm_r", "lowerarm_l", "hand_r", "hand_l", "FACIAL_C_Jaw", "FACIAL_C_TeethUpper", "FACIAL_C_TeethLower", "root"]
for i in range(len(jointButs)):
State=False
cmds.symbolButton(jointButs[i], command=lambda x, i=i: jointSelectionC(jointButs[i]), image=imagepath,visible=State)
#HANDS
hrIndexPos =[450,72]
hlIndexPos =[450,167]
hrjointButs=["index_0", "middle_0", "ring_0", "pinky_0", "thumb_0"]
direx = ["r", "l"]
for i in range(len(hrjointButs)):
for y in range(3):
for z in range(2):
cmds.symbolButton(hrjointButs[i] + str(y+1) + "_" + direx[z], visible=False)
titleName = ["RIGHT EYE", "LEFT EYE", "MOUTH"]
for i in range(3):
cmds.text("title" + str(i+1), label= titleName[i],visible=State)
#FACIAL / EYES / MOUTH
ebutTop = 410
ebutL = 157
ebutR = 50
ebutSpace=12
ebutWSpa=12
mbutTop = 515
mbutR = 92
mbutSpace=12
mbutWSpa=12
eyeList = ["", "CornerOuter", "CornerInner"]
mouthList = ["R", "L", "C"]
mouthSymList = ["UpperOuter", "Corner", "LowerOuter"]
propers = ["Upper","Lower", "A", "B"]
for i in range(3):
State=False
for y in range(2):
cmds.symbolButton("FACIAL_" + mouthList[y] + "_Eyelid" + propers[0] + propers[3] + str(i+1), command=lambda x, y=y, i=i: jointSelectionC("FACIAL_" + mouthList[y] + "_Eyelid" + propers[0] + propers[3] + str(i+1)), image=imagepath,visible=State)
cmds.symbolButton("FACIAL_" + mouthList[y] + "_Eyelid" + propers[0] + propers[2] + str(i+1), command=lambda x, y=y, i=i: jointSelectionC("FACIAL_" + mouthList[y] + "_Eyelid" + propers[0] + propers[2] + str(i+1)), image=imagepath,visible=State)
cmds.symbolButton("FACIAL_" + mouthList[y] + "_Eyelid" + propers[1] + propers[2] + str(i+1), command=lambda x, y=y, i=i: jointSelectionC("FACIAL_" + mouthList[y] + "_Eyelid" + propers[1] + propers[2] + str(i+1)), image=imagepath,visible=State)
cmds.symbolButton("FACIAL_" + mouthList[y] + "_Eyelid" + propers[1] + propers[3] + str(i+1), command=lambda x, y=y, i=i: jointSelectionC("FACIAL_" + mouthList[y] + "_Eyelid" + propers[1] + propers[3] + str(i+1)), image=imagepath,visible=State)
cmds.symbolButton("FACIAL_" + mouthList[y] + "_Eye" + eyeList[i], command=lambda x, y=y, i=i: jointSelectionC("FACIAL_" + mouthList[y] + "_Eye" + eyeList[i]), image=imagepath,visible=State)
cmds.symbolButton("FACIAL_" + mouthList[y] + "_Lip" + mouthSymList[i], command=lambda x, y=y, i=i: jointSelectionC("FACIAL_" + mouthList[y] + "_Lip" + mouthSymList[i]), image=imagepath,visible=State)
cmds.symbolButton("FACIAL_" + mouthList[i] + "_LipUpper", command=lambda x, i=i: jointSelectionC("FACIAL_" + mouthList[i] + "_LipUpper"), image=imagepath,visible=State)
cmds.symbolButton("FACIAL_" + mouthList[i] + "_LipLower", command=lambda x, i=i: jointSelectionC("FACIAL_" + mouthList[i] + "_LipLower"), image=imagepath,visible=State)
#MESH SELECTION
geoTop=562
geoLeft=20
geoSpace=20
geoLSpace=109
gheadMesh = ["head","teeth","saliva","eyeLeft","eyeshell","eyelashes","eyeEdge","cartilage","eyeRight", "all"]
for i in range(len(gheadMesh)):
State=False
cmds.symbolButton("g" + gheadMesh[i],command=lambda x, i=i:meshSelC(gheadMesh[i],0),image=iconPath + "UIGeo" + gheadMesh[i] + ".png",visible=State)
cmds.symbolButton("g" + "custom_" + gheadMesh[i],command=lambda x, i=i:meshSelC("custom_" + gheadMesh[i],0),image=iconPath + "UIGeoC.png",enable=False, visible=State)
gheadMesh = ["body","combined","flipflops"]
for i in range(len(gheadMesh)):
State=False
cmds.symbolButton("g" + gheadMesh[i],command=lambda x, i=i:meshSelC(gheadMesh[i],1),image=iconPath + "UIGeo" + gheadMesh[i] + ".png",visible=State)
cmds.symbolButton("g" + "custom_" + gheadMesh[i],command=lambda x, i=i:meshSelC("custom_" + gheadMesh[i],1),image=iconPath + "UIGeoC.png",enable=False, visible=State)
#LOD SELECTION
lodTop=655
lodLeft=20
lodSpace=25
for i in range(8):
cmds.symbolButton("lod" + str(i), command=lambda x, i=i: lodLayerC(i), image=iconPath + "UIButtonEmptyPressed.png",visible=False)
cmds.text("t" + str(i), label=str(i), height=30, font="boldLabelFont", p=formLay2,visible=False)
lodtL=10
lodtT=-20
#SEPERATION LINES
cBGC=(0.4, 0.4, 0.4)
c1=cmds.canvas("c1", height=1, width=200, bgc=cBGC, p=formLay2,visible=False)
c2=cmds.canvas("c2", height=1, width=200, bgc=cBGC, p=formLay2,visible=False)
#SELECTION PANEL
t2=cmds.text("tSELECTION PANEL",label="SELECTION PANEL", height=30, font="boldLabelFont", p=formLay2)
#FORMLAY2
cmds.formLayout( formLay2, edit=True, attachForm=[(im2, 'top', bodyParent+20), (im2, 'left', 9),(im3, 'top', bodyParent+20), (im3, 'left', 9),(im4, 'top', bodyParent+20), (im4, 'left', 49),
("lod0", 'top', lodTop), ("lod0", 'left', lodLeft),("lod1", 'top', lodTop), ("lod1", 'left', lodLeft+lodSpace),("lod2", 'top', lodTop), ("lod2", 'left', lodLeft+2*lodSpace),("lod3", 'top', lodTop), ("lod3", 'left', lodLeft+3*lodSpace),
("lod4", 'top', lodTop), ("lod4", 'left', lodLeft+4*lodSpace),("lod5", 'top', lodTop), ("lod5", 'left', lodLeft+5*lodSpace),("lod6", 'top', lodTop), ("lod6", 'left', lodLeft+6*lodSpace),("lod7", 'top', lodTop), ("lod7", 'left', lodLeft+7*lodSpace),
("t0", 'top', lodTop+lodtT), ("t0", 'left', lodLeft+lodtL),("t1", 'top', lodTop+lodtT), ("t1", 'left', lodLeft+lodSpace+lodtL),("t2", 'top', lodTop+lodtT), ("t2", 'left', lodLeft+2*lodSpace+lodtL),("t3", 'top', lodTop+lodtT), ("t3", 'left', lodLeft+3*lodSpace+lodtL),
("t4", 'top', lodTop+lodtT), ("t4", 'left', lodLeft+4*lodSpace+lodtL),("t5", 'top', lodTop+lodtT), ("t5", 'left', lodLeft+5*lodSpace+lodtL),("t6", 'top', lodTop+lodtT), ("t6", 'left', lodLeft+6*lodSpace+lodtL),("t7", 'top', lodTop+lodtT), ("t7", 'left', lodLeft+7*lodSpace+lodtL),
(c1, 'top', 370), (c1, 'left', 20),(c2, 'top', 550), (c2, 'left', 20),
(t2, 'top', 695), (t2, 'left', 76)])
cmds.formLayout("formLay2", edit=True,visible=False)
#WINDOW CHECK
if cmds.objExists ("spine_04"):
if cmds.objExists ("rl4Embedded_Archetype"):
leftPanelButtonV(3)
else:
leftPanelButtonV(1)
else:
leftPanelButtonV(0)
file_path = "c:/Arts and Spells/Scripts/dat.py"
if os.path.exists(file_path):
cmds.showWindow()
else:
prefUI(dnaPath, ROOT_DIR, MAIN_PATH, body_type)
checkSceneSel()
if not cmds.objExists("metapipefreewindow"):
cmds.createNode("transform", name="metapipefreewindow")
def get_main_window():
main_window_ptr = omui.MQtUtil.mainWindow()
return wrapInstance(int(main_window_ptr), QtWidgets.QWidget)
#mFree_window()