小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Python 二次開(kāi)發(fā) AutoCAD 簡(jiǎn)介「建議收藏」

 燕趙蒼狼 2022-12-23 發(fā)布于北京

大家好,又見(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源代碼 (部分)

import comtypes.client

try:
    acad = comtypes.client.GetActiveObject('AutoCAD.Application', dynamic=True)
except WindowsError:
    acad = comtypes.client.CreateObject('AutoCAD.Application', dynamic=True)
    acad.Visible = True

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 的連接

#!/usr/bin/env python
# -*- coding: utf-8 -*-

""" ============================= Author: DalNur Email: liyang@alu. ============================= """

import win32com.client as win32

wincad = win32.Dispatch("AutoCAD.Application")
doc = wincad.ActiveDocument
msp = doc.ModelSpace

doc.Utility.Prompt("Hello! Autocad from pywin32com.\n")

print(doc.Name)

??·?示例

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文件 。

??·?示例

import ezdxf

# Create a new DXF document.
doc = ezdxf.new(dxfversion='R2010')

# Create new table entries (layers, linetypes, text styles, ...).
doc.layers.new('TEXTLAYER', dxfattribs={ 
   'color': 2})

# DXF entities (LINE, TEXT, ...) reside in a layout (modelspace,
# paperspace layout or block definition).
msp = doc.modelspace()

# Add entities to a layout by factory methods: layout.add_...()
msp.add_line((0, 0), (10, 10), dxfattribs={ 
   'color': 7})
msp.add_text(
    'Test',
    dxfattribs={ 
   
        'layer': 'TEXTLAYER'
    }).set_pos((0, 0.2), align='CENTER')

# Save DXF document.
doc.saveas('test.dxf')

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 概述

??·?Abaqus 二次開(kāi)發(fā) 基本概念

??·?nCodeDL 疲勞分析 簡(jiǎn)明教程

??·?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 的連接:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

""" ============================= Author: DalNur Email: liyang@alu. ============================= """

import win32com.client
import pythoncom

wincad = win32com.client.Dispatch("AutoCAD.Application.18")
doc = wincad.ActiveDocument
doc.Utility.Prompt("Hello! Autocad from pywin32com.\n")
msp = doc.ModelSpace
print(doc.Name)

??根據(jù) CAD 版本的不同, ProgID 可能會(huì)發(fā)生變化,部分版本 CAD 的 ProgID 如下:

AutoCAD 版本

ProgID

2010

AutoCAD.Application.18

2014

AutoCAD.Application.19

??常見(jiàn)版本 CAD 的 ProgID 詳見(jiàn)博文: autocad application 版本 。

??另外,CAD 的 ProgID 可在官方二次開(kāi)發(fā)幫助文檔 ActiveX Reference Guide 中查看,具體操作如下圖所示:

ProgID的查看

5.2 示例

#!/usr/bin/env python
# -*- coding: utf-8 -*-

""" ============================= Author: DalNur Email: liyang@alu. ============================= """

from pyautocad import Autocad, APoint
import comtypes.client
import time

# 1.CAD自動(dòng)啟動(dòng)
ProgID = "AutoCAD.Application.19"  # 2014版CADProgramID

try:
    acad = comtypes.client.GetActiveObject(ProgID, dynamic=True)
except WindowsError:
    acad = comtypes.client.CreateObject(ProgID, dynamic=True)
    acad.Visible = True

print("The program will pause for 60 seconds.")  # 防止報(bào)錯(cuò)
time.sleep(60)  # 程序暫停60s運(yùn)行

# 2.連接方式的轉(zhuǎn)換
acad = Autocad(create_if_not_exists=True)
acad.prompt("Hello! AutoCAD from pyautocad.")
doc = acad.ActiveDocument
print(doc.Name)
msp = doc.ModelSpace

dwgobj = acad.ActiveDocument.Application.Documents.Add("")
dwgobj.Activate()  # 設(shè)為當(dāng)前文件。
doc = acad.ActiveDocument
print(doc.Name)
msp = doc.ModelSpace

# 3.創(chuàng)建圖元
x1, y1 = 0, 0
x2, y2 = 100, 100
p1, p2, = APoint(x1, y1), APoint(x2, y2)
msp.AddLine(p1, p2)

# 4.文件保存
directory = r"D:"  # 工作目錄
dwgname = "ZK.dwg"  # 工作目錄
path = directory + "\\" + dwgname
dwgobj.Close(True, path)

# 5.程序退出
acad.ActiveDocument.Application.Quit()

六、數(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)系如下表:

Member name

Description

VT_EMPTY

Indicates that a value was not specified.

VT_R8

Indicates a double value.

VT_DISPATCH

Indicates an IDispatch pointer.

??另外,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)系如下:

NumPy type

VARIANT type

int32, int, intc, int_

VT_I4

uint32, uint, uintc

VT_UI4

float64, float_

VT_R8

??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ù)如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

""" ============================= Author: DalNur Email: liyang@alu. ============================= """

import win32com.client
import pythoncom

wincad = win32com.client.Dispatch("AutoCAD.Application.19")  
doc = wincad.ActiveDocument
doc.Utility.Prompt("Hello! Autocad from pywin32.")
msp = doc.ModelSpace
print(doc.Name)

def vtpnt(x, y, z=0):
    """坐標(biāo)點(diǎn)轉(zhuǎn)化為浮點(diǎn)數(shù)"""
    return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, (x, y, z))

def vtobj(obj):
    """轉(zhuǎn)化為對(duì)象數(shù)組"""
    return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_DISPATCH, obj)

def vtfloat(lst):
    """列表轉(zhuǎn)化為浮點(diǎn)數(shù)"""
    return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, lst)
    
def vtint(lst):
    """列表轉(zhuǎn)化為整數(shù)"""
    return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_I2, lst)

def vtvariant(lst):
    """列表轉(zhuǎn)化為變體"""
    return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_VARIANT, lst)

七、繪圖

??本部分僅介紹一些復(fù)雜圖形的繪制,更多基礎(chǔ)圖形的繪制詳見(jiàn)博客:Python AutoCAD 繪圖 。

7.1 倒角矩形

#!/usr/bin/env python
# -*- coding: utf-8 -*-

""" ============================= Author: DalNur Email: liyang@alu. ============================= """

from pyautocad import Autocad, APoint, aDouble
import math

pyacad = Autocad(create_if_not_exists=True)
pyacad.prompt("Hello! AutoCAD from pyautocad.")
print(pyacad.doc.Name)

[L, B, R] = [400, 200, 50]  # L、B、R分別為矩形的長(zhǎng)度、矩形的寬度及圓角半徑。

x = [0.5 * (L - 2 * R), 0.5 * L]  # 倒角矩形各關(guān)鍵點(diǎn)橫坐標(biāo)的絕對(duì)值;
y = [0.5 * (B - 2 * R), 0.5 * B]  # 倒角矩形各關(guān)鍵點(diǎn)縱坐標(biāo)的絕對(duì)值;

pnts = [APoint(x[0], -y[1]), APoint(x[1], -y[0]), APoint(x[1], y[0]),
        APoint(x[0], y[1]), APoint(-x[0], y[1]), APoint(-x[1], y[0]),
        APoint(-x[1], -y[0]), APoint(-x[0], -y[1])]

pnts = [j for i in pnts for j in i]  # 將各點(diǎn)坐標(biāo)順序變換為行數(shù)據(jù)
pnts = aDouble(pnts)  # 轉(zhuǎn)化為雙精度浮點(diǎn)數(shù)

plineObj = pyacad.model.AddPolyLine(pnts)
plineObj.Closed = True  # 閉合多段線
bulgeValue = math.tan(math.pi / 8)  # 凸度,為四分之一倍圓弧所對(duì)圓心角的正切值。

[plineObj.SetBulge(2 * i, bulgeValue) for i in range(4)]  
# 將多段線的第1、3、5、7部分設(shè)置為凸度為bulgevalue的圓弧。

倒角矩形

7.2 閉合多段線圖案填充

#!/usr/bin/env python
# -*- coding: utf-8 -*-

""" ============================= Author: DalNur Email: liyang@alu. ============================= """

import pythoncom
import win32com.client

wincad = win32com.client.Dispatch("AutoCAD.Application")
doc = wincad.ActiveDocument
doc.Utility.Prompt("Hello! AutoCAD from pywin32.")
msp = doc.ModelSpace

def vtobj(obj):
    return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_DISPATCH, obj)

def vtfloat(lst):
    return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, lst)


[ptnName, ptnType, bAss] = ["ANSI31", 0, True]

pnts = [100, -50, 0, 100, 50, 0, -100, 50, 0, -100, -50, 0]
pnts = vtfloat(pnts)

plineObj = msp.AddPolyLine(pnts)
plineObj.Closed = True

outerLoop = []
outerLoop.append(plineObj)
outerLoop = vtobj(outerLoop)
hatchObj = msp.AddHatch(ptnType, ptnName, bAss)
hatchObj.AppendOuterLoop(outerLoop)
hatchObj.Evaluate()  # 進(jìn)行填充計(jì)算,使圖案吻合于邊界。

閉合多段線的圖案填充

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)。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

""" ============================== Author: Wang Yifang (SINOMACH) ============================== """

import win32com.client
acad = win32com.client.Dispatch("AutoCAD.Application")

# iterate through all objects (entities) in the currently opened drawing
# and if its a BlockReference, display its attributes.

for entity in acad.ActiveDocument.ModelSpace:
    name = entity.EntityName
    print(name)
    if name == 'AcDbBlockReference':
        if entity.IsDynamicBlock:
            print("Is dynamic block")

        block_ = entity.GetDynamicBlockProperties()
        print(block_)
        print("print property")
        for p in block_:
            print("{")
            print(p.AllowedValues)
            print(p.Description)
            print(p.PropertyName )
            print(p.ReadOnly)
            print(p.Show)
            print(p.UnitsType)
            print(p.Value)
            print("}")
            print("===================================")
            # 修改動(dòng)態(tài)塊的尺寸
            if p.PropertyName == "距離1":
                p.Value = float(10)
            if p.PropertyName == "角度1":
                p.Value = float(3.14159265/3)
                # 角度為弧度制
            # if p.PropertyName == "翻轉(zhuǎn)狀態(tài)1":
            # p.Value = 1
            # 此功能報(bào)錯(cuò),原因待查明。

長(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)如下:

顏色

clr

顏色

clr

黑色

0

青色

16776960

紅色

255

藍(lán)色

16711680

黃色

65535

洋紅

16711935

綠色

65280

白色

16777215

??·?示例

??將 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

#!/usr/bin/env python
# -*- coding: utf-8 -*-

""" ============================= Author: DalNur Email: liyang@alu. ============================= """

from pyautocad import Autocad

pyacad = Autocad(create_if_not_exists=True)
pyacad.prompt("Hello! AutoCAD from pyautocad.")
print(pyacad.doc.Name)

clr = 11854022
pyacad.ActiveDocument.Application.preferences.Display.GraphicsWinModelBackgrndColor = clr

模型空間背景色的設(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 SendCommad

SendCommand方法

??極個(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 代碼為:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

""" ============================= Author: DalNur Email: liyang@alu. ============================= """

from pyautocad import Autocad

pyacad = Autocad(create_if_not_exists=True)
pyacad.prompt("Hello! AutoCAD from pyautocad.")
print(pyacad.doc.Name)

pyacad.ActiveDocument.SendCommand("_-view" + chr(13) + "_swiso" + chr(13))  # 定義預(yù)設(shè)視圖為西南等軸測(cè)。
pyacad.ActiveDocument.SendCommand("_vscurrent" + chr(13) + "_R" + chr(13))  # 視圖樣式設(shè)置為真實(shí)。

??值得注意的是,不是所有的功能均可由該方式實(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)將所選圖元的顏色更改為紅色。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

""" ============================= Author: DalNur Email: liyang@alu. ============================= """

import pythoncom
import win32com.client
import math

wincad = win32com.client.Dispatch("AutoCAD.Application")
doc = wincad.ActiveDocument
doc.Utility.Prompt("Hello! Autocad from pywin32com.\n")
msp = doc.ModelSpace
print(doc.Name)

def vtpnt(x, y, z=0):
    """坐標(biāo)點(diǎn)轉(zhuǎn)化為浮點(diǎn)數(shù)"""
    return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, (x, y, z))

pnt1, pnt2, pnt3 = vtpnt(-40, -40), vtpnt(500, 500), vtpnt(300, 200)
lineObj = msp.AddLine(pnt1, pnt2)
circleObj = msp.AddCircle(pnt3, 100)

print("請(qǐng)?jiān)贑AD程序界面點(diǎn)選圖元,未選中則報(bào)錯(cuò)!")  # try...except處理報(bào)錯(cuò)
rtnObj = doc.Utility.GetEntity()  # 返回對(duì)象

print(rtnObj)
print("所選圖元的ID:", rtnObj[0].ObjectID)
print("鼠標(biāo)單擊處的坐標(biāo):", rtnObj[1])

sltObject = doc.ObjectIdToObject(rtnObj[0].ObjectID) # 圖元ID轉(zhuǎn)化為對(duì)應(yīng)的圖元

clr = doc.Application.GetInterfaceObject("AutoCAD.AcCmColor.19")
clr.SetRGB(255, 0, 0)  # 創(chuàng)建紅色
sltObject.TrueColor = clr  # 指定顏色

doc.Application.Update()

9.3 SetXData/GetXData

#!/usr/bin/env python
# -*- coding: utf-8 -*-

""" ============================= Author: DalNur Email: liyang@alu. ============================= """

# This example creates a line and attaches extended data to that line.

import pythoncom
import win32com.client

wincad = win32com.client.Dispatch("AutoCAD.Application")
doc = wincad.ActiveDocument
doc.Utility.Prompt("Hello! Autocad from pywin32com.\n")
msp = doc.ModelSpace
print(doc.Name)

def vtpnt(x, y, z=0):
    return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, (x, y, z))

def vtfloat(val):
    return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, val)

def vtint(val):
    return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_I2, val)

def vtvariant(var):
    return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_VARIANT, var)

# Create the line

startPntCoords = vtpnt(1, 1, 0)
startPoint = msp.AddPoint(startPntCoords)
endPntCoords = vtpnt(5, 5, 0)
endPoint = msp.AddPoint(endPntCoords)
lineObj = msp.AddLine(startPntCoords, endPntCoords)

# Initialize all the xdata values. Note that first data in the list should be
# application name and first datatype code should be 1001

DataType = [1001, 1000, 1003, 1040, 1041, 1070, 1071, 1042]
Data = ["Test_Application", "This is a test for xdata",
        "0", 1.23479137438413E+40, 1237324938, 32767, 32767, 10]
reals3 = [-2.95, 100, -20]
# DataType.append(1010)
# Data.append(reals3)
# worldPos = [4, 400.99999999, 2.798989]
# DataType.append(1011)
# Data.append(worldPos)

DataType = vtint(DataType)
Data = vtvariant(Data)
# Attach the xdata to the line
lineObj.SetXData(DataType, Data)

# Return the xdata for the line
xtypeOut, xdataOut = lineObj.GetXData("Test_Application")
print(xtypeOut)
print(xdataOut)

??所添加的拓展數(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)的。

  1. 當(dāng)前文件另存為.dwg/.dxf

??將當(dāng)前文件另存為 TestSaveAs.dxf,文件的版本是:AutoCAD 2013 DXF,代碼如下:

pyacad.ActiveDocument.SaveAs("D:\\AutoCAD\\TestSaveAs", 61)

??上一代碼執(zhí)行完畢后,當(dāng)前文件被程序關(guān)閉,TestSaveAs.dxf 文件被打開(kāi),且設(shè)定為當(dāng)前活躍文件。

??參數(shù) 61 為 AcSaveAsType enum,表示另存為文件的類型是 AutoCAD 2013 DXF,其他常用類型如下:

版本

.dwg

.dxf

AutoCAD 2000

12

13

AutoCAD 2004

24

25

AutoCAD 2007

36

37

AutoCAD 2010

48

49

AutoCAD 2013

60

61

??AcSaveAsType enum 可在官方二次開(kāi)發(fā)幫助文檔 ActiveX Develop’s Guide 中查看,查看方式如下圖所示:

  1. 特定文件另存為.dwg/.dxf

??將特定文件 PyAutoCAD.dwg 另存為 TestSaveAs.dxf,文件的版本是:AutoCAD 2013 DXF,代碼如下:

pyacad.ActiveDocument.Application.Documents("PyAutoCAD.dwg").SaveAs("D:\\AutoCAD\\TestSaveAs", 61)

10.2 另存為.pdf

??首先,確認(rèn)繪圖儀 DWG To PDF.pc3 的工作目錄,在搜索神器 Everything 的搜索欄中輸入 DWG To PDF.pc3,便可得到繪圖儀的工作目錄,如下圖所示:

??另存為 .pdf 文件的 Python 代碼如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

""" ============================= Author: DalNur Email: liyang@alu. ============================= """

from pyautocad import Autocad

pyacad = Autocad(create_if_not_exists=True)
pyacad.prompt("Hello! AutoCAD from pyautocad.")
print(pyacad.doc.Name)

print(pyacad.ActiveDocument.ActiveLayout.ConfigName)

# 設(shè)置繪圖儀管理器的工作目錄
ACADPref = pyacad.ActiveDocument.Application.preferences.Files

originalValue = ACADPref.PrinterConfigPath     = r"C:\Users\33876\AppData\Roaming\Autodesk\AutoCAD 2014\R19.1\chs\Plotters"

print(ACADPref)
print(originalValue)

oplot = pyacad.ActiveDocument.PlotConfigurations.Add("PDF", acad.ActiveDocument.ActiveLayout.ModelType)

# acad.ActiveDocument.SetVariable("sdi", 0)
pyacad.ActiveDocument.ActiveLayout.ConfigName = "DWG To PDF.pc3"
pyacad.ActiveDocument.SetVariable("Filedia", 0)

# acad.ActiveDocument.SetVariable("RASTERPREVIEW", 1)
pyacad.ActiveDocument.SetVariable("BACKGROUNDPLOT", 0)
pyacad.ActiveDocument.Plot.QuietErrorMode = True

# acad.ActiveDocument.Plot.PlotToFile("D:\\" + "123" + ".pdf", "Foxit Reader PDF Printer")
pyacad.ActiveDocument.Plot.PlotToFile("D:\\" + "test" + ".pdf")

oplot.Delete()
oplot = None
obj = pyacad.ActiveDocument.GetVariable("DBMOD")
print(obj)

??·?參考資料: 使用python將cad批量導(dǎo)出至pdf

??本代碼只是簡(jiǎn)單介紹該功能的實(shí)現(xiàn),打印范圍等更為詳細(xì)的設(shè)置,請(qǐng)查看二次開(kāi)發(fā)幫助文檔。

10.3 另存為.jpg/.png

??更改繪圖儀設(shè)置即可,可參考另存為.dpf。

確定繪圖儀的工作路徑

#!/usr/bin/env python
# -*- coding: utf-8 -*-

""" ============================= Author: DalNur Email: liyang@alu. ============================= """

import win32com.client

wincad = win32com.client.Dispatch("AutoCAD.Application")
doc = wincad.ActiveDocument
doc.Utility.Prompt("Hello! Autocad from pywin32com.\n")
msp = doc.ModelSpace

print(doc.Name)
print(doc.ActiveLayout.ConfigName)

# 設(shè)置繪圖儀管理器的工作目錄
ACADPref = doc.Application.preferences.Files

originalValue = ACADPref.PrinterConfigPath     = r"C:\Users\33876\AppData\Roaming\Autodesk\AutoCAD 2014\R19.1\chs\Plotters"

print(ACADPref)
print(originalValue)

oplot = doc.PlotConfigurations.Add("JPG", doc.ActiveLayout.ModelType)

doc.ActiveLayout.ConfigName = "PublishToWeb JPG.pc3"
doc.SetVariable("Filedia", 0)

doc.SetVariable("BACKGROUNDPLOT", 0)
doc.Plot.QuietErrorMode = True

doc.Plot.PlotToFile("D:\\" + "test" + ".jpg")

oplot.Delete()
oplot = None
obj = doc.GetVariable("DBMOD")
print(obj)

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://

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多