Exemple #1
0
    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)
Exemple #2
0
    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 )
Exemple #3
0
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])
Exemple #4
0
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)
Exemple #5
0
    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()
Exemple #6
0
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
Exemple #7
0
 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)
Exemple #8
0
 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')
Exemple #9
0
 def splitFaceTool(self):
     cmds.polySplitCtx('polySplitContext',
                       edit=1,
                       snaptoedge=1,
                       enablesnap=1,
                       precsnap=10)
     cmds.setToolTo('polySplitContext')
Exemple #10
0
    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()
Exemple #11
0
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)
Exemple #13
0
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])    
Exemple #14
0
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)
Exemple #15
0
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)
Exemple #16
0
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)
Exemple #17
0
	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')
Exemple #18
0
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]
Exemple #19
0
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
Exemple #23
0
	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")
Exemple #25
0
    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)
Exemple #26
0
    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()
Exemple #27
0
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.")
Exemple #28
0
    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()
Exemple #29
0
	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')
Exemple #31
0
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 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 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')
Exemple #34
0
 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'
             )
Exemple #35
0
	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 )
Exemple #36
0
 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")
Exemple #38
0
    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)
Exemple #39
0
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))
Exemple #40
0
    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)
Exemple #42
0
def forceSceneUpdate():
    cmds.setToolTo("moveSuperContext")
    nodes=cmds.ls()

    for n in nodes:
        cmds.select(n, replace=True)
    cmds.select(clear=True)
    cmds.setToolTo("selectSuperContext")
Exemple #43
0
 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
Exemple #44
0
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())
Exemple #47
0
 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')
Exemple #48
0
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
Exemple #49
0
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')
Exemple #51
0
 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")
Exemple #52
0
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
Exemple #53
0
	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')
Exemple #55
0
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,
Exemple #58
0
 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)
Exemple #59
0
 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!')