Salome HOME
Typo and whitespace fixes by Kunda
[modules/smesh.git] / src / OBJECT / SMESH_PreviewActorsCollection.cxx
index 1acf90fd6a65e4a8acf4eea72b2f468814abb2c0..8cdc0091298da5ed4af08ae48b5c67a3d83773fe 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2007-2013  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -65,8 +65,9 @@ SMESH_PreviewActorsCollection::~SMESH_PreviewActorsCollection()
 }
 
 bool SMESH_PreviewActorsCollection::Init( const TopoDS_Shape& theShape,
-                                          TopAbs_ShapeEnum theType,
-                                          const QString& theEntry )
+                                          const TopoDS_Shape& theMainShape,
+                                          TopAbs_ShapeEnum    theType,
+                                          const QString&      theEntry )
 {
   SUIT_ResourceMgr* mgr = SUIT_Session::session()->resourceMgr();
 
@@ -82,17 +83,17 @@ bool SMESH_PreviewActorsCollection::Init( const TopoDS_Shape& theShape,
   if ( theShape.IsNull() )
     return false;
 
-  Handle( SALOME_InteractiveObject ) anIO = new SALOME_InteractiveObject();
-  anIO->setEntry( theEntry.toLatin1().constData() );
-  
-  // get indexes of seleted elements
-  TopExp::MapShapes( theShape, myMapOfShapes );
+  // Handle( SALOME_InteractiveObject ) anIO = new SALOME_InteractiveObject();
+  // anIO->setEntry( theEntry.toUtf8().constData() );
+
+  // get indexes of selected elements
+  TopExp::MapShapes( theMainShape, myMapOfShapes );
   TopExp_Explorer exp( theShape, theType );
   QSet<int> indices;
   for ( ; exp.More(); exp.Next() )
     indices << myMapOfShapes.FindIndex( exp.Current() );
   myIndices = indices.toList();
-  qSort(myIndices);
+  //qSort(myIndices);
 
   // show current chunk
   showCurrentChunk();
@@ -112,11 +113,41 @@ GEOM_Actor* SMESH_PreviewActorsCollection::GetActorByIndex(int index)
   return myMapOfActors.value( index );
 }
 
+bool SMESH_PreviewActorsCollection::IsValidIndex( int index )
+{
+  return 0 < index && index <= myMapOfShapes.Extent();
+}
+
 int SMESH_PreviewActorsCollection::GetIndexByShape( const TopoDS_Shape& theShape )
 {
   return myMapOfShapes.FindIndex( theShape );
 }
 
+TopoDS_Shape SMESH_PreviewActorsCollection::GetShapeByIndex( int index )
+{
+  return IsValidIndex( index ) ? myMapOfShapes.FindKey( index ) : TopoDS_Shape();
+}
+
+int SMESH_PreviewActorsCollection::NbShapesOfType( TopAbs_ShapeEnum type )
+{
+  if ( type == TopAbs_SHAPE ) return myMapOfShapes.Extent();
+
+  int nb = 0;
+  for ( int i = 1; i <= myMapOfShapes.Extent(); ++i )
+    nb += ( myMapOfShapes(i).ShapeType() == type );
+
+  return nb;
+}
+
+void SMESH_PreviewActorsCollection::SetIndices( const QList<int>& indices)
+{
+  if ( myIndices != indices )
+  {
+    myIndices = indices;
+    showCurrentChunk();
+  }
+}
+
 void SMESH_PreviewActorsCollection::AddToRender(vtkRenderer* theRenderer)
 {
   myRenderer = theRenderer;
@@ -217,7 +248,7 @@ void SMESH_PreviewActorsCollection::showCurrentChunk()
       QString entry = QString( "%1_%2" ).arg( myEntry ).arg( index );
       // Create interactive object
       Handle( SALOME_InteractiveObject ) anIO = new SALOME_InteractiveObject();
-      anIO->setEntry( entry.toLatin1().constData() );
+      anIO->setEntry( entry.toUtf8().constData() );
       // Init Actor
       anActor->SetVectorMode( myType==TopAbs_EDGE );
       anActor->setIO( anIO );
@@ -229,7 +260,8 @@ void SMESH_PreviewActorsCollection::showCurrentChunk()
       myMapOfActors.insert(index, anActor);
     }
   }
-  mySelector->ClearIObjects();
+  if ( mySelector )
+    mySelector->ClearIObjects();
   if ( myRenderer )
     AddToRender( myRenderer );
 }