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

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

image.png

Tekla Structures Beam API 完全解析

深入理解 Tekla 二次开发中最常用的梁构件对象

在 Tekla Structures 二次开发中,Beam 类是 Part 最重要的子类之一,代表了模型中具有起点和终点的线性构件——包括钢梁、混凝土梁、支撑、柱等。掌握 Beam 类的全部成员,可以让你高效地创建、修改和查询各种线性构件。

本文基于 Tekla Structures 2017 版本的 API 反编译代码,完整、系统地讲解 Beam 类的继承体系、所有构造函数、所有自身属性、所有继承属性、所有自身方法、所有常用继承方法以及枚举类型,并提供大量可直接运行的代码示例。文中包含多张 SVG 示意图,帮助理解。


一、Beam 类的继承体系

Beam 是一个密封类(sealed class),位于 Tekla.Structures.Model 命名空间。其完整的继承层次如下图所示:

[图1:Beam 类继承层次图]

image.png

从上图可以清晰地看出:

  • Beam 直接继承自 Part,而 Part 继承自 ModelObjectModelObject 继承自 Object(即 Tekla.Structures.Model.Object)。

  • Beam 是 Part 的最终子类,不能再被继承(sealed)。

实际开发中,你通常直接实例化 Beam 类来创建梁或柱:

Beam beam = new Beam();
beam.StartPoint = new Point(0, 0, 0);
beam.EndPoint = new Point(5000, 0, 0);
beam.Profile = "IPE300";
beam.Insert();

二、Beam 类的构造函数

Beam 类提供了三个公开的构造函数,方便不同场景下的对象创建:

 
 
构造函数 说明
Beam() 无参构造函数。起点和终点均位于原点 (0,0,0)。
Beam(BeamTypeEnum beamType) 指定梁类型的构造函数。内部会调用无参构造函数,然后设置类型。
Beam(Point startPoint, Point endPoint) 指定起点和终点的构造函数。若传入的起点/终点为 null,则自动替换为原点。

[图2:Beam 构造函数使用示意图]

image.png

示例

// 方式1:无参构造,之后手动设置起点终点
Beam beam1 = new Beam();
beam1.StartPoint = new Point(0, 0, 0);
beam1.EndPoint = new Point(3000, 0, 0);

// 方式2:指定类型(例如创建一根柱)
Beam column = new Beam(Beam.BeamTypeEnum.COLUMN);
column.StartPoint = new Point(0, 0, 0);
column.EndPoint = new Point(0, 0, 4000);

// 方式3:直接传入起点终点
Beam beam2 = new Beam(new Point(0, 0, 0), new Point(6000, 0, 0));

三、Beam 类的属性

3.1 Beam 自身定义的属性

下表列出了 Beam 类直接定义的公开属性(不包括继承来的属性):

 
 
属性名 类型 说明
StartPoint Point 梁的起点坐标(三维点)。可读写。
EndPoint Point 梁的终点坐标(三维点)。可读写。
StartPointOffset Offset 起点偏移量。正偏移表示从起点向终点方向移动;负偏移表示反方向。
EndPointOffset Offset 终点偏移量。正偏移表示从终点向起点方向移动;负偏移表示反方向。
Type BeamTypeEnum 梁的类型(只读)。在构造函数中设置,之后不可更改。

偏移量详细说明:StartPointOffset 沿梁的局部 X 轴正向为正(即从起点向终点方向偏移),EndPointOffset 沿梁的局部 X 轴负向为正(即从终点向起点方向偏移)。这样梁的实际长度会缩短或伸长。

[图3:Beam 类的核心属性结构图]

image.png

注意:反编译代码中还有一个内部字段 Radiusinternal double Radius),但该字段未作为公开属性公开,因此本文不将其列为 API 成员。

3.2 继承自 Part 和 ModelObject 的常用属性

Beam 从 Part 继承了以下常用属性(列表为部分,完整参见 Part 类文档):

 
 
属性名 类型 说明
Name string 零件名称
Class string 零件类别
Finish string 表面处理
Profile Profile 截面型材
Material Material 材质
Position Position 位置定义(平面/深度/旋转)
PartNumber NumberingSeries 零件编号
AssemblyNumber NumberingSeries 构件编号
CastUnitType CastUnitTypeEnum 浇筑体类型(预制/现浇)
PourPhase int 浇筑体相位
Identifier Identifier 唯一标识符(继承自 ModelObject
IsUpToDate bool 是否已同步(继承)
ModificationTime DateTime 最后修改时间(继承)

四、Beam 类的枚举类型

Beam 类内部定义了一个枚举 BeamTypeEnum,用于区分梁的类型:

public enum BeamTypeEnum
{
    BEAM,           // 普通梁
    PANEL,          // 墙板
    STRIP_FOOTING,  // 条形基础
    PAD_FOOTING,    // 独立基础
    COLUMN          // 柱
}

[图4:BeamTypeEnum 枚举类型及含义]

image.png

使用示例:创建一根柱

Beam column = new Beam(Beam.BeamTypeEnum.COLUMN);
column.StartPoint = new Point(0, 0, 0);
column.EndPoint = new Point(0, 0, 3000);
column.Profile = "HEB200";
column.Insert();

五、Beam 类的方法

5.1 Beam 自身定义的方法

Beam 类重写了 Part 中的四个核心方法,并提供了三个构造函数(已在第二章介绍)。自身定义的公开方法如下:

 
 
方法 返回值 说明
Insert() bool 将当前梁对象插入模型数据库。成功返回 true
Select() bool 在模型中选中当前梁(高亮)。需要对象已存在且标识符有效。
Modify() bool 将当前梁的属性修改保存到模型数据库。
Delete() bool 从模型数据库中删除当前梁。

这四个方法均重写了 ModelObject 中的同名方法,并添加了参数有效性检查(如起点终点不能相同、必须设置截面和材质等)。

5.2 继承自 Part 和 ModelObject 的常用方法

Beam 从 Part 继承了以下常用方法(部分列表,完整参见 Part 类文档):

 
 
方法 说明
GetCenterLine(bool withCutsFittings) 获取梁的中心线(受切割影响时)
GetReferenceLine(bool withCutsFittings) 获取梁的参考线
GetSolid() 获取梁的实体几何模型
GetSolid(FormingStates) 获取指定成型状态的实体
GetAssembly() 获取梁所属的构件
GetBolts() 获取梁上的所有螺栓
GetWelds() 获取梁上的所有焊缝
GetBooleans() 获取梁参与的布尔切割/联合
GetComponents() 获取连接到梁的所有组件
GetPartMark() 获取梁的零件编号(如 "B1")
GetDSTVCoordinateSystem() 获取 DSTV 坐标系
CompareTo(Part other) 比较两个零件是否相同

此外,从 ModelObject 继承了以下核心操作:

 
 
方法 说明
GetUserProperty(string) 获取自定义属性(UDA)值
SetUserProperty(string, object) 设置自定义属性(UDA)值
GetReportProperty(string) 获取报表属性值
GetAllReportProperties(...) 批量获取报表属性
GetAllUserProperties() 获取所有自定义属性

[图5:Beam 类的常用操作流程(创建→修改→选中→删除)]

image.png


六、完整代码示例

示例1:创建一根普通钢梁

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

class Program
{
    static void Main()
    {
        Model model = new Model();
        if (!model.GetConnectionStatus())
        {
            Console.WriteLine("请先打开Tekla模型");
            return;
        }

        // 创建梁对象
        Beam beam = new Beam();
        beam.Name = "MainBeam";
        beam.Class = "Primary";
        beam.Profile = new Profile("IPE300");
        beam.Material = new Material("S355");
        beam.StartPoint = new Point(0, 0, 0);
        beam.EndPoint = new Point(6000, 0, 0);
        beam.Position.Plane = Position.PlaneEnum.MIDDLE;

        // 插入模型
        if (beam.Insert())
        {
            model.CommitChanges();
            Console.WriteLine("钢梁创建成功");
        }
        else
        {
            Console.WriteLine("创建失败");
        }
    }
}

示例2:创建一根混凝土柱(使用类型枚举)

Beam column = new Beam(Beam.BeamTypeEnum.COLUMN);
column.Name = "ConcreteColumn";
column.Profile = new Profile("RECT300*300");
column.Material = new Material("C30");
column.StartPoint = new Point(0, 0, 0);
column.EndPoint = new Point(0, 0, 4000);
column.Insert();
model.CommitChanges();

示例3:遍历模型中的所有梁,输出起点和终点坐标

Model model = new Model();
ComponentEnumerator enumerator = model.GetComponents();
while (enumerator.MoveNext())
{
    Beam beam = enumerator.Current as Beam;
    if (beam != null)
    {
        Console.WriteLine($"梁名称: {beam.Name}");
        Console.WriteLine($"  起点: ({beam.StartPoint.X}, {beam.StartPoint.Y}, {beam.StartPoint.Z})");
        Console.WriteLine($"  终点: ({beam.EndPoint.X}, {beam.EndPoint.Y}, {beam.EndPoint.Z})");
        Console.WriteLine($"  类型: {beam.Type}");
    }
}

示例4:使用起点偏移和终点偏移来缩短梁

// 创建一个起点0,终点6000的梁,但起点偏移+100,终点偏移-100
// 实际梁实体将从100到5900,长度5800
Beam beam = new Beam(new Point(0,0,0), new Point(6000,0,0));
beam.StartPointOffset = new Offset(100, 0, 0);   // 正偏移:从起点向终点方向移动100
beam.EndPointOffset = new Offset(-100, 0, 0);   // 负偏移:从终点向起点方向移动100(完全等同终点偏移-100)
beam.Profile = "IPE200";
beam.Insert();

[图6:梁的起点偏移与终点偏移形象示意图]

image.png


七、常见问题与注意事项

问题1:创建梁时提示“起点和终点相同”怎么办?

  • Beam 内部构造函数和 Insert 方法会检查起点终点是否相同,若相同会抛出异常。确保两个点不相同。

问题2:如何创建竖直的柱?

  • 有两种方法:一是设置 StartPoint 和 EndPoint 的 Z 坐标不同(例如 (0,0,0) 和 (0,0,4000));二是使用 BeamTypeEnum.COLUMN 类型,但这仅影响报表分类,几何仍由点决定。

问题3:StartPointOffset 和 EndPointOffset 的正确理解是什么?

  • StartPointOffset 的正方向是从起点指向终点(沿梁局部 X 轴)。正的偏移量会使梁的实际起点向终点方向移动,从而缩短梁的有效长度(如果终点偏移为 0 或负值)。

  • EndPointOffset 的正方向是从终点指向起点(沿梁局部 X 轴的负向)。正的偏移量会使梁的实际终点向起点方向移动,同样缩短有效长度。

  • 如果想使梁伸长,可以设置起点偏移为负或终点偏移为正?不,通常偏移用于切割或调节连接长度,不应用来伸长超越物理点。若需要伸长,应直接调整 StartPoint/EndPoint

问题4:梁的类型(Type 属性)为什么是只读?

  • 因为类型在创建时(通过构造函数)确定,之后不应更改,以保证模型数据一致性。如果需要改变类型,只能删除重建。

问题5:如何获取梁的长度?

  • 可以直接计算 StartPoint 和 EndPoint 之间的距离,或使用继承自 Part 的 GetLength() 方法(该方法会考虑切割和偏移),注意偏移会影响实体长度,GetLength() 返回实体实际长度。


八、总结

Beam 类是 Tekla OpenAPI 中创建线性构件的核心类。本文完整覆盖了:

  • 继承体系(Beam → Part → ModelObject → Object

  • 全部三个构造函数

  • 全部自身属性(StartPointEndPointStartPointOffsetEndPointOffsetType

  • 全部常用继承属性(来自 Part 和 ModelObject

  • 枚举 BeamTypeEnum(5 种类型)

  • 全部自身方法(重写的 InsertSelectModifyDelete

  • 全部常用继承方法(几何、装配、编号、UDA 等)

  • 多个可直接运行的代码示例

  • 6 张 SVG 示意图,包括一张形象易懂的偏移逻辑示意图

无论你是要批量创建钢梁、修改柱的参数,还是提取模型中所有线性构件的坐标,Beam 类都是必不可少的工具。

评论 0

sitemap