From 3145dd7bbce04eaa3df85c4b2d49b03d9d915e3e Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 14 Jul 2023 13:12:20 +0200 Subject: [PATCH] Part: add a unit test for PR #9905 --- src/Mod/Part/CMakeLists.txt | 1 + src/Mod/Part/TestPartGui.py | 1 + src/Mod/Part/parttests/ColorPerFaceTest.py | 86 ++++++++++++++++++++++ 3 files changed, 88 insertions(+) create mode 100644 src/Mod/Part/parttests/ColorPerFaceTest.py diff --git a/src/Mod/Part/CMakeLists.txt b/src/Mod/Part/CMakeLists.txt index 96fafdeca9..a2cf87b329 100644 --- a/src/Mod/Part/CMakeLists.txt +++ b/src/Mod/Part/CMakeLists.txt @@ -66,6 +66,7 @@ set(Part_tests parttests/part_test_objects.py parttests/regression_tests.py parttests/TopoShapeListTest.py + parttests/ColorPerFaceTest.py ) add_custom_target(PartScripts ALL SOURCES diff --git a/src/Mod/Part/TestPartGui.py b/src/Mod/Part/TestPartGui.py index 4b9175ba1a..9527da2fbe 100644 --- a/src/Mod/Part/TestPartGui.py +++ b/src/Mod/Part/TestPartGui.py @@ -43,6 +43,7 @@ def findDockWidget(name): # define the test cases to test the FreeCAD Part module #--------------------------------------------------------------------------- """ +from parttests.ColorPerFaceTest import ColorPerFaceTest #class PartGuiTestCases(unittest.TestCase): diff --git a/src/Mod/Part/parttests/ColorPerFaceTest.py b/src/Mod/Part/parttests/ColorPerFaceTest.py new file mode 100644 index 0000000000..57fd54d587 --- /dev/null +++ b/src/Mod/Part/parttests/ColorPerFaceTest.py @@ -0,0 +1,86 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# test to check color per face when after restore + +import FreeCAD as App +import Part +import os +import tempfile +import unittest +from pivy import coin + +class ColorPerFaceTest(unittest.TestCase): + def setUp(self): + TempPath = tempfile.gettempdir() + self.fileName = TempPath + os.sep + "ColorPerFaceTest.FCStd" + self.doc = App.newDocument() + + def tearDown(self): + App.closeDocument(self.doc.Name) + + def testBox(self): + box = self.doc.addObject("Part::Box","Box") + self.doc.recompute() + + box.ViewObject.DiffuseColor = [(1.,0.,0.,0.), + (1.,0.,0.,0.), + (1.,0.,0.,0.), + (1.,0.,0.,0.), + (1.,1.,0.,0.), + (1.,1.,0.,0.)] + + box.Visibility = False + self.doc.recompute() + + self.doc.saveAs(self.fileName) + App.closeDocument(self.doc.Name) + + self.doc = App.openDocument(self.fileName) + box = self.doc.Box + box.Visibility = True + self.assertEqual(len(box.ViewObject.DiffuseColor), 6) + + sa = coin.SoSearchAction() + sa.setType(coin.SoMaterial.getClassTypeId()) + # We need an easier way to access nodes of a display mode + sa.setInterest(coin.SoSearchAction.ALL) + sa.apply(box.ViewObject.RootNode) + paths = sa.getPaths() + + mat = paths.get(2).getTail() + self.assertEqual(mat.diffuseColor.getNum(), 6) + + def testBoxAndLink(self): + box = self.doc.addObject("Part::Box","Box") + self.doc.recompute() + + box.ViewObject.DiffuseColor = [(1.,0.,0.,0.), + (1.,0.,0.,0.), + (1.,0.,0.,0.), + (1.,0.,0.,0.), + (1.,1.,0.,0.), + (1.,1.,0.,0.)] + + link = self.doc.addObject('App::Link','Link') + link.setLink(box) + box.Visibility = False + self.doc.recompute() + + self.doc.saveAs(self.fileName) + App.closeDocument(self.doc.Name) + + self.doc = App.openDocument(self.fileName) + box = self.doc.Box + box.Visibility = True + self.assertEqual(len(box.ViewObject.DiffuseColor), 6) + + sa = coin.SoSearchAction() + sa.setType(coin.SoMaterial.getClassTypeId()) + # We need an easier way to access nodes of a display mode + sa.setInterest(coin.SoSearchAction.ALL) + sa.apply(box.ViewObject.RootNode) + paths = sa.getPaths() + + mat = paths.get(2).getTail() + self.assertEqual(mat.diffuseColor.getNum(), 6)