VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtDynamicTerrainPageLogic.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 2024 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 
8 
9 #pragma once
10 
11 #include <vrvOsgQt/vrvOsgQt.h>
12 
13 #if !defined(Q_MOC_RUN)
16 #endif
17 
18 #include <matrix/vlVector.h>
19 
20 #include <QtCore/QAbstractItemModel>
21 #include <QtWidgets/QAction>
22 
23 #include <boost/ptr_container/ptr_vector.hpp>
24 
25 #if !defined(Q_MOC_RUN)
26 #include <tbb/mutex.h>
27 #include <atomic>
28 #endif
29 
30 class QMenu;
31 
32 namespace makVrv
33 {
34  class DtDe;
35  class DtDynamicTerrainPageInterface;
36 
40  : public QAbstractItemModel
41  , public std::enable_shared_from_this<DtDynamicTerrainPageLogic>
42  {
43  Q_OBJECT
44 
45  class QueryCallback;
46  friend class QueryCallback;
47 
48  public:
49  class FeatureRecord;
50  typedef std::vector< std::shared_ptr<FeatureRecord> > FeatureRecordVector;
51  typedef std::list< std::shared_ptr<FeatureRecord> > FeatureRecordList;
52 
55  static std::shared_ptr<DtDynamicTerrainPageLogic> create(
57 
59  virtual ~DtDynamicTerrainPageLogic();
60 
62  virtual void setupContextMenu(QMenu* menu, const QModelIndex&);
63 
65  virtual void clickedOnMap(const DtVector& point);
66 
68 
69  virtual QVariant headerData(int column, Qt::Orientation, int role) const;
70  virtual QModelIndex index(int row, int column, const QModelIndex& parent) const;
71  virtual QModelIndex parent(const QModelIndex&) const;
72  virtual int rowCount(const QModelIndex& index) const;
73  virtual int columnCount(const QModelIndex& index) const;
74  virtual QVariant data(const QModelIndex& index, int role) const;
76 
79  virtual void runQuery();
80 
82  virtual void shutdown();
83 
84  signals:
85  void indexSelected(QModelIndex);
86 
87  void rowAdded(int i);
88  void rowChanged(int i);
89  void rowRemoved(int i);
90 
91  protected slots:
92  virtual void addRow(int i);
93  virtual void changeRow(int i);
94  virtual void removeRow(int i);
95 
96  protected:
98  explicit DtDynamicTerrainPageLogic(DtDe& de);
99 
101  virtual void featureAdded(const DtDynamicTerrainFeature& feature);
102 
103  virtual void updateFeature(
104  FeatureRecord* featureCallback, const DtDynamicTerrainFeature& feature);
105 
106  virtual void pagedOut(
107  std::list< std::shared_ptr<FeatureRecord> >::iterator i);
108 
109  void ensureValidVector();
110 
111  std::atomic<bool> myShutdownFlag;
112 
113  typedef tbb::mutex Mutex;
114  mutable Mutex myMutex;
115 
117 
119 
124  };
125 
126  class DT_DLL_VRVOSGQT DtDynamicTerrainPageLogic::FeatureRecord
127  : public std::enable_shared_from_this<DtDynamicTerrainPageLogic::FeatureRecord>
128  {
129  public:
130  class RequestAction;
131 
132  explicit FeatureRecord(
133  DtDe& de,
135  const std::shared_ptr<const DtDynamicTerrainFeature>& feature);
136 
137  virtual ~FeatureRecord();
138 
139  std::shared_ptr<const DtDynamicTerrainFeature> feature() const { return myFeature.lock(); }
140 
141  int index() const { return myIndex; }
142 
143  void setIndex(int index) { myIndex = index; }
144 
145  QVariant getData(unsigned col) const;
146 
147  void update(const DtDynamicTerrainFeature& feature);
148 
149  void setupContextMenu(QMenu* menu);
150 
151  void disconnect();
152 
153  void addDisconnector(const boost::signalslib::connection& conn);
154 
155  void addRequest(const DtDynamicTerrainChange&);
156  void clearRequests();
157 
158  private:
159  void addChange(const DtDynamicTerrainChange& change);
160 
161  void setData(unsigned col, const QVariant& value);
162 
163  DtDe& myDe;
164  //const std::weak_ptr<DtDynamicTerrainPageLogic> myLogic;
165  const std::weak_ptr<const DtDynamicTerrainFeature> myFeature;
166 
167  std::list<boost::signalslib::connection> myDisconnectors;
168 
169  typedef tbb::spin_mutex Mutex;
170  mutable Mutex myMutex;
171 
172  typedef std::vector<QVariant> DataContainer;
174 
175  typedef boost::ptr_vector<DtDynamicTerrainChange> Changes;
177 
178  int myIndex;
179 
180  typedef std::vector<DtDynamicTerrainWorld::RequestHandle> RequestHandles;
182  };
183 
184  class DT_DLL_VRVOSGQT DtDynamicTerrainPageLogic::FeatureRecord::RequestAction
185  : public QAction
186  {
187  Q_OBJECT
188 
189  public:
190  RequestAction(
191  const DtDynamicTerrainChange& change,
192  const std::shared_ptr<FeatureRecord>& featureRecord,
193  QObject* parent);
194 
195  public slots:
196  void insertChangeRequest();
197  void clearRequests();
198 
199  private:
200  std::weak_ptr<FeatureRecord> myFeatureRecord;
201 
202  const std::unique_ptr<DtDynamicTerrainChange> myChange;
203  };
204 }
205 
206 
std::list< boost::signalslib::connection > myDisconnectors
Definition: DtDynamicTerrainPageLogic.h:167
int index() const
Definition: DtDynamicTerrainPageLogic.h:141
DtDe & myDe
Definition: DtDynamicTerrainPageLogic.h:116
std::atomic< bool > myShutdownFlag
Definition: DtDynamicTerrainPageLogic.h:111
Queries. Queries work very much like change requests except instead of changing the state of the feat...
Definition: DtDynamicTerrainWorld.h:172
void setIndex(int index)
Definition: DtDynamicTerrainPageLogic.h:143
boost::ptr_vector< DtDynamicTerrainChange > Changes
Definition: DtDynamicTerrainPageLogic.h:175
RequestHandles myRequestHandles
Definition: DtDynamicTerrainPageLogic.h:181
#define DT_DLL_VRVOSGQT
Definition: vrvOsgQt.h:22
Interface to a widget that displays the scene graph as a tree.
Definition: DtDynamicTerrainPageInterface.h:25
DtDynamicTerrainWorld::QueryHandle myQueryHandle
Definition: DtDynamicTerrainPageLogic.h:118
Logic for scene graph tree display widget.
Definition: DtDynamicTerrainPageLogic.h:39
const std::unique_ptr< DtDynamicTerrainChange > myChange
Definition: DtDynamicTerrainPageLogic.h:202
Contains DLL export macros.
bool myVectorValid
Definition: DtDynamicTerrainPageLogic.h:121
std::vector< DtDynamicTerrainWorld::RequestHandle > RequestHandles
Definition: DtDynamicTerrainPageLogic.h:180
int myIndex
Definition: DtDynamicTerrainPageLogic.h:178
Changes myChanges
Definition: DtDynamicTerrainPageLogic.h:176
std::list< std::shared_ptr< FeatureRecord > > FeatureRecordList
Definition: DtDynamicTerrainPageLogic.h:51
Interface which abstracts the concept of a individually identifiable &quot;thing&quot; in the terrain...
Definition: DtDynamicTerrainFeature.h:83
size_t myFeatureCount
Definition: DtDynamicTerrainPageLogic.h:120
tbb::spin_mutex Mutex
Definition: DtDynamicTerrainPageLogic.h:169
std::weak_ptr< FeatureRecord > myFeatureRecord
Definition: DtDynamicTerrainPageLogic.h:200
Contains makVrv::DtDynamicTerrainFeature class.
Mutex myMutex
Definition: DtDynamicTerrainPageLogic.h:114
std::vector< QVariant > DataContainer
Definition: DtDynamicTerrainPageLogic.h:172
FeatureRecordList myFeatureRecordList
Definition: DtDynamicTerrainPageLogic.h:123
Contains makVrv::DtDynamicTerrainWorld class.
Command which can be given to the dynamic terrain system to perform some change. This class is a simp...
Definition: DtDynamicTerrainChange.h:42
std::vector< std::shared_ptr< FeatureRecord > > FeatureRecordVector
Definition: DtDynamicTerrainPageLogic.h:49
The DtDe is the core component of any VR-Vantage application. It owns a DtRenderer, DtDeCommunicator, as well as a DtDisplay and other things.
Definition: DtDe.h:76
DataContainer myData
Definition: DtDynamicTerrainPageLogic.h:173
const std::weak_ptr< const DtDynamicTerrainFeature > myFeature
Definition: DtDynamicTerrainPageLogic.h:165
tbb::mutex Mutex
Definition: DtDynamicTerrainPageLogic.h:113
FeatureRecordVector myFeatureRecordVector
Definition: DtDynamicTerrainPageLogic.h:122
std::shared_ptr< const DtDynamicTerrainFeature > feature() const
Definition: DtDynamicTerrainPageLogic.h:139

Document ID: Generated on Thu Oct 23 22:29:17 EDT 2025 from SVN revision 280951
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)