Fix dxf arc export for some partial circles (#455)

* Fix dxf arc export for some partial circles

* Fix dxf export formatting, add test

* Black related update

Co-authored-by: Scott Nagy <i@sna.gy>
Co-authored-by: Adam Urbańczyk <adam-urbanczyk@users.noreply.github.com>
This commit is contained in:
Scott Nagy
2020-09-27 06:33:59 -07:00
committed by GitHub
parent da07216688
commit c819dfca48
2 changed files with 18 additions and 7 deletions

View File

@ -37,8 +37,8 @@ def _dxf_circle(e: Edge, msp: ezdxf.layouts.Modelspace, plane: Plane):
a1 = RAD2DEG * (geom.FirstParameter() - phi) a1 = RAD2DEG * (geom.FirstParameter() - phi)
a2 = RAD2DEG * (geom.LastParameter() - phi) a2 = RAD2DEG * (geom.LastParameter() - phi)
else: else:
a1 = -RAD2DEG * (geom.LastParameter() + phi) a1 = -RAD2DEG * (geom.LastParameter() - phi) + 180
a2 = -RAD2DEG * (geom.FirstParameter() + phi) a2 = -RAD2DEG * (geom.FirstParameter() - phi) + 180
if e.IsClosed(): if e.IsClosed():
msp.add_circle((c.X(), c.Y(), c.Z()), r) msp.add_circle((c.X(), c.Y(), c.Z()), r)

View File

@ -14,9 +14,9 @@ from tests import BaseTest
class TestExporters(BaseTest): class TestExporters(BaseTest):
def _exportBox(self, eType, stringsToFind, tolerance=0.1, angularTolerance=0.1): def _exportBox(self, eType, stringsToFind, tolerance=0.1, angularTolerance=0.1):
""" """
Exports a test object, and then looks for Exports a test object, and then looks for
all of the supplied strings to be in the result all of the supplied strings to be in the result
returns the result in case the case wants to do more checks also returns the result in case the case wants to do more checks also
""" """
p = Workplane("XY").box(1, 2, 3) p = Workplane("XY").box(1, 2, 3)
@ -116,6 +116,17 @@ class TestExporters(BaseTest):
self.assertAlmostEqual(s3.val().Area(), s3_i.val().Area(), 6) self.assertAlmostEqual(s3.val().Area(), s3_i.val().Area(), 6)
self.assertAlmostEqual(s3.edges().size(), s3_i.edges().size()) self.assertAlmostEqual(s3.edges().size(), s3_i.edges().size())
cyl = Workplane("XY").circle(22).extrude(10, both=True).translate((-50, 0, 0))
s4 = Workplane("XY").box(80, 60, 5).cut(cyl).section()
exporters.dxf.exportDXF(s4, "res4.dxf")
s4_i = importers.importDXF("res4.dxf")
self.assertAlmostEqual(s4.val().Area(), s4_i.val().Area(), 6)
self.assertAlmostEqual(s4.edges().size(), s4_i.edges().size())
def testTypeHandling(self): def testTypeHandling(self):
with self.assertRaises(ValueError): with self.assertRaises(ValueError):