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 中找到该命令,并通过选择 Edit -> Registered Commands -> Parameters -> BmParamsCmd 在 OdaBimApp 中运行它。

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 天。
无风险,无需信用卡。

免费试用