def doIt(self, args = OpenMaya.MArgList() ): """ Class entry point. 1. Detect if Girl_settings exists 2. Detect if exporting an animation 3. Determine start and end frame to export, and pass control to startBatch() """ if not cmds.objExists('Girl_settings'): OpenMaya.MGlobal.displayWarning('No Girl settings found for this scene, opening GUI...') from Girl_gui import Girl_gui lg = Girl_gui() lg.doIt(OpenMaya.MArgList()) return # here we go doAnimation = cmds.getAttr( 'Girl_settings.render_animation' ) doInSequence = cmds.getAttr( 'Girl_settings.render_animation_sequence' ) self.startFrame = round( cmds.currentTime( query = True ) ) if doAnimation: self.startFrame = round( cmds.getAttr( 'defaultRenderGlobals.startFrame' ) ) self.endFrame = round( cmds.getAttr( 'defaultRenderGlobals.endFrame' ) ) self.stepFrame = round( cmds.getAttr( 'defaultRenderGlobals.byFrameStep' ) ) else: self.endFrame = self.startFrame self.initProgressWindow() if doInSequence: self.startSequence() else: self.startBatch()
def doItFilmExport(self, args = OpenMaya.MArgList() ): if not cmds.objExists('Girl_settings'): OpenMaya.MGlobal.displayWarning('No Girl settings found for this scene, opening GUI...') from Girl_gui import Girl_gui lg = Girl_gui() lg.doIt(OpenMaya.MArgList()) return # here we go doAnimation = cmds.getAttr( 'Girl_settings.render_animation' ) doInSequence = cmds.getAttr( 'Girl_settings.render_animation_sequence' ) self.startFrame = round( cmds.currentTime( query = True ) ) if doAnimation: self.startFrame = round( cmds.getAttr( 'defaultRenderGlobals.startFrame' ) ) self.endFrame = round( cmds.getAttr( 'defaultRenderGlobals.endFrame' ) ) self.stepFrame = round( cmds.getAttr( 'defaultRenderGlobals.byFrameStep' ) ) else: self.endFrame = self.startFrame self.initProgressWindow() self.startBatchFilmExport()
def finalize(self): """ Command is finished, construct a string for the command for journalling. """ command = OpenMaya.MArgList() command.addArg(self.commandString()) command.addArg(self.__delta.x) command.addArg(self.__delta.y) command.addArg(self.__delta.z) # This call adds the command to the undo queue and sets # the journal string for the command. # try: OpenMayaMPx.MPxToolCommand._doFinalize(self, command) except: pass
def exportFilmFile(self, frameNumber = 1, tempExportPath = False): saveFolderorg = cmds.getAttr( 'Girl_settings.scene_path' ) saveFolderorg = saveFolderorg + os.altsep saveFolder = saveFolderorg.replace('\\', '/') saveFolder = saveFolder.replace('//', '/') if not os.path.exists(saveFolder): os.mkdir( saveFolder ) sceneFileBaseName = cmds.getAttr( 'Girl_settings.scene_filename' ) + ('.%06i' % frameNumber) renderFolder = saveFolder + "renders" + os.altsep if not os.path.exists(renderFolder): os.mkdir(renderFolder) imageSaveName = renderFolder + sceneFileBaseName if tempExportPath: saveFolder += ('tmp') + os.altsep if not os.path.exists(saveFolder): os.mkdir( saveFolder ) else: for file in os.listdir(saveFolder): os.remove(saveFolder+file) os.rmdir( saveFolder ) os.mkdir( saveFolder ) else: saveFolder += ('%06i' % frameNumber) + os.altsep if not os.path.exists(saveFolder): os.mkdir( saveFolder ) sceneFileName = saveFolder + sceneFileBaseName + '.girls' renderWidth = cmds.getAttr( 'defaultResolution.width' ) renderHeight = cmds.getAttr( 'defaultResolution.height' ) # launch export proc here ! le = Girl_export() leArgs = OpenMaya.MArgList() leArgs.addArg( sceneFileName ) leArgs.addArg( imageSaveName ) leArgs.addArg( renderWidth ) leArgs.addArg( renderHeight ) try: le.doItFilmExport( leArgs ) except: self.mProgress.endProgress() raise return sceneFileName
def getFlagList(self, wedgeflag, flagtype="double"): num = self.argData.numberOfFlagUses(wedgeflag) flag_arglist = [] if num > self.num_attrs: num = self.num_attrs flag_args = OpenMaya.MArgList() for i in range(num): status = self.argData.getFlagArgumentList(wedgeflag, i, flag_args) if flagtype == "double": flag_arglist.append(flag_args.asDouble(i)) else: flag_arglist.append(flag_args.asInt(i)) print "getFlagList: wedgeflag", wedgeflag, "flag_arglist", flag_arglist return flag_arglist
def finalize(self): """ Command is finished, construct a string for the command for journalling. """ command = om.MArgList() command.addArg(self.commandString()) if self.brush_state.settings['mode'] == 'place': #'place': command.addArg('place') for i in xrange(self.position.length()): command.addArg(self.position[i]) if self.brush_state.settings['mode'] == 'spray': #'place': command.addArg('spray') command.addArg(self.position.length()) # This call adds the command to the undo queue and sets # the journal string for the command. ompx.MPxToolCommand._doFinalize(self, command) for i in xrange(command.length()): self.last_undo_journal += ' {}'.format(command.asString(i)) # reset command variables self.position = om.MVectorArray() self.scale = om.MVectorArray() self.rotation = om.MVectorArray() self.instance_id = om.MIntArray() self.visibility = om.MIntArray() self.normal = om.MVectorArray() self.tangent = om.MVectorArray() self.u_coord = om.MDoubleArray() self.v_coord = om.MDoubleArray() self.poly_id = om.MIntArray() self.color = om.MVectorArray() self.point_id = om.MIntArray() self.initial_rotation = om.MVectorArray() self.initial_scale = om.MVectorArray() self.initial_offset = om.MDoubleArray() self.initial_id = om.MIntArray() self.spray_coords = []
def doIt(self, args=OpenMaya.MArgList()): """ Class entry point. 1. Detect if pbrt_settings exists 2. Detect if exporting an animation 3. Determine start and end frame to export, and pass control to startBatch() """ OpenMaya.MGlobal.displayInfo('PBRT Batch Export start 2') if not cmds.objExists('pbrt_settings'): OpenMaya.MGlobal.displayWarning( 'No PBRT settings found for this scene, creating a new settings node first' ) render_settings = pbrt_settings.pbrt_settings() render_settings.checkAndAddAttributes() # here we go doAnimation = cmds.getAttr('pbrt_settings.render_animation') self.startFrame = round(cmds.currentTime(query=True)) self.unix = (os.name != 'nt') if doAnimation: self.startFrame = round( cmds.getAttr('defaultRenderGlobals.startFrame')) self.endFrame = round( cmds.getAttr('defaultRenderGlobals.endFrame')) self.stepFrame = round( cmds.getAttr('defaultRenderGlobals.byFrameStep')) else: self.endFrame = self.startFrame self.initProgressWindow() self.startBatch()
def parseArguments(self, args): ''' The presence of this function is not enforced, but helps separate argument parsing code from other command code. ''' # Getting the argData from MArgParser argData = OpenMaya.MArgDatabase(self.syntax(), args) try: self.__mesh = argData.commandArgumentString(0) except: self.displayError('Must pass in Mesh as first Argument') if argData.isQuery() and argData.isFlagSet( SkinDataCmd.kWeightsFlag) and argData.isFlagSet( SkinDataCmd.kInfluenceFlag): try: self._influnceNode = argData.commandArgumentString(1) except: pass self.__returnWeights = True self.__returnInfluenceWeights = True self.__undoable = False elif argData.isQuery() and argData.isFlagSet( SkinDataCmd.kInfluenceFlag): self.__returnInfluence = True self.__undoable = False elif argData.isQuery() and argData.isFlagSet(SkinDataCmd.kWeightsFlag): self.__returnWeights = True self.__undoable = False elif argData.isQuery() and argData.isFlagSet( SkinDataCmd.kBlendWeightsFlag): self.__returnBlendWeights = True self.__undoable = False elif argData.isFlagSet(SkinDataCmd.kWeightsFlag) and argData.isFlagSet( SkinDataCmd.kInfluenceFlag): #add to doubleArray for weights self.__weights.setLength( argData.numberOfFlagUses(SkinDataCmd.kWeightsFlag)) for i in range(self.__weights.length()): argList = OpenMaya.MArgList() argData.getFlagArgumentList(SkinDataCmd.kWeightsFlag, i, argList) self.__weights.set(argList.asDouble(0), i) #add to selectionList for verts if argData.isFlagSet(SkinDataCmd.kVertIdFlag): for i in range( argData.numberOfFlagUses(SkinDataCmd.kVertIdFlag)): argList = OpenMaya.MArgList() argData.getFlagArgumentList(SkinDataCmd.kVertIdFlag, i, argList) self.__mVertSelList.add(argList.asString(0), i) #append to list of influence names for i in range(argData.numberOfFlagUses( SkinDataCmd.kInfluenceFlag)): argList = OpenMaya.MArgList() argData.getFlagArgumentList(SkinDataCmd.kInfluenceFlag, i, argList) self.__influenceNames.append(argList.asString(0)) self.__setVertWeights = True self.__undoable = True elif argData.isFlagSet(SkinDataCmd.kBlendWeightsFlag): #add to doubleArray for weights self.__blendWeights.setLength( argData.numberOfFlagUses(SkinDataCmd.kBlendWeightsFlag)) for i in range(self.__blendWeights.length()): argList = OpenMaya.MArgList() argData.getFlagArgumentList(SkinDataCmd.kBlendWeightsFlag, i, argList) self.__blendWeights.set(argList.asDouble(0), i) self.__setVertBlendWeights = True self.__undoable = True else: self.displayError('No arguments passed')
def doIt(self, args): '''Creates the node and connects everything based on the parameters given''' # get the arguments passed in argData = OpenMaya.MArgParser(self.syntax(), args) # get objects to use in the constraint and make sure there is only two objects = [] argData.getObjects(objects) if not objects: # use the selection objects = cmds.ls(sl=True) for obj in objects: self.sList.add(obj) # if there is less than two objects given, return an error if self.sList.length() < 2: raise RuntimeError( 'Two transforms are required to create constraint.') # get the target object path and make sure it's a transform type targetDAG = OpenMaya.MDagPath() try: self.sList.getDagPath(0, targetDAG) except RuntimeError: raise RuntimeError( 'Target object must be a DAG object type. Unable to get path to object.' ) targetTransFn = OpenMaya.MFnTransform() try: targetTransFn.setObject(targetDAG) except RuntimeError: raise RuntimeError( 'Target object type invalid. You must choose a transform.') # get the constraint object path and make sure it's a transform type constraintDAG = OpenMaya.MDagPath() try: self.sList.getDagPath(1, constraintDAG) except RuntimeError: raise RuntimeError( 'Constraint object must be a DAG object type. Unable to get path to object.' ) constrainedTransFn = OpenMaya.MFnTransform() try: constrainedTransFn.setObject(constraintDAG) except RuntimeError: raise RuntimeError( 'Constraint object type invalid. You must choose a transform.') numSkips = argData.numberOfFlagUses('-sk') if numSkips > 3: raise RuntimeError('You can not have more than 3 skip flags.') if argData.isFlagSet('-n'): self.nodeName = argData.flagArgumentString('-n', 0) for i in range(numSkips): argList = OpenMaya.MArgList() argData.getFlagArgumentList('-sk', i, argList) axis = argList.asString(0) if axis == 'x': self.skipX = True elif axis == 'y': self.skipY = True elif axis == 'z': self.skipZ = True # distance flag if argData.isFlagSet('-d'): self.distanceValue = argData.flagArgumentDouble('-d', 0) else: # calculate the distance targetPos = targetTransFn.getTranslation(OpenMaya.MSpace.kWorld) constrainedPos = constrainedTransFn.getTranslation( OpenMaya.MSpace.kWorld) localPos = targetPos - constrainedPos self.distanceValue = localPos.length() # start frame flag if argData.isFlagSet('-sf'): self.startFrame = argData.flagArgumentDouble('-sf', 0) else: self.startFrame = cmds.currentTime(q=True) # start position if argData.isFlagSet('-sp'): spX = argData.flagArgumentDouble('-sp', 0) spY = argData.flagArgumentDouble('-sp', 1) spZ = argData.flagArgumentDouble('-sp', 2) self.startVector = OpenMaya.MVector(spX, spY, spZ) else: self.startVector = constrainedTransFn.getTranslation( OpenMaya.MSpace.kTransform) self.redoIt()
def exportFile(self, frameNumber = 1, tempExportPath = False): """ Export a single frame, and return the name of the created scene file """ render_cam = '' cam_idx = cmds.getAttr( 'Girl_settings.camera_name' ) seekidx = 1 if cam_idx == 0: for cam in cmds.listCameras(): renderable = cmds.getAttr( '%s.renderable' % cam ) if renderable == 1: render_cam = cam break else: for cam in cmds.listCameras(): if ( cam != 'front' and cam != 'persp' and cam != 'side' and cam != 'top' ): if cam_idx == seekidx: render_cam = cam break seekidx = seekidx + 1 #OpenMaya.MGlobal.displayInfo(cam) if render_cam == '': OpenMaya.MGlobal.displayError('No renderable camera in scene') saveFolderorg = cmds.getAttr( 'Girl_settings.scene_path' ) saveFolderorg = saveFolderorg + os.altsep saveFolder = saveFolderorg.replace('\\', '/') basesavefolder = saveFolder = saveFolder.replace('//', '/') if not os.path.exists(saveFolder): os.mkdir( saveFolder ) sceneFileBaseName = cmds.getAttr( 'Girl_settings.scene_filename' ) + ('.%06i' % frameNumber) #renderFolder = saveFolder + os.altsep + "renders" + os.altsep renderFolder = saveFolder + "renders" + os.altsep if not os.path.exists(renderFolder): os.mkdir(renderFolder) imageSaveName = renderFolder + sceneFileBaseName if tempExportPath: saveFolder += ('tmp') + os.altsep if not os.path.exists(saveFolder): os.mkdir( saveFolder ) else: for file in os.listdir(saveFolder): os.remove(saveFolder+file) os.rmdir( saveFolder ) os.mkdir( saveFolder ) else: saveFolder += ('%06i' % frameNumber) + os.altsep if not os.path.exists(saveFolder): os.mkdir( saveFolder ) sceneFileName = saveFolder + sceneFileBaseName + '.girls' renderWidth = cmds.getAttr( 'defaultResolution.width' ) renderHeight = cmds.getAttr( 'defaultResolution.height' ) # launch export proc here ! le = Girl_export() leArgs = OpenMaya.MArgList() leArgs.addArg( sceneFileName ) leArgs.addArg( imageSaveName ) leArgs.addArg( renderWidth ) leArgs.addArg( renderHeight ) leArgs.addArg( render_cam ) try: le.doIt( leArgs ) except: self.mProgress.endProgress() raise #returnFilename = sceneFileName.replace(basesavefolder, './') return sceneFileName
def exportFile(self, frameNumber=1, tempExportPath=False): """ Export a single frame, and return the name of the created scene file """ render_cam = '' for cam in cmds.listCameras(): renderable = cmds.getAttr('%s.renderable' % cam) if renderable == 1: render_cam = cam break if render_cam == '': OpenMaya.MGlobal.displayError('No renderable camera in scene') saveFolder = cmds.getAttr('lux_settings.scene_path') if not os.path.exists(saveFolder): os.mkdir(saveFolder) sceneFileBaseName = cmds.getAttr('lux_settings.scene_filename') + ( '.%06i' % frameNumber) renderFolder = saveFolder + os.altsep + "renders" + os.altsep if not os.path.exists(renderFolder): os.mkdir(renderFolder) imageSaveName = renderFolder + sceneFileBaseName if tempExportPath: saveFolder += ('tmp') + os.altsep if not os.path.exists(saveFolder): os.mkdir(saveFolder) else: for file in os.listdir(saveFolder): os.remove(saveFolder + file) os.rmdir(saveFolder) os.mkdir(saveFolder) else: saveFolder += ('%06i' % frameNumber) + os.altsep if not os.path.exists(saveFolder): os.mkdir(saveFolder) sceneFileName = saveFolder + sceneFileBaseName + '.lxs' renderWidth = cmds.getAttr('defaultResolution.width') renderHeight = cmds.getAttr('defaultResolution.height') # launch export proc here ! le = luxexport() leArgs = OpenMaya.MArgList() leArgs.addArg(sceneFileName) leArgs.addArg(imageSaveName) leArgs.addArg(renderWidth) leArgs.addArg(renderHeight) leArgs.addArg(render_cam) try: le.doIt(leArgs) except: self.mProgress.endProgress() raise return sceneFileName
def doIt(self, args=OpenMaya.MArgList()): self.camera = self.findCameraInSelection() self.cameraFrustumNodeName = self.camera[0].name() + "frustum" self.redoIt()