Blender 插件开发 计算模型长宽高

模型的长宽高在写一些需要计算的插件时还是挺有用的,可以通过object.dimensions(模型尺寸)知道,可是遇到复数模型组成的物体计算长宽高就比较麻烦了,像我这个模型就是复数子模型组成的,用一个空物体当父级

两个方法:方法一,把复数模型合并成一个模型;方法二,通过顶点计算出长宽高

方法一代码

selected_objects = bpy.context.selected_objects
        bpy.context.view_layer.objects.active = selected_objects[0]
        bpy.ops.object.join()

这样就可以通过object.dimensions(尺寸)知道长宽高了,麻烦的是需要还原成复数模型,我的解决方法是复制模型,把复制的模型合成一个模型获得长宽高后删除这个合成的模型,这样就可以避免动原模型了

方法二,本来想通过循环顶点来计算长宽高的,结果发现耗时太长了,就找其他方法,在object的属性里发现了bound_box属性,这个属性是用来画边框用的,那我就可以用这8个顶点来计算最大值和最小值

贴代码

from mathutils import Vector


def get_object_size(parent_object):
    is_start = False
    max_x = 0.0
    max_y = 0.0
    max_z = 0.0
    min_x = 0.0
    min_y = 0.0
    min_z = 0.0
    for obj in parent_object.children:
        box_corners = [obj.matrix_world @ Vector(corner) for corner in obj.bound_box]
        for v in box_corners:
            x = v[0]
            y = v[1]
            z = v[2]
            if is_start:
                max_x = max(max_x, x)
                max_y = max(max_y, y)
                max_z = max(max_z, z)
                min_x = min(min_x, x)
                min_y = min(min_y, y)
                min_z = min(min_z, z)
            else:
                is_start = True
                max_x = x
                max_y = y
                max_z = z
                min_x = x
                min_y = y
                min_z = z
    width = max_x - min_x
    height = max_y - min_y
    length = max_z - min_z
    dimensions = (width, height, length)
    return dimensions

通过obj.matrix_world计算出该顶点的世界坐标,然后通过各个轴的最大值和最小值计算出长宽,最后的命名请无视掉,出于习惯把x轴当宽,y轴当高了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值