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 #ifndef MOL_FILE_PLUGIN_H__
00028 #define MOL_FILE_PLUGIN_H__
00029
00030 class Molecule;
00031 class Timestep;
00032 class AtomSel;
00033 class Scene;
00034 class QMData;
00035
00036 #include <stdlib.h>
00037 #include "molfile_plugin.h"
00038
00042 class MolFilePlugin {
00043 private:
00044 molfile_plugin_t *plugin;
00045 void *rv;
00046 void *wv;
00047 int numatoms;
00048 char *_filename;
00049 QMData *qm_data;
00050 void close();
00051
00052 public:
00053 MolFilePlugin(vmdplugin_t *p);
00054 virtual ~MolFilePlugin();
00055
00056
00057 const char *name() const { return plugin->name; }
00058 const char *prettyname() const { return plugin->prettyname; }
00059 const char *extension() const { return plugin->filename_extension; }
00060
00061 int can_read_structure() const { return plugin->read_structure != NULL; }
00062 int can_read_bonds() const { return plugin->read_bonds != NULL; }
00063 int can_read_timesteps() const { return plugin->read_next_timestep != NULL;}
00064 int can_read_graphics() const { return plugin->read_rawgraphics != NULL; }
00065 int can_read_volumetric() const { return plugin->read_volumetric_metadata != NULL; }
00066 int can_read_metadata() const { return plugin->read_molecule_metadata != NULL; }
00067 #if vmdplugin_ABIVERSION > 9
00068
00069 int can_read_qm() const { return plugin->read_qm_metadata != NULL; }
00070 int can_read_qm_timestep() { return plugin->read_timestep != NULL; }
00071 int can_read_angles() { return plugin->read_angles != NULL; }
00072 #endif
00073 #if vmdplugin_ABIVERSION > 10
00074 int can_read_timestep_metadata() { return plugin->read_timestep_metadata != NULL; }
00075 #endif
00076 #if vmdplugin_ABIVERSION > 11
00077 int can_read_qm_timestep_metadata() { return plugin->read_qm_timestep_metadata != NULL; }
00078 #endif
00079
00080 int can_write_structure() const { return plugin->write_structure != NULL; }
00081 int can_write_bonds() const { return plugin->write_bonds != NULL; }
00082 int can_write_timesteps() const { return plugin->write_timestep != NULL; }
00083 #if vmdplugin_ABIVERSION > 9
00084
00085 int can_write_angles() { return plugin->read_angles != NULL; }
00086 int can_write_volumetric() const { return plugin->write_volumetric_data != NULL; }
00087 #endif
00088
00089 int init_read(const char *file);
00090
00091
00092
00093 int natoms() const { return numatoms; }
00094
00095 void set_natoms(int);
00096
00097
00098
00099 int read_structure(Molecule *m, int filebonds, int autobonds);
00100
00101
00102
00103
00108 int read_optional_structure(Molecule *m, int filebonds);
00109
00110 Timestep *next(Molecule *m);
00111 int skip(Molecule *m);
00112
00114 int read_rawgraphics(Molecule *, Scene *);
00115
00118 int read_volumetric(Molecule *, int nsets, const int *setids);
00119
00121 int read_metadata(Molecule *);
00122
00123 #if vmdplugin_ABIVERSION > 9
00124
00125 int read_qm_data(Molecule *);
00126 #endif
00127
00128 int init_write(const char *file, int natoms);
00129
00134 int write_structure(Molecule *, const int *sel);
00135 int write_timestep(const Timestep *, const int *sel);
00136
00137 #if vmdplugin_ABIVERSION > 9
00138
00139 int write_volumetric(Molecule *, int set);
00140 #endif
00141
00142 };
00143
00144 #endif
00145