r168: *** empty log message ***
[ctsim.git] / libctsim / phantom.cpp
index d16bf5bb42e8d2e7d35a93cec3fc925f081c1aaa..09245b2205332b7ba02d2df14f0e63d66c5dbe97 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
-**  $Id: phantom.cpp,v 1.12 2000/07/28 10:51:31 kevin Exp $
+**  $Id: phantom.cpp,v 1.15 2000/08/02 18:06:00 kevin Exp $
 **
 **  This program is free software; you can redistribute it and/or modify
 **  it under the terms of the GNU General Public License (version 2) as
@@ -204,19 +204,25 @@ Phantom::createFromFile (const char* const fname)
     return (false);
 
   do {
-    double cx, cy, u, v, rot, dens;
-    char pelemtype[80];
-    int n = fscanf (fp, "%79s %lf %lf %lf %lf %lf %lf",
-               pelemtype, &cx, &cy, &u, &v, &rot, &dens);
+    if (! feof(fp)) {
+      double cx, cy, u, v, rot, dens;
+      char pelemtype[80];
+      char str[1024];
+      fgets (str, sizeof(str), fp);
+      int n = sscanf (str, "%79s %lf %lf %lf %lf %lf %lf", pelemtype, &cx, &cy, &u, &v, &rot, &dens);
     
-    if (n == EOF || n == 0) {  /* end of file */
-      stoploop = true;
-      retval = false;
-    } else if (n != 7) {
-      stoploop = true;
-      retval = false;
+      if (n == EOF || n == 0) {        /* end of file */
+       stoploop = true;
+       retval = false;
+      } else if (n != 7) {
+       stoploop = true;
+       retval = false;
+      } else {
+       addPElem (pelemtype, cx, cy, u, v, rot, dens);
+       retval = true;
+      }
     } else {
-      addPElem (pelemtype, cx, cy, u, v, rot, dens);
+      stoploop = true;
       retval = true;
     }
   } while (stoploop == false);
@@ -308,11 +314,29 @@ Phantom::show () const
 {
   SGPDriver driverSGP ("Phantom Show");
   SGP sgp (driverSGP);
-  draw (sgp);
+
+  show (sgp);
 
   cout << "Press return to continue";
   cio_kb_getc();
 }
+
+void 
+Phantom::show (SGP& sgp) const
+{
+  double wsize = m_xmax - m_xmin;
+  if ((m_ymax - m_ymin) > wsize) 
+      wsize = m_ymax - m_ymin;
+  wsize *= 1.01;
+  double halfWindow = wsize / 2;
+
+  double xcent = m_xmin + (m_xmax - m_xmin) / 2;
+  double ycent = m_ymin + (m_ymax - m_ymin) / 2;
+
+  sgp.setWindow (xcent - halfWindow, ycent - halfWindow, xcent + halfWindow, ycent + halfWindow);
+
+  draw (sgp);
+}
 #endif
 
 
@@ -327,18 +351,6 @@ Phantom::show () const
 void 
 Phantom::draw (SGP& sgp) const
 {
-  double wsize = m_xmax - m_xmin;
-  double xmin = m_xmin;
-  double ymin = m_ymin;
-
-  if ((m_ymax - m_ymin) > wsize) 
-      wsize = m_ymax - m_ymin;
-  wsize *= 1.01;
-
-  double xmax = xmin + wsize;
-  double ymax = ymin + wsize; 
-
-  sgp.setWindow (xmin, ymin, xmax, ymax);
   for (PElemIterator i = m_listPElem.begin(); i != m_listPElem.end(); i++)
     sgp.polylineAbs ((*i)->xOutline(), (*i)->yOutline(), (*i)->nOutlinePoints());
 }