Tekla Structures BoltGroup API 完全解析
BoltGroup 是 Tekla Structures Open API 中螺栓组的抽象基类,所有螺栓对象(BoltArray、BoltCircle、BoltXYList)均继承自此类。它定义了螺栓组的通用接口:螺栓参数配置、垫圈/螺母/螺栓类型设置、孔位坐标管理、CRUD 操作等。
本文基于 Tekla.Structures.Model 程序集(Version=2017.0.0.0)的反编译源码,深入解析 BoltGroup 的完整继承体系、构造机制、属性方法及最佳实践。
一、继承体系
BoltGroup 是 Tekla Structures OpenAPI 中螺栓组的抽象基类,定义了所有螺栓类型的公共属性和方法。
ModelObject (抽象基类 — CRUD + 属性系统)
└─ BoltGroup (抽象基类 — 螺栓组公共接口)
├─ BoltArray (阵列螺栓 — 按 X/Y 距离阵列)
├─ BoltCircle (圆形螺栓 — 沿圆周等距分布)
└─ BoltXYList (XY列表螺栓 — 任意 XY 坐标点)
继承体系
BoltGroup 是 abstract class,无法直接实例化。必须通过其三个派生类 BoltArray、BoltCircle 或 BoltXYList 来创建螺栓对象。[图 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_OVERSIZED 或 HOLE_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 个枚举类型,其中 BoltShapeEnum 为 protected(仅供派生类使用)。
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() — 插入螺栓到模型
BoltCircle 和 BoltXYList 重写了 Insert() 方法,增加了参数校验。调用前必须设置 PartToBoltTo 和 PartToBeBolted。
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. PartToBoltTo 和 PartToBeBolted 必须都已设置,且 Identifier.IsValid() 为 true;
2. FirstPosition 和 SecondPosition 必须设置;
3. Position 属性不能为 null;
4. 对于 BoltArray/BoltXYList,必须至少添加一个 BoltDistX 和一个 BoltDistY。
Q2:BoltPositions 为空(Count=0)?
BoltPositions 在 Insert() 成功后才会计算。如果 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() 支持高精度和正常精度两种模式 |
BoltCircle,任意坐标点用 BoltXYList。本文适用于 Tekla Structures 2017 及以上版本
Tekla.Structures.Model.BoltGroup — 抽象基类(896 行源码)
Tekla 二次开发:BoltGroup API 完全解析 - 钢结构资源网 Tekla插件 CAD工具 犀牛GH汉化 套料

SSTekla节点组件介绍
SSTekla建模插件介绍
TeklaPad(简易编程插件)
Tekla 二次开发:ContourPlate API 完全解析
Tekla 二次开发:ModelObject API 完全解析
Tekla工具集(18.1~2023)
Tekla(不限版本)节点高级超限密码解除教程
GrasshopperTeklaLink中文帮助
