UnstructGridModel.h
1 //##################################################################################################
2 //
3 // Ceetron Desktop Components
4 // Component: UnstructGrid
5 //
6 // --------------------------------------------------------------------------------------------
7 // Copyright (C) 2011, Ceetron AS
8 // This is UNPUBLISHED PROPRIETARY SOURCE CODE of Ceetron AS. The contents of this file may
9 // not be disclosed to third parties, copied or duplicated in any form, in whole or in part,
10 // without the prior written permission of Ceetron AS.
11 //##################################################################################################
12 
13 #pragma once
14 
15 #include "CeeUnstructGrid/Base.h"
16 
17 #include "CeeCore/RefCountedObject.h"
18 #include "CeeVisualization/Model.h"
19 #include "CeeCore/Color3f.h"
20 #include "CeeCore/BoundingBox.h"
21 #include "CeeCore/Str.h"
22 #include "CeeCore/Vec2f.h"
23 #include "CeeUnstructGrid/ModelSettings.h"
24 #include "CeeUnstructGrid/ResultInfo.h"
25 
26 class VTFrameSet;
27 
28 namespace cee {
29 
30 class Ray;
31 
32 namespace ug {
33 
34 class HitItem;
35 class HitItemCollection;
36 class PartHitItems;
37 class ScalarSettings;
38 class VectorSettings;
39 class DisplacementSettings;
40 class DataSource;
41 class ModelSpec;
42 class PartSettings;
43 class CuttingPlane;
44 class Isosurface;
45 class Isovolume;
46 class ParticleTraceGroup;
47 class MirrorSettings;
48 class Error;
49 
50 
51 //==================================================================================================
52 //
53 //
54 //
55 //==================================================================================================
56 class Progress
57 {
58 public:
59  Progress() {}
60  virtual ~Progress() {}
61 
62  virtual void update(int pctCompl) = 0;
63  virtual bool aborted() = 0;
64 };
65 
66 
67 //==================================================================================================
68 //
69 //
70 //
71 //==================================================================================================
72 class CEE_UG_EXPORT UnstructGridModel : public vis::Model
73 {
74 public:
77  {
86  CUTTING_PLANE,
87  ISOSURFACE,
90  ISOVOLUME,
93  PARTICLE_TRACE,
96  REGENERATE_ALL
99  };
101 
102 public:
104  virtual ~UnstructGridModel();
105 
106  const DataSource* dataSource() const;
107  DataSource* dataSource();
108  void setDataSource(DataSource* dataSource);
109 
110  const ModelSpec& modelSpec() const;
111  ModelSpec& modelSpec();
112 
113  virtual bool updateVisualization(UpdateAction updateAction = NORMAL, Progress* progress = NULL, Error* error = NULL);
114  void clearVisualization();
115 
116  virtual size_t startUpdateVisualizationPerFrame(Error* error = NULL);
117  virtual bool updateVisualizationForFrame(size_t frameIndex, Error* error = NULL);
118 
119  const ModelSettings& modelSettings() const;
120  ModelSettings& modelSettings();
121 
122  bool rayIntersect(int x, int y, const vis::View& view, HitItem* hitItem) const;
123  bool rayIntersectAllHits(int x, int y, const vis::View& view, HitItemCollection* hitItems) const;
124  bool regionIntersect(int x, int y, unsigned int width, unsigned int height, const vis::View& view, bool acceptPartiallyContainedItems, bool includeElementIndices, std::vector<PartHitItems>* itemList) const;
125  bool polygonIntersect(const std::vector<Vec2f>& polygonInWindowCoordinates, const vis::View& view, bool acceptPartiallyContainedItems, bool includeElementIndices, std::vector<PartHitItems>* itemList) const;
126  bool rayIntersect(const Ray& ray, HitItem* hitItem) const;
127  bool rayIntersectAllHits(const Ray& ray, HitItemCollection* hitItems) const;
128 
129  size_t frameCount() const;
130  size_t currentFrameIndex() const;
131  int currentStateId() const;
132  void setCurrentFrameIndex(size_t frameIndex);
133  double particleTraceTime() const;
134  void setParticleTraceTime(double time);
135  virtual BoundingBox boundingBox();
136  virtual BoundingBox frameBoundingBox(size_t frameIndex);
137  virtual BoundingBox partBoundingBox(size_t frameIndex, size_t globalGeometryIndex, int partId);
138  virtual Str modelInfo() const;
139 
140  PartSettings* partSettings(size_t globalGeometryIndex, int partId);
141  const PartSettings* existingPartSettings(size_t globalGeometryIndex, int partId) const;
142  ScalarSettings* scalarSettings(int resultId);
143  const ScalarSettings* existingScalarSettings(int resultId) const;
144  VectorSettings* vectorSettings(int resultId);
145  const VectorSettings* existingVectorSettings(int resultId) const;
146  DisplacementSettings* displacementSettings(int resultId);
147  const DisplacementSettings* existingDisplacementSettings(int resultId) const;
148 
149  size_t cuttingPlaneCount() const;
150  const CuttingPlane* cuttingPlane(size_t index) const;
151  CuttingPlane* cuttingPlane(size_t index);
152  void addCuttingPlane(CuttingPlane* cuttingplane);
153  void removeCuttingPlane(const CuttingPlane* cuttingplane);
154  void removeAllCuttingPlanes();
155 
156  size_t isosurfaceCount() const;
157  const Isosurface* isosurface(size_t index) const;
158  Isosurface* isosurface(size_t index);
159  void addIsosurface(Isosurface* isosurf);
160  void removeIsosurface(const Isosurface* isosurf);
161  void removeAllIsosurfaces();
162 
163  size_t isovolumeCount() const;
164  const Isovolume* isovolume(size_t index) const;
165  Isovolume* isovolume(size_t index);
166  void addIsovolume(Isovolume* isosurf);
167  void removeIsovolume(const Isovolume* volume);
168  void removeAllIsovolumes();
169 
170  size_t particleTraceGroupCount() const;
171  const ParticleTraceGroup* particleTraceGroup(size_t index) const;
172  ParticleTraceGroup* particleTraceGroup(size_t index);
173  void addParticleTraceGroup(ParticleTraceGroup* group);
174  void removeParticleTraceGroup(const ParticleTraceGroup* group);
175  void removeAllParticleTraceGroups();
176  bool particleTraceTimeRange(size_t frameIndex, double* minimumTime, double* maximumTime) const;
177 
178  bool scalarRange(int resultId, double* min, double* max) const;
179  bool vectorRange(int resultId, double* min, double* max) const;
180  bool displacementRange(double* min, double* max) const;
181 
182  cee::Color3f elementSetColor(int setId) const;
183  void setElementSetColor(int setId, const Color3f& color);
184 
185  MirrorSettings& mirrorSettings();
186  const MirrorSettings& mirrorSettings() const;
187 
188 public:
189  VTFrameSet* internal_vtFrameSet();
190  void internal_debug(int code);
191 
192 private:
193  virtual cvf::Model* internal_cvfModel();
194  virtual std::vector<vis::OverlayItem*> internal_overlayItems();
195  virtual void internal_setViewCapabilities(const cvf::OpenGLCapabilities& capabilities, bool viewDoesHighlighting);
196  virtual bool internal_canAddToViewWithCapabilities(const cvf::OpenGLCapabilities& viewCapabilities) const;
197  virtual NotifyAction internal_detectAndConfigureViewClippingInModel(const vis::View& triggeringView, cvf::OpenGLContext* cvfContext);
198  virtual void internal_applyViewClippingPlanesBeforeRendering(const cvf::ClipPlaneSet* viewClipPlaneSet, const cvf::Plane* dropShadowClipPlane);
199  virtual void internal_applyCameraTransformationToClippingPlanes(const cvf::Camera& camera);
200 
201  CEE_BASE_F(DataSourceVTFx);
202  CEE_BASE_F(DataSourceVTF);
203  CEE_BASE_F(CuttingPlaneAnimation);
204  CEE_PRIVATE_IMPL(UnstructGridModel);
205  CEE_DISALLOW_COPY_AND_ASSIGN(UnstructGridModel);
206 };
207 
208 } // namespace ug
209 } // namespace cee
The data source of the model. For instance a file interface or custom built by the user...
Definition: DataSource.h:35
Data source interface for VTF model files.
Definition: DataSourceVTF.h:34
UpdateAction
Update action. Used in updateVisualization() to specify level of update needed in order to optimize t...
Definition: UnstructGridModel.h:76
Namespace cee contains all functionality and structures under the Core component. ...
Definition: AppComponent.cpp:26
virtual bool aborted()=0
Returns true if the operation should be aborted.
Configuration of a cutting plane.
Definition: CuttingPlane.h:33
Use this if you only used the setVisible() method on Parts, CuttingPlane, Isosurface or Isovolume...
Definition: UnstructGridModel.h:80
Use this if you only used the set*Color() or setOpacity() on Parts, CuttingPlane, Isosurface or Isovo...
Definition: UnstructGridModel.h:81
A general unicode based string class.
Definition: Str.h:28
virtual void update(int pctCompl)=0
Updates progress status in percent.
A ray that can be used for intersection testing.
Definition: Ray.h:27
Default update. Settings and data are inspected and any needed update is performed.
Definition: UnstructGridModel.h:78
A collection of HitItem instances.
Definition: HitItemCollection.h:28
Model holds information which is to be gathered to constitute a view.
Definition: Model.h:43
Various settings for the unstructured grid model.
Definition: ModelSettings.h:30
Only the positions of the nodes have changed. Note: Only use this when the position of the nodes have...
Definition: UnstructGridModel.h:84
Settings for mirrors in the model.
Definition: MirrorSettings.h:28
Axis-aligned bounding box.
Definition: BoundingBox.h:27
Class for storing an RGB color triplet.
Definition: Color3f.h:25
Configuration of an isovolume.
Definition: Isovolume.h:33
Data source interface for VTFx model files.
Definition: DataSourceVTFx.h:37
Configuration of a group of particle trace objects.
Definition: ParticleTraceGroup.h:31
Visual configuration of the color legend (visible, text color, etc)
Definition: UnstructGridModel.h:83
Settings for a specific scalar result.
Definition: ScalarSettings.h:34
Settings for a specific displacement result.
Definition: DisplacementSettings.h:28
Use this if you only used the ScalarSettings and ColorMapper methods.
Definition: UnstructGridModel.h:82
Provides a render area in the user control/widget to enable visualization of the current model data a...
Definition: View.h:40
The model specification.
Definition: ModelSpec.h:35
NotifyAction
Notification sent to the view.
Definition: Model.h:59
Progress object class.
Definition: UnstructGridModel.h:56
Error object for simple error management
Definition: Error.h:27
UnstructGridModel is a subclass of Model which adds specific model structure and functionality for re...
Definition: UnstructGridModel.h:72
Settings for a specific part.
Definition: PartSettings.h:31
Settings for a specific vector result.
Definition: VectorSettings.h:29
Use this if you only used the setHighlight() method on Parts, CuttingPlane, Isosurface or Isovolume...
Definition: UnstructGridModel.h:79
Configuration of an isosurface.
Definition: Isosurface.h:31
Use this class to generate a cutting plane animation.
Definition: CuttingPlaneAnimation.h:30
Only the transformation results have changed, if any.
Definition: UnstructGridModel.h:85
Small class containing the data for a hit of an intersection between a ray and a part in an UnstructG...
Definition: HitItem.h:26