diff --git a/src/Mod/OpenSCAD/OpenSCADTest/app/test_importCSG.py b/src/Mod/OpenSCAD/OpenSCADTest/app/test_importCSG.py index 0ccd8f2931..97eed68900 100644 --- a/src/Mod/OpenSCAD/OpenSCADTest/app/test_importCSG.py +++ b/src/Mod/OpenSCAD/OpenSCADTest/app/test_importCSG.py @@ -201,7 +201,6 @@ polyhedron( f = open(filename,"w+") f.write(scadCode) f.close() - os.chdir(temp_dir) return importCSG.open(filename) def test_import_difference(self): @@ -314,38 +313,48 @@ polyhedron( FreeCAD.closeDocument(doc.Name) def test_import_surface(self): - testfile = join(self.test_dir, "Surface.dat").replace('\\','/') - doc = self.utility_create_scad(f"surface(file = \"{testfile}\", center = true, convexity = 5);", "surface_simple_dat") - object = doc.ActiveObject - self.assertTrue (object is not None) - self.assertAlmostEqual (object.Shape.Volume, 275.000000, 6) - self.assertAlmostEqual (object.Shape.BoundBox.XMin, -4.5, 6) - self.assertAlmostEqual (object.Shape.BoundBox.XMax, 4.5, 6) - self.assertAlmostEqual (object.Shape.BoundBox.YMin, -4.5, 6) - self.assertAlmostEqual (object.Shape.BoundBox.YMax, 4.5, 6) - FreeCAD.closeDocument(doc.Name) - - testfile = join(self.test_dir, "Surface.dat").replace('\\','/') - doc = self.utility_create_scad(f"surface(file = \"{testfile}\", convexity = 5);", "surface_uncentered_dat") - object = doc.ActiveObject - self.assertTrue (object is not None) - self.assertAlmostEqual (object.Shape.Volume, 275.000000, 6) - self.assertAlmostEqual (object.Shape.BoundBox.XMin, 0, 6) - self.assertAlmostEqual (object.Shape.BoundBox.XMax, 9, 6) - self.assertAlmostEqual (object.Shape.BoundBox.YMin, 0, 6) - self.assertAlmostEqual (object.Shape.BoundBox.YMax, 9, 6) - FreeCAD.closeDocument(doc.Name) + # Workaround for absolute vs. relative path issue + # Inside the OpenSCAD file an absolute path name to Surface.dat is used + # but by using the OpenSCAD executable to create a CSG file it's converted + # into a path name relative to the output filename. + # In order to open the CAG file correctly the cwd must be temporarily changed + with tempfile.TemporaryDirectory() as temp_dir: + cwd = os.getcwd() + os.chdir(temp_dir) - testfile = join(self.test_dir, "Surface2.dat").replace('\\','/') - doc = self.utility_create_scad(f"surface(file = \"{testfile}\", center = true, convexity = 5);", "surface_rectangular_dat") - object = doc.ActiveObject - self.assertTrue (object is not None) - self.assertAlmostEqual (object.Shape.Volume, 24.5500000, 6) - self.assertAlmostEqual (object.Shape.BoundBox.XMin, -2, 6) - self.assertAlmostEqual (object.Shape.BoundBox.XMax, 2, 6) - self.assertAlmostEqual (object.Shape.BoundBox.YMin, -1.5, 6) - self.assertAlmostEqual (object.Shape.BoundBox.YMax, 1.5, 6) - FreeCAD.closeDocument(doc.Name) + testfile = join(self.test_dir, "Surface.dat").replace('\\','/') + doc = self.utility_create_scad(f"surface(file = \"{testfile}\", center = true, convexity = 5);", "surface_simple_dat") + object = doc.ActiveObject + self.assertTrue (object is not None) + self.assertAlmostEqual (object.Shape.Volume, 275.000000, 6) + self.assertAlmostEqual (object.Shape.BoundBox.XMin, -4.5, 6) + self.assertAlmostEqual (object.Shape.BoundBox.XMax, 4.5, 6) + self.assertAlmostEqual (object.Shape.BoundBox.YMin, -4.5, 6) + self.assertAlmostEqual (object.Shape.BoundBox.YMax, 4.5, 6) + FreeCAD.closeDocument(doc.Name) + + testfile = join(self.test_dir, "Surface.dat").replace('\\','/') + doc = self.utility_create_scad(f"surface(file = \"{testfile}\", convexity = 5);", "surface_uncentered_dat") + object = doc.ActiveObject + self.assertTrue (object is not None) + self.assertAlmostEqual (object.Shape.Volume, 275.000000, 6) + self.assertAlmostEqual (object.Shape.BoundBox.XMin, 0, 6) + self.assertAlmostEqual (object.Shape.BoundBox.XMax, 9, 6) + self.assertAlmostEqual (object.Shape.BoundBox.YMin, 0, 6) + self.assertAlmostEqual (object.Shape.BoundBox.YMax, 9, 6) + FreeCAD.closeDocument(doc.Name) + + testfile = join(self.test_dir, "Surface2.dat").replace('\\','/') + doc = self.utility_create_scad(f"surface(file = \"{testfile}\", center = true, convexity = 5);", "surface_rectangular_dat") + object = doc.ActiveObject + self.assertTrue (object is not None) + self.assertAlmostEqual (object.Shape.Volume, 24.5500000, 6) + self.assertAlmostEqual (object.Shape.BoundBox.XMin, -2, 6) + self.assertAlmostEqual (object.Shape.BoundBox.XMax, 2, 6) + self.assertAlmostEqual (object.Shape.BoundBox.YMin, -1.5, 6) + self.assertAlmostEqual (object.Shape.BoundBox.YMax, 1.5, 6) + FreeCAD.closeDocument(doc.Name) + os.chdir(cwd) def test_import_projection(self): pass