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_pagealigned_timesteps() const {
00064 #if vmdplugin_ABIVERSION > 17
00065 return plugin->read_timestep_pagealign_size != NULL;
00066 #else
00067 return 0;
00068 #endif
00069 }
00070 int can_read_timesteps() const { return plugin->read_next_timestep != NULL;}
00071 int can_read_graphics() const { return plugin->read_rawgraphics != NULL; }
00072 int can_read_volumetric() const { return plugin->read_volumetric_metadata != NULL; }
00073 int can_read_metadata() const { return plugin->read_molecule_metadata != NULL; }
00074 int can_read_qm() const { return plugin->read_qm_metadata != NULL; }
00075 int can_read_qm_timestep() { return plugin->read_timestep != NULL; }
00076 int can_read_angles() { return plugin->read_angles != NULL; }
00077 int can_read_timestep_metadata() { return plugin->read_timestep_metadata != NULL; }
00078 int can_read_qm_timestep_metadata() { return plugin->read_qm_timestep_metadata != NULL; }
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 int can_write_angles() { return plugin->read_angles != NULL; }
00084 int can_write_volumetric() const { return plugin->write_volumetric_data != NULL; }
00085
00086 int init_read(const char *file);
00087
00088
00089
00090 int natoms() const { return numatoms; }
00091
00092 void set_natoms(int);
00093
00094
00095
00096 int read_structure(Molecule *m, int filebonds, int autobonds);
00097
00098
00099
00100
00105 int read_optional_structure(Molecule *m, int filebonds);
00106
00119 int read_timestep_pagealign_size(void);
00120
00121 Timestep *next(Molecule *m, int ts_pagealign_sz=1);
00122 int skip(Molecule *m);
00123
00125 int read_rawgraphics(Molecule *, Scene *);
00126
00129 int read_volumetric(Molecule *, int nsets, const int *setids);
00130
00132 int read_metadata(Molecule *);
00133
00135 int read_qm_data(Molecule *);
00136
00137 int init_write(const char *file, int natoms);
00138
00143 int write_structure(Molecule *, const int *sel);
00144 int write_timestep(const Timestep *, const int *sel);
00145
00147 int write_volumetric(Molecule *, int set);
00148
00149 };
00150
00151 #endif
00152