MeVisLab Resolution Independence API
SoRenderArea.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 #ifndef SO_RENDER_AREA_H
14 #define SO_RENDER_AREA_H
15 
17 
18 #include "SoViewers.h"
19 #include "SoViewerNode.h"
20 #include "FrameGrabber.h"
21 
22 #include "SoMeVisRenderArea.h"
23 #include <QCursor>
24 #include <QBitmap>
25 
26 class FieldSync;
27 class SbVec2s; // Inventor class
28 class SoSceneSetupHelper;
29 
30 ML_START_NAMESPACE
31 class MLSnapshot;
32 ML_END_NAMESPACE
33 
34 //=============================================================
37 
45 //=============================================================
47 
48  SO_NODE_HEADER(SoRenderArea);
49 
50  public:
52 
54  SoSFColor background;
56  SoSFEnum transparency;
58  SoSFBool antialiasing;
61 
63  SoSFBool useSampleBuffers;
65  SoSFInt32 numSamples;
66 
68  SoSFBool border;
70  SoSFBool grabKeyFocus;
73 
75 
77 
79  SoSFTrigger doSnapshot;
81  SoSFString outputSnapshotFile;
85  SoSFBool autoIncreaseFile;
87  SoSFInt32 snapCount;
90 
91 
95  SoSFEnum snapshotFormat;
97  SoSFTrigger updateMLOutput;
98 
100 
102 
104  SoSFTrigger startRecording;
106  SoSFTrigger cancelRecording;
108  SoSFTrigger continueRecording;
110  SoSFTrigger stopRecording;
112  SoSFTrigger singleFrame;
114  SoSFTrigger createAvi;
119  SoSFFloat frameRate;
121  SoSFFloat frameRateAvi;
123  SoSFString status;
124 
127  SoSFString outputAviFile;
128 
130 
132  SoSFString inputDevicesList;
133 
134 
140 
144  static void initClass();
145 
148  void* createViewer(void* hwnd, SoNode* scene) override;
149 
151  void deleteViewer(void* viewer) override;
152 
154  virtual void setupViewer();
155 
157  virtual void setScene (SoNode* scene);
158 
160  virtual void fieldChanged(SoSensor* sensor);
161  static void fieldChangedCB(void *userData, SoSensor* s);
162 
164  virtual void recordChanged(SoSensor* sensor);
165  static void recordChangedCB(void *userData, SoSensor* s);
166 
168  virtual void startRecordingChanged(SoField*);
169 
171  virtual void stopRecordingChanged(SoField*);
172 
174  virtual void snapshotChanged(SoField*);
175 
177  virtual void updateMLOutputChanged(SoField*);
178 
180  virtual void createAviChanged(SoField*);
181 
182  virtual void enableKeyCommandsChanged(SoField*) {}
183 
185  MLuint8* readBuffer(int& w, int& h);
186 
188  bool getBufferSize(int &w, int &h);
189 
191  static SbBool handleEventCB(void *userData,QEvent* anyevent);
193  virtual SbBool handleEvent(QEvent* anyevent);
194 
195  virtual SbBool shouldChangeCursor();
196 
198  void syncFromViewerNode(SoViewerNode* node) override;
199 
202  virtual void getSyncFieldNames(SbStringList& list);
203 
205  void setStatus(const char* str);
206 
207  protected:
208 
210  void setRecordingFlag(bool flag);
211 
212  ~SoRenderArea() override;
213 
215  void borderChanged(SoField*);
216  void antialiasingChanged(SoField*);
217  void sampleBufferChanged(SoField*);
218  void backgroundChanged(SoField*);
219  void transparencyChanged(SoField*);
220  void singleFrameChanged(SoField*);
221  void continueRecordingChanged(SoField*);
222  void cancelRecordingChanged(SoField*);
223  void frameRateChanged(SoField*);
224  void inputDevicesListChanged(SoField*);
225 
226  SoNodeSensor* _sensor;
227 
230  SoTimerSensor* _recordSensor;
233 
235 
237 
239  QCursor _oldCursor;
240 };
241 
242 
243 ML_START_NAMESPACE
244 
247 
248 class SO_VIEWERS_CLASS_SPEC MLSnapshot : public Module {
249 
250 public:
252  ~MLSnapshot() override;
253 
255  void setRenderArea(SoRenderArea* area) { _area = area; }
256 
257 private:
259  SoRenderArea* _area;
261  int _w,_h;
263  MLuint8* _buffer;
264 
266  void calculateOutputImageProperties(int outputIndex, PagedImage* outputImage) override;
267 
269  SubImageBox calculateInputSubImageBox(int inIndex, const SubImageBox& outSubImgBox, int outIndex) override;
270 
272  void calculateOutputSubImage(SubImage *outSubImg, int outIndex, SubImage *inSubImgs) override;
273 
274  // ML runtime system
275  ML_MODULE_CLASS_HEADER(MLSnapshot)
276 };
277 
278 ML_END_NAMESPACE
279 
280 #endif
#define SO_VIEWERS_CLASS_SPEC
Definition: SoViewers.h:43
A class that synchronizes a list of fields of two SoFieldContainer instances.
Definition: FieldSync.h:61
FrameGrabber class grabs GL frames for movie generation.
Definition: FrameGrabber.h:42
SoRenderArea encapsulates the features of SoQtRenderArea in an Inventor Node.
Definition: SoRenderArea.h:46
virtual void stopRecordingChanged(SoField *)
stop recording:
SoSFBool border
show a 3D border
Definition: SoRenderArea.h:68
~SoRenderArea() override
SoSFEnum transparency
transparency type
Definition: SoRenderArea.h:56
SoSFString outputSnapshotFile
filename of the screenshot (without file extension)
Definition: SoRenderArea.h:81
SoSFBool autoIncreaseFile
set if filename should be autoincreased
Definition: SoRenderArea.h:85
SoSFTrigger singleFrame
record a single frame, recording is started if it was not running
Definition: SoRenderArea.h:112
virtual SbBool handleEvent(QEvent *anyevent)
called by handleEventCB for each event in viewer
SoSFBool antialiasing
turn antialiasing on/off
Definition: SoRenderArea.h:58
SoSFFloat frameRate
frame rate which the recorder uses to grab the screen
Definition: SoRenderArea.h:119
void setStatus(const char *str)
set the status in status field and also with progress CB
SoSFString outputAviFile
filename (including path) of the avi that will be written.
Definition: SoRenderArea.h:127
FrameGrabber _writer
Definition: SoRenderArea.h:228
SoSFColor background
Appearance Fields.
Definition: SoRenderArea.h:54
void borderChanged(SoField *)
further field change callbacks:
void continueRecordingChanged(SoField *)
SoSFTrigger doSnapshot
Screenshot feature Fields.
Definition: SoRenderArea.h:79
SoSFEnum snapshotFormat
format of the output, may be RGB or GREY
Definition: SoRenderArea.h:95
virtual void recordChanged(SoSensor *sensor)
timer sensor call:
SoSFTrigger updateMLOutput
trigger the update of the ML output
Definition: SoRenderArea.h:97
virtual void enableKeyCommandsChanged(SoField *)
Definition: SoRenderArea.h:182
SoSFBool enableKeyCommands
enable the keyboard commands for snapshots and movie generation
Definition: SoRenderArea.h:72
SoSFString miSelectedPointingActionProvider
Definition: SoRenderArea.h:137
SoSceneSetupHelper * _sceneSetupHelper
Definition: SoRenderArea.h:236
SoSFBool miSelectedPointingActionActive
Definition: SoRenderArea.h:138
SoSFString miSelectedPointingAction
Managed Interaction support.
Definition: SoRenderArea.h:136
SoSFTrigger continueRecording
continue recording
Definition: SoRenderArea.h:108
SoSFMLConnector outputImage
ML Output of Viewer screenshot.
Definition: SoRenderArea.h:93
static void recordChangedCB(void *userData, SoSensor *s)
virtual void setScene(SoNode *scene)
This method gets called by createViewer.
static void fieldChangedCB(void *userData, SoSensor *s)
void sampleBufferChanged(SoField *)
virtual SbBool shouldChangeCursor()
SoSFString status
current status of the recorder
Definition: SoRenderArea.h:123
FieldSync * _fieldSync
Definition: SoRenderArea.h:234
SoSFTrigger startRecording
Recorder feature Fields.
Definition: SoRenderArea.h:104
static SbBool handleEventCB(void *userData, QEvent *anyevent)
needed for key focus grabbing
SoSFBool grabKeyFocus
grab the key focus when the mouse moves onto the viewer window
Definition: SoRenderArea.h:70
bool _sceneChanged
Definition: SoRenderArea.h:232
SoSFTrigger cancelRecording
cancel recording
Definition: SoRenderArea.h:106
QCursor _oldCursor
remember old cursor shape:
Definition: SoRenderArea.h:239
SoSFString inputDevicesList
space separated list of input device type names
Definition: SoRenderArea.h:132
SoSFInt32 numSamples
number of samples (0 = maximum number of samplers)
Definition: SoRenderArea.h:65
void inputDevicesListChanged(SoField *)
void deleteViewer(void *viewer) override
delete the previously created viewer
SoRenderArea()
constructor
virtual void snapshotChanged(SoField *)
doSnapshot changed
SoSFBool autoRedrawWhenRecording
advanced setting if autoredraw of viewer is enabled or if the rendering is done explicitly when savin...
Definition: SoRenderArea.h:117
void syncFromViewerNode(SoViewerNode *node) override
sync from given src viewer node
virtual void setupViewer()
sets all values from fields
SoSFFloat frameRateAvi
frame rate that is used in the generated AVI
Definition: SoRenderArea.h:121
virtual void getSyncFieldNames(SbStringList &list)
collect the fields that should be synced on cloned viewers if you derive this method,...
void transparencyChanged(SoField *)
SoTimerSensor * _recordSensor
Definition: SoRenderArea.h:230
virtual void fieldChanged(SoSensor *sensor)
priority 0 sensor call for all fields:
virtual void createAviChanged(SoField *)
createAvi:
virtual void updateMLOutputChanged(SoField *)
updateMLOutput changed
void * createViewer(void *hwnd, SoNode *scene) override
create a viewer in the given window void pointer is used to be compatible to any windows system
void antialiasingChanged(SoField *)
SoSFBool useSampleBuffers
turn sample buffers on/off
Definition: SoRenderArea.h:63
MLuint8 * readBuffer(int &w, int &h)
read the gl back buffer (ownership is passed to caller, memory needs to be cleared by delete)
SoNodeSensor * _sensor
Definition: SoRenderArea.h:226
ml::MLSnapshot * _snapshot
Definition: SoRenderArea.h:229
SoSFBool showSnapshotWithShell
start external program when screenshot was saved (Windows only)
Definition: SoRenderArea.h:89
void setRecordingFlag(bool flag)
sets the recording flag and starts/stops the recording timer
void cancelRecordingChanged(SoField *)
bool getBufferSize(int &w, int &h)
returns current size of image (returns FALSE if there is no viewer)
void backgroundChanged(SoField *)
virtual void startRecordingChanged(SoField *)
start recording:
static void initClass()
inventor runtime type system
void frameRateChanged(SoField *)
SoSFString outputSnapshotFileWritten
filename that was written on doScreenshot
Definition: SoRenderArea.h:83
SoSFInt32 snapCount
count of screenshots taken used for autoIncreaseFile
Definition: SoRenderArea.h:87
SoSFInt32 antialiasingNumPasses
number of antialiasing passes
Definition: SoRenderArea.h:60
SoSFTrigger stopRecording
stop recording
Definition: SoRenderArea.h:110
void singleFrameChanged(SoField *)
SoSFTrigger createAvi
create an AVI of the movie (by running a createMovie callback)
Definition: SoRenderArea.h:114
SoSFMLConnector field is the interface used by Inventor Nodes to output input/output ML Connector Fie...
Helper for equipping an SoQtSceneHandler with necessary nodes for Managed Interaction and cursor sett...
Base class for all viewer nodes in MeVisLab.
Definition: SoViewerNode.h:41
snapshot module that outputs the current viewer snapshot as an ML image used internally in the SoRend...
Definition: SoRenderArea.h:248
void setRenderArea(SoRenderArea *area)
set the render area this module is attached to
Definition: SoRenderArea.h:255
~MLSnapshot() override