/* -*- c++ -*- ----------------------------------------------------------
   LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
   http://lammps.sandia.gov, Sandia National Laboratories
   Steve Plimpton, sjplimp@sandia.gov

   Copyright (2003) Sandia Corporation.  Under the terms of Contract
   DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
   certain rights in this software.  This software is distributed under
   the GNU General Public License.

   See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */

#ifdef DUMP_CLASS

DumpStyle(image,DumpImage)

#else

#ifndef LMP_DUMP_IMAGE_H
#define LMP_DUMP_IMAGE_H

#include "dump_custom.h"

namespace LAMMPS_NS {

class DumpImage : public DumpCustom {
 public:
  int multifile_override;          // used by write_dump command

  DumpImage(class LAMMPS *, int, char**);
  virtual ~DumpImage();
  int pack_forward_comm(int, int *, double *, int, int *);
  void unpack_forward_comm(int, int, double *);

 protected:
  int filetype;
  enum{PPM,JPG,PNG};

  int atomflag;                    // 0/1 for draw atoms
  int acolor,adiam;                // what determines color/diam of atoms
  double adiamvalue;               // atom diameter value

  int lineflag;                    // 0/1 for draw atoms as lines
  int lcolor,ldiam;                // what determines color/diam of lines
  double ldiamvalue;               // line diameter value
  int triflag;                     // 0/1 for draw atoms as triangles
  int tcolor,tstyle;               // what determines color/style of tris
  double tdiamvalue;               // tri edge diameter value
  int bodyflag;                    // 0/1 for draw atoms as bodies
  int bodycolor;                   // what determines color of bodies
  double bodyflag1,bodyflag2;      // user-specified params for drawing bodies
  int fixflag;                     // 0/1 to draw what fix provides
  int fixcolor;                    // what determines color of fix objects
  double fixflag1,fixflag2;        // user-specified params for fix objects

  int bondflag;                    // 0/1 for draw bonds
  int bcolor,bdiam;                // what determines color/diam of bonds
  double bdiamvalue;               // bond diameter value

  int extraflag;                   // 0/1 for any of line/tri/body flag set
  char *thetastr,*phistr;          // variables for view theta,phi
  int thetavar,phivar;             // index to theta,phi vars
  int cflag;                       // static/dynamic box center
  double cx,cy,cz;                 // fractional box center
  char *cxstr,*cystr,*czstr;       // variables for box center
  int cxvar,cyvar,czvar;           // index to box center vars
  char *upxstr,*upystr,*upzstr;    // view up vector variables
  int upxvar,upyvar,upzvar;        // index to up vector vars
  char *zoomstr,*perspstr;         // view zoom and perspective variables
  int zoomvar,perspvar;            // index to zoom,persp vars
  int boxflag,axesflag;            // 0/1 for draw box and axes
  double boxdiam,axeslen,axesdiam; // params for drawing box and axes
  int subboxflag;
  double subboxdiam;

  int viewflag;                    // overall view is static or dynamic

  double *diamtype,*diamelement,*bdiamtype;         // per-type diameters
  double **colortype,**colorelement,**bcolortype;   // per-type colors

  class AtomVecLine *avec_line;    // ptrs to atom style (sub)classes
  class AtomVecTri *avec_tri;
  class AtomVecBody *avec_body;

  class Fix *fixptr;               // ptr to Fix that provides image data

  class Image *image;              // class that renders each image

  int *chooseghost;                // extended choose array for comm
  double **bufcopy;                // buffer for communicating bond/atom info
  int maxbufcopy;

  virtual void init_style();
  int modify_param(int, char **);
  void write();

  void box_center();
  void view_params();
  void box_bounds();

  void create_image();
};

}

#endif
#endif

/* ERROR/WARNING messages:

E: Invalid dump image filename

The file produced by dump image cannot be binary and must
be for a single processor.

E: Support for writing images in JPEG format not included

LAMMPS was not built with the -DLAMMPS_JPEG switch in the Makefile.

E: Support for writing images in PNG format not included

LAMMPS was not built with the -DLAMMPS_PNG switch in the Makefile.

E: Illegal ... command

Self-explanatory.  Check the input script syntax and compare to the
documentation for the command.  You can use -echo screen as a
command-line option when running LAMMPS to see the offending line.

E: Dump image bond not allowed with no bond types

Self-explanatory.

E: Invalid dump image theta value

Theta must be between 0.0 and 180.0 inclusive.

E: Dump image persp option is not yet supported

Self-explanatory.

E: Dump image line requires atom style line

Self-explanatory.

E: Dump image tri requires atom style tri

Self-explanatory.

E: Dump image body yes requires atom style body

Self-explanatory.

E: Dump image requires one snapshot per file

Use a "*" in the filename.

E: Dump image cannot perform sorting

Self-explanatory.

E: Variable name for dump image theta does not exist

Self-explanatory.

E: Variable for dump image theta is invalid style

Must be an equal-style variable.

E: Variable name for dump image phi does not exist

Self-explanatory.

E: Variable for dump image phi is invalid style

Must be an equal-style variable.

E: Variable name for dump image center does not exist

Self-explanatory.

E: Variable for dump image center is invalid style

Must be an equal-style variable.

E: Variable name for dump image zoom does not exist

Self-explanatory.

E: Variable for dump image zoom is invalid style

Must be an equal-style variable.

E: Variable name for dump image persp does not exist

Self-explanatory.

E: Variable for dump image persp is invalid style

Must be an equal-style variable.

E: Invalid dump image element name

The specified element name was not in the standard list of elements.
See the dump_modify doc page.

E: Invalid color map min/max values

The min/max values are not consistent with either each other or
with values in the color map.

E: Invalid dump image zoom value

Zoom value must be > 0.0.

E: Invalid dump image persp value

Persp value must be >= 0.0.

E: Invalid color in dump_modify command

The specified color name was not in the list of recognized colors.
See the dump_modify doc page.

E: Dump modify bcolor not allowed with no bond types

Self-explanatory.

E: Dump modify bdiam not allowed with no bond types

Self-explanatory.

*/
