Create Method (Document, IList(CurveLoop), ElementId, ElementId)


Creates a new instance of architectural floor within the project.

Namespace: Autodesk.Revit.DB
Assembly: RevitAPI (in RevitAPI.dll) Version: 24.0.0.0 (24.0.0.0)
Since: 2022

Syntax

C#
public static Floor Create(
	Document document,
	IList<CurveLoop> profile,
	ElementId floorTypeId,
	ElementId levelId
)
Visual Basic
Public Shared Function Create ( _
	document As Document, _
	profile As IList(Of CurveLoop), _
	floorTypeId As ElementId, _
	levelId As ElementId _
) As Floor
Visual C++
public:
static Floor^ Create(
	Document^ document, 
	IList<CurveLoop^>^ profile, 
	ElementId^ floorTypeId, 
	ElementId^ levelId
)

Parameters

document
Type: Autodesk.Revit.DB Document
The document in which the new floor is created.
profile
Type: System.Collections.Generic IList CurveLoop
An array of planar curve loops that represent the profile of the floor.
floorTypeId
Type: Autodesk.Revit.DB ElementId
Id of the floor type to be used by the new Floor.
levelId
Type: Autodesk.Revit.DB ElementId
Id of the level on which the floor is to be placed.

Return Value

If successful a new floor object within the project.

Remarks

To validate curve loop profile use BoundaryValidation . To get default floor type use GetDefaultFloorType(Document, Boolean) .

Examples

Copy C#
/// The example below shows how to use Floor.Create method to create a new structural floor (slab) on one level 
/// using a geometry profile and a floor type. 
/// In this sample, the geometry profile is a CurveLoop of lines, you can also use arcs, ellipses and splines.
Floor CreateFloor(Document document, Level level)
{
   // Get a floor type for floor creation
   ElementId floorTypeId = Floor.GetDefaultFloorType(document, false);

   // Build a floor profile for the floor creation
   XYZ first = new XYZ(0, 0, 0);
   XYZ second = new XYZ(20, 0, 0);
   XYZ third = new XYZ(20, 15, 0);
   XYZ fourth = new XYZ(0, 15, 0);
   CurveLoop profile = new CurveLoop();
   profile.Append(Line.CreateBound(first, second));
   profile.Append(Line.CreateBound(second, third));
   profile.Append(Line.CreateBound(third, fourth));
   profile.Append(Line.CreateBound(fourth, first));

   return Floor.Create(document, new List<CurveLoop> { profile }, floorTypeId, level.Id);
}
Copy C#
/// The example below shows how to use Floor.Create method to create a new Floor with specified elevation, on one level 
/// using a geometry profile and a floor type. 
/// It shows how to adapt your code that used NewFloor and NewSlab methods, which are obsolete since 2022.
/// In this sample, the geometry profile is a CurveLoop of lines, you can also use arcs, ellipses and splines.
Floor CreateFloorAtElevation(Document document, double elevation)
{
   // Get a floor type for floor creation
   // You must provide a valid floor type (unlike in now obsolete NewFloor and NewSlab methods).
   ElementId floorTypeId = Floor.GetDefaultFloorType(document, false);

   // Get a level
   // You must provide a valid level (unlike in now obsolete NewFloor and NewSlab methods).
   double offset;
   ElementId levelId = Level.GetNearestLevelId(document, elevation, out offset);

   // Build a floor profile for the floor creation
   XYZ first = new XYZ(0, 0, 0);
   XYZ second = new XYZ(20, 0, 0);
   XYZ third = new XYZ(20, 15, 0);
   XYZ fourth = new XYZ(0, 15, 0);
   CurveLoop profile = new CurveLoop();
   profile.Append(Line.CreateBound(first, second));
   profile.Append(Line.CreateBound(second, third));
   profile.Append(Line.CreateBound(third, fourth));
   profile.Append(Line.CreateBound(fourth, first));

   // The elevation of the curve loops is not taken into account (unlike in now obsolete NewFloor and NewSlab methods).
   // If the default elevation is not what you want, you need to set it explicitly.
   var floor = Floor.Create(document, new List<CurveLoop> { profile }, floorTypeId, levelId);
   Parameter param = floor.get_Parameter(BuiltInParameter.FLOOR_HEIGHTABOVELEVEL_PARAM);
   param.Set(offset);

   return floor;
}
Copy VB.NET
Private Function CreateFloor(application As UIApplication, level As Level) As Floor
   ' Get the Revit document
   Dim document As Autodesk.Revit.DB.Document = application.ActiveUIDocument.Document

   ' Get the application creation object
   Dim appCreation As Autodesk.Revit.Creation.Application = application.Application.Create

   ' Get a floor type for floor creation
   Dim collector As New FilteredElementCollector(document)
   collector.OfClass(GetType(FloorType))
   Dim floorType As FloorType = TryCast(collector.FirstElement(), FloorType)

   ' Build a floor profile for the floor creation
   Dim first As New XYZ(0, 0, 0)
   Dim second As New XYZ(20, 0, 0)
   Dim third As New XYZ(20, 15, 0)
   Dim fourth As New XYZ(0, 15, 0)
   Dim profile As New CurveLoop()
   profile.Append(Line.CreateBound(first, second))
   profile.Append(Line.CreateBound(second, third))
   profile.Append(Line.CreateBound(third, fourth))
   profile.Append(Line.CreateBound(fourth, first))

   Return Floor.Create(document, New List(Of CurveLoop)({profile}), floorType.Id, level.Id)
End Function
Copy VB.NET
Private Function CreateFloorAtElevation(ByVal document As Document, ByVal elevation As Double) As Floor
   ' Get a floor type for floor creation
   ' You must provide a valid floor type (unlike in now obsolete NewFloor and NewSlab methods).
   Dim floorTypeId As ElementId = Autodesk.Revit.DB.Floor.GetDefaultFloorType(document, False)

   ' Get a level
   ' You must provide a valid level (unlike in now obsolete NewFloor and NewSlab methods).
   Dim offset As Double
   Dim levelId = Level.GetNearestLevelId(document, elevation, offset)

   ' Build a floor profile for the floor creation
   Dim first As XYZ = New XYZ(0, 0, 0)
   Dim second As XYZ = New XYZ(20, 0, 0)
   Dim third As XYZ = New XYZ(20, 15, 0)
   Dim fourth As XYZ = New XYZ(0, 15, 0)
   Dim profile As CurveLoop = New CurveLoop()
   profile.Append(Line.CreateBound(first, second))
   profile.Append(Line.CreateBound(second, third))
   profile.Append(Line.CreateBound(third, fourth))
   profile.Append(Line.CreateBound(fourth, first))

   ' The elevation of the curve loops is not taken into account (unlike in now obsolete NewFloor and NewSlab methods).
   ' If the default elevation is not what you want, you need to set it explicitly.
   Dim floor = Autodesk.Revit.DB.Floor.Create(document, New List(Of CurveLoop) From {
             profile
         }, floorTypeId, levelId)
   Dim param As Parameter = floor.Parameter(BuiltInParameter.FLOOR_HEIGHTABOVELEVEL_PARAM)
   param.Set(offset)
   Return floor
End Function

Exceptions

Exception Condition
Autodesk.Revit.Exceptions ArgumentException The ElementId levelId is not a Level. -or- The floorTypeId does not correspond to a FloorType. -or- The input curve loops cannot compose a valid boundary, that means: the "curveLoops" collection is empty; or some curve loops intersect with each other; or each curve loop is not closed individually; or each curve loop is not planar; or each curve loop is not in a plane parallel to the horizontal(XY) plane; or input curves contain at least one helical curve. -or- Input curves build invalid sketch. -or- Failed to create curve elements.
Autodesk.Revit.Exceptions ArgumentNullException A non-optional argument was null
Autodesk.Revit.Exceptions InvalidOperationException Cannot generate a sketch. -or- Failed to create new element.
Autodesk.Revit.Exceptions ModificationForbiddenException The document is in failure mode: an operation has failed, and Revit requires the user to either cancel the operation or fix the problem (usually by deleting certain elements). -or- The document is being loaded, or is in the midst of another sensitive process.
Autodesk.Revit.Exceptions ModificationOutsideTransactionException The document has no open transaction.

See Also