核心概念
第四章:核心概念详解
4.1 组件注册:让 LoongCAD 认识你的组件
你的类上面需要贴这些 Attribute:
[Plugin("MyComponent")] // 组件唯一名称,必填
[PluginNumber(10001)] // 全局唯一编号,必填
[PluginUserInterface("MyForm")] // WinForms 窗口类名,必填
[PluginGroup("我的钢结构节点")] // 在组件树中的分组,可选
[PluginAuthor("张三")] // 作者署名,可选
// —— 以下为特定类型的专属 Attribute ——
[SecondaryType(ConnectionPlugin.SecondaryType.SECONDARYTYPE_ONE)] // 节点:次零件数量
[PluginRefPoint(true)] // 细部:是否需要辅助参考点
要点:
Plugin的名称要与后续.inp文件名一致PluginNumber必须全局唯一,建议划分号段(如 10000-19999 为节点)PluginUserInterface必须与 WinForms 类的 C# 类名完全一致(不是文件名)
4.2 参数数据类:让用户的参数流入你的逻辑
定义一个数据类,标注 [AttributeFields],所有 public 字段自动绑定到 UI:
[AttributeFields]
public class MyData
{
// 内嵌 LoongCAD 预置面板(螺栓、板件标准 UI)
public BoltBasicPropertyPanel.Data boltBasic = new BoltBasicPropertyPanel.Data();
public PlatePropertyPanel.Data plate = new PlatePropertyPanel.Data();
// 自定义参数
public double beamGap = 10.0; // 主次梁间隙
public double plateThick = 12.0; // 板厚
public string material = "Q355B"; // 材质
public int boltRows = 2; // 螺栓行数
public int boltCols = 2; // 螺栓列数
public double boltSpacing = 70.0; // 螺栓间距
}
预置面板 是 LoongCAD 提供的"开箱即用"UI 控件。你只需要声明一个 Data 类型的字段,LoongCAD 就会自动渲染对应的标准化面板(螺栓属性、板件属性等)。避免你从头画 UI。
4.3 坐标系:理解你的数学空间
LoongCAD 中每个构件都有自己的局部坐标系。理解它是写出正确几何计算的前提。
世界坐标系 vs 局部坐标系:
全局坐标系 (World):
Z↑(竖直向上)
构件局部坐标系 (Part CoordinateSystem):
AxisZ = 构件轴线方向(从起点指向终点)
AxisY = 截面高度方向(腹板平面内)
AxisX = 截面宽度方向(翼缘展开方向)
工作平面(TransformationPlane):
在 Run() 中,你通常需要先建立一个自己的参考坐标系 refMat,然后激活它为工作平面:
// 激活:后续所有 new Point(x, y, z) 都在 refMat 坐标系下
comp.Scene.SetCurrentTransformationPlane(new TransformationPlane(refMat));
// ... 创建几何对象 ...
// 还原:Inverse 会把 refMat 变成逆矩阵
refMat.Inverse();
comp.Scene.SetCurrentTransformationPlane(new TransformationPlane(refMat));
⚠️ 工作平面激活/还原必须成对出现,否则后续操作坐标系错乱。
4.4 获取构件轴线的方法
对于 Beam 对象,有两个获取轴线的方法,区别如下:
| 方法 | 含义 | 受 Position 偏移影响? |
|---|---|---|
GetReferanceLine(false) |
用户建模时输入的两个控制点 | ❌ 不受影响 |
GetCenterLine(false) |
考虑 Position 偏移后的实际形心线 | ✅ 受影响 |
简单记忆: 想算方向用 GetReferanceLine(不会因为偏移而改变方向),想算实际位置用 GetCenterLine。
4.5 Select() 的必要性
在获取构件的任何动态数据(轴线、坐标系、截面属性)之前,必须先调用 Select():
// ❌ 错误:没 Select 就拿数据,结果可能是旧的
var pts = beam.GetCenterLine(false);
// ✅ 正确
beam.Select();
var pts = beam.GetCenterLine(false);
Select() 会刷新构件在场景中的最新状态。如果工作平面变化了、构件被切割了,不 Select() 就拿不到最新数据。