1 // Copyright (C) 2014-2015 EDF-R&D
2 // This library is free software; you can redistribute it and/or
3 // modify it under the terms of the GNU Lesser General Public
4 // License as published by the Free Software Foundation; either
5 // version 2.1 of the License, or (at your option) any later version.
7 // This library is distributed in the hope that it will be useful,
8 // but WITHOUT ANY WARRANTY; without even the implied warranty of
9 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
10 // Lesser General Public License for more details.
12 // You should have received a copy of the GNU Lesser General Public
13 // License along with this library; if not, write to the Free Software
14 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #include <test_HYDROData_BoundaryPolygons.h>
20 #include <HYDROData_Document.h>
21 #include <HYDROData_CalculationCase.h>
23 #include <BRep_Builder.hxx>
25 #include <GProp_GProps.hxx>
26 #include <BRepGProp.hxx>
27 #include <HYDROData_ShapesGroup.h>
28 #include <HYDROData_BCPolygon.h>
30 extern QString REF_DATA_PATH;
32 void test_HYDROData_BoundaryPolygons::test_bp_1()
34 TCollection_AsciiString fname = REF_DATA_PATH.toLatin1().data();
35 fname += "/test_boundary_polygon_calc_case_1.cbf";
36 CPPUNIT_ASSERT_EQUAL( (int)DocError_OK, (int)HYDROData_Document::Load( fname.ToCString(), 1 ) );
38 Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
39 //Calc case already contains already contains 4 boundary poltgons (3 cut, 1 include)
40 //Update it to recalculate the shape groups
41 Handle(HYDROData_CalculationCase) aCase =
42 Handle(HYDROData_CalculationCase)::DownCast( aDoc->FindObjectByName( "Case_1" ) );
43 CPPUNIT_ASSERT_EQUAL( false, aCase.IsNull() );
45 CPPUNIT_ASSERT_EQUAL(4, aCase->GetBoundaryPolygons().Size());
46 HYDROData_SequenceOfObjects aSplitGroups = aCase->GetSplitGroups();
47 CPPUNIT_ASSERT_EQUAL(1, aSplitGroups.Size());
49 Handle(HYDROData_ShapesGroup) aGroup = Handle(HYDROData_ShapesGroup)::DownCast( aSplitGroups.First() );
50 std::string name = aGroup->GetName().toStdString();
51 CPPUNIT_ASSERT_EQUAL( name, std::string("Case_1_Immersible zone_1_Outer") );
53 TopTools_SequenceOfShape aSeqShapes;
54 aGroup->GetShapes( aSeqShapes );
55 CPPUNIT_ASSERT_EQUAL( 78, aSeqShapes.Size());
57 TopTools_IndexedMapOfShape ME, MV;
60 for (int i=1; i<=aSeqShapes.Size();i++)
62 const TopoDS_Shape& aCSH = aSeqShapes(i);
63 TopExp::MapShapes(aCSH, TopAbs_EDGE, ME);
64 TopExp::MapShapes(aCSH, TopAbs_VERTEX, MV);
65 BRepGProp::LinearProperties(aCSH, G);
66 total_len += G.Mass();
68 CPPUNIT_ASSERT_EQUAL( 78, ME.Extent());
69 CPPUNIT_ASSERT_EQUAL( 78, MV.Extent());
70 CPPUNIT_ASSERT_DOUBLES_EQUAL( 22.074, total_len , 0.001);
75 void test_HYDROData_BoundaryPolygons::test_bp_2()
77 TCollection_AsciiString fname = REF_DATA_PATH.toLatin1().data();
78 fname += "/test_boundary_polygon_calc_case_2.cbf";
79 CPPUNIT_ASSERT_EQUAL( (int)DocError_OK, (int)HYDROData_Document::Load( fname.ToCString(), 1 ) );
80 Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
81 //add boundary polygons to case_1
82 Handle(HYDROData_CalculationCase) aCase =
83 Handle(HYDROData_CalculationCase)::DownCast( aDoc->FindObjectByName( "Case_1" ) );
84 CPPUNIT_ASSERT_EQUAL( false, aCase.IsNull() );
85 double len1=0, len2=0;
87 //check linear properties before applying of boundary polygons
88 CPPUNIT_ASSERT_EQUAL(0, aCase->GetBoundaryPolygons().Size());
89 HYDROData_SequenceOfObjects aSplitGroups = aCase->GetSplitGroups();
90 Handle(HYDROData_ShapesGroup) aGroup = Handle(HYDROData_ShapesGroup)::DownCast( aSplitGroups.First() );
91 std::string name = aGroup->GetName().toStdString();
92 CPPUNIT_ASSERT_EQUAL( name, std::string("Case_1_Immersible zone_1_Outer") );
93 TopTools_SequenceOfShape aSeqShapes;
94 aGroup->GetShapes( aSeqShapes );
95 CPPUNIT_ASSERT_EQUAL( 36, aSeqShapes.Size());
96 TopTools_IndexedMapOfShape ME, MV;
98 for (int i=1; i<=aSeqShapes.Size();i++)
100 const TopoDS_Shape& aCSH = aSeqShapes(i);
101 BRepGProp::LinearProperties(aCSH, G);
104 CPPUNIT_ASSERT_DOUBLES_EQUAL( 22.074, len1 , 0.001);
107 //add boudnary polygons to case_1. (3 cut tools, 1 include tool)
108 Handle(HYDROData_BCPolygon) aBP3 = Handle(HYDROData_BCPolygon)::DownCast( aDoc->FindObjectByName("BP_poly3"));
109 aCase->AddBoundaryPolygon(aBP3);
110 Handle(HYDROData_BCPolygon) aBP4 = Handle(HYDROData_BCPolygon)::DownCast( aDoc->FindObjectByName("BP_poly4"));
111 aCase->AddBoundaryPolygon(aBP4);
112 Handle(HYDROData_BCPolygon) aBP5 = Handle(HYDROData_BCPolygon)::DownCast( aDoc->FindObjectByName("BP_poly5"));
113 aCase->AddBoundaryPolygon(aBP5);
114 Handle(HYDROData_BCPolygon) aBP6 = Handle(HYDROData_BCPolygon)::DownCast( aDoc->FindObjectByName("BP_poly6"));
115 aCase->AddBoundaryPolygon(aBP6);
119 //check linear properties after applying of boundary polygons
120 HYDROData_SequenceOfObjects aSplitGroups = aCase->GetSplitGroups();
121 Handle(HYDROData_ShapesGroup) aGroup = Handle(HYDROData_ShapesGroup)::DownCast( aSplitGroups.First() );
122 std::string name = aGroup->GetName().toStdString();
123 CPPUNIT_ASSERT_EQUAL( name, std::string("Case_1_Immersible zone_1_Outer") );
125 TopTools_SequenceOfShape aSeqShapes;
126 aGroup->GetShapes( aSeqShapes );
127 CPPUNIT_ASSERT_EQUAL( 78, aSeqShapes.Size());
129 TopTools_IndexedMapOfShape ME, MV;
132 for (int i=1; i<=aSeqShapes.Size();i++)
134 const TopoDS_Shape& aCSH = aSeqShapes(i);
135 TopExp::MapShapes(aCSH, TopAbs_EDGE, ME);
136 TopExp::MapShapes(aCSH, TopAbs_VERTEX, MV);
137 BRepGProp::LinearProperties(aCSH, G);
140 CPPUNIT_ASSERT_EQUAL( 78, ME.Extent());
141 CPPUNIT_ASSERT_EQUAL( 78, MV.Extent());
143 CPPUNIT_ASSERT_DOUBLES_EQUAL( 22.074, len2, 0.001);