# DxfGeoLite **Repository Path**: ij910/dxf-geo-lite ## Basic Information - **Project Name**: DxfGeoLite - **Description**: 轻量级 .NET DXF 几何运算库 —— 不依赖 AutoCAD,AutoCAD 风格 API,毫秒级响应 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2026-07-16 - **Last Updated**: 2026-07-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # DxfGeoLite > **轻量级可扩展 CAD 平台 · AI 辅助绘图的试验场** > > 不依赖 AutoCAD 的纯 .NET DXF 几何运算库 + WPF 可视化编辑器,AutoCAD 风格交互,毫秒级响应。 > 参数化模板只是起点,这里是智能绘图功能的孵化器。 ## 💡 为什么不直接在 AutoCAD 上二次开发? 这是一个灵魂拷问。答案很简单:**闭源 CAD 是 AI 的黑盒牢笼。** | 痛点 | AutoCAD 二次开发 | DxfGeoLite | |------|-----------------|------------| | **AI 交互深度** | COM 接口隔着一层,只能发命令、拿结果,中间过程全是黑盒 | 完全开源,AI 可以直接操作内存里的实体数据、渲染管线、选择集,想怎么集成就怎么集成 | | **调试透明度** | 报错信息含糊,内部状态不可见,AI 出了问题像猜谜 | 所有状态全部可见,实体数据、渲染过程、交互状态随时可查,AI 调试效率提升十倍 | | **响应速度** | COM 调用毫秒级延迟,批量操作卡成 PPT,AI 实时交互想都别想 | 纯内存运算,微秒级响应,AI 实时拖动、实时预览完全没问题 | | **迭代速度** | Lisp 语法古老,.NET 插件部署繁琐,改个功能要重启 CAD | C# 直接写,热重载,想加什么功能加什么功能,想到就能做到 | | **成本与依赖** | 每套几万的授权费,客户机器必须装 AutoCAD | 零依赖,单文件发布,想放哪儿放哪儿 | **AI 时代,闭源 CAD 是最大的瓶颈。** 你想让 AI 理解图纸、推理几何、自动标注,但 AutoCAD 只给你留了一扇窄窄的 COM 小门——你塞进去的是命令,出来的是结果,中间发生了什么全靠猜。 DxfGeoLite 要做的,就是**拆掉这堵墙**: - 所有实体数据完全透明,AI 想读就读、想改就改 - 渲染管线完全可控,想怎么画就怎么画 - 交互逻辑全部开放,想怎么加智能就怎么加 - 性能足够快,毫秒级响应,AI 实时预览不是梦 > 🎯 **参数化模板是地基,不是天花板。AI 辅助绘图才是真正的星辰大海。** --- ## ✨ 特性 ### 🤖 AI 辅助绘图 - 接入 OpenAI / DeepSeek / 本地 Ollama,自然语言描述直接绘图 - 本地模型自动检测,一键切换 - AI 命令可扩展,想让 AI 做什么就做什么 ### 📐 几何运算库(零依赖) - 纯 .NET 8 实现,不需要安装 AutoCAD 或其他 CAD 软件 - 支持移动/旋转/缩放/镜像/偏移/阵列/拉伸/修剪等常用操作 - 所有方法都有批量版本和就地修改版本 - 12 种实体类型:直线、圆、圆弧、多段线、椭圆、点、文字、多行文字、正多边形、块引用、填充、标注 ### 🎮 WPF 可视化编辑器(AutoCAD 风格) - Ribbon 功能区(草图与注释)、底部命令行/状态栏,CAD 用户零学习成本 - 左键选择/框选,中键平移,滚轮缩放,夹点编辑 - 对象捕捉(端点/中点/圆心/象限点/交点/垂足/最近点) - 正交/极轴/栅格/动态输入,AutoCAD 有的基础交互都有 - 多行文字原位编辑,Enter 换行、Ctrl+Enter 确认 - 完整图层管理(新建/删除/开关/冻结/锁定/颜色/线型) - AutoCAD 剪贴板互通,Ctrl+C/V 直接互粘贴实体(含多行文字) - 5 套主题:深色、浅色、护眼绿、深蓝科技、CAD 经典黑 ### 🔧 参数化改造(已落地的智能功能之一) - 老图纸导入 → 框选拉伸区域 → 绑定参数 → 秒变参数化模板 - 实时预览,参数拖动即时反馈 - 三种模板模式:DXF+C# 插件、纯 Lisp、DXF+Lisp 混合 --- ## 🔗 联动项目 **[dxf-lisp-tool](https://gitee.com/xian154563/dxf-lisp-tool)** — 基于 DxfGeoLite 构建的上层参数化模板工具: - **DXF+C# 参数化模板**(.mtpl):DxfGeoLite + C# 插件实现复杂参数化 - **纯 Lisp 模板**(.lsp):内置 Lisp 解释器,实时预览 - **DXF+Lisp 混合模板**(.htpl):底图 + Lisp 脚本叠加 > 💡 本项目是底层几何运算库 + 可视化编辑器,也是新功能的试验田; > 如果你需要现成的参数化模板 GUI 工具,直接用 dxf-lisp-tool 即可。 --- ## 📦 支持的实体 | 实体类型 | 说明 | |---------|------| | LINE | 直线 | | CIRCLE | 圆 | | ARC | 圆弧 | | LWPOLYLINE | 轻量多段线(含 bulge 圆弧段) | | POINT | 点 | | TEXT / MTEXT | 单行文字 / 多行文字(原位编辑、自动换行) | | POLYGON | 正多边形 | | ELLIPSE | 椭圆 | | INSERT | 块引用 | | HATCH | 填充 | | DIMENSION | 标注 | ## 🔧 支持的操作 | 分类 | 方法(AutoCAD 命令) | |------|---------------------| | 移动 | `EntityTransform.Move` | | 旋转 | `EntityTransform.Rotate` | | 缩放 | `EntityTransform.Scale` | | 镜像 | `EntityTransform.Mirror` / `MirrorX` / `MirrorY` | | 偏移 | `EntityTransform.Offset` | | 阵列 | `EntityTransform.ArrayRect`(矩形) / `ArrayPolar`(环形) | | 拉伸 | `EntityTransform.Stretch`(框选拉伸) | | 修剪 | 修剪/延伸 | | 边界 | `EntityBounds.GetBounds` / `GetSize` / `GetCenter` | | 转换 | `EntityConvert.PlineToEntities` / `PlineSegsToEntities` | | 圆弧 | `EntityBulge.BulgeToArc` / `ArcToBulge` | 所有方法都有批量版本(如 `MoveAll` / `RotateAll`)和就地修改版本(如 `MoveInPlace` / `StretchInPlace`)。 --- ## 🚀 快速开始 ### 安装 ```bash dotnet add package DxfGeoLite # (待发布 NuGet) ``` 或者直接引用项目: ```xml ``` ### 示例 ```csharp using DxfGeoLite.Entities; using DxfGeoLite.Geometry; // 创建一个矩形(多段线) var rect = new DxfLwPolyline { Vertices = new List<(double, double)> { (0, 0), (100, 0), (100, 50), (0, 50) }, Closed = true, Color = 2 // 黄色 }; // 移动 var moved = EntityTransform.Move(rect, 20, 30); // 旋转(绕中心点,30度) var bounds = EntityBounds.GetBounds(rect); var cx = (bounds.minX + bounds.maxX) / 2; var cy = (bounds.minY + bounds.maxY) / 2; var rotated = EntityTransform.Rotate(rect, cx, cy, 30); // 偏移(向内 5mm) var offset = EntityTransform.Offset(rect, -5); // 矩形阵列(3行 x 4列,间距 150 x 70) var array = EntityTransform.ArrayRect(rect, 3, 4, 70, 150); // 拉伸(框选右半部分,向右拉 50) var stretched = EntityTransform.Stretch(rect, 50, 50, 150, 100, 50, 0); ``` ### 运行可视化编辑器 ```bash cd DxfGeoLite.App dotnet run ``` --- ## 🎮 编辑器功能一览 - 🖱️ **AutoCAD 风格交互**:左键选择/框选,中键平移,滚轮缩放 - 🎀 **Ribbon 功能区**:默认、插入、注释、参数化、视图、管理等选项卡 - ✏️ **绘图命令**:直线、圆、圆弧、矩形、多段线、点、文字(单行/多行)、正多边形、椭圆 - ✏️ **多行文字(MTEXT)**:原位编辑,Enter 换行、Ctrl+Enter 确认,自动扩展高度+滚动条 - 🎯 **夹点编辑**:选中实体后拖动夹点修改(端点、中点、圆心等) - 📌 **对象捕捉**:端点、中点、圆心、象限点、交点、垂足、最近点,支持草图设置对话框配置 - 📐 **正交/极轴**:F8 正交,F10 极轴追踪(互斥切换) - 🟦 **栅格显示**:F7 切换栅格,Shift+F7 视口裁剪 - ⌨️ **动态输入**:F12 切换,光标附近显示输入框,仿 AutoCAD DYN 模式 - 📝 **命令行输入**:底部命令行 + 详细日志双标签,支持键盘输入命令 - 📋 **CAD 剪贴板互通**:Ctrl+C/V 直接与 AutoCAD 复制粘贴实体(含多行文字、图层、颜色、线型) - 🤖 **AI 绘图**:接入 OpenAI / DeepSeek / 本地 Ollama,自然语言转绘图指令;本地模型自动检测列表 - 📂 **图层管理**:图层特性面板,支持新建/删除/开关/冻结/锁定/颜色/线型 - 📂 **文件操作**:DXF/DWG 读写、新建/打开/保存/另存为、最近文件列表 - ⏪ **撤销/重做**:操作历史可回退 - 🌓 **多主题**:深色、浅色、护眼绿、深蓝科技、CAD 经典黑 ### 操作快捷键 | 操作 | 快捷键 | |------|--------| | 点选实体 | 左键单击 | | 加选 | Shift + 左键 | | 窗口选择(全包含) | 从左往右拖(蓝框) | | 交叉选择(接触即选) | 从右往左拖(绿虚线框) | | 平移 | 中键按住拖动 | | 全屏显示 | 双击中键 | | 缩放 | 滚轮 | | 删除 | Delete / Backspace | | 全选 | Ctrl + A | | 撤销 | Ctrl + Z | | 重做 | Ctrl + Y | | 复制 | Ctrl + C | | 粘贴 | Ctrl + V | | 对象捕捉 | F3 | | 栅格显示 | F7 | | 正交模式 | F8 | | 捕捉模式 | F9 | | 极轴追踪 | F10 | | 动态输入 | F12 | | 视口裁剪 | Shift + F7 | | 命令行/日志切换 | F2 | | 重复上一命令 | Enter / Space | | 取消/退出命令 | Esc | | 文字原位编辑 | 双击文字 | --- ## 🎯 适用场景 - 🔬 **AI 辅助绘图探索**:快速验证 AI + CAD 的各种落地想法 - 🔧 **智能功能开发**:老图纸参数化、自动拆图、批量排版、尺寸检查…… - 📄 **老图纸参数化改造**:导入已有 DXF → 框选拉伸区域 → 绑定参数 → 秒变参数化模板 - 🏭 **钣金/制冷/橱柜参数化出图**:基于 DXF 模板的快速改图出图 - 📦 **DXF 批处理**:批量变换、整理、导出 DXF 文件 - 👁️ **轻量化预览**:在自己的程序里快速展示和操作 DXF 图形 - 📚 **教学/学习**:理解 CAD 几何运算原理的绝佳入门项目 ## ⚠️ 不适用场景 - 需要复杂几何运算(布尔、求交、样条)→ 用 [Clipper](http://www.angusj.com/delphi/clipper.php) 或 [OpenCASCADE](https://www.opencascade.com/) - 需要完整 DWG 支持 → 用 [ACadSharp](https://github.com/DomCR/ACadSharp) 或 AutoCAD 原生 API - 需要 3D 建模 → 用 [OpenCASCADE](https://www.opencascade.com/) 或 [Helix Toolkit](https://github.com/helix-toolkit/helix-toolkit) --- ## 🏗️ 项目结构 ``` DxfGeoLite/ ├── DxfGeoLite/ # 核心库 │ ├── Entities/ │ │ └── DxfEntities.cs # 实体模型 │ └── Geometry/ │ ├── EntityTransform.cs # 变换操作 │ ├── EntityBounds.cs # 边界计算 │ ├── EntityConvert.cs # 转换工具 │ ├── EntityBulge.cs # 圆弧/凸度计算 │ └── EntityGeom.cs # 几何计算 └── DxfGeoLite.App/ # WPF 可视化编辑器 ├── MainWindow.xaml/.cs # 主窗口(Ribbon + 画布 + 命令行 + 状态栏) ├── DrawingCanvas.cs # 可交互画布(渲染、捕捉、绘制) ├── MTextEditorWindow.xaml/.cs # 多行文字编辑器 ├── SketchSettingsWindow.xaml/.cs # 草图设置对话框 ├── AiSettingsWindow.xaml/.cs # AI 设置对话框(自动检测模型) ├── LogWindow.xaml # 日志窗口 └── Services/ ├── DxfReaderService.cs # DXF/DWG 读取(基于 ACadSharp) ├── DxfWriterService.cs # DXF/DWG 写入(基于 ACadSharp) ├── CadClipboardService.cs # AutoCAD 剪贴板互通 └── AiCommandExecutor.cs # AI 命令解析执行 ``` --- ## 🛣️ 路线图 ### 已完成 ✅ - [x] 基础实体(直线/圆/圆弧/多段线/点/文字) - [x] 更多实体类型(MTEXT/HATCH/INSERT/DIMENSION/ELLIPSE/POLYGON) - [x] DXF/DWG 读写 - [x] AutoCAD 风格 Ribbon 界面 + 多主题 - [x] 多行文字(MTEXT)原位编辑 - [x] 对象捕捉 + 草图设置对话框 - [x] AutoCAD 剪贴板互通(含 MTEXT) - [x] AI 绘图(OpenAI / DeepSeek / Ollama) - [x] 图层管理(颜色/开关/冻结/锁定) - [x] 性能优化(5000+ 实体流畅交互) - [x] 老图纸参数化改造 ### 进行中 / 计划中 🚧 - [ ] 标注样式与编辑 - [ ] 块编辑 - [ ] 线型选择 UI(内置虚线/中心线等常用线型) - [ ] 文字样式管理 - [ ] 操作录制 → 参数化模板生成 - [ ] 单元测试 - [ ] NuGet 包发布 - [ ] 插件机制 - [ ] 更多 AI 能力(智能标注、参数识别、批量改图……) - [ ] Web 版(Blazor) > 💡 有想法?欢迎提 Issue 或者直接开干! --- ## 📄 许可证 MIT License