Revit 2015では、ドキュメント上にジオメトリを作成して描画する方法として、コンセプトデザイン環境からインプレイスマスでフォームを作成する方法と、ファミリインスタンスを作成する方法があります。これらはAPIを通じて実装することもできますが、どちらの方法でも、FamilyItemFactoryクラスのメソッドを利用してファミリインスタンスを作成することが基本となります。
ただしAPIからファミリを作成する場合、一定規模のジオメトリを作図しようとすると、作図処理に時間がかかってしまうという問題あります。これは、ジオメトリに対して、ファミリインスタンスとして利用するための機能の生成処理に時間を要するためです。
そこで、単純にジオメトリを作図したい場合は、ファミリを新規に作成するのではなく、ジオメトリ要素をドキュメント上で直接作図するためのDirectShapeクラスを利用することで、作図速度を改善することができます。ただし、DirectShapeオブジェクトは、ファミリインスタンスとして利用することはできませんので、用途に応じて使い分ける必要があります。
DirectShapeクラスは、Revit 2015から追加されたAPIで、これは外部で作成されたジオメトリ要素をストアするためのクラスです。
主な使用方法は、IFCなどの他のデータフォーマットから形状をインポートすることですが、ジオメトリ要素を保存する入れ物として利用できます。また作成したDirectShapeオブジェクトは、カテゴリに割り当てられます。
DirectShapeオブジェクトにストアできるジオメトリ要素は、IListを引数としてとり、TessellatedShapeBuilderクラスを使用して作成することができます。また、GeometryCreationUtilitiesクラスで作成したSolidオブジェクト等も渡すことができます。
TessellatedShapeBuilderは、TessellatedFaceオブジェクトで作成された複数の平面からソリッド、ポリメッシュを作成するためのビルダークラスです。TessellatedFaceオブジェクトは、Faceオブジェクトのように個別にマテリアルを指定することができます。
DirectShapeクラスを応用して、OBJ形式のファイルを読み込んでDirectShepオブジェクトに変換し、ドキュメント上に配置するアドインについて、以下のブログで紹介されております。
英語になってしまいますが、ご興味のある方はご確認ください。
From Hack to App – OBJ Mesh Import to DirectShape
http://thebuildingcoder.typepad.com/blog/2015/02/from-hack-to-app-obj-mesh-import-to-directshape.html
DirectShapeクラス、TessellatedShapeBuilderクラスについては、SDKフォルダ直下にあるRevit Platform API Changes and Additions.docxのImport APIに概要が記載されております。
またサンプルコードは以下のAutodesk Technical Q&A に掲載しております。
ご興味のある方は、ご確認ください。
QA-9589 ソリッドやメッシュのジオメトリを高速に作図する方法
http://tech.autodesk.jp/faq/faq/adsk_result_dd.asp?QA_ID=9589
By Ryuji Ogasawara
コメント
コメントフィードを購読すればディスカッションを追いかけることができます。