OpenStructure
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
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 
39 
40 #if OST_IMG_ENABLED
42 #endif //OST_IMG_ENABLED
43 
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 
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,
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,
91  const mol::EntityView& ev);
92 
93  virtual geom::AlignedCuboid GetBoundingBox(bool use_tf=false) const;
94 
95  // ProcessLimits uses the default implementation of bounding box
96 
98  virtual void CustomRenderGL(RenderPass pass);
99 
100  virtual void RefreshVA();
101 
102  virtual bool OnSelect(const geom::Line3& l, geom::Vec3& result, float zlim,
103  bool pick_flag);
104 
111  mol::AtomHandle PickAtom(const geom::Line3& line, Real line_width=0.5);
112 
113 
120  mol::BondHandle PickBond(const geom::Line3& line, Real line_width=0.5);
121 
122 
123  virtual void OnRenderModeChange();
124 
125  const String GetRenderModeName(RenderMode::Type mode);
126 
127  void SetEnableRenderMode(RenderMode::Type mode, bool enable);
128 
129  bool IsRenderModeEnabled(RenderMode::Type mode);
130 
131  RenderModeTypes GetNotEmptyRenderModes();
132 
133  void SetRenderMode(RenderMode::Type mode, const mol::EntityView& view,
134  bool keep=false);
135  void SetRenderMode(RenderMode::Type mode, const String& selection,
136  bool keep=false);
137  virtual void SetRenderMode(RenderMode::Type mode);
138 
139  mol::EntityView GetRenderView(RenderMode::Type mode);
140 
141  virtual void SetVisible(const mol::EntityView& view, bool visible);
142 
143  virtual void SetVisible(const String& sel, bool visible);
144  virtual void OptionsChanged(RenderMode::Type mode);
145 
146  virtual void SetOpacity(float f);
147  virtual float GetOpacity() const {return opacity_;}
148  virtual void SetOutlineWidth(float f);
149  virtual void SetOutlineExpandFactor(float f);
150  virtual void SetOutlineExpandColor(const Color& c);
151 
154  void Reset(const mol::EntityHandle& eh);
157  void Reset(const mol::EntityHandle& eh, const mol::Query& q);
160  void Reset(const mol::EntityHandle& eh, const mol::Query& q, mol::QueryFlags flags);
163  void Reset(const mol::EntityView& ev);
165  /*
166  the naming here is misleading - this method WON'T be called upon FlagRebuild
167  */
168  void Rebuild();
169 
172  void UpdatePositions();
173 
175  void UpdateView();
176 
178  void SetColor(const Color& col, const String& selection=String(""));
179 
180  // \brief detail coloring
181  void SetDetailColor(const Color& col, const String& selection=String(""));
182 
184  void SetColorForAtom(const Color& col,
185  const mol::AtomHandle& atom);
186 
188  void ColorByElement();
189 
191  void ColorByElement(const String& selection);
192 
194  void ColorByChain();
195 
197  void ColorByChain(const String& selection);
198 
200  mol::EntityView GetView() const;
201 
204  void SetQuery(const mol::Query& q);
205 
207  mol::QueryViewWrapper GetQueryView() const;
209  void SetQueryView(const mol::QueryViewWrapper& qv);
210 
212  mol::EntityHandle GetEntity() const;
213 
214  // turn blur on or off (experimental feature)
215  void SetBlur(bool f);
216  // set atom positions as n-1 for blur (experimental feature)
217  void BlurSnapshot();
218  // blur transparency falloffs (experimental feature)
219  void SetBlurFactors(float bf1,float bf2);
220 
223  void SetSelection(const mol::EntityView& view);
224 
227  mol::EntityView GetSelection() const;
228 
229  // GfxObj property interface
230  virtual void ColorBy(const mol::EntityView& ev,
231  const String& prop,
232  const Gradient& g, float minv, float maxv);
233 
234 #if OST_IMG_ENABLED
235  // GfxObj property interface
236  virtual void ColorBy(const img::MapHandle& mh,
237  const String& prop,
238  const Gradient& g,float minv, float maxv);
239 #endif
240 
241  // map property to color gradient from minv to maxv
242  void ColorBy(const String& prop,
243  const Gradient& gradient,
244  float minv,float maxv,
246 
247  // temporarily here, will be moved to py interface
248  void ColorBy(const String& prop,
249  const Gradient& gradient,
250  float minv,float maxv,
251  bool clamp);
252 
253  // temporary, should be incorporated with ColorBy
254  void DetailColorBy(const String& prop,
255  const Gradient& gradient,
256  float minv,float maxv,
258 
259  // convenience
260  void ColorBy(const String& prop,
261  const Gradient& gradient,
263 
264  // convenience
265  void ColorBy(const String& prop,
266  const Gradient& gradient,
267  const String& selection);
268 
269  // convenience
270  void ColorBy(const String& prop,
271  const Color& c1, const Color& c2,
272  float min, float max,
274 
275  // convenience
276  void ColorBy(const String& prop,
277  const Color& c1, const Color& c2,
279 
280 
281  void RadiusBy(const String& prop,
282  float rmin, float rmax,
283  float vmin, float vmax,
285 
286  void RadiusBy(const String& prop,
287  float rmin, float rmax,
289 
290  void ResetRadiusBy();
291 
292  void Apply(const gfx::ByElementColorOp& op, bool store=true);
293  void Apply(const gfx::ByChainColorOp& op, bool store=true);
294  void Apply(const gfx::UniformColorOp& op, bool store=true);
295 
296  void Apply(const gfx::GradientLevelColorOp& op, bool store=true);
297  void Apply(const gfx::EntityViewColorOp& op, bool store=true);
298 
299 #if OST_IMG_ENABLED
300  void Apply(const gfx::MapHandleColorOp& op, bool store=true);
301 #endif
302 
303  void CleanColorOps();
304  void ReapplyColorOps();
305 
316  RenderOptionsPtr GetOptions(RenderMode::Type render_mode);
317  void SetOptions(RenderMode::Type render_mode,
318  RenderOptionsPtr& render_options);
319  void ApplyOptions(RenderMode::Type render_mode,
320  RenderOptionsPtr& render_options);
321  bool HasSelection() const;
322 
323  void SetSeqHack(bool b);
324  bool GetSeqHack() const;
325 
326  virtual void Export(Exporter* ex);
327 
328 protected:
329 
330  virtual void CustomPreRenderGL(bool flag);
331  virtual void CustomRenderPov(PovState& pov);
332  void UpdateSelection();
333  bool UpdateIfNeeded() const;
334  void CacheBoundingBox() const;
335  impl::EntityRenderer* GetOrCreateRenderer(RenderMode::Type);
336 private:
338 
339  mutable mol::EntityView cached_view_;
340  mutable bool update_view_;
341 
342  mutable geom::AlignedCuboid bbox_;
343  mol::EntityView sel_;
344  bool sel_update_;
345  mutable impl::BackboneTrace trace_;
346 
347  void init(RenderMode::Type);
348 
349  void set_static_max_rad();
350  void do_update_view() const;
351 
352  typedef boost::ptr_map<RenderMode::Type, impl::EntityRenderer> RendererMap;
353  mutable RendererMap renderer_;
354 
355  float opacity_;
356  bool blur_;
357  float blurf1_;
358  float blurf2_;
359  mutable bool needs_update_;
360 };
361 
362 
368 
374 
384 
385 
390 }} // ns
391 
392 #endif