00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifdef __GNUC__
00029 #pragma interface
00030 #endif
00031
00032 #ifndef _chemistry_molecule_molrender_h
00033 #define _chemistry_molecule_molrender_h
00034
00035 #include <util/render/object.h>
00036 #include <util/keyval/keyval.h>
00037 #include <chemistry/molecule/molecule.h>
00038 #include <chemistry/molecule/atominfo.h>
00039 #include <math/isosurf/surf.h>
00040
00041 class RenderedMolecule: public RenderedObject {
00042 protected:
00043 Ref<RenderedObject> object_;
00044 Ref<Molecule> mol_;
00045 Ref<AtomInfo> atominfo_;
00046
00047 public:
00048 RenderedMolecule(const Ref<KeyVal>& keyval);
00049 ~RenderedMolecule();
00050
00051 Ref<Molecule> molecule() { return mol_; }
00052
00053
00054 virtual void init() = 0;
00055
00056 void render(const Ref<Render>&);
00057 };
00058
00059
00060 class RenderedStickMolecule: public RenderedMolecule {
00061 protected:
00062 int use_color_;
00063 public:
00064 RenderedStickMolecule(const Ref<KeyVal>& keyval);
00065 ~RenderedStickMolecule();
00066
00067 void init();
00068 };
00069
00070 class RenderedBallMolecule: public RenderedMolecule {
00071 protected:
00072 public:
00073 RenderedBallMolecule(const Ref<KeyVal>& keyval);
00074 ~RenderedBallMolecule();
00075
00076 void init();
00077 };
00078
00079 class MoleculeColorizer: public DescribedClass {
00080 protected:
00081 Ref<Molecule> mol_;
00082 public:
00083 MoleculeColorizer(const Ref<Molecule> &);
00084 MoleculeColorizer(const Ref<KeyVal>&);
00085 ~MoleculeColorizer();
00086
00087 virtual void colorize(const Ref<RenderedPolygons> &) = 0;
00088 };
00089
00090
00091 class AtomProximityColorizer: public MoleculeColorizer {
00092 protected:
00093 Ref<AtomInfo> atominfo_;
00094 public:
00095 AtomProximityColorizer(const Ref<Molecule>&, const Ref<AtomInfo> &);
00096 AtomProximityColorizer(const Ref<KeyVal> &);
00097 ~AtomProximityColorizer();
00098
00099 void colorize(const Ref<RenderedPolygons> &);
00100 };
00101
00102 class RenderedMolecularSurface: public RenderedMolecule {
00103 protected:
00104 Ref<TriangulatedImplicitSurface> surf_;
00105 Ref<MoleculeColorizer> colorizer_;
00106 public:
00107 RenderedMolecularSurface(const Ref<KeyVal>& keyval);
00108 ~RenderedMolecularSurface();
00109
00110 void init(int reinit_surf);
00111 void init();
00112 };
00113
00114 #endif
00115
00116
00117
00118
00119