Salome HOME
refs #585: polylines operations (split/merge)
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_ImportLandcoverOp.cxx
index c67bd1adcd1037684fd5202567989c97470e7dc9..79179eb31500dd7aa075eb3954f6ec2ea83bb4ed 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;
@@ -215,9 +239,9 @@ void HYDROGUI_ImportLandCoverOp::ProcessSHP(SHPObject* anObj, int i, TopoDS_Face
   BRepLib::BuildCurves3d(DF);
   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 +250,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,7 +274,7 @@ 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++)
@@ -282,18 +304,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" );
-    
+    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 +336,7 @@ void HYDROGUI_ImportLandCoverOp::onFileSelected()
         if( !aFace.IsNull() )
           aShape->setShape( aLC->GetShape() );
         myPolygonName2PrsShape.insert( "polygon_" + QString::number(i), aShape);
-
       }
-
     }
     aLC->Remove();
 
@@ -376,16 +399,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 );
   }
 }