source: trunk/src/PixelMap/Voxel.hh @ 872

Last change on this file since 872 was 858, checked in by MatthewWhiting, 13 years ago

Adding a less-than test for voxels, so they can be used in things like std::map classes. This is useful for #123.

File size: 4.1 KB
RevLine 
[301]1// -----------------------------------------------------------------------
2// Voxel.hh: Definition of the Voxel class, storing a single 3D voxel
3//           plus an associated flux.
4// -----------------------------------------------------------------------
5// Copyright (C) 2006, Matthew Whiting, ATNF
6//
7// This program is free software; you can redistribute it and/or modify it
8// under the terms of the GNU General Public License as published by the
9// Free Software Foundation; either version 2 of the License, or (at your
10// option) any later version.
11//
12// Duchamp is distributed in the hope that it will be useful, but WITHOUT
13// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15// for more details.
16//
17// You should have received a copy of the GNU General Public License
18// along with Duchamp; if not, write to the Free Software Foundation,
19// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
20//
21// Correspondence concerning Duchamp may be directed to:
22//    Internet email: Matthew.Whiting [at] atnf.csiro.au
23//    Postal address: Dr. Matthew Whiting
24//                    Australia Telescope National Facility, CSIRO
25//                    PO Box 76
26//                    Epping NSW 1710
27//                    AUSTRALIA
28// -----------------------------------------------------------------------
[237]29#ifndef VOXEL_H
30#define VOXEL_H
31
32#include <iostream>
33
[252]34namespace PixelInfo
35{
36  //==========================================================================
[237]37
[528]38  /// Voxel class.
39  ///  A 3-dimensional pixel, with x,y,z position + flux
[237]40
[252]41  class Voxel
42  {
43  public:
[528]44    /// @brief Default constructor.
[252]45    Voxel(){};
[528]46    /// @brief Specific constructor, defining an (x,y,z) location and flux f.
[270]47    Voxel(long x, long y, long z, float f);
[742]48    /// @brief Specific constructor, defining an (x,y,z) location, setting f=0.
49    Voxel(long x, long y, long z);
[528]50    /// @brief Copy constructor.
[270]51    Voxel(const Voxel& v);
[528]52    /// @brief Assignment operator.
[270]53    Voxel& operator= (const Voxel& v);
[252]54    virtual ~Voxel(){};
[237]55
[252]56    // accessor functions
57    void   setX(long x){itsX = x;};
58    void   setY(long y){itsY = y;};
59    void   setZ(long z){itsZ = z;};
60    void   setF(float f){itsF = f;};
[528]61    /// @brief Define an (x,y) coordinate
[252]62    void   setXY(long x, long y){itsX = x; itsY = y;};
[528]63    /// @brief Define an (x,y,z) coordinate
[252]64    void   setXYZ(long x, long y, long z){itsX = x; itsY = y; itsZ = z;};
[528]65    /// @brief Define an (x,y) coordinate with a flux f
[252]66    void   setXYF(long x, long y, float f){itsX = x; itsY = y; itsF = f;};
[528]67    /// @brief Define an (x,y,z) coordinate with a flux f
[252]68    void   setXYZF(long x, long y, long z, float f){itsX = x; itsY = y; itsZ = z; itsF = f;};
69    long   getX(){return itsX;};
70    long   getY(){return itsY;};
71    long   getZ(){return itsZ;};
72    float  getF(){return itsF;};
[472]73   
[528]74    /// @brief Return an index value for an array
[472]75    long   arrayIndex(long *dim);
76
[528]77    /// @brief Operator to print information of voxel.
[252]78    friend std::ostream& operator<< ( std::ostream& theStream, Voxel& vox);
[237]79
[528]80    /// @brief Operator to test for equality.
[418]81    friend bool operator== (Voxel lhs, Voxel rhs);
[858]82
83    /// @brief Less-than operator to allow ordering
84    friend bool operator< (Voxel lhs, Voxel rhs);
[418]85   
[528]86    /// @brief Function to test for equality of positions only.
[418]87    bool match(Voxel other);
88   
89
[252]90  protected:
91    long  itsX;         ///< x-position of pixel
92    long  itsY;         ///< y-position of pixel
93    long  itsZ;         ///< z-position of pixel
94    float itsF;         ///< flux of pixel
95  };
[237]96
[252]97  //==========================================================================
[237]98
[528]99  /// Pixel class.
100  ///  A 2-dimensional type of voxel, with just x & y position + flux
[237]101
[252]102  class Pixel : public Voxel
103  {
104  public:
105    Pixel(){itsZ=0;};
[270]106    Pixel(long x, long y, float f);
107    Pixel(const Pixel& p);
108    Pixel& operator= (const Pixel& p);
[252]109    virtual ~Pixel(){};
110    // accessor functions
111    void  setXY(long x, long y){itsX = x; itsY = y;};
112    void  setXYF(long x, long y, float f){itsX = x; itsY = y; itsF = f;};
[237]113
[252]114  };
[237]115
116
[252]117}
[237]118
119#endif // VOXEL_H
Note: See TracBrowser for help on using the repository browser.