imagemappinginformation.h 4.58 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// ================================================================================================
// 
// This file is part of the TUMVis Visualization Framework.
// 
// If not explicitly stated otherwise: Copyright (C) 2012, all rights reserved,
//      Christian Schulte zu Berge (christian.szb@in.tum.de)
//      Chair for Computer Aided Medical Procedures
//      Technische Universität München
//      Boltzmannstr. 3, 85748 Garching b. München, Germany
// 
// The licensing of this softare is not yet resolved. Until then, redistribution in source or
// binary forms outside the CAMP chair is not permitted, unless explicitly stated in legal form.
// However, the names of the original authors and the above copyright notice must retain in its
// original state in any case.
// 
// Legal disclaimer provided by the BSD license:
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY 
// AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
// 
// ================================================================================================

schultezub's avatar
schultezub committed
29
30
31
32
#ifndef imagemapping_h__
#define imagemapping_h__

#include "tgt/matrix.h"
33
#include "tgt/vector.h"
schultezub's avatar
schultezub committed
34
#include "core/tools/mapping.h"
schultezub's avatar
schultezub committed
35
36
37
38
39
40
41
42
43
44
45
46

namespace TUMVis {

    /**
     * Contains all necessary for mapping the image or image values.
     * 
     * \todo    Make a full list of fields that belong in this class. Then check
     *          which of them belong together and which are derived measures.
     */
    class ImageMappingInformation {
    public:
        /**
47
         * Creates a new default ImageMappingInformation.
48
         * \param   size                    Image size (number of elements, redundant...)
49
50
51
         * \param   offset                  Position of LLF corner in world coordinates (mm)
         * \param   voxelSize               Voxel size in (mm)
         * \param   realWorldValueMapping   Linear mapping for mapping element values to real world values, defaults to identity.
schultezub's avatar
schultezub committed
52
         */
53
        ImageMappingInformation(
54
            const tgt::vec3& size, 
55
56
57
            const tgt::vec3& offset, 
            const tgt::vec3& voxelSize, 
            const LinearMapping<float>& realWorldValueMapping = LinearMapping<float>::identity);
schultezub's avatar
schultezub committed
58

59
60
61
62
63
64
65
66
67
68
69
        /**
         * Returns the position of LLF corner in world coordinates (mm).
         * \return  _offset
         */
        const tgt::vec3& getOffset() const;

        /**
         * Returns the voxel size in mm.
         * \return  _voxelSize
         */
        const tgt::vec3& getVoxelSize() const;
schultezub's avatar
schultezub committed
70

71
72
73
74
75
76
        /**
         * Gets the transformation matrix from texture to world coordinates.
         * \return  _textureToWolrdTransformation
         */
        const tgt::mat4 getTextureToWorldMatrix() const;

schultezub's avatar
schultezub committed
77
78
79
80
        /**
         * Get the real world value mapping.
         * \return  Linear mapping for mapping element values to real world values.
         */
81
        const LinearMapping<float>& getRealWorldMapping() const;
schultezub's avatar
schultezub committed
82
83
84
85
86

        /**
         * Set the real world value mapping.
         * \param   rwvm    Linear mapping for mapping element values to real world values.
         */
87
        void setRealWorldMapping(const LinearMapping<float>& rwvm);
schultezub's avatar
schultezub committed
88
89

    private:
90
91
92
93
94
95
        /**
         * Updates the X-to-Y matrices.
         */
        void updateMatrixes();

        tgt::vec3 _size;                                ///< Image size (number of elements, redundant...)
96
97
98
99
        tgt::vec3 _offset;                              ///< Position of LLF corner in world coordinates (mm)
        tgt::vec3 _voxelSize;                           ///< Voxel size in (mm)

        LinearMapping<float> _realWorldValueMapping;     ///< Linear mapping for mapping element values to real world values
100
        tgt::mat4 _textureToWolrdTransformation;        ///< Transformation matrix from texture to world coordinates
schultezub's avatar
schultezub committed
101
102
103
104
105
106

        static const std::string loggerCat_;
    };

}
#endif // imagemapping_h__