Tekla 二次开发:BoltCircle API 完全解析
Tekla Structures BoltCircle API 完全解析
BoltCircle 是用于创建圆形阵列螺栓组的核心类。通过定义圆形排布的螺栓数量 (NumberOfBolts)和圆的直径(Diameter),可在指定位置生成一个圆形排布的多螺栓组。该类继承自抽象类 BoltGroup,构造函数自动将形状类型设为 SHAPE_CIRCLE,并重写了完整的增删改查操作。
一、继承体系
BoltCircle 是一个密封类(sealed),无法被其他类继承。它的继承链如下:
System.Object
└── ModelObject
└── BoltGroup (abstract)
├── BoltArray (sealed) ← SHAPE_ARRAY(矩形阵列)
├── BoltCircle (sealed) ← SHAPE_CIRCLE(圆形阵列)
└── BoltXYList (sealed) ← SHAPE_XY_LIST(XY 列表)
图1:BoltCircle 继承层次图
BoltCircle 直接继承了 BoltGroup 的所有属性(螺栓规格、构件连接、位置定义等)和操作能力,并重写了 Insert、Select、Modify、Delete 四个生命周期方法。与 BoltArray(矩形)和 BoltXYList(XY 列表)不同,BoltCircle 的螺栓按圆形均匀分布。
二、构造函数
BoltCircle 仅提供一个无参构造函数。它在创建对象时自动完成以下初始化:
调用基类 BoltGroup() 构造函数,完成螺栓标准属性初始化:
• BoltStandard 设置为 "7990"
• BoltSize 设置为 20.0
• ThreadInMaterial 设置为 THREAD_IN_MATERIAL_YES
• CutLength 设置为 100.0,Tolerance 设置为 2.0
• HoleType 设置为 HOLE_TYPE_SLOTTED
• RotateSlots 设置为 ROTATE_SLOTS_PARALLEL
• Bolt、Nut1、Washer3 设为 true
• Position 的 Plane、Depth、Rotation 分别设为 MIDDLE、MIDDLE、FRONT
将 Shape 属性设为 BoltGroup.BoltShapeEnum.SHAPE_CIRCLE
将 NumberOfBolts 设为 8.0(默认 8 个螺栓均匀分布在圆周上)
将 Diameter 设为 100.0(默认分布圆直径 100mm)
BoltCircle boltCircle = new BoltCircle(); // Shape 已自动设为 SHAPE_CIRCLE // NumberOfBolts = 8.0, Diameter = 100.0 // 可通过 NumberOfBolts / Diameter 属性修改
图2:构造函数初始化流程
三、属性
自身属性
BoltCircle 自身定义了 2 个公开属性:
| 属性 | 类型 | 说明 |
|---|---|---|
NumberOfBolts |
double |
圆形阵列中的螺栓数量。默认 8.0。注意类型为 double,但实际使用时应为正整数。 |
Diameter |
double |
螺栓分布圆的直径(mm)。默认 100.0。 |
继承自 BoltGroup 的属性
由于 BoltCircle 是 BoltGroup 的子类,它完整继承了螺栓组的所有常用属性:
| 属性 | 类型 | 继承自 | 说明 |
|---|---|---|---|
BoltSize |
double |
BoltGroup | 螺栓直径(mm),默认 20.0。 |
BoltStandard |
string |
BoltGroup | 螺栓标准代号,默认 "7990"。 |
BoltType |
BoltTypeEnum |
BoltGroup | 螺栓类型:BOLT_TYPE_SITE 或 BOLT_TYPE_WORKSHOP。 |
ThreadInMaterial |
BoltThreadInMaterialEnum |
BoltGroup | 螺纹是否在材料内,默认 THREAD_IN_MATERIAL_YES。 |
Length |
double |
BoltGroup | 螺栓总长度(mm)。 |
CutLength |
double |
BoltGroup | 切割长度(mm),默认 100.0。 |
ExtraLength |
double |
BoltGroup | 额外长度(mm)。 |
Tolerance |
double |
BoltGroup | 孔径公差(mm),默认 2.0。 |
HoleType |
BoltHoleTypeEnum |
BoltGroup | 孔类型:HOLE_TYPE_OVERSIZED 或 HOLE_TYPE_SLOTTED。 |
Position |
Position |
BoltGroup | 螺栓位置定义(深度、平面、旋转)。 |
FirstPosition |
Point |
BoltGroup | 螺栓组的起点坐标。 |
SecondPosition |
Point |
BoltGroup | 螺栓组的终点坐标。 |
PartToBoltTo |
Part |
BoltGroup | 螺栓连接到的目标零件。 |
PartToBeBolted |
Part |
BoltGroup | 被螺栓穿透的零件。 |
Bolt |
bool |
BoltGroup | 是否包含螺栓,默认 true。 |
Nut1 |
bool |
BoltGroup | 是否包含螺母1,默认 true。 |
Washer1 ~ Washer3 |
bool |
BoltGroup | 是否包含垫圈1~3。 |
ConnectAssemblies |
bool |
BoltGroup | 是否连接构件,默认 false。 |
Name |
string |
ModelObject | 零件名称。 |
Identifier |
Identifier |
ModelObject | 模型对象的唯一标识符,在 Insert 后由系统分配。 |
注意:以上仅为最常用的属性,BoltGroup与ModelObject还提供更多细节属性,如SlottedHoleX/SlottedHoleY(长圆孔尺寸)、RotateSlots(长圆孔旋转方式)、Hole1~Hole5(各零件孔开关)、BoltPositions(只读螺栓位置列表)等。
图4:BoltCircle 常用操作流程
六、完整代码示例
示例1:创建一个 8 螺栓圆形阵列
using Tekla.Structures.Model;
using Tekla.Structures.Geometry3d;
public void CreateBoltCircle()
{
// 1. 创建圆形螺栓组对象
BoltCircle boltCircle = new BoltCircle();
// 2. 设置圆形排布参数
boltCircle.NumberOfBolts = 8.0; // 8 个螺栓均匀分布在圆周上
boltCircle.Diameter = 150.0; // 分布圆直径 150mm
// 3. 设置螺栓属性
boltCircle.BoltSize = 20.0;
boltCircle.BoltStandard = "7990";
boltCircle.BoltType = BoltGroup.BoltTypeEnum.BOLT_TYPE_SITE;
boltCircle.Tolerance = 2.0;
boltCircle.CutLength = 100.0;
// 4. 设置连接零件
boltCircle.PartToBoltTo = mainBeam;
boltCircle.PartToBeBolted = secBeam;
// 5. 定义螺栓组位置(圆心位于两零件交点处)
boltCircle.FirstPosition = new Point(500, 0, 1000);
boltCircle.SecondPosition = new Point(500, 0, 1000);
// 6. 插入模型
bool result = boltCircle.Insert();
if (result)
Console.WriteLine($"圆形螺栓阵列创建成功," +
$"{boltCircle.NumberOfBolts} 个螺栓, " +
$"直径 {boltCircle.Diameter}mm");
}
示例2:读取已有圆形螺栓组并修改螺栓数
public void ModifyBoltCircleCount(int boltGroupId)
{
BoltCircle boltCircle = new BoltCircle();
boltCircle.Identifier.ID = boltGroupId;
if (!boltCircle.Select())
{
Console.WriteLine("未找到指定的螺栓组");
return;
}
Console.WriteLine($"当前:{boltCircle.NumberOfBolts} 个螺栓," +
$"直径 {boltCircle.Diameter}mm");
// 修改为 12 个螺栓,减小直径
boltCircle.NumberOfBolts = 12.0;
boltCircle.Diameter = 120.0;
if (boltCircle.Modify())
Console.WriteLine("圆形螺栓组修改成功");
else
Console.WriteLine("修改失败");
}
示例3:删除圆形螺栓组
public void DeleteBoltCircle(int boltGroupId)
{
BoltCircle boltCircle = new BoltCircle();
boltCircle.Identifier.ID = boltGroupId;
if (boltCircle.Delete())
Console.WriteLine("圆形螺栓组已删除");
else
Console.WriteLine("删除失败,请检查 ID 是否存在");
}
示例4:遍历模型中的所有圆形螺栓组
using Tekla.Structures.Model;
public void ListAllBoltCircles()
{
Model model = new Model();
ModelObjectEnumerator enumerator = model.GetModelObjectSelector()
.GetAllObjectsWithType(ModelObject.ModelObjectEnum.BOLT_CIRCLE);
while (enumerator.MoveNext())
{
BoltCircle bc = enumerator.Current as BoltCircle;
if (bc != null)
{
Console.WriteLine($"ID: {bc.Identifier.ID}, " +
$"M{bc.BoltSize}, " +
$"螺栓数: {bc.NumberOfBolts}, " +
$"直径: {bc.Diameter}mm, " +
$"标准: {bc.BoltStandard}");
}
}
}
七、常见问题与注意事项
• 插入的必要条件:Insert() 要求 PartToBoltTo、PartToBeBolted、Position、FirstPosition、SecondPosition 全部非空,且 PartToBeBolted.Identifier 有效。任一条件不满足均抛出 ArgumentException。
• 修改条件:Modify() 不要求 PartToBeBolted 非空(因为修改时可能只改螺栓数或直径),但仍要求 PartToBoltTo、Position、FirstPosition、SecondPosition 有效。
• NumberOfBolts 类型为 double:虽然属性类型是 double,但实际使用时只能赋整数值(如 8.0、12.0)。非整数值行为未定义,建议始终使用整数形式的浮点值。
• 螺栓位置计算:螺栓按角度均匀分布在圆周上。第 i 个螺栓的角度为 2π × i / NumberOfBolts,起始角度从第一象限开始。Diameter 决定了圆的大小。
• FirstPosition 和 SecondPosition 的作用:两点定义了螺栓组的工作面方向。对于圆形阵列,这两点通常重合(位于圆心),用于确定螺栓孔的穿孔方向。
• 复合零件穿透:当螺栓需要穿透超过 2 个零件时,可通过 AddOtherPartToBolt() 添加附加零件(最多 98 个)。
• 与 BoltArray 的区别:BoltArray 通过 X/Y 方向间距列表定义矩形排列;BoltCircle 通过 NumberOfBolts 和 Diameter 定义圆形排列。两者继承相同的基类属性,但排布逻辑完全不同。
• BoltPositions 只读属性:BoltCircle 继承了 BoltGroup.BoltPositions(类型为 ArrayList),它返回螺栓在全局坐标系中的实际位置列表。该属性在 Select() 后可用。
图5:圆形螺栓阵列布局示意图
八、总结
• BoltCircle 是 Tekla Open API 中用于创建圆形阵列螺栓组的核心类,继承自 BoltGroup(抽象类),与 BoltArray(矩形)和 BoltXYList(XY 列表)并列。
• 通过 NumberOfBolts(螺栓数量,默认 8)和 Diameter(分布圆直径,默认 100mm)两个属性控制圆形排布。
• 构造函数自动设定 Shape = SHAPE_CIRCLE,并继承父类所有螺栓属性默认值。
• 自身仅提供 2 个属性 + 4 个重写的生命周期方法(Insert、Select、Modify、Delete)。
• 继承自 BoltGroup 的 30+ 属性和方法提供了完整的螺栓规格、连接关系、几何查询能力。
• 与 BoltArray 的核心差异在于排布逻辑:圆形阵列按圆周均匀分布,由螺栓数和直径控制;矩形阵列按 X/Y 间距列表排布,由间距数控制。
• 开发时应注意 Insert 和 Modify 的前置条件差异(Modify 不强制 PartToBeBolted),以及 NumberOfBolts 虽为 double 类型但应赋整数值。
本文适用于 Tekla Structures 2017 及以上版本
Tekla.Structures.Model.BoltCircle — 密封类(166 行源码,继承自 BoltGroup)
关注 Tekla 开发 · 扫码交流
公众号 / 小程序
微信个人号
Tekla 二次开发:BoltCircle API 完全解析 - 钢结构资源网 Tekla插件 CAD工具 犀牛GH汉化 套料

Tekla 二次开发:ContourPlate API 完全解析
Tekla 模型自动保存工具
GHTeklaLink_2017~2025汉化v(1.18/1.19)(50%)
Tekla构件比较
Tekla材料排板采购工具V2.3版本
SSTekla建模插件介绍
GrasshopperTeklaLink中文帮助
