// SPDX-License-Identifier: LGPL-2.1-or-later #include "gtest/gtest.h" #include #include "PartTestHelpers.h" class FeaturePartMakeElementRefineTest: public ::testing::Test, public PartTestHelpers::PartTestHelperClass { protected: static void SetUpTestSuite() { tests::initApplication(); } void SetUp() override { createTestDoc(); } void TearDown() override {} }; TEST_F(FeaturePartMakeElementRefineTest, makeElementRefineBoxes) { // Arrange auto _doc = App::GetApplication().getActiveDocument(); auto _fuse = dynamic_cast(_doc->addObject("Part::Fuse")); _fuse->Base.setValue(_boxes[0]); _fuse->Tool.setValue(_boxes[3]); // Act _fuse->execute(); Part::TopoShape ts = _fuse->Shape.getValue(); Part::TopoShape refined = ts.makeElementRefine(); double volume = PartTestHelpers::getVolume(ts.getShape()); double refinedVolume = PartTestHelpers::getVolume(refined.getShape()); Base::BoundBox3d bb = ts.getBoundBox(); // Assert EXPECT_TRUE(bb.IsValid()); EXPECT_DOUBLE_EQ(volume, 12.0); EXPECT_DOUBLE_EQ(refinedVolume, 12.0); // Refine shouldn't change the volume EXPECT_EQ(ts.countSubElements("Face"), 10); // Two boxes touching each loose one face EXPECT_EQ(ts.countSubElements("Edge"), 20); // Two boxes touching loose 4 edges EXPECT_EQ(refined.countSubElements("Face"), 6); // After refining it is one box EXPECT_EQ(refined.countSubElements("Edge"), 12); // 12 edges in a box // TODO: Make sure we have an elementMap for the refine. // TODO: Refine doesn't work on compounds, so we're going to need a binary operation or the // like, and those don't exist yet. Once they do, this test can be expanded }