> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ploterr.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Ceiling

> A ceiling plate. You place it by the height of its lower face.

## Import

```typescript theme={null}
import { Ceiling } from '@opengeometry/floorkit';
```

**Inheritance:** `extends OPElement implements IShape, IPlaceable, PlanVectorExportable`

## Constructor

```typescript theme={null}
constructor(config?: Partial<CeilingOptions>);
```

<ParamField path="config.ogid" type="string" />

<ParamField path="config.labelName" type="string" />

<ParamField path="config.type" type="ElementType.CEILING" />

<ParamField path="config.profile" type="PolygonProfile">
  Polygon profile in the world XZ plane (same conventions as Slab).
</ParamField>

<ParamField path="config.thickness" type="number" />

<ParamField path="config.color" type="number" />

<ParamField path="config.material" type="CeilingMaterial" />

<ParamField path="config.heightOffset" type="number">
  World Y of the ceiling's UNDERSIDE (the face seen from the room below). The profile is extruded
  upward by `thickness`.
</ParamField>

<ParamField path="config.openings" type="string[]">
  ogids of openings whose `opening3D` Solids are CSG-subtracted at build time (light fixtures,
  access hatches). Populated by `addOpening` / `removeOpening`.
</ParamField>

<ParamField path="config.propertySets" type="PropertySets" />

## Properties

<ResponseField name="ogType" type="ElementType" />

<ResponseField name="ogid" type="string" />

<ResponseField name="subElements2D" type="Map<string, OPGeometry>" />

<ResponseField name="subElements3D" type="Map<string, OPGeometry>" />

<ResponseField name="selected" type="boolean" />

<ResponseField name="edit" type="boolean" />

<ResponseField name="locked" type="boolean" />

<ResponseField name="propertySet" type="CeilingOptions" />

<ResponseField name="labelName" type="string" />

<ResponseField name="profile" type="CeilingProfile" />

<ResponseField name="ceilingThickness" type="number" />

<ResponseField name="extrudeHeight" type="number">
  Push/pull alias for the GUIEditor — the extrude dimension is the thickness.
</ResponseField>

<ResponseField name="ceilingColor" type="number" />

<ResponseField name="ceilingMaterial" type="CeilingMaterial" />

<ResponseField name="heightOffset" type="number" />

<ResponseField name="outline" type="boolean" />

<ResponseField name="profileView" type="boolean" />

<ResponseField name="modelView" type="boolean" />

## Methods

### editableSchema

```typescript theme={null}
static editableSchema(): OPEditableSchema;
```

Self-describing editable surface; a host inspector renders this generically.

### move

```typescript theme={null}
move(delta: Vec3): void;
```

Translate this element by `delta` (world-space, meters).

### rotate

```typescript theme={null}
rotate(angleDeg: number, axis?: Vec3, anchor?: Vec3): void;
```

Rotate this element by `angleDeg` around `axis` (default Y-up), pivoted at `anchor` (default the element's own centroid).

### addOpening

```typescript theme={null}
addOpening(openingElement: Opening): void;
```

Attach an opening element whose `opening3D` Solid will be CSG-subtracted from the extruded ceiling (light fixtures, access hatches).

### removeOpening

```typescript theme={null}
removeOpening(ogid: string): void;
```

### getHostedOpenings

```typescript theme={null}
getHostedOpenings(): Opening[];
```

### setOPGeometry

```typescript theme={null}
setOPGeometry(): void;
```

### getExportRoots

```typescript theme={null}
getExportRoots(view: PlanExportView): THREE.Object3D[];
```

Vector-export roots (RFC §7).

### toDrawing

```typescript theme={null}
toDrawing(view: PlanExportView): DrawingPrimitive[];
```

Produce the ceiling's plan footprint as a standardized region primitive (outer ring + profile holes), from its authored 2D polygon.

### setOPMaterial

```typescript theme={null}
setOPMaterial(): void;
```

### getOPConfig

```typescript theme={null}
getOPConfig(): CeilingOptions;
```

### setOPConfig

```typescript theme={null}
setOPConfig(config: Partial<CeilingOptions>): void;
```

### dispose

```typescript theme={null}
dispose(): void;
```

## Types

### CeilingOptions

```typescript theme={null}
interface CeilingOptions extends HasPropertySets {
  ogid?: string;
  labelName: string;
  type: ElementType.CEILING;
  profile: CeilingProfile;
  thickness: number;
  color: number;
  material: CeilingMaterial;
  heightOffset: number;
  openings: string[];
}
```

### CeilingProfile

Polygon profile for a Ceiling — alias of PolygonProfile.

```typescript theme={null}
type CeilingProfile = PolygonProfile;
```

### CeilingMaterial

```typescript theme={null}
enum CeilingMaterial {
  GYPSUM = 'GYPSUM',
  ACT = 'ACT',
  PLASTER = 'PLASTER',
  WOOD = 'WOOD',
  OTHER = 'OTHER',
}
```

## Related

* [`OPElement`](/floorkit/api/architecture/op-element)
* [`Opening`](/floorkit/api/architecture/opening)
* [`DrawingPrimitive`](/floorkit/api/drawings/draw-project-view#drawingprimitive)
* [`ElementType`](/floorkit/api/architecture/op-element#elementtype)
* [`HasPropertySets`](/floorkit/api/architecture/op-element#haspropertysets)
* [`IPlaceable`](/floorkit/api/architecture/op-element#iplaceable)
* [`IShape`](/floorkit/api/shapes/cuboid-shape#ishape)
* [`OPEditableSchema`](/floorkit/api/architecture/op-element#opeditableschema)
* [`OPGeometry`](/floorkit/api/architecture/opening#opgeometry)
* [`PlanExportView`](/floorkit/api/shapes/cylinder-shape#planexportview)
* [`PlanVectorExportable`](/floorkit/api/shapes/cylinder-shape#planvectorexportable)
* [`PolygonProfile`](/floorkit/api/primitives/polygon-maths#polygonprofile)
* [`Vec3`](/floorkit/api/architecture/wall#vec3)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.