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