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",

      ...

      ]
  • 在VSCODE 里 实现代码补全和代码提示。(22.06.24 更新)

    传送门

  • 小技巧

    • 在一个地方建一个文件夹,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 spt 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) 打印一些提示信息。

测试

/support/_base.py

import NXOpen

def gets():

    return NXOpen.Session.GetSession()

/support/_print.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]
)

/suport/__init__.py

from ._printer import Printer
from ._base import gets info = Printer(gets()).info __all__ = ["info", "gets"]

sysinfo.py

# nx: threaded
# NX 1988 import sys
from support import info, gets
import os
import numpy as np
from PIL import Image as ig
import math def main():
info(sys.version)
for i in sys.path:
info(i)
info(f"work dir: {os.getcwd()}") info(f"-->I will change the work dir.<--")
os.chdir(os.path.dirname(os.path.abspath(__file__)))
info(f"work dir: {os.getcwd()}") info(f"")
info(f"--> test numpy .<--")
ar = np.array([i for i in range(12)], dtype=np.uint8)
ar = np.reshape(ar, (3, 4))
info(ar)
info(ar.shape)
info(ar.dtype) info(f"")
info(f"--> session .<--")
info(gets()) info(f"")
info(f"--> test plt .<--")
img = np.zeros((300, 400), dtype=np.uint8)
r = 50
x0 = 150
y0 = 200
for i in range(-r, r + 1, 1):
yx = round(math.sqrt(r * r - i * i)) img[(x0 + i, y0 - yx)] = 255
img[(x0 + i, y0 + yx)] = 255
img[(x0 + i + yx, y0 + i)] = 255
img[(x0 + i - yx, y0 + i)] = 255 im = ig.fromarray(img)
im.show() if __name__ == "__main__":
main()


22.03.31

后续

后来我又在另一台电脑上配置环境,在import numpy 时总是卡住,又仔细研究了下,发现了一些之前没注意的要点.

  • ug里的python 是 python发行版的 embed 包. 它添加了一些 ug NXOpen 的 .pyd的包.如果在大版本相同的情况下,

    是可以用小版本不同的包来替换的.比如,3.8.8 改成3.8.10
  • nxbin/python 目录内有一个 sitecostomize.py 的文件, 他内部定义了一个 加载器, 用于加载 NXOpen_XXX.pyd包.

    这是运用了python的加载机制.如果在另外的python.exe 要加载NXOpen相关的包时,要把这个文件复制过去.
  • 如果用 nxbin/python 里的 python.exe 来做为执行器,那么要从网上下载get-pip.py,他会给这个加上pip的功能.(注意相关的环境变量的设置).

    同时,有一个python38._pth的文件,要把 #import site的 "#" 给取消了.这样在外部调用时,不会报错,同时,自动加载sitecostomize.py.

    如果要对sys.path有一些操作,可以在nxbin/python内新建一个usercostomize.py,进行必要的操作.
  • 如果要加载numpy, 必须在自己写的.py文件第一行,加上"# nx: threaded",不然,import numpy as np时,UG的线程会卡住.

    用这种方式加载的代码,如果叫A.py ,他引用了同级的文件夹B内的BB.py,BB的内容应该是加载到线程中去的.如果改动BB.py而不重启UG

    UG 会忽略BB.py的更改.

UG二次开发 PYTHON 环境配置的更多相关文章

  1. 在Eclipse中手动安装pydev插件,eclipse开发python环境配置

    最近在学习Python,因为我是做java的,用惯了eclipse,所以就想用eclipse开发python,但是配置开发环境的时候发现按照网上的配置大多不行,而且都是用的在线安装,很垃圾,没办法,自 ...

  2. 1.python环境配置 - python基础入门

    工欲善其事必先利其器,python学习首先要做得就是配置python环境.配置环境只需要下载Pycharm 和 Anaconda两个安装包即可,请跟上我得步伐,一步一步操作. 重要的事情说三遍: 先安 ...

  3. 1 python学习——python环境配置

    1 python学习--python环境配置 要学习python语言,光看书看教程还是不好,得动手去写.当然,不管学习什么编程语言,最佳的方式还在于实践. 要实践,先得有一个Python解释器来解释执 ...

  4. Selenium2学习-001-Selenium2 WebUI自动化Java开发 Windows 环境配置

    此文主要介绍 Selenium2 WebUI自动化Java开发 Windows 环境配置,供各位亲们参考,若有不足之处,敬请各位大神指正,非常感谢! 所需软件列表如下所示: 所属分类 具体名称 备注 ...

  5. VScode中python环境配置

    vscode中python环境配置 想要在vscode中运行python代码必须要告诉vscode使用哪个解释器才行 方法1. 打开命令面板(Ctrl+Shift+P)输入Python: Select ...

  6. MxNet C++和python环境配置

    MxNet C++和python环境配置 安装文件: 1.为了与python已经安装好的版本一致,在这个网站下载mxnet 1.0.0的源码 https://github.com/apache/inc ...

  7. IntelliJ IDEA开发golang环境配置

    IntelliJ IDEA开发golang环境配置 首先把GO安装好...(自行安装,附上一篇我之前写的MAC安装GO) 安装IntelliJ IDEA,下载地址: https://www.jetbr ...

  8. Android开发adb环境配置

    adb的全称为Android Debug Bridge,就是起到调试桥的作用. 在命令行cmd中打开adb,如果Android开发的环境配置有误,会出现如下错误提示: 解决方法,右键我的电脑-> ...

  9. VsCode中编写python环境配置

    1. VsCode中编写python环境配置 1.1. 前言 有过开发经验都知道idea一系列的软件虽然功能比较多,但比较容易卡,电脑不好还真容易上火,这里我想要入门python,还是选了款vscod ...

  10. memoのPython环境配置

    Python环境配置 属予作文以记之. 首先 打开网页 https://mirrors.tuna.tsinghua.edu.cn 浏览一下,都是好东西. 把这个网址保存为书签,经常要用的. 有条件的话 ...

随机推荐

  1. 在tomcat上安装PFX格式证书部署https

    您可以在Tomcat服务器安装已签发的SSL证书,实现通过HTTPS安全访问Web服务.本文介绍如何在Tomcat服务器安装PFX格式的SSL证书. 步骤一:在阿里云的域名管理后台,下载SSL证书 登 ...

  2. Cesium教程10-把影像和天空改成背景图片

    在使用Cesium引擎时,我们经常要使用大屏适配导致地球或者模型的黑色天空盒和大屏的样式不匹配造成场景不好看的情况,这样就可以用到我们修改Cesium的天空为纯色背景,与大屏更适配,直接上代码. &l ...

  3. Windows远程连接工具有哪些

    Windows远程连接工具,一般称为远程桌面软件,更准确的叫远程访问软件或远程控制软件,可以让你从一台电脑远程控制另一台电脑.远程桌面软件允许您控制连接的计算机,就好像它就在您面前一样. 远程桌面工具 ...

  4. istio sidecar 工作方式

    istio 是什么 Istio 是一个开放源代码的服务网格,它为基于微服务的应用程序提供了一种统一的方式来连接.保护.监控和管理服务.Istio 主要解决的是在微服务架构中的服务间通信的复杂性问题,它 ...

  5. nginx 常见配置案例参考(优化)

    在NGINX中,可以通过配置文件和特定的指令来实现权限控制.以下是一些常见的权限控制方法: 使用deny指令: 在NGINX配置文件中,可以使用deny指令来拒绝特定IP地址或IP地址范围的访问.可以 ...

  6. Linux 磁盘、CPU、内存获取脚本

    脚本 脚本  #!/bin/bash # 获取要监控的本地服务器IP地址 IP=`/usr/sbin/ifconfig | grep inet | grep -vE 'inet6|127.0.0.1' ...

  7. ThreadLocal原理详解——终于弄明白了ThreadLocal

    目录 概述 API介绍 ThreadLocal的理解 ThreadLocal的原理分析 总结 概述 在java学习生涯中可能很多人都会听到ThreadLocal变量,从字面上理解ThreadLocal ...

  8. 莫烦tensorflow学习记录 (3)建造我们第一个神经网络

    另一个学习文档http://doc.codingdict.com/tensorflow/tfdoc/tutorials/overview.html 定义 add_layer() https://mof ...

  9. umask永久修改用户创建文件权限

    Linux里永久设置用户创建文件权限的配置文件是/etc/profile.可以在该文件中添加umask命令来设置默认权限.具体操作步骤如下: 打开/etc/profile文件:sudo vi /etc ...

  10. 使用nvm安装以及管理多版本node教程

    安装nvm.node.npm 下载nvm安装包,推荐使用1.1.7,我个人使用1.1.8会有中文乱码的报错 点击exe文件,注意修改nvm的安装根目录以及node的安装根目录,后者是以后管理多版本no ...