Example #1
0
    def _extra_nodes_outside_track_geo(self):
        """
        Check for nodes, apart from groups and camera lying outside of TRACK_GEO node
        :return: True if yes false otherwise
        """
        children = cmds.listRelatives('TRACK_GEO', c=True)
        # Subtracting group nodes, cameras and child nodes of TRACK_GEO from the list of dag nodes.
        # This is to get extra nodes present outside TRACK_GEO
        if children:
            extras = list(set(cmds.ls(tr=True, dag=True)) - set(GROUP_NODES) - set(cmds.listCameras()) - set(children))
        else:
            extras = list(set(cmds.ls(tr=True, dag=True)) - set(GROUP_NODES) - set(cmds.listCameras()))

        if extras:
            self.logger.error("Nodes present outside TRACK_GEO.",
                              extra={
                                  "action_show_more_info": {
                                      "label": "Show Info",
                                      "tooltip": "Show the extra nodes",
                                      "text": "Nodes outside TRACK_GEO:\n{}".format("\n".join(extras))
                                  }
                              }
                              )
            return False
        return True
def getCameraCharacter():
    #Define the list Camera Class
    cmds.listCameras()
    #get the listCamera
    listCamera = cmds.listCameras()
    #debug information print
    #debug information for list of Cameras
    #print 'listCamera : ' + str(listCamera)
    cameraWant = listCamera[0]
    return cameraWant
Example #3
0
    def append_cam_to_list(self):
        self.ortho_list.clear()
        self.persp_list.clear()

        orthocam = cmds.listCameras(orthographic=True)
        for cam in orthocam:
            if cmds.nodeType(cam) == 'camera':
                cam = cmds.listRelatives(cam, parent=True)[0]
            self.ortho_list.addItem(cam)

        perspcam = cmds.listCameras(perspective=True)
        for cam in perspcam:
            if cmds.nodeType(cam) == 'camera':
                cam = cmds.listRelatives(cam, parent=True)[0]
            self.persp_list.addItem(cam)
Example #4
0
def import2dTrackUI():
    """
    """
    # Build UI Window
    window = 'import2dTrackUI'
    if cmds.window(window, q=True, ex=True): cmds.deleteUI(window)
    window = cmds.window(window, title='Import 2D Track', wh=[500, 350])

    # Build UI Elements
    cmds.columnLayout(adjustableColumn=True)
    perspCamListTSL = cmds.textScrollList('importTrack_camListTSL', numberOfRows=8, ams=False)
    fileTFB = cmds.textFieldButtonGrp('importTrack_fileTFB', label='2D Track File', buttonLabel='Browse')
    cmds.textFieldButtonGrp(fileTFB, e=True, bc='glTools.ui.utils.loadFilePath("' + fileTFB + '",fileFilter="*.*")')
    cmds.textFieldGrp('importTrack_nameTFG', label="Point Name", text='trackPoint1')
    cmds.floatFieldGrp('importTrack_widthFFG', numberOfFields=1, label='Source Pixel Width', value1=2348)
    cmds.floatFieldGrp('importTrack_heightFFG', numberOfFields=1, label='Source Pixel Height', value1=1566)
    cmds.button(label='Import Track',
              c='import glTools.tools.import2dTrack;reload(glTools.tools.import2dTrack);glTools.tools.import2dTrack.import2dTrack()')
    cmds.button(label='Close', c='cmds.deleteUI("' + window + '")')

    # Build Camera List
    camList = cmds.listCameras(p=True)
    for cam in camList: cmds.textScrollList(perspCamListTSL, e=True, a=cam)

    # Show Window
    cmds.showWindow(window)
Example #5
0
def OCT_CmeraCurves_zwz():
    if mc.objExists('allCameraCurves'):
        mc.delete('allCameraCurves')
    mc.confirmDialog(title=u'温馨提示:',
                     message=u'线框只与摄像机关联,未与渲染尺寸关联\n请把渲染尺寸比列匹配摄像机底片比列!',
                     button=['OK'],
                     defaultButton='Yes',
                     dismissString='No')
    allCameras = mc.listCameras(p=True)
    allCameraCurves = []
    for Camera in allCameras:
        cameraShape = mc.listRelatives(Camera, pa=True)
        if cameraShape != None and cameraShape[0] != 'perspShape':
            newCurve = mc.curve(n='%s_curve' % Camera,
                                d=1,
                                p=[(0, 0, 0), (0, 0, -1), (0, 0, -2),
                                   (0, 0, -3), (0, 0, -4), (0, 0, -5),
                                   (0, 0, -6), (0, 0, -7), (0, 0, -8),
                                   (0, 0, -9), (0, 0, -10), (0, 0, -11)])
            curveShape = mc.listRelatives(newCurve)
            setExpForCurve_zwz(str(cameraShape[0]), str(curveShape[0]))
            cameraWs = mc.xform(Camera, q=True, ws=True, t=True)
            cameraWr = mc.xform(Camera, q=True, ws=True, ro=True)
            mc.select(newCurve)
            mc.move(cameraWs[0], cameraWs[1], cameraWs[2], newCurve, r=True)
            mc.xform(newCurve,
                     r=True,
                     ro=(cameraWr[0], cameraWr[1], cameraWr[2]))
            mc.parentConstraint(Camera, newCurve, mo=True, w=True)
            allCameraCurves.append(newCurve)
    mc.group(allCameraCurves, n='allCameraCurves')
    mc.xform('allCameraCurves', r=True, s=(10, 10, 10))
Example #6
0
def type_camera(name):
    """ カメラかどうかを調べる
    """
    if name in cmds.listCameras(p=1):
        return True
    else:
        return False
Example #7
0
def get_selection_camera():
    """ カメラのみを取得する
    """
    selection = cmds.ls(sl=1, type="transform")
    if not selection or selection[0] not in cmds.listCameras(p=1):
        return None
    return selection[0]
Example #8
0
 def addCameras(self,*args):
     """
     Add scene cameras to GUI drop-down menu 
     """
     cameras = cmds.listCameras()
     for each in cameras:
         cmds.menuItem(label=each,p=self.camMenu)
Example #9
0
 def clearCamera(self):
     camerasList = cmds.listCameras()
     for eachCamera in camerasList:
         if not eachCamera in [
                 'front', 'side', 'top', 'persp'
         ] and eachCamera.startswith("ldmt_renderCamera"):
             cmds.delete(eachCamera)
Example #10
0
	def setMenuItemCamera(self) : 
		cameras = mc.listCameras()
		exclude = ['front', 'side', 'top']

		for each in cameras : 
			if not each in exclude : 
				mc.menuItem(l = each)
 def _camera_naming(self):
     """Checks the naming of the camera.
         :param:
             group_nodes: The list of nodes that should be in the scene. This will be
             used to check node hierarchy once camera naming is validated.
         :return: True if yes False otherwise
     """
     # Look for all the cameras present in the scene
     all_cameras = cmds.listCameras()
     # Remove the default_cameras from the list
     main_cam = list(set(all_cameras) - set(DEFAULT_CAMERAS))
     if main_cam:
         if len(main_cam) > 1:
             # Checking if more than one CAM present
             self.logger.error(
                 "More the one camera detected. Only CAM should be present."
             )
             return False
         elif main_cam[0] != CAMERA_NAME:
             # Validating camera name
             self.logger.error("Incorrect camera name! Should be CAM.")
             return False
     else:
         self.logger.error("Camera (CAM) not present in the scene.")
         return False
     return True
Example #12
0
 def addCameras(self, *args):
     """
     Add scene cameras to GUI drop-down menu 
     """
     cameras = cmds.listCameras()
     for each in cameras:
         cmds.menuItem(label=each, p=self.camMenu)
Example #13
0
def camMovementDetector():
	shotCam = [cam for cam in cmds.listCameras(perspective = True) if cam != 'persp' if cmds.objExists('%s.type' % cam) if cmds.getAttr('%s.type' % cam) == 'shotCam']
	shotCam = shotCam[0] if shotCam else None
	
	animated_curves = []
	anim_curves = cmds.findKeyframe(shotCam, curve = True)
	
	if anim_curves:
		keyframes_min_max = []
		
		for crv in anim_curves:
			keys = cmds.keyframe(crv, valueChange = True, q = True)
			frames = cmds.keyframe(crv, timeChange = True, q = True)
			keyframes = dict( zip(keys, frames) )
	
			if keyframes:
				if len(keyframes) > 1:
					start_anim = max( keyframes.values() )
					stop_anim = min( keyframes.values() )
					
					keyframes_min_max.append(start_anim) if start_anim not in keyframes_min_max else None
					keyframes_min_max.append(stop_anim) if stop_anim not in keyframes_min_max else None
					
		if keyframes_min_max:
			return min(keyframes_min_max), max(keyframes_min_max)
Example #14
0
 def findCamera(self, name):
     numName = len(name)
     allMyCamera = mc.listCameras(p=True)
     for myCamera in allMyCamera:
         if myCamera[-numName:] == name:
             return myCamera
     return None
Example #15
0
def OCT_XXBDeleteUnUseCameras_zwz():
    AllCameras = mc.listCameras(p=True)
    mydeCameras = []
    if AllCameras:
        for Camera in AllCameras:
            try:
                unusecamera = mc.listRelatives(
                    Camera, p=True, f=True)[0].split('|')[1].find('CAM')
            except:
                if not (Camera.find('Test_') >= 0 or Camera.find('camL') >= 0
                        or Camera.find('camR') >= 0 or Camera.find('camL') >= 0
                        or Camera.find('persp') >= 0 or
                        Camera.find('MasterCam') >= 0 or Camera.find('dl') >= 0
                        or Camera.find('ml') >= 0 or Camera.find('ul') >= 0):
                    mydeCameras.append(Camera)
            else:
                if unusecamera < 0:
                    if not (Camera.find('Test_') >= 0
                            or Camera.find('camL') >= 0
                            or Camera.find('camR') >= 0
                            or Camera.find('camL') >= 0
                            or Camera.find('persp') >= 0
                            or Camera.find('MasterCam') >= 0
                            or Camera.find('dl') >= 0 or Camera.find('ml') >= 0
                            or Camera.find('ul') >= 0):
                        mydeCameras.append(Camera)
    if mydeCameras:
        mc.delete(mydeCameras)
Example #16
0
    def exportFile(self, frameNumber = 1, tempExportPath = False):
        """
        Export a single frame, and return the name of the created scene file
        """
        reload(Exporter)

        renderCameraName = ''

        for cam in cmds.listCameras():
            renderable = cmds.getAttr( '%s.renderable' % cam )
            if renderable == 1:
                renderCameraName = cam
                break

        if renderCameraName == '':
            OpenMaya.MGlobal.displayError('No renderable camera in scene')

        saveFolder = cmds.getAttr( 'pbrt_settings.scene_path' )
        if not os.path.exists(saveFolder):
            os.mkdir( saveFolder )

        sceneFileBaseName = cmds.getAttr( 'pbrt_settings.scene_filename' ) + ('.%04i' % frameNumber)

        renderFolder = saveFolder + os.altsep + "renders" + os.altsep
        if not os.path.exists(renderFolder):
            os.mkdir(renderFolder)

        imageSaveName = renderFolder + sceneFileBaseName +'.'+ cmds.getAttr( 'pbrt_settings.image_format', asString = True )
        self.imageSaveName = imageSaveName

        if tempExportPath:
            saveFolder += ('tmp') + os.altsep
            if not os.path.exists(saveFolder):
                os.mkdir( saveFolder )
            else:
                for file_val in os.listdir(saveFolder):
                    os.remove(saveFolder+file_val)
                os.rmdir( saveFolder )
                os.mkdir( saveFolder )
        else:
            saveFolder += ('%04i' % frameNumber) + os.altsep
            if not os.path.exists(saveFolder):
                os.mkdir( saveFolder )

        sceneFileName = str(saveFolder + sceneFileBaseName + '.pbrt')

        renderWidth = cmds.getAttr( 'defaultResolution.width' )
        renderHeight = cmds.getAttr( 'defaultResolution.height' )
        verbosity = cmds.getAttr( 'pbrt_settings.verbosity' )

        # launch export proc here !
        pe = Exporter.Exporter(sceneFileName, imageSaveName, renderWidth, renderHeight, renderCameraName, verbosity )
        try:
            pe.doIt( )
        except:
            self.mProgress.endProgress()
            raise

        return sceneFileName
Example #17
0
def erm_DeleteCamera(delCamera=0):
	erm_cam = list(set(mc.ls(mc.listCameras(),v = True)) - set(['front','persp','side','top']))
	erm_ReturnText=''
	if delCamera:
		mc.delete(erm_cam)
	else:
		erm_ReturnText = era_SplitFlag().join(erm_cam)
	return erm_ReturnText
Example #18
0
def get_scene_cameras(names_only=True):
    """
    Returns a list of cameras present in the scene.
    :param names_only: bool. Return only names if True, nodes otherwise.
    :return List of names or Pymel nodes.
    """
    li = [o for o in cmds.listCameras(p=True) if o != "persp"]
    return li if names_only else [pmc.PyNode(o) for o in li]
Example #19
0
    def shapshot_results(self, value):
        self.chosen_asset = value[0]
        cam_list = mc.listCameras()

        self.item_gui = co.CheckBoxOptions(parent=maya_main_window(),
                                           title="Select cameras to use:",
                                           options=cam_list)
        self.item_gui.submitted.connect(self.camera_results)
Example #20
0
def reloadCameras(*args):
    cameras = cmds.listCameras(perspective=True)
    opCamera = cmds.optionMenu('opCamera',
                               label='Camera: ',
                               changeCommand=changeCamera,
                               parent='column')
    for each in range(len(cameras)):
        cmds.menuItem(label=cameras[each], parent=opCamera)
 def get_thumbnail(self):
     for camera in mc.listCameras():
         if camera == "persp":
             pass
         else:
             mm.eval("viewFit -all;")
             mc.lookThru(camera)
             mc.playblast( cf= "H:\\Image Test\\" + camera + ".jpg" , fr=1, fmt="image", v=False, wh=[500, 300], orn=False,
                 compression="jpg", quality=100, percent=100 )
Example #22
0
	def bake_CAM_ani():

		sourceCAM=cmds.select('cam_hcam:shot')
		#确定UI上选择的摄像机,取得摄像机名称
		#确定烘焙范围
		cmds.listCameras( p=True ) #场景中所有透视摄像机
		cameraName = cmds.camera() #创建新摄像机
		cameraShape = cameraName[1]#获得新摄像机名称
		bakeCAMnode='baked_CAM'
		cmds.rename(cameraShape,bakeCAMnode) #修改bakecam的名字
		sourceCAMtransfer=cmds.listHistory( sourceCAM, il=1)[1]
		cmds.parentConstraint(sourceCAMtransfer, bakeCAMnode)
		cmds.select(bakeCAMnode)
		cmds.bakeSimulation(selectCam,t=(starten,ende),hi='below')
		cmds.select(bakeCAMnode)
		cmds.file(*args, **kwargs)
		
		pass
    def execute(self, **kwargs):
        """
        Main hook entry point
        :returns:       A list of any items that were found to be published.  
                        Each item in the list should be a dictionary containing 
                        the following keys:
                        {
                            type:   String
                                    This should match a scene_item_type defined in
                                    one of the outputs in the configuration and is 
                                    used to determine the outputs that should be 
                                    published for the item
                                    
                            name:   String
                                    Name to use for the item in the UI
                            
                            description:    String
                                            Description of the item to use in the UI
                                            
                            selected:       Bool
                                            Initial selected state of item in the UI.  
                                            Items are selected by default.
                                            
                            required:       Bool
                                            Required state of item in the UI.  If True then
                                            item will not be deselectable.  Items are not
                                            required by default.
                                            
                            other_params:   Dictionary
                                            Optional dictionary that will be passed to the
                                            pre-publish and publish hooks
                        }
        """   
                
        items = []
        
        # get the main scene:
        scene_name = cmds.file(query=True, sn=True)
        if not scene_name:
            raise TankError("Please Save your file before Publishing")
        
        scene_path = os.path.abspath(scene_name)
        name = os.path.basename(scene_path)

        # create the primary item - this will match the primary output 'scene_item_type':            
        items.append({"type": "work_file", "name": name})
        
        # if there is any geometry in the scene (poly meshes or nurbs patches), then
        # add a geometry item to the list:
        if cmds.ls(geometry=True, noIntermediate=True):
            items.append({"type":"geometry", "name":"All Scene Geometry"})
            
        # look for cameras to publish
        for camera in cmds.listCameras(perspective=True):
            items.append({"type": "camera", "name": camera})

        return items
Example #24
0
    def render(self):
        """ Starts the render """
        try:  # If MtoA was not found
            defaultTranslator = cmds.getAttr("defaultArnoldDisplayDriver.aiTranslator")
        except ValueError:
            cmds.warning("Current renderer is not set to Arnold.")
            return

        cmds.setAttr("defaultArnoldDisplayDriver.aiTranslator", "aton", type="string")

        # Updating the port from UI
        if self.defaultPort != 0:
            port = self.portSpinBox.value()
            cmds.setAttr("defaultArnoldDisplayDriver.port", port)
        else:
            cmds.warning("Current renderer is not set to Arnold or Aton driver is not loaded.")
            return

        # Adding time changed callback
        if self.timeChangedCB == None:
            self.timeChangedCB = OM.MEventMessage.addEventCallback("timeChanged", self.timeChnaged)

        # Adding selection changed callback
        if self.selectionChangedCB == None:
            self.selectionChangedCB = OM.MEventMessage.addEventCallback("SelectionChanged", self.selectionChanged)

        try:  # If render session is not started yet
            cmds.arnoldIpr(mode="stop")
        except RuntimeError:
            pass

        # Temporary makeing hidden cameras visible before scene export
        hCams = [
            x
            for x in cmds.listCameras()
            if not cmds.getAttr("%s.visibility" % x)
            or not cmds.getAttr("%s.visibility" % cmds.listRelatives(x, s=1)[0])
        ]
        for i in hCams:
            cmds.showHidden(i)

        try:  # Start IPR
            camera = self.getCamera()
            cmds.arnoldIpr(cam=camera, mode="start")
        except RuntimeError:
            cmds.warning("Current renderer is not set to Arnold.")

        # Update IPR
        self.IPRUpdate()
        sys.stdout.write("// Info: Aton - Render started.\n")

        # Setting back to default
        for i in hCams:
            cmds.hide(i)
        cmds.setAttr("defaultArnoldDisplayDriver.aiTranslator", defaultTranslator, type="string")
        cmds.setAttr("defaultArnoldDisplayDriver.port", self.defaultPort)
Example #25
0
    def process(self, context):

        if context.data['ftrackData']['Task']['type'] in ['Modelling']:
            return


        all_cameras = cmds.listCameras()

        self.log.info(all_cameras)

        cameras = []
        for cam in all_cameras:
            if cam.lower().endswith('_cam'):
                cameras.append(cam)

        for camera in cameras:  # Include namespace

            # Use short name
            name = cmds.ls(camera, long=False)[0].lower()

            instance = context.create_instance(name=name, family='camera')
            instance.add(camera)
            instance.data["publish"] = True
            instance.data["families"] = ['camera']

            item = name.split('_')[0]
            instance.data['item'] = item
            instance.data["label"] = item + ' camera'

            self.log.debug("item {}, name {}".format(item, name))

            if context.data['ftrackData']['Task']['type'] in ['Lighting']:
                instance.data['publish'] = False

            attrs = cmds.listAttr(camera, userDefined=True) or list()

            self.log.info("Found: %s" % camera)
            self.log.info("Overrides: %s" % attrs)

            for attr in attrs:
                try:
                    value = cmds.getAttr(camera + "." + attr)
                except:
                    self.log.warning("Could not read from: %s" % attr)
                    continue

                self.log.debug("Adding %s=%s to %s" % (
                    attr, value, instance))

                instance.data[attr] = value

            # ftrack data
            components = {'ma': {'path': ''}}

            instance.data['ftrackComponents'] = components
            self.log.info("Added: %s" % components)
Example #26
0
    def run(self):
        '''Runs codes to start checking.'''
        import maya.cmds as cmds
        self.result = cmds.listCameras()
        self.result.remove('front')
        self.result.remove('persp')
        self.result.remove('side')
        self.result.remove('top')

        return self.result
def YupZup():
    if cmds.upAxis(q=True, axis=True) == "y":
        cmds.upAxis(ax="z", rv=True)
    else:
        cmds.upAxis(ax="y", rv=True)

    for cam in cmds.listCameras():
        cmds.viewSet(cam, animate=False, home=True)

    cmds.viewFit(all=True)
Example #28
0
def DOIT(*args):
    cameralist = cmds.listCameras()
    imageFile = '/groups2/papa/Rigging'
    for i in cameralist:
        imagePlaneName = cmds.imagePlane(c=i)
        print imagePlaneName
        cmds.setAttr(imagePlaneName[0] + '.imageName', '/groups2/papa/Rigging/theInspiration.JPG', type='string')
        
    
    cmds.warning('Welp, you asked for it.')
Example #29
0
def DOIT(*args):
    cameralist = cmds.listCameras()
    imageFile = '/groups2/papa/Rigging'
    for i in cameralist:
        imagePlaneName = cmds.imagePlane(c=i)
        print imagePlaneName
        cmds.setAttr(imagePlaneName[0] + '.imageName', '/groups2/papa/Rigging/theInspiration.JPG', type='string')
        
    
    cmds.warning('Welp, you asked for it.')
Example #30
0
 def _get_scene_cameras(self):
     cameras = cmds.listCameras(perspective=True)
     # replace shapes with transforms (maya returns shapes when other objects are parented under a camera)
     cam_shapes = cmds.ls(cameras, shapes=True)
     cameras = list(
         set(
             cmds.ls(cameras, type="transform") + cmds.ls(
                 cmds.listRelatives(cam_shapes, parent=True, fullPath=True),
                 type="transform")))
     return cameras
def YupZup():
    if cmds.upAxis(q=True, axis=True) == "y":
        cmds.upAxis(ax="z", rv=True)
    else:
        cmds.upAxis(ax="y", rv=True)

    for cam in cmds.listCameras():
        cmds.viewSet(cam, animate=False, home=True)

    cmds.viewFit(all=True)
Example #32
0
def CleanAllCameras_zwz():
    allCameras = mc.listCameras(p=True)
    for MyCamera in allCameras:
        MyCameraShape = mc.listRelatives(MyCamera, s=True, f=True)
        if MyCameraShape:
            mc.setAttr("%s.renderable" % MyCameraShape[0], 0)
    cmd = 'updateMayaSoftwareCameraControl;'
    try:
        mm.eval(cmd)
    except:
        pass
Example #33
0
 def listCam(self):
     camsTMP = cmds.listCameras()
     for i in camsTMP:
         cmds.setAttr(i + ".renderable", 0)
         if i != 'front' and i != 'persp' and i != 'side' and i != 'top':
             self.cams.append(i)
     if len(self.cams) == 1:
         self.cam = self.cams[0]
         self.lockTroughtCamera(self.cam)
     if len(self.cams) > 1:
         self.windowChooseCam()
Example #34
0
 def listCam(self):
     camsTMP = cmds.listCameras()
     for i in camsTMP:
         cmds.setAttr(i + ".renderable", 0)
         if i != "front" and i != "persp" and i != "side" and i != "top":
             self.cams.append(i)
     if len(self.cams) == 1:
         self.cam = self.cams[0]
         self.lockTroughtCamera(self.cam)
     if len(self.cams) > 1:
         self.windowChooseCam()
Example #35
0
def getRenderCamerasList ( ) :
  renderCamerasList = []
  cameras = cmds.listCameras ()
  for cam in cameras :
    camShape = cam
    if cmds.objectType( cam ) == 'transform' : # != 'camera' :
      camShapes = cmds.listRelatives ( str ( cam ), shapes = True  )
      camShape = camShapes [ 0 ]
    if cmds.getAttr ( camShape + '.renderable' ) :
      renderCamerasList.append ( str ( cam ) )
  return renderCamerasList
Example #36
0
    def process(self, context):

        all_cameras = cmds.listCameras()

        self.log.info(all_cameras)

        cameras = []
        for cam in all_cameras:
            if cam.lower().endswith('_cam'):
                cameras.append(cam)

        cameras.append('persp')

        for camera in cameras:  # Include namespace


            # Use short name
            name = cmds.ls(camera, long=False)[0].lower().rsplit("_cam", 1)[0]

            instance = context.create_instance(name=name, family='review')
            instance.add(camera)
            instance.data["families"] = ['review']
            instance.data["label"] = name + ' camera'

            if camera == 'persp':
                instance.data['publish'] = False
                instance.data["families"].append('snapshot')
            if camera == 'shot_cam':
                instance.data["families"].append('snapshot')

            if context.data['ftrackData']['Task']['type'] in ['Lighting']:
                instance.data['publish'] = False

            attrs = cmds.listAttr(camera, userDefined=True) or list()

            self.log.info("Found: %s" % camera)
            self.log.info("Overrides: %s" % attrs)

            # task specific overrides
            if context.data['ftrackData']['Task']['type'] == 'Rigging':
                instance.data['show'] = ['polymeshes', 'nurbsCurves', 'joints']

            # ftrack data
            components = {'review': {'path': '',
                                     'reviewable': True,
                                     },
                            'fullReview': {'path': '',
                                        'reviewable': False,
                                 }
                            }
            instance.data['ftrackComponents'] = components

            self.log.info("Added: %s" % components)
            self.log.info("components: %s" % instance.data['ftrackComponents'])
Example #37
0
def getRenderCamerasList():
    #
    renderCamerasList = []
    cameras = cmds.listCameras()
    for cam in cameras:
        camShape = cam
        if cmds.objectType(cam) == 'transform':  # != 'camera' :
            camShapes = cmds.listRelatives(str(cam), shapes=True)
            camShape = camShapes[0]
        if cmds.getAttr(camShape + '.renderable'):
            renderCamerasList.append(str(cam))
    return renderCamerasList
Example #38
0
    def __init__(self):
        self.camList = mc.listCameras(p=True)
        self.minCameraNum = 2
        self.maxCameraNum = 6

        self.main_win_width = 400
        self.main_win_Heigh = 25

        self.view_win_width = 900
        self.view_win_heigh = 150

        self.camNumField = ''
Example #39
0
    def Cam_3_H_Model_Win_UI(self):
        #环幕
        self.allCameras = mc.listCameras(p=True)
        if mc.window('Cam_Win_UI', ex=True):
            mc.deleteUI("Cam_Win_UI")
        win = mc.window('Cam_Win_UI',
                        t='OCT_3_CamModel',
                        wh=[500, 300],
                        sizeable=True,
                        rtf=True)

        mc.formLayout('formLyt', numberOfDivisions=100)

        two = mc.frameLayout('Cameras_Set',
                             label=u'请选择需要预览的摄像机(面板可拉伸)',
                             labelAlign='top',
                             borderStyle='etchedOut',
                             w=450,
                             parent='formLyt')
        mc.columnLayout(rowSpacing=5)
        for cam in self.allCameras:
            mc.rowLayout(numberOfColumns=4, columnWidth4=(150, 100, 100, 100))
            mc.text(cam, l=cam)
            mc.checkBox("%sL" % cam, l="L")
            mc.checkBox("%sM" % cam, l="M")
            mc.checkBox("%sR" % cam, l="R")
            mc.setParent('..')
        # self.uiTextSCameras = mc.textScrollList('selectCameras', append = self.allCameras, aas=True, allowMultiSelection=True, h=100, parent='Cameras_Set')
        mc.setParent('..')
        three = mc.columnLayout('Second_Set', parent='formLyt')
        mc.button('SetAll',
                  label=u'Go',
                  width=460,
                  h=25,
                  command=lambda *args: self.Cam_1_Model_Win_menu(),
                  backgroundColor=(0.2, 0.8, 0.3),
                  parent='Second_Set')
        mc.button('CloseWin',
                  label=u'正常退出',
                  width=460,
                  h=25,
                  command="",
                  backgroundColor=(0.8, 0.2, 0.3),
                  parent='Second_Set')
        mc.formLayout('formLyt',
                      e=True,
                      attachForm=[(two, 'top', 5), (two, 'left', 5),
                                  (two, 'right', 5), (three, 'left', 5),
                                  (three, 'bottom', 5)],
                      attachControl=[(two, 'bottom', 1, three)],
                      attachNone=[(three, 'top')],
                      attachPosition=[(two, 'left', 0, 0), (two, 'top', 0, 0)])
        mc.showWindow(win)
Example #40
0
def listAllCameras():
    cameraTransforms = []
    listAllCameras = cmds.listCameras(p=True)
    #remove 'persp' camera
    if 'persp' in listAllCameras: listAllCameras.remove('persp')
    for c in listAllCameras:
        if cmds.objectType(c) == "camera":
            cp = cmds.listRelatives(c, p=True)[0]
            cameraTransforms.append(cp)
        else:
            cameraTransforms.append(c)
    return cameraTransforms
Example #41
0
    def runImportLight(self, arg=None):
        title = 'Light Template'
        allRefs = mc.file(q=True, r=True)
        rigGrp = 'Rig:Geo_Grp'
        selLight = str(self.ui.light_comboBox.currentText())
        self.selLightPath = '%s/%s' % (self.lightRig, selLight)

        if not mc.objExists('Light_Grp'):
            if not self.selLightPath in allRefs:
                mc.file(self.selLightPath, r=True, uns=True, dns=True)

            mc.setAttr("vraySettings.relements_usereferenced", 1)

        else:
            self.messageBox('Warning', 'Light Rig Exists')

        if not mc.objExists('cam_grp'):
            if not self.turnTableCamera in allRefs:
                mc.file(self.turnTableCamera, r=True, uns=True, dns=True)

            mc.playbackOptions(min=1)
            mc.playbackOptions(max=100)
            mc.lookThru('turntable_cam')
            mc.setAttr('turntable_camShape.renderable', 1)
            allCams = mc.listCameras()

            for eachCam in allCams:
                shape = mc.listRelatives(eachCam, s=True)[0]
                mc.setAttr('%s.renderable' % shape, 0)

                if eachCam == 'turntable_cam':
                    mc.setAttr('%s.renderable' % shape, 1)
                    mc.setAttr('%s.displayFieldChart' % shape, 1)
                    mc.setAttr('%s.displayResolution' % shape, 1)
                    mc.setAttr('%s.overscan' % shape, 1.3)
                    mc.setAttr('%s.backgroundColor' % shape,
                               0.5,
                               0.5,
                               0.5,
                               type='double3')
                    # mc.eval('setAttr "turntable_camShape.backgroundColor" -type double3 0.5 0.5 0.5 ;')

                    if mc.objExists(rigGrp):
                        mc.select(rigGrp)
                        mm.eval('fitPanel -selected;')

                    mc.currentTime(9)

            self.setStatus(title, True)

        else:
            self.messageBox('Warning', 'Turntable Camera Exists')
Example #42
0
 def list_cameras(self):
     """
     Return a list of tuple representing the Maya cameras.
     Each tuple contains a camera name and its shape name.
     """
     res = []
     camera_names = cmds.listCameras()
     for camera_name in camera_names:
         camera_shape = cmds.listRelatives(camera_name,
                                           type="camera",
                                           s=True)[0]
         res.append((camera_name, camera_shape))
     return res
Example #43
0
def getCameras(renderableOnly=False):
    """ Returns list of cameras in the scene. Renderable cameras will be
		listed first.
	"""
    camera_list = []

    #if os.environ['IC_ENV'] == 'MAYA':
    if os.environ['PREVIEW_APPCONNECT'] == 'maya':
        # noSelectText = ""
        # camera_list = [noSelectText, ]
        #camera_list = []
        # cameras = mc.ls(cameras=True)
        persp_cameras = mc.listCameras(perspective=True)
        ortho_cameras = mc.listCameras(orthographic=True)
        cameras = persp_cameras + ortho_cameras
        for camera in cameras:
            if mc.getAttr(camera + '.renderable'):
                camera_list.insert(0, camera)
            elif renderableOnly == False:
                camera_list.append(camera)

    return camera_list
Example #44
0
    def __getAllCams(self):
        allSortedCam = []
        cameras = mc.listCameras(p=True)
        for cam in cameras:
            shapeNode = mc.listRelatives(cam, s=True)
            if shapeNode == None:
                continue

            str = "attributeExists \"renderable\"" + " \"" + shapeNode[0] + "\""
            status = mel.eval(str)
            if status:
                allSortedCam.append(cam)
        return allSortedCam
Example #45
0
def get_camera(with_panel=None):
    all_cams = [cam for cam in mc.listCameras(p=1) if not mc.referenceQuery(cam, isNodeReferenced=True)]
    extra_cams = ['persp', 'left', 'right', 'top', 'side', 'bottom']
    if with_panel:
        try:
            current_cam = pm.PyNode(pm.modelPanel(pm.getPanel(wf=True), q=True, cam=True))
            return current_cam
        except RuntimeError:
            pass
    all_cam_transform = [str(cam) for cam in all_cams if str(cam) not in extra_cams]
    # print all_cam_transform
    if all_cam_transform:
        return all_cam_transform
    else:
        return ["persp"]
Example #46
0
    def doCheck(self):

        # get the list of cameras
        self.cameraList = cmds.listCameras()

        # determine how many cameras there are
        self.numberOfCameras = len(self.cameraList)

        if self.numberOfCameras > 4:
            returnString = str(
                self.numberOfCameras) + " cameras detected, should have 4."
            return returnString

        else:
            return ''
Example #47
0
    def runImportLight(self, arg = None) : 
        title = 'Light Template'
        allRefs = mc.file(q = True, r = True)
        rigGrp = 'Rig:Geo_Grp'
        selLight = str(self.ui.light_comboBox.currentText())
        self.selLightPath = '%s/%s' % (self.lightRig, selLight)

        if not mc.objExists('Light_Grp') : 
            if not self.selLightPath in allRefs : 
                mc.file(self.selLightPath,r=True, uns=True, dns=True )
            
            mc.setAttr( "vraySettings.relements_usereferenced", 1)

        else : 
            self.messageBox('Warning', 'Light Rig Exists')

        if not mc.objExists('cam_grp') : 
            if not self.turnTableCamera in allRefs : 
                mc.file(self.turnTableCamera, r=True, uns=True, dns=True)

            mc.playbackOptions( min=1 ) 
            mc.playbackOptions( max=100 ) 
            mc.lookThru('turntable_cam')
            mc.setAttr('turntable_camShape.renderable', 1)
            allCams = mc.listCameras()

            for eachCam in allCams : 
                shape = mc.listRelatives(eachCam, s = True)[0]
                mc.setAttr('%s.renderable' % shape, 0)

                if eachCam == 'turntable_cam' : 
                    mc.setAttr('%s.renderable' % shape, 1)
                    mc.setAttr('%s.displayFieldChart' % shape, 1)
                    mc.setAttr('%s.displayResolution' % shape, 1)
                    mc.setAttr('%s.overscan' % shape, 1.3)
                    mc.setAttr('%s.backgroundColor' % shape, 0.5, 0.5, 0.5, type = 'double3')
                    # mc.eval('setAttr "turntable_camShape.backgroundColor" -type double3 0.5 0.5 0.5 ;')

                    if mc.objExists(rigGrp) : 
                        mc.select(rigGrp)
                        mm.eval('fitPanel -selected;')

                    mc.currentTime(9)

            self.setStatus(title, True)        

        else : 
            self.messageBox('Warning', 'Turntable Camera Exists')
    def __validate_item_for_camera(self, item):
        """
        Validate that the item is valid to be exported to a camera

        :param item:    The item to validate
        :returns:       A list of any errors found during validation

        """
        errors = []

        # compruebo que existe la cámara
        if not cmds.listCameras(perspective=True):
            errors.append("¡La escena no tiene ninguna cámara!")
            
        # devuelvo los errores
        return errors
Example #49
0
def switch_persp_panel():
	current_model = cmds.getPanel(wf=True)
	current_camera = cmds.modelEditor(current_model,q=True,cam=True)
	persp_cameras = cmds.listCameras(p=True)
	print persp_cameras
	try:
		if(camera_type(current_camera) == "orthographic"):
			cmds.lookThru("persp")
		else:
			if(len(persp_cameras) > 1):
				for c,n in itu.pairwise(persp_cameras):
					if(current_camera == c):
						if(persp_cameras.index(c) == (len(persp_cameras)-1)):
							cmds.lookThru(persp_cameras[0])
						else:	
							print n
							cmds.lookThru(n)
	except:
		print "No persp camera, create a new persp camera!"
Example #50
0
def delete_perspective_camera(log=None):
    '''
    delete all perspective cameras except 'persp'
    '''
    if not log:
        import logging
        log = logging.getLogger()
        
    cam_persp = cmds.listCameras(perspective=True)
    cam_persp.remove('persp')
    if cam_persp:
        for cam in cam_persp:
            try:
                cmds.delete( cam )
            except:
                log.error('can not delete camera:%s' % cam)
                log.error(traceback.format_exc())
            else:
                log.warning('delete camera success:%s' % cam)
    else:
        log.debug('There is no perspective camera in the scene.')
Example #51
0
def viewportSnap():
    '''
    Zbrush/Nvil like viewport snap
    '''
    camList = cmds.listCameras(o=True)

    if 'bottom' not in camList:
        cmds.duplicate('top', name='bottom')
        cmds.setAttr('bottom.translateY', -512)
        cmds.setAttr('bottom.rotateX', 90)

    if 'back' not in camList:
        cmds.duplicate('front', name='back')
        cmds.setAttr('back.translateZ', -512)
        cmds.setAttr('back.rotateY', 180)

    if 'left' not in camList:
        cmds.duplicate('side', name='left')
        cmds.setAttr('left.translateX', -512)
        cmds.setAttr('left.rotateY', -90)

    if getCurrentCamera() == 'persp':
        tm = cmds.xform('persp', q=True, ws=True, matrix=True)
        perspV = MVector(-tm[8], -tm[9], -tm[10])

        dotList = {}
        for view in camList:
            tm = cmds.xform(view, q=True, ws=True, matrix=True)
            tm = MVector(-tm[8], -tm[9], -tm[10])
            tm = perspV * tm
            dotList[view] = tm

        bv = max(dotList, key=dotList.get)
        setCurrentCamera(bv)
    else:
        setCurrentCamera('persp')
Example #52
0
def get_data_from_shotgun(cb010 = True, cb020 = True, cb030 = True, cb040 = True, cb050 = True, cb060 = True, optimizeEnv = True, rippleLyr = True, bgHillLyr = True, directory = 'I:/bubblebathbay/episodes', **kwargs):
	episode = kwargs['code'].split('_')[0] if kwargs['code'] else None
	shotName = kwargs['code'] if kwargs['code'] else None
	minTime = kwargs['sg_cut_in'] if kwargs['sg_cut_in'] else None
	maxTime = kwargs['sg_cut_out'] if kwargs['sg_cut_out'] else None
	timeOfDay = kwargs['sg_tod'] if kwargs['sg_tod'] else None
	oceanType = kwargs['sg_ocean_type'] if kwargs['sg_ocean_type'] else None
	
	if shotName:
		## New File!
		cmds.file(new = True, force = True)

		## Load plugins
		plugins_to_load = ['AbcImport', 'Mayatomr'];	[cmds.loadPlugin(plug) for plug in plugins_to_load if not cmds.pluginInfo(plug, q = True, name = True, loaded = True)]

		## Enable Mentalcore
		cmds.deleteUI('unifiedRenderGlobalsWindow') if cmds.window('unifiedRenderGlobalsWindow', exists = True, q = True) else None
		bbbLightTools._setRenderGlobals()

		if minTime and maxTime:
			## Sync frame range from shotgun (min)
			cmds.playbackOptions(minTime = minTime, maxTime = maxTime, animationStartTime = minTime, animationEndTime = maxTime)

		sceneName = 'I:/bubblebathbay/episodes/%s/%s/Light/work/maya/' % (episode, shotName)
		############################################################################################################
		## Fetch latest anim publish
		bbbLightTools._fetchAnimPublish(filteredPublish = 'Fetch Anim Publish', sceneName = sceneName)
		cmds.select(cmds.listRelatives('ABC_ANIM_CACHES_hrc', children = True, fullPath = True), replace = True) if cmds.objExists('ABC_ANIM_CACHES_hrc') and cmds.listRelatives('ABC_ANIM_CACHES_hrc', children = True) else None
		bbbLightTools.fetchShadersForSelected()
		
		###########################################################################################################
		## Fetch latest crease xml publish
		bbbLightTools._fetchAnimPublish(filteredPublish = 'Fetch Crease XML Publish', sceneName = sceneName)

		###########################################################################################################
		## Fetch latest camera publish
		bbbLightTools._fetchAnimPublish(filteredPublish = 'Fetch Camera Publish', sceneName = sceneName)
		shotCam = [cmds.listRelatives(cam, fullPath = True)[0] for cam in cmds.listCameras(perspective = True) if cam != 'persp' if cmds.objExists('%s.type' % cam) if cmds.getAttr('%s.type' % cam) == 'shotCam']
		shotCam = shotCam[0] if shotCam else None
		cmds.setAttr("%s.displayResolution" % shotCam, 1)
		cmds.setAttr("%s.overscan" % shotCam, 1.3)
		
		###########################################################################################################
		## Fetch latest fx ocean publish
		bbbLightTools._fetchAnimPublish(filteredPublish = 'Fetch FX Publish', sceneName = sceneName)

		## Fetch Static ENVs
		bbbLightTools._doSTATIC_import(path = '//192.168.5.253/BBB_main/bbb/i/bubblebathbay/episodes/ep000/ep000_sh010/Light/publish/maya', namespace = 'ep000_sh010_ep000sh010_LIGHTENV') if cb010 else None
		bbbLightTools._doSTATIC_import(path = '//192.168.5.253/BBB_main/bbb/i/bubblebathbay/episodes/ep000/ep000_sh020/Light/publish/maya', namespace = 'ep000_sh020_ep000sh020_LIGHTENV') if cb020 else None
		bbbLightTools._doSTATIC_import(path = '//192.168.5.253/BBB_main/bbb/i/bubblebathbay/episodes/ep000/ep000_sh030/Light/publish/maya', namespace = 'ep000_sh030_ep000sh030_LIGHTENV') if cb030 else None
		bbbLightTools._doSTATIC_import(path = '//192.168.5.253/BBB_main/bbb/i/bubblebathbay/episodes/ep000/ep000_sh040/Light/publish/maya', namespace = 'ep000_sh040_ep000sh040_LIGHTENV') if cb040 else None
		bbbLightTools._doSTATIC_import(path = '//192.168.5.253/BBB_main/bbb/i/bubblebathbay/episodes/ep000/ep000_sh050/Light/publish/maya', namespace = 'ep000_sh050_ep000sh050_LIGHTENV') if cb050 else None
		bbbLightTools._doSTATIC_import(path = '//192.168.5.253/BBB_main/bbb/i/bubblebathbay/episodes/ep000/ep000_Docks_Addon/Light/publish/maya', namespace = 'ep000_sh050_ep000sh060_LIGHTENV') if cb060 else None

		# Do static env quick optimize
		if optimizeEnv:
			if camMovementDetector():
				bbbLightTools.optimizeScene( still = False, step = 5, offset = 1.1, startFrame = int( camMovementDetector()[0] ), endFrame = int( camMovementDetector()[1] ) )
			else:
				bbbLightTools.optimizeScene(still = True, step = 5, offset = 1.1)

		## Setup Lighting
		if timeOfDay:
			bbbLightTools.setTOD_automatic(TODay = "dawn") if timeOfDay == 'Dawn' else None
			bbbLightTools.setTOD_automatic(TODay = "sunrise") if timeOfDay == 'Sunrise' else None
			bbbLightTools.setTOD_automatic(TODay = "morning") if timeOfDay == 'Morning' else None
			bbbLightTools.setTOD_automatic(TODay = "midday") if timeOfDay == 'Day' else None
			bbbLightTools.setTOD_automatic(TODay = "afternoon") if timeOfDay == 'Afternoon' else None
			bbbLightTools.setTOD_automatic(TODay = "afternoon") if timeOfDay == 'AfternoonLate' else None
			bbbLightTools.setTOD_automatic(TODay = "sunset") if timeOfDay == 'Sunset' else None
			bbbLightTools.setTOD_automatic(TODay = "dusk") if timeOfDay == 'Dusk' else None
			bbbLightTools.setTOD_automatic(TODay = "night") if timeOfDay == 'Night' else None

			tod_setter(timeOfDay = timeOfDay)

		## Finally, render setup!
		bbbLightTools.RenderSetup()

		if rippleLyr:
			## Go to defaultRenderLayer before setting up ripple or bg hills separated render layers
			cmds.editRenderLayerGlobals(currentRenderLayer = 'defaultRenderLayer')
			## Import ripple layer
			bbbLightTools.importRippleLayer()
			## Ripple_Lyr
			bbbLightTools.setRippleLYR()

		if bgHillLyr:
			## Go to defaultRenderLayer before setting up ripple or bg hills separated render layers
			cmds.editRenderLayerGlobals(currentRenderLayer = 'defaultRenderLayer')
			## BGHills_Lyr
			bbbLightTools.setBGHills()

		## Save scene!
		shotPath = '%s.generated__.ma' % shotName.replace('_', '')
		shotPath = '%s/%s/%s/Light/work/maya/%s' % (directory, episode, shotName, shotPath)

		if not os.path.exists( os.path.dirname(shotPath) ):
			os.makedirs( os.path.dirname(shotPath) )

		cmds.file(rename = shotPath)
		cmds.file(save = True, type = "mayaAscii")
Example #53
0
    def setupUI(self):
        ''' Building the GUI '''
        def resUpdateUI(value):
            self.resolutionSpinBox.setValue(value * 5)

        def resInfoUpdate(value):
            xres = self.getSceneOption(2) * value / 100
            yres = self.getSceneOption(3) * value / 100
            resolutionInfoLabel.setText("%sx%s"%(xres, yres))

        def camUpdateUI(value):
            self.cameraAaSpinBox.setValue(value)

        def portUpdateUI(value):
            self.portSpinBox.setValue(value + self.defaultPort)

        def sequence_toggled(value):
            isChecked = bool(value)
            self.startLabel.setEnabled(isChecked)
            self.endLabel.setEnabled(isChecked)
            self.stepLabel.setEnabled(isChecked)
            self.startSpinBox.setEnabled(isChecked)
            self.endSpinBox.setEnabled(isChecked)
            self.stepSpinBox.setEnabled(isChecked)

        def resetUI(*args):
            self.portSpinBox.setValue(self.defaultPort)
            portSlider.setValue(0)
            self.extraHostLineEdit.setText("")
            self.cameraComboBox.setCurrentIndex(0)
            self.resolutionSpinBox.setValue(100)
            resolutionSlider.setValue(20)
            self.cameraAaSpinBox.setValue(self.getSceneOption(4))
            cameraAaSlider.setValue(self.getSceneOption(4))
            self.renderRegionXSpinBox.setValue(0)
            self.renderRegionYSpinBox.setValue(0)
            self.renderRegionRSpinBox.setValue(self.getSceneOption(2))
            self.renderRegionTSpinBox.setValue(self.getSceneOption(3))
            overscanSlider.setValue(0)
            self.motionBlurCheckBox.setChecked(self.getSceneOption(5))
            self.subdivsCheckBox.setChecked(self.getSceneOption(6))
            self.displaceCheckBox.setChecked(self.getSceneOption(7))
            self.bumpCheckBox.setChecked(self.getSceneOption(8))
            self.sssCheckBox.setChecked(self.getSceneOption(9))
            self.shaderComboBox.setCurrentIndex(0)
            textureRepeatSlider.setValue(4)
            self.selectedShaderCheckbox.setChecked(0)
            self.startSpinBox.setValue(self.getSceneOption(10))
            self.endSpinBox.setValue(self.getSceneOption(11))
            self.stepSpinBox.setValue(1)
            self.seqCheckBox.setChecked(False)

        self.setAttribute(QtCore.Qt.WA_AlwaysShowToolTips)
        self.setAttribute(QtCore.Qt.WA_DeleteOnClose)

        mainLayout = QtWidgets.QVBoxLayout()
        mainLayout.setContentsMargins(5,5,5,5)
        mainLayout.setSpacing(2)

        generalGroupBox = QtWidgets.QGroupBox("General")
        generalGroupBox.setMaximumSize(9999, 150)
        generalLayout = QtWidgets.QVBoxLayout(generalGroupBox)

        # Port Layout
        portLayout = QtWidgets.QHBoxLayout()
        portLabel = QtWidgets.QLabel("Port:")
        portLabel.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignVCenter)
        portLabel.setMinimumSize(75, 20)
        self.portSpinBox = QtWidgets.QSpinBox()
        self.portSpinBox.setButtonSymbols(QtWidgets.QAbstractSpinBox.NoButtons)
        self.portSpinBox.setMaximum(1024)
        self.portSpinBox.setMaximum(9999)
        self.portSpinBox.setValue(self.defaultPort)
        portSlider = QtWidgets.QSlider()
        portSlider.setOrientation(QtCore.Qt.Horizontal)
        portSlider.setMinimum(0)
        portSlider.setMaximum(15)
        portSlider.setValue(0)
        portLayout.addWidget(portLabel)
        portLayout.addWidget(self.portSpinBox)
        portLayout.addWidget(portSlider)

        # Extra Host Layout
        extraHostLayout = QtWidgets.QHBoxLayout()
        extraHostLabel = QtWidgets.QLabel("Extra host:")
        extraHostLabel.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignVCenter)
        extraHostLabel.setMinimumSize(75, 20)
        extraHostLabel.setMaximumSize(75, 20)
        self.extraHostLineEdit = QtWidgets.QLineEdit()
        extraHostLayout.addWidget(extraHostLabel)
        extraHostLayout.addWidget(self.extraHostLineEdit)

        # Camera Layout
        cameraLayout = QtWidgets.QHBoxLayout()
        cameraLabel = QtWidgets.QLabel("Camera:")
        cameraLabel.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignVCenter)
        cameraLabel.setMaximumSize(75, 20)
        self.cameraComboBox = QtWidgets.QComboBox()
        self.cameraComboBoxDict = {}
        self.cameraComboBox.addItem("Current view")
        for i in cmds.listCameras():
            self.cameraComboBox.addItem(i)
            self.cameraComboBoxDict[cmds.listCameras().index(i)+1] = i
        cameraLayout.addWidget(cameraLabel)
        cameraLayout.addWidget(self.cameraComboBox)

        overridesGroupBox = QtWidgets.QGroupBox("Overrides")
        overridesGroupBox.setMaximumSize(9999, 350)
        overridesLayout = QtWidgets.QVBoxLayout(overridesGroupBox)

        # Resolution Layout
        resolutionLayout = QtWidgets.QHBoxLayout()
        resolutionLabel = QtWidgets.QLabel("Resolution %:")
        resolutionLabel.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignVCenter)
        resolutionLabel.setMinimumSize(75, 20)
        self.resolutionSpinBox = QtWidgets.QSpinBox()
        self.resolutionSpinBox.setButtonSymbols(QtWidgets.QAbstractSpinBox.NoButtons)
        self.resolutionSpinBox.setMinimum(1)
        self.resolutionSpinBox.setMaximum(999)
        self.resolutionSpinBox.setValue(100)
        resolutionSlider = QtWidgets.QSlider()
        resolutionSlider.setOrientation(QtCore.Qt.Horizontal)
        resolutionSlider.setValue(20)
        resolutionSlider.setMaximum(40)
        xres, yres = self.getSceneOption(2), self.getSceneOption(3)
        resolutionInfoLabel = QtWidgets.QLabel("%sx%s"%(xres, yres))
        resolutionInfoLabel.setMaximumSize(100, 20)
        resolutionInfoLabel.setEnabled(False)
        resolutionLayout.addWidget(resolutionLabel)
        resolutionLayout.addWidget(self.resolutionSpinBox)
        resolutionLayout.addWidget(resolutionSlider)
        resolutionLayout.addWidget(resolutionInfoLabel)


        # Camera AA Layout
        cameraAaLayout = QtWidgets.QHBoxLayout()
        cameraAaLabel = QtWidgets.QLabel("Camera (AA):")
        cameraAaLabel.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignVCenter)
        cameraAaLabel.setMinimumSize(75, 20)
        self.cameraAaSpinBox = QtWidgets.QSpinBox()
        self.cameraAaSpinBox.setButtonSymbols(QtWidgets.QAbstractSpinBox.NoButtons)
        self.cameraAaSpinBox.setMaximum(64)
        self.cameraAaSpinBox.setMinimum(-64)
        self.cameraAaSpinBox.setValue(self.getSceneOption(4))
        cameraAaSlider = QtWidgets.QSlider()
        cameraAaSlider.setOrientation(QtCore.Qt.Horizontal)
        cameraAaSlider.setValue(self.cameraAaSpinBox.value())
        cameraAaSlider.setMinimum(-3)
        cameraAaSlider.setMaximum(16)
        cameraAaSlider.valueChanged[int].connect(self.cameraAaSpinBox.setValue)
        cameraAaLayout.addWidget(cameraAaLabel)
        cameraAaLayout.addWidget(self.cameraAaSpinBox)
        cameraAaLayout.addWidget(cameraAaSlider)

        # Render region layout
        renderRegionLayout = QtWidgets.QHBoxLayout()
        renderRegionLabel = QtWidgets.QLabel("Region X:")
        renderRegionLabel.setMinimumSize(75, 20)
        renderRegionLabel.setMaximumSize(75, 99)
        renderRegionLabel.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignVCenter)
        self.renderRegionXSpinBox = QtWidgets.QSpinBox()
        renderRegionYLabel = QtWidgets.QLabel("Y:")
        self.renderRegionYSpinBox = QtWidgets.QSpinBox()
        renderRegionRLabel = QtWidgets.QLabel("R:")
        self.renderRegionRSpinBox = QtWidgets.QSpinBox()
        renderRegionTLabel = QtWidgets.QLabel("T:")
        self.renderRegionTSpinBox = QtWidgets.QSpinBox()
        renderRegionGetNukeButton = QtWidgets.QPushButton("Get")
        renderRegionGetNukeButton.setMaximumSize(35, 18)
        renderRegionGetNukeButton.clicked.connect(self.getNukeCropNode)
        renderRegionLayout.addWidget(renderRegionLabel)
        renderRegionLayout.addWidget(self.renderRegionXSpinBox)
        renderRegionLayout.addWidget(renderRegionYLabel)
        renderRegionLayout.addWidget(self.renderRegionYSpinBox)
        renderRegionLayout.addWidget(renderRegionRLabel)
        renderRegionLayout.addWidget(self.renderRegionRSpinBox)
        renderRegionLayout.addWidget(renderRegionTLabel)
        renderRegionLayout.addWidget(self.renderRegionTSpinBox)
        renderRegionLayout.addWidget(renderRegionGetNukeButton)

        for i in [self.renderRegionXSpinBox,
                  self.renderRegionYSpinBox,
                  self.renderRegionRSpinBox,
                  self.renderRegionTSpinBox]:
            i.setRange(-99999,99999)
            i.setMaximumSize(50,99)
            i.setButtonSymbols(QtWidgets.QAbstractSpinBox.NoButtons)

        self.renderRegionRSpinBox.setValue(self.getSceneOption(2))
        self.renderRegionTSpinBox.setValue(self.getSceneOption(3))

        # Overscan Layout
        overscanLayout = QtWidgets.QHBoxLayout()
        overscanLabel = QtWidgets.QLabel("Overscan:")
        overscanLabel.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignVCenter)
        overscanLabel.setMinimumSize(75, 20)
        self.overscanSpinBox = QtWidgets.QSpinBox()
        self.overscanSpinBox.setButtonSymbols(QtWidgets.QAbstractSpinBox.NoButtons)
        self.overscanSpinBox.setMinimum(0)
        self.overscanSpinBox.setMaximum(9999)
        self.overscanSpinBox.setValue(0)
        overscanSlider = QtWidgets.QSlider()
        overscanSlider.setOrientation(QtCore.Qt.Horizontal)
        overscanSlider.setValue(0)
        overscanSlider.setMaximum(250)
        overscanSlider.valueChanged[int].connect(self.overscanSpinBox.setValue)
        overscanSetButton = QtWidgets.QPushButton("Set")
        overscanSetButton.setMaximumSize(35, 18)
        overscanSetButton.clicked.connect(self.setOverscan)
        overscanLayout.addWidget(overscanLabel)
        overscanLayout.addWidget(self.overscanSpinBox)
        overscanLayout.addWidget(overscanSlider)
        overscanLayout.addWidget(overscanSetButton)

        # Shaders layout
        shaderLayout = QtWidgets.QHBoxLayout()
        shaderLabel = QtWidgets.QLabel("Shader override:")
        shaderLabel.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignVCenter)
        shaderLabel.setMaximumSize(90, 20)
        self.shaderComboBox = QtWidgets.QComboBox()
        self.shaderComboBox.addItem("Disabled")
        self.shaderComboBox.addItem("Checker")
        self.shaderComboBox.addItem("Grey")
        self.shaderComboBox.addItem("Mirror")
        self.shaderComboBox.addItem("Normal")
        self.shaderComboBox.addItem("Occlusion")
        self.shaderComboBox.addItem("UV")
        self.selectedShaderCheckbox = QtWidgets.QCheckBox("Selected objects only")
        shaderLayout.addWidget(shaderLabel)
        shaderLayout.addWidget(self.shaderComboBox)
        shaderLayout.addWidget(self.selectedShaderCheckbox)

        textureRepeatLayout = QtWidgets.QHBoxLayout()
        textureRepeatLabel = QtWidgets.QLabel("Texture repeat:")
        textureRepeatLabel.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignVCenter)
        textureRepeatLabel.setMinimumSize(90, 20)
        self.textureRepeatSpinbox = QtWidgets.QSpinBox()
        self.textureRepeatSpinbox.setValue(1)
        self.textureRepeatSpinbox.setButtonSymbols(QtWidgets.QAbstractSpinBox.NoButtons)
        textureRepeatSlider = QtWidgets.QSlider()
        textureRepeatSlider.setMinimum(1)
        textureRepeatSlider.setMaximum(64)
        textureRepeatSlider.setOrientation(QtCore.Qt.Horizontal)
        textureRepeatSlider.valueChanged[int].connect(self.textureRepeatSpinbox.setValue)
        textureRepeatSlider.setValue(4)
        textureRepeatLayout.addWidget(textureRepeatLabel)
        textureRepeatLayout.addWidget(self.textureRepeatSpinbox)
        textureRepeatLayout.addWidget(textureRepeatSlider)

        # Ignore Layout
        ignoresGroupBox = QtWidgets.QGroupBox("Ignore")
        ignoresGroupBox.setMaximumSize(9999, 75)
        ignoresLayout = QtWidgets.QVBoxLayout(ignoresGroupBox)
        ignoreLayout = QtWidgets.QHBoxLayout()
        ignoreLabel = QtWidgets.QLabel("Ignore:")
        ignoreLabel.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignVCenter)
        self.motionBlurCheckBox = QtWidgets.QCheckBox("Motion Blur")
        self.motionBlurCheckBox.setChecked(self.getSceneOption(5))
        self.subdivsCheckBox = QtWidgets.QCheckBox("Subdivs")
        self.subdivsCheckBox.setChecked(self.getSceneOption(6))
        self.displaceCheckBox = QtWidgets.QCheckBox("Displace")
        self.displaceCheckBox.setChecked(self.getSceneOption(7))
        self.bumpCheckBox = QtWidgets.QCheckBox("Bump")
        self.bumpCheckBox.setChecked(self.getSceneOption(8))
        self.sssCheckBox = QtWidgets.QCheckBox("SSS")
        self.sssCheckBox.setChecked(self.getSceneOption(9))
        ignoreLayout.addWidget(self.motionBlurCheckBox)
        ignoreLayout.addWidget(self.subdivsCheckBox)
        ignoreLayout.addWidget(self.displaceCheckBox)
        ignoreLayout.addWidget(self.bumpCheckBox)
        ignoreLayout.addWidget(self.sssCheckBox)

        # Sequence Layout
        sequenceGroupBox = QtWidgets.QGroupBox('Sequence')
        sequenceGroupBox.setMaximumSize(9999, 75)
        sequenceLayout = QtWidgets.QHBoxLayout(sequenceGroupBox)
        self.seqCheckBox = QtWidgets.QCheckBox()
        self.seqCheckBox.setMaximumSize(15, 25)
        self.seqCheckBox.stateChanged.connect(sequence_toggled)
        self.startLabel = QtWidgets.QLabel('Start frame:')
        self.startLabel.setEnabled(False)
        self.startSpinBox = QtWidgets.QSpinBox()
        self.startSpinBox.setButtonSymbols(QtWidgets.QAbstractSpinBox.NoButtons)
        self.startSpinBox.setRange(0, 99999)
        self.startSpinBox.setValue(self.getSceneOption(10))
        self.startSpinBox.setEnabled(False)
        self.endLabel = QtWidgets.QLabel('End frame:')
        self.endLabel.setEnabled(False)
        self.endSpinBox = QtWidgets.QSpinBox()
        self.endSpinBox.setButtonSymbols(QtWidgets.QAbstractSpinBox.NoButtons)
        self.endSpinBox.setRange(0, 99999)
        self.endSpinBox.setValue(self.getSceneOption(11))
        self.endSpinBox.setEnabled(False)
        self.stepLabel = QtWidgets.QLabel('By frame:')
        self.stepLabel.setEnabled(False)
        self.stepSpinBox = QtWidgets.QSpinBox()
        self.stepSpinBox.setButtonSymbols(QtWidgets.QAbstractSpinBox.NoButtons)
        self.stepSpinBox.setValue(1)
        self.stepSpinBox.setRange(1, 100)
        self.stepSpinBox.setEnabled(False)
        sequenceLayout.addWidget(self.seqCheckBox)
        sequenceLayout.addWidget(self.startLabel)
        sequenceLayout.addWidget(self.startSpinBox)
        sequenceLayout.addWidget(self.endLabel)
        sequenceLayout.addWidget(self.endSpinBox)
        sequenceLayout.addWidget(self.stepLabel)
        sequenceLayout.addWidget(self.stepSpinBox)

        # Main Buttons Layout
        mainButtonslayout = QtWidgets.QHBoxLayout()
        startButton = QtWidgets.QPushButton("Start / Refresh")
        stopButton = QtWidgets.QPushButton("Stop")
        resetButton = QtWidgets.QPushButton("Reset")
        startButton.clicked.connect(self.render)
        stopButton.clicked.connect(self.stop)
        resetButton.clicked.connect(resetUI)
        mainButtonslayout.addWidget(startButton)
        mainButtonslayout.addWidget(stopButton)
        mainButtonslayout.addWidget(resetButton)

        # Add Layouts to Main
        generalLayout.addLayout(portLayout)
        generalLayout.addLayout(extraHostLayout)

        generalLayout.addLayout(cameraLayout)
        overridesLayout.addLayout(resolutionLayout)
        overridesLayout.addLayout(cameraAaLayout)
        overridesLayout.addLayout(renderRegionLayout)
        overridesLayout.addLayout(overscanLayout)
        overridesLayout.addLayout(shaderLayout)
        overridesLayout.addLayout(textureRepeatLayout)
        ignoresLayout.addLayout(ignoreLayout)

        mainLayout.addWidget(generalGroupBox)
        mainLayout.addWidget(overridesGroupBox)
        mainLayout.addWidget(ignoresGroupBox)
        mainLayout.addWidget(sequenceGroupBox)
        mainLayout.addLayout(mainButtonslayout)

        # UI Updates
        self.connect(portSlider, QtCore.SIGNAL("valueChanged(int)"), portUpdateUI)
        self.connect(resolutionSlider, QtCore.SIGNAL("valueChanged(int)"), resUpdateUI)
        self.connect(self.resolutionSpinBox, QtCore.SIGNAL("valueChanged(int)"), resInfoUpdate)

        # IPR Updates
        self.connect(self.cameraComboBox, QtCore.SIGNAL("currentIndexChanged(int)"), lambda: self.IPRUpdate(0))
        self.connect(self.resolutionSpinBox, QtCore.SIGNAL("valueChanged(int)"), lambda: self.IPRUpdate(1))
        self.connect(self.cameraAaSpinBox, QtCore.SIGNAL("valueChanged(int)"), lambda: self.IPRUpdate(2))
        self.connect(self.renderRegionXSpinBox, QtCore.SIGNAL("valueChanged(int)"), lambda: self.IPRUpdate(1))
        self.connect(self.renderRegionYSpinBox, QtCore.SIGNAL("valueChanged(int)"), lambda: self.IPRUpdate(1))
        self.connect(self.renderRegionRSpinBox, QtCore.SIGNAL("valueChanged(int)"), lambda: self.IPRUpdate(1))
        self.connect(self.renderRegionTSpinBox, QtCore.SIGNAL("valueChanged(int)"), lambda: self.IPRUpdate(1))
        self.connect(self.overscanSpinBox, QtCore.SIGNAL("valueChanged(int)"), lambda: self.IPRUpdate(1))
        self.connect(self.motionBlurCheckBox, QtCore.SIGNAL("toggled(bool)"), lambda: self.IPRUpdate(3))
        self.connect(self.subdivsCheckBox, QtCore.SIGNAL("toggled(bool)"), lambda: self.IPRUpdate(3))
        self.connect(self.displaceCheckBox, QtCore.SIGNAL("toggled(bool)"), lambda: self.IPRUpdate(3))
        self.connect(self.bumpCheckBox, QtCore.SIGNAL("toggled(bool)"), lambda: self.IPRUpdate(3))
        self.connect(self.sssCheckBox, QtCore.SIGNAL("toggled(bool)"), lambda: self.IPRUpdate(3))
        self.connect(self.shaderComboBox, QtCore.SIGNAL("currentIndexChanged(int)"), lambda: self.IPRUpdate(4))
        self.connect(self.textureRepeatSpinbox, QtCore.SIGNAL("valueChanged(int)"), lambda: self.IPRUpdate(5))
        self.connect(self.selectedShaderCheckbox, QtCore.SIGNAL("toggled(bool)"), lambda: self.IPRUpdate(4))

        self.setLayout(mainLayout)
Example #54
0
    def render(self):
        ''' Starts the render '''
        try: # If MtoA was not found
            defaultTranslator = cmds.getAttr("defaultArnoldDisplayDriver.aiTranslator")
        except ValueError:
            cmds.warning("Current renderer is not set to Arnold.")
            return

        cmds.setAttr("defaultArnoldDisplayDriver.aiTranslator", "aton", type="string")

        # Updating extraHost and port from UI
        if self.defaultPort != 0:
            extraHost = self.extraHostLineEdit.text()
            port = self.portSpinBox.value()
            cmds.setAttr("defaultArnoldDisplayDriver.extraHost", extraHost, type="string")
            cmds.setAttr("defaultArnoldDisplayDriver.port", port)
        else:
            cmds.warning("Current renderer is not set to Arnold or Aton driver is not loaded.")
            return

        # Adding time changed callback
        if self.timeChangedCB == None:
            self.timeChangedCB = OM.MEventMessage.addEventCallback("timeChanged", self.timeChnaged)

        # Adding selection changed callback
        if self.selectionChangedCB == None:
            self.selectionChangedCB = OM.MEventMessage.addEventCallback('SelectionChanged', self.selectionChanged)

        try: # If render session is not started yet
            cmds.arnoldIpr(mode='stop')
        except RuntimeError:
            pass

        # Temporary makeing hidden cameras visible before scene export
        hCams = []
        for i in cmds.listCameras():
            if not cmds.getAttr(i + ".visibility"):
                hCams.append(i)
            sl = cmds.listRelatives(i, s=1)
            if sl and not cmds.getAttr(sl[0] + ".visibility"):
                hCams.append(sl[0])

        for i in hCams: cmds.showHidden(i)

        # Set Progressive refinement to off
        if self.sequence_enabled:
            cmds.setAttr("defaultArnoldRenderOptions.progressive_rendering", False)

        try: # Start IPR
            cmds.arnoldIpr(cam=self.getCamera(), mode='start')
            sys.stdout.write("// Info: Aton - Render started.\n")
        except RuntimeError:
            cmds.warning("Current renderer is not set to Arnold.")

        # Sequence Rendering
        if self.sequence_enabled:
            self.frame_sequence.start()

        # Update IPR
        self.IPRUpdate()

        # Setting back to default
        for i in hCams: cmds.hide(i)
        cmds.setAttr("defaultArnoldDisplayDriver.aiTranslator", defaultTranslator, type="string")
        cmds.setAttr("defaultArnoldDisplayDriver.port", self.defaultPort)
Example #55
0
 def populateCameraBox(self):
     cameras = cmds.listCameras()
     self.cameraBox.addItems(cameras)
Example #56
0
def render_all_cameras():
	cameras = cmds.listCameras(perspective=True)
	for camera in cameras:
		if camera != "persp":
			cmds.Mayatomr(preview=True, camera=camera)
Example #57
0
 def use_camera(self, cameraName='perspShape'):
     for cam in cmds.listCameras():
         camattr = cam + '.renderable'
         cmds.setAttr(camattr, 0)
         
     cmds.setAttr((cameraName + '.renderable'), 1)
Example #58
0
	def setupUi(self):

		def updateUi():
			self.resolutionSpinBox.setValue(resolutionSlider.value()*5)
			self.cameraAaSpinBox.setValue(cameraAaSlider.value())

		def regionUpdateUi():
			self.renderRegionRSpinBox.setValue(self.getSceneOptions()["width"] *
											   self.resolutionSpinBox.value() / 100)
			self.renderRegionTSpinBox.setValue(self.getSceneOptions()["height"] *
											   self.resolutionSpinBox.value() / 100)

		def resetUi(*args):
			self.cameraComboBox.setCurrentIndex(0)
			self.resolutionSpinBox.setValue(100)
			self.cameraAaSpinBox.setValue(self.getSceneOptions()["AASamples"])
			self.renderRegionXSpinBox.setValue(0)
			self.renderRegionYSpinBox.setValue(0)
			self.renderRegionRSpinBox.setValue(self.getSceneOptions()["width"])
			self.renderRegionTSpinBox.setValue(self.getSceneOptions()["height"])
			self.motionBlurCheckBox.setChecked(not self.getSceneOptions()["motionBlur"])
			self.subdivsCheckBox.setChecked(not self.getSceneOptions()["subdivs"])
			self.displaceCheckBox.setChecked(not self.getSceneOptions()["displace"])
			self.bumpCheckBox.setChecked(not self.getSceneOptions()["bump"])
			self.sssCheckBox.setChecked(not self.getSceneOptions()["sss"])

		self.setObjectName(self.windowName)
		self.setWindowTitle("Aton")
		self.setWindowFlags(QtCore.Qt.Tool)
		self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
		self.setMinimumSize(400, 200)
		self.setMaximumSize(400, 200)

		mainLayout = QtGui.QVBoxLayout()
		mainLayout.setContentsMargins(5,5,5,5)
		mainLayout.setSpacing(2)

		overridesGroupBox = QtGui.QGroupBox("Overrides")
		overridesLayout = QtGui.QVBoxLayout(overridesGroupBox)

		cameraLayout = QtGui.QHBoxLayout()
		cameraLabel = QtGui.QLabel("Camera:")
		cameraLabel.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignVCenter)
		cameraLabel.setMaximumSize(75, 20)
		cameraLabel.setMinimumSize(75, 20)
		self.cameraComboBox = QtGui.QComboBox()
		self.cameraComboBoxDict = {}
		self.cameraComboBox.addItem("Current (%s)"%self.getSceneOptions()["camera"])
		for i in cmds.listCameras():
			self.cameraComboBox.addItem(i)
			self.cameraComboBoxDict[cmds.listCameras().index(i)+1] = i
		cameraLayout.addWidget(cameraLabel)
		cameraLayout.addWidget(self.cameraComboBox)


		resolutionLayout = QtGui.QHBoxLayout()
		resolutionLabel = QtGui.QLabel("Resolution %:")
		resolutionLabel.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignVCenter)
		resolutionLabel.setMinimumSize(75, 20)
		self.resolutionSpinBox = QtGui.QSpinBox()
		self.resolutionSpinBox.setButtonSymbols(QtGui.QAbstractSpinBox.NoButtons)
		self.resolutionSpinBox.setMinimum(1)
		self.resolutionSpinBox.setMaximum(900)
		self.resolutionSpinBox.setValue(100)
		resolutionSlider = QtGui.QSlider()
		resolutionSlider.setOrientation(QtCore.Qt.Horizontal)
		resolutionSlider.setValue(20)
		resolutionSlider.setMaximum(20)
		resolutionSlider.sliderMoved.connect(self.resolutionSpinBox.setValue)
		resolutionLayout.addWidget(resolutionLabel)
		resolutionLayout.addWidget(self.resolutionSpinBox)
		resolutionLayout.addWidget(resolutionSlider)


		cameraAaLayout = QtGui.QHBoxLayout()
		cameraAaLabel = QtGui.QLabel("Camera (AA):")
		cameraAaLabel.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignVCenter)
		cameraAaLabel.setMinimumSize(75, 20)
		self.cameraAaSpinBox = QtGui.QSpinBox()
		self.cameraAaSpinBox.setButtonSymbols(QtGui.QAbstractSpinBox.NoButtons)
		self.cameraAaSpinBox.setMaximum(64)
		self.cameraAaSpinBox.setValue(self.getSceneOptions()["AASamples"])
		cameraAaSlider = QtGui.QSlider()
		cameraAaSlider.setOrientation(QtCore.Qt.Horizontal)
		cameraAaSlider.setValue(self.cameraAaSpinBox.value())
		cameraAaSlider.setMaximum(16)
		cameraAaSlider.sliderMoved.connect(self.cameraAaSpinBox.setValue)
		cameraAaLayout.addWidget(cameraAaLabel)
		cameraAaLayout.addWidget(self.cameraAaSpinBox)
		cameraAaLayout.addWidget(cameraAaSlider)


		renderRegionLayout = QtGui.QHBoxLayout()
		renderRegionLabel = QtGui.QLabel("Region X:")
		renderRegionLabel.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignVCenter)
		self.renderRegionXSpinBox = QtGui.QSpinBox()
		renderRegionYLabel = QtGui.QLabel("Y:")
		self.renderRegionYSpinBox = QtGui.QSpinBox()
		renderRegionRLabel = QtGui.QLabel("R:")
		self.renderRegionRSpinBox = QtGui.QSpinBox()
		renderRegionTLabel = QtGui.QLabel("T:")
		self.renderRegionTSpinBox = QtGui.QSpinBox()
		renderRegionCheckBox = QtGui.QCheckBox()
		renderRegionGetNukeButton = QtGui.QPushButton("Get")
		renderRegionGetNukeButton.clicked.connect(self.getNukeCropNode)
		renderRegionCheckBox.setLayoutDirection(QtCore.Qt.RightToLeft)
		renderRegionLayout.addWidget(renderRegionLabel)
		renderRegionLayout.addWidget(self.renderRegionXSpinBox)
		renderRegionLayout.addWidget(renderRegionYLabel)
		renderRegionLayout.addWidget(self.renderRegionYSpinBox)
		renderRegionLayout.addWidget(renderRegionRLabel)
		renderRegionLayout.addWidget(self.renderRegionRSpinBox)
		renderRegionLayout.addWidget(renderRegionTLabel)
		renderRegionLayout.addWidget(self.renderRegionTSpinBox)
		renderRegionLayout.addWidget(renderRegionGetNukeButton)

		for i in [renderRegionLabel,
				  renderRegionYLabel,
				  renderRegionRLabel,
				  renderRegionTLabel]:
			i.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignVCenter)

		for i in [self.renderRegionXSpinBox,
				  self.renderRegionYSpinBox,
				  self.renderRegionRSpinBox,
				  self.renderRegionTSpinBox]:
			i.setRange(0,99999)
			i.setMaximumSize(60,25)
			i.setButtonSymbols(QtGui.QAbstractSpinBox.NoButtons)

		self.renderRegionRSpinBox.setValue(self.getSceneOptions()["width"])
		self.renderRegionTSpinBox.setValue(self.getSceneOptions()["height"])


		ignoreLayout = QtGui.QHBoxLayout()
		ignoreLabel = QtGui.QLabel("Ignore:")
		ignoreLabel.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignVCenter)
		self.motionBlurCheckBox = QtGui.QCheckBox("Motion Blur")
		self.motionBlurCheckBox.setChecked(not self.getSceneOptions()["motionBlur"])
		self.subdivsCheckBox = QtGui.QCheckBox("Subdivs")
		self.subdivsCheckBox.setChecked(not self.getSceneOptions()["subdivs"])
		self.displaceCheckBox = QtGui.QCheckBox("Displace")
		self.displaceCheckBox.setChecked(not self.getSceneOptions()["displace"])
		self.bumpCheckBox = QtGui.QCheckBox("Bump")
		self.bumpCheckBox.setChecked(not self.getSceneOptions()["bump"])
		self.sssCheckBox = QtGui.QCheckBox("SSS")
		self.sssCheckBox.setChecked(not self.getSceneOptions()["sss"])
		ignoreLayout.addWidget(self.motionBlurCheckBox)
		ignoreLayout.addWidget(self.subdivsCheckBox)
		ignoreLayout.addWidget(self.displaceCheckBox)
		ignoreLayout.addWidget(self.bumpCheckBox)
		ignoreLayout.addWidget(self.sssCheckBox)


		mainButtonslayout = QtGui.QHBoxLayout()
		startButton = QtGui.QPushButton("Start / Refresh")
		stopButton = QtGui.QPushButton("Stop")
		resetButton = QtGui.QPushButton("Reset")


		startButton.clicked.connect(self.render)
		stopButton.clicked.connect(self.stop)
		resetButton.clicked.connect(resetUi)

		mainButtonslayout.addWidget(startButton)
		mainButtonslayout.addWidget(stopButton)
		mainButtonslayout.addWidget(resetButton)

		overridesLayout.addLayout(cameraLayout)
		overridesLayout.addLayout(resolutionLayout)
		overridesLayout.addLayout(cameraAaLayout)
		overridesLayout.addLayout(renderRegionLayout)
		overridesLayout.addLayout(ignoreLayout)

		mainLayout.addWidget(overridesGroupBox)
		mainLayout.addLayout(mainButtonslayout)

		self.connect(resolutionSlider, QtCore.SIGNAL("valueChanged(int)"), updateUi)
		self.connect(self.resolutionSpinBox, QtCore.SIGNAL("valueChanged(int)"), regionUpdateUi)
		self.connect(self.resolutionSpinBox, QtCore.SIGNAL("editingFinished()"), regionUpdateUi)
		self.connect(cameraAaSlider, QtCore.SIGNAL("valueChanged(int)"), updateUi)

		self.setLayout(mainLayout)
 def get_camera(self):
     camera_animation = mc.listCameras()[0]
     mc.lookThru (camera_animation)
     print camera_animation
	def execute(self, tasks, work_template, comment, thumbnail_path, sg_task, primary_task, primary_publish_path, progress_cb, **kwargs):
		"""
		Main hook entry point
		:param tasks:				   List of secondary tasks to be published.  Each task is a 
										dictionary containing the following keys:
										{
											item:   Dictionary
													This is the item returned by the scan hook 
													{   
														name:		   String
														description:	String
														type:		   String
														other_params:   Dictionary
													}
												   
											output: Dictionary
													This is the output as defined in the configuration - the 
													primary output will always be named 'primary' 
													{
														name:			 String
														publish_template: template
														tank_type:		String
													}
										}
						
		:param work_template:		   template
										This is the template defined in the config that
										represents the current work file
			   
		:param comment:				 String
										The comment provided for the publish
						
		:param thumbnail:			   Path string
										The default thumbnail provided for the publish
						
		:param sg_task:				 Dictionary (shotgun entity description)
										The shotgun task to use for the publish	
						
		:param primary_publish_path:	Path string
										This is the path of the primary published file as returned
										by the primary publish hook
						
		:param progress_cb:			 Function
										A progress callback to log progress during pre-publish.  Call:
										
											progress_cb(percentage, msg)
											 
										to report progress to the UI
						
		:param primary_task:			The primary task that was published by the primary publish hook.  Passed
										in here for reference.  This is a dictionary in the same format as the
										secondary tasks above.
		
		:returns:					   A list of any tasks that had problems that need to be reported 
										in the UI.  Each item in the list should be a dictionary containing 
										the following keys:
										{
											task:   Dictionary
													This is the task that was passed into the hook and
													should not be modified
													{
														item:...
														output:...
													}
													
											errors: List
													A list of error messages (strings) to report	
										}
		"""
		def FindFirstImageOfSequence(FolderPath):
			ImgsList=[]
			for file in (os.listdir(FolderPath)):
				SeqImgName = str.split(str(file),".")[1]
				ImgsList.append(SeqImgName)
			First_elmnt=ImgsList[0]
			return First_elmnt
			
		def FindFirstImageOfSequence(FolderPath):
			ImgsList=[]
			for file in (os.listdir(FolderPath)):
				if file.endswith(".png"):
					SeqImgName = str.split(str(file),".")[1]
					ImgsList.append(int(SeqImgName))
				First_elmnt=ImgsList[0]
			return First_elmnt

		def FindLastImageOfSequence(FolderPath):
			ImgsList=[]
			for file in (os.listdir(FolderPath)):
				if file.endswith(".png"):
					SeqImgName = str.split(str(file),".")[1]
					ImgsList.append(int(SeqImgName))
				Last_elmnt=ImgsList[-1]
			return Last_elmnt
			
		def FindLengthOfSequence(FolderPath):
			ImgsList=[]
			for file in (os.listdir(FolderPath)):
				if file.endswith(".png"):
					SeqImgName = str.split(str(file),".")[1]
					ImgsList.append(int(SeqImgName))
				Length_seq=len(ImgsList)
			return Length_seq
			
		def MakeListOfSequence(FolderPath):
			ImgsList=[]
			for file in (os.listdir(FolderPath)):
				if file.endswith(".png"):
					SeqImgName = str.split(str(file),".")[1]
					ImgsList.append(int(SeqImgName))
			return ImgsList

		def FindMissingFramesFromSequence(SequenceSet,inputStart,inputEnd):
			# my_list= list(range( int(FindFirstImageOfSequence(os.path.dirname(RenderPath)))	, int(FindLastImageOfSequence(os.path.dirname(RenderPath)))	 ))
			my_list= list(range( inputStart, inputEnd))
			MissingFrames =  set(my_list)-set(SequenceSet)
			return sorted(MissingFrames)
			
		def combineMediaFiles(fileList,output,concatTxt=None, ffmpeg_path = "ffmpeg"):
			rootPath = str.split(str(fileList[0]),"/q")[0]
			mediaType = str.rsplit(str(fileList[0]),".",1)[1]
			mediaFilePresent = False
			mediaListFile = rootPath+'/tmp_'+mediaType+'List.txt'
			if concatTxt != None:
				mediaListFile = concatTxt
			with open(mediaListFile, 'w') as mediaTxtFile:
				for mediaFile in fileList:
					if os.path.exists(mediaFile):
						mediaFilePresent = True
						#print mediaFile
						shotPath = str.split(str(mediaFile),"/")[-1]
						if 'Sequences' in mediaFile:
							shotPath = str.split(str(mediaFile),"Sequences")[1][1:]
						if concatTxt != None:
							shotPath = str.split(str(mediaFile),os.path.dirname(concatTxt))[1][1:]
						mediaTxtFile.write("file '" +shotPath+"'")
						mediaTxtFile.write('\r\n')
					else:
						print("AUDIO FILE NOT FOUND :  " + str(mediaFile))
						# results.append({"task":"audio stuff", "errors":("AUDIO FILE NOT FOUND :  " + str(mediaFile))})
			if mediaFilePresent:
				# command = os.path.normpath(ffmpeg_path + ' -f concat -i '+mediaListFile+' -c copy '+output + " -y")
				# command = os.path.normpath(ffmpeg_path + ' -f concat -r 24 -i '+mediaListFile+' -vcodec mjpeg -r 24 -qscale 1 -pix_fmt yuvj420p -acodec pcm_s16le -ar 48000 -ac 2 '+output + " -y")
				command = os.path.normpath(ffmpeg_path + ' -f concat -r 24 -i '+mediaListFile+' -vcodec mjpeg -r 24 -qscale 1 -pix_fmt yuvj420p '+output + " -y")
				command = str.replace(str(command), "\\" , "/")
				#print command
				value = subprocess.call(command, creationflags=CREATE_NO_WINDOW, shell=False)
				return output
			else:
				return None
		
		def findLastVersion(FolderPath,returnFile=False,returnFilePath=False):
			if os.path.exists(FolderPath):
				fileList=os.listdir(FolderPath)
			else:
				return 0
			if fileList != []:
				fileList.sort()
				lastVersion = fileList[-1]
				version = int(re.findall('\d+', lastVersion)[-1])
				if returnFilePath:
					return FolderPath+"/"+lastVersion
				if returnFile:
					return lastVersion
				return version
				#return str(FolderPath+"/"+lastVersion)
			else:
				return 0
		
		def orderMovs(movList,orderList):
			tmp = ""

		def setAudioToCorrectPath():
			scenePath = cmds.file(q=True,sceneName=True)
			scene_template = tk.template_from_path(scenePath)
			flds = scene_template.get_fields(scenePath)
			audio_template = tk.templates["shot_published_audio"]

			tank = sgtk.tank_from_entity('Project', 66)

			allShots = cmds.ls(type="shot")
			allAudio = cmds.ls(type="audio")
			reportList = []
			returnList = []
			for seqShot in allShots:
				audio = cmds.shot(seqShot,q=True,audio=True)
				audioFile = cmds.getAttr(audio+".filename")# "W:/RTS/1_PREPROD/13_ANIMATIC/q340/splitshots/wav new 01/q340_s260_snd_v001.wav";
				#print audioFile
				flds['Shot'] = flds['Sequence']+"_"+seqShot
				audioOutputFile = audio_template.apply_fields(flds)
				#audioOutputPath = str.replace(str(audioOutputPath),"\\","/")
				#print audioFile
				audioFile = str.replace(str(audioFile),"Z:/Richard The Stork","W:/RTS")
				audioOutputPath = str.rsplit(str(audioOutputFile),"\\",1)[0]
				print audioOutputPath
				if os.path.exists(audioOutputPath):
					audioOutputFile = findLastVersion(audioOutputPath,True,True)
					if audioOutputFile != 0:
						newAudio = str.rsplit(audioOutputFile,"/",1)[-1]
						newAudio = str.split(newAudio,".")[0]
						print newAudio
						cmds.delete(audio)
						ref = cmds.file( audioOutputFile, r=True, type="audio",mergeNamespacesOnClash=False, namespace="audio")
						#
						offset = cmds.getAttr(seqShot+".sequenceStartFrame")
						cmds.setAttr(newAudio+".offset", offset)
						cmds.connectAttr(newAudio+".message", seqShot+".audio")
						
						shotEnd =  cmds.getAttr(seqShot +".sequenceEndFrame")
						audioEnd = cmds.getAttr(newAudio+".endFrame")
						if audioEnd < shotEnd:
							reportList += [newAudio + "  is shorter than shot !!!"]
						if audioEnd > shotEnd:
							reportList += [newAudio + "  was longer than shot. now cut to match!!!"]
							cmds.setAttr(newAudio+".endFrame",shotEnd+1)

						returnList += [newAudio]
				else:
					print "skipped ", audio
			for report in reportList:
				print report
			return returnList
		
		def getStereoCams(sht):
			leftCam = ""
			rightCam = ""
			prevCamShape = cmds.shot(sht,q=True,cc=True)
			prevCam = cmds.listRelatives(prevCamShape,p=True)
			prevCamParent = cmds.listRelatives(prevCam,p=True)
			for obj in cmds.listRelatives(prevCamParent):
				if cmds.objectType(obj) == 'stereoRigTransform':
					leftCam = str(cmds.listConnections(obj+".leftCam",source=True)[0])
					rightCam = str(cmds.listConnections(obj+".rightCam",source=True)[0])
			return[leftCam,rightCam]

		wtd_fw = self.load_framework("tk-framework-wtd_v0.x.x")
		ffmpeg = wtd_fw.import_module("pipeline.ffmpeg")
		# ffmpeg.test()
		
		def _register_publish(path, name, sg_task, publish_version, tank_type, comment, thumbnail_path, context = None):
			"""
			Helper method to register publish using the 
			specified publish info.
			"""
			ctx = self.parent.tank.context_from_path(str(path))
			# construct args:
			args = {"tk": self.parent.tank,"sg_status_list": "cmpt","context": context,"comment": comment,"path": path,"name": name,"version_number": publish_version,"thumbnail_path": thumbnail_path,"sg_task": sg_task,"published_file_type":tank_type,"user": ctx.user,"created_by": ctx.user}
			print "-------------------"
			for a in args:
				print a , args[a]
			# print args
			# register publish;
			sg_data = tank.util.register_publish(**args)
			print 'Register in shotgun done!'
			
			return sg_data


		def orderShots(shotDictList):
			valueOrderList = []
			valueOrderListSecondary = []
			listIndex = 0
			for sht in shotDictList:
				orderNr = str("00000"+str(sht['sg_cut_order']))[-4:]
				addValue = str(listIndex)
				if sht['sg_status_list'] == 'omt':
					addValue = 'omt'
				if sht['parent_shots'] == []:
					valueOrderList += [orderNr+">>"+addValue]
				else:
					valueOrderListSecondary += [orderNr+">>"+addValue]
				listIndex += 1
			valueOrderList = sorted(valueOrderList)+sorted(valueOrderListSecondary)
			orderedList = []
			for sht in valueOrderList:
				addValue = str.split(sht,'>>')[1]
				if addValue != "omt":
					orderedList+=[shotDictList[int(addValue)]]
			return orderedList

		def checkSoundCut():
			allShots = cmds.ls(type="shot")
			allAudio = cmds.ls(type="audio")
			sequenceList = []
			for seqShot in allShots:
				#print "---", seqShot
				shotStart =  int(cmds.getAttr(seqShot +".sequenceStartFrame"))
				shotEnd  =   int(cmds.getAttr(seqShot +".sequenceEndFrame"))
				#print shotStart
				#print shotEnd
				sequenceList.append({"shot": seqShot})
				audioList = []
				audioIn = []
				audioOut = []
				for aud in allAudio:
					
					add = False
					aIn = 0
					aOut= 0
					audioStart   =  int(cmds.getAttr(aud+".offset" ))
					audioEnd = int(cmds.getAttr(aud+".endFrame"))-1
					audioOriginalDuration = int(cmds.getAttr(aud+".duration"))
					audioDuration  =  audioEnd-audioStart
					
						
					if shotStart < audioStart < shotEnd:
						add = True
						if audioEnd > shotEnd:
							aOut = shotEnd - audioStart
					if shotStart < audioEnd < shotEnd:
						add = True
						aIn = audioDuration-(audioEnd-shotStart)
					if audioStart < shotStart < audioEnd:
						add = True
						aIn = shotStart - audioStart
					if audioStart < shotEnd < audioEnd:
						add = True
						aOut = audioDuration-(audioEnd-shotEnd)+1
					
					if add:
						audioList.append([aud,aIn,aOut])

				sequenceList[-1]["audioList"] = audioList
			
			tmpFolder = "C:/temp"
			if not os.path.exists(tmpFolder):
				os.makedirs(tmpFolder)

			scenePath = cmds.file(q=True,sceneName=True)
			scene_template = tk.template_from_path(scenePath)
			audio_template = tk.templates["shot_published_audio"]
			flds = scene_template.get_fields(scenePath)
			flds['Step'] = 'snd'
			soundCheckList = ["These audio cuts dont match the camera cuts."]
			for audio in sequenceList:
				if audio['audioList'] != []:
					#print audio['shot']
					flds['Shot'] = flds['Sequence']+"_"+str(audio['shot'])
					i=0
					newAudio =[]
					soundCheckList += [""]
					soundCheckList += ["audio files overlapping shot " + audio['shot']]
					for aud in audio['audioList']:
						inSec = float(aud[1])/24
						outSec = float(aud[2])/24
						print aud[0],inSec,outSec
						# print "------>>>>>>>>>", aud
						soundCheckList += [aud[0] +"   cut in offset = "+ str(aud[1]) +"   cut out offset = "+ str(aud[2])]

			return sequenceList
		def MakeSoundCuts(ffmpegPath,Input,Output,Position,Duration ):
			time01= Position
			time02= Duration
			if os.path.isfile(Output):
				os.remove(Output)
			subprocess.call('%s -i "%s" -ss "%s" -t "%s" -acodec copy "%s"' %(ffmpegPath,Input,time01,time02,Output))
		def fixSound(sequenceList):
			tmpFolder = "C:/temp"
			if not os.path.exists(tmpFolder):
				os.makedirs(tmpFolder)
			scenePath = cmds.file(q=True,sceneName=True)
			scene_template = tk.template_from_path(scenePath)
			audio_template = tk.templates["shot_published_audio"]
			flds = scene_template.get_fields(scenePath)
			flds['Step'] = 'snd'
			for audio in sequenceList:
				if audio['audioList'] != []:
					print audio['shot']
					flds['Shot'] = flds['Sequence']+"_"+str(audio['shot'])
					i=0
					newAudio =[]
					for aud in audio['audioList']:
						inSec = float(aud[1])/24
						outSec = float(aud[2])/24
						print aud[0],inSec,outSec
						if outSec == 0.0:
							outSec = 10000
						input = cmds.getAttr(aud[0]+'.filename')
						output = tmpFolder+"/"+audio['shot']+"_part"+str(i)+str.split(str(input),"/")[-1]
						i+=1
						MakeSoundCuts(ffmpegPath,input,output,inSec,outSec)
						newAudio +=[output]
					audioOutput = audio_template.apply_fields(flds)
					
					# version UP
					latestVersion = findLastVersion(os.path.dirname(audioOutput))+1
					flds['version'] = latestVersion
					audioOutput = audio_template.apply_fields(flds)
					# combine
					mergedAudio = combineMediaFiles(newAudio,audioOutput,tmpFolder+"/tmp_wavList.txt",ffmpegPath)
					
					ver = str(findLastVersion(os.path.dirname(audioOutput),True))
					newAudioName = str.rsplit(ver,"_",1)[0]
					cmds.file( audioOutput, i=True, type="audio",mergeNamespacesOnClash=False, namespace=flds['Shot']+"_audio",resetError=True)
					crappyAudioName = str.split(ver,".")[0]
					cmds.rename(crappyAudioName,newAudioName)
					cutIn = cmds.getAttr(audio['shot']+".startFrame")
					cutOut = cmds.getAttr(audio['shot']+".endFrame")
					cutDuration = cutOut-cutIn
					cmds.setAttr(newAudioName+".offset", cutIn)
					cmds.setAttr(newAudioName+".sourceEnd",cutDuration+1)
					cmds.connectAttr(newAudioName+".message", audio['shot']+".audio",f=True)
					print "-----------------------------------------------------------------------------________________-------------------------------------------------------------------------"
					# PUBLISH
					file_template = tk.template_from_path(audioOutput)
					flds = file_template.get_fields(audioOutput)
					print audioOutput
					ctx = tk.context_from_path(audioOutput)

					print ctx

					sg_task = tk.shotgun.find("Task",[['content', 'is',"Sound"],["entity",'is',ctx.entity]], ['id'])
					try:
						sg_task = sg_task[0]
					except indexError:
						print "SKIPPED - are the folders already created on shotgun?????"
						errors.append("SKIPPED - are the folders already created on shotgun?????")
					if sg_task != []:
						_register_publish(audioOutput,newAudioName,sg_task,flds['version'],"Audio", "publish","",ctx)
					else:
						print "SKIPPED - are the folders already created on shotgun?????"
						errors.append("SKIPPED - are the folders already created on shotgun?????")
						#popup('error',"skipped creation of "+newAudioName+" - are the folders already created on shotgun??")

			for audio in sequenceList:
				if audio['audioList'] != []:
					for aud in audio['audioList']:
						if cmds.objExists(aud[0]):
							print "------------------",aud[0],"------------------------"
							cmds.delete(aud[0])


		shots = cmds.ls(type="shot")
		shotCams = []
		unUsedCams = []

		sides=["L","R"]

		pbShots = []
		CutInList = []
		parentShotList = []
		
		# these booleans can be used for 
		noOverscan = False
		resetCutIn = False

		# template stuff...
		# tk = tank.tank_from_path("W:/RTS/Tank/config")
		tk = self.parent.tank
		scenePath = cmds.file(q=True,sceneName=True)
		scene_template = tk.template_from_path(scenePath)
		flds = scene_template.get_fields(scenePath)
		flds['width'] = 1724
		flds['height'] = 936
		pb_template = tk.templates["maya_seq_playblast_publish"]
		pb_template_current = tk.templates["maya_seq_playblast_current"]
		pbArea_template = tk.templates["maya_seq_playblast_publish_area"]
		audio_template = tk.templates["shot_published_audio"]
		mov_template = tk.templates["maya_seq_playblast_publish_currentshots_mov"]
		concatMovTxt = tk.templates["maya_seq_playblast_publish_concatlist"]
		pbMov = tk.templates["maya_seq_playblast_publish_mov"]
		pbMp4 = tk.templates["maya_seq_playblast_review_mp4"]

		# get extra shot info through shotgun
		fields = ['id']
		sequence_id = self.parent.shotgun.find('Sequence',[['code', 'is',flds['Sequence'] ]], fields)[0]['id']
		fields = ['id', 'code', 'sg_asset_type','sg_cut_order','sg_cut_in','sg_cut_out','sg_cut_duration','sg_status_list','parent_shots']
		filters = [['sg_sequence', 'is', {'type':'Sequence','id':sequence_id}]]
		assets= self.parent.shotgun.find("Shot",filters,fields)
		results = []
		errors = []
		ffmpegPath = '"'+os.environ.get('FFMPEG_PATH')
		if "ffmpeg.exe" not in ffmpegPath:
			ffmpegPath += "\\ffmpeg.exe"
		ffmpegPath += '"'
		soundFixList = checkSoundCut()
		print soundFixList
		fixSound(soundFixList)

		for task in tasks:
			item = task["item"]
			output = task["output"]
			errors = []
			
			#get shots from scan scene
			if item["type"] == "shot":
				shotTask = [item["name"]][0]
				pbShots += [shotTask]
			# get corresponding cut values from shotgun
				for sht in assets:
					shot_from_shotgun = str.split(sht['code'],"_")[1]
					if shot_from_shotgun == shotTask:
						CutInList += [sht['sg_cut_in']]
						parentShotList += [sht['parent_shots']]
			
			# set extra settings
			if item["type"] == "setting":
				if item["name"]=="overscan":
					noOverscan = True
				if item["name"]=="set Cut in":
					resetCutIn = True

			# if there is anything to report then add to result
			if len(errors) > 0:
				# add result:
				results.append({"task":task, "errors":errors})

		# temporarily hide cams and curves
		modPan = cmds.getPanel(type="modelPanel")
		for pan in modPan:
			cmds.modelEditor( pan,e=True, alo= False, polymeshes =True )
			cmds.modelEditor( pan,e=True,displayAppearance="smoothShaded")
			cmds.modelEditor( pan,e=True,displayTextures=True)
			allobjs = cmds.ls(type= "transform")
			boundingboxObjsList = []


			for i in allobjs:
				if cmds.getAttr(i+".overrideEnabled"):
					if cmds.getAttr(i+".overrideLevelOfDetail") == 1:
						boundingboxObjsList.append(i)
						cmds.setAttr(i+".overrideLevelOfDetail",0)
						
		currentselection= cmds.ls(sl=True)
		cmds.select(cl=True)
		
		cmds.headsUpDisplay(lv=False)

		CamsList = cmds.listCameras()
		for Cam in CamsList:
			cmds.camera(Cam, e=True, dr=True, dgm=True,ovr=1.3)
		

		#Get USER
		USER = sgtk.util.get_current_user(tk)
		if USER == None:
			USER = {'email': '*****@*****.**',
			 'id': 63,
			 'image': 'https://sg-media-usor-01.s3.amazonaws.com/7df0575d53fc3b61c36343837da18effb72bb6ff/86f714413d0a2c68382b706e8e45991d41a0ffed/thumb_t.jpg?AWSAccessKeyId=AKIAIFHY52V77FIVWKLQ&Expires=1415784134&Signature=%2Ff4qeNQMq4oHscIKePb1IrtRPZQ%3D',
			 'login': '******',
			 'name': 'WTD RND',
			 'type': 'HumanUser'}


		# audio stuff
		'''
		stepVersion = flds['version']
		step = flds['Step']
		audioList = []
		for sht in shots:
			#print sht
			flds['Shot'] = (flds['Sequence']+"_"+sht)
			flds['version'] = findLastVersion(os.path.dirname(audio_template.apply_fields(flds)))
			flds['Step'] = 'snd'
			print flds['version']
			if flds['version'] > 0:
				audioList += [str.replace(str(audio_template.apply_fields(flds)),"\\","/")]
		flds['Shot'] = flds['Sequence']
		flds['version'] = stepVersion #set version back
		flds['Step'] = step
		
		audioOutput = pbArea_template.apply_fields(flds)+"/"+flds['Sequence']+"_"+flds['Step']+".wav"
		if audioList != []:
			combinedAudio = combineMediaFiles(audioList,audioOutput, ffmpeg_path = ffmpegPath)
		print ("combined audio at  " + audioOutput)
		'''


		# replacedAudio = setAudioToCorrectPath()
		# for aud in replacedAudio:
		# 	results.append({"task":{'item': aud , 'output': 'replaced' }})

		Test = True;
		#Test = False;
		if Test:
			j = 0
			RenderPath = ""
			for pbShot in pbShots:
				CutIn = CutInList[j]
				if parentShotList[j] != []:
					parentShot = str.split(parentShotList[j][0]['name'],"_")[-1]
				j += 1
				
				sequenceName = flds ['Sequence']
				shotName = pbShot
				
				# ... correct this in the templates?
				flds['Shot'] = flds['Sequence']+"_"+pbShot

				

				#get camera name from sequence shot 
				shotCam = cmds.shot(pbShot, q=True, currentCamera=True)

				# overscanValue = cmds.getAttr(shotCam+".overscan")
				cmds.setAttr(shotCam+".overscan", 1.3)
				if noOverscan:
					cmds.setAttr(shotCam+".overscan", 1)


				shotCams = [shotCam]
				previewCam = shotCam
				if flds['Step'] == 's3d':
					shotCams = getStereoCams(pbShot)
				s = 0
				for shotCam in shotCams:
					side = sides[s]
					s += 1
					if flds['Step'] == 's3d':
						flds['eye'] = side

					cmds.shot(pbShot, e=True, currentCamera=shotCam)
					focal = cmds.getAttr(shotCam+'.focalLength')
					# make outputPaths from templates
					RenderPath = pb_template.apply_fields(flds)
					pbPath = str.split(str(RenderPath),".")[0]
					renderPathCurrent = pb_template_current.apply_fields(flds)
					pbPathCurrent = str.split(str(renderPathCurrent),".")[0]
					if not os.path.exists(os.path.dirname(pbPathCurrent)):
						os.makedirs(os.path.dirname(pbPathCurrent))
					pbPathCurrentMov = mov_template.apply_fields(flds)
					if not os.path.exists(os.path.dirname(pbPathCurrentMov)):
						os.makedirs(os.path.dirname(pbPathCurrentMov))

					# report progress:
					progress_cb(0, "Publishing", task)

					shotStart = cmds.shot(pbShot,q=True,sequenceStartTime=True)
					shotEnd = cmds.shot(pbShot,q=True,sequenceEndTime=True)
					progress_cb(25, "Making playblast %s" %pbShot)
					cmds.playblast(indexFromZero=False,filename=(pbPath),fmt="iff",compression="png",wh=(flds['width'], flds['height']),startTime=shotStart,endTime=shotEnd,sequenceTime=1,forceOverwrite=True, clearCache=1,showOrnaments=1,percent=100,offScreen=True,viewer=False,useTraxSounds=True)
					progress_cb(50, "Placing Slates %s" %pbShot)
					
					Film = "Richard the Stork"
					#GET CURRENT DATE
					today = datetime.date.today()
					todaystr = today.isoformat()
					
					"""
						Adding Slates to playblast files
					"""
					for i in range(int(shotStart),int(shotEnd)+1):
						FirstPartName = RenderPath.split( '%04d' )[0]
						EndPartName = '%04d' % i + RenderPath.split( '%04d' )[-1]
						ImageFullName = FirstPartName + EndPartName
						pbFileCurrent = pbPathCurrent+"."+EndPartName
						print 'fld ===>',flds
						print 'USER===>',USER
						ffmpeg.ffmpegMakingSlates(inputFilePath= ImageFullName, outputFilePath= ImageFullName, topleft = flds ['Sequence']+"_"+flds['Step']+"_v"+str('%03d' % (flds['version'])), topmiddle = Film, topright = str(int(CutIn))+"-"+str('%04d' %(i-int(shotStart)+CutIn))+"-"+str('%04d' %(int(shotEnd)-int(shotStart)+CutIn))+"  "+str('%04d' %(i-int(shotStart)+1))+"-"+str('%04d' %(int(shotEnd)-int(shotStart)+1)), bottomleft = shotName+" - focal_Length "+ str(focal), bottommiddle = USER['name'], bottomright = todaystr , ffmpegPath =ffmpegPath, font = "C:/Windows/Fonts/arial.ttf"  )
						print("COPYING PNG "+ImageFullName+"  TO  "+pbFileCurrent+"  FOR SHOT  " + shotName)
						shutil.copy2(ImageFullName, pbFileCurrent)
					
					shotAudio = audio_template.apply_fields(flds)
					shotAudio = findLastVersion(os.path.dirname(shotAudio),True,True)
					if shotAudio == 0:
						print " NO PUBLISHED AUDIO FOUND"
						for aud in [parentShot,pbShot]:
							try:
								audio = cmds.shot(pbShot,q=True,audio=True)
								shotAudio = '"'+cmds.getAttr(audio+".filename")+'"'
								shotAudio = str.replace(str(shotAudio),"Z:/Richard The Stork/",'W:/RTS/')
								print "used audio from maya :  ", shotAudio
							except:
								shotAudio = ''
					print ffmpeg.ffmpegMakingMovie(inputFilePath=renderPathCurrent, outputFilePath=pbPathCurrentMov, audioPath=shotAudio, start_frame=int(shotStart),end_frame=int(shotEnd), framerate=24 , encodeOptions='libx264',ffmpegPath=ffmpegPath)
				# end_frame=shotEnd
				cmds.shot(pbShot, e=True, currentCamera=previewCam)
			
			if currentselection != []:
				cmds.select(currentselection)
			
			if flds['Step'] == 'lay':
				sides = ['']
			for side in sides:
				if flds['Step'] == 's3d':
					flds['eye'] = side
					
				
				RenderPath = pb_template.apply_fields(flds)

				for i in boundingboxObjsList:
					cmds.setAttr(i+".overrideEnabled",True)
					cmds.setAttr(i+".overrideLevelOfDetail",1)
				sequenceTest= MakeListOfSequence(os.path.dirname(RenderPath))
				FistImg= int(FindFirstImageOfSequence(os.path.dirname(RenderPath))) 
				LastImg= int(FindLastImageOfSequence(os.path.dirname(RenderPath)))

				FramesMissingList= FindMissingFramesFromSequence( sequenceTest ,FistImg ,LastImg )
				
				"""
					Copy empty frames
				"""
				# blackFrame = False
				# blackFrameName = ""
				# for n in FramesMissingList:
					# if blackFrame == False:
						# blackFrameName = FirstPartName+str('%04d' % n)+".png"
						# value = subprocess.call('%s -f lavfi -i color=c=black:s="%s" -vframes 1 "%s"' %(ffmpegPath,(str(flds['width'])+"x"+ str(flds['height'])),FirstPartName+str('%04d' % n)+".png"))
						# print '%s -f lavfi -i color=c=black:s="%s" -vframes 1 "%s"' %(ffmpegPath,(str(flds['width'])+"x"+ str(flds['height'])),FirstPartName+str('%04d' % n)+".png")
						# blackFrame = True
					
					# newFrameName = FirstPartName+str('%04d' % n)+".png"
					# if blackFrameName != newFrameName:
						# shutil.copy2(blackFrameName, newFrameName)	

				FirstImageNumber= FindFirstImageOfSequence(os.path.dirname(RenderPath))
				FirstImageNumberSecond= FirstImageNumber/24

				'''
				makeSeqMov
				'''
				concatTxt = concatMovTxt.apply_fields(flds)
				pbMovPath = pbMov.apply_fields(flds)
				pbMp4Path = pbMp4.apply_fields(flds)
				pbMp4Path = str.replace(str(pbMp4Path),'\\','/')

				pbMovFile =  str.split(str(pbMovPath),os.path.dirname(pbMovPath))[1][1:]

				# movList = []
				# for mov in os.listdir(os.path.dirname(pbPathCurrentMov)):
				# 	movList += [os.path.dirname(pbPathCurrentMov)+"/"+mov]
				# print movList

				assetsOrdered = orderShots(assets)
				movList = []
				for ass in assetsOrdered:
					for mov in os.listdir(os.path.dirname(pbPathCurrentMov)):
						movName = str.split(str(mov),".")[0]
						if ass['code'] == movName:
							movList += [os.path.dirname(pbPathCurrentMov)+"/"+mov]


				makeSeqMov = True
				if makeSeqMov:
					if not os.path.exists(os.path.dirname(pbMovPath)):
						self.parent.ensure_folder_exists(os.path.dirname(pbMovPath))
						# os.makedirs(os.path.dirname(pbMovPath))
					
					if not os.path.exists(os.path.dirname(pbMp4Path)):
						print "creating", pbMp4Path
						self.parent.ensure_folder_exists(os.path.dirname(pbMp4Path))
						print "created", pbMp4Path
						# os.makedirs(os.path.dirname(pbMp4Path))
					"""
						SEQUENCE MOV and MP4 Creation
					"""
					print "Making mov and mp4: \n", pbMovPath, ' --- ', pbMp4Path
					print combineMediaFiles(movList,pbMovPath,concatTxt,ffmpegPath)
					
					amount = 0
					while not os.path.exists(pbMovPath) and amount < 10:
						time.sleep(1)
						amount += 1
						
					print ffmpeg.ffmpegMakingMovie(pbMovPath,pbMp4Path,encodeOptions="libx264",ffmpegPath=ffmpegPath)
							
						
					# ----------------------------------------------
					# UPLOAD MP4
					# ----------------------------------------------
					
					upload = True
					if upload:
						user = self.parent.context.user
						scenePath = cmds.file(q=True,sceneName=True)
						ctx = self.parent.tank.context_from_path(scenePath)
						fields = ['id']
						sg_task = self.parent.shotgun.find("Task",[['content', 'is',ctx.step['name']],["entity",'is',ctx.entity]], fields)
						
						data = {'project': {'type':'Project','id':66},
								'entity': {'type':'Sequence', 'id':int(sequence_id)},
								'code': flds ['Sequence']+"_"+flds['Step']+"_v"+str('%03d' % (flds['version'])),
								'sg_path_to_frames':os.path.dirname(RenderPath),
								'sg_path_to_movie':pbMovPath,
								'user': user,
								'created_by': user,
								'updated_by': user,
								'sg_task': sg_task[0]
								}

						if not os.path.exists(os.path.dirname(pbMp4Path)):
							os.makedirs(os.path.dirname(pbMp4Path))
						
						result = tk.shotgun.create('Version', data)
						print "---> UPLOADING ",pbMp4Path
						executed = tk.shotgun.upload("Version",result['id'],pbMp4Path,'sg_uploaded_movie')
						print executed
				
					# PUBLISH
					if sg_task != []:
						version = findLastVersion(os.path.dirname(pbMovPath))
						#sg_task = sg_task[0]
						print sg_task
						_register_publish(pbMovPath,pbMovFile,sg_task,version,"Movie", "published playblast mov","",ctx)
						print "PUBLISHED"
					else:
						print "SKIPPED PUBLISH"
				
					
				# print "TODO : make mov of whole sequence with audio"
		return results