From 09607afb276900e0f0a7b95a01751fe628020a39 Mon Sep 17 00:00:00 2001 From: eap Date: Wed, 7 Mar 2018 13:47:57 +0300 Subject: [PATCH] [GPUSPHGUI] fix errors relating to eCustomControl + offset + Fix SMESH_Gen_i::Concatenate() --- src/SMESHGUI/SMESHGUI.cxx | 4 +++- src/SMESHGUI/SMESHGUI_Selection.cxx | 1 + src/SMESHUtils/SMESH_Offset.cxx | 16 +++++++++------- src/SMESH_I/SMESH_Gen_i.cxx | 9 ++++++--- 4 files changed, 19 insertions(+), 11 deletions(-) diff --git a/src/SMESHGUI/SMESHGUI.cxx b/src/SMESHGUI/SMESHGUI.cxx index 54cd3a3a1..62582e014 100644 --- a/src/SMESHGUI/SMESHGUI.cxx +++ b/src/SMESHGUI/SMESHGUI.cxx @@ -1700,7 +1700,9 @@ namespace 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 ) diff --git a/src/SMESHGUI/SMESHGUI_Selection.cxx b/src/SMESHGUI/SMESHGUI_Selection.cxx index 5eb6dba66..8d8f46a27 100644 --- a/src/SMESHGUI/SMESHGUI_Selection.cxx +++ b/src/SMESHGUI/SMESHGUI_Selection.cxx @@ -389,6 +389,7 @@ QString SMESHGUI_Selection::controlMode( int ind ) const case SMESH_Actor::eCoincidentElems1D: mode = "eCoincidentElems1D"; break; case SMESH_Actor::eCoincidentElems2D: mode = "eCoincidentElems2D"; break; case SMESH_Actor::eCoincidentElems3D: mode = "eCoincidentElems3D"; break; + case SMESH_Actor::eCustomControl: mode = "eCustomControl"; break; default:break; } } diff --git a/src/SMESHUtils/SMESH_Offset.cxx b/src/SMESHUtils/SMESH_Offset.cxx index f571535f2..efd648a74 100644 --- a/src/SMESHUtils/SMESH_Offset.cxx +++ b/src/SMESHUtils/SMESH_Offset.cxx @@ -40,7 +40,7 @@ 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; @@ -575,7 +575,7 @@ namespace 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(), @@ -597,7 +597,7 @@ namespace 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 ); @@ -682,9 +682,10 @@ namespace 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() ) @@ -1393,7 +1394,8 @@ namespace 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 && diff --git a/src/SMESH_I/SMESH_Gen_i.cxx b/src/SMESH_I/SMESH_Gen_i.cxx index e8cd0a3df..bdaaa515f 100644 --- a/src/SMESH_I/SMESH_Gen_i.cxx +++ b/src/SMESH_I/SMESH_Gen_i.cxx @@ -2485,10 +2485,13 @@ SMESH_Gen_i::ConcatenateCommon(const SMESH::ListOfIDSources& theMeshesArray, // 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();