Teigha BIMにおける要素の組み込みパラメータ

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);
  }
}

今すぐ始める

ODAソフトウェアを60日間無料でお試しください。
リスクなし、クレジットカード不要。

無料で試す