Itasca C++ Interface
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Modules Pages
izonelist.h
Go to the documentation of this file.
1 //izonelist.h
2 #pragma once
3 
9 #include "base/src/farray.h"
10 #include "base/src/callback.h"
11 
12 #include "modelsutil/interface/imodellist.h"
13 #include "utility/interface/igroup.h"
14 
15 #include <set>
16 
17 namespace itasca {
18  class IContainer;
19  class IThing;
20 }
21 namespace itascaxd {
22  class IFetchProperty;
23 }
24 
25 namespace zone {
26  using namespace itasca;
27 
28  class IFace;
29  class IFetchFluidProperty;
30  class IFetchThermalProperty;
31  class IZone;
32  class IZoneData;
33 
36  class IZoneList {
37  public:
40  virtual const IThing * getIThing() const=0;
42  virtual IThing * getIThing()=0;
44  virtual const IContainer * getIContainer() const=0;
46  virtual IContainer * getIContainer() =0;
48 
49  virtual const IZone * getFirstZone() const=0;
51 
52  virtual IZone * getFirstZone()=0;
54  virtual quint32 getZoneType() const=0;
56  virtual quint32 getFaceType() const=0;
58  virtual const IZone * findZoneWithID(quint64 id) const=0;
60  virtual IZone * findZoneWithID(quint64 id)=0;
64  virtual const IZone * findZoneNearest(const DVect &vec,const double &radius=limits<double>::max()) const=0;
68  virtual IZone * findZoneNearest(const DVect &vec,const double &radius=limits<double>::max()) =0;
70  virtual quint64 getNZone() const=0;
75  virtual IZone * findZoneContaining(const DVect &v,bool bHideMechNull=false, bool bHideFluidNull=false, bool bHideThermNull=false) const =0;
77 
82  virtual IZone * findZoneNearestLive(const DVect &dv3, bool bMech,bool bFluid,bool bTherm,bool bOr) =0;
84  virtual uint getZoneExtraNotice() const=0;
86  virtual uint getModelNotice() const=0;
88  virtual uint getPropertyNotice() const=0;
90  virtual uint getStateNotice() const=0;
92  virtual uint getDensityNotice() const=0;
94  virtual uint getGroupNotice() const=0;
96  virtual uint getStressNotice() const=0;
98  virtual uint getSpecificDischargeNotice() const =0;
100  virtual uint getThermalFluxNotice() const =0;
102  virtual uint getFaceGroupNotice() const=0;
104  virtual uint getFaceExtraNotice() const=0;
106  virtual uint getHideNotice() const=0;
108  virtual uint getSelectNotice() const=0;
110  virtual uint getFaceHideNotice() const=0;
112  virtual uint getFaceSelectNotice() const=0;
113  virtual uint getMultiplierNotice() const=0;
114  virtual uint getFluidDensityNotice() const=0;
116  virtual quint64 getNumberFacesHidden() const=0;
118  virtual quint64 getNumberFacesSelected() const=0;
120  //virtual quint64 getNumberFacesVisible(bool onVisibleZones=false) const=0;
122  virtual std::set<const IGroup *> getFaceGroupsForSlot(const ISlotID &slot) const=0;
133  virtual int claimBit() const=0;
135  virtual void releaseBit(int bit) const=0;
146  virtual int claimValue() const=0;
148  virtual void releaseValue(int bit) const=0;
151  virtual IZoneData * createIZoneData(QObject *parent=0) const=0;
153  virtual QStringList getAllMechanicalModels() const=0;
155  virtual QStringList getAllMechanicalProperties() const=0;
156 
157  // Returns a ModelQueryInfo filled with information based on currently selected zones. Multithreaded!
158  virtual ModelQueryInfo getModelQueryOnSelected() const=0;
159 
162  virtual const IFace * makeFace(const IZone *z,quint32 side) const=0;
165  virtual IFace * makeFace(IZone *z,quint32 side)=0;
166  virtual itascaxd::IFetchProperty *makeFetchProperty(const QString &prop) const=0;
167  virtual IFetchThermalProperty *makeFetchThermalProperty(const QString &prop) const=0;
168  virtual IFetchFluidProperty *makeFetchFluidProperty(const QString &prop) const=0;
169  virtual QPair<IZone *,quint32> findIFace(const DVect &base,const DVect &dir,bool useHiddenZones=false,
170  bool groupedFacesOnly=false,const ISlotID &slot=ISlotID(),
171  bool useHiddenFaces=false)=0;
172  virtual QString getZoneGroupsOnSides(std::set<IGroupID> *zf1GroupList,
173  std::set<IGroupID> *zf2GroupList) const=0;
174 
175  virtual void threadedCallbackObject(Callback4<void,const IZone *,quint32,quint32,void *> &callback,void *v=nullptr,bool useThreads=true) const=0;
176  virtual void threadedCallbackFunction(void (*function)(const IZone *,quint32,quint32,void *),void *v=nullptr,bool useThreads=true) const=0;
177  template <class S,void (S::*MFP)(const IZone *,quint32,quint32,void *)>
178  void threadedCallbackMethod(S *s,void *v=nullptr,bool useThreads=true) const;
179 
181  const IZone * zone_;
182  quint32 side_;
183  const IThing *entry_;
184  };
185  virtual void threadedCallbackObjectFaceGroups(Callback3<void,const FaceGroupCallbackData *,quint32,quint32> &callback,bool useThreads=true) const=0;
186  template <class S,void (S::*MFP)(const FaceGroupCallbackData *,quint32,quint32)>
187  void threadedCallbackMethodFaceGroups(S *s,bool useThreads=true) const;
188 
190  const IZone * zone_;
191  quint32 side_;
192  };
193  virtual void threadedCallbackObjectFaceSelect(Callback3<void,const FaceSelectCallbackData *,quint32,quint32> &callback,bool useThreads=true) const=0;
194  template <class S,void (S::*MFP)(const FaceSelectCallbackData *,quint32,quint32)>
195  void threadedCallbackMethodFaceSelect(S *s,bool useThreads=true) const;
196  };
197 
198  template <class S,void (S::*MFP)(const IZone *,quint32,quint32,void *)>
199  void IZoneList::threadedCallbackMethod(S *s,void *v,bool useThreads) const {
201  threadedCallbackObject(callback,v,useThreads);
202  }
203 
204  template <class S,void (S::*MFP)(const IZoneList::FaceGroupCallbackData *,quint32,quint32)>
205  void IZoneList::threadedCallbackMethodFaceGroups(S *s,bool useThreads) const {
207  threadedCallbackObjectFaceGroups(callback,useThreads);
208  }
209 
210  template <class S,void (S::*MFP)(const IZoneList::FaceSelectCallbackData *,quint32,quint32)>
211  void IZoneList::threadedCallbackMethodFaceSelect(S *s,bool useThreads) const {
213  threadedCallbackObjectFaceSelect(callback,useThreads);
214  }
215 } // namespace zone
216 // EoF
Definition: callback.h:30
namespace Itasca
Definition: basememory.cpp:9
Base class for items that will be stored in containers.
Definition: ithing.h:31
Definition: izonelist.h:189
Interface for accessing the global list of zones, IZoneList.
Definition: izonelist.h:36
Definition: ifetchfluidproperty.h:6
An array class that attempts to minimize unnecessary heap access.
Definition: izonelist.h:180
debug checked shorthand for std::numeric_limits<T>::
Definition: limit.h:25
Interface to provide access to a zone.
Definition: izone.h:116
Access to zone scalar data.
Definition: izonedata.h:24
Definition: callback.h:122
Interface to zone faces.
Definition: iface.h:23
Definition: ifetchthermalproperty.h:6
Itasca Library standard namespace, specific to 2D or 3D.
Definition: icontactmodule.h:4
Interface for containers of IThings.
Definition: icontainer.h:23
DVect3 DVect
Vector of doubles, either 2D or 3D.
Definition: dim.h:145
Definition: imodellist.h:29
Definition: ifetchproperty.h:9
Definition: callback.h:24
Definition: igroup.h:51
Definition: callback.h:113