首页 > 编程语言 >blender使用python创建柜子模型

blender使用python创建柜子模型

时间:2024-04-14 20:12:32浏览次数:24  
标签:knob name 柜子 python height depth location rotation blender

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 create_cylinder(name, radius, height, location, parent=None, rotation_axis=(0, 0, 1), rotation_angle=90):
    # 执行添加圆柱体的操作
    bpy.ops.mesh.primitive_cylinder_add(radius=radius, depth=height, enter_editmode=False, location=location)
    # 选择新创建的圆柱体
    cylinder = bpy.context.selected_objects[0]
    # 设置圆柱体的名称
    cylinder.name = name
    # 如果提供了父对象,则将圆柱体设置为父对象的子对象
    if parent:
        cylinder.parent = parent
    # 旋转圆柱体以改变其方向
    rotation_delta = cylinder.rotation_euler
    rotation_delta[rotation_axis[0]] = rotation_angle * (3.14159 / 180)  # 将角度转换为弧度
    cylinder.rotation_euler = rotation_delta
    
    # 应用变换
    bpy.ops.object.transform_apply(location=True, rotation=True, scale=True)
    
    return cylinder

#添加倒角
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 clear_selected_objects():
    # 清除当前选中的所有对象
    bpy.context.selected_objects.clear()


#选中物体
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 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 main():
    # 衣柜的整体尺寸
    width = 1.5  # 宽度,单位:米
    depth = 0.65  # 深度,单位:米
    height = 2.2  # 高度,单位:米
    


    # 创建衣柜的基本形状
    wardrobe = create_cube("Wardrobe", (width, depth, height), (0, 0, 0))
    print(width/2)
    
    # 创建衣柜门
    door_width = width/2  # 门宽度,单位:米
    door_depth = 0.1  # 门深度,单位:米
    door_height = height  # 门高度,单位:米
    
    # 创建衣柜的门1
    door1 = create_cube("Door1", (door_width, door_depth, door_height), (-(width/2)/2, -depth/2, 0),wardrobe)
    
    # 创建中间横挡板
    drawer1 = create_cube("Drawer1", (width, depth, 0.1), (0,0,0),wardrobe)
    
    # 门把手的尺寸
    knob_radius = 0.03  # 半径,单位:米
    knob_height = 0.3  # 高度,单位:米
    
    knob_heng_radius = 0.02  # 半径,单位:米
    knob_heng_height = 0.3  # 高度,单位:米
    
    # 在门上添加门把手
    knob_location = (-knob_radius, -depth/2-door_depth/2-knob_heng_height/2, 0)  # 门把手的位置
    
    knob1 = create_cylinder("DoorKnob1",knob_radius, knob_height, knob_location, door1,rotation_axis=(0, 0, 1), rotation_angle=0)
    
    knob1_shang_location = (-knob_radius, -depth/2-door_depth/2, knob_height/4)  # 门把手的位置
    knob1_xia_location = (-knob_radius, -depth/2-door_depth/2, -knob_height/4)  # 门把手的位置
    
    knob1_shang = create_cylinder("DoorKnob1_shang",knob_heng_radius, knob_heng_height, knob1_shang_location, knob1,rotation_axis=(0, 0, 1), rotation_angle=90)
    knob1_xia = create_cylinder("DoorKnob1_xia",knob_heng_radius, knob_heng_height, knob1_xia_location, knob1,rotation_axis=(0, 0, 1), rotation_angle=90)
    
    # 创建衣柜的门2
    door2 = create_cube("Door2", (door_width, door_depth, door_height), ((width/2)/2, -depth/2, 0),wardrobe)
    
    # 在门上添加门把手
    knob2_location = (knob_radius, -depth/2-door_depth/2-knob_heng_height/2, 0)  # 门把手的位置
    
    knob2 = create_cylinder("DoorKnob1",knob_radius, knob_height, knob2_location, door2,rotation_axis=(0, 0, 1), rotation_angle=0)
    
    knob2_shang_location = (knob_radius, -depth/2-door_depth/2, knob_height/4)  # 门把手的位置
    knob2_xia_location = (knob_radius, -depth/2-door_depth/2, -knob_height/4)  # 门把手的位置
    
    knob2_shang = create_cylinder("DoorKnob2_shang",knob_heng_radius, knob_heng_height, knob2_shang_location, knob1,rotation_axis=(0, 0, 1), rotation_angle=90)
    knob2_xia = create_cylinder("DoorKnob2_xia",knob_heng_radius, knob_heng_height, knob2_xia_location, knob1,rotation_axis=(0, 0, 1), rotation_angle=90)
    

    
    #select_and_activate_door(door_name="Door1")
    
    #addMirror(select_obj=door1,
    #          mirror_name="Mirror_Modifier",
    #          axis=(True,False,False))
    
    


    
    


if __name__ == '__main__':
    main()

 

标签:knob,name,柜子,python,height,depth,location,rotation,blender
From: https://www.cnblogs.com/jingzaixin/p/18134602

相关文章

  • python四则运算生成器
    合作伙伴:2252717在编程任务中,清晰地理解并规划设计思路是至关重要的。对于这个特定的四则运算题目生成器,目标是创建一个程序,能够随机生成包含两个运算符的数学题目,这些题目涉及100以内的数字,并确保所有生成的题目的答案都在0到100之间。以下是我在设计和实现这个程序时遵循的详细......
  • blender使用python创建床模型
    importbpyimportmath#导入math模块#jianmodefjianMo(l,w,h,name='CafeBody',location_x=0,location_y=0,location_z=0):#定义咖啡馆的尺寸cafe_length=l#长度,单位:米cafe_width=w#宽度,单位:米cafe_height=h#高度,单位:米#......
  • 结对编程--四则运算(Python)
    合作伙伴:2252720`importrandomdefgenerate_expression():operators=['+','-','×','÷']#可用的运算符operator=random.choice(operators)#随机选择一个运算符ifoperator=='+':num1=random.randint(0,100)#生成第一......
  • blender使用python创建桌子模型
    importbpyimportmath#导入math模块#jianmodefjianMo(l,w,h,name='CafeBody',location_x=0,location_y=0,location_z=0):#定义咖啡馆的尺寸cafe_length=l#长度,单位:米cafe_width=w#宽度,单位:米cafe_height=h#高度,单位:米#......
  • python+uwsgi警告
     1.出现这个警告是python没有安装uwsgi !!!!!!!!!!!!!!WARNING!!!!!!!!!!!!!! norequestpluginisloaded,youwillnotbeabletomanagerequests. youmayneedtoinstallthepackageforyourlanguageofchoice,orsimplyloaditwith--plugin. !!......
  • Python3 YOLOv8 车牌号识别提取
    参考https://blog.csdn.net/Pan_peter/article/details/130465041(参考教程)https://wwwf.lanzout.com/iCY5N0uhltdg(car.pt已下载)https://github.com/ultralytics/ultralytics/issues/2046(可视化参数问题)https://cloud.tencent.com/developer/article/2214890(中文乱码问......
  • blender使用python创建立方体并应用变换代码
    importbpy#定义咖啡馆的尺寸cafe_width=10#宽度,单位:米cafe_length=15#长度,单位:米cafe_height=3#高度,单位:米#创建咖啡馆的主体(立方体)bpy.ops.mesh.primitive_cube_add(size=10,enter_editmode=False,location=(0,0,0))#获取新创建的立方体对象......
  • Python面试
    Py生成器send的应用场景Py如何动态创建类socket如何解决粘包socket断点续传如何解决进程间通讯有哪些方式如何排查数据库慢的原因如何优化慢查询语甸ngnix为何单线程可数万并发?前端sonp跨域方案原理Python服务热更新方案......
  • python路径相关操作:os.path
    Windows路径格式importos#当前python文件位置:T:\ProgrammingPractice\python_path\test.py#给定的路径path=r'D:\AAA\BBB\CCC\x.jpg'#path='D:\\AAA\\BBB\\CCC\\x.jpg'#获取路径的目录部分dir=os.path.dirname(path)#获取最后一个目录名last......
  • Python常用模块-20个常用模块总结
    目录time模块datetime模块random模块os模块sys模块json和pickle模块hashlib和hmac模块logging模块numpy模块pandas模块matplotlib模块re模块typing模块collections模块pathlib模块shutil模块xml模块subprocess模块configparser模块Python常用模块小结time模块......