はじめに
コネクタは論理エンティティであり、コネクタを含むコンポーネントがシステムトポロジ内で正しく相互作用できるようにする他の要素の一部です。これらはOdBmConnectorクラスによって表されます。
ドメインタイプの取得
コネクタのドメインタイプを取得するには、getDomainType()メソッドを使用します。可能な値は、OdBm::ConnectorDomainType::Enum列挙型で定義されています。
- DomainUndefined — コネクタのドメインタイプが未定義です。
- DomainHvac — HVAC/ダクトコネクタ。
- DomainElectrical — 電気コネクタ。
- DomainPiping — 配管コネクタ。
- DomainCableTrayConduit — ケーブルトレイコンジットコネクタ。
- DomainStructuralAnalytical — 構造解析モデルコネクタ。
接続タイプの取得
コネクタの接続タイプを取得するには、getConnectorType()メソッドを使用します。可能な値は、OdBm::ConnectorTypes::Enum列挙型で定義されています。
- Invalid — 無効な接続タイプ。
- End — 終端接続タイプ。
- Curve — カーブ接続タイプ。
- Logical — 論理接続タイプ。
- Reference — 参照接続タイプ。
- Surface — サーフェス接続タイプ。
- EndSurface — 終端またはサーフェス接続タイプ。
- Physical — 物理接続タイプ。
- NonEnd — 非終端接続タイプ。
- MasterSurface — マスターサーフェス接続タイプ。
- Family — ファミリー接続タイプ。
- NodeReference — レイアウトノードへの参照。
- BlankEnd — 空の終端接続タイプ。
- AnyEnd — 任意の終端接続タイプ。
- Super — スーパー接続タイプ。
- AllModes — すべての接続タイプ。
物理接続タイプには、End、Curve、Surfaceが含まれます。接続タイプが物理的であるかどうかを確認するには、isPhysicalConnector()メソッドを使用します。
フロー方向の取得
接続フロー方向は、HVACおよび配管コネクタのみでサポートされています。
コネクタのフロー方向を取得するには、getDirection()メソッドを使用します。可能な値は、OdBm::FlowDirectionType::Enum列挙型で定義されています。
- Bidirectional — 双方向フロー方向。
- In — 入力フロー方向。
- Out — 出力フロー方向。
HVACおよび配管コネクタ以外のドメインタイプの場合、関数はOdResult::eNotApplicableを返します。方向を計算できない場合も、関数はエラーを返します。
コネクタのシステムの取得
コネクタはMEPシステムに属することができます。このシステムの識別子を取得するには、getMEPSystem() メソッドを使用します。コネクタがシステム内にある場合、この関数はシステムの識別子を systemId 引数に格納し、OdResult::eOk を返します。コネクタがシステム内にない場合は、OdResult::eNotApplicable を返します。
コネクタマネージャーの取得
コネクタのコネクタマネージャーを取得するには、getConnectorManager() メソッドを使用します。このメンバー関数は、コネクタのコネクタマネージャーを返します。コネクタに所有者要素がない場合は NULL を返します。
接続の確認
コネクタが別の要素と物理的に接続されているかどうかを確認するには、isConnected() メソッドを使用します。この関数は、コネクタが別の要素に接続されている場合に true を返します。この関数は物理コネクタでのみ機能します。
コネクタ座標系の取得
コネクタ座標系、その空間内の位置、および方向を取得するには、getCoordinateSystem メソッドを使用します。この関数は、コネクタ座標系を connectorCS 引数に格納し、座標系が正常に取得された場合は OdResult::eOk を返します。それ以外の場合は OdResult::eNotApplicable を返します。この関数は物理コネクタでのみ機能します。connectorCS の原点を参照点と仮定し、Z軸がコネクタに垂直であるとすると、コネクタの位置を計算できます。
例
以下のコードサンプルには、上記で説明したすべての関数を適用するための注釈付きテンプレートが含まれています。
// opening some family instance element.
// there can be any type of element with connectors:
// FamilyInstance, RbsCurve, RbsSystem, etc.
OdBmFamilyInstancePtr famInst = pDb->getObjectId(OdDbHandle(handle)).safeOpenObject();
if (famInst.isNull())
{
pIO->putString(OD_T("Invalid handle"));
return;
}
OdBm::ConnectorDomainType::Enum conDomainType;
OdBm::ConnectorTypes::Enum conType;
OdBm::FlowDirectionType::Enum conFlowDirection;
bool isPhysical;
bool isConnected;
OdBmConnectorManagerPtr pConManager;
OdGeMatrix3d conCoordSystem;
OdBmConnectorPtrArray connectors;
OdResult result;
OdBmObjectId connectorSystemId;
// getting connectors via element connector manager
famInst->getBaseConnectorManager()->getConnectors(connectors);
// processing connectors
for (auto connector : connectors)
{
// 1. Getting domain type
conDomainType = connector->getDomainType();
if (conDomainType == OdBm::ConnectorDomainType::DomainPiping)
{
// do some actions in case of Piping connector
}
// 2. Getting connection type
conType = connector->getConnectorType();
if (conType == OdBm::ConnectorTypes::Logical)
{
// do some actions in case of Logical connection
}
// 3. Check if physical connector
isPhysical = connector->isPhysicalConnector();
if (!isPhysical)
{
// do some actions in case of Non-physical connector
}
// 4. Getting connection flow direction
result = connector->getDirection(conFlowDirection);
if (result == eOk && conFlowDirection == OdBm::FlowDirectionType::Out)
{
// do some actions in case of calculated Out flow direction
}
// 5. Getting connector MEP system
result = connector->getMEPSystem(connectorSystemId);
if (result == eOk)
{
OdBmRbsSystemPtr pMEPSystem = connectorSystemId.safeOpenObject();
if (!pMEPSystem.isNull())
{
// do some actions with connector MEP system
}
}
// 6. Getting connector manager
pConManager = connector->getConnectorManager();
if (!pConManager.isNull())
{
// do some actions with connector ConnectorManager
}
// 7. Checking if connector connected to another element
isConnected = connector->isConnected();
if (isConnected)
{
// do some actions if connector identified as connected
}
// 8. Getting connector location
result = connector->getCoordinateSystem(conCoordSystem);
if (result == eOk)
{
OdGePoint3d connectorOrigin = conCoordSystem.getCsOrigin();
OdGeVector3d connectorNormal = conCoordSystem.getCsZAxis();
// do some actions with connector location
}
}