00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef OST_MOL_COORD_SOURCE_HH
00020 #define OST_MOL_COORD_SOURCE_HH
00021
00022
00023
00024
00025 #include <boost/shared_ptr.hpp>
00026 #include <ost/mol/module_config.hh>
00027 #include <ost/mol/coord_frame.hh>
00028 #include <ost/mol/entity_handle.hh>
00029
00030 namespace geom {
00031
00032 class Transform;
00033 }
00034
00035 namespace ost { namespace mol {
00036
00037 class CoordSource;
00038
00039 typedef boost::shared_ptr<CoordSource> CoordSourcePtr;
00040
00046 class DLLEXPORT_OST_MOL CoordSource {
00047 public:
00048 CoordSource(const AtomHandleList& atoms);
00049
00050 virtual ~CoordSource() {}
00051
00052 virtual uint GetFrameCount() const =0;
00053
00054 virtual CoordFramePtr GetFrame(uint frame_id) const = 0;
00055
00056 CoordSourcePtr Extract(int start=0, int stop=-1, int step=1);
00057
00058
00059 float GetFrameDelta() const {return delta_;}
00060 void SetFrameDelta(float d) {delta_=d;}
00061
00062
00063 float GetStartTime() const {return start_time_;}
00064 void SetStartTime(float t) {start_time_=t;}
00065
00066 int GetAtomCount() const;
00067
00068 EntityHandle GetEntity() const;
00069
00070 const AtomHandleList& GetAtomList() const;
00071
00072 void SetAtomPos(uint frame, AtomHandle atom, const geom::Vec3& pos);
00073
00074 geom::Vec3 GetAtomPos(uint frame, AtomHandle atom) const;
00075
00077 void CopyFrame(uint frame);
00078 bool IsMutable() const;
00079
00080 void Capture();
00081 void CaptureInto(int pos);
00082 void Capture(uint f);
00083
00084 virtual void AddFrame(const std::vector<geom::Vec3>& coords) = 0;
00085 virtual void AddFrame(const std::vector<geom::Vec3>& coords,const geom::Vec3& cell_size,const geom::Vec3& cell_angles) = 0;
00086 virtual void InsertFrame(int pos, const std::vector<geom::Vec3>& coords) = 0;
00087
00088 void ApplyTransform(const geom::Transform& tf);
00089
00090 protected:
00091 void SetMutable(bool flag);
00092 private:
00093 AtomHandleList atoms_;
00094 EntityHandle entity_;
00095 bool mutable_;
00096 std::map<long,uint> atom_dict_;
00097 float delta_,start_time_;
00098 };
00099
00100 }}
00101
00102 #endif