Itasca C++ Interface
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Modules Pages
imoduleclump.h
Go to the documentation of this file.
1 #pragma once
2 
9 #include "base/src/farray.h"
10 #include "base/src/callback.h"
11 
12 namespace itasca {
13  class IContainer;
14  class IEnergyMap;
15 }
16 
17 namespace itascaxd {
18  class IContact;
19  class ICellSpace;
20  class IContainerContact;
21 }
22 
23 namespace pfc {
24  using namespace itasca;
25  using namespace itascaxd;
26 
27  class IClump;
28  class IPebble;
29  class IGhostPebble;
30  class IClumpTemplate;
31 
36  class IModuleClump {
37  public:
40 
42  virtual TType getClumpType() const=0;
44  virtual TType getPebbleType() const=0;
46  virtual TType getClumpTemplateType() const=0;
48  virtual TType getGhostPebbleType() const=0;
50  virtual uint getClumpGeometryNotice() const=0;
52  virtual uint getClumpPropertyNotice() const=0;
54  virtual uint getClumpVelocityNotice() const=0;
56  virtual uint getClumpCycleNotice() const=0;
58  virtual uint getClumpExtraNotice() const=0;
60  virtual uint getClumpGroupNotice() const=0;
62  virtual uint getClumpCleanNotice() const=0;
64  virtual uint getClumpRotationNotice() const=0;
66  virtual uint getPebbleExtraNotice() const=0;
68  virtual uint getPebbleGroupNotice() const=0;
69 
71  virtual const IContainer * getIContainerClump() const=0;
73  virtual IContainer * getIContainerClump()=0;
75  virtual const IContainer * getIContainerClumpTemplate() const=0;
77  virtual IContainer * getIContainerClumpTemplate()=0;
78  virtual const IContainer * getIContainerClumpTemplateClumps() const=0;
79  virtual IContainer * getIContainerClumpTemplateClumps()=0;
80  virtual const IContainer * getIContainerClumpTemplatePebbles() const=0;
81  virtual IContainer * getIContainerClumpTemplatePebbles()=0;
82  virtual const IContainer * getIContainerPebble() const=0;
83  virtual IContainer * getIContainerPebble()=0;
84  virtual const IContainer * getIContainerBasePebble() const=0;
85  virtual IContainer * getIContainerBasePebble()=0;
86  virtual const IContainer * getIContainerGhostPebble() const=0;
87  virtual IContainer * getIContainerGhostPebble()=0;
88  virtual const IContainerContact *getIContainerPebblePebbleContact() const=0;
89  virtual IContainerContact * getIContainerPebblePebbleContact()=0;
90  virtual const IContainerContact *getIContainerDomainPebbleContact() const=0;
91  virtual IContainerContact * getIContainerDomainPebbleContact()=0;
92  virtual const ICellSpace * getICellSpacePebble() const=0;
93  virtual ICellSpace * getICellSpacePebble()=0;
94  virtual const IClump * findClumpWithID(quint64 id) const=0;
95  virtual IClump * findClumpWithID(quint64 id) =0;
96  virtual const IClump * findClumpClosestTo(const DVect &v,const double &radius=limits<double>::max()) const=0;
97  virtual IClump * findClumpClosestTo(const DVect &v,const double &radius=limits<double>::max())=0;
98  virtual const IClump * findClumpContaining(const DVect &v,QSet<quint64> *skip=nullptr) const=0;
99  virtual IClump * findClumpContaining(const DVect &v,QSet<quint64> *skip=nullptr)=0;
100  virtual const IPebble * findPebbleWithID(quint64 id) const=0;
101  virtual IPebble * findPebbleWithID(quint64 id) =0;
102  virtual const IPebble * findPebbleClosestTo(const DVect &v,const double &radius=limits<double>::max()) const=0;
103  virtual IPebble * findPebbleClosestTo(const DVect &v,const double &radius=limits<double>::max())=0;
104  virtual const IPebble * findPebbleContaining(const DVect &v,QSet<quint64> *skip=nullptr) const=0;
105  virtual IPebble * findPebbleContaining(const DVect &v,QSet<quint64> *skip=nullptr)=0;
106  virtual const IClumpTemplate * findClumpTemplateWithID(quint64 id) const=0;
107  virtual IClumpTemplate * findClumpTemplateWithID(quint64 id) =0;
108  virtual const IClumpTemplate * findClumpTemplateWithName(const QString &) const=0;
109  virtual IClumpTemplate * findClumpTemplateWithName(const QString &) =0;
110  virtual const IPebble * findClumpTemplatePebbleWithID(quint64 id) const=0;
111  virtual IPebble * findClumpTemplatePebbleWithID(quint64 id) =0;
112  virtual const IGhostPebble * findGhostPebbleWithID(quint64 id) const=0;
113  virtual IGhostPebble * findGhostPebbleWithID(quint64 id) =0;
114  virtual void validate()=0;
115  virtual const IEnergyMap * getIClumpEnergies() const=0;
116  virtual const IEnergyMap * getIContactPebblePebbleEnergies() const=0;
117 
119  virtual void getClumpInBoxList(const DExtent &d,FArray<IClump *> *ret,bool intersect=true)=0;
120  virtual void getClumpInBoxList(const DExtent &d,FArray<const IClump *> *ret,bool intersect=true)=0;
121 
123  virtual void getPebbleInBoxList(const DExtent &d,FArray<IPebble *> *ret,bool intersect=true)=0;
124  virtual void getPebbleInBoxList(const DExtent &d,FArray<const IPebble *> *ret,bool intersect=true)=0;
125 
126  // Populates sets of property names based on their type including the relevant notices
127  virtual void populateAttributeSets(QStringList *scalarAtts,FArray<uint> *scalarNotices,QStringList *stringAtts,FArray<uint> *stringNotices,QStringList *vectorAtts,FArray<uint> *vectorNotices)const=0;
129  virtual void populatePieceAttributeSets(QStringList *valueAtts,QStringList *labelAtts,QStringList *vectorAtts)const=0;
131  virtual void populatePropertySets(QStringList *scalarProps,QStringList *stringProps,QStringList *vectorProps)const=0;
132 
134  virtual prop_signal * getPropertySignal() const = 0;
135 
138  virtual IClumpTemplate * createFromClump(const IClump &c,const QString &name)=0;
139 
141  virtual void threadedCallbackObjectClump(Callback4<void,IClump *,quint32,quint32,void *> &callback,void *v=nullptr,bool useThreads=true) const=0;
142 
144  template <class S,void (S::*MFP)(IClump *,quint32,quint32,void *)>
145  void threadedCallbackMethodClump(S *s,void *v=nullptr,bool useThreads=true) const {
147  threadedCallbackObjectClump(callback,v,useThreads);
148  }
149 
151  virtual void threadedCallbackObjectPebble(Callback4<void,IPebble *,quint32,quint32,void *> &callback,void *v=nullptr,bool useThreads=true) const=0;
152 
154  template <class S,void (S::*MFP)(IPebble *,quint32,quint32,void *)>
155  void threadedCallbackMethodPebble(S *s,void *v=nullptr,bool useThreads=true) const {
157  threadedCallbackObjectPebble(callback,v,useThreads);
158  }
159 
160  };
161 } // namespace pfc
162 // EoF
Definition: callback.h:30
namespace Itasca
Definition: basememory.cpp:9
Definition of a Signal2 object, holding a list of ISlot2 objects.
Definition: isignalbase.h:76
Definition: ighostpebble.h:16
Interface for the small-granularity callback utility.
PFC namespace.
Definition: iballfluid.h:15
An array class that attempts to minimize unnecessary heap access.
Contact container class.
Definition: icontainercontact.h:28
debug checked shorthand for std::numeric_limits<T>::
Definition: limit.h:25
Interface for a clump template. This is the interface for a clump template. A clump template is compo...
Definition: iclumptemplate.h:25
void threadedCallbackMethodPebble(S *s, void *v=nullptr, bool useThreads=true) const
Implementation of the multithreaded loop using the threadedCallbackObjectPebble.
Definition: imoduleclump.h:155
unsigned int TType
class type indicator
Definition: basedef.h:41
Definition: ipebble.h:23
DExtent3 DExtent
A DExtent2 in 2D, a DExtent3 in 3D.
Definition: dim.h:149
Definition: callback.h:122
void threadedCallbackMethodClump(S *s, void *v=nullptr, bool useThreads=true) const
Implementation of the multithreaded loop using the threadedCallbackObjectClump.
Definition: imoduleclump.h:145
Interface for a clump. This is the interface for a clump. A clump is a collection of pebbles that def...
Definition: iclump.h:37
Itasca Library standard namespace, specific to 2D or 3D.
Definition: icontactmodule.h:4
Signal2< const QString &, const QVariant & > prop_signal
Signal emitted when a property is created or modified.
Definition: imoduleclump.h:39
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 to a "refining" cell space.
Definition: icellspace.h:24
Interface for the Clump module. This is the interface for the Clump module.
Definition: imoduleclump.h:36
Interface to EnergyMap class.
Definition: ienergymap.h:15