** Date Started: 1984
**
** This is part of the CTSim program
-** Copyright (C) 1983-2000 Kevin Rosenberg
+** Copyright (c) 1983-2001 Kevin Rosenberg
**
-** $Id: scanner.cpp,v 1.23 2001/01/04 21:28:41 kevin Exp $
+** $Id: scanner.cpp,v 1.29 2001/02/04 21:28:19 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
m_initPos.angle = 0.0;
} else if (m_idGeometry == GEOMETRY_EQUILINEAR) {
#if 0
- double dAngle = (m_dFieldOfView / 2) / cos (asin (m_dFieldOfView / 2 / m_dFocalLength));
-#else
+ double dAngle1 = atan ((m_dFieldOfView / 2) / m_dFocalLength);
double dHalfSquare = m_dFieldOfView / SQRT2 / 2;
double dFocalPastPhm = m_dFocalLength - dHalfSquare;
if (dFocalPastPhm <= 0.) {
m_failMessage = "Focal Point inside of phantom";
return;
}
- double dAngle = atan( dHalfSquare / dFocalPastPhm );
-#endif
+ double dAngle2 = atan( dHalfSquare / dFocalPastPhm );
+ double dAngle = maxValue<double> (dAngle1, dAngle2);
+ //double dAngle = (m_dFieldOfView / 2) / cos (asin (m_dFieldOfView / 2 / m_dFocalLength));
+#else
+ if (m_dFieldOfView/2 >= m_dFocalLength) {
+ m_fail = true;
+ m_failMessage = "Invalid geometry: Focal length must be larger than field of view";
+ return;
+ }
+ double dAngle = asin ((m_dFieldOfView/2) / m_dFocalLength);
+#endif
+
double dHalfDetLen = 2 * m_dFocalLength * tan (dAngle);
m_detLen = dHalfDetLen * 2;
m_initPos.yd2 = m_dYCenter - m_dFocalLength;
m_initPos.angle = 0.0;
} else if (m_idGeometry == GEOMETRY_EQUIANGULAR) {
-#if 0
- double dAngle = atan ((m_dFieldOfView / 2) / m_dFocalLength);
-#else
- double dHalfSquare = m_dFieldOfView / SQRT2 / 2;
- double dFocalPastPhm = m_dFocalLength - dHalfSquare;
- if (dFocalPastPhm <= 0.) {
+ if (m_dFieldOfView/2 > m_dFocalLength) {
m_fail = true;
- m_failMessage = "Focal Point inside of phantom";
+ m_failMessage = "Invalid geometry: Focal length must be larger than field of view";
return;
}
- double dAngle = atan ( dHalfSquare / dFocalPastPhm );
-#endif
+ double dAngle = asin ((m_dFieldOfView/2) / m_dFocalLength);
+
m_detLen = 2 * dAngle;
m_detInc = m_detLen / m_nDet;
if (m_nDet % 2 == 0) // Adjust for Even number of detectors
m_pSGP->moveAbs (0., 0.);
m_pSGP->drawCircle (m_dFocalLength);
m_pSGP->setColor (C_BLUE);
+ m_pSGP->setTextPointSize (9);
phm.draw (*m_pSGP);
m_dTextHeight = m_pSGP->getCharHeight ();
#ifdef HAVE_SGP
if (m_pSGP) {
m_pSGP->setRasterOp (iRasterOp);
- double dYPos = m_dYMaxWin - (row * m_dTextHeight);
- m_pSGP->moveAbs (m_dXMinWin, dYPos);
m_pSGP->setTextColor (color, -1);
- m_pSGP->drawText (szLabel);
double dValueOffset = (m_dXMaxWin - m_dXMinWin) / 4;
- m_pSGP->moveAbs (m_dXMinWin + dValueOffset, dYPos);
- m_pSGP->drawText (szValue);
+ if (row < 4) {
+ double dYPos = m_dYMaxWin - (row * m_dTextHeight);
+ double dXPos = m_dXMinWin;
+ m_pSGP->moveAbs (dXPos, dYPos);
+ m_pSGP->drawText (szLabel);
+ m_pSGP->moveAbs (dXPos + dValueOffset, dYPos);
+ m_pSGP->drawText (szValue);
+ } else {
+ row -= 4;
+ double dYPos = m_dYMaxWin - (row * m_dTextHeight);
+ double dXPos = m_dXMinWin + (m_dXMaxWin - m_dXMinWin) * 0.5;
+ m_pSGP->moveAbs (dXPos, dYPos);
+ m_pSGP->drawText (szLabel);
+ m_pSGP->moveAbs (dXPos + dValueOffset, dYPos);
+ m_pSGP->drawText (szValue);
+ }
} else
#endif
{