Developer Documentation
FileBundle.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 
45 //================================================================
46 //
47 // CLASS FileBundlePlugin
48 //
49 // This class is the base class for loading and saving
50 // (reading/writing) SplatCloud objects from/to bundler files
51 // on disc.
52 //
53 //================================================================
54 
55 
56 #ifndef FILEBUNDLEPLUGIN_HH
57 #define FILEBUNDLEPLUGIN_HH
58 
59 
60 //== INCLUDES ====================================================
61 
62 
63 #include <QObject>
64 
70 
72 
74 
75 //== CLASS DEFINITION ============================================
76 
77 
79 {
80  Q_OBJECT
81  Q_INTERFACES( FileInterface )
82  Q_INTERFACES( LoadSaveInterface )
83  Q_INTERFACES( LoggingInterface )
84  Q_INTERFACES( BaseInterface )
85  Q_INTERFACES( ScriptInterface )
86  Q_PLUGIN_METADATA(IID "org.OpenFlipper.Plugins.Plugin-FileBundle")
87 signals:
88 
89  // -- File Interface --
90  void openedFile( int _objectId );
91 
92  // -- LoadSave Interface --
93  void addEmptyObject( DataType _type, int &_objectId );
94  void deleteObject ( int _objectId );
95  void updatedObject( int _objectId, const UpdateType &_type );
96 
97  //-- Logging Interface --
98  void log( QString _message );
99  void log( Logtype _type, QString _message );
100 
101 public slots:
102 
103  // -- Base Interface --
104  QString version() { return QString( "1.0" ); }
105 
106  // -- File Interface --
107  int loadObject( QString _filename );
108  bool saveObject( int _objectId, QString _filename );
109 
110 private slots:
111 
112  // -- Base Interface --
113  void noguiSupported() { }
114 
115 public:
116 
117  //-- Base Interface --
118  QString name() { return QString( "FileBundle" ); }
119  QString description( ) { return QString( tr( "Load/Save SplatCloud Bundler format files" ) ); }
120 
121  // -- File Interface --
123 
124  // -- File Interface --
125  QString getSaveFilters() { return QString( tr( "Bundler SplatCloud files ( *.out )" ) ); }
126  QString getLoadFilters() { return QString( tr( "Bundler SplatCloud files ( *.out )" ) ); }
127  QWidget *saveOptionsWidget( QString /*_currentFilter*/ );
128  QWidget *loadOptionsWidget( QString /*_currentFilter*/ );
129 
130 private:
131 
132  // add/remove multiple objects
133  bool addEmptyObjects( unsigned int _num, const DataType &_dataType, std::vector<int> &_objectIDs );
134  void deleteObjects( std::vector<int> &_objectIDs );
135 
136  // read image list file from disc
137  bool readImagelistFile( const char *_filename, std::vector<std::string> &_imagePaths ) /*const*/;
138 
139  // read bundle file from disc to scenegraph node
140  void readCameras( FILE *_file, const std::vector<int> &_cameraObjectIDs, SplatCloud_Cameras &_cameras ) /*const*/;
141  void readPoints ( FILE *_file, const std::vector<int> &_cameraObjectIDs, SplatCloud &_splatCloud ) /*const*/;
142  bool readBundleFile( const char *_filename, SplatCloud &_splatCloud ) /*const*/;
143 
144  // write bundle file from scenegraph node to disc
145  bool writeBundleFile( const char *_filename, const SplatCloud &_splatCloud ) /*const*/;
146 };
147 
148 
149 //================================================================
150 
151 
152 #endif // FILEBUNDLEPLUGIN_HH
QWidget * saveOptionsWidget(QString)
Definition: FileBundle.cc:522
Logtype
Log types for Message Window.
QString description()
Return a description of what the plugin is doing.
Definition: FileBundle.hh:119
#define DATA_SPLATCLOUD
Definition: SplatCloud.hh:59
Predefined datatypes.
Definition: DataTypes.hh:83
Interface for all Plugins which do logging to the logging window of the framework.
QString name()
Return a name for the plugin.
Definition: FileBundle.hh:118
QString getLoadFilters()
Definition: FileBundle.hh:126
QWidget * loadOptionsWidget(QString)
Definition: FileBundle.cc:531
Update type class.
Definition: UpdateType.hh:60
Interface for all Plugins which provide scriptable Functions.
Interface class from which all plugins have to be created.
Interface class for file handling.
DataType supportedType()
Return your supported object type( e.g. DATA_TRIANGLE_MESH )
Definition: FileBundle.hh:122
Interface for all plugins which want to Load or Save files and create Objects.
QString getSaveFilters()
Definition: FileBundle.hh:125