75 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """
 | |
|     Tests file importers such as STEP
 | |
| """
 | |
| # core modules
 | |
| 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
 | |
| 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()
 |