1. 程式人生 > 其它 >UG二次開發 PYTHON 環境配置

UG二次開發 PYTHON 環境配置

NX 二次開發 PYTHON VSCODE 環境配置

我電腦上裝的是WIN11 NX1988

  • 在電腦的UG的安裝資料夾內找到 python
    一般在 xx\NXBIN
    在所在的資料夾內,執行python 可以找到版本資訊。

  • 在電腦上裝版本高度相同的 python
    包括大版本和小版本

  • 在UGii 資料夾下,找到 ugii_env.dat 用記事本開啟
    配置python的庫的路徑 (這個可以參考唐老師的文章 )
    UGII_PYTHONPATH=...
    注意:可以在電腦的環境變數裡設定,但優先順序沒有在這裡設定高。

  • 在vscode裡,裝上 pydev外掛。

    • 設定 forcedBuiltins
        "python.pydev.forcedBuiltins": [
        "NXOpen",
        "NXOpen.ALP",
        "NXOpen.AME",
        "NXOpen.AnimationDesigner",
        "NXOpen.Annotations",
        "NXOpen.Appearance",
        "NXOpen.Assemblies",
        "NXOpen.AutomatedTesting",
        "NXOpen.AutomatedTestingCase",
        "NXOpen.BlockStyler",
        "NXOpen.BodyDes",
        "NXOpen.CableRouter",
        ...
        ]
    
  • 小技巧

    • 在一個地方建一個資料夾,history

      history/  
          |- bmps/  
          |- dlx/  
          |   |- zzz.dlx  
          |   |- zzz.py 
          |- spt/  
          |   |- __init__.py
          |   |- yyy.py
          |- xxx.py
      

      xxx.py 就是自己定義的命令
      bmps 資料夾存放命令圖示
      dlx 資料夾存放使用者定義ui塊
      spt 方件夾 用於存放自定義的一些常用函式

    • 在xxx.py 檔案中,

      import os
      os.chdir(os.path.dirname(os.path.abspath(__file__)))
      

      這樣,把工作目錄更改到 history, 再 from sup import yyy 就不會找不到。

    • dlx資料夾中, 把 zzz.py開啟,

          def __init__(self):
          try:
              self.theSession = NXOpen.Session.GetSession()
              self.theUI = NXOpen.UI.GetUI()
              self.theDlxFileName = "./dlx/zzz.dlx"
              ...
      

      原文是 self.theDlxFileName = "zzz.dlx" , 加上 ./dlx/
      這樣,在xxx.py 中,

          from dlx.zzz import zzz as _zzz
      

      可以正常工作

    • 在xxx.py中,

          class zzz(_zzz):
              ...
      

      過載原來的 apply_cb(self)等函式,實現自己想要的功能。

    • 在xxx.py中,把zzz.py的一部分 複製過來

      
          def main():
              ...
      
      
          if __name__ == "__main__":
              main()
      
      

      加到檔案最後

    • 在UG 中新建使用者命令,引用xxx.py,就可以執行了。

    • 在spt資料夾裡,加一個printer.py

      class Printer:
          theSession = None
          lw = None
      
          def __init__(self, session):
              self.theSession = session
              self.lw = self.theSession.ListingWindow
              self.lineLength = 130
      
          def info(self, obj):
      
              if self.lw is None:
                  self.lw = self.theSession.ListingWindow
              s = str(obj)
              l = len(s)
              if not self.lw.IsOpen:
                  self.lw.Open()
              for i in range(l // self.lineLength + 1):
                  self.lw.WriteLine(
                      s[i * self.lineLength : i * self.lineLength + self.lineLength]
                  )
      

      在 xxx.py中

          from spt.printer import Printer
          info=Printer(NXOpen.Session.GetSession()).info
      
          
      

      可以用 info(xxx) 列印一些提示資訊。