Developer Documentation
Loading...
Searching...
No Matches
FileOBJ.hh
1/*===========================================================================*\
2 * *
3 * OpenFlipper *
4 * Copyright (c) 2001-2015, RWTH-Aachen University *
5 * Department of Computer Graphics and Multimedia *
6 * All rights reserved. *
7 * www.openflipper.org *
8 * *
9 *---------------------------------------------------------------------------*
10 * This file is part of OpenFlipper. *
11 *---------------------------------------------------------------------------*
12 * *
13 * Redistribution and use in source and binary forms, with or without *
14 * modification, are permitted provided that the following conditions *
15 * are met: *
16 * *
17 * 1. Redistributions of source code must retain the above copyright notice, *
18 * this list of conditions and the following disclaimer. *
19 * *
20 * 2. Redistributions in binary form must reproduce the above copyright *
21 * notice, this list of conditions and the following disclaimer in the *
22 * documentation and/or other materials provided with the distribution. *
23 * *
24 * 3. Neither the name of the copyright holder nor the names of its *
25 * contributors may be used to endorse or promote products derived from *
26 * this software without specific prior written permission. *
27 * *
28 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS *
29 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED *
30 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A *
31 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER *
32 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, *
33 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, *
34 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR *
35 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *
36 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING *
37 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
38 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
39 * *
40\*===========================================================================*/
41
42
43
44#pragma once
45
46#include <QObject>
47#include <QCheckBox>
48#include <QLabel>
49#include <QSpinBox>
50#include <QPushButton>
51#include <QComboBox>
52
62#include <OpenFlipper/BasePlugin/TextureInterface.hh>
64
67
68#ifdef ENABLE_BSPLINECURVE_SUPPORT
70#endif
71
72#ifdef ENABLE_BSPLINESURFACE_SUPPORT
74#endif
75
76#include "OBJImporter.hh"
77#include "Material.hh"
78
79#include <map>
80
81enum ReaderMode
82{
83 NONE = 0,
84 CURVE = 1,
85 SURFACE = 1 << 1
86};
87
91{
92 Q_OBJECT
93 Q_INTERFACES(FileInterface)
94 Q_INTERFACES(LoadSaveInterface)
95 Q_INTERFACES(LoggingInterface)
96 Q_INTERFACES(BaseInterface)
97 Q_INTERFACES(ScriptInterface)
98 Q_INTERFACES(StatusbarInterface)
99 Q_INTERFACES(RPCInterface)
100 Q_INTERFACES(TextureInterface)
101 Q_INTERFACES(PythonInterface)
102
103 Q_PLUGIN_METADATA(IID "org.OpenFlipper.Plugins.Plugin-FileOBJ")
104 signals:
105 void openedFile( int _id );
106 void addEmptyObject( DataType _type, int& _id);
107 void load(QString _filename, DataType _type, int& _id);
108 void save(int _id , QString _filename );
109 void log(Logtype _type, QString _message);
110 void log(QString _message);
111 void updateView();
112 void updatedObject(int _identifier, const UpdateType& _type);
113
114 void deleteObject( int _id );
115
116 // StatusbarInterface
117 void showStatusMessage(QString _message, int _timeout = 0);
118 void setStatus( ApplicationStatus::applicationStatus _status);
119
120 //RPCInterface
121 void pluginExists( QString _pluginName , bool& _exists );
122
123 //TextureInterface
124 void setTextureMode(QString _textureName, QString _mode, int _id );
125 void switchTexture( QString _textureName, int _id );
126 void addMultiTexture( QString _textureGroup, QString _name, QString _filename, int _id, int& _textureId);
127 void textureFilename( int /*_id*/, QString /*_textureName*/, QString& /*_textureFilename*/ );
128 void textureIndex(QString _name,int _id, int& _index);
129 void getCurrentTexture(int /*_id*/, QString& /*_name*/);
130 void textureName (int, int, QString &);
131 void getSubTextures (int, QString, QStringList &);
132 void textureIndexPropertyName(int, QString&);
133
134 private slots:
135
136 void fileOpened( int /*_id*/ ){};
137
138 void noguiSupported( ) {} ;
139
140 void initializePlugin();
141
143 void slotLoadDefault();
144
146 void slotSaveDefault();
147
148 void slotHandleCheckBoxes(bool _checked);
149
150 void handleTrimeshDialog();
151
152 public :
153
155
156 ~FileOBJPlugin() {};
157
158 QString name() { return (QString("FileOBJ")); };
159 QString description( ) { return (QString(tr("Load/Save OBJ-Files"))); };
160
162
163 QString getSaveFilters();
164 QString getLoadFilters();
165
166 QWidget* saveOptionsWidget(QString /*_currentFilter*/);
167 QWidget* loadOptionsWidget(QString /*_currentFilter*/);
168
169 public slots:
170
172 int loadObject(QString _filename);
173
175 int loadObject(QString _filename, DataType _type);
176
177 bool saveObject(int _id, QString _filename);
178
179 QString version() { return QString("1.0"); };
180
181 private:
182
184 void checkTypes(QByteArray& _bufferedFile, QString _filename, OBJImporter& _importer, QStringList& _includes);
185
186 bool readMaterial(QString _filename, OBJImporter& _importer);
187 void readOBJFile(QByteArray& _bufferedFile, QString _filename, OBJImporter& _importer);
188 void createAllGroupObjects(OBJImporter& _importer);
189 //void addNewObject(OBJImporter& _importer, QString _name );
190 template <class MeshT>
191 void backupTextureCoordinates(MeshT& _mesh);
192 void addTextures(OBJImporter& _importer, int _objectID );
193
195 void convertToOBJName(QString& _name);
196
197 private :
198
200 MaterialList materials_;
201
203 unsigned int materialErrors_;
204
205 template< class MeshT >
206 Material& getMaterial(MeshT& _mesh, const OpenMesh::FaceHandle& _fh, int _objId);
207
209 template< class MeshT >
210 bool writeMaterial(QString _filename, MeshT& _mesh, int _objId );
211
212 template< class MeshT >
213 bool writeMesh(std::ostream& _out, QString _filename, MeshT& _mesh, int _objId);
214
215 #ifdef ENABLE_BSPLINECURVE_SUPPORT
216 bool writeCurve(std::ostream& _out, QString _filename, BSplineCurve* _curve );
217 #endif
218
219 #ifdef ENABLE_BSPLINESURFACE_SUPPORT
220 bool writeSurface(std::ostream& _out, QString _filename, BSplineSurface* _surface );
221 #endif
222
223
224 private:
225
226 //Option Widgets
227 QWidget* loadOptions_;
228 QWidget* saveOptions_;
229
230 QCheckBox* saveBinary_;
231 QCheckBox* saveVertexColor_;
232 QCheckBox* saveFaceColor_;
233 QCheckBox* saveFaceColorOverride_;
234 QCheckBox* saveAlpha_;
235 QCheckBox* saveNormals_;
236 QCheckBox* saveTexCoords_;
237 QCheckBox* saveTextures_;
238 QCheckBox* saveCopyTextures_;
239 QCheckBox* saveCreateTexFolder_;
240 QLabel* savePrecisionLabel_;
241 QSpinBox* savePrecision_;
242 QPushButton* saveDefaultButton_;
243
244
245 QComboBox* triMeshHandling_;
246 QCheckBox* loadVertexColor_;
247 QCheckBox* loadFaceColor_;
248 QCheckBox* loadAlpha_;
249 QCheckBox* loadNormals_;
250 QCheckBox* loadTexCoords_;
251 QCheckBox* loadTextures_;
252 QPushButton* loadDefaultButton_;
253
254 bool forceTriangleMesh_;
255 bool forcePolyMesh_;
256
257 QString textureIndexPropertyName_;
258 bool textureIndexPropFetched_;
259 std::map<int,QString> texIndexFileMap_;
260 OBJImporter::ObjectOptionsE trimeshOptions_;
261};
262
263
264#if defined(INCLUDE_TEMPLATES) && !defined(FILEOBJPLUGIN_C)
265#define FILEOBJPLUGIN_TEMPLATES
266#include "FileOBJT_impl.hh"
267#endif
268
269
Logtype
Log types for Message Window.
Interface class from which all plugins have to be created.
Predefined datatypes.
Definition DataTypes.hh:83
Interface class for file handling.
unsigned int materialErrors_
number of defect materials encountered during writing
Definition FileOBJ.hh:203
DataType supportedType()
Return your supported object type( e.g. DATA_TRIANGLE_MESH )
Definition FileOBJ.cc:133
QString description()
Return a description of what the plugin is doing.
Definition FileOBJ.hh:159
void initializePlugin()
Initialize Plugin.
Definition FileOBJ.cc:116
QWidget * saveOptionsWidget(QString)
Definition FileOBJ.cc:2261
QString getSaveFilters()
Definition FileOBJ.cc:127
void slotLoadDefault()
Slot called when user wants to save the given Load options as default.
Definition FileOBJ.cc:2381
void convertToOBJName(QString &_name)
Convert non-valid filenames (e.g. of groups that end with .jpg) to valid .objs.
Definition FileOBJ.cc:428
void noguiSupported()
Definition FileOBJ.hh:138
bool writeMaterial(QString _filename, MeshT &_mesh, int _objId)
writer functions
void checkTypes(QByteArray &_bufferedFile, QString _filename, OBJImporter &_importer, QStringList &_includes)
Reader functions.
Definition FileOBJ.cc:1321
void slotSaveDefault()
Slot called when user wants to save the given Save options as default.
Definition FileOBJ.cc:2392
QString name()
Return a name for the plugin.
Definition FileOBJ.hh:158
int loadObject(QString _filename)
Loads Object and converts it to a triangle mesh if possible.
Definition FileOBJ.cc:1843
FileOBJPlugin()
Constructor.
Definition FileOBJ.cc:82
void backupTextureCoordinates(MeshT &_mesh)
creates a backup of the original per vertex/face texture coordinates
Definition FileOBJ.cc:439
MaterialList materials_
List that contains the material properties.
Definition FileOBJ.hh:200
QWidget * loadOptionsWidget(QString)
Definition FileOBJ.cc:2330
QString getLoadFilters()
Definition FileOBJ.cc:121
Interface for all plugins which want to Load or Save files and create Objects.
Interface for all Plugins which do logging to the logging window of the framework.
Interface class for exporting functions to python.
Interface to call functions across plugins.
Interface for all Plugins which provide scriptable Functions.
Control OpenFlippers status bar.
Provide texture support for a plugin.
Update type class.
Definition UpdateType.hh:59
DrawMode NONE
not a valid draw mode
Definition DrawModes.cc:71
applicationStatus
Enum for the statusBar Status Icon.
Handle for a face entity.
Definition Handles.hh:142