Tekla 二次开发:BoltGroup API 完全解析 - 钢结构资源网 Tekla插件 CAD工具 犀牛GH汉化 套料 Tekla 二次开发:BoltGroup API 完全解析 - 钢结构资源网 Tekla插件 CAD工具 犀牛GH汉化 套料

Tekla 二次开发:BoltGroup API 完全解析

BoltGroup
Tekla Structures 二次开发
 
螺栓组抽象基类 · 完全 API 解析

Tekla Structures BoltGroup API 完全解析

Tekla 二次开发:BoltGroup API 完全解析

BoltGroup 是 Tekla Structures Open API 中螺栓组的抽象基类,所有螺栓对象(BoltArrayBoltCircleBoltXYList)均继承自此类。它定义了螺栓组的通用接口:螺栓参数配置、垫圈/螺母/螺栓类型设置、孔位坐标管理、CRUD 操作等。

本文基于 Tekla.Structures.Model 程序集(Version=2017.0.0.0)的反编译源码,深入解析 BoltGroup 的完整继承体系、构造机制、属性方法及最佳实践。

一、继承体系

BoltGroup 是 Tekla Structures OpenAPI 中螺栓组的抽象基类,定义了所有螺栓类型的公共属性和方法。

ModelObject          (抽象基类 — CRUD + 属性系统)
  └─ BoltGroup       (抽象基类 — 螺栓组公共接口)
       ├─ BoltArray   (阵列螺栓 — 按 X/Y 距离阵列)
       ├─ BoltCircle  (圆形螺栓 — 沿圆周等距分布)
       └─ BoltXYList  (XY列表螺栓 — 任意 XY 坐标点)

继承体系

BoltGroupabstract class,无法直接实例化。必须通过其三个派生类 BoltArrayBoltCircleBoltXYList 来创建螺栓对象。

[图 1] BoltGroup 继承体系

二、构造函数

BoltGroup 本身无法直接实例化。三个派生类的构造函数如下:

BoltArray 构造函数

// BoltArray 构造函数(源码摘录)
public BoltArray()
{
    base.Shape = BoltGroup.BoltShapeEnum.SHAPE_ARRAY;
    this._BoltDistX = new ArrayList();
    this._BoltDistY = new ArrayList();
}

BoltArray 默认参数

BoltCircle 构造函数

// BoltCircle 构造函数(源码摘录)
public BoltCircle()
{
    base.Shape = BoltGroup.BoltShapeEnum.SHAPE_CIRCLE;
    this.NumberOfBolts = 8.0;
    this.Diameter = 100.0;
}

BoltCircle 默认参数

BoltXYList 构造函数

// BoltXYList 构造函数(源码摘录)
public BoltXYList()
{
    base.Shape = BoltGroup.BoltShapeEnum.SHAPE_XY_LIST;
    this._BoltDistX = new ArrayList();
    this._BoltDistY = new ArrayList();
}

BoltXYList 默认参数

三个派生类均将 Shape 属性设置为对应的枚举值,这是 Tekla 内部区分螺栓类型的关键标记。

三、属性

BoltGroup 定义了约 30 个属性,分为以下几类:

1. 螺栓基本参数

属性 类型 说明
BoltSize double 螺栓直径(mm),默认 20.0
BoltStandard string 螺栓标准,默认 7990
BoltType BoltTypeEnum SITE(现场)或 WORKSHOP(工厂)
ThreadInMaterial BoltThreadInMaterialEnum 螺纹是否拧入材料
Length double 螺栓杆长度
CutLength double 切割长度,默认 100.0
ExtraLength double 额外长度
Tolerance double 公差,默认 2.0

2. 孔型与槽孔

属性 类型 说明
HoleType BoltHoleTypeEnum HOLE_TYPE_OVERSIZEDHOLE_TYPE_SLOTTED
SlottedHoleX double X 方向槽孔尺寸
SlottedHoleY double Y 方向槽孔尺寸
RotateSlots BoltRotateSlotsEnum 槽孔旋转策略

3. 垫圈 / 螺母 / 螺栓主体

属性 类型 说明
Washer1 bool 垫圈1(靠近螺栓头),默认 false
Washer2 bool 垫圈2,默认 false
Washer3 bool 垫圈3(靠近螺母),默认 true
Nut1 bool 螺母1,默认 true
Nut2 bool 螺母2,默认 false
Bolt bool 螺栓主体,默认 true

4. 孔位控制(Hole1~5)

Hole1~Hole5 五个布尔属性控制哪些孔位参与连接(适用于多零件螺栓场景)。默认 Hole1=true,其余 false。

属性 类型 说明
Hole1 bool 孔位1参与连接,默认 true
Hole2 bool 孔位2参与连接,默认 false
Hole3 bool 孔位3参与连接,默认 false
Hole4 bool 孔位4参与连接,默认 false
Hole5 bool 孔位5参与连接,默认 false

5. 位置与偏移

属性 类型 说明
Position Position 螺栓位置(Plane/Depth/Rotation),默认 MIDDLE/MIDDLE/FRONT
StartPointOffset Offset 起始点偏移
EndPointOffset Offset 终止点偏移
FirstPosition Point 螺栓轴线起始点
SecondPosition Point 螺栓轴线终止点

6. 零件引用

属性 类型 说明
PartToBoltTo Part 螺栓连接的次要零件(如板)
PartToBeBolted Part 螺栓连接的主要零件(如梁)
OtherPartsToBolt ArrayList 其他参与连接的零件(最多99个)
BoltPositions ArrayList 计算后的螺栓坐标(只读,Insert() 后可用)
ConnectAssemblies bool 是否连接组件,默认 false

[图 2] BoltGroup 类成员全景

四、枚举类型

BoltGroup 定义了 4 个枚举类型,其中 BoltShapeEnumprotected(仅供派生类使用)。

BoltTypeEnum — 螺栓类型

含义 应用场景
SITE 现场螺栓 安装阶段在现场施工
WORKSHOP 工厂螺栓 制作阶段在工厂预制

BoltThreadInMaterialEnum — 螺纹拧入材料

含义
THREAD_IN_MATERIAL_NO 螺纹不拧入材料
THREAD_IN_MATERIAL_YES 螺纹拧入材料(默认)

BoltHoleTypeEnum — 孔型

含义
HOLE_TYPE_OVERSIZED 加大孔
HOLE_TYPE_SLOTTED 槽孔(可设置 SlottedHoleX/SlottedHoleY

BoltRotateSlotsEnum — 槽孔旋转策略

含义
ROTATE_SLOTS_ODD 奇数槽孔旋转
ROTATE_SLOTS_EVEN 偶数槽孔旋转
ROTATE_SLOTS_PARALLEL 槽孔平行于轴线(默认)

[图 3] 枚举类型详解

五、方法

Insert() — 插入螺栓到模型

BoltCircleBoltXYList 重写了 Insert() 方法,增加了参数校验。调用前必须设置 PartToBoltToPartToBeBolted

BoltArray bolt = new BoltArray();
bolt.PartToBoltTo = myPlate;
bolt.PartToBeBolted = myBeam;
bolt.FirstPosition = new Point(0, 0, 0);
bolt.SecondPosition = new Point(1000, 0, 0);
bolt.BoltSize = 20.0;
bolt.AddBoltDistX(100);  // X 方向间距 100mm
bolt.AddBoltDistY(80);   // Y 方向间距 80mm
bolt.Insert();

BoltArray Insert() 示例

Modify() — 修改螺栓参数

修改已存在螺栓的参数,调用后需执行 Model.CommitChanges()

Delete() — 删除螺栓

从模型中删除螺栓对象。

AddOtherPartToBolt() / RemoveOtherPartToBolt()

管理 OtherPartsToBolt 列表(最多 99 个零件)。

GetSolid() — 获取实体

返回螺栓的实体对象,可选高精度模式。

GetFatherPour() — 获取父浇筑体

返回该螺栓所属的 PourObject(如果有的话)。

[图 4] 螺栓对象 CRUD 生命周期

六、完整代码示例

示例 1:创建阵列螺栓(BoltArray

using Tekla.Structures.Model;
using Tekla.Structures.Geometry3d;

public void CreateBoltArray()
{
    Model model = new Model();

    BoltArray bolt = new BoltArray();
    bolt.PartToBoltTo    = secondaryPart;
    bolt.PartToBeBolted = primaryPart;
    bolt.FirstPosition   = new Point(0, 0, 0);
    bolt.SecondPosition  = new Point(1000, 0, 0);
    bolt.Position.Plane   = Position.PlaneEnum.MIDDLE;
    bolt.BoltSize        = 20.0;
    bolt.BoltStandard    = "7990";
    bolt.BoltType        = BoltGroup.BoltTypeEnum.BOLT_TYPE_WORKSHOP;
    bolt.Washer1         = true;
    bolt.Washer3         = true;
    bolt.Nut1             = true;

    // 设置阵列距离(X=沿螺栓方向,Y=垂直方向)
    bolt.AddBoltDistX(100);  // 第1颗在 0mm
    bolt.AddBoltDistX(100);  // 第2颗在 100mm
    bolt.AddBoltDistX(100);  // 第3颗在 200mm
    bolt.AddBoltDistY(80);   // Y方向一行
    bolt.AddBoltDistY(0);    // 第二行偏移 0(同一行)

    if (bolt.Insert())
        Console.WriteLine("螺栓创建成功!");
    else
        Console.WriteLine("螺栓创建失败!");

    model.CommitChanges();
}

BoltArray 完整示例

示例 2:创建圆形螺栓(BoltCircle

public void CreateBoltCircle()
{
    Model model = new Model();

    BoltCircle bolt = new BoltCircle();
    bolt.PartToBoltTo    = plate;
    bolt.PartToBeBolted = beam;
    bolt.FirstPosition   = new Point(500, 500, 0);
    bolt.SecondPosition  = new Point(500, 500, 12);  // 板厚 12mm
    bolt.BoltSize        = 16.0;
    bolt.NumberOfBolts  = 8;     // 8 颗螺栓沿圆周均布
    bolt.Diameter        = 200.0; // 圆周直径 200mm
    bolt.BoltType        = BoltGroup.BoltTypeEnum.BOLT_TYPE_SITE;

    if (bolt.Insert())
        Console.WriteLine($"圆形螺栓创建成功!共 {bolt.BoltPositions.Count} 个孔位");
}

BoltCircle 完整示例

示例 3:遍历螺栓坐标

public void PrintBoltPositions(BoltArray bolt)
{
    ArrayList positions = bolt.BoltPositions;
    for (int i = 0; i < positions.Count; i++)
    {
        Point p = positions[i] as Point;
        Console.WriteLine($"螺栓 {i+1}: ({p.X}, {p.Y}, {p.Z})");
    }
}

遍历 BoltPositions

七、常见问题

Q1:Insert() 返回 false,如何排查?

检查以下前提条件:

1. PartToBoltToPartToBeBolted 必须都已设置,且 Identifier.IsValid() 为 true;

2. FirstPositionSecondPosition 必须设置;

3. Position 属性不能为 null;

4. 对于 BoltArray/BoltXYList,必须至少添加一个 BoltDistX 和一个 BoltDistY

Q2:BoltPositions 为空(Count=0)?

BoltPositionsInsert() 成功后才会计算。如果 Insert() 失败或尚未调用,BoltPositions 为空。

Q3:如何控制哪些零件被螺栓连接?

PartToBeBolted 是主要零件(通常是梁),PartToBoltTo 是次要零件(通常是板)。如有更多零件,使用 AddOtherPartToBolt() 添加(最多 99 个)。

Q4:工厂螺栓 vs 现场螺栓有什么区别?

BoltType 影响螺栓在图纸和报表中的显示方式。WORKSHOP 螺栓在工厂预制阶段安装,SITE 螺栓在现场安装。

[图 5] 三个派生类功能对比

八、总结

BoltGroup 是 Tekla API 中螺栓功能的核心抽象基类,其设计体现了以下特点:

特性 说明
抽象基类 无法直接实例化,必须通过 BoltArray / BoltCircle / BoltXYList
属性丰富 约 30 个属性覆盖螺栓参数、孔型、垫圈、位置等维度
枚举完备 4 个枚举精确描述螺栓类型、孔型、螺纹行为
CRUD 完整 Insert() / Select() / Modify() / Delete() 全套生命周期管理
多零件支持 通过 OtherPartsToBolt 支持最多 100 个零件的螺栓连接
实体获取 GetSolid() 支持高精度和正常精度两种模式
实际开发中,90% 的场景使用 BoltArray 即可满足需求。圆形分布用 BoltCircle,任意坐标点用 BoltXYList
关注 Tekla 开发 · 扫码交流
公众号/小程序
微信个人号

本文适用于 Tekla Structures 2017 及以上版本

Tekla.Structures.Model.BoltGroup — 抽象基类(896 行源码)

评论 0

sitemap