]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
CCAR: various optimisations : object browser and display
authorcaremoli <caremoli>
Thu, 1 Jul 2010 08:25:34 +0000 (08:25 +0000)
committercaremoli <caremoli>
Thu, 1 Jul 2010 08:25:34 +0000 (08:25 +0000)
15 files changed:
doc/salome/gui/doxyfile.in
doc/salome/gui/images/pref15.png
doc/salome/gui/input/geometry_preferences.doc
src/LightApp/LightApp_Application.cxx
src/LightApp/LightApp_Module.cxx
src/Prs/SALOME_Prs.h
src/SALOME_SWIG/SALOMEGUI_Swig.cxx
src/SOCC/SOCC_ViewModel.cxx
src/SOCC/SOCC_ViewModel.h
src/SUIT/SUIT_DataObject.cxx
src/SUIT/SUIT_TreeModel.cxx
src/SalomeApp/SalomeApp_Application.cxx
src/SalomeApp/SalomeApp_DataModel.cxx
src/SalomeApp/SalomeApp_DataObject.cxx
src/SalomeApp/SalomeApp_Study.h

index 84772c7769db02ffbfdea6331770570fcadfcee8..4d4cd2fdabe8cbf8a7cc6c99d2616c6b5ef26014 100755 (executable)
@@ -62,4 +62,9 @@ GENERATE_LATEX    = NO
 #---------------------------------------------------------------------------
 #RTF related options
 #---------------------------------------------------------------------------
-GENERATE_RTF      = NO
\ No newline at end of file
+GENERATE_RTF      = NO
+
+#---------------------------------------------------------------------------
+#Search engine
+#---------------------------------------------------------------------------
+SEARCHENGINE      = NO
index 9f1195e5cf42c2e465f2e4befcdffb7e89db26e2..f90b585329abcb8785867093f4050829d637189b 100755 (executable)
Binary files a/doc/salome/gui/images/pref15.png and b/doc/salome/gui/images/pref15.png differ
index 81161225c67292da1742c35c200c18e378fa9b4f..e0db1a1f931253b697d033568f22231b328ecff0 100644 (file)
@@ -63,4 +63,15 @@ points (cross, asterisk, etc.).</li>
 </ul>
 </ul>
 
+<ul>
+<li><b>Origin and base vectors</b></li>
+<ul>
+<li><b>Length of base vectors</b> - allows to define a length
+of base vectors.</li>
+<li><b>Auto create</b> - allows to automatically create a point
+of origin and three base vectors of the rectangular coordinate
+system immediately after activation of the module.</li>
+</ul>
+</ul>
+
 */
index 2de22f06c8803ae2b88ed537c2d88b20a44f9769..1c2be69d3226e6487858b140b291ea5885eee50d 100644 (file)
@@ -1211,10 +1211,8 @@ PyConsole_Console* LightApp_Application::pythonConsole()
   Updates object browser and maybe data models
   \param updateModels - if it is true, then data models are updated
 */
-#include "utilities.h"
 void LightApp_Application::updateObjectBrowser( const bool updateModels )
 {
-  MESSAGE("Update from LightApp_Application");
   /*
   // update existing data models
   if ( updateModels )
index db9af4287f9a19a4d0614517d378a8e4766e7919..7fa22775f64330249ed2cd2367d8851927083964 100644 (file)
@@ -145,11 +145,9 @@ void LightApp_Module::contextMenuPopup( const QString& client, QMenu* menu, QStr
 /*!Update object browser.
  * For updating model or whole object browser use update() method can be used.
 */
-#include "utilities.h"
 void LightApp_Module::updateObjBrowser( bool theIsUpdateDataModel, 
                                         SUIT_DataObject* theDataObject )
 {
-  MESSAGE("Update from LightApp_Module");
   /*
   bool upd = getApp()->objectBrowser()->autoUpdate();
   getApp()->objectBrowser()->setAutoUpdate( false );
index 3ce235a4ca2fbe7e347dc888937688afd7170452..e9ca97d72bf3bc7e1c972020d09e0208362d1877 100755 (executable)
@@ -199,6 +199,8 @@ public:
   //! \retval Return false.
   virtual bool isVisible( const Handle_SALOME_InteractiveObject& ){ return false; }
   virtual void Repaint() {} //!< Null body here.
+
+  virtual void updateViewer(SALOME_Prs* prs){};
 };
 
 /*!
index 8a6b27c99bcb5e6b726b1f94c52a3dc43f924b70..55cf9fb0df377b76c5850cfd3149de03a6e9f6bc 100644 (file)
@@ -173,14 +173,12 @@ bool SALOMEGUI_Swig::hasDesktop()
 */
 void SALOMEGUI_Swig::updateObjBrowser( bool /*updateSelection*/ )
 {
-  gettimeofday(&tv,0);tt0=tv.tv_usec+tv.tv_sec*1000000;
   class TEvent: public SALOME_Event
   {
   public:
     TEvent() {}
     virtual void Execute()
     {
-  END_TIMING(1);
       if ( LightApp_Application* anApp = getApplication() ) {
         anApp->updateObjectBrowser();
         anApp->updateActions(); //SRN: added in order to update the toolbar
index 260bed36e5692ef21b8d2a56c520b18d6fd0c7b7..ba3aa631fcf84fd9c317f76a90f1f750fabdab0e 100755 (executable)
 
 #include <Precision.hxx>
 
+#include <sys/time.h>
+static long tcount=0;
+static long cumul;
+#define START_TIMING long tt0; timeval tv; gettimeofday(&tv,0);tt0=tv.tv_usec+tv.tv_sec*1000000;
+#define END_TIMING(NUMBER) \
+  tcount=tcount+1;gettimeofday(&tv,0);cumul=cumul+tv.tv_usec+tv.tv_sec*1000000 -tt0; \
+  if(tcount==NUMBER){ std::cerr << __FILE__ << __LINE__ << " temps CPU(mus): " << cumul << std::endl; tcount=0;cumul=0; }
+
+
 // in order NOT TO link with SalomeApp, here the code returns SALOMEDS_Study.
 // SalomeApp_Study::studyDS() does it as well, but -- here it is retrieved from 
 // SALOMEDS::StudyManager - no linkage with SalomeApp. 
@@ -321,6 +330,7 @@ void SOCC_Viewer::rename( const Handle(SALOME_InteractiveObject)& obj,
 */
 void SOCC_Viewer::Display( const SALOME_OCCPrs* prs )
 {
+  //std::cerr << "SOCC_Viewer::Display" << std::endl;
   // try do downcast object
   const SOCC_Prs* anOCCPrs = dynamic_cast<const SOCC_Prs*>( prs );
   if ( !anOCCPrs || anOCCPrs->IsNull() )
@@ -335,12 +345,14 @@ void SOCC_Viewer::Display( const SALOME_OCCPrs* prs )
   // get context
   Handle (AIS_InteractiveContext) ic = getAISContext();
 
+  /*
   // get all displayed objects
   AIS_ListOfInteractive List;
   ic->DisplayedObjects( List );
   // get objects in the collector
   AIS_ListOfInteractive ListCollector;
   ic->ObjectsInCollector( ListCollector );
+  */
 
   // get objects to be displayed
   AIS_ListOfInteractive anAISObjects;
@@ -354,6 +366,7 @@ void SOCC_Viewer::Display( const SALOME_OCCPrs* prs )
     {
       // try to find presentation in the viewer
       bool bDisplayed = false;
+   /*
       AIS_ListIteratorOfListOfInteractive ite( List );
       for ( ; ite.More(); ite.Next() )
       {
@@ -361,6 +374,7 @@ void SOCC_Viewer::Display( const SALOME_OCCPrs* prs )
         // if the object is already displayed - nothing to do more
         if ( ite.Value() == anAIS )
         {
+std::cerr << "ais found in displayed objects" << std::endl;
           // Deactivate object if necessary
           if ( !anOCCPrs->ToActivate() )
             ic->Deactivate( anAIS );
@@ -368,12 +382,33 @@ void SOCC_Viewer::Display( const SALOME_OCCPrs* prs )
           break;
         }
       }
+*/
+      AIS_DisplayStatus status = ic->DisplayStatus(anAIS);
+      if(status == AIS_DS_Displayed)
+        {
+//std::cerr << "ais found in displayed objects" << std::endl;
+          // Deactivate object if necessary
+          if ( !anOCCPrs->ToActivate() )
+            ic->Deactivate( anAIS );
+          bDisplayed = true;
+        }
 
       if ( bDisplayed )
         continue;
 
       // then try to find presentation in the collector
       bDisplayed = false;
+      if(status == AIS_DS_Erased)
+        {
+//std::cerr << "ais found in collector" << std::endl;
+          ic->DisplayFromCollector( anAIS, false );
+
+          // Deactivate object if necessary
+          if ( !anOCCPrs->ToActivate() )
+            ic->Deactivate( anAIS );
+          bDisplayed = true;
+        }
+      /*
       ite.Initialize( ListCollector );
       for ( ; ite.More(); ite.Next() )
       {
@@ -381,6 +416,7 @@ void SOCC_Viewer::Display( const SALOME_OCCPrs* prs )
         // if the object is in collector - display it
         if ( ite.Value() == anAIS )
         {
+std::cerr << "ais found in collector" << std::endl;
           ic->DisplayFromCollector( anAIS, false );
 
           // Deactivate object if necessary
@@ -402,9 +438,12 @@ void SOCC_Viewer::Display( const SALOME_OCCPrs* prs )
           break;
         }
       }
+      */
       if ( bDisplayed )
         continue;
 
+      //std::cerr << "ais not found in context. Display it" << std::endl;
+
       // if object is not displayed and not found in the collector - display it
       if ( anAIS->IsKind( STANDARD_TYPE(AIS_Trihedron) ) )
       {
@@ -414,7 +453,9 @@ void SOCC_Viewer::Display( const SALOME_OCCPrs* prs )
         aTrh->SetSize( aTrh == getTrihedron() ? aNewSize : 0.5 * aNewSize );
       }
 
+  START_TIMING;
       ic->Display( anAIS, false );
+  END_TIMING(100);
 
       // Set visibility flag
       // Temporarily commented to avoid awful dependecy on SALOMEDS
@@ -443,6 +484,7 @@ void SOCC_Viewer::Display( const SALOME_OCCPrs* prs )
 */
 void SOCC_Viewer::Erase( const SALOME_OCCPrs* prs, const bool forced )
 {
+  //std::cerr << "SOCC_Viewer::Erase " << forced << std::endl;
   // try do downcast object
   const SOCC_Prs* anOCCPrs = dynamic_cast<const SOCC_Prs*>( prs );
   if ( !anOCCPrs || anOCCPrs->IsNull() )
@@ -510,8 +552,8 @@ void SOCC_Viewer::EraseAll( const bool forced )
   ic->DisplayedObjects( aList );
   AIS_ListIteratorOfListOfInteractive anIter( aList );
   for ( ; anIter.More(); anIter.Next() ) {
-    if ( isTrihedronDisplayed && anIter.Value()->DynamicType() == STANDARD_TYPE( AIS_Trihedron ) ||
-         anIter.Value()->DynamicType() == STANDARD_TYPE( OCCViewer_Trihedron ))
+    if ( (isTrihedronDisplayed && anIter.Value()->DynamicType() == STANDARD_TYPE( AIS_Trihedron ) )||
+         (anIter.Value()->DynamicType() == STANDARD_TYPE( OCCViewer_Trihedron )) )
       continue;
 
     // erase an object
@@ -542,12 +584,26 @@ void SOCC_Viewer::EraseAll( const bool forced )
 */
 SALOME_Prs* SOCC_Viewer::CreatePrs( const char* entry )
 {
+  //std::cerr << "SOCC_Viewer::CreatePrs " << entry << std::endl;
   SOCC_Prs* prs = new SOCC_Prs();
   if ( entry )
   {
     // get context
     Handle(AIS_InteractiveContext) ic = getAISContext();
 
+    if(entry2aisobject.count(entry)>0)
+      {
+        //ais object exists
+        Handle(AIS_InteractiveObject) anAIS = entry2aisobject[entry];
+        AIS_DisplayStatus status = ic->DisplayStatus(anAIS);
+        if((status == AIS_DS_Displayed) || (status == AIS_DS_Erased))
+          {
+            //std::cerr << "ais found in context: add it in prs " << entry << std::endl;
+            prs->AddObject( anAIS );
+          }
+       }
+
+    /*
     // get displayed objects
     AIS_ListOfInteractive List;
     ic->DisplayedObjects( List );
@@ -563,8 +619,12 @@ SALOME_Prs* SOCC_Viewer::CreatePrs( const char* entry )
         Handle(SALOME_InteractiveObject)::DownCast( ite.Value()->GetOwner() );
 
       if ( !anObj.IsNull() && anObj->hasEntry() && strcmp( anObj->getEntry(), entry ) == 0 )
-        prs->AddObject( ite.Value() );
+        {
+          std::cerr << "ais found in context: add it in prs " << entry << std::endl;
+          prs->AddObject( ite.Value() );
+        }
     }
+*/
   }
   return prs;
 }
@@ -702,6 +762,40 @@ void SOCC_Viewer::Repaint()
   getViewer3d()->Update();
 }
 
+void SOCC_Viewer::updateViewer(SALOME_Prs* prs)
+{
+  //std::cerr << "SOCC_Viewer::updateViewer" << std::endl;
+  // try do downcast object
+  const SOCC_Prs* anOCCPrs = dynamic_cast<const SOCC_Prs*>( prs );
+  if ( !anOCCPrs || anOCCPrs->IsNull() )
+    return;
+
+  AIS_ListOfInteractive anAISObjects;
+  anOCCPrs->GetObjects( anAISObjects );
+
+  AIS_ListIteratorOfListOfInteractive aIter( anAISObjects );
+  for ( ; aIter.More(); aIter.Next() )
+  {
+    Handle(SALOME_InteractiveObject) anObj = Handle(SALOME_InteractiveObject)::DownCast( aIter.Value()->GetOwner() );
+    if ( !anObj.IsNull() && anObj->hasEntry() )
+      {
+        //std::cerr << "add ais in map entry2aisobject" << anObj->getEntry() << std::endl;
+        if(entry2aisobject.count(anObj->getEntry())>0)
+          {
+            if(entry2aisobject[anObj->getEntry()] == aIter.Value())
+              {
+                //std::cerr << "ais already in map entry2aisobject and the same" << std::endl;
+                continue;
+              }
+            else
+              {
+                //std::cerr << "ais already in map entry2aisobject but not the same" << std::endl;
+              }
+          }
+        entry2aisobject[anObj->getEntry()] = aIter.Value();
+      }
+  }
+}
 
 /*!
   create SOCC_ViewWindow
index 7a5b10ef436ae9ce458c2a39f524da459e0d1ba1..8bdd29ef9b80a007600b331ec0db429c91c620f4 100755 (executable)
@@ -68,6 +68,9 @@ public:
   // a utility function, used by SALOME_View_s methods
   bool                        getTrihedronSize( double& theNewSize, double& theSize );
 
+  //a map to store AIS objects associated to a SALOME entry
+  std::map< std::string , Handle(AIS_InteractiveObject) > entry2aisobject;
+  virtual void updateViewer(SALOME_Prs* prs);
 };
 
 #ifdef WIN32
index 89d899a6096088a64edc5445a2562de956950e34..db8e980c5ba210682b61c65034dab412e60e2930 100755 (executable)
@@ -283,7 +283,6 @@ void SUIT_DataObject::appendChild( SUIT_DataObject* obj )
 */
 void SUIT_DataObject::insertChild( SUIT_DataObject* obj, int position )
 {
-  START_TIMING;
   if ( !obj || myChildren.contains( obj ) )
     return;
 
@@ -296,7 +295,6 @@ void SUIT_DataObject::insertChild( SUIT_DataObject* obj, int position )
   else
     signal()->emitInserted( obj, this ,myChildren.at(pos-1));
     */
-  END_TIMING(100);
 }
 
 /*!
index f1222c2a705086a724370cff25d23c6a0672f136..69b9cfa951b35caa4f3f30e483ba9d79bc61c4f7 100755 (executable)
@@ -1311,7 +1311,7 @@ void SUIT_TreeModel::removeItem( SUIT_TreeModel::TreeItem* item )
   QModelIndex parentIdx = index( parentObj, 0 );
   int row = item->position();
   
-  beginRemoveRows( parentIdx, row, row );
+  //beginRemoveRows( parentIdx, row, row );
   myItems.remove( obj );
 
   if ( obj == root() )
@@ -1321,7 +1321,7 @@ void SUIT_TreeModel::removeItem( SUIT_TreeModel::TreeItem* item )
 
   delete item;
 
-  endRemoveRows();
+  //endRemoveRows();
 }
 
 void SUIT_TreeModel::onUpdated( SUIT_DataObject* object)
index 215abb3448fc30cf3cebabdc86e4d67c95896b83..8dc5250f35cbbc3c139876e6c377b361b4100e24 100644 (file)
@@ -1246,8 +1246,6 @@ void SalomeApp_Application::contextMenuPopup( const QString& type, QMenu* thePop
  3. update object browser if it exists */
 void SalomeApp_Application::updateObjectBrowser( const bool updateModels )
 {
-  //MESSAGE("UpdateObjBrowser");
-
   // update "non-existing" (not loaded yet) data models
   SalomeApp_Study* study = dynamic_cast<SalomeApp_Study*>(activeStudy());
 /*
index 9dcea194ad766f2fe15cfa8bd0b5dd2fd3f0597e..a1a8f02d9461475d17806994059dcd2ffc9a58b5 100644 (file)
@@ -296,7 +296,6 @@ bool SalomeApp_DataModel::create( CAM_Study* theStudy )
 */
 void SalomeApp_DataModel::update( LightApp_DataObject*, LightApp_Study* study )
 {
-  std::cerr << "in update" << std::endl;
   SalomeApp_Study* aSStudy = dynamic_cast<SalomeApp_Study*>(study);
   LightApp_RootObject* studyRoot = 0;
   _PTR(SComponent) sobj;
@@ -333,8 +332,6 @@ void SalomeApp_DataModel::update( LightApp_DataObject*, LightApp_Study* study )
 */
 SUIT_DataObject* SalomeApp_DataModel::synchronize( const _PTR( SComponent )& sobj, SalomeApp_Study* study )
 {
-
-  std::cerr << "in synchronize" << std::endl;
   if( !study || !study->root() || !sobj )
     return 0;
     
@@ -364,7 +361,6 @@ SUIT_DataObject* SalomeApp_DataModel::synchronize( const _PTR( SComponent )& sob
 */
 void SalomeApp_DataModel::updateTree( const _PTR( SComponent )& comp, SalomeApp_Study* study )
 {
-  std::cerr << "in updatetree" << std::endl;
   SalomeApp_ModuleObject* aNewRoot = dynamic_cast<SalomeApp_ModuleObject*>( synchronize( comp, study ) );
   if( aNewRoot )
   {
index 0d0a5048a0006b42c0e46880dc30d3a2f86d0689..987af4c46c488fd5732167aa568e473fd9c89c3f 100644 (file)
@@ -176,7 +176,6 @@ QPixmap SalomeApp_DataObject::icon( const int id ) const
   if ( id == NameId ) {
     _PTR(GenericAttribute) anAttr;
     if ( myObject && myObject->FindAttribute( anAttr, "AttributePixMap" ) ){
-   //   MESSAGE("SalomeApp_DataObject::icon : found attributePixmap")
       _PTR(AttributePixMap) aPixAttr ( anAttr );
       if ( aPixAttr->HasPixMap() ) {
         QString componentType = componentDataType();
@@ -189,11 +188,8 @@ QPixmap SalomeApp_DataObject::icon( const int id ) const
         }
         QString pixmapName = QObject::tr( pixmapID.toLatin1().constData() );
         LightApp_RootObject* aRoot = dynamic_cast<LightApp_RootObject*>( root() );
-         //MESSAGE("SalomeApp_DataObject::icon : after dynamic cast")
         if ( aRoot && aRoot->study() ) {
           SUIT_ResourceMgr* mgr = aRoot->study()->application()->resourceMgr();
-         //MESSAGE("SalomeApp_DataObject::icon : Call to mgr mgr == " << mgr );
-         //MESSAGE("SalomeApp_DataObject::icon : Call to mgr loadPixmap ( " << componentType.toStdString() << " , " << pixmapName.toStdString() << " )");
           return mgr->loadPixmap( componentType, pixmapName, false ); 
         }
       }
index 47e94168598d343e8ca2ae5b9cb9dd61572c0b61..ec9ed0a60cd897629157deb08c5f31a8d22246c5 100644 (file)
@@ -35,7 +35,7 @@
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SALOME_Observer)
 
-class SALOMEAPP_EXPORT SalomeApp_Study : public LightApp_Study 
+class SALOMEAPP_EXPORT SalomeApp_Study : public LightApp_Study
 {
   Q_OBJECT