# CAD-Viewer(日本語) [English](./README.md) | [简体中文](./README.zh-CN.md) | [日本語](./README.ja.md) | [한국어](./README.ko.md) | [Español](./README.es.md) | [Português](./README.pt.md) | [Русский](./README.ru.md) | [Čeština](./README.cs.md) cad-viewer は、`バックエンドサービスに一切依存せず、完全にブラウザ上で動作する世界初の Web ベース DXF/DWG ビューア兼エディタ` です。 DWG/DXF の解析、ジオメトリ処理、レンダリングをすべてブラウザ内で行うことで、cad-viewer は真のサーバーレス CAD 閲覧・編集を実現します。クラウドアプリ、オフライン利用、プライバシーに配慮したワークフローに最適です。 また、他の CAD ビューアではほとんど見られない機能として、**ワンクリックで単一の自己完結型 HTML ファイルへエクスポート** できます。ダウンロードした `.html` には図面スナップショットと軽量なビューアランタイムが埋め込まれており、受信者は **CAD アプリもサーバーもインストールも不要** で、任意のモダンブラウザから開いて、パン、ズーム、レイヤー切り替え、距離測定ができます。多くのデスクトップおよび Web CAD ビューアは自社製品内での閲覧に限られますが、cad-viewer はライブな図面を、メール送信、アーカイブ、静的ファイルホストに置けるポータブルなオフライン成果物に変換します。クライアントへの共有、コンプライアンスアーカイブ、エアギャップ環境に最適です。オフラインビューアは、同じ図面を開く際に従来のデスクトップツールよりはるかに少ないメモリを使用します(下記の[メモリ比較](#自己完結型-html-のメモリ使用量)を参照)。 - [**🌐 ホームページ**](https://mlightcad.com/) - [**🌐 ライブデモ**](https://mlightcad.github.io/cad-viewer/) - **🌐 API ドキュメント**:[Read the Docs](https://cad-viewer.readthedocs.io/en/latest/)(バージョン管理あり)· [GitHub Pages](https://mlightcad.github.io/cad-viewer/docs/)(最新 / dev) - [**🌐 Wiki**](https://github.com/mlightcad/cad-viewer/wiki) - X (Twitter): [@mlightcad](https://x.com/mlightcad) - YouTube: [@mlightcad](https://www.youtube.com/@mlightcad) - Medium: [@mlightcad](https://medium.com/@mlightcad) - Juejin(稀土掘金): [@mlightcad](https://juejin.cn/column/7501992214283501579) ### cad-viewer で構築されたアプリ [Thingraph](https://cad.thingraph.site/) チームは cad-viewer 上に本番向け DWG/DXF ビューアとプラットフォーム連携を構築し、世界中で数万ユーザーにサービスを提供しています: - [DWG Viewer Web App](https://cad.thingraph.site/dwg-viewer) — エンジニアリングチームが高速かつサーバーレスで図面にアクセスするためのブラウザベース DWG/DXF ビューア。各プラットフォーム向けインストール: - [Google Drive](https://workspace.google.com/marketplace/app/dwg_viewer/641533811831) — **Open with** から Drive 上の DWG/DXF を開く - [VS Code](https://marketplace.visualstudio.com/items?itemName=thingraph.dwg-viewer) — `.dwg` / `.dxf` 向けカスタム読み取り専用エディタ - [Cursor](https://open-vsx.org/extension/thingraph/dwg-viewer) — Open VSX 経由の同一拡張機能 - [Confluence](https://marketplace.atlassian.com/apps/2890472615/dwg-viewer-for-confluence) — ページに DWG/DXF プレビューを埋め込む - [Windows Explorer](https://cad.thingraph.site/install/windows) — エクスプローラーでのサムネイルとプレビュー コミュニティアプリと連携: - [flyfish-dev/cad-viewer](https://github.com/flyfish-dev/cad-viewer) — DWG、DXF、DWF、DWFx、XPS 向け本番向けブラウザ CAD ビューア([ライブデモ](https://cad-viewer-iys.pages.dev)) - [Nextcloud CAD Viewer](https://github.com/ashcoft/nextcloud-cad-viewer) — ブラウザで DWG/DXF を表示する Nextcloud ネイティブアプリ([App Store](https://apps.nextcloud.com/apps/cad_viewer)) コミュニティ Linux デスクトップパッケージ: - [CAD Viewer AppImage](https://github.com/pass-wind/cad-viewer-appimage) — Linux 向け Electron ベース AppImage(約 114 MB)、Fedora で検証済み - [cad-viewer (AUR)](https://aur.archlinux.org/packages/cad-viewer) — システム Electron を使用する Arch Linux ソースパッケージ(約 5.4 MB) - [cad-viewer-bin (AUR)](https://aur.archlinux.org/packages/cad-viewer-bin) — フォント/テンプレート同梱の Arch Linux バイナリパッケージ。完全オフラインでの図面オープンに対応 ![CAD-Viewer Quick Demo](./assets/cad-viewer.gif) ## 機能 - **高性能** — 大規模 DWG/DXF ファイルを 60 FPS 以上の滑らかなレンダリングで表示 - **バックエンド不要** — ファイルの解析と処理をすべてブラウザ内で完結 - **データセキュリティの強化** — ファイルがデバイス外に出ないため、完全なプライバシーを確保 - **容易な統合** — サーバー設定やバックエンドインフラが不要 - サードパーティ連携に適したモジュラーアーキテクチャ - **オフライン HTML へのエクスポート** — 現在の図面を、埋め込みビューア付きの単一自己完結型 `.html` ファイルとしてエクスポート(パン/ズーム、範囲ズーム、レイヤー、距離測定、EN/ZH UI)。任意のブラウザでオフライン起動可能。cad-viewer インスタンスやバックエンドは不要 - オフラインおよびオンライン編集ワークフロー - 高度な最適化手法を備えた THREE.js 3D レンダリングエンジン - CMS、Notion、WeChat などのプラットフォームとの連携を見据えた拡張性 ## はじめに ### 前提条件 - [Node.js](https://nodejs.org/) >= 24 - [pnpm](https://pnpm.io/) >= 10 ### インストール ```bash git clone https://github.com/mlightcad/cad-viewer.git cd cad-viewer pnpm install ``` ### 開発 ```bash # フル機能ビューア(cad-viewer)を起動 pnpm dev # またはシンプルビューアを起動 pnpm dev:simple ``` ### ビルド ```bash pnpm build ``` ### プレビュー ```bash # フル機能ビューアをプレビュー pnpm preview # シンプルビューアをプレビュー pnpm preview:simple ``` ## 使い方 ### デスクトップブラウザ操作 - **選択**:エンティティを左クリック - **拡大/縮小**:マウスホイールを上下にスクロール - **パン**:マウス中ボタンを押したままドラッグ - **消去**:エンティティを選択して `Del` キーを押す ### タブレット/モバイルブラウザ操作 - **選択**:エンティティをタップ - **ズーム**:2 本指でピンチ - **パン**:1 本指でドラッグ ## プラグインシステム CAD-Viewer は [`@mlightcad/cad-simple-viewer`](packages/cad-simple-viewer) 内のモジュラー **プラグインシステム** を中心に構築されています。プラグインは `AcApPlugin` インターフェースを実装し、`onLoad` / `onUnload` 経由でビューアのライフサイクルにフックします。通常はコマンド登録、UI 追加、エクスポート/インポートパイプラインの接続に使用します。 プラグインは `AcApDocManager.instance.pluginManager`(`loadPlugin`、`registerLazyPlugin`、またはドキュメントマネージャー作成時の `plugins.fromConfig`)から読み込みます。エクスポート向けプラグインは **遅延読み込み** をサポートします。起動時に小さなスタブだけを登録し、ユーザーが関連コマンド(例:`-chtml`、または `cad-viewer` の `chtml` ダイアログでエクスポートを確定したとき)を実行した時点で重いバンドルをダウンロードします。 モノレポには複数のファーストパーティプラグインが同梱されています。各プラグインは 1 つの関心事に集中しており、必要に応じて組み合わせられます。**インストール、登録、API の詳細は各パッケージの README に記載されています** — 下記リンクを参照してください。 ### 公式プラグイン | パッケージ | 役割 | コマンド / 機能 | |---------|------|-------------------------| | [`@mlightcad/cad-simple-ui-plugin`](packages/cad-simple-ui-plugin) | `cad-simple-viewer` 向け **ツールバーとレイヤーマネージャー UI**(プレーン DOM、Vue/React 非依存) | `layer`、デフォルトツールバー(表示、測定、エクスポート、レビュー、テーマ、ロケール) | | [`@mlightcad/cad-agent-plugin`](packages/cad-agent-plugin) | **自然言語 CAD エージェント**(AI チャットパネル + 図面ツール呼び出し) | `agent` | | [`@mlightcad/cad-html-plugin`](packages/cad-html-plugin) | 図面を **自己完結型オフライン HTML** へエクスポート | `chtml`(`cad-viewer` のダイアログ)、`-chtml`(コマンドライン) | | [`@mlightcad/cad-pdf-plugin`](packages/cad-pdf-plugin) | **PDF エクスポートとインポート**(ベクターパイプライン) | `cpdf`、`ipdf` | | [`@mlightcad/cad-svg-plugin`](packages/cad-svg-plugin) | **SVG エクスポート** と共有ベクターレンダラー(PDF エクスポートでも使用) | `csvg` | ### `@mlightcad/cad-simple-ui-plugin` — シンプルビューア向け UI 層 [`cad-simple-viewer`](packages/cad-simple-viewer) は意図的に **アプリケーション UI を同梱しません** — キャンバスと CAD コアのみです。シンプルビューアを独自 Web アプリに埋め込み、Vue ベースのフル [`cad-viewer`](packages/cad-viewer) シェルを採用せずにすぐ使える UI が必要な場合、**`cad-simple-ui-plugin` が想定される UI 層** です。 提供機能: - **設定可能なツールバー**(任意の辺に配置、デフォルト CAD コマンド、ネストメニュー、カスタム項目) - **フローティングレイヤーマネージャー**(レイヤー ON/OFF、ACI カラーピッカー、ダブルクリックでレイヤーへズーム) - **`COLORTHEME` システム変数とホスト要素上の `--ml-ui-*` CSS トークンとのテーマ同期** - **`AcApI18n` とのロケール同期**(English / Chinese) すべてのウィジェットはフレームワーク非依存(プレーン DOM)です。フル Vue [`cad-viewer`](packages/cad-viewer) アプリは Element Plus UI を内蔵しており、このプラグインは不要です。`cad-simple-viewer` を直接ベースに構築する場合に `cad-simple-ui-plugin` を使用してください。 → **クイックスタート、ツールバーカスタマイズ、オプション:** [packages/cad-simple-ui-plugin/README.md](packages/cad-simple-ui-plugin/README.md) ### `@mlightcad/cad-agent-plugin` — AI 図面アシスタント [`cad-agent-plugin`](packages/cad-agent-plugin) は `cad-simple-viewer` ベースのアプリに **自然言語 CAD エージェント** を追加します。ユーザーは平易な言語で希望を記述し、エージェントが CAD ツールを呼び出して図面を調査し、ジオメトリを作成または変更します。 提供機能: - **遅延読み込み** `AcApPlugin`(トリガーコマンド:`agent`)により、AI バンドルをクリティカルパスから外す - Vercel AI SDK(`Experimental_Agent` + `@ai-sdk/vue`)上の **Vue チャットパネル**(`AgentChatPanel`) - **ブラウザ側 LLM 設定** — OpenAI、Anthropic、OpenAI 互換エンドポイントの API キーはクライアントに保持(`localStorage` に暗号化保存) - **フェーズ 1 CAD ツール** — `get_drawing_context`;`draw_line`、`draw_circle`、`draw_arc`、`draw_rectangle`、`draw_polyline`、`draw_text`;`set_current_layer`、`create_layer`、`zoom_extents` - プラグイン i18n 層による **English / Chinese / Turkish / Czech** UI 文字列 フル Vue [`cad-viewer`](packages/cad-viewer) アプリは、パッケージインストール時にエージェントを自動登録します(パレットタブ)。[`cad-simple-viewer-example`](packages/cad-simple-viewer-example) は `cad-simple-ui-plugin` 経由でドックタブに接続します。ホストアプリは `registerLazyAgentPlugin` と `setAgentPaletteOpener` を呼び出し、パネルのマウント位置を決定します。 → **インストール、登録、ツール一覧:** [packages/cad-agent-plugin/README.md](packages/cad-agent-plugin/README.md) ### エクスポートプラグイン(HTML / PDF / SVG) これらのプラグインは、同一プラグインマネージャーにエクスポート(および PDF インポート)コマンドを追加します。**遅延読み込み** により初期ページ重量を抑えます。[`cad-simple-viewer-example`](packages/cad-simple-viewer-example) デモは 3 つのエクスポートプラグイン、`cad-simple-ui-plugin`、`cad-agent-plugin` をすべて登録します。フル [`cad-viewer`](packages/cad-viewer) アプリはブートストラップ時にエクスポートプラグインと(インストール時)エージェントプラグインを登録します。 - **HTML** — 共有とアーカイブ向けの単一ファイルオフラインビューア:[packages/cad-html-plugin/README.md](packages/cad-html-plugin/README.md) (同一パイプラインのヘッドレス CLI:[packages/cad-html-exporter-cli/README.md](packages/cad-html-exporter-cli/README.md)) - **PDF** — ベクター PDF エクスポートと PDF から CAD へのインポート:[packages/cad-pdf-plugin/README.md](packages/cad-pdf-plugin/README.md) - **SVG** — ベクター SVG エクスポート:[packages/cad-svg-plugin/README.md](packages/cad-svg-plugin/README.md) #### 自己完結型 HTML のメモリ使用量 サンプル図面 [`canteen.dwg`](https://cdn.jsdelivr.net/gh/mlightcad/cad-data@main/data/canteen.dwg) を開いた場合のメモリ消費量の目安: | ビューア | メモリ消費量 | |--------|-------------| | AutoCAD 2020 | 320 MB | | GstarCAD Viewer (浩辰看图王) | 246 MB | | 自己完結型 HTML(測定モード) | 56 MB | | 自己完結型 HTML(表示モード) | 33 MB | オフライン HTML ビューアは、表示モードで AutoCAD 2020 より約 **83% 少ない** メモリ、GstarCAD Viewer より約 **77% 少ない** メモリを使用しながら、パン/ズーム、レイヤー切り替え、距離測定(測定モード)をサポートします。 ## パフォーマンス CAD-Viewer は **卓越したパフォーマンス** 向けに設計されており、高フレームレートを維持しながら非常に大きな DXF/DWG ファイルを処理できます。複数の高度なレンダリング技術でパフォーマンスを最適化しています: - **カスタムシェーダーマテリアル**:GPU 加速シェーダーマテリアルで複雑な線種とハッチ塗りつぶしパターンを効率的にレンダリング - **ジオメトリバッチング**:同一マテリアルの点、線、面をマージし、ドローコールを大幅に削減 - **インスタンスレンダリング**:インスタンシング技術で反復ジオメトリのレンダリングを最適化 - **バッファジオメトリ最適化**:効率的なメモリ管理とジオメトリマージングで GPU オーバーヘッドを低減 - **マテリアルキャッシュ**:類似エンティティ間でマテリアルを再利用し、状態変更を最小化 - **WebGL 最適化**:モダン WebGL 機能でハードウェア加速レンダリングを活用 これらの最適化により、CAD-Viewer は数千のエンティティを含む複雑な CAD 図面を滑らかにレンダリングし、応答性の高いユーザー操作を維持します。 ## 既知の問題 デフォルトのオープンソース DWG パスは [LibreDWG](https://github.com/LibreDWG/libredwg) ベースです。多くの図面で問題なく動作しますが、エンティティのカバレッジは依然として限定的で、WASM バンドルははるかに大きく、起動は遅く、メモリ使用量は高く、非常に大きな DWG ファイルではメモリ不足エラーが発生する可能性があります。商用クローズドソース製品には GPL ライセンスの考慮事項も伴います。 より良い互換性、低いメモリ使用量、大容量ファイル対応、またはより明確な商用ライセンスが必要な場合は、[**プロプライエタリ DWG パーサー**](./PROPRIETARY-PARSER.md) を参照してください。 | 項目 | LibreDWG ベースパーサー | プロプライエタリ DWG パーサー | |------|------------------------|------------------------| | サポートエンティティ | 限定的なカバレッジ | より広いカバレッジ | | バンドルサイズ | ~13 MB | ~437 KB | | 読み込み速度 | 起動が遅い | 起動がはるかに高速 | | メモリ使用量 | 高い | 低い | | 大容量 DWG ファイル | 大容量ファイルで OOM の可能性 | そのような問題なし | | ライセンス | GPL 伝播リスク | GPL 伝播の問題なし | ## ロードマップ 本プロジェクトの目標は、モジュラーアーキテクチャとフレームワーク非依存の統合を備えた、**ブラウザ上のフル機能 2D AutoCAD ライクシステム**(ビューア + エディタ)を構築することです。 凡例: - [x] 完了 - [ ] 計画 - [ ] ⏳ 進行中 ### コアファイルとデータ層 #### ファイルサポート * [x] DXF 読み込み * [x] DWG 読み込み * [x] 自己完結型オフライン HTML へのエクスポート(埋め込みビューア) * [x] 大容量ファイルのストリーミング / 増分読み込み * [ ] ⏳ ファイルバージョン互換性(R12–Latest) #### データモデル * [x] 統一エンティティデータモデル * [x] レイヤーテーブルサポート * [x] ブロック / 挿入構造 * [ ] ⏳ Handle と object ID 管理:現在 objectId は handle と同一で、bigint(int64)ではなく 1 つの文字列として表現されている * [ ] ⏳ XData / 拡張辞書サポート * [ ] プロキシエンティティ処理 ### レンダリングとパフォーマンス #### レンダリングエンジン * [x] WebGL ベースレンダリング(Three.js) * [x] 2D 専用最適化パイプライン * [x] レイヤーベースのシーン構成 * [x] レイアウト / ペーパースペースレンダリング * [ ] ビューポートエンティティサポート #### パフォーマンス最適化 * [x] ジオメトリマージとバッチング * [x] 空間インデックス(基本) * [x] 高度な空間インデックス(R-tree / BVH) * [ ] レベルオブディテール(LOD)レンダリング * [ ] 超大規模図面向けマルチキャンバス / タイルレンダリング ### 表示とナビゲーション #### ビュー制御 * [x] パン * [x] ズーム(ホイール / ボックスズーム) * [x] 全体表示 / 範囲フィット * [ ] 名前付きビュー * [ ] ビュー履歴(ビュー変更の元に戻す / やり直し) #### 表示制御 * [x] レイヤー表示 ON/OFF * [x] レイヤーフリーズ / ロック * [x] 線幅表示 * [ ] 線種スケーリング * [x] 背景 / テーマ切り替え ### 選択と操作 #### 選択 * [x] 単一エンティティ選択 * [x] 選択エンティティのハイライト * [x] ウィンドウ選択 * [x] クロシング選択 * [x] 選択フィルター(タイプ / レイヤー別) * [x] 選択サイクリング #### スナップ(OSNAP) * [x] 端点 * [x] 中点 * [x] 中心 * [ ] 交点 * [ ] 垂線 / 接線 * [x] 最近点 * [ ] スナップトラッキング ### 編集と変更 #### 基本編集 * [x] エンティティ編集フレームワーク * [x] 移動 * [x] コピー * [x] 回転 * [ ] スケール * [x] 削除 * [x] 元に戻す / やり直し #### ジオメトリ編集 * [x] グリップポイント * [ ] ストレッチ * [ ] トリム * [ ] 延長 * [x] オフセット * [ ] 分解 * [ ] 結合 / フィレット / 面取り(2D) ### 作図と作成ツール #### 基本エンティティ * [x] 線分 * [x] ポリライン * [x] スプライン * [x] 円 * [x] 円弧 * [x] 楕円 * [x] 矩形 / 多角形 #### 高度なエンティティ * [x] ハッチ * [ ] テキスト(単一行 / 複数行) * [ ] 寸法(線形、位置合わせ、角度) * [ ] ブロック作成と挿入 ### 測定 * [x] 距離 * [x] 弧長 * [x] 面積 * [x] 角度 * [ ] 座標 * [ ] エンティティ統計(長さ、面積、数) ### 寸法 * [x] 線形寸法 * [ ] 角度寸法 * [ ] 座標 ### プロパティと UI パネル #### プロパティパレット * [x] 選択エンティティのプロパティ * [ ] レイヤー、色、線種の編集 * [x] 変更時のライブ更新 #### パネルと UI * [x] レイヤーマネージャー * [ ] ブロックマネージャー * [x] コマンド履歴 / コンソール * [x] ステータスバー(スナップ、直交、グリッド) #### コマンドシステム * [x] コマンドレジストリ * [x] コマンドエイリアス * [x] コマンドプロンプト(AutoCAD スタイル) ### 統合と拡張性 #### フレームワーク統合 * [x] フレームワーク非依存コア * [ ] React 統合サンプル * [x] Vue 統合サンプル * [ ] OpenLayers / マップ統合 * [ ] CMS / Notion 埋め込み #### プラグインシステム * [x] プラグイン API * [ ] カスタムエンティティサポート * [x] カスタムコマンド ### オフラインとオンライン編集 #### オフラインエディタ * [x] ブラウザ内ローカル編集 * [x] DXF として保存 * [ ] 変更セット / diff の保存 * [ ] IndexedDB 永続化 #### オンラインエディタ * [ ] バックエンド API 設計 * [ ] ユーザー認証 * [ ] ファイルバージョン管理 * [ ] マルチユーザーアクセス制御 * [ ] リアルタイムコラボレーション(将来) ### プラットフォーム目標 * [ ] ⏳ Google Drive 連携 * [ ] WeChat Mini Program ビューア * [ ] モバイルブラウザサポート(読み取り専用) ### ドキュメントとコミュニティ * [x] アーキテクチャドキュメント * [x] API リファレンス * [ ] コントリビューションガイド * [x] サンプルプロジェクト * [x] ロードマップとチェンジログのメンテナンス このロードマップは意図的に細分化されており、コントリビューターが **存在する機能**、**不足している機能**、**支援が必要な領域** を明確に把握できるようにしています。 ## コントリビューション コントリビューションを歓迎します!バグ修正、新機能、提案については issue または pull request を開いてください。バグ報告では、問題のある図面へのリンクを提供いただくと、再現と修正に役立ちます。 ## ライセンス cad-viewer モノレポは主に [MIT](LICENSE) ライセンスです。 DXF 読み込みは `@mlightcad/data-model` 内の組み込み MIT パーサーを使用します。`@mlightcad/cad-simple-viewer` の **デフォルト DWG 読み込みパス** は GPL-3.0 パッケージ(`libredwg-web` / `@mlightcad/libredwg-converter`)に依存します。クローズドソース製品を提供し、GPL コードを顧客に配布できない場合は、代わりに [**プロプライエタリ DWG パーサー**](./PROPRIETARY-PARSER.md) を使用してください — このコンバーターを置き換え、スタックの残りを MIT のみに保てます。 → **商用パーサー:** [PROPRIETARY-PARSER.md](./PROPRIETARY-PARSER.md)(スコープ、ライセンス、価格、統合、GPL コンプライアンス、サポート)