1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 | import bpy 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 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 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 = 1 # 长度:100厘米 belt_width = 0.035 # 宽度:3.5厘米 belt_thickness = 0.003 # 厚度:0.3厘米 belt_hole_diameter = 0.003 # 孔直径:1厘米 belt_hole_spacing = 0.1 # 孔间距:10厘米 name = "Belt" # 创建皮带的基本形状 wardrobe = create_cube( "Belt" , (belt_length,belt_width,belt_thickness), ( 0 , 0 , 0 )) #添加倒角 addDaoJiao(select_obj = wardrobe) # 定义UV球体的参数 radius = belt_hole_diameter # 半径:1米,可以根据需要调整 location = ( - belt_length / 2 + belt_length / 32 , 0 , 0 ) # 位置 segments = 32 # 细分程度,这个值越高,球体表面的孔径就越小 # 创建UV球体模型 uv_sphere = create_uv_sphere( "UVSphere" , radius, location, segments) select_obj = select_and_activate_door(door_name = "UVSphere" ) # 调用函数添加阵列修改器 add_array_modifier(select_obj = bpy.context.active_object, count = 6 , offset_list = [ 1.5 , 0 , 0 ]) # 打印完成信息 print ( "阵列修改器添加完成。" ) bool_diff(zhu_obj_name = "Belt" ,jian_obj_name = "UVSphere" ) if __name__ = = '__main__' : main() |
# 创建平面并返回对象 def create_plane(name, dimensions, location, parent=None): # 执行添加平面的操作 bpy.ops.mesh.primitive_plane_add(enter_editmode=False, align='WORLD', location=location, scale=(dimensions[0], dimensions[1], 1)) # 选择新创建的平面 plane_object = bpy.context.selected_objects[0] # 设置平面的名称 plane_object.name = name # 设置平面的尺寸 plane_object.scale = (dimensions[0]/2, dimensions[1]/2, 0) # 应用变换 bpy.ops.object.transform_apply(location=True, rotation=True, scale=True) # 如果提供了父对象,则将平面设置为父对象的子对象 if parent: plane_object.parent = parent return plane_object
plane_object = create_plane("my_plane", (0.4, 0.2), (0, 0, 0)) #调用函数
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2023-04-15 python获取文本中网址并判断是否可以正常访问
2022-04-15 requests请求上传文件时,值一定要是打开的文件-3
2022-04-15 接口自动化之requests-2
2022-04-15 pytest从入门到精通-1
2020-04-15 django保存图片到ImageField中