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: 23.0.0.0 (23.1.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 CreateFloorAtElevation(ByVal document As Document, ByVal level As Level, ByVal elevation As Double) As Floor
    Dim floorTypeId As ElementId = DB.Floor.GetDefaultFloorType(document, False)
    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))
    Dim floor = DB.Floor.Create(document, New List(Of CurveLoop) From {
        profile
    }, floorTypeId, level.Id)
    Dim param As Parameter = floor.Parameter(BuiltInParameter.FLOOR_HEIGHTABOVELEVEL_PARAM)
    param.[Set](elevation)
    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