Tekla Structures Brep API 完全解析
Brep(Boundary Representation,边界表示)是用于在 Tekla 模型中创建实体几何零件的核心类。它通过定义起始点与终止点,配合截面与材质信息,在模型中生成具有指定截面形状的一维拉伸实体。该类继承自 Part,提供了完整的创建、查询、修改和删除方法。
一、继承体系
Brep 是一个密封类(sealed),无法被其他类继承。它的继承链如下:
System.Object
└── ModelObject
└── Part
└── Brep (sealed)
└── ModelObject
└── Part
└── Brep (sealed)
Brep 直接继承了 Part 的所有几何与属性操作能力,并实现了 Insert、Select、Modify、Delete 等实体对象的生命周期方法。
二、构造函数
Brep 提供两个构造函数:
| 构造函数 | 说明 |
|---|---|
| Brep() | 无参构造。自动初始化所有默认值。 |
| Brep(Point startPoint, Point endPoint) | 通过起点和终点构造。任一参数为 null 时会自动创建新的 Point()。 |
无参构造函数自动完成以下初始化:
StartPoint= 新的Point()(坐标全为 0)EndPoint= 新的Point()(坐标全为 0)Class="1"Name="BREP"StartPointOffset= 新的Offset()EndPointOffset= 新的Offset()
// 无参构造Brepbrep =newBrep();// 带起止点构造Brepbrep2 =newBrep(newPoint(0,0,0),newPoint(1000,0,0) );
三、属性
自身属性
| 属性 | 类型 | 说明 |
|---|---|---|
| StartPoint | Point | 获取或设置 Brep 实体的起始点坐标。 |
| EndPoint | Point | 获取或设置 Brep 实体的终止点坐标。 |
| StartPointOffset | Offset | 获取或设置起始点的偏移量。 |
| EndPointOffset | Offset | 获取或设置终止点的偏移量。 |
继承自 Part / ModelObject 的属性
| 属性 | 类型 | 继承自 | 说明 |
|---|---|---|---|
| Name | string | Part | 零件名称,默认 "BREP"。 |
| Class | string | Part | 零件等级,默认 "1"。 |
| Finish | string | Part | 表面处理代码,如 "GALV"。 |
| PartNumber | string | Part | 零件编号。 |
| AssemblyNumber | string | Part | 构件编号。 |
| Profile | Profile | Part | 实体的截面,通过 Profile.ProfileString 指定。 |
| Material | Material | Part | 实体的材质,通过 Material.MaterialString 指定。 |
| Position | Position | Part | 控制实体在截面方向上的位置。 |
| Identifier | Identifier | ModelObject | 模型对象的唯一标识符。 |
| ModificationTime | DateTime | ModelObject | 对象最后修改时间。 |
| UserPhase | int | ModelObject | 用户定义的状态阶段。 |
注意:以上仅为最常用的属性,Part 与 ModelObject 还提供更多细节属性,如 DeformingData、UserDefinedProperty 等,可按需查阅 API 文档。
四、枚举类型
本类未定义任何公开枚举类型。Brep 的内部类型标识由模型枚举 ModelObjectEnum.BREP 进行识别,在插入和修改时通过 ModelModuleManager.CheckModules(ModelObjectEnum.BREP) 进行模块校验。
五、方法
自身方法
| 方法 | 返回类型 | 说明 |
|---|---|---|
| Insert() | bool | 将 Brep 写入模型数据库。内部校验参数后导出到模型。成功返回 true。 |
| Select() | bool | 根据当前 Identifier 从模型中读取 Brep 的属性与几何数据。 |
| Modify() | bool | 将修改后的 Brep 数据更新回模型。 |
| Delete() | bool | 从模型中删除该 Brep 实体。 |
继承方法
| 方法 | 返回类型 | 说明 |
|---|---|---|
| GetSolid() | Solid | 返回零件的三维实体几何。 |
| GetBolts() | List<BoltGroup> | 获取连接到此零件的螺栓组。 |
| GetUserProperty(string name) | double | 获取用户定义属性的值(双精度)。 |
| SetUserProperty(string name, double value) | bool | 设置用户定义属性。 |
| GetReportProperty(string name) | string | 获取报告属性(字符串)。 |
| GetCenterLine() | Line | 获取零件的中心线。 |
| GetPartMark() | string | 获取零件标记。 |
六、完整代码示例
示例1:创建一块基本 Brep 实体
usingTekla.Structures.Model;usingTekla.Structures.Geometry3d;publicvoidCreateBasicBrep() {// 1. 创建 Brep 对象,指定起点和终点Brepbrep =newBrep(newPoint(0,0,0),newPoint(1000,0,0) );// 2. 设置基本属性brep.Profile.ProfileString ="HEA200"; brep.Material.MaterialString ="Steel_Undefined"; brep.Finish ="GALV"; brep.Name ="MyBrep";// 3. 设置起点/终点偏移(可选)brep.StartPointOffset =newOffset(); brep.StartPointOffset.Dx =50; brep.EndPointOffset =newOffset(); brep.EndPointOffset.Dx =50;// 4. 插入模型boolresult = brep.Insert();if(result) Console.WriteLine("Brep 创建成功,ID:"+ brep.Identifier.ID);elseConsole.WriteLine("创建失败,请检查参数是否有效"); }
示例2:查询并修改已有 Brep
publicvoidModifyExistingBrep(intbrepId) {Brepbrep =newBrep(); brep.Identifier.ID = brepId;// 1. 选中模型中的 Brep,读取当前数据if(!brep.Select()) { Console.WriteLine("未找到指定的 Brep");return; }// 2. 修改表面处理和材质brep.Finish ="BLAST"; brep.Material.MaterialString ="Stainless";// 3. 修改终点位置(沿 Y 向偏移 200mm)PointnewEnd =newPoint( brep.EndPoint.X, brep.EndPoint.Y +200, brep.EndPoint.Z ); brep.EndPoint = newEnd;// 4. 提交修改if(brep.Modify()) Console.WriteLine("Brep 修改成功");elseConsole.WriteLine("修改失败"); }
示例3:删除 Brep
publicvoidDeleteBrep(intbrepId) {Brepbrep =newBrep(); brep.Identifier.ID = brepId;if(brep.Delete()) Console.WriteLine("Brep 已删除");elseConsole.WriteLine("删除失败,请检查 ID 是否存在"); }
示例4:遍历模型中的所有 Brep
usingTekla.Structures.Model;publicvoidListAllBreps() {Modelmodel =newModel();ModelObjectEnumeratorenumerator = model.GetModelObjectSelector() .GetAllObjectsWithType(ModelObjectEnum.BREP);while(enumerator.MoveNext()) {Brepbrep = enumerator.CurrentasBrep;if(brep !=null) { Console.WriteLine($"ID: {brep.Identifier.ID}, "+$"截面: {brep.Profile.ProfileString}, "+$"起点: ({brep.StartPoint.X}, {brep.StartPoint.Y}, {brep.StartPoint.Z})"); } } }
七、常见问题与注意事项
- 必须设置的属性:
StartPoint、EndPoint、Profile、Material是插入模型的前提。若有缺失,将抛出ArgumentException,提示 "Required information missing"。 - 起止点不能重合:内部校验方法
BrepParametersCheck()会检查两点是否相等。若坐标相同,将抛出ArgumentException,提示 "Input Points must be different"。 - 参数校验时机:
Insert()和Modify()都会先调用BrepParametersCheck()进行校验,确保起止点非 null、截面非空、材质非 null。 - Offset 的作用:
StartPointOffset和EndPointOffset分别控制实体在起点和终点处的延伸/缩进量,常用于调整与其他零件的搭接关系。 - 无参构造后的默认状态:调用
new Brep()后,起止点坐标全为 0,Profile 和 Material 未设置。必须在调用Insert()前完成赋值。 - 生命周期方法一致性:
Select、Modify、Delete在执行前都会检查Identifier的有效性,若无效将抛出ArgumentException。 - 内部数据结构:
Brep在底层使用两个dotContourPoint_t结构表示起止点,并通过ToStruct/FromStruct进行内存映射转换。 - 性能考量:批量创建或修改时,建议在循环外复用
Model对象,并及时调用CommitChanges()优化事务性能。 - 坐标系:起止点坐标使用模型全局坐标,截面方向由 Tekla 内部根据起点到终点的方向向量自动计算。
八、总结
Brep是 Tekla Open API 中用于创建边界表示实体零件的核心类,继承自Part。- 必须通过
StartPoint和EndPoint定义实体起止位置,并设置Profile和Material。 - 提供
StartPointOffset和EndPointOffset用于控制实体端部的延伸或缩进。 - 重写的
Insert、Select、Modify、Delete提供了完整的生命周期管理。 - 内部通过
BrepParametersCheck()严格校验参数,起止点不能重合,四个关键属性缺一不可。 - 继承自
Part和ModelObject的大量属性和方法使几何查询、属性修改和关系获取非常便捷。 - 开发时应注意参数校验规则、Offset 的正确使用,并正确理解 Brep 的一维拉伸几何特征。
本文适用于 Tekla Structures 2017 及以上版本。
Tekla 二次开发:Brep API 完全解析 - 钢结构资源网 Tekla插件 CAD工具 犀牛GH汉化 套料

探索者TSSD2024和谐版
