WMWriteMesh.h 4.45 KB
Newer Older
1 2 3 4
//---------------------------------------------------------------------------
//
// Project: OpenWalnut ( http://www.openwalnut.org )
//
5
// Copyright 2009 OpenWalnut Community, BSV@Uni-Leipzig and CNCF@MPI-CBS
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
// 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 WMWRITEMESH_H
#define WMWRITEMESH_H

#include <string>
29
#include <vector>
30 31 32

#include <osg/Geode>

33 34 35 36
#include "core/graphicsEngine/WTriangleMesh.h"
#include "core/kernel/WModule.h"
#include "core/kernel/WModuleInputData.h"
#include "core/kernel/WModuleOutputData.h"
37 38

/**
39
 * This module writes the triangle mesh given at its input connector
40
 * as a VTK ASCII file or .json file or STL file
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 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
 *
 * \ingroup modules
 */
class WMWriteMesh: public WModule
{
/**
 * Only UnitTests may be friends.
 */
friend class WMWriteMeshTest;

public:
    /**
     *
     */
    WMWriteMesh();

    /**
     *
     */
    virtual ~WMWriteMesh();

    /**
     * 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.
84
     * \return The icon.
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
     */
    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:
    /**
     * Store the mesh in legacy vtk file format.
108 109
     *
     * \return true if successful.
110
     */
111 112
    bool saveVTKASCII() const;

113 114 115 116 117 118 119
    /**
     * Write STL format.
     *
     * \return  true if successful.
     */
    bool saveSTL();

120
    /**
121 122 123
     * Store the mesh in a json (javascript object notation) file.
     *
     * \return true if successful.
124
     */
125 126 127 128 129 130 131 132 133 134
    bool saveJson();

    /**
     * Splits the mesh in several mesh files (to solve maximum mesh limits in BrainGlL).
     *
     * \param triMesh mesh object to be divided
     * \param  targetSize maximum resulting mesh size
     * \return vector of resulting meshes
     */
    std::vector< boost::shared_ptr< WTriangleMesh > >splitMesh( boost::shared_ptr< WTriangleMesh > triMesh, size_t targetSize );
135

136 137
    boost::shared_ptr< WModuleInputData< WTriangleMesh > > m_meshInput; //!< Input connector for a mesh
    boost::shared_ptr< WTriangleMesh > m_triMesh; //!< A pointer to the currently processed tri mesh
138
    boost::shared_ptr< WCondition > m_propCondition;  //!< A condition used to notify about changes in several properties.
139 140 141
    WPropGroup    m_savePropGroup; //!< Property group containing properties needed for saving the mesh.
    WPropTrigger  m_saveTriggerProp; //!< This property triggers the actual writing,
    WPropFilename m_meshFile; //!< The mesh will be written to this file.
142 143 144 145 146 147 148 149 150 151 152

    /**
     * A list of file type selection types
     */
    boost::shared_ptr< WItemSelection > m_fileTypeSelectionsList;

    /**
     * Selection property for file types
     */
    WPropSelection m_fileTypeSelection;

153 154 155
    /**
     * If true, colors get exported too.
     */
156
    WPropBool m_writeColors;
157 158 159
};

#endif  // WMWRITEMESH_H