我們會將重要的函數或類別包裝到模組當中,再將模組編譯成.dll以保護程式碼不會被別人所看到(請參考:如何加密自動化檔案)。模組當中有些操作會引用到AEDT的系統變量,像是oProject、oDesign或是oEditor等等。舉例來說,下面程式碼為my_module.py的內容,my_module.py當中定義了函數add_1mm_sphere(x, y, z) ,其輸入參數為座標點。執行函式會在該輸入座標位置產生1mm半徑的圓球,請注意程式當中用到了oEditor物件。
my_module.py程式碼
def add_1mm_sphere(x, y, z):
oEditor.CreateSphere(
[
"NAME:SphereParameters",
"XCenter:=" , "{}mm".format(x),
"YCenter:=" , "{}mm".format(y),
"ZCenter:=" , "{}mm".format(z),
"Radius:=" , "1mm"
],
[
"NAME:Attributes",
"Name:=" , "Sphere1",
"Flags:=" , "",
"Color:=" , "(143 175 143)",
"Transparency:=" , 0,
"PartCoordinateSystem:=", "Global",
"UDMId:=" , "",
"MaterialValue:=" , "\"vacuum\"",
"SurfaceMaterialValue:=", "\"\"",
"SolveInside:=" , True,
"ShellElement:=" , False,
"ShellElementThickness:=", "0mm",
"IsMaterialEditable:=" , True,
"UseMaterialAppearance:=", False,
"IsLightweight:=" , False
])
我們先將my_module.py編譯成my_module.dll檔。然後在主程式main.py加入my_module.dll參考,並呼叫add_1mm_sphere(x, y, z)函式。注意oEditor在main.py當中被宣告。
main.py程式碼
import ScriptEnv
ScriptEnv.Initialize("Ansoft.ElectronicsDesktop")
oDesktop.RestoreWindow()
oProject = oDesktop.GetActiveProject()
oDesign = oProject.GetActiveDesign()
oEditor = oDesign.SetActiveEditor("3D Modeler")
import os
os.chdir(os.path.dirname(__file__))
import clr
clr.AddReference('my_module.dll')
import my_module
my_module.add_1mm_sphere(1,2,3)
在HFSS執行main.py,此時出現錯誤訊息如下:
(圖一) 錯誤訊息 |
此錯誤訊息表示my_module當中的oEditor未被定義。雖然oEditor在main.py有被定義,但oEditor顯然無法被模組所識別。此時加入一行程式碼my_module.oEditor = oEditor即可將上層main.py的oEditor傳入到my_module當中。
import ScriptEnv
ScriptEnv.Initialize("Ansoft.ElectronicsDesktop")
oDesktop.RestoreWindow()
oProject = oDesktop.GetActiveProject()
oDesign = oProject.GetActiveDesign()
oEditor = oDesign.SetActiveEditor("3D Modeler")
import os
os.chdir(os.path.dirname(__file__))
import clr
clr.AddReference('my_module.dll')
import my_module
my_module.oEditor = oEditor
my_module.add_1mm_sphere(1,2,3)
再次執行程式main.py即可正確產生圓球結構(如圖二)。
(圖二) 程式正確輸出 |
沒有留言:
張貼留言