Itasca C++ Interface
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 
12 namespace itasca {
13  class IGroup;
14  class IThing;
15 }
16 namespace itascaxd {
17  class IGeomPoint;
18  class IRange;
19 }
20 
21 namespace extruder {
22  using namespace itascaxd;
23 
24  class IExtrudePoint;
25  class IExtrudeEdge;
26  class IExtrudeRegion;
27  class IExtrudePath;
28 
31  class IExtrudeSet {
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
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 const IExtrudeEdge * findEdgeWithID(uint64 id) const =0
given an id, returns a const pointer to the edge object.
virtual void getRegionLocations(FArray< DVect > *ret, uint64 wr=0, int we=-1)=0
Get the locations of all of the region nodes.
virtual void setAutoValidation(bool x)=0
Set auto-validation state, true means validation checks disable changes that created invalidate geome...
virtual void setMetaKeyValue(const QString &key, const QString &value)=0
Add or change MetaData key and value.
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 void setEdgeCombineTolerance(const double tol)=0
Set tolerance for combining multiple edges to a single curved edge (affects amount of control points ...
virtual void clearMetaData()=0
virtual bool isAutoZoneTotalAllowed() const =0
check if AutoZone Total can be performed
virtual void setVAxis(DVect v)=0
Set extrusion v-axis direction (unit length), adjust u-axis and normal.
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 const IContainer * getPointContainer() const =0
returns a const pointer to the point container.
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 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 uint32 getPointGroupNotice() const =0
Notice point groups changed.
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 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 const IThing * getIThing() const =0
returns its const IThing pointer
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 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 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 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 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 IContainer * getPointContainer()=0
Adds a block to the block container and returns a pointer to the newly created object.
virtual double getEdgeCombineTolerance() const =0
Return tolerance for combining multiple edges.
virtual const IExtrudePoint * findPointWithID(uint64 id) const =0
given an id, returns a const pointer to the point object.
virtual void setOrigin(DVect c)=0
Set extrusion origin.
virtual double computeZones2D() const =0
Return number of 2d zones in xy plane.
virtual const IContainer * getRegionsContainer() const =0
returns a const pointer to the block container.
virtual IString getName() const =0
returns the set name
virtual Axes getAxes() const =0
Return internal Axes (modified for orthogonality and unit lengths)
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 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 * 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 double computeValidationAbsTol() const =0
Compute absolute tolerance used in validation.
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 const IContainer * getEdgeContainer() const =0
returns a const pointer to the edge container container.
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 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 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 Axes & getAxesInput() const =0
Return input (raw) Axes.
virtual const IExtrudeRegion * findBlockWithID(uint64 id) const =0
given an id, returns a const pointer to the block object.
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 IThing * getIThing()=0
returns its IThing pointer
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 int getEdgeSize() const =0
returns number of edges.
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 bool valid(QList< QString > *problems=nullptr, bool areaCheck=false) const =0
Return true if basic block geometry is good.
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 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 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 DVect & getUAxis() const =0
Return extrusion u-axis direction (unit length)
virtual const DVect & getVAxis() const =0
Return extrusion v-axis direction (unit length)
virtual IContainer * getRegionsContainer()=0
returns a pointer to the block container.
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 IExtrudeRegion * findBlockWithID(uint64 id)=0
given an id, returns a pointer to the block object.
virtual bool isAutoValidation() const =0
Return auto-validation state, true means validation checks disable changes that created invalidate ge...
virtual const DVect & getOrigin() const =0
Set AutoZone flag state.
virtual IExtrudePoint * createPoint(const DVect &pos)=0
Adds a point to the point container and returns a pointer to the newly created object....
virtual IContainer * getEdgeContainer()=0
Test if a (quad) block exists with 2 points on a diagonal.
virtual void setValidationTol(double x)=0
Set relative tolerance used in auto-validation.
virtual IExtrudeEdge * findEdgeWithID(uint64 id)=0
given an id, returns a pointer to the edge object.
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 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:150
Interface for container of IThings.
namespace Itasca
Definition: basememory.cpp:10
Itasca Library standard namespace, specific to 2D or 3D.
Definition: icontactmodule.h:4