WDataSetVector.h 3.27 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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
//---------------------------------------------------------------------------
//
// Project: OpenWalnut ( http://www.openwalnut.org )
//
// Copyright 2009 OpenWalnut Community, BSV@Uni-Leipzig and CNCF@MPI-CBS
// For more information see http://www.openwalnut.org/copying
//
// This file is part of OpenWalnut.
//
// OpenWalnut is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// OpenWalnut is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with OpenWalnut. If not, see <http://www.gnu.org/licenses/>.
//
//---------------------------------------------------------------------------

#ifndef WDATASETVECTOR_H
#define WDATASETVECTOR_H

#include "WDataSetSingle.h"

/**
 * This data set type contains vectors as values.
 * \ingroup dataHandler
 */
class WDataSetVector : public WDataSetSingle
{
public:

    /**
     * Constructs an instance out of an appropriate value set and a grid.
     *
     * \param newValueSet the vector value set to use
     * \param newGrid the grid which maps world space to the value set
     */
    WDataSetVector( boost::shared_ptr< WValueSetBase > newValueSet,
                    boost::shared_ptr< WGrid > newGrid );

47 48 49 50 51
    /**
     * Construct an empty and unusable instance. This is needed for the prototype mechanism.
     */
    WDataSetVector();

52 53 54 55 56
    /**
     * Destroys this DataSet instance
     */
    virtual ~WDataSetVector();

57 58 59 60 61 62 63
    /**
     * Returns a prototype instantiated with the true type of the deriving class.
     *
     * \return the prototype.
     */
    static boost::shared_ptr< WPrototyped > getPrototype();

64 65 66 67 68 69 70 71
    /**
     * Interpolates the vector field at the given position
     *
     * \param pos position to interpolate
     * \param success if the position was inside the grid
     *
     * \return Vector beeing the interpolate.
     */
Mathias Goldau's avatar
Mathias Goldau committed
72
    wmath::WVector3D interpolate( const wmath::WPosition &pos, bool *success ) const;
73 74 75 76 77 78 79 80 81 82 83

    /**
     * Get the vector on the given position in value set.
     * \note currently only implmented for WVector3D
     *
     * \param index the position where to get the vector from
     *
     * \return the vector
     */
    wmath::WVector3D getVectorAt( size_t index ) const;

84 85 86 87 88 89 90
    /**
     * Determines whether this dataset can be used as a texture.
     *
     * \return true if usable as texture.
     */
    virtual bool isTexture() const;

Mathias Goldau's avatar
[DOC]  
Mathias Goldau committed
91 92 93 94 95
    /**
     * Overwrites the isVectorDataSet check.
     *
     * \return Non empty reference to the dataset if it is a vector dataset, empty if not.
     */
Mathias Goldau's avatar
Mathias Goldau committed
96 97
    boost::shared_ptr< WDataSetVector > isVectorDataSet();

98
protected:
99 100 101 102 103 104

    /**
     * The prototype as singleton.
     */
    static boost::shared_ptr< WPrototyped > m_prototype;

105 106 107
private:
};

Mathias Goldau's avatar
Mathias Goldau committed
108 109 110 111 112
inline boost::shared_ptr< WDataSetVector > WDataSetVector::isVectorDataSet()
{
    return boost::shared_static_cast< WDataSetVector >( shared_from_this() );
}

113
#endif  // WDATASETVECTOR_H