scanlinedistributioncomputation.h 3.86 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 10
//      Technische Universitaet Muenchen
//      Boltzmannstr. 3, 85748 Garching b. Muenchen, Germany
// 
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 30 31 32 33 34 35 36 37 38 39
// 
// ================================================================================================

#ifndef SCANLINEDISTRIBUTIONCOMPUTATION_H__
#define SCANLINEDISTRIBUTIONCOMPUTATION_H__

#include <string>

#include "core/pipeline/abstractprocessordecorator.h"
#include "core/pipeline/visualizationprocessor.h"

#include "core/properties/datanameproperty.h"
#include "core/properties/floatingpointproperty.h"
#include "core/properties/genericproperty.h"
#include "core/properties/numericproperty.h"
#include "core/properties/optionproperty.h"
#include "core/properties/transferfunctionproperty.h"

40 41
#include "modules/modulesapi.h"

42
namespace cgt {
43 44 45 46 47 48 49 50 51
    class Shader;
}

namespace campvis {
    class ImageData;

    /**
     * Computes the intensity distribution profile for each voxel along the scanline.
     */
52
    class CAMPVIS_MODULES_API ScanlineDistributionComputation : public VisualizationProcessor {
53 54 55 56
    public:
        /**
         * Constructs a new ScanlineDistributionComputation Processor
         **/
57
        explicit ScanlineDistributionComputation(IVec2Property* viewportSizeProp);
58 59 60 61 62 63 64 65 66 67 68

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

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

69 70
        /// To be used in ProcessorFactory static methods
        static const std::string getId() { return "ScanlineDistributionComputation"; };
71
        /// \see AbstractProcessor::getName()
72
        virtual const std::string getName() const { return getId(); };
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
        /// \see AbstractProcessor::getDescription()
        virtual const std::string getDescription() const { return "Computes the intensity distribution profile for each voxel along the scanline."; };
        /// \see AbstractProcessor::getAuthor()
        virtual const std::string getAuthor() const { return "Christian Schulte zu Berge <christian.szb@in.tum.de>"; };
        /// \see AbstractProcessor::getProcessorState()
        virtual ProcessorState getProcessorState() const { return AbstractProcessor::EXPERIMENTAL; };

        DataNameProperty p_inputImage;
        DataNameProperty p_outputImage;

        Vec3Property p_scanningDirection;
        FloatProperty p_threshold;
        FloatProperty p_stepSize;

    protected:
        /// \see AbstractProcessor::process()
        virtual void updateResult(DataContainer& dataContainer);
        /// adapts the range of the p_sliceNumber property to the image
        virtual void updateProperties(DataContainer dataContainer);

        std::string generateHeader() const;

95
        cgt::Shader* _shader;                           ///< Shader for slice rendering
96 97 98 99 100 101 102

        static const std::string loggerCat_;
    };

}

#endif // SCANLINEDISTRIBUTIONCOMPUTATION_H__