Introducción al desarrollo secundario de UG basado en Python

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 .
    Insertar descripción de la imagen aquí

  • 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.

    variable valor
    UGII_BASE_DIR G:\NX12(Este es el directorio de instalación de UG)
    UGII_NXBIN_DIR %USE_BASE_DIR%\NXBIN
    UGII_ROOT_DIR %UGII_BASE_DIR%\UGII
  • Cree un script bat nuevo y ejecútelo .

    Cree un nuevo NX_start_Pycharm.batarchivo (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.

  • Insertar descripción de la imagen aquí

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+F8abra 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:
Insertar descripción de la imagen aquí

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:
Insertar descripción de la imagen aquí

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.Partu NXOpen.Sessionobjetos.

En el ejemplo anterior, el tipo de par de variable pointFactoryPointCollection es Generalmente, collectionpodemos 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.
Insertar descripción de la imagen aquí

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.

3 referencias

[1] Primeros pasos con SNAP (siemens.com)

[2] Guía de referencia de NXOpen Python: documentación de referencia de la API de NXOpen Python 12.0.0 (siemens.com)

Supongo que te gusta

Origin blog.csdn.net/qq_39784672/article/details/132891235
Recomendado
Clasificación