Itasca C++ Interface
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Modules Pages
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 
30  class IExtrudeSet {
31  public:
33  inline static const TType type_ = 0x4cb61c35;
34 
36  virtual IThing * getIThing()=0;
38  virtual const IThing * getIThing() const=0;
40  virtual const QObject * getQObject() const=0;
42  virtual QObject * getQObject()=0;
43 
45  virtual QString getName() const=0;
46 
48  virtual IExtrudePoint * createPoint(const DVect &pos)=0;
50  virtual IExtrudeEdge * createEdge(IExtrudePoint *end1,IExtrudePoint *end2,bool useDefaultSize, QString* str)=0;
52  //virtual IExtrudeRegion * createBlock()=0;
53 
55  virtual IContainer * getPointContainer()=0;
57  virtual const IContainer * getPointContainer() const=0;
59  virtual const IExtrudePoint *findPointWithID(quint64 id) const=0;
61  virtual IExtrudePoint * findPointWithID(quint64 id)=0;
63  virtual const IGeomPoint * findClosestPoint(const DVect &pos,const double &radius=limits<double>::max()) const=0;
65  virtual IGeomPoint * findClosestPoint(const DVect &pos,const double &radius=limits<double>::max())=0;
67  virtual const QList<QList<const IExtrudePoint*>> findPotentialPolygonAt(DVect pos) const=0;
69  //virtual IExtrudeRegion * findBlockByEdge(ExtrudeEdge* edge)=0;
70 
72  virtual IContainer * getEdgeContainer()=0;
74  virtual const IContainer * getEdgeContainer() const=0;
76  virtual const IExtrudeEdge * findEdgeWithID(quint64 id) const=0;
78  virtual IExtrudeEdge * findEdgeWithID(quint64 id)=0;
80  virtual const IExtrudeEdge * findClosestEdge(const DVect &pos,const double &radius=limits<double>::max()) const=0;
82  virtual IExtrudeEdge * findClosestEdge(const DVect &pos,const double &radius=limits<double>::max())=0;
84  virtual const IExtrudeEdge * findMatchingEdge(const IGeomPoint *end1,const IGeomPoint *end2) const=0;
86  virtual IExtrudeEdge * findMatchingEdge(const IGeomPoint *end1,const IGeomPoint *end2)=0;
88  virtual quint32 getEdgesByBreakAngle(quint32 edgeID, double breakAngle, QList<quint32>* connectedEdges) const = 0;
90  virtual quint32 combineEdgesToSingleEdge(QList<quint32>* connectedEdges, QString *edgeWarning=nullptr) = 0;
92  virtual void deletePoint(IExtrudePoint *pointIn, uint *edgeCount=0, uint *blockCount=0)=0;
94  virtual void deleteEdge(IExtrudeEdge *edgeIn, uint *blockCount=0)=0;
96  virtual void deleteBlock(IExtrudeRegion *b) = 0;
98  virtual IExtrudeRegion * createBlockByPoints(IExtrudePoint* p0In, IExtrudePoint* p1In, IExtrudePoint* p2In, IExtrudePoint* p3In, quint32* newedgecount=0, bool ignoreerror=false) = 0;
100  virtual IExtrudeRegion * createBlockByPoints(QSet<quint64> inputPts, QSet<QString> *errorsList = nullptr, QList<QString> *warningsList = nullptr) = 0;
102  virtual IExtrudeRegion * createBlockAt(DVect pos, QSet<QString> *errorsList = nullptr, QList<QString> *outMessages = nullptr) = 0;
104  virtual bool createBlocksAuto(IGroupID *group = nullptr, QSet<QString> *errorsList = nullptr, QList<QString> *outMessages = nullptr, const IRange *range = nullptr) = 0;
105 
107  virtual int getPointSize() const =0;
109  virtual int getEdgeSize()=0;
111  virtual int getBlockSize()=0;
112 
113  //metadata
116  virtual void clearMetaData()=0;
118  virtual void setMetaKeyValue(const QString &key, const QString &value)=0;
120  virtual int getMetaCount() const=0;
122  virtual QString getMetaKey(int index) const=0;
124  virtual QString getMetaValue(int index) const=0;
126  virtual int findMetaKeyIndex(const QString &key) const=0;
128  virtual QString findMetaKeyValue(const QString &key) const=0;
129 
131  virtual IContainer * getRegionsContainer()=0;
133  virtual const IContainer * getRegionsContainer() const=0;
135  virtual const IExtrudeRegion * findBlockWithID(quint64 id) const=0;
137  virtual IExtrudeRegion * findBlockWithID(quint64 id)=0;
139  virtual const IExtrudeRegion * findClosestBlock(const DVect &pos,const double &radius=limits<double>::max()) const=0;
141  virtual IExtrudeRegion * findClosestBlock(const DVect &pos,const double &radius=limits<double>::max())=0;
143  virtual void getRegionLocations(FArray<DVect> *ret,quint64 wr=0,int we=-1)=0;
144 
146  virtual bool valid(QList<QString> *problems = nullptr, bool areaCheck = false) const=0;
147 
149  //virtual bool testPPMerge(double atol) const=0;
151  //virtual bool testPEMerge(double atol) const=0;
153  //virtual bool testEEMerge(const IExtrudeEdge* e1 = nullptr, const double eetol = 0.05) const=0;
155  //virtual bool testBlockInvalid() const=0;
157  //virtual bool testAuto(const double eetol = 0.05) const=0;
158 
160  virtual bool isAutoZone() const=0;
162  virtual double getAutoZoneEdge() const=0;
164  virtual int getAutoZoneDir() const=0;
166  virtual int getAutoZoneMode() const=0;
168  virtual int getAutoZoneSize() const=0;
170  virtual int getAutoZoneTotal() const=0;
172  virtual bool isAutoZoneTotalAllowed() const = 0;
174  virtual double computeZones2D() const=0;
175 #ifdef THREED
176  virtual double computeTotalZones() const=0;
178 #endif
179  //virtual void setAutoZone(bool x)=0; // AP: setting "AutoZone active on" is not compatible with irregular blocks - disabling this functionality for now
182  virtual void setAutoZoneMode(int mode)=0;
184  virtual void setAutoZoneDir(int dir)=0;
186  virtual void setAutoZoneEdge(double x)=0;
188  virtual void setAutoZoneSize(int n)=0;
190  virtual void setAutoZoneTotal(int nz)=0;
191 
193  virtual const DVect &getOrigin() const=0;
195  virtual const Axes &getAxesInput() const=0;
197  virtual Axes getAxes() const=0;
199  virtual const DVect &getUAxis() const=0;
201  virtual const DVect &getVAxis() const=0;
202  // Extrusion segments
203 #ifdef THREED
204  virtual int getSegmentCount() const=0;
207  virtual const DVect3 &getNAxis() const=0;
209  virtual double getSegmentZOrigin() const=0;
211  virtual double getSegmentLength(int seg) const=0;
213  virtual double getSegmentRatio(int seg) const=0;
215  virtual int getSegmentSize(int seg) const=0;
217  virtual double getSegmentPosition(int seg /* 0-based */ ) const=0; // origin excluded
219  virtual double getSegmentDepth(int seg) const=0; // origin excluded
221  virtual const IGroup *getSegmentGroup(int seg,const ISlotID &slot) const=0;
223  virtual QString getSegmentGroupName(int seg,const ISlotID &slot) const=0;
225  virtual bool removeSegmentGroup(int seg, const QString &name)=0;
227  virtual uint getSegmentIsInGroup(int seg,const FArray<IGroupID> &ids,TType type=0,bool only=false) const=0;
229  virtual uint getSegmentGroupList(int seg,FArray<IGroupID> *list) const=0;
231  virtual const IGroup *getSegmentNodeGroup(int seg,const ISlotID &slot) const=0;
233  virtual QString getSegmentNodeGroupName(int seg,const ISlotID &slot) const=0;
235  virtual bool removeSegmentNodeGroup(int seg, const QString &name)=0;
237  virtual uint getSegmentNodeIsInGroup(int seg,const FArray<IGroupID> &ids,TType type=0,bool only=false) const=0;
239  virtual uint getSegmentNodeGroupList(int seg,FArray<IGroupID> *list) const=0;
241  virtual double getDiscretizedSegment(int seg, int gp) const=0;
242 #endif
243 
245  virtual void setOrigin(DVect c)=0;
246  // set one axis - compute 2
248  virtual void setUAxis(DVect u)=0;
250  virtual void setVAxis(DVect v)=0;
252  virtual void setUVAxes(DVect u,DVect v)=0;
254  virtual bool testAxesBasisNormal()=0;
256  virtual bool testAxesBasisOrthogonal()=0;
257 #ifdef THREED
258  virtual void setNAxis(DVect n)=0;
260  // set two axes - compute 1
262  virtual void setUNAxes(DVect u,DVect n)=0;
264  virtual void setVNAxes(DVect v,DVect n)=0;
265 
267  virtual void setSegmentLength(int index, double len)=0;
269  virtual void setSegmentSize(int index, int size)=0;
271  virtual void setSegmentRatio(int index, double rat)=0;
273  virtual bool addSegmentNodeByPosition(double pos)=0;
274 #endif
275 
277  virtual bool isAutoValidation() const=0;
279  virtual void setAutoValidation(bool x)=0;
281  virtual double getValidationTol() const=0;
283  virtual void setValidationTol(double x)=0;
285  virtual double computeValidationAbsTol() const=0;
287  virtual void setEdgeCombineTolerance(const double tol) = 0;
289  virtual double getEdgeCombineTolerance() const = 0;
290 
291  // test zone quality
292 
294  virtual bool countZoneQuality(int statecount[], bool areaCheck = false) const=0;
296  virtual bool anyZonesBad(bool areaCheck = false) const=0;
298  virtual QString getBadZonesReport() const=0;
300  virtual QString getZoneQualityReport(bool badonly=false) const=0;
302  virtual QString getZoneQualityReport(int statecount[]) const=0;
303 
304 
305  // Signals
307  virtual void pointAdded(quint64 id)=0;
309  virtual void pointRemoved(quint64 id)=0;
311  virtual void edgeAdded(quint64 id)=0;
313  virtual void edgeRemoved(quint64 id)=0;
315  virtual void blockAdded(quint64 id)=0;
317  virtual void blockAddedLater(quint64 id)=0;
319  virtual void blockRemoved(quint64 id)=0;
321  virtual void pointMoved(quint64 id)=0;
323  virtual void edgeMoved(quint64 id)=0;
325  virtual void blockMoved(quint64 izd)=0;
327  virtual void edgePointChanged(quint64 id)=0;
329  virtual void blockEdgeChanged(quint64 id)=0;
331  virtual void edgeTypeChanged(quint64 id)=0;
333  virtual void sendEdgeControlPointAddedNotice(quint64 id, int index)=0;
335  virtual void edgeSizeChanged(quint64 id,quint32 size)=0;
337  virtual void edgeRatioChanged(quint64 id,const double &rat)=0;
341  virtual void blockMultiplierChanged(quint64 id,quint32 m)=0;
343  virtual void blockOrientationChanged(quint64 id)=0;
346  virtual void axesChanged()=0;
347 #ifdef THREED
348  virtual void segmentsChanged(int count)=0;
350  virtual void segmentSizeChanged(int index, quint32 size)=0;
352  virtual void segmentRatioChanged(int index, const double &rat)=0;
354  virtual void segmentLengthChanged(int index, const double &length)=0;
356  virtual void segmentOriginChanged(const double &z0)=0;
357 #endif
358 
360  virtual void autoZoneChange(bool on, int mode, double dx, int n, int t)=0;
361 
363  virtual void metaAdded(int index)=0; // index=-1 means ALL added (restore)
365  virtual void metaRemoved(int index)=0; // index=-1 means ALL removed (new)
367  virtual void metaChanged(int index)=0;
369  virtual uint getPointGroupNotice() const=0;
371  virtual uint getEdgeGroupNotice() const=0;
373  virtual uint getBlockGroupNotice() const=0;
375  virtual uint getTwoDGeomChangedNotice() const=0;
376 #ifdef THREED
377  virtual uint getSegmentGroupNotice() const=0;
380  virtual uint getSegmentNodeGroupNotice() const=0;
381 #endif
382 
383  };
384 } // namespace f3
385 // EoF
Interface to a group object.
Definition: igroup.h:9
Provides interface to IExtrudeSet. Contains containers for points, edges and blocks objects.
Definition: iextrudeset.h:30
Interface to a filter, used as the main method for filtering objects.
Definition: irange.h:31
namespace Itasca
Definition: basememory.cpp:9
Base class for items that will be stored in containers.
Definition: ithing.h:31
Class for specifying a particular 3D cartesian axes system, and converting to and from it.
Definition: axes.h:120
An array class that attempts to minimize unnecessary heap access.
debug checked shorthand for std::numeric_limits<T>::
Definition: limit.h:25
Definition: igroup.h:91
Interface for IExtrudeEdge objects.
Definition: iextrudeedge.h:27
unsigned int TType
class type indicator
Definition: basedef.h:41
Interface for a user-defined geometric point.
Definition: igeompoint.h:18
Itasca Library standard namespace, specific to 2D or 3D.
Definition: icontactmodule.h:4
Interface for IExtrudePoint objects.
Definition: iextrudepoint.h:20
EXPORT_TAG const char * getName()
Definition: fishexample.cpp:43
Interface for IExtrudeEdge objects.
Definition: iextruderegion.h:21
Interface for containers of IThings.
Definition: icontainer.h:23
DVect3 DVect
Vector of doubles, either 2D or 3D.
Definition: dim.h:145
Interface for container of IThings.
Definition: igroup.h:51