TypeScript Types

// complete type reference for @cadview/core

All types are exported from @cadview/core and re-exported by framework wrappers.

import type { DxfDocument, DxfEntity, DxfLayer, Tool, Theme } from '@cadview/core';

Core Types

Point2D

interface Point2D {
	x: number;
	y: number;
}

Point3D

interface Point3D {
	x: number;
	y: number;
	z: number;
}

Tool

type Tool = 'pan' | 'select' | 'measure';

Theme

type Theme = 'dark' | 'light';

ThemeConfig

interface ThemeConfig {
	backgroundColor: string;
	defaultEntityColor: string;
	selectionColor: string;
	measureColor: string;
	gridColor: string;
	crosshairColor: string;
}

ViewTransform

interface ViewTransform {
	scale: number;
	offsetX: number;
	offsetY: number;
}

BBox

interface BBox {
	minX: number;
	minY: number;
	maxX: number;
	maxY: number;
}

Document Types

DxfDocument

The root data structure returned by parseDxf().

interface DxfDocument {
	header: DxfHeader;
	layers: Map<string, DxfLayer>;
	lineTypes: Map<string, DxfLineType>;
	styles: Map<string, DxfStyle>;
	blocks: Map<string, DxfBlock>;
	entities: DxfEntity[];
}

DxfHeader

interface DxfHeader {
	acadVersion: string; // e.g., "AC1027"
	extMin?: Point3D; // Drawing extents minimum
	extMax?: Point3D; // Drawing extents maximum
	insUnits: number; // Insert units (0=unitless, 1=inches, 4=mm, ...)
	measurement: number; // 0=English, 1=Metric
	ltScale: number; // Global linetype scale
	dwgCodePage?: string; // Encoding codepage for pre-R2007 files
	handleSeed?: string; // Next available handle
	[key: string]: unknown; // Additional header variables
}

DxfLayer

interface DxfLayer {
	name: string;
	color: number; // ACI color index (1-255)
	lineType: string;
	flags: number;
	lineWeight: number;
	trueColor?: number; // 24-bit RGB packed integer
	isOff: boolean; // Layer is off (not rendered)
	isFrozen: boolean; // Layer is frozen
	isLocked: boolean; // Layer is locked
}

DxfLineType

interface DxfLineType {
	name: string;
	description: string;
	pattern: number[]; // Dash-gap pattern
	totalLength: number;
}

DxfStyle

interface DxfStyle {
	name: string;
	fontName: string;
	bigFontName: string;
	height: number;
	widthFactor: number;
	obliqueAngle: number;
}

DxfBlock

interface DxfBlock {
	name: string;
	basePoint: Point3D;
	entities: DxfEntity[];
	flags: number;
}

Entity Types

All entities extend DxfEntityBase:

interface DxfEntityBase {
	type: string;
	handle?: string;
	layer: string;
	color: number; // ACI color (0=BYBLOCK, 256=BYLAYER, 1-255=direct)
	trueColor?: number; // 24-bit RGB packed integer
	lineType: string;
	lineTypeScale: number;
	lineWeight: number;
	visible: boolean;
	extrusion: Point3D; // OCS normal vector
}

DxfEntity (Discriminated Union)

type DxfEntity =
	| DxfLineEntity
	| DxfCircleEntity
	| DxfArcEntity
	| DxfLwPolylineEntity
	| DxfPolylineEntity
	| DxfEllipseEntity
	| DxfSplineEntity
	| DxfTextEntity
	| DxfMTextEntity
	| DxfInsertEntity
	| DxfDimensionEntity
	| DxfHatchEntity
	| DxfPointEntity;

You can use the type discriminant for type narrowing:

if (entity.type === 'CIRCLE') {
	console.log(entity.radius); // TypeScript knows this is DxfCircleEntity
}

Geometry Entities

interface DxfLineEntity extends DxfEntityBase {
	type: 'LINE';
	start: Point3D;
	end: Point3D;
}

interface DxfCircleEntity extends DxfEntityBase {
	type: 'CIRCLE';
	center: Point3D;
	radius: number;
}

interface DxfArcEntity extends DxfEntityBase {
	type: 'ARC';
	center: Point3D;
	radius: number;
	startAngle: number; // Degrees
	endAngle: number; // Degrees
}

interface DxfEllipseEntity extends DxfEntityBase {
	type: 'ELLIPSE';
	center: Point3D;
	majorAxis: Point3D; // Endpoint of major axis relative to center
	minorRatio: number; // Ratio of minor to major axis (0-1)
	startParam: number; // Start parameter (radians)
	endParam: number; // End parameter (radians)
}

interface DxfPointEntity extends DxfEntityBase {
	type: 'POINT';
	position: Point3D;
}

Polylines

interface DxfLwPolylineVertex {
	x: number;
	y: number;
	bulge: number; // Arc bulge factor (0 = straight segment)
	startWidth: number;
	endWidth: number;
}

interface DxfLwPolylineEntity extends DxfEntityBase {
	type: 'LWPOLYLINE';
	vertices: DxfLwPolylineVertex[];
	closed: boolean;
	constantWidth: number;
	elevation: number;
}

interface DxfPolylineEntity extends DxfEntityBase {
	type: 'POLYLINE';
	vertices: DxfLwPolylineVertex[];
	closed: boolean;
	is3d: boolean;
}

Spline

interface DxfSplineEntity extends DxfEntityBase {
	type: 'SPLINE';
	degree: number;
	flags: number;
	knots: number[];
	controlPoints: Point3D[];
	fitPoints: Point3D[];
	weights: number[];
	startTangent?: Point3D;
	endTangent?: Point3D;
}

Text Entities

interface DxfTextEntity extends DxfEntityBase {
	type: 'TEXT';
	text: string;
	insertionPoint: Point3D;
	alignmentPoint?: Point3D;
	height: number;
	rotation: number; // Degrees
	widthFactor: number;
	obliqueAngle: number;
	style: string;
	hAlign: number; // Horizontal alignment (0-5)
	vAlign: number; // Vertical alignment (0-3)
	generationFlags: number;
}

interface DxfMTextEntity extends DxfEntityBase {
	type: 'MTEXT';
	text: string; // May contain MTEXT format codes
	insertionPoint: Point3D;
	height: number;
	width: number;
	attachmentPoint: number;
	drawingDirection: number;
	rotation: number;
	lineSpacingStyle: number;
	lineSpacingFactor: number;
	style: string;
	textDirection?: Point3D;
	bgFill: number;
	bgFillColor?: number;
	bgFillTrueColor?: number;
	bgFillScale: number;
}

INSERT (Block References)

interface DxfInsertEntity extends DxfEntityBase {
	type: 'INSERT';
	blockName: string;
	insertionPoint: Point3D;
	scaleX: number;
	scaleY: number;
	scaleZ: number;
	rotation: number; // Degrees
	columnCount: number; // MINSERT grid columns
	rowCount: number; // MINSERT grid rows
	columnSpacing: number;
	rowSpacing: number;
	attribs: DxfAttrib[];
}

interface DxfAttrib {
	tag: string;
	text: string;
	insertionPoint: Point3D;
	height: number;
	rotation: number;
	style: string;
	layer: string;
	color: number;
}

DIMENSION

interface DxfDimensionEntity extends DxfEntityBase {
	type: 'DIMENSION';
	blockName: string;
	dimStyle: string;
	dimType: number;
	defPoint: Point3D;
	textMidpoint: Point3D;
	defPoint2?: Point3D;
	defPoint3?: Point3D;
	defPoint4?: Point3D;
	defPoint5?: Point3D;
	textOverride: string;
	rotation: number;
	textRotation: number;
	leaderLength: number;
}

HATCH

interface DxfHatchEntity extends DxfEntityBase {
	type: 'HATCH';
	patternName: string;
	solidFill: boolean;
	associative: boolean;
	hatchStyle: number;
	patternType: number;
	patternAngle: number;
	patternScale: number;
	boundaryPaths: DxfHatchBoundaryPath[];
}

interface DxfHatchBoundaryPath {
	type: 'polyline' | 'edges';
	vertices?: Point2D[];
	bulges?: number[];
	isClosed?: boolean;
	edges?: DxfHatchEdge[];
	flags: number;
}

type DxfHatchEdge =
	| { type: 'line'; start: Point2D; end: Point2D }
	| {
			type: 'arc';
			center: Point2D;
			radius: number;
			startAngle: number;
			endAngle: number;
			ccw: boolean;
	  }
	| {
			type: 'ellipse';
			center: Point2D;
			majorAxis: Point2D;
			minorRatio: number;
			startAngle: number;
			endAngle: number;
			ccw: boolean;
	  }
	| {
			type: 'spline';
			degree: number;
			knots: number[];
			controlPoints: Point2D[];
			weights?: number[];
	  };

FormatConverter

Interface for adding support for non-DXF file formats:

interface FormatConverter {
	/** Return true if the buffer is in this format. Check magic bytes, not extensions. */
	detect(buffer: ArrayBuffer): boolean;

	/** Convert the buffer to a DXF string parseable by parseDxf(). */
	convert(buffer: ArrayBuffer): Promise<string>;
}

See DWG Support for the built-in dwgConverter implementation.