二次開発をRevitの:部屋の壁による買収部屋
使用される方法は、以前にソリッドソリッド要素と交差計算部屋の境界からなり、壁か否かを判断しました。この方法は、比較的一般的であり、さまざまなコンポーネントは、部屋の床、窓などを取得することができます。
SpatialElementBoundaryOptions SE =新しいSpatialElementBoundaryOptions();
se.SpatialElementBoundaryLocation = SpatialElementBoundaryLocation.Center。
SpatialElementGeometryCalculator電卓=新しいSpatialElementGeometryCalculator(文書、SE)。
固体固形= calculator.CalculateSpatialElementGeometry GetGeometry()+。(部屋)。
VARリスト=新しいFilteredElementCollector(文書).WhereElementIsNotElementType()。
。WherePasses(新ElementIntersectsSolidFilter)(固体)ToListメソッド();
foreachの(リストの中のvar要素)
{
壁等の壁ウォール=エレメント。
IF(!壁= NULL)
{
wallsOfRoom.Add(壁)
}
}
ただ、実際には、壁を探しBoundarySegment.ElementIdで、あなたは直接の要素(壁)を取得、この境界の一部を構成することができます。
IList <のIList <BoundarySegment >>ループ= room.GetBoundarySegments(新SpatialElementBoundaryOptions());
foreachの(ループ内のIList <BoundarySegment>ループ)
{
foreachの(ループ内BoundarySegmentセグメント)
{
壁等の壁ウォール= document.GetElement(segment.ElementId)。
IF(!壁= NULL)
{
wallsOfRoom.Add(壁)
}
}
}
-
衝突検出:
システムを使用しました。
System.Collections.Genericを使用しました。
System.Linqのを使用しました。
System.Textのを使用しました。
System.Threading.Tasksを使用しました。
Autodesk.Revit.UIを使用しました。
Autodesk.Revit.Attributesを使用しました。
Autodesk.Revit.DBを使用しました。
Autodesk.Revit.UI.Selectionを使用; //类選択使用
名前空間の衝突
{
[TransactionAttribute(TransactionMode.Manual)]
[RegenerationAttribute(RegenerationOption.Manual)]
publicクラスクラス1:IExternalCommand
{
公共の結果実行(ExternalCommandData commandData、REF文字列メッセージ、 ELEMENTSET要素)
{
UIDocument uiDoc = commandData.Application.ActiveUIDocument。
文書ドキュメント= uiDoc.Document。
トランザクショントランス=新しいトランザクション(DOC、 "エクスコム");
trans.Start();
選択= uiDoc.Selectionを選択します。
基準R = select.PickObject(ObjectType.Element、 "选择需要检查的墙")。
素子列= doc.GetElement(R)
FilteredElementCollectorコレクト=新しいFilteredElementCollector(DOC);
// ElementIntersectionFilter冲突检查
ElementIntersectsElementFilter iFilterの=新しいElementIntersectsElementFilter(コラム、偽);
collect.WherePasses(iFilterの)。
一覧<ELEMENTID>除外=新しいリスト<ELEMENTID>();
excludes.Add(column.Id)。
(除外)をcollect.Excluding。
一覧<ELEMENTID> IDS =新しいリスト<ELEMENTID>();
select.SetElementIds(IDS)。
ids.Add(elem.Id); // elemはIdのリストに追加
}
select.SetElementIds(IDS);
trans.Commit();
戻り値はResult.Succeeded;
}
}
}