WDataSetVector.h 4.8 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 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
    /**
     * Creates a copy (clone) of this instance but allows to change the valueset. Unlike copy construction, this is a very useful function if you
     * want to keep the dynamic type of your dataset even if you just have a WDataSetSingle.
     *
     * \param newValueSet the new valueset.
     *
     * \return the clone
     */
    virtual WDataSetSingle::SPtr clone( boost::shared_ptr< WValueSetBase > newValueSet ) const;

    /**
     * Creates a copy (clone) of this instance but allows to change the grid. Unlike copy construction, this is a very useful function if you
     * want to keep the dynamic type of your dataset even if you just have a WDataSetSingle.
     *
     * \param newGrid the new grid.
     *
     * \return the clone
     */
    virtual WDataSetSingle::SPtr clone( boost::shared_ptr< WGrid > newGrid ) const;

    /**
     * Creates a copy (clone) of this instance. Unlike copy construction, this is a very useful function if you
     * want to keep the dynamic type of your dataset even if you just have a WDataSetSingle.
     *
     * \return the clone
     */
    virtual WDataSetSingle::SPtr clone() const;

86 87 88 89 90 91 92
    /**
     * Returns a prototype instantiated with the true type of the deriving class.
     *
     * \return the prototype.
     */
    static boost::shared_ptr< WPrototyped > getPrototype();

93 94 95 96 97 98 99 100
    /**
     * 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
101
    wmath::WVector3D interpolate( const wmath::WPosition &pos, bool *success ) const;
102 103 104 105 106 107 108 109 110 111 112

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

113 114 115 116 117 118 119
    /**
     * 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
120 121 122 123 124
    /**
     * 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
125 126
    boost::shared_ptr< WDataSetVector > isVectorDataSet();

127 128 129 130 131 132 133 134 135
    /**
     * Returns a new dataset with the given valueset and grid that is of the same type as this dataset.
     *
     * \param vs The valueset.
     * \param grid The grid.
     * \return The new dataset.
     */
    virtual boost::shared_ptr< WDataSet > clone( boost::shared_ptr< WValueSetBase > vs, boost::shared_ptr< WGrid > grid ) const;

136
protected:
137 138 139 140 141 142

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

143 144 145
private:
};

Mathias Goldau's avatar
Mathias Goldau committed
146 147 148 149 150
inline boost::shared_ptr< WDataSetVector > WDataSetVector::isVectorDataSet()
{
    return boost::shared_static_cast< WDataSetVector >( shared_from_this() );
}

151
#endif  // WDATASETVECTOR_H