# DrawingBoard **Repository Path**: dlj12/drawing-board ## Basic Information - **Project Name**: DrawingBoard - **Description**: 基于 WPF (.NET 8) 的矢量绘图应用,提供图层管理、撤销重做、网格捕捉、对齐分布、编组变换、阵列、镜像等完整绘图功能,类似轻量版 AutoCAD。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-18 - **Last Updated**: 2026-07-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # DrawingBoard 基于 WPF (.NET 8) 的矢量绘图应用,提供图层管理、撤销重做、网格捕捉、对齐分布、编组变换、阵列、镜像等完整绘图功能,类似轻量版 AutoCAD。 ## 技术栈 | 技术 | 说明 | |------|------| | .NET 8.0 | 目标框架 | | WPF | UI 框架 | | Stylet 1.3.6 | MVVM 框架 + IoC 容器 | | Fluent.Ribbon 10.1.0 | Office 风格 Ribbon 工具栏 | | System.Text.Json | 文件序列化 | ## 架构 **MVVM + 依赖注入 + Conductor 模式** ``` Bootstrapper (StyletIoC DI 容器) ├── Models │ ├── DrawingDocument # 文档模型(图元列表 + 图层) │ ├── Entities/* # 图元(直线、圆、矩形、多段线…) │ └── Geometry/* # 几何基础(Point2D、Vector2D、Rect2D) ├── Services │ ├── IToolManager # 工具注册与切换 │ ├── IDocumentService # 文件新建/打开/保存 │ ├── ISelectionService # 图元选择管理 │ ├── IUndoRedoService # 撤销/重做栈 │ ├── ISnapService # 网格/端点/中点捕捉 │ ├── ILayerService # 图层管理 │ └── DocumentSerializer # JSON 序列化 ├── Renderer │ ├── IDrawingRenderer # 渲染接口 │ ├── VisualTreeRenderer # DrawingContext 渲染实现 │ └── HitTestService # 命中测试 ├── ViewModels │ ├── ShellViewModel # 主窗口 Conductor │ ├── DrawingCanvasViewModel# 画布逻辑 │ ├── RibbonViewModel # 工具栏逻辑 │ ├── LayerPanelViewModel # 图层面板 │ ├── PropertyPanelViewModel# 属性面板 │ └── StatusBarViewModel # 状态栏 └── Views ├── ShellView.xaml # 主窗口布局 └── DrawingCanvasView.xaml # 画布视图 ``` ### 软件图片 ![输入图片说明](DrawingBoard/Resources/drawingBoard1.png) ![输入图片说明](DrawingBoard/Resources/drawingBoard2.png) ![输入图片说明](DrawingBoard/Resources/drawingBoard3.png) ![输入图片说明](DrawingBoard/Resources/drawingBoard4.png) ## 功能特性 ### 绘图工具(绘图选项卡) | 工具 | 说明 | |------|------| | 直线 | 拖拽绘制线段,支持 Shift 正交约束 | | 圆(半径) | 圆心 + 半径画圆 | | 圆(三点) | 三点确定一个圆 | | 矩形 | 拖拽绘制矩形,支持 Shift 正方约束 | | 正多边形(半径) | 圆心 + 半径画正 N 边形(3-12 边) | | 正多边形(边长) | 边长 + 旋转角画正 N 边形 | | 平行四边形 | 三点确定平行四边形 | | 多段线 | 连续点击生成折线,支持闭合、Shift 延伸 | | 圆弧(三点) | 起点 + 中点 + 终点画弧 | | 圆弧(圆心) | 圆心 + 半径 + 起始/终止角度画弧 | | 线性标注 | 两点间标注距离 | | 半径标注 | 圆/圆弧的半径标注 | | 两点标注 | 任意两点间距标注 | ### 修改操作(修改选项卡) - **剪贴板**:复制 (Ctrl+C)、粘贴 (Ctrl+V,自动偏移 20px)、删除 (Delete)、全选 (Ctrl+A) - **撤销/重做**:完整 Undo/Redo 栈 (Ctrl+Z / Ctrl+Y) - **变换**:移动、旋转、缩放、**镜像**(鼠标绘制任意角度对称轴,可选保留原图) - **阵列**:环形阵列(圆心 + 数量 + 角度)、矩形阵列(行列数 + 间距) - **对齐**:左对齐、右对齐、顶对齐、底对齐、横向居中、纵向居中 - **修剪**:修剪指定图元、打断选中的线段 - **编组**:组合 (Group)、解除组合 (Ungroup)、打散 (Explode) ### 图层系统 - 多图层管理,支持添加、删除、排序 - 每层可设置:线条颜色、填充颜色、线宽、线型(实线/虚线/点线/中心线/虚线点划线) - 可见性、冻结控制 - 新建图元自动归属当前活动图层 - 图层属性自动应用于新图元 ### 视图控制(视图选项卡) | 功能 | 说明 | |------|------| | 平移 | 拖拽平移画布 | | 适应窗口 | 缩放至全部图元可见 | | 网格 | 显示/隐藏网格,可调间距 (1-1000) | | 网格捕捉 | 吸附到网格交点 | | 端点捕捉 | 吸附到图元端点,可调捕捉半径 (1-50px) | | 中点捕捉 | 吸附到线段中点 | | 标注显示 | 显示/隐藏所有标注 | | 画布背景 | 自定义背景颜色 | | 缩放 | Ctrl + 滚轮 | ### 选择与交互 - **选择工具** (Esc):点选图元、框选、移动、旋转手柄、抓点缩放 - **光标提示**:工具激活时光标旁显示操作提示(如"镜像轴第一个点") - **正交约束**:Shift 键约束水平/垂直方向 - **右键菜单**:取消绘制、删除选中 ### 文件操作 - 格式:JSON(`.json`) - 保存图元列表、图层配置、网格设置、画布状态 - 支持多态图元序列化(通过 `$type` 标记区分类型) - 导出 PNG、SVG ## 项目结构 ``` DrawingBoard/ ├── App.xaml # 应用入口 ├── Bootstrapper.cs # DI 容器配置 ├── Commands/ # RelayCommand 等 ├── Converters/ # 值转换器 ├── Helpers/ # 工具辅助类 ├── Models/ │ ├── DrawingDocument.cs # 文档模型 │ ├── DrawingLayer.cs # 图层模型 │ ├── DrawingSettings.cs # 绘图设置 │ ├── DocumentSaveData.cs # 序列化 DTO │ ├── Entities/ # 图元类(11 种图元) │ └── Geometry/ # 几何基础类型 ├── Renderer/ # 渲染层 ├── Resources/ # 图标资源 (SVG/PNG) ├── Services/ # 服务层(17 个服务) ├── Tools/ # 绘图工具实现(16 个工具) ├── ViewModels/ # ViewModel 层 └── Views/ # XAML 视图 ``` ## 运行 ```bash dotnet run --project DrawingBoard.csproj ``` 或使用 Visual Studio 2022+ 打开解决方案,以 `net8.0-windows` 目标运行。