Salome HOME
Import/Export >> some minor corrections
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_ImportLandcoverOp.cxx
index c67bd1adcd1037684fd5202567989c97470e7dc9..e706338369a359f30ec3216061c8e4f45eec51cf 100644 (file)
@@ -32,7 +32,6 @@
 #include <HYDROGUI_ZLayers.h>
 
 #include <HYDROGUI_DataObject.h>
-#include <HYDROData_Bathymetry.h>
 #include <HYDROData_Iterator.h>
 
 #include <HYDROData_Profile.h>
@@ -79,12 +78,29 @@ HYDROGUI_ImportLandCoverOp::HYDROGUI_ImportLandCoverOp( HYDROGUI_Module* theModu
 
 HYDROGUI_ImportLandCoverOp::~HYDROGUI_ImportLandCoverOp()
 {
-
+  erasePreview();
 }
 
 void HYDROGUI_ImportLandCoverOp::startOperation()
 {
   HYDROGUI_Operation::startOperation();
+
+  if ( !getPreviewManager() ) {
+    setPreviewManager( ::qobject_cast<OCCViewer_ViewManager*>( 
+                       module()->getApp()->getViewManager( OCCViewer_Viewer::Type(), true ) ) );
+  }
+
+  if ( !isApplyAndClose() ) {
+    return;
+  }
+
+  HYDROGUI_ImportLandCoverDlg* aPanel = 
+    ::qobject_cast<HYDROGUI_ImportLandCoverDlg*>( inputPanel() );
+  if ( !aPanel ) {
+    return;
+  }
+
+  aPanel->reset();
 }
 
 
@@ -99,12 +115,14 @@ HYDROGUI_InputPanel* HYDROGUI_ImportLandCoverOp::createInputPanel() const
   return aPanel;
 }
 
-void HYDROGUI_ImportLandCoverOp::onApply()
+bool HYDROGUI_ImportLandCoverOp::processApply( int& theUpdateFlags,
+                                                QString& theErrorMsg,
+                                                QStringList& theBrowseObjectsEntries )
 {
 
   HYDROGUI_ImportLandCoverDlg* aPanel = ::qobject_cast<HYDROGUI_ImportLandCoverDlg*>( inputPanel() );
   if ( !aPanel ) {
-    return;
+    return false;
   }
   
   QStringList aSelectedtPolygons = aPanel->getSelectedPolygonNames();
@@ -142,7 +160,11 @@ void HYDROGUI_ImportLandCoverOp::onApply()
     }
     if( !aLC.IsNull() ) 
     {
-      aLC->SetName( aPanel->getFileName() + "_polygon_" );
+      QString aLCName = aPanel->getObjectName() + "_polygon";
+      int i = 0;
+      for( ;HYDROGUI_Tool::FindObjectByName(module(), aLCName); i++)
+        aLCName = aPanel->getObjectName() + "_polygon_" + QString::number(i);
+      aLC->SetName( aLCName );
       aLC->SetFillingColor( HYDROData_LandCover::DefaultFillingColor() );
       aLC->SetBorderColor( HYDROData_LandCover::DefaultBorderColor() );
       
@@ -157,10 +179,12 @@ void HYDROGUI_ImportLandCoverOp::onApply()
   }
  
   module()->update( UF_Model | UF_VTKViewer | UF_VTK_Forced | UF_VTK_Init );
-  
-  QApplication::restoreOverrideCursor();
-}
 
+  if ( isApplyAndClose() )
+    erasePreview();
+
+  return true;
+}
 
 
 void HYDROGUI_ImportLandCoverOp::Parse(SHPHandle theHandle)
@@ -183,9 +207,9 @@ void HYDROGUI_ImportLandCoverOp::ProcessSHP(SHPObject* anObj, int i, TopoDS_Face
   gp_Pln pln(gp_Pnt(0,0,0), gp_Dir(0,0,1));
   BRepBuilderAPI_MakeFace aFBuilder(pln);
 
-  Handle(ShapeFix_Shape) sfs = new ShapeFix_Shape;
-  sfs->FixFaceTool()->FixOrientationMode() = 1;
+  //Handle(ShapeFix_Shape) sfs = new ShapeFix_Shape;
+  //sfs->FixFaceTool()->FixOrientationMode() = 1;
+  
   for ( int i = 0 ; i < nParts ; i++ )
   { 
     BRepBuilderAPI_MakeWire aBuilder;
@@ -200,6 +224,8 @@ void HYDROGUI_ImportLandCoverOp::ProcessSHP(SHPObject* anObj, int i, TopoDS_Face
     {
       gp_Pnt P1 (anObj->padfX[k], anObj->padfY[k], 0);
       gp_Pnt P2 (anObj->padfX[k+1], anObj->padfY[k+1], 0);
+      if (P1.Distance(P2) < Precision::Confusion())
+        continue;
       BRepBuilderAPI_MakeEdge aMakeEdge(P1, P2);
       aBuilder.Add(TopoDS::Edge(aMakeEdge.Shape()));
     }
@@ -212,12 +238,13 @@ void HYDROGUI_ImportLandCoverOp::ProcessSHP(SHPObject* anObj, int i, TopoDS_Face
 
   aFBuilder.Build();
   TopoDS_Face DF = aFBuilder.Face();
-  BRepLib::BuildCurves3d(DF);
+  BRepLib::BuildCurves3d(DF);  
+  bool IsInf = DF.Infinite();
   if(!DF.IsNull()) 
   {
-    sfs->Init ( DF );
-    sfs->Perform();
-    F = TopoDS::Face(sfs->Shape());
+    //sfs->Init ( DF );
+    //sfs->Perform();
+    F = DF; //TopoDS::Face(sfs->Shape());
   }
 }
 
@@ -226,19 +253,17 @@ void HYDROGUI_ImportLandCoverOp::onFileSelected()
   HYDROGUI_ImportLandCoverDlg* aPanel = ::qobject_cast<HYDROGUI_ImportLandCoverDlg*>( inputPanel() );
   if ( !aPanel )
     return;
-
+  
   QString anObjectName = aPanel->getObjectName().simplified();
-   anObjectName = aPanel->getFileName();
-   if ( !anObjectName.isEmpty() ) {
-       anObjectName = QFileInfo( anObjectName ).baseName();
-   }
+  anObjectName = aPanel->getFileName();
+  if ( !anObjectName.isEmpty() ) 
+      anObjectName = QFileInfo( anObjectName ).baseName();
 
-   if ( anObjectName.isEmpty() ) {
-     anObjectName = HYDROGUI_Tool::GenerateObjectName( module(), tr( "DEFAULT_BATHYMETRY_NAME" ) );
-   }
-   aPanel->setObjectName( anObjectName );
+  if ( anObjectName.isEmpty() ) 
+    anObjectName = HYDROGUI_Tool::GenerateObjectName( module(), tr( "DEFAULT_LANDCOVER_NAME" ) );
+  aPanel->setObjectName( anObjectName );
 
-   QString aFileName = aPanel->getFileName();
+  QString aFileName = aPanel->getFileName();
   if ( aFileName.isEmpty() )
   {
     abort();
@@ -252,11 +277,11 @@ void HYDROGUI_ImportLandCoverOp::onFileSelected()
     SHPHandle aHSHP;
     aHSHP = SHPOpen( aFileName.toAscii().data(), "rb" );
     Parse(aHSHP);
-  
+    
     startDocOperation();
     QStringList aPolygonsList;
-    for (int i = 1; i < mySHPObjects.size(); i++)
-      aPolygonsList.append("polygon_" + QString::number(i));
+    for (int i = 0; i < mySHPObjects.size(); i++)
+      aPolygonsList.append("polygon_" + QString::number(i + 1));
     aPanel->setPolygonNames(aPolygonsList);
 
     SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( module()->getApp()->activeStudy() );
@@ -282,18 +307,21 @@ void HYDROGUI_ImportLandCoverOp::onFileSelected()
       }
     }
 
+    QApplication::setOverrideCursor(Qt::WaitCursor);
+
     TopTools_SequenceOfShape aFaces;
     TopoDS_Face aF;
     if (aHSHP->nShapeType == 5)
     {
-      for (int i = 1; i < 4 /*mySHPObjects.size()*/; i++) {   ///TODO temp
+      for (int i = 0; i < mySHPObjects.size(); i++) 
+      {
          ProcessSHP(mySHPObjects[i], i, aF);
          aFaces.Append(aF);
       }
     }
     else
-      SUIT_MessageBox::warning( module()->getApp()->desktop(), "Import Land cover", "Cannot land cover;\nThe shape type is not polygon" );
-    
+      SUIT_MessageBox::warning( module()->getApp()->desktop(), tr( "IMPORT_LANDCOVER" ), "Cannot import land cover;\nThe shape type is not polygon" );
+    QApplication::restoreOverrideCursor();
 
     Handle(HYDROData_LandCover) aLC = Handle(HYDROData_LandCover)::DownCast( doc()->CreateObject( KIND_LAND_COVER ) );
     for ( int i = 1; i <= aFaces.Length(); i++ ) 
@@ -311,9 +339,7 @@ void HYDROGUI_ImportLandCoverOp::onFileSelected()
         if( !aFace.IsNull() )
           aShape->setShape( aLC->GetShape() );
         myPolygonName2PrsShape.insert( "polygon_" + QString::number(i), aShape);
-
       }
-
     }
     aLC->Remove();
 
@@ -376,16 +402,15 @@ void HYDROGUI_ImportLandCoverOp::onViewerSelectionChanged()
     }
   }
   
-  if ( !aCtx.IsNull() ) {
+  if ( !aCtx.IsNull() )
+  {
     QStringList aSelectedNames;
-
     foreach ( QString aName, myPolygonName2PrsShape.keys() ) {
       bool isSelected = aCtx->IsSelected( myPolygonName2PrsShape.value(aName)->getAISObject() );
       if ( isSelected ) {
         aSelectedNames << aName;
       }
     }
-
     aPanel->setSelectedPolygonNames( aSelectedNames );
   }
 }