Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

FirstHitTRI Class Reference

#include <ray.h>

Inheritance diagram for FirstHitTRI:

Trilinear Ray AverageTRI MaxIntensityTRI XRayTRI List of all members.

Public Methods

 FirstHitTRI ()
bool SetTreshold (int treshold)
bool CastNext ()

Protected Methods

float GetDensity (VECTOR pos)

Protected Attributes

int m_treshold

Constructor & Destructor Documentation

FirstHitTRI::FirstHitTRI   [inline]
 

Definition at line 92 of file ray.h.

00092 {m_treshold = 0.0;};


Member Function Documentation

bool FirstHitTRI::CastNext   [virtual]
 

Reimplemented from Trilinear.

Reimplemented in MaxIntensityTRI, XRayTRI, and AverageTRI.

Definition at line 361 of file ray.cpp.

References Trilinear::CalcAlphaTrilinear(), Trilinear::CalcColorTrilinear(), GetDensity(), VECTOR::length(), Trilinear::Lighting(), Ray::m_alpha, Ray::m_backgroundcolor, Ray::m_currentcolor, Ray::m_currentpos, Ray::m_data, Ray::m_direction, Ray::m_radius, Ray::m_startpoint, Ray::m_steplength, Ray::m_tf, m_treshold, Ray::mx, Ray::my, Ray::mz, VECTOR::x, VECTOR::y, and VECTOR::z.

00361                       {
00362         
00363         if(m_data == NULL) return false;
00364         if(m_tf == NULL) return false;
00365         
00366         int step_count = 0;
00367         VECTOR distancetomidpoint = VECTOR(mx/2.0f,my/2.0f,mz/2.0f)-m_currentpos;
00368         int steps = (int)((distancetomidpoint.length() + m_radius)/m_steplength);
00369         bool first = true;
00370         do {
00371                 
00372                 if((m_currentpos.x >= 0.0)&&(m_currentpos.y >= 0.0)&&(m_currentpos.z >= 0.0)&&(m_currentpos.x < mx)&&(m_currentpos.y < my)&&(m_currentpos.z < mz)) {
00373                         if(first) {
00374                                 m_startpoint = VECTOR(m_currentpos.x,m_currentpos.y,m_currentpos.z);
00375                                 first = false;
00376                         }
00377                         float d = GetDensity(m_currentpos);
00378                         if(d > (float)m_treshold) {
00379                                 Color help_color = CalcColorTrilinear(m_currentpos);
00380                                 float help_alpha = CalcAlphaTrilinear(m_currentpos);
00381                                 // lightning:
00382                                 help_color = Lighting(help_color);
00383                                 // calculate new currentcolor:
00384                                 m_currentcolor = help_color;
00385                                 // calculate new alphavalue
00386                                 m_alpha = help_alpha;
00387                                 break;
00388                         }
00389                         // calculate new position
00390                 }
00391                 m_currentpos += m_steplength*m_direction;
00392                 step_count++;
00393         }while(step_count <= steps);
00394         if(m_alpha < 1.0 ) {
00395                 m_currentcolor += m_backgroundcolor*(1.0f-m_alpha);
00396         }
00397         return true;
00398 }

float FirstHitTRI::GetDensity VECTOR    pos [protected]
 

Definition at line 334 of file ray.cpp.

References Data::GetDensity(), Ray::m_data, VECTOR::x, VECTOR::y, and VECTOR::z.

Referenced by AverageTRI::CastNext(), XRayTRI::CastNext(), MaxIntensityTRI::CastNext(), and CastNext().

00334                                   {
00335         int dat000 = m_data->GetDensity(floorf(pos.x),floorf(pos.y),floorf(pos.z));
00336         int dat001 = m_data->GetDensity(floorf(pos.x),floorf(pos.y),ceilf(pos.z));
00337         int dat010 = m_data->GetDensity(floorf(pos.x),ceilf(pos.y),floorf(pos.z));
00338         int dat011 = m_data->GetDensity(floorf(pos.x),ceilf(pos.y),ceilf(pos.z));
00339         int dat100 = m_data->GetDensity(ceilf(pos.x),floorf(pos.y),floorf(pos.z));
00340         int dat101 = m_data->GetDensity(ceilf(pos.x),floorf(pos.y),ceilf(pos.z));
00341         int dat110 = m_data->GetDensity(ceilf(pos.x),ceilf(pos.y),floorf(pos.z));
00342         int dat111 = m_data->GetDensity(ceilf(pos.x),ceilf(pos.y),ceilf(pos.z));
00343 
00344         float difX = abs(pos.x - floorf(pos.x));
00345         float difY = abs(pos.y - floorf(pos.y));
00346         float difZ = abs(pos.z - floorf(pos.z));
00347 
00348         int datA = dat000*difX + dat100*abs(1.0f-difX);
00349         int datB = dat010*difX + dat110*abs(1.0f-difX);
00350         int datC = dat011*difX + dat111*abs(1.0f-difX);
00351         int datD = dat001*difX + dat101*abs(1.0f-difX);
00352 
00353         int datE = datA*difZ + datD*abs(1.0f-difZ);
00354         int datF = datB*difZ + datC*abs(1.0f-difZ);
00355 
00356         int dat = datE*difY + datF*abs(1.0f-difY);
00357         return dat;
00358 }

bool FirstHitTRI::SetTreshold int    treshold [inline]
 

Definition at line 93 of file ray.h.

00093 { m_treshold = treshold; return true;};


Member Data Documentation

int FirstHitTRI::m_treshold [protected]
 

Definition at line 89 of file ray.h.

Referenced by CastNext().


The documentation for this class was generated from the following files:
Generated on Thu Jan 23 12:32:16 2003 by doxygen1.3-rc2