外観アセットにヘルパークラスを使用する
.rvt/.rfa ファイル内のマテリアルには、異なるビューでエンティティをレンダリングするためのプロパティが含まれています。マテリアルを定義するプロパティはアセットに整理されています。
- 外観プロパティ — リアリスティックビューおよびレイトレースビューでのマテリアルの表示方法を制御します。
- グラフィックプロパティ — その他のビューでのマテリアルの表示方法を制御します。
- 物理プロパティ — 構造解析に使用されます。
- 熱プロパティ — エネルギー解析に使用されます。
マテリアルは、各タイプにつき1つずつ、最大4つのアセットを持つことができますが、同じアセットタイプを複数持つことはできません。一般的に、アセットはオブジェクトの特定の特性や動作を制御するプロパティのグループです。アセットは互いに接続できます。
各プロパティは OdBmAProperty 型の子孫であり、OdBmAsset クラスの getAProperty メソッドによってアクセスできます。
template <class T>
bool getAProperty(const OdString ¶meter, OdSmartPtr<T> &value)
アセット内のプロパティへのアクセスを簡素化するために、BimRv SDK には以下のヘルパークラスがあります。
- OdBmAppearanceAssetHelper
- OdBmStructuralAssetHelper
- OdBmThermalAssetHelper
AppearanceAssetHelper クラスは、マテリアルデータにアクセスするためのいくつかのメソッドを提供します。
- アセット名にアクセスします。
OdResult getName(OdString&) const;
void setName(const OdString&); - 外観アセットで定義されたプロパティをマテリアルオブジェクトに適用します。
void applyToMaterial(OdBmMaterialPtr&); - マテリアルの外観を定義する接続されたアセットの配列を返します。
OdResult getAppearanceAssets(OdBmObjectPtrArray& pAssets) const; - アセット名に基づいてアセットのタイプを返します。
OdBm::PredefinedAppearanceAsset::Enum getSchemaType() const;
静的メソッドもあります。
- 指定された事前定義済みアセットのプロパティでアセットを埋めます。
static OdResult fillAppearanceAssetWith(OdBmAssetPtr&,
OdBm::PredefinedAppearanceAsset::Enum,
const OdString& texture = OdString::kEmpty); - アセットがマテリアルの外観のビットマップを定義している場合にのみ、接続されたアセットを返します。
static OdResult getTextureAsset(const OdBmAssetPtr&,
OdBmAssetPtr&, const OdString& propertyName = OdString::kEmpty); - アセット名に基づいてアセットのタイプを返します。
static OdBm::PredefinedAppearanceAsset::Enum
getSchemaType(const OdBmAssetPtr&);
レンダリングビュー (リアリスティックおよびレイトレース) における汎用マテリアルの外観は、Image、Checker、Gradient、Marble、Noise、Speckle、Tiles、Waves、または Wood のいずれかのタイプになります。
現在、Image および Noise アセットを操作するためのヘルパーが実装されています。
Image アセットを操作するには OdBmUnifiedBitmapSchemaHelper を使用し、Noise アセットには OdBmNoiseSchemaHelper を使用します。次の例は、ヘルパーの操作方法を示しています。
OdBmDatabasePtr pDb = app->readFile("modern_villa_floor.rvt");
OdBmMaterialElemPtr pMatElem =
pDb->getObjectId(OdDbHandle(400770)).safeOpenObject();
OdBmMaterialPtr pMaterial = pMatElem->getMaterial();
OdBmObjectPtrArray pAssets;
OdBmAppearanceAssetHelper
helper(pMaterial->getAppearanceAssetId().safeOpenObject());
helper.getAppearanceAssets(pAssets);
OdBmAssetPtr pAsset = pAssets[0];
OdBm::PredefinedAppearanceAsset::Enum type = OdBmAppearanceAssetHelper::getSchemaType(pAsset);
// type == OdBm::PredefinedAppearanceAsset::Noise;
OdBmNoiseSchemaHelper nhelper(pAsset);
OdBmAssetPtr noise1;
nhelper.getAppearanceAsset1(noise1);
OdBmUnifiedBitmapSchemaHelper bhelper(noise1);
OdString filename;
bhelper.getTextureFileName(filename);
この2部構成シリーズの次の記事では、ヘルパークラスのメソッドと新しいマテリアルの作成に関する詳細について説明します。