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
entity.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_HH
20
#define OST_GFX_ENTITY_HH
21
22
/*
23
Author: Ansgar Philippsen, Marco Biasini
24
*/
25
#include <vector>
26
27
#include <boost/ptr_container/ptr_map.hpp>
28
29
#include <
ost/geom/geom.hh
>
30
31
#include <
ost/mol/query_view_wrapper.hh
>
32
#include <
ost/gfx/render_options/render_options.hh
>
33
#include <
ost/gfx/color_ops/color_op.hh
>
34
#include <
ost/gfx/color_ops/by_element_color_op.hh
>
35
#include <
ost/gfx/color_ops/by_chain_color_op.hh
>
36
#include <
ost/gfx/color_ops/uniform_color_op.hh
>
37
#include <
ost/gfx/color_ops/gradient_level_color_op.hh
>
38
#include <
ost/gfx/color_ops/entity_view_color_op.hh
>
39
40
#if OST_IMG_ENABLED
41
#include <
ost/gfx/color_ops/map_handle_color_op.hh
>
42
#endif //OST_IMG_ENABLED
43
44
#include <
ost/gfx/impl/entity_renderer.hh
>
45
46
#include "
gradient.hh
"
47
#include "
entity_fw.hh
"
48
#include "
impl/backbone_trace.hh
"
49
#include "
impl/entity_detail.hh
"
50
51
namespace
ost {
namespace
gfx {
52
53
typedef
std::vector<RenderMode::Type>
RenderModeTypes
;
54
63
class
DLLEXPORT_OST_GFX
Entity
:
public
GfxObj
{
64
65
public
:
71
Entity
(
const
String
& name,
72
const
mol::EntityHandle
& eh,
73
const
mol::Query
& q=
mol::Query
(),
74
mol::QueryFlags
f=0);
75
77
Entity
(
const
String
& name,
78
RenderMode::Type
m,
79
const
mol::EntityHandle
& eh,
80
const
mol::Query
& q=
mol::Query
(),
81
mol::QueryFlags
f=0);
82
85
Entity
(
const
String
& name,
86
const
mol::EntityView
& ev);
87
89
Entity
(
const
String
& name,
90
RenderMode::Type
m,
91
const
mol::EntityView
& ev);
92
93
virtual
geom::AlignedCuboid
GetBoundingBox()
const
;
94
95
virtual
void
ProcessLimits(
geom::Vec3
& minc,
geom::Vec3
& maxc,
96
const
mol::Transform
& tf)
const
;
97
99
virtual
void
CustomRenderGL(
RenderPass
pass);
100
101
virtual
void
RefreshVA();
102
103
virtual
bool
OnSelect(
const
geom::Line3
& l,
geom::Vec3
& result,
float
zlim,
104
bool
pick_flag);
105
112
mol::AtomHandle
PickAtom(
const
geom::Line3
& line,
Real
line_width=0.5);
113
114
121
mol::BondHandle
PickBond(
const
geom::Line3
& line,
Real
line_width=0.5);
122
123
124
virtual
void
OnRenderModeChange();
125
126
const
String
GetRenderModeName(
RenderMode::Type
mode);
127
128
void
SetEnableRenderMode(
RenderMode::Type
mode,
bool
enable);
129
130
bool
IsRenderModeEnabled(
RenderMode::Type
mode);
131
132
RenderModeTypes
GetNotEmptyRenderModes();
133
134
void
SetRenderMode(
RenderMode::Type
mode,
const
mol::EntityView
& view,
135
bool
keep=
false
);
136
void
SetRenderMode(
RenderMode::Type
mode,
const
String
& selection,
137
bool
keep=
false
);
138
virtual
void
SetRenderMode(
RenderMode::Type
mode);
139
140
mol::EntityView
GetRenderView(
RenderMode::Type
mode);
141
142
virtual
void
SetVisible(
const
mol::EntityView
& view,
bool
visible);
143
144
virtual
void
SetVisible(
const
String
& sel,
bool
visible);
145
virtual
void
OptionsChanged(
RenderMode::Type
mode);
146
147
virtual
void
SetOpacity(
float
f);
148
virtual
float
GetOpacity
()
const
{
return
opacity_;}
149
virtual
void
SetOutlineWidth(
float
f);
150
virtual
void
SetOutlineExpandFactor(
float
f);
151
virtual
void
SetOutlineExpandColor(
const
Color
& c);
152
155
void
Reset(
const
mol::EntityHandle
& eh);
158
void
Reset(
const
mol::EntityHandle
& eh,
const
mol::Query
& q);
161
void
Reset(
const
mol::EntityHandle
& eh,
const
mol::Query
& q,
mol::QueryFlags
flags);
164
void
Reset(
const
mol::EntityView
& ev);
166
/*
167
the naming here is misleading - this method WON'T be called upon FlagRebuild
168
*/
169
void
Rebuild();
170
173
void
UpdatePositions();
174
176
void
UpdateView();
177
179
void
SetColor(
const
Color
& col,
const
String
& selection=
String
(
""
));
180
181
// \brief detail coloring
182
void
SetDetailColor(
const
Color
& col,
const
String
& selection=
String
(
""
));
183
185
void
SetColorForAtom(
const
Color
& col,
186
const
mol::AtomHandle
& atom);
187
189
void
ColorByElement();
190
192
void
ColorByElement(
const
String
& selection);
193
195
void
ColorByChain();
196
198
void
ColorByChain(
const
String
& selection);
199
201
mol::EntityView
GetView()
const
;
202
205
void
SetQuery(
const
mol::Query
& q);
206
208
mol::QueryViewWrapper
GetQueryView()
const
;
210
void
SetQueryView(
const
mol::QueryViewWrapper
& qv);
211
213
mol::EntityHandle
GetEntity()
const
;
214
215
// turn blur on or off (experimental feature)
216
void
SetBlur(
bool
f);
217
// set atom positions as n-1 for blur (experimental feature)
218
void
BlurSnapshot();
219
// blur transparency falloffs (experimental feature)
220
void
SetBlurFactors(
float
bf1,
float
bf2);
221
224
void
SetSelection(
const
mol::EntityView
& view);
225
228
mol::EntityView
GetSelection()
const
;
229
230
// GfxObj property interface
231
virtual
void
ColorBy(
const
mol::EntityView
& ev,
232
const
String
& prop,
233
const
Gradient
& g,
float
minv,
float
maxv);
234
235
#if OST_IMG_ENABLED
236
// GfxObj property interface
237
virtual
void
ColorBy(
const
img::MapHandle
& mh,
238
const
String
& prop,
239
const
Gradient
& g,
float
minv,
float
maxv);
240
#endif
241
242
// map property to color gradient from minv to maxv
243
void
ColorBy(
const
String
& prop,
244
const
Gradient
& gradient,
245
float
minv,
float
maxv,
246
mol::Prop::Level
hint=
mol::Prop::UNSPECIFIED
);
247
248
// temporarily here, will be moved to py interface
249
void
ColorBy(
const
String
& prop,
250
const
Gradient
& gradient,
251
float
minv,
float
maxv,
252
bool
clamp);
253
254
// temporary, should be incorporated with ColorBy
255
void
DetailColorBy(
const
String
& prop,
256
const
Gradient
& gradient,
257
float
minv,
float
maxv,
258
mol::Prop::Level
hint=
mol::Prop::UNSPECIFIED
);
259
260
// convenience
261
void
ColorBy(
const
String
& prop,
262
const
Gradient
& gradient,
263
mol::Prop::Level
hint=
mol::Prop::UNSPECIFIED
);
264
265
// convenience
266
void
ColorBy(
const
String
& prop,
267
const
Gradient
& gradient,
268
const
String
& selection);
269
270
// convenience
271
void
ColorBy(
const
String
& prop,
272
const
Color
& c1,
const
Color
& c2,
273
float
min,
float
max,
274
mol::Prop::Level
hint=
mol::Prop::UNSPECIFIED
);
275
276
// convenience
277
void
ColorBy(
const
String
& prop,
278
const
Color
& c1,
const
Color
& c2,
279
mol::Prop::Level
hint=
mol::Prop::UNSPECIFIED
);
280
281
282
void
RadiusBy(
const
String
& prop,
283
float
rmin,
float
rmax,
284
float
vmin,
float
vmax,
285
mol::Prop::Level
hint=
mol::Prop::UNSPECIFIED
);
286
287
void
RadiusBy(
const
String
& prop,
288
float
rmin,
float
rmax,
289
mol::Prop::Level
hint=
mol::Prop::UNSPECIFIED
);
290
291
void
ResetRadiusBy();
292
293
void
Apply(
const
gfx::ByElementColorOp
& op,
bool
store=
true
);
294
void
Apply(
const
gfx::ByChainColorOp
& op,
bool
store=
true
);
295
void
Apply(
const
gfx::UniformColorOp
& op,
bool
store=
true
);
296
297
void
Apply(
const
gfx::GradientLevelColorOp
& op,
bool
store=
true
);
298
void
Apply(
const
gfx::EntityViewColorOp
& op,
bool
store=
true
);
299
300
#if OST_IMG_ENABLED
301
void
Apply(
const
gfx::MapHandleColorOp
& op,
bool
store=
true
);
302
#endif
303
304
void
CleanColorOps();
305
void
ReapplyColorOps();
306
317
RenderOptionsPtr
GetOptions(
RenderMode::Type
render_mode);
318
void
SetOptions(
RenderMode::Type
render_mode,
319
RenderOptionsPtr
& render_options);
320
void
ApplyOptions(
RenderMode::Type
render_mode,
321
RenderOptionsPtr
& render_options);
322
bool
HasSelection()
const
;
323
324
void
SetSeqHack(
bool
b);
325
bool
GetSeqHack()
const
;
326
327
virtual
void
Export(
Exporter
* ex);
328
329
protected
:
330
331
virtual
void
CustomPreRenderGL(
bool
flag);
332
virtual
void
CustomRenderPov(
PovState
& pov);
333
void
UpdateSelection();
334
bool
UpdateIfNeeded()
const
;
335
void
CacheBoundingBox()
const
;
336
impl::EntityRenderer
* GetOrCreateRenderer(
RenderMode::Type
);
337
private
:
338
mol::QueryViewWrapper
qv_;
339
340
mutable
mol::EntityView
cached_view_;
341
mutable
bool
update_view_;
342
343
mutable
geom::AlignedCuboid
bbox_;
344
mol::EntityView
sel_;
345
bool
sel_update_;
346
mutable
impl::BackboneTrace
trace_;
347
348
void
init(
RenderMode::Type
);
349
350
void
set_static_max_rad();
351
void
do_update_view()
const
;
352
353
typedef
boost::ptr_map<RenderMode::Type, impl::EntityRenderer> RendererMap;
354
mutable
RendererMap renderer_;
355
356
float
opacity_;
357
bool
blur_;
358
float
blurf1_;
359
float
blurf2_;
360
mutable
bool
needs_update_;
361
};
362
363
369
375
385
386
391
}}
// ns
392
393
#endif
Generated on Mon Nov 5 2012 13:30:57 for OpenStructure by
1.8.1.1