ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
graphics
VP1
VP1Base
src
IVP13DChannelWidget.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3
*/
4
6
// //
7
// Implementation of class IVP13DChannelWidget //
8
// //
9
// Author: Thomas Kittelmann <Thomas.Kittelmann@cern.ch> //
10
// //
11
// Initial version: April 2007 //
12
// //
14
15
#include "
VP1Base/IVP13DChannelWidget.h
"
16
#include "
VP1Base/VP1QtInventorUtils.h
"
17
#include "
VP1Base/VP1CameraHelper.h
"
18
#include "
VP1Base/VP1ExaminerViewer.h
"
19
#include "
VP1Base/VP1Msg.h
"
20
21
#include <QPixmap>
22
#include <QPainter>
23
#include <QBuffer>
24
#include <QByteArray>
25
26
#include <Inventor/C/errors/debugerror.h>
27
#include "Inventor/Qt/SoQtRenderArea.h"
28
#include <Inventor/Qt/viewers/SoQtExaminerViewer.h>
29
#include "Inventor/nodes/SoNode.h"
30
#include <Inventor/actions/SoLineHighlightRenderAction.h>
31
#include <iostream>
32
33
class
IVP13DChannelWidget::Imp
{
34
public
:
35
36
// typedef std::vector<SoQtRenderArea*> RenderAreaList;
37
// std::vector<SoQtRenderArea*>::iterator it, itE;
38
typedef
std::vector<VP1ExaminerViewer*>
RenderAreaList
;
39
// cppcheck-suppress uninitMemberVarNoCtor
40
std::vector<VP1ExaminerViewer*>::iterator
it
,
itE
;
41
42
RenderAreaList
renderareas
;
43
};
44
45
//___________________________________________________
46
IVP13DChannelWidget::IVP13DChannelWidget
(
const
QString &
name
,
const
QString &
information
,
const
QString &
contact_info
)
47
:
IVP1ChannelWidget
(
name
,
information
,
contact_info
),
m_d
(new
Imp
)
48
{
49
m_d
->itE =
m_d
->renderareas.end();
50
51
}
52
53
//___________________________________________________
54
IVP13DChannelWidget::~IVP13DChannelWidget
()
55
{
56
setUpdatesEnabled
(
false
);
57
m_d
->it =
m_d
->renderareas.begin();
58
for
(;
m_d
->it!=
m_d
->itE;++(
m_d
->it)) {
59
// SoQtRenderArea* ra = *(m_d->it);
60
VP1ExaminerViewer
* ra = *(
m_d
->it);
61
ra->setAutoRedraw(
false
);
//extra
62
SoNode * root = ra->
getSceneGraph
();
63
root->ref();
64
ra->
setSceneGraph
(0);
65
// SoGLRenderAction * renderaction1 = ra->getGLRenderAction();
66
// SoGLRenderAction * renderaction2 = ra->getOverlayGLRenderAction();
67
SoLineHighlightRenderAction * trick =
new
SoLineHighlightRenderAction();
68
SoLineHighlightRenderAction * trick2 =
new
SoLineHighlightRenderAction();
69
ra->setGLRenderAction(trick);
70
ra->setOverlayGLRenderAction(trick2);
71
// ra->setGLRenderAction(0);
72
// ra->setOverlayGLRenderAction(0);
73
delete
ra;
74
// delete renderaction1;
75
// delete renderaction2;
76
delete
trick;
77
delete
trick2;
78
root->unref();
79
}
80
delete
m_d
;
81
}
82
83
//___________________________________________________
84
void
IVP13DChannelWidget::setUpdatesEnabled
(
bool
enable )
85
{
86
m_d
->it =
m_d
->renderareas.begin();
87
for
(;
m_d
->it!=
m_d
->itE;++(
m_d
->it)) {
88
(*(
m_d
->it))->setAutoRedraw(enable);
89
}
90
IVP1ChannelWidget::setUpdatesEnabled(enable);
91
}
92
93
//___________________________________________________
94
//void IVP13DChannelWidget::registerRenderArea(SoQtRenderArea* ra)
95
void
IVP13DChannelWidget::registerRenderArea
(
VP1ExaminerViewer
* ra)
96
{
97
if
(!ra) {
98
message
(
"Error - tried to register NULL render area!"
);
99
return
;
100
}
101
102
VP1QtInventorUtils::ensureInitLineWidthAndPointSize
(ra);
103
104
m_d
->renderareas.push_back(ra);
105
m_d
->itE =
m_d
->renderareas.end();
106
107
//To make sure that it is the actual 3D widget that gets focus when
108
//we e.g. click anywhere else in the widget where the render area is
109
//placed within:
110
if
(ra->getParentWidget()&&ra->getWidget())
111
ra->getParentWidget()->setFocusProxy(ra->getWidget());
112
}
113
114
//___________________________________________________
115
void
IVP13DChannelWidget::goingToNextEvent
()
116
{
117
//Stop spinning and abort any ongoing animations:
118
m_d
->it =
m_d
->renderareas.begin();
119
for
(;
m_d
->it!=
m_d
->itE;++(
m_d
->it)) {
120
VP1ExaminerViewer
* ra = *(
m_d
->it);
121
if
(ra->getTypeId().isDerivedFrom(SoQtViewer::getClassTypeId())) {
122
VP1CameraHelper::abortAnyCurrentZoom
(
static_cast<
SoQtViewer*
>
(ra)->getCamera());
123
if
(ra->getTypeId().isDerivedFrom(SoQtExaminerViewer::getClassTypeId())) {
124
if
(
static_cast<
SoQtExaminerViewer*
>
(ra)->isAnimating())
125
static_cast<
SoQtExaminerViewer*
>
(ra)->stopAnimating();
126
}
127
}
128
}
129
}
130
131
//_______________________________________________________
132
QPixmap
IVP13DChannelWidget::getSnapshot
(
bool
transp,
int
width
,
bool
/*batch*/
)
133
{
134
VP1Msg::messageVerbose
(
"IVP13DChannelWidget::getSnapshot()"
);
135
136
// TODO: check if transp and width can be used in this implementation of the method
137
VP1Msg::messageVerbose
(
"(currently, we are not using the values - transp: "
+QString::number(transp)+
" - width: "
+QString::number(
width
)+
")"
);
138
139
//Unfortunately, the renderer's areas does not render properly by a
140
//simple grabWidget. We remedy this the hard way...
141
// m_d->it = m_d->renderareas.begin();
142
// message("Have "+QString::number(m_d->renderareas.size())+" ras");
143
// for (;m_d->it!=m_d->itE;++(m_d->it)) {
144
// SoQtRenderArea* ra = *(m_d->it);
145
// if (ra->isDoubleBuffer()) message("doublebuffer");
146
// if (ra->isDrawToFrontBufferEnable()) message("isDrawToFrontBufferEnable");
147
// if (ra->isQuadBufferStereo()) message("isQuadBufferStereo");
148
// if (ra->getAccumulationBuffer()) message("getAccumulationBuffer");
149
// if (ra->isOverlayRender()) message("isOverlayRender");
150
// if (ra->isClearBeforeRender()) message("isClearBeforeRender");
151
// ra->render();
152
// }
153
// return QPixmap::grabWidget ( this );
154
155
QPixmap pm(geometry().
size
());
156
157
QPainter painter;
158
painter.begin(&pm);
159
painter.drawPixmap(0,0,this->grab ( ));
160
161
m_d
->it =
m_d
->renderareas.begin();
162
for
(;
m_d
->it!=
m_d
->itE;++(
m_d
->it)) {
163
VP1ExaminerViewer
* ra = *(
m_d
->it);
164
QWidget * ra_w = ra->getNormalWidget();
165
QPixmap pmra =
VP1QtInventorUtils::renderToPixmap
(ra, ra_w->geometry().width(),ra_w->geometry().height());
166
if
(pmra.isNull()) {
167
message
(
"Error rendering scene to QPixmap!"
);
168
return
QPixmap();
169
}
170
QPoint pos = ra_w->mapTo(
this
, QPoint(0,0) );
171
172
painter.drawPixmap(pos.x(),pos.y(),pmra);
173
174
}
175
painter.end();
176
177
return
pm;
178
}
179
180
//_______________________________________________________
181
QByteArray
IVP13DChannelWidget::saveState
()
182
{
183
// ===> Setup stream writing to a byteArray:
184
QByteArray byteArray;
185
QBuffer buffer(&byteArray);
186
buffer.open(QIODevice::WriteOnly);
187
QDataStream out(&buffer);
188
189
// ===> Write Data:
190
191
//Version & base state:
192
out << (qint32)1;
//version
193
out <<
IVP1ChannelWidget::saveState
();
//Always include state info from the base class.
194
195
// Data from this class:
196
197
//Transparency types (version 0 saved as strings instead of ints):
198
QList<int> transptypes;
199
m_d
->it =
m_d
->renderareas.begin();
200
for
(;
m_d
->it!=
m_d
->itE;++(
m_d
->it))
201
transptypes <<
VP1QtInventorUtils::transparencyTypeToInt
((*(
m_d
->it))->getTransparencyType());
202
out << transptypes;
203
204
//For any render area that can be casted as an SoQtViewer, we store the camera type and parameters.
205
//SoQtViewer::toggleCameraType()
206
//todo...
207
208
// ===> Finish up:
209
buffer.close();
210
return
byteArray;
211
212
}
213
214
//_______________________________________________________
215
void
IVP13DChannelWidget::restoreFromState
(QByteArray ba)
216
{
217
// ===> Setup stream for getting the contents of the byteArray:
218
QBuffer buffer(&ba);
219
buffer.open(QIODevice::ReadOnly);
220
QDataStream
state
(&buffer);
221
// ===> Check version and pass on state info to base class:
222
qint32 version;
223
state
>> version;
224
if
(version!=0&&version!=1) {
225
message
(
"Warning: State data in .vp1 file is in wrong format - ignoring!"
);
226
return
;
227
}
228
229
QByteArray basestate;
230
state
>> basestate;
231
IVP1ChannelWidget::restoreFromState
(std::move(basestate));
232
// ===> Decode the state info:
233
234
//Transparency types:
235
if
(version==0) {
236
QStringList dummy;
237
state
>> dummy;
238
}
else
{
239
QList<int> transptypes;
240
state
>> transptypes;
241
if
(transptypes.count()!=
static_cast<
int
>
(
m_d
->renderareas.size())) {
242
message
(
"Warning: State data in .vp1 file is in wrong format - ignoring!"
);
243
buffer.close();
244
return
;
245
}
246
m_d
->it =
m_d
->renderareas.begin();
247
for
(;
m_d
->it!=
m_d
->itE;++(
m_d
->it))
248
(*(
m_d
->it))->setTransparencyType(
VP1QtInventorUtils::intToTransparencyType
(transptypes.takeFirst()));
249
}
250
251
//Camera angles:
252
//todo..
253
254
// ===> Finish up:
255
buffer.close();
256
}
IVP13DChannelWidget.h
size
size_t size() const
Number of registered mappings.
width
const double width
Definition
TTileTripReader.cxx:24
VP1CameraHelper.h
VP1ExaminerViewer.h
VP1Msg.h
VP1QtInventorUtils.h
IVP13DChannelWidget::Imp
Definition
IVP13DChannelWidget.cxx:33
IVP13DChannelWidget::Imp::renderareas
RenderAreaList renderareas
Definition
IVP13DChannelWidget.cxx:42
IVP13DChannelWidget::Imp::it
std::vector< VP1ExaminerViewer * >::iterator it
Definition
IVP13DChannelWidget.cxx:40
IVP13DChannelWidget::Imp::RenderAreaList
std::vector< VP1ExaminerViewer * > RenderAreaList
Definition
IVP13DChannelWidget.cxx:38
IVP13DChannelWidget::Imp::itE
std::vector< VP1ExaminerViewer * >::iterator itE
Definition
IVP13DChannelWidget.cxx:40
IVP13DChannelWidget::~IVP13DChannelWidget
virtual ~IVP13DChannelWidget()
Definition
IVP13DChannelWidget.cxx:54
IVP13DChannelWidget::saveState
virtual QByteArray saveState()
Definition
IVP13DChannelWidget.cxx:181
IVP13DChannelWidget::registerRenderArea
void registerRenderArea(VP1ExaminerViewer *)
Definition
IVP13DChannelWidget.cxx:95
IVP13DChannelWidget::goingToNextEvent
virtual void goingToNextEvent()
Definition
IVP13DChannelWidget.cxx:115
IVP13DChannelWidget::getSnapshot
virtual QPixmap getSnapshot(bool transp=false, int width=0, bool batch=false)
Definition
IVP13DChannelWidget.cxx:132
IVP13DChannelWidget::IVP13DChannelWidget
IVP13DChannelWidget(const QString &name, const QString &information, const QString &contact_info)
Definition
IVP13DChannelWidget.cxx:46
IVP13DChannelWidget::restoreFromState
virtual void restoreFromState(QByteArray)
Definition
IVP13DChannelWidget.cxx:215
IVP13DChannelWidget::setUpdatesEnabled
void setUpdatesEnabled(bool enable)
Definition
IVP13DChannelWidget.cxx:84
IVP13DChannelWidget::m_d
Imp * m_d
Definition
IVP13DChannelWidget.h:57
IVP1ChannelWidget::state
State state() const
Definition
IVP1ChannelWidget.cxx:102
IVP1ChannelWidget::restoreFromState
virtual void restoreFromState(QByteArray)
Definition
IVP1ChannelWidget.cxx:326
IVP1ChannelWidget::message
void message(QString)
IVP1ChannelWidget::information
const QString & information() const
Definition
IVP1ChannelWidget.cxx:185
IVP1ChannelWidget::name
const QString & name() const
Definition
IVP1ChannelWidget.cxx:180
IVP1ChannelWidget::IVP1ChannelWidget
IVP1ChannelWidget(const QString &name, const QString &information, const QString &contact_info)
Definition
IVP1ChannelWidget.cxx:46
IVP1ChannelWidget::contact_info
const QString & contact_info() const
Definition
IVP1ChannelWidget.cxx:191
IVP1ChannelWidget::saveState
virtual QByteArray saveState()
Definition
IVP1ChannelWidget.cxx:320
VP1CameraHelper::abortAnyCurrentZoom
static void abortAnyCurrentZoom(SoCamera *camera)
Definition
VP1CameraHelper.cxx:265
VP1ExaminerViewer
Definition
VP1ExaminerViewer.h:30
VP1ExaminerViewer::setSceneGraph
virtual void setSceneGraph(SoNode *)
Definition
VP1ExaminerViewer.cxx:3116
VP1ExaminerViewer::getSceneGraph
virtual SoNode * getSceneGraph()
Definition
VP1ExaminerViewer.cxx:3139
VP1Msg::messageVerbose
static void messageVerbose(const QString &)
Definition
VP1Msg.cxx:84
VP1QtInventorUtils::ensureInitLineWidthAndPointSize
static void ensureInitLineWidthAndPointSize(SoQtRenderArea *)
Definition
VP1QtInventorUtils.cxx:1514
VP1QtInventorUtils::renderToPixmap
static QPixmap renderToPixmap(VP1ExaminerViewer *ra, int pixels_x, int pixels_y, bool transparent_background=false, double actualRenderedSizeFact=1.0)
Definition
VP1QtInventorUtils.cxx:591
VP1QtInventorUtils::intToTransparencyType
static SoGLRenderAction::TransparencyType intToTransparencyType(int)
Definition
VP1QtInventorUtils.cxx:681
VP1QtInventorUtils::transparencyTypeToInt
static int transparencyTypeToInt(SoGLRenderAction::TransparencyType)
Definition
VP1QtInventorUtils.cxx:661
Generated on
for ATLAS Offline Software by
1.17.0