ActionControl.Bind( SMESHOp::OpOverConstrainedVolume, SMESH_Actor::eOverConstrainedVolume );
ActionControl.Bind( SMESHOp::OpEqualVolume, SMESH_Actor::eCoincidentElems3D );
- return theReversed ? ActionControl.Find2( theID ) : ActionControl.Find1( theID );
+ if ( theReversed )
+ return ActionControl.IsBound2( theID ) ? ActionControl.Find2( theID ) : 0;
+ return ActionControl.IsBound1( theID ) ? ActionControl.Find1( theID ) : 0;
}
void Control( int theCommandID )
namespace
{
- const size_t theMaxNbFaces = 256; // max number of faces sharing a node
+ const int theMaxNbFaces = 256; // max number of faces sharing a node
typedef NCollection_DataMap< Standard_Address, const SMDS_MeshNode* > TNNMap;
typedef NCollection_Map< SMESH_Link, SMESH_Link > TLinkMap;
TIDSortedElemSet elemSet, avoidSet;
int iFace = 0;
const SMDS_MeshElement* f;
- for ( ; faceIt->more(); faceIt->next() )
+ for ( ; faceIt->more() && iFace < theMaxNbFaces; faceIt->next() )
{
avoidSet.insert( faces[ iFace ].myFace );
f = SMESH_MeshAlgos::FindFaceInSet( theNewNode, faces[ iFace ].myNode2.Node(),
faces[ iFace ].SetNodes( i0, i1 );
faces[ iFace ].SetNormal( theFaceNormals );
}
- int nbFaces = Min( iFace + 1, (int)theMaxNbFaces );
+ int nbFaces = iFace + 1;
theNewPos.SetCoord( 0, 0, 0 );
gp_XYZ oldXYZ = SMESH_NodeXYZ( theNewNode );
dot *= -1;
if ( dot * theSign < 0 )
{
- gp_XYZ p1 = oldXYZ + faces[ i ].Norm() * theOffset;
- gp_XYZ p2 = oldXYZ + faces[ iPrev ].Norm() * theOffset;
- useOneNormal = ( p1 - p2 ).SquareModulus() > theTol * theTol;
+ useOneNormal = true;
+ // gp_XYZ p1 = oldXYZ + faces[ i ].Norm() * theOffset;
+ // gp_XYZ p2 = oldXYZ + faces[ iPrev ].Norm() * theOffset;
+ // useOneNormal = ( p1 - p2 ).SquareModulus() > theTol * theTol;
}
}
if ( useOneNormal && theNewNode->isMarked() )
for ( int is2nd = 0; is2nd < 2; ++is2nd )
{
const SMDS_MeshElement* f = is2nd ? myFace1 : myFace2;
- const CutFace& cf = myCutFaces.Added( CutFace( is2nd ? myFace2 : myFace1 ));
+ if ( !f ) continue;
+ const CutFace& cf = myCutFaces.Added( CutFace( is2nd ? myFace2 : myFace1 ));
for ( size_t i = 0; i < cf.myLinks.size(); ++i )
if ( cf.myLinks[i].myFace == f &&
//cf.myLinks[i].myIndex != EdgePart::_COPLANAR &&
// assure that IDs increments by one during iteration
::SMESH_Mesh& initLocMesh = initImpl->GetImpl();
- SMESHDS_Mesh* initMeshDS = initLocMesh.GetMeshDS();
- if ( initMeshDS->MaxNodeID() != initMeshDS->NbNodes() ||
- initMeshDS->MaxElementID() != initMeshDS->NbElements() )
+ SMESHDS_Mesh* initMeshDS = initLocMesh.GetMeshDS();
+ if ( initMeshDS->MaxNodeID() > initMeshDS->NbNodes() ||
+ initMeshDS->MaxElementID() > initMeshDS->NbElements() )
+ {
+ initMeshDS->Modified();
initMeshDS->CompactMesh();
+ }
// remember nb of elements before filling in
SMESH::long_array_var prevState = newMesh->GetNbElementsByType();