【问题标题】:Maya Python: matching the bounding boxes of two different objectsMaya Python:匹配两个不同对象的边界框
【发布时间】:2021-12-12 20:25:55
【问题描述】:

我有两个对象,它们总是具有随机不同的边界框大小,尤其是高度。但两者都将在原点有支点。

我想通过缩放将一个对象的边界框高度与另一个对象匹配。但我只能考虑以非常小的增量逐渐扩大较小的规模。这似乎有点乏味和次优。

在 Python 和 Maya 中是否有更好的方法来匹配两个边界框的高度?

【问题讨论】:

    标签: python python-2.7 maya


    【解决方案1】:

    您应该能够获取较大对象的高度并将其除以较小对象的高度,以获得用于较小对象的比例因子。

    非常简单的例子(伪代码):

    objectA height = 20  
    objectB height = 10  
    20 / 10 = 2 (so, scale objectB by 2 to match the height)
    

    您的实际代码将是从每个边界框提取高度,比较高度以确定较小的对象和比例因子,然后缩放较小的对象。希望对您有所帮助!

    【讨论】:

    • 从来没有想过这个。简单有效。谢谢!
    • @john - 很高兴它对你有用!如果您需要按比例缩小较大的对象,它也应该以相反的方式工作
    【解决方案2】:

    这是一个函数,它将给定的一组对象缩放到第二组对象的组合边界框大小。 (也适用于单个对象)

    def matchScale(to, frm, scale=True):
        '''Scale each of the given objects to the combined bounding box of a second set of objects.
    
        :Parameters:
            to (str)(obj)(list) = The object(s) to scale.
            frm (str)(obj)(list) = The object(s) to get a bounding box size from.
            scale (bool) = Scale the objects. Else, just return the scale value.
    
        :Return:
            (list) scale values as [x,y,z,x,y,z...]
        '''
        to = pm.ls(to, flatten=True)
        frm = pm.ls(frm, flatten=True)
    
        xmin, ymin, zmin, xmax, ymax, zmax = pm.exactWorldBoundingBox(frm)
        ax, ay, az = aBoundBox = [xmax-xmin, ymax-ymin, zmax-zmin]
    
        result=[]
        for obj in to:
    
            xmin, ymin, zmin, xmax, ymax, zmax = pm.exactWorldBoundingBox(obj)
            bx, by, bz = bBoundBox = [xmax-xmin, ymax-ymin, zmax-zmin]
    
            oldx, oldy, oldz = bScaleOld = pm.xform(obj, q=1, s=1, r=1)
            diffx, diffy, diffz = boundDifference = [ax/bx, ay/by, az/bz]
            bScaleNew = [oldx*diffx, oldy*diffy, oldz*diffz]
            [result.append(i) for i in bScaleNew]
    
            if scale:
                pm.xform(obj, scale=bScaleNew)
    
        return result
    

    【讨论】:

      猜你喜欢
      • 2021-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      相关资源
      最近更新 更多