volumeexplorer.h 5.21 KB
Newer Older
schultezub's avatar
schultezub committed
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,
schultezub's avatar
schultezub committed
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
// 
schultezub's avatar
schultezub committed
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
schultezub's avatar
schultezub committed
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.
schultezub's avatar
schultezub committed
22
23
24
25
26
27
// 
// ================================================================================================

#ifndef VOLUMEEXPLORER_H__
#define VOLUMEEXPLORER_H__

28
29
30
31
32
#include "tgt/event/eventlistener.h"

#include "core/eventhandlers/mwheeltonumericpropertyeventlistener.h"
#include "core/eventhandlers/trackballnavigationeventlistener.h"
#include "core/eventhandlers/transfuncwindowingeventlistener.h"
33

schultezub's avatar
schultezub committed
34
35
36
#include "core/pipeline/visualizationprocessor.h"
#include "core/properties/datanameproperty.h"
#include "core/properties/numericproperty.h"
37
#include "core/properties/metaproperty.h"
schultezub's avatar
schultezub committed
38
39
40
41
42
43
44
45

#include "modules/vis/processors/volumerenderer.h"
#include "modules/vis/processors/sliceextractor.h"

namespace tgt {
    class Shader;
}

schultezub's avatar
schultezub committed
46
47
class FaceGeometry;

schultezub's avatar
schultezub committed
48
49
50
51
namespace campvis {
    /**
     * Combines a volume raycaster and 3 slice views for explorative volume visualization.
     */
52
    class VolumeExplorer : public VisualizationProcessor, public tgt::EventListener {
schultezub's avatar
schultezub committed
53
54
55
56
    public:
        /**
         * Constructs a new VolumeExplorer Processor
         **/
57
        VolumeExplorer(IVec2Property* viewportSizeProp);
schultezub's avatar
schultezub committed
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73

        /**
         * Destructor
         **/
        virtual ~VolumeExplorer();

        /// \see AbstractProcessor::init
        virtual void init();

        /// \see AbstractProcessor::deinit
        virtual void deinit();

        /// \see AbstractProcessor::getName()
        virtual const std::string getName() const { return "VolumeExplorer"; };
        /// \see AbstractProcessor::getDescription()
        virtual const std::string getDescription() const { return "Combines a volume raycaster and 3 slice views for explorative volume visualization."; };
74
75
76
        /// \see AbstractProcessor::getAuthor()
        virtual const std::string getAuthor() const { return "Christian Schulte zu Berge <christian.szb@in.tum.de>"; };
        /// \see AbstractProcessor::getProcessorState()
77
        virtual ProcessorState getProcessorState() const { return AbstractProcessor::EXPERIMENTAL; };
78
        
79
80
        /// \see tgt::EventListener::onEvent()
        virtual void onEvent(tgt::Event* e);
81

schultezub's avatar
schultezub committed
82
83
84
        virtual void process(DataContainer& data);

        DataNameProperty p_inputVolume;              ///< image ID for first input image
85
        DataNameProperty p_outputImage;              ///< image ID for output image
schultezub's avatar
schultezub committed
86

87
88
        MetaProperty p_seProperties;        ///< MetaProperty for SliceExtractor properties
        MetaProperty p_vrProperties;        ///< MetaProperty for Raycaster properties
schultezub's avatar
schultezub committed
89
90
91
92
93
94
95


    protected:
        /// Additional invalidation levels for this processor.
        /// Not the most beautiful design though.
        enum ProcessorInvalidationLevel {
            VR_INVALID = 1 << 4,
schultezub's avatar
schultezub committed
96
            SLICES_INVALID = 1 << 5,
schultezub's avatar
schultezub committed
97
98
99
100
101
102
103
104
105
106
107
108
109
110
        };

        /**
         * Slot getting called when one of the observed processors got invalidated.
         * Invalidates this meta-processor with the corresponding level.
         * \param   processor   The processor that emitted the signal
         */
        virtual void onProcessorInvalidated(AbstractProcessor* processor);

        /**
         * \see VisualizationProcessor::onPropertyChanged
         */
        virtual void onPropertyChanged(const AbstractProperty* prop);

schultezub's avatar
schultezub committed
111
112
        void composeFinalRendering(DataContainer& data);

113
114
        /// \see    AbstractProcessor::updateProperties
        void updateProperties(DataContainer& dc);
schultezub's avatar
schultezub committed
115
116
117
118

        tgt::Shader* _shader;                           ///< Shader for slice rendering
        FaceGeometry* _quad;

schultezub's avatar
schultezub committed
119
120
121
        VolumeRenderer _raycaster;
        SliceExtractor _sliceExtractor;

schultezub's avatar
schultezub committed
122
123
124
        IVec2Property p_sliceRenderSize;
        IVec2Property p_volumeRenderSize;

125

126
127
128
129
130
        MWheelToNumericPropertyEventListener _xSliceHandler;
        MWheelToNumericPropertyEventListener _ySliceHandler;
        MWheelToNumericPropertyEventListener _zSliceHandler;
        TransFuncWindowingEventListener _windowingHandler;
        TrackballNavigationEventListener* _trackballEH;
131
        bool _mousePressed;
132

schultezub's avatar
schultezub committed
133
134
135
136
137
138
        static const std::string loggerCat_;
    };

}

#endif // VOLUMEEXPLORER_H__