@cadview/core

中文文档
0.5.0发布于 2026/02/20MITTypeScriptESM + CJS近 30 天下载 5265

Framework-agnostic CAD file viewer engine with DXF parser and Canvas 2D renderer

原始使用文档
文档目录9 节
  1. Features
  2. Installation
  3. Quick Start
  4. API
  5. CadViewer
  6. FormatConverter
  7. parseDxf
  8. Supported DXF Entities
  9. License

@cadview/core

Framework-agnostic CAD file viewer engine with DXF parser and Canvas 2D renderer.

Features

  • Fast DXF parser with support for 13 entity types (LINE, CIRCLE, ARC, LWPOLYLINE, POLYLINE, ELLIPSE, SPLINE, TEXT, MTEXT, INSERT, DIMENSION, HATCH, POINT)
  • Canvas 2D renderer with DPR-aware rendering and dark/light themes
  • Interactive viewer with pan, zoom (mouse wheel + pinch), and pointer capture
  • Entity selection with spatial indexing (R-tree) and geometric hit-testing
  • Measurement tool with snap-to-geometry (endpoint, midpoint, center)
  • Layer management with visibility toggle and color overrides
  • ACI color table (256 colors) with theme-aware color 7 swap
  • Block INSERT rendering with nested block support
  • Zero framework dependencies — works with any UI framework or vanilla JS

Installation

npm install @cadview/core

Quick Start

import { CadViewer } from '@cadview/core';

const canvas = document.getElementById('canvas') as HTMLCanvasElement;
const viewer = new CadViewer(canvas, { theme: 'dark' });

// Load a DXF file
const response = await fetch('/drawing.dxf');
const buffer = await response.arrayBuffer();
viewer.loadArrayBuffer(buffer);

// Or load from File input
const file = input.files[0];
await viewer.loadFile(file);

// Controls
viewer.fitToView();
viewer.setTheme('light');
viewer.setTool('select'); // 'pan' | 'select' | 'measure'

// Events
viewer.on('select', (e) => {
  console.log('Selected:', e.entity.type, 'on layer:', e.entity.layer);
});

viewer.on('measure', (e) => {
  console.log('Distance:', e.distance);
});

// Cleanup
viewer.destroy();

API

CadViewer

Main viewer class that orchestrates parsing, rendering, and interaction.

Constructor

new CadViewer(canvas: HTMLCanvasElement, options?: CadViewerOptions)

Options

OptionTypeDefaultDescription
theme'dark' | 'light''dark'Color theme
minZoomnumber0.0001Minimum zoom scale
maxZoomnumber100000Maximum zoom scale
zoomSpeednumber1.1Zoom factor per wheel tick
initialToolTool'pan'Active tool on init
formatConvertersFormatConverter[][]Format converters for non-DXF files (e.g. DWG)

Methods

MethodDescription
loadFile(file: File)Load from a File object (async, runs format converters)
loadBuffer(buffer: ArrayBuffer)Load from an ArrayBuffer (async, runs format converters)
loadString(dxf: string)Load DXF from a string (sync, no conversion)
loadArrayBuffer(buffer: ArrayBuffer)Load DXF from an ArrayBuffer (sync, no conversion)
loadDocument(doc: DxfDocument)Load a pre-parsed DxfDocument directly
clearDocument()Clear the current document without destroying the viewer
fitToView()Fit drawing to canvas bounds
setTheme(theme)Set color theme
setTool(tool)Set active tool (pan, select, measure)
getLayers()Get all layers
setLayerVisible(name, visible)Toggle layer visibility
on(event, callback)Subscribe to events
off(event, callback)Unsubscribe from events
destroy()Clean up all resources

FormatConverter

Interface for registering custom file format converters. Converters are checked in order during loadFile() and loadBuffer() — the first match wins.

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. */
  convert(buffer: ArrayBuffer): Promise<string>;
}

Example — DWG support via @cadview/dwg:

import { CadViewer } from '@cadview/core';
import { dwgConverter } from '@cadview/dwg';

const viewer = new CadViewer(canvas, {
  formatConverters: [dwgConverter],
});

// loadFile and loadBuffer now handle both DXF and DWG
await viewer.loadFile(file);

Note: @cadview/dwg is licensed under GPL-3.0 (due to LibreDWG). @cadview/core remains MIT. See the @cadview/dwg README for details.

parseDxf

Standalone DXF parser — use this if you only need parsing without the viewer.

import { parseDxf } from '@cadview/core';

const doc = parseDxf(dxfString);
console.log(doc.entities.length, 'entities');
console.log(doc.layers.size, 'layers');

Supported DXF Entities

LINE, CIRCLE, ARC, LWPOLYLINE, POLYLINE, ELLIPSE, SPLINE, TEXT, MTEXT, INSERT (with MINSERT grid), DIMENSION (with geometry blocks), HATCH (line/arc/circle edges), POINT.

License

MIT

版本与发布记录

@cadview/core 共发布 5 个版本,首次发布于 2026/02/19;过去 12 个月发布了 5 个版本。

版本发布日期距今
0.5.0latest2026/02/208 个月前
0.4.02026/02/208 个月前
0.3.02026/02/208 个月前
0.2.02026/02/198 个月前
0.1.02026/02/198 个月前

关于 @cadview/core 的常见问题

@cadview/core 是什么?

Framework-agnostic CAD file viewer engine with DXF parser and Canvas 2D renderer

如何安装 @cadview/core?

在项目目录运行 npm install @cadview/core,或使用 pnpm add / yarn add / bun add。

@cadview/core 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@cadview/core 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@cadview/core 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=18。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@cadview/core 可以商用吗?

@cadview/core 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@cadview/core 的下载量有多少?

根据 npm 官方下载统计,@cadview/core 在 2026/10/09 – 2026/11/07 这 30 天内被下载 5,265 次,日均约 176 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@cadview/core 还在维护吗?

最新版本 0.5.0 发布于 2026/02/20(8 个月前);至今共发布 5 个版本,其中过去 12 个月发布了 5 个;首次发布于 2026/02/19。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。