Salome HOME
Initial merge of branch 'BR_HYDRO_IMPS_2016' into BR_PORTING_OCCT_7
[modules/hydro.git] / src / HYDRO_tests / test_HYDROData_Stream.cxx
index d354d17584fe1f9f16cdddad6eae3f6847f19b37..52388f33737ab8df33cf6688dbae9c7b3f227115 100644 (file)
 #include <HYDROData_Stream.h>
 #include <HYDROData_IPolyline.h>
 #include <HYDROData_Profile.h>
+#include <HYDROData_PolylineXY.h>
+#include <HYDROData_Iterator.h>
+#include <AIS_InteractiveContext.hxx>
 #include <TestViewer.h>
 #include <QApplication>
+#include <QTest>
 
+extern QString REF_DATA_PATH;
 NCollection_Sequence<HYDROData_IPolyline::Point> points2;
 const double EPS = 1E-3;
 
@@ -68,6 +73,8 @@ void test_HYDROData_Stream::test_alt_object()
     Handle(HYDROData_Stream)::DownCast( aDoc->CreateObject( KIND_STREAM ) );
 
   CPPUNIT_ASSERT_EQUAL( false, (bool)aStream.IsNull() );
+  CPPUNIT_ASSERT_EQUAL( true, (bool)aStream->GetAltitudeObject().IsNull() );
+  CPPUNIT_ASSERT_EQUAL( false, (bool)aStream->DTM().IsNull() );
   CPPUNIT_ASSERT_EQUAL( false, (bool)aStream->GetAltitudeObject().IsNull() );
   CPPUNIT_ASSERT_EQUAL( KIND_DTM, aStream->getAltitudeObjectType() );
 
@@ -84,8 +91,7 @@ void test_HYDROData_Stream::test_params_sync()
 
   Handle(HYDROData_Stream) aStream = 
     Handle(HYDROData_Stream)::DownCast( aDoc->CreateObject( KIND_STREAM ) );
-  Handle(HYDROData_DTM) aDTM = 
-    Handle(HYDROData_DTM)::DownCast( aStream->GetAltitudeObject() );
+  Handle(HYDROData_DTM) aDTM = aStream->DTM();
   CPPUNIT_ASSERT_EQUAL( false, (bool)aDTM.IsNull() );
 
   Handle(HYDROData_Profile) aProfile1 = 
@@ -182,5 +188,85 @@ void test_HYDROData_Stream::test_dump()
   CPPUNIT_ASSERT_EQUAL( std::string( "stream_1.Update()" ),                                aScript1[8].toStdString() );
   CPPUNIT_ASSERT_EQUAL( std::string( "" ),                                                 aScript1[9].toStdString() );
 
+  // Case 2. With hydraulic axis
+
+  Handle(HYDROData_Stream) aStream2 = 
+    Handle(HYDROData_Stream)::DownCast( aDoc->CreateObject( KIND_STREAM ) );
+  aStream2->SetName( "stream_2" );
+
+  Handle(HYDROData_PolylineXY) anHAxis = 
+    Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
+  anHAxis->SetName( "axis" );
+
+  aStream2->SetProfiles( profiles, false );
+  aStream2->SetDDZ( 0.2 );
+  aStream2->SetSpatialStep( 3.0 );
+  aStream2->SetReferenceObject( anHAxis, HYDROData_Stream::DataTag_HydraulicAxis );
+
+  objs.clear();
+  objs["p1"] = aProfile1;
+  objs["p2"] = aProfile2;
+  objs["axis"] = anHAxis;
+
+  QStringList aScript2 = aStream2->DumpToPython( "", objs );
+  CPPUNIT_ASSERT_EQUAL( 11, aScript2.size() );
+  CPPUNIT_ASSERT_EQUAL( std::string( "stream_2 = hydro_doc.CreateObject( KIND_STREAM )" ), aScript2[0].toStdString() );
+  CPPUNIT_ASSERT_EQUAL( std::string( "stream_2.SetName( \"stream_2\" )" ),                 aScript2[1].toStdString() );
+  CPPUNIT_ASSERT_EQUAL( std::string( "" ),                                                 aScript2[2].toStdString() );
+  CPPUNIT_ASSERT_EQUAL( std::string( "stream_2.SetHydraulicAxis( axis )" ),                aScript2[3].toStdString() );
+  CPPUNIT_ASSERT_EQUAL( std::string( "stream_2.AddProfile( p1 )" ),                        aScript2[4].toStdString() );
+  CPPUNIT_ASSERT_EQUAL( std::string( "stream_2.AddProfile( p2 )" ),                        aScript2[5].toStdString() );
+  CPPUNIT_ASSERT_EQUAL( std::string( "stream_2.SetDDZ( 0.200 )" ),                         aScript2[6].toStdString() );
+  CPPUNIT_ASSERT_EQUAL( std::string( "stream_2.SetSpatialStep( 3.000 )" ),                 aScript2[7].toStdString() );
+  CPPUNIT_ASSERT_EQUAL( std::string( "" ),                                                 aScript2[8].toStdString() );
+  CPPUNIT_ASSERT_EQUAL( std::string( "stream_2.Update()" ),                                aScript2[9].toStdString() );
+  CPPUNIT_ASSERT_EQUAL( std::string( "" ),                                                 aScript2[10].toStdString() );
+
+  aDoc->Close();
+}
+
+void test_HYDROData_Stream::test_presentation()
+{
+  Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
+  
+  TCollection_AsciiString fname = REF_DATA_PATH.toLatin1().data();
+  fname += "/Profiles.xyz";
+  NCollection_Sequence<int> bad_ids;
+
+  int aSize = HYDROData_Profile::ImportFromFile( aDoc, fname, bad_ids, true );
+  
+  CPPUNIT_ASSERT_EQUAL( 0, bad_ids.Size() );
+  CPPUNIT_ASSERT_EQUAL( 46, aSize );
+
+  HYDROData_SequenceOfObjects profiles;
+  HYDROData_Iterator it( aDoc, KIND_PROFILE );
+  for( int i=0; it.More(); it.Next(), i++ )
+  {
+    if( i>=25 && i<=35 )
+    {
+      it.Current()->Update();
+      profiles.Append( Handle(HYDROData_Profile)::DownCast( it.Current() ) );
+    }
+  }
+
+  Handle(HYDROData_Stream) aStream = 
+    Handle(HYDROData_Stream)::DownCast( aDoc->CreateObject( KIND_STREAM ) );
+
+  aStream->SetProfiles( profiles, false );
+  aStream->SetDDZ( 0.2 );
+  aStream->SetSpatialStep( 10 );
+  aStream->Update();
+
+  TopoDS_Shape aPrs3d = aStream->GetShape3D();
+  TopoDS_Shape aPrs2d = aStream->GetTopShape();
+
+  TestViewer::show( aPrs2d, 0, true, "stream_dtm_2d" );
+  CPPUNIT_ASSERT_IMAGES;
+
+  TestViewer::eraseAll( true );
+  TestViewer::show( aPrs3d, 0, true, "stream_dtm_3d" );
+  CPPUNIT_ASSERT_IMAGES
+
   aDoc->Close();
 }
+