一键导入
ifoxcad
IFoxCAD 是一个开源的 AutoCAD .NET 二次开发框架(基于 ObjectARX/AutoCAD .NET API),通过事务管理、扩展方法、链式 API 极大简化 AutoCAD 插件开发,支持 AutoCAD、ZWCAD、GstarCAD、BricsCAD 等主流国产/国际 CAD。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
IFoxCAD 是一个开源的 AutoCAD .NET 二次开发框架(基于 ObjectARX/AutoCAD .NET API),通过事务管理、扩展方法、链式 API 极大简化 AutoCAD 插件开发,支持 AutoCAD、ZWCAD、GstarCAD、BricsCAD 等主流国产/国际 CAD。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
面向 AI 编程助手的开源 GIS、CAD、C#、AI、IoT、3D 技能集合。覆盖 65 个开源项目,提供一站式技能索引、标签搜索、按需加载指南,让 AI 助手在 GIS/CAD/C#/AI/3D 领域获得更准确的代码生成与问题排查能力。
DocuTranslate(xunbu/docutranslate)是基于大语言模型的轻量级本地文件翻译工具,支持 PDF/Word/Excel/Markdown/EPUB/字幕/JSON 等多格式翻译,内置 MinerU PDF 解析、术语表自动生成、Web UI、REST API、Client SDK 与 MCP 接入。
AI/LLM 技能分类索引,覆盖 LLM 应用开发平台、自学习智能体、个人 AI 助手 Gateway、终端编码代理、多模型编排插件、文件翻译工具、AI 编程方法论等领域共 8 个开源项目,按需加载即可获得 Dify、Hermes Agent、OpenClaw、OpenCode、DocuTranslate 等工具的精准 AI 辅助。
geometry-api-net 是一个 .NET Standard 2.0 的空间几何计算库,提供对二维和三维几何对象的创建、解析、序列化以及空间关系运算能力。
GIS(地理信息系统)技能分类索引,覆盖空间数据处理、地图服务、几何运算、Web 可视化等领域共 23 个开源工具,按需加载即可获得 GDAL、QGIS、GeoServer、PostGIS、JTS 等工具的精准 AI 辅助。
robotgo-flow(znlgis/robotgo-flow)是基于 go-vgo/robotgo 构建的 Windows 桌面 RPA 自动化框架,通过声明式 YAML 定义工作流,利用图像模板匹配定位屏幕 UI 元素,自动执行鼠标/键盘/浏览器操作,内置人类行为模拟、交互式录制器与 .NET 10 WPF 托盘应用。
| name | ifoxcad |
| description | IFoxCAD 是一个开源的 AutoCAD .NET 二次开发框架(基于 ObjectARX/AutoCAD .NET API),通过事务管理、扩展方法、链式 API 极大简化 AutoCAD 插件开发,支持 AutoCAD、ZWCAD、GstarCAD、BricsCAD 等主流国产/国际 CAD。 |
| tags | ["autocad","dotnet","csharp","cad","dxf","dwg","plugin"] |
项目地址: https://gitee.com/inspirefunction/ifoxcad
GitHub 镜像: https://github.com/inspirefunction/ifoxcad
NuGet:
IFoxCAD.Cad许可证: LGPL-2.1
IFoxCAD 通过统一的事务封装和大量扩展方法,让 AutoCAD .NET API 的开发体验大幅提升:
using var tr = new DBTrans();db.AddEntityToModelSpace(line, circle, ...)dotnet add package IFoxCAD.Cad
项目需引用对应 CAD 的 acdbmgd、acmgd、accoremgd,并设置 Copy Local = false。
参考官方模板:https://gitee.com/inspirefunction/ifoxcad/tree/master/Examples
using IFoxCAD.Cad;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Runtime;
[assembly: ExtensionApplication(typeof(MyApp))]
[assembly: CommandClass(typeof(MyCommands))]
public class MyApp : IExtensionApplication
{
public void Initialize() { /* 加载时执行 */ }
public void Terminate() { /* 卸载时执行 */ }
}
[CommandMethod("DRAWLINE")]
public void DrawLine()
{
using var tr = new DBTrans(); // 自动管理 Database/Transaction
var line = new Line(Point3d.Origin, new Point3d(100, 100, 0));
tr.CurrentSpace.AddEntity(line); // 加入当前空间
tr.Commit();
}
DBTrans 自动持有:
Database / TransactionBlockTable / BlockTableRecord / LayerTable / TextStyleTable / LinetypeTable ...CurrentSpace / ModelSpace / PaperSpacevar ed = Env.Editor;
// 取一个点
if (ed.GetPoint("\n请选择起点:").GetPointResult(out var p)) {
// p 是 Point3d
}
// 取角度、整数、关键字
ed.GetDouble("\n请输入半径:").GetDoubleResult(out var r);
ed.GetKeyword("\n请选择 [圆(C)/矩形(R)]:", "C", "R").GetStringResult(out var k);
// 选择集
var sel = ed.SelectAll(new SelectionFilter(new[] {
new TypedValue((int)DxfCode.Start, "LINE")
}));
using var tr = new DBTrans();
var line = new Line(Point3d.Origin, new Point3d(10, 0, 0)) {
LayerId = tr.LayerTable.GetOrCreate("墙体", l => l.Color = ColorIndex.Red),
ColorIndex = 1
};
var circle = new Circle(new Point3d(5, 0, 0), Vector3d.ZAxis, 2);
var text = new DBText { Position = new Point3d(0, -5, 0),
TextString = "Hello", Height = 2 };
tr.CurrentSpace.AddEntity(line, circle, text);
tr.Commit();
using var tr = new DBTrans();
// 1. 创建块定义
ObjectId btrId = tr.BlockTable.Add("MyBlock", btr => {
btr.Origin = Point3d.Origin;
btr.AppendEntity(new Circle(Point3d.Origin, Vector3d.ZAxis, 1));
btr.AppendEntity(new Line(new Point3d(-1,0,0), new Point3d(1,0,0)));
});
// 2. 插入块参照
var br = new BlockReference(new Point3d(10, 10, 0), btrId);
tr.CurrentSpace.AddEntity(br);
// 3. 块属性
br.AddAttributes(("TAG1", "VALUE1"), ("TAG2", "VALUE2"));
tr.Commit();
using var tr = new DBTrans();
var layerId = tr.LayerTable.GetOrCreate("钢筋", l => {
l.Color = ColorIndex.Yellow;
l.LineWeight = LineWeight.LineWeight030;
});
IFoxCAD 提供大量基于 AutoCAD Geometry 的扩展:
var line = new Line(p1, p2);
double angle = line.Angle();
double len = line.Length;
var poly = new Polyline();
poly.AddVertexAt(0, new Point2d(0, 0), 0, 0, 0);
poly.AddVertexAt(1, new Point2d(10, 0), 0, 0, 0);
poly.AddVertexAt(2, new Point2d(10, 10), 0, 0, 0);
poly.Closed = true;
double area = poly.Area;
var ed = Env.Editor;
var res = ed.GetSelection(new SelectionFilter(new[] {
new TypedValue(0, "LINE,LWPOLYLINE"),
new TypedValue(8, "钢筋") // 限定图层
}));
if (res.Status == PromptStatus.OK)
{
using var tr = new DBTrans();
foreach (var id in res.Value.GetObjectIds())
{
var ent = tr.GetObject<Entity>(id);
ent.ColorIndex = 1;
}
tr.Commit();
}
public class MyCommands
{
[CommandMethod("MY_HELLO", CommandFlags.Modal)]
public void Hello() => Env.Editor.WriteMessage("\nHello IFoxCAD");
[CommandMethod("MY_PUR", CommandFlags.Session)]
public void Purge() { /* ... */ }
}
IFoxCAD 通过条件编译支持:
IFOX_CAD2025 / IFOX_CAD2024 ...ZWCAD / GCAD 等#if ZWCAD
using ZwSoft.ZwCAD.DatabaseServices;
#else
using Autodesk.AutoCAD.DatabaseServices;
#endif
dotnet new classlib 创建 .NET 类库项目IFoxCAD.Cad 包,添加 AutoCAD 依赖 DLL 引用(Copy Local=false)IExtensionApplication 实现类,添加 [assembly: ExtensionApplication] 和 [assembly: CommandClass] 特性[CommandMethod] 方法中编写业务逻辑:using var tr = new DBTrans() → 创建/修改实体 → tr.Commit()new DBTrans() 或 HostMgd 无界面打开 DWG 文件tr.CurrentSpace 中的实体,tr.GetObject<T>(id) 获取强类型对象tr.Commit() 保存,输出到新 DWGdb.UsingTrans() 在跨命令操作时使用Editor.Regen() 仅必要时调用BlockTableRecord.UpdateAnonymousBlocks 同步实例| 问题 | 解决 |
|---|---|
eNotInDatabase | 实体未加入 BlockTableRecord 即访问 Id |
| 修改后界面不刷新 | ent.RecordGraphicsModified(true) 或 Editor.Regen() |
引用 acdbmgd 报错 | 设置 Copy Local=false |
| 脱离 CAD 单元测试 | 用 HostMgd Mock 或 IFoxCAD 提供的测试基类 |
using var tr = new DBTrans() 是几乎所有操作的起点,自动管理 Database 和 Transaction。eNotInDatabase;② 引用 AutoCAD 依赖 DLL 时必须设置 Copy Local=false;③ 条件编译宏(IFOX_CAD2025/ZWCAD 等)用于多 CAD 兼容;④ 插件入口需实现 IExtensionApplication,在 Initialize() 中执行初始化、Terminate() 中执行清理,命令通过 [CommandMethod] 特性声明式注册。using var tr = new DBTrans() → tr.CurrentSpace.AddEntity(...) 或 tr.LayerTable.GetOrCreate("name") → tr.Commit()。选择集操作:ed.SelectAll(new SelectionFilter(...)) → tr.GetObject<T>(id) → 修改 → tr.Commit()。