MeVisLab Toolbox Reference
WEM.h
Go to the documentation of this file.
1/*************************************************************************************
2**
3** Copyright 2007, MeVis Medical Solutions AG
4**
5** The user may use this file in accordance with the license agreement provided with
6** the Software or, alternatively, in accordance with the terms contained in a
7** written agreement between the user and MeVis Medical Solutions AG.
8**
9** For further information use the contact form at https://www.mevislab.de/contact
10**
11**************************************************************************************/
12
13#pragma once
14
15#include "MLWEMIncludes.h"
16#include "WEMAttributes.h"
17#include "WEMPatch.h"
18#include "WEMTrianglePatch.h"
19#include "WEMQuadPatch.h"
20#include "WEMPolygonPatch.h"
21#include "WEMBoundingBox.h"
22
23#ifdef WIN32
24typedef void* HANDLE;
25#endif
26
27
29
31
34{
36 {
37 notificationType = WEM_NOTIFICATION_NONE;
38 patchId = WEM_PATCH_ID_ALL;
39
40 repaintFaces =
41 repaintEdges =
42 repaintNodes =
43 repaintBoundingBoxes = false;
44
45 selectionWasClicked = false;
46 selectionFaceHit = 0;
47 selectionHitPoint.assign(0,0,0);
48 }
49
54
56
61
63
67};
68
70
72typedef void wemNotificationCB(void* data, std::vector<WEMEventContainer> ecList);
73
75
76// A define that can be used to detect if the WEM is ref counted:
77#define ML_WEM_REFCOUNTED 1
78
79// Declare WEMPtr smart pointer
81
82
89{
91
92public:
93
95 WEM();
97 WEM(const WEM& wem);
98
99protected:
105 ~WEM() override;
106
107public:
108
112 {
115 std::vector<WEMEventContainer> ecList;
116 };
117
119
121 void clone(const WEM& wem);
123 WEM* deepCopy() const override;
124
126
129 bool isValid() const;
130
132
134 void addNotificationObserver(wemNotificationCB* callback, void* userData);
136 void removeNotificationObserver(wemNotificationCB* callback, void* userData);
138 void notifyObservers(std::vector<WEMEventContainer> ecList);
140 void notifyObservers(const ml::WEMNotificationType& notificationType);
142 static void removeNotificationObserverFromAllWEMs(wemNotificationCB* callback, void* userData);
143
145
149 unsigned int getCurrentWEMPatchId();
151 inline void setCurrentWEMPatchId(unsigned int id) { _currentLastWEMPatchId = id; }
152
154
166
172 bool removeWEMPatch(unsigned int id);
175 bool removeAll();
178
180
182 WEMPatch* getWEMPatchAt(unsigned int index);
184 inline const WEMPatch* getWEMPatchAt(unsigned int index) const { return const_cast<WEM*>(this)->getWEMPatchAt(index); }
187 WEMPatch* getWEMPatchById(unsigned int id);
190 inline const WEMPatch* getWEMPatchById(unsigned int id) const { return const_cast<WEM*>(this)->getWEMPatchById(id); }
192 unsigned int getWEMPatchIndex(WEMPatch* wemPatch) const;
194 unsigned int getWEMPatchIndex(unsigned int id) const;
197
199
201 inline unsigned int getNumWEMPatches() const { return static_cast<unsigned int>(_wemPatchList.size()); }
202
204
206 inline void enableRepaintObserver() { _enableRepaintObserver = true; }
208 inline void disableRepaintObserver() { _enableRepaintObserver = false; }
209
211 inline void enableFinishedObserver() { _enableFinishedObserver = true; }
213 inline void disableFinishedObserver() { _enableFinishedObserver = false; }
214
216 inline void enableInteractionObserver() { _enableInteractionObserver = true; }
218 inline void disableInteractionObserver() { _enableInteractionObserver = false; }
219
221 inline void enableSelectionObserver() { _enableSelectionObserver = true; }
223 inline void disableSelectionObserver() { _enableSelectionObserver = false; }
224
226
228 inline bool isRepaintNotificationEnabled() const { return _enableRepaintObserver; }
230 inline bool isFinishedNotificationEnabled() const { return _enableFinishedObserver; }
232 inline bool isInteractionInitNotificationEnabled() const { return _enableInteractionObserver; }
234 inline bool isSelectionNotificationEnabled() const { return _enableSelectionObserver; }
235
237
239 inline int getId() const { return _uniqueId; }
241 inline std::string getName() const { return _name; }
243 inline void setName(std::string name) { _name = name; }
244
246
248 void saveWEMSurface(const std::string& filename, const WEMPersistenceParameters& persistenceParameters, ProgressField *progressFld = nullptr);
251
254 bool loadWEMSurface(const std::string& filename, bool generateEdges=true, ProgressField *progressFld=nullptr);
257 bool loadWEMSurface(const std::string& filename, MLuint64 filesize, bool generateEdges = true, ProgressField *progressFld = nullptr);
258
260
262 bool hasPrimitiveValueListForAllPatches(std::string description) const;
264 std::vector<std::string> getRegisteredPrimitiveValueLists() const;
265
267
270
274
278
282
283private:
284
286 void _setIdAndName();
287
289 static int _getUniqueId();
290
291#ifdef WIN32
292 void _closeFileHandles(void* hMap, HANDLE hFile, HANDLE dFile);
293#else
294 void _closeFileHandles(void* hMap, int dFile, MLuint64 filesize);
295#endif
296
298 int _uniqueId;
299
301 std::string _name;
302
304 std::vector<WEMPatch*>_wemPatchList;
305
308 WEMBoundingBox _boundingBox;
309
312 unsigned int _currentLastWEMPatchId;
313
315 std::vector<WEMNotificationCBData>_notificationObservers;
316
318 bool _enableRepaintObserver;
320 bool _enableFinishedObserver;
322 bool _enableInteractionObserver;
324 bool _enableSelectionObserver;
325
326
328 static int _currentLastId;
329
331 static std::vector<WEM*> _registeredWEMs;
332
334 static void registerWEM(WEM* wem);
336 static void deregisterWEM(WEM* wem);
337};
338
340
341
#define MLWEM_EXPORT
Definition MLWEMSystem.h:18
void * HANDLE
Definition WEM.h:24
Field to encapsulate an increasing float value from range [0,1].
Definition mlFields.h:451
RefCountedBase class adds intrusive reference counting support to the Base class.
This class represents an axis aligned bounding box for a WEMPatch.
Base class for triangle and quad patches.
Definition WEMPatch.h:48
This represents a WEMPatch consisting of polygons only.
This represents a WEMPatch consisting of quads only.
This class represents WEMPatch requirements to be used by WEMProcessor.
This represents a WEMPatch consisting of triangles only.
A WEM comprises a number of WEMPatches.
Definition WEM.h:89
unsigned int getNumWEMPatches() const
Returns the number of WEMs in the list.
Definition WEM.h:201
const WEMPatch * getWEMPatchAt(unsigned int index) const
Returns a pointer to the WEMPatch at the given position in the internal list.
Definition WEM.h:184
void enableRepaintObserver()
Enables the repaint observer mechanism.
Definition WEM.h:206
bool removeAll()
Removes all WEMPatches from the list.
void enableFinishedObserver()
Enables the finished observer mechanism.
Definition WEM.h:211
unsigned int getWEMPatchIndex(WEMPatch *wemPatch) const
Returns the index of the given WEMPatch in its list.
void setName(std::string name)
Sets name of the WEM to the given string.
Definition WEM.h:243
bool isRepaintNotificationEnabled() const
Returns whether the repaint notification is enabled.
Definition WEM.h:228
void flatten(WEMTrianglePatch *triPatch, WEMRequirements *requirements, TriangulationModes triangulationMode)
Flatten: joins and converts all patches to triangle patches with same normal orientation.
WEMPatch * getWEMPatchById(unsigned int id)
Returns a pointer to the WEMPatch with the given unique id.
WEMQuadPatch * addWEMPatchCopy(WEMQuadPatch *wemPatch, bool assignNewId=false)
Adds a copy of the given WEMPatch (WEMQuadPatch) to the list. Assigns optionally a new id to the patc...
WEM * deepCopy() const override
Returns a deep copy of this WEM.
bool isValid() const
Returns whether this WEM is valid.
bool isSelectionNotificationEnabled() const
Returns whether the selection notification is enabled.
Definition WEM.h:234
bool removeWEMPatch(WEMPatch *wemPatch)
Removes a given WEMPatch from the list.
void enableSelectionObserver()
Enables the selection observer mechanism.
Definition WEM.h:221
void enableInteractionObserver()
Enables the interaction observer mechanism.
Definition WEM.h:216
~WEM() override
The WEM destructor is protected since the WEM ownership is managed by the WEMPtr intrusive smart poin...
WEM()
Standard constructor.
void addNotificationObserver(wemNotificationCB *callback, void *userData)
Adds a notification observer to this WEM.
WEMPatch * getWEMPatchAt(unsigned int index)
Returns a pointer to the WEMPatch at the given position in the internal list.
std::vector< std::string > getRegisteredPrimitiveValueLists() const
Returns unique list of registered primitive value lists for all patches as a vector.
WEMTrianglePatch * addWEMPatchCopy(WEMTrianglePatch *wemPatch, bool assignNewId=false)
Adds a copy of the given WEMPatch (WEMTrianglePatch) to the list. Assigns optionally a new id to the ...
bool loadWEMSurface(const std::string &filename, bool generateEdges=true, ProgressField *progressFld=nullptr)
Loads the geometry from a file given by its file name.
static void removeNotificationObserverFromAllWEMs(wemNotificationCB *callback, void *userData)
Removes a certain notification observer from all WEM.
bool removeWEMPatch(unsigned int id)
Removes a WEMPatch by its id .
int getId() const
Returns the id of the WEM.
Definition WEM.h:239
void addWEMPatch(WEMPatch *wemPatch, bool mergeAllPatches=false)
Adds the given WEMPatch as a pointer to the list.
void disableRepaintObserver()
Disables the repaint observer mechanism.
Definition WEM.h:208
void notifyObservers(std::vector< WEMEventContainer > ecList)
Notifies all observers with the events stored in the event container list.
void removeNotificationObserver(wemNotificationCB *callback, void *userData)
Removes a notification observer from this WEM.
bool isFinishedNotificationEnabled() const
Returns whether the finished notification is enabled.
Definition WEM.h:230
void disableSelectionObserver()
Disables the selection observer mechanism.
Definition WEM.h:223
bool hasWEMPatch(WEMPatch *wemPatch) const
Returns whether there is the given WEMPatch in the list.
void computeBoundingBox()
(Re)Computes the bounding boxes of all patches.
void mergeAllPatchesIntoSinglePatch()
Merges all internal WEMPatches into a single WEMPatch.
WEMBoundingBox * getBoundingBox()
Returns the bounding box of all patches.
void notifyObservers(const ml::WEMNotificationType &notificationType)
Notifies all observers with the given event.
const WEMPatch * getWEMPatchById(unsigned int id) const
Returns a pointer to the WEMPatch with the given unique id.
Definition WEM.h:190
bool hasPrimitiveValueListForAllPatches(std::string description) const
Returns whether all patches have a PVL with the given description.
unsigned int getWEMPatchIndex(unsigned int id) const
Returns the index of the WEMPatch with the given id in its list.
bool isInteractionInitNotificationEnabled() const
Returns whether the interaction init notification is enabled.
Definition WEM.h:232
void removeAllNoDelete()
Clear internal vector (DOES NOT DELETE WEMPatches!!!)
std::string getName() const
Returns name of the WEM.
Definition WEM.h:241
void saveWEMSurface(std::ostream &outstream, const WEMPersistenceParameters &persistenceParameters, ProgressField *progressFld=nullptr)
Saves the geometry to a given stream.
void setCurrentWEMPatchId(unsigned int id)
Sets the current last id for WEMPatches. Do not mess with it.
Definition WEM.h:151
void disableInteractionObserver()
Disables the interaction observer mechanism.
Definition WEM.h:218
unsigned int getCurrentWEMPatchId()
Returns the current last id (incremented each call) for WEMPatches.
WEM(const WEM &wem)
Copy constructor.
void saveWEMSurface(const std::string &filename, const WEMPersistenceParameters &persistenceParameters, ProgressField *progressFld=nullptr)
Saves the geometry to the given file name.
void disableFinishedObserver()
Disables the finished observer mechanism.
Definition WEM.h:213
WEMPolygonPatch * addWEMPatchCopy(WEMPolygonPatch *wemPatch, bool assignNewId=false)
Adds a copy of the given WEMPatch (WEMPolygonPatch) to the list. Assigns optionally a new id to the p...
bool loadWEMSurface(const std::string &filename, MLuint64 filesize, bool generateEdges=true, ProgressField *progressFld=nullptr)
Loads the geometry from a file given by its file name.
void clone(const WEM &wem)
Clones the internal WEMs of the given WEM to this one.
Target mlrange_cast(Source arg)
Generic version of checked ML casts.
#define ML_REFCOUNTED_PTR(CLASSNAME)
Macro that defines convenience Ptr/ConstPtr typedefs to be used instead of intrusive_ptr templates.
#define ML_CLASS_HEADER(className)
Same like ML_CLASS_HEADER_EXPORTED with a non-existing export symbol.
UINT64 MLuint64
Introduce platform-independent 64-bit unsigned integer type.
Definition mlTypeDefs.h:425
const int WEM_PATCH_ID_ALL
Patch Id meaning: all patches.
TriangulationModes
Enumeration of the triangulation modes. Note that these are 'mirrored' in the SoWEM part.
void wemNotificationCB(void *data, std::vector< WEMEventContainer > ecList)
Defines the function signature for the callback methods that is to be touched by a WEM notification.
Definition WEM.h:72
WEMNotificationType
Defines the available WEM notifications.
@ WEM_NOTIFICATION_NONE
Notification flag: no notification at all (for initializing).
This struct holds all necessary data for the different notifications.
Definition WEM.h:34
int notificationType
The type of the event (None, Repaint, Selection, Finished or InteractionInit). Default: None.
Definition WEM.h:51
bool repaintFaces
Flag: repaint the faces.
Definition WEM.h:57
bool repaintEdges
Flag: repaint the edges.
Definition WEM.h:58
bool selectionWasClicked
Flag: was the WEM part selected by clicking?
Definition WEM.h:64
Vector3 selectionHitPoint
The hit point.
Definition WEM.h:66
int patchId
The id of the WEM part for which the event is to be evaluated. Default: -1 for all parts.
Definition WEM.h:53
bool repaintBoundingBoxes
Flag: repaint the bounding boxes.
Definition WEM.h:60
bool repaintNodes
Flag: repaint the nodes.
Definition WEM.h:59
int selectionFaceHit
The entryNum of the hit face.
Definition WEM.h:65
Structure to gather persistence parameters.
This struct combines a function pointer, a user data pointer and a flag for the notification observer...
Definition WEM.h:112
wemNotificationCB * notificationCB
The callback function that is triggered by the notification.
Definition WEM.h:113
void * notificationCBData
The callback data that is a pointer to the observer object.
Definition WEM.h:114
std::vector< WEMEventContainer > ecList
Each eventContainer contains all information on the type and content of the notification.
Definition WEM.h:115