X-Git-Url: http://git.kpe.io/?p=ctsim.git;a=blobdiff_plain;f=include%2Fscanner.h;h=f0b498b72844e5d90ed223f243455b884d0cb985;hp=79eee68d0969287709637f61dc2f931e4d1d5d17;hb=9b2bb510160bdb56f04847f5b55ab61dd8a47976;hpb=1e88cf0f7fa4f690ea9f110e8ed3f2b5338d0a10 diff --git a/include/scanner.h b/include/scanner.h index 79eee68..f0b498b 100644 --- a/include/scanner.h +++ b/include/scanner.h @@ -9,7 +9,7 @@ ** This is part of the CTSim program ** Copyright (C) 1983-2000 Kevin Rosenberg ** -** $Id: scanner.h,v 1.12 2000/08/25 15:59:13 kevin Exp $ +** $Id: scanner.h,v 1.16 2000/12/16 03:29:02 kevin Exp $ ** ** ** This program is free software; you can redistribute it and/or modify @@ -45,12 +45,12 @@ class DetectorArray { public: DetectorArray (const int ndet); - ~DetectorArray (void); + ~DetectorArray (); - const int nDet(void) const {return m_nDet;} - const double viewAngle(void) const {return m_viewAngle;} - DetectorValue* detValues(void) {return m_detValues;} - const DetectorValue* detValues(void) const {return m_detValues;} + const int nDet() const {return m_nDet;} + const double viewAngle() const {return m_viewAngle;} + DetectorValue* detValues() {return m_detValues;} + const DetectorValue* detValues() const {return m_detValues;} void setViewAngle (double viewAngle) { m_viewAngle = viewAngle; } @@ -77,22 +77,25 @@ class Scanner Scanner (const Phantom& phm, const char* const geometryName, int nDet, int nView, int nSample, const double rot_anglen, double dFieldOfView, double dFocalLength); ~Scanner(); - void collectProjections (Projections& proj, const Phantom& phm, const int trace = TRACE_NONE, SGP* pSGP = NULL); + void collectProjections (Projections& proj, const Phantom& phm, const int trace = Trace::TRACE_NONE, SGP* pSGP = NULL); - void collectProjections (Projections& proj, const Phantom& phm, const int iStartView, const int iNumViews, bool bStoreAtViewPosition, const int trace = TRACE_NONE, SGP* pSGP = NULL); + void collectProjections (Projections& proj, const Phantom& phm, const int iStartView, const int iNumViews, bool bStoreAtViewPosition, const int trace = Trace::TRACE_NONE, SGP* pSGP = NULL); void setNView (int nView); - const bool fail(void) const {return m_fail;} - const string& failMessage(void) const {return m_failMessage;} - const unsigned int nDet(void) const {return m_nDet;} - const unsigned int nView(void) const {return m_nView;} - const double phmLen(void) const {return m_phmLen;} - const double rotInc(void) const {return m_rotInc;} - const double detInc(void) const {return m_detInc;} - const double detLen(void) const {return m_detLen;} - - static const int getGeometryCount() {return s_iGeometryCount;} + bool fail() const {return m_fail;} + const std::string& failMessage() const {return m_failMessage;} + unsigned int nDet() const {return m_nDet;} + unsigned int nView() const {return m_nView;} + double phmLen() const {return m_phmLen;} + double rotInc() const {return m_rotInc;} + double detInc() const {return m_detInc;} + double detLen() const {return m_detLen;} + double focalLength() const {return m_dFocalLength;} + double fieldOfView() const {return m_dFieldOfView;} + int geometry() const {return m_idGeometry;} + + static int getGeometryCount() {return s_iGeometryCount;} static const char** getGeometryNameArray() {return s_aszGeometryName;} static const char** getGeometryTitleArray() {return s_aszGeometryTitle;} static int convertGeometryNameToID (const char* const geometryName); @@ -101,51 +104,70 @@ class Scanner private: bool m_fail; - string m_failMessage; + std::string m_failMessage; int m_idGeometry; unsigned int m_nDet; /* Number of detectors in array */ unsigned int m_nView; /* Number of rotated views */ unsigned int m_nSample; /* Number of rays per detector */ double m_dFieldOfView; // Field of View - double m_dFocalLength; // Focal Length + double m_dFocalLength; // Focal Length + double m_dFieldOfViewRatio; // Field of View Ratio to diameter phmLen + double m_dFocalLengthRatio; // Focal Length ratio to radius phmLen double m_detLen; // Total length of detector array double m_rotLen; // Rotation angle length in radians (norm 2PI) double m_detInc; // Increment between centers of detectors double m_rotInc; // Increment in rotation angle between views double m_phmLen; // Maximum Length of phantom or area of interest + double m_dXCenter; // Center of Phantom + double m_dYCenter; + double m_dAngularDetIncrement; + double m_dAngularDetLen; + int m_trace; struct { double xd1,yd1,xd2,yd2; /* Coordinates of detector endpoints */ double xs1,ys1,xs2,ys2; /* Coordinates of source endpoints */ double angle; /* Starting angle */ + double dAngularDet; } m_initPos; + GRFMTX_2D m_rotmtxIncrement; + +#if HAVE_SGP + SGP* m_pSGP; // Pointer to graphics device + double m_dXMinWin; // Extent of graphics window + double m_dXMaxWin; + double m_dYMinWin; + double m_dYMaxWin; + double m_dTextHeight; +#endif + static const char* s_aszGeometryName[]; static const char* s_aszGeometryTitle[]; static const int s_iGeometryCount; - void projectSingleView (const Phantom& phm, DetectorArray& darray, const double xd1, const double yd1, const double xd2, const double yd2, const double xs1, const double ys1, const double xs2, const double ys2, SGP* pSGP); + void projectSingleView (const Phantom& phm, DetectorArray& darray, const double xd1, const double yd1, const double xd2, const double yd2, const double xs1, const double ys1, const double xs2, const double ys2, const double dDetAngle); - double projectSingleLine (const Phantom& phm, const double x1, const double y1, const double x2, const double y2, SGP* pSGP); + double projectSingleLine (const Phantom& phm, const double x1, const double y1, const double x2, const double y2); - double projectLineAgainstPElem (const PhantomElement& pelem, const double x1, const double y1, const double x2, const double y2, SGP* pSGP); + double projectLineAgainstPElem (const PhantomElement& pelem, const double x1, const double y1, const double x2, const double y2); - void traceShowParam (SGP* pSGP, const char *label, const char *fmt, int row, int color, ...); + void traceShowParam (const char* szLabel, const char *fmt, int row, int color, ...); + void traceShowParamXOR (const char* szLabel, const char *fmt, int row, int color, ...); + void traceShowParamRasterOp (int iRasterOp, const char* szLabel, const char* fmt, int row, int color, va_list va); }; -const static int RAYSUM_TRACE_ROW_TITLE=1; -const static int RAYSUM_TRACE_ROW_TITLE2=2; -const static int RAYSUM_TRACE_ROW_PHANT_ID=4; -const static int RAYSUM_TRACE_ROW_CHROMATIC=7; -const static int RAYSUM_TRACE_ROW_SCATTER=8; -const static int RAYSUM_TRACE_ROW_PHOT_STAT=9; -const static int RAYSUM_TRACE_ROW_NDET=12; -const static int RAYSUM_TRACE_ROW_NVIEW=13; -const static int RAYSUM_TRACE_ROW_SAMPLES=14; -const static int RAYSUM_TRACE_ROW_CURR_VIEW=17; -const static int RAYSUM_TRACE_ROW_ATTEN=18; +const static int PROJECTION_TRACE_ROW_PHANT_ID=0; +const static int PROJECTION_TRACE_ROW_GEOMETRY=1; +const static int PROJECTION_TRACE_ROW_FOCAL_LENGTH=2; +const static int PROJECTION_TRACE_ROW_FIELD_OF_VIEW=3; +const static int PROJECTION_TRACE_ROW_NDET=4; +const static int PROJECTION_TRACE_ROW_NVIEW=5; +const static int PROJECTION_TRACE_ROW_SAMPLES=6; +const static int PROJECTION_TRACE_ROW_CURR_VIEW=7; +const static int PROJECTION_TRACE_ROW_ATTEN=8;