Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import maya.cmds as mc
- import re
- import os
- from maya import OpenMayaUI as omui
- from shiboken2 import wrapInstance
- from PySide2.QtCore import *
- from PySide2.QtGui import *
- from PySide2.QtWidgets import *
- #Camera tools for Maya
- #by Antoine Mallaroni, [email protected]
- #########################################
- mayaMainWindowPtr = omui.MQtUtil.mainWindow()
- mayaMainWindow = wrapInstance(long(mayaMainWindowPtr), QWidget)
- class LayoutTools(QWidget):
- def __init__(self, parent=None):
- super(LayoutTools, self).__init__(parent)
- self.setParent(mayaMainWindow)
- self.setWindowFlags(Qt.Window)
- self.setWindowTitle('AM Layout Tools')
- self.ui()
- #####################################################
- #####################################################
- def ui(self):
- mainLyt = QVBoxLayout()
- ### layoutCamera
- cameraLyt = QHBoxLayout()
- cameraLbl = QLabel('Camera')
- self.cameraLineEdit = QLineEdit()
- self.cameraLineEdit.setReadOnly(1)
- cameraRefreshBtn = QPushButton('Refresh')
- [cameraLyt.addWidget(w) for w in (cameraLbl, self.cameraLineEdit, cameraRefreshBtn)]
- cameraRefreshBtn.clicked.connect(self.cameraSetRefresh)
- mainLyt.addLayout(cameraLyt)
- ### layoutFreeCam
- freeCmLyt = QHBoxLayout()
- freeCmBtn = QPushButton('FreeCm')
- freeToCmBtn = QPushButton('Free > Cm')
- cmToFreeBtn = QPushButton('Cm > Free')
- [freeCmLyt.addWidget(w) for w in (freeCmBtn, freeToCmBtn, cmToFreeBtn)]
- freeCmBtn.clicked.connect(self.freeCam)
- freeToCmBtn.clicked.connect(self.freeToCm)
- cmToFreeBtn.clicked.connect(self.cmToFree)
- mainLyt.addLayout(freeCmLyt)
- self.setLayout(mainLyt)
- ### focalCm
- cmFocalLyt = QHBoxLayout()
- cmFocalLbl = QLabel('Focal')
- self.cmFocalSpin = QSpinBox()
- self.cmFocalSpin.setMinimum(20)
- self.cmFocalSpin.setMaximum(500)
- self.cmFocalSlid = QSlider(Qt.Horizontal)
- self.cmFocalSlid.setMinimum(20)
- self.cmFocalSlid.setMaximum(500)
- cmFocalKeyBtn = QPushButton('Key')
- [cmFocalLyt.addWidget(w) for w in (cmFocalLbl, self.cmFocalSpin, self.cmFocalSlid, cmFocalKeyBtn)]
- self.cmFocalSlid.valueChanged.connect(self.focalSliderValue)
- self.cmFocalSpin.valueChanged.connect(self.focalSpinValue)
- cmFocalKeyBtn.clicked.connect(self.focalKey)
- mainLyt.addLayout(cmFocalLyt)
- ### helpcm
- cmOptLyt = QHBoxLayout()
- cmOptTiersBtn = QPushButton('Tiers/NearClip')
- cmOptDeleteGrpBtn = QPushButton('Del AM_grp')
- cmOptFrustumBtn = QPushButton('Frustum')
- [cmOptLyt.addWidget(w) for w in (cmOptTiersBtn, cmOptDeleteGrpBtn, cmOptFrustumBtn)]
- cmOptTiersBtn.clicked.connect(self.tiersPlane)
- cmOptFrustumBtn.clicked.connect(self.frustum)
- cmOptDeleteGrpBtn.clicked.connect(self.deleteGrp)
- mainLyt.addLayout(cmOptLyt)
- cmOptAdvLyt = QHBoxLayout()
- cmOptNearClipLbl = QLabel('Near')
- self.cmOptNearClipSpinBox = QDoubleSpinBox()
- self.cmOptNearClipSlider = QSlider(Qt.Horizontal)
- self.cmOptNearClipSlider.setMinimum(1)
- self.cmOptNearClipSlider.setMaximum(250)
- [cmOptAdvLyt.addWidget(w) for w in (cmOptNearClipLbl, self.cmOptNearClipSpinBox, self.cmOptNearClipSlider)]
- self.cmOptNearClipSlider.valueChanged.connect(self.sliderNearclip)
- self.cmOptNearClipSpinBox.valueChanged.connect(self.nearClipSpinBox)
- mainLyt.addLayout(cmOptAdvLyt)
- ### advence
- # advenceTools
- toolLyt = QHBoxLayout()
- toolCopyBtn = QPushButton('Copy')
- toolPastBtn = QPushButton('Past')
- toolMpcBtn = QPushButton('MultiParentConstraint')
- toolCopyBtn.clicked.connect(self.copy)
- toolPastBtn.clicked.connect(self.past)
- toolMpcBtn.clicked.connect(self.mpc)
- [toolLyt.addWidget(w) for w in (toolCopyBtn, toolPastBtn, toolMpcBtn)]
- mainLyt.addLayout(toolLyt)
- # selection tools
- toolSelLyt = QHBoxLayout()
- toolSelLbl = QLabel('Selection')
- self.toolSelLineEdit = QLineEdit()
- self.toolSelLineEdit.setText('transform')
- self.toolSelTypeComboBox = QComboBox()
- self.toolSelTypeComboBox.addItem('Crv')
- self.toolSelTypeComboBox.addItem('Msh')
- self.toolSelTypeComboBox.addItem('Cam')
- self.toolSelSelectionComboBox = QComboBox()
- self.toolSelSelectionComboBox.addItem('Rep')
- self.toolSelSelectionComboBox.addItem('Add')
- toolSelSelectBtn = QPushButton('Select')
- [toolSelLyt.addWidget(w) for w in (toolSelLbl, self.toolSelLineEdit, self.toolSelTypeComboBox, self.toolSelSelectionComboBox, toolSelSelectBtn)]
- toolSelSelectBtn.clicked.connect(self.sel)
- mainLyt.addLayout(toolSelLyt)
- clCrvLyt = QHBoxLayout()
- clCrvLbl = QLabel('Color')
- self.clCrvComboBox = QComboBox()
- self.clCrvComboBox.addItem('Red')
- self.clCrvComboBox.addItem('Green')
- self.clCrvComboBox.addItem('Blue')
- self.clCrvComboBox.addItem('White')
- self.clCrvComboBox.addItem('Yellow')
- self.clCrvComboBox.addItem('Violet')
- self.clCrvComboBox.addItem('Reset')
- self.clCrvComboBox.setCurrentIndex(6)
- [clCrvLyt.addWidget(w) for w in (clCrvLbl, self.clCrvComboBox)]
- self.clCrvComboBox.activated.connect(self.clCrv)
- mainLyt.addLayout(clCrvLyt)
- tiersCurveLyt = QHBoxLayout()
- tiersLbl = QLabel('Tiers')
- self.tiersCurveSlider = QSlider(Qt.Horizontal)
- self.tiersCurveSlider.setMinimum(-10)
- self.tiersCurveSlider.setMaximum(10)
- self.tiersCurveSlider.setValue(0)
- [tiersCurveLyt.addWidget(w) for w in (tiersLbl, self.tiersCurveSlider)]
- self.tiersCurveSlider.valueChanged.connect(self.sliderTiersCurves)
- mainLyt.addLayout(tiersCurveLyt)
- self.cameraSetRefresh()
- #####################################################
- #####################################################
- # layoutCamera: Btn refresh
- def cameraSetRefresh(self):
- sel = mc.ls(selection=True)
- cshot = mc.sequenceManager(currentShot=True, query=True)
- cam = []
- if sel:
- for c in sel:
- if mc.listRelatives(c, type='camera'):
- cam.append(c)
- elif mc.listRelatives(c, type='nurbsCurve') and mc.listRelatives(c, allDescendents=True, type='camera'):
- shapes = mc.listRelatives(c, allDescendents=True, type='camera')
- parent_node = mc.listRelatives(shapes, parent=True)[0]
- cam.append(parent_node)
- # check si une camera est selectionner
- if cam:
- self.cameraLineEdit.setText(cam[0])
- # si pas de camera ou plusieurs selectionner, check si une camera sans le currentshot
- elif not cam and cshot:
- self.cameraLineEdit.setText(mc.shot(cshot, currentCamera=True, query=True))
- # sinon prend une camera dans la scene
- else:
- allcam = mc.ls(type='camera')[1]
- self.cameraLineEdit.setText(mc.listRelatives(allcam, parent=True)[0])
- # set les attributs de cams a l'ui et stock la camera utilise pour le reste du script
- self.cameraSet = mc.ls(self.cameraLineEdit.text(), long=True)
- self.cmrigNear = mc.listConnections(self.cameraSet[0] + '.nearClipPlane', destination=True, plugs=True, type='transform')
- self.cmrigFocal = mc.listConnections(self.cameraSet[0] + '.focalLength', destination=True, plugs=True, type='transform')
- self.cmOptNearClipSpinBox.setValue(mc.getAttr(self.cameraSet[0] + '.nearClipPlane'))
- self.cmFocalSlid.setValue(mc.camera(self.cameraSet, focalLength=True, query=True))
- self.cmFocalSpin.setValue(mc.camera(self.cameraSet, focalLength=True, query=True))
- self.tiersCurveSlider.setValue(mc.getAttr(self.cameraSet[0] + '.nearClipPlane')/10.0)
- #####################################################
- # layoutFreeCam: Btn freeCm
- def freeCam(self):
- allcm = mc.ls(type='camera')
- freecm = []
- mc.select(d=True)
- # check si la freeCam exist
- for n in allcm:
- if not re.match('.*freeCam*.', n):
- continue
- parent_node = mc.listRelatives(n, parent=True)[0]
- freecm.append(parent_node)
- # si elle n'existe pas, la cree et la rename
- if len(freecm) == 0:
- freeCam = mc.camera(displayResolution=True, displayGateMask=False)
- mc.rename(freeCam[0], "freeCam")
- mc.select(freeCam, r=True)
- # sinon selection de la free cam
- elif len(freecm) == 1:
- mc.select(freecm, r=True)
- # layoutFreeCam: Btn free>cm
- def freeToCm(self):
- allcm = mc.ls(type='camera')
- freecm = []
- mc.select(d=True)
- # check si la freeCam exist
- for n in allcm:
- if not re.match('.*freeCam*.', n):
- continue
- parent_node = mc.listRelatives(n, parent=True)[0]
- freecm.append(parent_node)
- # move la freecam vers la cm
- if len(freecm) == 1:
- matrixCm = mc.xform(self.cameraSet, worldSpace=True, matrix=True, query=True)
- mc.xform(freecm, worldSpace=True, matrix=matrixCm)
- mc.select(freecm, r=True)
- else:
- mc.warning('creat freeCam')
- # layoutFreeCam: Btn cm>Free
- def cmToFree(self):
- allcm = mc.ls(type='camera')
- split = mc.ls(self.cameraSet, long=True)[0].split('|')[1:-1]
- curves = []
- freecm = []
- mc.select(d=True)
- # check si un rig exist sur la camera et prend les curves
- for c in split:
- if mc.nodeType(mc.listRelatives(c)[0]) == 'nurbsCurve':
- curves.append(c)
- # check si la freeCam exist
- for n in allcm:
- if not re.match('.*freeCam*.', n):
- continue
- parent_node = mc.listRelatives(n, parent=True)[0]
- freecm.append(parent_node)
- matrixFreeCm = mc.xform(freecm, worldSpace=True, matrix=True, query=True)
- # move la cm vers la freecam
- if len(freecm) == 1 and not curves:
- mc.xform(self.cameraSet, worldSpace=True, matrix=matrixFreeCm)
- mc.select(self.cameraSet, r=True)
- elif len(freecm) == 1 and curves:
- mc.xform(curves[0], worldSpace=True, matrix=matrixFreeCm)
- mc.select(curves[0], r=True)
- else:
- mc.warning('creat freeCam')
- #####################################################
- # focalCm: sliderValueChange
- # focalCm: spinValueChange
- def focalSpinValue(self, value):
- # check si le grp tiers exist pour le scaler en fonction de la focal(voir def tiers) et test si la camera a un connextion avec la focal, camera rigger par exemple
- tiersgrp = self.cameraLineEdit.text() + '_tiers_grp'
- self.cmFocalSlid.setValue(value)
- if self.cmrigFocal:
- mc.setAttr(self.cmrigFocal[0], value)
- else:
- mc.setAttr(self.cameraSet[0] + '.focalLength', value)
- if mc.objExists(tiersgrp):
- aperture = mc.getAttr(self.cameraSet[0]+ '.horizontalFilmAperture')*25.4, mc.getAttr(self.cameraSet[0]+ '.verticalFilmAperture')*25.4
- nearClipping = mc.getAttr(self.cameraSet[0]+".nearClipPlane")
- nearScaleValue = nearClipping*aperture[0]/value, nearClipping*aperture[1]/value
- mc.setAttr(tiersgrp + '.sx', nearScaleValue[0])
- mc.setAttr(tiersgrp + '.sy', nearScaleValue[1])
- def focalSliderValue(self, value):
- self.cmFocalSpin.setValue(value)
- # focalCm : Btn focalKey
- def focalKey(self):
- if self.cmrigFocal:
- mc.setKeyframe(self.cmrigFocal[0], attribute='focalLength')
- else:
- mc.setKeyframe(self.cameraSet, attribute='focalLength')
- #####################################################
- # help: Btn tiers plane
- def tiersPlane(self):
- # cree les groups neccesaire pour le script si ils n'existent pas, ainsi que ca que les constraint et parents nescessaire
- maingrp = 'AM_LayoutTools_grp'
- if not mc.objExists(maingrp):
- mc.group(em=True, name='AM_LayoutTools_grp')
- camgrp = self.cameraLineEdit.text() + '_grp'
- if not mc.objExists(camgrp):
- mc.group(em=True, name= self.cameraLineEdit.text() + '_grp')
- mc.parent(camgrp, maingrp)
- mc.parentConstraint(self.cameraSet, camgrp, maintainOffset=False)
- tiersgrp = self.cameraLineEdit.text() + '_tiers_grp'
- if not mc.objExists(tiersgrp):
- mc.group(em=True, name = self.cameraLineEdit.text() + '_tiers_grp')
- mc.parent(tiersgrp, camgrp)
- # cree les curves pour les tiers et les renames
- curve1 = mc.curve(degree=1, p=[(-0.5, 0.25, 0), (0.5, 0.25, 0)], name = 'tiers_topcurve')
- mc.rename(mc.listRelatives(curve1, shapes=True)[0], self.cameraLineEdit.text() + '_topcurveShape')
- curve2 = mc.curve(degree=1, p=[(-0.5, -0.25, 0), (0.5, -0.25, 0)], name = 'tiers_bottomcurve')
- mc.rename(mc.listRelatives(curve2, shapes=True)[0], self.cameraLineEdit.text() + '_bottomcurveShape')
- curve3 = mc.curve(degree=1, p=[(-0.25, 0.5, 0), (-0.25, -0.5, 0)], name = 'tiers_leftcurve')
- mc.rename(mc.listRelatives(curve3, shapes=True)[0], self.cameraLineEdit.text() + '_leftcurveShape')
- curve4 = mc.curve(degree=1, p=[(0.25, 0.5, 0), (0.25, -0.5, 0)], name = 'tiers_rightcurve')
- mc.rename(mc.listRelatives(curve4, shapes=True)[0], self.cameraLineEdit.text() + '_rightcurveShape')
- # parent les curves au group tiers, move, freeze le group tiers pour avoir les bonnes transforms
- for n in curve1, curve2, curve3, curve4:
- mc.parent(n, tiersgrp)
- self.tiersCurveSlider.setValue(0)
- matrixCm = mc.xform(self.cameraSet, worldSpace=True, matrix=True, query=True)
- mc.xform(tiersgrp, worldSpace=True, matrix=matrixCm)
- mc.makeIdentity(tiersgrp, apply=True, t=1, r=1, s=1, n=0)
- # formule pour scaler le group tiers en fonction de la focal et distance du nearclip
- aperture = mc.getAttr(self.cameraSet[0]+ '.horizontalFilmAperture')*25.4, mc.getAttr(self.cameraSet[0]+ '.verticalFilmAperture')*25.4
- focalLength = mc.getAttr(self.cameraSet[0]+".focalLength")
- nearClipping = mc.getAttr(self.cameraSet[0]+".nearClipPlane")
- nearScaleValue = nearClipping*aperture[0]/focalLength, nearClipping*aperture[1]/focalLength
- mc.setAttr(tiersgrp + '.sx', nearScaleValue[0])
- mc.setAttr(tiersgrp + '.sy', nearScaleValue[1])
- mc.setAttr(tiersgrp + '.tz', - nearClipping)
- mc.setAttr(self.cameraSet[0] + '.displayCameraNearClip', 1)
- mc.select(d=True)
- # si la tiersPlane existe, toggle la visibility
- else:
- if mc.getAttr(tiersgrp + '.visibility') == 1:
- mc.setAttr(self.cameraSet[0] + '.displayCameraNearClip', 0)
- mc.setAttr(tiersgrp + '.visibility', 0)
- elif mc.getAttr(tiersgrp + '.visibility') == 0:
- mc.setAttr(self.cameraSet[0] + '.displayCameraNearClip', 1)
- mc.setAttr(tiersgrp + '.visibility', 1)
- def frustum(self):
- maingrp = 'AM_LayoutTools_grp'
- if not mc.objExists(maingrp):
- mc.group(em=True, name='AM_LayoutTools_grp')
- camgrp = self.cameraLineEdit.text() + '_grp'
- if not mc.objExists(camgrp):
- mc.group(em=True, name= self.cameraLineEdit.text() + '_grp')
- mc.parent(camgrp, maingrp)
- mc.parentConstraint(self.cameraSet, camgrp, maintainOffset=False)
- frustumgrp = self.cameraLineEdit.text() + '_frustum_grp'
- if not mc.objExists(frustumgrp):
- mc.group(em=True, name = self.cameraLineEdit.text() + '_frustum_grp')
- mc.parent(frustumgrp, camgrp)
- aperture = mc.getAttr(self.cameraSet[0]+ '.horizontalFilmAperture')*25.4, mc.getAttr(self.cameraSet[0]+ '.verticalFilmAperture')*25.4
- focalLength = mc.getAttr(self.cameraSet[0]+".focalLength")
- nearClipping = mc.getAttr(self.cameraSet[0]+".nearClipPlane")
- farClipping = mc.getAttr(self.cameraSet[0]+".farClipPlane")
- farScaleValue = farClipping*aperture[0]/focalLength, farClipping*aperture[1]/focalLength
- nearScaleValue = nearClipping*aperture[0]/focalLength, nearClipping*aperture[1]/focalLength
- frustum_msh = mc.polyCube(name=self.cameraSet[0]+'_frustum')
- mc.move(-farClipping, frustum_msh[0]+".f[2]", moveZ=True)
- mc.move(-nearClipping, frustum_msh[0]+".f[0]", moveZ=True)
- mc.scale(farScaleValue[0],farScaleValue[1], 1 , frustum_msh[0]+'.f[2]')
- mc.scale(nearScaleValue[0], nearScaleValue[1], 1, frustum_msh[0]+'.f[0]')
- mc.parent(frustum_msh, frustumgrp, absolute=False)
- matrixCm = mc.xform(self.cameraSet, worldSpace=True, matrix=True, query=True)
- mc.xform(frustumgrp, worldSpace=True, matrix=matrixCm)
- mc.makeIdentity(frustumgrp, apply=True, t=1, r=1, s=1, n=0)
- mc.hide(frustum_msh)
- # toggle visibility du frustum
- if mc.getAttr(self.cameraSet[0] + '.displayCameraFrustum') == False:
- mc.setAttr(self.cameraSet[0] + '.displayCameraFrustum', True)
- elif mc.getAttr(self.cameraSet[0] + '.displayCameraFrustum') == True:
- mc.setAttr(self.cameraSet[0] + '.displayCameraFrustum', False)
- def nearClipSpinBox(self, value):
- # change la value du nearclip de la camera
- tiersgrp = self.cameraLineEdit.text() + '_tiers_grp'
- self.cmOptNearClipSlider.setValue(value*10.0)
- if self.cmrigNear:
- mc.setAttr(self.cmrigNear[0], value)
- else:
- mc.setAttr(self.cameraSet[0] + '.nearClipPlane', value)
- # change le scale du tiers grp en fonction du nearclip
- if mc.objExists(tiersgrp):
- aperture = mc.getAttr(self.cameraSet[0]+ '.horizontalFilmAperture')*25.4, mc.getAttr(self.cameraSet[0]+ '.verticalFilmAperture')*25.4
- focalLength = mc.getAttr(self.cameraSet[0]+".focalLength")
- nearScaleValue = value*aperture[0]/focalLength, value*aperture[1]/focalLength
- mc.setAttr(tiersgrp + '.sx', nearScaleValue[0])
- mc.setAttr(tiersgrp + '.sy', nearScaleValue[1])
- mc.setAttr(tiersgrp + '.tz', - value)
- def sliderNearclip(self, value):
- self.cmOptNearClipSpinBox.setValue(value/10.0)
- def sliderTiersCurves(self, value):
- # slider pour modifier le positionnement des curves tiers
- tiersgrp = self.cameraLineEdit.text() + '_tiers_grp'
- if not mc.objExists(tiersgrp):
- print 'Put Nearclip button before'
- else:
- self.tiersCurveSlider.setValue(value)
- curves = mc.listRelatives(tiersgrp, path=True)
- mc.setAttr(curves[0] + '.ty', value/10.0*0.25)
- mc.setAttr(curves[1] + '.ty', - (value/10.0*0.25))
- mc.setAttr(curves[2] + '.tx', - (value/10.0*0.25))
- mc.setAttr(curves[3] + '.tx', value/10.0*0.25)
- def deleteGrp(self):
- maingrp = 'AM_LayoutTools_grp'
- if mc.objExists(maingrp):
- mc.delete(maingrp)
- else:
- mc.warning('no AM_grp creat yet')
- #####################################################
- # advence: Btn copy
- def copy(self):
- sel = mc.ls(selection=True)
- mc.select(d=True)
- # check qu'un seul transform est selectionner
- if len(sel) is not 1 and mc.nodeType(sel) != 'transform':
- mc.error('Select one transform')
- # copy les coordonne xform dans un fichier text dans mes documents, le cree si il n'existe pas, et reecrit par dessus a chaque fois
- else:
- homedir = os.environ['HOME']
- data_doc = homedir + "/data_cpt.txt"
- worldSpaceTransform = str(mc.xform(sel, worldSpace=True, matrix=True, query=True))
- with open(data_doc, "w") as dataFile:
- dataFile.write(str(worldSpaceTransform))
- # advence: Btn past
- def past(self):
- sel = mc.ls(selection=True)
- # check qu'un seul transform est selectionner
- if len(sel) is not 1 and mc.nodeType(sel) != 'transform':
- mc.error('Select one transform')
- # past les valeurs du fichier ne enlevant les [ ] et espaces
- else:
- homedir = os.environ['HOME']
- data_doc = homedir + "/data_cpt.txt"
- with open(data_doc, "r") as dataFile:
- worldSpaceTransform = dataFile.read()
- worldSpaceTransform = worldSpaceTransform.replace('[', '').replace(']', '')
- worldSpaceTransform = worldSpaceTransform.split(', ')
- wst_float = []
- wst_float = [float(i) for i in worldSpaceTransform]
- mc.xform(sel, worldSpace=True, matrix=wst_float)
- # advence: Btn mpc
- def mpc(self):
- sel = mc.ls(selection=True)
- mc.select(d=True)
- # separe les selections enfants en premier, parent en dernier
- c_children = sel[:-1]
- c_parent = sel[-1]
- # boucle pour constraint, check qu'il y est mininum 3 transforms, selectionne le parent a la fin
- for t in sel:
- if mc.nodeType(t) != 'transform' and len(sel) < 3:
- mc.error('Select 3 or more transforms')
- else:
- for p in c_children:
- mc.parentConstraint(c_parent, p, maintainOffset=True)
- mc.select(c_parent, r=True)
- def sel(self):
- sel = []
- # cree les data de curve, mesh et cam
- crv = mc.ls(type='nurbsCurve')
- msh = mc.ls(type='mesh')
- cam = mc.ls(type='camera')
- self.toolSelTypeComboBox.setItemData(0, crv)
- self.toolSelTypeComboBox.setItemData(1, msh)
- self.toolSelTypeComboBox.setItemData(2, cam)
- # utilise ces data pour selection
- for n in self.toolSelTypeComboBox.currentData():
- if not re.match('.*'+self.toolSelLineEdit.text()+'*.', n):
- continue
- parent_node = mc.listRelatives(n, parent=True)[0]
- sel.append(parent_node)
- if self.toolSelSelectionComboBox.currentIndex() == 0:
- mc.select(sel, r=True)
- elif self.toolSelSelectionComboBox.currentIndex() == 1:
- mc.select(sel, add=True)
- def clCrv(self):
- maingrp = 'AM_LayoutTools_grp'
- curves = []
- # set les codes couleur maya pour les curves
- red = 13
- green = 14
- blue = 15
- white = 16
- yellow = 17
- violet = 31
- reset = 5
- self.clCrvComboBox.setItemData(0, red)
- self.clCrvComboBox.setItemData(1, green)
- self.clCrvComboBox.setItemData(2, blue)
- self.clCrvComboBox.setItemData(3, white)
- self.clCrvComboBox.setItemData(4, yellow)
- self.clCrvComboBox.setItemData(5, violet)
- self.clCrvComboBox.setItemData(6, reset)
- # si les curves existent, changer les couleur en fonction du combobox
- if mc.objExists(maingrp):
- curves_shapes = mc.listRelatives(maingrp, allDescendents=True, type='nurbsCurve')
- for t in curves_shapes:
- parents = mc.listRelatives(t, parent=True)[0]
- curves.append(parents)
- for c in curves:
- mc.setAttr(c + '.overrideEnabled', 1)
- mc.setAttr(c + '.overrideColor', self.clCrvComboBox.currentData())
- else:
- mc.warning('No AM_grp yet')
- try:
- lt.close()
- except:
- pass
- lt = LayoutTools()
- lt.show()
Add Comment
Please, Sign In to add comment