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

blender使用python创建桌子模型

时间:2024-04-14 16:58:16浏览次数:28  
标签:name leg python location 桌子 table modifier open blender

import bpy
import math  # 导入 math 模块


#jianmo
def jianMo(l,w,h,name='CafeBody',location_x=0,location_y=0,location_z=0):
    # 定义咖啡馆的尺寸
    cafe_length = l  # 长度,单位:米
    cafe_width = w  # 宽度,单位:米
    cafe_height = h   # 高度,单位:米

    # 创建咖啡馆的主体(立方体)
    bpy.ops.mesh.primitive_cube_add(size=cafe_height, enter_editmode=False, location=(location_x, location_y, location_z))
    cafe_body = bpy.context.selected_objects[0]
    cafe_body.name = name
    
    # 设置咖啡馆主体的尺寸
    cafe_body.dimensions = (cafe_width, cafe_length, cafe_height)
    
    

    # 应用变换到咖啡馆主体
    bpy.ops.object.transform_apply(location=True, rotation=True, scale=True)
    
    return cafe_body

    
# 清除当前选中的所有对象
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 set_zhouxiang_is_open(mirror_name,zhouxing_xiaobiao,is_open):
    if is_open:
        bpy.context.object.modifiers["Mirror_Modifier"].use_axis[int(zhouxing_xiaobiao)] = True
    else:
        bpy.context.object.modifiers["Mirror_Modifier"].use_axis[int(zhouxing_xiaobiao)] = False
            
            
#添加镜像修改器到物体
def addMirror(select_obj,
              mirror_name="Mirror_Modifier",
              is_open_zhouxian_x=False,
              is_open_zhouxian_y=True,
              is_open_zhouxian_z=False):
    # 添加镜像修改器到桌腿
    bpy.ops.object.modifier_add(type='MIRROR')
    mirror_modifier = select_obj.modifiers[-1]  # 获取新添加的镜像修改器
    mirror_modifier.name = mirror_name  # 重命名镜像修改器
    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 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)
    
    





if __name__ == '__main__':
    table_length = 0.7  # 桌面长度,单位:米
    table_width = 0.7   # 桌面宽度,单位:米
    table_thickness = 0.05  # 桌面厚度,单位:米
    table_name = 'Desktop'
    table_location_x = 0
    table_location_y = 0
    table_location_z = 0
    
    table = jianMo(l=table_length,
    w=table_width ,
    h=table_thickness,
    name=table_name,
    location_x=table_location_x,
    location_y=table_location_y,
    location_z=table_location_z)
    
    #添加倒角
    addDaoJiao(select_obj=table)

    print("daojiao")
    table_leg_length = 0.05  # 桌面长度,单位:米
    table_leg_width = 0.05   # 桌面宽度,单位:米
    table_leg_thickness = 0.75  # 桌面厚度,单位:米
    table_leg_name = 'TableLeg'  # 桌面厚度,单位:米
    table_leg_location_x=table_width/2-table_leg_width
    table_leg_location_y=-table_length/2+table_leg_length
    table_leg_location_z=-table_leg_thickness/2+table_thickness/2
    
    table_leg=jianMo(l=table_leg_length,
    w=table_leg_width ,
    h=table_leg_thickness,
    name=table_leg_name,
    location_x=table_leg_location_x,
    location_y=table_leg_location_y,
    location_z=table_leg_location_z)
    
    
    #清除当前选中的所有对象
    clear_selected_objects()
    
    #xuan
    selectObjByName(name_str=table_leg_name)
    
    #添加倒角
    addDaoJiao(select_obj=table_leg)
    
    # 添加镜像修改器到桌腿
    addMirror(select_obj=table_leg,
    mirror_name="Mirror_Modifier",
    is_open_zhouxian_x=True,
    is_open_zhouxian_y=True,
    is_open_zhouxian_z=False)
    

    
    

    

    
    

    
    
 

 

标签:name,leg,python,location,桌子,table,modifier,open,blender
From: https://www.cnblogs.com/jingzaixin/p/18134326

相关文章

  • 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模块......
  • python 单元测试
    对写的函数或方法测试(非调接口方式) 方案1:自己编写测试类方案2:用python自带的unittest模块案例:importunittestclassStudent:def__init__(self,name,score):self.name=nameself.score=scoredefget_score(self):if......
  • Python 潮流周刊第 46 期(摘要)+ 赠书 7 本
    本周刊由Python猫出品,精心筛选国内外的250+信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景:帮助所有读者精进Python技术,并增长职业和副业的收入。周刊全文(限免):https://xiaobot.net/post/80087bf9-a1eb-49a1-84c0-ce2bd51af48......
  • Python通过函数名调用函数的几种场景
    除了执行系统命令外,我们有时还需要动态地执行一些python代码,有经验的朋友就会知道可以使用内置函数eval实现这一需求,如eval("print(__file__)"),这还是比较简单的。但如果要动态执行一个函数,讲的资料就会少一点,这次就要看这个需求该如何实现。一、通过eval实现1通过eval调用同......
  • Python教程:return和yield的区别
    return一直中,每中语言中其没没有很大差别,就不多说了。(shell语言return的是退出状态,可能差别是比较大的)最早看到yield应该是哪们语言用来调整什么线程优先级的,记不清了,不过那里的yield和python中的yield应该功能有区别。一、return和yield的异同共同点:return和yield都用来返回值......