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

# View markers and level labels

> Draw section marks, elevation marks and storey level labels.

## Import

```typescript theme={null}
import {
  resolveProjectViewMarkers,
  drawProjectViewMarkers,
  drawPhysicalLevelLabels,
} from '@opengeometry/floorkit';
```

## resolveProjectViewMarkers

Resolve plan markers without mutating saved intent.

```typescript theme={null}
function resolveProjectViewMarkers(
  context: ProjectViewMarkerContext,
  parentViewId: string,
): readonly ResolvedProjectViewMarker[];
```

## drawProjectViewMarkers

Draw saved markers in parent plan world XZ, mapped to drawing XY.

```typescript theme={null}
function drawProjectViewMarkers(
  context: ProjectViewMarkerContext,
  parentViewId: string,
  options?: ProjectViewMarkerDrawingOptions,
): readonly ProjectViewMarkerDrawingGroup[];
```

## drawPhysicalLevelLabels

Draw authored storey datums inside the vertical crop, with a paper height of 2.5 mm.

```typescript theme={null}
function drawPhysicalLevelLabels(
  model: BuildingModel,
  view: PhysicalSavedView,
  volume: PhysicalViewVolume,
): DrawingPrimitive[];
```

## Types

### ProjectViewMarkerContext

```typescript theme={null}
interface ProjectViewMarkerContext {
  views: readonly SavedDrawingView[];
  paper: PaperDocument;
  markers?: readonly ProjectViewMarker[];
}
```

### ResolvedProjectViewMarker

```typescript theme={null}
interface ResolvedProjectViewMarker {
  marker: ProjectViewMarker;
  viewId: string;
  status:
    | 'resolved'
    | 'unplaced'
    | 'placement-required'
    | 'missing-view'
    | 'missing-placement'
    | 'unsupported-view';
  viewName?: string;
  drawingNumber?: string;
  sheetNumber?: string;
  geometry?: ProjectViewMarkerGeometry;
}
```

### ProjectViewMarkerDrawingOptions

```typescript theme={null}
interface ProjectViewMarkerDrawingOptions {
  headSizeMetres?: number;
  paperTextHeightMm?: number;
}
```

<ResponseField name="headSizeMetres" type="number">
  Arrowhead length in parent plan world metres. Default 0.3.
</ResponseField>

<ResponseField name="paperTextHeightMm" type="number">
  Printed label height in millimetres. Default 2.5.
</ResponseField>

### ProjectViewMarkerDrawingGroup

Authored marker hit target, separate from BIM element ownership.

```typescript theme={null}
interface ProjectViewMarkerDrawingGroup {
  markerId: string;
  viewId: string;
  status: ResolvedProjectViewMarker['status'];
  primitives: DrawingPrimitive[];
}
```

### PhysicalSavedView

The package does not export this type by name.

```typescript theme={null}
type PhysicalSavedView = Extract<
  SavedDrawingView,
  {
    kind: 'section' | 'elevation';
  }
>;
```

### PhysicalViewVolume

A vertical physical view in metres, with crop x right, y down and depth along look.

```typescript theme={null}
interface PhysicalViewVolume {
  readonly kind: 'section' | 'elevation';
  readonly frame: ViewFrame;
  readonly crop: PlanVectorBounds;
  readonly near: 0;
  readonly far?: number;
}
```

<ResponseField name="kind" type="'section' | 'elevation'" required />

<ResponseField name="frame" type="ViewFrame" required />

<ResponseField name="crop" type="PlanVectorBounds" required />

<ResponseField name="near" type="0" required>
  The authored view plane is always the near plane.
</ResponseField>

<ResponseField name="far" type="number">
  Positive depth from the view plane; absent for an unbounded elevation.
</ResponseField>

### ProjectViewMarkerGeometry

Geometry in parent plan world \[x, z] metres; positive Z follows plan screen-down.

```typescript theme={null}
type ProjectViewMarkerGeometry =
  | {
      kind: 'section';
      line: {
        start: [number, number];
        end: [number, number];
      };
      lookDirection: [number, number];
    }
  | {
      kind: 'elevation';
      origin: [number, number];
      lookDirection: [number, number];
    }
  | {
      kind: 'reference';
      position: [number, number];
      rotationDeg: number;
    };
```

## Related

* [`BuildingModel`](/floorkit/api/architecture/validate-building-model#buildingmodel)
* [`DrawingPrimitive`](/floorkit/api/drawings/draw-project-view#drawingprimitive)
* [`PaperDocument`](/floorkit/api/drawings/sheet-documents#paperdocument)
* [`PlanVectorBounds`](/floorkit/api/drawings/draw-project-view#planvectorbounds)
* [`ProjectViewMarker`](/floorkit/api/exports/project-file#projectviewmarker)
* [`SavedDrawingView`](/floorkit/api/drawings/sheet-documents#saveddrawingview)
* [`ViewFrame`](/floorkit/api/drawings/drawing-helpers#viewframe)


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