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)
  • 特點
  • 支持鏈式查詢(如按類型、圖層、顏色篩選)
  • 提供批量操作方法(QForEachQWhere 等)
  • 示例
// 篩選並刪除長度為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 的強大功能

開發優勢

  1. 簡化代碼:通過封裝原生 API,減少重複代碼(如事務處理、實體打開/關閉)
  2. 現代語法:支持 LINQ 和 lambda 表達式,提升代碼可讀性
  3. 跨版本兼容:支持 AutoCAD R18(2010-2012)到 R23(2019)
  4. 減少學習成本:無需深入理解 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 文件和項目)