//---------------------------------------------------------------------------
//
// Project: OpenWalnut ( http://www.openwalnut.org )
//
// Copyright 2009 OpenWalnut Community, BSV-Leipzig and CNCF-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 .
//
//---------------------------------------------------------------------------
#ifndef WMFIBERTRANSFORM_H
#define WMFIBERTRANSFORM_H
#include
#include "../../kernel/WModule.h"
#include "../../kernel/WModuleInputData.h"
#include "../../kernel/WModuleOutputData.h"
/**
* Transforms a fiber dataset
* \ingroup modules
*/
class WMFiberTransform : public WModule
{
public:
/**
* Constructor
*/
WMFiberTransform();
/**
* Destructor
*/
virtual ~WMFiberTransform();
/**
* Gives back the name of this module.
* \return the module's name.
*/
virtual const std::string getName() const;
/**
* Gives back a description of this module.
* \return description to module.
*/
virtual const std::string getDescription() const;
/**
* Due to the prototype design pattern used to build modules, this method returns a new instance of this method. NOTE: it
* should never be initialized or modified in some other way. A simple new instance is required.
*
* \return the prototype used to create every module in OpenWalnut.
*/
virtual boost::shared_ptr< WModule > factory() const;
/**
* Get the icon for this module in XPM format.
*/
virtual const char** getXPMIcon() const;
protected:
/**
* Entry point after loading the module. Runs in separate thread.
*/
virtual void moduleMain();
/**
* Initialize the connectors this module is using.
*/
virtual void connectors();
/**
* Initialize the properties for this module.
*/
virtual void properties();
private:
boost::shared_ptr< WModuleInputData< WDataSetFibers > > m_fiberInput; //!< Input connector for a fiber dataset.
boost::shared_ptr< WDataSetFibers > m_rawDataset; //!< Pointer to the fiber data set in WDataSetFibers format
boost::shared_ptr< WModuleOutputData< WDataSetFibers > > m_output; //!< Output connector for the culled fibers
boost::shared_ptr< WCondition > m_recompute; //!< A condition which indicates complete recomputation
WPropBool m_save; //!< If true, transformed fibers are saved to a file
WPropFilename m_savePath; //!< Path where transformed fibers should be stored
WPropTrigger m_run; //!< Indicates if the algorithm should start
WPropPosition m_translationProp; //!< Translation part of the transformation.
WPropPosition m_matrix0Prop; //!< Row 0 of matrix part of the transformation.
WPropPosition m_matrix1Prop; //!< Row 1 of matrix part of the transformation.
WPropPosition m_matrix2Prop; //!< Row 2 of matrix part of the transformation.
WPropPosition m_matrix3Prop; //!< Row 3 of matrix part of the transformation.
/**
* ReTransforms the scene.
*/
void update();
/**
* Generates the file name for saving the transformed fibers.
*
* \param dataFileName The file name from which the data is loaded so only the extension will change
* \return Path in which to store the transformed fibers.
*/
boost::filesystem::path saveFileName( std::string dataFileName ) const;
};
#endif // WMFIBERTRANSFORM_H