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()
标签:obj,name,创建,object,腰带,bpy,modifier,select,blender From: https://www.cnblogs.com/jingzaixin/p/18135178