mirror of
https://git.salome-platform.org/gitpub/modules/geom.git
synced 2025-01-13 18:20:35 +05:00
Mantis issue 0021295: [CEA 484] Bug when deleting objects.
This commit is contained in:
parent
e905eeaff1
commit
35239cd2c8
@ -55,7 +55,6 @@
|
|||||||
|
|
||||||
#define HST_CLIENT_LEN 256
|
#define HST_CLIENT_LEN 256
|
||||||
|
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
// function : Load()
|
// function : Load()
|
||||||
// purpose :
|
// purpose :
|
||||||
@ -105,10 +104,8 @@ GEOM_Client::GEOM_Client()
|
|||||||
//=======================================================================
|
//=======================================================================
|
||||||
GEOM_Client::GEOM_Client(const GEOM_Client& client)
|
GEOM_Client::GEOM_Client(const GEOM_Client& client)
|
||||||
{
|
{
|
||||||
myIORs = client.myIORs;
|
|
||||||
myShapes = client.myShapes;
|
|
||||||
_myIndexes = client._myIndexes;
|
|
||||||
_mySubShapes = client._mySubShapes;
|
_mySubShapes = client._mySubShapes;
|
||||||
|
myShapesMap = client.myShapesMap;
|
||||||
pid_client = client.pid_client;
|
pid_client = client.pid_client;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -142,30 +139,29 @@ GEOM_Client GEOM_Client::get_client()
|
|||||||
// function : Find()
|
// function : Find()
|
||||||
// purpose :
|
// purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
Standard_Integer GEOM_Client::Find( const TCollection_AsciiString& IOR, TopoDS_Shape& S )
|
Standard_Boolean GEOM_Client::Find (const TCollection_AsciiString& IOR, TopoDS_Shape& S)
|
||||||
{
|
{
|
||||||
if (_myIndexes.count(IOR) != 0)
|
if (myShapesMap.count(IOR) != 0) {
|
||||||
{
|
S = myShapesMap[IOR];
|
||||||
Standard_Integer i = _myIndexes[IOR];
|
return Standard_True;
|
||||||
S = myShapes.Value(i);
|
|
||||||
return i;
|
|
||||||
}
|
}
|
||||||
return 0;
|
return Standard_False;
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
// function : Find()
|
// function : Find()
|
||||||
// purpose :
|
// purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
Standard_Integer GEOM_Client::Find( const TopoDS_Shape& S, TCollection_AsciiString& IOR )
|
Standard_Boolean GEOM_Client::Find (const TopoDS_Shape& S, TCollection_AsciiString& IOR)
|
||||||
{
|
{
|
||||||
for ( Standard_Integer i = 1; i<= myShapes.Length(); i++ ) {
|
std::map< TCollection_AsciiString, TopoDS_Shape >::const_iterator it;
|
||||||
if (myShapes.Value(i) == S) {
|
for (it = myShapesMap.begin(); it != myShapesMap.end(); ++it) {
|
||||||
IOR = myIORs.Value(i);
|
if ((*it).second == S) {
|
||||||
return i;
|
IOR = (*it).first;
|
||||||
|
return Standard_True;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return Standard_False;
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
@ -174,9 +170,7 @@ Standard_Integer GEOM_Client::Find( const TopoDS_Shape& S, TCollection_AsciiStri
|
|||||||
//=======================================================================
|
//=======================================================================
|
||||||
void GEOM_Client::Bind( const TCollection_AsciiString& IOR, const TopoDS_Shape& S )
|
void GEOM_Client::Bind( const TCollection_AsciiString& IOR, const TopoDS_Shape& S )
|
||||||
{
|
{
|
||||||
myIORs.Append(IOR);
|
myShapesMap[IOR] = S;
|
||||||
myShapes.Append(S);
|
|
||||||
_myIndexes[IOR] = myIORs.Length();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
@ -185,15 +179,11 @@ void GEOM_Client::Bind( const TCollection_AsciiString& IOR, const TopoDS_Shape&
|
|||||||
//=======================================================================
|
//=======================================================================
|
||||||
void GEOM_Client::RemoveShapeFromBuffer( const TCollection_AsciiString& IOR)
|
void GEOM_Client::RemoveShapeFromBuffer( const TCollection_AsciiString& IOR)
|
||||||
{
|
{
|
||||||
if( myIORs.IsEmpty() )
|
if (myShapesMap.size() == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
TopoDS_Shape S;
|
if (myShapesMap.count(IOR) != 0) {
|
||||||
Standard_Integer anIndex = Find( IOR, S );
|
myShapesMap.erase(IOR);
|
||||||
if( anIndex != 0 ) {
|
|
||||||
myIORs.Remove(anIndex);
|
|
||||||
myShapes.Remove(anIndex);
|
|
||||||
_myIndexes.erase(IOR);
|
|
||||||
_mySubShapes.erase(IOR);
|
_mySubShapes.erase(IOR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -204,13 +194,11 @@ void GEOM_Client::RemoveShapeFromBuffer( const TCollection_AsciiString& IOR)
|
|||||||
//=======================================================================
|
//=======================================================================
|
||||||
void GEOM_Client::ClearClientBuffer()
|
void GEOM_Client::ClearClientBuffer()
|
||||||
{
|
{
|
||||||
if( myIORs.IsEmpty() )
|
if (myShapesMap.size() == 0)
|
||||||
return;
|
return;
|
||||||
myIORs.Clear();
|
|
||||||
myShapes.Clear();
|
|
||||||
_myIndexes.clear();
|
|
||||||
_mySubShapes.clear();
|
_mySubShapes.clear();
|
||||||
return;
|
myShapesMap.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
@ -219,7 +207,7 @@ void GEOM_Client::ClearClientBuffer()
|
|||||||
//=======================================================================
|
//=======================================================================
|
||||||
unsigned int GEOM_Client::BufferLength()
|
unsigned int GEOM_Client::BufferLength()
|
||||||
{
|
{
|
||||||
return myIORs.Length();
|
return myShapesMap.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
@ -231,9 +219,9 @@ TopoDS_Shape GEOM_Client::GetShape( GEOM::GEOM_Gen_ptr geom, GEOM::GEOM_Object_p
|
|||||||
TopoDS_Shape S;
|
TopoDS_Shape S;
|
||||||
CORBA::String_var anIOR = geom->GetStringFromIOR(aShape);
|
CORBA::String_var anIOR = geom->GetStringFromIOR(aShape);
|
||||||
TCollection_AsciiString IOR = (char*)anIOR.in();
|
TCollection_AsciiString IOR = (char*)anIOR.in();
|
||||||
Standard_Integer anIndex = Find(IOR, S);
|
Standard_Boolean anIndex = Find(IOR, S);
|
||||||
|
|
||||||
if (anIndex != 0) return S;
|
if (anIndex) return S;
|
||||||
|
|
||||||
/******* in case of a MAIN GEOM::SHAPE ********/
|
/******* in case of a MAIN GEOM::SHAPE ********/
|
||||||
if (aShape->IsMainShape()) {
|
if (aShape->IsMainShape()) {
|
||||||
@ -251,7 +239,7 @@ TopoDS_Shape GEOM_Client::GetShape( GEOM::GEOM_Gen_ptr geom, GEOM::GEOM_Object_p
|
|||||||
TCollection_AsciiString mainIOR = (char*)aMainIOR.in();
|
TCollection_AsciiString mainIOR = (char*)aMainIOR.in();
|
||||||
|
|
||||||
//find subshapes only one time
|
//find subshapes only one time
|
||||||
if(_mySubShapes.count(mainIOR)==0)
|
if (_mySubShapes.count(mainIOR) == 0)
|
||||||
{
|
{
|
||||||
TopTools_IndexedMapOfShape anIndices;
|
TopTools_IndexedMapOfShape anIndices;
|
||||||
TopExp::MapShapes(aMainShape, anIndices);
|
TopExp::MapShapes(aMainShape, anIndices);
|
||||||
|
@ -111,9 +111,9 @@ class GEOMCLIENT_EXPORT GEOM_Client {
|
|||||||
//Standard_EXPORT
|
//Standard_EXPORT
|
||||||
GEOM_Client(const GEOM_Client& client);
|
GEOM_Client(const GEOM_Client& client);
|
||||||
//Standard_EXPORT
|
//Standard_EXPORT
|
||||||
Standard_Integer Find( const TCollection_AsciiString& IOR, TopoDS_Shape& S ) ;
|
Standard_Boolean Find( const TCollection_AsciiString& IOR, TopoDS_Shape& S ) ;
|
||||||
//Standard_EXPORT
|
//Standard_EXPORT
|
||||||
Standard_Integer Find( const TopoDS_Shape& S, TCollection_AsciiString& IOR ) ;
|
Standard_Boolean Find( const TopoDS_Shape& S, TCollection_AsciiString& IOR ) ;
|
||||||
//Standard_EXPORT
|
//Standard_EXPORT
|
||||||
void Bind( const TCollection_AsciiString& IOR, const TopoDS_Shape& S ) ;
|
void Bind( const TCollection_AsciiString& IOR, const TopoDS_Shape& S ) ;
|
||||||
//Standard_EXPORT
|
//Standard_EXPORT
|
||||||
@ -134,10 +134,8 @@ class GEOMCLIENT_EXPORT GEOM_Client {
|
|||||||
private:
|
private:
|
||||||
// Fields PRIVATE
|
// Fields PRIVATE
|
||||||
//
|
//
|
||||||
TColStd_SequenceOfAsciiString myIORs ;
|
|
||||||
TopTools_SequenceOfShape myShapes ;
|
|
||||||
std::map< TCollection_AsciiString , int > _myIndexes;
|
|
||||||
std::map< TCollection_AsciiString , std::vector<TopoDS_Shape> > _mySubShapes;
|
std::map< TCollection_AsciiString , std::vector<TopoDS_Shape> > _mySubShapes;
|
||||||
|
std::map< TCollection_AsciiString , TopoDS_Shape > myShapesMap;
|
||||||
long pid_client;
|
long pid_client;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user