Autodesk.Revit.DB ReferenceIntersector
用於查詢和返回與從原點和方向建立的射線相交的元素的類。
語法
public class ReferenceIntersector : IDisposable
附註
可以構造此類的例項,以返回與由原點和方向建立的射線,或者基於過濾和標誌返回元素的子集。 呼叫者可以選擇使用ElementFilter過濾結果,或者透過應用特定的可接受的元素。 呼叫方還可以指定要返回的物件的型別, 整個元素、幾何體物件或其組合。 在所有情況下,要求呼叫者提供 用於評估的3D檢視;輸入檢視上的檢視和可見性設定將確定 返回特定元素(例如,此工具永遠不會返回隱藏元素、 和幾何圖形位於檢視剖面框之外的元素)。
該類配置為可以構建單個例項,並用於對多個不同光線進行多次評估。在同一個 ReferenceIntersector 上的呼叫之間,評估結果不會被保留。
該類還提供了一個選項,用於返回在Revit連結中遇到的圖元結果。 當設定 FindReferencesInRevitLinks 標誌 則結果可能包括宿主文件和遇到的任何RevitLinkInstance中的元素,具體取決於其他設定的標誌。 請參閱 FindReferencesInRevitLinks 的備註,瞭解標誌如何影響從連結獲得的結果。
示例
F public class RayProjection : IExternalCommand
{
public Result Execute(ExternalCommandData revit, ref string message, ElementSet elements)
{
Document doc = revit.Application.ActiveUIDocument.Document;
ICollection<ElementId> selectedIds = revit.Application.ActiveUIDocument.Selection.GetElementIds();
// If skylight is selected, process it.
FamilyInstance skylight = null;
if (selectedIds.Count == 1)
{
foreach (ElementId id in selectedIds)
{
Element e = doc.GetElement(id);
if (e is FamilyInstance)
{
FamilyInstance instance = e as FamilyInstance;
bool isWindow = (instance.Category.Id.IntegerValue == (int)BuiltInCategory.OST_Windows);
bool isHostedByRoof = (instance.Host.Category.Id.IntegerValue == (int)BuiltInCategory.OST_Roofs);
if (isWindow && isHostedByRoof)
{
skylight = instance;
}
}
}
}
if (skylight == null)
{
message = "Please select one skylight.";
return Result.Cancelled;
}
// Calculate the height
Line line = CalculateLineAboveFloor(doc, skylight);
// Create a model curve to show the distance
Plane plane = Plane.CreateByNormalAndOrigin(new XYZ(1, 0, 0), line.GetEndPoint(0));
SketchPlane sketchPlane = SketchPlane.Create(doc, plane);
ModelCurve curve = doc.Create.NewModelCurve(line, sketchPlane);
// Show a message with the length value
TaskDialog.Show("Distance", "Distance to floor: " + String.Format("{0:f2}", line.Length));
return Result.Succeeded;
}
/// <summary>
/// Determines the line segment that connects the skylight to the nearest floor.
/// </summary>
/// <returns>The line segment.</returns>
private Line CalculateLineAboveFloor(Document doc, FamilyInstance skylight)
{
// Find a 3D view to use for the ReferenceIntersector constructor
FilteredElementCollector collector = new FilteredElementCollector(doc);
Func<View3D, bool> isNotTemplate = v3 => !(v3.IsTemplate);
View3D view3D = collector.OfClass(typeof(View3D)).Cast<View3D>().First<View3D>(isNotTemplate);
// Use the center of the skylight bounding box as the start point.
BoundingBoxXYZ box = skylight.get_BoundingBox(view3D);
XYZ center = box.Min.Add(box.Max).Multiply(0.5);
// Project in the negative Z direction down to the floor.
XYZ rayDirection = new XYZ(0, 0, -1);
ElementClassFilter filter = new ElementClassFilter(typeof(Floor));
ReferenceIntersector refIntersector = new ReferenceIntersector(filter, FindReferenceTarget.Face, view3D);
ReferenceWithContext referenceWithContext = refIntersector.FindNearest(center, rayDirection);
Reference reference = referenceWithContext.GetReference();
XYZ intersection = reference.GlobalPoint;
// Create line segment from the start point and intersection point.
Line result = Line.CreateBound(center, intersection);
return result;
}
}
繼承層次結構
System Object
Autodesk.Revit.DB ReferenceIntersector
建構函式
ReferenceIntersector(View3D)
- 構造一個ReferenceIntersector,它被設定為返回所有元素的交集,並表示所有引用目標型別。
ReferenceIntersector(ElementFilter, FindReferenceTarget, View3D)
- 構造一個ReferenceIntersector,它被設定為從任何透過輸入過濾器的元素返回交集。
ReferenceIntersector(ElementId, FindReferenceTarget, View3D)
- 構造一個ReferenceIntersector,它被設定為僅返回來自單個目標元素的交集。
ReferenceIntersector(ICollection ElementId , FindReferenceTarget, View3D)
- 構造一個ReferenceIntersector,它被設定為返回一組目標元素中任何一個的交集。
方法
Dispose
- 釋放ReferenceIntersector使用的所有資源
Find
- 從原點沿給定方向投射一條射線,並返回所有與 ReferenceIntersector 標準匹配的相交元素的引用。
FindNearest
- 從原點沿給定方向投射一條射線,並返回與 ReferenceIntersector 標準匹配的相交元素中最接近的引用。
GetFilter
- 獲取用於交集測試的 ElementFilter。
GetTargetElementIds
- 從交集測試中獲取要測試的 ElementIds 集合。
SetFilter
- 設定用於交集測試的 ElementFilter。
SetTargetElementIds
- 設定交集測試中用於測試的 ElementIds 集合。
屬性
FindReferencesInRevitLinks
- 確定是否應在 Revit 連結內查詢引用。
IsValidObject
- 指定.NET 物件是否表示有效的 Revit 實體。
TargetType
- 要查詢的引用型別。
ViewId
- 用於評估的 3D 檢視的 ID。