我想捕捉/对齐object A
到object 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();
用我上面的脚本捕捉了一下,但它并不能完全捕捉到顶点。
但是,应该将其准确地捕捉到Vervex的下图。
最佳答案
最好不要在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 )
您可以测试以下代码(在这里,我通过
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中的另一个对象顶点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44275663/