Itasca C++ Interface
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Modules Pages
ibodyset.h
Go to the documentation of this file.
1 #pragma once
2 //ibodyset.h
4 #include "../interface/ibodyblock.h"
10 namespace itasca {
11  class IThing;
12  class IParse;
13 }
14 namespace itascaxd{
15  class IGeomPoint;
16  class IGeomEdge;
17  class IGeomPoly;
18  class IRange;
19  class IGeomSet;
20  class GeomBase;
21 }
22 
23 
24 namespace body {
25  using namespace itasca;
26  using namespace itascaxd;
27 
28  class IBodyEdge;
29  class IBodyFace;
33  class IBodySet {
34  public:
36  inline static const TType type_ = 0x53a89c9f;
37 
38  virtual const GeomBase *getGeomBase() const=0;
39 
41  virtual IThing * getIThing()=0;
43  virtual const IThing * getIThing() const=0;
45  virtual IBodySet * getNext()=0;
47  virtual const IBodySet *getNext() const=0;
48 
50  virtual QString getName() const=0;
53  virtual uint getGeometryCode() const=0;
55  virtual uint getGroupCode() const=0;
57  virtual uint getExtraCode() const=0;
59  virtual uint getEdgeRatioChangedCode() const=0;
61  virtual uint getEdgeZoneSizeChangedCode() const =0;
63  virtual uint getZoneMultiplierCode()const =0;
66  virtual IGeomPoint * createPoint(const DVect &pos)=0;
68  virtual IGeomPoint * getFirstPoint()=0;
70  virtual const IGeomPoint *getFirstPoint() const=0;
72  virtual IGeomPoint * findPointWithID(quint64 id)=0;
74  virtual const IGeomPoint *findPointWithID(quint64 id) const=0;
77  virtual IGeomPoint * findClosestPoint(const DVect &pos,const double &radius=limits<double>::max(),bool validate=true)=0;
80  virtual const IGeomPoint *findClosestPoint(const DVect &pos,const double &radius=limits<double>::max(),bool validate=true) const=0;
82  virtual IContainer * getPointContainer()=0;
84  virtual const IContainer *getPointContainer() const=0;
85 
90  virtual IGeomEdge * createEdge(IGeomPoint *end1,IGeomPoint *end2)=0;
92  virtual IGeomEdge * getFirstEdge()=0;
94  virtual const IGeomEdge * getFirstEdge() const=0;
96  virtual IGeomEdge * findEdgeWithID(quint64 id)=0;
98  virtual const IGeomEdge * findEdgeWithID(quint64 id) const=0;
101  virtual IGeomEdge * findClosestEdge(const DVect &pos,const double &radius=limits<double>::max())=0;
104  virtual const IGeomEdge * findClosestEdge(const DVect &pos,const double &radius=limits<double>::max()) const=0;
106  virtual IGeomEdge * findMatchingEdge(const IGeomPoint *end1,const IGeomPoint *end2)=0;
108  virtual const IGeomEdge * findMatchingEdge(const IGeomPoint *end1,const IGeomPoint *end2) const=0;
110  virtual IContainer * getEdgeContainer()=0;
112  virtual const IContainer *getEdgeContainer() const=0;
113 
117  virtual IGeomPoly * createPoly()=0;
119  virtual IGeomPoly * getFirstPoly()=0;
121  virtual const IGeomPoly * getFirstPoly() const=0;
123  virtual IGeomPoly * findPolyWithID(quint64 id)=0;
125  virtual const IGeomPoly * findPolyWithID(quint64 id) const=0;
128  virtual IGeomPoly * findClosestPoly(const DVect &pos,const double &radius=limits<double>::max())=0;
131  virtual const IGeomPoly * findClosestPoly(const DVect &pos,const double &radius=limits<double>::max()) const=0;
136  virtual IGeomEdge * addNodeToPoly(IGeomPoly *poly,IGeomPoint *point)=0;
139  virtual IGeomEdge * closePoly(IGeomPoly *poly)=0;
141  virtual IContainer * getPolyContainer()=0;
143  virtual const IContainer *getPolyContainer() const=0;
145  virtual IContainer::signal_type *getPointMovedSignal() const=0;
147  virtual IContainer::signal_type *getEdgeMovedSignal() const=0;
149  virtual IContainer::signal_type *getPolyMovedSignal() const=0;
151  virtual QList<const IGeomPoly *> getEdgeConnectedMesh(const IGeomPoly *face) const=0;
153  virtual QList<const IGeomEdge *> getVertexConnectedMesh(const IGeomEdge *edge) const=0;
155  virtual QList<const IGeomEdge *> getVertexConnectedEdges(const IGeomPoint *point) const = 0;
156  // returns true if atleast a point is shared (no check for valid pointers)
157  virtual bool sharePoint(const IGeomEdge *edge1, const IGeomEdge *edge2, const IGeomPoint **shared=0) const = 0;
159  virtual QPair<IBodyBlock *,IBodyBlock *> getFaceConnectedBlocks(const IGeomPoly *face) const=0;
161  virtual IGeomPoly * findMatchingFace(const FArray<const IGeomPoint*> &points)=0;
163  virtual const IGeomPoly * findMatchingFace(const FArray<const IGeomPoint*> &points) const=0;
164 
171  virtual IBodyBlock * createBlock(FArray<DVect> *points=0, IBodyBlock::blockType blocktype=IBodyBlock::blockType::Hexahedron, IGroupID *addgroup=0)=0;
172 
174  virtual bool getValidateFlag()const =0;
176  virtual void setValidateFlag(bool flag) =0;
177 
179  virtual void deleteBlock(IBodyBlock *block) =0;
181  virtual IBodyBlock * getFirstBlock()=0;
183  virtual const IBodyBlock * getFirstBlock() const=0;
185  virtual IBodyBlock * findBlockWithID(quint64 id)=0;
187  virtual const IBodyBlock * findBlockWithID(quint64 id) const=0;
189  virtual IContainer * getBlockContainer()=0;
190  virtual const IContainer *getBlockContainer() const =0;
193  virtual void setTolerance(double tolerance)=0;
195  virtual bool getAutoTolerance()const=0;
197  virtual double getRecommendedTolerance()const=0;
199  virtual double getTolerance()const=0;
201  virtual void Translate(const DVect &vec, const IRange *filter=0)=0;
203  virtual void MoveX(double val, const IRange *filter=0)=0;
205  virtual void MoveY(double val, const IRange *filter=0)=0;
207  virtual void MoveZ(double val, const IRange *filter=0)=0;
212  virtual bool getProxyBlock(quint64 faceID,FArray<DVect> &proxyBlock, bool useAdjacent=false,IBodyBlock::blockType blocktype=IBodyBlock::blockType::Default) const =0;
219  virtual QList<FArray<DVect>> getProxyBlocks( quint64 faceID, QList<bool> *validB, IBodyBlock::blockType blocktype=IBodyBlock::blockType::Default, QList<FArray<quint64>> *adjacentFaces=0,QList<IBodyBlock::blockValidState> *proxyState=0) const =0;
225  virtual bool proxyBlocksForExtrusionFromFaces(QMap<const IGeomPoly *,FArray<DVect>> &proxyBlocks, const QList<quint64> &facesIDs, QString &message, double *distance=0)const =0;
227  virtual double getDihedralCut(bool rad=true)const=0;
229  virtual void setDihedralCut(double cut,bool rad=true)=0;
235  virtual void computeMidpoints(const IBodyBlock *block, const IGeomPoly *face, const DVect &midfacePointIn, DVect &midfacePointOut, FArray<DVect> &edgesMidp)const=0;
236  //returns current triangle flag
237  virtual bool getArrestTriangle()const =0;
239  virtual QList<const IGeomSet *> getExternalGeomSets()const=0;
241  virtual void listObjectAlongLine(const DVect &beg, const DVect &e, const double &radius, FArray<const IGeomPoint *> *retPoints,
242  FArray<QPair<const IGeomEdge *, DVect>> *retEdges, FArray<QPair<const IGeomPoly *, DVect>> *intersectPolyPoints)const =0;
247  virtual void listObjectAlongCone(const DVect &origin, const DVect &begining, const double &angle, FArray<const IGeomPoint *> *retPoints,
248  FArray<QPair<const IGeomEdge *, DVect>> *retEdges, FArray<QPair<const IGeomPoly *, DVect>> *intersectPolyPoints, const double *depth=0,
249  quint32 whatToReturnFlag=0, FArray<const IBodyBlock*> *retBlocks=0)const =0;
254  virtual void listObjectAlongCylinder(const DVect &origin, const DVect &begining, const double &radius, FArray<const IGeomPoint *> *retPoints,
255  FArray<QPair<const IGeomEdge *, DVect>> *retEdges, FArray<QPair<const IGeomPoly *, DVect>> *intersectPolyPoints, const double *depth=0,
256  quint32 whatToReturnFlag=0, FArray<const IBodyBlock*> *retBlocks=0)const =0;
258  virtual void selectedEdgeControlPoints( QList<QPair<const IBodyEdge *, quint32>> &selectedCP) const=0;
259  //selects control point of the edge
260  virtual void selectEdgeControlPoint(const IBodyEdge *,quint32 indexCP)const=0 ;
261  //deselects control point of the edge
262  virtual void deselectEdgeControlPoint(const IBodyEdge *,quint32 indexCP)const=0 ;
263  //clears all selection of control points
264  virtual void clearAllSelectedControlPoints()const=0;
265 
268  virtual void selectedFaceControlPoints(QSet<quint64> &selectedEncodedCpIds) const = 0;
270  virtual quint64 countSelectedFaceControlPoints() const=0;
272  virtual bool isSelectedFaceControlPoint(quint64 encodedFaceControlPointId) const=0;
274  virtual quint64 selectedControlPointFaceID() const=0;
275  //selects control point of the face
276  virtual void selectFaceControlPoint(const IBodyFace *, quint32 indexN, quint32 indexM)const = 0;
277  //deselects control point of the face
278  virtual void deselectFaceControlPoint(const IBodyFace *, quint32 indexN, quint32 indexM)const = 0;
280  static quint64 encodeFaceCpID(quint64 faceID, quint16 n, quint16 m) { return (faceID << 32) + (n << 16) + m; }
282  static void decodeFaceCpID(quint64 cpID, quint64 *faceID, quint16 *n, quint16 *m) {
283  *faceID = cpID >> 32; *n = (cpID & 0x00000000FFFF0000) >> 16; *m = (cpID & 0x000000000000FFFF); }
284 
292  virtual QList<const IThing *> marqueeDeepSelect(bool perspective, const FArray<DVect>& nearSelRect,
293  const FArray<DVect>& farSelRect, const DVect& selectionDirection, TType objType)const=0;
295  virtual bool getDihedralBasedValidation()const=0;
297  virtual int importFromFlac3D(IParse *par, const QString &fileName,bool fileRecord=true)=0;
299  virtual void validateAllBlocks(quint32 *numberOfNotValid=0)=0;
301  virtual bool makeAllHexBySplitBlocks(QString *message=0)=0;
302  };
303 }
Interface to a filter, used as the main method for filtering objects.
Definition: irange.h:31
namespace Itasca
Definition: basememory.cpp:9
Definition of a Signal2 object, holding a list of ISlot2 objects.
Definition: isignalbase.h:76
Base class for items that will be stored in containers.
Definition: ithing.h:31
blockType
Type of block enumeration ({Hexahedron=1, Tetrahedron, Wedge, Default}). Default usually means Hexahe...
Definition: ibodyblock.h:28
static void decodeFaceCpID(quint64 cpID, quint64 *faceID, quint16 *n, quint16 *m)
decode a quint64 control point id into its component parts
Definition: ibodyset.h:282
debug checked shorthand for std::numeric_limits<T>::
Definition: limit.h:25
A class representing a single closed polygon made up of a list of edges.
Definition: igeompoly.h:23
Definition: igroup.h:91
unsigned int TType
class type indicator
Definition: basedef.h:41
Interface for a user-defined geometric point.
Definition: igeompoint.h:18
Definition: ibodyface.h:15
Interface for a user-defined geometric edge, defined as the line between two IGeomPoint objects.
Definition: igeomedge.h:24
A container for a single "set" of body-block elements. A body-block set is a named collection of body...
Definition: ibodyset.h:33
Itasca Library standard namespace, specific to 2D or 3D.
Definition: icontactmodule.h:4
static quint64 encodeFaceCpID(quint64 faceID, quint16 n, quint16 m)
encode face id, n and m into a quint64 control point id
Definition: ibodyset.h:280
EXPORT_TAG const char * getName()
Definition: fishexample.cpp:43
An array class that attempts to minimize unnecessary heap access.
Definition: farray.h:27
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: ibodyedge.h:12
Interface to the main command processing class.
Definition: iparse.h:50
Interface to provide acces to BodyBlock.
Definition: ibodyblock.h:24