Transformar complejos en puntos
Archivo: transforma_complejo_a_punto.py · guion para el panel de Guiones Python.
Convierte las geometrías de tipo Complejo que tengan ciertos códigos en geometrías de tipo Punto, situadas en el centro del complejo. Se desarrolló para arreglar archivos DGN que se habían importado con los puntos agrupados como complejos.
El código
import digi3d
vista = digi3d.current_view()
def transforma_complejo_a_punto(codigo):
eliminar = list(filter(
lambda g: not g.deleted and type(g) is digi3d.Complex and g.codes[0].code == codigo,
vista))
for entidad in eliminar:
centro = ((entidad.min[0] + entidad.max[0]) / 2,
(entidad.min[1] + entidad.max[1]) / 2,
(entidad.min[2] + entidad.max[2]) / 2)
punto = digi3d.Point(centro, entidad.codes, 0, (1.0, 1.0, 1.0))
vista.add(punto)
vista.delete(entidad)
transforma_complejo_a_punto('BAI_VEG_03_PT')
transforma_complejo_a_punto('VEG_03_PT')
vista.redraw()
Cómo funciona
digi3d.current_view()devuelve la ventana de dibujo activa, el objeto sobre el que trabajamos.- Selección con
filter: recorremosvista(todas las geometrías cargadas) y nos quedamos con las que cumplen tres condiciones: que no estén borradas (not g.deleted), que sean complejos (type(g) is digi3d.Complex) y que su primer código coincida (g.codes[0].code == codigo).g.codeses la lista de códigos de la geometría;.codees la cadena del código.- Envolvemos el
filterenlist(...)a propósito: vamos a añadir y borrar geometrías dentro del bucle, y no se debe modificar la vista mientras se la está recorriendo de forma perezosa.list()materializa la selección antes de tocar nada.
- Centro del complejo:
entidad.minyentidad.maxson las coordenadas mínima y máxima (cajas envolventes); su punto medio es el centro. - Crear el punto:
digi3d.Point(coordenadas, códigos, rotación, escala). Reutilizamosentidad.codespara conservar los códigos del complejo. vista.add(punto)lo añade yvista.delete(entidad)elimina el complejo original.vista.redraw()regenera la ventana para que se vean los cambios.
Véase también
- Point · Complex
- DrawingView —
add,delete,redraw