Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F91651442
xmovie.c
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Wed, Nov 13, 02:38
Size
7 KB
Mime Type
text/x-c
Expires
Fri, Nov 15, 02:38 (2 d)
Engine
blob
Format
Raw Data
Handle
22214242
Attached To
rLAMMPS lammps
xmovie.c
View Options
/* ****************************************************************
* xmovie - a simple X based movie program
*
* Mike Uttormark - 7/13/92
* Sandia Nat'l Labs 1421
* On leave from University of Wisconsin--Madison
*/
#include <stdio.h>
#include <stdlib.h>
#include <X11/StringDefs.h>
#include <X11/Intrinsic.h>
#include <X11/Xaw/Form.h>
#include <X11/Xaw/Cardinals.h>
#include "xmovie.h"
#include "resource.h"
extern FILE *popen(const char *, const char *);
extern int pclose(FILE *);
/* **************************************************************** */
/* local function prototypes */
int main(int argc, char **argv);
PRIVATE void CheckResources(void);
/* **************************************************************** */
/* common data */
CommonData Common = {
NULL, /* atoms visible */
NULL, /* bonds visible */
FALSE, /* hollow */
FALSE, /* opaque */
FALSE, /* 2d mode */
FALSE, /* periodic boundary conditions on bond drawing */
FALSE, /* remap atoms into box bounds if necessary */
FALSE, /* scale atoms to fill box bounds */
FALSE, /* bond copying */
FALSE, /* version */
4, /* number of atom types */
4, /* number of bond types */
NULL, /* atom diameters */
0, /* init */
0, /* motion off */
0, /* saveflag off */
250L, /* delay interval (ms) */
0, /* next drawing position */
0, /* step number */
1, /* dstep */
2, /* z axis */
0, /* view direction */
{ { 1e20, 1e-20 }, { 1e20, 1e-20 }, { 1e20, 1e-20 } }, /* bounds */
0, /* ndata */
0, /* maxdata */
NULL,
};
Widget TopLevel;
char *Progname;
/* **************************************************************** */
/* local data */
static XrmOptionDescRec options[] = {
{ "-2D", "*twoDimensions", XrmoptionNoArg, "True" },
{ "-2d", "*twoDimensions", XrmoptionNoArg, "True" },
{ "-pbc", "*pbcBond", XrmoptionNoArg, "True" },
{ "-remap", "*remap", XrmoptionNoArg, "True" },
{ "-scale", "*scale", XrmoptionNoArg, "True" },
{ "-copy", "*copyBond", XrmoptionNoArg, "True" },
{ "-hollow", "*hollow", XrmoptionNoArg, "True" },
{ "-opaque", "*opaque", XrmoptionNoArg, "True" },
{ "-V", "*version", XrmoptionNoArg, "True" },
{ "-atomcolors","*atomColors", XrmoptionSepArg, NULL },
{ "-bondcolors","*bondColors", XrmoptionSepArg, NULL },
};
#define Offset(x,y) (((char *) &(x.y)) - ((char *) &(x)))
static XtResource resources[] = {
{ "hollow", "Hollow",
XtRBool, sizeof(Bool),
Offset(Common, hollow),
XtRImmediate, (XtPointer) FALSE },
{ "opaque", "Opaque",
XtRBool, sizeof(Bool),
Offset(Common, opaque),
XtRImmediate, (XtPointer) FALSE },
{ "twoDimensions", "TwoDimensions",
XtRBool, sizeof(Bool),
Offset(Common, two_d),
XtRImmediate, (XtPointer) FALSE },
{ "pbcBond", "PbcBond",
XtRBool, sizeof(Bool),
Offset(Common, pbc_bond),
XtRImmediate, (XtPointer) FALSE },
{ "remap", "Remap",
XtRBool, sizeof(Bool),
Offset(Common, remap),
XtRImmediate, (XtPointer) FALSE },
{ "scale", "Scale",
XtRBool, sizeof(Bool),
Offset(Common, scaleflag),
XtRImmediate, (XtPointer) FALSE },
{ "copyBond", "CopyBond",
XtRBool, sizeof(Bool),
Offset(Common, copy_bond),
XtRImmediate, (XtPointer) FALSE },
{ "version", "Version",
XtRBool, sizeof(Bool),
Offset(Common, version),
XtRImmediate, (XtPointer) FALSE },
{ "atomColors", "AtomColors",
XtRInt, sizeof(int),
Offset(Common,natomcolors),
XtRImmediate, (XtPointer) NCOLORS },
{ "bondColors", "BondColors",
XtRInt, sizeof(int),
Offset(Common,nbondcolors),
XtRImmediate, (XtPointer) NCOLORS },
};
static XtActionsRec actions[] = {
{ "ExposeScene", ExposeScene },
{ "ExposeAxes", ExposeAxes },
};
int main(int argc, char **argv)
{
XtAppContext AppContext; /* the whole process variable */
/* Get X stuff going */
Progname = argv[0];
TopLevel = XtAppInitialize(&AppContext, "XMovie", options,
XtNumber(options), &argc, argv,
FallbackResources, NULL, ZERO);
XtVaGetApplicationResources(TopLevel, (XtPointer) &Common,
resources, XtNumber(resources), NULL);
CheckResources();
XtAppAddActions(AppContext, actions, XtNumber(actions));
/* initialize the reading stuff */
InitRead(argc-1, argv+1);
/* Create the scene box */
(void) CreateScene(TopLevel,"scene");
/* Create the Control panel */
(void) CreateControl(TopLevel,"control");
XtRealizeWidget(TopLevel);
/* put reading into background */
XtAppAddWorkProc(AppContext, ReadProc, (XtPointer) NULL);
Setup();
Common.init = 1;
/* Enter Event Loop */
XtAppMainLoop(AppContext);
}
int Usage(void)
{
static char *msg[] = {
"xmovie - a simple & fast atom/molecule visualizer",
" written by Mike Uttormark while at Sandia, 1992",
" updated by Steve Plimpton, Sandia National Labs",
" contact info: sjplimp@sandia.gov",
"",
"Usage: xmovie [-Xoptions] [-options] file1 [file2 ...]",
" xmovie [-Xoptions] [-options] < file",
"",
"where -Xoptions are any standard XToolkit options",
"-options are any of",
" -2d reads two dimensional data files",
" -hollow draws hollow atoms",
" -opaque draws opaque hollow atoms (implies -hollow)",
" -V prints version number and exits",
" -pbc does not draw bonds > 1/2 box size",
" -remap remap atoms back into bounding box if necessary",
" -scale scale atom positions to fill bounding box",
" -copy copies bonds from one timestep to next",
" -atomcolors n sets number of colors for atoms",
" -bondcolors n sets number of colors for bonds",
"",
"and 'files' are data files in the format",
"",
" ITEM: TIMESTEP",
" time",
" ITEM: BOX BOUNDS",
" xlow xhigh",
" ylow yhigh",
" zlow zhigh",
" ITEM: BONDS",
" type1 atom1a atom1b",
" type2 atom2a atom2b",
" etc.",
" ITEM: ATOMS",
" index1 type1 x1 y1 z1",
" index2 type2 x2 y2 z2",
" etc.",
"",
"Notes:",
" A TIMESTEP item starts a new frame",
" A new item (or EOF) ends the list of ATOMS or BONDS",
" BOX BOUNDS persist unless reset",
" Any items not matching these patterns are skipped",
" Data files can be gzipped - e.g. xmovie dump.gz",
NULL,
};
char **s;
char *pager;
FILE *pipe;
/* find user's pager */
pager = getenv("PAGER");
if (!pager || !*pager) pager = "more";
pipe = popen(pager, "w");
if (!pipe) pipe = stderr;
for(s = msg; *s; s++)
fprintf(pipe,"%s\n", *s);
if (pipe != stderr) pclose(pipe);
return(0);
}
PRIVATE void CheckResources(void)
{
if (Common.version) Version();
if (Common.natomcolors < 0 || Common.natomcolors > MAXCOLORS)
Common.natomcolors = 1;
if (Common.nbondcolors < 0 || Common.nbondcolors > MAXCOLORS)
Common.nbondcolors = 1;
if (Common.opaque) Common.hollow = TRUE;
Common.atoms_visible =
(Bool *) XtMalloc(Common.natomcolors * sizeof(Bool));
Common.diameter =
(Dimension *) XtMalloc(Common.natomcolors * sizeof(Dimension));
Common.bonds_visible =
(Bool *) XtMalloc(Common.nbondcolors * sizeof(Bool));
}
Event Timeline
Log In to Comment