00001 /*************************************************************************** 00002 *cr 00003 *cr (C) Copyright 1995-2019 The Board of Trustees of the 00004 *cr University of Illinois 00005 *cr All Rights Reserved 00006 *cr 00007 ***************************************************************************/ 00008 00009 /*************************************************************************** 00010 * RCS INFORMATION: 00011 * 00012 * $RCSfile: CmdAnimate.C,v $ 00013 * $Author: johns $ $Locker: $ $State: Exp $ 00014 * $Revision: 1.53 $ $Date: 2019/01/17 21:20:58 $ 00015 * 00016 *************************************************************************** 00017 * DESCRIPTION: 00018 * 00019 * Command objects for doing animation. 00020 * 00021 ***************************************************************************/ 00022 00023 #include <string.h> 00024 #include <stdlib.h> 00025 #include <ctype.h> 00026 00027 #include "config.h" 00028 #include "CmdAnimate.h" 00029 #include "MoleculeList.h" 00030 #include "CommandQueue.h" 00031 #include "utilities.h" 00032 #include "Inform.h" 00033 #include "VMDApp.h" 00034 #include "CoorPluginData.h" 00035 00036 // The following uses the Cmdtypes: 00037 // ANIM_DIRECTION, ANIM_JUMP, ANIM_SKIP, ANIM_STYLE, ANIM_SPEED, 00038 // ANIM_READ, ANIM_WRITE, ANIM_DELETE, ANIM_READ_DELETE_FILE 00039 00040 00041 void CmdAnimDir::create_text(void) { 00042 *cmdText << "animate "; 00043 if(newDir == Animation::ANIM_REVERSE) 00044 *cmdText << "reverse"; 00045 else if(newDir == Animation::ANIM_REVERSE1) 00046 *cmdText << "prev"; 00047 else if(newDir == Animation::ANIM_FORWARD) 00048 *cmdText << "forward"; 00049 else if(newDir == Animation::ANIM_FORWARD1) 00050 *cmdText << "next"; 00051 else if(newDir == Animation::ANIM_PAUSE) 00052 *cmdText << "pause"; 00053 *cmdText << ends; 00054 } 00055 00056 CmdAnimDir::CmdAnimDir(Animation::AnimDir ad) 00057 : Command(Command::ANIM_DIRECTION) { 00058 newDir = ad; 00059 } 00060 00061 00062 void CmdAnimStyle::create_text(void) { 00063 *cmdText << "animate style " << animationStyleName[newStyle] << ends; 00064 } 00065 00066 CmdAnimStyle::CmdAnimStyle(Animation::AnimStyle as) 00067 : Command(Command::ANIM_STYLE) { 00068 newStyle = as; 00069 } 00070 00071 void CmdAnimJump::create_text(void) { 00072 *cmdText << "animate goto " << newFrame << ends; 00073 } 00074 00075 CmdAnimJump::CmdAnimJump(int newval) 00076 : Command(Command::ANIM_JUMP) { 00077 newFrame = newval; 00078 } 00079 00080 void CmdAnimSkip::create_text(void) { 00081 *cmdText << "animate skip " << newSkip << ends; 00082 } 00083 00084 CmdAnimSkip::CmdAnimSkip(int newval) 00085 : Command(Command::ANIM_SKIP) { 00086 newSkip = newval; 00087 } 00088 00089 void CmdAnimSpeed::create_text(void) { 00090 *cmdText << "animate speed " << newSpeed << ends; 00091 } 00092 00093 CmdAnimSpeed::CmdAnimSpeed(float newval) 00094 : Command(Command::ANIM_SPEED) { 00095 newSpeed = newval; 00096 } 00097 00098 void CmdAnimWriteFile::create_text(void) { 00099 *cmdText << "animate write " << fileType << " {" << fileName << "}"; 00100 *cmdText << " beg " << begFrame; 00101 *cmdText << " end " << endFrame; 00102 *cmdText << " skip " << frameSkip; 00103 if(whichMol >= 0) 00104 *cmdText << " " << whichMol; 00105 *cmdText << ends; 00106 } 00107 00108 CmdAnimWriteFile::CmdAnimWriteFile(int m,const char *n,const char *t, 00109 int bf,int ef,int fs) 00110 : Command(Command::ANIM_WRITE) { 00111 whichMol = m; 00112 fileType = stringdup(t); 00113 begFrame = bf; 00114 endFrame = ef; 00115 frameSkip = fs; 00116 fileName = stringdup(n); 00117 } 00118 00119 CmdAnimWriteFile::~CmdAnimWriteFile(void) { 00120 delete [] fileName; 00121 delete [] fileType; 00122 } 00123 00124 00125 void CmdAnimDelete::create_text(void) { 00126 *cmdText << "animate delete "; 00127 if(begFrame < 0 && endFrame < 0 && frameSkip < 0) { 00128 *cmdText << "all"; 00129 } else { 00130 *cmdText << " beg " << begFrame; 00131 *cmdText << " end " << endFrame; 00132 *cmdText << " skip " << frameSkip; 00133 } 00134 if(whichMol >= 0) 00135 *cmdText << " " << whichMol; 00136 *cmdText << ends; 00137 } 00138 00139 CmdAnimDelete::CmdAnimDelete(int m, int bf, int ef, int fs) 00140 : Command(Command::ANIM_DELETE) { 00141 whichMol = m; 00142 begFrame = bf; 00143 endFrame = ef; 00144 frameSkip = fs; 00145 } 00146 00147 void CmdAnimDup::create_text(void) 00148 { 00149 *cmdText << "animate dup"; 00150 if (whichFrame == -1) { 00151 *cmdText << " frame now"; 00152 } else if (whichFrame < 0) { 00153 *cmdText << " frame null"; 00154 } else { 00155 *cmdText << " frame " << whichFrame; 00156 } 00157 if (whichMol >= 0) { 00158 *cmdText << " " << whichMol; 00159 } 00160 *cmdText << ends; 00161 } 00162 CmdAnimDup::CmdAnimDup(int frame, int molid) 00163 : Command(Command::ANIM_DUP) { 00164 whichFrame = frame; 00165 whichMol = molid; 00166 } 00167