WDataSetVector.h 3.34 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
//---------------------------------------------------------------------------
//
// 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"
29
#include "WExportDataHandler.h"
30 31 32 33 34

/**
 * This data set type contains vectors as values.
 * \ingroup dataHandler
 */
35
class OWDATAHANDLER_EXPORT WDataSetVector : public WDataSetSingle // NOLINT
36 37 38 39 40 41 42 43 44 45 46 47
{
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 );

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

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

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

65 66 67 68 69 70 71 72
    /**
     * 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
73
    wmath::WVector3D interpolate( const wmath::WPosition &pos, bool *success ) const;
74 75 76 77 78 79 80 81 82 83 84

    /**
     * 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;

85 86 87 88 89 90 91
    /**
     * 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
92 93 94 95 96
    /**
     * 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
97 98
    boost::shared_ptr< WDataSetVector > isVectorDataSet();

99
protected:
100 101 102 103 104 105

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

106 107 108
private:
};

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

114
#endif  // WDATASETVECTOR_H