如何在maya网格上找到所选顶点的对称对

时间:2014-06-01 18:32:00

标签: python maya

找到给定顶点对称对的最佳(最快)方法是什么(即网格左侧的顶点及其右侧等效点)是否可以使用打开的maya api在python中为此还是有更好的方法?

1 个答案:

答案 0 :(得分:1)

你不想一遍又一遍地检查每个顶点相对于其他顶点的位置,这将非常慢。

一个简单的方法是获得一个哈希值 - 一个简单的比较操作 - 对于两个对称的顶点是相同的每个顶点。幸运的是元组 - 不是列表! - 可以洗。所以算法将是:

  1. 获取每个顶点的位置元组
  2. 为“左”(或“向上”或“向后”等)侧的所有顶点创建一个字典(位置:顶点)。
  3. 为对面的顶点制作第二个字典(位置:顶点),对称轴翻转:如果你做的是左/右轴,左边的列表将是

    { (x, y, z) : "pCube1.vtx[0]" }  #etc 
    

    ,右边的列表是

    { (-1 * x, y, z) : "pCube1.vtx[99]" } # and so on
    
  4. 在两个字典中都重复的任何键都是对称的,因此您需要收集显示在两者中的键,然后从它们所代表的每一侧获取顶点:

    duplicates = [j for j in leftDictionary if j in rightDictionary]
    pairs = [leftDictionary[k], rightDictionary[k] for k in keys] 
    
  5. 这对于大网格来说不会超快,但它应该可以解决问题。

    它可能存在问题的一个地方是两侧之间是否存在浮点差异,因此视觉上对称的项目可能在数学上不对称。您可以修改它以匹配具有给定容差的数字,比如量化您放入元组的值 - 简单的方法是用一些因子(比如1000)将它们炸掉,然后将它们变成整数。原始方法错误地忽略了一些看起来对称但不完全的东西,量化的方法如果太靠近则可能会折叠多个匹配。我坚持使用原始数据,除非它没有做你需要的。