ウォークスルーを開始する前に、Material クラスの理解を深めるために次のセクションを読んでください。
すべてのマテリアル オブジェクトは Material クラス フィルタを使用して取得することができます。また、マテリアル オブジェクトはドキュメント、カテゴリ、要素、面などでも使用できますが、それについてはこの章の該当するセクションで説明します。マテリアル オブジェクトは、取得する場所に関係なく、Material クラスとして表されます。
マテリアルには、レンダリングの外観、構造、その他の主要なマテリアル カテゴリに関する 1 つまたは複数のアスペクトを持ちます。各アスペクトは、Material クラス自身のプロパティか、そのアセット、構造、熱のいずれかによって表されます。StructuralAsset クラスは、構造解析に関するマテリアルのプロパティを表します。ThermalAsset クラスは、エネルギー解析に関するマテリアルのプロパティを表します。
|
コード領域 19-3: マテリアルのプロパティを取得 |
private void ReadMaterialProps(Document document, Material material)
{
ElementId strucAssetId = material.StructuralAssetId;
if (strucAssetId != ElementId.InvalidElementId)
{
PropertySetElement pse = document.GetElement(strucAssetId) asPropertySetElement;
if (pse != null)
{
StructuralAsset asset = pse.GetStructuralAsset();
// Check the material behavior and only read if Isotropic
if (asset.Behavior == StructuralBehavior.Isotropic)
{
// Get the class of material
StructuralAssetClass assetClass = asset.StructuralAssetClass; // Get other material properties
// Get other material properties
double poisson = asset.PoissonRatio.X;
double youngMod = asset.YoungModulus.X;
double thermCoeff = asset.ThermalExpansionCoefficient.X;
double unitweight = asset.Density;
double shearMod = asset.ShearModulus.X;
double dampingRatio = asset.DampingRatio;
if (assetClass == StructuralAssetClass.Metal)
{
double dMinStress = asset.MinimumYieldStress;
}
elseif (assetClass == StructuralAssetClass.Concrete)
{
double dConcComp = asset.ConcreteCompression;
}
}
}
}
}
|
構造解析に関するマテリアルの分類(鉄鋼、コンクリート、木材など)は、マテリアルに関連付けられている StructuralAsset の StructuralAssetClass プロパティから取得することができます。
API からはコンクリート マテリアルのコンクリート タイプの値にはアクセスできません。
エネルギー解析に関するマテリアルの分類(ソリッド、液体、気体など)は、マテリアルに関連付けられている ThermalAsset の ThermalMaterialType プロパティから取得することができます。
マテリアル オブジェクトのプロパティは、色、塗り潰しパターンなどのマテリアルの特定のタイプを特定します。
一部のマテリアルのプロパティはパラメータとしてのみ使用可能です。色などの一部のものはプロパティとして使用できる他、BuiltInParameter MATERIAL_PARAM_COLOR を使用してパラメータとして使用することもできます。
レンダリング データのコレクションは、アセットと呼ばれる読み取り専用のオブジェクトに整理されます。使用可能なすべての表現関連のアセットは、Application.Assets プロパティから取得できます。表現アセットは Material.AppearanceAssetId プロパティを使用してマテリアルからアクセスすることができます。
次の図は、[アセット ブラウザ]ダイアログ ボックスの[外観ライブラリ]セクションを表しており、一部のレンダリング アセットがどのように UI に表示されるかを表しています。
図 106: 外観ライブラリ
SDK に付属のマテリアル サンプル アプリケーションは、ダイアログで選択したマテリアルに RenderApperance プロパティを設定する方法を表しています。ダイアログには Application.Assets のすべてのアセット オブジェクトが表示されます。
クラス FillPatternElement での FilteredElementCollector を使用したフィルタリングを使用すると、ドキュメントのすべての FillPatterns を使用することができます。FillPatternElement は FillPattern を含む要素であり、FillPattern クラスからはパターン名とパターンを構成する FillGrids のセットにアクセスできます。
FillPatterns には、製図とモデルの 2 つの種類があります。UI では、製図塗り潰しパターンを Material.CutPatternId にのみ設定できます。塗り潰しパターンのタイプは FillPattern.Target プロパティによって示されます。次の例は、マテリアル FillPattern を変更する方法を表しています。
|
コード領域 19-4: 塗り潰しパターンを設定 |
public void SetFillPattern(Document document, Material material)
{
FilteredElementCollector collector = new FilteredElementCollector(document);
ICollection<ElementId> fillPatternElements = collector.OfClass(typeof(FillPatternElement)).ToElementIds();
foreach (ElementId fillPatternId in fillPatternElements)
{
// always set successfully
material.CutPatternId = fillPatternId;
material.SurfacePatternId = fillPatternId;
}
}
|