Revitの関連衝突検出

二次開発を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;
    }
    }

    }

     

おすすめ

転載: www.cnblogs.com/liaocheng/p/11982488.html