Geometry

Módulo: digi21.base

Clase base de todas las geometrías. Define las propiedades, los métodos y el acceso a coordenadas comunes a Point, Text, Line, Polygon y Complex. No se construye directamente.

Coordenadas

Toda geometría se comporta como una secuencia de vértices (x, y, z):

Operación Descripción
len(geometry) Número de vértices.
geometry[i] Vértice i como tupla (x, y, z).
for v in geometry: Recorre los vértices como tuplas (x, y, z).

Propiedades

Propiedad Tipo L/E Descripción
codes list[FeatureCode] L/E Lista de códigos de la geometría.
attributes dict L Diccionario {str: valor} con los atributos de base de datos.
color int L/E Color.
weight int L/E Grosor.
fill_color int L/E Color de relleno.
virtual_ bool L/E Indica si la geometría es virtual.
deleted bool L Verdadero si está marcada como eliminada.
min tuple L Coordenadas mínimas (x, y, z) de la caja envolvente.
max tuple L Coordenadas máximas (x, y, z) de la caja envolvente.
first_vertex tuple L Primer vértice (x, y, z).
last_vertex tuple L Último vértice (x, y, z).
code_count int L Número de códigos.
owner tuple L (geometría_propietaria, índice) si pertenece a un contenedor; (None, 0) si no.

Métodos

Método Devuelve Descripción
clone() Geometry Devuelve un clon de la geometría.
compute_bounds() Recalcula las máximas y mínimas a partir de las coordenadas.
transform(function) Aplica una función (x, y, z) -> (x, y, z) a todas las coordenadas.
displace(delta) Desplaza la geometría el (dx, dy, dz) indicado.
maxmin_overlaps(other) bool Verdadero si las cajas envolventes 3D solapan.
maxmin_overlaps_2d(other) bool Verdadero si las cajas envolventes 2D (en planta) solapan.
identical_xy(other) bool Verdadero si las dos geometrías son idénticas en planta (XY).
nearest_vertex_segment(coordinates) tuple Vértice y segmento más cercanos: (n_vertice, dist_vertice, (x,y,z), n_segmento, dist_segmento, (x,y,z)).
completely_inside(window) bool Verdadero si está completamente dentro de la ventana (una Line).
completely_outside(window) bool Verdadero si está completamente fuera de la ventana (una Line).
overlaps_window(window, inside=True) bool Verdadero si solapa con la ventana (una Line).
has_code(name) bool Verdadero si la geometría tiene el código indicado.
add_code(code) bool Añade un código (FeatureCode o str); devuelve True si se añadió.
remove_code(code) Elimina el código indicado (FeatureCode o str).

Relaciones espaciales

Métodos para consultar la relación espacial con otra geometría (estilo Shapely). Se resuelven según el tipo concreto de las dos geometrías. En within, adjacent, terminates_within y completely_within el argumento es el área y admite un Polygon o una Line cerrada.

Estas relaciones se basan en los vértices y nodos compartidos, no en intersecciones calculadas. Si la combinación de tipos no soporta la relación, se lanza TypeError.

Método self Argumento Verdadero si…
disjoint(other) Point/Line/Polygon Point/Line/Polygon Las dos geometrías son disjuntas.
coincident(other) Point Point/Line/Polygon El punto coincide con la otra geometría.
coincident_and_terminates(line) Point Line El punto coincide con un extremo de la línea.
within(area) Point/Line/Polygon área La geometría está dentro del área.
completely_within(area) Polygon área El área está completamente incluida en la otra área.
adjacent(area) Line/Polygon área La geometría es adyacente al área.
terminates_within(area) Line área La línea termina dentro del área.
crosses(other) Line Line/Polygon La línea cruza la otra línea o el área.
cross_vertices(line, stop_at_first=False) Line Line Devuelve la lista de índices de vértice en los que se cruzan.
overlaps(other) Line/Polygon Line/Polygon Las dos geometrías se solapan.
equals(other) Line/Polygon Line/Polygon Las dos geometrías son iguales.
touches(other) Line/Polygon Line/Polygon Comparten algún punto (se tocan).
endpoint_touches(other) Line Line/Polygon Un extremo de la línea toca un extremo de la otra línea/área.
endpoint_touches_interior(line) Line Line Un extremo de la línea toca la otra línea pero no en sus extremos.

Ejemplo

# Desplazar todas las geometrías de un archivo 10 m en X
for geometry in drawing:
    geometry.displace((10.0, 0.0, 0.0))

Véase también