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 类继承层次图]
从上图可以清晰地看出:
-
Beam直接继承自Part,而Part继承自ModelObject,ModelObject继承自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 构造函数使用示意图]
示例:
// 方式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 类的核心属性结构图]
注意:反编译代码中还有一个内部字段
Radius(internal 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 枚举类型及含义]
使用示例:创建一根柱
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 类的常用操作流程(创建→修改→选中→删除)]
六、完整代码示例
示例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:梁的起点偏移与终点偏移形象示意图]
七、常见问题与注意事项
问题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) -
全部三个构造函数
-
全部自身属性(
StartPoint,EndPoint,StartPointOffset,EndPointOffset,Type) -
全部常用继承属性(来自
Part和ModelObject) -
枚举
BeamTypeEnum(5 种类型) -
全部自身方法(重写的
Insert,Select,Modify,Delete) -
全部常用继承方法(几何、装配、编号、UDA 等)
-
多个可直接运行的代码示例
-
6 张 SVG 示意图,包括一张形象易懂的偏移逻辑示意图
无论你是要批量创建钢梁、修改柱的参数,还是提取模型中所有线性构件的坐标,Beam 类都是必不可少的工具。
Tekla 二次开发: Beam API 完全解析 - 钢结构资源网 Tekla插件 CAD工具 犀牛GH汉化 套料








SSTekla节点组件介绍
Tekla插件-檩条建模出图插件(版本20-2016~2021)
Tekla插件-截面拆板19.0~2021
黑哥建模助手v3.0(Tekal18.0~21.0)可试用20次
GHTeklaLink_2020~2022汉化v1.11
Tekla GH(2019~2025)汉化插件2026v1.0
3D建模助手黄金版
SSBIM for Tekla插件
