我想捕捉/对齐object Aobject B的顶点。我尝试使用下面的脚本,但是它不能完全对齐到顶点,而是使用偏移量对齐。谁能建议我解决方案。这是快照。

import maya.cmds as cmds

vertices = [];
srcObj = "pCone1";

def snapToVertex(vertex,object):

    cmds.select(vertex);
    x,y,z = cmds.pointPosition();
    cmds.select(object);
    cmds.duplicate();
    cmds.move(x,y,z);

def processTask():

    cmds.select( cmds.polyListComponentConversion( tv=True ) );
    vertices = cmds.ls(sl = True);

    print vertices;
    for vrtx in vertices:
        snapToVertex(vrtx,srcObj);

processTask();


用我上面的脚本捕捉了一下,但它并不能完全捕捉到顶点。

python - 通过Python脚本将对象捕捉到Maya中的另一个对象顶点-LMLPHP

但是,应该将其准确地捕捉到Vervex的下图。

python - 通过Python脚本将对象捕捉到Maya中的另一个对象顶点-LMLPHP

最佳答案

最好不要在Reset Transformations主菜单中对Cone使用Modify命令,因为枢轴点会回到其初始位置。 Python中有用的Freeze Transformations命令的类似物是cmds.makeIdentity()。即使您已沿1轴按+Y单位移动了枢轴点,例如,也不要忘记从1中减去variable y,因为Maya会以某种方式记住枢轴的位置。圆锥体枢轴点(用于将枢轴捕捉到顶点)的偏移量取决于圆锥体本身的大小。默认情况下为1

将此代码段添加到您的代码中,以将重复项移动到World Space中:

# cmds.makeIdentity( 'pCone1', apply=True )

pivSnap = 1
cmds.xform( 'pCone1', piv=[ 0, pivSnap, 0 ] )
cmds.move( x, y-pivSnap, z, a=True, ws=True, wd=True )


python - 通过Python脚本将对象捕捉到Maya中的另一个对象顶点-LMLPHP

您可以测试以下代码(在这里,我通过0.5向上移动了枢轴):

import maya.cmds as cmds

cmds.polyCube( sx=1, sy=15, sz=1, w=1, h=15, d=1 )
cmds.polyCone( r=.5, h=1, sx=10 )
cmds.move( 10, x=True )
pivSnap = .5
cmds.xform( 'pCone1', piv=[ 0, pivSnap, 0 ] )
cmds.rotate( 0, 0, '45deg' )
cmds.select( 'pCube1.e[33]','pCube1.e[37]','pCube1.e[41]','pCube1.e[45]','pCube1.e[49]','pCube1.e[53]','pCube1.e[57]','pCube1.e[61]' )
vertices = []
srcObj = "pCone1"

def snapToVertex( vertex, object ):

    cmds.select( vertex )
    x,y,z = cmds.pointPosition()
    print( x,y,z )

    cmds.select( object )
    cmds.manipMoveContext( m=2 )
    cmds.delete( 'pCube1', ch=True )
    cmds.duplicate()
    cmds.move( x, y-pivSnap, z, a=True, ws=True, wd=True )

def processTask():

    cmds.select( cmds.polyListComponentConversion( tv=True ) )
    vertices = cmds.ls( sl=True )
    print( vertices )

    for vrtx in vertices:
        snapToVertex( vrtx, srcObj )

processTask()


python - 通过Python脚本将对象捕捉到Maya中的另一个对象顶点-LMLPHP

关于python - 通过Python脚本将对象捕捉到Maya中的另一个对象顶点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44275663/

10-08 23:42