US 单元_拉伸 · US

将型材截面沿基线拉伸,自动添加装配表所需全部信息,支持开孔、铣切、横向/竖向模式
📂 LK → Util → US 📄 US.cs 🔘 双按钮 🧩 三过程 🏷️ 信息聚合

📖 功能概述

该组件是整个LK型材制作流程的核心枢纽。它接收平面截面、基线、基准平面、Transform,以及各种加工特征(开孔、铣切),经过一套三阶段处理流程(U1→U2→U3),输出拉伸完成的型材实体以及完整的属性数据集。

该组件使用 ButtonComponent2(两个独立按钮),分别控制:

所有13个输入参数中,前面4个为必填(截面、基准平面、Transform、基线),其余均为可选。前11个几何参数在默认状态下全部隐藏,以保持画布整洁。

📥 输入参数

名称类型必填说明
型材截面 Brep 必填 需要拉伸的型材截面,必须为平面曲面。如果是外部引用几何体,将读取其ReferenceID作为截面ID;否则从UserDictionary的"ID"键读取。
基准平面 Plane 必填 截面的基准平面,用于确定截面在空间中的放置位置和方向。
TS Transform 必填 截面空间变换数据。用于将截面从基准平面变换到目标位置。
基线 Curve 必填 型材拉伸基线。截面将沿此曲线进行扫掠拉伸。剪切面和部分输出属性也依赖此基线。
端部铣切1 Brep 可选 型材端部切割体。必须与基线相交,建议为平面曲面。用于定义型材的起端切割形状。
端部铣切2 Brep 可选 型材端部切割体。必须与基线相交,建议为平面曲面。用于定义型材的终端切割形状。
铣切 Brep 可选 型材内部铣切体,必须为实体列表
圆孔 Brep 可选 型材圆孔。列表
机丝孔 Brep 可选 型材机丝孔(螺纹孔)。列表
沉头孔 Brep 可选 型材沉头孔。列表
Panel Brep 必填 表皮模型。必须是外部引用的几何体(IsReferencedGeometry=true),用于提取单元号、批次、面板ID等信息。
名称 Text 可选 型材名称。默认 "XX"。将从"信息列表"中查找匹配的名称获取序号等信息。
类型 Text 可选 型材类型。默认 "铝型材"。将用于图层路径的构建。
信息列表 Text 可选 序号、名称、工程属性、物料编码信息列表。格式:序号,名称,物料编码,工程属性,每行一项。列表

📤 输出参数

名称类型说明
型材 Brep 拉伸完成后的型材实体。包含截面沿基线扫掠并经布尔差运算后的结果。
铣切体 Brep 型材铣切体汇总列表。所有铣切体(端部+内部+孔洞)的合集。列表
图层 Text 自动生成的图层路径。格式:模型::{单元号}::{类型}::{横向/竖向}::{名称}-{模号}
信息Key Generic 32个属性键名的列表,涵盖从几何特征到装配表所需的所有字段。列表
信息Value Generic 与Key一一对应的属性值列表。包含从截面提取的模号、物料编码,从表皮提取的单元号、批次,以及自动生成的编号、加工图号等。列表
截面平面 Plane 截面放置平面。即"截面-基准pln"对应的平面。
型材平面 Plane 型材局部坐标平面(pln)。由基线中点和截面方向计算得出。

🧠 核心算法详解

一、U1:截面处理与扫掠

输入:截面、基准平面、Transform、基线、按钮1状态
输出:拉伸型材、截面pln、过程数据列表

步骤:
1 截面简化判断:如果按钮1状态="截面简化",用 SimplifySection 将原始截面进行简化处理;否则保留原截面。
2 截面ID获取:如果截面是外部引用几何体,取其ReferenceID;否则从UserDictionary的"ID"键读取GUID。
3 截面移位:将截面复制一份并施加Transform变换,从基准平面位置移动到目标位置。
4 SuperExtrude扫掠:将移位后的截面沿基线进行扫掠,生成实体型材。
5 数据打包:将截面ID、拉伸截面、截面pln、基线、Transform等信息打包为ArchivableDictionary列表,传递给后续过程。

二、U2:几何特征汇总

输入:端部铣切1、端部铣切2、铣切列表、圆孔列表、机丝孔列表、沉头孔列表
输出:铣切体汇总列表、过程数据列表

步骤:
1 将两类端部铣切Brep、以及四类开孔/铣切体的Brep分别打包为ArchivableDictionary。
2 将所有Brep(包括端部铣切、内部铣切、圆孔、机丝孔、沉头孔)汇总到一个列表中。
3 这个汇总列表将作为布尔差的切割工具集。

数据结构:
 • arct1 = 端部铣切1(键 "a1-1")
 • arct2 = 端部铣切2(键 "a2-2")
 • arct3 = 铣切体列表(键 "a3-0" ~ "a3-n")
 • arct4 = 圆孔列表(键 "a4-0" ~ "a4-n")
 • arct5 = 机丝孔列表(键 "a5-0" ~ "a5-n")
 • arct6 = 沉头孔列表(键 "a6-0" ~ "a6-n")

三、有效性与兼容性检查

在主流程U1→U2→U3之间,组件执行多项检查:

基线-切割面相交检查:
 • 检查端部铣切1是否与基线相交(CurveBrep交集检测)
 • 检查端部铣切2是否与基线相交
 • 任一不相交 → 报错终止

铣切实体性检查:
 • 铣切体必须为实体(IsSolid)
 • 如果铣切体方向朝内(Inward),自动翻转(Flip)

兼容性检查(防止接错端口):
 • 圆孔必须为标准圆柱 → 否则报错
 • 铣切不能是标准圆柱 → 否则报错(防止把孔误接到铣切口)
 • 沉头孔不能是标准圆柱 → 否则报错(防止把圆柱误接为沉头孔)

四、U3:信息聚合与属性生成

输入:Panel表皮、按钮2状态、类型、名称、U1数据、U2数据
输出:图层路径、信息Value列表、型材平面pln、物料编码、工程属性

步骤:
1 截面属性读取:通过截面ID找到Rhino物件,读取其"模号"、"物料编码"、"工程属性"。
2 表皮属性读取:通过Panel的ReferenceID,读取"单元号"、"批次"。
3 型材平面计算:取基线的中点,根据基线是否为直线以及横向/竖向模式,计算局部坐标平面:
 • 直线基线:X轴 = 基线方向,Y轴 = 截面pln的X轴或Y轴(取决于横向/竖向)
 • 曲线基线:X轴 = 基线方向,Y轴 = 通过旋转计算
4 图层路径:格式 模型::{单元号}::{类型}::{横向/竖向}::{名称}-{模号}
5 信息汇总:将所有收集到的数据合并为一个列表返回。

五、编号与加工图号生成

编号生成规则:
{单元号字母部分}-{单元号数字部分}-{序号(3位补零)}

 • 从单元号(如 "A01-1")中取最后一段 "A01-1"
 • 前2个字符为字母部分 "A0"
 • 后续部分为数字部分 "1-1"
 • 序号从"信息列表"中根据名称匹配,转为3位数字

加工图号:在编号前加 "JG-" 前缀。

信息列表解析:输入的各行按逗号分隔,提取序号、名称、物料编码、工程属性,分别存入列表。然后根据"名称"匹配查找对应的序号、物料编码和工程属性。

六、完整的属性集(32个Key)

输出的信息Key列表共32项,分为几个类别:

基础信息:名称、类型、模号、pln、面板ID、单元号、批次、截面ID、横向/竖向
几何属性:拉伸-截面、拉伸-截面pln、拉伸-路径、截面-TS、截面-基准pln
加工特征:起端切面、终端切面、内部切割体、圆孔、机丝孔、沉头孔
装配表信息:序号、L、W、T、单位、自由项1、自由项2、自由项3
管理信息:编号、物料编码、工程属性、加工图号

⚙️ 完整执行流程

Phase 1 — 截面扫掠(U1):
 读取4个必填输入 → 截面简化/保留 → 获取截面ID → 截面移位 → SuperExtrude扫掠 → 输出型材实体和过程数据

阶段间检查:
 基线-端部铣切1相交检查 → 基线-端部铣切2相交检查 → 铣切实体性检查 → 兼容性检查

Phase 2 — 特征汇总(U2):
 读取端部铣切、铣切、开孔列表 → 打包为ArchivableDictionary → 汇总所有Brep

Phase 3 — 信息聚合(U3):
 读取Panel、名称、类型、信息列表 → 从截面和Panel提取属性 → 计算pln和图层 → 生成编号/加工图号 → 解析信息列表

数据合并与输出:
 组合全部32个Key → 组合Value列表(含新增的序号、L/W/T、单位、编号、物料编码等)→ 输出到7个端口

🧪 典型使用场景

场景详细说明
型材加工全流程 从截面库中选择截面,配合基线、表皮和装配表信息列表,完整创建型材模型并附带所有加工和管理属性。
截面简化模式 当截面包含过多内部细节(如小的空腔)时,切换到"截面简化"模式,SimplifySection会自动简化,减少后续计算量。
横向/竖向切换 同一截面的型材在不同单元中可能横向或竖向放置,通过按钮2快速切换,同时影响pln计算和图层分类。
总线式工作流 组件隐藏了前12个输入参数,仅暴露"信息列表"端口。配合隐藏的输入端可建立整洁的总线式工作流。

⚠️ 注意事项

📋 组件信息

名称型材拉伸
英文名US
分类LK → Util
Exposure默认
按钮1模式1截面不简化
按钮1模式2截面简化
按钮2模式1横向
按钮2模式2竖向
基类ButtonComponent2(双独立按钮)
文件US\US.cs
辅助类Class\Class_US.cs
GUID{FE83B257-81C6-4C2A-9F04-A68F94A6FB69}