GemaCoreLib
The GeMA Core library
Loading...
Searching...
No Matches
gmPolylineDiscontinuity.h
Go to the documentation of this file.
1/************************************************************************
2**
3** Copyright (C) 2023 by Carlos Augusto Teixeira Mendes
4** All rights reserved.
5**
6** This file is part of the "GeMA" software. It's use should respect
7** the terms in the license agreement that can be found together
8** with this source code.
9** It is provided AS IS, with NO WARRANTY OF ANY KIND,
10** INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR
11** A PARTICULAR PURPOSE.
12**
13************************************************************************/
14
24#ifndef _GEMA_POLYLINE_DISCONTINUITY_H_
25#define _GEMA_POLYLINE_DISCONTINUITY_H_
26
27#include "gmDiscontinuity.h"
29
30class GmCell;
31class GmCellMesh;
32class GmValueAccessor;
33
34
40
43{
44public:
46
47 // See comments on the base class
48 virtual int numElements() const { return _numPoints ? _numPoints-1 : 0; };
49
50 // See comments on the base class
51 virtual int numPoints() const { return _numPoints; };
52
53 // See comments on the base class
54 virtual int numIntersections() const { return _intList.size(); }
55
56 // See comments on the base class
57 virtual bool extendGeometry(GmCellMesh* sMesh, double size, const GmLogCategory& logger);
58
60 const double* pointCoordinates() const { return _pointCoord; }
61
64
65 virtual void clearGeometry();
66
67 virtual void printGeometry(const GmLogCategory& logger, GmLogLevel level) const;
68
69 // See comments on the base class
70 virtual size_t usedGeometryMemory() const { return _numPoints * 2 * sizeof(double); }
71
72 virtual bool findIntersections (const GmLogCategory& logger);
73 virtual void printIntersections(const GmLogCategory& logger, GmLogLevel level) const;
74
75 // See comments on the base class
78
79private:
80 friend class GmDiscontinuitySet;
81
83 GmPolylineDiscontinuity(const GmDiscontinuitySet* ds, int index, QString id, int groupIndex, const QVector<int>& psIndex)
84 : GmDiscontinuity(ds, index, id, groupIndex, psIndex), _numPoints(0), _pointCoord(NULL) {}
85
87 virtual void setGeometry(double* dvec, int nd, int* ivec, int ni)
88 {
89 Q_UNUSED(ni); Q_UNUSED(ivec);
90 assert(dvec && !ivec);
91 _numPoints = nd;
92 _pointCoord = dvec;
93 }
94
95 virtual bool loadGeometryFromTable(LuaTable& tab, const GmLogCategory& logger);
96
98 const GmValueAccessor* coordAc, int incomingBorder, double snapTol,
99 bool* intersects, double inout[2], bool snap[2], int* outgoingBorder,
100 const GmLogCategory& logger) const;
101
102 GmSegmentCellIntersection findSegmentEntryPoint(const GmPolylineSegment& segment, int segmentId, const GmValueAccessor* coordAc,
103 double snapTol, bool* intersects, double inout[2], bool snap[2], int* outgoingBorder,
104 GmCell const** cell, const GmLogCategory& logger) const;
105
106 void removeInternalNodes(const GmValueAccessor* coordAc, double snapTol, const GmLogCategory& logger);
107
108 bool checkMeshPreconditions(const GmCellMesh* mesh, const GmLogCategory& logger) const;
109
110 const GmCell* findAdjacentCell (const GmCellMesh* mesh, const GmCell* cell, int edgeIndex, int* adjCellEdge) const;
111 QVector<GmCell*> findNodeCellsBall(const GmCellMesh* mesh, int nodeIndex) const;
112
113 static bool segmentIntersection(const GmCompact2DSegmentCellIntersection* firstSegment, const GmCompact2DSegmentCellIntersection* secondSegment,
114 double* firstPos, double* secondPos, GmVector& cartPos);
115
116 bool breakIntersectionSegment(GmCompact2DSegmentCellIntersection* segment, double natPos, const GmVector& cartPos, GmValueAccessor* coordAc,
117 GmCompact2DSegmentCellIntersection** newSegment, const GmLogCategory& logger);
119
121 double* _pointCoord;
122
133
141
143 friend QDataStream& operator<<(QDataStream&, const GmDiscontinuitySet&);
144 friend QDataStream& operator>>(QDataStream&, GmDiscontinuitySet&);
145};
146
147
148#endif // _GEMA_POLYLINE_DISCONTINUITY_H_
Base interface for mesh cells.
Definition gmCell.h:88
Base interface class for CellMesh type plugins.
Definition gmCellMesh.h:40
A (much more) compact version of GmSegmentCellIntersection for 2d intersections only....
Definition gmSegmentCellIntersection.h:109
The geometric representation for a single discontinuity from the Discontinuity set....
Definition gmDiscontinuity.h:38
int index() const
Returns this discontinuity index in the father set.
Definition gmDiscontinuity.h:44
QString id() const
Returns the discontinuity id (name)
Definition gmDiscontinuity.h:47
Base interface for providing discontinuity geometry information for spatial indices.
Definition gmDiscontinuitySet.h:59
Definition gmDiscontinuitySet.h:357
Class representing a category with multiple logging levels.
Definition gmLog.h:58
Polyline 2D representation for a discontinuity.
Definition gmPolylineDiscontinuity.h:43
GmPolylineDiscontinuity(const GmDiscontinuitySet *ds, int index, QString id, int groupIndex, const QVector< int > &psIndex)
Constructor.
Definition gmPolylineDiscontinuity.h:83
virtual int numIntersections() const
A generic interface to return the number of intersections between the mesh and the user given geometr...
Definition gmPolylineDiscontinuity.h:54
virtual bool findIntersections(const GmLogCategory &logger)
Finds the intersections between this discontinuity and the associated mesh, using parameters stored i...
Definition gmPolylineDiscontinuity.cpp:119
virtual void clearGeometry()
Clears the original discontinuity geometry information, releasing memory.
Definition gmPolylineDiscontinuity.cpp:82
int _numPoints
The number of points in the polyline. Number of segments is (_numPoints - 1)
Definition gmPolylineDiscontinuity.h:120
virtual size_t usedGeometryMemory() const
Returns an estimative of the memory used by the discontinuity geometry in bytes.
Definition gmPolylineDiscontinuity.h:70
QVector< QPair< int, QVector< GmCompact2DSegmentCellIntersection * > > > _brokenList
A temporary list built incrementally by calls to breakIntersectionSegment() with the new broken segme...
Definition gmPolylineDiscontinuity.h:140
GmSegmentCellIntersection segmentConvexLinearElementIntersection(const GmPolylineSegment &segment, int segmentId, const GmCell *cell, const GmValueAccessor *coordAc, int incomingBorder, double snapTol, bool *intersects, double inout[2], bool snap[2], int *outgoingBorder, const GmLogCategory &logger) const
Given a discontinuity segment and a CONVEX, LINEAR, non interface cell, calculates their intersection...
Definition gmPolylineDiscontinuity.cpp:391
virtual void printGeometry(const GmLogCategory &logger, GmLogLevel level) const
Prints the discontinuity geometry information.
Definition gmPolylineDiscontinuity.cpp:90
const GmCell * findAdjacentCell(const GmCellMesh *mesh, const GmCell *cell, int edgeIndex, int *adjCellEdge) const
Brute force method for finding cell adjacency when lacking a topological mesh. Updates adjCellEdge to...
Definition gmPolylineDiscontinuity.cpp:1006
bool checkMeshPreconditions(const GmCellMesh *mesh, const GmLogCategory &logger) const
Check mesh preconditions, using looger to emmit warnings / error messages.
Definition gmPolylineDiscontinuity.cpp:948
static bool segmentIntersection(const GmCompact2DSegmentCellIntersection *firstSegment, const GmCompact2DSegmentCellIntersection *secondSegment, double *firstPos, double *secondPos, GmVector &cartPos)
Helper function for the process of finding intersections among different intersection segments inside...
Definition gmPolylineDiscontinuity.cpp:1060
virtual void setGeometry(double *dvec, int nd, int *ivec, int ni)
Sets the geometry. dvec should be a vector with coordinates (size nd * 2), nd the number of coordinat...
Definition gmPolylineDiscontinuity.h:87
GmSegmentCellIntersection findSegmentEntryPoint(const GmPolylineSegment &segment, int segmentId, const GmValueAccessor *coordAc, double snapTol, bool *intersects, double inout[2], bool snap[2], int *outgoingBorder, GmCell const **cell, const GmLogCategory &logger) const
Traverses the mesh seeking for the segment-element intersection closest to the segment start.
Definition gmPolylineDiscontinuity.cpp:728
virtual ~GmPolylineDiscontinuity()
Destructor.
Definition gmPolylineDiscontinuity.cpp:73
bool breakIntersectionSegment(GmCompact2DSegmentCellIntersection *segment, double natPos, const GmVector &cartPos, GmValueAccessor *coordAc, GmCompact2DSegmentCellIntersection **newSegment, const GmLogCategory &logger)
Helper function for the process of finding intersections among different intersection segments inside...
Definition gmPolylineDiscontinuity.cpp:1104
const QVector< GmCompact2DSegmentCellIntersection * > & intersectionList() const
Returns the intersection list (filled by a call to findIntersections())
Definition gmPolylineDiscontinuity.h:63
QVector< GmCompact2DSegmentCellIntersection * > _intList
The intersection list, filled by a call to findIntersections(). We store pointers to the data to: 1) ...
Definition gmPolylineDiscontinuity.h:132
void removeInternalNodes(const GmValueAccessor *coordAc, double snapTol, const GmLogCategory &logger)
Remove internal node so that every intersection segment traverses the element from one edge to anothe...
Definition gmPolylineDiscontinuity.cpp:788
const double * pointCoordinates() const
Returns the polyline coordinates vector, organized as x1, y1, x2, y2, .... Size equal to numPoints() ...
Definition gmPolylineDiscontinuity.h:60
virtual int numPoints() const
A generic interface to return the original discontinuity data number of points.
Definition gmPolylineDiscontinuity.h:51
virtual size_t usedIntersectionMemory() const
Returns an estimative of the memory used by the intersection data in bytes.
Definition gmPolylineDiscontinuity.h:76
virtual void printIntersections(const GmLogCategory &logger, GmLogLevel level) const
Prints the discontinuity-mesh intersection information.
Definition gmPolylineDiscontinuity.cpp:104
double * _pointCoord
The coordinate vector. Size == _numPoints * 2.
Definition gmPolylineDiscontinuity.h:121
virtual bool extendGeometry(GmCellMesh *sMesh, double size, const GmLogCategory &logger)
Definition gmPolylineDiscontinuity.cpp:1261
QVector< GmCell * > findNodeCellsBall(const GmCellMesh *mesh, int nodeIndex) const
Brute force method for finding the cells containing a node as a vertex when lacking a topological mes...
Definition gmPolylineDiscontinuity.cpp:1036
void intersectionSegmentBreakingEnded()
Helper function for the process of finding intersections among different intersection segments inside...
Definition gmPolylineDiscontinuity.cpp:1198
virtual int numElements() const
A generic interface to return the original discontinuity data number of geometric elements....
Definition gmPolylineDiscontinuity.h:48
Definition gmPolylineDiscontinuity.cpp:54
Interface class for accessing and setting values from an "indexable" collection of values.
Definition gmValueAccessor.h:60
Declaration of the GmDiscontinuity class.
GmLogLevel
Available log levels list.
Definition gmLog.h:36
Declaration of the GmSegmentCellIntersection class & friends.
arma::vec GmVector
The basic type for a GeMA vector object. Currently based on an Armadillo vector.
Definition gmVector.h:34
int capacity() const const
int size() const const
Representation for the intersection between a polyline segment and a mesh cell. Can be used both in 2...
Definition gmSegmentCellIntersection.h:61