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

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

Cover

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 的所有属性(螺栓规格、构件连接、位置定义等)和操作能力,并重写了 InsertSelectModifyDelete 四个生命周期方法。与 BoltArray(矩形)和 BoltXYList(XY 列表)不同,BoltCircle 的螺栓按圆形均匀分布。

二、构造函数

BoltCircle 仅提供一个无参构造函数。它在创建对象时自动完成以下初始化:

调用基类 BoltGroup() 构造函数,完成螺栓标准属性初始化:
  • BoltStandard 设置为 "7990"
  • BoltSize 设置为 20.0
  • ThreadInMaterial 设置为 THREAD_IN_MATERIAL_YES
  • CutLength 设置为 100.0Tolerance 设置为 2.0
  • HoleType 设置为 HOLE_TYPE_SLOTTED
  • RotateSlots 设置为 ROTATE_SLOTS_PARALLEL
  • BoltNut1Washer3 设为 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 的属性

由于 BoltCircleBoltGroup 的子类,它完整继承了螺栓组的所有常用属性:

属性 类型 继承自 说明
BoltSize double BoltGroup 螺栓直径(mm),默认 20.0
BoltStandard string BoltGroup 螺栓标准代号,默认 "7990"
BoltType BoltTypeEnum BoltGroup 螺栓类型:BOLT_TYPE_SITEBOLT_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_OVERSIZEDHOLE_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 后由系统分配。
注意:以上仅为最常用的属性,BoltGroupModelObject 还提供更多细节属性,如 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() 要求 PartToBoltToPartToBeBoltedPositionFirstPositionSecondPosition 全部非空,且 PartToBeBolted.Identifier 有效。任一条件不满足均抛出 ArgumentException

修改条件Modify() 不要求 PartToBeBolted 非空(因为修改时可能只改螺栓数或直径),但仍要求 PartToBoltToPositionFirstPositionSecondPosition 有效。

NumberOfBolts 类型为 double:虽然属性类型是 double,但实际使用时只能赋整数值(如 8.012.0)。非整数值行为未定义,建议始终使用整数形式的浮点值。

螺栓位置计算:螺栓按角度均匀分布在圆周上。第 i 个螺栓的角度为 2π × i / NumberOfBolts,起始角度从第一象限开始。Diameter 决定了圆的大小。

FirstPositionSecondPosition 的作用:两点定义了螺栓组的工作面方向。对于圆形阵列,这两点通常重合(位于圆心),用于确定螺栓孔的穿孔方向。

复合零件穿透:当螺栓需要穿透超过 2 个零件时,可通过 AddOtherPartToBolt() 添加附加零件(最多 98 个)。

BoltArray 的区别BoltArray 通过 X/Y 方向间距列表定义矩形排列;BoltCircle 通过 NumberOfBoltsDiameter 定义圆形排列。两者继承相同的基类属性,但排布逻辑完全不同。

BoltPositions 只读属性BoltCircle 继承了 BoltGroup.BoltPositions(类型为 ArrayList),它返回螺栓在全局坐标系中的实际位置列表。该属性在 Select() 后可用。

图5:圆形螺栓阵列布局示意图

八、总结

BoltCircle 是 Tekla Open API 中用于创建圆形阵列螺栓组的核心类,继承自 BoltGroup(抽象类),与 BoltArray(矩形)和 BoltXYList(XY 列表)并列。

• 通过 NumberOfBolts(螺栓数量,默认 8)和 Diameter(分布圆直径,默认 100mm)两个属性控制圆形排布。

• 构造函数自动设定 Shape = SHAPE_CIRCLE,并继承父类所有螺栓属性默认值。

• 自身仅提供 2 个属性 + 4 个重写的生命周期方法(InsertSelectModifyDelete)。

• 继承自 BoltGroup 的 30+ 属性和方法提供了完整的螺栓规格、连接关系、几何查询能力。

• 与 BoltArray 的核心差异在于排布逻辑:圆形阵列按圆周均匀分布,由螺栓数和直径控制;矩形阵列按 X/Y 间距列表排布,由间距数控制。

• 开发时应注意 InsertModify 的前置条件差异(Modify 不强制 PartToBeBolted),以及 NumberOfBolts 虽为 double 类型但应赋整数值。

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

Tekla.Structures.Model.BoltCircle — 密封类(166 行源码,继承自 BoltGroup)

关注 Tekla 开发 · 扫码交流

公众号

公众号 / 小程序

微信

微信个人号

评论 0

sitemap