MergePlugin.hh 3.23 KB
Newer Older
Martin Schultz's avatar
Martin Schultz committed
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 29 30
#ifndef MERGEPLUGIN_HH
#define MERGEPLUGIN_HH

#include <QObject>

#include <OpenFlipper/BasePlugin/BaseInterface.hh>
#include <OpenFlipper/BasePlugin/ToolboxInterface.hh>
#include <OpenFlipper/BasePlugin/LoadSaveInterface.hh>
#include <OpenFlipper/BasePlugin/LoggingInterface.hh>
#include <OpenFlipper/BasePlugin/ScriptInterface.hh>

#include "MergeToolbox.hh"

class MergePlugin : public QObject, BaseInterface, ToolboxInterface, LoggingInterface, LoadSaveInterface, ScriptInterface
{
Q_OBJECT
Q_INTERFACES(BaseInterface)
Q_INTERFACES(ToolboxInterface)
Q_INTERFACES(LoggingInterface)
Q_INTERFACES(LoadSaveInterface)
Q_INTERFACES(ScriptInterface)
#if QT_VERSION >= 0x050000
  Q_PLUGIN_METADATA(IID "org.OpenFlipper.Plugins.Plugin-Merge")
#endif



signals:
  //BaseInterface
  void updateView();
31
  void updatedObject(int _identifier, const UpdateType& _type);
Martin Schultz's avatar
Martin Schultz committed
32 33 34 35 36 37 38 39 40 41 42

  //LoggingInterface:
  void log( Logtype _type, QString _message );
  void log( QString _message );

  // LoadSaveInterface
  void addEmptyObject( DataType _type, int &_objectId );
  void deleteObject( int _id );
  
  // ToolboxInterface
  void addToolbox( QString _name  , QWidget* _widget );
43
  void addToolbox( QString _name  , QWidget* _widget , QIcon* _icon );
Martin Schultz's avatar
Martin Schultz committed
44 45 46 47 48 49 50 51 52

  // ScriptInterface
  void setSlotDescription(QString     _slotName,   QString     _slotDescription,
                          QStringList _parameters, QStringList _descriptions);

  void cleanup( DataType _type, bool _deleteSeparateObjects);

public :

53
  MergePlugin();
Martin Schultz's avatar
Martin Schultz committed
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
  ~MergePlugin() {};

  QString name() { return (QString("Merge")); };
  QString description( ) { return (QString("Merge target objects")); };

private :
  MergeToolBox* tool_;
  std::vector<int> convertedIds;
  std::vector< BaseObjectData* > objects;
  int polyMergeID, triMergeID;

  DataType checkType(const std::vector< BaseObjectData* > &);

public slots:
  // BaseInterface
  void initializePlugin();
  void pluginsInitialized();
  
  void mergeObjects();
73 74 75 76 77 78 79 80

  /**
   * @brief mergeObjects merges multiple OpenFlipper Objects of Type TriMesh or PolyMesh into one combined Mesh.
   * @param _objects a vector of OpenFlipper Objects that shall be merged.
   * @param _name The name of the merged object (default is "merged object")
   * @param _deleteSeparateObjects flag to determine if the separate objects shall be deleted after merging (default is true)
   * @return
   */
81
  int mergeObjects(const std::vector< BaseObjectData* > & _objects, QString _name = "merged object", bool _deleteSeparateObjects = true);
82 83 84 85 86 87

  /**
   * @brief slotCleanup is called when the cleanup event is processed at the end of mergeObjects.
   * @param _type the datatype that was used for merging
   * @param _deleteSeparateObjects flag to determine if separated objects shall be deleted.
   */
Martin Schultz's avatar
Martin Schultz committed
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
  void slotCleanup(DataType _type, bool _deleteSeparateObjects);

//template functions
private:

  template< class MeshT >
  void mergeMeshes( const std::vector< MeshT* >& _meshes );

  template< class MeshT >
  void mergeMeshes( const std::vector< MeshT* >& _meshes, typename MeshT::VertexHandle& _vhB);

  public slots:
    QString version() { return QString("1.1"); };

};

104 105 106 107
//#if defined(INCLUDE_TEMPLATES) && !defined(MERGEPLUGIN_C)
//#define MERGEPLUGIN_TEMPLATES
//#include "MergePluginT.cc"
//#endif
Martin Schultz's avatar
Martin Schultz committed
108 109

#endif //MERGEPLUGIN_HH