Exemplo n.º 1
0
def go():
    project = Project()
    parent = maya_main_window()
    filePath = cmds.file(q=True, sceneName=True)
    element = project.get_checkout_element(os.path.dirname(filePath))
    global maya_rollback_dialog
    maya_rollback_dialog = RollbackWindow(element, parent)
    maya_rollback_dialog.finished.connect(rollback)
Exemplo n.º 2
0
class RollbackWindow(QtGui.QWidget):
    
    finished = QtCore.pyqtSignal()
    
    def __init__(self, src, parent):
        super(RollbackWindow, self).__init__()
        self.src = src
        self.parent = parent
        self.environment = Environment()
        self.project = Project()
        self.publishes = []
        self.result = None
        self.initUI()
        self.list_publishes()
        
    def initUI(self):
        #define gui elements
        self.setGeometry(300,300,WINDOW_WIDTH,WINDOW_HEIGHT)
        self.setWindowTitle('Rollback Manager')
        
        self.publish_list = QtGui.QListWidget()
        self.publish_list.currentItemChanged.connect(self.update_detail_view)
        self.infoLabel = QtGui.QLabel()
        
        self.rollbackButton = QtGui.QPushButton('Rollback')
        self.rollbackButton.clicked.connect(self.rollback)
        self.cancelButton = QtGui.QPushButton('Cancel')
        self.cancelButton.clicked.connect(self.close)
        
        #set gui layout
        self.grid = QtGui.QGridLayout(self)
        self.setLayout(self.grid)
        self.grid.addWidget(self.publish_list, 0, 0, 3, 1)
        self.grid.addWidget(self.infoLabel, 0, 1)
        self.grid.addWidget(self.rollbackButton, 3, 0)
        self.grid.addWidget(self.cancelButton, 3, 1)
        
        self.show()
        
    def list_publishes(self):
        element = self.project.get_checkout_element(os.path.dirname(self.src))
        publishes = element.list_publishes();
        for p in publishes:
            publish = Publish(p[0], p[1], p[2])
            self.publishes = self.publishes + [publish]
            item = QtGui.QListWidgetItem(publish.timestamp)
            self.publish_list.addItem(item)
            
    def update_detail_view(self):
        selectedVersion = self.publishes[self.publish_list.currentRow()]
        self.infoLabel.setText("Author: {0} \nTimestamp: {1} \n\nComment: {2}".format(selectedVersion.author, selectedVersion.timestamp, selectedVersion.comment))
        
    def rollback(self):
        selectedVersion = self.publishes[self.publish_list.currentRow()]
        element = self.project.get_checkout_element(os.path.dirname(self.src))
        versionDir = element.get_version_dir(self.publish_list.currentRow())
        versionFile = listdir(versionDir)[0]
        filepath = versionDir + '/' + versionFile
        user = self.environment.get_current_username()
        comment = "Rollback to version dated \n{0}".format(selectedVersion.timestamp)
        element.publish(user, filepath, comment)
        #checkout element again to user to remove errors upon multiple uses of rollback
        self.result = element.checkout(user)
        self.close()
        
    def closeEvent(self, event):
        self.finished.emit()
        event.accept()
Exemplo n.º 3
0
class PublishWindow(QtGui.QWidget):

    finished = QtCore.pyqtSignal()

    def __init__(self, src, parent, dept_list=Department.ALL):
        super(PublishWindow, self).__init__()
        self.environment = Environment()
        self.project = Project()
        self.eList = ElementList(self)
        self.parent = parent
        self.src = src
        self.result = None
        self.elementType = None
        self.initUI(dept_list)
        self.published = False
        
    def initUI(self, dept_list):
        #load checkout information
        src_dir = os.path.dirname(self.src)
        checkout_element = self.project.get_checkout_element(src_dir)
        checkout_dept = None
        checkout_body_name = None
        if checkout_element is not None:
            checkout_dept = checkout_element.get_department()
            checkout_body_name = checkout_element.get_parent()

        #define gui elements
        self.setGeometry(300,300,WINDOW_WIDTH,WINDOW_HEIGHT)
        self.setWindowTitle('Publish')
        self.menu = QtGui.QComboBox()
        self.menu.addItem('Asset')
        self.menu.addItem('Shot')
        self.departmentMenu = QtGui.QComboBox()
        checkout_idx = -1
        for i, dept in enumerate(dept_list):
            self.departmentMenu.addItem(dept)
            if dept==checkout_dept:
                checkout_idx = i
        
        self.departmentMenu.activated[str].connect(self.setElementType)
        self.filePath = QtGui.QLineEdit()
        self.filePath.setReadOnly(True)
        self.label = QtGui.QLabel('What did you change?')
        self.comment = QtGui.QTextEdit()
        self.publishBtn = QtGui.QPushButton('Publish')
        self.publishBtn.setEnabled(False)
        
        self.eList.currentItemChanged.connect(self.selectElement)
        self.publishBtn.clicked.connect(self.publish)

        if checkout_idx>-1:
            self.departmentMenu.setCurrentIndex(checkout_idx)
        self.setElementType()
        self.eList.setElement(checkout_body_name)
        
        #set gui layout
        self.grid = QtGui.QGridLayout(self)
        self.setLayout(self.grid)
        self.grid.addWidget(self.departmentMenu, 0, 0)
        self.grid.addWidget(self.label, 1, 1)
        self.grid.addWidget(self.eList, 2, 0)
        self.grid.addWidget(self.comment, 2, 1)
        self.grid.addWidget(self.filePath, 3, 0)
        self.grid.addWidget(self.publishBtn, 3, 1)
        
        self.show()
        
    def setElementType(self):
        department = str(self.departmentMenu.currentText())
        if department in Department.FRONTEND:
            self.elementType = 'Asset'
        else:
            self.elementType = 'Shot'
        self.eList.refreshList(self.elementType)
        
    def selectElement(self):
        currentItem = self.eList.currentItem()
        if currentItem is not None:
           self.filePath.setText(self.eList.currentItem().text())
           self.publishBtn.setEnabled(True)

    def publish(self):
        self.elementType = str(self.menu.currentText())
        # element = None
        # element = self.project.get_checkout_element(os.path.dirname(self.src))
        try:
            #Leave here to use for advanced options
            body = self.project.get_body(str(self.filePath.text()))
            element = body.get_element(str(self.departmentMenu.currentText()))
            # if self.elementType == 'Asset':
            #    asset = self.project.get_asset(str(self.filePath.text()))
            #    element = asset.get_element(str(self.departmentMenu.currentText()))
            # else:
            #    shot = self.project.get_shot(str(self.filePath.text()))
            #    element = shot.get_element(str(self.departmentMenu.currentText()))
        
            self.user = self.environment.get_current_username()
            self.comment = str(self.comment.toPlainText())
            self.result = element
            self.published = True
            self.close()
        except Exception, e:
            print e
            error = QtGui.QLineEdit()
            error.setText(str(e))
            self.grid.addWidget(error, 4, 1, 2, 1)
            traceback.print_stack()
Exemplo n.º 4
0
mc.orientConstraint(
    offset=[0, 0, 0], weight=1
)  #orients the globPos to match viking's rig_main (I think it just does the rotation)

# Get transformation variables from globPos locator
tx = mc.getAttr(globPos + ".translateX")
ty = mc.getAttr(globPos + ".translateY")
tz = mc.getAttr(globPos + ".translateZ")
rx = mc.getAttr(globPos + ".rotateX")
ry = mc.getAttr(globPos + ".rotateY")
rz = mc.getAttr(globPos + ".rotateZ")

# get alembic filepath for scene's animation (requires prior export)
src = mc.file(q=True, sceneName=True)
src_dir = os.path.dirname(src)
checkout_element = project.get_checkout_element(src_dir)
checkout_body_name = checkout_element.get_parent()
body = project.get_body(checkout_body_name)
element = body.get_element(Department.CFX)
cache_file = os.path.join(element.get_dir(), "cache", cache_name + ".abc")
print("Expecting mesh alembic with name: " + cache_name)

# checkout cfx scene for corresponding shot number
current_user = environment.get_current_username()
element = body.get_element(Department.CFX)
cfx_filepath = element.checkout(current_user)
print(">GenScene(): cfx_filepath= " +
      cfx_filepath)  # see where it's expecting the file to be/what it's called
print(">GenScene(): cache_file= " + cache_file
      )  # this is where ABCimporter expects the character geo abc to be
Exemplo n.º 5
0
class PublishWindow(QtWidgets.QWidget):

    finished = QtCore.Signal()

    def __init__(self, src, parent, dept_list=Department.ALL):
        super(PublishWindow, self).__init__()
        self.environment = Environment()
        self.project = Project()
        self.eList = ElementList(self)
        self.parent = parent
        self.src = src
        self.result = None
        self.elementType = None
        self.initUI(dept_list)
        self.published = False

    def initUI(self, dept_list):
        #load checkout information
        src_dir = os.path.dirname(self.src)
        checkout_element = self.project.get_checkout_element(src_dir)
        checkout_dept = None
        checkout_body_name = None
        if checkout_element is not None:
            checkout_dept = checkout_element.get_department()
            checkout_body_name = checkout_element.get_parent()

        #define gui elements
        self.setGeometry(300, 300, WINDOW_WIDTH, WINDOW_HEIGHT)
        self.setWindowTitle('Publish')
        self.menu = QtWidgets.QComboBox()
        self.menu.addItem('Asset')
        self.menu.addItem('Shot')
        self.departmentMenu = QtWidgets.QComboBox()
        checkout_idx = -1
        for i, dept in enumerate(dept_list):
            self.departmentMenu.addItem(dept)
            if dept == checkout_dept:
                checkout_idx = i

        self.departmentMenu.activated[str].connect(self.setElementType)
        self.filePath = QtWidgets.QLineEdit()
        self.filePath.setReadOnly(True)
        self.label = QtWidgets.QLabel('What did you change?')
        self.comment = QtWidgets.QTextEdit()
        self.lastPublish = QtWidgets.QTextEdit()
        self.lastPublish.setReadOnly(True)
        self.publishBtn = QtWidgets.QPushButton('Publish')
        self.publishBtn.setEnabled(False)

        self.eList.currentItemChanged.connect(self.selectElement)
        self.publishBtn.clicked.connect(self.publish)

        if checkout_idx > -1:
            self.departmentMenu.setCurrentIndex(checkout_idx)
        self.setElementType()
        self.eList.setElement(checkout_body_name)

        self.clearHistoryCheckbox = QtWidgets.QCheckBox(
            'Freeze all transformations and clear all construction history')

        #set gui layout
        self.grid = QtWidgets.QGridLayout(self)
        self.setLayout(self.grid)
        self.grid.addWidget(self.departmentMenu, 0, 0)
        self.grid.addWidget(self.clearHistoryCheckbox, 0, 1)

        self.grid.addWidget(self.lastPublish, 1, 1)
        self.grid.addWidget(self.label, 2, 1)
        self.grid.addWidget(self.comment, 3, 1)

        self.grid.addWidget(self.eList, 1, 0, 3, 1)
        self.grid.addWidget(self.filePath, 4, 0)
        self.grid.addWidget(self.publishBtn, 4, 1)

        self.show()

    def setElementType(self):
        self.department = str(self.departmentMenu.currentText())
        if self.department in Department.ASSET_DEPTS:
            self.elementType = 'Asset'
        elif self.department in Department.SHOT_DEPTS:
            self.elementType = 'Shot'
        elif self.department in Department.TOOL_DEPTS:
            self.elementType = 'Tool'
        elif self.department in Department.CROWD_DEPTS:
            self.elementType = 'CrowdCycle'
        else:
            message_gui.error('There was an error loading the ' +
                              str(self.department) + ' department')
        self.eList.refreshList(self.elementType)

    def selectElement(self):
        currentItem = self.eList.currentItem()
        print(currentItem)
        if currentItem is not None:
            self.filePath.setText(self.eList.currentItem().text(1))
            print("Current Item 0: " + self.eList.currentItem().text(0))
            print("Current Item 1: " + self.eList.currentItem().text(1))
            self.publishBtn.setEnabled(True)

            current_dept = str(self.departmentMenu.currentText())
            print("Current Department " + current_dept)

            asset_obj = self.project.get_body(str(currentItem.text(1)))
            element_obj = asset_obj.get_element(current_dept)
            last_publish = element_obj.get_last_publish()
            last_publish_comment = None
            if last_publish is not None:
                last_publish_comment = 'Last published {0} by {1} \n "{2}"'.format(
                    last_publish[1], last_publish[0], last_publish[2])
            else:
                last_publish_comment = 'No publishes for this element'
            self.lastPublish.setText(last_publish_comment)

    def publish(self):

        if str(self.comment.toPlainText()) == '':
            message_gui.error(
                'Please add a publish comment.\nComments help to track the progress.'
            )
            return

        self.elementType = str(self.menu.currentText())
        try:
            body = self.project.get_body(str(self.filePath.text()))
            element = body.get_element(str(self.departmentMenu.currentText()))

            self.user = self.environment.get_current_username()
            self.comment = str(self.comment.toPlainText())
            self.elementName = str(self.departmentMenu.currentText())
            self.result = element
            self.published = True
            self.close()
        except Exception, e:
            print e
            error = QtWidgets.QLineEdit()
            error.setText(str(e))
            self.grid.addWidget(error, 4, 1, 2, 1)
            traceback.print_stack()
Exemplo n.º 6
0
def simpleBlast(startFrame, endFrame):
	
	src_dir = os.path.dirname(mc.file(q=True, sceneName=True))
	project = Project()
	playblast_element = project.get_checkout_element(src_dir)
	playblast_dept = None
	playblast_body_name = None
	playblast_dir = src_dir
	playblast_filename = "playblast.mov"
	if playblast_element is not None:
		playblast_dir = playblast_element.get_render_dir()
		playblast_filename = playblast_element.get_name()+".mov"
		playblast_dept = playblast_element.get_department()
		playblast_body_name = playblast_element.get_parent()
	name = os.path.join(playblast_dir, playblast_filename)
	
	currentPanel = mc.getPanel(wf=True)
	currentCamera = mc.modelEditor(currentPanel, q=True, camera=True)

	panelSwitch = []
	panelSwitch.append(mc.modelEditor(currentPanel, q=True, nc=True))
	panelSwitch.append(mc.modelEditor(currentPanel, q=True, ns=True))
	panelSwitch.append(mc.modelEditor(currentPanel, q=True, pm=True))
	panelSwitch.append(mc.modelEditor(currentPanel, q=True, sds=True))
	panelSwitch.append(mc.modelEditor(currentPanel, q=True, pl=True))
	panelSwitch.append(mc.modelEditor(currentPanel, q=True, lt=True))
	panelSwitch.append(mc.modelEditor(currentPanel, q=True, ca=True))
	panelSwitch.append(mc.modelEditor(currentPanel, q=True, j=True))
	panelSwitch.append(mc.modelEditor(currentPanel, q=True, ikh=True))
	panelSwitch.append(mc.modelEditor(currentPanel, q=True, df=True))
	panelSwitch.append(mc.modelEditor(currentPanel, q=True, dy=True))
	panelSwitch.append(mc.modelEditor(currentPanel, q=True, fl=True))
	panelSwitch.append(mc.modelEditor(currentPanel, q=True, hs=True))
	panelSwitch.append(mc.modelEditor(currentPanel, q=True, fo=True))
	panelSwitch.append(mc.modelEditor(currentPanel, q=True, lc=True))
	panelSwitch.append(mc.modelEditor(currentPanel, q=True, dim=True))
	panelSwitch.append(mc.modelEditor(currentPanel, q=True, ha=True))
	panelSwitch.append(mc.modelEditor(currentPanel, q=True, pv=True))
	panelSwitch.append(mc.modelEditor(currentPanel, q=True, tx=True))
	panelSwitch.append(mc.modelEditor(currentPanel, q=True, str=True))
	panelSwitch.append(mc.modelEditor(currentPanel, q=True, gr=True))
	panelSwitch.append(mc.modelEditor(currentPanel, q=True, cv=True))
	panelSwitch.append(mc.modelEditor(currentPanel, q=True, hu=True))

	mel.eval("lookThroughModelPanel "+currentCamera+" "+currentPanel)
	mc.modelEditor(currentPanel, e=True, allObjects=0)
	mc.modelEditor(currentPanel, e=True, polymeshes=1)
	mc.modelEditor(currentPanel, e=True, nurbsSurfaces=0)
	mc.modelEditor(currentPanel, e=True, strokes=1)
	mc.modelEditor(currentPanel, e=True, cameras=0)

	playback_slider = mel.eval('$tmpVar=$gPlayBackSlider')
	soundfile = mc.timeControl(playback_slider, q=True, sound=True)
	print soundfile

	mc.playblast(st=startFrame, et=endFrame, sound=soundfile, fmt="qt", compression="jpeg", qlt=100, forceOverwrite=True, filename=name,
	width=1920, height=817, offScreen=True, percent=100, v=False)

	mel.eval("lookThroughModelPanel "+currentCamera+" "+currentPanel)
	mc.modelEditor(currentPanel, e=True, nc=panelSwitch[0])
	mc.modelEditor(currentPanel, e=True, ns=panelSwitch[1])
	mc.modelEditor(currentPanel, e=True, pm=panelSwitch[2])
	mc.modelEditor(currentPanel, e=True, sds=panelSwitch[3])
	mc.modelEditor(currentPanel, e=True, pl=panelSwitch[4])
	mc.modelEditor(currentPanel, e=True, lt=panelSwitch[5])
	mc.modelEditor(currentPanel, e=True, ca=panelSwitch[6])
	mc.modelEditor(currentPanel, e=True, j=panelSwitch[7])
	mc.modelEditor(currentPanel, e=True, ikh=panelSwitch[8])
	mc.modelEditor(currentPanel, e=True, df=panelSwitch[9])
	mc.modelEditor(currentPanel, e=True, dy=panelSwitch[10])
	mc.modelEditor(currentPanel, e=True, fl=panelSwitch[11])
	mc.modelEditor(currentPanel, e=True, hs=panelSwitch[12])
	mc.modelEditor(currentPanel, e=True, fo=panelSwitch[13])
	mc.modelEditor(currentPanel, e=True, lc=panelSwitch[14])
	mc.modelEditor(currentPanel, e=True, dim=panelSwitch[15])
	mc.modelEditor(currentPanel, e=True, ha=panelSwitch[16])
	mc.modelEditor(currentPanel, e=True, pv=panelSwitch[17])
	mc.modelEditor(currentPanel, e=True, tx=panelSwitch[18])
	mc.modelEditor(currentPanel, e=True, str=panelSwitch[19])
	mc.modelEditor(currentPanel, e=True, gr=panelSwitch[20])
	mc.modelEditor(currentPanel, e=True, cv=panelSwitch[21])
	mc.modelEditor(currentPanel, e=True, hu=panelSwitch[22])
def go():
    project = Project()
    environment = Environment()

    # Create a global position locator which will grab Jampa's position despite his scaled translations
    mc.currentTime(0)
    globalPos = mc.spaceLocator(p=[0,0,0])
    globPos = mc.rename(globalPos, "jampaGlobalPos")
    mc.select("jampa_rig_main_global_cc_01")
    mc.select(globPos, add=True)
    mc.pointConstraint(offset=[0,0,0], weight=1)
    mc.orientConstraint(offset=[0,0,0], weight=1)

    # Get transformation variables from globPos locator
    tx = mc.getAttr(globPos+".translateX")
    ty = mc.getAttr(globPos+".translateY")
    tz = mc.getAttr(globPos+".translateZ")
    rx = mc.getAttr(globPos+".rotateX")
    ry = mc.getAttr(globPos+".rotateY")
    rz = mc.getAttr(globPos+".rotateZ")

    # get alembic filepath for scene's animation (requires prior export)
    src = mc.file(q=True, sceneName=True)
    src_dir = os.path.dirname(src)
    checkout_element = project.get_checkout_element(src_dir)
    checkout_body_name = checkout_element.get_parent()
    body = project.get_body(checkout_body_name)
    element = body.get_element(Department.ANIM)
    cache_file = os.path.join(element.get_dir(), "cache", "jampa_rig_main.abc")

    # checkout cfx scene for corresponding shot number
    current_user = environment.get_current_username()
    element = body.get_element(Department.CFX)
    cfx_filepath = element.checkout(current_user)

    #open cfx file 
    if cfx_filepath is not None:
        if not mc.file(q=True, sceneName=True) == '':
            mc.file(save=True, force=True) #save file

        if not os.path.exists(cfx_filepath):
            mc.file(new=True, force=True)
            mc.file(rename=cfx_filepath)
            mc.file(save=True, force=True)
        else:
            mc.file(cfx_filepath, open=True, force=True)

    # import alembic
    command = "AbcImport -mode import \"" + cache_file + "\""
    maya.mel.eval(command)

    # delete all geo except jampa skin and rename
    geometry = mc.ls(geometry=True)
    transforms = mc.listRelatives(geometry, p=True, path=True)
    mc.select(transforms, r=True)
    for geo in mc.ls(sl=True):
        if(geo != "jampa_rig_main_jampa_geo_body"):
            mc.delete(geo)
    collide = "JAMPA_COLLIDE"
    mc.rename("jampa_rig_main_jampa_geo_body", collide)

    # reference robe
    body = project.get_body("jampa_robe")
    element = body.get_element(Department.MODEL)
    robe_file = element.get_app_filepath()
    mc.file(robe_file, reference=True)

    # set robe transforms to variables above
    mc.setAttr("jampa_robe_model_main_jampa_robe_sim.translateX", tx)
    mc.setAttr("jampa_robe_model_main_jampa_robe_sim.translateY", ty)
    mc.setAttr("jampa_robe_model_main_jampa_robe_sim.translateZ", tz)
    mc.setAttr("jampa_robe_model_main_jampa_robe_sim.rotateX", rx)
    mc.setAttr("jampa_robe_model_main_jampa_robe_sim.rotateY", ry)
    mc.setAttr("jampa_robe_model_main_jampa_robe_sim.rotateZ", rz)

    # make jampa skin a passive collider
    mc.select(collide)
    command = "makeCollideNCloth"
    maya.mel.eval(command)
    rigid_shape = "nRigid_jampa"
    mc.rename("nRigid1", rigid_shape)
    mc.setAttr(rigid_shape+".stickiness", 0.2)
    mc.setAttr(rigid_shape+".friction", 0.5)

    # make cloth objects and display layers of each robe piece
    jampa_torso = "jampa_robe_model_main_robe_torso_01"
    jampa_sash = "jampa_robe_model_main_robe_sash_01"
    jampa_skirt = "jampa_robe_model_main_robe_skirt_01"

    cloth_pieces = {jampa_torso, jampa_sash, jampa_skirt}
    command = "createNCloth 0"
    for cp in cloth_pieces:
        mc.select(cp)
        maya.mel.eval(command)
        mc.rename("nCloth1", "nCloth_"+cp)
        mc.select(cp)
        layername = "cloth_"+cp[:-3].replace("robe_model_main_robe_", "")
        mc.createDisplayLayer(name=layername.upper(), number=1, noRecurse=True)

    # set appropriate values in nucleus node
    nucleus = "nucleus_jampa"
    mc.rename("nucleus1", nucleus)
    mc.setAttr(nucleus+".subSteps", 30)
    mc.setAttr(nucleus+".startFrame", -30)
    mc.setAttr(nucleus+".spaceScale", 0.23)

    mc.currentTime(-50)
def generateScene():
    project = Project()
    environment = Environment()

    # Create a global position locator for Ten's Starting Location
    mc.currentTime(STARTANIM)
    globalPos = mc.spaceLocator(p=[0, 0, 0])
    globPos = mc.rename(globalPos, "tenGlobalPos")
    mc.select("ten_rig_main_m_global_CTL")
    mc.select(globPos, add=True)
    mc.pointConstraint(offset=[0, 0, 0], weight=1)
    mc.orientConstraint(offset=[0, 0, 0], weight=1)

    # Get transformation variables from globPos locator
    tx = mc.getAttr(globPos + ".translateX")
    ty = mc.getAttr(globPos + ".translateY")
    tz = mc.getAttr(globPos + ".translateZ")
    rx = mc.getAttr(globPos + ".rotateX")
    ry = mc.getAttr(globPos + ".rotateY")
    rz = mc.getAttr(globPos + ".rotateZ")

    # get alembic filepath for scene's animation (requires prior export)
    src = mc.file(q=True, sceneName=True)
    src_dir = os.path.dirname(src)
    checkout_element = project.get_checkout_element(src_dir)
    checkout_body_name = checkout_element.get_parent()
    body = project.get_body(checkout_body_name)
    element = body.get_element(Department.ANIM)
    cache_file = os.path.join(element.get_dir(), "cache", "ten_rig_main.abc")

    # checkout cfx scene for corresponding shot number
    current_user = environment.get_current_username()
    element = body.get_element(Department.CFX)
    cfx_filepath = element.checkout(current_user)

    #open cfx file
    if cfx_filepath is not None:
        if not mc.file(q=True, sceneName=True) == '':
            mc.file(save=True, force=True)  #save file

        if not os.path.exists(cfx_filepath):
            mc.file(new=True, force=True)
            mc.file(rename=cfx_filepath)
            mc.file(save=True, force=True)
        else:
            mc.file(cfx_filepath, open=True, force=True)

    # import alembic
    command = "AbcImport -mode import \"" + cache_file + "\""
    maya.mel.eval(command)

    # delete all geo except ten's skin and rename
    geometry = mc.ls(geometry=True)
    transforms = mc.listRelatives(geometry, p=True, path=True)
    mc.select(transforms, r=True)
    for geo in mc.ls(sl=True):
        if (geo != "ten_rig_main_Ten_Skin_RENDER"):
            mc.delete(geo)
    collide = "TEN_ANIM"
    mc.rename("ten_rig_main_Ten_Skin_RENDER", collide)

    # Reference Ten's Sim Robe
    body = project.get_body("ten_robe_sim")
    element = body.get_element(Department.MODEL)
    robe_file = element.get_app_filepath()
    mc.file(robe_file, reference=True)

    # Reference Ten's Hero Robe
    body = project.get_body("ten_robe")
    element = body.get_element(Department.MODEL)
    robe_hero_file = element.get_app_filepath()
    mc.file(robe_hero_file, reference=True)

    # Set Sim Robe transforms to variables above
    mc.setAttr("ten_robe_sim_model_main_ten_cloth.translateX", tx)
    mc.setAttr("ten_robe_sim_model_main_ten_cloth.translateY", ty)
    mc.setAttr("ten_robe_sim_model_main_ten_cloth.translateZ", tz)
    mc.setAttr("ten_robe_sim_model_main_ten_cloth.rotateX", rx)
    mc.setAttr("ten_robe_sim_model_main_ten_cloth.rotateY", ry)
    mc.setAttr("ten_robe_sim_model_main_ten_cloth.rotateZ", rz)

    # Set Hero Robe transforms to variables above
    mc.setAttr("ten_robe_model_main_TEN_ROBE_HERO.translateX", tx)
    mc.setAttr("ten_robe_model_main_TEN_ROBE_HERO.translateY", ty)
    mc.setAttr("ten_robe_model_main_TEN_ROBE_HERO.translateZ", tz)
    mc.setAttr("ten_robe_model_main_TEN_ROBE_HERO.rotateX", rx)
    mc.setAttr("ten_robe_model_main_TEN_ROBE_HERO.rotateY", ry)
    mc.setAttr("ten_robe_model_main_TEN_ROBE_HERO.rotateZ", rz)
def generateScene():
    project = Project()
    environment = Environment()

    # Create a global position locator for Ten's Starting Location
    mc.currentTime(STARTANIM)
    globalPos = mc.spaceLocator(p=[0,0,0])
    globPos = mc.rename(globalPos, "tenGlobalPos")
    mc.select("ten_rig_main_m_global_CTL")
    mc.select(globPos, add=True)
    mc.pointConstraint(offset=[0,0,0], weight=1)
    mc.orientConstraint(offset=[0,0,0], weight=1)

    # Get transformation variables from globPos locator
    tx = mc.getAttr(globPos+".translateX")
    ty = mc.getAttr(globPos+".translateY")
    tz = mc.getAttr(globPos+".translateZ")
    rx = mc.getAttr(globPos+".rotateX")
    ry = mc.getAttr(globPos+".rotateY")
    rz = mc.getAttr(globPos+".rotateZ")

    # get alembic filepath for scene's animation (requires prior export)
    src = mc.file(q=True, sceneName=True)
    src_dir = os.path.dirname(src)
    checkout_element = project.get_checkout_element(src_dir)
    checkout_body_name = checkout_element.get_parent()
    body = project.get_body(checkout_body_name)
    element = body.get_element(Department.ANIM)
    cache_file = os.path.join(element.get_dir(), "cache", "ten_rig_main.abc")

    # checkout cfx scene for corresponding shot number
    current_user = environment.get_current_username()
    element = body.get_element(Department.CFX)
    cfx_filepath = element.checkout(current_user)

    #open cfx file 
    if cfx_filepath is not None:
        if not mc.file(q=True, sceneName=True) == '':
            mc.file(save=True, force=True) #save file

        if not os.path.exists(cfx_filepath):
            mc.file(new=True, force=True)
            mc.file(rename=cfx_filepath)
            mc.file(save=True, force=True)
        else:
            mc.file(cfx_filepath, open=True, force=True)

    # import alembic
    command = "AbcImport -mode import \"" + cache_file + "\""
    maya.mel.eval(command)

    # delete all geo except ten's skin and rename
    geometry = mc.ls(geometry=True)
    transforms = mc.listRelatives(geometry, p=True, path=True)
    mc.select(transforms, r=True)
    for geo in mc.ls(sl=True):
        if(geo != "ten_rig_main_Ten_Skin_RENDER"):
            mc.delete(geo)
    collide = "TEN_ANIM"
    mc.rename("ten_rig_main_Ten_Skin_RENDER", collide)

    # Reference Ten's Sim Robe
    body = project.get_body("ten_robe_sim")
    element = body.get_element(Department.MODEL)
    robe_file = element.get_app_filepath()
    mc.file(robe_file, reference=True)
    
    # Reference Ten's Hero Robe
    body = project.get_body("ten_robe")
    element = body.get_element(Department.MODEL)
    robe_hero_file = element.get_app_filepath()
    mc.file(robe_hero_file, reference=True)
    
    # Set Sim Robe transforms to variables above
    mc.setAttr("ten_robe_sim_model_main_ten_cloth.translateX", tx)
    mc.setAttr("ten_robe_sim_model_main_ten_cloth.translateY", ty)
    mc.setAttr("ten_robe_sim_model_main_ten_cloth.translateZ", tz)
    mc.setAttr("ten_robe_sim_model_main_ten_cloth.rotateX", rx)
    mc.setAttr("ten_robe_sim_model_main_ten_cloth.rotateY", ry)
    mc.setAttr("ten_robe_sim_model_main_ten_cloth.rotateZ", rz)
    
    # Set Hero Robe transforms to variables above
    mc.setAttr("ten_robe_model_main_TEN_ROBE_HERO.translateX", tx)
    mc.setAttr("ten_robe_model_main_TEN_ROBE_HERO.translateY", ty)
    mc.setAttr("ten_robe_model_main_TEN_ROBE_HERO.translateZ", tz)
    mc.setAttr("ten_robe_model_main_TEN_ROBE_HERO.rotateX", rx)
    mc.setAttr("ten_robe_model_main_TEN_ROBE_HERO.rotateY", ry)
    mc.setAttr("ten_robe_model_main_TEN_ROBE_HERO.rotateZ", rz)
Exemplo n.º 10
0
class PublishWindow(QtGui.QWidget):

    finished = QtCore.pyqtSignal()

    def __init__(self, src, parent, dept_list=Department.ALL):
        super(PublishWindow, self).__init__()
        self.environment = Environment()
        self.project = Project()
        self.eList = ElementList(self)
        self.parent = parent
        self.src = src
        self.result = None
        self.elementType = None
        self.initUI(dept_list)
        self.published = False
        
    def initUI(self, dept_list):
        #load checkout information
        src_dir = os.path.dirname(self.src)
        checkout_element = self.project.get_checkout_element(src_dir)
        checkout_dept = None
        checkout_body_name = None
        if checkout_element is not None:
            checkout_dept = checkout_element.get_department()
            checkout_body_name = checkout_element.get_parent()

        #define gui elements
        self.setGeometry(300,300,WINDOW_WIDTH,WINDOW_HEIGHT)
        self.setWindowTitle('Publish')
        self.menu = QtGui.QComboBox()
        self.menu.addItem('Asset')
        self.menu.addItem('Shot')
        self.departmentMenu = QtGui.QComboBox()
        checkout_idx = -1
        for i, dept in enumerate(dept_list):
            self.departmentMenu.addItem(dept)
            if dept==checkout_dept:
                checkout_idx = i
        
        self.departmentMenu.activated[str].connect(self.setElementType)
        self.filePath = QtGui.QLineEdit()
        self.filePath.setReadOnly(True)
        self.label = QtGui.QLabel('What did you change?')
        self.comment = QtGui.QTextEdit()
        self.publishBtn = QtGui.QPushButton('Publish')
        self.publishBtn.setEnabled(False)
        
        self.eList.currentItemChanged.connect(self.selectElement)
        self.publishBtn.clicked.connect(self.publish)

        if checkout_idx>-1:
            self.departmentMenu.setCurrentIndex(checkout_idx)
        self.setElementType()
        self.eList.setElement(checkout_body_name)
        
        #set gui layout
        self.grid = QtGui.QGridLayout(self)
        self.setLayout(self.grid)
        self.grid.addWidget(self.departmentMenu, 0, 0)
        self.grid.addWidget(self.label, 1, 1)
        self.grid.addWidget(self.eList, 2, 0)
        self.grid.addWidget(self.comment, 2, 1)
        self.grid.addWidget(self.filePath, 3, 0)
        self.grid.addWidget(self.publishBtn, 3, 1)
        
        self.show()
        
    def setElementType(self):
        department = str(self.departmentMenu.currentText())
        if department in Department.FRONTEND:
            self.elementType = 'Asset'
        else:
            self.elementType = 'Shot'
        self.eList.refreshList(self.elementType)
        
    def selectElement(self):
        currentItem = self.eList.currentItem()
        if currentItem is not None:
           self.filePath.setText(self.eList.currentItem().text())
           self.publishBtn.setEnabled(True)

    def publish(self):
        self.elementType = str(self.menu.currentText())
        try:
            body = self.project.get_body(str(self.filePath.text()))
            element = body.get_element(str(self.departmentMenu.currentText()))
        
            self.user = self.environment.get_current_username()
            self.comment = str(self.comment.toPlainText())
            self.result = element
            self.published = True
            self.close()
        except Exception, e:
            print e
            error = QtGui.QLineEdit()
            error.setText(str(e))
            self.grid.addWidget(error, 4, 1, 2, 1)
            traceback.print_stack()