Redondear la cota Z de las curvas
Archivo: redondea_z.py · orden REDONDEA_Z con dos parámetros: el código de maestra y el código de
fina.
Redondea a entero la coordenada Z de todos los vértices de las curvas de nivel no borradas que tienen alguno de los dos códigos indicados.
Cómo se usa
Escribe en la línea de comandos el nombre de la orden, el código de maestra y el código de fina:
REDONDEA_Z=020124 020123
La orden trata los dos códigos de la misma forma, así que el orden de los parámetros no cambia el resultado. Si no se indican exactamente dos parámetros, la orden emite el sonido de error y muestra un cuadro con el motivo y la forma de uso.
El código
import digi3d
view = digi3d.current_view()
USO = 'REDONDEA_Z=[código de maestra] [código de fina]'
def error(mensaje):
"""Emite el sonido de error y muestra el mensaje con la forma de uso de la orden."""
digi3d.music(digi3d.MusicType.Error)
digi3d.show_info('{}\n\nUso: {}'.format(mensaje, USO))
def TieneAlgunCódigo(entidad, códigos):
"""Indica si la entidad tiene alguno de los códigos.
Argumentos:
entidad: Entidad sobre la que realizar la consulta.
códigos: conjunto de códigos.
Observaciones:
Esta función devuelve verdadero si se encuentra al menos un código de los pasados por parámetros
de entre los códigos que tiene la entidad.
"""
códigosEntidad = { cod.code for cod in entidad.codes }
return len(códigos.intersection(códigosEntidad)) > 0
def redondea_z(curva):
coordenadas = []
for coordenada in curva:
coordenadas.append((coordenada[0], coordenada[1], round(coordenada[2])))
clon = digi3d.Line(curva.codes, coordenadas)
return clon
def redondea_curvas(códigosEntidadesAModificar):
curvasNivel = list(filter(lambda entidad: not entidad.deleted and TieneAlgunCódigo(entidad, códigosEntidadesAModificar), view))
añadir = []
for entidad in curvasNivel:
añadir.append(redondea_z(entidad))
view.add(añadir)
view.delete(curvasNivel)
view.redraw()
if len(argv) != 2:
error('Número de parámetros incorrecto.')
else:
redondea_curvas({argv[0], argv[1]})
Cómo funciona
- Parámetros: una orden recibe sus parámetros en la tupla global
argv. Siargvno tiene exactamente dos elementos, la funciónerroremite el sonido de error condigi3d.musicy muestra el motivo y la forma de uso condigi3d.show_info. TieneAlgunCódigoconstruye el conjunto de códigos de la geometría ({ cod.code for cod in entidad.codes }) y comprueba si tiene intersección con los códigos buscados.cod.codees la cadena del código.- Las geometrías no se modifican; se sustituyen: las geometrías cargadas son de solo lectura. Para
cambiar una curva, el guion crea una nueva Line con las
coordenadas modificadas y borra la original.
for coordenada in curvarecorre los vértices; cadacoordenadaes una tupla(x, y, z). El guion construye vértices nuevos con la Z redondeada (round(coordenada[2])).digi3d.Line(curva.codes, coordenadas)crea la línea con los mismos códigos. La geometría nueva es siempre una línea, aunque la original sea de otro tipo.roundredondea los valores terminados en ,5 al entero par: 2,5 pasa a 2 y 3,5 pasa a 4.
redondea_curvasmaterializa la selección conlist(...)y aplica los cambios en bloque (view.add(añadir),view.delete(curvasNivel)).
Véase también
- Line · FeatureCode
- Funciones del módulo —
music,show_info