動SolidWorks自動化建模與2D工程圖生成實戰(zhàn))
1. 這套工作流到底在解決什么問題先說結(jié)論這套東西的核心不是讓AI替你畫圖而是讓AI替你操作SolidWorks。你依然用SolidWorks只不過以前是你手動點菜單、拉草圖、標(biāo)尺寸現(xiàn)在變成你用自然語言告訴AI“幫我建一個模數(shù)為2、齒數(shù)20的直齒輪”AI通過MCP協(xié)議調(diào)用SolidWorks的API把這一系列操作自動完成最后連2D工程圖一起出好。我最初接觸這個方向是在去年底當(dāng)時看到MCP這個概念——Model Context Protocol模型上下文協(xié)議說白了就是給大語言模型裝了一雙能操作外部軟件的手。以前AI只能跟你聊天、寫代碼它碰不到你電腦上的軟件。MCP出現(xiàn)之后AI可以通過標(biāo)準(zhǔn)協(xié)議去調(diào)用本地的工具和服務(wù)SolidWorks就是其中一個被接入的對象。這套方案適合什么人我梳理了一下機(jī)械設(shè)計工程師每天跟SolidWorks打交道重復(fù)性建模工作多想提效但不想學(xué)復(fù)雜的二次開發(fā)產(chǎn)品結(jié)構(gòu)設(shè)計師需要快速出方案草圖、驗證外形用AI加速迭代自動化方向的開發(fā)者想把AI Agent和CAD工具鏈打通做更上層的自動化流程在校學(xué)生或剛?cè)胄械男氯讼肓私釧ICAD這個交叉方向到底怎么落地不適合什么人如果你連SolidWorks的基本操作都不熟草圖約束、特征建模這些概念還沒搞明白那這套東西對你來說就是空中樓閣。AI能幫你操作軟件但它沒法替你理解“為什么這個特征要這樣建”?;A(chǔ)功還是要有的。整個鏈路大致是這樣的你在一端輸入自然語言指令A(yù)I模型理解你的意圖通過MCP協(xié)議把意圖翻譯成SolidWorks能執(zhí)行的API調(diào)用SolidWorks執(zhí)行建模操作完成后AI再把結(jié)果反饋給你。如果需要出2D圖紙AI繼續(xù)調(diào)用工程圖相關(guān)的API自動生成視圖、標(biāo)注尺寸。聽起來很美好對吧但實際操作中坑不少。下面我把整個流程拆開從環(huán)境搭建到實際建模再到出圖一步步說清楚。2. 環(huán)境搭建與工具選型別急著上手先把地基打好2.1 SolidWorks版本選擇與安裝避坑SolidWorks的版本選擇直接決定了API的可用范圍和穩(wěn)定性。我實測下來SolidWorks 2023和2024這兩個版本對API的支持最完善尤其是涉及到工程圖自動標(biāo)注的部分2024版的API覆蓋面明顯更廣。為什么不推薦更老的版本2019以前的版本很多API接口要么缺失要么行為不一致AI調(diào)用的時候容易報錯。而且老版本在Windows 11上的兼容性也有問題我遇到過SolidWorks 2018在Win11上頻繁崩潰的情況排查了半天發(fā)現(xiàn)是顯卡驅(qū)動和舊版OpenGL的兼容問題。安裝過程中最常見的幾個坑Error 1714這個錯誤基本每個人都遇到過。原因是之前安裝過SolidWorks的某個組件注冊表里殘留了舊版本的CEFChromium Embedded Framework信息。解決方法不是簡單卸載重裝而是要徹底清理注冊表。具體操作打開注冊表編輯器定位到HKEY_LOCAL_MACHINE\SOFTWARE\SolidWorks和HKEY_CURRENT_USER\SOFTWARE\SolidWorks把這兩個鍵值整個刪掉然后重啟再安裝。如果還不行用Registry Finder搜索所有含“SolidWorks”和“CEF”的鍵值逐一清理。CEF for SolidWorks 錯誤1772這個跟1714是兄弟問題本質(zhì)都是CEF組件版本沖突。除了清注冊表還要檢查C:\Program Files\Common Files\eDrawings目錄下是否有殘留文件有的話一并刪掉。未獲得SolidWorks Visualize許可證這個不影響建模和API調(diào)用只是Visualize渲染模塊的授權(quán)問題。如果你不需要做照片級渲染可以直接忽略。如果確實需要檢查你的許可證服務(wù)器配置或者用離線激活方式重新激活。注意安裝SolidWorks之前務(wù)必關(guān)閉所有殺毒軟件和Windows Defender的實時保護(hù)。我遇到過多次因為殺毒軟件攔截了某個DLL注冊導(dǎo)致安裝完成后API無法調(diào)用的情況。2.2 MCP服務(wù)端的部署與配置MCP是整套方案的核心樞紐。你需要一個MCP Server來充當(dāng)AI和SolidWorks之間的翻譯層。目前社區(qū)里有幾種方案方案優(yōu)點缺點適用場景自建Python MCP Server靈活可控想加什么功能加什么需要寫代碼維護(hù)成本高有開發(fā)能力的團(tuán)隊社區(qū)開源MCP SolidWorks橋接開箱即用配置簡單功能受限于作者更新個人快速驗證商業(yè)CAD自動化平臺穩(wěn)定有技術(shù)支持貴按年收費(fèi)企業(yè)級部署我選的是自建Python MCP Server的方案因為需要定制一些特定的建模邏輯。核心依賴是pywin32庫通過COM接口調(diào)用SolidWorks的API。Python版本建議用3.10或3.11太新的版本pywin32兼容性還沒跟上。MCP Server的基本結(jié)構(gòu)是這樣的import win32com.client from mcp.server import Server, NotificationOptions from mcp.server.models import InitializationOptions # 連接SolidWorks sw_app win32com.client.Dispatch(SldWorks.Application) sw_app.Visible True # 定義MCP工具 server.tool() async def create_sketch(plane: str, shapes: list) - str: 在指定基準(zhǔn)面上創(chuàng)建草圖 # 調(diào)用SolidWorks API創(chuàng)建草圖 ...這里有個關(guān)鍵點SolidWorks的COM接口是單線程的。如果你的MCP Server用了異步框架必須確保所有對SolidWorks的調(diào)用都在同一個線程里執(zhí)行否則會出現(xiàn)莫名其妙的崩潰。我的做法是用一個專門的線程來跑SolidWorks操作MCP的異步接口通過隊列把任務(wù)丟給這個線程。2.3 AI模型端的選擇與接入AI模型這塊選擇比較多。核心要求是模型要支持Function Calling或者Tool Use能力因為MCP本質(zhì)上就是一套工具調(diào)用協(xié)議。我測試過幾個方案Claude系列對MCP的原生支持最好工具調(diào)用的準(zhǔn)確率最高但成本也最高GPT-4系列Function Calling很成熟但需要自己寫適配層把MCP協(xié)議轉(zhuǎn)成OpenAI的function格式國產(chǎn)大模型部分模型已經(jīng)支持MCP協(xié)議成本低但在復(fù)雜建模指令的理解上還有差距實際使用中我發(fā)現(xiàn)一個關(guān)鍵技巧不要指望AI一次就能理解復(fù)雜的建模指令。比如你說“建一個帶法蘭的圓柱體法蘭上有6個均布的螺栓孔”AI可能會漏掉某些細(xì)節(jié)。更好的做法是把復(fù)雜指令拆成多個步驟讓AI一步步執(zhí)行每一步都確認(rèn)結(jié)果。另外提示詞的設(shè)計非常重要。我在系統(tǒng)提示詞里明確告訴AI你是一個SolidWorks建模助手。你可以調(diào)用以下工具來操作SolidWorks。每次操作前先確認(rèn)當(dāng)前文檔狀態(tài)。創(chuàng)建特征時確保草圖完全定義。如果操作失敗先檢查上一步是否成功再重試。這段提示詞看起來簡單但能顯著降低AI“胡亂操作”的概率。3. 核心建模流程拆解從一句話到三維模型3.1 自然語言到建模指令的翻譯邏輯這是整個流程中最關(guān)鍵也最難的部分。用戶說“畫一個齒輪”AI需要理解什么類型的齒輪模數(shù)多少齒數(shù)多少壓力角多少寬度多少這些參數(shù)如果用戶沒說AI要么追問要么用默認(rèn)值。我的做法是在MCP Server里預(yù)定義一套參數(shù)模板。比如對于齒輪模板包含模數(shù)、齒數(shù)、壓力角、齒寬、孔徑等參數(shù)每個參數(shù)都有默認(rèn)值。AI調(diào)用create_gear工具時只需要提供用戶明確說出的參數(shù)其余用默認(rèn)值填充。server.tool() async def create_gear( module: float 2.0, teeth: int 20, pressure_angle: float 20.0, face_width: float 20.0, bore_diameter: float 10.0 ) - str: 創(chuàng)建一個直齒圓柱齒輪 # 參數(shù)校驗 if teeth 6: return 齒數(shù)不能小于6 # 調(diào)用SolidWorks API生成齒輪 ...這樣做的好處是AI不需要理解齒輪的幾何生成算法它只需要把用戶說的參數(shù)映射到工具參數(shù)上。幾何生成的具體邏輯由MCP Server里的代碼來完成。那齒輪的齒廓曲線怎么生成SolidWorks本身沒有直接的“畫齒輪”API需要用漸開線方程生成齒廓點然后通過樣條曲線擬合。漸開線的參數(shù)方程x r_b * (cos(t) t * sin(t)) y r_b * (sin(t) - t * cos(t))其中r_b是基圓半徑t是展開角。我在Python里計算出足夠多的點一般每個齒廓取50個點然后通過CreateSplineAPI生成樣條曲線再鏡像、陣列最后拉伸成三維實體。3.2 草圖自動化的關(guān)鍵技巧草圖是建模的基礎(chǔ)也是AI最容易出錯的地方。我總結(jié)了幾個關(guān)鍵技巧第一始終從基準(zhǔn)面開始。AI有時候會試圖在已有特征的面上創(chuàng)建草圖但如果那個面的引用丟失了整個特征樹就崩了。我的做法是在工具層面強(qiáng)制要求指定基準(zhǔn)面前視、上視、右視三個基準(zhǔn)面作為首選。第二草圖必須完全定義。SolidWorks的草圖如果欠定義后續(xù)特征操作可能會出問題。我在MCP Server里加了一個檢查步驟草圖創(chuàng)建完成后調(diào)用Sketch.GetConstrainedStatus()檢查約束狀態(tài)如果是欠定義自動添加尺寸約束和幾何關(guān)系。第三善用草圖圖片和DXF導(dǎo)入。對于復(fù)雜的2D輪廓與其讓AI一點點畫不如讓用戶提供DXF文件或者草圖圖片AI只需要調(diào)用導(dǎo)入API就行了。這在做非標(biāo)零件的時候特別有用。server.tool() async def import_dxf_to_sketch(dxf_path: str, plane: str Front) - str: 將DXF文件導(dǎo)入為草圖 # 選擇基準(zhǔn)面 # 插入DXF # 檢查草圖狀態(tài) ...3.3 特征建模的自動化實現(xiàn)特征建模是AI操作SolidWorks的核心環(huán)節(jié)。常用的特征操作包括拉伸、旋轉(zhuǎn)、掃描、放樣、倒角、圓角、抽殼、陣列等。每個操作對應(yīng)一組API調(diào)用。以拉伸為例基本流程是選擇草圖調(diào)用FeatureManager.FeatureExtrusion3()創(chuàng)建拉伸特征設(shè)置拉伸方向、深度、拔模角等參數(shù)確認(rèn)特征創(chuàng)建成功這里有個坑FeatureExtrusion3的參數(shù)非常多有將近20個參數(shù)而且不同SolidWorks版本參數(shù)順序可能不一樣。我的做法是封裝一個簡化版的拉伸函數(shù)只暴露最常用的參數(shù)def extrude_sketch(sw_app, sketch_name, depth, directionblind, draft_angle0): 簡化版拉伸 sw_model sw_app.ActiveDoc sw_model.Extension.SelectByID2(sketch_name, SKETCH, 0, 0, 0, False, 0, None, 0) sw_feat_mgr sw_model.FeatureManager # 參數(shù)順序參考SolidWorks 2024 API文檔 feature sw_feat_mgr.FeatureExtrusion3( True, False, False, # 單方向、不反向、不薄壁 0, 0, # 起始條件、終止條件 depth, 0, # 深度、深度2 False, False, False, False, # 拔模相關(guān) draft_angle, 0, # 拔模角 False, False, False, False, # 偏移相關(guān) True, True, True, # 合并、使用特征范圍 0, 0, False # 其他參數(shù) ) return feature對于陣列操作SolidWorks提供了FeatureCircularPattern4和FeatureLinearPattern4等API。做齒輪的齒陣列時我用的是圓周陣列需要指定陣列軸、陣列數(shù)量、角度間距。實操心得陣列操作最容易出問題的地方是陣列方向。如果陣列軸選錯了整個特征就飛了。我的做法是在陣列之前先讓AI確認(rèn)陣列軸的方向向量確保方向正確再執(zhí)行。3.4 參數(shù)化設(shè)計的實現(xiàn)思路參數(shù)化是AI驅(qū)動建模的真正價值所在。傳統(tǒng)建模方式下改一個參數(shù)可能要重新走一遍特征樹。參數(shù)化之后改參數(shù)就是改一個變量的事。SolidWorks本身支持方程式驅(qū)動的參數(shù)化通過EquationMgr接口可以管理全局變量和方程式。我在MCP Server里封裝了參數(shù)管理工具server.tool() async def set_parameter(name: str, value: float, unit: str mm) - str: 設(shè)置全局參數(shù) sw_model sw_app.ActiveDoc eq_mgr sw_model.GetEquationMgr() # 查找或創(chuàng)建參數(shù) ...這樣AI就可以在建模過程中動態(tài)設(shè)置參數(shù)。比如用戶說“把齒數(shù)改成30”AI調(diào)用set_parameter(teeth, 30)SolidWorks自動更新模型。更進(jìn)一步可以把常用的零件做成模板庫。每個模板包含參數(shù)定義、特征樹結(jié)構(gòu)、工程圖模板。AI只需要選擇合適的模板填入?yún)?shù)就能快速生成新零件。這在做系列化產(chǎn)品設(shè)計的時候效率提升非常明顯。4. 2D工程圖自動生成從三維到二維的最后一公里4.1 工程圖模板的創(chuàng)建與配置2D工程圖的自動化前提是要有一個規(guī)范的工程圖模板。模板里定義了圖框、標(biāo)題欄、比例、投影視角、尺寸標(biāo)注樣式等。SolidWorks的工程圖模板文件是.drwdot格式放在模板目錄下。創(chuàng)建模板的要點圖框和標(biāo)題欄按照公司標(biāo)準(zhǔn)或國標(biāo)制作標(biāo)題欄里的屬性要跟三維模型的屬性關(guān)聯(lián)這樣出圖的時候能自動填充投影視角國內(nèi)用第一視角歐美用第三視角模板里要設(shè)置好尺寸標(biāo)注樣式字體、箭頭大小、公差顯示方式都要在模板里預(yù)設(shè)圖層設(shè)置不同線型粗實線、細(xì)實線、中心線、虛線放在不同圖層方便后續(xù)管理我建議至少準(zhǔn)備三套模板A4橫版、A3橫版、A2橫版。小零件用A4中等零件用A3大裝配體用A2。4.2 視圖自動生成與布局工程圖視圖的自動生成核心API是CreateDrawViewFromModelView3和CreateUnfoldedViewAt3。基本流程新建工程圖文檔加載模板插入模型視圖主視圖基于主視圖投影生成俯視圖、左視圖、軸測圖調(diào)整視圖位置和比例server.tool() async def create_drawing_views( model_path: str, template_path: str, views: list [Front, Top, Right, Isometric] ) - str: 自動生成工程圖視圖 # 新建工程圖 sw_draw sw_app.NewDocument(template_path, 0, 0, 0) # 插入主視圖 sw_draw.CreateDrawViewFromModelView3(model_path, *Front, 0.1, 0.15, 0) # 投影其他視圖 ...視圖布局有個經(jīng)驗法則主視圖放在左上角俯視圖在主視圖正下方左視圖在主視圖正右方。軸測圖放在右下角。視圖之間的間距要均勻一般留30-50mm。比例的選擇也很關(guān)鍵。SolidWorks會自動計算合適的比例但有時候自動算出來的比例不是標(biāo)準(zhǔn)比例比如1:1.5需要手動調(diào)整為1:1、1:2、1:5這類標(biāo)準(zhǔn)值。4.3 尺寸標(biāo)注與公差自動添加尺寸標(biāo)注是工程圖自動化里最復(fù)雜的部分。SolidWorks提供了AddDimension2API可以自動標(biāo)注尺寸但前提是模型里已經(jīng)有對應(yīng)的尺寸信息。我的做法是分兩步走第一步在三維模型里通過ModelDocExtension.AddDimension預(yù)埋尺寸信息。這些尺寸在建模階段就標(biāo)注好出圖的時候可以直接引用。第二步在工程圖里通過AutoDimension或者手動調(diào)用AddDimension2把尺寸顯示出來。SolidWorks 2024的AutoDimension功能已經(jīng)比較智能了能自動識別需要標(biāo)注的尺寸但復(fù)雜零件還是需要人工干預(yù)。公差標(biāo)注通過Dimension.Tolerance屬性設(shè)置。常用的公差類型包括公差類型API常量適用場景無公差swTolNone非配合尺寸基本尺寸swTolBASIC理論正確尺寸雙邊公差swTolBILAT一般配合極限公差swTolLIMIT需要控制極限值配合公差swTolFIT孔軸配合注意自動標(biāo)注的尺寸往往比較亂需要人工整理。我的做法是讓AI先生成所有尺寸然后按照“先大后小、先外后內(nèi)”的原則自動排列最后人工微調(diào)。4.4 BOM表與技術(shù)要求自動填寫裝配體的工程圖還需要BOM表物料清單。SolidWorks的BOM表通過InsertBomTable4API插入數(shù)據(jù)來源是裝配體的屬性。BOM表自動化的關(guān)鍵是把零件屬性填完整。每個零件都要有零件號、名稱、材料、數(shù)量、備注。這些屬性在建模階段就通過自定義屬性寫入出圖的時候BOM表自動讀取。技術(shù)要求一般是固定的幾條比如“未注圓角R2”、“未注公差按GB/T 1804-m”、“表面處理陽極氧化”等。這些可以做成文本塊AI根據(jù)零件類型自動選擇合適的技術(shù)要求模板插入。5. 實操中踩過的坑與排查技巧5.1 SolidWorks崩潰與連接丟失這是最常見的問題。AI連續(xù)調(diào)用API操作SolidWorks的時候如果某個操作耗時過長或者內(nèi)存占用過大SolidWorks可能會無響應(yīng)甚至崩潰。排查思路檢查是不是某個特定操作導(dǎo)致的崩潰。我遇到過FeatureExtrusion3在拉伸深度超過500mm時崩潰的情況后來發(fā)現(xiàn)是顯卡驅(qū)動的問題更新驅(qū)動后解決。檢查內(nèi)存占用。SolidWorks是32位程序雖然2024版有64位版本內(nèi)存超過2GB就容易出問題。建議在MCP Server里加一個內(nèi)存監(jiān)控超過閾值就提醒保存并重啟。檢查COM連接狀態(tài)。如果SolidWorks崩潰了MCP Server里的COM對象就失效了需要重新連接。我的做法是每次操作前都檢查sw_app.ActiveDoc是否有效無效就重新Dispatch。def ensure_connection(): global sw_app try: _ sw_app.ActiveDoc except: sw_app win32com.client.Dispatch(SldWorks.Application) sw_app.Visible True return sw_app5.2 API調(diào)用返回錯誤但無詳細(xì)信息SolidWorks的API有時候返回False或者None但不告訴你為什么。這種情況最讓人抓狂。我的排查方法開啟SolidWorks的API日志。在注冊表里設(shè)置HKEY_CURRENT_USER\SOFTWARE\SolidWorks\API\LogLevel為3SolidWorks會把所有API調(diào)用記錄到日志文件里。用sw_app.GetLastError()獲取錯誤碼然后查SolidWorks API文檔里的錯誤碼對照表。分步執(zhí)行。把一個大操作拆成多個小操作逐步執(zhí)行看哪一步返回了錯誤。5.3 常見問題速查表問題現(xiàn)象可能原因解決方法MCP Server啟動報錯Python版本不兼容換用Python 3.10/3.11AI調(diào)用工具無響應(yīng)MCP連接斷開檢查MCP Server日志重啟服務(wù)草圖創(chuàng)建失敗基準(zhǔn)面引用無效改用標(biāo)準(zhǔn)基準(zhǔn)面拉伸特征失敗草圖未完全定義檢查草圖約束狀態(tài)工程圖視圖空白模型路徑錯誤確認(rèn)模型文件存在且未加密尺寸標(biāo)注亂跑視圖比例不對調(diào)整視圖比例后重新標(biāo)注BOM表數(shù)據(jù)缺失零件屬性未填寫補(bǔ)全自定義屬性SolidWorks頻繁崩潰內(nèi)存不足或驅(qū)動問題升級內(nèi)存更新顯卡驅(qū)動5.4 性能優(yōu)化的幾個實用技巧批量操作代替單步操作。比如創(chuàng)建10個螺栓孔不要一個一個創(chuàng)建用陣列一次搞定。API調(diào)用次數(shù)越少整體耗時越短。關(guān)閉不必要的顯示更新。在批量操作前設(shè)置sw_app.Visible False操作完成后再設(shè)為True。這樣能減少圖形渲染的開銷速度提升明顯。使用輕化模式打開裝配體。對于大型裝配體用輕化模式打開可以大幅減少加載時間。API里通過OpenDoc6的swOpenDocOptions_Lightweight選項設(shè)置。定期保存。AI操作過程中如果崩潰沒保存的工作就全丟了。我的做法是每完成一個特征就自動保存一次雖然會稍微慢一點但安全。6. 這套方案還能怎么擴(kuò)展6.1 與Altium Designer的聯(lián)動有人可能會問機(jī)械和電子怎么聯(lián)動其實在機(jī)電一體化產(chǎn)品里PCB板和結(jié)構(gòu)件的配合是個大問題。通過MCP把Altium Designer也接進(jìn)來AI可以同時操作兩個軟件自動檢查PCB和外殼的干涉情況。具體做法是從Altium Designer導(dǎo)出PCB的3D模型STEP格式導(dǎo)入SolidWorks然后用InterferenceDetectionAPI檢查干涉。如果發(fā)現(xiàn)干涉AI自動調(diào)整外殼的安裝柱位置。6.2 與Unity/Unreal的模型流轉(zhuǎn)SolidWorks模型導(dǎo)入Unity或Unreal做可視化展示這個流程也可以自動化。SolidWorks導(dǎo)出FBX或OBJ格式然后通過MCP調(diào)用Unity/Unreal的API導(dǎo)入模型、設(shè)置材質(zhì)、配置光照。我試過把一套行星齒輪箱的SolidWorks模型導(dǎo)入Unreal 5用MCP自動設(shè)置材質(zhì)和旋轉(zhuǎn)動畫整個過程不到5分鐘。以前手動做的話光調(diào)材質(zhì)和動畫就要半天。6.3 多AI協(xié)作的建模流水線單個AI模型的能力有限但多個AI協(xié)作可以覆蓋更復(fù)雜的場景。比如AI-A負(fù)責(zé)理解用戶需求拆解建模步驟AI-B負(fù)責(zé)執(zhí)行SolidWorks操作AI-C負(fù)責(zé)檢查模型質(zhì)量發(fā)現(xiàn)問題反饋給AI-A這三個AI通過MCP協(xié)議互相通信形成一個閉環(huán)。我實測下來這種多AI協(xié)作的方式在處理復(fù)雜裝配體的時候出錯率比單AI低很多。6.4 參數(shù)化零件庫的持續(xù)積累這套方案最大的價值不在于單次建模而在于積累。每次用AI建好的模型都可以把參數(shù)和特征樹保存為模板。下次遇到類似的零件直接調(diào)模板改參數(shù)就行。我現(xiàn)在已經(jīng)積累了齒輪、軸承座、法蘭、支架、殼體等十幾個常用模板。新項目里80%的零件都能從模板庫直接生成只有20%的非標(biāo)件需要從頭建模。這個效率提升是實實在在的。最后分享一個小技巧在MCP Server里加一個操作錄制功能把AI的每一步操作都記錄下來。這樣如果某個操作序列效果特別好可以直接保存為“宏”下次一鍵執(zhí)行。我靠這個功能把幾個常用建模流程固化下來現(xiàn)在建一個標(biāo)準(zhǔn)齒輪箱只要3分鐘。