gsee

old_AM_cameraTools

Feb 20th, 2020
213
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 24.31 KB | None | 0 0
  1. import maya.cmds as mc
  2. import re
  3. import os
  4. from maya import OpenMayaUI as omui
  5. from shiboken2 import wrapInstance
  6. from PySide2.QtCore import *
  7. from PySide2.QtGui import *
  8. from PySide2.QtWidgets import *
  9.  
  10. #Camera tools for Maya
  11. #by Antoine Mallaroni, [email protected]
  12.  
  13. #########################################
  14.  
  15. mayaMainWindowPtr = omui.MQtUtil.mainWindow()
  16. mayaMainWindow = wrapInstance(long(mayaMainWindowPtr), QWidget)
  17.  
  18. class LayoutTools(QWidget):
  19.     def __init__(self, parent=None):
  20.         super(LayoutTools, self).__init__(parent)
  21.  
  22.         self.setParent(mayaMainWindow)
  23.         self.setWindowFlags(Qt.Window)
  24.         self.setWindowTitle('AM Layout Tools')
  25.         self.ui()
  26.  
  27. #####################################################
  28. #####################################################
  29.  
  30.     def ui(self):
  31.         mainLyt = QVBoxLayout()
  32.  
  33.         ### layoutCamera
  34.        
  35.         cameraLyt = QHBoxLayout()
  36.         cameraLbl = QLabel('Camera')
  37.         self.cameraLineEdit = QLineEdit()
  38.         self.cameraLineEdit.setReadOnly(1)
  39.         cameraRefreshBtn = QPushButton('Refresh')
  40.         [cameraLyt.addWidget(w) for w in (cameraLbl, self.cameraLineEdit, cameraRefreshBtn)]
  41.  
  42.         cameraRefreshBtn.clicked.connect(self.cameraSetRefresh)
  43.  
  44.         mainLyt.addLayout(cameraLyt)
  45.  
  46.         ### layoutFreeCam
  47.  
  48.         freeCmLyt = QHBoxLayout()
  49.         freeCmBtn = QPushButton('FreeCm')
  50.         freeToCmBtn = QPushButton('Free > Cm')
  51.         cmToFreeBtn = QPushButton('Cm > Free')
  52.  
  53.         [freeCmLyt.addWidget(w) for w in (freeCmBtn, freeToCmBtn, cmToFreeBtn)]
  54.  
  55.         freeCmBtn.clicked.connect(self.freeCam)
  56.         freeToCmBtn.clicked.connect(self.freeToCm)
  57.         cmToFreeBtn.clicked.connect(self.cmToFree)
  58.  
  59.         mainLyt.addLayout(freeCmLyt)
  60.         self.setLayout(mainLyt)
  61.  
  62.         ### focalCm
  63.  
  64.         cmFocalLyt = QHBoxLayout()
  65.         cmFocalLbl = QLabel('Focal')
  66.         self.cmFocalSpin = QSpinBox()
  67.         self.cmFocalSpin.setMinimum(20)
  68.         self.cmFocalSpin.setMaximum(500)
  69.         self.cmFocalSlid = QSlider(Qt.Horizontal)
  70.         self.cmFocalSlid.setMinimum(20)
  71.         self.cmFocalSlid.setMaximum(500)
  72.         cmFocalKeyBtn = QPushButton('Key')
  73.  
  74.         [cmFocalLyt.addWidget(w) for w in (cmFocalLbl, self.cmFocalSpin, self.cmFocalSlid, cmFocalKeyBtn)]
  75.  
  76.         self.cmFocalSlid.valueChanged.connect(self.focalSliderValue)
  77.         self.cmFocalSpin.valueChanged.connect(self.focalSpinValue)
  78.         cmFocalKeyBtn.clicked.connect(self.focalKey)
  79.  
  80.         mainLyt.addLayout(cmFocalLyt)
  81.  
  82.         ### helpcm
  83.  
  84.         cmOptLyt = QHBoxLayout()
  85.         cmOptTiersBtn = QPushButton('Tiers/NearClip')
  86.         cmOptDeleteGrpBtn = QPushButton('Del AM_grp')
  87.         cmOptFrustumBtn = QPushButton('Frustum')
  88.         [cmOptLyt.addWidget(w) for w in (cmOptTiersBtn, cmOptDeleteGrpBtn, cmOptFrustumBtn)]
  89.  
  90.         cmOptTiersBtn.clicked.connect(self.tiersPlane)
  91.         cmOptFrustumBtn.clicked.connect(self.frustum)
  92.         cmOptDeleteGrpBtn.clicked.connect(self.deleteGrp)
  93.  
  94.         mainLyt.addLayout(cmOptLyt)
  95.  
  96.         cmOptAdvLyt = QHBoxLayout()
  97.         cmOptNearClipLbl = QLabel('Near')
  98.         self.cmOptNearClipSpinBox = QDoubleSpinBox()
  99.         self.cmOptNearClipSlider = QSlider(Qt.Horizontal)
  100.         self.cmOptNearClipSlider.setMinimum(1)
  101.         self.cmOptNearClipSlider.setMaximum(250)
  102.         [cmOptAdvLyt.addWidget(w) for w in (cmOptNearClipLbl, self.cmOptNearClipSpinBox, self.cmOptNearClipSlider)]
  103.  
  104.         self.cmOptNearClipSlider.valueChanged.connect(self.sliderNearclip)
  105.         self.cmOptNearClipSpinBox.valueChanged.connect(self.nearClipSpinBox)
  106.  
  107.         mainLyt.addLayout(cmOptAdvLyt)
  108.  
  109.         ### advence
  110.         # advenceTools
  111.  
  112.         toolLyt = QHBoxLayout()
  113.         toolCopyBtn = QPushButton('Copy')
  114.         toolPastBtn = QPushButton('Past')
  115.         toolMpcBtn = QPushButton('MultiParentConstraint')
  116.  
  117.         toolCopyBtn.clicked.connect(self.copy)
  118.         toolPastBtn.clicked.connect(self.past)
  119.         toolMpcBtn.clicked.connect(self.mpc)
  120.  
  121.         [toolLyt.addWidget(w) for w in (toolCopyBtn, toolPastBtn, toolMpcBtn)]
  122.  
  123.         mainLyt.addLayout(toolLyt)
  124.  
  125.         # selection tools
  126.  
  127.         toolSelLyt = QHBoxLayout()
  128.         toolSelLbl = QLabel('Selection')
  129.         self.toolSelLineEdit = QLineEdit()
  130.         self.toolSelLineEdit.setText('transform')
  131.         self.toolSelTypeComboBox = QComboBox()
  132.         self.toolSelTypeComboBox.addItem('Crv')
  133.         self.toolSelTypeComboBox.addItem('Msh')
  134.         self.toolSelTypeComboBox.addItem('Cam')
  135.         self.toolSelSelectionComboBox = QComboBox()
  136.         self.toolSelSelectionComboBox.addItem('Rep')
  137.         self.toolSelSelectionComboBox.addItem('Add')
  138.         toolSelSelectBtn = QPushButton('Select')
  139.         [toolSelLyt.addWidget(w) for w in (toolSelLbl, self.toolSelLineEdit, self.toolSelTypeComboBox, self.toolSelSelectionComboBox, toolSelSelectBtn)]
  140.  
  141.         toolSelSelectBtn.clicked.connect(self.sel)
  142.  
  143.         mainLyt.addLayout(toolSelLyt)
  144.  
  145.         clCrvLyt = QHBoxLayout()
  146.         clCrvLbl = QLabel('Color')
  147.         self.clCrvComboBox = QComboBox()
  148.         self.clCrvComboBox.addItem('Red')
  149.         self.clCrvComboBox.addItem('Green')
  150.         self.clCrvComboBox.addItem('Blue')
  151.         self.clCrvComboBox.addItem('White')
  152.         self.clCrvComboBox.addItem('Yellow')
  153.         self.clCrvComboBox.addItem('Violet')
  154.         self.clCrvComboBox.addItem('Reset')
  155.         self.clCrvComboBox.setCurrentIndex(6)
  156.         [clCrvLyt.addWidget(w) for w in (clCrvLbl, self.clCrvComboBox)]
  157.  
  158.         self.clCrvComboBox.activated.connect(self.clCrv)
  159.  
  160.         mainLyt.addLayout(clCrvLyt)
  161.  
  162.         tiersCurveLyt = QHBoxLayout()
  163.         tiersLbl = QLabel('Tiers')
  164.         self.tiersCurveSlider = QSlider(Qt.Horizontal)
  165.         self.tiersCurveSlider.setMinimum(-10)
  166.         self.tiersCurveSlider.setMaximum(10)
  167.         self.tiersCurveSlider.setValue(0)
  168.         [tiersCurveLyt.addWidget(w) for w in (tiersLbl, self.tiersCurveSlider)]
  169.  
  170.         self.tiersCurveSlider.valueChanged.connect(self.sliderTiersCurves)
  171.  
  172.         mainLyt.addLayout(tiersCurveLyt)
  173.  
  174.         self.cameraSetRefresh()
  175.  
  176. #####################################################
  177. #####################################################
  178.  
  179.     # layoutCamera: Btn refresh
  180.  
  181.     def cameraSetRefresh(self):
  182.         sel = mc.ls(selection=True)
  183.         cshot = mc.sequenceManager(currentShot=True, query=True)
  184.         cam = []
  185.  
  186.         if sel:
  187.             for c in sel:
  188.                 if mc.listRelatives(c, type='camera'):
  189.                     cam.append(c)
  190.                    
  191.                 elif mc.listRelatives(c, type='nurbsCurve') and mc.listRelatives(c, allDescendents=True, type='camera'):
  192.                     shapes = mc.listRelatives(c, allDescendents=True, type='camera')
  193.                     parent_node = mc.listRelatives(shapes, parent=True)[0]
  194.                     cam.append(parent_node)
  195.  
  196.         # check si une camera est selectionner
  197.  
  198.         if cam:
  199.             self.cameraLineEdit.setText(cam[0])
  200.  
  201.         # si pas de camera ou plusieurs selectionner, check si une camera sans le currentshot
  202.  
  203.         elif not cam and cshot:
  204.             self.cameraLineEdit.setText(mc.shot(cshot, currentCamera=True, query=True))
  205.  
  206.         # sinon prend une camera dans la scene
  207.  
  208.         else:
  209.             allcam = mc.ls(type='camera')[1]
  210.             self.cameraLineEdit.setText(mc.listRelatives(allcam, parent=True)[0])
  211.  
  212.         # set les attributs de cams a l'ui et stock la camera utilise pour le reste du script
  213.  
  214.         self.cameraSet = mc.ls(self.cameraLineEdit.text(), long=True)
  215.  
  216.         self.cmrigNear = mc.listConnections(self.cameraSet[0] + '.nearClipPlane', destination=True, plugs=True, type='transform')
  217.         self.cmrigFocal = mc.listConnections(self.cameraSet[0] + '.focalLength', destination=True, plugs=True, type='transform')
  218.  
  219.         self.cmOptNearClipSpinBox.setValue(mc.getAttr(self.cameraSet[0] + '.nearClipPlane'))
  220.         self.cmFocalSlid.setValue(mc.camera(self.cameraSet, focalLength=True, query=True))
  221.         self.cmFocalSpin.setValue(mc.camera(self.cameraSet, focalLength=True, query=True))
  222.         self.tiersCurveSlider.setValue(mc.getAttr(self.cameraSet[0] + '.nearClipPlane')/10.0)
  223.  
  224. #####################################################
  225.  
  226.     # layoutFreeCam: Btn freeCm
  227.  
  228.     def freeCam(self):
  229.         allcm = mc.ls(type='camera')
  230.         freecm = []
  231.         mc.select(d=True)
  232.  
  233.         # check si la freeCam exist
  234.  
  235.         for n in allcm:
  236.             if not re.match('.*freeCam*.', n):
  237.                 continue
  238.  
  239.             parent_node = mc.listRelatives(n, parent=True)[0]
  240.             freecm.append(parent_node)
  241.  
  242.         # si elle n'existe pas, la cree et la rename
  243.  
  244.         if len(freecm) == 0:
  245.             freeCam = mc.camera(displayResolution=True, displayGateMask=False)
  246.             mc.rename(freeCam[0], "freeCam")
  247.             mc.select(freeCam, r=True)
  248.  
  249.         # sinon selection de la free cam
  250.  
  251.         elif len(freecm) == 1:
  252.             mc.select(freecm, r=True)
  253.  
  254.     # layoutFreeCam: Btn free>cm
  255.  
  256.     def freeToCm(self):
  257.         allcm = mc.ls(type='camera')
  258.         freecm = []
  259.         mc.select(d=True)
  260.  
  261.         # check si la freeCam exist
  262.  
  263.         for n in allcm:
  264.             if not re.match('.*freeCam*.', n):
  265.                 continue
  266.  
  267.             parent_node = mc.listRelatives(n, parent=True)[0]
  268.             freecm.append(parent_node)
  269.  
  270.         # move la freecam vers la cm
  271.  
  272.         if len(freecm) == 1:
  273.             matrixCm = mc.xform(self.cameraSet, worldSpace=True, matrix=True, query=True)
  274.             mc.xform(freecm, worldSpace=True, matrix=matrixCm)
  275.             mc.select(freecm, r=True)
  276.  
  277.         else:
  278.             mc.warning('creat freeCam')
  279.  
  280.     # layoutFreeCam: Btn cm>Free
  281.  
  282.     def cmToFree(self):
  283.         allcm = mc.ls(type='camera')
  284.         split = mc.ls(self.cameraSet, long=True)[0].split('|')[1:-1]
  285.         curves = []
  286.         freecm = []
  287.         mc.select(d=True)
  288.  
  289.         # check si un rig exist sur la camera et prend les curves
  290.  
  291.         for c in split:
  292.             if mc.nodeType(mc.listRelatives(c)[0]) == 'nurbsCurve':
  293.                 curves.append(c)
  294.  
  295.         # check si la freeCam exist
  296.         for n in allcm:
  297.             if not re.match('.*freeCam*.', n):
  298.                 continue
  299.  
  300.             parent_node = mc.listRelatives(n, parent=True)[0]
  301.             freecm.append(parent_node)
  302.  
  303.         matrixFreeCm = mc.xform(freecm, worldSpace=True, matrix=True, query=True)
  304.  
  305.         # move la cm vers la freecam
  306.         if len(freecm) == 1 and not curves:
  307.             mc.xform(self.cameraSet, worldSpace=True, matrix=matrixFreeCm)
  308.             mc.select(self.cameraSet, r=True)
  309.  
  310.         elif len(freecm) == 1 and curves:
  311.             mc.xform(curves[0], worldSpace=True, matrix=matrixFreeCm)
  312.             mc.select(curves[0], r=True)
  313.  
  314.         else:
  315.             mc.warning('creat freeCam')
  316.  
  317. #####################################################
  318.  
  319.     # focalCm: sliderValueChange
  320.         # focalCm: spinValueChange
  321.  
  322.     def focalSpinValue(self, value):
  323.  
  324.         # 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
  325.  
  326.         tiersgrp = self.cameraLineEdit.text() + '_tiers_grp'
  327.         self.cmFocalSlid.setValue(value)
  328.  
  329.         if self.cmrigFocal:
  330.             mc.setAttr(self.cmrigFocal[0], value)
  331.  
  332.         else:
  333.             mc.setAttr(self.cameraSet[0] + '.focalLength', value)
  334.  
  335.         if mc.objExists(tiersgrp):
  336.             aperture = mc.getAttr(self.cameraSet[0]+ '.horizontalFilmAperture')*25.4, mc.getAttr(self.cameraSet[0]+ '.verticalFilmAperture')*25.4
  337.             nearClipping = mc.getAttr(self.cameraSet[0]+".nearClipPlane")
  338.             nearScaleValue = nearClipping*aperture[0]/value, nearClipping*aperture[1]/value
  339.  
  340.             mc.setAttr(tiersgrp + '.sx', nearScaleValue[0])
  341.             mc.setAttr(tiersgrp + '.sy', nearScaleValue[1])
  342.  
  343.     def focalSliderValue(self, value):
  344.         self.cmFocalSpin.setValue(value)
  345.  
  346.     # focalCm : Btn focalKey
  347.  
  348.     def focalKey(self):
  349.         if self.cmrigFocal:
  350.             mc.setKeyframe(self.cmrigFocal[0], attribute='focalLength')
  351.  
  352.         else:
  353.             mc.setKeyframe(self.cameraSet, attribute='focalLength')
  354.        
  355. #####################################################
  356.  
  357.     # help: Btn tiers plane
  358.  
  359.     def tiersPlane(self):
  360.  
  361.         # cree les groups neccesaire pour le script si ils n'existent pas, ainsi que ca que les constraint et parents nescessaire
  362.  
  363.         maingrp = 'AM_LayoutTools_grp'
  364.         if not mc.objExists(maingrp):
  365.             mc.group(em=True, name='AM_LayoutTools_grp')
  366.  
  367.         camgrp = self.cameraLineEdit.text() + '_grp'
  368.         if not mc.objExists(camgrp):
  369.             mc.group(em=True, name= self.cameraLineEdit.text() + '_grp')
  370.             mc.parent(camgrp, maingrp)
  371.             mc.parentConstraint(self.cameraSet, camgrp, maintainOffset=False)
  372.  
  373.         tiersgrp = self.cameraLineEdit.text() + '_tiers_grp'
  374.         if not mc.objExists(tiersgrp):
  375.             mc.group(em=True, name = self.cameraLineEdit.text() + '_tiers_grp')
  376.             mc.parent(tiersgrp, camgrp)
  377.  
  378.             # cree les curves pour les tiers et les renames
  379.  
  380.             curve1 = mc.curve(degree=1, p=[(-0.5, 0.25, 0), (0.5, 0.25, 0)], name = 'tiers_topcurve')
  381.             mc.rename(mc.listRelatives(curve1, shapes=True)[0], self.cameraLineEdit.text() + '_topcurveShape')
  382.             curve2 = mc.curve(degree=1, p=[(-0.5, -0.25, 0), (0.5, -0.25, 0)], name = 'tiers_bottomcurve')
  383.             mc.rename(mc.listRelatives(curve2, shapes=True)[0], self.cameraLineEdit.text() + '_bottomcurveShape')
  384.             curve3 = mc.curve(degree=1, p=[(-0.25, 0.5, 0), (-0.25, -0.5, 0)], name = 'tiers_leftcurve')
  385.             mc.rename(mc.listRelatives(curve3, shapes=True)[0], self.cameraLineEdit.text() + '_leftcurveShape')
  386.             curve4 = mc.curve(degree=1, p=[(0.25, 0.5, 0), (0.25, -0.5, 0)], name = 'tiers_rightcurve')
  387.             mc.rename(mc.listRelatives(curve4, shapes=True)[0], self.cameraLineEdit.text() + '_rightcurveShape')
  388.  
  389.             # parent les curves au group tiers, move, freeze le group tiers pour avoir les bonnes transforms
  390.  
  391.             for n in curve1, curve2, curve3, curve4:
  392.                 mc.parent(n, tiersgrp)
  393.            
  394.             self.tiersCurveSlider.setValue(0)
  395.             matrixCm = mc.xform(self.cameraSet, worldSpace=True, matrix=True, query=True)
  396.             mc.xform(tiersgrp, worldSpace=True, matrix=matrixCm)
  397.             mc.makeIdentity(tiersgrp, apply=True, t=1, r=1, s=1, n=0)
  398.  
  399.             # formule pour scaler le group tiers en fonction de la focal et distance du nearclip  
  400.  
  401.             aperture = mc.getAttr(self.cameraSet[0]+ '.horizontalFilmAperture')*25.4, mc.getAttr(self.cameraSet[0]+ '.verticalFilmAperture')*25.4
  402.             focalLength = mc.getAttr(self.cameraSet[0]+".focalLength")
  403.             nearClipping = mc.getAttr(self.cameraSet[0]+".nearClipPlane")
  404.             nearScaleValue = nearClipping*aperture[0]/focalLength, nearClipping*aperture[1]/focalLength
  405.  
  406.             mc.setAttr(tiersgrp + '.sx', nearScaleValue[0])
  407.             mc.setAttr(tiersgrp + '.sy', nearScaleValue[1])
  408.             mc.setAttr(tiersgrp + '.tz', - nearClipping)
  409.  
  410.             mc.setAttr(self.cameraSet[0] + '.displayCameraNearClip', 1)
  411.             mc.select(d=True)
  412.  
  413.         # si la tiersPlane existe, toggle la visibility
  414.  
  415.         else:      
  416.             if mc.getAttr(tiersgrp + '.visibility') == 1:
  417.                 mc.setAttr(self.cameraSet[0] + '.displayCameraNearClip', 0)
  418.                 mc.setAttr(tiersgrp + '.visibility', 0)
  419.  
  420.             elif mc.getAttr(tiersgrp + '.visibility') == 0:
  421.                 mc.setAttr(self.cameraSet[0] + '.displayCameraNearClip', 1)
  422.                 mc.setAttr(tiersgrp + '.visibility', 1)
  423.  
  424.     def frustum(self):
  425.  
  426.         maingrp = 'AM_LayoutTools_grp'
  427.         if not mc.objExists(maingrp):
  428.             mc.group(em=True, name='AM_LayoutTools_grp')
  429.  
  430.         camgrp = self.cameraLineEdit.text() + '_grp'
  431.         if not mc.objExists(camgrp):
  432.             mc.group(em=True, name= self.cameraLineEdit.text() + '_grp')
  433.             mc.parent(camgrp, maingrp)
  434.             mc.parentConstraint(self.cameraSet, camgrp, maintainOffset=False)
  435.  
  436.         frustumgrp = self.cameraLineEdit.text() + '_frustum_grp'
  437.         if not mc.objExists(frustumgrp):
  438.             mc.group(em=True, name = self.cameraLineEdit.text() + '_frustum_grp')
  439.             mc.parent(frustumgrp, camgrp)
  440.  
  441.             aperture = mc.getAttr(self.cameraSet[0]+ '.horizontalFilmAperture')*25.4, mc.getAttr(self.cameraSet[0]+ '.verticalFilmAperture')*25.4
  442.             focalLength = mc.getAttr(self.cameraSet[0]+".focalLength")
  443.             nearClipping = mc.getAttr(self.cameraSet[0]+".nearClipPlane")
  444.             farClipping = mc.getAttr(self.cameraSet[0]+".farClipPlane")
  445.  
  446.             farScaleValue = farClipping*aperture[0]/focalLength, farClipping*aperture[1]/focalLength
  447.             nearScaleValue = nearClipping*aperture[0]/focalLength, nearClipping*aperture[1]/focalLength
  448.  
  449.             frustum_msh = mc.polyCube(name=self.cameraSet[0]+'_frustum')
  450.             mc.move(-farClipping, frustum_msh[0]+".f[2]", moveZ=True)
  451.             mc.move(-nearClipping, frustum_msh[0]+".f[0]", moveZ=True)
  452.             mc.scale(farScaleValue[0],farScaleValue[1], 1 , frustum_msh[0]+'.f[2]')
  453.             mc.scale(nearScaleValue[0], nearScaleValue[1], 1, frustum_msh[0]+'.f[0]')
  454.             mc.parent(frustum_msh, frustumgrp, absolute=False)
  455.  
  456.             matrixCm = mc.xform(self.cameraSet, worldSpace=True, matrix=True, query=True)
  457.             mc.xform(frustumgrp, worldSpace=True, matrix=matrixCm)
  458.             mc.makeIdentity(frustumgrp, apply=True, t=1, r=1, s=1, n=0)
  459.             mc.hide(frustum_msh)
  460.  
  461.         # toggle visibility du frustum
  462.  
  463.         if mc.getAttr(self.cameraSet[0] + '.displayCameraFrustum') == False:
  464.             mc.setAttr(self.cameraSet[0] + '.displayCameraFrustum', True)
  465.  
  466.         elif mc.getAttr(self.cameraSet[0] + '.displayCameraFrustum') == True:
  467.             mc.setAttr(self.cameraSet[0] + '.displayCameraFrustum', False)
  468.  
  469.     def nearClipSpinBox(self, value):
  470.  
  471.         # change la value du nearclip de la camera
  472.  
  473.         tiersgrp = self.cameraLineEdit.text() + '_tiers_grp'
  474.         self.cmOptNearClipSlider.setValue(value*10.0)
  475.  
  476.         if self.cmrigNear:
  477.             mc.setAttr(self.cmrigNear[0], value)
  478.  
  479.         else:
  480.             mc.setAttr(self.cameraSet[0] + '.nearClipPlane', value)
  481.  
  482.         # change le scale du tiers grp en fonction du nearclip
  483.  
  484.         if mc.objExists(tiersgrp):
  485.             aperture = mc.getAttr(self.cameraSet[0]+ '.horizontalFilmAperture')*25.4, mc.getAttr(self.cameraSet[0]+ '.verticalFilmAperture')*25.4
  486.             focalLength = mc.getAttr(self.cameraSet[0]+".focalLength")
  487.             nearScaleValue = value*aperture[0]/focalLength, value*aperture[1]/focalLength
  488.  
  489.             mc.setAttr(tiersgrp + '.sx', nearScaleValue[0])
  490.             mc.setAttr(tiersgrp + '.sy', nearScaleValue[1])
  491.             mc.setAttr(tiersgrp + '.tz', - value)
  492.  
  493.     def sliderNearclip(self, value):
  494.         self.cmOptNearClipSpinBox.setValue(value/10.0)
  495.  
  496.     def sliderTiersCurves(self, value):
  497.  
  498.         # slider pour modifier le positionnement des curves tiers
  499.  
  500.         tiersgrp = self.cameraLineEdit.text() + '_tiers_grp'
  501.         if not mc.objExists(tiersgrp):
  502.             print 'Put Nearclip button before'
  503.  
  504.         else:
  505.             self.tiersCurveSlider.setValue(value)
  506.             curves = mc.listRelatives(tiersgrp, path=True)
  507.             mc.setAttr(curves[0] + '.ty', value/10.0*0.25)
  508.             mc.setAttr(curves[1] + '.ty', - (value/10.0*0.25))
  509.             mc.setAttr(curves[2] + '.tx', - (value/10.0*0.25))
  510.             mc.setAttr(curves[3] + '.tx', value/10.0*0.25)
  511.  
  512.     def deleteGrp(self):
  513.         maingrp = 'AM_LayoutTools_grp'
  514.         if mc.objExists(maingrp):
  515.             mc.delete(maingrp)
  516.  
  517.         else:
  518.             mc.warning('no AM_grp creat yet')
  519.  
  520.     #####################################################
  521.  
  522.     # advence: Btn copy
  523.  
  524.     def copy(self):
  525.         sel = mc.ls(selection=True)
  526.         mc.select(d=True)
  527.  
  528.         # check qu'un seul transform est selectionner
  529.  
  530.         if len(sel) is not 1 and mc.nodeType(sel) != 'transform':
  531.             mc.error('Select one transform')
  532.  
  533.         # 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
  534.  
  535.         else:
  536.             homedir = os.environ['HOME']
  537.             data_doc = homedir + "/data_cpt.txt"    
  538.  
  539.             worldSpaceTransform = str(mc.xform(sel, worldSpace=True, matrix=True, query=True))
  540.  
  541.             with open(data_doc, "w") as dataFile:
  542.                 dataFile.write(str(worldSpaceTransform))
  543.  
  544.     # advence: Btn past
  545.  
  546.     def past(self):
  547.         sel = mc.ls(selection=True)
  548.  
  549.         # check qu'un seul transform est selectionner
  550.  
  551.         if len(sel) is not 1 and mc.nodeType(sel) != 'transform':
  552.             mc.error('Select one transform')
  553.  
  554.         # past les valeurs du fichier ne enlevant les [ ] et espaces
  555.  
  556.         else:
  557.             homedir = os.environ['HOME']
  558.             data_doc = homedir + "/data_cpt.txt"
  559.  
  560.             with open(data_doc, "r") as dataFile:
  561.                 worldSpaceTransform = dataFile.read()
  562.  
  563.         worldSpaceTransform = worldSpaceTransform.replace('[', '').replace(']', '')
  564.         worldSpaceTransform = worldSpaceTransform.split(', ')
  565.        
  566.         wst_float = []
  567.         wst_float = [float(i) for i in worldSpaceTransform]
  568.  
  569.         mc.xform(sel, worldSpace=True, matrix=wst_float)
  570.  
  571.     # advence: Btn mpc
  572.  
  573.     def mpc(self):
  574.         sel = mc.ls(selection=True)
  575.         mc.select(d=True)
  576.  
  577.         # separe les selections enfants en premier, parent en dernier
  578.  
  579.         c_children = sel[:-1]
  580.         c_parent = sel[-1]
  581.  
  582.         # boucle pour constraint, check qu'il y est mininum 3 transforms, selectionne le parent a la fin
  583.  
  584.         for t in sel:
  585.             if mc.nodeType(t) != 'transform' and len(sel) < 3:
  586.                 mc.error('Select 3 or more transforms')
  587.  
  588.             else:
  589.                 for p in c_children:
  590.                     mc.parentConstraint(c_parent, p, maintainOffset=True)
  591.                 mc.select(c_parent, r=True)
  592.  
  593.     def sel(self):
  594.         sel = []
  595.  
  596.         # cree les data de curve, mesh et cam
  597.  
  598.         crv = mc.ls(type='nurbsCurve')
  599.         msh = mc.ls(type='mesh')
  600.         cam = mc.ls(type='camera')
  601.         self.toolSelTypeComboBox.setItemData(0, crv)
  602.         self.toolSelTypeComboBox.setItemData(1, msh)
  603.         self.toolSelTypeComboBox.setItemData(2, cam)
  604.  
  605.         # utilise ces data pour selection
  606.  
  607.         for n in self.toolSelTypeComboBox.currentData():
  608.             if not re.match('.*'+self.toolSelLineEdit.text()+'*.', n):
  609.                 continue
  610.  
  611.             parent_node = mc.listRelatives(n, parent=True)[0]
  612.             sel.append(parent_node)
  613.  
  614.         if self.toolSelSelectionComboBox.currentIndex() == 0:
  615.             mc.select(sel, r=True)
  616.  
  617.         elif self.toolSelSelectionComboBox.currentIndex() == 1:
  618.             mc.select(sel, add=True)
  619.  
  620.     def clCrv(self):
  621.         maingrp = 'AM_LayoutTools_grp'
  622.         curves = []
  623.  
  624.         # set les codes couleur maya pour les curves
  625.  
  626.         red = 13
  627.         green = 14
  628.         blue = 15
  629.         white = 16
  630.         yellow = 17
  631.         violet = 31
  632.         reset = 5
  633.  
  634.         self.clCrvComboBox.setItemData(0, red)
  635.         self.clCrvComboBox.setItemData(1, green)
  636.         self.clCrvComboBox.setItemData(2, blue)
  637.         self.clCrvComboBox.setItemData(3, white)
  638.         self.clCrvComboBox.setItemData(4, yellow)
  639.         self.clCrvComboBox.setItemData(5, violet)
  640.         self.clCrvComboBox.setItemData(6, reset)
  641.  
  642.         # si les curves existent, changer les couleur en fonction du combobox
  643.  
  644.         if mc.objExists(maingrp):
  645.             curves_shapes = mc.listRelatives(maingrp, allDescendents=True, type='nurbsCurve')
  646.             for t in curves_shapes:
  647.                 parents = mc.listRelatives(t, parent=True)[0]
  648.                 curves.append(parents)
  649.  
  650.             for c in curves:
  651.                 mc.setAttr(c + '.overrideEnabled', 1)
  652.                 mc.setAttr(c + '.overrideColor', self.clCrvComboBox.currentData())
  653.  
  654.         else:
  655.             mc.warning('No AM_grp yet')
  656.  
  657. try:
  658.     lt.close()
  659.  
  660. except:
  661.     pass
  662.  
  663. lt = LayoutTools()
  664. lt.show()
Add Comment
Please, Sign In to add comment