Teigha BIMの要素には組み込みパラメータがあります。要素のすべての組み込みパラメータを取得するには、このメソッドを使用できます。
void getListParams(OdBuiltInParamArray& aParams) const;
パラメータを持つ各クラスは、このメソッドを実装し、そのパラメータを配列に追加します。クラスは、パラメータを追加する場合、その値に対しても責任を負い、値にアクセスされた場合はパラメータを処理する必要があります。
一般的に知られているように、パラメータの値を取得するためのメソッドのセットがあります。
OdResult getParam(const OdBm::BuiltInParameter::Enum& parameterId, double& value) const;
OdResult getParam(const OdBm::BuiltInParameter::Enum& parameterId, OdInt32& value) const;
OdResult getParam(const OdBm::BuiltInParameter::Enum& parameterId, OdString& value) const;
OdResult getParam(const OdBm::BuiltInParameter::Enum& parameterId, OdBmObjectId& value) const;
値の型がわからない場合は、最も一般的なメソッドを使用する必要があります。
OdResult getParam(const OdBm::BuiltInParameter::Enum& parameterId, OdTfVariant& value) const;
BmParamsCmdコマンドは、要素の組み込みパラメータを操作する例です。このコマンドはTB_DevGuideCommandsにあり、OdaBimAppで「編集」->「登録済みコマンド」->「パラメータ」->「BmParamsCmd」を選択して実行できます。
OdBmElementPtr pElem = pDb->getObjectId(OdDbHandle(OdUInt64(iHandle))).safeOpenObject();
OdBuiltInParamArray aParams;
pElem->getListParams(aParams);
OdBmAUnitsPtr pUnits = pDb->getUnits();
for (OdBuiltInParamArray::iterator it = aParams.begin(); it != aParams.end(); it++)
{
OdString mesBP;
mesBP.format(OD_T("%s: "), OdBm::BuiltInParameter(*it).toString().c_str());
OdBmParamElemPtr pParamElem = pDb->getObjectId(*it).safeOpenObject();
OdBmParamDefPtr pDescParam = pParamElem->getParamDef();
OdBm::UnitType::Enum utEnum = pDescParam->getUnitType();
OdString mes;
OdTfVariant value;
OdResult res = pElem->getParam(*it, value);
if (res == eOk)
{
OdVariant::Type odType = value.type();
switch (odType) {
case OdVariant::kInt32: {
if (utEnum > -2)
mes.format(OD_T("integer %i asString %s"), value.getInt32(), OdBmLabelUtilsEnModule::format(*pUnits, utEnum, value.getInt32()).c_str());
else
mes.format(OD_T("integer %i"), value.getInt32());
} break;
case OdVariant::kDouble: {
mes.format(OD_T("double %f asString %s"), value.getDouble(), OdBmLabelUtilsEnModule::format(*pUnits, utEnum, value.getDouble()).c_str());
} break;
case OdVariant::kString: {
mes.format(OD_T("string %s"), value.getString().c_str());
} break;
default: {
if (odType == OdTfVariant::kDbStubPtr) {
OdDbStub* pStub = value.getDbStubPtr();
if (pStub)
{
OdBmObjectId rawValue = OdBmObjectId(pStub);
mes.format(OD_T("id %lld"), (OdUInt64)(rawValue.getHandle()));
}
else
mes.format(OD_T("0"));
}
}}
pIO->putString(mesBP + mes);
}
else
{
mes.format(OD_T(" Invalid param. OdResult %i"), res);
pIO->putString(mesBP + mes);
}
}