Directorio de artículos
Introducción al desarrollo secundario de UG basado en Python
1 Construcción del entorno de desarrollo secundario.
Configuración del entorno:
- NX12.0
- Python3.6.1
- Pycharm2023
1.1 Instalar UG
Vaya a la cuenta oficial de WeChat, busque "Administrador de instalación de software", busque el tutorial de instalación de UG12.0 en el directorio de software y simplemente siga la instalación paso a paso. No entraré en detalles aquí.
1.2 Instalar Pycharm
Dirección de descarga: PyCharm: el IDE de Python para desarrolladores profesionales de JetBrains .
También hay muchos tutoriales de instalación de Pycharm en Internet, que también se omiten aquí.
1.3 Configuración del entorno
-
Obtenga la versión de Python correspondiente a NX .
Visite el directorio en la ruta de instalación de NX
NXBIN
, busque el archivo de la biblioteca dinámica de Python, haga clic con el botón derecho en Propiedades -> Detalles para obtener la versión de Python correspondiente. La versión en mi computadora es python3.6.1 .
-
Ejecute Anaconda Prompt para crear un nuevo entorno virtual de Python.conda create -n NXOpen_env python=3.6.1
Error, no se pudo encontrar el paquete python3.6.1.
-
Para conocer otro método, vaya al sitio web oficial de Python para descargar python3.6.1 e instalarlo.
Dirección de descarga: Python Release Python 3.6.1 | Python.org . Generalmente elija descargar el instalador ejecutable de Windows x86-64 .
-
Cree tres nuevas variables de entorno del sistema.variablevalorUGII_BASE_DIRG:\NX12
(Este es el directorio de instalación de UG)UGII_NXBIN_DIR%USE_BASE_DIR%\NXBINUGII_ROOT_DIR%UGII_BASE_DIR%\UGII -
Cree un script bat nuevo y ejecútelo .
Cree un nuevo
NX_start_Pycharm.bat
archivo (puede crearlo en cualquier lugar) y copie el siguiente código:rem the nx installation dir. if there are spaces in the path, it needs to be quoted like here - quotes around the whole equation SET UGII_BASE_DIR=G:\NX12 rem these two are not used by nx, just for setting the path SET UGII_ROOT_DIR=%UGII_BASE_DIR%\UGII SET UGII_NXBIN_DIR=%UGII_BASE_DIR%\NXBIN rem the installed python interpreter, version 3.6 for nx12 SET PYTHON=G:\MSTIFIY\local\Python\Python36 SET INTERPRETER=%PYTHON%;%PYTHON%\DLLs;%PYTHON%\Lib;%PYTHON%\Lib\site-packages SET PYTHONPATH=%INTERPRETER%;%UGII_BASE_DIR%\nxbin\python SET PATH=%PATH%;%UGII_NXBIN_DIR%;%UGII_ROOT_DIR% start "" "G:\MSTIFIY\software\pycharm\PyCharm Community Edition 2023.2.1\bin\pycharm64.exe"
La función de este script es agregar una serie de variables de entorno e iniciar pycharm.
Las variables que deben modificarse son UGII_BASE_DIR (directorio de instalación de UG), PYTHON (directorio de instalación de Python) y finalmente la ruta de inicio de pycharmd.
1.4 Pruebas
Cree un nuevo test.py con el siguiente contenido:
import NXOpen
session=NXOpen.Session.GetSession()
lw=session.ListingWindow
lw.Open()
lw.WriteLine('Hello World')
Después de guardar, abra UG, Alt+F8
abra el administrador de registros de operaciones, busque y seleccione test.py, y luego haga clic en la ruta de la canalización para ejecutar el script. Los resultados son los siguientes:
2 Introducción a NX Abierto
NX Open es una API proporcionada por UG, que permite a los usuarios personalizar o expandir UG a través de la programación. La ventaja más intuitiva del desarrollo secundario es que puede acelerar algunas tareas repetitivas y mejorar la eficiencia del trabajo. Estas son algunas de las características que ofrece NX Open:
- Cree piezas geométricas, ensamblajes, dibujos de ingeniería y objetos CAE\CAM;
- Recorrer varios objetos en el archivo de pieza, leer su información o realizar diversas operaciones en ellos;
- Cree una interfaz de usuario que permita a los usuarios seleccionar objetos e ingresar datos.
2.1 Infraestructura
El árbol de relaciones de herencia de las clases de objetos NX es el siguiente:
2.1.1 Sesiones y Partes
Generalmente, cuando necesitamos acceder a partes en la sesión UG actual, debemos realizar la siguiente inicialización.
import NXOpen
import NXOpen_UF
session = NXOpen.Session.GetSession() # 得到当前的NX session
parts = session.Parts # 得到属于该session的PartCollection
workPart = parts.Work # 得到工作零件
displayPart = parts.Display # 得到显示零件
ufSession = NXOpen_UF.UFSession.GetUFSession() # 得到UF session
Display = session.DisplayManager # 得到显示管理器对象
UI = NXOpen.UI.GetUI() # 得到UI对象
Entre ellos, workPart es la parte de trabajo actual.
2.1.2 Objetos y etiquetas
El módulo NXOpen_UF integra una gran cantidad de funciones útiles (estas funciones no están disponibles en NXOpen), para poder utilizar estas funciones necesitamos utilizar las etiquetas del objeto. El proceso de convocatoria general es el siguiente:
coord = [1.5, 2.5, 7.0]
pointTag = ufSession.Curve.CreatePoint(coord)
ufSession.Obj.SetLayer(pointTag, 30)
El objeto de etiqueta puede entenderse como el número de identificación del objeto obj . En el módulo NXOpen_UF, llamamos a varias funciones utilizando el objeto de etiqueta. En el ejemplo anterior, la función CreatePoint debería devolver un objeto Punto, pero lo que se devuelve aquí es un objeto etiqueta, es decir, la entrada y salida del objeto obj en la función NXOpen_UF utilizan su etiqueta correspondiente. Podemos lograr el mismo efecto llamando a métodos en el módulo NXOpen:
coordPt = NXOpen.Point3d(1.5, 2.5, 7.0)
myPoint = workPart.Points.CreatePoint(coordPt)
myPoint.Layer = 30
Además, la etiqueta y el obj se pueden convertir entre sí:
myPoint = workPart.Points.CreatePoint(coordPt)
pointTag = myPoint.Tag # obj->tag
ufSession.Obj.SetLayer(pointTag, 30)
Con respecto a la conversión de etiqueta a obj, debe usar el objeto NXOpen.Utilitiess.NXObjectManager , pero no se encuentra en la referencia de API proporcionada por el sitio web oficial , por lo que sospecho que no existe una interfaz a este respecto, y tal vez la ¿Se ha cambiado el nombre?
2.1.3 Objetos de fábrica
En NX Open, los objetos generalmente no se generan a través de constructores y, en segundo lugar, se utilizan algunas "fábricas". El proceso de creación de un nuevo objeto utilizando el objeto "fábrica" es el siguiente:
coordPt = NXOpen.Point3d(1.5, 2.5, 7.0) # 点坐标
pointFactory = workPart.Points # 得到工作零件的点集PointCollection(工厂对象)
p1 = pointFactory.CreatePoint(coordPt) # 创建点对象
Los objetos de fábrica se pueden obtener de NXOpen.Part
u NXOpen.Session
objetos.
En el ejemplo anterior, el tipo de par de variable pointFactoryPointCollection
es Generalmente, collection
podemos atravesar cualquier objeto con un nombre y puede considerarse como una colección.
for pt in pointFactory:
pass
2.1.4 Objetos del constructor
Podemos usar objetos de fábrica para crear algunos objetos simples. Cuando la creación de objetos se vuelve complicada (requiere una gran cantidad de parámetros de entrada), generalmente creamos primero un objeto Builder y luego lo usamos para generar los objetos que necesitamos. El proceso es el siguiente:
mySphereBuilder = workPart.Features.CreateSphereBuilder(Features.Sphere.Null) # 新建特征生成器
mySphereBuilder.Type = Features.SphereBuilder.Types.CenterPointAndDiameter
mySphereBuilder.CenterPoint = workPart.Points.CreatePoint(NXOpen.Point3d(1.5, 2.5, 7.0))
mySphereBuilder.Diameter.RightHandSide = "10.0"
mySphereBuilder.BooleanOption.Type = NXOpen_GeometricUtilities.BooleanOperation.BooleanType.Create
myObject = mySphereBuilder.CommitFeature() # 提交特征
mySphereBuilder.Destroy()
Cuando la función CreateSphereBuilder pasa un objeto NULL, crea un nuevo generador del objeto Sphere, de lo contrario devuelve el generador del objeto Sphere de entrada, es decir, modifica el objeto original. Una observación cuidadosa revela que el generador corresponde al cuadro de diálogo de configuración de propiedades en el software UG.
2.1.5 Exportar script abierto de NX
En la barra de navegación del desarrollador , puede exportar las operaciones del usuario como un script de programa Python haciendo clic en Grabar y Detener grabación .
2.2 Posiciones, vectores y puntos
2.2.1 Punto 3d
Los objetos Point3d representan una posición (coordenadas) en el espacio 3D. Tenga en cuenta que Point3d no es un objeto NX, solo existe en el programa NX Open y su memoria se destruirá una vez que finalice el programa.
Point3d(x: float, y: float, z: float)
El objeto Point3d tiene tres atributos X, Y y Z , correspondientes a los tres componentes de las coordenadas. (Similar a Vector3d)
2.2.2 Vector3d
Los objetos Vector3d representan una dirección o desplazamiento en el espacio 3D. Al igual que Point3d, no es un objeto NX.
Vector3d(x: float, y: float, z: float)
Actualmente, NX Open no admite operaciones vectoriales generales en Vector3d en el entorno Python .
2.2.3 Puntos
El objeto Point es un objeto NX que se puede crear a través de un objeto de fábrica (PointCollection). El proceso de creación es el siguiente:
coord = NXOpen.Point3d(3., 5., 0.) # Define coordinates of point
p1 = workPart.Points.CreatePoint(coord) # Create the point
p1.SetVisibility(NXOpen.SmartObject.VisibilityOption.Visible) # Make it visible
El objeto NXOpen.Point se deriva del objeto SmartObject y es invisible de forma predeterminada , por lo que es necesario configurar la visibilidad. Una forma abreviada de crear un punto:
p1 = NXOpen.Session.GetSession.Parts.Work.Points.CreatePoint(NXOpen.Point3d(3., 5., 0.)) # Create the point
2.3 Más contenido
La parte introductoria está casi terminada y el resto es principalmente aprendizaje dirigido. Aprenda a recomendar documentos oficiales.