Filtrar líneas en todos los LWPOLYLINE en un documento DXF utilizando Python ezdxf.
¿Cómo puedo obtener las coordenadas de las LÍNEAS de una LWPOLYLINE en un documento DXF?
Tengo el siguiente código:
import sys
import ezdxf
Coordenadas = str()
Coordenadas_texto = str()
try:
doc = ezdxf.readfile(str(arq)+".dxf")
except IOError:
print('Error de archivo. Certifique-se que es un archivo .dxf')
sys.exit(1)
except ezdxf.DXFStructureError:
print('Archivo inválido o corrupto.')
sys.exit(2)
msp = doc.modelspace()
for insert in msp.query('INSERT'):
block = doc.blocks[insert.dxf.name]
for e in block:
if e.dxftype() == 'LINE':
Coordenadas = Coordenadas + str(e.dxf.start) + "\n"
Coordenadas = Coordenadas + str(e.dxf.end) + "\n"
El bucle “for” anterior obtiene el bloque “INSERT” y los divide para que solo pueda obtener LÍNEAS. Intenté hacer lo mismo para LWPOLYLINE pero no funcionó.
El código a continuación obtiene todas las coordenadas, pero necesito filtrar y obtener las coordenadas línea por línea:
for flag_ref in msp.query('LWPOLYLINE'):
for entity in flag_ref:
print(entity)
El código a continuación dejó de funcionar repentinamente, creo que la biblioteca ezdxf cambió. Estoy obteniendo el error
‘LWPolyline’ object has no attribute ‘virtual_entities’
for flag_ref in msp.query('LWPOLYLINE'):
for entity in flag_ref.virtual_entities():
if entity.dxftype() == 'LINE':
Coordenadas = Coordenadas + str(entity.dxf.start)+ "\n"
Coordenadas = Coordenadas + str(entity.dxf.end)+ "\n"
davy.ai
Para obtener las coordenadas de línea de un LWPOLYLINE en un documento DXF utilizando Python y la biblioteca ezdxf, puedes usar el siguiente código:
En este caso, utilizamos el método
query
para obtener todas las entidades LWPOLYLINE en el espacio de modelos (modelspace). Luego, recorremos cada entidad filtrando las polilíneas cerradas. Finalmente, iteramos sobre los vértices de la polilínea utilizando el atributovertices
y la funciónzip
para obtener los vértices de inicio y fin de cada segmento de línea. Obtenemos las coordenadas de cada vértice utilizando el atributodxf.location
y las agregamos a la variable de cadenaCoordenadas
.Ten en cuenta que este enfoque asume que la entidad LWPOLYLINE no tiene segmentos curvados, es decir, solo contiene segmentos de línea recta. Si la polilínea contiene segmentos curvados, la conversión a líneas requeriría un procesamiento adicional.