2013-04-20 20:33:35 -04:00
|
|
|
"""
|
|
|
|
Tests basic workplane functionality
|
|
|
|
"""
|
2017-09-17 00:57:12 +02:00
|
|
|
# core modules
|
|
|
|
import sys
|
2018-02-02 16:34:37 +01:00
|
|
|
import io
|
2017-09-17 00:57:12 +02:00
|
|
|
|
|
|
|
# my modules
|
2013-04-20 20:33:35 -04:00
|
|
|
from cadquery import *
|
2020-07-28 22:23:13 +02:00
|
|
|
from cadquery import exporters, importers
|
2013-04-20 20:33:35 -04:00
|
|
|
from tests import BaseTest
|
|
|
|
|
2017-09-17 00:57:12 +02:00
|
|
|
|
2013-04-20 20:33:35 -04:00
|
|
|
class TestExporters(BaseTest):
|
2020-08-07 08:50:53 +02:00
|
|
|
def _exportBox(self, eType, stringsToFind, tolerance=0.1, angularTolerance=0.1):
|
2013-04-20 20:33:35 -04:00
|
|
|
"""
|
2014-08-18 14:45:02 -04:00
|
|
|
Exports a test object, and then looks for
|
2013-04-20 20:33:35 -04:00
|
|
|
all of the supplied strings to be in the result
|
|
|
|
returns the result in case the case wants to do more checks also
|
|
|
|
"""
|
2017-09-17 00:57:12 +02:00
|
|
|
p = Workplane("XY").box(1, 2, 3)
|
2018-02-02 16:34:37 +01:00
|
|
|
|
2020-01-20 20:52:12 +01:00
|
|
|
if eType == exporters.ExportTypes.AMF:
|
2018-02-02 16:34:37 +01:00
|
|
|
s = io.BytesIO()
|
|
|
|
else:
|
|
|
|
s = io.StringIO()
|
2020-01-20 20:52:12 +01:00
|
|
|
|
2020-08-06 14:34:22 -07:00
|
|
|
exporters.exportShape(
|
2020-08-07 08:50:53 +02:00
|
|
|
p, eType, s, tolerance=tolerance, angularTolerance=angularTolerance
|
2020-08-06 14:34:22 -07:00
|
|
|
)
|
2014-08-18 14:45:02 -04:00
|
|
|
|
2020-01-20 20:52:12 +01:00
|
|
|
result = "{}".format(s.getvalue())
|
2017-09-17 00:57:12 +02:00
|
|
|
|
2013-04-20 20:33:35 -04:00
|
|
|
for q in stringsToFind:
|
2017-09-17 00:57:12 +02:00
|
|
|
self.assertTrue(result.find(q) > -1)
|
2013-04-20 20:33:35 -04:00
|
|
|
return result
|
2014-08-18 14:45:02 -04:00
|
|
|
|
2020-07-29 08:52:41 +02:00
|
|
|
def _box(self):
|
|
|
|
|
|
|
|
return Workplane().box(1, 1, 1)
|
|
|
|
|
2013-04-20 20:33:35 -04:00
|
|
|
def testSTL(self):
|
2020-01-20 20:52:12 +01:00
|
|
|
self._exportBox(exporters.ExportTypes.STL, ["facet normal"])
|
2014-08-18 14:45:02 -04:00
|
|
|
|
2020-07-29 08:52:41 +02:00
|
|
|
exporters.export(self._box(), "out.stl")
|
|
|
|
|
2013-04-20 20:33:35 -04:00
|
|
|
def testSVG(self):
|
2020-01-20 20:52:12 +01:00
|
|
|
self._exportBox(exporters.ExportTypes.SVG, ["<svg", "<g transform"])
|
2013-04-20 20:33:35 -04:00
|
|
|
|
2020-07-29 08:52:41 +02:00
|
|
|
exporters.export(self._box(), "out.svg")
|
|
|
|
|
2013-04-20 20:33:35 -04:00
|
|
|
def testAMF(self):
|
2020-01-20 20:52:12 +01:00
|
|
|
self._exportBox(exporters.ExportTypes.AMF, ["<amf units", "</object>"])
|
2013-04-20 20:33:35 -04:00
|
|
|
|
2020-07-29 08:52:41 +02:00
|
|
|
exporters.export(self._box(), "out.amf")
|
|
|
|
|
2013-04-20 20:33:35 -04:00
|
|
|
def testSTEP(self):
|
2020-01-20 20:52:12 +01:00
|
|
|
self._exportBox(exporters.ExportTypes.STEP, ["FILE_SCHEMA"])
|
2013-04-20 20:33:35 -04:00
|
|
|
|
2020-07-29 08:52:41 +02:00
|
|
|
exporters.export(self._box(), "out.step")
|
|
|
|
|
2013-04-20 20:33:35 -04:00
|
|
|
def testTJS(self):
|
2020-01-20 20:52:12 +01:00
|
|
|
self._exportBox(
|
|
|
|
exporters.ExportTypes.TJS, ["vertices", "formatVersion", "faces"]
|
|
|
|
)
|
2020-07-28 22:23:13 +02:00
|
|
|
|
2020-07-29 08:52:41 +02:00
|
|
|
exporters.export(self._box(), "out.tjs")
|
|
|
|
|
2020-07-28 22:23:13 +02:00
|
|
|
def testDXF(self):
|
|
|
|
|
2020-07-29 08:52:41 +02:00
|
|
|
exporters.export(self._box().section(), "out.dxf")
|
|
|
|
|
|
|
|
with self.assertRaises(ValueError):
|
|
|
|
exporters.export(self._box().val(), "out.dxf")
|
|
|
|
|
2020-07-28 22:23:13 +02:00
|
|
|
s1 = (
|
|
|
|
Workplane("XZ")
|
|
|
|
.polygon(10, 10)
|
|
|
|
.ellipse(1, 2)
|
|
|
|
.extrude(1)
|
|
|
|
.edges("|Y")
|
|
|
|
.fillet(1)
|
|
|
|
.section()
|
|
|
|
)
|
|
|
|
exporters.dxf.exportDXF(s1, "res1.dxf")
|
|
|
|
|
|
|
|
s1_i = importers.importDXF("res1.dxf")
|
|
|
|
|
2020-08-06 11:53:20 -07:00
|
|
|
self.assertAlmostEqual(s1.val().Area(), s1_i.val().Area(), 6)
|
|
|
|
self.assertAlmostEqual(s1.edges().size(), s1_i.edges().size())
|
2020-07-28 22:23:13 +02:00
|
|
|
|
|
|
|
pts = [(0, 0), (0, 0.5), (1, 1)]
|
|
|
|
s2 = (
|
|
|
|
Workplane().spline(pts).close().extrude(1).edges("|Z").fillet(0.1).section()
|
|
|
|
)
|
|
|
|
exporters.dxf.exportDXF(s2, "res2.dxf")
|
|
|
|
|
|
|
|
s2_i = importers.importDXF("res2.dxf")
|
|
|
|
|
2020-08-06 11:53:20 -07:00
|
|
|
self.assertAlmostEqual(s2.val().Area(), s2_i.val().Area(), 6)
|
|
|
|
self.assertAlmostEqual(s2.edges().size(), s2_i.edges().size())
|
2020-07-28 22:23:13 +02:00
|
|
|
|
|
|
|
s3 = (
|
|
|
|
Workplane("XY")
|
|
|
|
.ellipseArc(1, 2, 0, 180)
|
|
|
|
.close()
|
|
|
|
.extrude(1)
|
|
|
|
.edges("|Z")
|
|
|
|
.fillet(0.1)
|
|
|
|
.section()
|
|
|
|
)
|
|
|
|
exporters.dxf.exportDXF(s3, "res3.dxf")
|
|
|
|
|
|
|
|
s3_i = importers.importDXF("res3.dxf")
|
|
|
|
|
2020-08-06 11:53:20 -07:00
|
|
|
self.assertAlmostEqual(s3.val().Area(), s3_i.val().Area(), 6)
|
|
|
|
self.assertAlmostEqual(s3.edges().size(), s3_i.edges().size())
|
2020-07-29 08:52:41 +02:00
|
|
|
|
|
|
|
def testTypeHandling(self):
|
|
|
|
|
|
|
|
with self.assertRaises(ValueError):
|
|
|
|
exporters.export(self._box(), "out.random")
|
|
|
|
|
|
|
|
with self.assertRaises(ValueError):
|
|
|
|
exporters.export(self._box(), "out.stl", "STP")
|