Salome HOME
Merge branch 'BR_H2018_3' into BR_2018_V8_5
[modules/hydro.git] / src / HYDRO_tests / test_HYDROData_PolylineXY.cxx
index 9ec336c1c6f70693c60f38104b8c93b01d2dd349..b804b1abad5b2b81a6518753bd4cb6ace287b316 100644 (file)
@@ -27,6 +27,7 @@
 #include <HYDROData_Iterator.h>
 #include <HYDROData_ImmersibleZone.h>
 #include <HYDROData_Tool.h>
+#include <HYDROGUI_Shape.h>
 #include <HYDROGUI_Polyline.h>
 
 #include <AIS_DisplayMode.hxx>
@@ -37,6 +38,7 @@
 #include <QColor>
 #include <QList>
 #include <QPointF>
+#include <QTest>
 
 #include <TestShape.h>
 #include <TestViewer.h>
@@ -44,6 +46,9 @@
 #include <TopoDS_Vertex.hxx>
 #include <TopoDS_Wire.hxx>
 #include <gp_XY.hxx>
+#include <HYDROData_Tool.h>
+
+extern QString REF_DATA_PATH;
 
 void test_HYDROData_PolylineXY::test_polyline()
 {
@@ -102,7 +107,7 @@ void test_HYDROData_PolylineXY::test_split_refs_624()
   aPolyline->SetName( "test" );
 
   QList<double> aCoords = QList<double>() << 10 << 10 << 20 << 10 << 20 << 20 << 10 << 20;
-  TopoDS_Wire aWire = Wire( aCoords, true );
+  TopoDS_Wire aWire = Wire2d( aCoords, true );
   aPolyline->SetShape( aWire );
 
   gp_Pnt2d aPnt( 20, 20 );
@@ -135,7 +140,7 @@ void test_HYDROData_PolylineXY::test_extraction_immersible_zone()
   aPolyline->SetName( "test" );
 
   QList<double> aCoords = QList<double>() << 10 << 10 << 20 << 10 << 20 << 20 << 10 << 20;
-  TopoDS_Wire aWire = Wire( aCoords, true );
+  TopoDS_Wire aWire = Wire2d( aCoords, true );
   aPolyline->SetShape( aWire );
 
   Handle(HYDROData_ImmersibleZone) aZone = 
@@ -175,7 +180,7 @@ void test_HYDROData_PolylineXY::test_extraction_channel_refs_611()
   aPolyline3d->SetPolylineXY( aPolyline2d );
 
   QList<double> aCoords = QList<double>() << 10 << 10 << 20 << 10 << 20 << 20 << 10 << 20;
-  TopoDS_Wire aWire = Wire( aCoords, false );
+  TopoDS_Wire aWire = Wire2d( aCoords, false );
   aPolyline2d->SetShape( aWire );
   aPolyline3d->SetTopShape( aWire );
   aPolyline3d->SetShape3D( aWire );
@@ -184,8 +189,8 @@ void test_HYDROData_PolylineXY::test_extraction_channel_refs_611()
     Handle(HYDROData_Profile)::DownCast( aDoc->CreateObject( KIND_PROFILE ) );
   aProfile->SetName( "profile_1" );
 
-  QList<double> aCoordsPr = QList<double>() << 0.0 << 0.1 << 0.5 << 0.0 << 1.0 << 0.1;
-  TopoDS_Wire aWirePr = Wire( aCoordsPr, false );
+  QList<double> aCoordsPr = QList<double>() << 0.0 << 0.1 << 0.0 << 0.0 << 1.0 << 0.0;
+  TopoDS_Wire aWirePr = Wire3d( aCoordsPr, false );
   aProfile->SetTopShape( aWirePr );
   aProfile->SetShape3D( aWirePr );
 
@@ -253,14 +258,40 @@ void test_HYDROData_PolylineXY::test_presentation()
   aPointsPrs->SetColor( Quantity_NOC_BLUE1 );
   aPointsPrs->Attributes()->PointAspect()->SetTypeOfMarker( Aspect_TOM_O );
 
-  Handle(HYDROGUI_Polyline) aNewPolylinePrs = new HYDROGUI_Polyline( aPolyline2d->GetShape() );
-  aNewPolylinePrs->SetColor( Quantity_NOC_DARKGREEN );
+  aPolyline2d->SetWireColor( Qt::darkGreen );
+  HYDROGUI_Shape* aNewPolylinePrs = new HYDROGUI_Shape( TestViewer::context(), aPolyline2d );
+  aNewPolylinePrs->update( true, true );
+
 
+  // Check default type
+  Handle(HYDROGUI_Arrow) arr = Handle(HYDROGUI_Arrow)::DownCast( aNewPolylinePrs->getAISObjects()[1] );
+  CPPUNIT_ASSERT_EQUAL( HYDROGUI_Arrow::Cone, arr->GetType() );
+  CPPUNIT_ASSERT_EQUAL( 35, arr->GetSize() );
+
+  
+  // Check polyline presentation with default (cone) arrow
+  TestViewer::eraseAll(true);
   TestViewer::show( aPointsPrs, AIS_PointCloud::DM_Points, 0, true, "Polyline_Presentation" );
   TestViewer::show( aPolyline2d->GetShape(), 0, true, Qt::red );
-  TestViewer::show( aNewPolylinePrs, AIS_PointCloud::DM_Points, 0, true, "" );
+  //TestViewer::show( aNewPolylinePrs, AIS_PointCloud::DM_Points, 0, true, "" );
+  aNewPolylinePrs->setBorderColor( Qt::blue );
+  aNewPolylinePrs->display();
+  TestViewer::fitAll();
+  CPPUNIT_ASSERT_IMAGES
+
+
+  // Check polyline presentation with triangle arrow
+  arr->SetType( HYDROGUI_Arrow::Triangle );
+  TestViewer::eraseAll(true);
+  TestViewer::show( aPointsPrs, AIS_PointCloud::DM_Points, 0, true, "Polyline_Presentation_triangle" );
+  TestViewer::show( aPolyline2d->GetShape(), 0, true, Qt::red );
+  //TestViewer::show( aNewPolylinePrs, AIS_PointCloud::DM_Points, 0, true, "" );
+  TestViewer::context()->RecomputePrsOnly( arr, true );
+  aNewPolylinePrs->display();
+  TestViewer::fitAll();
   CPPUNIT_ASSERT_IMAGES
 
+  //QTest::qWait( 50000 );  
   aDoc->Close();
 }
 
@@ -272,9 +303,21 @@ void test_HYDROData_PolylineXY::test_split_refs_627()
     Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
   aPolyline->SetName( "test" );
 
-  QList<double> aCoords = QList<double>() << 10 << 10 << 20 << 10 << 20 << 20 << 10 << 20;
-  TopoDS_Wire aWire = Wire( aCoords, false );
-  aPolyline->SetShape( aWire );
+
+  //QList<double> aCoords = QList<double>() << 10 << 10 << 20 << 10 << 20 << 20 << 10 << 20;
+  aPolyline->AddSection( "", HYDROData_PolylineXY::SECTION_POLYLINE, false );
+  aPolyline->AddPoint( 0, gp_XY( 10, 10  ) );
+  aPolyline->AddPoint( 0, gp_XY( 20, 10 ) );
+  aPolyline->AddPoint( 0, gp_XY( 20, 20 ) );
+  aPolyline->AddPoint( 0, gp_XY( 10, 20 ) );
+  aPolyline->Update();
+
+
+  //TopoDS_Wire aWire = Wire2d( aCoords, false );
+  //aPolyline->SetShape( aWire );
+  TopoDS_Shape aW = aPolyline->GetShape();
+  CPPUNIT_ASSERT (aW.ShapeType() == TopAbs_WIRE);
+
   aPolyline->SetWireColor( Qt::red );
 
   gp_Pnt2d aPnt( 20, 20 );
@@ -288,25 +331,34 @@ void test_HYDROData_PolylineXY::test_split_refs_627()
   {
     Handle(HYDROData_PolylineXY) anObj = Handle(HYDROData_PolylineXY)::DownCast( anIt.Current() );
     if( aPolyline->Label() != anObj->Label() )
-      TestViewer::show( anObj->GetShape(), 0, true, anObj->GetWireColor() );
+    {
+      QColor color;
+      anObj->GetSectionColor(0, color);
+      TestViewer::show( anObj->GetShape(), 0, true, color );
+    }
   }
   CPPUNIT_ASSERT_IMAGES
     
   HYDROData_Iterator anIt2( aDoc, KIND_POLYLINEXY );
   CPPUNIT_ASSERT_EQUAL( true, anIt2.More() );
   CPPUNIT_ASSERT_EQUAL( QString( "test" ), anIt2.Current()->GetName() );
-  CPPUNIT_ASSERT_EQUAL( QColor( Qt::red ),
-    Handle(HYDROData_PolylineXY)::DownCast( anIt2.Current() )->GetWireColor() );
+
+  QColor color1, color2, color3;
+  Handle(HYDROData_PolylineXY)::DownCast( anIt2.Current() )->GetSectionColor(0, color1);
+
+  CPPUNIT_ASSERT_EQUAL( QColor( Qt::red ), color1);
   anIt2.Next();
   CPPUNIT_ASSERT_EQUAL( true, anIt2.More() );
   CPPUNIT_ASSERT_EQUAL( QString( "test_1" ), anIt2.Current()->GetName() );
-  CPPUNIT_ASSERT_EQUAL( QColor( Qt::red ), 
-    Handle(HYDROData_PolylineXY)::DownCast( anIt2.Current() )->GetWireColor() );
+
+  Handle(HYDROData_PolylineXY)::DownCast( anIt2.Current() )->GetSectionColor(0, color2);
+  CPPUNIT_ASSERT_EQUAL( QColor( Qt::red ), color2 );
+
   anIt2.Next();
   CPPUNIT_ASSERT_EQUAL( true, anIt2.More() );
   CPPUNIT_ASSERT_EQUAL( QString( "test_2" ), anIt2.Current()->GetName() );
-  CPPUNIT_ASSERT_EQUAL( QColor( Qt::red ), 
-    Handle(HYDROData_PolylineXY)::DownCast( anIt2.Current() )->GetWireColor() );
+  Handle(HYDROData_PolylineXY)::DownCast( anIt2.Current() )->GetSectionColor(0, color3);
+  CPPUNIT_ASSERT_EQUAL( QColor( Qt::red ), color3 );
   anIt2.Next();
   CPPUNIT_ASSERT_EQUAL( false, anIt2.More() );
   anIt2.Next();
@@ -338,34 +390,34 @@ void test_HYDROData_PolylineXY::test_custom_polylines()
   CPPUNIT_ASSERT_EQUAL( false, aPolyline1->IsCustom() );
 
   CPPUNIT_ASSERT_EQUAL( false, aPolyline2->IsCustom() );
-  aPolyline2->SetShape( Wire( QList<double>() << 0 << 0 << 1 << 1 << 2 << 0 ) );
+  aPolyline2->SetShape( Wire2d( QList<double>() << 0 << 0 << 10 << 10 << 20 << 0 ) );
   CPPUNIT_ASSERT_EQUAL( true, aPolyline2->IsCustom() );
   HYDROData_PolylineXY::PointsList aPointsList = aPolyline2->GetPoints( 0 );
 
   CPPUNIT_ASSERT_EQUAL( false, aPolyline2->IsCustom() );
-  CPPUNIT_ASSERT_EQUAL( 33, aPointsList.Size() );
+  CPPUNIT_ASSERT_EQUAL( 5, aPointsList.Size() );
   CPPUNIT_ASSERT_EQUAL( gp_XY( 0, 0 ), aPointsList.Value( 1 ) );
-  CPPUNIT_ASSERT_EQUAL( gp_XY( 0.5625, 0.808594 ), aPointsList.Value( 10 ) );
-  CPPUNIT_ASSERT_EQUAL( gp_XY( 1.1875, 0.964844 ), aPointsList.Value( 20 ) );
-  CPPUNIT_ASSERT_EQUAL( gp_XY( 2, 0 ), aPointsList.Value( 33 ) );
+  CPPUNIT_ASSERT_EQUAL( gp_XY( 5, 7.5 ), aPointsList.Value( 2 ) );
+  CPPUNIT_ASSERT_EQUAL( gp_XY( 10, 10 ), aPointsList.Value( 3 ) );
+  CPPUNIT_ASSERT_EQUAL( gp_XY( 15, 7.5 ), aPointsList.Value( 4 ) );
+  CPPUNIT_ASSERT_EQUAL( gp_XY( 20, 0 ), aPointsList.Value( 5 ) );
 
 
   CPPUNIT_ASSERT_EQUAL( false, aPolyline3->IsCustom() );
-  aPolyline3->SetShape( WireCirc( gp_Pnt(), 1.0 ) );
+  aPolyline3->SetShape( WireCirc( gp_Pnt(), 10.0 ) );
   CPPUNIT_ASSERT_EQUAL( true, aPolyline3->IsCustom() );
   aPointsList = aPolyline3->GetPoints( 0 );
 
   CPPUNIT_ASSERT_EQUAL( HYDROData_PolylineXY::SECTION_SPLINE, aPolyline3->GetSectionType( 0 ) );
   CPPUNIT_ASSERT_EQUAL( true, aPolyline3->IsClosedSection( 0 ) );
-  CPPUNIT_ASSERT_EQUAL( 71, aPointsList.Size() );
-  CPPUNIT_ASSERT_EQUAL( gp_XY( 1, 0 ), aPointsList.Value( 1 ) );
-  CPPUNIT_ASSERT_EQUAL( gp_XY( 0.699242, 0.714885 ), aPointsList.Value( 10 ) );
-  CPPUNIT_ASSERT_EQUAL( gp_XY( -0.110394, 0.993888 ), aPointsList.Value( 20 ) );
-  CPPUNIT_ASSERT_EQUAL( gp_XY( -0.839072, 0.54402 ), aPointsList.Value( 30 ) );
-  CPPUNIT_ASSERT_EQUAL( gp_XY( -0.952415, -0.304806 ), aPointsList.Value( 40 ) );
-  CPPUNIT_ASSERT_EQUAL( gp_XY( -0.367302, -0.930102 ), aPointsList.Value( 50 ) );
-  CPPUNIT_ASSERT_EQUAL( gp_XY( 0.487173, -0.873306 ), aPointsList.Value( 60 ) );
-  CPPUNIT_ASSERT_EQUAL( gp_XY( 0.996087, -0.0883801 ), aPointsList.Value( 71 ) );
+  CPPUNIT_ASSERT_EQUAL( 7, aPointsList.Size() );
+  CPPUNIT_ASSERT_EQUAL( gp_XY( 10, 0 ), aPointsList.Value( 1 ) );
+  CPPUNIT_ASSERT_EQUAL( gp_XY( 6.2349, 7.81831 ), aPointsList.Value( 2 ) );
+  CPPUNIT_ASSERT_EQUAL( gp_XY( -2.225, 9.749 ), aPointsList.Value( 3 ) );
+  CPPUNIT_ASSERT_EQUAL( gp_XY( -9.01, 4.339 ), aPointsList.Value( 4 ) );
+  CPPUNIT_ASSERT_EQUAL( gp_XY( -9.01, -4.339 ), aPointsList.Value( 5 ) );
+  CPPUNIT_ASSERT_EQUAL( gp_XY( -2.225, -9.749 ), aPointsList.Value( 6 ) );
+  CPPUNIT_ASSERT_EQUAL( gp_XY( 6.2349, -7.81831 ), aPointsList.Value( 7 ) );
 
   aDoc->Close();
 }
@@ -490,3 +542,33 @@ void test_HYDROData_PolylineXY::test_split_straight_refs_634()
 
   aDoc->Close();
 }
+
+void test_HYDROData_PolylineXY::test_import_from_xyz()
+{
+  NCollection_Sequence<Handle(HYDROData_Entity)> ents;
+  Handle(HYDROData_Document) aDoc = HYDROData_Document::Document( 1 );
+  TCollection_AsciiString fname = REF_DATA_PATH.toLatin1().data();
+  fname += "/profiles1.xyz";
+
+  NCollection_Sequence<Handle(HYDROData_Entity)> importedEntities;
+  bool stat = HYDROData_Tool::importPolylineFromXYZ(QString(fname.ToCString()), aDoc, true, importedEntities);
+  CPPUNIT_ASSERT (stat);
+  Handle(HYDROData_PolylineXY) aPolyXY = Handle(HYDROData_PolylineXY)::DownCast(importedEntities.First());   
+  CPPUNIT_ASSERT_EQUAL (importedEntities.Size(), 1);
+  CPPUNIT_ASSERT (!aPolyXY.IsNull());
+  TestViewer::show( aPolyXY->GetShape(), 0, true, "Polyline_import_XY" );
+  CPPUNIT_ASSERT_IMAGES
+  importedEntities.Clear();
+
+  stat = HYDROData_Tool::importPolylineFromXYZ(QString(fname.ToCString()), aDoc, false, importedEntities);
+  CPPUNIT_ASSERT (stat);
+  CPPUNIT_ASSERT_EQUAL (importedEntities.Size(), 2);
+  Handle(HYDROData_Polyline3D) aPoly3D;
+  aPolyXY = Handle(HYDROData_PolylineXY)::DownCast(importedEntities.First());   
+  aPoly3D = Handle(HYDROData_Polyline3D)::DownCast(importedEntities.Last());
+  CPPUNIT_ASSERT (!aPolyXY.IsNull());
+  CPPUNIT_ASSERT (!aPoly3D.IsNull());
+  TestViewer::show( aPolyXY->GetShape(), 0, false, "Polyline_import_XYZ" );
+  TestViewer::show( aPoly3D->GetShape3D(), 0, false, "Polyline_import_XYZ_3D" );
+  CPPUNIT_ASSERT_IMAGES
+}
\ No newline at end of file