PythonCommand
Módulo: digi3d
Clase base para crear órdenes interactivas en Python. Se hereda de ella y se
redefinen los manejadores de eventos (movimiento del ratón, dato, reset, tentativo…); la
orden se pone en marcha con DrawingView.add_command.
Constructores
PythonCommand()
PythonCommand(name)
| Argumento | Tipo | Descripción |
|---|---|---|
name |
str |
Nombre de la orden (opcional). |
Propiedades
| Propiedad | Tipo | Descripción |
|---|---|---|
view |
DrawingView | Vista en la que se está ejecutando la orden. |
Métodos
| Método | Devuelve | Descripción |
|---|---|---|
new_transaction() |
— | Crea una nueva transacción de deshacer (UNDO). |
select_geometry(coordinates, filter=None) |
bool |
Selecciona la geometría más próxima a coordinates, igual que el pedal de tentativo, y la entrega en on_geometry_selected. Devuelve False si la selección no ha podido empezar. Consulta Seleccionar una geometría. |
Eventos
Redefine en la clase derivada los eventos a los que tenga que reaccionar la orden. Los eventos de pedales,
movimiento y teclado devuelven True si la orden ha procesado el evento; en ese caso Digi3D.AI no hace
nada más con él.
| Evento | Cuándo lo llama Digi3D.AI |
|---|---|
on_set_focus() |
Al iniciar la orden y cada vez que vuelve a ser la orden activa. |
on_lost_focus() |
Cuando otra orden se pone encima de ella. |
on_data_down(coordinates) |
Al pulsar el botón o el pedal de dato. |
on_data_up(coordinates) |
Al soltar el botón o el pedal de dato. |
on_data_dbl_clk(coordinates) |
Al hacer doble clic con el botón de dato. |
on_reset_down(coordinates) |
Al pulsar el botón o el pedal de reset. |
on_reset_up(coordinates) |
Al soltar el botón o el pedal de reset. |
on_snap_down(coordinates) |
Al pulsar el botón o el pedal de tentativo. |
on_snap_up(coordinates) |
Al soltar el botón o el pedal de tentativo. |
on_move(coordinates, button) |
Al mover el cursor. |
on_key_down(key) |
Al pulsar una tecla. |
on_geometry_selected(geometry, coordinates, first_vertex, second_vertex) |
Cuando el usuario selecciona una geometría con el pedal de tentativo o la orden la selecciona con select_geometry. No devuelve nada. |
coordinates es una tupla (x, y, z) con coordenadas terreno.
Seleccionar una geometría
select_geometry(coordinates, filter=None) busca la geometría más próxima a coordinates igual que el
pedal de tentativo. Si encuentra una, Digi3D.AI llama al evento on_geometry_selected de la orden:
- Sin la verificación de tentativo (variable VER,
o
view.verify_snapen DrawingView), la llamada se produce antes de queselect_geometrytermine. - Con la verificación activada, Digi3D.AI muestra la geometría encontrada y espera a que el usuario la confirme con un dato. La llamada se produce al confirmarla.
Si no encuentra ninguna geometría, Digi3D.AI emite el sonido de error y no llama al evento.
select_geometry no selecciona nada y devuelve False en estos casos:
- Ya hay un tentativo en curso, por ejemplo uno que espera la verificación del usuario.
- El modo de búsqueda activo busca intersecciones. Ese modo lanza la orden INTERSECCION, que no admite el filtro.
| Argumento | Tipo | Descripción |
|---|---|---|
coordinates |
tuple |
Coordenadas (x, y, z) en las que se busca la geometría. Normalmente, las que recibe on_data_down o on_data_up. |
filter |
función o None |
Función que recibe una geometría y devuelve True si se puede seleccionar. Con None se pueden seleccionar puntos, líneas, textos y polígonos. Con una función, la función decide también sobre los complejos. Si la función lanza una excepción, Digi3D.AI escribe el error con print y descarta esa geometría. |
on_geometry_selected recibe estos argumentos:
| Argumento | Tipo | Descripción |
|---|---|---|
geometry |
Geometry | Geometría seleccionada. Es la geometría del dibujo y es de solo lectura: para cambiarla, borra la original con view.delete y añade un clon con view.add. |
coordinates |
tuple |
Coordenadas (x, y, z) del punto de la geometría más próximo a la selección. Con la variable FIJAZ activada, z es la coordenada Z activa. |
first_vertex |
int |
Índice del primer vértice del segmento seleccionado. |
second_vertex |
int |
Índice del segundo vértice del segmento seleccionado. Si es igual a first_vertex, la selección está sobre ese vértice. |
Si la orden define on_geometry_selected, Digi3D.AI también le entrega las geometrías que llegan a la orden
activa por otros caminos, entre ellos:
- el pedal de tentativo;
- las órdenes SELECCIONA_ULTIMO y SELECCIONA_INDICE;
- la opción Enviar selección a la orden activa del menú contextual del editor de base de datos y del panel de resultados de la búsqueda;
- las tareas del panel de tareas que lanzan una orden sobre una geometría.
Si la orden no define on_geometry_selected, Digi3D.AI la trata como una orden que no selecciona
geometrías: el pedal de tentativo llama a on_data_down con esas mismas coordenadas, y los demás caminos no
le entregan nada.
import digi3d
class MostrarCodigos(digi3d.PythonCommand):
def on_data_up(self, coordinates):
self.select_geometry(coordinates)
return True
def on_geometry_selected(self, geometry, coordinates, first_vertex, second_vertex):
print([codigo.code for codigo in geometry.codes])
digi3d.current_view().add_command(MostrarCodigos("Mostrar códigos"))
El ejemplo Prefijar los códigos de la geometría seleccionada
usa filter para descartar las geometrías de los archivos de referencia.
Ejemplo
import digi3d
class MiOrden(digi3d.PythonCommand):
def on_data_down(self, coordinates):
self.new_transaction()
self.view.add(digi3d.Point(coordinates, codes=["PUNTO"]))
digi3d.current_view().add_command(MiOrden("Insertar puntos"))