if ( path.SetCutAtCorner( polySeg.myNode1[ iP ], fIt->next(), plnNorm, plnOrig ))
{
if (( path.myDot1 * path.myDot2 != 0 ) ||
- ( nodes.insert( path.myNode1._node ).second &&
- nodes.insert( path.myNode2._node ).second ))
+ ( nodes.insert( path.myDot1 == 0 ? path.myNode1._node : path.myNode2._node ).second ))
paths.push_back( path );
}
}
throw SALOME_Exception(LOCALIZED( "Infinite loop in MakePolyLine()"));
}
- return;
+ if ( myPaths[ iSeg ].myPoints.empty() )
+ throw SALOME_Exception( SMESH_Comment("Can't find a full path for PolySegment #") << iSeg );
} // PolyPathCompute::Compute()
gp_XYZ pMid = 0.5 * ( p1 + p2 );
const SMDS_MeshElement* face;
polySeg.myMidProjPoint = searcher->Project( pMid, SMDSAbs_Face, &face );
+ polySeg.myVector = polySeg.myMidProjPoint.XYZ() - pMid;
- if ( polySeg.myMidProjPoint.Distance( pMid ) < Precision::Confusion() )
- {
- SMESH_MeshAlgos::FaceNormal( face, const_cast< gp_XYZ& >( polySeg.myVector.XYZ() ));
- polySeg.myMidProjPoint = pMid + polySeg.myVector.XYZ() * ( p1 - p2 ).Modulus() * planarCoef;
- }
- else
+ gp_XYZ faceNorm;
+ SMESH_MeshAlgos::FaceNormal( face, faceNorm );
+
+ if ( polySeg.myVector.Magnitude() < Precision::Confusion() ||
+ polySeg.myVector * faceNorm < Precision::Confusion() )
{
- polySeg.myVector = polySeg.myMidProjPoint.XYZ() - pMid;
+ polySeg.myVector = faceNorm;
+ polySeg.myMidProjPoint = pMid + faceNorm * ( p1 - p2 ).Modulus() * planarCoef;
}
}
else
std::vector<int> getSelected( const char* Mesh_Entry );
std::vector<std::pair<int,int> > getSelectedEdgeOfCell( const char* Mesh_Entry );
- void setSelectionMode( SelectionMode selectionMode);
- std::vector<int> getSelected( const char* Mesh_Entry );
- std::vector<std::pair<int,int> > getSelectedEdgeOfCell( const char* Mesh_Entry );
-
// --------------------- for the test purposes -----------------------
SelectionMode getSelectionMode();
void select( const char *id, std::vector<int> ids, bool append = false );