import bpy
 
# 创建立方体并返回对象
def create_cube(name, dimensions, location, parent=None):
    # 执行添加立方体的操作
    bpy.ops.mesh.primitive_cube_add(size=dimensions[2], enter_editmode=False, location=location)
    # 选择新创建的立方体
    cube_object = bpy.context.selected_objects[0]
    # 设置立方体的名称
    cube_object.name = name
    # 设置立方体的尺寸
    cube_object.dimensions = dimensions
     
    # 应用变换
    bpy.ops.object.transform_apply(location=True, rotation=True, scale=True)
    # 如果提供了父对象,则将立方体设置为父对象的子对象
    if parent:
        cube_object.parent = parent
    return cube_object
 
 
#添加倒角
def addDaoJiao(select_obj):
     
    # 添加倒角修饰符
    bpy.ops.object.modifier_add(type='BEVEL')
     
    bevel_modifier = select_obj.modifiers[-1]  # 获取新添加的 dao jiao修改器
     
    bevel_modifier.name = "Bevel"
 
    # 设置倒角的宽度和分段数
    bevel_modifier.width = 0.03  # 倒角的宽度
    bevel_modifier.segments = 4  # 倒角的分段数
     
 
    # 应用倒角修饰符
    bpy.ops.object.modifier_apply(modifier=bevel_modifier.name)
     

#添加镜像修改器到物体
def addMirror(select_obj,
              mirror_name="Mirror_Modifier",
              axis=(True, False, False)):
    
    # 添加镜像修改器到桌腿
    bpy.ops.object.modifier_add(type='MIRROR')
    mirror_modifier = select_obj.modifiers[-1]  # 获取新添加的镜像修改器
    mirror_modifier.name = mirror_name  # 重命名镜像修改器
    bpy.context.object.modifiers[mirror_name].use_axis[0] = axis[0]
    bpy.context.object.modifiers[mirror_name].use_axis[1] = axis[1]
    bpy.context.object.modifiers[mirror_name].use_axis[2] = axis[2]
    #set_zhouxiang_is_open(mirror_name=mirror_name,zhouxing_xiaobiao=0,is_open=is_open_zhouxian_x)
    #set_zhouxiang_is_open(mirror_name=mirror_name,zhouxing_xiaobiao=1,is_open=is_open_zhouxian_y)
    #set_zhouxiang_is_open(mirror_name=mirror_name,zhouxing_xiaobiao=2,is_open=is_open_zhouxian_z)
    

    # 应用镜像修改器
    #bpy.ops.object.modifier_apply(modifier=mirror_modifier.name, apply_as='DATA')
    
    return mirror_modifier
 
 
# 添加阵列修改器
def add_array_modifier(select_obj, count=6, offset_list=[1.5,0,0]):
    # 添加阵列修饰符
    bpy.ops.object.modifier_add(type='ARRAY')
     
    # 获取新添加的阵列修饰符
    array_modifier = select_obj.modifiers[-1]
     
    # 设置阵列修饰符的参数
    array_modifier.name = "Array"
    array_modifier.count = count  # 设置重复的数量
    array_modifier.relative_offset_displace[0] = offset_list[0]  # 设置每个实例之间的偏移距离
    array_modifier.relative_offset_displace[1] = offset_list[1]  # 设置每个实例之间的偏移距离
    array_modifier.relative_offset_displace[2] = offset_list[2]  # 设置每个实例之间的偏移距离
     
     
     
     
 
    # 应用阵列修饰符
    bpy.ops.object.modifier_apply(modifier=array_modifier.name)
 
 
 #应用所有修改器
def applayAllAmodify():
    bpy.ops.object.apply_all_modifiers()
 
 
# 选中并激活门对象
def select_and_activate_door(door_name):
    # 遍历所有对象,找到指定名称的门对象
    for obj in bpy.data.objects:
        if obj.name == door_name:
            # 选择对象
            obj.select_set(True)
            # 激活对象
            bpy.context.view_layer.objects.active = obj
            return obj # 已找到并激活对象,退出函数
         
#选中物体
def selectObjByName(name_str):
    #选中名为"CafeBody"的对象
    for i in bpy.data.objects:
        if i.name == name_str:
            # 找到对象后,执行相应的操作
            print("找到名为 %s 的对象" % name_str)
            i.select_set(state=True)
             
#进行布尔减去运算
def bool_diff(zhu_obj_name,jian_obj_name):
    select_and_activate_door(door_name=zhu_obj_name)
    selectObjByName(name_str=jian_obj_name)
    #进行布尔运算
    bpy.ops.btool.boolean_diff()
         
 
# 创建UV球体并返回对象
def create_uv_sphere(name, radius, location, segments=32, parent=None):
    # 执行添加UV球体的操作,并设置细分程度
    bpy.ops.mesh.primitive_uv_sphere_add(radius=radius, segments=segments, enter_editmode=False, location=location, scale=(1, 1, 1))
    # 选择新创建的UV球体
    sphere_object = bpy.context.selected_objects[0]
    # 设置UV球体的名称
    sphere_object.name = name
     
    # 如果提供了父对象,则将UV球体设置为父对象的子对象
    if parent:
        sphere_object.parent = parent
    return sphere_object
 
 
# 主函数
def main():
     
    belt_length = 0.04  # 长度:4厘米
    belt_width = 0.02    # 宽度:2厘米
    belt_thickness = 0.003  # 厚度:0.3厘米
    belt_name= "Belt" 
    # 创建皮带的基本形状
    wardrobe = create_cube(belt_name, (belt_length,belt_width,belt_thickness), (0, 0, 0))
    
    #创建镂空区域
    qudiao1 = create_cube("qudiao1", (belt_length/2,belt_width/4,belt_thickness), (0, belt_width/4, 0))
    
    select_and_activate_door(door_name="qudiao1")
    
    addMirror(select_obj=qudiao1,
              mirror_name="Mirror_Modifier",
              axis=(False,True,False))
    
    bool_diff(zhu_obj_name="Belt",jian_obj_name="qudiao1")
    
    
    select_and_activate_door(belt_name)
    #添加倒角
    addDaoJiao(select_obj=wardrobe)
     
 
    
     
 
     
 
if __name__ == '__main__':
    main()

  

posted on 2024-04-15 10:54  大话人生  阅读(46)  评论(0)    收藏  举报