大家好,又見(jiàn)面了,我是你們的朋友全棧君。 目 錄
Blog Links
一、前言AutoCAD(Autodesk Computer Aided Design)是 Autodesk(歐特克)公司首次于 1982 年開(kāi)發(fā)的自動(dòng)計(jì)算機(jī)輔助設(shè)計(jì)軟件,在土木建筑,裝飾裝潢,工業(yè)制圖,工程制圖,電子工業(yè),服裝加工等諸多領(lǐng)域有著廣泛的應(yīng)用,主要用于二維繪圖、詳細(xì)繪制、設(shè)計(jì)文檔和基本三維設(shè)計(jì),現(xiàn)已經(jīng)成為國(guó)際上廣為流行的繪圖工具。 ??上世紀(jì) 80 年代末 90 年代初, Guido van Rossum 在荷蘭國(guó)家數(shù)學(xué)和計(jì)算機(jī)科學(xué)研究所設(shè)計(jì)出計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言 Python 。 Python 是一個(gè)高層次的結(jié)合了解釋性、編譯性、互動(dòng)性和面向?qū)ο蟮哪_本語(yǔ)言,具有很強(qiáng)的可讀性。相比其他語(yǔ)言,語(yǔ)法結(jié)構(gòu)更具特色。同時(shí),它也是一種跨平臺(tái)的計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言,越來(lái)越多地用于獨(dú)立的、大型項(xiàng)目的開(kāi)發(fā)。 為什么采用 Python 語(yǔ)言二次開(kāi)發(fā) AutoCAD ? ??·?Python 是一種代表簡(jiǎn)單主義思想的語(yǔ)言,簡(jiǎn)單易學(xué),應(yīng)用范圍廣泛 。 ??·?Python 擁有大量第三方庫(kù),可輕易實(shí)現(xiàn)各種應(yīng)用程序間的數(shù)據(jù)交換,如 AutoCAD 與 Excel / Word 間的數(shù)據(jù)交換。 ??·?只要具有基礎(chǔ)的 Python 編程能力,就可實(shí)現(xiàn)對(duì) AutoCAD 的二次開(kāi)發(fā),而不必特意學(xué)習(xí) VBA 或者 LISP 。 吾生也有涯,而知也無(wú)涯,以有涯隨無(wú)涯,殆己。 ??總之,人的精力是有限的, Windows 平臺(tái)上的應(yīng)用程序是各種各樣的,我們力爭(zhēng)只熟練掌握一門編程語(yǔ)言就能將各種應(yīng)用程序串聯(lián)起來(lái),以實(shí)現(xiàn)數(shù)據(jù)的順利傳遞,從而大幅度地提高工作效率和質(zhì)量。這也是我當(dāng)時(shí)在全網(wǎng)參考代碼很少的情況下堅(jiān)持用 Python 調(diào)用 CAD 的原因。 ??這個(gè)過(guò)程并非順利,本人純野生學(xué)習(xí) Python,很多小 bug 都要查很久的資料才能解決。因粗心看錯(cuò)了幫助文檔的參數(shù)定義,在繪制橢圓這卡了將近一個(gè)月;因不了解 CAD 系統(tǒng)對(duì)顏色的定義規(guī)則,在模型空間背景色設(shè)置上卡了將近3個(gè)月,通過(guò)不斷測(cè)試,硬是靠最原始的總結(jié)規(guī)律得到了顏色指定的換算公式;因不了解 Python 中的數(shù)據(jù)類型如何對(duì)應(yīng) AutoCAD 中的 Variant,圖案填充這又卡了好幾個(gè)月,最終在 ke1078 大神的幫助下,順利實(shí)現(xiàn)了圖案填充的繪制。 ??為了使后續(xù)的學(xué)習(xí)者少走彎路,把寶貴的時(shí)間用于所研究的問(wèn)題上,而非軟件操作層面,特此,將本人所了解到的 Python 語(yǔ)言二次開(kāi)發(fā) CAD 的有關(guān)內(nèi)容記錄在此系列博客上。還需說(shuō)明的是,因本人能力和水平確實(shí)有限,博客中的有關(guān)表述可能不嚴(yán)謹(jǐn),甚至錯(cuò)誤,還請(qǐng)大家及時(shí)批評(píng)指正。 二、ActiveX Automation??AutoCAD 二次開(kāi)發(fā)主要接口有 ObjectARX 接口、.net API 接口、AutoLisp 接口、ActiveX (com) 接口,更多詳見(jiàn): AutoCAD二次開(kāi)發(fā)簡(jiǎn)介 。 AutoCAD API Performance ??ActiveX Automation 是 ActiveX 為 Windows 用戶提供的一項(xiàng)重要技術(shù),可以使各應(yīng)用程序間通過(guò)數(shù)據(jù)嵌入或鏈接的方式共享數(shù)據(jù),并在 Windows 系統(tǒng)統(tǒng)一管理下進(jìn)行協(xié)調(diào),讓這些應(yīng)用程序以一定的流程相互溝通,相互控制,即一個(gè)程序暴露其可用對(duì)象,另一個(gè)程序控制這些對(duì)象,設(shè)置屬性、調(diào)用方法,從而實(shí)現(xiàn)某種功能,完成所要求的動(dòng)作。 ??AutoCAD 程序開(kāi)放某些對(duì)象給 Windows 系統(tǒng),使用程序語(yǔ)言并通過(guò) ActiveX Automation,我們就可以對(duì)這些對(duì)象進(jìn)行存取。 AutoCAD ActiveX 接口的主要構(gòu)件就對(duì)象,每一個(gè)顯露的對(duì)象均精確代表一個(gè) AutoCAD 組件。 ??AutoCAD 以分層結(jié)構(gòu)來(lái)組織對(duì)象,分層結(jié)構(gòu)的視圖稱為“對(duì)象模型”,如下圖所示。Application 對(duì)象是 AutoCAD ActiveX Automation 對(duì)象模型的根對(duì)象,通過(guò)它,用戶可以訪問(wèn)任何其他的對(duì)象或任何對(duì)象指定的特性或方法。對(duì)象模型給出了上級(jí)對(duì)象與下級(jí)對(duì)象之間的訪問(wèn)關(guān)系。 AutoCAD對(duì)象模型 (部分) ??AutoCAD 對(duì)象都至少具有一個(gè)屬性,用于描述對(duì)象。例如,圓具有半徑、面積、線型等屬性,通過(guò)這些屬性能描述出一個(gè)具體的圓。 ??·?參考資料: AutoCAD ActiveX 二次開(kāi)發(fā)技術(shù) 。 三、開(kāi)發(fā)文檔/工具3.1 AutoCAD Help??AutoCAD 二次開(kāi)發(fā)的兩個(gè)官方幫助文檔: ActiveX Reference Guide 和 ActiveX Develop’s Guide 可在 CAD 的安裝目中獲得,兩個(gè)文件名分別為:acadauto.chm 和 acad_aag.chm 。 ??可按如下方式獲?。?首先,安裝文件搜索神器 Everything;然后,在搜索欄內(nèi)輸入 acadauto.chm,便可看到 ActiveX Reference Guide 文件及其所在路徑,該文件是隨 AutoCAD 程序的安裝一起附帶到你的電腦內(nèi)的,只要你安裝了 CAD,該文件必然存在。 幫助文檔的獲取 3.2 ArxDbg??ArxDbg 是 ObjectARX SDK 中包含多年的示例項(xiàng)目的名稱。它的主要目的是演示如何使用 ObjectARX API,但它本身就是一個(gè)完全獨(dú)立的實(shí)用程序。ObjectARX 程序員經(jīng)常在開(kāi)發(fā)期間使用此實(shí)用程序來(lái)測(cè)試和執(zhí)行他們的應(yīng)用程序代碼。更多詳見(jiàn): [ObjectARX] ArxDbg介紹、自動(dòng)加載及其下載 。 ArxDbg ??·?下載鏈接: ACAD二次開(kāi)發(fā)必備輔助工具-ArxDbg 2005-2021各版本 。 四、可用Python庫(kù)??在介紹各種 Python 庫(kù)前,有必要對(duì) AutoCAD 的文件系統(tǒng)做一個(gè)簡(jiǎn)單的了解。 ??dwg 是 AutoCAD 以及基于 AutoCAD 的軟件保存設(shè)計(jì)數(shù)據(jù)所用的一種專有文件格式 (AutoCAD的圖形文件)。 ??dxf 是 AutoCAD 繪圖交換文件,它是 Autodesk 公司開(kāi)發(fā)的用于 AutoCAD 與其它軟件之間進(jìn)行 CAD 數(shù)據(jù)交換的 CAD 數(shù)據(jù)文件格式。 ??dxf (圖形交換文件) 是一種開(kāi)放的矢量數(shù)據(jù)格式,它包含對(duì)應(yīng)的 dwg 文件的全部信息,主要用于不同版本 CAD 間的數(shù)據(jù)交換??梢苑譃閮深悾篈SCII 格式和二進(jìn)制格式;ASCII 具有可讀性好的特點(diǎn),但占用的空間較大;二進(jìn)制格式則占用的空間小、讀取速度快。由于 AutoCAD 是最流行的 CAD 系統(tǒng),DXF 也被廣泛使用,成為事實(shí)上的標(biāo)準(zhǔn)。絕大多數(shù) CAD 系統(tǒng)都能讀入或輸出 DXF 文件。ASCII 格式的 DXF 可以用文本編輯器進(jìn)行查看。它包含對(duì)應(yīng)的 dwg 文件的全部信息,不是 ASCII 碼形式,可讀性差,但用它形成圖形速度快,不同類型的計(jì)算機(jī)哪怕是用同一版本的文件,其 dwg 文件也是不可交換的。為了克服這一缺點(diǎn),AutoCAD 提供了 dxf 類型文件,其內(nèi)部為 ASCII 碼,這樣不同類型的計(jì)算機(jī)可通過(guò)交換 dxf 文件來(lái)達(dá)到交換圖形的目的,由于 dxf 文件可讀性好,用戶可方便地對(duì)它進(jìn)行修改,編程,達(dá)到從外部圖形進(jìn)行編輯和修改的目的。 ??dwg 格式以及它的 ASCII 格式變體 dxf,已經(jīng)成為 CAD 制圖數(shù)據(jù)交換中的事實(shí)文件標(biāo)準(zhǔn)。 .dwg:脫離 AutoCAD 軟件環(huán)境讀寫 dwg 格式文件,基本無(wú)法實(shí)現(xiàn),通過(guò) COM 自動(dòng)化操作是一個(gè)可選的方案。[1] .dxf:是與其它軟件進(jìn)行 CAD 數(shù)據(jù)交換的文件格式,可脫離 AutoCAD 軟件環(huán)境讀寫,如利用 ezdxf 庫(kù)。[1] 4.1 pyautocad??pyautocad 庫(kù)由俄羅斯工程師 Roman Haritonov 開(kāi)發(fā),用于簡(jiǎn)化使用 Python 語(yǔ)言書寫 AutoCAD ActiveX Automation 腳本。主要參考資料如下: ??·?PiPy: pyautocad 0.2.0 。 ??·?GitHub: reclosedev/pyautocad 。 ??·?Documentation: pyautocad’s documentation 。 ??·?Blog: 1. Python3操作AutoCAD:利用pyautocad庫(kù)能夠自動(dòng)化地進(jìn)行CAD畫圖. 陸壹爵爺 。 ?????? 2. 利用python控制Autocad:pyautocad. bsider 。 pyautocad庫(kù)與AutoCAD的連接 ??事實(shí)上,pyautocad 庫(kù)僅僅起到了接口作用,pyautocad 利用 comtypes.client 啟動(dòng)或連接 CAD (pyautocad源代碼),如下圖所示: pyautocad源代碼 (部分)
pyautocad啟動(dòng)/連接CAD的Python代碼 4.2 pywin32??pywin32 是一個(gè) Python 庫(kù),為 Python 提供訪問(wèn) Windows API 的擴(kuò)展,提供了齊全的 windows 常量、接口、線程以及 COM 機(jī)制等。了解更多詳見(jiàn)博客:如何利用Python和win32編程避免重復(fù)性體力勞動(dòng)(一) 。主要參考資料如下: ??·?PiPy: https:///project/pywin32 。 ??·?Github: https://github.com/mhammond/pywin32 。 ??·?與 CAD 的連接
??·?示例 win32com連接CAD示例 (與Excel交互) ??·?pywin32 Help ??首先確保你已經(jīng)成功安裝了 pywin32 模塊,然后在搜索神器 Everything 的搜索欄中輸入 PyWin32.chm,便可得到其所在的路徑。 PyWin32幫助文檔的獲取 PyWin32幫助文檔 4.3 ezdxf??·?ezdxf 庫(kù)的安裝 ??如已安裝 Anaconda,在 Anaconda Prompt 中鍵入 pip install ezdxf 便可自動(dòng)完成該庫(kù)的導(dǎo)入,如下圖所示;如未安裝 Anaconda,也可 pip 手動(dòng)導(dǎo)入,其在 PyPI (Python Package Index) 上的注冊(cè)地址為:https:///project/ezdxf/ 。 ??·?Github: https://github.com/mozman/ezdxf 。 ??·?Documentation: https://ezdxf./en/stable/ 。 ??·?Blog: 使用Python讀寫DXF和DWG文件 。 ??·?示例
ezdxf生成.dxf文件 4.4 dxfgrabber??·?Github: https://github.com/mozman/dxfgrabber 。 ??·?Documentation: https://dxfgrabber./en/latest/ 。 4.5 dxfwrite??·?Github: https://github.com/mozman/dxfwrite 。 ??·?Documentation: https://dxfwrite./en/latest/ 。 4.6 gdal??·?Blog: 使用Python讀寫DXF和DWG文件 。 ??以上,便是截止目前常見(jiàn)的 AutoCAD 二次開(kāi)發(fā) Python 庫(kù),可根據(jù)個(gè)人需要,選擇合適的 Python 庫(kù)。 ??若想創(chuàng)建 .dwg 文件,建議采用 pywin32 庫(kù);若想創(chuàng)建 .dxf 文件,同時(shí)脫離 AutoCAD 軟件環(huán)境,則可采用 ezdxf、dxfwrite,也可以采用 pywin32 庫(kù)繪制好相應(yīng)的文件后,以另存為的方式創(chuàng)建 .dxf 文件。 ??事實(shí)上,pyautocad 庫(kù)和 pywin32 庫(kù)僅僅起到了接口作用,它們只是構(gòu)建好數(shù)據(jù)傳輸?shù)耐ǖ溃嬲龑?shí)現(xiàn)圖形創(chuàng)建的是 AutoCAD 程序本身,AutoCAD 應(yīng)用程序接收來(lái)自 Python 的命令后,完成圖形的繪制等。因此,大家不必糾結(jié)于采用何種方式與 CAD 建立連接。 ??就反應(yīng)速度而言,pyautocad 庫(kù)相對(duì)較慢,而且好多高級(jí)的繪圖功能 pyautocad 庫(kù)暫時(shí)無(wú)法實(shí)現(xiàn),如圖案填充、選擇集功能的實(shí)現(xiàn)等。所以,建議大家采用 pywin32 庫(kù) 即 win32com 方式連接 CAD 創(chuàng)建 .dwg 文件。除了速度方面的原因外,利用這個(gè)庫(kù),可以與 Excel、Word、Sap2000 等其他程序構(gòu)建起數(shù)據(jù)傳輸通道,看到這是不是覺(jué)得很爽,對(duì)的,我們的最終目的就是要用 Python 將各種計(jì)算軟件聯(lián)系起來(lái),以實(shí)現(xiàn)某一工程問(wèn)題的快速處理。例如一幢超高層建筑的設(shè)計(jì),我們可以按如下方式進(jìn)行: Excel 提供用戶輸入數(shù)據(jù)、SAP2000 進(jìn)行全局多工況內(nèi)力彈性計(jì)算、Abaqus 完成局部彈塑性分析、nCode 進(jìn)行個(gè)別鋼構(gòu)件的高周疲勞分析、AutoCAD 完成施工圖的繪制、Word 生成最終的計(jì)算說(shuō)明文件,以上操作均可在 Python 的控制下快速進(jìn)行。 ??·?Python 二次開(kāi)發(fā) Excel 簡(jiǎn)介 ??·?Python 二次開(kāi)發(fā) SAP2000 概述 ??·?Python 二次開(kāi)發(fā) Word 簡(jiǎn)介 .dwg文件的創(chuàng)建邏輯 .dxf文件的創(chuàng)建邏輯 五、與CAD的連接5.1 ProgID??如果電腦中安裝了不止一個(gè)版本的 AutoCAD 為了順利完成指定版本 CAD 的調(diào)用則需指定 ProgID,即 ×××.Dispatch(“AutoCAD.Application.19”),其中 “AutoCAD.Application.19” 就是 2014 版 AutoCAD 的 ProgID。如下代碼將建立起 Python 與 2010 版 AutoCAD 的連接:
??根據(jù) CAD 版本的不同, ProgID 可能會(huì)發(fā)生變化,部分版本 CAD 的 ProgID 如下:
??常見(jiàn)版本 CAD 的 ProgID 詳見(jiàn)博文: autocad application 版本 。 ??另外,CAD 的 ProgID 可在官方二次開(kāi)發(fā)幫助文檔 ActiveX Reference Guide 中查看,具體操作如下圖所示: ProgID的查看 5.2 示例
六、數(shù)據(jù)轉(zhuǎn)換目的: 為了保證程序的順利運(yùn)行,用戶輸入的數(shù)據(jù)類型需轉(zhuǎn)換成 CAD 能識(shí)別的數(shù)據(jù)類型。 說(shuō)明: 本人非計(jì)算機(jī)專業(yè)出身,以下表述純屬個(gè)人理解,不妥/錯(cuò)誤之處還請(qǐng)各位批評(píng)指正。 ??Python 中的數(shù)據(jù)類型較少,且對(duì)數(shù)據(jù)本身的要求也較為寬松,如一個(gè)列表中的各個(gè)元素可以分別屬于不同的數(shù)據(jù)類型,這雖然有利于降低程序的編寫難度,但也對(duì) CAD 的二次開(kāi)發(fā)產(chǎn)生了一些不必要的麻煩。 ??在 CAD 二次開(kāi)發(fā)過(guò)程中,很多函數(shù)/方法的參數(shù)要求輸入的數(shù)據(jù)類型為 Variant (array of objects) ,但在 Python 中似乎又沒(méi)有哪一種數(shù)據(jù)類型與之直接相對(duì)應(yīng),若采用 list 代替 Variant,那么程序無(wú)法順利執(zhí)行,報(bào)錯(cuò)為 “ 對(duì)象數(shù)組無(wú)效 ”。因此,需要某種轉(zhuǎn)換方式,將 Python 中定義的變量轉(zhuǎn)換為能夠被 CAD 識(shí)別的數(shù)據(jù)類型 Variant 。 ??VARIANT 結(jié)構(gòu)體主要是使用在 COM(組件對(duì)象模型)中用于傳遞參數(shù)使用,它的存在主要是為了保持一個(gè)在 COM 參數(shù)傳遞方法的統(tǒng)一性,它幾乎包含了所有普通常用類型的數(shù)據(jù)類型的傳遞,如整型,浮點(diǎn)型,布爾型等,以及相應(yīng)類型的指針類型,如整型指針。[2] ??部分類型與變量對(duì)應(yīng)關(guān)系如下表:
??另外,NumPy arrays can be passed as VARIANT arrays arguments. The array is converted to a SAFEARRAY according to its type. [3] ( 此為 comptypes 庫(kù)幫助文檔原文,本人對(duì)計(jì)算機(jī)了解有限,為了不曲解原文,此處不做翻譯),部分對(duì)應(yīng)關(guān)系如下:
??comtypes 是一個(gè)輕量級(jí)的 python com 包,其中文網(wǎng)站詳見(jiàn):https://www./pypi/comtypes;官方文檔詳見(jiàn):comtypes 1.1.3 documentation 。 ??NumPy 是用 Python 進(jìn)行科學(xué)計(jì)算的基礎(chǔ)軟件包,其官方的中文文檔詳見(jiàn)網(wǎng)站: Numpy 中文網(wǎng) 。 ??在 Python 調(diào)用 AutoCAD 過(guò)程中,常用的數(shù)據(jù)轉(zhuǎn)換函數(shù)如下:
七、繪圖??本部分僅介紹一些復(fù)雜圖形的繪制,更多基礎(chǔ)圖形的繪制詳見(jiàn)博客:Python AutoCAD 繪圖 。 7.1 倒角矩形
倒角矩形 7.2 閉合多段線圖案填充
閉合多段線的圖案填充 7.3 動(dòng)態(tài)塊??創(chuàng)建動(dòng)態(tài)塊的標(biāo)準(zhǔn)流程為:創(chuàng)建普通塊(B) → 編輯塊 → 指定參數(shù) → 設(shè)置動(dòng)作,詳見(jiàn): AutoCAD-如何創(chuàng)建動(dòng)態(tài)塊。 ??創(chuàng)建如下圖所示的動(dòng)態(tài)塊,塊的名稱為 door,由矩形、圓弧及直線三個(gè)圖元構(gòu)成,并具有三種用戶自定義狀態(tài),分別為縮放、旋轉(zhuǎn)和翻轉(zhuǎn)。
長(zhǎng)度10 旋轉(zhuǎn)60度 八、顏色??在 AutoCAD 中,顏色設(shè)置是普遍存的,如設(shè)置圖層的顏色,指定標(biāo)注文字的顏色等等。多數(shù)情況下可以通過(guò)設(shè)置 RGB 值來(lái)實(shí)現(xiàn),但有時(shí)需要直接指定一個(gè)數(shù)字來(lái)代表該顏色。在此,把代表該顏色的數(shù)值變量稱為 顏色標(biāo)識(shí)號(hào) (可能有專門的術(shù)語(yǔ),管它呢,我就這么叫,愛(ài)誰(shuí)誰(shuí)),用 clr 表示。某一顏色的 clr 值可由該顏色的 RGB 值計(jì)算得到,計(jì)算公式如下: c l r = R + 256 × G + 256 × 256 × B {clr} = R + 256 × G + 256 × 256 × B clr=R+256×G+256×256×B ??例如: 對(duì)于白色(R=255,G=255,B=255),其對(duì)應(yīng)的顏色標(biāo)識(shí)號(hào) clr 為 255 + 256 × 255 + 256 × 256 × 255 = 16777215。 ??根據(jù)上述公式,幾種常用的標(biāo)準(zhǔn)顏色的顏色標(biāo)識(shí)號(hào)如下:
??·?示例 ??將 AutoCAD 程序的模型空間背景色設(shè)置成如下所示的淡綠色: R=198 G=224 B=180 c l r = 198 + 256 × 224 + 256 × 256 × 180 = 11854022 {clr} = 198 + 256 × 224 + 256 × 256 × 180 = 11854022 clr=198+256×224+256×256×180=11854022
模型空間背景色的設(shè)置 ??該功能的實(shí)現(xiàn)歷經(jīng)波折,卡頓了近三個(gè)月,終于,在那一天下班鈴響后測(cè)試成功。 ??值得注意的是,不是所有的顏色指定都可以采用該種方式,如圖案填充顏色的設(shè)置就是通過(guò)直接設(shè)置 RGB 的方式實(shí)現(xiàn)的。 ??藍(lán)色的定義: doc.Application.GetInterfaceObject(“AutoCAD.AcCmColor.19”).SetRGB(0, 0, 255) 。 九、重要方法9.1 SendCommadSendCommand方法 ??極個(gè)別情況下,采用常規(guī)方式很難實(shí)現(xiàn)某一功能,如設(shè)置默認(rèn)視圖、定義永久標(biāo)注樣式等。此時(shí),可嘗試采用 SendCommand 方式來(lái)實(shí)現(xiàn)。具體方法為,先在 AutoCAD 軟件界面操作一遍,然后查看在此過(guò)程中提示工具欄內(nèi)的數(shù)據(jù)變化,最后,將這些變化稍加改動(dòng)按照 CAD 二次開(kāi)發(fā)的規(guī)則輸入到 SendCommand 內(nèi),即可得到相應(yīng)的 Python 代碼。 ??以直線的繪制為例,在 AutoCAD 軟件中的操作步驟為:輸入繪制直線的快捷命令 “L” > 回車 > 屏幕上點(diǎn)選第一個(gè)點(diǎn) > 回車 > 屏幕上點(diǎn)選第二個(gè)點(diǎn) > 回車,直覺(jué)告訴我們 SendCommand 括號(hào)內(nèi)數(shù)據(jù)輸入也應(yīng)該是這一順序,即 SendCommand (“L” + 回車 + 第一個(gè)點(diǎn)坐標(biāo) + 回車 + 第二個(gè)點(diǎn)坐標(biāo) + 回車) 直線繪制過(guò)程中命令欄內(nèi)的顯示情況 SendCommand方式繪制直線的Python代碼 ??另一個(gè)典型的例子是將程序的預(yù)設(shè)視圖由俯視變更為西南等軸測(cè),將視覺(jué)樣式由二維線框變更為真實(shí),在 CAD 界面操作后,命令欄讓將顯示出如下數(shù)據(jù): 預(yù)設(shè)視圖及視覺(jué)樣式的修改 預(yù)設(shè)視圖及視覺(jué)樣式修改過(guò)程中命令欄內(nèi)的顯示情況 ??顯然,實(shí)現(xiàn)這兩項(xiàng)功能的 Python 代碼為:
??值得注意的是,不是所有的功能均可由該方式實(shí)現(xiàn),極其個(gè)別的功能就實(shí)現(xiàn)不了,但是這些功能通常也沒(méi)必要采用二次開(kāi)發(fā)的方式實(shí)現(xiàn),直接點(diǎn)下軟件界面不好么。 9.2 GetEntity??更多圖元選擇即選擇集功能的實(shí)現(xiàn),詳見(jiàn)博客:Python AutoCAD 選擇集 。 ??以下代碼實(shí)現(xiàn)將所選圖元的顏色更改為紅色。
9.3 SetXData/GetXData
??所添加的拓展數(shù)據(jù)可按如下方式查看: [ObjectARX] ArxDbg介紹、自動(dòng)加載及其下載 。 擴(kuò)展數(shù)據(jù)的查看 十、文件??更多文件相關(guān)的操作,詳見(jiàn)博客:Python AutoCAD 文件 。 10.1 另存為.dwg/.dxf??以下方法另存為的文件格式只能是 .dwg 和 .dxf,這與在 CAD 軟件中,依次點(diǎn)擊 文件 >> 另存為 是相對(duì)應(yīng)的。
??將當(dāng)前文件另存為 TestSaveAs.dxf,文件的版本是:AutoCAD 2013 DXF,代碼如下:
??上一代碼執(zhí)行完畢后,當(dāng)前文件被程序關(guān)閉,TestSaveAs.dxf 文件被打開(kāi),且設(shè)定為當(dāng)前活躍文件。 ??參數(shù) 61 為 AcSaveAsType enum,表示另存為文件的類型是 AutoCAD 2013 DXF,其他常用類型如下:
??AcSaveAsType enum 可在官方二次開(kāi)發(fā)幫助文檔 ActiveX Develop’s Guide 中查看,查看方式如下圖所示:
??將特定文件 PyAutoCAD.dwg 另存為 TestSaveAs.dxf,文件的版本是:AutoCAD 2013 DXF,代碼如下:
10.2 另存為.pdf??首先,確認(rèn)繪圖儀 DWG To PDF.pc3 的工作目錄,在搜索神器 Everything 的搜索欄中輸入 DWG To PDF.pc3,便可得到繪圖儀的工作目錄,如下圖所示: ??另存為 .pdf 文件的 Python 代碼如下:
??·?參考資料: 使用python將cad批量導(dǎo)出至pdf 。 ??本代碼只是簡(jiǎn)單介紹該功能的實(shí)現(xiàn),打印范圍等更為詳細(xì)的設(shè)置,請(qǐng)查看二次開(kāi)發(fā)幫助文檔。 10.3 另存為.jpg/.png??更改繪圖儀設(shè)置即可,可參考另存為.dpf。 確定繪圖儀的工作路徑
CAD轉(zhuǎn)化為JPG后,圖片模糊不清楚怎么辦 ? 十一、致謝??特別感謝 ke1078 同學(xué)提供的無(wú)私幫助,使得 Python 語(yǔ)言二次開(kāi)發(fā) AutoCAD 的許多高級(jí)功能得以順利實(shí)現(xiàn)。 十二、說(shuō)明??2018年12月13日,該系列博客僅僅以一篇名為 【Python pyautocad庫(kù) 使用簡(jiǎn)介】 的博客形式出現(xiàn)在 CSDN 上。為了清晰直觀,2019年7月20日左右,博主以博客【Python pyautocad庫(kù) 使用簡(jiǎn)介】為基礎(chǔ),按部分將原文擴(kuò)展成 9 篇博客,后續(xù)又陸續(xù)進(jìn)行了修改和編輯,特此說(shuō)明。這 9 篇博客以 AutoCAD 草圖與注釋 工作空間菜單欄內(nèi)的功能區(qū)分為標(biāo)準(zhǔn),較為詳細(xì)地介紹了 Python 調(diào)用 AutoCAD 相關(guān)功能的實(shí)現(xiàn)。碼字不易,轉(zhuǎn)載還請(qǐng)注明出處! AutoCAD草圖與注釋 轉(zhuǎn)載請(qǐng)注明出處! 轉(zhuǎn)載請(qǐng)注明出處! 轉(zhuǎn)載請(qǐng)注明出處! 原博客部分內(nèi)容 ??這 9 篇博客分別是: ???? – Python 二次開(kāi)發(fā) AutoCAD 簡(jiǎn)介 ???? – Python 二次開(kāi)發(fā) AutoCAD 系統(tǒng)設(shè)置 ???? – Python 二次開(kāi)發(fā) AutoCAD 圖層 ???? – Python 二次開(kāi)發(fā) AutoCAD 繪圖 ???? – Python 二次開(kāi)發(fā) AutoCAD 修改 ???? – Python 二次開(kāi)發(fā) AutoCAD 塊組 ???? – Python 二次開(kāi)發(fā) AutoCAD 注釋 ???? – Python 二次開(kāi)發(fā) AutoCAD 文件 ???? – Python 二次開(kāi)發(fā) AutoCAD 選擇集 十三、尾聲??以上,便是 Python 語(yǔ)言二次開(kāi)發(fā) AutoCAD 的簡(jiǎn)單介紹。 ??因篇幅有限,某些非關(guān)鍵功能未做詳細(xì)介紹,如有疑問(wèn),歡迎郵件交流。 ??Email: liyang@alu. 。 ??僅以此文為我斷斷續(xù)續(xù)一年多的 Python 調(diào)用 AutoCAD 的相關(guān)工作做一個(gè)總結(jié)。 ??與此同時(shí),也希望能夠?yàn)槌鯇W(xué)者/有需要的人提供多一點(diǎn)參考。 ??本文僅用于個(gè)人學(xué)習(xí),除此之外,無(wú)其他任何用途。 ??因個(gè)人水平有限,文中難免有所疏漏,還請(qǐng)各位大神不吝批評(píng)指正。 ??胸藏文墨懷若谷,腹有詩(shī)書氣自華,希望各位都能在知識(shí)的 pāo 子里快樂(lè)徜徉。 ??本文最早發(fā)表于 2018-12-13 18:20:21,最后修改于 2020-4-25 22:02:07。 ??如無(wú)特殊原因,不再更新! ??本文邏輯清楚,內(nèi)容詳實(shí),引例豐富。 歡迎大家點(diǎn)贊、評(píng)論及轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明出處! 為我打call,不如為我打款! 打賞可備注郵箱,本人將贈(zèng)送本系列博客的全部 Python 源代碼。 ??最后,祝各位攻城獅們,珍愛(ài)生命,保護(hù)發(fā)際線! 十四、參考文獻(xiàn)[1]. 使用Python讀寫DXF和DWG文件. 大專欄. [2]. VARIANT的使用方法. xinzhiyounizhiyouni. [3]. comtypes 1.1.3 documentation 發(fā)布者:全棧程序員棧長(zhǎng),轉(zhuǎn)載請(qǐng)注明出處:https:///135058.html原文鏈接:https:// |
|
來(lái)自: 燕趙蒼狼 > 《C14 Python學(xué)習(xí)》