flowchart LR
%% 桌面模块
subgraph TOP["桌面 TABLE_TOP"]
direction LR
%% 計算桌腳中心點
AVERAGE_LEG_X["Average<br/>输入: Input (Numbers)<br/>输出: Arithmetic mean<br/>GUID: 3e0451ca-da24-452d-a6b1-a6877453d4e4<br/>位置: X=100, Y=50"]
AVERAGE_LEG_Y["Average<br/>输入: Input (Numbers)<br/>输出: Arithmetic mean<br/>GUID: 3e0451ca-da24-452d-a6b1-a6877453d4e4<br/>位置: X=100, Y=150"]
SLIDER_TOP_Z["Number Slider<br/>输出: 70.0<br/>桌面高度(桌腳頂部)<br/>GUID: e2bb9b8d-0d80-44e7-aa2d-2e446f5c61da<br/>位置: X=100, Y=250"]
CONSTRUCT_POINT_CENTER["Construct Point<br/>输入: X coordinate, Y coordinate, Z coordinate<br/>输出: Point<br/>GUID: 9dceff86-6201-4c8e-90b1-706ad5bc3d49<br/>位置: X=300, Y=100"]
XY_PLANE_TOP["XY Plane<br/>输入: Origin (Point, optional)<br/>输出: Plane<br/>GUID: a896f6c1-dd6c-4830-88f2-44808c07dc10<br/>位置: X=500, Y=100"]
SLIDER_WIDTH["Number Slider<br/>输出: 120.0<br/>GUID: e2bb9b8d-0d80-44e7-aa2d-2e446f5c61da<br/>位置: X=100, Y=200"]
SLIDER_LENGTH["Number Slider<br/>输出: 80.0<br/>GUID: e2bb9b8d-0d80-44e7-aa2d-2e446f5c61da<br/>位置: X=100, Y=300"]
SLIDER_TOP_HEIGHT["Number Slider<br/>输出: 5.0<br/>GUID: e2bb9b8d-0d80-44e7-aa2d-2e446f5c61da<br/>位置: X=100, Y=400"]
CONSTANT_2["Number Slider<br/>输出: 2.0<br/>除數常數<br/>GUID: e2bb9b8d-0d80-44e7-aa2d-2e446f5c61da<br/>位置: X=300, Y=250"]
DIVISION_X["Division<br/>输入: A, B<br/>输出: A/B<br/>GUID: 7ed9789a-7403-4eeb-9716-d6e5681f4136<br/>位置: X=500, Y=200"]
DIVISION_Y["Division<br/>输入: A, B<br/>输出: A/B<br/>GUID: 7ed9789a-7403-4eeb-9716-d6e5681f4136<br/>位置: X=500, Y=300"]
DIVISION_Z["Division<br/>输入: A, B<br/>输出: A/B<br/>GUID: 7ed9789a-7403-4eeb-9716-d6e5681f4136<br/>位置: X=500, Y=400"]
CENTER_BOX_TOP["Center Box<br/>输入: Base (Plane), X, Y, Z<br/>输出: Box<br/>GUID: e1f83fb4-efe0-4f10-8c20-4b38df56b36c<br/>位置: X=700, Y=300"]
%% 連接:計算中心點
SLIDER_LEG1_X -->|"Number"| AVERAGE_LEG_X
SLIDER_LEG2_X -->|"Number"| AVERAGE_LEG_X
SLIDER_LEG3_X -->|"Number"| AVERAGE_LEG_X
SLIDER_LEG4_X -->|"Number"| AVERAGE_LEG_X
SLIDER_LEG1_Y -->|"Number"| AVERAGE_LEG_Y
SLIDER_LEG2_Y -->|"Number"| AVERAGE_LEG_Y
SLIDER_LEG3_Y -->|"Number"| AVERAGE_LEG_Y
SLIDER_LEG4_Y -->|"Number"| AVERAGE_LEG_Y
AVERAGE_LEG_X -->|"X coordinate"| CONSTRUCT_POINT_CENTER
AVERAGE_LEG_Y -->|"Y coordinate"| CONSTRUCT_POINT_CENTER
SLIDER_TOP_Z -->|"Z coordinate"| CONSTRUCT_POINT_CENTER
CONSTRUCT_POINT_CENTER -->|"Origin"| XY_PLANE_TOP
XY_PLANE_TOP -->|"Plane"| CENTER_BOX_TOP
SLIDER_WIDTH -->|"A"| DIVISION_X
SLIDER_LENGTH -->|"A"| DIVISION_Y
SLIDER_TOP_HEIGHT -->|"A"| DIVISION_Z
CONSTANT_2 -->|"B"| DIVISION_X
CONSTANT_2 -->|"B"| DIVISION_Y
CONSTANT_2 -->|"B"| DIVISION_Z
DIVISION_X -->|"X"| CENTER_BOX_TOP
DIVISION_Y -->|"Y"| CENTER_BOX_TOP
DIVISION_Z -->|"Z"| CENTER_BOX_TOP
end
%% 桌腳基礎模組(只創建一個,使用 Orient 複製到4個位置)
subgraph LEG_BASE["桌腳基礎 TABLE_LEG_BASE"]
direction LR
XY_PLANE_LEG_BASE["XY Plane<br/>输出: Plane<br/>GUID: a896f6c1-dd6c-4830-88f2-44808c07dc10<br/>位置: X=1000, Y=100"]
SLIDER_RADIUS_LEG["Number Slider<br/>输出: 2.5<br/>GUID: e2bb9b8d-0d80-44e7-aa2d-2e446f5c61da<br/>位置: X=1000, Y=200"]
CIRCLE_LEG_BASE["Circle<br/>输入: Plane, Radius<br/>输出: Circle<br/>GUID: 40dda121-a31b-421b-94b0-e46f5774f98e<br/>位置: X=1200, Y=150"]
BOUNDARY_SURFACES_LEG_BASE["Boundary Surfaces<br/>输入: Edges (Curves)<br/>输出: Surfaces<br/>GUID: 9ec27fcf-b30f-4ad2-b2d1-c1934c32f855<br/>位置: X=1400, Y=150"]
SLIDER_LEG_HEIGHT["Number Slider<br/>输出: 70.0<br/>GUID: e2bb9b8d-0d80-44e7-aa2d-2e446f5c61da<br/>位置: X=1000, Y=300"]
UNIT_Z["Unit Z<br/>输出: Vector<br/>GUID: 9428ce3a-b2a0-4c8f-832a-8ad2b81a9743<br/>位置: X=1000, Y=400"]
AMPLITUDE_LEG_BASE["Amplitude<br/>输入: Vector, Amplitude (Number)<br/>输出: Vector<br/>GUID: 7b93e28d-6191-425a-844e-6e9e4127dd6b<br/>位置: X=1200, Y=250"]
EXTRUDE_LEG_BASE["Extrude<br/>输入: Base (Surface), Direction (Vector)<br/>输出: Result<br/>GUID: 1c5e4c65-5f57-432c-96d3-53563470ab51<br/>位置: X=1600, Y=200"]
XY_PLANE_LEG_BASE -->|"Plane"| CIRCLE_LEG_BASE
SLIDER_RADIUS_LEG -->|"Radius"| CIRCLE_LEG_BASE
CIRCLE_LEG_BASE -->|"Edges"| BOUNDARY_SURFACES_LEG_BASE
BOUNDARY_SURFACES_LEG_BASE -->|"Base"| EXTRUDE_LEG_BASE
UNIT_Z -->|"Vector"| AMPLITUDE_LEG_BASE
SLIDER_LEG_HEIGHT -->|"Amplitude"| AMPLITUDE_LEG_BASE
AMPLITUDE_LEG_BASE -->|"Direction"| EXTRUDE_LEG_BASE
end
%% 桌腳位置平面(4個不同位置的平面,使用 Move 創建)
subgraph LEG_PLANES["桌腳位置平面"]
direction LR
XY_PLANE_LEG_REF["XY Plane<br/>输出: Plane<br/>GUID: a896f6c1-dd6c-4830-88f2-44808c07dc10<br/>位置: X=1800, Y=100"]
%% 桌腳1的Slider
SLIDER_LEG1_X["Number Slider<br/>输出: -50.0<br/>GUID: e2bb9b8d-0d80-44e7-aa2d-2e446f5c61da<br/>位置: X=1800, Y=200"]
SLIDER_LEG1_Y["Number Slider<br/>输出: -30.0<br/>GUID: e2bb9b8d-0d80-44e7-aa2d-2e446f5c61da<br/>位置: X=1800, Y=300"]
SLIDER_LEG1_Z["Number Slider<br/>输出: 0.0<br/>GUID: e2bb9b8d-0d80-44e7-aa2d-2e446f5c61da<br/>位置: X=1800, Y=450"]
%% 桌腳2的Slider
SLIDER_LEG2_X["Number Slider<br/>输出: 50.0<br/>GUID: e2bb9b8d-0d80-44e7-aa2d-2e446f5c61da<br/>位置: X=1800, Y=350"]
SLIDER_LEG2_Y["Number Slider<br/>输出: -30.0<br/>GUID: e2bb9b8d-0d80-44e7-aa2d-2e446f5c61da<br/>位置: X=1800, Y=450"]
SLIDER_LEG2_Z["Number Slider<br/>输出: 0.0<br/>GUID: e2bb9b8d-0d80-44e7-aa2d-2e446f5c61da<br/>位置: X=1800, Y=600"]
%% 桌腳3的Slider
SLIDER_LEG3_X["Number Slider<br/>输出: -50.0<br/>GUID: e2bb9b8d-0d80-44e7-aa2d-2e446f5c61da<br/>位置: X=1800, Y=500"]
SLIDER_LEG3_Y["Number Slider<br/>输出: 30.0<br/>GUID: e2bb9b8d-0d80-44e7-aa2d-2e446f5c61da<br/>位置: X=1800, Y=600"]
SLIDER_LEG3_Z["Number Slider<br/>输出: 0.0<br/>GUID: e2bb9b8d-0d80-44e7-aa2d-2e446f5c61da<br/>位置: X=1800, Y=750"]
%% 桌腳4的Slider
SLIDER_LEG4_X["Number Slider<br/>输出: 50.0<br/>GUID: e2bb9b8d-0d80-44e7-aa2d-2e446f5c61da<br/>位置: X=1800, Y=650"]
SLIDER_LEG4_Y["Number Slider<br/>输出: 30.0<br/>GUID: e2bb9b8d-0d80-44e7-aa2d-2e446f5c61da<br/>位置: X=1800, Y=750"]
SLIDER_LEG4_Z["Number Slider<br/>输出: 0.0<br/>GUID: e2bb9b8d-0d80-44e7-aa2d-2e446f5c61da<br/>位置: X=1800, Y=900"]
%% Vector XYZ組件
VECTOR_LEG1["Vector XYZ<br/>输入: X component, Y component, Z component<br/>输出: Vector<br/>GUID: d3116726-7a3e-4089-b3e2-216b266a1245<br/>位置: X=2000, Y=300"]
VECTOR_LEG2["Vector XYZ<br/>输入: X component, Y component, Z component<br/>输出: Vector<br/>GUID: d3116726-7a3e-4089-b3e2-216b266a1245<br/>位置: X=2000, Y=450"]
VECTOR_LEG3["Vector XYZ<br/>输入: X component, Y component, Z component<br/>输出: Vector<br/>GUID: d3116726-7a3e-4089-b3e2-216b266a1245<br/>位置: X=2000, Y=600"]
VECTOR_LEG4["Vector XYZ<br/>输入: X component, Y component, Z component<br/>输出: Vector<br/>GUID: d3116726-7a3e-4089-b3e2-216b266a1245<br/>位置: X=2000, Y=750"]
MOVE_PLANE_LEG1["Move<br/>输入: Geometry, Motion<br/>输出: Geometry<br/>GUID: 6af48ec9-decb-4ad7-81ac-cd20452189a2<br/>位置: X=2200, Y=200"]
MOVE_PLANE_LEG2["Move<br/>输入: Geometry, Motion<br/>输出: Geometry<br/>GUID: 6af48ec9-decb-4ad7-81ac-cd20452189a2<br/>位置: X=2200, Y=350"]
MOVE_PLANE_LEG3["Move<br/>输入: Geometry, Motion<br/>输出: Geometry<br/>GUID: 6af48ec9-decb-4ad7-81ac-cd20452189a2<br/>位置: X=2200, Y=500"]
MOVE_PLANE_LEG4["Move<br/>输入: Geometry, Motion<br/>输出: Geometry<br/>GUID: 6af48ec9-decb-4ad7-81ac-cd20452189a2<br/>位置: X=2200, Y=650"]
%% 連接Slider到Vector XYZ
SLIDER_LEG1_X -->|"X component"| VECTOR_LEG1
SLIDER_LEG1_Y -->|"Y component"| VECTOR_LEG1
SLIDER_LEG1_Z -->|"Z component"| VECTOR_LEG1
SLIDER_LEG2_X -->|"X component"| VECTOR_LEG2
SLIDER_LEG2_Y -->|"Y component"| VECTOR_LEG2
SLIDER_LEG2_Z -->|"Z component"| VECTOR_LEG2
SLIDER_LEG3_X -->|"X component"| VECTOR_LEG3
SLIDER_LEG3_Y -->|"Y component"| VECTOR_LEG3
SLIDER_LEG3_Z -->|"Z component"| VECTOR_LEG3
SLIDER_LEG4_X -->|"X component"| VECTOR_LEG4
SLIDER_LEG4_Y -->|"Y component"| VECTOR_LEG4
SLIDER_LEG4_Z -->|"Z component"| VECTOR_LEG4
%% 連接XY Plane和Vector到Move
XY_PLANE_LEG_REF -->|"Plane"| MOVE_PLANE_LEG1
XY_PLANE_LEG_REF -->|"Plane"| MOVE_PLANE_LEG2
XY_PLANE_LEG_REF -->|"Plane"| MOVE_PLANE_LEG3
XY_PLANE_LEG_REF -->|"Plane"| MOVE_PLANE_LEG4
VECTOR_LEG1 -->|"Motion"| MOVE_PLANE_LEG1
VECTOR_LEG2 -->|"Motion"| MOVE_PLANE_LEG2
VECTOR_LEG3 -->|"Motion"| MOVE_PLANE_LEG3
VECTOR_LEG4 -->|"Motion"| MOVE_PLANE_LEG4
end
%% Orient 組件(將基礎桌腳複製到4個不同位置的平面)
subgraph ORIENT_GROUP["Orient 複製組"]
direction LR
ORIENT_LEG1["Orient<br/>输入: Geometry, Source (Plane), Target (Plane)<br/>输出: Geometry<br/>GUID: b08eae6f-0030-4f63-be06-9f1c7f89efd1<br/>位置: X=2400, Y=200"]
ORIENT_LEG2["Orient<br/>输入: Geometry, Source (Plane), Target (Plane)<br/>输出: Geometry<br/>GUID: b08eae6f-0030-4f63-be06-9f1c7f89efd1<br/>位置: X=2400, Y=350"]
ORIENT_LEG3["Orient<br/>输入: Geometry, Source (Plane), Target (Plane)<br/>输出: Geometry<br/>GUID: b08eae6f-0030-4f63-be06-9f1c7f89efd1<br/>位置: X=2400, Y=500"]
ORIENT_LEG4["Orient<br/>输入: Geometry, Source (Plane), Target (Plane)<br/>输出: Geometry<br/>GUID: b08eae6f-0030-4f63-be06-9f1c7f89efd1<br/>位置: X=2400, Y=650"]
end
%% 连接基礎桌腳到 Orient
EXTRUDE_LEG_BASE -->|"Geometry"| ORIENT_LEG1
EXTRUDE_LEG_BASE -->|"Geometry"| ORIENT_LEG2
EXTRUDE_LEG_BASE -->|"Geometry"| ORIENT_LEG3
EXTRUDE_LEG_BASE -->|"Geometry"| ORIENT_LEG4
XY_PLANE_LEG_BASE -->|"Source"| ORIENT_LEG1
XY_PLANE_LEG_BASE -->|"Source"| ORIENT_LEG2
XY_PLANE_LEG_BASE -->|"Source"| ORIENT_LEG3
XY_PLANE_LEG_BASE -->|"Source"| ORIENT_LEG4
MOVE_PLANE_LEG1 -->|"Target"| ORIENT_LEG1
MOVE_PLANE_LEG2 -->|"Target"| ORIENT_LEG2
MOVE_PLANE_LEG3 -->|"Target"| ORIENT_LEG3
MOVE_PLANE_LEG4 -->|"Target"| ORIENT_LEG4
%% 最终合并
BOOLEAN_UNION["Solid Union<br/>输入: Breps<br/>输出: Result<br/>最终几何体<br/>GUID: cabe86d9-6ef0-4037-90bd-01a02e0d30f0<br/>位置: X=2600, Y=400"]
%% 连接所有幾何體到Boolean Union
CENTER_BOX_TOP -->|"Breps"| BOOLEAN_UNION
ORIENT_LEG1 -->|"Breps"| BOOLEAN_UNION
ORIENT_LEG2 -->|"Breps"| BOOLEAN_UNION
ORIENT_LEG3 -->|"Breps"| BOOLEAN_UNION
ORIENT_LEG4 -->|"Breps"| BOOLEAN_UNION
%% 样式
classDef inputStyle fill:#e1f5ff,stroke:#01579b,stroke-width:2px
classDef geometryStyle fill:#fff4e1,stroke:#e65100,stroke-width:2px
classDef outputStyle fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px
class XY_PLANE_TOP,XY_PLANE_LEG_BASE,XY_PLANE_LEG_REF,SLIDER_WIDTH,SLIDER_LENGTH,SLIDER_TOP_HEIGHT,SLIDER_TOP_Z,SLIDER_RADIUS_LEG,SLIDER_LEG_HEIGHT,SLIDER_LEG1_X,SLIDER_LEG1_Y,SLIDER_LEG1_Z,SLIDER_LEG2_X,SLIDER_LEG2_Y,SLIDER_LEG2_Z,SLIDER_LEG3_X,SLIDER_LEG3_Y,SLIDER_LEG3_Z,SLIDER_LEG4_X,SLIDER_LEG4_Y,SLIDER_LEG4_Z,CONSTANT_2,UNIT_Z inputStyle
class CIRCLE_LEG_BASE,BOUNDARY_SURFACES_LEG_BASE,MOVE_PLANE_LEG1,MOVE_PLANE_LEG2,MOVE_PLANE_LEG3,MOVE_PLANE_LEG4,AMPLITUDE_LEG_BASE,VECTOR_LEG1,VECTOR_LEG2,VECTOR_LEG3,VECTOR_LEG4,ORIENT_LEG1,ORIENT_LEG2,ORIENT_LEG3,ORIENT_LEG4,AVERAGE_LEG_X,AVERAGE_LEG_Y,CONSTRUCT_POINT_CENTER,DIVISION_X,DIVISION_Y,DIVISION_Z,CENTER_BOX_TOP geometryStyle
class EXTRUDE_LEG_BASE,BOOLEAN_UNION outputStyle