NewFootPrintRoof Method


Creates a new FootPrintRoof element.

Namespace: Autodesk.Revit.Creation
Assembly: RevitAPI (in RevitAPI.dll) Version: 16.0.0.0 (16.0.0.0)

Syntax

C#
public FootPrintRoof NewFootPrintRoof(
	CurveArray footPrint,
	Level level,
	RoofType roofType,
	out ModelCurveArray footPrintToModelCurvesMapping
)
Visual Basic
Public Function NewFootPrintRoof ( _
	footPrint As CurveArray, _
	level As Level, _
	roofType As RoofType, _
	<OutAttribute> ByRef footPrintToModelCurvesMapping As ModelCurveArray _
) As FootPrintRoof
Visual C++
public:
FootPrintRoof^ NewFootPrintRoof(
	CurveArray^ footPrint, 
	Level^ level, 
	RoofType^ roofType, 
	[OutAttribute] ModelCurveArray^% footPrintToModelCurvesMapping
)

Parameters

footPrint
Type: Autodesk.Revit.DB CurveArray
The footprint of the FootPrintRoof.
level
Type: Autodesk.Revit.DB Level
The level of the FootPrintRoof.
roofType
Type: Autodesk.Revit.DB RoofType
Type of the FootPrintRoof.
footPrintToModelCurvesMapping
Type: Autodesk.Revit.DB ModelCurveArray %
An array of Model Curves corresponding to the set of Curves input in the footPrint. By knowing which Model Curve was created by each footPrint curve, you can set properties like SlopeAngle for each curve.

Remarks

This method will regenerate the document even in manual regeneration mode.

Examples

Copy C#
// Before invoking this sample, select some walls to add a roof over.
// Make sure there is a level named "Roof" in the document.

// find the Roof level
FilteredElementCollector collector = new FilteredElementCollector(document);
collector.OfClass(typeof(Level));
var elements = from element in collector where element.Name == "Roof" select element;
Level level = elements.Cast<Level>().ElementAt<Level>(0);

collector = new FilteredElementCollector(document);
collector.OfClass(typeof(RoofType));
RoofType roofType = collector.FirstElement() as RoofType; 

// Get the handle of the application
Autodesk.Revit.ApplicationServices.Application application = document.Application;

// Define the footprint for the roof based on user selection
CurveArray footprint = application.Create.NewCurveArray();
UIDocument uidoc = new UIDocument(document);
ICollection<ElementId> selectedIds = uidoc.Selection.GetElementIds();
if (selectedIds.Count != 0)
{
    foreach (ElementId id in selectedIds)
    {
        Element element = document.GetElement(id);
        Wall wall = element as Wall;
        if (wall != null)
        {
            LocationCurve wallCurve = wall.Location as LocationCurve;
            footprint.Append(wallCurve.Curve);
            continue;
        }

        ModelCurve modelCurve = element as ModelCurve;
        if (modelCurve != null)
        {
            footprint.Append(modelCurve.GeometryCurve);
        }
    }

}
else
{
    throw new Exception("You should select a curve loop, or a wall loop, or loops combination \nof walls and curves to create a footprint roof.");
}

ModelCurveArray footPrintToModelCurveMapping = new ModelCurveArray();
FootPrintRoof footprintRoof = document.Create.NewFootPrintRoof(footprint, level, roofType, out footPrintToModelCurveMapping);
ModelCurveArrayIterator iterator = footPrintToModelCurveMapping.ForwardIterator();
iterator.Reset();
while (iterator.MoveNext())
{
    ModelCurve modelCurve = iterator.Current as ModelCurve;
    footprintRoof.set_DefinesSlope(modelCurve, true);
    footprintRoof.set_SlopeAngle(modelCurve, 0.5);
}
Copy VB.NET
' Before invoking this sample, select some walls to add a roof over.
' Make sure there is a level named "Roof" in the document.


' find the Roof level
Dim collector As New FilteredElementCollector(document)
collector.OfClass(GetType(Level))
: Dim elements As System.Collections.Generic.IEnumerable(Of Autodesk.Revit.DB.Element)
elements = From element In collector _
 Where element.Name = "Roof" _
 Select element

Dim level As Level = elements.Cast(Of Level)().ElementAt(0)

collector = New FilteredElementCollector(document)
collector.OfClass(GetType(RoofType))
Dim roofType As RoofType = TryCast(collector.FirstElement(), RoofType)

' Get the handle of the application
Dim application As Autodesk.Revit.ApplicationServices.Application = document.Application

' Define the footprint for the roof based on user selection
Dim footprint As CurveArray = application.Create.NewCurveArray()
Dim uidoc As New UIDocument(document)
Dim selectedIds As ICollection(Of ElementId) = uidoc.Selection.GetElementIds()
If selectedIds.Count <> 0 Then
    For Each id As ElementId In selectedIds
        Dim element As Element = document.GetElement(id)
        Dim wall As Wall = TryCast(element, Wall)
        If wall IsNot Nothing Then
            Dim wallCurve As LocationCurve = TryCast(wall.Location, LocationCurve)
            footprint.Append(wallCurve.Curve)
            Continue For
        End If

        Dim modelCurve As ModelCurve = TryCast(element, ModelCurve)
        If modelCurve IsNot Nothing Then
            footprint.Append(modelCurve.GeometryCurve)
        End If

    Next
Else
    Throw New Exception("You should select a curve loop, or a wall loop, or loops combination " & vbLf & "of walls and curves to create a footprint roof.")
End If

Dim footPrintToModelCurveMapping As New ModelCurveArray()
Dim footprintRoof As FootPrintRoof = document.Create.NewFootPrintRoof(footprint, level, roofType, footPrintToModelCurveMapping)
Dim iterator As ModelCurveArrayIterator = footPrintToModelCurveMapping.ForwardIterator()
iterator.Reset()
While iterator.MoveNext()
    Dim modelCurve As ModelCurve = TryCast(iterator.Current, ModelCurve)
    footprintRoof.DefinesSlope(modelCurve) = True
    footprintRoof.SlopeAngle(modelCurve) = 0.5
End While

Exceptions

Exception Condition
Autodesk.Revit.Exceptions ArgumentException Thrown if the level does not exist in the given document.
Autodesk.Revit.Exceptions ArgumentException Thrown if the roof type does not exist in the given document.

See Also