/*===========================================================================*\
* *
* OpenFlipper *
* Copyright (C) 2001-2014 by Computer Graphics Group, RWTH Aachen *
* www.openflipper.org *
* *
*--------------------------------------------------------------------------- *
* This file is part of OpenFlipper. *
* *
* OpenFlipper 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 with the *
* following exceptions: *
* *
* If other files instantiate templates or use macros *
* or inline functions from this file, or you compile this file and *
* link it with other files to produce an executable, this file does *
* not by itself cause the resulting executable to be covered by the *
* GNU Lesser General Public License. This exception does not however *
* invalidate any other reasons why the executable file might be *
* covered by the GNU Lesser General Public License. *
* *
* OpenFlipper 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 LesserGeneral Public *
* License along with OpenFlipper. If not, *
* see . *
* *
\*===========================================================================*/
/*===========================================================================*\
* *
* $Revision$ *
* $LastChangedBy$ *
* $Date$ *
* *
\*===========================================================================*/
#ifndef COMPONENTSPLUGIN_HH
#define COMPONENTSPLUGIN_HH
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
class ComponentsPlugin : public QObject, BaseInterface, MouseInterface, PickingInterface, LoggingInterface, BackupInterface, LoadSaveInterface, ToolbarInterface,ScriptInterface
{
Q_OBJECT
Q_INTERFACES( BaseInterface )
Q_INTERFACES( MouseInterface )
Q_INTERFACES( PickingInterface )
Q_INTERFACES( LoggingInterface )
Q_INTERFACES( BackupInterface )
Q_INTERFACES( LoadSaveInterface )
Q_INTERFACES( ToolbarInterface )
Q_INTERFACES( ScriptInterface )
#if QT_VERSION >= 0x050000
Q_PLUGIN_METADATA(IID "org.OpenFlipper.Plugins.Plugin-Components")
#endif
signals:
// BaseInterface
void updateView();
void updatedObject(int _identifier, const UpdateType& _type);
void setSlotDescription(QString _slotName, QString _slotDescription,
QStringList _parameters, QStringList _descriptions);
// LoadSaveInterface
void addEmptyObject( DataType _type, int& _id);
void copyObject( int _oldId, int& _newId);
// ToolBarInterface
void addToolbar(QToolBar* _toolbar);
void getToolBar( QString _name, QToolBar*& _toolbar);
// PickingInterface
void addPickMode( const std::string& _mode);
//ScriptInterface
void scriptInfo( QString _functionName );
// LoggingInterface
void log( Logtype _type, QString _message );
void log( QString _message );
// BackupInterface
void createBackup( int _objectid, QString _name, UpdateType _type);
// LoadSaveInterface
void deleteObject( int _id );
private slots:
// BaseInterface
void initializePlugin();
void noguiSupported(){};
void pluginsInitialized();
// PickingInterface
void slotPickModeChanged( const std::string& _mode);
// MouseInterface:
void slotMouseEvent( QMouseEvent* _event );
public:
ComponentsPlugin();
~ComponentsPlugin() { }
void exit() {}
QString name() { return (QString("Components")); };
QString description( ) { return (QString("Handle mesh components")); };
//===========================================================================
/** @name GUI Related
* @{ */
//===========================================================================
private slots:
/// Split into Components Button was hit
void slotSplitComponentsButton();
void slotBiggestComponentButton();
/// Split Components of picked object
void splitComponents(QMouseEvent* _event);
void biggestComponent(QMouseEvent* _event);
private :
//toolbar
QAction* splitAction_;
QAction* biggestAction_;
/** @} */
//===========================================================================
/** @name Template Functions
* @{ */
//===========================================================================
/** \brief Split mesh into components
*
* This function will split an arbitrary component out of a mesh.
* It takes a copy of the original mesh.
*
* @param _mesh the original mesh
* @param _copy original mesh copy with identical topology and geometry
* the copy will contain one component of the original mesh.
*/
template< class MeshT >
void splitComponent( MeshT* _mesh, MeshT* _copy);
/** \brief Select the biggest component of the mesh
*
* This function will select the component of the mesh which has the most faces
*
* @param _mesh the mesh to work on
*/
template< class MeshT >
void selectBiggestComponent( MeshT* _mesh);
/** \brief Deletes all faces of a mesh that are not selected
*
* Use selectBiggestcomponent first to select the biggest component.
* Than use this function to remove all other parts of the mesh.
*
* @param _mesh the mesh to work on
*/
template< class MeshT >
void deleteUnselectedFaces( MeshT* _mesh);
/** @} */
//===========================================================================
/** @name Scripting Functions
* @{ */
//===========================================================================
public slots:
/** \brief Splits the object into components
*
* i.e. creates ( number of components) new meshes and deletes the old mesh
*
* @param _objectId id of the target object
*/
IdList splitComponents( int _objectId );
/** \brief Gets the biggest connected component of a mesh
*
* i.e. deletes all components except the one with the maximal number of faces
*
* @param _objId id of the target object
*/
void biggestComponent(int _objId);
/** @} */
public slots:
QString version() { return QString("1.0"); };
private:
/// set scripting slot descriptions
void setDescriptions();
};
#if defined(INCLUDE_TEMPLATES) && !defined(COMPONENTSPLUGIN_CC)
#define COMPONENTSPLUGIN_TEMPLATES
#include "ComponentsPluginT.cc"
#endif
//=============================================================================
#endif //CUTPLUGIN_HH
//=============================================================================