GetLoops Method


Retrieves Analytical Model Loops with respect to the loopType.

Namespace: Autodesk.Revit.DB.Structure
Assembly: RevitAPI (in RevitAPI.dll) Version: 2015.0.0.0 (2015.0.0.0)
Since: 2013

Syntax

C#
public IList<CurveLoop> GetLoops(
	AnalyticalLoopType loopType
)
Visual Basic
Public Function GetLoops ( _
	loopType As AnalyticalLoopType _
) As IList(Of CurveLoop)
Visual C++
public:
IList<CurveLoop^>^ GetLoops(
	AnalyticalLoopType loopType
)

Return Value

Loops that satisfy loopType criteria are returned.

Remarks

For multiple concentric loops, only the outermost loop will be considered External. All other loops will be considered Internal.

Examples

Copy C#
// retrieve and iterate current selected element
UIDocument uidoc = commandData.Application.ActiveUIDocument;
ICollection<ElementId> selectedIds = uidoc.Selection.GetElementIds();
Document document = uidoc.Document;
foreach (ElementId id in selectedIds)
{
    Element e = document.GetElement(id);
    Wall aWall = e as Wall;
    if (null != aWall)
    {
        // get AnalyticalModelSurface from Structural Wall
        AnalyticalModelSurface modelWall = aWall.GetAnalyticalModel() as AnalyticalModelSurface;
        if (null == modelWall)
        {
            // Architecture wall doesn't have analytical model
            continue;
        }

        // get wall curves
        StringBuilder wallString = new StringBuilder();
        wallString.AppendLine("Wall curves:");
        IList<CurveLoop> wallCurveLoops = modelWall.GetLoops(AnalyticalLoopType.External);
        foreach (CurveLoop curveloop in wallCurveLoops)
        {
            CurveLoopIterator itr = curveloop.GetCurveLoopIterator();
            itr.Reset();
            while (itr.MoveNext())
            {
                Curve wallCurve = itr.Current;
                wallString.AppendLine(String.Format("{0}, {1}", wallCurve.GetEndPoint(0).ToString(), wallCurve.GetEndPoint(1).ToString()));
            }
        }

         TaskDialog.Show("Wall Analytical Model", wallString.ToString());
    }
}
Copy VB.NET
' retrieve and iterate current selected element
Dim uidoc As UIDocument = commandData.Application.ActiveUIDocument
Dim selectedIds As ICollection(Of ElementId) = uidoc.Selection.GetElementIds()
Dim document As Document = uidoc.Document
For Each id As ElementId In selectedIds
    Dim e As Element = document.GetElement(id)
    Dim aWall As Wall = TryCast(e, Wall)
    If aWall IsNot Nothing Then
        ' get AnalyticalModelSurface from Structural Wall
        Dim modelWall As AnalyticalModelSurface = TryCast(aWall.GetAnalyticalModel(), AnalyticalModelSurface)
        If modelWall Is Nothing Then
            ' Architecture wall doesn't have analytical model
            Continue For
        End If

        ' get wall curves
        Dim wallString As New StringBuilder()
        wallString.AppendLine("Wall curves:")
        Dim wallCurveLoops As IList(Of CurveLoop) = modelWall.GetLoops(AnalyticalLoopType.External)
        For Each curveloop As CurveLoop In wallCurveLoops
            Dim itr As CurveLoopIterator = curveloop.GetCurveLoopIterator()
            itr.Reset()
            While itr.MoveNext()
                Dim wallCurve As Curve = itr.Current
                wallString.AppendLine([String].Format("{0}, {1}", wallCurve.GetEndPoint(0).ToString(), wallCurve.GetEndPoint(1).ToString()))
            End While
        Next

        TaskDialog.Show("Wall Analytical Model", wallString.ToString())
    End If

Exceptions

Exception Condition
Autodesk.Revit.Exceptions ArgumentOutOfRangeException A value passed for an enumeration argument is not a member of that enumeration

See Also