3

I am using ezdxf to import a .dxf file into Python. It works smoothly. I get a list of lines and arcs.

How do I figure out which lines and arcs are connected to each other? Are they somehow indexed or do I need to search start and end points of lines and arcs and match them afterwards?

What I need to find are the closed lines in the .dxf file.

Tonechas
  • 13,398
  • 16
  • 46
  • 80
Tola
  • 254
  • 3
  • 17

1 Answers1

6

You have to match line and arc end points manually.

Get the end points of arcs with default extrusion (0, 0, 1):

from ezdxf.math import Vector

start_point = Vector.from_deg_angle(arc.dxf.start_angle, arc.dxf.radius)
end_point = Vector.from_deg_angle(arc.dxf.end_angle, arc.dxf.radius)

Add to arc center:

s = start_point + arc.dxf.center
e = end_point + arc.dxf.center

If the Object Coordinate System (OCS) defined by arc.dxf.extrusion is different from (0, 0, 1), a transformation to the World Coordinate System (WCS) has to be done:

ocs = arc.ocs()
s = ocs.to_wcs(s)
e = ocs.to_wcs(e)

Next ezdxf version v0.11 will have Arc.start_point and Arc.end_point properties, which will return the WCS coordinates.

Important: Don't compare with the equal operator (==), use math.isclose() or better Vector.isclose() like:

s.isclose(line.dxf.start, abs_tol=1e-6)
e.isclose(line.dxf.start, abs_tol=1e-6)
s.isclose(line.dxf.end, abs_tol=1e-6)
e.isclose(line.dxf.end, abs_tol=1e-6)

Set absolute tolerance according to your needs.

mozman
  • 2,001
  • 8
  • 23