translate([0,0,0]) { union() { translate([0,0,0]) { linear_extrude(height=20) polygon([ [12, 20], [11, 19], [11, 18], [22, 2], [22, 1], [21, 0], [2, 0], [44, 0], [42.3, 0.3], [42, 2], [53.7, 18.3], [54, 19.7], [53, 20], ]); difference() { polyhedron( points = [ [0,0,0], // 索引 0: V0 [0,0,20], // 索引 1: V1 [64,0,20], // 索引 2: V2 [64,0, 0], // 索引 3: V3 [64,-60,0],// 索引 4: V4 [0, -60,0] // 索引 5: V5 ], faces = [ // 修正后的 faces 列表: [0, 5, 4, 3], // Bottom (Z=0) - 确认顺序,从外部看顺时针 [1, 0, 3, 2], // Face at Y=0 (Vertical Front) - 确认顺序,从外部看顺时针 [1, 2, 4, 5], // Top (Sloped) - 确认顺序,从外部看顺时针 [1, 5, 0], // Left Side (X=0, Triangle) - 确认顺序,从外部看顺时针 [2, 3, 4] // Right Side (X=64, Triangle) - 确认顺序,从外部看顺时针 ] ); translate([0, -60, 0]) difference() { cube(4); translate([4,4,0]) cylinder(h=4, r=4); } translate([60, -60, 0]) difference() { cube(4); translate([0,4,0]) cylinder(h=4, r=4); } } } translate([64, 0, 0]) { difference() { polyhedron( points = [ [0,0,0], // 索引 0: V0 [0,0,20], // 索引 1: V1 [64,0,20], // 索引 2: V2 [64,0, 0], // 索引 3: V3 [64,-60,0],// 索引 4: V4 [0, -60,0] // 索引 5: V5 ], faces = [ // 修正后的 faces 列表: [0, 5, 4, 3], // Bottom (Z=0) - 确认顺序,从外部看顺时针 [1, 0, 3, 2], // Face at Y=0 (Vertical Front) - 确认顺序,从外部看顺时针 [1, 2, 4, 5], // Top (Sloped) - 确认顺序,从外部看顺时针 [1, 5, 0], // Left Side (X=0, Triangle) - 确认顺序,从外部看顺时针 [2, 3, 4] // Right Side (X=64, Triangle) - 确认顺序,从外部看顺时针 ] ); translate([0, -60, 0]) difference() { cube(4); translate([4,4,0]) cylinder(h=4, r=4); } translate([60, -60, 0]) difference() { cube(4); translate([0,4,0]) cylinder(h=4, r=4); } } } translate([128, 0, 0]) { linear_extrude(height=20) polygon([ [12, 20], [11, 19], [11, 18], [22, 2], [22, 1], [21, 0], [2, 0], [44, 0], [42.3, 0.3], [42, 2], [53.7, 18.3], [54, 19.7], [53, 20], ]); difference() { polyhedron( points = [ [0,0,0], // 索引 0: V0 [0,0,20], // 索引 1: V1 [64,0,20], // 索引 2: V2 [64,0, 0], // 索引 3: V3 [64,-60,0],// 索引 4: V4 [0, -60,0] // 索引 5: V5 ], faces = [ // 修正后的 faces 列表: [0, 5, 4, 3], // Bottom (Z=0) - 确认顺序,从外部看顺时针 [1, 0, 3, 2], // Face at Y=0 (Vertical Front) - 确认顺序,从外部看顺时针 [1, 2, 4, 5], // Top (Sloped) - 确认顺序,从外部看顺时针 [1, 5, 0], // Left Side (X=0, Triangle) - 确认顺序,从外部看顺时针 [2, 3, 4] // Right Side (X=64, Triangle) - 确认顺序,从外部看顺时针 ] ); translate([0, -60, 0]) difference() { cube(4); translate([4,4,0]) cylinder(h=4, r=4); } translate([60, -60, 0]) difference() { cube(4); translate([0,4,0]) cylinder(h=4, r=4); } } } } } translate([200,0,0]) { union() { translate([0,0,0]) { linear_extrude(height=20) polygon([ [12, 20], [11, 19], [11, 18], [22, 2], [22, 1], [21, 0], [2, 0], [44, 0], [42.3, 0.3], [42, 2], [53.7, 18.3], [54, 19.7], [53, 20], ]); difference() { polyhedron( points = [ [0,0,0], // 索引 0: V0 [0,0,20], // 索引 1: V1 [64,0,20], // 索引 2: V2 [64,0, 0], // 索引 3: V3 [64,-60,0],// 索引 4: V4 [0, -60,0] // 索引 5: V5 ], faces = [ // 修正后的 faces 列表: [0, 5, 4, 3], // Bottom (Z=0) - 确认顺序,从外部看顺时针 [1, 0, 3, 2], // Face at Y=0 (Vertical Front) - 确认顺序,从外部看顺时针 [1, 2, 4, 5], // Top (Sloped) - 确认顺序,从外部看顺时针 [1, 5, 0], // Left Side (X=0, Triangle) - 确认顺序,从外部看顺时针 [2, 3, 4] // Right Side (X=64, Triangle) - 确认顺序,从外部看顺时针 ] ); translate([0, -60, 0]) difference() { cube(4); translate([4,4,0]) cylinder(h=4, r=4); } translate([60, -60, 0]) difference() { cube(4); translate([0,4,0]) cylinder(h=4, r=4); } } } translate([64, 0, 0]) { difference() { polyhedron( points = [ [0,0,0], // 索引 0: V0 [0,0,20], // 索引 1: V1 [64,0,20], // 索引 2: V2 [64,0, 0], // 索引 3: V3 [64,-60,0],// 索引 4: V4 [0, -60,0] // 索引 5: V5 ], faces = [ // 修正后的 faces 列表: [0, 5, 4, 3], // Bottom (Z=0) - 确认顺序,从外部看顺时针 [1, 0, 3, 2], // Face at Y=0 (Vertical Front) - 确认顺序,从外部看顺时针 [1, 2, 4, 5], // Top (Sloped) - 确认顺序,从外部看顺时针 [1, 5, 0], // Left Side (X=0, Triangle) - 确认顺序,从外部看顺时针 [2, 3, 4] // Right Side (X=64, Triangle) - 确认顺序,从外部看顺时针 ] ); translate([0, -60, 0]) difference() { cube(4); translate([4,4,0]) cylinder(h=4, r=4); } translate([60, -60, 0]) difference() { cube(4); translate([0,4,0]) cylinder(h=4, r=4); } } } translate([128, 0, 0]) { linear_extrude(height=20) polygon([ [12, 20], [11, 19], [11, 18], [22, 2], [22, 1], [21, 0], [2, 0], [44, 0], [42.3, 0.3], [42, 2], [53.7, 18.3], [54, 19.7], [53, 20], ]); difference() { polyhedron( points = [ [0,0,0], // 索引 0: V0 [0,0,20], // 索引 1: V1 [64,0,20], // 索引 2: V2 [64,0, 0], // 索引 3: V3 [64,-60,0],// 索引 4: V4 [0, -60,0] // 索引 5: V5 ], faces = [ // 修正后的 faces 列表: [0, 5, 4, 3], // Bottom (Z=0) - 确认顺序,从外部看顺时针 [1, 0, 3, 2], // Face at Y=0 (Vertical Front) - 确认顺序,从外部看顺时针 [1, 2, 4, 5], // Top (Sloped) - 确认顺序,从外部看顺时针 [1, 5, 0], // Left Side (X=0, Triangle) - 确认顺序,从外部看顺时针 [2, 3, 4] // Right Side (X=64, Triangle) - 确认顺序,从外部看顺时针 ] ); translate([0, -60, 0]) difference() { cube(4); translate([4,4,0]) cylinder(h=4, r=4); } translate([60, -60, 0]) difference() { cube(4); translate([0,4,0]) cylinder(h=4, r=4); } } } } } translate([400,0,0]) { union() { translate([0,0,0]) { linear_extrude(height=20) polygon([ [12, 20], [11, 19], [11, 18], [22, 2], [22, 1], [21, 0], [2, 0], [44, 0], [42.3, 0.3], [42, 2], [53.7, 18.3], [54, 19.7], [53, 20], ]); difference() { polyhedron( points = [ [0,0,0], // 索引 0: V0 [0,0,20], // 索引 1: V1 [64,0,20], // 索引 2: V2 [64,0, 0], // 索引 3: V3 [64,-60,0],// 索引 4: V4 [0, -60,0] // 索引 5: V5 ], faces = [ // 修正后的 faces 列表: [0, 5, 4, 3], // Bottom (Z=0) - 确认顺序,从外部看顺时针 [1, 0, 3, 2], // Face at Y=0 (Vertical Front) - 确认顺序,从外部看顺时针 [1, 2, 4, 5], // Top (Sloped) - 确认顺序,从外部看顺时针 [1, 5, 0], // Left Side (X=0, Triangle) - 确认顺序,从外部看顺时针 [2, 3, 4] // Right Side (X=64, Triangle) - 确认顺序,从外部看顺时针 ] ); translate([0, -60, 0]) difference() { cube(4); translate([4,4,0]) cylinder(h=4, r=4); } translate([60, -60, 0]) difference() { cube(4); translate([0,4,0]) cylinder(h=4, r=4); } } } translate([64, 0, 0]) { linear_extrude(height=20) polygon([ [12, 20], [11, 19], [11, 18], [22, 2], [22, 1], [21, 0], [2, 0], [44, 0], [42.3, 0.3], [42, 2], [53.7, 18.3], [54, 19.7], [53, 20], ]); difference() { polyhedron( points = [ [0,0,0], // 索引 0: V0 [0,0,20], // 索引 1: V1 [64,0,20], // 索引 2: V2 [64,0, 0], // 索引 3: V3 [64,-60,0],// 索引 4: V4 [0, -60,0] // 索引 5: V5 ], faces = [ // 修正后的 faces 列表: [0, 5, 4, 3], // Bottom (Z=0) - 确认顺序,从外部看顺时针 [1, 0, 3, 2], // Face at Y=0 (Vertical Front) - 确认顺序,从外部看顺时针 [1, 2, 4, 5], // Top (Sloped) - 确认顺序,从外部看顺时针 [1, 5, 0], // Left Side (X=0, Triangle) - 确认顺序,从外部看顺时针 [2, 3, 4] // Right Side (X=64, Triangle) - 确认顺序,从外部看顺时针 ] ); translate([0, -60, 0]) difference() { cube(4); translate([4,4,0]) cylinder(h=4, r=4); } translate([60, -60, 0]) difference() { cube(4); translate([0,4,0]) cylinder(h=4, r=4); } } } } }