abstractimagerepresentation.h 4.17 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-2014, all rights reserved,
6
7
//      Christian Schulte zu Berge <christian.szb@in.tum.de>
//      Chair for Computer Aided Medical Procedures
8
9
//      Technische Universitaet Muenchen
//      Boltzmannstr. 3, 85748 Garching b. Muenchen, 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
// 
// ================================================================================================

#ifndef ABSTRACTIMAGEREPRESENTATION_H__
#define ABSTRACTIMAGEREPRESENTATION_H__

28
29
#include "cgt/bounds.h"
#include "cgt/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
         * \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
         */
72
        const cgt::svec3& getSize() const;
73
74

        /**
75
         * Returns the number of elements (= cgt::hmul(getSize())).
76
77
78
79
80
81
         * \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
        
        /**
         * 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;

    protected:
100
        /**
101
         * Adds this image representations to the newParent image data.
102
103
104
         */
        void addToParent() const;

105
106
107
        const ImageData* _parent;       ///< Image this representation represents, must not be 0.

    private:
108
        /// Not copy-constructable
109
        explicit AbstractImageRepresentation(const AbstractImageRepresentation& rhs);
110
111
        /// Not assignable
        AbstractImageRepresentation& operator=(const AbstractImageRepresentation& rhs);
112
113
114
115
116
117

        static const std::string loggerCat_;
    };
}

#endif // ABSTRACTIMAGEREPRESENTATION_H__