OpenStructure
Loading...
Searching...
No Matches
entity_detail.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-2020 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_DETAIL_HH
20#define OST_GFX_ENTITY_DETAIL_HH
21
22#include <map>
23#include <vector>
24
25#include <boost/shared_ptr.hpp>
26
27#include <ost/geom/geom.hh>
28
31#include <ost/mol/query.hh>
32
34#include <ost/gfx/color.hh>
35#include <ost/gfx/gfx.hh>
36#include <ost/gfx/gfx_prim.hh>
37#include <ost/gfx/entity_fw.hh>
38
39
40namespace ost { namespace gfx { namespace impl {
41
42struct RGBAColor {
44 rgba[0]=1.0; rgba[1]=1.0; rgba[2]=1.0; rgba[3]=1.0;
45 }
46 RGBAColor(float r, float g, float b, float a=1.0) {
47 rgba[0]=r; rgba[1]=g; rgba[2]=b; rgba[3]=a;
48 }
49 RGBAColor(const Color& c) {
50 rgba[0]=c.GetRed(); rgba[1]=c.GetGreen(); rgba[2]=c.GetBlue(); rgba[3]=c.GetAlpha();
51 }
52
54 rgba[0]=c.GetRed(); rgba[1]=c.GetGreen(); rgba[2]=c.GetBlue(); rgba[3]=c.GetAlpha();
55 return *this;
56 }
57
58 operator Color () const {return RGBA(rgba[0],rgba[1],rgba[2],rgba[3]);}
59
60 operator float* () {return rgba;}
61 operator const float* () const {return rgba;}
62 float rgba[4];
63};
64
66{
68 AtomEntry(const mol::AtomHandle& a, float r, float v, const Color& c):
69 atom(a), color(c), radius(r), vdwr(v)
70 {
71 }
74 float radius;
75 float vdwr;
76};
77
78// hash table for fast bond<->atom lookup
79typedef std::map<long, AtomEntry> AtomEntryMap;
80typedef std::vector<AtomEntry> AtomEntryList;
81
83{
84 BondEntry(const mol::BondHandle& b, float r,AtomEntry* ae1, AtomEntry* ae2):
85 bond(b),atom1(ae1),atom2(ae2),radius(r),
86 pp1(ae1 ? ae1->atom.GetPos() : geom::Vec3()),
87 pp2(ae2 ? ae2->atom.GetPos() : geom::Vec3())
88 {}
92 float radius;
93 geom::Vec3 pp1,pp2; // prev atom positions
94};
95
96typedef std::vector<BondEntry> BondEntryList;
97
98void DoRenderBlur(BondEntryList& bl, float bf1, float bf2);
100
111
112typedef boost::shared_ptr<GfxView> GfxViewPtr;
113
118 float rad;
119 geom::Vec3 v0,v1,v2; // helper vectors
120 bool nflip;
121 int id;
122};
123
124typedef std::vector<NodeEntry> NodeEntryList;
125typedef std::vector<NodeEntryList> NodeEntryListList;
126typedef boost::shared_ptr<NodeEntryListList> NodeEntryListListPtr;
127
129 TraceProfileEntry(): v(), n(), id(0) {}
131 const geom::Vec3& n_): v(v_),n(n_),id(0) {}
135};
136
137typedef std::vector<TraceProfileEntry> TraceProfile;
138
141 position(0.0,0.0,0.0),
142 direction(0.0,0.0,1.0),
143 normal(0.0,1.0,0.0),
144 color1(1.0,1.0,1.0,1.0),
145 color2(1.0,1.0,1.0,1.0),
146 rad(1.0),
147 type(0),
148 type1(0),
149 type2(0),
150 frac(0.0),
151 running_length(0.0),
152 v0(1.0,0.0,0.0),
153 v1(0.0,1.0,0.0),
154 v2(0.0,0.0,1.0),
155 nflip(false),
156 id(-1)
157 {
158 }
160 const geom::Vec3& d,
161 const geom::Vec3& n,
162 float r,
163 const RGBAColor& c1, const RGBAColor& c2,
164 unsigned int t, int i):
165 position(p),direction(d),normal(n),color1(c1),color2(c2),rad(r),type(t),
166 type1(t),type2(t),frac(0.0),running_length(0.0),v0(),v1(),v2(),nflip(false),id(i)
167 {
168 }
170 const geom::Vec3& d,
171 const geom::Vec3& n,
172 float r,
173 const Color& c1, const Color& c2,
174 unsigned int t, int i):
175 position(p),direction(d),normal(n),color1(c1),color2(c2),rad(r),type(t),
176 type1(t),type2(t),frac(0.0),running_length(0.0),v0(),v1(),v2(),nflip(false),id(i)
177 {
178 }
179
180 geom::Vec3 position,direction,normal;
182 float rad;
183 unsigned int type;
184 unsigned int type1, type2;
185 float frac,running_length;
186 geom::Vec3 v0,v1,v2; // helper vectors
187 bool nflip;
188 int id;
189};
190
191typedef std::vector<SplineEntry> SplineEntryList;
192typedef std::vector<SplineEntryList> SplineEntryListList;
193
195public:
196 static SplineEntryList Generate(const SplineEntryList& entry_list,int nsub,uint color_blend_mode=0);
197};
198
199}}} // ns
200
201
202#endif
Three dimensional vector class, using Real precision.
Definition vec3.hh:48
float GetRed() const
retrieve red
float GetAlpha() const
retrieve alpha
float GetBlue() const
retrieve blue
float GetGreen() const
retrieve green
void AddBond(const mol::BondHandle &bv)
void AddAtom(const mol::AtomView &av)
std::vector< long > orphan_atom_list
static SplineEntryList Generate(const SplineEntryList &entry_list, int nsub, uint color_blend_mode=0)
Handle to atom datatype.
definition of AtomView
Definition atom_view.hh:34
#define DLLEXPORT_OST_GFX
unsigned int uint
Definition base.hh:29
boost::shared_ptr< NodeEntryListList > NodeEntryListListPtr
void DoRenderBlur(BondEntryList &bl, float bf1, float bf2)
std::vector< BondEntry > BondEntryList
void DoBlurSnapshot(BondEntryList &bl)
std::vector< NodeEntry > NodeEntryList
std::map< long, AtomEntry > AtomEntryMap
std::vector< TraceProfileEntry > TraceProfile
boost::shared_ptr< GfxView > GfxViewPtr
std::vector< AtomEntry > AtomEntryList
std::vector< NodeEntryList > NodeEntryListList
std::vector< SplineEntry > SplineEntryList
std::vector< SplineEntryList > SplineEntryListList
Color DLLEXPORT_OST_GFX RGBA(float r, float g, float b, float a)
RGBA color spec from floats (0.0-1.0)
unsigned int VertexID
Definition base.dox:1
mol::AtomHandle atom
float radius
float vdwr
AtomEntry(const mol::AtomHandle &a, float r, float v, const Color &c)
RGBAColor color
AtomEntry()
BondEntry(const mol::BondHandle &b, float r, AtomEntry *ae1, AtomEntry *ae2)
geom::Vec3 pp1
float radius
AtomEntry * atom2
AtomEntry * atom1
mol::BondHandle bond
mol::AtomHandle atom
float rad
int id
geom::Vec3 direction
bool nflip
RGBAColor color1
geom::Vec3 v0
RGBAColor(float r, float g, float b, float a=1.0)
RGBAColor & operator=(const Color &c)
float rad
float frac
unsigned int type
int id
geom::Vec3 direction
bool nflip
RGBAColor color1
geom::Vec3 v0
SplineEntry()
SplineEntry(const geom::Vec3 &p, const geom::Vec3 &d, const geom::Vec3 &n, float r, const RGBAColor &c1, const RGBAColor &c2, unsigned int t, int i)
unsigned int type1
SplineEntry(const geom::Vec3 &p, const geom::Vec3 &d, const geom::Vec3 &n, float r, const Color &c1, const Color &c2, unsigned int t, int i)
geom::Vec3 v
geom::Vec3 n
TraceProfileEntry(const geom::Vec3 &v_, const geom::Vec3 &n_)
VertexID id
TraceProfileEntry()