11行python代碼助力pkpm模型導入3d3s

在結構設計計算中,總會遇到需要導模型的情況。雖然大部分項目只需要我們用PKPM即可,但天下結構軟件各有千秋,PKPM功能強大,也無法做到面面俱到。

11行python代碼助力pkpm模型導入3d3s的圖1

除PKPM外,Sap2000,Midas等結構設計軟件作者均有接觸,但要說操作最直觀最方便的,3D3S說自己是第二,可能沒人敢說自己是第一。當需要軟件進行補充計算時,現在很多人會選擇3D3S。

11行python代碼助力pkpm模型導入3d3s的圖2

然而導模型可以說得上是結構設計中最兇險的環節之一了,當一個模型從軟件A跑到軟件B里面,作為補充計算的需要,設計人員往往沒有時間對導入的模型進行全方位充分細致的檢查,導過去的模型往往會有各種各樣的雷等著大家去踩。這里作者就介紹一下最近PKPM導3D3S遇到的一個問題以及解決方案。

11行python代碼助力pkpm模型導入3d3s的圖3

在3D3S14.0版本之后,提供了導入PKPM模型的功能,雖然14.0菜單上顯示的是導入SATWE,事實上還是需要用戶在PKPM的SPACECAD模塊中點生成數據之后才能導入。

11行python代碼助力pkpm模型導入3d3s的圖4


作者最近需要將PKPM模型導入3D3S后進行鋼結構截面優選,但是一通操作下來,發現導過來的模型在3d3s中顯示截面時是這個效果:

11行python代碼助力pkpm模型導入3d3s的圖5

每根桿件截面只顯示一個編號,要看具體的截面尺寸?不好意思,雙擊進去還要點好幾步才看得到。這下好了,本來是想提高效率,現在模型這個樣子,要想在此基礎上優化截面,可能還不比直接用PKPM快。但是一想到PKPM里面去建桁架的痛苦經歷,作者決定嘗試一下解決這個問題。首先進到3d3s的截面庫,可以看到“自動命名”的選項已經勾上了,但是程序并沒有執行自動命名的操作。

11行python代碼助力pkpm模型導入3d3s的圖6

小心翼翼地在第一個截面參數后面輸個0,奇跡發生了!截面名稱自動以截面參數進行了命名。

11行python代碼助力pkpm模型導入3d3s的圖7

到了這一步不愿意編程的同學已經可以按此思路手動去修正模型了,直接輸0回車一套操作就能解決這個問題。

然而手頭這個模型幾百個截面,一個一個輸0也得輸好久。這種時候,當然就該是我們的主角—python登場了。

11行python代碼助力pkpm模型導入3d3s的圖8

計劃的是利用python windows GUI相關的功能來解決問題,讓python來幫我輸入這一大串的0。熟悉WINAPI的同學可能直接拿著ctypes就能開工,但為求速度,我這里用到的庫叫pywinauto,是一個專門用于windows自動化的python庫。如果你還沒有安裝,可能需要打開cmd,通過pip安裝,這里推薦清華鏡像安裝。

利用pywinauto,可以自動檢測到3d3s窗口及子窗口,并分析窗口內容,自動輸入……但是,我們要的是速度,所以什么自動分析都免了吧,直接用一個抓取窗口句柄的小工具ViewWizard,只需要把右下角的小放大鏡拖放到對應窗口的位置,即可獲得窗口句柄。

11行python代碼助力pkpm模型導入3d3s的圖9

Viewvizard獲取到句柄之后,在python中直接用

listv=pywinauto.controls.hwndwrapper.HwndWrapper(表格句柄)

impv=pywinauto.controls.hwndwrapper.HwndWrapper(截面參數輸入框句柄)

即可將兩個窗口打包成兩個可以方便操作的對象。接下來代碼進入一個循環,依次點擊列表框中的截面,點擊之后再到截面參數處輸入一個0就可以完美地解決這個問題啦??偣仓恍枰?1行代碼。寫代碼+調試5分鐘搞定,從此以后導模型都可以用這個程序解決啦!程序運行效果如下:

11行python代碼助力pkpm模型導入3d3s的圖10


如果覺得這篇文章能幫到你,歡迎評論、轉發!關注公眾號并后臺回復:命名 獲取完整代碼及相關小工具

11行python代碼助力pkpm模型導入3d3s的圖11

登錄后免費查看全文
立即登錄
App下載
技術鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP

13
7
6