24#ifndef _SMESH_Cartesian_3D_GRID_HXX_
25#define _SMESH_Cartesian_3D_GRID_HXX_
28#include <tbb/parallel_for.h>
63#include <Utils_ExceptHandlers.hxx>
65#include <GEOMUtils.hxx>
68#include <BRepAdaptor_Curve.hxx>
69#include <BRepAdaptor_Surface.hxx>
70#include <BRepBndLib.hxx>
71#include <BRepBuilderAPI_Copy.hxx>
72#include <BRepBuilderAPI_MakeFace.hxx>
73#include <BRepTools.hxx>
74#include <BRepTopAdaptor_FClass2d.hxx>
75#include <BRep_Builder.hxx>
76#include <BRep_Tool.hxx>
80#include <GCPnts_UniformDeflection.hxx>
81#include <Geom2d_BSplineCurve.hxx>
82#include <Geom2d_BezierCurve.hxx>
83#include <Geom2d_TrimmedCurve.hxx>
84#include <GeomAPI_ProjectPointOnSurf.hxx>
86#include <Geom_BSplineCurve.hxx>
87#include <Geom_BSplineSurface.hxx>
88#include <Geom_BezierCurve.hxx>
89#include <Geom_BezierSurface.hxx>
90#include <Geom_RectangularTrimmedSurface.hxx>
91#include <Geom_TrimmedCurve.hxx>
92#include <IntAna_IntConicQuad.hxx>
93#include <IntAna_IntLinTorus.hxx>
94#include <IntAna_Quadric.hxx>
95#include <IntCurveSurface_TransitionOnCurve.hxx>
96#include <IntCurvesFace_Intersector.hxx>
97#include <Poly_Triangulation.hxx>
98#include <Precision.hxx>
100#include <TopExp_Explorer.hxx>
101#include <TopLoc_Location.hxx>
102#include <TopTools_DataMapOfShapeInteger.hxx>
103#include <TopTools_IndexedMapOfShape.hxx>
104#include <TopTools_MapOfShape.hxx>
106#include <TopoDS_Compound.hxx>
107#include <TopoDS_Face.hxx>
108#include <TopoDS_TShape.hxx>
109#include <gp_Cone.hxx>
110#include <gp_Cylinder.hxx>
113#include <gp_Pnt2d.hxx>
114#include <gp_Sphere.hxx>
115#include <gp_Torus.hxx>
125 typedef std::array< int, 3 >
TIJK;
174 virtual bool ContainsAny(
const std::vector< TGeomID>& )
const {
return true; }
175 virtual TopAbs_Orientation
Orientation(
const TopoDS_Shape& s )
const {
return s.Orientation(); }
194 void Init(
const TopoDS_Shape& solid,
195 TopAbs_ShapeEnum subType,
198 virtual bool ContainsAny(
const std::vector< TGeomID>& subIDs )
const
200 for (
size_t i = 0; i < subIDs.size(); ++i )
if (
Contains( subIDs[ i ]))
return true;
203 virtual TopAbs_Orientation
Orientation(
const TopoDS_Shape& face )
const
205 const TopoDS_Shape& sInMap =
const_cast< OneOfSolids*
>(
this)->
_faces.Added( face );
206 return sInMap.Orientation();
210 return faceID == 0 ||
_outFaceIDs.Contains( faceID );
228 const_cast< bool&
>( holder.
myOwn ) =
false;
293 bool Add(
const std::vector< TGeomID >& fIDs,
const SMDS_MeshNode* n=NULL )
const;
364 size_t iv1,
size_t iv2,
size_t iConst,
365 const std::string& nv1,
const std::string& nv2,
const std::string& nConst )
376 void SetIJK(
size_t i,
size_t j,
size_t k )
410 static void GetExactBndBox(
const std::vector< TopoDS_Shape >& faceVec,
const double* axesDirs, Bnd_Box& shapeBox );
416 std::vector< double > _coords[3];
418 std::vector< GridLine > _lines [3];
426 std::vector< const SMDS_MeshNode* >
_nodes;
447 return i + j*(_coords[0].size()-1) + k*(_coords[0].size()-1)*(_coords[1].size()-1);
451 return i + j*_coords[0].size() + k*_coords[0].size()*_coords[1].size();
455 return NodeIndex( ijk[0], ijk[1], ijk[2] );
459 size_t NodeIndexDZ()
const {
return _coords[0].size() * _coords[1].size(); }
462 size_t GetLineDir(
const GridLine* line,
size_t & index )
const;
472 TGeomID ShapeID(
const TopoDS_Shape& s )
const;
473 const TopoDS_Shape& Shape(
TGeomID id )
const;
475 void InitGeometry(
const TopoDS_Shape& theShape );
476 void InitClassifier(
const TopoDS_Shape& mainShape,
477 TopAbs_ShapeEnum shapeType,
479 void GetEdgesToImplement( std::map<
TGeomID, std::vector< TGeomID > > & edge2faceMap,
480 const TopoDS_Shape& shape,
481 const std::vector< TopoDS_Shape >& faces );
482 void SetSolidFather(
const TopoDS_Shape& s,
const TopoDS_Shape& theShapeToMesh );
483 bool IsShared(
TGeomID faceID )
const;
484 bool IsAnyShared(
const std::vector< TGeomID >& faceIDs )
const;
486 return ( faceID == PseudoIntExtFaceID() ||
487 Shape( faceID ).
Orientation() == TopAbs_INTERNAL ); }
490 else return _geometry.
_solidByID.count( shapeID ); }
495 const std::vector< TGeomID > & GetSolidIDs(
TGeomID subShapeID )
const;
496 bool IsCorrectTransition(
TGeomID faceID,
const Solid* solid );
499 TopoDS_Vertex* vertex =
nullptr,
bool unset =
false );
500 void UpdateFacesOfVertex(
const B_IntersectPoint& ip,
const TopoDS_Vertex& vertex );
504 void SetCoordinates(
const std::vector<double>& xCoords,
505 const std::vector<double>& yCoords,
506 const std::vector<double>& zCoords,
507 const double* axesDirs,
508 const Bnd_Box& bndBox );
509 void ComputeUVW(
const gp_XYZ& p,
double uvw[3]);
511 bool GridInitAndInterserctWithShape(
const TopoDS_Shape& theShape,
512 std::map<
TGeomID, std::vector< TGeomID > >& edge2faceIDsMap,
514 const int numOfThreads,
515 bool computeCanceled );
519 template<
typename Iterator,
class Function>
522 MESSAGE(
"Start parallel computation of Hexa with c++ threads...");
524 assert(nthreads > 0);
526 const unsigned int numTasksTotal = last - first;
527 std::vector<std::thread> threads;
530 MESSAGE(
"Number of elements to compute: " << numTasksTotal <<
"; num of threads: " << nthreads);
533 if (numTasksTotal <= nthreads)
537 threads.reserve(numTasksTotal);
538 for (; it < last; ++it)
540 threads.emplace_back(f, std::ref(*it));
549 const unsigned int numTasksInThread = numTasksTotal / nthreads;
550 MESSAGE(
"Number of tasks in thread: " << numTasksInThread);
553 std::vector<unsigned int> distTasksInThreads(nthreads, numTasksInThread);
556 const unsigned int remainder = numTasksTotal % nthreads;
557 MESSAGE(
"Remainder of tasks " << remainder <<
" will be evenly distributed among threads");
558 for (
unsigned int i = 0; i < remainder; ++i)
560 ++distTasksInThreads[i];
564 threads.reserve(nthreads);
565 for (
const auto i : distTasksInThreads)
567 Iterator curLast = it + i;
570 auto lambda = [=,&f](){ std::for_each(it, curLast, f); };
573 threads.emplace_back(lambda);
580 std::for_each(threads.begin(), threads.end(), [](std::thread& x){ x.join(); });
582 MESSAGE(
"Parallel computation was finished successfully");
605 std::multiset< F_IntersectPoint >::iterator ip =
607 ip->_faceIDs.reserve( 1 );
608 ip->_faceIDs.push_back(
_faceID );
620 _surfaceInt =
new IntCurvesFace_Intersector(
_face, Precision::PConfusion() );
628 bool IsThreadSafe(std::set< const Standard_Transient* >& noSafeTShapes)
const;
637 struct ParallelIntersector
639 std::vector< FaceGridIntersector >& _faceVec;
640 ParallelIntersector( std::vector< FaceGridIntersector >& faceVec): _faceVec(faceVec){}
641 void operator() (
const tbb::blocked_range<size_t>& r )
const
643 for (
size_t i = r.begin(); i != r.end(); ++i )
644 _faceVec[i].Intersect();
649 template<
typename Type>
652 faceGridIntersector.Intersect();
688 return ( state == TopAbs_IN || state == TopAbs_ON );
#define STDMESHERS_EXPORT
Definition: SMESH_StdMeshers.hxx:38
#define MESSAGE(msg)
Definition: UNV_Utilities.hxx:149
Definition: ObjectPool.hxx:40
X * getNew()
Definition: ObjectPool.hxx:102
void destroy(X *obj)
Definition: ObjectPool.hxx:133
Definition: SMDS_MeshNode.hxx:36
Definition: SMESHDS_Mesh.hxx:98
Definition: SMESH_ControlsDef.hxx:970
It helps meshers to add elements and provides other utilities.
Definition: SMESH_MesherHelper.hxx:84
Hold a vector of TGeomID and clear it at destruction.
Definition: StdMeshers_Cartesian_3D_Grid.hxx:219
bool contain(const TGeomID &id) const
Definition: StdMeshers_Cartesian_3D_Grid.hxx:234
bool operator==(const GeomIDVecHelder &other) const
Definition: StdMeshers_Cartesian_3D_Grid.hxx:233
GeomIDVecHelder(const TVector &idVec, bool isOwner)
Definition: StdMeshers_Cartesian_3D_Grid.hxx:225
size_t size() const
Definition: StdMeshers_Cartesian_3D_Grid.hxx:231
TGeomID oneCommon(const GeomIDVecHelder &other) const
Definition: StdMeshers_Cartesian_3D_Grid.hxx:243
GeomIDVecHelder(const GeomIDVecHelder &holder)
Definition: StdMeshers_Cartesian_3D_Grid.hxx:226
TGeomID otherThan(const TGeomID &id) const
Definition: StdMeshers_Cartesian_3D_Grid.hxx:237
std::vector< TGeomID > TVector
Definition: StdMeshers_Cartesian_3D_Grid.hxx:220
TGeomID operator[](size_t i) const
Definition: StdMeshers_Cartesian_3D_Grid.hxx:232
~GeomIDVecHelder()
Definition: StdMeshers_Cartesian_3D_Grid.hxx:230
const TVector & myVec
Definition: StdMeshers_Cartesian_3D_Grid.hxx:221
bool myOwn
Definition: StdMeshers_Cartesian_3D_Grid.hxx:222
Definition: StdMeshers_Cartesian_3D_Grid.hxx:414
void Remove(E_IntersectPoint *eip)
Definition: StdMeshers_Cartesian_3D_Grid.hxx:470
bool IsSolid(TGeomID shapeID) const
Definition: StdMeshers_Cartesian_3D_Grid.hxx:488
bool IsBoundaryFace(TGeomID face) const
Definition: StdMeshers_Cartesian_3D_Grid.hxx:497
bool _toCreateFaces
Definition: StdMeshers_Cartesian_3D_Grid.hxx:436
bool _toConsiderInternalFaces
Definition: StdMeshers_Cartesian_3D_Grid.hxx:437
ObjectPool< E_IntersectPoint > _edgeIntPool
Definition: StdMeshers_Cartesian_3D_Grid.hxx:430
bool _toUseThresholdForInternalFaces
Definition: StdMeshers_Cartesian_3D_Grid.hxx:438
bool IsToRemoveExcessEntities() const
Definition: StdMeshers_Cartesian_3D_Grid.hxx:502
size_t CellIndex(size_t i, size_t j, size_t k) const
Definition: StdMeshers_Cartesian_3D_Grid.hxx:445
bool IsInternal(TGeomID faceID) const
Definition: StdMeshers_Cartesian_3D_Grid.hxx:485
size_t NodeIndex(size_t i, size_t j, size_t k) const
Definition: StdMeshers_Cartesian_3D_Grid.hxx:449
size_t NodeIndex(const TIJK &ijk) const
Definition: StdMeshers_Cartesian_3D_Grid.hxx:453
bool IsStrangeEdge(TGeomID id) const
Definition: StdMeshers_Cartesian_3D_Grid.hxx:491
bool IsToCheckNodePos() const
Definition: StdMeshers_Cartesian_3D_Grid.hxx:501
TGeomID PseudoIntExtFaceID() const
Definition: StdMeshers_Cartesian_3D_Grid.hxx:492
TopAbs_ShapeEnum ShapeType(TGeomID id) const
Definition: StdMeshers_Cartesian_3D_Grid.hxx:474
double _sizeThreshold
Definition: StdMeshers_Cartesian_3D_Grid.hxx:439
size_t NodeIndexDX() const
Definition: StdMeshers_Cartesian_3D_Grid.hxx:457
size_t NodeIndexDZ() const
Definition: StdMeshers_Cartesian_3D_Grid.hxx:459
std::vector< const SMDS_MeshNode * > _nodes
Definition: StdMeshers_Cartesian_3D_Grid.hxx:426
SMESH_MesherHelper * _helper
Definition: StdMeshers_Cartesian_3D_Grid.hxx:443
std::vector< const SMDS_MeshNode * > _allBorderNodes
Definition: StdMeshers_Cartesian_3D_Grid.hxx:427
bool _toAddEdges
Definition: StdMeshers_Cartesian_3D_Grid.hxx:435
bool _toUseQuanta
Definition: StdMeshers_Cartesian_3D_Grid.hxx:440
double _minCellSize
Definition: StdMeshers_Cartesian_3D_Grid.hxx:419
Geometry _geometry
Definition: StdMeshers_Cartesian_3D_Grid.hxx:434
size_t NodeIndexDY() const
Definition: StdMeshers_Cartesian_3D_Grid.hxx:458
E_IntersectPoint * Add(const E_IntersectPoint &ip)
Definition: StdMeshers_Cartesian_3D_Grid.hxx:464
gp_Mat _invB
Definition: StdMeshers_Cartesian_3D_Grid.hxx:421
std::vector< const F_IntersectPoint * > _gridIntP
Definition: StdMeshers_Cartesian_3D_Grid.hxx:429
ObjectPool< F_IntersectPoint > _extIntPool
Definition: StdMeshers_Cartesian_3D_Grid.hxx:431
gp_XYZ _origin
Definition: StdMeshers_Cartesian_3D_Grid.hxx:420
double _quanta
Definition: StdMeshers_Cartesian_3D_Grid.hxx:441
Definition: StdMeshers_Cartesian_3D_Grid.hxx:189
virtual bool ContainsAny(const std::vector< TGeomID > &subIDs) const
Definition: StdMeshers_Cartesian_3D_Grid.hxx:198
TopTools_MapOfShape _faces
Definition: StdMeshers_Cartesian_3D_Grid.hxx:191
virtual TopAbs_Orientation Orientation(const TopoDS_Shape &face) const
Definition: StdMeshers_Cartesian_3D_Grid.hxx:203
TColStd_MapOfInteger _subIDs
Definition: StdMeshers_Cartesian_3D_Grid.hxx:190
virtual bool IsOutsideOriented(TGeomID faceID) const
Definition: StdMeshers_Cartesian_3D_Grid.hxx:208
virtual bool Contains(TGeomID i) const
Definition: StdMeshers_Cartesian_3D_Grid.hxx:197
TColStd_MapOfInteger _outFaceIDs
Definition: StdMeshers_Cartesian_3D_Grid.hxx:192
void Init(const TopoDS_Shape &solid, TopAbs_ShapeEnum subType, const SMESHDS_Mesh *mesh)
Definition: StdMeshers_Cartesian_3D_Grid.cxx:221
Container of IDs of SOLID sub-shapes.
Definition: StdMeshers_Cartesian_3D_Grid.hxx:167
virtual bool ContainsAny(const std::vector< TGeomID > &) const
Definition: StdMeshers_Cartesian_3D_Grid.hxx:174
bool HasConcaveVertex() const
Definition: StdMeshers_Cartesian_3D_Grid.hxx:183
virtual TopAbs_Orientation Orientation(const TopoDS_Shape &s) const
Definition: StdMeshers_Cartesian_3D_Grid.hxx:175
bool _hasInternalFaces
Definition: StdMeshers_Cartesian_3D_Grid.hxx:169
void SetID(TGeomID id)
Definition: StdMeshers_Cartesian_3D_Grid.hxx:177
TConcaveVertex2Face _concaveVertex
Definition: StdMeshers_Cartesian_3D_Grid.hxx:170
TGeomID _id
Definition: StdMeshers_Cartesian_3D_Grid.hxx:168
virtual ~Solid()
Definition: StdMeshers_Cartesian_3D_Grid.hxx:172
void SetConcave(TGeomID V, TGeomID F, TGeomID E1, TGeomID E2, TGeomID V1, TGeomID V2)
Definition: StdMeshers_Cartesian_3D_Grid.hxx:181
virtual bool Contains(TGeomID) const
Definition: StdMeshers_Cartesian_3D_Grid.hxx:173
void SetHasInternalFaces(bool has)
Definition: StdMeshers_Cartesian_3D_Grid.hxx:179
TGeomID ID() const
Definition: StdMeshers_Cartesian_3D_Grid.hxx:178
virtual bool IsOutsideOriented(TGeomID) const
Definition: StdMeshers_Cartesian_3D_Grid.hxx:176
bool HasInternalFaces() const
Definition: StdMeshers_Cartesian_3D_Grid.hxx:180
const ConcaveFace * GetConcave(TGeomID V) const
Definition: StdMeshers_Cartesian_3D_Grid.hxx:184
Definition: StdMeshers_Distribution.hxx:45
interface of "Body fitting Parameters" hypothesis.
Definition: SMESH_BasicHypothesis.idl:997
ENUM Add(ENUM v, int delta)
Return incremented enum value.
Definition: SMESH_TypeDefs.hxx:140
Orientation
Definition: SMESHGUI_ClippingDlg.h:75
Transition
Definition: StdMeshers_Cartesian_3D_Grid.hxx:134
@ Trans_APEX
Definition: StdMeshers_Cartesian_3D_Grid.hxx:138
@ Trans_OUT
Definition: StdMeshers_Cartesian_3D_Grid.hxx:137
@ Trans_INTERNAL
Definition: StdMeshers_Cartesian_3D_Grid.hxx:139
@ Trans_IN
Definition: StdMeshers_Cartesian_3D_Grid.hxx:136
@ Trans_TANGENT
Definition: StdMeshers_Cartesian_3D_Grid.hxx:135
const TGeomID theUndefID
Definition: StdMeshers_Cartesian_3D_Grid.hxx:129
TopTools_ShapeMapHasher TShapeHasher
Definition: StdMeshers_Cartesian_3D_Grid.hxx:124
int TGeomID
Definition: StdMeshers_Cartesian_3D_Grid.hxx:123
std::map< TGeomID, std::vector< TGeomID > > TEdge2faceIDsMap
Definition: StdMeshers_Cartesian_3D_Grid.hxx:127
NCollection_DataMap< TGeomID, ConcaveFace > TConcaveVertex2Face
Definition: StdMeshers_Cartesian_3D_Grid.hxx:160
void computeGridIntersection(Type faceGridIntersector)
Definition: StdMeshers_Cartesian_3D_Grid.hxx:650
std::array< int, 3 > TIJK
Definition: StdMeshers_Cartesian_3D_Grid.hxx:125
void parallel_for(const Iterator &first, const Iterator &last, Function &&f, const unsigned int nthreads=1)
Definition: StdMeshers_Cartesian_3D_Grid.hxx:520
StdMeshers: interfaces to standard hypotheses and algorithms.
Definition: StdMeshers_Cartesian_3D_Grid.hxx:120
Common data of any intersection between a Grid and a shape.
Definition: StdMeshers_Cartesian_3D_Grid.hxx:284
bool Add(const std::vector< TGeomID > &fIDs, const SMDS_MeshNode *n=NULL) const
Definition: StdMeshers_Cartesian_3D_Grid.cxx:156
const SMDS_MeshNode * _node
Definition: StdMeshers_Cartesian_3D_Grid.hxx:289
size_t GetCommonFaces(const B_IntersectPoint *other, TGeomID *commonFaces) const
Definition: StdMeshers_Cartesian_3D_Grid.cxx:194
virtual ~B_IntersectPoint()
Definition: StdMeshers_Cartesian_3D_Grid.hxx:297
std::vector< TGeomID > _faceIDs
Definition: StdMeshers_Cartesian_3D_Grid.hxx:290
B_IntersectPoint()
Definition: StdMeshers_Cartesian_3D_Grid.hxx:292
TGeomID HasCommonFace(const B_IntersectPoint *other, TGeomID avoidFace=-1) const
Definition: StdMeshers_Cartesian_3D_Grid.cxx:181
bool IsOnFace(TGeomID faceID) const
Definition: StdMeshers_Cartesian_3D_Grid.cxx:210
Sub-entities of a FACE neighboring its concave VERTEX.
Definition: StdMeshers_Cartesian_3D_Grid.hxx:149
ConcaveFace(int f=0, int e1=0, int e2=0, int v1=0, int v2=0)
Definition: StdMeshers_Cartesian_3D_Grid.hxx:153
bool HasEdge(TGeomID edge) const
Definition: StdMeshers_Cartesian_3D_Grid.hxx:155
TGeomID _edge1
Definition: StdMeshers_Cartesian_3D_Grid.hxx:151
void SetEdge(TGeomID edge)
Definition: StdMeshers_Cartesian_3D_Grid.hxx:157
bool HasVertex(TGeomID v) const
Definition: StdMeshers_Cartesian_3D_Grid.hxx:156
TGeomID _v2
Definition: StdMeshers_Cartesian_3D_Grid.hxx:152
void SetVertex(TGeomID v)
Definition: StdMeshers_Cartesian_3D_Grid.hxx:158
TGeomID _edge2
Definition: StdMeshers_Cartesian_3D_Grid.hxx:151
TGeomID _concaveFace
Definition: StdMeshers_Cartesian_3D_Grid.hxx:150
TGeomID _v1
Definition: StdMeshers_Cartesian_3D_Grid.hxx:152
Data of intersection between GridPlanes and a TopoDS_EDGE.
Definition: StdMeshers_Cartesian_3D_Grid.hxx:321
gp_Pnt _point
Definition: StdMeshers_Cartesian_3D_Grid.hxx:322
double _uvw[3]
Definition: StdMeshers_Cartesian_3D_Grid.hxx:323
TGeomID _shapeID
Definition: StdMeshers_Cartesian_3D_Grid.hxx:324
Data of intersection between a GridLine and a TopoDS_Face.
Definition: StdMeshers_Cartesian_3D_Grid.hxx:305
double _paramOnLine
Definition: StdMeshers_Cartesian_3D_Grid.hxx:306
Transition _transition
Definition: StdMeshers_Cartesian_3D_Grid.hxx:308
double _v
Definition: StdMeshers_Cartesian_3D_Grid.hxx:307
size_t _indexOnLine
Definition: StdMeshers_Cartesian_3D_Grid.hxx:309
double _u
Definition: StdMeshers_Cartesian_3D_Grid.hxx:307
bool operator<(const F_IntersectPoint &o) const
Definition: StdMeshers_Cartesian_3D_Grid.hxx:311
Intersector of TopoDS_Face with all GridLine's.
Definition: StdMeshers_Cartesian_3D_Grid.hxx:590
FaceGridIntersector()
Definition: StdMeshers_Cartesian_3D_Grid.hxx:598
IntCurvesFace_Intersector * GetCurveFaceIntersector()
Definition: StdMeshers_Cartesian_3D_Grid.hxx:616
void StoreIntersections()
Definition: StdMeshers_Cartesian_3D_Grid.hxx:601
IntCurvesFace_Intersector * _surfaceInt
Definition: StdMeshers_Cartesian_3D_Grid.hxx:595
TGeomID _faceID
Definition: StdMeshers_Cartesian_3D_Grid.hxx:592
Bnd_Box _bndBox
Definition: StdMeshers_Cartesian_3D_Grid.hxx:594
const Bnd_Box & GetFaceBndBox()
Definition: StdMeshers_Cartesian_3D_Grid.hxx:611
Grid * _grid
Definition: StdMeshers_Cartesian_3D_Grid.hxx:593
void Intersect()
Definition: StdMeshers_Cartesian_3D_Grid.cxx:1102
std::vector< std::pair< GridLine *, F_IntersectPoint > > _intersections
Definition: StdMeshers_Cartesian_3D_Grid.hxx:596
TopoDS_Face _face
Definition: StdMeshers_Cartesian_3D_Grid.hxx:591
Intersector of a surface with a GridLine.
Definition: StdMeshers_Cartesian_3D_Grid.hxx:660
void IntersectWithSurface(const GridLine &gridLine)
Definition: StdMeshers_Cartesian_3D_Grid.cxx:1435
Transition _transOut
Definition: StdMeshers_Cartesian_3D_Grid.hxx:664
void addIntPoint(const bool toClassify=true)
Definition: StdMeshers_Cartesian_3D_Grid.cxx:1266
FaceLineIntersector()
Definition: StdMeshers_Cartesian_3D_Grid.hxx:695
~FaceLineIntersector()
Definition: StdMeshers_Cartesian_3D_Grid.hxx:696
bool UVIsOnFace() const
Definition: StdMeshers_Cartesian_3D_Grid.hxx:685
bool isParamOnLineOK(const double linLength)
Definition: StdMeshers_Cartesian_3D_Grid.hxx:691
void IntersectWithPlane(const GridLine &gridLine)
Definition: StdMeshers_Cartesian_3D_Grid.cxx:1283
gp_Pln _plane
Definition: StdMeshers_Cartesian_3D_Grid.hxx:666
gp_Sphere _sphere
Definition: StdMeshers_Cartesian_3D_Grid.hxx:669
void IntersectWithTorus(const GridLine &gridLine)
Definition: StdMeshers_Cartesian_3D_Grid.cxx:1402
gp_Cone _cone
Definition: StdMeshers_Cartesian_3D_Grid.hxx:668
gp_Torus _torus
Definition: StdMeshers_Cartesian_3D_Grid.hxx:670
double _u
Definition: StdMeshers_Cartesian_3D_Grid.hxx:662
std::vector< F_IntersectPoint > _intPoints
Definition: StdMeshers_Cartesian_3D_Grid.hxx:673
Transition _transition
Definition: StdMeshers_Cartesian_3D_Grid.hxx:663
void IntersectWithCone(const GridLine &gridLine)
Definition: StdMeshers_Cartesian_3D_Grid.cxx:1330
double _w
Definition: StdMeshers_Cartesian_3D_Grid.hxx:662
gp_Cylinder _cylinder
Definition: StdMeshers_Cartesian_3D_Grid.hxx:667
void IntersectWithCylinder(const GridLine &gridLine)
Definition: StdMeshers_Cartesian_3D_Grid.cxx:1298
double _v
Definition: StdMeshers_Cartesian_3D_Grid.hxx:662
IntCurvesFace_Intersector * _surfaceInt
Definition: StdMeshers_Cartesian_3D_Grid.hxx:671
void IntersectWithSphere(const GridLine &gridLine)
Definition: StdMeshers_Cartesian_3D_Grid.cxx:1370
Transition _transIn
Definition: StdMeshers_Cartesian_3D_Grid.hxx:664
double _tol
Definition: StdMeshers_Cartesian_3D_Grid.hxx:661
Geom data.
Definition: StdMeshers_Cartesian_3D_Grid.hxx:261
SMESH::Controls::ElementsOnShape _vertexClassifier
Definition: StdMeshers_Cartesian_3D_Grid.hxx:273
TColStd_MapOfInteger _boundaryFaces
Definition: StdMeshers_Cartesian_3D_Grid.hxx:266
Solid _soleSolid
Definition: StdMeshers_Cartesian_3D_Grid.hxx:264
TopTools_DataMapOfShapeInteger _shape2NbNodes
Definition: StdMeshers_Cartesian_3D_Grid.hxx:270
std::map< TGeomID, OneOfSolids > _solidByID
Definition: StdMeshers_Cartesian_3D_Grid.hxx:265
std::vector< std::vector< TGeomID > > _solidIDsByShapeID
Definition: StdMeshers_Cartesian_3D_Grid.hxx:263
TopoDS_Shape _mainShape
Definition: StdMeshers_Cartesian_3D_Grid.hxx:262
SMESH::Controls::ElementsOnShape _edgeClassifier
Definition: StdMeshers_Cartesian_3D_Grid.hxx:272
GeomIDVecHelder GetSolidIDsByShapeID(const std::vector< TGeomID > &shapeIDs) const
Definition: StdMeshers_Cartesian_3D_Grid.cxx:251
TColStd_MapOfInteger _strangeEdges
Definition: StdMeshers_Cartesian_3D_Grid.hxx:267
TGeomID _extIntFaceID
Definition: StdMeshers_Cartesian_3D_Grid.hxx:268
bool IsOneSolid() const
Definition: StdMeshers_Cartesian_3D_Grid.hxx:275
A line of the grid and its intersections with 2D geometry.
Definition: StdMeshers_Cartesian_3D_Grid.hxx:332
double _length
Definition: StdMeshers_Cartesian_3D_Grid.hxx:334
std::multiset< F_IntersectPoint > _intPoints
Definition: StdMeshers_Cartesian_3D_Grid.hxx:335
TGeomID GetSolidIDBefore(std::multiset< F_IntersectPoint >::iterator ip, const TGeomID prevID, const Geometry &geom)
Definition: StdMeshers_Cartesian_3D_Grid.cxx:83
void RemoveExcessIntPoints(const double tol)
Definition: StdMeshers_Cartesian_3D_Grid.cxx:50
gp_Lin _line
Definition: StdMeshers_Cartesian_3D_Grid.hxx:333
Planes of the grid used to find intersections of an EDGE with a hexahedron.
Definition: StdMeshers_Cartesian_3D_Grid.hxx:347
std::vector< gp_XYZ > _origins
Definition: StdMeshers_Cartesian_3D_Grid.hxx:349
gp_XYZ _zNorm
Definition: StdMeshers_Cartesian_3D_Grid.hxx:348
std::vector< double > _zProjs
Definition: StdMeshers_Cartesian_3D_Grid.hxx:350
Iterator on the parallel grid lines of one direction.
Definition: StdMeshers_Cartesian_3D_Grid.hxx:357
size_t _iVar2
Definition: StdMeshers_Cartesian_3D_Grid.hxx:360
size_t LineIndex10() const
Definition: StdMeshers_Cartesian_3D_Grid.hxx:392
LineIndexer()
Definition: StdMeshers_Cartesian_3D_Grid.hxx:362
bool More() const
Definition: StdMeshers_Cartesian_3D_Grid.hxx:390
size_t _iConst
Definition: StdMeshers_Cartesian_3D_Grid.hxx:360
size_t LineIndex11() const
Definition: StdMeshers_Cartesian_3D_Grid.hxx:394
size_t K() const
Definition: StdMeshers_Cartesian_3D_Grid.hxx:375
size_t NbLines() const
Definition: StdMeshers_Cartesian_3D_Grid.hxx:397
std::string _name1
Definition: StdMeshers_Cartesian_3D_Grid.hxx:361
void SetIndexOnLine(size_t i)
Definition: StdMeshers_Cartesian_3D_Grid.hxx:395
std::string _name2
Definition: StdMeshers_Cartesian_3D_Grid.hxx:361
size_t LineIndex() const
Definition: StdMeshers_Cartesian_3D_Grid.hxx:391
size_t LineIndex01() const
Definition: StdMeshers_Cartesian_3D_Grid.hxx:393
size_t J() const
Definition: StdMeshers_Cartesian_3D_Grid.hxx:374
void SetIJK(size_t i, size_t j, size_t k)
Definition: StdMeshers_Cartesian_3D_Grid.hxx:376
void operator++()
Definition: StdMeshers_Cartesian_3D_Grid.hxx:385
size_t I() const
Definition: StdMeshers_Cartesian_3D_Grid.hxx:373
size_t _iVar1
Definition: StdMeshers_Cartesian_3D_Grid.hxx:360
size_t _size[3]
Definition: StdMeshers_Cartesian_3D_Grid.hxx:358
void SetLineIndex(size_t i)
Definition: StdMeshers_Cartesian_3D_Grid.hxx:380
std::string _nameConst
Definition: StdMeshers_Cartesian_3D_Grid.hxx:361
LineIndexer(size_t sz1, size_t sz2, size_t sz3, size_t iv1, size_t iv2, size_t iConst, const std::string &nv1, const std::string &nv2, const std::string &nConst)
Definition: StdMeshers_Cartesian_3D_Grid.hxx:363
size_t _curInd[3]
Definition: StdMeshers_Cartesian_3D_Grid.hxx:359
bool IsValidIndexOnLine(size_t i) const
Definition: StdMeshers_Cartesian_3D_Grid.hxx:396