Skip to content

Latest commit

 

History

History
80 lines (65 loc) · 2.38 KB

File metadata and controls

80 lines (65 loc) · 2.38 KB
Error in user YAML: (<unknown>): could not find expected ':' while scanning a simple key at line 3 column 1
---
- oeasy Python 0716
- 这是 oeasy 系统化 Python 教程,从基础一步步讲,扎实、完整、不跳步。愿意花时间学,就能真正学会。
本教程同步发布在: 

     个人网站: `https://oeasy.org` 
     蓝桥云课: `https://www.lanqiao.cn/courses/3584` 
     GitHub: `https://github.com/overmind1980/oeasy-python-tutorial` 
     Gitee: `https://gitee.com/overmind1980/oeasypython` 
---

环切

图片描述

import bpy
import bmesh

# 清空场景
print("正在清空场景...")
bpy.ops.object.mode_set(mode='OBJECT')
bpy.ops.object.select_all(action='SELECT')
bpy.ops.object.delete()

# 创建一个立方体
print("正在创建立方体...")
bpy.ops.mesh.primitive_cube_add()
cube = bpy.context.active_object

print(f"创建的立方体对象: {cube.name}")

# 进入编辑模式
print("进入编辑模式...")
bpy.context.view_layer.objects.active = cube
cube.select_set(True)
bpy.ops.object.mode_set(mode='EDIT')

bpy.ops.mesh.select_all(action='SELECT')

print("正在执行垂直边的高度切割操作...")
# 使用bmesh库获取网格数据
bm = bmesh.from_edit_mesh(cube.data)
# 只在竖着的四条边上进行高度切割
# 竖着的边是指沿着Z轴方向的边(X和Y坐标固定,Z坐标变化)
vertical_edges = []
for edge in bm.edges:
    # 获取边的两个顶点坐标
    v1 = edge.verts[0].co
    v2 = edge.verts[1].co
    
    # 检查边是否是垂直边(沿着Z轴方向)
    # 如果X和Y坐标几乎相同,只有Z坐标不同,则是垂直边
    if abs(v1.x - v2.x) < 0.001 and abs(v1.y - v2.y) < 0.001 and abs(v1.z - v2.z) > 0.001:
        vertical_edges.append(edge)

print(f"找到垂直边数量: {len(vertical_edges)}")

# 对这些边进行细分,实现高度切割效果
if vertical_edges:
    print("执行垂直边的高度切割...")
    try:
        bmesh.ops.subdivide_edges(bm, edges=vertical_edges, cuts=4, use_grid_fill=True)
        print("  ✔️ 垂直边切割成功")
    except Exception as e:
        print(f"  ❌ 垂直边切割失败: {e}")
else:
    print("  ⚠️ 未找到垂直边,无法执行切割")

# 更新网格
bmesh.update_edit_mesh(cube.data)

# 切换回对象模式
print("切换回对象模式...")
bpy.ops.object.mode_set(mode='OBJECT')


  • 本文来自 oeasy Python 系统教程。
  • 想完整、扎实学 Python,
  • 搜索 oeasy 即可。