Reglas de representación dinámica

El archivo guiones.py contiene reglas de representación dinámica: funciones con el decorador @dynamic_representation_rule() que cambian la representación con la que Digi3D.AI dibuja una geometría. Las reglas se cargan con el resto del archivo desde la pestaña Entorno Python. La página Repositorio de controles de calidad en Python explica cómo se instala el archivo.

Cómo se aplican

  1. Ejecuta la orden ASIGNAR_REPRESENTACIONES.
  2. Añade las reglas a Reglas a ejecutar y escribe sus parámetros.
  3. Pulsa Aceptar para aplicar las reglas, o pulsa Guardar... para guardarlas en un archivo .representations.

Un archivo .representations se puede añadir a la tabla de códigos en la pestaña Representaciones dinámicas y activar con la orden REPRESENTACION_DINAMICA.

Digi3D.AI llama a cada regla con la geometría (geometry), el código con el que se dibuja (code_drawing) y la lista de representaciones (representations). Todas las reglas de este archivo modifican solo el primer elemento de la lista, representations[0], y devuelven la lista.

Parámetros comunes

Parámetro Descripción
nombre_codigo Código al que se aplica la regla. Admite los comodines ? y *, pero no varias palabras ni etiquetas. La regla no cambia nada si el código con el que se dibuja la geometría no coincide.
color_asignar Color. El cuadro de parámetros de ASIGNAR_REPRESENTACIONES lo escribe como texto "R G B". La función texto_a_color lo convierte a #RRGGBBFF; un texto "R G B A" lo convierte a #RRGGBBAA. Un texto de una sola palabra se asigna sin cambios, salvo #, que produce #000000ff. Un texto de dos palabras o de más de cuatro produce #ff0000ff.
grosor_asignar Grosor. La regla lo convierte con int().
nombre_atributo Nombre del atributo.
valor_esperado Valor con el que se compara el atributo.

Familias de reglas

Hay tres familias. Cada una cambia una propiedad de la representación:

Prefijo Propiedad que cambia Último parámetro
asignar_color color color_asignar
asignar_color_relleno fill_type pasa a FillType.Color y fill_color toma el color color_asignar
asignar_grosor weight grosor_asignar
@dynamic_representation_rule()
def asignar_color_relleno(geometry, code_drawing, representations, nombre_codigo, color_asignar):
	'Asigna como color de relleno el valor color_asignar al código nombre_codigo (admite comodines)'
	if not compara_codigos_con_comodines(code_drawing.code, nombre_codigo):
		return representations

	representations[0].fill_type = digi3d.FillType.Color
	representations[0].fill_color = texto_a_color(color_asignar)
	return representations

El nombre de cada regla es el prefijo seguido de una de las condiciones de las tablas siguientes. Por ejemplo, asignar_grosor_si_area_mayor_valor asigna el grosor si el área es mayor que el valor.

Sin condición

Sufijo Parámetros entre nombre_codigo y el último Cambia la representación si
(ninguno) Ninguno Siempre.

Atributos de base de datos

Estas reglas leen los atributos de base de datos del primer código de la geometría que coincide con nombre_codigo. Si el atributo no existe, no cambian nada. Antes de comparar, convierten valor_esperado al tipo del atributo.

Sufijo Parámetros entre nombre_codigo y el último Cambia la representación si el atributo
_si_atributo_bbdd_menor_valor nombre_atributo, valor_esperado Es menor que valor_esperado.
_si_atributo_bbdd_menor_o_igual_valor nombre_atributo, valor_esperado Es menor o igual que valor_esperado.
_si_atributo_bbdd_igual_valor nombre_atributo, valor_esperado Es igual a valor_esperado.
_si_atributo_bbdd_mayor_o_igual nombre_atributo, valor_esperado Es mayor o igual que valor_esperado.
_si_atributo_bbdd_mayor_valor nombre_atributo, valor_esperado Es mayor que valor_esperado.
_si_atributo_bbdd_es_nulo nombre_atributo Es nulo.
_si_atributo_bbdd_no_es_nulo nombre_atributo No es nulo.
_si_multiples_atributos_bbdd_igual_valores atributos_y_valores Todos los atributos tienen el valor indicado. atributos_y_valores es un texto con pares atributo valor separados por un espacio: TIPO 3 USO 1.

Atributos de la geometría

Estas reglas leen el diccionario attributes de la geometría. Si el atributo no existe, no cambian nada.

Sufijo Parámetros entre nombre_codigo y el último Cambia la representación si el atributo
_si_atributo_diccionario_atributos_menor_valor nombre_atributo, valor_esperado Es menor que valor_esperado.
_si_atributo_diccionario_atributos_menor_o_igual_valor nombre_atributo, valor_esperado Es menor o igual que valor_esperado.
_si_atributo_diccionario_atributos_igual_valor nombre_atributo, valor_esperado Es igual a valor_esperado. En la familia asignar_color la comparación no convierte tipos.
_si_atributo_diccionario_atributos_mayor_o_igual nombre_atributo, valor_esperado Es mayor o igual que valor_esperado.
_si_atributo_diccionario_atributos_mayor_valor nombre_atributo, valor_esperado Es mayor que valor_esperado.
_si_atributo_diccionario_atributos_es_nulo nombre_atributo Es nulo.
_si_atributo_diccionario_atributos_no_es_nulo nombre_atributo No es nulo.
_si_multiples_atributos_diccionario_atributos_igual_valores atributos_y_valores Todos los atributos tienen el valor indicado, con el mismo formato que la regla de base de datos.

Medidas de la geometría

Las reglas de área solo actúan sobre polígonos y líneas cerradas en planta. Las reglas de huecos solo actúan sobre polígonos. El área y el perímetro se calculan con la calculadora geográfica de la ventana de dibujo.

Sufijo Parámetro Medida que se compara con el parámetro
_si_area_inferior_valor, _si_area_inferior_o_igual_valor, _si_area_igual_valor, _si_area_mayor_igual_valor, _si_area_mayor_valor area Valor absoluto del área.
_si_perimetro_inferior_valor, _si_perimetro_inferior_o_igual_valor, _si_perimetro_igual_valor, _si_perimetro_mayor_o_igual_valor, _si_perimetro_mayor_valor perimetro Perímetro en planta.
_si_z_minima_inferior_valor, _si_z_minima_inferior_o_igual_valor, _si_z_minima_igual_valor, _si_z_minima_mayor_o_igual_valor, _si_z_minima_mayor_valor valor Z mínima.
_si_z_maxima_inferior_valor, _si_z_maxima_inferior_o_igual_valor, _si_z_maxima_igual_valor, _si_z_maxima_mayor_o_igual_valor, _si_z_maxima_mayor_valor valor Z máxima.
_si_altura_menor_valor, _si_altura_menor_o_igual_valor, _si_altura_igual_valor, _si_altura_mayor_o_igual_valor, _si_altura_mayor_valor valor Z máxima menos Z mínima.
_si_poligono_tiene_numero_huecos_menor_valor, _si_poligono_tiene_numero_huecos_menor_o_igual_valor, _si_poligono_tiene_numero_huecos_igual_valor, _si_poligono_tiene_numero_huecos_mayor_o_igual_valor, _si_poligono_tiene_numero_huecos_mayor_valor numero_huecos Número de huecos del polígono.
_si_numero_vertices_menor_valor, _si_numero_vertices_menor_o_igual_valor, _si_numero_vertices_igual_valor, _si_numero_vertices_mayor_o_igual_valor, _si_numero_vertices_mayor_valor numero_vertices Número de vértices.

inferior y menor equivalen a <, inferior_o_igual y menor_o_igual a <=, igual a ==, mayor_igual y mayor_o_igual a >=, y mayor a >.

Color aleatorio por valor de atributo

Solo existen en las familias asignar_color y asignar_color_relleno:

  • asignar_color_aleatorio_segun_valor_atributo_bbdd(nombre_codigo, nombre_atributo)
  • asignar_color_aleatorio_segun_valor_atributo_diccionario_atributos(nombre_codigo, nombre_atributo)
  • asignar_color_relleno_aleatorio_segun_valor_atributo_bbdd(nombre_codigo, nombre_atributo)
  • asignar_color_relleno_aleatorio_segun_valor_atributo_diccionario_atributos(nombre_codigo, nombre_atributo)

Estas reglas asignan un color aleatorio a cada valor distinto del atributo. Las geometrías con el mismo valor se dibujan con el mismo color. Los colores se guardan en un diccionario global del intérprete y se mantienen mientras Digi3D.AI no vuelve a cargar el entorno Python. Las dos reglas de asignar_color comparten el mismo diccionario.

if valorAtributo not in colores_atributo_bbdd:
    r = random.randint(0, 255)
    g = random.randint(0, 255)
    b = random.randint(0, 255)
    color = "#" + f"{r:02x}" + f"{g:02x}" + f"{b:02x}" + "ff"
    colores_atributo_bbdd[valorAtributo] = color

representations[0].color = colores_atributo_bbdd[valorAtributo]

Véase también