}
}
// - sub-meshes
- myIndexToShape.Clear();
+ TShapeIndexToSubMesh::iterator i_sm = myShapeIndexToSubMesh.begin();
+ for ( ; i_sm != myShapeIndexToSubMesh.end(); ++i_sm )
+ delete i_sm->second;
myShapeIndexToSubMesh.clear();
+ myIndexToShape.Clear();
// - groups on geometry
set<SMESHDS_GroupBase*>::iterator gr = myGroups.begin();
while ( gr != myGroups.end() ) {
myScript->Renumber( isNodes, startID, deltaID );
}
+//=======================================================================
+//function : Add0DElement
+//purpose :
+//=======================================================================
+SMDS_Mesh0DElement* SMESHDS_Mesh::Add0DElementWithID(int nodeID, int ID)
+{
+ SMDS_Mesh0DElement* anElem = SMDS_Mesh::Add0DElementWithID(nodeID, ID);
+ if (anElem) myScript->Add0DElement(ID, nodeID);
+ return anElem;
+}
+
+SMDS_Mesh0DElement* SMESHDS_Mesh::Add0DElementWithID
+ (const SMDS_MeshNode * node, int ID)
+{
+ return Add0DElementWithID(node->GetID(), ID);
+}
+
+SMDS_Mesh0DElement* SMESHDS_Mesh::Add0DElement(const SMDS_MeshNode * node)
+{
+ SMDS_Mesh0DElement* anElem = SMDS_Mesh::Add0DElement(node);
+ if (anElem) myScript->Add0DElement(anElem->GetID(), node->GetID());
+ return anElem;
+}
+
//=======================================================================
//function :AddEdgeWithID
//purpose :
}
SMDS_MeshEdge* SMESHDS_Mesh::AddEdgeWithID(const SMDS_MeshNode * n1,
- const SMDS_MeshNode * n2,
- int ID)
+ const SMDS_MeshNode * n2,
+ int ID)
{
return AddEdgeWithID(n1->GetID(),
- n2->GetID(),
- ID);
+ n2->GetID(),
+ ID);
}
SMDS_MeshEdge* SMESHDS_Mesh::AddEdge(const SMDS_MeshNode * n1,
- const SMDS_MeshNode * n2)
+ const SMDS_MeshNode * n2)
{
SMDS_MeshEdge* anElem = SMDS_Mesh::AddEdge(n1,n2);
if(anElem) myScript->AddEdge(anElem->GetID(),
- n1->GetID(),
- n2->GetID());
+ n1->GetID(),
+ n2->GetID());
return anElem;
}
}
SMDS_MeshFace* SMESHDS_Mesh::AddFaceWithID(const SMDS_MeshNode * n1,
- const SMDS_MeshNode * n2,
- const SMDS_MeshNode * n3,
- int ID)
+ const SMDS_MeshNode * n2,
+ const SMDS_MeshNode * n3,
+ int ID)
{
return AddFaceWithID(n1->GetID(),
- n2->GetID(),
- n3->GetID(),
- ID);
+ n2->GetID(),
+ n3->GetID(),
+ ID);
}
SMDS_MeshFace* SMESHDS_Mesh::AddFace( const SMDS_MeshNode * n1,
- const SMDS_MeshNode * n2,
- const SMDS_MeshNode * n3)
+ const SMDS_MeshNode * n2,
+ const SMDS_MeshNode * n3)
{
SMDS_MeshFace *anElem = SMDS_Mesh::AddFace(n1, n2, n3);
if(anElem) myScript->AddFace(anElem->GetID(),
- n1->GetID(),
- n2->GetID(),
- n3->GetID());
+ n1->GetID(),
+ n2->GetID(),
+ n3->GetID());
return anElem;
}
}
SMDS_MeshFace* SMESHDS_Mesh::AddFaceWithID(const SMDS_MeshNode * n1,
- const SMDS_MeshNode * n2,
- const SMDS_MeshNode * n3,
- const SMDS_MeshNode * n4,
- int ID)
+ const SMDS_MeshNode * n2,
+ const SMDS_MeshNode * n3,
+ const SMDS_MeshNode * n4,
+ int ID)
{
return AddFaceWithID(n1->GetID(),
- n2->GetID(),
- n3->GetID(),
- n4->GetID(),
- ID);
+ n2->GetID(),
+ n3->GetID(),
+ n4->GetID(),
+ ID);
}
SMDS_MeshFace* SMESHDS_Mesh::AddFace(const SMDS_MeshNode * n1,
- const SMDS_MeshNode * n2,
- const SMDS_MeshNode * n3,
- const SMDS_MeshNode * n4)
+ const SMDS_MeshNode * n2,
+ const SMDS_MeshNode * n3,
+ const SMDS_MeshNode * n4)
{
SMDS_MeshFace *anElem = SMDS_Mesh::AddFace(n1, n2, n3, n4);
if(anElem) myScript->AddFace(anElem->GetID(),
- n1->GetID(),
- n2->GetID(),
- n3->GetID(),
- n4->GetID());
+ n1->GetID(),
+ n2->GetID(),
+ n3->GetID(),
+ n4->GetID());
return anElem;
}
}
SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
- const SMDS_MeshNode * n2,
- const SMDS_MeshNode * n3,
- const SMDS_MeshNode * n4,
- int ID)
+ const SMDS_MeshNode * n2,
+ const SMDS_MeshNode * n3,
+ const SMDS_MeshNode * n4,
+ int ID)
{
return AddVolumeWithID(n1->GetID(),
- n2->GetID(),
- n3->GetID(),
- n4->GetID(),
- ID);
+ n2->GetID(),
+ n3->GetID(),
+ n4->GetID(),
+ ID);
}
SMDS_MeshVolume* SMESHDS_Mesh::AddVolume(const SMDS_MeshNode * n1,
- const SMDS_MeshNode * n2,
- const SMDS_MeshNode * n3,
- const SMDS_MeshNode * n4)
+ const SMDS_MeshNode * n2,
+ const SMDS_MeshNode * n3,
+ const SMDS_MeshNode * n4)
{
SMDS_MeshVolume *anElem = SMDS_Mesh::AddVolume(n1, n2, n3, n4);
if(anElem) myScript->AddVolume(anElem->GetID(),
- n1->GetID(),
- n2->GetID(),
- n3->GetID(),
- n4->GetID());
+ n1->GetID(),
+ n2->GetID(),
+ n3->GetID(),
+ n4->GetID());
return anElem;
}
}
SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
- const SMDS_MeshNode * n2,
- const SMDS_MeshNode * n3,
- const SMDS_MeshNode * n4,
- const SMDS_MeshNode * n5,
- int ID)
+ const SMDS_MeshNode * n2,
+ const SMDS_MeshNode * n3,
+ const SMDS_MeshNode * n4,
+ const SMDS_MeshNode * n5,
+ int ID)
{
return AddVolumeWithID(n1->GetID(),
- n2->GetID(),
- n3->GetID(),
- n4->GetID(),
- n5->GetID(),
- ID);
+ n2->GetID(),
+ n3->GetID(),
+ n4->GetID(),
+ n5->GetID(),
+ ID);
}
SMDS_MeshVolume* SMESHDS_Mesh::AddVolume(const SMDS_MeshNode * n1,
- const SMDS_MeshNode * n2,
- const SMDS_MeshNode * n3,
- const SMDS_MeshNode * n4,
- const SMDS_MeshNode * n5)
+ const SMDS_MeshNode * n2,
+ const SMDS_MeshNode * n3,
+ const SMDS_MeshNode * n4,
+ const SMDS_MeshNode * n5)
{
SMDS_MeshVolume *anElem = SMDS_Mesh::AddVolume(n1, n2, n3, n4, n5);
if(anElem) myScript->AddVolume(anElem->GetID(),
- n1->GetID(),
- n2->GetID(),
- n3->GetID(),
- n4->GetID(),
- n5->GetID());
+ n1->GetID(),
+ n2->GetID(),
+ n3->GetID(),
+ n4->GetID(),
+ n5->GetID());
return anElem;
}
}
SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
- const SMDS_MeshNode * n2,
- const SMDS_MeshNode * n3,
- const SMDS_MeshNode * n4,
- const SMDS_MeshNode * n5,
- const SMDS_MeshNode * n6,
- int ID)
+ const SMDS_MeshNode * n2,
+ const SMDS_MeshNode * n3,
+ const SMDS_MeshNode * n4,
+ const SMDS_MeshNode * n5,
+ const SMDS_MeshNode * n6,
+ int ID)
{
return AddVolumeWithID(n1->GetID(),
- n2->GetID(),
- n3->GetID(),
- n4->GetID(),
- n5->GetID(),
- n6->GetID(),
- ID);
+ n2->GetID(),
+ n3->GetID(),
+ n4->GetID(),
+ n5->GetID(),
+ n6->GetID(),
+ ID);
}
SMDS_MeshVolume* SMESHDS_Mesh::AddVolume(const SMDS_MeshNode * n1,
- const SMDS_MeshNode * n2,
- const SMDS_MeshNode * n3,
- const SMDS_MeshNode * n4,
- const SMDS_MeshNode * n5,
- const SMDS_MeshNode * n6)
+ const SMDS_MeshNode * n2,
+ const SMDS_MeshNode * n3,
+ const SMDS_MeshNode * n4,
+ const SMDS_MeshNode * n5,
+ const SMDS_MeshNode * n6)
{
SMDS_MeshVolume *anElem = SMDS_Mesh::AddVolume(n1, n2, n3, n4, n5, n6);
if(anElem) myScript->AddVolume(anElem->GetID(),
- n1->GetID(),
- n2->GetID(),
- n3->GetID(),
- n4->GetID(),
- n5->GetID(),
- n6->GetID());
+ n1->GetID(),
+ n2->GetID(),
+ n3->GetID(),
+ n4->GetID(),
+ n5->GetID(),
+ n6->GetID());
return anElem;
}
}
SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
- const SMDS_MeshNode * n2,
- const SMDS_MeshNode * n3,
- const SMDS_MeshNode * n4,
- const SMDS_MeshNode * n5,
- const SMDS_MeshNode * n6,
- const SMDS_MeshNode * n7,
- const SMDS_MeshNode * n8,
- int ID)
+ const SMDS_MeshNode * n2,
+ const SMDS_MeshNode * n3,
+ const SMDS_MeshNode * n4,
+ const SMDS_MeshNode * n5,
+ const SMDS_MeshNode * n6,
+ const SMDS_MeshNode * n7,
+ const SMDS_MeshNode * n8,
+ int ID)
{
return AddVolumeWithID(n1->GetID(),
- n2->GetID(),
- n3->GetID(),
- n4->GetID(),
- n5->GetID(),
- n6->GetID(),
- n7->GetID(),
- n8->GetID(),
- ID);
+ n2->GetID(),
+ n3->GetID(),
+ n4->GetID(),
+ n5->GetID(),
+ n6->GetID(),
+ n7->GetID(),
+ n8->GetID(),
+ ID);
}
SMDS_MeshVolume* SMESHDS_Mesh::AddVolume(const SMDS_MeshNode * n1,
- const SMDS_MeshNode * n2,
- const SMDS_MeshNode * n3,
- const SMDS_MeshNode * n4,
- const SMDS_MeshNode * n5,
- const SMDS_MeshNode * n6,
- const SMDS_MeshNode * n7,
- const SMDS_MeshNode * n8)
+ const SMDS_MeshNode * n2,
+ const SMDS_MeshNode * n3,
+ const SMDS_MeshNode * n4,
+ const SMDS_MeshNode * n5,
+ const SMDS_MeshNode * n6,
+ const SMDS_MeshNode * n7,
+ const SMDS_MeshNode * n8)
{
SMDS_MeshVolume *anElem = SMDS_Mesh::AddVolume(n1, n2, n3, n4, n5, n6, n7, n8);
if(anElem) myScript->AddVolume(anElem->GetID(),
- n1->GetID(),
- n2->GetID(),
- n3->GetID(),
- n4->GetID(),
- n5->GetID(),
- n6->GetID(),
- n7->GetID(),
- n8->GetID());
+ n1->GetID(),
+ n2->GetID(),
+ n3->GetID(),
+ n4->GetID(),
+ n5->GetID(),
+ n6->GetID(),
+ n7->GetID(),
+ n8->GetID());
return anElem;
}
}
}
+ const bool deleted=true;
+
// Rm from sub-meshes
// Element should belong to only one sub-mesh
map<int,SMESHDS_SubMesh*>::iterator SubIt = theSubMeshes.begin();
{
bool removed = false;
if ( isNode )
- removed = (*SubIt).second->RemoveNode( static_cast<const SMDS_MeshNode*> (*elIt) );
+ removed = (*SubIt).second->RemoveNode( static_cast<const SMDS_MeshNode*> (*elIt), deleted );
else
- removed = (*SubIt).second->RemoveElement( *elIt );
+ removed = (*SubIt).second->RemoveElement( *elIt, deleted );
if (removed)
{
//=======================================================================
void SMESHDS_Mesh::RemoveNode(const SMDS_MeshNode * n)
{
+ if ( n->NbInverseElements() == 0 && !(hasConstructionEdges() || hasConstructionFaces()))
+ {
+ SMESHDS_SubMesh* subMesh=0;
+ map<int,SMESHDS_SubMesh*>::iterator SubIt =
+ myShapeIndexToSubMesh.find( n->GetPosition()->GetShapeId() );
+ if ( SubIt != myShapeIndexToSubMesh.end() )
+ subMesh = SubIt->second;
+ else
+ SubIt = myShapeIndexToSubMesh.begin();
+ for ( ; !subMesh && SubIt != myShapeIndexToSubMesh.end(); SubIt++ )
+ if (!SubIt->second->IsComplexSubmesh() && SubIt->second->Contains( n ))
+ subMesh = SubIt->second;
+
+ RemoveFreeNode( n, subMesh, true);
+ return;
+ }
+
myScript->RemoveNode(n->GetID());
list<const SMDS_MeshElement *> removedElems;
// Rm from sub-mesh
// Node should belong to only one sub-mesh
if( subMesh )
- subMesh->RemoveNode(n);
+ subMesh->RemoveNode(n,/*deleted=*/false);
SMDS_Mesh::RemoveFreeElement(n);
}
RemoveNode( static_cast<const SMDS_MeshNode*>( elt ));
return;
}
+ if (!hasConstructionEdges() && !hasConstructionFaces())
+ {
+ SMESHDS_SubMesh* subMesh=0;
+ map<int,SMESHDS_SubMesh*>::iterator SubIt = myShapeIndexToSubMesh.begin();
+ for ( ; !subMesh && SubIt != myShapeIndexToSubMesh.end(); SubIt++ )
+ if (!SubIt->second->IsComplexSubmesh() && SubIt->second->Contains( elt ))
+ subMesh = SubIt->second;
+ RemoveFreeElement( elt, subMesh, true);
+ return;
+ }
+
myScript->RemoveElement(elt->GetID());
list<const SMDS_MeshElement *> removedElems;
// Rm from sub-mesh
// Element should belong to only one sub-mesh
if( subMesh )
- subMesh->RemoveElement(elt);
+ subMesh->RemoveElement(elt, /*deleted=*/false);
SMDS_Mesh::RemoveFreeElement(elt);
}
map<int,SMESHDS_SubMesh*>::iterator it =
myShapeIndexToSubMesh.find( aNode->GetPosition()->GetShapeId() );
if ( it != myShapeIndexToSubMesh.end() )
- it->second->RemoveNode( aNode );
+ it->second->RemoveNode( aNode, /*deleted=*/false );
}
}
map<int,SMESHDS_SubMesh*>::iterator it = myShapeIndexToSubMesh.find( Index );
if ( it != myShapeIndexToSubMesh.end() )
if ( elem->GetType() == SMDSAbs_Node )
- it->second->RemoveNode( static_cast<const SMDS_MeshNode* >( elem ));
+ it->second->RemoveNode( static_cast<const SMDS_MeshNode* >( elem ), /*deleted=*/false );
else
- it->second->RemoveElement( elem );
+ it->second->RemoveElement( elem, /*deleted=*/false );
}
//=======================================================================
//=======================================================================
TopoDS_Shape SMESHDS_Mesh::ShapeToMesh() const
{
- return myShape;
+ return myShape;
}
//=======================================================================
//=======================================================================
SMESHDS_Script* SMESHDS_Mesh::GetScript()
{
- return myScript;
+ return myScript;
}
//=======================================================================
//=======================================================================
void SMESHDS_Mesh::ClearScript()
{
- myScript->Clear();
+ myScript->Clear();
}
//=======================================================================
//=======================================================================
bool SMESHDS_Mesh::HasMeshElements(const TopoDS_Shape & S)
{
- if (myShape.IsNull()) MESSAGE("myShape is NULL");
- int Index = myIndexToShape.FindIndex(S);
- return myShapeIndexToSubMesh.find(Index)!=myShapeIndexToSubMesh.end();
+ if (myShape.IsNull()) MESSAGE("myShape is NULL");
+ int Index = myIndexToShape.FindIndex(S);
+ return myShapeIndexToSubMesh.find(Index)!=myShapeIndexToSubMesh.end();
}
//=======================================================================
//=======================================================================
const TopoDS_Shape& SMESHDS_Mesh::IndexToShape(int ShapeIndex) const
{
- return myIndexToShape.FindKey(ShapeIndex);
+ return myIndexToShape.FindKey(ShapeIndex);
}
//=======================================================================
{
SMDS_MeshEdge* anElem = SMDS_Mesh::AddEdge(n1,n2,n12);
if(anElem) myScript->AddEdge(anElem->GetID(),
- n1->GetID(),
- n2->GetID(),
+ n1->GetID(),
+ n2->GetID(),
n12->GetID());
return anElem;
}
int ID)
{
return AddEdgeWithID(n1->GetID(),
- n2->GetID(),
+ n2->GetID(),
n12->GetID(),
- ID);
+ ID);
}
{
SMDS_MeshFace *anElem = SMDS_Mesh::AddFace(n1,n2,n3,n12,n23,n31);
if(anElem) myScript->AddFace(anElem->GetID(),
- n1->GetID(), n2->GetID(), n3->GetID(),
+ n1->GetID(), n2->GetID(), n3->GetID(),
n12->GetID(), n23->GetID(), n31->GetID());
return anElem;
}
{
return AddFaceWithID(n1->GetID(), n2->GetID(), n3->GetID(),
n12->GetID(), n23->GetID(), n31->GetID(),
- ID);
+ ID);
}
{
SMDS_MeshFace *anElem = SMDS_Mesh::AddFace(n1,n2,n3,n4,n12,n23,n34,n41);
if(anElem) myScript->AddFace(anElem->GetID(),
- n1->GetID(), n2->GetID(), n3->GetID(), n4->GetID(),
+ n1->GetID(), n2->GetID(), n3->GetID(), n4->GetID(),
n12->GetID(), n23->GetID(), n34->GetID(), n41->GetID());
return anElem;
}
{
return AddFaceWithID(n1->GetID(), n2->GetID(), n3->GetID(), n4->GetID(),
n12->GetID(), n23->GetID(), n34->GetID(), n41->GetID(),
- ID);
+ ID);
}
{
SMDS_MeshVolume *anElem = SMDS_Mesh::AddVolume(n1,n2,n3,n4,n12,n23,n31,n14,n24,n34);
if(anElem) myScript->AddVolume(anElem->GetID(),
- n1->GetID(), n2->GetID(), n3->GetID(), n4->GetID(),
- n12->GetID(), n23->GetID(), n31->GetID(),
+ n1->GetID(), n2->GetID(), n3->GetID(), n4->GetID(),
+ n12->GetID(), n23->GetID(), n31->GetID(),
n14->GetID(), n24->GetID(), n34->GetID());
return anElem;
}
if(anElem) myScript->AddVolume(ID,n1,n2,n3,n4,n12,n23,n31,n14,n24,n34);
return anElem;
}
-
+
//=======================================================================
//function : AddVolumeWithID
//purpose : 2d order tetrahedron of 10 nodes
n15,n25,n35,n45);
return anElem;
}
-
+
//=======================================================================
//function : AddVolumeWithID
//purpose : 2d order pyramid of 13 nodes
n45,n56,n64,n14,n25,n36);
return anElem;
}
-
+
//=======================================================================
//function : AddVolumeWithID
//purpose : 2d order Pentahedron with 15 nodes
n56,n67,n78,n85,n15,n26,n37,n48);
return anElem;
}
-
+
//=======================================================================
//function : AddVolumeWithID
//purpose : 2d order Hexahedrons with 20 nodes