abstractimagerepresentation.h 4.82 KB
Newer Older
1
2
3
4
// ================================================================================================
// 
// This file is part of the CAMPVis Software Framework.
// 
5
// If not explicitly stated otherwise: Copyright (C) 2012-2013, all rights reserved,
6
7
//      Christian Schulte zu Berge <christian.szb@in.tum.de>
//      Chair for Computer Aided Medical Procedures
8
9
//      Technische Universität München
//      Boltzmannstr. 3, 85748 Garching b. München, Germany
10
// 
11
12
// For a full list of authors and contributors, please refer to the file "AUTHORS.txt".
// 
13
14
15
16
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file 
// except in compliance with the License. You may obtain a copy of the License at
// 
// http://www.apache.org/licenses/LICENSE-2.0
17
// 
18
19
20
21
// Unless required by applicable law or agreed to in writing, software distributed under the 
// License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 
// either express or implied. See the License for the specific language governing permissions 
// and limitations under the License.
22
23
24
25
26
27
28
29
// 
// ================================================================================================

#ifndef ABSTRACTIMAGEREPRESENTATION_H__
#define ABSTRACTIMAGEREPRESENTATION_H__

#include "tgt/bounds.h"
#include "tgt/vector.h"
30
31

#include "core/coreapi.h"
32
33
34
35
36
37
38
39
40
41
42
#include "core/datastructures/abstractdata.h"

namespace campvis {
    class ImageData;

    /**
     * Abstract base class for image representations.
     * A single ImageData instance can have multiple representations: They all represent
     * the semantically same image but have their data at different locations (e.g. disk,
     * RAM, OpenGL texture, ...)
     */
43
    class CAMPVIS_CORE_API AbstractImageRepresentation {
44
45
46
47
48
    public:
        /**
         * Creates a new abstract representation for the image \a parent.
         * \param   parent  Image this representation represents, must not be 0.
         */
49
        AbstractImageRepresentation(ImageData* parent);
50
51
52
53
54
55
56

        /**
         * Virtual Destructor.
         */
        virtual ~AbstractImageRepresentation();

        /**
57
         * Returns the newParent ImageData this representation is representing.
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
         * \return _parent
         */
        const ImageData* getParent() const;

        /**
         * Dimensionality of this image.
         * \return _dimensionality
         */
        size_t getDimensionality() const;

        /**
         * Size of this image (number of elements per dimension).
         * \return _size
         */
        const tgt::svec3& getSize() const;

        /**
         * Returns the number of elements (= tgt::hmul(getSize())).
         * \return  _numElements
         */
        size_t getNumElements() const;

        /**
         * Prototype - clone method, some people call this virtual constructor...
82
         * \param   newParent   Parent image of the cloned object.
83
84
         * \return  A copy of this object.
         */
85
        virtual AbstractImageRepresentation* clone(ImageData* newParent) const = 0;
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
        
        /**
         * Returns the local memory footprint of the data in bytes.
         * \return  Number of bytes occupied in local memory by the data.
         */
        virtual size_t getLocalMemoryFootprint() const = 0;

        /**
         * Returns the video memory footprint of the data in bytes.
         * \return  Number of bytes occupied in video memory by the data.
         */
        virtual size_t getVideoMemoryFootprint() const = 0;

        /**
         * Returns the subimage representation of this representation given by \a llf and \a urb.
         * TODO: Check whether it is necessary to adjust image mapping!
         *
103
104
105
         * \param   newParent   Parent image of the newly created subimage
         * \param   llf         Lower-Left-Front coordinates of subimage
         * \param   urb         Upper-Right-Back coordinates of subimage
106
107
         * \return  An image representation containing the subimage of this with the given coordinates.
         */
108
        virtual AbstractImageRepresentation* getSubImage(ImageData* newParent, const tgt::svec3& llf, const tgt::svec3& urb) const = 0;
109
110

    protected:
111
        /**
112
         * Adds this image representations to the newParent image data.
113
114
115
         */
        void addToParent() const;

116
117
118
        const ImageData* _parent;       ///< Image this representation represents, must not be 0.

    private:
119
120
121
122
        /// Not copy-constructable
        AbstractImageRepresentation(const AbstractImageRepresentation& rhs);
        /// Not assignable
        AbstractImageRepresentation& operator=(const AbstractImageRepresentation& rhs);
123
124
125
126
127
128

        static const std::string loggerCat_;
    };
}

#endif // ABSTRACTIMAGEREPRESENTATION_H__