Files
cadquery/tests/test_importers.py

84 lines
2.7 KiB
Python
Raw Normal View History

"""
Tests file importers such as STEP
"""
# core modules
2018-07-15 15:04:06 +02:00
import tempfile
import os
from cadquery import *
from cadquery import exporters
from cadquery import importers
from tests import BaseTest
# where unit test output will be saved
2018-07-15 15:04:06 +02:00
OUTDIR = tempfile.gettempdir()
class TestImporters(BaseTest):
def importBox(self, importType, fileName):
"""
Exports a simple box to a STEP file and then imports it again
:param importType: The type of file we're importing (STEP, STL, etc)
:param fileName: The path and name of the file to write to
"""
# We're importing a STEP file
if importType == importers.ImportTypes.STEP:
# We first need to build a simple shape to export
shape = Workplane("XY").box(1, 2, 3).val()
# Export the shape to a temporary file
shape.exportStep(fileName)
# Reimport the shape from the new STEP file
importedShape = importers.importShape(importType, fileName)
# Check to make sure we got a solid back
self.assertTrue(importedShape.val().ShapeType() == "Solid")
# Check the number of faces and vertices per face to make sure we have a box shape
self.assertTrue(
importedShape.faces("+X").size() == 1
and importedShape.faces("+X").vertices().size() == 4
)
self.assertTrue(
importedShape.faces("+Y").size() == 1
and importedShape.faces("+Y").vertices().size() == 4
)
self.assertTrue(
importedShape.faces("+Z").size() == 1
and importedShape.faces("+Z").vertices().size() == 4
)
def testSTEP(self):
"""
Tests STEP file import
"""
self.importBox(importers.ImportTypes.STEP, OUTDIR + "/tempSTEP.step")
def testInvalidSTEP(self):
"""
Attempting to load an invalid STEP file should throw an exception, but
not segfault.
"""
tmpfile = OUTDIR + "/badSTEP.step"
with open(tmpfile, "w") as f:
f.write("invalid STEP file")
with self.assertRaises(ValueError):
importers.importShape(importers.ImportTypes.STEP, tmpfile)
def testImportMultipartSTEP(self):
"""
Import a STEP file that contains two objects and ensure that both are
loaded.
"""
testdataDir = os.path.join(os.path.dirname(__file__), "testdata")
filename = os.path.join(testdataDir, "red_cube_blue_cylinder.step")
objs = importers.importShape(importers.ImportTypes.STEP, filename)
self.assertEqual(2, len(objs.all()))
if __name__ == "__main__":
import unittest
unittest.main()