> ## 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.

# CircularWall

> CircularWall is one curved wall with optional openings.

Use it for a free-standing curved wall. For a curved wall that joins other walls or holds doors and windows, use a `Wall` with a circular axis in a `WallNetwork`.

## Import

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

## Example

```typescript theme={null}
import { CircularWall, Floorkit } from '@opengeometry/floorkit';

async function example(wasmURL: string): Promise<void> {
  await new Floorkit().setupOpenGeometry(wasmURL);
  const wall = new CircularWall({
    axis: {
      kind: 'circularArc',
      center: [0, 0, 0],
      radius: 4,
      startAngle: 0,
      sweepAngle: Math.PI / 2,
    },
    thickness: 0.25,
    height: 3,
  });
  try {
    const openingId = wall.addOpening({
      station: 3,
      width: 1,
      bottom: 0.8,
      height: 1.2,
    });
    wall.updateOpening(openingId, { bottom: 1 });
    console.log(wall.length, wall.frameAt(3), wall.toDrawing('top'));
    wall.removeOpening(openingId);
  } finally {
    wall.dispose();
  }
}
```

## Notes

* Lengths are in metres. `startAngle` and `sweepAngle` are in radians.
* The position of an opening is its distance along the axis.
* An opening must stay inside the wall and must leave material above it.
* The radius must be larger than half of the thickness.
* A round opening needs an equal width and height.
* `volume` is the gross volume. It does not subtract the openings.
* Start the geometry kernel before you create this object. See [`Floorkit`](/floorkit/api/runtime/floorkit).
* This object is live geometry. To save a building, write it in a [building model](/floorkit/concepts/building-model).

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

## Constructor

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

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

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

<ParamField path="options.axis" type="{ kind: &#x22;circularArc&#x22;; center: Vec3; radius: number; startAngle: number; sweepAngle: number; }" />

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

<ParamField path="options.height" type="number" />

<ParamField path="options.material" type="string" />

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

<ParamField path="options.deflection" type="number" />

<ParamField path="options.accuracy" type="AnalyticAccuracy" />

<ParamField path="options.openings" type="ProfiledWallOpening[]" />

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

## Properties

<ResponseField name="ogid" type="string">
  Read-only.
</ResponseField>

<ResponseField name="ogType" type="unknown">
  Read-only.
</ResponseField>

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

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

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

<ResponseField name="body" type="AnalyticSolid">
  Read-only.
</ResponseField>

<ResponseField name="propertySet" type="CircularWallOptions">
  Read-only.
</ResponseField>

<ResponseField name="length" type="number">
  Read-only.
</ResponseField>

<ResponseField name="footprintArea" type="number">
  Read-only.
</ResponseField>

<ResponseField name="volume" type="number">
  Read-only.
</ResponseField>

## Methods

### getOPConfig

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

### setOPConfig

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

### addOpening

```typescript theme={null}
addOpening(opening: CircularWallOpeningOptions): string;
```

### updateOpening

```typescript theme={null}
updateOpening(ogid: string, update: Partial<Omit<CircularWallOpeningOptions, "ogid">>): void;
```

### removeOpening

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

### 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).

### frameAt

```typescript theme={null}
frameAt(station: number): StationWallFrame;
```

### anchorSpace

```typescript theme={null}
anchorSpace(): "world";
```

### getEditAnchors

```typescript theme={null}
getEditAnchors(): EditAnchor[];
```

### applyEditAnchor

```typescript theme={null}
applyEditAnchor(id: string, position: [
    number,
    number,
    number
]): void;
```

### toDrawing

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

Produce standardized drawing primitives for a view directly from the element's parametric data (the 0.3.0 contract).

### getExportRoots

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

### dispose

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

## Types

### CircularWallOptions

```typescript theme={null}
interface CircularWallOptions extends HasPropertySets {
  ogid?: string;
  labelName: string;
  axis: Extract<
    WallAxis,
    {
      kind: 'circularArc';
    }
  >;
  thickness: number;
  height: number;
  material: WallMaterial | string;
  color: number;
  deflection: number;
  accuracy?: AnalyticAccuracy;
  openings: CircularWallOpeningOptions[];
}
```

### CircularWallOpeningOptions

```typescript theme={null}
type CircularWallOpeningOptions = ProfiledWallOpening;
```

### StationWallFrame

```typescript theme={null}
interface StationWallFrame extends WallFrame {
  station: number;
  segmentIndex: number;
  segmentStation: number;
}
```

## Related

* [`OPElement`](/floorkit/api/architecture/op-element)
* [`DrawingCurvedRegion`](/floorkit/api/drawings/draw-project-view#drawingcurvedregion)
* [`EditAnchor`](/floorkit/api/architecture/op-element#editanchor)
* [`HasPropertySets`](/floorkit/api/architecture/op-element#haspropertysets)
* [`IPlaceable`](/floorkit/api/architecture/op-element#iplaceable)
* [`PlanExportView`](/floorkit/api/shapes/cylinder-shape#planexportview)
* [`PlanVectorExportable`](/floorkit/api/shapes/cylinder-shape#planvectorexportable)
* [`ProfiledWallOpening`](/floorkit/api/architecture/opening-helpers#profiledwallopening)
* [`Vec3`](/floorkit/api/architecture/wall#vec3)
* [`WallAxis`](/floorkit/api/architecture/wall-network#wallaxis)
* [`WallFrame`](/floorkit/api/architecture/opening#wallframe)
* [`WallMaterial`](/floorkit/api/architecture/wall#wallmaterial)


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