ON_EXPRESION_PYTHON
Muestra las geometrías para las que una expresión Python devuelve verdadero. La orden evalúa la expresión con cada geometría de todos los archivos de dibujo cargados y quita la marca de oculta a las que la cumplen.
Parámetros
| Número de parámetro | Descripción | Opcional |
|---|---|---|
| 1 | Expresión Python. Todo el texto que sigue al signo = forma la expresión. Se ignoran los espacios del principio y del final.o Nombres de selecciones de la tabla de códigos, cada uno precedido de # y separados por espacios. |
Sí. Sin parámetros, la orden muestra el cuadro de diálogo Expresión Python. |
La orden usa nombres de selecciones solo si el primer parámetro empieza por #. En ese caso ignora los parámetros que no empiezan por #. Los nombres no distinguen mayúsculas de minúsculas. Un nombre que no existe en la tabla de códigos se ignora sin aviso. Si el nombre lleva espacios, se escribe entre comillas: ON_EXPRESION_PYTHON="#Zonas verdes".
La expresión
- Es una única expresión de Python 3, no un guion: no admite
import, asignaciones ni bloques. Python 3 no admite el operador<>: usa!=. - La variable
gcontiene la geometría que se está evaluando. Es un objeto Geometry cuyo tipo concreto esPoint,Text,Line,PolygonoComplex. - No se crea ninguna variable por atributo. Los atributos de base de datos del primer código están en el diccionario
g.codes[0].attributes(nombre del campo → valor). Si los atributos aún no se han leído, leerattributesconsulta la base de datos. - La expresión debe devolver
TrueoFalse. También se aceptaNone(falso) o un número (verdadero si es distinto de 0). Una cadena, una lista u otro tipo produce un error. - La expresión puede usar las funciones integradas de Python (como
lenotype) y los nombres que define el entorno Python de la tabla de códigos, incluidas sus funciones. Digi3D.AI ejecuta el entorno en el módulo__main__del intérprete de Python al abrir el archivo de dibujo y, cuando la orden se ejecuta desde la línea de comandos, un menú o una macroinstrucción, evalúa la expresión en ese mismo módulo. - Si la evaluación de la expresión consulta un nombre que no está definido en el módulo
__main__(la variablegy los nombres del entorno) ni entre los nombres integrados de Python, Python lanza un errorNameError. Por ejemplo, el entorno que se descarga de GitHub contiene la líneaimport digi3d, así que la expresión puede usardigi3d.Text; para escribirTextsin el prefijodigi3d., el entorno debe importar ese nombre con una línea comofrom digi3d import Text.
Cuadro de diálogo

El cuadro de diálogo es el mismo para OFF_EXPRESIÓN_PYTHON, ON_SOLO_EXPRESIÓN_PYTHON y SELECCIONA_EXPRESION_PYTHON. Escribe la expresión en el campo que sigue a return. El cuadro de diálogo no recuerda la expresión de la vez anterior.
Para insertar un fragmento, elígelo en el desplegable Fragmentos de código y pulsa Añadir fragmento. El fragmento se añade al final de la expresión. Los fragmentos son:
| Fragmento | Significado |
|---|---|
==, !=, <, >, <=, >=, and, and not, not, True, False |
Operadores y valores de Python |
type(g).__name__ == 'Point' (también 'Line', 'Text', 'Polygon' y 'Complex') |
Tipo de la geometría. Un polígono no es 'Line'. |
g.has_code('code') |
La geometría tiene el código indicado. Admite los comodines * y ?. |
len(g) |
Número de vértices |
g[0] |
Coordenadas (x, y, z) del primer vértice |
g.codes[0].attributes.get('field') |
Valor del campo field del primer código, o None si no existe |
g.area, g.perimeter_2d, g.closed |
Área, perímetro en planta y si está cerrada. Solo en líneas y polígonos; closed también en complejos. |
g.text |
Cadena de un texto. Solo en textos. |
Sustituye code y field por el código y el campo reales.
Errores
Si la expresión tiene un error de sintaxis, o lanza una excepción con alguna geometría, Digi3D.AI muestra un cuadro de mensaje que empieza por el tipo y el texto del error de Python, por ejemplo NameError: name 'Text' is not defined. Lanzan una excepción, por ejemplo, g.area en un punto y attributes['campo'] si el campo no existe.
Después del error, la orden deja de evaluar la expresión en el archivo de dibujo en el que se ha producido el error y no muestra ninguna geometría de ese archivo por esa expresión, aunque la expresión haya devuelto verdadero al evaluar otras geometrías del mismo archivo antes del error. Con varios nombres de selecciones (#), la orden muestra las geometrías que cumplen las selecciones cuya expresión no falla. Si quedan otros archivos de dibujo cargados, la orden evalúa la expresión en el siguiente archivo, así que el cuadro de mensaje aparece una vez por cada archivo de dibujo en el que falla la expresión. Con nombres de selecciones (#), aparece una vez por cada selección y cada archivo de dibujo en los que falla la expresión.
Si la orden forma parte de una macroinstrucción (@), Digi3D.AI ejecuta la orden siguiente de la macroinstrucción después de que el usuario cierre el cuadro de mensaje.
La página Actualizar los controles de calidad Python de una tabla de códigos explica los errores NameError y AttributeError de las expresiones escritas para versiones anteriores de Digi3D.
Para evitar errores:
- Comprueba antes el tipo.
andsolo evalúa la segunda condición si la primera es verdadera:type(g).__name__ == 'Line' and g.area > 100. - Lee los campos con
.get('campo'), que devuelveNonesi el campo no existe.
Ejemplos
Para mostrar las geometrías que tienen exactamente 3 vértices:
ON_EXPRESION_PYTHON=len(g) == 3
Para mostrar las geometrías cuyo primer código es '010101', que tienen 7 vértices y cuyo campo Propietario de la base de datos vale 'Dylan':
ON_EXPRESION_PYTHON=g.codes[0].code == '010101' and len(g) == 7 and g.codes[0].attributes.get('Propietario') == 'Dylan'
Para mostrar las geometrías que cumplen la selección "Edificios" de la tabla de códigos:
ON_EXPRESION_PYTHON=#Edificios
Para mostrar las geometrías que cumplen la selección "Edificios" o la selección "Deportivo":
ON_EXPRESION_PYTHON=#Edificios #Deportivo
Observaciones
- La orden actúa sobre todas las geometrías de todos los archivos de dibujo cargados, incluidas las borradas.
- Mostrar u ocultar por expresión es una marca de cada geometría. Es independiente de la visibilidad por código: una geometría cuyo código está apagado sigue sin dibujarse.
- Las geometrías ocultas no se dibujan en la ventana de dibujo ni en la ventana fotogramétrica. VER_TODAS_ENTIDADES quita la marca de oculta a todas las geometrías.
Características de la orden
| Tipo de orden | Orden inmediata |
|---|---|
| Repite automáticamente | No |
| Opción del menú donde aparece la orden | Ver/Las que cumplan con expresión Python... |
| Barra de herramientas en la que aparece la orden | Esta orden no tiene asociado ningún botón en ninguna barra de herramientas |
| Extensión | DigiNG.OrdenesStandard.dll |
| Implementación | Nativa |
| Variables relacionadas | No tiene variables relacionadas |
| Órdenes relacionadas | OFF_EXPRESIÓN_PYTHON OFF_TODO ON_SOLO_EXPRESIÓN_PYTHON SELECCIONA_EXPRESION_PYTHON VER_TODAS_ENTIDADES |
| Nombre interno |