Salome HOME
refs #430: incorrect coordinates in dump polyline
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_Tool.cxx
index da585626e88ea249033e48cd03d9a717521a974d..51404eaed7eb174fdea98388e12def5033e3eca9 100644 (file)
@@ -57,6 +57,8 @@
 
 #include <SALOMEDSClient.hxx>
 
+#include <SVTK_ViewModel.h>
+
 #include <QDir>
 #include <QFileInfo>
 #include <QDockWidget>
@@ -66,6 +68,8 @@
 // encoding instead of default 'System'
 #define USE_LATIN1_ENCODING
 
+// #define DEB_GROUPS 1
+
 QString HYDROGUI_Tool::ToQString( const TCollection_AsciiString& src )
 {
 #ifdef USE_LATIN1_ENCODING
@@ -204,6 +208,54 @@ void HYDROGUI_Tool::SetActiveViewManager( HYDROGUI_Module* theModule,
           aWorkstack->setActiveWindow( aViewWindow );
 }
 
+bool HYDROGUI_Tool::IsObjectHasPresentation( const Handle(HYDROData_Entity)& theObject,
+                                             const QString&                  theViewerType )
+{
+  
+  if ( theObject.IsNull() )
+    return false;
+
+  ObjectKind anObjectKind = theObject->GetKind();
+  if ( theViewerType.isEmpty() || theViewerType == OCCViewer_Viewer::Type() )
+  {
+    if ( anObjectKind == KIND_IMAGE ||
+         anObjectKind == KIND_POLYLINEXY ||
+         anObjectKind == KIND_POLYLINE ||
+         anObjectKind == KIND_IMMERSIBLE_ZONE ||
+         anObjectKind == KIND_REGION ||
+         anObjectKind == KIND_ZONE ||
+         anObjectKind == KIND_OBSTACLE ||
+         anObjectKind == KIND_PROFILE ||
+         anObjectKind == KIND_STREAM ||
+         anObjectKind == KIND_CHANNEL ||
+         anObjectKind == KIND_DIGUE ||
+         anObjectKind == KIND_DUMMY_3D
+#ifdef DEB_GROUPS
+         || anObjectKind == KIND_SHAPES_GROUP ||
+         anObjectKind == KIND_SPLITTED_GROUP
+#endif
+         )
+    {
+      return true;
+    }
+  }
+  
+  if ( theViewerType.isEmpty() || theViewerType == SVTK_Viewer::Type() )
+  {
+    if ( anObjectKind == KIND_BATHYMETRY )
+      return true;
+  }
+
+  if ( theViewerType.isEmpty() || theViewerType == GraphicsView_Viewer::Type() )
+  {
+    if ( anObjectKind == KIND_IMAGE ||
+         anObjectKind == KIND_POLYLINEXY )
+      return true;
+  }
+
+  return false;
+}
+
 void HYDROGUI_Tool::GetPrsSubObjects( HYDROGUI_Module* theModule,
                                       HYDROData_SequenceOfObjects& theSeq )
 {
@@ -214,21 +266,10 @@ void HYDROGUI_Tool::GetPrsSubObjects( HYDROGUI_Module* theModule,
     for( ; anIterator.More(); anIterator.Next() )
     {
       Handle(HYDROData_Entity) anObject = anIterator.Current();
-      if( !anObject.IsNull() && ( 
-        ( anObject->GetKind() == KIND_IMAGE ) ||
-        ( anObject->GetKind() == KIND_POLYLINEXY ) ||
-        ( anObject->GetKind() == KIND_POLYLINE ) ||
-        ( anObject->GetKind() == KIND_IMMERSIBLE_ZONE ) ||
-        ( anObject->GetKind() == KIND_REGION ) ||
-        ( anObject->GetKind() == KIND_BATHYMETRY ) ||
-        ( anObject->GetKind() == KIND_ZONE ) ||
-        ( anObject->GetKind() == KIND_OBSTACLE ) ||
-        ( anObject->GetKind() == KIND_PROFILE ) ||
-        ( anObject->GetKind() == KIND_STREAM ) ||
-        ( anObject->GetKind() == KIND_CHANNEL ) ) )
-      {
-        theSeq.Append( anObject );
-      }
+      if ( !IsObjectHasPresentation( anObject ) )
+        continue;
+
+      theSeq.Append( anObject );
     }
   }
 }
@@ -349,7 +390,8 @@ ObjectKind HYDROGUI_Tool::GetSelectedPartition( HYDROGUI_Module* theModule )
   return KIND_UNKNOWN;
 }
 
-QStringList HYDROGUI_Tool::GetSelectedGeomObjects( HYDROGUI_Module* theModule )
+QStringList HYDROGUI_Tool::GetSelectedGeomObjects( HYDROGUI_Module* theModule,
+                                                   QList<GEOM::shape_type> theTypes )
 {
   QStringList anEntryList;
 
@@ -380,7 +422,8 @@ QStringList HYDROGUI_Tool::GetSelectedGeomObjects( HYDROGUI_Module* theModule )
           GEOM::GEOM_Object_var aGeomObj = 
             GEOMBase::GetObjectFromIOR( aSObject->GetIOR().c_str() );
 
-          if ( !aGeomObj->_is_nil() && aGeomObj->IsShape() ) {
+          if ( !aGeomObj->_is_nil() && aGeomObj->IsShape() && 
+               theTypes.contains( aGeomObj->GetShapeType() ) ) {
             anEntryList << anEntry;
           }
         }
@@ -395,16 +438,26 @@ Handle(HYDROData_Entity) HYDROGUI_Tool::FindObjectByName( HYDROGUI_Module* theMo
                                                           const QString&   theName,
                                                           const ObjectKind theObjectKind )
 {
+  Handle(HYDROData_Entity) aResObj;
+  
   Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( theModule->getStudyId() );
-  return HYDROData_Tool::FindObjectByName( aDocument, theName, theObjectKind );
+  if ( !aDocument.IsNull() )
+    aResObj = aDocument->FindObjectByName( theName, theObjectKind );
+  
+  return aResObj;
 }
 
 HYDROData_SequenceOfObjects HYDROGUI_Tool::FindObjectsByNames( HYDROGUI_Module*   theModule,
                                                                const QStringList& theNames,
                                                                const ObjectKind   theObjectKind )
 {
+  HYDROData_SequenceOfObjects aResSeq;
+
   Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( theModule->getStudyId() );
-  return HYDROData_Tool::FindObjectsByNames( aDocument, theNames, theObjectKind );
+  if ( !aDocument.IsNull() )
+    aResSeq = aDocument->FindObjectsByNames( theNames, theObjectKind );
+
+  return aResSeq;
 }
 
 QString HYDROGUI_Tool::GenerateObjectName( HYDROGUI_Module*   theModule,
@@ -619,8 +672,7 @@ QColor HYDROGUI_Tool::GenerateFillingColor( const Handle(HYDROData_Document)& th
   {
     const QString& aZoneName = aZoneNameIter.next();
     Handle(HYDROData_ImmersibleZone) aRefZone = 
-      Handle(HYDROData_ImmersibleZone)::DownCast(
-        HYDROData_Tool::FindObjectByName( theDoc, aZoneName, KIND_IMMERSIBLE_ZONE ) );
+      Handle(HYDROData_ImmersibleZone)::DownCast( theDoc->FindObjectByName( aZoneName, KIND_IMMERSIBLE_ZONE ) );
     if( !aRefZone.IsNull() )
     {
       QColor aRefColor = aRefZone->GetFillingColor();
@@ -655,7 +707,14 @@ QStringList HYDROGUI_Tool::FindExistingObjectsNames( const Handle(HYDROData_Docu
   return aNames;
 }
 
-QString HYDROGUI_Tool::GetCoordinateString( const double theNumber )
+QString HYDROGUI_Tool::GetCoordinateString( const double theNumber, bool isInLocale )
 {
-  return QString::number( theNumber, 'f', 2 );
-}
\ No newline at end of file
+  if( isInLocale )
+  {
+    static QLocale aLocale( QLocale::English, QLocale::France );
+    return aLocale.toString( theNumber, 'f', 2 );
+  }
+  else
+    return QString::number( theNumber, 'f', 2 );
+}
+