Itasca C++ Interface
Loading...
Searching...
No Matches
iextrudeset.h
Go to the documentation of this file.
1#pragma once
2
9#include "utility/interface/igroup.h"
10#include "base/src/farray.h"
11
12namespace itasca {
13 class IGroup;
14 class IThing;
15}
16namespace itascaxd {
17 class IGeomPoint;
18 class IRange;
19}
20
21namespace extruder {
22 using namespace itascaxd;
23
24 class IExtrudePoint;
25 class IExtrudeEdge;
26 class IExtrudeRegion;
27 class IExtrudePath;
28
32 public:
34 inline static const TType type_ = 0x4cb61c35;
35
36 shared::Signal<uint64> pointAdded;
37 shared::Signal<uint64> pointRemoved;
38 shared::Signal<uint64> edgeAdded;
39 shared::Signal<uint64> edgeRemoved;
40 shared::Signal<uint64> blockAdded;
41 shared::Signal<uint64> blockAddedLater;
42 shared::Signal<uint64> blockRemoved;
43 shared::Signal<uint64> pointMoved;
44 shared::Signal<uint64> edgeMoved;
45 shared::Signal<uint64> blockMoved;
46 shared::Signal<uint64> edgePointChanged;
47 shared::Signal<uint64> blockEdgeChanged;
48 shared::Signal<uint64> edgeTypeChanged;
49 shared::Signal<uint64, uint32> edgeControlPointAdded;// eid, index
50 shared::Signal<uint64, uint32> edgeSizeChanged;
51 shared::Signal<uint64, double> edgeRatioChanged; // id, ratio
52 shared::Signal<uint64, uint32> blockMultiplierChanged; // id, m
53 shared::Signal<uint64> blockOrientationChanged;
54 shared::Signal<> axesChanged;
55 shared::Signal<bool, int32, double, int32, int32> autoZoneChange; // on, mode, dx, n, t
56 shared::Signal<int32> metaAdded;
57 shared::Signal<int32> metaRemoved;
58 shared::Signal<int32> metaChanged;
59#ifdef THREED
60 shared::Signal<int32> segmentsChanged; // count
61 shared::Signal<int32, uint32> segmentSizeChanged; // index, size
62 shared::Signal<int32, double> segmentRatioChanged; // index, rat
63 shared::Signal<int32, double> segmentLengthChanged; // index, length
64 shared::Signal<double> segmentOriginChanged; // z0
65#endif
66
68 virtual IThing * getIThing()=0;
70 virtual const IThing * getIThing() const=0;
71
73 virtual IString getName() const=0;
74
76 virtual IExtrudePoint * createPoint(const DVect &pos)=0;
78 virtual IExtrudeEdge * createEdge(IExtrudePoint *end1,IExtrudePoint *end2,bool useDefaultSize, QString* str)=0;
80 //virtual IExtrudeRegion * createBlock()=0;
81
85 virtual const IContainer * getPointContainer() const=0;
87 virtual const IExtrudePoint *findPointWithID(uint64 id) const=0;
89 virtual IExtrudePoint * findPointWithID(uint64 id)=0;
91 virtual const IGeomPoint * findClosestPoint(const DVect &pos,const double &radius=limits<double>::max()) const=0;
93 virtual IGeomPoint * findClosestPoint(const DVect &pos,const double &radius=limits<double>::max())=0;
97 //virtual IExtrudeRegion * findBlockByEdge(ExtrudeEdge* edge)=0;
98
102 virtual const IContainer * getEdgeContainer() const=0;
104 virtual const IExtrudeEdge * findEdgeWithID(uint64 id) const=0;
106 virtual IExtrudeEdge * findEdgeWithID(uint64 id)=0;
108 virtual const IExtrudeEdge * findClosestEdge(const DVect &pos,const double &radius=limits<double>::max()) const=0;
110 virtual IExtrudeEdge * findClosestEdge(const DVect &pos,const double &radius=limits<double>::max())=0;
112 virtual const IExtrudeEdge * findMatchingEdge(const IGeomPoint *end1,const IGeomPoint *end2) const=0;
114 virtual IExtrudeEdge * findMatchingEdge(const IGeomPoint *end1,const IGeomPoint *end2)=0;
116 virtual uint32 getEdgesByBreakAngle(uint32 edgeID, double breakAngle, bool nonIntersected, QList<uint32>* connectedEdges) const = 0;
118 virtual uint32 combineEdgesToSingleEdge(QList<uint32>* connectedEdges, QString *edgeWarning=nullptr) = 0;
120 virtual void deletePoint(IExtrudePoint *pointIn, uint32 *edgeCount=0, uint32 *blockCount=0)=0;
122 virtual void deleteEdge(IExtrudeEdge *edgeIn, uint32 *blockCount=0)=0;
124 virtual void deleteBlock(IExtrudeRegion *b) = 0;
126 virtual IExtrudeRegion * createBlockByPoints(IExtrudePoint* p0In, IExtrudePoint* p1In, IExtrudePoint* p2In, IExtrudePoint* p3In, uint32* newedgecount=0, bool ignoreerror=false) = 0;
128 virtual IExtrudeRegion * createBlockByPoints(QSet<uint64> inputPts, QSet<QString> *errorsList = nullptr, QList<QString> *warningsList = nullptr, QList<QString> *infoList = nullptr) = 0;
130 virtual IExtrudeRegion * createBlockAt(DVect pos, QSet<QString> *errorsList = nullptr, QList<QString> *warningsList = nullptr, QList<QString> *infoList = nullptr) = 0;
132 virtual bool createBlocksAuto(IGroupID *group = nullptr, QSet<QString> *errorsList = nullptr, QList<QString> *warningsList = nullptr, QList<QString> *infoList = nullptr, const IRange *range = nullptr) = 0;
133
135 virtual int getPointSize() const =0;
137 virtual int getEdgeSize() const =0;
139 virtual int getBlockSize() const =0;
140
141 //metadata
144 virtual void clearMetaData()=0;
146 virtual void setMetaKeyValue(const QString &key, const QString &value)=0;
148 virtual int getMetaCount() const=0;
150 virtual QString getMetaKey(int index) const=0;
152 virtual QString getMetaValue(int index) const=0;
154 virtual int findMetaKeyIndex(const QString &key) const=0;
156 virtual QString findMetaKeyValue(const QString &key) const=0;
157
161 virtual const IContainer * getRegionsContainer() const=0;
163 virtual const IExtrudeRegion * findBlockWithID(uint64 id) const=0;
165 virtual IExtrudeRegion * findBlockWithID(uint64 id)=0;
167 virtual const IExtrudeRegion * findClosestBlock(const DVect &pos,const double &radius=limits<double>::max()) const=0;
169 virtual IExtrudeRegion * findClosestBlock(const DVect &pos,const double &radius=limits<double>::max())=0;
171 virtual void getRegionLocations(FArray<DVect> *ret,uint64 wr=0,int we=-1)=0;
172
174 virtual bool valid(QList<QString> *problems = nullptr, bool areaCheck = false) const=0;
175
177 //virtual bool testPPMerge(double atol) const=0;
179 //virtual bool testPEMerge(double atol) const=0;
181 //virtual bool testEEMerge(const IExtrudeEdge* e1 = nullptr, const double eetol = 0.05) const=0;
183 //virtual bool testBlockInvalid() const=0;
185 //virtual bool testAuto(const double eetol = 0.05) const=0;
186
188 virtual bool isAutoZone() const=0;
190 virtual double getAutoZoneEdge() const=0;
192 virtual int getAutoZoneDir() const=0;
194 virtual int getAutoZoneMode() const=0;
196 virtual int getAutoZoneSize() const=0;
198 virtual int getAutoZoneTotal() const=0;
200 virtual bool isAutoZoneTotalAllowed() const = 0;
202 virtual double computeZones2D() const=0;
203#ifdef THREED
205 virtual double computeTotalZones() const=0;
206#endif
208 //virtual void setAutoZone(bool x)=0; // AP: setting "AutoZone active on" is not compatible with irregular blocks - disabling this functionality for now
210 //virtual void setAutoZoneMode(int mode)=0;
212 //virtual void setAutoZoneDir(int dir)=0;
214 //virtual void setAutoZoneEdge(double x, Parse*)=0;
216 //virtual void setAutoZoneSize(int n, Parse*)=0;
218 //virtual void setAutoZoneTotal(int nz, Parse*)=0;
219
221 virtual const DVect &getOrigin() const=0;
223 virtual const Axes &getAxesInput() const=0;
225 virtual Axes getAxes() const=0;
227 virtual const DVect &getUAxis() const=0;
229 virtual const DVect &getVAxis() const=0;
230#ifdef THREED
232 virtual const IExtrudePath* getPath() const = 0;
234 virtual const DVect3 &getNAxis() const=0;
236 virtual double getSegmentZOrigin() const=0;
237
238 virtual void getOriginGroupList(FArray<IGroupID>*) const = 0;
239#endif
240
242 virtual void setOrigin(DVect c)=0;
243 // set one axis - compute 2
245 virtual void setUAxis(DVect u)=0;
247 virtual void setVAxis(DVect v)=0;
249 virtual void setUVAxes(DVect u,DVect v)=0;
251 virtual bool testAxesBasisNormal()=0;
253 virtual bool testAxesBasisOrthogonal()=0;
254#ifdef THREED
256 virtual void setNAxis(DVect n)=0;
257 // set two axes - compute 1
259 virtual void setUNAxes(DVect u,DVect n)=0;
261 virtual void setVNAxes(DVect v,DVect n)=0;
262
263#endif
264
266 virtual bool isAutoValidation() const=0;
268 virtual void setAutoValidation(bool x)=0;
270 virtual double getValidationTol() const=0;
272 virtual void setValidationTol(double x)=0;
274 virtual double computeValidationAbsTol() const=0;
276 virtual void setEdgeCombineTolerance(const double tol) = 0;
278 virtual double getEdgeCombineTolerance() const = 0;
279
280 // test zone quality
281
283 virtual bool countZoneQuality(int statecount[], bool areaCheck = false) const=0;
285 virtual bool anyZonesBad(bool areaCheck = false) const=0;
287 virtual QString getBadZonesReport() const=0;
289 virtual QString getZoneQualityReport(bool badonly=false) const=0;
291 virtual QString getZoneQualityReport(int statecount[]) const=0;
292
294 virtual uint32 getPointGroupNotice() const=0;
296 virtual uint32 getEdgeGroupNotice() const=0;
298 virtual uint32 getBlockGroupNotice() const=0;
300 virtual uint32 getTwoDGeomChangedNotice() const=0;
301#ifdef THREED
303 virtual uint32 getSegmentGroupNotice() const=0;
305 virtual uint32 getSegmentNodeGroupNotice() const=0;
307 virtual bool getPathModified() const = 0;
308#endif
309
310 };
311} // namespace f3
312// EoF
Class for specifying a particular 3D cartesian axes system, and converting to and from it.
Definition axes.h:121
An array class that attempts to minimize unnecessary heap access.
Definition farray.h:25
Definition istring.h:14
Definition idef.h:50
Interface for IExtrudeEdge objects.
Definition iextrudeedge.h:27
Provides interface to IExtrudePath. Contains containers for points, edges and blocks objects.
Definition iextrudepath.h:32
Interface for IExtrudePoint objects.
Definition iextrudepoint.h:20
Interface for IExtrudeEdge objects.
Definition iextruderegion.h:21
Provides interface to IExtrudeSet. Contains containers for points, edges and blocks objects.
Definition iextrudeset.h:31
virtual void getRegionLocations(FArray< DVect > *ret, uint64 wr=0, int we=-1)=0
Get the locations of all of the region nodes.
virtual const DVect & getVAxis() const =0
Return extrusion v-axis direction (unit length)
virtual void setAutoValidation(bool x)=0
Set auto-validation state, true means validation checks disable changes that created invalidate geome...
virtual IExtrudeRegion * createBlockAt(DVect pos, QSet< QString > *errorsList=nullptr, QList< QString > *warningsList=nullptr, QList< QString > *infoList=nullptr)=0
Create a new block at a given position.
virtual void setMetaKeyValue(const QString &key, const QString &value)=0
Add or change MetaData key and value.
virtual const IExtrudeEdge * findEdgeWithID(uint64 id) const =0
given an id, returns a const pointer to the edge object.
virtual uint32 getEdgesByBreakAngle(uint32 edgeID, double breakAngle, bool nonIntersected, QList< uint32 > *connectedEdges) const =0
given one edge, populate connectedEdges with ID's of edges which are connected to it and to one anoth...
virtual uint32 getTwoDGeomChangedNotice() const =0
Notice that 2D geometry has changed (points/edges/blocks moved or removed)
virtual const DVect & getOrigin() const =0
Set AutoZone flag state.
virtual void setEdgeCombineTolerance(const double tol)=0
Set tolerance for combining multiple edges to a single curved edge (affects amount of control points ...
virtual const IExtrudeEdge * findMatchingEdge(const IGeomPoint *end1, const IGeomPoint *end2) const =0
given the two vertices end1 and end2 of an edge, returns a pointer to the matching edge object.
virtual void clearMetaData()=0
virtual bool isAutoZoneTotalAllowed() const =0
check if AutoZone Total can be performed
virtual IExtrudeEdge * findMatchingEdge(const IGeomPoint *end1, const IGeomPoint *end2)=0
given the two vertices end1 and end2 of an edge, returns a pointer to the matching edge object.
virtual IExtrudeEdge * findEdgeWithID(uint64 id)=0
given an id, returns a pointer to the edge object.
virtual void setVAxis(DVect v)=0
Set extrusion v-axis direction (unit length), adjust u-axis and normal.
virtual const IExtrudePoint * findPointWithID(uint64 id) const =0
given an id, returns a const pointer to the point object.
virtual bool countZoneQuality(int statecount[], bool areaCheck=false) const =0
Count number of problem zones, index 0=ok, 1,2=warnings, 3,4=bad. Return true if any bad.
virtual bool anyZonesBad(bool areaCheck=false) const =0
Return true if any bad zones.
virtual QString getMetaKey(int index) const =0
Given an index to MetaData vector, returns the MetaData key;.
virtual QString getMetaValue(int index) const =0
Given an index to MetaData vector, returns the MetaData value;.
virtual const IExtrudeRegion * findBlockWithID(uint64 id) const =0
given an id, returns a const pointer to the block object.
virtual uint32 getEdgeGroupNotice() const =0
Notice edge groups changed.
virtual void setUVAxes(DVect u, DVect v)=0
Set extrusion u,v axes, adjust v-axis, compute normal.
virtual double getAutoZoneEdge() const =0
Return AutoZone target average zone edge length.
virtual void deleteBlock(IExtrudeRegion *b)=0
Delete block from set.
virtual const IContainer * getRegionsContainer() const =0
returns a const pointer to the block container.
virtual uint32 getPointGroupNotice() const =0
Notice point groups changed.
virtual void deletePoint(IExtrudePoint *pointIn, uint32 *edgeCount=0, uint32 *blockCount=0)=0
Delete point from set.
virtual uint32 combineEdgesToSingleEdge(QList< uint32 > *connectedEdges, QString *edgeWarning=nullptr)=0
given list of edge IDs, combine them to single curved edge
virtual IExtrudeEdge * createEdge(IExtrudePoint *end1, IExtrudePoint *end2, bool useDefaultSize, QString *str)=0
Adds a edge to the edge container and returns a pointer to the newly created object....
virtual QString getZoneQualityReport(int statecount[]) const =0
Convert countlists to string report.
virtual int getAutoZoneMode() const =0
Returns AutoZone modes: 0 for edge, 1 for size, 2 for zones.
virtual bool createBlocksAuto(IGroupID *group=nullptr, QSet< QString > *errorsList=nullptr, QList< QString > *warningsList=nullptr, QList< QString > *infoList=nullptr, const IRange *range=nullptr)=0
Automatically create new blocks in all suitable closed polygons presents in the set.
virtual QString getBadZonesReport() const =0
Return descriptive string of warning and bad zone counts.
virtual IContainer * getRegionsContainer()=0
returns a pointer to the block container.
virtual void setUAxis(DVect u)=0
Set extrusion u-axis direction (unit length), adjust v-axis and normal.
virtual bool testAxesBasisOrthogonal()=0
Return true if u,v (and n in 3D) axes are orthogonal.
virtual double getEdgeCombineTolerance() const =0
Return tolerance for combining multiple edges.
virtual void setOrigin(DVect c)=0
Set extrusion origin.
virtual double computeZones2D() const =0
Return number of 2d zones in xy plane.
virtual IString getName() const =0
returns the set name
virtual const QList< QList< const IExtrudePoint * > > findPotentialPolygonAt(DVect pos) const =0
Test if a potential closed polygon exists at pos. Returns vertices of the polygon.
virtual Axes getAxes() const =0
Return internal Axes (modified for orthogonality and unit lengths)
virtual IExtrudePoint * createPoint(const DVect &pos)=0
Adds a point to the point container and returns a pointer to the newly created object....
virtual int getAutoZoneDir() const =0
Return AutoZone direction: 0=all, 1=x,y only, 2=normal only.
virtual int getPointSize() const =0
returns number of points.
virtual uint32 getBlockGroupNotice() const =0
Notice block groups changed.
virtual IExtrudeRegion * createBlockByPoints(QSet< uint64 > inputPts, QSet< QString > *errorsList=nullptr, QList< QString > *warningsList=nullptr, QList< QString > *infoList=nullptr)=0
Create a new block by given set of points (point IDs)
virtual double computeValidationAbsTol() const =0
Compute absolute tolerance used in validation.
static const TType type_
The type identification number for this class, for use in convert_cast() and convert_getcast().
Definition iextrudeset.h:34
virtual int getBlockSize() const =0
returns number of blocks.
virtual QString findMetaKeyValue(const QString &key) const =0
Given an key, searchs the MedaData vector and returns the corresponding MetaData value;.
virtual const DVect & getUAxis() const =0
Return extrusion u-axis direction (unit length)
virtual IContainer * getEdgeContainer()=0
Test if a (quad) block exists with 2 points on a diagonal.
virtual IExtrudePoint * findPointWithID(uint64 id)=0
given an id, returns a pointer to the point object.
virtual int getAutoZoneTotal() const =0
Return AutoZone target (maximum) total number of zones.
virtual const IGeomPoint * findClosestPoint(const DVect &pos, const double &radius=limits< double >::max()) const =0
given a position pos in space, returns a const pointer to the closest point object within a given rad...
virtual int findMetaKeyIndex(const QString &key) const =0
Given an key, returns the corresponding index of the MetaData vector;.
virtual bool isAutoZone() const =0
Return true if any point-point are too close, by distance atol.
virtual QString getZoneQualityReport(bool badonly=false) const =0
Return descriptive string of bad zone counts.
virtual const IExtrudeRegion * findClosestBlock(const DVect &pos, const double &radius=limits< double >::max()) const =0
given a position pos in space, returns a const pointer to the closest block object within a given rad...
virtual IThing * getIThing()=0
returns its IThing pointer
virtual const IThing * getIThing() const =0
returns its const IThing pointer
virtual int getEdgeSize() const =0
returns number of edges.
virtual IExtrudeEdge * findClosestEdge(const DVect &pos, const double &radius=limits< double >::max())=0
given a position pos in space, returns a pointer to the closest edge object within a given radius.
virtual bool valid(QList< QString > *problems=nullptr, bool areaCheck=false) const =0
Return true if basic block geometry is good.
virtual const IContainer * getEdgeContainer() const =0
returns a const pointer to the edge container container.
virtual int getAutoZoneSize() const =0
Return AutoZone size (number of zones across largest dimension of x,y)
virtual double getValidationTol() const =0
Return relative tolerance used in auto-validation.
virtual IGeomPoint * findClosestPoint(const DVect &pos, const double &radius=limits< double >::max())=0
given a position pos in space, returns a pointer to the closest point object within a given radius.
virtual int getMetaCount() const =0
Returns the number of MetaData objects in the Metadata vector.
virtual void deleteEdge(IExtrudeEdge *edgeIn, uint32 *blockCount=0)=0
Delete edge from set.
virtual const IExtrudeEdge * findClosestEdge(const DVect &pos, const double &radius=limits< double >::max()) const =0
given a position pos in space, returns a const pointer to the closest edge object within a given radi...
virtual const IContainer * getPointContainer() const =0
returns a const pointer to the point container.
virtual IContainer * getPointContainer()=0
Adds a block to the block container and returns a pointer to the newly created object.
virtual bool isAutoValidation() const =0
Return auto-validation state, true means validation checks disable changes that created invalidate ge...
virtual IExtrudeRegion * findClosestBlock(const DVect &pos, const double &radius=limits< double >::max())=0
given a position pos in space, returns a pointer to the closest block object within a given radius.
virtual IExtrudeRegion * findBlockWithID(uint64 id)=0
given an id, returns a pointer to the block object.
virtual const Axes & getAxesInput() const =0
Return input (raw) Axes.
virtual void setValidationTol(double x)=0
Set relative tolerance used in auto-validation.
virtual IExtrudeRegion * createBlockByPoints(IExtrudePoint *p0In, IExtrudePoint *p1In, IExtrudePoint *p2In, IExtrudePoint *p3In, uint32 *newedgecount=0, bool ignoreerror=false)=0
Create a new regular block by 3 or 4 points.
virtual bool testAxesBasisNormal()=0
Return true if u,v (and n in 3D) axes are unit length.
Interface for containers of IThings.
Definition icontainer.h:21
Definition igroup.h:82
Base class for items that will be stored in containers.
Definition ithing.h:30
Interface for a user-defined geometric point.
Definition igeompoint.h:18
Interface to a filter, used as the main method for filtering objects.
Definition irange.h:32
debug checked shorthand for std::numeric_limits<T>::
Definition limit.h:25
An array class that attempts to minimize unnecessary heap access.
uint32 TType
class type indicator
Definition basedef.h:46
DVect3 DVect
Vector of doubles, either 2D or 3D.
Definition dim.h:154
Interface for container of IThings.
namespace Itasca
Definition basememory.cpp:10
Itasca Library standard namespace, specific to 2D or 3D.
Definition icontactmodule.h:4