Salome HOME
projects
/
modules
/
smesh.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
52609: Geometric progression works wrong with "Reversed edges" option used + Propagation
[modules/smesh.git]
/
src
/
Controls
/
SMESH_Controls.cxx
diff --git
a/src/Controls/SMESH_Controls.cxx
b/src/Controls/SMESH_Controls.cxx
index 9cfbc313ea2de35b00092cfce6a22dfdcc5972cd..42c668044def6d2b04df05bb2536ab948c218c0e 100644
(file)
--- a/
src/Controls/SMESH_Controls.cxx
+++ b/
src/Controls/SMESH_Controls.cxx
@@
-4087,39
+4087,39
@@
bool ElementsOnShape::IsSatisfy (long elemId)
if ( !elem || myClassifiers.empty() )
return false;
if ( !elem || myClassifiers.empty() )
return false;
- for ( size_t i = 0; i < myClassifiers.size(); ++i )
+ bool isSatisfy = myAllNodesFlag, isNodeOut;
+
+ gp_XYZ centerXYZ (0, 0, 0);
+
+ SMDS_ElemIteratorPtr aNodeItr = elem->nodesIterator();
+ while (aNodeItr->more() && (isSatisfy == myAllNodesFlag))
{
{
- SMDS_ElemIteratorPtr aNodeItr = elem->nodesIterator();
- bool isSatisfy = myAllNodesFlag, isNodeOut;
-
- gp_XYZ centerXYZ (0, 0, 0);
+ SMESH_TNodeXYZ aPnt( aNodeItr->next() );
+ centerXYZ += aPnt;
- while (aNodeItr->more() && (isSatisfy == myAllNodesFlag))
+ isNodeOut = true;
+ if ( !getNodeIsOut( aPnt._node, isNodeOut ))
{
{
- const SMDS_MeshNode* n = (const SMDS_MeshNode*) aNodeItr->next();
- if ( !getNodeIsOut( n, isNodeOut ))
- {
- SMESH_TNodeXYZ aPnt( n );
- centerXYZ += aPnt;
+ for ( size_t i = 0; i < myClassifiers.size() && isNodeOut; ++i )
isNodeOut = myClassifiers[i]->IsOut( aPnt );
isNodeOut = myClassifiers[i]->IsOut( aPnt );
- setNodeIsOut( n, isNodeOut );
- }
- isSatisfy = !isNodeOut;
+
+ setNodeIsOut( aPnt._node, isNodeOut );
}
}
+ isSatisfy = !isNodeOut;
+ }
- // Check the center point for volumes MantisBug 0020168
- if (isSatisfy &&
- myAllNodesFlag &&
- myClassifiers[i]->ShapeType() == TopAbs_SOLID)
- {
- centerXYZ /= elem->NbNodes();
+ // Check the center point for volumes MantisBug 0020168
+ if (isSatisfy &&
+ myAllNodesFlag &&
+ myClassifiers[0]->ShapeType() == TopAbs_SOLID)
+ {
+ centerXYZ /= elem->NbNodes();
+ isSatisfy = false;
+ for ( size_t i = 0; i < myClassifiers.size() && !isSatisfy; ++i )
isSatisfy = ! myClassifiers[i]->IsOut( centerXYZ );
isSatisfy = ! myClassifiers[i]->IsOut( centerXYZ );
- }
- if ( isSatisfy )
- return true;
}
}
- return
false
;
+ return
isSatisfy
;
}
TopAbs_ShapeEnum ElementsOnShape::TClassifier::ShapeType() const
}
TopAbs_ShapeEnum ElementsOnShape::TClassifier::ShapeType() const