簡體   English   中英

使用Iron Python和Solidworks API

[英]Using Iron Python with Solidworks API

我一直在使用python在Solidworks中編寫一些重復行為的腳本。 我花了一些時間試圖通過win32com庫並設法得到很多工作,但遇到了障礙。 所以我現在正試圖通過Iron Python來控制API。 只是試圖滾動並遇到問題。 我試過運行下面的代碼:

import clr
clr.AddReferenceToFileAndPath('..\\Redist\\SolidWorks.Interop.sldworks.dll')
clr.AddReference('SolidWorks.Interop.swconst')
from SolidWorks.Interop import sldworks
from SolidWorks.Interop import swconst

print sldworks
swApp = sldworks.ISldWorks()
swApp.Visible = True

在運行此代碼時,我得到“TypeError:無法創建ISldWorks的實例,因為它是抽象的”

這里查看solidworks文檔后我看到了這樣的信息:“此界面是SolidWorks API中的最高級別對象。此界面提供了一組通用功能,允許應用程序級別的操作,如創建,打開,關閉和退出文檔,排列圖標和窗口,更改活動文檔以及創建屬性定義。

使用CreateObject,GetObject,New或類似函數從Dispatch應用程序(Visual Basic或C ++ Dispatch)獲取ISldWorks對象。 獨立的.exe C ++ COM應用程序可以使用CoCreateInstance。 所有SolidWorks API加載項向導都會自動為您創建ISldWorks對象。

事件是使用Microsoft .NET Framework中的代理實現的。 有關此接口的委托列表,請參閱概述主題。“

現在,雖然我對python編程非常熟悉,但整個.net對我來說都是一種新動物,所以我確信我做的是一些簡單的錯誤,但我當然很難弄明白究竟是什么。 謝謝你的幫助。

--UPDATE所以我經歷過並研究.net系統是如何工作的,我覺得我有更好的處理方式。 因此,如果我理解正確,我的目標是嘗試創建Solidworks應用程序對象或ISldWorks的實例,然后我應該能夠訪問所有成員。 在我的研究中,我發現了這兩篇文章: Solidworks獨立應用程序和來自這些的鐵python文檔,以及您非常有幫助的響應,看起來下面的代碼應該可行。 雖然在運行時,我收到一條錯誤,上面寫着“EnvironmentError:System.Runtime.InteropServices.COMException(0x8002802B):找不到元素。(HRESULT異常:0x8002802B(TYPE_E_ELEMENTNOTFOUND))”這會讓我相信對象仍然是沒有正確安置。

import System
t = System.Type.GetTypeFromProgID('SldWorks.Application')
swApp = System.Activator.CreateInstance(t)
swApp.Visible = True

簡化一下:

在.NET和COM中,通常不直接調用類的構造函數來創建實例。 事實上,大多數服務甚至不暴露實際的類。 相反,它們暴露了一個接口 - 即一個抽象類型,它是實際類的超類型,只是定義了他們希望你擁有的公共方法 - 然后是(a)一個工廠函數,它生成一個具體的實例該接口的子類,或(b)COM可以在“自動工廠”函數(如CreateObject )中使用的具體類。

這就是文檔在他們說:

使用CreateObject,GetObject,New或類似函數從Dispatch應用程序(Visual Basic或C ++ Dispatch)獲取ISldWorks對象。 獨立的.exe C ++ COM應用程序可以使用CoCreateInstance。

CreateObject采用“ProgID”,一個表示具體類型名稱的字符串,並完成從該名稱獲取具體類型所需的所有魔法,通過.NET / COM互操作傳遞,請求服務創建該具體類型的對象,驗證它是否與相應的接口匹配,並將其包裝起來。 如果有一個使用VB.NET的SolidWorks的例子,它可能會使用CreateObject ,你可以從IronPython做同樣的事情。

但是,實際上,在某些時候,您需要閱讀有關.NET的一些文檔,並了解所有這些文檔的含義。

我想知道這個問題是否已經解決,但仍然在這里發布。 像使用COM的其他應用程序一樣,只需輸入

swApp = Dispatch("sldworks.Application")

通過這樣做,您可以訪問Solidworks,並且可以使用API​​來執行您想要的操作。 希望這會有所幫助,無論誰需要它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM