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

Creates a new instance of ceiling within the project.

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


public static Ceiling Create(
	Document document,
	IList<CurveLoop> curveLoops,
	ElementId ceilingTypeId,
	ElementId levelId,
	Line slopeArrow,
	double slope
Visual Basic
Public Shared Function Create ( _
	document As Document, _
	curveLoops As IList(Of CurveLoop), _
	ceilingTypeId As ElementId, _
	levelId As ElementId, _
	slopeArrow As Line, _
	slope As Double _
) As Ceiling
Visual C++
static Ceiling^ Create(
	Document^ document, 
	IList<CurveLoop^>^ curveLoops, 
	ElementId^ ceilingTypeId, 
	ElementId^ levelId, 
	Line^ slopeArrow, 
	double slope


Type: Autodesk.Revit.DB Document
The document in which the new ceiling is created.
Type: System.Collections.Generic IList CurveLoop
An array of planar curve loops that represent the profile of the ceiling.
Type: Autodesk.Revit.DB ElementId
Id of the ceiling type to be used by the new ceiling. If InvalidElementId is passed, the default type will be used.
Type: Autodesk.Revit.DB ElementId
Id of the level on which the ceiling is to be placed.
Type: Autodesk.Revit.DB Line
A line used to control the slope angle of the Ceiling. It must be horizontal.
Type: System Double
The slope angle.

Return Value

If successful a new ceiling object within the project.


To validate curve loop profile use BoundaryValidation .


Copy C#
Ceiling CreateSlopedCeiling(Document document, Level level)
   XYZ first = new XYZ(0, 0, 0);
   XYZ second = new XYZ(20, 0, 0);
   XYZ third = new XYZ(20, 20, 0);
   XYZ fourth = new XYZ(0, 20, 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));

   Line slopeArrow = Line.CreateBound(new XYZ(10, 10, 0), new XYZ(11, 10, 0));
   return Ceiling.Create(document, new List<CurveLoop> { profile }, ElementId.InvalidElementId, level.Id, slopeArrow, Math.PI / 2);


Exception Condition
Autodesk.Revit.Exceptions ArgumentException The ElementId levelId is not a Level. -or- The ElementId ceilingTypeId does not correspond to a CeilingType. -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- The slopeArrow must be a horizontal line. -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