Error in user YAML: (<unknown>): found a tab character that violate indentation while scanning a plain scalar at line 3 column 3
import bpy
import math
if bpy.context.active_object and bpy.context.active_object.mode != 'OBJECT':
bpy.ops.object.mode_set(mode='OBJECT')
bpy.ops.object.select_all(action='SELECT')
bpy.ops.object.delete(use_global=False)
# 建筑宽度
BUILDING_WIDTH = 6
# 建筑深度
BUILDING_DEPTH = 4
# 柱子半径
PILLAR_RADIUS = 0.25
# 柱子高度
PILLAR_HEIGHT = 3
# 梁半径
BEAM_RADIUS = 0.175
# 梁长度
BEAM_LENGTH = 4
# 小柱半径
SMALL_PILLAR_RADIUS = 0.15
# 小柱高度
SMALL_PILLAR_HEIGHT = 0.4
# 脊半径
RIDGE_RADIUS = 0.2
# 脊长度
RIDGE_LENGTH = 1.5
# 桁半径
HENGD_RADIUS = 0.18
def create_material(name, color):
mat = bpy.data.materials.new(name=name)
mat.use_nodes = True
nodes = mat.node_tree.nodes
bsdf = nodes.get("Principled BSDF")
bsdf.inputs["Base Color"].default_value = color
return mat
red_material = create_material("RedMaterial", (0.8, 0.2, 0.2, 1.0))
green_material = create_material("GreenMaterial", (0.2, 0.8, 0.2, 1.0))
blue_material = create_material("BlueMaterial", (0.2, 0.2, 0.8, 1.0))
def create_cylinders_from_data(cylinders_data, material):
cylinders = []
for i, data in enumerate(cylinders_data):
location = data[0]
rotation = data[1]
scale = data[2]
radius = data[3]
depth = data[4]
name = data[5]
bpy.ops.mesh.primitive_cylinder_add(radius=radius, depth=depth, location=location)
cylinder = bpy.context.active_object
cylinder.rotation_euler = rotation
cylinder.scale = scale
cylinder.name = name
cylinder.data.materials.append(material)
cylinders.append(cylinder)
return cylinders
gold_pillars_data = [
[(-BEAM_LENGTH, BEAM_LENGTH/2, PILLAR_HEIGHT/2), (0, 0, 0), (1, 1, 1), PILLAR_RADIUS, PILLAR_HEIGHT, "GoldPillar_1"],
[(0, BEAM_LENGTH/2, PILLAR_HEIGHT/2), (0, 0, 0), (1, 1, 1), PILLAR_RADIUS, PILLAR_HEIGHT, "GoldPillar_2"],
[(-BEAM_LENGTH, -BEAM_LENGTH/2, PILLAR_HEIGHT/2), (0, 0, 0), (1, 1, 1), PILLAR_RADIUS, PILLAR_HEIGHT, "GoldPillar_3"],
[(0, -BEAM_LENGTH/2, PILLAR_HEIGHT/2), (0, 0, 0), (1, 1, 1), PILLAR_RADIUS, PILLAR_HEIGHT, "GoldPillar_4"],
[(BEAM_LENGTH, BEAM_LENGTH/2, PILLAR_HEIGHT/2), (0, 0, 0), (1, 1, 1), PILLAR_RADIUS, PILLAR_HEIGHT, "GoldPillar_5"],
[(2*BEAM_LENGTH, BEAM_LENGTH/2, PILLAR_HEIGHT/2), (0, 0, 0), (1, 1, 1), PILLAR_RADIUS, PILLAR_HEIGHT, "GoldPillar_6"],
[(BEAM_LENGTH, -BEAM_LENGTH/2, PILLAR_HEIGHT/2), (0, 0, 0), (1, 1, 1), PILLAR_RADIUS, PILLAR_HEIGHT, "GoldPillar_7"],
[(2*BEAM_LENGTH, -BEAM_LENGTH/2, PILLAR_HEIGHT/2), (0, 0, 0), (1, 1, 1), PILLAR_RADIUS, PILLAR_HEIGHT, "GoldPillar_8"],
]
first_beams_data = [
[(-BEAM_LENGTH, 0, PILLAR_HEIGHT), (math.radians(90), 0, 0), (1, 1, 1), BEAM_RADIUS, BEAM_LENGTH, "FirstBeam_1-3"],
[(0, 0, PILLAR_HEIGHT), (math.radians(90), 0, 0), (1, 1, 1), BEAM_RADIUS, BEAM_LENGTH, "FirstBeam_2-4"],
[(BEAM_LENGTH, 0, PILLAR_HEIGHT), (math.radians(90), 0, 0), (1, 1, 1), BEAM_RADIUS, BEAM_LENGTH, "FirstBeam_5-7"],
[(2*BEAM_LENGTH, 0, PILLAR_HEIGHT), (math.radians(90), 0, 0), (1, 1, 1), BEAM_RADIUS, BEAM_LENGTH, "FirstBeam_6-8"],
]
first_beam_pillars_data = [
[(-BEAM_LENGTH, BEAM_LENGTH/4, PILLAR_HEIGHT + BEAM_RADIUS + SMALL_PILLAR_HEIGHT/2), (0, 0, 0), (1, 1, 1), SMALL_PILLAR_RADIUS, SMALL_PILLAR_HEIGHT, "FirstBeamPillar_1-3_1"],
[(-BEAM_LENGTH, -BEAM_LENGTH/4, PILLAR_HEIGHT + BEAM_RADIUS + SMALL_PILLAR_HEIGHT/2), (0, 0, 0), (1, 1, 1), SMALL_PILLAR_RADIUS, SMALL_PILLAR_HEIGHT, "FirstBeamPillar_1-3_2"],
[(0, BEAM_LENGTH/4, PILLAR_HEIGHT + BEAM_RADIUS + SMALL_PILLAR_HEIGHT/2), (0, 0, 0), (1, 1, 1), SMALL_PILLAR_RADIUS, SMALL_PILLAR_HEIGHT, "FirstBeamPillar_2-4_1"],
[(0, -BEAM_LENGTH/4, PILLAR_HEIGHT + BEAM_RADIUS + SMALL_PILLAR_HEIGHT/2), (0, 0, 0), (1, 1, 1), SMALL_PILLAR_RADIUS, SMALL_PILLAR_HEIGHT, "FirstBeamPillar_2-4_2"],
[(BEAM_LENGTH, BEAM_LENGTH/4, PILLAR_HEIGHT + BEAM_RADIUS + SMALL_PILLAR_HEIGHT/2), (0, 0, 0), (1, 1, 1), SMALL_PILLAR_RADIUS, SMALL_PILLAR_HEIGHT, "FirstBeamPillar_5-7_1"],
[(BEAM_LENGTH, -BEAM_LENGTH/4, PILLAR_HEIGHT + BEAM_RADIUS + SMALL_PILLAR_HEIGHT/2), (0, 0, 0), (1, 1, 1), SMALL_PILLAR_RADIUS, SMALL_PILLAR_HEIGHT, "FirstBeamPillar_5-7_2"],
[(2*BEAM_LENGTH, BEAM_LENGTH/4, PILLAR_HEIGHT + BEAM_RADIUS + SMALL_PILLAR_HEIGHT/2), (0, 0, 0), (1, 1, 1), SMALL_PILLAR_RADIUS, SMALL_PILLAR_HEIGHT, "FirstBeamPillar_6-8_1"],
[(2*BEAM_LENGTH, -BEAM_LENGTH/4, PILLAR_HEIGHT + BEAM_RADIUS + SMALL_PILLAR_HEIGHT/2), (0, 0, 0), (1, 1, 1), SMALL_PILLAR_RADIUS, SMALL_PILLAR_HEIGHT, "FirstBeamPillar_6-8_2"],
]
second_beams_data = [
[(-BEAM_LENGTH, 0, PILLAR_HEIGHT + BEAM_RADIUS + SMALL_PILLAR_HEIGHT + BEAM_RADIUS), (math.radians(90), 0, 0), (1, 1, 1), BEAM_RADIUS, BEAM_LENGTH/2, "SecondBeam_1-3_2"],
[(0, 0, PILLAR_HEIGHT + BEAM_RADIUS + SMALL_PILLAR_HEIGHT + BEAM_RADIUS), (math.radians(90), 0, 0), (1, 1, 1), BEAM_RADIUS, BEAM_LENGTH/2, "SecondBeam_2-4_2"],
[(BEAM_LENGTH, 0, PILLAR_HEIGHT + BEAM_RADIUS + SMALL_PILLAR_HEIGHT + BEAM_RADIUS), (math.radians(90), 0, 0), (1, 1, 1), BEAM_RADIUS, BEAM_LENGTH/2, "SecondBeam_5-7_2"],
[(2*BEAM_LENGTH, 0, PILLAR_HEIGHT + BEAM_RADIUS + SMALL_PILLAR_HEIGHT + BEAM_RADIUS), (math.radians(90), 0, 0), (1, 1, 1), BEAM_RADIUS, BEAM_LENGTH/2, "SecondBeam_6-8_2"],
]
second_beam_pillars_data = [
[(-BEAM_LENGTH, 0, PILLAR_HEIGHT + BEAM_RADIUS + SMALL_PILLAR_HEIGHT + BEAM_RADIUS + BEAM_RADIUS + SMALL_PILLAR_HEIGHT/2), (0, 0, 0), (1, 1, 1), SMALL_PILLAR_RADIUS, SMALL_PILLAR_HEIGHT, "SecondBeamPillar_1-3_2"],
[(0, 0, PILLAR_HEIGHT + BEAM_RADIUS + SMALL_PILLAR_HEIGHT + BEAM_RADIUS + BEAM_RADIUS + SMALL_PILLAR_HEIGHT/2), (0, 0, 0), (1, 1, 1), SMALL_PILLAR_RADIUS, SMALL_PILLAR_HEIGHT, "SecondBeamPillar_2-4_2"],
[(BEAM_LENGTH, 0, PILLAR_HEIGHT + BEAM_RADIUS + SMALL_PILLAR_HEIGHT + BEAM_RADIUS + BEAM_RADIUS + SMALL_PILLAR_HEIGHT/2), (0, 0, 0), (1, 1, 1), SMALL_PILLAR_RADIUS, SMALL_PILLAR_HEIGHT, "SecondBeamPillar_5-7_2"],
[(2*BEAM_LENGTH, 0, PILLAR_HEIGHT + BEAM_RADIUS + SMALL_PILLAR_HEIGHT + BEAM_RADIUS + BEAM_RADIUS + SMALL_PILLAR_HEIGHT/2), (0, 0, 0), (1, 1, 1), SMALL_PILLAR_RADIUS, SMALL_PILLAR_HEIGHT, "SecondBeamPillar_6-8_2"],
]
hengd_data = [
[(0.5*BEAM_LENGTH, BEAM_LENGTH/2, PILLAR_HEIGHT), (0, math.radians(90), 0), (1, 1, 1), HENGD_RADIUS, 3*BEAM_LENGTH, "Hengd_1"],
[(0.5*BEAM_LENGTH, -BEAM_LENGTH/2, PILLAR_HEIGHT), (0, math.radians(90), 0), (1, 1, 1), HENGD_RADIUS, 3*BEAM_LENGTH, "Hengd_2"],
[(0.5*BEAM_LENGTH, BEAM_LENGTH/4, PILLAR_HEIGHT + BEAM_RADIUS + SMALL_PILLAR_HEIGHT + BEAM_RADIUS), (0, math.radians(90), 0), (1, 1, 1), HENGD_RADIUS, 3*BEAM_LENGTH, "Hengd_3"],
[(0.5*BEAM_LENGTH, -BEAM_LENGTH/4, PILLAR_HEIGHT + BEAM_RADIUS + SMALL_PILLAR_HEIGHT + BEAM_RADIUS), (0, math.radians(90), 0), (1, 1, 1), HENGD_RADIUS, 3*BEAM_LENGTH, "Hengd_4"],
]
ridge_data = [
[(0.5*BEAM_LENGTH, 0, PILLAR_HEIGHT + BEAM_RADIUS + SMALL_PILLAR_HEIGHT + BEAM_RADIUS + BEAM_RADIUS + SMALL_PILLAR_HEIGHT + BEAM_RADIUS), (0, math.radians(90), 0), (1, 1, 1), RIDGE_RADIUS, 3*BEAM_LENGTH, "Ridge"],
]
print("开始创建抬梁结构...")
create_cylinders_from_data(gold_pillars_data, red_material)
print("✓ 八根金柱创建完成(红色材质)")
create_cylinders_from_data(first_beams_data, green_material)
print("✓ 一道横梁创建完成(绿色材质)")
create_cylinders_from_data(first_beam_pillars_data, red_material)
print("✓ 瓜柱创建完成(红色材质)")
create_cylinders_from_data(second_beams_data, green_material)
print("✓ 二道梁创建完成(绿色材质)")
create_cylinders_from_data(second_beam_pillars_data, red_material)
print("✓ 二道梁上瓜柱创建完成(红色材质)")
create_cylinders_from_data(hengd_data, blue_material)
print("✓ 桁创建完成(蓝色材质)")
create_cylinders_from_data(ridge_data, blue_material)
print("✓ 栋创建完成(蓝色材质)")
print("🎉 抬梁结构创建完成!")