|
|
|
此処でご紹介するサンプルは、アセンブリの要素をグループ化するサンプルです。
|
|
|
|
スライド中の画像に有る様にビューを3D直交モードにします。
|
|
|
|
そして2つのアセンブリを比較する方法をご紹介します。
|
|
|
|
デスクトップに移動します。
|
|
|
|
このモデルは壁と柱と2つの窓で構成されて、もう一つは壁と柱で構成されています。
|
|
|
|
登録された外部コマンドにてアセンブリを作成します。
|
|
|
|
このサンプルではアセンブリを自動で作成します。
|
|
|
|
Document doc =
uidoc.Document;
|
|
この外部コマンドは、以前のサンプルと同じ様にアプリケーションやドキュメントにアクセスします。
|
|
|
|
ICollection<ElementId>
elemIds = uidoc.Selection.GetElementIds();
|
|
ここでは、選択セットから要素IDを取得します。
|
|
|
|
要素IDとテゴリーIDでアセンブリインスタンスを作成します。
|
|
|
|
keyElemId =
elemId;
|
|
categoryId =
doc.get_Element(elemId).Category.Id;
|
|
break;
|
|
この場合、最初の要素に着目してテゴリー情報を使用します。
|
|
|
|
transaction.Start("Create
Assembly Instance");
|
|
AssemblyInstance
assemblyInstance = AssemblyInstance.Create(doc, elemIds, categoryId);
|
|
transaction.Commit();
|
|
トランザクションを開始します。アセンブリはカテゴリになるアセンブリを作成します。そしてトランザクションをコミットします。
|
|
|
|
transaction.Start("Set
Assembly Name");
|
|
assemblyInstance.AssemblyTypeName
= "My Assembly Name " + keyElemId.ToString();
|
|
transaction.Commit();
|
|
次に他のトランザクションを開始。
|
|
何故なら、このアセンブリに名前を設定するからです。
|
|
この場合は“My Assembly Name” と要素IDを合わせてアセンブリ名としています。
|
|
トランザクションをコミットします。
|
|
|
|
if
(assemblyInstance.AllowsAssemblyViewCreation())
|
|
アセンブリビューが作成可能かを確認します。
|
|
|
|
transaction.Start("View
Creation");
|
|
View3D view3d =
AssemblyViewUtils.Create3DOrthographic( doc, assemblyInstance.Id );
|
|
View partList =
AssemblyViewUtils.CreatePartList( doc, assemblyInstance.Id );
|
|
transaction.Commit();
|
|
再度トランザクションを開始して、スライドのように3Dビューとパートリストを作成します。
|
|
|
|
プロジェクトブラウザのアセンブリの下には2つのビューが確認出来ます。
|
|
|
|
これをダブルクリックするとビューが確認できます。
|
|
|
|
|
|
3Dビューに戻り、もう一つアセンブリを作成します。外部コマンドを実行します。
|
|
|
|
プロジェクトブラウザーにアセンブリが表示されます。
|
|
|
|
外部コマンドを実行してアセンブリを比較します。
|
|
|
|
アセンブリを2つ選択し、終了ボタンをクリックします。
|
|
|
|
AssemblyDifference
difference = AssemblyInstance.CompareAssemblyInstances( firstInstance,
secondInstance );
|
|
何が異なるでしょうか。
|
|
|
|
AssemblyDifferenceMemberCount
diffMemberCount = difference as AssemblyDifferenceMemberCount;
|
|
if
(diffMemberCount != null){
|
|
TaskDialog.Show("Revit",
"Elements counts differ: " + diffMemberCount.Count1 + " &
" + diffMemberCount.Count2 );
|
|
return;
|
|
}
|
|
アセンブリ内の要素の数が異なります。
|
|
|
|
では、プレゼンテーションに戻ります。
|
|
|
|
|