跳转至

核心概念

第四章:核心概念详解

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() 就拿不到最新数据。