很多人第一次做线束二开会困惑:线束既不是 Part Design 的实体,也不是 GSD 的纯曲面。它是 CATIA EHI(Electrical Harness Installation) 工作台下的一种特殊产品对象,本质上是"路径曲线 + 直径属性 + 电气网络"三合一。
| 对象 | 接口 | 说明 |
|---|---|---|
| Bundle Segment | CATIElbBundleSegment | 一段主干线束(含路径 + 直径 + 弯曲半径) |
| Branch | CATIElbBranch | 分支段,从 BSG 派生 |
| Connector | CATIElbConnector | 电气连接器(公头/母头) |
| Multi-Branchable | CATIElbMultiBranchableObject | 支持多分支拓扑的容器 |
| Route 服务 | CATIRouRoutable | 路由可达性接口(Routing 通用) |
关键差异:CATPart 里的曲线是几何,线束的路径曲线带有"流向"和"直径"两个语义属性。这意味着同一条空间样条,作为 GSD Spline 和作为 BSG 路径,在内核里是两个对象。CAA 二开必须用 EHI Factory 创建,不能拿 GSD Spline 当线束路径用。
线束所在的 CATProduct 文档下面通常有一个 Geometrical Bundle (GB) 几何束节点和一个 Functional Bundle (FB) 功能束节点。GB 装空间路径,FB 装电气逻辑(导线/网络/信号)。两者通过 link 同步。
CATIElbHarness 接口拿到 harness 容器。CATIRouPlaceable::Place 定位。CreateBundleSegment 传入起止 connector 的电气端口。CATIElbBundleSegment::AddSupport 把卡扣/支架的位置加进去。SetExtremityDiameter + SetMinimumBendRadius(不设默认 1mm/30mm,会画出鬼畜路径)。E_ELB_CONNECTOR_NOT_PLACED。务必先 Place 再 BSG。AddSupport 不会自动按距离排序,乱序加会得到锯齿路径。批量时先把 support 按沿主轴投影距离排序再加。CATIRouRoutable,电气专属(如 wire mapping、connector pin)走 CATIElb*。两套都要 QI 才能拿全功能。// AutoHarness.cpp
// 输入:Product Doc、起止 Connector 实例、支架点列表(CATMathPoint 数组)
// 输出:一根带几何路径的 Bundle Segment
#include "CATIProduct.h"
#include "CATIElbBundleSegmentFactory.h"
#include "CATIElbBundleSegment.h"
#include "CATIElbConnector.h"
#include "CATIRouPlaceable.h"
#include "CATIRouRoutable.h"
#include "CATIUpdate.h"
#include "CATMathPoint.h"
HRESULT CreateAutoHarness(
CATIProduct_var spProduct,
CATIProduct_var spStartConnector, // 已 Place 在 Product 中
CATIProduct_var spEndConnector,
const CATListOfCATMathPoint& supportPts,
double diameterMM,
double bendRadiusMM)
{
HRESULT rc = S_OK;
if (spProduct == NULL_var) return E_FAIL;
// 1. 拿 BSG Factory(属于 Product 的扩展)
CATIElbBundleSegmentFactory_var spFactory = spProduct;
if (spFactory == NULL_var) return E_FAIL;
// 2. 拿两端 Connector 的电气端口
CATIElbConnector_var spStartElb = spStartConnector;
CATIElbConnector_var spEndElb = spEndConnector;
if (spStartElb == NULL_var || spEndElb == NULL_var)
return E_FAIL; // 不是电气连接器
// 3. 创建 BSG(Polyline 模式)
CATIElbBundleSegment_var spBSG;
rc = spFactory->CreateBundleSegment(
spStartElb, spEndElb,
CATElbBSGPolyline, // 路径模式
spBSG);
if (FAILED(rc) || spBSG == NULL_var) return rc;
// 4. 设置直径与弯曲半径(mm)
spBSG->SetExtremityDiameter(diameterMM);
spBSG->SetMinimumBendRadius(bendRadiusMM);
// 5. 添加支架引导点(必须按沿路径方向排序)
for (int i = 1; i <= supportPts.Size(); ++i) {
const CATMathPoint& pt = supportPts[i];
spBSG->AddSupport(pt, NULL_var); // 第二参传 NULL = 空中点
}
// 6. 第一轮 Update(生成几何路径)
CATIUpdate_var spUpd = spProduct;
if (spUpd != NULL_var) spUpd->Update();
// 7. 第二轮 Update(结算电气网络与长度)
if (spUpd != NULL_var) spUpd->Update();
// 8. 验证:读 BSG 长度
double bsgLength = 0.0;
spBSG->GetLength(bsgLength);
cout << "BSG length = " << bsgLength << " mm" << endl;
return rc;
}
© 上海琛兴科技发展有限公司 · 转载请注明出处 · CATIA 是 Dassault Systèmes 注册商标