您可以在 ODA BimRv 中使用辅助类来创建和操作材料的物理和热属性。.rvt 文件中的标准方法是基于结构类或热类型之一创建结构或热资产,然后将其设置为材料对象。例如:
StructuralAsset sAsset = new StructuralAsset("Structural asset for concrete material", StructuralAssetClass.Concrete);
sAsset.Behavior = StructuralBehavior.Orthotropic;
sAsset.SetPoissonRatio(.5);
PropertySetElement propSetElem = PropertySetElement.Create(doc, sAsset);
material.StructuralAssetId = propSetElem.Id;
但在 .rvt 文件中,访问资产参数的唯一方法是通过 PropertySetElement 和内置参数枚举来访问它们。
Parameter paramPoissonRatioX = propSetElem.get_Parameter(BuiltInParameter.PHY_MATERIAL_PARAM_POISSON_MOD1);
paramPoissonRatioX.Set(.6);
辅助类
ODA BimRv 提供了辅助类 OdBmStructuralAssetHelper,用于在数据库和材料中注册资产,然后访问和操作资产数据。
请注意,应使用事务来添加和修改数据库中的元素。要使用事务,请包含 Database/BmTransaction.h 头文件。
OdBmPropertySetElementPtr pPropSetElement = OdBmPropertySetElement::createObject();
ODBM_TRANSACTION_BEGIN(t, pDbSrc)
t.start();
pDbSrc->addElement(pPropSetElement);
OdBmStructuralAssetHelper structAssetHelper = OdBmStructuralAssetHelper(pPropSetElement);
structAssetHelper.setStructuralAssetClass(OdBm::StructuralAssetClass::Metal);
structAssetHelper.setName(L"Stainless Steel");
structAssetHelper.setSubClass(L"Steel");
structAssetHelper.setThermalExpansionCoefficient(OdGeVector3d(0.0000104, 0.0000104, 0.0000104));
structAssetHelper.setBehavior(OdBm::StructuralBehavior::Isotropic);
double dYoung = OdBmUnitUtils::convertToInternalUnits(193000., OdBm::DisplayUnitType::DUT_MEGAPASCALS);
structAssetHelper.setYoungModulus(OdGeVector3d(dYoung, dYoung, dYoung));
double dSheer = OdBmUnitUtils::convertToInternalUnits(86000., OdBm::DisplayUnitType::DUT_NEWTONS);
structAssetHelper.setShearModulus(OdGeVector3d(dSheer, dSheer, dSheer));
structAssetHelper.setPoissonModulus(OdGeVector3d(0.3, 0.3, 0.3));
double dDensity = OdBmUnitUtils::convertToInternalUnits(8000., OdBm::DisplayUnitType::DUT_CUBIC_FEET);
structAssetHelper.setDensity(dDensity);
OdBmMaterialElemPtr pMaterialElem =
pDbSrc->getObjectId(OdDbHandle(2349)).safeOpenObject();
pMaterialElem->setStructuralAssetId(pPropSetElement->objectId());
t.commit();
ODBM_TRANSACTION_END();
热资产辅助类 OdBmThermalAssetHelper 的工作方式相同:
OdBmThermalAssetHelper thermalAssetHelper =
OdBmThermalAssetHelper(pPropSetElement);
thermalAssetHelper.setThermalClassType(OdBm::ThermalClassType::Solid);
thermalAssetHelper.set…
pMaterialElem->setThermalAssetId(objId);
辅助类还可以用于访问数据库中现有元素的属性。
OdBmDatabasePtr pDb = app->readFile(sTempFile);
OdBmPropertySetElementPtr pMaterpPropSetElementialElem = pDbSrc->getObjectId(OdDbHandle(2350)).safeOpenObject();
TEST_ASSERT(! pMaterpPropSetElementialElem.isNull());
OdBmStructuralAssetHelper sAssetHelper = OdBmStructuralAssetHelper(pMaterpPropSetElementialElem);
OdString sName;
structAssetHelper.getName(sName);