** 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.25 2001/01/17 11:00:18 kevin Exp $
+** $Id: scanner.cpp,v 1.28 2001/02/02 00:46:38 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.yd2 = m_dYCenter - m_dFocalLength;
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);
+#if 0
+ double dAngle = (m_dFieldOfView / 2) / cos (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 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);
+
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
{