]> SALOME platform Git repositories - modules/smesh.git/commitdiff
Salome HOME
Apply additional improvement of the performance in case of usage of the SMESH module...
authorapo <apo@opencascade.com>
Tue, 7 Mar 2006 07:23:30 +0000 (07:23 +0000)
committerapo <apo@opencascade.com>
Tue, 7 Mar 2006 07:23:30 +0000 (07:23 +0000)
20 files changed:
idl/SMESH_Gen.idl
src/OBJECT/Makefile.in
src/OBJECT/SMESH_Object.cxx
src/OBJECT/SMESH_ObjectDef.h
src/SMESH/SMESH_Gen.cxx
src/SMESH/SMESH_Gen.hxx
src/SMESH/SMESH_Mesh.cxx
src/SMESH/SMESH_Mesh.hxx
src/SMESHClient/Makefile.in
src/SMESHClient/SMESH_Client.cxx
src/SMESHClient/SMESH_Client.hxx
src/SMESHDS/SMESHDS_Document.cxx
src/SMESHDS/SMESHDS_Document.hxx
src/SMESHDS/SMESHDS_Mesh.cxx
src/SMESHDS/SMESHDS_Mesh.hxx
src/SMESHDS/SMESHDS_Script.cxx
src/SMESHDS/SMESHDS_Script.hxx
src/SMESHGUI/SMESHGUI.cxx
src/SMESH_I/SMESH_Gen_i.cxx
src/SMESH_I/SMESH_Gen_i.hxx

index bc6edfb72418dbf02fc75f4913085d9f6b087f13..ee234b95e943727c35ce4e1b49ff090eaa1c4a03 100644 (file)
@@ -59,6 +59,16 @@ module SMESH
 
     SMESH_Pattern GetPattern();
 
+    /*!
+      Set the current mode
+     */
+    void SetEmbeddedMode( in boolean theMode );
+
+    /*!
+      Get the current mode
+     */
+    boolean IsEmbeddedMode();
+
     /*!
       Set the current study
      */
index a16a58ad8bad341589cb03a5a739cfbe694087d9..3f9abd39d8e6d2af1b4897d0819b87f4811cffc5 100644 (file)
@@ -31,14 +31,22 @@ VPATH=.:@srcdir@:@top_srcdir@/idl:$(top_builddir)/idl
 
 @COMMENCE@
 
-EXPORT_HEADERS = SMESH_Actor.h SMESH_Object.h SMESH_ObjectDef.h SMESH_ActorUtils.h
+EXPORT_HEADERS = \
+       SMESH_Actor.h \
+        SMESH_Object.h \
+       SMESH_ObjectDef.h \
+       SMESH_ActorUtils.h
 
 
 # Libraries targets
 
 LIB = libSMESHObject.la
-LIB_SRC = SMESH_Object.cxx SMESH_DeviceActor.cxx SMESH_Actor.cxx \
-         SMESH_ExtractGeometry.cxx SMESH_ActorUtils.cxx
+LIB_SRC = \
+          SMESH_Object.cxx \
+          SMESH_DeviceActor.cxx \
+          SMESH_Actor.cxx \
+         SMESH_ExtractGeometry.cxx \
+          SMESH_ActorUtils.cxx
 
 LIB_CLIENT_IDL = SALOME_Exception.idl \
                 SALOME_GenericObj.idl \
@@ -54,10 +62,75 @@ LIB_CLIENT_IDL = SALOME_Exception.idl \
 BIN = 
 BIN_SRC        =
 
-CPPFLAGS+=$(OCC_INCLUDES) $(VTK_INCLUDES) -I${KERNEL_ROOT_DIR}/include/salome -I${GUI_ROOT_DIR}/include/salome \
-         $(BOOST_CPPFLAGS) $(QT_INCLUDES)
-LDFLAGS+=$(OCC_KERNEL_LIBS) $(VTK_LIBS) -L${KERNEL_ROOT_DIR}/lib/salome -L${GUI_ROOT_DIR}/lib/salome -lSMDS \
-          -lSMESHClient -lSalomeApp -lSalomeObject -lSMESHControls -lSalomeLifeCycleCORBA -lSalomeDS -lCASCatch -lSalomeSession
-LDFLAGSFORBIN += $(LDFLAGS)
+CPPFLAGS+= \
+        -I${KERNEL_ROOT_DIR}/include/salome \
+        -I${GUI_ROOT_DIR}/include/salome \
+       $(OCC_INCLUDES) \
+        $(VTK_INCLUDES) \
+        $(BOOST_CPPFLAGS) \
+        $(QT_INCLUDES)
+LDFLAGS+= \
+       -L${KERNEL_ROOT_DIR}/lib/salome \
+        -L${GUI_ROOT_DIR}/lib/salome \
+       $(OCC_KERNEL_LIBS) \
+        $(VTK_LIBS) \
+        -lSMDS \
+        -lSMESHClient \
+        -lSalomeApp \
+        -lSalomeObject \
+        -lSMESHControls \
+        -lCASCatch
+
+LDFLAGSFORBIN += \
+       -L${GEOM_ROOT_DIR}/lib/salome \
+       -L${MED_ROOT_DIR}/lib/salome \
+       $(LDFLAGS) \
+       -lqtx \
+        -lsuit \
+       -lstd \
+       -lCAM \
+       -lLightApp \
+       -lObjBrowser \
+       -lSalomePrs \
+       -lSalomeDS \
+       -lTOOLSDS \
+       -lSalomeDSImpl \
+       -lSalomeDSClient \
+       -lSalomeHDFPersist \
+        -lSalomeResourcesManager \
+       -lSalomeLifeCycleCORBA \
+        -lSalomeNotification \
+        -lSalomeContainer \
+       -lSalomeCatalog \
+       -lSalomeSession \
+       -lRegistry \
+       -lNMTTools \
+       -lNMTDS \
+       -lmed_V2_1 \
+        -lMEDWrapper \
+        -lMEDWrapperBase \
+        -lMEDWrapper_V2_1 \
+        -lMEDWrapper_V2_2 \
+       -lPlot2d \
+       -lGLViewer \
+       -lOCCViewer \
+       -lVTKViewer \
+       -lSVTK \
+       -lSOCC \
+       -lSPlot2d \
+       -lSUPERVGraph \
+       -lPyInterp \
+       -lPythonConsole \
+       -lLogWindow \
+       -lLightApp \
+       -lSalomeContainer \
+       -lToolsGUI \
+        -lSalomeNS \
+       -lEvent \
+       -lSalomeGenericObj \
+        -lSALOMELocalTrace \
+       -lwith_loggerTraceCollector \
+        -lSALOMEBasics \
+        -lOpUtil
 
 @CONCLUDE@
index 7355e4b2bf106f8fd42633dbb0d3e6bdc33d8691..33aa1b0b6fbf6fc1bb6ee795c4160639cf4e72c9 100644 (file)
 #include "SMDS_Mesh.hxx"
 #include "SMESH_Actor.h"
 #include "SMESH_ControlsDef.hxx"
-#include "SMESH_Client.hxx"
+#include "SalomeApp_Application.h"
 #include "VTKViewer_ExtractUnstructuredGrid.h"
 
 #include CORBA_SERVER_HEADER(SMESH_Gen)
 #include CORBA_SERVER_HEADER(SALOME_Exception)
 
-#include "SALOME_LifeCycleCORBA.hxx"
-#include "SalomeApp_Application.h"
-
 #include <vtkCell.h>
 #include <vtkIdList.h>
 #include <vtkIntArray.h>
@@ -238,42 +235,6 @@ void SMESH_VisualObjDef::buildNodePrs()
   aPoints->Delete();
 
   myGrid->SetCells( 0, 0, 0 );
-
-  // Create cells
-  /*
-  int nbPoints = aPoints->GetNumberOfPoints();
-  vtkIdList *anIdList = vtkIdList::New();
-  anIdList->SetNumberOfIds( 1 );
-
-  vtkCellArray *aCells = vtkCellArray::New();
-  aCells->Allocate( 2 * nbPoints, 0 );
-
-  vtkUnsignedCharArray* aCellTypesArray = vtkUnsignedCharArray::New();
-  aCellTypesArray->SetNumberOfComponents( 1 );
-  aCellTypesArray->Allocate( nbPoints );
-
-  for( vtkIdType aCellId = 0; aCellId < nbPoints; aCellId++ )
-  {
-    anIdList->SetId( 0, aCellId );
-    aCells->InsertNextCell( anIdList );
-    aCellTypesArray->InsertNextValue( VTK_VERTEX );
-  }
-
-  vtkIntArray* aCellLocationsArray = vtkIntArray::New();
-  aCellLocationsArray->SetNumberOfComponents( 1 );
-  aCellLocationsArray->SetNumberOfTuples( nbPoints );
-
-  aCells->InitTraversal();
-  for( vtkIdType i = 0, *pts, npts; aCells->GetNextCell( npts, pts ); i++ )
-    aCellLocationsArray->SetValue( i, aCells->GetTraversalLocation( npts ) );
-
-  myGrid->SetCells( aCellTypesArray, aCellLocationsArray, aCells );
-
-  aCellLocationsArray->Delete();
-  aCellTypesArray->Delete();
-  aCells->Delete();
-  anIdList->Delete(); 
-  */
 }
 
 //=================================================================================
@@ -524,15 +485,11 @@ bool SMESH_VisualObjDef::GetEdgeNodes( const int theElemId,
 // function : SMESH_MeshObj
 // purpose  : Constructor
 //=================================================================================
-SMESH_MeshObj::SMESH_MeshObj(SMESH::SMESH_Mesh_ptr theMesh)
+SMESH_MeshObj::SMESH_MeshObj(SMESH::SMESH_Mesh_ptr theMesh):
+  myClient(SalomeApp_Application::orb(),theMesh)
 {
   if ( MYDEBUG ) 
-    MESSAGE("SMESH_MeshObj - theMesh->_is_nil() = "<<theMesh->_is_nil());
-    
-  myMeshServer = SMESH::SMESH_Mesh::_duplicate( theMesh );
-  myMeshServer->Register();
-  myMesh = new SMDS_Mesh();
-  myIsMeshFromServer = 0;
+    MESSAGE("SMESH_MeshObj - this = "<<this<<"; theMesh->_is_nil() = "<<theMesh->_is_nil());
 }
 
 //=================================================================================
@@ -541,9 +498,8 @@ SMESH_MeshObj::SMESH_MeshObj(SMESH::SMESH_Mesh_ptr theMesh)
 //=================================================================================
 SMESH_MeshObj::~SMESH_MeshObj()
 {
-  myMeshServer->Destroy();
-  if ( !myIsMeshFromServer )
-    delete myMesh;
+  if ( MYDEBUG ) 
+    MESSAGE("SMESH_MeshObj - this = "<<this<<"\n");
 }
 
 //=================================================================================
@@ -553,23 +509,8 @@ SMESH_MeshObj::~SMESH_MeshObj()
 void SMESH_MeshObj::Update( int theIsClear )
 {
   // Update SMDS_Mesh on client part
-  SALOME_LifeCycleCORBA* ls = new SALOME_LifeCycleCORBA( SalomeApp_Application::namingService() );
-  Engines::Component_var comp = ls->FindOrLoad_Component( "FactoryServer", "SMESH" );
-  SMESH::SMESH_Gen_ptr smesh = SMESH::SMESH_Gen::_narrow( comp );
-  int isUpdated = 0;
-  SMESH_Client client;
-  SMDS_Mesh* meshPtr = client.Update( smesh, myMeshServer, myMesh, theIsClear, isUpdated );
-  if ( meshPtr && myMesh != meshPtr )
-  {
-    delete myMesh;
-    myMesh = meshPtr;
-    myIsMeshFromServer = 1;
-  }
-  // Fill unstructured grid
-  if ( isUpdated )
-  {
-    buildPrs();
-  }
+  if ( myClient.Update(theIsClear) )
+    buildPrs();  // Fill unstructured grid
 }
 
 //=================================================================================
@@ -578,7 +519,7 @@ void SMESH_MeshObj::Update( int theIsClear )
 //=================================================================================
 int SMESH_MeshObj::GetElemDimension( const int theObjId )
 {
-  const SMDS_MeshElement* anElem = myMesh->FindElement( theObjId );
+  const SMDS_MeshElement* anElem = myClient->FindElement( theObjId );
   if ( anElem == 0 )
     return 0;
 
@@ -602,22 +543,22 @@ int SMESH_MeshObj::GetNbEntities( const SMDSAbs_ElementType theType) const
   {
     case SMDSAbs_Node:
     {
-      return myMesh->NbNodes();
+      return myClient->NbNodes();
     }
     break;
     case SMDSAbs_Edge:
     {
-      return myMesh->NbEdges();
+      return myClient->NbEdges();
     }
     break;
     case SMDSAbs_Face:
     {
-      return myMesh->NbFaces();
+      return myClient->NbFaces();
     }
     break;
     case SMDSAbs_Volume:
     {
-      return myMesh->NbVolumes();
+      return myClient->NbVolumes();
     }
     break;
     default:
@@ -634,25 +575,25 @@ int SMESH_MeshObj::GetEntities( const SMDSAbs_ElementType theType, TEntityList&
   {
     case SMDSAbs_Node:
     {
-      SMDS_NodeIteratorPtr anIter = myMesh->nodesIterator();
+      SMDS_NodeIteratorPtr anIter = myClient->nodesIterator();
       while ( anIter->more() ) theObjs.push_back( anIter->next() );
     }
     break;
     case SMDSAbs_Edge:
     {
-      SMDS_EdgeIteratorPtr anIter = myMesh->edgesIterator();
+      SMDS_EdgeIteratorPtr anIter = myClient->edgesIterator();
       while ( anIter->more() ) theObjs.push_back( anIter->next() );
     }
     break;
     case SMDSAbs_Face:
     {
-      SMDS_FaceIteratorPtr anIter = myMesh->facesIterator();
+      SMDS_FaceIteratorPtr anIter = myClient->facesIterator();
       while ( anIter->more() ) theObjs.push_back( anIter->next() );
     }
     break;
     case SMDSAbs_Volume:
     {
-      SMDS_VolumeIteratorPtr anIter = myMesh->volumesIterator();
+      SMDS_VolumeIteratorPtr anIter = myClient->volumesIterator();
       while ( anIter->more() ) theObjs.push_back( anIter->next() );
     }
     break;
@@ -678,7 +619,7 @@ void SMESH_MeshObj::UpdateFunctor( const SMESH::Controls::FunctorPtr& theFunctor
 //=================================================================================
 bool SMESH_MeshObj::IsNodePrs() const
 {
-  return myMesh->NbEdges() == 0 &&myMesh->NbFaces() == 0 &&myMesh->NbVolumes() == 0 ;
+  return myClient->NbEdges() == 0 &&myClient->NbFaces() == 0 && myClient->NbVolumes() == 0 ;
 }
 
 
index 8ce7b855837287f494e2156d989c8dc56cab145f..f45f14a63d8e59a73d01ed0c136b3828ad7d9df9 100644 (file)
 #ifndef SMESH_OBJECTDEF_H
 #define SMESH_OBJECTDEF_H
 
+#include "SMESH_Controls.hxx"
+#include "SMESH_Object.h"
+#include "SMESH_Client.hxx"
+
 // IDL Headers
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_Mesh)
@@ -37,9 +41,6 @@
 #include <map>
 #include <list>
 
-#include "SMESH_Controls.hxx"
-#include "SMESH_Object.h"
-
 class vtkPoints;
 class SALOME_ExtractUnstructuredGrid;
 
@@ -121,13 +122,11 @@ public:
 
   virtual void              UpdateFunctor( const SMESH::Controls::FunctorPtr& theFunctor );
   
-  SMESH::SMESH_Mesh_ptr     GetMeshServer() { return myMeshServer.in(); }
-  SMDS_Mesh*                GetMesh() const { return myMesh; }
+  SMESH::SMESH_Mesh_ptr     GetMeshServer() { return myClient.GetMeshServer(); }
+  SMDS_Mesh*                GetMesh() const { return myClient.GetMesh(); }
 
 protected:
-  int                       myIsMeshFromServer;
-  SMESH::SMESH_Mesh_var     myMeshServer;
-  SMDS_Mesh*                myMesh;
+  SMESH_Client              myClient;
 };
 
 
index b615ad5662696d2b7afb1f4e4aace826609d5361..b7e50f2091b64b0e28f617f55e58b365d33d6d0c 100644 (file)
@@ -102,33 +102,24 @@ SMESH_Gen::~SMESH_Gen()
  */
 //=============================================================================
 
-SMESH_Mesh* SMESH_Gen::CreateMesh(int studyId)
-throw(SALOME_Exception)
+SMESH_Mesh* SMESH_Gen::CreateMesh(int theStudyId, bool theIsEmbeddedMode)
+  throw(SALOME_Exception)
 {
-        Unexpect aCatch(SalomeException);
-       MESSAGE("SMESH_Gen::CreateMesh");
-//   if (aShape.ShapeType() == TopAbs_COMPOUND)
-//     {
-//       INFOS("Mesh Compound not yet implemented!");
-//       throw(SALOME_Exception(LOCALIZED("Mesh Compound not yet implemented!")));
-//     }
+  Unexpect aCatch(SalomeException);
+  MESSAGE("SMESH_Gen::CreateMesh");
 
-       // Get studyContext, create it if it does'nt exist, with a SMESHDS_Document
-
-       StudyContextStruct *myStudyContext = GetStudyContext(studyId);
-
-       // create a new SMESH_mesh object
-
-       SMESH_Mesh *mesh = new SMESH_Mesh(_localId++,
-               studyId,
-               this,
-               myStudyContext->myDocument);
-       myStudyContext->mapMesh[_localId] = mesh;
+  // Get studyContext, create it if it does'nt exist, with a SMESHDS_Document
+  StudyContextStruct *aStudyContext = GetStudyContext(theStudyId);
 
-       // associate a TopoDS_Shape to the mesh
+  // create a new SMESH_mesh object
+  SMESH_Mesh *aMesh = new SMESH_Mesh(_localId++,
+                                    theStudyId,
+                                    this,
+                                    theIsEmbeddedMode,
+                                    aStudyContext->myDocument);
+  aStudyContext->mapMesh[_localId] = aMesh;
 
-//mesh->ShapeToMesh(aShape);
-       return mesh;
+  return aMesh;
 }
 
 //=============================================================================
index 5364065ef8c054a05f1a5bfb311066a8443048a2..ab780a0704013b44a1447d26db7d3dc4934aa116 100644 (file)
@@ -60,7 +60,7 @@ class SMESH_Gen
 
 //  SMESH_Hypothesis *CreateHypothesis(const char *anHyp, int studyId)
 //    throw(SALOME_Exception);
-  SMESH_Mesh* CreateMesh(int studyId)
+  SMESH_Mesh* CreateMesh(int theStudyId, bool theIsEmbeddedMode)
     throw(SALOME_Exception);
   bool Compute(::SMESH_Mesh & aMesh, const TopoDS_Shape & aShape);
 
index cd33d40a357f817cb1759c3550312855e0139f34..e973b605a823c99b7049c0b370ff56a6c1039142 100644 (file)
@@ -79,17 +79,21 @@ static int MYDEBUG = 0;
  */
 //=============================================================================
 
-SMESH_Mesh::SMESH_Mesh(int localId, int studyId, SMESH_Gen * gen, SMESHDS_Document * myDocument)
-: _groupId( 0 )
+SMESH_Mesh::SMESH_Mesh(int theLocalId, 
+                      int theStudyId, 
+                      SMESH_Gen* theGen,
+                      bool theIsEmbeddedMode,
+                      SMESHDS_Document* theDocument):
+  _groupId( 0 )
 {
   INFOS("SMESH_Mesh::SMESH_Mesh(int localId)");
-       _id = localId;
-       _studyId = studyId;
-       _gen = gen;
-       _myDocument = myDocument;
-       _idDoc = _myDocument->NewMesh();
-       _myMeshDS = _myDocument->GetMesh(_idDoc);
-       _isShapeToMesh = false;
+  _id = theLocalId;
+  _studyId = theStudyId;
+  _gen = theGen;
+  _myDocument = theDocument;
+  _idDoc = theDocument->NewMesh(theIsEmbeddedMode);
+  _myMeshDS = theDocument->GetMesh(_idDoc);
+  _isShapeToMesh = false;
 }
 
 //=============================================================================
index 27d2a182b3898bd46f3f3a56707a6ab7cbc46b4b..93802346db6121aba1e624e5e78950af771710b7 100644 (file)
@@ -79,8 +79,11 @@ class SMESH_Mesh
   SMESH_Mesh();
   SMESH_Mesh(const SMESH_Mesh&);
 public:
-  SMESH_Mesh(int localId, int studyId, SMESH_Gen * gen,
-            SMESHDS_Document * myDocument);
+  SMESH_Mesh(int theLocalId, 
+            int theStudyId, 
+            SMESH_Gen* theGen,
+            bool theIsEmbeddedMode,
+            SMESHDS_Document* theDocument);
   
   virtual ~SMESH_Mesh();
   
index c8361f3220bcf1a224a7d1f5ae7ceb8c6287383b..39b084a6568885d98bc1730eb2e6e901bfccdacc 100644 (file)
@@ -81,6 +81,12 @@ LDFLAGS  += $(OCC_KERNEL_LIBS) \
             -lMEDWrapperBase \
             -lMEDWrapper_V2_1 \
             -lMEDWrapper_V2_2 \
+            -lSalomeResourcesManager \
+            -lSalomeLifeCycleCORBA \
+            -lSalomeNotification \
+            -lSalomeContainer \
+            -lRegistry \
+            -lSalomeNS \
             -lSALOMELocalTrace \
             -lSALOMEBasics \
             -lOpUtil
index 98bb56583f4a398b450c5e96ec998b99f8711258..4e95a08b3fca5630a5234df4578c9c0763f71740 100644 (file)
 //  Module : SMESH
 
 #include "SMESH_Client.hxx"
+#include "SMESH_Mesh.hxx"
+
+#include "SALOME_NamingService.hxx"
+#include "SALOME_LifeCycleCORBA.hxx"
 
 #include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(SALOME_Component)
+#include CORBA_SERVER_HEADER(SALOME_Exception)
+
 #include "OpUtil.hxx"
 #include "utilities.h"
 
-#include <SMESH_Mesh.hxx>
-
-#include CORBA_SERVER_HEADER(SALOME_Exception)
-
 #ifdef WNT
 #include <process.h>
 #else
@@ -57,30 +60,8 @@ static int MYDEBUG = 0;
 static int MYDEBUG = 0;
 #endif
 
-//=======================================================================
-// function : Create()
-// purpose  : Create in client not in a container
-//=======================================================================
-SMESH_Client::SMESH_Client()
-{
-  pid_client = 
-#ifdef WNT
-    (long)_getpid();
-#else
-    (long)getpid();
-#endif
-}
-
-//=======================================================================
-// function : Create()
-// purpose  : 
-//=======================================================================
-SMESH_Client::SMESH_Client(Engines::Container_ptr client)
+namespace
 {
-  pid_client = client->getPID();
-}
-
-namespace{
 
   inline const SMDS_MeshNode* FindNode(const SMDS_Mesh* theMesh, int theId){
     if(const SMDS_MeshNode* anElem = theMesh->FindNode(theId)) return anElem;
@@ -344,42 +325,121 @@ namespace{
   }
 }
 
+//=======================================================================
+SMESH::SMESH_Gen_var 
+SMESH_Client::GetSMESHGen(CORBA::ORB_ptr theORB,
+                         CORBA::Boolean& theIsEmbeddedMode)
+{
+  static SMESH::SMESH_Gen_var aMeshGen;
+
+  if(CORBA::is_nil(aMeshGen.in())){    
+#ifdef WNT
+    long aClientPID = (long)_getpid();
+#else
+    long aClientPID =  (long)getpid();
+#endif
+
+    SALOME_NamingService aNamingService(theORB);
+    SALOME_LifeCycleCORBA aLifeCycleCORBA(&aNamingService);
+    Engines::Component_var aComponent = aLifeCycleCORBA.FindOrLoad_Component("FactoryServer","SMESH");
+    aMeshGen = SMESH::SMESH_Gen::_narrow(aComponent);
+    
+    std::string aClientHostName = GetHostname();
+    Engines::Container_var aServerContainer = aMeshGen->GetContainerRef();
+    CORBA::String_var aServerHostName = aServerContainer->getHostName();
+    CORBA::Long aServerPID = aServerContainer->getPID();
+    aMeshGen->SetEmbeddedMode((aClientPID == aServerPID) && (aClientHostName == aServerHostName.in()));
+  }
+  theIsEmbeddedMode = aMeshGen->IsEmbeddedMode();
+
+  return aMeshGen;
+}
+
+
+//=======================================================================
+// function : Create()
+// purpose  : 
+//=======================================================================
+SMESH_Client::SMESH_Client(CORBA::ORB_ptr theORB,
+                          SMESH::SMESH_Mesh_ptr theMesh):
+  myMeshServer(SMESH::SMESH_Mesh::_duplicate(theMesh)),
+  mySMESHDSMesh(NULL),
+  mySMDSMesh(NULL)
+{
+  myMeshServer->Register();
+
+  CORBA::Boolean anIsEmbeddedMode;
+  GetSMESHGen(theORB,anIsEmbeddedMode);
+  if(anIsEmbeddedMode){
+    if ( MYDEBUG )
+      MESSAGE("Info: The same process, update mesh by pointer ");
+    // just set client mesh pointer to server mesh pointer
+    SMESH_Mesh* aMesh = reinterpret_cast<SMESH_Mesh*>(theMesh->GetMeshPtr());
+    mySMESHDSMesh = aMesh->GetMeshDS();
+    mySMDSMesh = mySMESHDSMesh;
+  }else
+    mySMDSMesh = new SMDS_Mesh();
+}
+
+
+//=================================================================================
+// function : ~SMESH_Client
+// purpose  : Destructor
+//=================================================================================
+SMESH_Client::~SMESH_Client()
+{
+  myMeshServer->Destroy();
+  if(!mySMESHDSMesh)
+    delete mySMDSMesh;
+}
+
+
+//=================================================================================
+SMDS_Mesh* 
+SMESH_Client::GetMesh() const 
+{
+  return mySMDSMesh; 
+}
+
+
 //=================================================================================
-// function : Update
+SMDS_Mesh*
+SMESH_Client::operator->() const
+{
+  return GetMesh();
+}
+
+
+//=================================================================================
+SMESH::SMESH_Mesh_ptr
+SMESH_Client::GetMeshServer()
+{
+  return myMeshServer.in(); 
+}
+
+
+//=================================================================================
+// function : SMESH_Client
 // purpose  : Update mesh
 //=================================================================================
-SMDS_Mesh* SMESH_Client::Update( SMESH::SMESH_Gen_ptr smesh,
-                                 SMESH::SMESH_Mesh_ptr theMeshServer, 
-                                 SMDS_Mesh* theMesh,
-                                 int theIsClear,
-                                int& theIsUpdated )
+bool
+SMESH_Client::Update(bool theIsClear)
 {
-  SMDS_Mesh* meshPtr = theMesh;
-  theIsUpdated = 0;
-  SMESH::log_array_var aSeq = theMeshServer->GetLog( theIsClear );
-  CORBA::Long aLength = aSeq->length();
-  
-  if( MYDEBUG )
-    MESSAGE( "Update: length of the script is "<<aLength );
+  bool anIsModified = true;
+  if(mySMESHDSMesh){
+    SMESHDS_Script* aScript = mySMESHDSMesh->GetScript();
+    anIsModified = aScript->IsModified();
+    aScript->SetModified(false);
+  }else{
+    SMESH::log_array_var aSeq = myMeshServer->GetLog( theIsClear );
+    CORBA::Long aLength = aSeq->length();
+    anIsModified = aLength > 0;
+    if( MYDEBUG )
+      MESSAGE( "Update: length of the script is "<<aLength );
   
-  if( !aLength )
-    return meshPtr;  // nothing to update
+    if(!anIsModified)
+      return false;
 
-  string hst_client = GetHostname();
-  Engines::Container_var ctn_server = smesh->GetContainerRef();
-  long pid_server = ctn_server->getPID();
-  if ( (pid_client==pid_server) && (strcmp(hst_client.c_str(), ctn_server->getHostName())==0) )
-  {
-    if ( MYDEBUG )
-      MESSAGE("Info: The same process, update mesh by pointer ");
-    // just set client mesh pointer to server mesh pointer
-    meshPtr = ((SMESH_Mesh*)theMeshServer->GetMeshPtr())->GetMeshDS();
-    if ( meshPtr )
-      theIsUpdated = 1;
-  }
-  else
-  {
     // update client mesh structure by logged changes commands
     try
     {
@@ -392,32 +452,32 @@ SMDS_Mesh* SMESH_Client::Update( SMESH::SMESH_Gen_ptr smesh,
 
        switch(aCommand)
         {
-       case SMESH::ADD_NODE       : AddNodesWithID      ( meshPtr, aSeq, anId ); break;
-        case SMESH::ADD_EDGE       : AddEdgesWithID      ( meshPtr, aSeq, anId ); break;
-        case SMESH::ADD_TRIANGLE   : AddTriasWithID      ( meshPtr, aSeq, anId ); break;
-        case SMESH::ADD_QUADRANGLE : AddQuadsWithID      ( meshPtr, aSeq, anId ); break;
-        case SMESH::ADD_POLYGON    : AddPolygonsWithID   ( meshPtr, aSeq, anId ); break;
-        case SMESH::ADD_TETRAHEDRON: AddTetrasWithID     ( meshPtr, aSeq, anId ); break;
-        case SMESH::ADD_PYRAMID    : AddPiramidsWithID   ( meshPtr, aSeq, anId ); break;
-        case SMESH::ADD_PRISM      : AddPrismsWithID     ( meshPtr, aSeq, anId ); break;
-        case SMESH::ADD_HEXAHEDRON : AddHexasWithID      ( meshPtr, aSeq, anId ); break;
-        case SMESH::ADD_POLYHEDRON : AddPolyhedronsWithID( meshPtr, aSeq, anId ); break;
+       case SMESH::ADD_NODE       : AddNodesWithID      ( mySMDSMesh, aSeq, anId ); break;
+        case SMESH::ADD_EDGE       : AddEdgesWithID      ( mySMDSMesh, aSeq, anId ); break;
+        case SMESH::ADD_TRIANGLE   : AddTriasWithID      ( mySMDSMesh, aSeq, anId ); break;
+        case SMESH::ADD_QUADRANGLE : AddQuadsWithID      ( mySMDSMesh, aSeq, anId ); break;
+        case SMESH::ADD_POLYGON    : AddPolygonsWithID   ( mySMDSMesh, aSeq, anId ); break;
+        case SMESH::ADD_TETRAHEDRON: AddTetrasWithID     ( mySMDSMesh, aSeq, anId ); break;
+        case SMESH::ADD_PYRAMID    : AddPiramidsWithID   ( mySMDSMesh, aSeq, anId ); break;
+        case SMESH::ADD_PRISM      : AddPrismsWithID     ( mySMDSMesh, aSeq, anId ); break;
+        case SMESH::ADD_HEXAHEDRON : AddHexasWithID      ( mySMDSMesh, aSeq, anId ); break;
+        case SMESH::ADD_POLYHEDRON : AddPolyhedronsWithID( mySMDSMesh, aSeq, anId ); break;
 
         case SMESH::REMOVE_NODE:
           for( ; anElemId < aNbElems; anElemId++ )
-            meshPtr->RemoveNode( FindNode( meshPtr, anIndexes[anElemId] ) );
+            mySMDSMesh->RemoveNode( FindNode( mySMDSMesh, anIndexes[anElemId] ) );
         break;
         
         case SMESH::REMOVE_ELEMENT:
           for( ; anElemId < aNbElems; anElemId++ )
-            meshPtr->RemoveElement( FindElement( meshPtr, anIndexes[anElemId] ) );
+            mySMDSMesh->RemoveElement( FindElement( mySMDSMesh, anIndexes[anElemId] ) );
         break;
 
         case SMESH::MOVE_NODE:
           for(CORBA::Long aCoordId=0; anElemId < aNbElems; anElemId++, aCoordId+=3)
           {
             SMDS_MeshNode* node =
-              const_cast<SMDS_MeshNode*>( FindNode( meshPtr, anIndexes[anElemId] ));
+              const_cast<SMDS_MeshNode*>( FindNode( mySMDSMesh, anIndexes[anElemId] ));
             node->setXYZ( aCoords[aCoordId], aCoords[aCoordId+1], aCoords[aCoordId+2] );
           }
         break;
@@ -426,33 +486,32 @@ SMDS_Mesh* SMESH_Client::Update( SMESH::SMESH_Gen_ptr smesh,
           for ( CORBA::Long i = 0; anElemId < aNbElems; anElemId++ )
           {
             // find element
-            const SMDS_MeshElement* elem = FindElement( meshPtr, anIndexes[i++] );
+            const SMDS_MeshElement* elem = FindElement( mySMDSMesh, anIndexes[i++] );
             // nb nodes
             int nbNodes = anIndexes[i++];
             // nodes
             //ASSERT( nbNodes < 9 );
             const SMDS_MeshNode* aNodes[ nbNodes ];
             for ( int iNode = 0; iNode < nbNodes; iNode++ )
-              aNodes[ iNode ] = FindNode( meshPtr, anIndexes[i++] );
+              aNodes[ iNode ] = FindNode( mySMDSMesh, anIndexes[i++] );
             // change
-            meshPtr->ChangeElementNodes( elem, aNodes, nbNodes );
+            mySMDSMesh->ChangeElementNodes( elem, aNodes, nbNodes );
           }
           break;
 
         case SMESH::CHANGE_POLYHEDRON_NODES:
-          ChangePolyhedronNodes(meshPtr, aSeq, anId);
+          ChangePolyhedronNodes(mySMDSMesh, aSeq, anId);
           break;
         case SMESH::RENUMBER:
           for(CORBA::Long i=0; anElemId < aNbElems; anElemId++, i+=3)
           {
-            meshPtr->Renumber( anIndexes[i], anIndexes[i+1], anIndexes[i+2] );
+            mySMDSMesh->Renumber( anIndexes[i], anIndexes[i+1], anIndexes[i+2] );
           }
           break;
           
         default:;
        }
       }
-      theIsUpdated = 1;
     }
     catch ( SALOME::SALOME_Exception& exc )
     {
@@ -466,15 +525,15 @@ SMDS_Mesh* SMESH_Client::Update( SMESH::SMESH_Gen_ptr smesh,
     {
       INFOS("Unknown exception was cought !!!");
     }
-  } // end of else (update mesh by log script
-  
-  if ( MYDEBUG && meshPtr )
-  {
-    MESSAGE("Update - meshPtr->NbNodes() = "<<meshPtr->NbNodes());
-    MESSAGE("Update - meshPtr->NbEdges() = "<<meshPtr->NbEdges());
-    MESSAGE("Update - meshPtr->NbFaces() = "<<meshPtr->NbFaces());
-    MESSAGE("Update - meshPtr->NbVolumes() = "<<meshPtr->NbVolumes());
-  }
 
-  return meshPtr;
+    if ( MYDEBUG && mySMDSMesh )
+    {
+      MESSAGE("Update - mySMDSMesh->NbNodes() = "<<mySMDSMesh->NbNodes());
+      MESSAGE("Update - mySMDSMesh->NbEdges() = "<<mySMDSMesh->NbEdges());
+      MESSAGE("Update - mySMDSMesh->NbFaces() = "<<mySMDSMesh->NbFaces());
+      MESSAGE("Update - mySMDSMesh->NbVolumes() = "<<mySMDSMesh->NbVolumes());
+    }
+  } // end of update mesh by log script
+  
+  return anIsModified;
 }
index ff65380f81623e38015828d6de717f811da1e442..646811051c9ef7081b21bf8893109cfa55af8c82 100644 (file)
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_Gen)
 #include CORBA_SERVER_HEADER(SMESH_Mesh)
-//#include CORBA_SERVER_HEADER(SALOME_Container)
-
-#ifndef _Standard_HeaderFile
-#include <Standard.hxx>
-#endif
 
 #if defined WNT && defined WIN32 && defined SALOME_WNT_EXPORTS
 #define SMESHCLIENT_WNT_EXPORT __declspec( dllexport )
 #define SMESHCLIENT_WNT_EXPORT
 #endif
 
+class SMESHDS_Mesh;
 class SMDS_Mesh;
 
+
 //=====================================================================
 // SMESH_Client : class definition
 //=====================================================================
-class SMESHCLIENT_WNT_EXPORT SMESH_Client  {
-
+class SMESHCLIENT_WNT_EXPORT SMESH_Client  
+{
 public:
-  
-  inline void* operator new(size_t,void* anAddress) 
-  {
-    return anAddress;
-  }
-  inline void* operator new(size_t size) 
-  { 
-    return Standard::Allocate(size); 
-  }
-  inline void  operator delete(void *anAddress) 
-  { 
-    if (anAddress) Standard::Free((Standard_Address&)anAddress); 
-  }
-  // Methods PUBLIC
-  // 
-  SMESH_Client();
-  SMESH_Client(Engines::Container_ptr client);
-  SMDS_Mesh* Update( SMESH::SMESH_Gen_ptr smesh,
-                     SMESH::SMESH_Mesh_ptr theMeshServer, 
-                     SMDS_Mesh* theMesh, 
-                     int theIsClear,
-                    int& theIsUpdated );
+  static 
+  SMESH::SMESH_Gen_var
+  GetSMESHGen(CORBA::ORB_ptr theORB,
+             CORBA::Boolean& theIsEmbeddedMode);
+
+  SMESH_Client(CORBA::ORB_ptr theORB,
+              SMESH::SMESH_Mesh_ptr theMesh);
+  ~SMESH_Client();
+
+  bool 
+  Update(bool theIsClear);
+
+  SMDS_Mesh* 
+  GetMesh() const;
+
+  SMDS_Mesh*
+  operator->() const;
+
+  SMESH::SMESH_Mesh_ptr
+  GetMeshServer();
 
-private
-  // Fields PRIVATE
-  //
-  long  pid_client;
+protected
+  SMESH::SMESH_Mesh_var myMeshServer;
+  SMESHDS_Mesh* mySMESHDSMesh;
+  SMDS_Mesh* mySMDSMesh;
 };
 
 
index f533a72a7873fe8dd5f5f6da94c5188b5d457026..8529c2b2491d1c70a16172bc91bcf445a5e3fe4c 100644 (file)
@@ -43,13 +43,13 @@ SMESHDS_Document::SMESHDS_Document(int UserID):myUserID(UserID)
 //function : NewMesh
 //purpose  : 
 //=======================================================================
-int SMESHDS_Document::NewMesh()
+int SMESHDS_Document::NewMesh(bool theIsEmbeddedMode)
 {
-       static int NewMeshID = 0;
-       NewMeshID++;
-       SMESHDS_Mesh *aNewMesh = new SMESHDS_Mesh(NewMeshID);
-       myMeshes[NewMeshID] = aNewMesh;
-       return NewMeshID;
+  static int aNewMeshID = 0;
+  aNewMeshID++;
+  SMESHDS_Mesh *aNewMesh = new SMESHDS_Mesh(aNewMeshID,theIsEmbeddedMode);
+  myMeshes[aNewMeshID] = aNewMesh;
+  return aNewMeshID;
 }
 
 //=======================================================================
index e95269f11270208a1488a579037f907860e40654..7378573ec98831676c9dbf778b4f43225eaf2b53 100644 (file)
@@ -36,7 +36,7 @@ class SMESHDS_Document
 {
   public:
        SMESHDS_Document(int UserID);
-       int NewMesh();
+       int NewMesh(bool theIsEmbeddedMode);
        void RemoveMesh(int MeshID);
        SMESHDS_Mesh * GetMesh(int MeshID);
        void AddHypothesis(SMESHDS_Hypothesis * H);
index 30fb84c6ca22683bed919c9fa8904fb2ffb6c997..15c1fe44ac9ad394389180d73574bd2db0703944 100644 (file)
@@ -45,9 +45,10 @@ using namespace std;
 //function : Create
 //purpose  : 
 //=======================================================================
-SMESHDS_Mesh::SMESHDS_Mesh(int MeshID):myMeshID(MeshID)
+SMESHDS_Mesh::SMESHDS_Mesh(int theMeshID, bool theIsEmbeddedMode):
+  myMeshID(theMeshID)
 {
-       myScript = new SMESHDS_Script();
+  myScript = new SMESHDS_Script(theIsEmbeddedMode);
 }
 
 //=======================================================================
index 6a8f15e6d9038f00a5ad90d939891055fd372985..fd79529f8882a4c50152758fe7bfd792797fe4ef 100644 (file)
@@ -78,7 +78,7 @@ class SMESHDS_GroupBase;
 
 class SMESHDS_WNT_EXPORT SMESHDS_Mesh:public SMDS_Mesh{
 public:
-  SMESHDS_Mesh(int MeshID);
+  SMESHDS_Mesh(int theMeshID, bool theIsEmbeddedMode);
   void ShapeToMesh(const TopoDS_Shape & S);
   bool AddHypothesis(const TopoDS_Shape & SS, const SMESHDS_Hypothesis * H);
   bool RemoveHypothesis(const TopoDS_Shape & S, const SMESHDS_Hypothesis * H);
index 327a881619765ef036805936142207293ad86e69..3f2b012541112226b1ed377bef41ff95bac15a35 100644 (file)
 
 using namespace std;
 
+//=======================================================================
+//function : Constructor
+//purpose  : 
+//=======================================================================
+SMESHDS_Script::SMESHDS_Script(bool theIsEmbeddedMode):
+  myIsEmbeddedMode(theIsEmbeddedMode)
+{}
+
 //=======================================================================
 //function : Destructor
 //purpose  : 
@@ -39,6 +47,18 @@ SMESHDS_Script::~SMESHDS_Script()
   Clear();
 }
 
+//=======================================================================
+void SMESHDS_Script::SetModified(bool theModified)
+{
+  myIsModified = theModified;
+}
+
+//=======================================================================
+bool SMESHDS_Script::IsModified()
+{
+  return myIsModified;
+}
+
 //=======================================================================
 //function : getCommand
 //purpose  : 
@@ -78,6 +98,10 @@ void SMESHDS_Script::AddNode(int NewNodeID, double x, double y, double z)
 //=======================================================================
 void SMESHDS_Script::AddEdge(int NewEdgeID, int idnode1, int idnode2)
 {
+  if(myIsEmbeddedMode){
+    myIsModified = true;
+    return;
+  }
   getCommand(SMESHDS_AddEdge)->AddEdge(NewEdgeID, idnode1, idnode2);
 }
 
@@ -88,6 +112,10 @@ void SMESHDS_Script::AddEdge(int NewEdgeID, int idnode1, int idnode2)
 void SMESHDS_Script::AddFace(int NewFaceID,
                              int idnode1, int idnode2, int idnode3)
 {
+  if(myIsEmbeddedMode){
+    myIsModified = true;
+    return;
+  }
   getCommand(SMESHDS_AddTriangle)->AddFace(NewFaceID,
                                            idnode1, idnode2, idnode3);
 }
@@ -100,6 +128,10 @@ void SMESHDS_Script::AddFace(int NewFaceID,
                              int idnode1, int idnode2,
                              int idnode3, int idnode4)
 {
+  if(myIsEmbeddedMode){
+    myIsModified = true;
+    return;
+  }
   getCommand(SMESHDS_AddQuadrangle)->AddFace(NewFaceID,
                                              idnode1, idnode2,
                                              idnode3, idnode4);
@@ -113,6 +145,10 @@ void SMESHDS_Script::AddVolume(int NewID,
                                int idnode1, int idnode2,
                                int idnode3, int idnode4)
 {
+  if(myIsEmbeddedMode){
+    myIsModified = true;
+    return;
+  }
   getCommand(SMESHDS_AddTetrahedron)->AddVolume(NewID,
                                                 idnode1, idnode2,
                                                 idnode3, idnode4);
@@ -126,6 +162,10 @@ void SMESHDS_Script::AddVolume(int NewID,
                                int idnode1, int idnode2,
                                int idnode3, int idnode4, int idnode5)
 {
+  if(myIsEmbeddedMode){
+    myIsModified = true;
+    return;
+  }
   getCommand(SMESHDS_AddPyramid)->AddVolume(NewID,
                                             idnode1, idnode2,
                                             idnode3, idnode4, idnode5);
@@ -139,6 +179,10 @@ void SMESHDS_Script::AddVolume(int NewID,
                                int idnode1, int idnode2, int idnode3,
                                int idnode4, int idnode5, int idnode6)
 {
+  if(myIsEmbeddedMode){
+    myIsModified = true;
+    return;
+  }
   getCommand(SMESHDS_AddPrism)->AddVolume(NewID,
                                           idnode1, idnode2, idnode3,
                                           idnode4, idnode5, idnode6);
@@ -152,6 +196,10 @@ void SMESHDS_Script::AddVolume(int NewID,
                                int idnode1, int idnode2, int idnode3, int idnode4,
                                int idnode5, int idnode6, int idnode7, int idnode8)
 {
+  if(myIsEmbeddedMode){
+    myIsModified = true;
+    return;
+  }
   getCommand(SMESHDS_AddHexahedron)->AddVolume(NewID,
                                                idnode1, idnode2, idnode3, idnode4,
                                                idnode5, idnode6, idnode7, idnode8);
@@ -163,6 +211,10 @@ void SMESHDS_Script::AddVolume(int NewID,
 //=======================================================================
 void SMESHDS_Script::AddPolygonalFace (int NewFaceID, std::vector<int> nodes_ids)
 {
+  if(myIsEmbeddedMode){
+    myIsModified = true;
+    return;
+  }
   getCommand(SMESHDS_AddPolygon)->AddPolygonalFace(NewFaceID, nodes_ids);
 }
 
@@ -174,6 +226,10 @@ void SMESHDS_Script::AddPolyhedralVolume (int NewID,
                                           std::vector<int> nodes_ids,
                                           std::vector<int> quantities)
 {
+  if(myIsEmbeddedMode){
+    myIsModified = true;
+    return;
+  }
   getCommand(SMESHDS_AddPolyhedron)->AddPolyhedralVolume
     (NewID, nodes_ids, quantities);
 }
@@ -184,6 +240,10 @@ void SMESHDS_Script::AddPolyhedralVolume (int NewID,
 //=======================================================================
 void SMESHDS_Script::MoveNode(int NewNodeID, double x, double y, double z)
 {
+  if(myIsEmbeddedMode){
+    myIsModified = true;
+    return;
+  }
   getCommand(SMESHDS_MoveNode)->MoveNode(NewNodeID, x, y, z);
 }
 
@@ -193,6 +253,10 @@ void SMESHDS_Script::MoveNode(int NewNodeID, double x, double y, double z)
 //=======================================================================
 void SMESHDS_Script::RemoveNode(int ID)
 {
+  if(myIsEmbeddedMode){
+    myIsModified = true;
+    return;
+  }
   getCommand(SMESHDS_RemoveNode)->RemoveNode(ID);
 }
 
@@ -202,6 +266,10 @@ void SMESHDS_Script::RemoveNode(int ID)
 //=======================================================================
 void SMESHDS_Script::RemoveElement(int ElementID)
 {
+  if(myIsEmbeddedMode){
+    myIsModified = true;
+    return;
+  }
   getCommand(SMESHDS_RemoveElement)->RemoveElement(ElementID);
 }
 
@@ -212,6 +280,10 @@ void SMESHDS_Script::RemoveElement(int ElementID)
 
 void SMESHDS_Script::ChangeElementNodes(int ElementID, int nodes[], int nbnodes)
 {
+  if(myIsEmbeddedMode){
+    myIsModified = true;
+    return;
+  }
   getCommand(SMESHDS_ChangeElementNodes)->ChangeElementNodes( ElementID, nodes, nbnodes );
 }
 
@@ -223,6 +295,10 @@ void SMESHDS_Script::ChangePolyhedronNodes (const int        ElementID,
                                             std::vector<int> nodes_ids,
                                             std::vector<int> quantities)
 {
+  if(myIsEmbeddedMode){
+    myIsModified = true;
+    return;
+  }
   getCommand(SMESHDS_ChangePolyhedronNodes)->ChangePolyhedronNodes
     (ElementID, nodes_ids, quantities);
 }
@@ -233,6 +309,10 @@ void SMESHDS_Script::ChangePolyhedronNodes (const int        ElementID,
 //=======================================================================
 void SMESHDS_Script::Renumber (const bool isNodes, const int startID, const int deltaID)
 {
+  if(myIsEmbeddedMode){
+    myIsModified = true;
+    return;
+  }
   getCommand(SMESHDS_Renumber)->Renumber( isNodes, startID, deltaID );
 }
 
@@ -269,6 +349,10 @@ const list<SMESHDS_Command*>& SMESHDS_Script::GetCommands()
 //=======================================================================
 void SMESHDS_Script::AddEdge(int NewEdgeID, int n1, int n2, int n12)
 {
+  if(myIsEmbeddedMode){
+    myIsModified = true;
+    return;
+  }
   getCommand(SMESHDS_AddQuadEdge)->AddEdge(NewEdgeID, n1, n2, n12);
 }
 
@@ -279,6 +363,10 @@ void SMESHDS_Script::AddEdge(int NewEdgeID, int n1, int n2, int n12)
 void SMESHDS_Script::AddFace(int NewFaceID, int n1, int n2, int n3,
                              int n12, int n23, int n31)
 {
+  if(myIsEmbeddedMode){
+    myIsModified = true;
+    return;
+  }
   getCommand(SMESHDS_AddQuadTriangle)->AddFace(NewFaceID, n1, n2, n3,
                                                n12, n23, n31);
 }
@@ -290,6 +378,10 @@ void SMESHDS_Script::AddFace(int NewFaceID, int n1, int n2, int n3,
 void SMESHDS_Script::AddFace(int NewFaceID, int n1, int n2, int n3, int n4,
                              int n12, int n23, int n34, int n41)
 {
+  if(myIsEmbeddedMode){
+    myIsModified = true;
+    return;
+  }
   getCommand(SMESHDS_AddQuadQuadrangle)->AddFace(NewFaceID, n1, n2, n3, n4,
                                                  n12, n23, n34, n41);
 }
@@ -302,6 +394,10 @@ void SMESHDS_Script::AddVolume(int NewVolID, int n1, int n2, int n3, int n4,
                                int n12, int n23, int n31,
                                int n14, int n24, int n34)
 {
+  if(myIsEmbeddedMode){
+    myIsModified = true;
+    return;
+  }
   getCommand(SMESHDS_AddQuadTetrahedron)->AddVolume(NewVolID, n1, n2, n3, n4,
                                                     n12, n23, n31,
                                                     n14, n24, n34);
@@ -315,6 +411,10 @@ void SMESHDS_Script::AddVolume(int NewVolID, int n1, int n2, int n3, int n4,
                                int n5, int n12, int n23, int n34, int n41,
                                int n15, int n25, int n35, int n45)
 {
+  if(myIsEmbeddedMode){
+    myIsModified = true;
+    return;
+  }
   getCommand(SMESHDS_AddQuadPyramid)->AddVolume(NewVolID, n1, n2, n3, n4, n5,
                                                 n12, n23, n34, n41,
                                                 n15, n25, n35, n45);
@@ -329,6 +429,10 @@ void SMESHDS_Script::AddVolume(int NewVolID, int n1, int n2, int n3, int n4,
                                 int n45, int n56, int n64,
                                 int n14, int n25, int n36)
 {
+  if(myIsEmbeddedMode){
+    myIsModified = true;
+    return;
+  }
   getCommand(SMESHDS_AddQuadPentahedron)->AddVolume(NewVolID, n1,n2,n3,n4,n5,n6,
                                                     n12, n23, n31,
                                                     n45, n56, n64,
@@ -345,6 +449,10 @@ void SMESHDS_Script::AddVolume(int NewVolID, int n1, int n2, int n3,
                                int n56, int n67, int n78, int n85,
                                int n15, int n26, int n37, int n48)
 {
+  if(myIsEmbeddedMode){
+    myIsModified = true;
+    return;
+  }
   getCommand(SMESHDS_AddQuadHexahedron)->AddVolume(NewVolID, n1, n2, n3, n4,
                                                    n5, n6, n7, n8,
                                                    n12, n23, n34, n41,
index 95e5335ad97f9e0ad2670cdc1e19fbd8c5212e6a..a74f10d71441786ae381ec4bf90c497edbba95e3 100644 (file)
 class SMESHDS_Script
 {
   public:
-       SMESHDS_Script() {};
+       SMESHDS_Script(bool theIsEmbeddedMode);
        ~SMESHDS_Script();
   
+        void SetModified(bool theModified);
+        bool IsModified();
+
        void AddNode(int NewNodeID, double x, double y, double z);
        void AddEdge(int NewEdgeID, int idnode1, int idnode2);
        void AddFace(int NewFaceID, int idnode1, int idnode2, int idnode3);
@@ -95,6 +98,9 @@ class SMESHDS_Script
        SMESHDS_Command* getCommand(const SMESHDS_CommandType aType);
 
        std::list<SMESHDS_Command*> myCommands;
+
+        bool myIsEmbeddedMode;
+        bool myIsModified;
 };
 
 #endif
index f4df5d67dc08e6e1465e6b04c6cb0bb6f6eb8579..fed0714ab73f3f33f281d13bfc217d98e893f3bd 100644 (file)
@@ -26,6 +26,7 @@
 
 #include "SMESHGUI.h"
 
+#include "SMESH_Client.hxx"
 #include "SMESHGUI_NodesDlg.h"
 #include "SMESHGUI_TransparencyDlg.h"
 #include "SMESHGUI_ClippingDlg.h"
@@ -825,12 +826,11 @@ SMESH::SMESH_Gen_var SMESHGUI::myComponentSMESH = SMESH::SMESH_Gen::_nil();
 //=============================================================================
 SMESHGUI::SMESHGUI() :
 SalomeApp_Module( "SMESH" )
-{
+{  
   if ( CORBA::is_nil( myComponentSMESH ) )
   {
-    SALOME_LifeCycleCORBA* ls = new SALOME_LifeCycleCORBA( getApp()->namingService() );
-    Engines::Component_var comp = ls->FindOrLoad_Component( "FactoryServer", "SMESH" );
-    myComponentSMESH = SMESH::SMESH_Gen::_narrow( comp );
+    CORBA::Boolean anIsEmbeddedMode;
+    myComponentSMESH = SMESH_Client::GetSMESHGen(getApp()->orb(),anIsEmbeddedMode);
   }
 
   myActiveDialogBox = 0;
index 79f87e11617f8195f42c6ef7d54559e7c9c859b9..864427fac87a97f354dae5a8e0a17f8c83b14f96 100644 (file)
@@ -244,6 +244,7 @@ SMESH_Gen_i::SMESH_Gen_i( CORBA::ORB_ptr            orb,
   _thisObj = this ;
   _id = myPoa->activate_object( _thisObj );
   
+  myIsEmbeddedMode = false;
   myShapeReader = NULL;  // shape reader
   mySMESHGen = this;
 }
@@ -377,7 +378,7 @@ SMESH::SMESH_Mesh_ptr SMESH_Gen_i::createMesh()
     // create a new mesh object servant, store it in a map in study context
     SMESH_Mesh_i* meshServant = new SMESH_Mesh_i( GetPOA(), this, GetCurrentStudyID() );
     // create a new mesh object
-    meshServant->SetImpl( myGen.CreateMesh( GetCurrentStudyID() ));
+    meshServant->SetImpl( myGen.CreateMesh( GetCurrentStudyID(), myIsEmbeddedMode ));
 
     // activate the CORBA servant of Mesh
     SMESH::SMESH_Mesh_var mesh = SMESH::SMESH_Mesh::_narrow( meshServant->_this() );
@@ -407,6 +408,32 @@ GEOM_Client* SMESH_Gen_i::GetShapeReader()
   return myShapeReader;
 }
 
+//=============================================================================
+/*!
+ *  SMESH_Gen_i::SetEmbeddedMode
+ *
+ *  Set current mode
+ */
+//=============================================================================
+
+void SMESH_Gen_i::SetEmbeddedMode( CORBA::Boolean theMode )
+{
+  myIsEmbeddedMode = theMode;
+}
+
+//=============================================================================
+/*!
+ *  SMESH_Gen_i::IsEmbeddedMode
+ *
+ *  Get current mode
+ */
+//=============================================================================
+
+CORBA::Boolean SMESH_Gen_i::IsEmbeddedMode()
+{
+  return myIsEmbeddedMode;
+}
+
 //=============================================================================
 /*!
  *  SMESH_Gen_i::SetCurrentStudy
index f1cce14532e39807622b9cc37fa4ab113f6b83e6..11f07f75d13158bf6c904dc8794f194ab82420a4 100644 (file)
@@ -166,6 +166,11 @@ public:
   // Interface methods
   // *****************************************
 
+  // Set current study
+  void SetEmbeddedMode( CORBA::Boolean theMode );
+  // Get current study
+  CORBA::Boolean IsEmbeddedMode();
+
   // Set current study
   void SetCurrentStudy( SALOMEDS::Study_ptr theStudy );
   // Get current study
@@ -417,6 +422,7 @@ private:
 
   GEOM_Client*              myShapeReader;      // Shape reader
   SALOMEDS::Study_var       myCurrentStudy;     // Current study
+  CORBA::Boolean            myIsEmbeddedMode;   // Current mode
 
   // Dump Python: trace of API methods calls
   std::map < int, Handle(TColStd_HSequenceOfAsciiString) > myPythonScripts;