+void test_HYDROData_CalcCase::test_complete_2()
+{
+ TCollection_AsciiString fname = REF_DATA_PATH.toLatin1().data();
+ fname += "/study_cc_2.cbf";
+ CPPUNIT_ASSERT_EQUAL( (int)DocError_OK, (int)HYDROData_Document::Load( fname.ToCString() ) );
+
+ Handle(HYDROData_Document) aDoc = HYDROData_Document::Document();
+
+ Handle(HYDROData_CalculationCase) aCase =
+ Handle(HYDROData_CalculationCase)::DownCast( aDoc->FindObjectByName( "Case_1" ) );
+
+ NCollection_Sequence<Handle(HYDROData_Entity)> theNewObjects;
+ Handle(HYDROData_Entity) aNewZone1 = aDoc->FindObjectByName( "Immersible zone_4" );
+ Handle(HYDROData_Entity) aNewZone2 = aDoc->FindObjectByName( "Immersible zone_5" );
+ Handle(HYDROData_Entity) aNewZone3 = aDoc->FindObjectByName( "Immersible zone_6" );
+ Handle(HYDROData_Entity) aNewPoly1 = aDoc->FindObjectByName( "Polyline___BB" );
+ Handle(HYDROData_Entity) aNewPoly2 = aDoc->FindObjectByName( "Polyline_1" );
+ Handle(HYDROData_Entity) aNewPoly3 = aDoc->FindObjectByName( "Polyline_2" );
+ Handle(HYDROData_Entity) aNewPoly4 = aDoc->FindObjectByName( "Polyline_3" );
+ Handle(HYDROData_Entity) aNewPoly5 = aDoc->FindObjectByName( "Polyline_4" );
+ Handle(HYDROData_Entity) aNewPoly6 = aDoc->FindObjectByName( "Polyline_5" );
+ Handle(HYDROData_Entity) aNewPoly7 = aDoc->FindObjectByName( "Polyline_6" );
+ Handle(HYDROData_Entity) aNewPoly8 = aDoc->FindObjectByName( "Polyline_7" );
+ Handle(HYDROData_Entity) aNewPoly9 = aDoc->FindObjectByName( "Polyline_8" );
+
+ theNewObjects.Append(aNewZone1);
+ theNewObjects.Append(aNewZone2);
+ theNewObjects.Append(aNewZone3);
+ theNewObjects.Append(aNewPoly1);
+ theNewObjects.Append(aNewPoly2);
+ theNewObjects.Append(aNewPoly3);
+ theNewObjects.Append(aNewPoly4);
+ theNewObjects.Append(aNewPoly5);
+ theNewObjects.Append(aNewPoly6);
+ theNewObjects.Append(aNewPoly7);
+ theNewObjects.Append(aNewPoly8);
+ theNewObjects.Append(aNewPoly9);
+
+ bool is_int = false;
+ NCollection_Sequence<Handle(HYDROData_Region)> theNewRegions;
+ QSet<QString> newRegionEntries;
+ HYDROData_CompleteCalcCase::AddObjects(aDoc, aCase, theNewObjects, true, is_int, theNewRegions);
+
+ /// check the result
+ CPPUNIT_ASSERT_EQUAL(true, is_int);
+
+ HYDROData_SequenceOfObjects aRegions = aCase->GetRegions();
+ CPPUNIT_ASSERT_EQUAL(6, aRegions.Size());
+
+ CPPUNIT_ASSERT_EQUAL(QString("OREG1"), aRegions(1)->GetName());
+ CPPUNIT_ASSERT_EQUAL(QString("OREGMIN"), aRegions(2)->GetName());
+ CPPUNIT_ASSERT_EQUAL(QString("OREG2"), aRegions(3)->GetName());
+ CPPUNIT_ASSERT_EQUAL(QString("Immersible zone_4_reg"), aRegions(4)->GetName());
+ CPPUNIT_ASSERT_EQUAL(QString("Immersible zone_5_reg"), aRegions(5)->GetName());
+ CPPUNIT_ASSERT_EQUAL(QString("Immersible zone_6_reg"), aRegions(6)->GetName());
+
+ HYDROData_SequenceOfObjects aZonesReg1 = Handle(HYDROData_Region)::DownCast( aRegions(1) )->GetZones();
+ CPPUNIT_ASSERT_EQUAL(3, aZonesReg1.Size());
+ HYDROData_SequenceOfObjects aZonesReg2 = Handle(HYDROData_Region)::DownCast( aRegions(2) )->GetZones();
+ CPPUNIT_ASSERT_EQUAL(2, aZonesReg2.Size());
+ HYDROData_SequenceOfObjects aZonesReg3 = Handle(HYDROData_Region)::DownCast( aRegions(3) )->GetZones();
+ CPPUNIT_ASSERT_EQUAL(3, aZonesReg3.Size());
+ HYDROData_SequenceOfObjects aZonesReg4 = Handle(HYDROData_Region)::DownCast( aRegions(4) )->GetZones();
+ CPPUNIT_ASSERT_EQUAL(11, aZonesReg4.Size());
+ HYDROData_SequenceOfObjects aZonesReg5 = Handle(HYDROData_Region)::DownCast( aRegions(5) )->GetZones();
+ CPPUNIT_ASSERT_EQUAL(6, aZonesReg5.Size());
+ HYDROData_SequenceOfObjects aZonesReg6 = Handle(HYDROData_Region)::DownCast( aRegions(6) )->GetZones();
+ CPPUNIT_ASSERT_EQUAL(5, aZonesReg6.Size());
+
+ {
+ //REG 4; imm.zone4
+ //first priority; shouldn't change the area after complete (surf.mass)
+ double m=0;
+ BRep_Builder B; TopoDS_Compound ccc; B.MakeCompound(ccc);
+ for ( int j = 1; j <= 11; j++ )
+ {
+ Handle(HYDROData_Zone) aZone = Handle(HYDROData_Zone)::DownCast( aZonesReg4(j) );
+ TopoDS_Shape sh = aZone->GetShape();
+ B.Add(ccc, sh);
+ GProp_GProps G;
+ BRepGProp::SurfaceProperties(sh, G);
+ m+=G.Mass();
+ }
+ GProp_GProps G1;
+ Handle(HYDROData_Object) aNewZone1c = Handle(HYDROData_Object)::DownCast( aNewZone1 );
+ BRepGProp::SurfaceProperties(aNewZone1c->GetTopShape(), G1);
+
+ double diff = fabs(G1.Mass()-m); //there is still a difference after calling of general fuse on complicated cases
+ CPPUNIT_ASSERT(diff < 20.0);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(23387.2, G1.Mass(), 0.1);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(23370.1, m, 0.1);
+ }
+ {
+ TopoDS_Shape cmp = GetCalcCaseShape(aCase);
+ TopTools_IndexedMapOfShape M;
+ TopExp::MapShapes(cmp, M);
+ CPPUNIT_ASSERT_EQUAL(197, M.Extent());
+ GProp_GProps G;
+ BRepGProp::SurfaceProperties(cmp, G);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL( 225164.3, G.Mass(), 0.1 );
+ TestViewer::show( cmp, AIS_Shaded, true, "cc_complete_2" );
+ CPPUNIT_ASSERT_IMAGES
+ }
+ aDoc->Close();
+}