
1. 這個項目要解決的到底是個什么活1.1 先說明白哪些場景真正需要“批量生成CAD圖紙”接觸過CAD的人都知道真正折磨人的往往不是畫一張圖而是反復(fù)畫同一類圖。工程出圖、項目交付、施工變更很多時候圖紙的核心結(jié)構(gòu)完全一樣只是尺寸、編號、標注、圖層名稱不同。這時候如果還靠人工一張張改不僅效率低還特別容易出錯——改完這一張忘了那一張編號漏改、尺寸對不上回頭檢查比重新畫一遍還累。“python批量生成CAD圖紙”這句話本質(zhì)上是在解決“重復(fù)勞動自動化”的問題。我見過最典型的幾個場景批量生成樁位圖、預(yù)埋件圖、節(jié)點大樣圖結(jié)構(gòu)相同但坐標或參數(shù)不同給一批既有圖紙批量修改標注、圖層、文字內(nèi)容比如統(tǒng)一把某層改成紅色、把所有標題欄編號按規(guī)則重排按數(shù)據(jù)庫里的設(shè)備清單批量出圖每一臺設(shè)備對應(yīng)一張安裝示意圖圖紙格式批量轉(zhuǎn)換批量合并多張圖紙或者批量把CAD文件轉(zhuǎn)成PDF用于歸檔。這些問題的共同點是流程確定、規(guī)則明確、但數(shù)量巨大。只要規(guī)則能寫清楚Python就能替你一張張畫完而且不會疲勞、不會漏項。1.2 兩條技術(shù)路線驅(qū)動CAD本體 vs 直接讀寫DXF我剛接觸這個方向的時候被兩個詞搞混過pyautocad和ezdxf。后來用多了才明白它們完全是兩種思路。pyautocad是“驅(qū)動AutoCAD本體”。它通過COM接口讓Python像操作鼠標鍵盤一樣去控制AutoCAD軟件可以創(chuàng)建圖元、修改對象、調(diào)用AutoCAD自帶的命令甚至執(zhí)行打印和導(dǎo)出。優(yōu)點是功能完整AutoCAD能做的一切它基本都能做缺點是你電腦上必須裝了AutoCAD腳本運行時還要保持CAD打開速度自然會慢一些。ezdxf是“純Python讀寫DXF文件”。DXF是AutoCAD的開放交換格式本質(zhì)上是帶格式的文本文件。ezdxf可以直接在Python里創(chuàng)建直線、圓、文字、標注、圖層、塊然后另存為DXF文件整個過程完全不依賴AutoCAD軟件。優(yōu)點是快、輕、適合批量生成還能跑在Linux服務(wù)器上缺點是生成的是DXF文件如果下游必須用DWG還得再經(jīng)過一次轉(zhuǎn)換。我的經(jīng)驗是批量生成新圖紙優(yōu)先用ezdxf批量修改已有圖紙或者必須保留DWG格式時用pyautocad。后面我會把兩條路線都演示一遍方便你對號入座。2. 環(huán)境準備與最關(guān)鍵的選型決策2.1 裝Python和依賴庫實際只需要三步不管走哪條路線Python環(huán)境得先就位。如果你之前沒裝過Python直接去官網(wǎng)下載安裝包安裝時記得勾選“Add Python to PATH”否則命令行里找不到python命令。這里不展開講網(wǎng)上一搜一大把注意別下到奇怪的“高速下載器”就行。裝好Python之后在命令行里執(zhí)行pip install ezdxf pyautocad如果只走ezdxf路線裝ezdxf就夠如果要操作AutoCAD就把pyautocad一起裝上。裝完可以跑一下驗證python -c import ezdxf; print(ezdxf.__version__) python -c import pyautocad; print(pyautocad.__version__)能輸出版本號就說明環(huán)境OK。這里有個小坑pyautocad依賴pywin32如果你的Python是64位AutoCAD也是64位一般沒問題萬一導(dǎo)入報錯單獨再裝一次pywin32通常能解決。2.2 為什么我建議先搞懂DXF而不是一上來就開CAD我見過不少新人一聽說“Python批量生成CAD圖紙”第一反應(yīng)就是去裝各種插件、找破解補丁折騰半天軟件沒弄好熱情先滅了。其實換個思路如果只是生成新圖紙完全沒必要啟動AutoCAD這么重的軟件。DXF文件的本質(zhì)是什么你可以在記事本里打開任何一個DXF文件看到大量成對出現(xiàn)的數(shù)字和字符串那其實是“組碼”和“值”。比如0后面跟LINE表示“下面要定義一個直線實體”10、20、30分別表示起點的X、Y、Z坐標11、21、31表示終點的坐標。這是一種極簡的、程序友好的數(shù)據(jù)協(xié)議。ezdxf把這種協(xié)議封裝成了Python對象你不用關(guān)心底層組碼細節(jié)直接用msp.add_line((0,0), (100,50))就能畫一根線。對于批量生成圖紙來說這個庫就是你的“畫筆工廠”。更關(guān)鍵的是DXF文件可以直接用ezdxf讀寫、修改、合并整個過程不需要安裝任何CAD軟件。這意味著你可以在沒有圖形界面的服務(wù)器上跑批量任務(wù)每天深夜自動生成幾百張圖紙第二天早上交付這才是“批量”的正確姿勢。2.3 pyautocad和ezdxf怎么配合才不算重復(fù)造輪子實際工作里兩條路線經(jīng)?;煊?。我自己的習(xí)慣是能用ezdxf干的絕不開CAD必須開CAD的才交給pyautocad。比如有一批老圖紙需要批量改圖層的顏色但手頭只有DWG格式?jīng)]有原始DXF這時候用ezdxf讀不了DWG就只能用pyautocad打開DWG、遍歷對象、改屬性、另存。再比如需求是“根據(jù)Excel里的設(shè)備參數(shù)批量生成100張基礎(chǔ)平面圖”這種從零開始畫圖的場景ezdxf絕對是首選。生成的DXF文件如果客戶非要DWG可以用CAD打開DXF另存為DWG或者在服務(wù)器上用ODAFileConverter這類工具批量轉(zhuǎn)格式。還有一個更省事的組合先用ezdxf批量生成DXF草稿再用pyautocad開CAD批量執(zhí)行“批量為圖紙加圖框、加標題欄、輸出PDF”等收尾動作。各管一段誰擅長什么就干什么。3. 核心細節(jié)解析與實操要點3.1 搞清楚圖層、線型、文字樣式才是規(guī)范出圖的前提程序畫圖很容易畫出一堆“能看但不專業(yè)”的圖。為什么因為很多人只關(guān)注線段和圓忽略了圖紙的靈魂——圖層、線型、文字樣式。正規(guī)的設(shè)計圖輪廓線、中心線、標注線、填充都是分層的。批量生成圖紙時如果不先把圖層規(guī)范好最后交付的圖紙就是一團亂麻甲方或者下游施工單位根本沒法用。用ezdxf創(chuàng)建帶圖層的圖紙核心代碼長這樣import ezdxf doc ezdxf.new(R2010) doc.layers.add(輪廓線, color7, linetypeCONTINUOUS) doc.layers.add(中心線, color1, linetypeCENTER) doc.layers.add(標注層, color3, linetypeCONTINUOUS) msp doc.modelspace() msp.add_line((0, 0), (100, 0), dxfattribs{layer: 輪廓線}) msp.add_line((50, -10), (50, 10), dxfattribs{layer: 中心線})注意color是AutoCAD的索引色號7是白色/黑色視背景而定1是紅色3是綠色。linetype如果不設(shè)置默認就是BYLAYER跟著圖層走。這里有個細節(jié)linetypeCENTER的前提是該線型已經(jīng)加載到圖紙里ezdxf提供doc.setup_modelspace之類的輔助方法但更穩(wěn)妥的做法是用doc.linetypes.add逐個添加。批量出圖時我習(xí)慣把圖層、線型、文字樣式的創(chuàng)建邏輯封裝成一個獨立的初始化函數(shù)每張新圖都調(diào)用一次保證所有圖的基礎(chǔ)配置一致。3.2 文字和標注怎么放才不會亂跑CAD圖紙里的文字不是隨便寫個坐標就能對齊的。中文字體、文字高度、對齊方式、旋轉(zhuǎn)角度這些參數(shù)直接決定最終出圖效果。用ezdxf加文字最常用的方式是add_textmsp.add_text( 節(jié)點A-01, dxfattribs{ height: 2.5, layer: 標注層, style: HZ } ).set_placement((10, 10), alignezdxf.const.MIDDLE_CENTER)這里的style指文字樣式需要先在文檔里定義好尤其是中文字體樣式。CAD默認的standard樣式對中文支持不太好容易出現(xiàn)問號亂碼。我一般在初始化時加一個HZ樣式doc.styles.add(HZ, fontsimhei.ttf)set_placement里的align參數(shù)控制對齊方式MIDDLE_CENTER是最常用的表示文字中心點對準坐標。如果不設(shè)置對齊文字默認從左下角開始排多行文字特別容易錯位。標注比文字復(fù)雜一些但ezdxf也封裝好了線性標注msp.add_linear_dim( base(50, -5), p1(0, 0), p2(100, 0), dxfattribs{layer: 標注層} ).render()這段代碼會在兩個點之間生成一個水平標注。記得調(diào)用render()否則標注不會真正生成到圖紙里這個坑我踩過兩次才記住。3.3 批量循環(huán)時參數(shù)千萬別寫死在代碼里所謂“批量”核心是把變化的部分抽出來變成循環(huán)里的變量。我見過最糟糕的寫法是把100個坐標直接粘在代碼里效果跟手工畫沒區(qū)別。正確的思路是數(shù)據(jù)放外部Excel、CSV、JSON、數(shù)據(jù)庫代碼里只留“讀取數(shù)據(jù)→生成圖元”的邏輯。比如我要批量生成一批定位板圖紙每張圖的孔徑、位置不同數(shù)據(jù)放在holes.csv里編號,圓心X,圓心Y,半徑,板寬,板高 A001,30,40,8,120,80 A002,55,20,10,150,100Python這邊就循環(huán)讀取import csv import ezdxf with open(holes.csv, encodingutf-8) as f: for row in csv.DictReader(f): doc ezdxf.new(R2010) # 初始化圖層、樣式... msp.add_rectangle((0, 0), (float(row[板寬]), float(row[板高]))) msp.add_circle((float(row[圓心X]), float(row[圓心Y])), float(row[半徑])) doc.saveas(foutput/板件_{row[編號]}.dxf)提取參數(shù)的意義不僅在于方便批量還在于“改一處全部生效”。如果明天孔徑變了只改CSV不用動一行代碼。這才是批量生成的真正價值。4. 實操過程用ezdxf從零生成一張完整圖紙4.1 以“100張預(yù)埋件定位圖”為例搭出可復(fù)制的框架我拿一個實際跑過的需求給你完整過一遍流程項目方要給一百多個預(yù)埋件分別出一張定位圖每張圖就是一個矩形板加四個圓孔、一條中心線、一個編號文字參數(shù)全在Excel里。第一步先建模板思路。我跟同事核對清楚圖紙比例、圖層名稱、圖框大小、文字高度這些必須全項目統(tǒng)一于是先固定了一個配置字典CONFIG { layer_outline: 輪廓線, layer_center: 中心線, layer_dim: 標注層, font: simhei.ttf, text_height: 3.0, id_prefix: YMJ-, }第二步寫一個創(chuàng)建單張圖的函數(shù)。這個函數(shù)只干一件事輸入?yún)?shù)輸出一張完整的DXFdef create_plate_dxf(plate_id, width, height, holes, output_path): doc ezdxf.new(R2010) msp doc.modelspace() # 初始化圖層、文字樣式 doc.layers.add(輪廓線, color7) doc.layers.add(中心線, color1, linetypeCENTER) doc.layers.add(標注層, color3) doc.styles.add(HZ, fontCONFIG[font]) # 畫外輪廓 msp.add_lwpolyline( [(0, 0), (width, 0), (width, height), (0, height), (0, 0)], dxfattribs{layer: 輪廓線} ) # 畫中心線 msp.add_line((0, height / 2), (width, height / 2), dxfattribs{layer: 中心線}) # 畫孔 for cx, cy, r in holes: msp.add_circle((cx, cy), r, dxfattribs{layer: 輪廓線}) # 寫編號 msp.add_text( CONFIG[id_prefix] plate_id, dxfattribs{height: CONFIG[text_height], style: HZ, layer: 標注層} ).set_placement((width / 2, height 5), alignezdxf.const.MIDDLE_CENTER) doc.saveas(output_path)注意這里用了add_lwpolyline而不是四條add_line原因是多段線在CAD里是一個整體對象后期選中、修改、導(dǎo)入其他軟件都更方便文件體積也更小。第三步寫批量入口。import csv with open(precast_holes.csv, encodingutf-8) as f: for row in csv.DictReader(f): holes [] for i in range(1, 5): cx float(row[f孔{i}X]) cy float(row[f孔{i}Y]) r float(row[f孔{i}R]) holes.append((cx, cy, r)) create_plate_dxf( plate_idrow[編號], widthfloat(row[板寬]), heightfloat(row[板高]), holesholes, output_pathfoutput/{row[編號]}.dxf )跑完以后輸出目錄里就有了一百多張DXF。用CAD打開抽查幾張圖層、線型、編號都規(guī)范直接就能交付。整個過程從寫腳本到出圖不到半小時。4.2 加標題欄和圖框用“塊”來復(fù)用如果每張圖還要加圖框和標題欄千萬別每張圖都重新畫一遍。ezdxf支持“塊Block”相當于一個可重復(fù)使用的零件庫。先定義一個圖框圖塊再在每張圖的模型空間里插入這個塊def add_title_block(msp, title_text, block_nameTITLE_BLOCK): block msp.block # 實際應(yīng)該用doc.blocks # 注意塊應(yīng)該在doc級別定義而不是msp嚴謹一點的寫法是這樣def setup_title_block(doc, block_nameTITLE_BLOCK): block doc.blocks.new(nameblock_name) # 在塊里畫圖框線 block.add_line((0, 0), (420, 0)) block.add_line((420, 0), (420, 297)) block.add_line((420, 297), (0, 297)) block.add_line((0, 297), (0, 0)) # 在塊里寫標題欄文字 block.add_text(項目名稱, dxfattribs{height: 5}).set_placement((10, 10)) block.add_text(圖號, dxfattribs{height: 5}).set_placement((10, 20)) return block def add_title_block_to_drawing(msp, title_text): msp.add_blockref(TITLE_BLOCK, (0, 0), dxfattribs{layer: 圖框?qū)觹)插入塊用add_blockref傳入塊名和插入點坐標。一個塊可以反復(fù)被插入到任何圖紙里天然適配批量場景。而且塊內(nèi)部的所有圖元是作為一個整體存在的后續(xù)想統(tǒng)一改圖框樣式只需要改塊定義所有引用它的圖紙在CAD里重新打開時都會更新。4.3 批量合并圖紙其實很簡單說到“圖紙合并”這也是一個常見的衍生需求。用ezdxf合并多張DXF的核心思路是讀取每張圖的模型空間圖元逐個復(fù)制到目標文檔里。import ezdxf def merge_dxf_files(file_list, output_file): target_doc ezdxf.new(R2010) target_msp target_doc.modelspace() for idx, path in enumerate(file_list): source_doc ezdxf.readfile(path) source_msp source_doc.modelspace() # 把源圖的所有圖元復(fù)制到目標圖 target_msp.add_entities(source_msp) # 如果需要把每張圖平移到不同位置 # 這里可以加變換操作 target_doc.saveas(output_file)這里有兩個細節(jié)。一個是target_msp.add_entities(source_msp)ezdxf會盡量保留原圖元屬性但復(fù)制過來后圖層、文字樣式如果和目標文檔不一致CAD打開時可能顯示異常。所以我會在合并前把所有源圖的圖層、樣式也一并合并到目標文檔里。另一個是如果多張圖合并后需要分行錯位排版可以給每張圖源圖元加一個平移向量這需要遍歷圖元并修改坐標可以用ezdxf的transform相關(guān)方法實現(xiàn)類似msp.translate或者遍歷每個實體做矩陣變換但通常直接定位每張圖的原點更省事。合并后的圖紙如果覺得文件太亂還可以對這個合并文檔執(zhí)行一次“清理”doc.cleanup()cleanup()會清理未使用的圖層、樣式、線型等定義讓文件保持干凈。合并前的源文件如果有重復(fù)圖層名但屬性不同合并后也會以目標文檔為準這也是為什么要統(tǒng)一模板的原因。5. 批量修改已有CAD圖紙pyautocad實戰(zhàn)5.1 用ActiveX控制AutoCAD時的幾個關(guān)鍵動作如果你的輸入是DWG文件或者需要修改別人發(fā)來的圖紙ezdxf就顯露出局限性了它讀不了DWG。這時候pyautocad登場。pyautocad的基本用法很簡單幾步就能跑通from pyautocad import Autocad acad Autocad(create_if_not_foundTrue) print(acad.doc.Name)這段代碼會連接當前打開的AutoCAD如果沒有CAD在運行會自動創(chuàng)建一個新文檔。連接成功后就可以讀取、修改文檔內(nèi)容。比如遍歷模型空間所有文本對象把文字“舊版”批量改成“新版”from pyautocad import Autocad acad Autocad(create_if_not_foundTrue) for entity in acad.iter_objects(): if entity.ObjectName AcDbText: if entity.TextString 舊版: entity.TextString 新版這段代碼很短但承載著大批量改文字的最常見需求。同理想批量改圖層顏色for entity in acad.iter_objects(): if entity.Layer 某層名: entity.color 1 # 改成紅色iter_objects()默認遍歷模型空間。如果圖里還有布局空間的對象得自己額外處理。還有一點要注意pyautocad對中文支持有時候不穩(wěn)如果文字是中文在腳本里直接寫字符串一般沒問題但如果字符串來源是文件要注意編碼統(tǒng)一用utf-8避免亂碼。5.2 批量改完圖后自動另存和導(dǎo)出PDF批量修改的最后一個動作通常是把圖另存為新DWG或者導(dǎo)出PDF。用pyautocad執(zhí)行保存有兩種常見路徑acad.doc.SaveAs(rD:\output\改后圖紙.dwg)如果要做PDF導(dǎo)出最簡單的辦法是調(diào)用AutoCAD自帶的打印命令acad.doc.Plot.QuietErrorMode True acad.doc.Plot.PlotToFile(rD:\output\改后圖紙.pdf)注意PDF導(dǎo)出依賴AutoCAD里的頁面設(shè)置最好在模板里提前配好打印機為“DWG To PDF.pc3”、紙張大小、打印區(qū)域。否則導(dǎo)出的PDF可能出現(xiàn)空白或者范圍不對。這個屬于CAD操作層面的事但很多人卡在這我提一句免得你白踩坑。批量處理DWG時我還會給每個文件開“只讀”保護避免腳本運行中手滑改了源文件acad.Documents.Open(path, ReadOnlyTrue)這種細節(jié)不跑上幾次批量腳本你是意識不到的。6. 常見問題與排查技巧實錄6.1 先給一張問題速查表問題原因解決方案DXF里中文顯示成問號文字樣式?jīng)]用中文字體在文字樣式中設(shè)置simhei.ttf或simsun.ttf標注調(diào)用了render()但圖紙里看不到標注所在圖層被關(guān)閉或凍結(jié)檢查圖層的on狀態(tài)和frozen狀態(tài)ezdxf讀取已有DWG報錯ezdxf只支持DXF/DXF格式用pyautocad或先把DWG另存為DXF合并圖紙后部分圖元“消失”目標文檔缺少源文檔的圖層/線型定義合并前逐一添加源文檔的圖層、線型、樣式pyautocad導(dǎo)入報錯pywin32沒裝或版本不對單獨執(zhí)行pip install pywin32CAD批量導(dǎo)出PDF空白頁面設(shè)置不符合要求在CAD中預(yù)設(shè)“DWG To PDF.pc3”打印機和打印范圍批量生成圖紙文件體積太大每張圖拷貝大量重復(fù)塊定義用塊引用BlockRef復(fù)用而不是復(fù)制圖元這張表里的問題我?guī)缀跞加龅竭^?!皹俗⒖床灰姟蹦莻€問題最坑因為代碼沒有報錯只怪當時圖層設(shè)置成了關(guān)閉狀態(tài)。這提醒我批量出圖前一定要“檢查一遍圖層狀態(tài)”。6.2 排查思路先出小批量全流程再放大規(guī)模批量任務(wù)最忌諱一上來就循環(huán)一萬次。我的習(xí)慣是第一步先跑一個只有3-5條數(shù)據(jù)的樣例人工打開DXF檢查每個圖元的位置、圖層、文字、標注。這一步能攔掉90%的規(guī)則錯誤比如坐標算錯了、文字重疊了、圖層命名不對。第二步做一次全量生成但抽查輸出文件目錄結(jié)構(gòu)、文件數(shù)量、文件大小是否合理。比如100個文件總大小應(yīng)該在一定范圍內(nèi)突然出現(xiàn)某個文件大小異常多半就是內(nèi)容缺失或者運行時報錯被吞了。第三步批量導(dǎo)入CAD或者用工具批量轉(zhuǎn)一次PDF抽查幾張最終效果的清晰度、圖框完整性。這套三步走的方法不是誰教的是我跑了七八次批量任務(wù)之后總結(jié)出來的。最慘的一次一晚上生成了300多張圖第二天給客戶一打開發(fā)現(xiàn)線型全是實線因為源文件里的CENTER線型在合并時沒有正確帶入。后來每次跑完我都先打開三五張圖看看中心線是不是虛線再決定要不要批量交付。6.3 幾個值得養(yǎng)成的“保命習(xí)慣”第一用相對路徑和中間產(chǎn)物管理你的文件。批量生成過程中肯定會產(chǎn)生大量中間文件。我的項目目錄一般是這樣的project/ ├── data/ # 原始參數(shù)文件Excel/CSV/JSON ├── scripts/ # Python腳本 ├── output_dxf/ # 生成的DXF文件 ├── output_dwg/ # 轉(zhuǎn)格式后的DWG文件 └── logs/ # 運行日志腳本跑完看一眼output_dxf目錄里文件數(shù)量對不對比肉眼一張張看快多了。第二每張圖紙都必須寫入“生成時間”和“版本號”??梢杂胑zdxf給文檔寫擴展數(shù)據(jù)或者放在圖紙的標題欄里。一次跑了三十多版參數(shù)最后客戶說“第一版其實就行”你要是沒記錄版本號想死的心都有。doc.header[$CUSTOM] generated by python script v1.2這只是示意實際用標題欄文字能看得更直觀。我把版本號、生成時間、參數(shù)來源文件名都寫在圖框的一角交付的時候特別省事。第三腳本日志一定要有。不輸出到命令行也要輸出到文件。import logging logging.basicConfig(filenameflogs/run_{time_str}.log, levellogging.INFO)批量任務(wù)跑到一半如果掛了日志能立刻告訴你掛在第幾條數(shù)據(jù)上。沒有日志你就只能從頭跑浪費時間還容易漏錯。7. 再看一個進階場景用Python自動給CAD圖紙做批量編號7.1 編號規(guī)則是什么怎么在腳本里落地圖紙編號是工程交付最煩人但又必須做的事。規(guī)則往往是“項目號-專業(yè)-序號”這種組合比如SJ2024-GY-001。手動編復(fù)制粘貼極易出錯用Python編規(guī)則清晰幾秒鐘搞定。我實際做過的一個需求一張圖里有幾十個零件框每個框都要編一個不重復(fù)的號號要寫在指定位置還要跟Excel里的清單一一對應(yīng)。這個需求用ezdxf做特別順手import ezdxf import csv part_list [] with open(parts.csv, encodingutf-8) as f: for row in csv.DictReader(f): part_list.append(row) # 假定包含 序號, 位置X, 位置Y, 規(guī)格 doc ezdxf.readfile(base.dxf) msp doc.modelspace() for i, part in enumerate(part_list, start1): number f{part[規(guī)格]}-{i:03d} x float(part[位置X]) y float(part[位置Y]) msp.add_text(number, dxfattribs{height: 3.0, style: HZ} ).set_placement((x, y), alignezdxf.const.MIDDLE_CENTER) doc.saveas(numbered.dxf)這個腳本雖然短但背后有個關(guān)鍵點零件位置必須先從CAD圖紙里提取出來。如果圖紙結(jié)構(gòu)規(guī)范可以直接從圖元里讀如果圖紙是別人畫的可能需要人工先標記一次錨點。所以“批量”的前提往往是“一次規(guī)范整理”別指望完全零人工。7.2 如果目標是批量改DWG結(jié)合pyautocad更好用上面那套是直接寫DXF。如果你的源圖紙是DWG而且需要保留原文件格式那就用pyautocad來做同樣的編號邏輯from pyautocad import Autocad, APoint acad Autocad(create_if_not_foundTrue) doc acad.doc msp doc.ModelSpace for i in range(1, 30): text msp.AddText(f編號-{i:03d}, APoint(50, 10 * i), 2.5)AddText是AutoCAD的ActiveX接口前兩個參數(shù)是內(nèi)容和插入點第三個是文字高度。APoint用來構(gòu)造坐標點。這里又出現(xiàn)一個中文注意項如果AddText里的字符串是中文請確認CAD里當前文字樣式支持中文否則顯示又是問號。7.3 用參數(shù)模板代替寫死的腳本才是可持續(xù)的批量化真正做多了你會發(fā)現(xiàn)每一個“一次性”的批量任務(wù)背后其實都能沉淀成一套模板。代碼不要寫死在腳本里把“哪些圖層、什么線型、文字多高、編號前綴、文件命名規(guī)則”都抽成配置項最好是一個config.yaml或config.py。配置化之后下次遇到類似需求只需要改配置文件腳本幾乎不動。這是我從十幾次批量化項目里得到的最大感悟。很多人覺得“這次需求很急先硬寫一氣”但硬寫的腳本往往第二周就廢了。花20分鐘抽一個配置層后面能省兩小時還不止。8. 寫在最后的一點個人體會這套“Python批量生成CAD圖紙”的方法我前前后后跑了兩年多。從最初給朋友幫忙改圖到后來在項目里正式承擔批量出圖任務(wù)最深的感受就一句話批量生成不是讓你拋棄CAD而是讓你把重復(fù)操作從人手里拿出去。CAD仍然是你最強大的設(shè)計和審圖工具Python只是替你做那些不需要判斷、只需要執(zhí)行的事情。如果你第一次上手我建議你從最簡單的需求開始比如拿三五個圓孔板試試ezdxf生成DXF再打開CAD確認效果。你可能會發(fā)現(xiàn)自己第一次寫的腳本雖然能跑但圖層、線型、文字對齊都差著意思。這很正常把這些規(guī)范補上你的腳本才算真正能交付。最后分享兩個小技巧一個是用ezdxf生成圖紙時文件名里最好帶上生成時間和版本號避免后面找不到上一版另一個是批量交付前一定抽出三張圖用CAD“人肉”看一眼別完全信任腳本輸出眼睛掃一遍能發(fā)現(xiàn)很多代碼里看不出來的問題。批量出圖這條路一旦走通你會發(fā)現(xiàn)它比你想象的還要香。祝你第一張批量生成的圖紙順利落地。