/*////////////////////////////////////////////////////////////////////////////// // CMT Cosmic Muon Tomography project ////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// Copyright (c) 2014, Universita' degli Studi di Padova, INFN sez. di Padova All rights reserved Authors: Andrea Rigoni Garola < andrea.rigoni@pd.infn.it > ------------------------------------------------------------------ This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3.0 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library. //////////////////////////////////////////////////////////////////////////////*/ #ifndef VOXRAYTRACER_H #define VOXRAYTRACER_H #include #include "Core/Vector.h" #include "Math/ImageData.h" #include "Math/Line.h" #include "Math/VectorSpace.h" namespace uLib { class VoxRaytracer { public: class RayData { public: RayData() : m_TotalLength(0) {} typedef struct { Id_t vox_id; Scalarf L; } Element; inline void AddElement(Id_t id, float L); void AppendRay ( const RayData &in); uLibConstRefMacro(Data,Vector) uLibConstRefMacro(TotalLength,Scalarf) void PrintSelf(std::ostream &o); private: Vector m_Data; Scalarf m_TotalLength; }; public: VoxRaytracer(ImageData &image) : m_Image(&image) {} bool GetEntryPoint(const HLine3f line, Vector4f &pt) const; bool GetExitPoint(const HLine3f line, Vector4f &pt) const; RayData TraceBetweenPoints(const Vector4f &in, const Vector4f &out) const; uLibGetMacro(Image,ImageData *) private: ImageData *m_Image; }; } #endif // VOXRAYTRACER_H