def setTool_putObjectOnGround(evt=0): if not cmds.pluginInfo('sgPutObjectOnGround', q=1, l=1): appendPluginPath() cmds.loadPlugin('sgPutObjectOnGround') cmds.setToolTo('sgPutObjectOnGroundContext1') cmds.select(d=1)
def setTool_putObjectOnGround( evt=0 ): if not cmds.pluginInfo( 'sgPutObjectOnGround', q=1, l=1 ): appendPluginPath() cmds.loadPlugin( 'sgPutObjectOnGround' ) cmds.setToolTo( 'sgPutObjectOnGroundContext1' ) cmds.select( d=1 )
def softSelectionClusterWeights(*args): sel = mc.ls(sl=True, o=True) if not sel: raise RuntimeError('Please select some vertices.') weights = getSoftSelectionWeights() if not weights: raise RuntimeError('Please select some vertices.') #get manipulator position for pivot mc.setToolTo('Move') moveMode = mc.manipMoveContext('Move', query=True, mode=True) mc.manipMoveContext('Move', edit=True, mode=0) position = mc.manipMoveContext('Move', query=True, position=True) mc.manipMoveContext('Move', edit=True, mode=moveMode) clusterNode, clusterHandle = mc.cluster(sel[0]) for vert in mc.ls(sel[0]+'.vtx[*]', fl=True, l=True): weight = 0.0 if vert in weights.keys(): weight = weights[vert] mc.percent(clusterNode, vert, v=weight) #set cluster pivot mc.xform(clusterHandle, a=True, ws=True, piv=(position[0], position[1], position[2])) clusterShape = mc.listRelatives(clusterHandle, c=True, s=True) mc.setAttr(clusterShape[0] + '.origin', position[0], position[1], position[2])
def duplicate_guide_ctx(ui): global SCALP global DESCRIPTION if cmds.draggerContext(_DUPLICATE_GUIDE_CTX, exists=True): cmds.deleteUI(_DUPLICATE_GUIDE_CTX) name = ui.xgen_description_lineEdit.text() if not name: pm.displayWarning("No Xgen IGS description selected") return if not pm.selected(): pm.displayWarning("Nothing selected to duplicate") return DESCRIPTION = xgen_handler.get_description(name) SCALP = xgen_handler.get_scalp(DESCRIPTION) cmds.draggerContext( _DUPLICATE_GUIDE_CTX, pressCommand=partial(duplicate_guide_rig, ui), dragCommand=partial(drag_guide_rig, ui, _DUPLICATE_GUIDE_CTX), releaseCommand=release_guide_rig, name=_DUPLICATE_GUIDE_CTX, cursor='crossHair', undoMode='step') cmds.setToolTo(_DUPLICATE_GUIDE_CTX)
def scaleTool(self): try: if Cache.keyOffset == 0: cmds.manipScaleContext('myScale', edit=True, mode=2) # world mode Cache.currentContext = 'myScale' self.setAttributes() else: cmds.manipScaleContext('myScale', edit=True, mode=0) # object mode Cache.currentContext = 'myScale' self.setAttributes() except: if Cache.keyOffset == 0: cmds.manipScaleContext('myScale', mode=2) # world mode Cache.currentContext = 'myScale' self.setAttributes() else: cmds.manipScaleContext('myScale', mode=0) # object mode Cache.currentContext = 'myScale' self.setAttributes() cmds.setToolTo(Cache.currentContext) # #Tool = Tools()
def getPoint(clickPosition, createFollicle=1): currentSel = cmd.ls(sl=1) # Get ray information. shapes, clickPoint, clickDirection = castRay(clickPosition) # Find intersect points surfaceData = [] for mesh in shapes: resultData = rayIntersect(mesh, clickPoint, clickDirection) if resultData: surfaceData.append(resultData) # If we got a point if surfaceData: # Sort points by distance. surfaceData.sort(key=attrgetter('distance')) surfaceData = surfaceData[0] if createFollicle: surfaceData.follicle = createFollicleAtPoint(surfaceData) # Set tool to move tool. cmd.setToolTo('moveSuperContext') else: surfaceData = None om.MGlobal.displayError('Sorry, I think you need to click on something for this whole process to work. You click. Me trace.') # Reselect old stuff if currentSel: cmd.select(currentSel) else: cmd.select(cl=1) return surfaceData
def selectTool(self): selectAttributes = [('Normal', 'options = 4'), ('Reflection', '.options = 4')] paintAttributes = [('Select', 'options = 4'), ('Soft Select', '.options = 4'), ('Brush Size', '.options = 4')] try: if Cache.keyOffset == 0: cmds.selectContext('mySelect', edit=True) Cache.currentContext = 'mySelect' self.setAttributes(selectAttributes) elif Cache.keyOffset == 1: cmds.artSelectCtx('myPaintSelect', edit=True) Cache.currentContext = 'myPaintSelect' self.setAttributes(paintAttributes) elif Cache.keyOffset == 2: Cache.currentContext = 'selectDragger' self.primitiveTool() except: if Cache.keyOffset == 0: cmds.selectContext('mySelect') Cache.currentContext = 'mySelect' self.setAttributes(selectAttributes) elif Cache.keyOffset == 1: cmds.artSelectCtx('myPaintSelect') Cache.currentContext = 'myPaintSelect' self.setAttributes(paintAttributes) elif Cache.keyOffset == 2: Cache.currentContext = 'selectDragger' self.primitiveTool() if Cache.currentContext != 'selectDragger': cmds.setToolTo(Cache.currentContext)
def vertexMergeTool(self): length = len(self.getSelection()) if self.getSelection( ) == 'None': # set tool to the merge vertex tool if no verts are selected cmds.setToolTo('polyMergeVertexContext') else: # if verts are already selected, then run the commands below if self.getType( 0 ) == 'vertex': # check to see if the selection is of the vertex type, in case the mask is set to vert but the sel is edge etc. if length == 2: cmds.polyMergeVertex(alwaysMergeTwoVertices=True) elif length > 2: cmds.polyMergeVertex(distance=0.001) newLength = len(self.getSelection()) if newLength == length: # Nothing was merged because the before and after are the same, state so cmds.headsUpMessage(str(length) + ' Verts Selected - 0 Merged', verticalOffset=-100, horizontalOffset=-200) else: # means a merge did happen, so tell how many were merged and how many are left now cmds.headsUpMessage('FROM ' + str(length) + ' TO ' + str(newLength), verticalOffset=-100, horizontalOffset=-200) else: cmds.warning('Vertex not selected')
def splitFaceTool(self): cmds.polySplitCtx('polySplitContext', edit=1, snaptoedge=1, enablesnap=1, precsnap=10) cmds.setToolTo('polySplitContext')
def create(self,*args,**kwargs ): # Delete if it exists if cmds.draggerContext(self.name,query=True,exists=True): cmds.setToolTo('selectSuperContext') cmds.selectMode(object=True) cmds.deleteUI(self.name) cmds.draggerContext( self.name, image1 = self.IMAGE, undoMode = self.undoMode, projection = self.projection, space = self.space, initialize = self._initialize, pressCommand = self._press, releaseCommand = self._release, finalize = self._finalize, cursor=self.cursor, drawString="Test", *args,**kwargs ) if self.projection == 'plane': cmds.draggerContext(self.name,e=True, plane=self.plane) if self.enable_drag: cmds.draggerContext(self.name,e=True, dragCommand=self._drag) self.set_tool()
def import_vertex_color(mesh, texture): u"""頂点カラーをテクスチャからインポート Args: mesh (unicode): 対象のMesh texture (unicode): 対象のテクスチャパス """ if not os.path.isfile(texture): dialog.open_warning_dialog(u"指定されたファイルが見つかりません。") return cmds.select(cl=True) default_ctx = cmds.currentCtx() mel.eval("artAttrColorPerVertexToolScript 4;") cmds.select(mesh) cmds.artAttrPaintVertexCtx(cmds.currentCtx(), e=True, importfileload=texture) cmds.setToolTo(default_ctx) cmds.select(cl=True) cmds.select(mesh, add=True) mel.eval('doBakeNonDefHistory( 1, {"prePost"});') # ブレンドシェイプのinputTargetsにも頂点カラーが伝播するので削除する input_targets = _get_input_targets(mesh) if input_targets: cmds.select(input_targets) cmds.polyColorPerVertex(remove=True) for t in input_targets: cmds.setAttr(t + ".displayColors", 0) dialog.open_in_view_message("Import Color Vertex", u"頂点カラーのインポートが完了しました。")
def ParamChange(self): try: oObj = cmds.ls(sl=True, type="transform") FirstObj = oObj[0].split("_")[-1] except: cmds.warning(u'選択して実行してください。') cmds.confirmDialog(title='ChangeOrder', m=u'選択して実行してください。', icon='warning') return if FirstObj != "TempObj": oLoc = cmds.spaceLocator(n=oObj[0] + "_TempObj")[0] cmds.addAttr(oLoc, sn="OriSel", ln="Original_Selection", dt="string") cmds.setAttr(oLoc + ".Original_Selection", oObj, type="string") PointCons = cmds.pointConstraint(oObj[0], oLoc, n="Dummy_point") OrientCons = cmds.orientConstraint(oObj[0], oLoc, n="Dummy_orient") else: oLoc = cmds.ls(sl=True)[0] cmds.setToolTo('RotateSuperContext') Rotate_Mode = cmds.manipRotateContext('Rotate', q=True, mode=True) cmds.manipRotateContext('Rotate', e=True, mode=2) oOrder = cmds.optionMenu('Check_Order_List', q=True, sl=True) if oOrder == 1: cmds.setAttr(oLoc + ".rotateOrder", 0) elif oOrder == 2: cmds.setAttr(oLoc + ".rotateOrder", 1) elif oOrder == 3: cmds.setAttr(oLoc + ".rotateOrder", 2) elif oOrder == 4: cmds.setAttr(oLoc + ".rotateOrder", 3) elif oOrder == 5: cmds.setAttr(oLoc + ".rotateOrder", 4) elif oOrder == 6: cmds.setAttr(oLoc + ".rotateOrder", 5)
def paint(mesh, influence): """ Initialize the remove influence context. Once this command is run the context will be set as the active tool. :param str mesh: :param str influence: """ # initialize paint tool cmds.paintRemoveInfluenceCtxInitialize(mesh, influence) # initialize context if not cmds.artSelectCtx(CONTEXT, query=True, exists=True): cmds.artSelectCtx(CONTEXT) cmds.artSelectCtx(CONTEXT, edit=True, beforeStrokeCmd=CONTEXT_BEFORE, afterStrokeCmd=CONTEXT_AFTER, selectop="unselect", outwhilepaint=True, brushfeedback=False) # set tool cmds.setToolTo(CONTEXT)
def snapTemplateToPivot(): # Get selection selection = cmds.ls (sl=True) length = len(selection) # If statement to see if enough things were selected if length < 2: print "Not enough things selected to run script." else: # First thing selected is controller thingA = selection[0] # Second thing selected is the object/component you want to snap template to thingB = selection[1] # Get position of thingB cmds.select (thingB, r=True) cmds.setToolTo('moveSuperContext') tempLOC = cmds.spaceLocator(p=cmds.manipMoveContext('Move', q=True, p=True), a=True) cmds.xform(cp=True) locPos = cmds.xform (tempLOC, q=True, rp=True, ws=True) # put thing A in the position of thing B cmds.move (locPos[0], locPos[1], locPos[2], thingA, a=True, ws=True, rpr=True) # Delete temporary locator cmds.delete (tempLOC)
def exit_tool_and_mask(): """Exit current tool or toggle selection mode. When working with other contexts in maya use this function to exit the current context and return to selection context; if you are using base tools ('select', move, rotate, scale) toggle selection mode instead. Usage: tool_select() """ # base_tools = ['{}SuperContext'.format(i) for i in ('select', 'move', 'rotate', 'scale')] if not cmds.currentCtx() == 'selectSuperContext': cmds.setToolTo('selectSuperContext') else: if cmds.selectMode(q=True, object=True): hilited = mampy.daglist(hl=True) if hilited: cmds.hilite(hilited.cmdslist(), toggle=True) cmds.select(hilited.cmdslist()) else: cmds.selectMode(component=True) else: cmds.selectMode(object=True)
def primitiveActions(self, toolName, createCommand): if 'Ctx' in toolName or 'Context' in toolName: if self.getType(0) == 'None': cmds.setToolTo(toolName) else: if len(self.getSelection()) == 1: location = self.getMiddle()[0] exec createCommand cmds.xform(t = location) else: items = [] for i in self.getSelection(): cmds.select(i) location = self.getMiddle()[0] exec createCommand items.append(cmds.ls(selection=True)) cmds.xform(t = location) cmds.select(clear = 1) for i in items: cmds.select(i, add = 1) elif 'cmds' in toolName: # execute the first command if self.getType(0) == 'None': exec toolName else: exec createCommand cmds.warning('section action when something is selected not yet implimented')
def start_translate(): global CAMERA global MOVE_DATA global MOUSE_START if cmds.draggerContext(ZOOM_TRANSLATE, q=True, bu=True) == 1: cmds.setToolTo('selectSuperContext') cmds.warning( 'Use the middle mouse button to slide objects toward/away from camera' ) return sel = cmds.ls(sl=1, fl=1) # Probably should eventually put some logic here to validate the selection if len(sel) == 0: cmds.setToolTo('selectSuperContext') print 'Nothing selected' return active_panel = cmds.getPanel(wf=True) CAMERA = cmds.modelPanel(active_panel, q=True, cam=True) CAMERA = CAMERA.replace('Shape', '') target_loc = cmds.xform(CAMERA, q=True, ws=True, a=True, rp=True) destination_vec = om.MVector(target_loc) MOUSE_START = cmds.draggerContext(ZOOM_TRANSLATE, q=True, ap=True) for each in sel: loc = cmds.xform(each, q=True, ws=True, a=True, rp=True) vec = om.MVector(loc) diff_vec = vec - destination_vec MOVE_DATA[each] = [vec, diff_vec]
def restore_context_and_axis(): global current_mode global pre_mode current_mode = cmds.selectMode(q=True, o=True) current_tool = cmds.currentCtx() target_tool_list = [ 'scaleSuperContext', 'RotateSuperContext', 'moveSuperContext', 'selectSuperContext' ] #選択オブジェクトが切り替わったときだけ切り替え実行 if cmds.selectMode(q=True, co=True): if cmds.ls(sl=True, type='transform'): #複合選択モードの時は逃げる print 'multi selection mode return :' return if cmds.ls(sl=True, set=True): #複合選択モードの時は逃げる print 'multi selection mode return :' return if 'pre_sel_comp' in globals(): current_selection = cmds.ls(sl=True) if pre_sel_comp != current_selection: if current_tool in target_tool_list: if not cmds.ls(sl=True): if pre_sel_comp: #print 'newsel' try: cmds.select(pre_sel_comp[0]) except: pass if cmds.ls(sl=True): sb.window.select_xyz_from_manip( ) #事前に選択したハンドル方向をなるべくキープする if current_selection != cmds.ls(sl=True): cmds.select(current_selection, r=True) global pre_sel_comp pre_sel_comp = cmds.ls(sl=True) #Flatにすると比較が無駄に重くなるので注意 if cmds.selectMode(q=True, o=True): if 'pre_sel_obj' in globals(): current_selection = cmds.ls(sl=True, o=True) if pre_sel_obj != current_selection: if current_tool in target_tool_list: #print 'ajust context' if not cmds.ls(sl=True): if cmds.ls(hl=True): #ラティスポイントとかの時は逃げる return if pre_sel_obj: #print 'newsel' try: cmds.select(pre_sel_obj[0]) except: pass if cmds.ls(sl=True): sb.window.select_xyz_from_manip( ) #事前に選択したハンドル方向をなるべくキープする if current_selection != cmds.ls(sl=True): cmds.select(current_selection, r=True) cmds.setToolTo('selectSuperContext') cmds.setToolTo(current_tool) global pre_sel_obj pre_sel_obj = cmds.ls(sl=True, o=True) pre_mode = current_mode
def install_module(self, module, *args): basename = "instance_" cmds.namespace(setNamespace=":") namespaces = cmds.namespaceInfo(listOnlyNamespaces=True) for i in range(len(namespaces)): if namespaces[i].find("__") != -1: namespaces[i] = namespaces[i].partition("__")[2] new_suffix = utils.find_highest_trailing_number(namespaces, basename) + 1 user_specified_name = basename + str(new_suffix) hook_obj = self.find_hook_obj_from_selection() mod = __import__("blueprint." + module, {}, {}, [module]) reload(mod) module_class = getattr(mod, mod.CLASS_NAME) module_instance = module_class(user_specified_name, hook_obj) module_instance.install() module_trans = mod.CLASS_NAME + "__" + user_specified_name + ":module_transform" cmds.select(module_trans, replace=True) cmds.setToolTo("moveSuperContext")
def testObjectPosition(self): """ Tests that an object created interactively is positioned correctly on the live surface. """ # Make our proxy shape live. cmds.makeLive('Block_1') # Enter interactive creation context. cmds.setToolTo('CreatePolyTorusCtx') # Click in the center of the viewport widget. QTest.mouseClick(self._viewWidget, QtCore.Qt.LeftButton, QtCore.Qt.NoModifier, self._viewWidget.rect().center()) # Find the torus (it should be called pTorus1). self.assertTrue(cmds.ls('pTorus1')) # Check the torus's transform. # The Block_1 is originally 1 unit deep and centered at the origin, so # its original top plane is aligned at z=0.5. # It is scaled 5x, which makes the top plane aligned at z=2.5. # Then it is translated along z by 4.0, so its top plane is finally # aligned at z=6.5. translate = cmds.xform('pTorus1', q=True, t=True) self.assertAlmostEqual(translate[2], 6.5, places=3)
def build(self, *a, **kw): if mc.draggerContext(self.name, query=True, exists=True): # if it exists, delete it mc.setToolTo('selectSuperContext') mc.selectMode(object=True) mc.deleteUI(self.name) imageFilePath = ('cgmDefault.png') mc.draggerContext(self.name, image1=imageFilePath, undoMode=self.undoMode, projection=self.projection, space=self.space, initialize=self.initialPress, pressCommand=self.press, releaseCommand=self.release, finalize=self.finalize, *a, **kw) if self.projection == 'plane': mc.draggerContext(self.name, e=True, plane=self.plane ) # if our projection is 'plane', set the plane if self.dragOption: mc.draggerContext( self.name, e=True, dragCommand=self.drag) # If drag mode, turn it on
def selectTool(self): selectAttributes = [ ('Normal', 'options = 4'), ('Reflection', '.options = 4') ] paintAttributes = [ ('Select', 'options = 4'), ('Soft Select', '.options = 4'), ('Brush Size', '.options = 4') ] try: if Cache.keyOffset == 0: cmds.selectContext('mySelect', edit = True) Cache.currentContext = 'mySelect' self.setAttributes ( selectAttributes ) elif Cache.keyOffset == 1: cmds.artSelectCtx('myPaintSelect', edit = True) Cache.currentContext = 'myPaintSelect' self.setAttributes ( paintAttributes ) elif Cache.keyOffset == 2: Cache.currentContext = 'selectDragger' self.primitiveTool() except: if Cache.keyOffset == 0: cmds.selectContext ( 'mySelect' ) Cache.currentContext = 'mySelect' self.setAttributes ( selectAttributes ) elif Cache.keyOffset == 1: cmds.artSelectCtx ( 'myPaintSelect' ) Cache.currentContext = 'myPaintSelect' self.setAttributes ( paintAttributes ) elif Cache.keyOffset == 2: Cache.currentContext = 'selectDragger' self.primitiveTool() if Cache.currentContext != 'selectDragger': cmds.setToolTo( Cache.currentContext )
def install_module(self,module,*args): basename = "instance_" cmds.namespace(setNamespace =":") namespaces = cmds.namespaceInfo(listOnlyNamespaces=True) for i in range(len(namespaces)): if namespaces[i].find("__") != -1: namespaces[i] = namespaces[i].partition("__")[2] new_suffix = utils.find_highest_trailing_number(namespaces, basename)+1 user_specified_name = basename+str(new_suffix) hook_obj = self.find_hook_obj_from_selection() mod = __import__("blueprint."+module, {}, {}, [module]) reload(mod) module_class = getattr(mod, mod.CLASS_NAME) module_instance = module_class(user_specified_name, hook_obj) module_instance.install() module_trans = mod.CLASS_NAME+"__"+user_specified_name+":module_transform" cmds.select(module_trans,replace=True) cmds.setToolTo("moveSuperContext")
def editPivotHandle(self): qt_maya_window.installEventFilter(self.keypressFilter) #create transform self.pivotHandle = mc.group(em=True, name='Adjust_Pivot') mc.setAttr(self.pivotHandle+'.rotate', lock=True) mc.setAttr(self.pivotHandle+'.rx', keyable=False) mc.setAttr(self.pivotHandle+'.ry', keyable=False) mc.setAttr(self.pivotHandle+'.rz', keyable=False) mc.setAttr(self.pivotHandle+'.scale', lock=True) mc.setAttr(self.pivotHandle+'.sx', keyable=False) mc.setAttr(self.pivotHandle+'.sy', keyable=False) mc.setAttr(self.pivotHandle+'.sz', keyable=False) mc.setAttr(self.pivotHandle+'.visibility', lock=True, keyable=False) mc.setAttr(self.pivotHandle+'.displayHandle', True) self.pivotHandle = mc.parent(self.pivotHandle, self.node)[0] mc.addAttr(self.pivotHandle, ln='ml_pivot_handle', at='bool', keyable=False) #set initial position mc.setAttr(self.pivotHandle+'.translate', *mc.getAttr(self.node+'.rotatePivot')[0]) #lock it so you don't delete it or something. mc.lockNode(self.pivotHandle, lock=True) self.scriptJob = mc.scriptJob(event=['SelectionChanged', self.cleanup], runOnce=True) mc.setToolTo('Move') mc.inViewMessage( amg='After moving the pivot, press <hl>Return</hl> to bake or <hl>Esc</hl> to cancel.', pos='midCenterTop', fade=True, fadeStayTime=4000, dragKill=True)
def selectGeoContextPress(self): pressPosition = cmds.draggerContext('selGeoContext', query=True, anchorPoint=True) # grabbing current 3d view active_view = apiUI.M3dView.active3dView() # Screen position of mouse x = int(pressPosition[0]) y = int(pressPosition[1]) #making my ray source and direction ray_source = OpenMaya.MPoint() ray_direction = OpenMaya.MVector() #Converting to world active_view.viewToWorld(x, y, ray_source, ray_direction) #Select from screen om.MGlobal.selectFromScreen(x, y, om.MGlobal.kReplaceList) objects = om.MSelectionList() om.MGlobal.getActiveSelectionList(objects) #Convert from MSelectionList object to string fromScreen = [] objects.getSelectionStrings(fromScreen) self.headGeom = fromScreen[0] if cmds.objExists(fromScreen[0]): self.createHeadLoc() cmds.setToolTo('moveSuperContext') self.updateWindow()
def atPoint(settings=None): '''Creates a context in which the user can click on an object in the scene and a point will be traced on that mesh, using either a follicle or the nearest point on the mesh. This function takes the same settings dictionary that getShortcut creates.''' # Test for plugin. if not pluginLoaded(): return if not settings: settings = {} if pointOnMesh: if cmd.draggerContext(CONTEXTNAME, q=1, ex=1): cmd.deleteUI(CONTEXTNAME) # I have found no way to test if an icon exists, other than to # just attempt to create something with that icon. kwargs = {'releaseCommand': partial(getPoint, settings=settings), 'cursor': 'crossHair', 'image1': 'arcTracerOnMesh.png'} try: cmd.draggerContext(CONTEXTNAME, **kwargs) except RuntimeError: kwargs['image1'] = None cmd.draggerContext(CONTEXTNAME, **kwargs) cmd.setToolTo(CONTEXTNAME) else: om.MGlobal.displayWarning("Could not find module pointOnMesh. You must install pointOnMesh to use this functionality.")
def emit(self, *args): """ run the actual sample command and check if transforms are frozen """ # exit spore context since it looses track of points after sampling if cmds.currentCtx().startswith('spore'): cmds.setToolTo('selectSuperContext') in_mesh = node_utils.get_connected_in_mesh(self._node) transform = cmds.listRelatives(in_mesh, p=True, f=True)[0] if cmds.getAttr(transform + '.translateX') != 0\ or cmds.getAttr(transform + '.translateY') != 0\ or cmds.getAttr(transform + '.translateZ') != 0\ or cmds.getAttr(transform + '.rotateX') != 0\ or cmds.getAttr(transform + '.rotateY') != 0\ or cmds.getAttr(transform + '.rotateZ') != 0\ or cmds.getAttr(transform + '.scaleX') != 1\ or cmds.getAttr(transform + '.scaleY') != 1\ or cmds.getAttr(transform + '.scaleZ') != 1: msg = 'Feeze transformations to sample the geomety!' result = message_utils.IOHandler().confirm_dialog(msg, 'Freeze Transformations') if result: cmds.makeIdentity(transform, a=True, s=True, r=True, t=True, n=0) else: return cmds.setAttr('{}.emit'.format(self._node), 1) cmds.sporeSampleCmd()
def installModule(self, module, *args): basename = "instance_" #set namespace equals to root cmds.namespace(setNamespace=":") namespaces = cmds.namespaceInfo(listOnlyNamespaces=True) # if any contains "__" we want to delete for i in range(len(namespaces)): #if found if namespaces[i].find("__") != -1: namespaces[i] = namespaces[i].partition("__")[2] newSuffix = utils.findHighestTrailingNumber(namespaces,basename) + 1 userSpecName = basename + str(newSuffix) hookObj = self.findHookObjectFromSelection() mod =__import__("Blueprint."+module,{},{}, [module]) reload(mod) moduleClass = getattr(mod, mod.CLASS_NAME) moduleInstance = moduleClass(userSpecName, hookObj) moduleInstance.install() #Select the module outline and Make move Tool ACTIVE moduleTransform = mod.CLASS_NAME + "__" + userSpecName + ":module_transform" cmds.select(moduleTransform, replace=True) cmds.setToolTo("moveSuperContext")
def captureManipPiv(): mmc = cmds.manipMoveContext() cmds.setToolTo(mmc) manipLoc = cmds.manipMoveContext(mmc, q=True, p=True) rotObj = cmds.xform(q=True, ws=True, ro=True) posCopy = cmds.xform(q=True, ws=True, t=True) scaleCopy = cmds.xform(q=True, ws=True, s=True) manipPos = [] transObj = [] scaleObj = [] if manipLoc: for num in manipLoc: numFloat = float(num) numRound = round(numFloat,5) manipPos.append(numRound) cmds.setToolTo('moveSuperContext') cmds.deleteUI(mmc) for trans in posCopy: posFloat = float(trans) posRound = round(posFloat,5) transObj.append(posRound) for scale in scaleCopy: scaleFloat = float(scale) scaleRound = round(scaleFloat,5) scaleObj.append(scaleRound) # insert field values cmds.floatFieldGrp('nwSAK_manipPivot',e=True,v1=manipPos[0],v2=manipPos[1],v3=manipPos[2]) cmds.floatFieldGrp('nwSAK_transPivots',e=True,v1=transObj[0],v2=transObj[1],v3=transObj[2]) cmds.floatFieldGrp('nwSAK_rotPivots',e=True,v1=rotObj[0],v2=rotObj[1],v3=rotObj[2]) cmds.floatFieldGrp('nwSAK_scalePivots',e=True,v1=scaleObj[0],v2=scaleObj[1],v3=scaleObj[2]) # line else: nmGUI_func.nmGUI_runCheck('error','No pivot object(s) selected')
def stateFromFileInfo(): from fnmatch import fnmatch selInfo = m.fileInfo('onSaveSelection', q=1) if len(selInfo) != 0: sel = [] for i in selInfo[0].split('?'): if m.objExists(i): sel.append(i) if len(sel): m.select(sel) hilite = [] c1 = ['f[*','e[*','map[*','vtx[*','vtxFace[*'] c2 = ['facet','edge','puv','vertex','pvf'] for x in sel: if x.count('.'): parts = x.split('.') for i in range(5): if fnmatch(parts[1],c1[i]) and parts[0] not in hilite: hilite.append(parts[0]) mel.eval('doMenuComponentSelection("' + parts[0] + '", "' + c2[i] + '");') ctxInfo = m.fileInfo('onSaveCtx', q=1) if len(ctxInfo) != 0: print ('ctxInfo: ' + str(ctxInfo)) try: m.setToolTo(ctxInfo[0]) except: print 'could not set "' + ctxInfo[0] + '"!'
def installModule(self, module, *arg): basename = 'instance_' cmds.namespace(setNamespace=":") namespaces = cmds.namespaceInfo(listOnlyNamespaces=True) for i in range(len(namespaces)): if namespaces[i].find('__') != -1: namespaces[i] = namespaces[i].partition('__')[2] newSuffix = utils.findHighestTrailingNumber(namespaces, basename) + 1 userSpecName = basename + str(newSuffix) hookObj = self.findHookObjectFromSelection() mod = __import__('Blueprint.'+ module,{},{},[module]) reload(mod) moduleClass = getattr(mod, mod.CLASS_NAME) moduleInstance = moduleClass(userSpecName, hookObj) moduleInstance.install() #this is to make sure move tool is selected by default moduleTransform = mod.CLASS_NAME + '__' + userSpecName + ':module_transform' cmds.select(moduleTransform, replace=True) cmds.setToolTo('moveSuperContext')
def primitiveActions(self, toolName, createCommand): if 'Ctx' in toolName or 'Context' in toolName: if self.getType(0) == 'None': cmds.setToolTo(toolName) else: if len(self.getSelection()) == 1: location = self.getMiddle()[0] exec createCommand cmds.xform(t=location) else: items = [] for i in self.getSelection(): cmds.select(i) location = self.getMiddle()[0] exec createCommand items.append(cmds.ls(selection=True)) cmds.xform(t=location) cmds.select(clear=1) for i in items: cmds.select(i, add=1) elif 'cmds' in toolName: # execute the first command if self.getType(0) == 'None': exec toolName else: exec createCommand cmds.warning( 'section action when something is selected not yet implimented' )
def OnStartRotate( self, *args ): if ( self.ButtonIsStart ): self.ObjectsToRotate = [ ] cmds.makeIdentity( self.DummyNode, rotate = True ); # nos quedamos con los objetos seleccionados if ( self.SelectedObjects is not None ): for i in range( 0, len( self.SelectedObjects ) ): newObject = MTRotatorObject( self.SelectedObjects[ i ] ) # se lleva el pivote a la posicion origen de rotacion newObject.StartRotation( self.RotatePosition ) self.ObjectsToRotate.append( newObject ) # se addea el nodo dummy a la lista de seleccionados MTUSetPosition( self.DummyNode, self.RotatePosition ) self.IgnoreSelectionChangeEvent = True cmds.select( self.DummyNode, add = True ) cmds.setToolTo( self.ManipRotate ) # .. self.SetStartButtonState( False, True ) else: # stop self.EndRotation( False, False )
def extrude_edge_uv(self): self.ex_edges = [] sel = cmds.ls(sl=True) self.s_edges = common.conv_comp(sel, mode='edge') s_vtx = common.conv_comp(sel, mode='vtx') #self.saw_uvs(mode='pre')#事前に押し出し対象のUVを縫い合わせておく self.marge_uvs(mode='pre') if not self.s_edges: return ev_dict, vec_dict, ev_uv_dict = self.make_edge_vtx_dict(self.s_edges) #print 'ev_dict :', ev_dict #print 'vec_dict :', vec_dict #押し出しを実行する cmds.polyExtrudeEdge(self.s_edges, keepFacesTogether=True, smoothingAngle=self.soft_angle.value(), translate=[0, 0, 0]) self.ex_edges = cmds.ls(sl=True) n_edges = common.conv_comp(self.ex_edges, mode='edge') n_faces = common.conv_comp(self.ex_edges, mode='face') self.n_uvs = common.conv_comp(n_faces, mode='uv') #print 'pre_move_uvs :', self.n_uvs #根本の位置合わせする new_vec_dict = {} for nuv in self.n_uvs[:]: vtx = common.conv_comp(nuv, mode='vtx')[0] edge = common.conv_comp(nuv, mode='edge')[0] if edge + ' ' + vtx in ev_dict.keys(): uv_pos = ev_dict[edge + ' ' + vtx] #print 'get_uv_pos', nuv, uv_pos cmds.polyEditUV(nuv, u=uv_pos[0], v=uv_pos[1], r=False) self.n_uvs.remove(nuv) key_uv = ev_uv_dict[edge + ' ' + vtx] new_vec_dict[nuv] = vec_dict[key_uv] #print 'post push uvs :', self.n_uvs #押し出し先を根本につけて押し出しベクトル辞書をつくる self.uv_vec_dict = {} self.base_pos_dict = {} for nuv in self.n_uvs: edges = common.conv_comp(nuv, mode='edge') face = common.conv_comp(nuv, mode='face') f_uvs = common.conv_comp(face, mode='uv') for edge in edges: if edge in n_edges: continue #print 'get new edge :', edge e_uvs = common.conv_comp(edge, mode='uv') l_uvs = list(set(f_uvs) & set(e_uvs)) #print 'new edge uvs :', l_uvs for uv in l_uvs: if not uv in new_vec_dict.keys(): continue uv_pos = cmds.polyEditUV(uv, query=True) cmds.polyEditUV(nuv, u=uv_pos[0], v=uv_pos[1], r=False) self.uv_vec_dict[nuv] = new_vec_dict[uv] self.base_pos_dict[nuv] = uv_pos self.saw_edges.append(edge) #縫い合わせ用リストに入れておく self.push_out() cmds.setToolTo('moveSuperContext')
def buildUI(self) : self.resetExternalContext() self.window = cmds.window("autorigging_ui", title="Auto-rigging (BB, EL, TP)", w=self.width, h=self.height) # Title cmds.columnLayout(w=self.width, h=self.height) cmds.separator(h=10) cmds.text(label="Autorigging", w=self.width,h=20, backgroundColor=[0.15,0.15,0.15]) cmds.separator(h=10) # Mesh selector self.meshSelector = cmds.optionMenu(w=self.width,h=30,label="Choisissez un Mesh :") for m in cmds.ls(type="transform"): cmds.menuItem(label=str(m)) cmds.separator(h=40) # Point buttons cmds.scrollLayout(w=self.width) self.definePointButtons() # Action buttons (enter mode) cmds.setParent("..") cmds.setParent("..") # Here to exit scrollLayout cmds.separator(h=10) cmds.rowLayout(numberOfColumns=3) self.activateButton = cmds.button("activetaBtn", label="Activer", w=self.width/3 - 10, h=self.pointButtonHeight, command=self.onActivateButtonClick ) self.generateButton = cmds.button("generateBtn", label="Generer", w=self.width/3 - 10, h=self.pointButtonHeight, command=self.onGenerateButtonClick ) self.autoGenerateButton = cmds.button("generateAutoRigBtn", label="AutoGenerer", w=self.width/3 - 10, h=self.pointButtonHeight, command=self.onAutoRigButtonClick ) # Console cmds.setParent("..") cmds.columnLayout() cmds.separator(h=10) self.consoleText = cmds.text(label="Auto-rigging non-actif", width=self.width, height=50, backgroundColor=[0.3,0.3,0.3]) cmds.showWindow(self.window) cmds.draggerContext("riggingContext", space="world", pressCommand=self.on3DSceneClick) # Registring context ? cmds.setToolTo("riggingContext")
def clear(self, *args): if cmds.iconTextButton("TempCustomPivotBtn", query=True, exists=True): cmds.iconTextButton( "TempCustomPivotBtn", edit=True, image=uiMod.getImagePath( "specialTools_create_temp_custom_pivot"), highlightImage=uiMod.getImagePath( "specialTools_create_temp_custom_pivot copy")) cmds.refresh(suspend=True) currFrame = cmds.currentTime(query=True) loadConstraints = aToolsMod.loadInfoWithScene(self.STORE_NODE, self.CONSTRAINTS) loadLocators = aToolsMod.loadInfoWithScene(self.STORE_NODE, self.LOCATORS) loadCtrls = aToolsMod.loadInfoWithScene(self.STORE_NODE, self.CTRLS) currentFrame = aToolsMod.loadInfoWithScene(self.STORE_NODE, self.CURRENTFRAME) #exit edit mode if cmds.currentCtx() not in self.deniedCtx: cmds.setToolTo(cmds.currentCtx()) if currentFrame: cmds.currentTime(eval(currentFrame)) #get values """ translation = [] rotation = [] if loadCtrls: ctrlObjs = eval(loadCtrls) for loopCtrl in ctrlObjs: translation.append(cmds.xform(loopCtrl, query=True, ws=True, rotatePivot=True)) rotation.append(cmds.xform(loopCtrl, query=True, ws=True, rotation=True)) """ if loadConstraints: constraintObjs = eval(loadConstraints) for loopConstraint in constraintObjs: if cmds.objExists(loopConstraint): cmds.delete(loopConstraint) if loadCtrls and loadLocators: locatorObjs = eval(loadLocators) ctrlObjs = eval(loadCtrls) for n, loopCtrl in enumerate(ctrlObjs): if cmds.objExists(loopCtrl) and cmds.objExists(locatorObjs[n]): G.aToolsBar.align.align([loopCtrl], locatorObjs[n]) for loopLocator in locatorObjs: if cmds.objExists(loopLocator): cmds.delete(loopLocator) cmds.currentTime(currFrame) cmds.refresh(suspend=False)
def autoMembershipCmd(): geo = _getGeoFromUI() rbsNode = geo and _getRbs(geo) if not rbsNode: raise Exception, 'No %s found' % _rbsNodeName # orig shape coords origShape = [s for s in cmds.listRelatives(geo, s=True, pa=True) if cmds.getAttr('%s.intermediateObject' % s)][0] origCoords = cmds.xform('%s.vtx[*]' % origShape, q=True, os=True, t=True) vtxCount = cmds.polyEvaluate(origShape, v=True) tidxList = _getEyeIdxList(rbsNode) shapeList = [] deleteList = [] # get connected shapes or regen them if absent for tidx in tidxList: for i in [0, 1]: attr = '%s.it[%d].%s' % (rbsNode, tidx, _targetAttrs[i]) connList = cmds.listConnections(attr, d=False) if connList: shapeList.append(connList[0]) elif cmds.getAttr(attr, type=True): obj = regenCmd(rbsNode, tidx, i == 1) shapeList.append(obj) deleteList.append(obj) modIdxSet = set() for shape in shapeList: targetCoords = cmds.xform('%s.vtx[*]' % shape, q=True, os=True, t=True) for idx in xrange(vtxCount): i = idx*3 if (abs(targetCoords[i]-origCoords[i]) > _autoMembTolerance) or (abs(targetCoords[i+1]-origCoords[i+1]) > _autoMembTolerance) or (abs(targetCoords[i+2]-origCoords[i+2]) > _autoMembTolerance): modIdxSet.add(idx) # delete any shape I created if deleteList: cmds.delete(deleteList) if len(modIdxSet) == 0: cmds.warning('No shape deltas found in %s. No point will be removed.' % geo) return # fill the set objSetNode = _getMembershipSet(rbsNode) cmds.sets('%s.vtx[*]' % geo, add=objSetNode) # remove from the set idxToRemSet = set(range(vtxCount)) - modIdxSet pListToRemove = ['%s.vtx[%d]' % (geo, idx) for idx in idxToRemSet] cmds.sets(pListToRemove, rm=objSetNode) # membership tool cmds.select(rbsNode) cmds.setToolTo('setEditContext') cmds.confirmDialog(t='Auto membership', m='Optimization complete.\nUsing %d of %d points.' % (len(modIdxSet), vtxCount))
def _testMultiSelectRotateUSD(self): '''Rotate multiple USD objects, read through Transform3d interface.''' # Select multiple balls to rotate them. proxyShapePathSegment = mayaUtils.createUfePathSegment( "|world|transform1|proxyShape1") balls = ['Ball_33', 'Ball_34'] ballPaths = [ ufe.Path([proxyShapePathSegment, usdUtils.createUfePathSegment('/Room_set/Props/'+ball)]) for ball in balls] ballItems = [ufe.Hierarchy.createItem(ballPath) for ballPath in ballPaths] for ballItem in ballItems: ufe.GlobalSelection.get().append(ballItem) # We compare the UFE rotation with the USD run-time rotation. To # obtain the full rotation of USD scene items, we need to add the USD # rotation to the Maya proxy shape rotation. proxyShapeXformObj = om.MSelectionList().add('transform1').getDagPath(0).node() proxyShapeXformFn = om.MFnTransform(proxyShapeXformObj) def usdSceneItemRotation(item): prim = usdUtils.getPrimFromSceneItem(item) if not prim.HasAttribute('xformOp:rotateXYZ'): return proxyShapeXformFn.rotation(om.MSpace.kTransform) else: x,y,z = prim.GetAttribute('xformOp:rotateXYZ').Get() return proxyShapeXformFn.rotation(om.MSpace.kTransform) + om.MEulerRotation(radians(x), radians(y), radians(z)) def ufeSceneItemRotation(item): return transform3dRotation(ufe.Transform3d.transform3d(item)) # Set up the callables that will retrieve the rotation. self.runTimeRotation = usdSceneItemRotation self.ufeRotation = ufeSceneItemRotation # Give the tail item in the selection an initial rotation that # is different, to catch bugs where the relative rotation # incorrectly squashes any existing rotation. backItem = ballItems[-1] backT3d = ufe.Transform3d.transform3d(backItem) initialRot = [-10, -20, -30] backT3d.rotate(*initialRot) assertVectorAlmostEqual(self, [radians(a) for a in initialRot], usdSceneItemRotation(backItem)) # Save the initial positions to the memento list. expected = [usdSceneItemRotation(ballItem) for ballItem in ballItems] # MAYA-96058: unfortunately, rotate command currently requires a rotate # manipulator to be created to update the UFE object. manipCtx = cmds.manipRotateContext() cmds.setToolTo(manipCtx) #Temporarily disabling undo redo until we fix it for PR 94 self.runMultiSelectTestRotate(ballItems, expected)
def testObjectNormal(self): """ Tests that an object created interactively by dragging in the viewport has the correct orientation based on the live surface normal. """ from pxr import Gf # Load our reference assembly. UsdMaya.LoadReferenceAssemblies() # Create a new custom viewport. window = cmds.window(widthHeight=(500, 400)) cmds.paneLayout() panel = cmds.modelPanel() cmds.modelPanel(panel, edit=True, camera='persp') cmds.modelEditor(cmds.modelPanel(panel, q=True, modelEditor=True), edit=True, displayAppearance='smoothShaded', rnm='vp2Renderer') cmds.showWindow(window) # Get the viewport widget. view = OMUI.M3dView() OMUI.M3dView.getM3dViewFromModelPanel(panel, view) viewWidget = wrapInstance(long(view.widget()), QWidget) # Make our assembly live. cmds.makeLive('Block_2') # Enter interactive creation context. cmds.setToolTo('CreatePolyConeCtx') # Click in the center of the viewport widget. QTest.mouseClick(viewWidget, QtCore.Qt.LeftButton, QtCore.Qt.NoModifier, viewWidget.rect().center()) # Find the cone (it should be called pCone1). self.assertTrue(cmds.ls('pCone1')) # Check the cone's rotation. # Because our scene is Z-axis up, the cone's Z-axis should be aligned # with Block_2's surface normal (though it might not necessarily have # the same exact rotation). rotationAngles = cmds.xform('pCone1', q=True, ro=True) rotation = (Gf.Rotation(Gf.Vec3d.XAxis(), rotationAngles[0]) * Gf.Rotation(Gf.Vec3d.YAxis(), rotationAngles[1]) * Gf.Rotation(Gf.Vec3d.ZAxis(), rotationAngles[2])) actualZAxis = rotation.TransformDir(Gf.Vec3d.ZAxis()) expectedRotation = (Gf.Rotation(Gf.Vec3d.XAxis(), 75.0) * Gf.Rotation(Gf.Vec3d.YAxis(), 90.0)) expectedZAxis = expectedRotation.TransformDir(Gf.Vec3d.ZAxis()) # Verify that the error angle between the two axes is less than # 0.1 degrees (less than ~0.0003 of a revolution, so not bad). That's # about as close as we're going to get. errorRotation = Gf.Rotation(actualZAxis, expectedZAxis) self.assertLess(errorRotation.GetAngle(), 0.1)
def forceSceneUpdate(): cmds.setToolTo("moveSuperContext") nodes=cmds.ls() for n in nodes: cmds.select(n, replace=True) cmds.select(clear=True) cmds.setToolTo("selectSuperContext")
def makeLocOnSel(self): tool = cmds.currentCtx() cmds.setToolTo('moveSuperContext') pos = cmds.manipMoveContext('Move', q=True, p=True) startLoc = cmds.spaceLocator(n=('skinWrangler_jointBboxLocator'))[0] cmds.move(pos[0], pos[1], pos[2], startLoc, ws=1, a=1) cmds.setToolTo(tool) return startLoc
def bufMoveRelease(): """release the Buf move vertex mode""" activePanel = cmds.getPanel(withFocus=True) cmds.modelEditor(activePanel, e=True, manipulators=True) cmds.setToolTo('moveSuperContext') cmds.selectPref(clickDrag=False) cmds.selectMode(component=True) cmds.selectMode(object=True)
def makeLocOnSel(self): tool = cmds.currentCtx() cmds.setToolTo( 'moveSuperContext' ) pos = cmds.manipMoveContext( 'Move', q=True, p=True ) startLoc = cmds.spaceLocator (n = ('skinWrangler_jointBboxLocator'))[0] cmds.move(pos[0] ,pos[1] ,pos[2] ,startLoc, ws = 1 , a =1) cmds.setToolTo(tool) return startLoc
def doIt(self, args): # Parse the arguments. argData = OpenMaya.MArgDatabase(syntaxCreator(), args) self.SOURCE = argData.commandArgumentString(0) if argData.isFlagSet(kRotationFlag) is True: self.ROTATION = argData.flagArgumentBool(kRotationFlag, 0) cmds.setToolTo(self.setupDragger())
def start_plant(self): if mc.draggerContext('plantTree', exists=True): mc.setToolTo('plantTree') else: mc.draggerContext('plantTree', pressCommand=partial(self.sample_context_press), dragCommand=partial(self.sample_context_drag), cursor='hand') mc.setToolTo('plantTree')
def get_tool_pivot_position(): """Get the current pivot from the move tool The current tool context is kept """ current_tool = cmds.currentCtx() cmds.setToolTo("Move") position = cmds.manipMoveContext('Move', query=True, position=True) cmds.setToolTo(current_tool) return position
def force_scene_update(): cmds.setToolTo("moveSuperContext") nodes = cmds.ls() for node in nodes: cmds.select(node, replace=True) cmds.select(clear=True) cmds.setToolTo("selectSuperContext")
def forceSceneUpdate(): cmds.setToolTo('moveSuperContext') nodes = cmds.ls() for node in nodes: cmds.select(node,replace=True) cmds.select(clear=True) cmds.setToolTo('selectSuperContext')
def show_UI(self): self.findSelectionToGroup() if len(self.objectsToGroup) == 0: return self.UIElements = {} if cmds.window("groupSelected_UI_window", exists=True): cmds.deleteUI("groupSelected_UI_window") windowWidth = 300 windowHeight = 180 self.UIElements["window"] = cmds.window("groupSelected_UI_window", width=windowWidth, height=windowHeight, title="Group Selected", sizeable=False) self.UIElements["topLevelColumn"] = cmds.columnLayout(adj=True, columnAlign="center", rs=3) # Sets up a text field for naming the group self.UIElements["groupName_rowColumn"] = cmds.rowColumnLayout(nc=2, columnAttach=(1, "right", 0), columnWidth=[(1, 80), (2,windowWidth-90)]) cmds.text(label="Group Name :") self.UIElements["groupName"] = cmds.textField(text="group") cmds.setParent(self.UIElements["topLevelColumn"]) self.UIElements["createAt_rowColumn"] = cmds.rowColumnLayout(numberOfColumns=3, columnAttach=(1, "right", 0), columnWidth=[(1, 80), (2, windowWidth-170), (3, 80)]) cmds.text(label="Position at :") cmds.text(label="") cmds.text(label="") cmds.text(label="") self.UIElements["createAt_lastSelected"] = cmds.button(label="Last Selected", c=self.createAtLastSelected) cmds.text(label="") cmds.text(label="") self.UIElements["createAt_averagePosition"] = cmds.button(label="Average Position", c=self.createAtAveragePosition) cmds.text(label="") cmds.setParent(self.UIElements["topLevelColumn"]) cmds.separator() columnWidth = (windowWidth/2) - 5 self.UIElements["button_row"] = cmds.rowLayout(nc=2, columnWidth=[(1, columnWidth), (2, columnWidth)], cat=[(1, "both", 10), (2, "both", 10)], columnAlign=[(1, "center"), (2, "center")]) cmds.button(label="Accept", c=self.acceptWindow ) cmds.button(label="Cancel", c=self.cancelWindow) cmds.showWindow(self.UIElements["window"]) # 063 self.createTemporaryGroupRepresentation() self.createAtLastSelected() # Select new translate control cmds.select(self.tempGroupTransform) cmds.setToolTo("moveSuperContext")
def getManipulatorPosition(): """ Returns: list """ cmds.setToolTo('Move') currentMoveMode = cmds.manipMoveContext('Move', q=True, m=True) cmds.manipMoveContext('Move', e=True, m=0) pos = cmds.manipMoveContext('Move', q=True, p=True) cmds.manipMoveContext('Move', e=True, m=currentMoveMode) return pos
def Dragger(self, selection = 'NA' , historyName = '', speed = [0.01, .1, .0001] ): if selection == 'NA': self.selection = self.getSelection() else: self.selection = selection self.history = self.getHistory(self.selection, -1, historyName) self.attribute = self.history[-1] + Cache.currentAttribute try: cmds.draggerContext( 'dragTool', edit=True, pressCommand= partial(self.pressFunction), dragCommand= partial(self.dragFunction), finalize = partial(self.exitFunction), undoMode = "step") except: cmds.draggerContext( 'dragTool', pressCommand= partial(self.pressFunction), dragCommand= partial(self.dragFunction), finalize = partial(self.exitFunction), undoMode = "step" ) cmds.setToolTo( 'dragTool' )
def show_UI(self): self.findSelectionToGroup() if len(self.objectsToGroup) == 0: return self.UIElements = {} if cmds.window('groupSelected_UI_window', exists=True): cmds.deleteUI('groupSelected_UI_window') windowWidth = 300 windowHeight = 150 self.UIElements['window'] = cmds.window('groupSelected_UI_window', width=windowWidth, height=windowHeight, title='Group Selected', sizeable=False) self.UIElements['topLevelColumn'] = cmds.columnLayout(adj=True, columnAlign='center', rs=3) self.UIElements['groupName_rowColumn'] = cmds.rowColumnLayout(nc=2, columnAttach=(1,'right', 0), columnWidth=[(1,80),(2,(windowWidth-90))]) cmds.text(label='Group Name :') self.UIElements['groupName'] = cmds.textField(text='group') cmds.setParent(self.UIElements['topLevelColumn']) self.UIElements['createAt_rowColumn'] = cmds.rowColumnLayout(numberOfColumns=3, columnAttach=(1,'right',0),columnWidth=[(1,80),(2,(windowWidth-170)),(3,80)]) cmds.text(label='Position at :') cmds.text(label='') cmds.text(label='') cmds.text(label='') self.UIElements['createAt_lastSelected'] = cmds.button(label='Last Selected', c=self.createAtLastSelected) cmds.text(label='') cmds.text(label='') self.UIElements['createAt_averagePosition'] = cmds.button(label='Average Position', c=self.createAtAveragePosition) cmds.text(label='') cmds.setParent(self.UIElements['topLevelColumn']) cmds.separator() columnWidth = (windowWidth/2) - 5 self.UIElements['button_row'] = cmds.rowLayout(nc=2,columnWidth=[(1,columnWidth),(2,columnWidth)],cat=[(1,'both',10),(2,'both',10)],columnAlign=[(1,'center'),(2,'center')]) cmds.button(label='Accept', c=self.acceptWindow) cmds.button(label='Cancel', c=self.cancelWindow) cmds.showWindow(self.UIElements['window']) self.createTemporaryGroupRepresentation() self.createAtLastSelected() cmds.select(self.tempGroupTransform) cmds.setToolTo('moveSuperContext')
def editMembershipCmd(): """Membership tool.""" geo = _getGeoFromUI() rbsNode = geo and _getRbs(geo) if rbsNode: cmds.select(rbsNode) cmds.setToolTo('setEditContext') sys.stdout.write('Use shift/ctrl to add/remove vertices from the deformer\n') _updateUI()
def pressEvent(self): button = cmds.draggerContext(DRAGGER, query=True, button=True) # Leave the tool by middle click if button == 2: cmds.setToolTo('selectSuperContext') return # Get clicked point in viewport screen space pressPosition = cmds.draggerContext(DRAGGER, query=True, ap=True) x = pressPosition[0] y = pressPosition[1] self.ANCHOR_POINT = [x, y] # Convert point_in_3d, vector_in_3d = convertTo3D(x, y) # Get MFnMesh of snap target targetDagPath = getDagPathFromScreen(x, y) # If draggin outside of objects if targetDagPath is None: return # Create new object to snap self.DUPLICATED = self.getNewObject() # Get origianl scale information self.SCALE_ORIG = cmds.getAttr(self.DUPLICATED + ".scale")[0] self.MATRIX_ORIG = cmds.xform(self.SOURCE, q=True, matrix=True) self.TARGET_FNMESH = OpenMaya.MFnMesh(targetDagPath) transformMatrix = self.getMatrix( point_in_3d, vector_in_3d, self.TARGET_FNMESH, self.SCALE_ORIG, self.MATRIX_ORIG) # Reset transform of current object cmds.setAttr(self.DUPLICATED + ".translate", *[0, 0, 0]) location = [-i for i in cmds.xform(self.DUPLICATED, q=True, ws=True, rp=True)] cmds.setAttr(self.DUPLICATED + ".translate", *location) cmds.makeIdentity(self.DUPLICATED, apply=True, t=True) # Apply transformMatrix to the new object cmds.xform(self.DUPLICATED, matrix=transformMatrix)
def overshoot(baseFrame='previous'): '''Input kan either be 'previous','next' or an integer''' global attrDict global deltaX global lastVal deltaX = 0 lastVal = 0 print "# Initializing drag" selList = mc.ls(sl=True) try: ### Checking userInput if baseFrame != 'previous' and baseFrame != 'next' and type(baseFrame) != type(123): raise QuitException, "# init >> Input is incorrect. Only supported inputs are 'previous', 'next' or an integer" ### Checking selection if selList != None: attrDict = calcAttrDiff(selList, baseFrame) else: raise QuitException, "# Init >> Nothing is selected" ### Initializing context if mc.draggerContext( 'overshootCtx', exists=True ) == 0: mc.draggerContext( "overshootCtx" ) ### Checking script file name (execution namespace) if __name__ != '__main__': prefix = __name__ + '.' else: prefix = '' mc.draggerContext( 'overshootCtx', edit=True, pressCommand= prefix + 'overshoot_OnPress()', dragCommand= prefix + 'overshoot_OnDrag()', releaseCommand= prefix + 'overshoot_EndDrag()', cursor='crossHair' ); mm.eval('storeLastAction( "restoreLastContext " + `currentCtx` )') mc.setToolTo( 'overshootCtx' ) except QuitException, arg: print "### Tool terminated ###" if arg != None: print arg,
def clear(self, *args): if cmds.iconTextButton("TempCustomPivotBtn", query=True, exists=True): cmds.iconTextButton("TempCustomPivotBtn", edit=True, image= uiMod.getImagePath("specialTools_create_temp_custom_pivot"), highlightImage= uiMod.getImagePath("specialTools_create_temp_custom_pivot copy")) cmds.refresh(suspend=True) currFrame = cmds.currentTime(query=True) loadConstraints = aToolsMod.loadInfoWithScene(self.STORE_NODE, self.CONSTRAINTS) loadLocators = aToolsMod.loadInfoWithScene(self.STORE_NODE, self.LOCATORS) loadCtrls = aToolsMod.loadInfoWithScene(self.STORE_NODE, self.CTRLS) currentFrame = aToolsMod.loadInfoWithScene(self.STORE_NODE, self.CURRENTFRAME) #exit edit mode if cmds.currentCtx() not in self.deniedCtx: cmds.setToolTo(cmds.currentCtx()) if currentFrame: cmds.currentTime(eval(currentFrame)) #get values """ translation = [] rotation = [] if loadCtrls: ctrlObjs = eval(loadCtrls) for loopCtrl in ctrlObjs: translation.append(cmds.xform(loopCtrl, query=True, ws=True, rotatePivot=True)) rotation.append(cmds.xform(loopCtrl, query=True, ws=True, rotation=True)) """ if loadConstraints: constraintObjs = eval(loadConstraints) for loopConstraint in constraintObjs: if cmds.objExists(loopConstraint): cmds.delete(loopConstraint) if loadCtrls and loadLocators: locatorObjs = eval(loadLocators) ctrlObjs = eval(loadCtrls) for n, loopCtrl in enumerate(ctrlObjs): if cmds.objExists(loopCtrl) and cmds.objExists(locatorObjs[n]): G.aToolsBar.align.align([loopCtrl], locatorObjs[n]) for loopLocator in locatorObjs: if cmds.objExists(loopLocator): cmds.delete(loopLocator) cmds.currentTime(currFrame) cmds.refresh(suspend=False)
def load(s): sel = cmds.ls(sl=True) if sel and sel[0] in s.valid: s.sel = sel[0] s.tool = cmds.currentCtx() s.myTool = "TempTool" if cmds.draggerContext(s.myTool, exists=True): cmds.deleteUI(s.myTool) cmds.draggerContext(s.myTool, name=s.myTool, pressCommand=s.click, cursor='hand') cmds.setToolTo(s.myTool) print "Make a selection" else: print "Nothing selected"
def enable(self): # Get user selection self.userSelection = mc.ls(sl=1) mc.select(cl=1) # Invoke edit membership context mc.setToolTo(self.context) # Hilite members for current influence self.hiliteMembers() print('Edit Membership context enabled!')