Author: Mikako Harada
-
BIM 360 Glue API Pilot and Updated Samples
By Mikako Harada As mentioned in the previous post, BIM 360 Glue has API. However, the access to the development environment is pretty limited at a moment. You can try the product itself, using the trial version. But it does not include development environment. Because of this reason, I hesitated to write about Glue API…
-
Marking 150+ Revit Exchange Apps!
By Mikako Harada It wasn't long time ago that we celebrated marking the 100 Revit apps on the Exchange Store. This week, we hit another — 150 this time! The Revit store is steadily gaining momentum, and becoming a "meeting" point for both customers and developers. We would like to use this opportunity to say…
-
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…
-
Revit ファミリAPI – その2
前回「Revit ファミリAPI – その1」では、Revit APIをもちいてファミリを作成する方法の前半をお話しました。 1.計画 2.参照面の設定 3.パラメータの追加 4.タイプの追加 5.パラメトリックな動作のテスト – フレックス(Flex) 今回は、その続きにあたる、「6.ジェオメトリの追加」からのお話をしたいと思います。 6.ジェオメトリの追加 7. 拘束(alignment)の追加 8.ステップ5~8を繰り返す 6.ジェオメトリの追加 参照面が定義され、パラメータを追加し、意図する動きが定義されたら、ここでようやくジェオメトリを追加します。繰り返しになりますが、パラメトリックのモデルでは、ジェオメトリは骨格(参照面)・筋肉(パラメータ)に追従するスキンにすぎません。 まずは、以下のようなソリッドを追加します。作成には、FamilyCreate.NewExtrusion() メソッドを使用し、断面形状を下限と上限の参照面間で押し出しする方法を用います。 手順としては、 (1)最初にL字型のプロファイル(断面形状)を定義します。 (2)スケッチ面を作成します。 (3)押し出しの高さを定義します。高さは下限と上限の参照間の距離にあたります。 (4)押し出しソリッドの作成。 ここで、注意していただきたいのは、この時点では、あくまで初期値の値を持ったソリッドです。実際にはソリッドは参照面に拘束されていません。拘束のついか追加は後ほどおこないます。 Function CreateSolid() As Extrusion ‘ (1) L字型のプロファイル(断面形状)を定義 Dim pProfile As CurveArrArray = CreateProfileLShape() ’ 以下で定義 ‘ (2) スケッチ面を作成 Dim…
-
Revit ファミリAPI – その1
2週間ほど前に、「Revitファミリの作成の秘訣」というタイトルで、Revitファミリの作成の際の概念、特にパラメトリックなモデルを作成する上で大切な考え方や注意点を「骨格、筋肉、皮」にたとえてお話しました。今回は、その手順に従ってAPIで作成する方法のお話をしたいと思います。 (なお、コードは、Revit ADN Open のサイトにポストしてあるRevit 2013/2014 API Labs にありますので、必要に応じて参考にしてください。) 概要 まず、ファミリAPIの定義ですが、私たちがファミリAPIと呼んでいるのは、Revit APIの一部で、UIでいうファミリ エディタの部分に相当します。ファミリ エディタでは、窓や扉、柱といった、いわゆるコンポーネントファミリを作成することが可能です。壁や屋根といった要素は、システムファミリに属し、これらは、ファミリエディタでは編集できませんが、この点はAPIに関しても同じです。基本的に、ファミリAPIはファミリ エディタの部分を公開したAPIです。 ファミリAPIをもちいることにより、ファミリのライブラリの生成を自動化したり、あるいは、Revitプロジェクトの実行中に、他のライブラリやデータベースにアクセスして、適宜ファミリを作成したりすることが可能となります。また、既存のファミリから情報を抽出し、修正することも可能です。手順は基本的にはUIに類似しますが、いくつかの相違点と制限があります。これについては後ほど適宜触れることにします。 ファミリAPI特有のクラスとメソッド ファミリのコンテキストで使用される特有のクラスとメソッドには以下があります。 FamilyManagerクラス: ファミリのコンテキストに固有なドキュメントのメソッド: ベストプラクティスに準じたファミリAPIの使用例 それでは、ベストプラクティスに沿ったファミリAPIを、単純なL字型柱ファミリを例にとって見ていきましょう。ベストプラクティス、あるいは最適な手順としては、以下を常に意識する必要があることをお話しました: 具体的には、以下の手順を踏むことになります: 1.計画 2.参照面の設定 3.パラメータの追加 4.タイプの追加 5.パラメトリックな動作のテスト – フレックス(Flex) 6.ジェオメトリの追加 7. 拘束(alignment)の追加 8.ステップ5~8を繰り返す 今回は、その前半にあたる1~5のお話をしたいと思います。 1.計画 UIと同様、まずは、作成しようとするファミリがどういった動きをするかを考える必要があります。正しいテンプレートを選択します。例えば、ここでは、「Metric Column.rft」を選択します。そして、テンプレートを理解します。テンプレートにはあらかじめ基本となる参照面や寸法線が名前付きで定義されています。 API でファミリを作成、編集する場合、まず与えられたドキュメントがファミリドキュメントであるかどうかを確認する必要があります。また、目的に応じたテンプレートやファミリのファイルを使用します。以下のコードでは、柱のファミリテンプレートであることを確認しています: Function ValidateDocument(ByVal rvtDoc As Document) As Boolean ‘ 現在のドキュメントは、ファミリドキュメントであるかどうかをチェック If NotrvtDoc.IsFamilyDocument Then TaskDialog.Show(…
-
ニューヨークへの出張と9.11 メモリアル
このところ出張が相次ぎ、ブログのポストのほうに少々間が空いてしまいましたが、明日は、APIを用いたRevitファミリの作成に仕方について触れたいと思います。その前に少々ウォーミングアップもかねて、出張中のお話を。 先月、ニューヨークのBIM360 Glueのチームとともに仕事をしてきました。Glueチームの働くニューヨークのオフィスは、なんとマンハッタンのど真ん中。五番街と六番街の間で、エンパイヤーステートビルディングの少し南に位置します。とはいっても、オフィスそのものは非常に小さく、カリフォルニア州サンラファエル市にある本社ビルやサンフランシスコのマーケット通り一番にあるオフィス(フェリーターミナルの真向かいですが)とはまったく比べ物にならない規模です。入り口も、お世辞にも人を誘っているとはいえないもので、その昔あまり治安がよくなかったころに’おとずれた記憶しかない私は、「え?本当にここ?大丈夫かしら?」と、ニューヨークに再来した初日で、一抹の不安を感じてしまいました。ニューヨークの治安に関しては、ADNのダイレクターであるジム クアンシー が実はニューヨーク出身で、今では東京と同じくらい安全だと言っていたので、半信半疑だったのですが、(というよりも、正直、日本と比べるとは失礼なと思ったほどだったのですが)確かに、その昔のイメージとは一変。2週間の滞在で、ニューヨークが本当に変身を遂げたのを実感しました。摩天楼のそびえる、人口密度の非常に高い環境のなかで、ビッグアップルは本当にライブリーで、また、ファーマーズ マーケットで買い物をしたり、犬がドッグランと呼ばれる公園の一角で走り回ったりしているのは、身近な人の生活をも今回は感じさせてくれました。 お天気にもめぐまれ、週末を利用して、マンハッタンの南にある9/11記念館にも足を運びました。南へ南へと歩いていくと、自然に目に入ってくるのが、建設中の新しいワールドトレードセンターのビルです。早いもので、すでに来年完成が予定されているそうです。 この写真では、外壁の右側上部の一部が、まだ作業中で、外側に作業用のエレベータが設置されているのが見えると思います。私が訪れた前日にちょうどスパイアとよばれるアンテナのような尖塔が取り付けられたとニュースで取り上げられていました。高さではドバイには及びませんが、アメリカ、ヨーロッパでは一番高いビルとなります。あれだけの惨事となったワールドトレードセンターを思い出させずにはいられない第三号館。テロには絶対に屈しないというアメリカの人々思いがしみじみと伝わって来る思いでした。 もともとのワールドトレードセンターの跡は、2つの強大な空洞として残され、その中心に向けて水が吸い込むこまれるように流れているモニュメントになっています。その周りを囲む大理石に9・11で犠牲になったなった人々すべての名前が刻まれています。 実は、ここでひとつ少々不思議な思いをしました。モニュメントの周りをぐるりとまわっていた私だったのですが、何も考えずにふと足をとめたところが、なんと日本人の犠牲者の名前の刻まれているところだったのです。偶然なんでしょうけれど、なぜこれだけたくさんある名前の中から探そうともしていなかったのに、ここで足がとまったのか不思議な気持ちがしてなりませんでした。上の写真はその時思わず撮った写真です。私自身もそうですが、海外で暮らしていると、同じ国を母国にもつもの同士自然と信頼感がつよくなったりしますが、石に刻まれた日本人の名前を見て、あのテロが全世界の人にとって決して他人事でなかったのだと、改めて感じました。 9.11メモリアルは現在はまだ建設途中で、安全のため整理券を発行して見学が制限されていますが、完成の暁には、擁護壁等はなくなり、四方から出入りできる広場になるそうです。 日々日々変貌を遂げるニューヨーク。Glueのプロダクトマネージャーも、お昼に外に出ても、測量技師が街中で、最新の道具で測量しているのをみて、呼び止めて話をしたりとさすがに建設に関しては興味の塊といった印象をうけました。BIM360 Glue が生まれたのもこういった環境の中での必要性が一因だったのかしら、と思ったりしました。 ということで、前置きが長くなってしまいましたが、明日は、本題のAPIを用いた、ファミリの作成についてお話したいと思います。 原田
-
Invisible Reference
By Mikako Harada Issue I created a family which consists of a solid and a void. I inserted it to another family. As a simple example, it looks like a picture below; I placed two instances of the family, one vertically and the other horizontally. When I try to align their edges using UI, I can select a "imaginary" line…
-
Revit ファミリ作成の秘訣
今回は、ファミリの作成にあたって、プログラミング以前にまず理解しておくとよい概念のお話をしたいと思います。これは、以前ボストン郊外で行ったAEC Developer Campで、オートデスクのコンテンツマネージャであるスティーブ キャンベルと私がいっしょに行ったプレゼンテーションをもとにしています。 Revit のファミリは、その作成自体APIなしでも高度にカスタマイズ可能な機能です。もちろん、APIも公開されていますが、使用するにあたっては、UIでどのように動作するかを理解することは、APIを用いての作成する場合も、成功の鍵となります。ファミリ作成のコミュニティとしては2つのタイプがあると思います。 仕事がら、これからRevitのAPIに取り組もうという方から、どこからスタートすればよいかと相談を受けますが、時折プログラマーの方で、「私は、プログラマーだ、Revtに関しては何も知らない」と自信をもって宣言される方がいらっしゃいますが、ファミリーは、エンドユーザー、プログラマにかかわらず、Revitを使いこなす上で避けては通れない概念です。あるいは、UIでファミリをすでに何度となく作成されている方のなかでも、まだすっきりとマスターしたと感じていらっしゃらない場合は、もしかすると、ここでお話しすることがお役に立つかもしれません。 Revitのファミリーとは まずは、Revitのファミリの基本としてその定義を理解することが重要です。Revitの中でファミリとは建物のオブジェクトやシンボルをグラフィカルに表現したものです。これらは、2次元または3次元の幾何学的なオブジェクトであったり、またデータオブジェクトである可能性があります。ファミリには次の3種類があります: いわゆるファミリAPI は2番目のカテゴリーのAPIで、標準のファミリをサポートします。 ファミリの作成 - どこから開始するのか UIまたはAPIを使用しているかどうかにかかわりなく、まず最初に決定しなくてはならないのは、どのテンプレート、あるいはファミリファイルからスタートするかです。 多くのテンプレートが用意されていますが、開始するテンプレートを決定する必要があります。通常は、以下のような項目を考慮必要があります: Revitファミリ のフレーバー 製品と同様、ファミリもまた3つのフレーバを持っています。機能のほとんどは、Revit Architectureと同じです。 Revit Architecture Revit Architectureの中のファミリは、モデルの際に簡単なインターアクションを含む基本的なビルディング•コンポーネントをサポートしています。 Revit Structure 他のオブジェクトとのより複雑な相互作用を介する追加のコンポーネントを含みます。 とくに解析モデルをサポートするものを含みます。 Revit MEP MEPでは、コネクタ を考慮する必要があります。オブジェクトは、それらが接続されているものに基づいてサイズを変更できるようにしています。 Revit ファミリ エディタ Revitでは以下の6つ基本的なファミリのエディタを提供しています: エディタによっては、ビルディングブロックを作成するために利用可能なツールや異なったツールセットが表示されます。たとえば、モデルエディタでは、フォームを作成するためのツールが表示されますが、注釈ファミリではそれは表示されません。トラスエディタを使用している場合は、トップ/ボトム弦が表示されます。 各ファミリエディタは特定のツールセットを提供し、それは、選択したファミリテンプレートに関連付けられています。 Revit ファミリ ベスト プラクティス ファミリは Revitの強力な機能です。その作成はいったん習得すると、実にパワフルで、楽しい作業かもしれませんが、また、それだけパワーを持つ分、複雑になるかもしれません。複雑になる場合には、適切な計画を必要とします。以下に、Autodesk のRevitのコンテンツマネージャー スティーブ•キャンベルによるファミリを構築する場合、認識しておくとよい手順を示します。 まず、ファミリ構築のための「プロセス」は、習得しなければならない最も大切な概念です。 プロセスの順序: スティーブはしばしばこれを、人の体にたとえて説明してくれます。参照面が骨格、パラメータが筋肉、そして、ジェオメトリはスキンのようなものだというのです。形の元となるのは、ジェオメトリではなく、その下にある、参照面。また、パラメータによってその動き、変化の範囲が定義されます。そして、ジェオメトリは単にそれらを包むスキンのようなもので、それ自体に、動きや変化の原動となる力はもちません。 AutoCADといったようなドラフティングのソフトでは、そもそも、パラメトリックではなく、固定されたジェオメトリの定義によってモデルが定義されますが、Revitのような、要素間に関連があるモデラーでは、それは、あくまで、参照面、パラメータが意図するように定義されたうえで、追加されるものなのです。AutoCAD等を経験したことがあるかたが、最初に定義しようとなさるのは、どうしても、ジェオメトリとなり、その後、うまくいかずに四苦八苦なさるかたが多いようです。実は、わたしも、その一人で、スティーブによるファミリーを作成方法のクラスに参加してからは、上記のプロセスに忠実に従い、まるでバイブルのように機会があるごとに見返しています。 ファミリ でどこまで可能か ファミリを使いこなすと、非常に複雑なオブジェクトを作成することができます。以下がその例です。 一般的な、ファミリガイドは、ここにポストされています。これからファミリーをマスターしようとお考えのかた、ぜひお試しください。 原田
-
Faces/Edges returned from Element.Geometry have no reference
By Mikako Harada Issue I'm trying to align two elements. NewAlignment() method requires references as arguments. But faces/edges returned from Element.Geometry has no reference. It simply returns null. How can I obtain references from a given element? Solution If you need to access valid reference objects from the give geometry, you will need to set CalculateReferences property of geometry option to…
-
Getting Started with Revit 2014 API and Family Guide
By Mikako Harada Last year, I wrote about my handy "Getting Started with Revit API" document (sometime I called it "phase zero") as I get inquiries about Revit API every so often. Here it is the updated version: Download Getting Started with Revit 2014 API. The changes are very minor: version number update and pointing to newer recordings. Old…

You must be logged in to post a comment.