FileOM.hh 6.99 KB
Newer Older
Jan Möbius's avatar
 
Jan Möbius committed
1
/*===========================================================================*\
Jan Möbius's avatar
Jan Möbius committed
2
3
*                                                                            *
*                              OpenFlipper                                   *
Martin Schultz's avatar
Martin Schultz committed
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
31
32
33
34
35
36
37
38
 *           Copyright (c) 2001-2015, RWTH-Aachen University                 *
 *           Department of Computer Graphics and Multimedia                  *
 *                          All rights reserved.                             *
 *                            www.openflipper.org                            *
 *                                                                           *
 *---------------------------------------------------------------------------*
 * This file is part of OpenFlipper.                                         *
 *---------------------------------------------------------------------------*
 *                                                                           *
 * Redistribution and use in source and binary forms, with or without        *
 * modification, are permitted provided that the following conditions        *
 * are met:                                                                  *
 *                                                                           *
 * 1. Redistributions of source code must retain the above copyright notice, *
 *    this list of conditions and the following disclaimer.                  *
 *                                                                           *
 * 2. Redistributions in binary form must reproduce the above copyright      *
 *    notice, this list of conditions and the following disclaimer in the    *
 *    documentation and/or other materials provided with the distribution.   *
 *                                                                           *
 * 3. Neither the name of the copyright holder nor the names of its          *
 *    contributors may be used to endorse or promote products derived from   *
 *    this software without specific prior written permission.               *
 *                                                                           *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS       *
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED *
 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A           *
 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER *
 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  *
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,       *
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR        *
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF    *
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING      *
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS        *
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.              *
Jan Möbius's avatar
Jan Möbius committed
39
*                                                                            *
Jan Möbius's avatar
 
Jan Möbius committed
40
41
42
\*===========================================================================*/

/*===========================================================================*\
Jan Möbius's avatar
Jan Möbius committed
43
44
45
46
47
*                                                                            *
*   $Revision$                                                       *
*   $LastChangedBy$                                                *
*   $Date$                     *
*                                                                            *
Jan Möbius's avatar
 
Jan Möbius committed
48
49
50
51
52
53
\*===========================================================================*/

#ifndef FILEOMPLUGIN_HH
#define FILEOMPLUGIN_HH

#include <QObject>
54
55
class QCheckBox;
class QComboBox;
Jan Möbius's avatar
 
Jan Möbius committed
56
57
58
59
60
61
62
63
64
65
66
67
68
69

#include <OpenFlipper/common/Types.hh>
#include <OpenFlipper/BasePlugin/BaseInterface.hh>
#include <OpenFlipper/BasePlugin/FileInterface.hh>
#include <OpenFlipper/BasePlugin/LoadSaveInterface.hh>
#include <OpenFlipper/BasePlugin/LoggingInterface.hh>
#include <OpenFlipper/BasePlugin/ScriptInterface.hh>
#include <OpenFlipper/BasePlugin/TypeInterface.hh>
#include <OpenFlipper/BasePlugin/RPCInterface.hh>

#include <ObjectTypes/PolyMesh/PolyMesh.hh>
#include <ObjectTypes/TriangleMesh/TriangleMesh.hh>

class FileOMPlugin : public QObject, BaseInterface, FileInterface, LoadSaveInterface,
70
    LoggingInterface, ScriptInterface
Jan Möbius's avatar
 
Jan Möbius committed
71
72
73
74
75
76
77
78
{
   Q_OBJECT
   Q_INTERFACES(FileInterface)
   Q_INTERFACES(LoadSaveInterface)
   Q_INTERFACES(LoggingInterface)
   Q_INTERFACES(BaseInterface)
   Q_INTERFACES(ScriptInterface)

Matthias Möller's avatar
Matthias Möller committed
79
80
81
82
#if QT_VERSION >= 0x050000
  Q_PLUGIN_METADATA(IID "org.OpenFlipper.Plugins.Plugin-FileOM")
#endif

Jan Möbius's avatar
 
Jan Möbius committed
83
84
85
86
87
88
89
90
  signals:
    void openedFile( int _id );
    void addEmptyObject( DataType _type, int& _id);
    void load(QString _filename, DataType _type, int& _id);
    void save(int _id , QString _filename );
    void log(Logtype _type, QString _message);
    void log(QString _message);
    void updateView();
91
    void updatedObject(int _identifier, const UpdateType& _type);
Jan Möbius's avatar
 
Jan Möbius committed
92
93
94
95
96
97
98
99
100

    void deleteObject( int _id );

  private slots:

    void fileOpened( int /*_id*/ ){};

    void noguiSupported( ) {} ;

Martin Schultz's avatar
Martin Schultz committed
101
102
103
104
    void initializePlugin();

    /// Displays a dialog to ask how to load the mesh (triangle, polymesh , autodetect)
    void handleTrimeshDialog();
Jan Möbius's avatar
Jan Möbius committed
105
    
Jan Möbius's avatar
 
Jan Möbius committed
106
107
    /// Slot called when user wants to save the given Load options as default
    void slotLoadDefault();
Jan Möbius's avatar
Jan Möbius committed
108
    
Jan Möbius's avatar
 
Jan Möbius committed
109
110
111
112
    /// Slot called when user wants to save the given Save options as default
    void slotSaveDefault();

  public :
Jan Möbius's avatar
Jan Möbius committed
113
    
Jan Möbius's avatar
 
Jan Möbius committed
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
     FileOMPlugin();

     ~FileOMPlugin() {};

     QString name() { return (QString("FileOM")); };
     QString description( ) { return (QString(tr("Load/Save OM-Files"))); };

     DataType supportedType();

     QString getSaveFilters();
     QString getLoadFilters();

     QWidget* saveOptionsWidget(QString /*_currentFilter*/);
     QWidget* loadOptionsWidget(QString /*_currentFilter*/);

  public slots:

    /// Loads Object and converts it to a triangle mesh if possible
    int loadObject(QString _filename);
Jan Möbius's avatar
Jan Möbius committed
133
    
Jan Möbius's avatar
 
Jan Möbius committed
134
135
    /// Always loads mesh as polymesh
    int loadPolyMeshObject(QString _filename);
Jan Möbius's avatar
Jan Möbius committed
136
    
Jan Möbius's avatar
 
Jan Möbius committed
137
138
139
    /// Loads a triangle mesh
    int loadTriMeshObject(QString _filename);

Jan Möbius's avatar
Jan Möbius committed
140
    bool saveObject(int _id, QString _filename);
Jan Möbius's avatar
 
Jan Möbius committed
141
142
143

    QString version() { return QString("1.0"); };

144
145
146
147
148
149
  private :

    /// creates a backup of the original per vertex/face texture coordinates
    template <class MeshT>
    void backupTextureCoordinates(MeshT& _mesh);

Jan Möbius's avatar
 
Jan Möbius committed
150
  private :
Jan Möbius's avatar
Jan Möbius committed
151
    
Jan Möbius's avatar
 
Jan Möbius committed
152
153
154
    //Option Widgets
    QWidget* loadOptions_;
    QWidget* saveOptions_;
Jan Möbius's avatar
Jan Möbius committed
155
    
Jan Möbius's avatar
 
Jan Möbius committed
156
    QCheckBox*   saveBinary_;
Jan Möbius's avatar
Jan Möbius committed
157
    
Jan Möbius's avatar
 
Jan Möbius committed
158
159
160
161
162
163
    QCheckBox*   saveVertexNormal_;
    QCheckBox*   saveVertexTexCoord_;
    QCheckBox*   saveVertexColor_;
    QCheckBox*   saveFaceColor_;
    QCheckBox*   saveFaceNormal_;
    QPushButton* saveDefaultButton_;
Jan Möbius's avatar
Jan Möbius committed
164
    
Jan Möbius's avatar
 
Jan Möbius committed
165
166
167
168
169
170
171
    QComboBox*   triMeshHandling_;
    QCheckBox*   loadVertexNormal_;
    QCheckBox*   loadVertexTexCoord_;
    QCheckBox*   loadVertexColor_;
    QCheckBox*   loadFaceColor_;
    QCheckBox*   loadFaceNormal_;
    QPushButton* loadDefaultButton_;
Martin Schultz's avatar
Martin Schultz committed
172
    int trimeshOptions;
Jan Möbius's avatar
 
Jan Möbius committed
173
174
175
};

#endif //FILEOMPLUGIN_HH