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",
...
]
- 设置 forcedBuiltins
在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 环境配置的更多相关文章
- 在Eclipse中手动安装pydev插件,eclipse开发python环境配置
最近在学习Python,因为我是做java的,用惯了eclipse,所以就想用eclipse开发python,但是配置开发环境的时候发现按照网上的配置大多不行,而且都是用的在线安装,很垃圾,没办法,自 ...
- 1.python环境配置 - python基础入门
工欲善其事必先利其器,python学习首先要做得就是配置python环境.配置环境只需要下载Pycharm 和 Anaconda两个安装包即可,请跟上我得步伐,一步一步操作. 重要的事情说三遍: 先安 ...
- 1 python学习——python环境配置
1 python学习--python环境配置 要学习python语言,光看书看教程还是不好,得动手去写.当然,不管学习什么编程语言,最佳的方式还在于实践. 要实践,先得有一个Python解释器来解释执 ...
- Selenium2学习-001-Selenium2 WebUI自动化Java开发 Windows 环境配置
此文主要介绍 Selenium2 WebUI自动化Java开发 Windows 环境配置,供各位亲们参考,若有不足之处,敬请各位大神指正,非常感谢! 所需软件列表如下所示: 所属分类 具体名称 备注 ...
- VScode中python环境配置
vscode中python环境配置 想要在vscode中运行python代码必须要告诉vscode使用哪个解释器才行 方法1. 打开命令面板(Ctrl+Shift+P)输入Python: Select ...
- MxNet C++和python环境配置
MxNet C++和python环境配置 安装文件: 1.为了与python已经安装好的版本一致,在这个网站下载mxnet 1.0.0的源码 https://github.com/apache/inc ...
- IntelliJ IDEA开发golang环境配置
IntelliJ IDEA开发golang环境配置 首先把GO安装好...(自行安装,附上一篇我之前写的MAC安装GO) 安装IntelliJ IDEA,下载地址: https://www.jetbr ...
- Android开发adb环境配置
adb的全称为Android Debug Bridge,就是起到调试桥的作用. 在命令行cmd中打开adb,如果Android开发的环境配置有误,会出现如下错误提示: 解决方法,右键我的电脑-> ...
- VsCode中编写python环境配置
1. VsCode中编写python环境配置 1.1. 前言 有过开发经验都知道idea一系列的软件虽然功能比较多,但比较容易卡,电脑不好还真容易上火,这里我想要入门python,还是选了款vscod ...
- memoのPython环境配置
Python环境配置 属予作文以记之. 首先 打开网页 https://mirrors.tuna.tsinghua.edu.cn 浏览一下,都是好东西. 把这个网址保存为书签,经常要用的. 有条件的话 ...
随机推荐
- 03. go-zero简介及如何学go-zero
目录 一.go-zero简介及如何学go-zero 1.go-zero官方文档 2.go-zero微服务框架入门教程 3.go-zero最佳实践 4.学习资料 二.go-zero环境搭建 1.GO环境 ...
- Oracle数据库WHERE子查询按时间段查询用法(to_date函数)
oracle中的to_date参数含义 1.日期格式参数 含义说明 D 一周中的星期几 DAY 天的名字,使用空格填充到9个字符 DD 月中的第几天 DDD 年中的第几天 DY 天的简写名 ...
- 使用c#强大的表达式树实现对象的深克隆
一.表达式树的基本概念 表达式树是一个以树状结构表示的表达式,其中每个节点都代表表达式的一部分.例如,一个算术表达式 a + b 可以被表示为一个树,其中根节点是加法运算符,它的两个子节点分别是 a ...
- RediSearch的简单使用与总结
前言 之前就有考虑过想要研究下RediSearch,号称高性能全文索引的功能,这几天闲来无事调研了一番. RediSearch 介绍 RediSearch 是 Redis Labs 提供的一款强大且高 ...
- handsontable多选下拉框编辑器扩展
一.效果截图 二.文件引用 多选下拉框扩展自handsontable的BaseEditor. 多选下拉框组件由两个文件构成, 一个下拉框样式表MultiSelect.css 一个组件实现脚本Multi ...
- Validate插件的自定义验证方法入门(结合Ajax实现用户名的数据库查重)
概述 本文介绍Validate自定义表单校验方式.Validate插件虽然提供了丰富的验证规则,但在很多时候仍然很难满足我们的开发需求,在注册页面我们需要通过ajax验证用户输入的用户名是否已经被他人 ...
- MLP实现minist数据集分类任务
1. 数据集 minist手写体数字数据集 2. 代码 ''' Description: Author: zhangyh Date: 2024-05-04 15:21:49 LastEditTime: ...
- 将任意程序安装成windows服务
某些时候,一个程序控制台服务程序需要在系统启动的时候自动运行,这时候我们会想到采用windows服务的方式来实现 但是,如果程序本来不支持安装成服务的话,我就需要采用其他方案来实现 之前博主也遇到了类 ...
- iOS手工Crash解析
一.测试导出来一份ips crash文件,现在需要进行手工解析 现在需要下载对应的dsym文件,为了确定下载好的dsym文件和crash log是不是一致的,可以先看下dsym文件中的uuid p.p ...
- css 跑马灯
html: <view class="in_scro"> <view class="in_scrview">恭喜139******1用户 ...