# Netcad **Repository Path**: zmlr007/Netcad ## Basic Information - **Project Name**: Netcad - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-21 - **Last Updated**: 2025-11-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # NetCad - AutoCAD二次开发封装库 [![.NET Framework](https://img.shields.io/badge/.NET%20Framework-4.8-blue.svg)](https://dotnet.microsoft.com/download/dotnet-framework/net48) [![AutoCAD](https://img.shields.io/badge/AutoCAD-2013--2023-orange.svg)](https://www.autodesk.com/products/autocad) [![License](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE) [![Version](https://img.shields.io/badge/Version-2.3.0.1-brightgreen.svg)](NetCad/Properties/AssemblyInfo.cs) [![Build Status](https://img.shields.io/badge/Build-Passing-brightgreen.svg)](https://github.com/zhangfuwang666/NetCad) [![Code Quality](https://img.shields.io/badge/Code%20Quality-A%2B-brightgreen.svg)](https://github.com/zhangfuwang666/NetCad) ## 📖 项目简介 NetCad 是一个专为AutoCAD二次开发设计的.NET封装库,旨在简化AutoCAD API的使用,提高开发效率。该库提供了丰富的工具类和方法,让开发者能够更快速、更简洁地开发AutoCAD插件。 ### ✨ 主要特性 - 🚀 **简化API调用** - 封装复杂的AutoCAD API,提供简洁易用的接口 - 🎯 **功能全面** - 覆盖实体绘制、数据库操作、用户交互等核心功能 - 🔧 **扩展性强** - 模块化设计,支持自定义扩展 - 🛡️ **线程安全** - 提供线程安全的文档操作机制 - 📊 **数据管理** - 灵活的数据存储和扩展数据支持 - 🎨 **交互友好** - 丰富的用户交互和动态操作功能 - ⚡ **性能优化** - 高效的算法实现和内存管理 - 🎛️ **界面集成** - 支持Ribbon界面定制 ### 🏗️ 架构特点 - **模块化设计** - 清晰的模块划分,便于维护和扩展 - **扩展方法** - 大量使用C#扩展方法,提供流畅的API - **工厂模式** - 实体创建采用工厂模式,简化对象创建 - **事务安全** - 所有数据库操作都支持事务处理 - **错误处理** - 完善的异常处理机制 ## 👨‍💻 作者信息 - **作者**: ZhangFuWang - **邮箱**: fuwang.zhang@qq.com - **GitHub**: [zhangfuwang666/NetCad](https://github.com/zhangfuwang666/NetCad) - **许可证**: MIT License ## 🎯 支持版本 - **AutoCAD**: 2013 - 2023 - **.NET Framework**: 4.8 - **开发语言**: C# - **开发环境**: Visual Studio 2017+ ## 📦 安装说明 ### 环境要求 1. **Visual Studio** 2017 或更高版本 2. **.NET Framework 4.8** 3. **AutoCAD 2013-2023** 任一版本 4. **Windows** 7/8/10/11 ### 安装步骤 1. **克隆项目** ```bash git clone https://github.com/zhangfuwang666/NetCad.git ``` 2. **打开解决方案** ```bash cd NetCad start NetCad.sln ``` 3. **还原NuGet包** - 在Visual Studio中右键解决方案 - 选择"还原NuGet包" 4. **编译项目** - 选择Release配置 - 生成解决方案 ### NuGet包依赖 ```xml ``` ## 🚀 快速开始 ### 基本使用示例 ```csharp using NetCad; using Autodesk.AutoCAD.Geometry; // 绘制一条直线 Point3d startPoint = new Point3d(0, 0, 0); Point3d endPoint = new Point3d(100, 100, 0); ObjectId lineId = Draw.Line(startPoint, endPoint); // 获取用户输入 string userInput = Interaction.GetString("请输入文字: "); // 创建图层 ObjectId layerId = DbHelper.GetLayerId("新图层"); // 线程安全操作 App.LockAndExecute(() => { // 在这里进行AutoCAD操作 Draw.Circle(new Point3d(50, 50, 0), 25); }); ``` ### 实体绘制示例 ```csharp // 绘制圆 ObjectId circleId = Draw.Circle(new Point3d(0, 0, 0), 50); // 绘制多段线 Point3d[] points = { new Point3d(0, 0, 0), new Point3d(100, 0, 0), new Point3d(100, 100, 0), new Point3d(0, 100, 0) }; ObjectId polylineId = Draw.Polyline(points); // 插入块 ObjectId blockId = Draw.Insert("块名称", new Point3d(0, 0, 0)); ``` ## 📚 API文档 ### 🔧 应用程序管理 (App) 应用程序级别的管理功能,包括文档操作、版本检测等。 #### 文档操作 ```csharp // 获取当前文件夹路径 string currentFolder = App.CurrentFolder; // 获取文档文件夹路径 string docFolder = App.DocumentFolder; // 检查文档是否已保存 bool isSaved = App.IsDocumentSaved(); // 获取所有打开的文档 List docs = App.GetAllOpenedDocuments(); // 线程安全执行 App.LockAndExecute(() => { // 安全操作代码 }); // 打开文档 Document doc = App.OpenDocument("C:\\path\\to\\file.dwg"); ``` #### 版本检测 ```csharp // 获取AutoCAD版本 string version = App.GetAcadRVersion(); // 获取年份版本 string year = App.GetAcadYearVersion(); ``` ### 🗄️ 数据库操作 (DbHelper) 提供符号表操作、组管理、扩展数据存储等功能。 #### 图层操作 ```csharp // 获取图层ID ObjectId layerId = DbHelper.GetLayerId("图层名"); // 获取所有图层名称 string[] layerNames = DbHelper.GetAllLayerNames(); // 确保图层开启 DbHelper.EnsureLayerOn("图层名"); ``` #### 块操作 ```csharp // 获取块ID ObjectId blockId = DbHelper.GetBlockId("块名"); // 获取所有块名称 string[] blockNames = DbHelper.GetAllBlockNames(); // 获取块属性 BlockReference blockRef = blockId.QOpenForRead(); Dictionary attrs = blockRef.GetBlockAttributes(); ``` #### 扩展数据操作 ```csharp // 使用新的FlexDataStore(推荐) var dataStore = new FlexDataStore(dictionaryId); dataStore.SetValue("key", "value"); string value = dataStore.GetValue("key"); // 传统XData操作(已废弃) entity.SetCode("代码值"); string code = entity.GetCode(); ``` ### 💬 用户交互 (Interaction) 提供命令行交互、实体选择、视图操作等功能。 #### 用户输入 ```csharp // 获取字符串 string input = Interaction.GetString("请输入文字: "); // 获取数值 double value = Interaction.GetValue("请输入数值: "); // 获取点 Point3d point = Interaction.GetPoint("请选择点: "); // 获取关键字 string[] keywords = { "选项1", "选项2", "选项3" }; string choice = Interaction.GetKeywords("请选择: ", keywords); ``` #### 实体选择 ```csharp // 选择单个实体 ObjectId entityId = Interaction.GetEntity("请选择实体: "); // 选择多个实体 ObjectId[] entities = Interaction.GetSelection("请选择多个实体: "); // 窗口选择 ObjectId[] windowEntities = Interaction.GetWindowSelection( new Point3d(0, 0, 0), new Point3d(100, 100, 0) ); ``` #### 视图操作 ```csharp // 高亮对象 Interaction.HighlightObjects(entityIds); // 缩放对象 Interaction.ZoomObjects(entityIds); // 取消高亮 Interaction.UnhighlightObjects(entityIds); ``` ### 🎨 实体绘制 (Draw) 提供各种几何实体的绘制功能,自动添加到当前空间。 #### 基本几何体 ```csharp // 绘制直线 ObjectId lineId = Draw.Line(point1, point2); // 绘制圆 ObjectId circleId = Draw.Circle(center, radius); // 绘制圆弧 ObjectId arcId = Draw.Arc3P(point1, point2, point3); // 绘制多段线 ObjectId polylineId = Draw.Polyline(points); // 绘制矩形 ObjectId rectId = Draw.Rectang(minPoint, maxPoint); ``` #### 复杂几何体 ```csharp // 绘制椭圆 ObjectId ellipseId = Draw.Ellipse(center, endX, radiusY); // 绘制样条曲线 ObjectId splineId = Draw.SplineFit(points); // 绘制填充 ObjectId hatchId = Draw.Hatch("SOLID", seedPoint); // 绘制表格 ObjectId tableId = Draw.Table(position, title, contents, rowHeight, columnWidth, textHeight); ``` #### 块操作 ```csharp // 插入块 ObjectId blockId = Draw.Insert("块名", position); // 创建块 ObjectId newBlockId = Draw.Block(entityIds, "新块名"); // 从外部文件插入块 ObjectId externalBlockId = Draw.BlockInDwg("块名", "外部文件.dwg"); ``` ### 🔧 实体创建 (NoDraw) 创建实体但不添加到空间,用于复杂几何体构建。 ```csharp // 创建直线(不添加到空间) Line line = NoDraw.Line(point1, point2); // 创建圆(不添加到空间) Circle circle = NoDraw.Circle(center, radius); // 创建多段线(不添加到空间) Polyline polyline = NoDraw.Polyline(points); // 手动添加到空间 ObjectId entityId = line.AddToCurrentSpace(); ``` ### 🎯 动态交互 (Jig) 提供动态交互功能,支持实时预览和操作。 ```csharp // 动态插入实体 ObjectId entityId = Interaction.InsertEntity(entity, "指定插入点"); // 动态缩放插入 ObjectId scaledEntityId = Interaction.InsertScalingEntity(entity, basePoint, "指定对角点"); // 动态旋转插入 ObjectId rotatedEntityId = Interaction.InsertRotationEntity(entity, center, "指定方向"); ``` ### 📊 数据存储 (FlexDataStore) 灵活的数据存储系统,支持任意键值对。 ```csharp // 创建数据存储 var dataStore = new FlexDataStore(dictionaryId); // 存储数据 dataStore.SetValue("name", "张三") .SetValue("age", "25") .SetValue("department", "工程部"); // 读取数据 string name = dataStore.GetValue("name"); string age = dataStore.GetValue("age"); ``` ### 🧮 算法工具 (Algorithms) 提供丰富的几何算法和数学计算功能。 #### 曲线操作 ```csharp // 获取点到曲线的距离 double distance = curve.GetDistToPoint(point); // 获取曲线上的点 Point3d pointOnCurve = curve.GetPointAtDist(distance); // 获取子曲线 Curve subCurve = curve.GetSubCurve(new Interv(start, end)); // 获取曲线上的点集合 IEnumerable points = curve.GetPoints(1.0); // 参数间隔1.0 ``` #### 几何计算 ```csharp // 获取包围盒 Extents3d extents = entityIds.GetExtents(); // 获取中心点 Point3d center = extents.GetCenter(); // 扩展包围盒 Extents3d expanded = extents.Expand(1.5); // 扩展1.5倍 // 判断点是否在包围盒内 bool isInside = extents.IsPointIn(point); ``` #### 多段线操作 ```csharp // 判断是否自相交 bool isSelfIntersecting = polyline.IsSelfIntersecting(); // 获取质心 Point3d centroid = polyline.Centroid(); // 判断点是否在多段线内 bool isInside = polyline.IsPointIn(point); // 连接多段线 Polyline joined = polyline1.PolyJoin(polyline2); ``` #### 向量计算 ```csharp // 计算角度 double angle = vector1.ZeroToPiAngleTo(vector2); // 计算叉积 double cross = vector1.Kross(vector2); // 向量转换 Vector3d vector3d = vector2d.ToVector3d(); ``` ### 🔄 实体修改 (Modify) 提供实体变换和编辑功能。 #### 基本变换 ```csharp // 移动实体 entityId.Move(new Vector3d(10, 10, 0)); // 旋转实体 entityId.Rotate(center, Math.PI / 2); // 旋转90度 // 缩放实体 entityId.Scale(basePoint, 2.0); // 放大2倍 // 镜像实体 ObjectId mirroredId = entityId.Mirror(mirrorLine, true); // 复制镜像 ``` #### 高级操作 ```csharp // 偏移曲线 ObjectId offsetId = curveId.Offset(distance, sidePoint); // 打断曲线 ObjectId[] brokenIds = curveId.Break(point1, point2); // 炸开实体 ObjectId[] explodedIds = entityId.Explode(); // 删除实体 entityId.Erase(); ``` #### 组操作 ```csharp // 创建组 ObjectId groupId = entityIds.AddGroup("组名"); // 添加到组 Modify.AppendToGroup(groupId, entityId1, entityId2); // 解组 Modify.Ungroup(groupId); // 设置图层 entityId.SetLayer("图层名"); // 设置线型 entityId.SetLinetype("线型名", 1.0); ``` ### 🛠️ 辅助工具 (Helper) 提供各种辅助功能。 #### 文件操作 ```csharp // 保存文件对话框 string savePath = Interaction.SaveFileDialogBySystem("保存文件", "默认文件名", "DWG文件|*.dwg"); // 打开文件对话框 string openPath = Interaction.OpenFileDialogBySystem("打开文件", "", "DWG文件|*.dwg"); // 选择文件夹 string folderPath = Interaction.FolderDialog("选择文件夹"); ``` #### Excel操作 (NpoiHelper) ```csharp // 读取Excel文件 var workbook = NpoiHelper.ReadExcel("文件路径.xlsx"); // 写入Excel文件 NpoiHelper.WriteExcel("文件路径.xlsx", data); // 读取特定工作表 var sheet = NpoiHelper.GetSheet(workbook, "Sheet1"); // 读取单元格数据 string cellValue = NpoiHelper.GetCellValue(sheet, 0, 0); ``` #### 字符串处理 (StringHelper) ```csharp // 字符串扩展方法 string result = StringHelper.SomeMethod(input); ``` #### 系统信息 (SystemHelper) ```csharp // 获取系统信息 var systemInfo = SystemHelper.GetSystemInfo(); ``` ### 🎛️ Ribbon界面 (Ribbon) 支持自定义Ribbon界面。 #### 基本使用 ```csharp // 加载Ribbon菜单 RibbonMenuLoader.LoadRibbonMenu("RibbonMenu.xml"); // 处理命令 [CommandMethod("MyCommand")] public void MyCommand() { // 命令实现 } ``` #### XML配置示例 ```xml