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

2024-10-01 13:26:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我想将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();

用我上面的脚本捕捉,它没有完全捕捉到顶点。在

enter image description here

但它应该与下面的图片完全吻合。在

enter image description here


Tags: 脚本trueobjectdefselect快照vertex顶点
2条回答

你可以大大简化你的代码,只使用几个命令

import maya.cmds as mc

verts = mc.ls(os=True)
src = 'pCone1'
base_name = 'fancy_cone'

for i, vert in enumerate(verts):
    dup = mc.duplicate(src, n='%s_%s' %(base_name, i))[0]
    mc.xform(dup, ws=True, t=mc.xform(vert, q=True, ws=True, t=True))

请记住以下几点注意事项:

1)这是假设源圆锥体的枢轴位于尖端,尖端位于原点。。。因此,它需要按您想要的方式设置源圆锥体,就好像原点是要捕捉到的顶点一样。如果要“固定”到的对象被旋转(无需进行任何类型的矢量数学以确定位置偏移),这也会很有帮助
2) 要在ls命令中使用orderedSelection(os)标志,需要确保在“选择”子区域下的“maya首选项”中启用了轨迹选择顺序,这样就可以按照要创建的顺序选择所需的顶点(自上而下、自下而上,任何方式)垂直索引顺序

这也应该更快-通过跟踪任何创建的对象,您实际上不需要选择任何对象,并且可以直接操作对象。我还把它放在一个循环中,不需要任何函数调用,这样会更快(尽管,除非你对这些函数进行了大量的处理,否则你可能不会注意到这一点)。在

不过,根据您的需要,您可能实际上希望在多个位置使用快照功能;但是,我建议您不要使用复制功能,以防出现您想在不复制的情况下捕捉的情况。在

类似这样的事情(同样要遵守上述的注意事项):

^{pr2}$

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

将此代码段添加到代码中以移动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 )

enter image description here

您可以测试此代码(在这里我将pivot上移了0.5):

^{pr2}$

enter image description here

相关问题 更多 >