https://github.com/luanshixia/AutoCADCodePack
AutoCAD Code Pack 功能詳細文檔
概述
AutoCAD Code Pack 是一個基於 AutoCAD .NET API 的開發庫,旨在簡化 AutoCAD 插件開發流程。它通過將複雜的原生 API 封裝為易用的靜態模塊和函數,引入現代 C# 語法(如 LINQ、lambda),幫助開發者減少超過一半的代碼量。該庫最初針對 AutoCAD R18(2010-2012,.NET 3.5)開發,現已支持 AutoCAD R23(2019,.NET 4.7.1),並提供 R18、R19 版本的兼容性項目。
核心模塊及功能
1. Draw 模塊
- 功能:直接在圖紙中繪製實體,提供類似 AutoCAD 命令的函數
- 支持實體類型:直線、圓弧、多邊形、圓、文本等基礎圖形元素
- 特點:無需手動處理數據庫事務和實體提交,簡化繪製流程
- 示例:
// 繪製一條從(0,0,0)到(100,100,0)的直線
var lineId = Draw.Line(new Point3d(0, 0, 0), new Point3d(100, 100, 0));
2. NoDraw 模塊
- 功能:創建內存中的實體(不直接繪製到圖紙)
- 用途:用於臨時計算、預覽或批量處理後再統一提交
- 優勢:減少對圖紙數據庫的頻繁操作,提升性能
- 適用場景:複雜圖形生成、實體屬性預設置
3. Modify 模塊
- 功能:提供類似 AutoCAD 命令的實體編輯功能
- 支持操作:移動、旋轉、縮放、偏移、修剪、延伸等
- 特點:封裝了原生 API 中繁瑣的變換矩陣和幾何計算
- 示例:
// 移動實體到指定位置
Modify.Move(entityId, new Point3d(50, 50, 0)); // 移動到目標點
4. Annotation 模塊
- 功能:繪製標註和註釋元素
- 支持類型:線性標註、半徑標註、角度標註、文本註釋、引線等
- 特性:自動處理標註樣式、文字對齊和關聯關係
- 適用場景:工程圖紙的尺寸標註和技術説明
5. DbHelper 模塊
- 功能:簡化 DWG 數據庫操作
- 核心能力:
- 實體查詢與管理(獲取/刪除/複製實體)
- 圖層、樣式(文字樣式、標註樣式)管理
- 事務處理封裝(自動提交/回滾)
- 優勢:屏蔽原生 API 中複雜的數據庫訪問邏輯
6. QuickSelection 模塊
- 功能:以 LINQ 風格簡化實體篩選和操作(類似 jQuery)
- 特點:
- 支持鏈式查詢(如按類型、圖層、顏色篩選)
- 提供批量操作方法(
QForEach、QWhere等)
- 示例:
// 篩選並刪除長度為0的多段線
ids.QForEach<Polyline>(poly =>
{
if (poly.Length == 0) poly.Erase();
});
7. Interaction 模塊
- 功能:處理用户交互操作
- 支持交互:
- 實體選擇(
GetSelection) - 輸入框(
InputBox) - 命令行提示(
WriteLine) - 選項選擇(
GetOption)
- 優勢:簡化用户輸入驗證和反饋流程
- 示例:
// 獲取用户選擇的多段線
var ids = Interaction.GetSelection("\n選擇多段線", "LWPOLYLINE");
8. Algorithms 模塊
- 功能:提供數學輔助工具和幾何算法
- 包含工具:
- 點、向量、矩陣運算
- 幾何圖形相交檢測
- 座標轉換(世界座標/用户座標)
- 距離和角度計算
- 用途:輔助複雜圖形生成和空間分析
9. MultiDoc 模塊
- 功能:處理多文檔場景
- 核心能力:
- 跨文檔實體複製/移動
- 多文檔狀態管理
- 激活/切換文檔
- 示例:
// 獲取所有打開的文檔
var docs = App.GetAllOpenedDocuments();
10. CustomDictionary 模塊
- 功能:幫助將自定義數據附加到實體
- 用途:存儲實體的額外屬性(如材料、成本、編號等)
- 優勢:無需修改 DWG 原生結構,安全存儲業務數據
11. SymbolPack 模塊
- 功能:繪製標準符號(如箭頭、標高符號、焊接符號等)
- 特點:提供符合行業標準的符號庫,支持參數化調整
- 適用場景:工程圖紙中的標準化符號標註
12. IronPython 模塊
- 功能:支持在 AutoCAD 中使用 IronPython 腳本
- 用途:快速編寫動態腳本,實現輕量級功能擴展
- 優勢:結合 Python 的簡潔語法和 AutoCAD 的強大功能
開發優勢
- 簡化代碼:通過封裝原生 API,減少重複代碼(如事務處理、實體打開/關閉)
- 現代語法:支持 LINQ 和 lambda 表達式,提升代碼可讀性
- 跨版本兼容:支持 AutoCAD R18(2010-2012)到 R23(2019)
- 減少學習成本:無需深入理解 AutoCAD 底層數據庫結構
使用示例
以下是一個清理0長度多段線的命令示例,展示庫的簡潔性:
[CommandMethod("PolyClean0", CommandFlags.UsePickSet)]
public static void PolyClean0()
{
// 獲取用户選擇的多段線
var ids = Interaction.GetSelection("\n選擇多段線", "LWPOLYLINE");
int count = 0;
// 批量處理實體
ids.QForEach<Polyline>(poly =>
{
if (poly.Length == 0)
{
poly.Erase();
count++;
}
});
// 輸出結果
Interaction.WriteLine("已刪除 {0} 個0長度多段線。", count);
}
參考資源
- 官方示例:Test.cs
- 許可證:MIT(允許自由使用、修改和分發,需保留版權信息)
- 輔助工具:SharpDiskSweeper(用於清理大型 DWG 文件和項目)
本文章為轉載內容,我們尊重原作者對文章享有的著作權。如有內容錯誤或侵權問題,歡迎原作者聯繫我們進行內容更正或刪除文章。