OpenStructure
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
Examples
File List
Globals
•
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Properties
Friends
Macros
Groups
Pages
stage
include
ost
gfx
impl
entity_renderer.hh
Go to the documentation of this file.
1
//------------------------------------------------------------------------------
2
// This file is part of the OpenStructure project <www.openstructure.org>
3
//
4
// Copyright (C) 2008-2011 by the OpenStructure authors
5
//
6
// This library is free software; you can redistribute it and/or modify it under
7
// the terms of the GNU Lesser General Public License as published by the Free
8
// Software Foundation; either version 3.0 of the License, or (at your option)
9
// any later version.
10
// This library is distributed in the hope that it will be useful, but WITHOUT
11
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
12
// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
13
// details.
14
//
15
// You should have received a copy of the GNU Lesser General Public License
16
// along with this library; if not, write to the Free Software Foundation, Inc.,
17
// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18
//------------------------------------------------------------------------------
19
#ifndef OST_GFX_ENTITY_RENDERER_HH
20
#define OST_GFX_ENTITY_RENDERER_HH
21
22
/*
23
Author: Stefan Scheuber, Marco Biasini
24
*/
25
26
27
#if defined(GetAtomProps)
28
#undef GetAtomProps
29
#endif
30
#include <vector>
31
32
#include <
ost/mol/query_view_wrapper.hh
>
33
#include <
ost/mol/entity_view.hh
>
34
#include <
ost/mol/atom_handle.hh
>
35
#include <
ost/mol/entity_property_mapper.hh
>
36
37
#include <
ost/gfx/color.hh
>
38
#include <
ost/gfx/gfx_object.hh
>
39
#include <
ost/gfx/module_config.hh
>
40
#include <
ost/gfx/render_pass.hh
>
41
#include <
ost/gfx/vertex_array.hh
>
42
#include <
ost/gfx/exporter_fw.hh
>
43
44
#include <
ost/gfx/render_options/render_options.hh
>
45
46
#include <
ost/gfx/color_ops/color_op.hh
>
47
#include <
ost/gfx/color_ops/by_element_color_op.hh
>
48
#include <
ost/gfx/color_ops/by_chain_color_op.hh
>
49
#include <
ost/gfx/color_ops/uniform_color_op.hh
>
50
#include <
ost/gfx/color_ops/gradient_level_color_op.hh
>
51
#include <
ost/gfx/color_ops/entity_view_color_op.hh
>
52
#if OST_IMG_ENABLED
53
#include <
ost/gfx/color_ops/map_handle_color_op.hh
>
54
#endif //OST_IMG_ENABLED
55
56
#include "
mapped_property.hh
"
57
#include "
entity_renderer_fw.hh
"
58
59
namespace
ost {
namespace
gfx {
namespace
impl {
60
61
typedef
enum
{
62
DIRTY_VIEW
= 0x1,
63
DIRTY_VA
= 0x2
64
}
DirtyFlag
;
65
66
typedef
unsigned
int
DirtyFlags
;
67
69
class
DLLEXPORT_OST_GFX
EntityRenderer
{
70
public
:
71
EntityRenderer
();
72
virtual
~EntityRenderer
(){}
73
75
void
AddView(
const
mol::EntityView
& view);
76
77
void
SubstractView(
const
mol::EntityView
& view);
79
void
ClearViews();
80
81
virtual
bool
HasDataToRender()
const
;
82
83
virtual
const
String
& GetName()
const
;
84
85
void
SetEnabled(
bool
enabled=
true
);
86
87
bool
IsEnabled()
const
;
88
90
bool
HasSelection()
const
;
91
93
void
SetSelection(
const
mol::EntityView
& sel);
94
96
void
SetVisible(
const
mol::EntityView
& view,
bool
visible);
97
98
const
Color
& GetSelectionColor()
const
;
99
100
const
Color
& GetSelectionColorOutline()
const
;
101
107
mol::EntityView
GetFullView();
108
109
mol::EntityView
GetEffectiveView();
110
112
virtual
void
UpdateViews()=0;
113
115
virtual
void
PrepareRendering()=0;
116
124
virtual
void
Render(
RenderPass
pass);
125
127
virtual
void
RenderPov(
PovState
& pov,
const
std::string& name);
128
130
virtual
void
Export(
Exporter
* ex);
131
132
virtual
bool
CanSetOptions(
RenderOptionsPtr
& render_options)=0;
133
virtual
void
SetOptions(
RenderOptionsPtr
& render_options)=0;
134
135
virtual
RenderOptionsPtr
GetOptions()=0;
136
137
virtual
geom::AlignedCuboid
GetBoundingBox()
const
=0;
138
143
virtual
void
PickAtom(
const
geom::Line3
& line,
Real
line_width,
144
mol::AtomHandle
& picked_atom)=0;
145
150
virtual
void
PickBond(
const
geom::Line3
& line,
Real
line_width,
151
mol::BondHandle
& picked_bond)=0;
152
153
virtual
void
RenderOptionsChanged();
154
155
virtual
void
Apply(
const
gfx::ByElementColorOp
& op)=0;
156
virtual
void
Apply(
const
gfx::ByChainColorOp
& op)=0;
157
virtual
void
Apply(
const
gfx::UniformColorOp
& op)=0;
158
virtual
void
Apply(
const
gfx::GradientLevelColorOp
& op)=0;
159
virtual
void
Apply(
const
gfx::EntityViewColorOp
& op)=0;
160
#if OST_IMG_ENABLED
161
virtual
void
Apply(
const
gfx::MapHandleColorOp
& op)=0;
162
#endif
163
164
bool
IsDirty()
const
;
165
166
void
FlagPositionsDirty();
167
168
void
Debug(
unsigned
int
flags);
169
170
IndexedVertexArray
&
VA
() {
return
va_;}
171
protected
:
172
virtual
void
SetName(
const
String
& name);
173
174
String
name_
;
175
bool
enabled_
;
176
177
mol::EntityView
full_view_
;
178
mol::EntityView
effective_view_
;
179
mol::EntityView
hidden_view_
;
180
IndexedVertexArray
va_
;
181
182
mol::EntityView
sel_
;
183
mol::EntityView
full_sel_
;
184
IndexedVertexArray
sel_va_
;
185
186
DirtyFlags
sel_state_
;
187
DirtyFlags
state_
;
188
unsigned
int
debug_flags_
;
189
float
opacity_
;
190
};
191
192
//Simplify color ops
193
struct
ByElementGetCol
{
194
std::pair<bool,Color>
ColorOfAtom
(
mol::AtomHandle
& atom)
const
{
195
return
std::make_pair(
true
,
GfxObj::Ele2Color
(atom.
GetElement
()));
196
}
197
};
198
199
struct
ByChainGetCol
{
200
ByChainGetCol
(
const
ByChainColorOp
& op):
op_
(op){}
201
std::pair<bool,Color>
ColorOfAtom
(
mol::AtomHandle
& atom)
const
{
202
return
std::make_pair(
true
,
op_
.
GetColor
(atom.
GetResidue
().
GetChain
().
GetName
()));
203
}
204
const
ByChainColorOp
&
op_
;
205
};
206
207
struct
UniformGetCol
{
208
UniformGetCol
(
const
Color
& col):
col_
(col){ }
209
std::pair<bool,Color>
ColorOfAtom
(
mol::AtomHandle
& atom)
const
{
210
return
std::make_pair(
true
,
col_
);
211
}
212
const
Color
&
col_
;
213
};
214
215
struct
GradientLevelGetCol
{
216
GradientLevelGetCol
(
const
GradientLevelColorOp
& op):
217
property_
(op.GetProperty()),
218
epm_
(
property_
, op.GetLevel()),
219
gradient_
(op.GetGradient()),
220
minv_
(op.GetMinV()),
221
maxv_
(op.GetMaxV()),
222
clamp_
(op.GetClamp())
223
{}
224
std::pair<bool,Color>
ColorOfAtom
(
mol::AtomHandle
& atom)
const
{
225
try
{
226
float
r =
epm_
.
Get
(atom,
minv_
);
227
if
(
clamp_
) {
228
float
n=
Normalize
(r,
minv_
,
maxv_
);
229
return
std::make_pair(
true
,
gradient_
.
GetColorAt
(n));
230
}
else
{
231
if
(r>=
minv_
&& r<=
maxv_
) {
232
float
n=
Normalize
(r,
minv_
,
maxv_
);
233
return
std::make_pair(
true
,
gradient_
.
GetColorAt
(n));
234
}
else
{
235
return
std::make_pair(
false
,
Color
());
236
}
237
}
238
}
catch
(std::exception&){
239
LOG_DEBUG
(
"property "
<<
property_
<<
" not found"
);
240
return
std::make_pair(
false
,
Color
());
241
}
242
return
std::make_pair(
false
,
Color
());
243
}
244
String
property_
;
245
mol::EntityPropertyMapper
epm_
;
246
Gradient
gradient_
;
247
float
minv_
,
maxv_
;
248
bool
clamp_
;
249
};
250
251
struct
EntityViewGetCol
{
252
EntityViewGetCol
(
const
EntityViewColorOp
& op):
property_
(op.GetProperty()),
253
ev_
(op.GetEntityView()),
254
gradient_
(op.GetGradient()),
255
minv_
(op.GetMinV()),
256
maxv_
(op.GetMaxV()){}
257
std::pair<bool,Color>
ColorOfAtom
(
mol::AtomHandle
& atom)
const
{
258
return
std::make_pair(
true
,
MappedProperty
(
ev_
,
property_
,
gradient_
,
minv_
,
maxv_
,atom.
GetPos
()));
259
}
260
String
property_
;
261
mol::EntityView
ev_
;
262
Gradient
gradient_
;
263
float
minv_
,
maxv_
;
264
};
265
266
#if OST_IMG_ENABLED
267
struct
MapHandleGetCol {
268
MapHandleGetCol(
const
MapHandleColorOp
& op):property_(op.
GetProperty
()),
269
mh_(op.
GetMapHandle
()),
270
gradient_(op.
GetGradient
()),
271
minv_(op.
GetMinV
()),
272
maxv_(op.
GetMaxV
()){}
273
std::pair<bool,Color> ColorOfAtom(
mol::AtomHandle
& atom)
const
{
274
return
std::make_pair(
true
,
MappedProperty
(mh_,property_,gradient_,minv_,maxv_,atom.
GetPos
()));
275
}
276
String
property_;
277
img::MapHandle
mh_;
278
Gradient gradient_;
279
float
minv_, maxv_;
280
};
281
#endif
282
283
}}}
//ns
284
285
#endif
/* ENTITYRENDERER_HH_ */
Generated on Mon Nov 5 2012 13:30:57 for OpenStructure by
1.8.1.1