Version: 9.16.0
SMESH_MeshAlgos.hxx
Go to the documentation of this file.
1// Copyright (C) 2007-2026 CEA, EDF, OPEN CASCADE
2//
3// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5//
6// This library is free software; you can redistribute it and/or
7// modify it under the terms of the GNU Lesser General Public
8// License as published by the Free Software Foundation; either
9// version 2.1 of the License, or (at your option) any later version.
10//
11// This library is distributed in the hope that it will be useful,
12// but WITHOUT ANY WARRANTY; without even the implied warranty of
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14// Lesser General Public License for more details.
15//
16// You should have received a copy of the GNU Lesser General Public
17// License along with this library; if not, write to the Free Software
18// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19//
20// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21//
22// File : SMESH_MeshAlgos.hxx
23// Created : Tue Apr 30 18:00:36 2013
24// Author : Edward AGAPOV (eap)
25
26// Initially this file held some low level algorithms extracted from SMESH_MeshEditor
27// to make them accessible from Controls package, and more
28
29
30#ifndef __SMESH_MeshAlgos_HXX__
31#define __SMESH_MeshAlgos_HXX__
32
33#include "SMESH_Utils.hxx"
34
36#include "SMDS_ElemIterator.hxx"
37#include "SMESH_TypeDefs.hxx"
38
39#include <TopAbs_State.hxx>
40#include <gp_Pnt.hxx>
41#include <gp_Vec.hxx>
42
43#include <vector>
44
45class Bnd_B3d;
46class gp_Ax1;
47class SMDS_Mesh;
49class SMDS_MeshGroup;
50class SMDS_MeshNode;
51
52//=======================================================================
56//=======================================================================
57
59{
60 virtual const SMDS_MeshNode* FindClosestTo( const gp_Pnt& pnt ) = 0;
61 virtual void MoveNode( const SMDS_MeshNode* node, const gp_Pnt& toPnt ) = 0;
62 virtual int FindNearPoint(const gp_Pnt& point,
63 const double tolerance,
64 std::vector< const SMDS_MeshNode* >& foundNodes) = 0;
66};
67
68//=======================================================================
72//=======================================================================
73
75{
82 virtual int FindElementsByPoint(const gp_Pnt& point,
84 std::vector< const SMDS_MeshElement* >& foundElems) = 0;
88 virtual const SMDS_MeshElement* FindClosestTo( const gp_Pnt& point,
89 SMDSAbs_ElementType type) = 0;
93 virtual void GetElementsNearLine( const gp_Ax1& line,
95 std::vector< const SMDS_MeshElement* >& foundElems) = 0;
99 virtual void GetElementsInSphere( const gp_XYZ& center,
100 const double radius,
102 std::vector< const SMDS_MeshElement* >& foundElems) = 0;
106 virtual void GetElementsInBox( const Bnd_B3d& box,
108 std::vector< const SMDS_MeshElement* >& foundElems) = 0;
112 virtual TopAbs_State GetPointState(const gp_Pnt& point) = 0;
113
118 virtual gp_XYZ Project(const gp_Pnt& point,
120 const SMDS_MeshElement** closestFace= 0) = 0;
121
122 virtual ~SMESH_ElementSearcher();
123};
124
126{
132
135
141 double tolerance=-1.);
145 double tolerance=-1. );
146
147
152 bool IsOut( const SMDS_MeshElement* element, const gp_Pnt& point, double tol );
153
155 double GetDistance( const SMDS_MeshElement* elem, const gp_Pnt& point, gp_XYZ* closestPnt = 0 );
156
158 double GetDistance( const SMDS_MeshEdge* edge, const gp_Pnt& point, gp_XYZ* closestPnt = 0 );
159
161 double GetDistance( const SMDS_MeshFace* face, const gp_Pnt& point, gp_XYZ* closestPnt = 0 );
162
164 double GetDistance( const SMDS_MeshVolume* volume, const gp_Pnt& point, gp_XYZ* closestPnt = 0 );
165
167 void GetBarycentricCoords( const gp_XY& point,
168 const gp_XY& t0, const gp_XY& t1, const gp_XY& t2,
169 double & bc0, double & bc1);
170
174 bool IntersectRayVolume( const gp_Ax1& ray, const double rayLen,
175 const SMDS_MeshElement* vol,
176 double & tMin, double & tMax,
177 int & iFacetMin, int & iFacetMax);
186 const SMDS_MeshNode* n2,
187 const TIDSortedElemSet& elemSet,
188 const TIDSortedElemSet& avoidSet,
189 int* i1=0,
190 int* i2=0);
195 bool FaceNormal(const SMDS_MeshElement* F, gp_XYZ& normal, bool normalized=true);
196
201 int NbCommonNodes(const SMDS_MeshElement* e1,
202 const SMDS_MeshElement* e2);
207 std::vector< const SMDS_MeshNode*> GetCommonNodes(const SMDS_MeshElement* e1,
208 const SMDS_MeshElement* e2);
214 std::vector< const SMDS_MeshNode*> * neibors = nullptr );
220 bool IsRightOrder( const SMDS_MeshElement* face,
221 const SMDS_MeshNode* node0,
222 const SMDS_MeshNode* node1 );
223
224 typedef std::vector< std::vector< const SMDS_MeshElement* > > TElemGroupVector;
225 typedef std::vector< std::vector< const SMDS_MeshNode* > > TNodeGroupVector;
235 TElemGroupVector& edgeGroups,
236 TNodeGroupVector& nodeGroups,
237 const SMDS_MeshNode* startNode = 0 );
238
243 template< class ElemIter >
244 void MarkElems( ElemIter it, const bool isMarked )
245 {
246 while ( it->more() ) it->next()->setIsMarked( isMarked );
247 }
251 template< class ElemIter >
252 void MarkElems( ElemIter it, ElemIter end, const bool isMarked )
253 {
254 for ( ; it != end; ++it ) (*it)->setIsMarked( isMarked );
255 }
259 template< class ElemIter >
260 void MarkElemNodes( ElemIter it, const bool isMarked, const bool markElem = false )
261 {
262 if ( markElem )
263 while ( it->more() ) {
264 const SMDS_MeshElement* e = it->next();
265 e->setIsMarked( isMarked );
266 MarkElems( e->nodesIterator(), isMarked );
267 }
268 else
269 while ( it->more() )
270 MarkElems( it->next()->nodesIterator(), isMarked );
271 }
275 template< class ElemIter >
276 void MarkElemNodes( ElemIter it, ElemIter end, const bool isMarked, const bool markElem = false )
277 {
278 if ( markElem )
279 for ( ; it != end; ++it ) {
280 (*it)->setIsMarked( isMarked );
281 MarkElems( (*it)->nodesIterator(), isMarked );
282 }
283 else
284 for ( ; it != end; ++it )
285 MarkElems( (*it)->nodesIterator(), isMarked );
286 }
287
288 // 2 nodes + optional medium node
289 struct Edge
290 {
294 };
295
301 std::vector< Edge > FindSharpEdges( SMDS_Mesh* mesh,
302 double angle,
303 bool addExisting );
304
309 std::vector< std::vector< const SMDS_MeshElement* > >
310 SeparateFacesByEdges( SMDS_Mesh* mesh, const std::vector< Edge >& edges );
311
312
313 typedef std::vector<const SMDS_MeshNode*> TFreeBorder;
314 typedef std::vector<TFreeBorder> TFreeBorderVec;
316 {
317 int _border; // border index within a TFreeBorderVec
318 int _node1; // node index within the border-th TFreeBorder
321 };
322 typedef std::vector<TFreeBorderPart> TCoincidentGroup;
323 typedef std::vector<TCoincidentGroup> TCoincidentGroupVec;
325 {
326 TFreeBorderVec _borders; // nodes of all free borders
327 TCoincidentGroupVec _coincidentGroups; // groups of coincident parts of borders
328 };
329
337 double tolerance,
338 CoincidentFreeBorders & foundFreeBordes);
339 // Implemented in ./SMESH_FreeBorders.cxx
340
346 void FindFreeBorders(SMDS_Mesh& mesh,
347 TFreeBorderVec & foundFreeBordes,
348 const bool closedOnly,
349 bool* isManifold = 0,
350 bool* isGoodOri = 0);
351 // Implemented in ./SMESH_FreeBorders.cxx
352
357 void FillHole(const TFreeBorder & freeBorder,
358 SMDS_Mesh& mesh,
359 std::vector<const SMDS_MeshElement*>& newFaces);
360 // Implemented in ./SMESH_FillHole.cxx
361
366 void DeMerge(const SMDS_MeshElement* elem,
367 std::vector< const SMDS_MeshNode* >& newNodes,
368 std::vector< const SMDS_MeshNode* >& noMergeNodes);
369 // Implemented in SMESH_DeMerge.cxx
370
371
372 typedef std::vector< std::pair< const SMDS_MeshElement*, int > > TElemIntPairVec;
373 typedef std::vector< std::pair< const SMDS_MeshNode*, int > > TNodeIntPairVec;
384 SMDS_Mesh& mesh,
385 const double offset,
386 const bool theFixIntersections,
387 TElemIntPairVec& new2OldFaces,
388 TNodeIntPairVec& new2OldNodes );
389 // Implemented in ./SMESH_Offset.cxx
390
391
392 //=======================================================================
398 //=======================================================================
399 // implemented in SMESH_Offset.cxx
400
402 {
403 public:
404 Intersector( SMDS_Mesh* mesh, double tol, const std::vector< gp_XYZ >& normals );
405 ~Intersector();
406
408 void Cut( const SMDS_MeshElement* face1,
409 const SMDS_MeshElement* face2,
410 const int nbCommonNodes = -1 );
411
413 // Line ends are accompanied by indices of intersected face edges.
414 // Edge index is <0 if a line end is inside the face.
415 void Cut( const SMDS_MeshElement* face,
416 SMESH_NodeXYZ& lineEnd1,
417 int edgeIndex1,
418 SMESH_NodeXYZ& lineEnd2,
419 int edgeIndex2 );
420
422 // theSign = (-1|1) is used to choose which part of a face cut by another one to remove.
423 // 1 means to remove a part opposite to face normal.
424 // Optionally optimize quality of split faces by edge swapping.
425 void MakeNewFaces( SMESH_MeshAlgos::TElemIntPairVec& theNew2OldFaces,
426 SMESH_MeshAlgos::TNodeIntPairVec& theNew2OldNodes,
427 const double theSign = 1.,
428 const bool theOptimize = false );
429
430 typedef std::vector< SMESH_NodeXYZ > TFace;
431
433 // Return true if the whole face is cut off
434 static bool CutByPlanes(const SMDS_MeshElement* face,
435 const std::vector< gp_Ax1 > & planes,
436 const double tol,
437 std::vector< TFace > & newFaceConnectivity );
438
439 private:
440 struct Algo;
442 };
443
444 //=======================================================================
448 //=======================================================================
449 // Implemented in ./SMESH_Triangulate.cxx
450
452 {
453 public:
454
455 Triangulate(bool optimize=false);
456 ~Triangulate();
457
458 static int GetNbTriangles( const SMDS_MeshElement* face );
459
460 int GetTriangles( const SMDS_MeshElement* face,
461 std::vector< const SMDS_MeshNode*>& nodes);
462 private:
463
464 bool triangulate( std::vector< const SMDS_MeshNode*>& nodes, const size_t nbNodes );
465
466 struct PolyVertex;
467 struct Optimizer;
468 struct Data;
469
472 };
473
474 // structure used in MakePolyLine() to define a cutting plane
476 {
477 // 2 points, each defined as follows:
478 // ( myNode1 && myNode2 ) ==> point is in the middle of an edge defined by two nodes
479 // ( myNode1 && !myNode2 ) ==> point is at myNode1 of a some face
480 // else ==> point is at myXYZ
483 gp_XYZ myXYZ [2];
484
485 // face on which myXYZ projects (found by MakePolyLine())
487
488 // vector on the plane; to use a default plane set vector = (0,0,0)
489 gp_Vec myVector;
490
491 // point returning coordinates of a middle of the two points, projected to mesh
493 };
494 typedef std::vector<PolySegment> TListOfPolySegments;
495
512 // Implemented in ./SMESH_PolyLine.cxx
514 void MakePolyLine( SMDS_Mesh* mesh,
515 TListOfPolySegments& segments,
516 std::vector<const SMDS_MeshElement*>& newEdges,
517 std::vector<const SMDS_MeshNode*>& newNodes,
518 SMDS_MeshGroup* group=0,
519 SMESH_ElementSearcher* searcher=0);
520
526 // Implemented in ./SMESH_Slot.cxx
528 std::vector< Edge > MakeSlot( SMDS_ElemIteratorPtr segmentIt,
529 double width,
530 SMDS_Mesh* mesh,
531 std::vector< SMDS_MeshGroup* > & groupsToUpdate);
532
533} // namespace SMESH_MeshAlgos
534
535#endif
SMDSAbs_ElementType
Type (node, edge, face or volume) of elements.
Definition: SMDSAbs_ElementType.hxx:34
boost::shared_ptr< SMDS_Iterator< const SMDS_MeshElement * > > SMDS_ElemIteratorPtr
Definition: SMDS_ElemIterator.hxx:43
std::set< const SMDS_MeshElement *, TIDCompare > TIDSortedElemSet
Definition: SMESH_TypeDefs.hxx:58
#define SMESHUtils_EXPORT
Definition: SMESH_Utils.hxx:37
IMAP::const_iterator end(const IMAP &m)
Definition: StdMeshers_Projection_2D.cxx:106
Edge mesh element.
Definition: SMDS_MeshEdge.hxx:36
Base class for elements.
Definition: SMDS_MeshElement.hxx:56
virtual void setIsMarked(bool is) const
Mark this element.
Definition: SMDS_MeshElement.cxx:152
virtual SMDS_ElemIteratorPtr nodesIterator() const =0
Mesh face.
Definition: SMDS_MeshFace.hxx:41
Definition: SMDS_MeshGroup.hxx:37
Definition: SMDS_MeshNode.hxx:36
Mesh volume.
Definition: SMDS_MeshVolume.hxx:40
Definition: SMDS_Mesh.hxx:53
Cut faces of a triangular mesh.
Definition: SMESH_MeshAlgos.hxx:402
std::vector< SMESH_NodeXYZ > TFace
Definition: SMESH_MeshAlgos.hxx:430
Algo * myAlgo
Definition: SMESH_MeshAlgos.hxx:441
Divide a mesh face into triangles.
Definition: SMESH_MeshAlgos.hxx:452
Optimizer * _optimizer
Definition: SMESH_MeshAlgos.hxx:471
Data * _data
Definition: SMESH_MeshAlgos.hxx:470
Definition: SMESH_MeshAlgos.hxx:126
void DeMerge(const SMDS_MeshElement *elem, std::vector< const SMDS_MeshNode * > &newNodes, std::vector< const SMDS_MeshNode * > &noMergeNodes)
Find nodes whose merge makes the element invalid.
Definition: SMESH_DeMerge.cxx:163
std::vector< const SMDS_MeshNode * > TFreeBorder
Definition: SMESH_MeshAlgos.hxx:313
SMESH_ElementSearcher * GetElementSearcher(SMDS_Mesh &mesh, double tolerance=-1.)
Return SMESH_ElementSearcher.
Definition: SMESH_MeshAlgos.cxx:2559
SMDS_Mesh * MakeOffset(SMDS_ElemIteratorPtr faceIt, SMDS_Mesh &mesh, const double offset, const bool theFixIntersections, TElemIntPairVec &new2OldFaces, TNodeIntPairVec &new2OldNodes)
Create an offset mesh of given faces.
Definition: SMESH_Offset.cxx:3142
bool IsRightOrder(const SMDS_MeshElement *face, const SMDS_MeshNode *node0, const SMDS_MeshNode *node1)
Return true if node1 encounters first in the face and node2, after.
Definition: SMESH_MeshAlgos.cxx:2319
std::vector< Edge > FindSharpEdges(SMDS_Mesh *mesh, double angle, bool addExisting)
Return sharp edges of faces and non-manifold ones.
Definition: SMESH_MeshAlgos.cxx:1985
bool IntersectRayVolume(const gp_Ax1 &ray, const double rayLen, const SMDS_MeshElement *vol, double &tMin, double &tMax, int &iFacetMin, int &iFacetMax)
Intersect volume by a ray.
Definition: SMESH_MeshAlgos.cxx:2593
std::vector< PolySegment > TListOfPolySegments
Definition: SMESH_MeshAlgos.hxx:494
std::vector< std::vector< const SMDS_MeshElement * > > SeparateFacesByEdges(SMDS_Mesh *mesh, const std::vector< Edge > &edges)
Distribute all faces of the mesh between groups using given edges.
Definition: SMESH_MeshAlgos.cxx:2097
std::vector< TCoincidentGroup > TCoincidentGroupVec
Definition: SMESH_MeshAlgos.hxx:323
bool FaceNormal(const SMDS_MeshElement *F, gp_XYZ &normal, bool normalized=true)
Calculate normal of a mesh face.
Definition: SMESH_MeshAlgos.cxx:2207
void GetBarycentricCoords(const gp_XY &point, const gp_XY &t0, const gp_XY &t1, const gp_XY &t2, double &bc0, double &bc1)
Returns barycentric coordinates of a point within a triangle.
Definition: SMESH_MeshAlgos.cxx:1890
std::vector< const SMDS_MeshNode * > GetCommonNodes(const SMDS_MeshElement *e1, const SMDS_MeshElement *e2)
Return nodes common to two elements.
Definition: SMESH_MeshAlgos.cxx:2253
void FindFreeBorders(SMDS_Mesh &mesh, TFreeBorderVec &foundFreeBordes, const bool closedOnly, bool *isManifold=0, bool *isGoodOri=0)
Returns all or only closed TFreeBorder's.
Definition: SMESH_FreeBorders.cxx:834
void MarkElemNodes(ElemIter it, const bool isMarked, const bool markElem=false)
Mark nodes of elements given by SMDS_Iterator.
Definition: SMESH_MeshAlgos.hxx:260
void Get1DBranches(SMDS_ElemIteratorPtr edgeIt, TElemGroupVector &edgeGroups, TNodeGroupVector &nodeGroups, const SMDS_MeshNode *startNode=0)
Partition given 1D elements into groups of contiguous edges.
Definition: SMESH_MeshAlgos.cxx:2352
const SMDS_MeshElement * FindFaceInSet(const SMDS_MeshNode *n1, const SMDS_MeshNode *n2, const TIDSortedElemSet &elemSet, const TIDSortedElemSet &avoidSet, int *i1=0, int *i2=0)
Return a face having linked nodes n1 and n2 and which is.
Definition: SMESH_MeshAlgos.cxx:1924
bool IsOn2DBoundary(const SMDS_MeshNode *node, std::vector< const SMDS_MeshNode * > *neibors=nullptr)
Return true if a node is on a boundary of 2D mesh.
Definition: SMESH_MeshAlgos.cxx:2270
void MakePolyLine(SMDS_Mesh *mesh, TListOfPolySegments &segments, std::vector< const SMDS_MeshElement * > &newEdges, std::vector< const SMDS_MeshNode * > &newNodes, SMDS_MeshGroup *group=0, SMESH_ElementSearcher *searcher=0)
Create a polyline consisting of 1D mesh elements each lying on a 2D element of the initial mesh.
Definition: SMESH_PolyLine.cxx:618
std::vector< std::vector< const SMDS_MeshElement * > > TElemGroupVector
Definition: SMESH_MeshAlgos.hxx:224
double GetDistance(const SMDS_MeshElement *elem, const gp_Pnt &point, gp_XYZ *closestPnt=0)
Return minimal distance from a point to an element.
Definition: SMESH_MeshAlgos.cxx:1608
std::vector< std::pair< const SMDS_MeshNode *, int > > TNodeIntPairVec
Definition: SMESH_MeshAlgos.hxx:373
std::vector< std::vector< const SMDS_MeshNode * > > TNodeGroupVector
Definition: SMESH_MeshAlgos.hxx:225
void MarkElems(ElemIter it, const bool isMarked)
Mark elements given by SMDS_Iterator.
Definition: SMESH_MeshAlgos.hxx:244
SMESH_NodeSearcher * GetNodeSearcher(SMDS_Mesh &mesh)
Return SMESH_NodeSearcher.
Definition: SMESH_MeshAlgos.cxx:2537
int NbCommonNodes(const SMDS_MeshElement *e1, const SMDS_MeshElement *e2)
Return number of nodes common to two elements.
Definition: SMESH_MeshAlgos.cxx:2238
std::vector< std::pair< const SMDS_MeshElement *, int > > TElemIntPairVec
Definition: SMESH_MeshAlgos.hxx:372
void FindCoincidentFreeBorders(SMDS_Mesh &mesh, double tolerance, CoincidentFreeBorders &foundFreeBordes)
Returns TFreeBorder's coincident within the given tolerance.
Definition: SMESH_FreeBorders.cxx:442
bool IsOut(const SMDS_MeshElement *element, const gp_Pnt &point, double tol)
Return true if the point is IN or ON of the element.
Definition: SMESH_MeshAlgos.cxx:1367
std::vector< TFreeBorderPart > TCoincidentGroup
Definition: SMESH_MeshAlgos.hxx:322
void FillHole(const TFreeBorder &freeBorder, SMDS_Mesh &mesh, std::vector< const SMDS_MeshElement * > &newFaces)
Fill a hole defined by a TFreeBorder with 2D elements.
Definition: SMESH_FillHole.cxx:382
std::vector< Edge > MakeSlot(SMDS_ElemIteratorPtr segmentIt, double width, SMDS_Mesh *mesh, std::vector< SMDS_MeshGroup * > &groupsToUpdate)
Create a slot of given width around given 1D elements lying on a triangle mesh.
Definition: SMESH_Slot.cxx:532
std::vector< TFreeBorder > TFreeBorderVec
Definition: SMESH_MeshAlgos.hxx:314
Searcher for elements.
Definition: SMESH_MeshAlgos.hxx:75
virtual TopAbs_State GetPointState(const gp_Pnt &point)=0
Find out if the given point is out of closed 2D mesh.
virtual void GetElementsInBox(const Bnd_B3d &box, SMDSAbs_ElementType type, std::vector< const SMDS_MeshElement * > &foundElems)=0
Return elements whose bounding box intersects a given bounding box.
virtual gp_XYZ Project(const gp_Pnt &point, SMDSAbs_ElementType type, const SMDS_MeshElement **closestFace=0)=0
Return a projection of a given point to a 2D mesh.
virtual int FindElementsByPoint(const gp_Pnt &point, SMDSAbs_ElementType type, std::vector< const SMDS_MeshElement * > &foundElems)=0
Find elements of given type where the given point is IN or ON.
virtual const SMDS_MeshElement * FindClosestTo(const gp_Pnt &point, SMDSAbs_ElementType type)=0
Return an element most close to the given point.
virtual void GetElementsInSphere(const gp_XYZ &center, const double radius, SMDSAbs_ElementType type, std::vector< const SMDS_MeshElement * > &foundElems)=0
Return elements whose bounding box intersects a sphere.
virtual void GetElementsNearLine(const gp_Ax1 &line, SMDSAbs_ElementType type, std::vector< const SMDS_MeshElement * > &foundElems)=0
Return elements possibly intersecting the line.
Definition: SMESH_MeshAlgos.hxx:325
TFreeBorderVec _borders
Definition: SMESH_MeshAlgos.hxx:326
TCoincidentGroupVec _coincidentGroups
Definition: SMESH_MeshAlgos.hxx:327
Definition: SMESH_MeshAlgos.hxx:290
const SMDS_MeshNode * _node2
Definition: SMESH_MeshAlgos.hxx:292
const SMDS_MeshNode * _node1
Definition: SMESH_MeshAlgos.hxx:291
const SMDS_MeshNode * _medium
Definition: SMESH_MeshAlgos.hxx:293
Intersect faces of a mesh.
Definition: SMESH_Offset.cxx:805
Definition: SMESH_MeshAlgos.hxx:476
gp_XYZ myXYZ[2]
Definition: SMESH_MeshAlgos.hxx:483
const SMDS_MeshNode * myNode2[2]
Definition: SMESH_MeshAlgos.hxx:482
gp_Vec myVector
Definition: SMESH_MeshAlgos.hxx:489
const SMDS_MeshElement * myFace[2]
Definition: SMESH_MeshAlgos.hxx:486
const SMDS_MeshNode * myNode1[2]
Definition: SMESH_MeshAlgos.hxx:481
gp_Pnt myMidProjPoint
Definition: SMESH_MeshAlgos.hxx:492
Definition: SMESH_MeshAlgos.hxx:316
int _node2
Definition: SMESH_MeshAlgos.hxx:319
int _node1
Definition: SMESH_MeshAlgos.hxx:318
int _nodeLast
Definition: SMESH_MeshAlgos.hxx:320
int _border
Definition: SMESH_MeshAlgos.hxx:317
Searcher for the node closest to a point.
Definition: SMESH_MeshAlgos.hxx:59
virtual const SMDS_MeshNode * FindClosestTo(const gp_Pnt &pnt)=0
virtual int FindNearPoint(const gp_Pnt &point, const double tolerance, std::vector< const SMDS_MeshNode * > &foundNodes)=0
virtual ~SMESH_NodeSearcher()
Definition: SMESH_MeshAlgos.hxx:65
virtual void MoveNode(const SMDS_MeshNode *node, const gp_Pnt &toPnt)=0
SMDS_MeshNode -> gp_XYZ converter.
Definition: SMESH_TypeDefs.hxx:215
Definition: SMESH_Triangulate.cxx:93
Definition: SMESH_Triangulate.cxx:100
Vertex of a polygon.
Definition: SMESH_Triangulate.cxx:70