Crear geometrías

Las geometrías están en el paquete digi21.base. Todas se construyen indicando sus códigos (como objetos FeatureCode o como simples cadenas) y sus coordenadas.

from digi21.base import Point, Text, Line, Polygon, Complex, TextJustification

Un punto

punto = Point((100.0, 200.0, 50.0), codes=["EDIF"])

Una línea

linea = Line(["CARR"], [(0, 0, 0), (10, 0, 0), (10, 10, 0)])

# También se pueden añadir vértices después:
linea.add_point((20, 10, 0))
print(linea.perimeter_2d)

Un texto

rotulo = Text("Calle Mayor", (50, 60, 0), codes=["ROT"],
              text_height=2.5, text_justification=TextJustification.C)

Un polígono con un hueco

parcela = Polygon(["PARC"], [(0, 0, 0), (100, 0, 0), (100, 100, 0), (0, 100, 0)])

patio = Line(["PARC"], [(40, 40, 0), (60, 40, 0), (60, 60, 0), (40, 60, 0)])
patio.close()
parcela.add_hole(patio)          # la propiedad del hueco pasa al polígono

print(parcela.area)

Un elemento complejo

bloque = Complex(["BLOQUE"])
bloque.add(Line(["MURO"], [(0, 0, 0), (10, 0, 0)]))
bloque.add(Point((5, 5, 0), codes=["POSTE"]))

for hija in bloque:
    print(type(hija).__name__)

Transformar y desplazar

Cualquier geometría se puede desplazar o transformar aplicando una función a sus coordenadas:

linea.displace((10.0, 0.0, 0.0))                       # mueve 10 m en X
linea.transform(lambda p: (p[0] * 2, p[1] * 2, p[2]))  # escala XY x2

Propiedad de la memoria: una geometría creada desde Python la libera Python. Al añadirla a un contenedor (add_hole, add, insert), la propiedad pasa al contenedor.

Véase también