Revit ファミリAPI – その3

「RevitファミリAPI」と称して、前回と前々回では、ファミリの作成方法をベストプラクティスに沿った、RevitファミリAPIの使用方法の基本を説明しました。今回は、その最終編として、表示レベルによって異なる細部のモデルの調整とマテリアルの追加についてお話します。そして最後に、参考になるSDKサンプルを紹介します。

ファミリ作成に関連するその他のクラスとメソッド

Revitの表示には簡易、普通、詳細の3種類の表示レベルがありますが、ファミリを作成する場合それらを考慮する必要がある場合があります。それらを指定するには、FamilyElementVisibilityクラスをもちいます。FamilyElementVisibilityクラスのインスタンスを作成し、表示のレベルの設定をし、それを関連するエレメントにElement.SetVisibility()メソッドを用いて指定します。以下が、ソリッドを簡易表示の際には、表示しないようにする例です。

Sub SetVisibility(ByVal
pSolid As Extrusion)

    ‘ モデルの可視状態を簡易モードでは表示しないように設定します。

    Dim
pVis As FamilyElementVisibility = _
        New FamilyElementVisibility(FamilyElementVisibilityType.Model)

   
pVis.IsShownInCoarse = False

 

   
pSolid.SetVisibility(pVis)

 

End Sub

また、場合によっては、ファミリの定義の中でも、インスタンスレベルのパラメータとしてソリッドという固有のジェオメトリに個別に定義したい場合があるかと思います。マテリアルがそういった例にあたります。その場合は、インスタンスパラメータをファミリパラメータに関連付けるひつようがあります。これを行うには、FamilyManager.AssociateElementParameterToFamilyParameterを使用します。以下がコードの使用例です。

Sub addMaterials(ByVal
pSolid As Extrusion)

 

   
‘ マテリアルIDの取得。(例えば、”ガラス”など)

 

    Dim
pMat As Material = _

       
Utils.FindElement(m_rvtDoc, GetType(Material), “Glass”)

   
Dim idMat As ElementId = pMat.Id

 

   
‘ 素材仕上げのパラメータを取得

 

   
Dim paramFamilyMaterial As FamilyParameter = _

       
m_familyMgr.Parameter(“Column Finish”)

 

    ‘ 先ほど取得したファミリのパラメータにマテリアルパラメータを関連付ける

 

    Dim
paramSolidMaterial As Parameter = pSolid.Parameter(“Material”)

    m_familyMgr.AssociateElementParameterToFamilyParameter(
_

       
paramSolidMaterial, paramFamilyMaterial)

 

    ‘ ガラス仕上げで別のタイプを追加

 

   
AddType(“Glass”, 600.0, 600.0)

   
m_familyMgr.Set(paramFamilyMaterial, idMat)

 

End Sub

 (コードは、Revit ADN Open のサイトにポストしてあるRevit 2013/2014 API Labs にあります。必要に応じて参考にしてください。)

ファミリ関連のSDK サンプル

最後に、SDKに含まれるファミリに関するサンプルを示します。ファミリのサンプルは、<SDKフォルダ>\Samples\ FamilyCreation にまとまっていますので、必要に応じて参考にしてください。

AutoJoin

  • 自動的にファミリモデルやマスで使用する複数の汎用フォームのジオメトリを自動的に結合します。
  • フォームが重なっている部分をDocument.CombineElements()メソッドを使用して結合させます。
  • ジオメトリオブジェクトが重なっているかどうかを、Face.Intersect(Curve)

    メソッドを用いてチェックします。

AutoParameter

  • 1つまたは複数のファミリのドキュメントへ、共有または非共有パラメータをバッチ·モードで自動追加します。
  • アクティブなファミリドキュメント、あるいは、フォルダ内のすべてのファミリドキュメントを処理します。
  • FamilyManagerクラスのAddParameterメソッドを使用します。
  • Revitの共有パラメータ形式で書かれたパラメータのテキストファイルから入力データを読み込みます。

DWGFamilyCreation

  • DWGファイルをファミリドキュメントにインポートし、インポートされたインスタンスにタイプパラメータを追加します。(WGFileName

    とImportTime)

GenericModelCreation

  • 押し出し、ブレンド、回転、スイープとスイープブレンド要素を使用して一般的なモデルを作成します。
  • 開いているドキュメントは、ファミリドキュメントであるかをチェック、あるいは、新しいファミリのドキュメントを作成します。
  • プロファイルと図形を作成するためCreateSketchPlane、NewLineBound、およびFamilyItemFactoryの使用方法の例を示します。
A simple line drawing featuring a cube, a pyramid, a semicircular shape, and two straight objects resembling sticks or pencils.

TypeRegeneration

  • 定義されているすべてのタイプを決定するためにFamilyManager.Typesプロパティを使用します。CurrentTypeで、現在のタイプを決定します。
  • すべてのタイプが正常に再生されたかどうかを報告し、ファイルにエラーがログします。

ValidateParameters

  • すべてのタイプが、特定のパラメータに有効な値を持っているかどうかをチェックし、結果をファイルにログします。
  • 外部アプリケーションがDocumentSavingとDocumentSavingAsイベントに登録し、保存の際、自動的にチ正しい値が持ちられているかをチェックします。
  • 外部コマンドで、手動で起動することも可能です。

WindowWizard

  • 窓ファミリを作成する、ウィザード形式のサンプルです。ユーザインタフェースを提供し、それを介して作成します。
  • 窓ファミリテンプレート、例えば、Metric

    Window.rtfを持ちいてスタートします。
  • ユーザは、窓の寸法パラメータ、および材料の入力を行います。
  • 押し出し、位置合わせの拘束、寸法線、参照面、およびファミリタイプを作成します。
A wireframe drawing of a window structure next to a series of three computer interface windows titled 'Window Wizard', showing steps for inputting window dimensions and selecting window properties.

CreateAirHandler – Revit MEP独特の機能

  • パイプとダクトコネクタ付き空気ハンドラを作成します。
  • テンプレートの有効性を確認するために、テンプレートのファミリカテゴリをチェックします。
  • FamilyItemFactoryクラスのNewExtrusion、NewPipeConnector、NewDuctConnectorメソッドを使用します。
  • 適切な​​コネクタパラメータを設定し、押し出し要素に設定するために、Document.CombineElementsを使用します。
3D representation of a rectangular box with two rectangular frames positioned above it, one oriented horizontally and the other oriented vertically.

CreateTruss – Revit Structure独特の機能

  • トラスファミリのドキュメントのモノトラスを作成します。
  • NewModelCurveを使用してトラス曲線を作成し、ModelCurve

    TrussCurveTypeプロパティを通じてトラスタイプをセットします。
  • NewAlignmentをもちて、トラス曲線に拘束を追加します。

以上三回に分けてAPIを用いたファミリの作成方法のお話をしました。Revitを真に使いこなすのは、ファミリを理解することが大切です。ぜひチャレンジしてみてください。

原田