ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
FileIOFilter.h
Go to the documentation of this file.
1 // ----------------------------------------------------------------------------
2 // - CloudViewer: www.cloudViewer.org -
3 // ----------------------------------------------------------------------------
4 // Copyright (c) 2018-2024 www.cloudViewer.org
5 // SPDX-License-Identifier: MIT
6 // ----------------------------------------------------------------------------
7 
8 #pragma once
9 
10 // CV_DB_LIB
11 #include <ecvHObject.h>
12 
13 // Local
14 #include "ecvGlobalShiftManager.h"
15 
16 class QWidget;
17 class ccHObject;
18 
40 };
41 
43 
46 class FileIOFilter {
47 public:
48  virtual ~FileIOFilter() = default;
49 
51  struct LoadParameters {
54  : shiftHandlingMode(ecvGlobalShiftManager::DIALOG_IF_NECESSARY),
56  coordinatesShiftEnabled(nullptr),
57  coordinatesShift(nullptr),
58  preserveShiftOnSave(true),
59  autoComputeNormals(false),
60  parentWidget(nullptr),
61  sessionStart(true) {}
62 
78  QWidget* parentWidget;
81  };
82 
84  struct SaveParameters {
87  : alwaysDisplaySaveDialog(true), parentWidget(nullptr) {}
88 
93  QWidget* parentWidget;
94  };
95 
97  using Shared = QSharedPointer<FileIOFilter>;
98 
99 public: // public interface
102 
105 
107 
111  CV_IO_LIB_API const QStringList& getFileFilters(bool onImport) const;
112 
115 
116 public: // public interface (to be reimplemented by each I/O filter)
118 
124  virtual CC_FILE_ERROR loadFile(const QString& filename,
125  ccHObject& container,
126  LoadParameters& parameters) {
127  Q_UNUSED(filename);
128  Q_UNUSED(container);
129  Q_UNUSED(parameters);
130 
132  }
133 
135 
142  const QString& filename,
143  const SaveParameters& parameters) {
144  Q_UNUSED(entity);
145  Q_UNUSED(filename);
146  Q_UNUSED(parameters);
147 
149  }
150 
152 
158  virtual bool canSave(CV_CLASS_ENUM type,
159  bool& multiple,
160  bool& exclusive) const {
161  Q_UNUSED(type);
162  Q_UNUSED(multiple);
163  Q_UNUSED(exclusive);
164 
165  return false;
166  }
167 
168 public: // static methods
171  CV_IO_LIB_API static QStringList ImportFilterList();
172 
174 
182  LoadParameters& parameters,
183  Shared filter,
185 
187 
196  const QString& filename,
197  LoadParameters& parameters,
199  const QString& fileFilter = QString());
200 
203 
211  ccHObject* entities,
212  const QString& filename,
213  const SaveParameters& parameters,
214  Shared filter);
215 
218 
226  ccHObject* entities,
227  const QString& filename,
228  const SaveParameters& parameters,
229  const QString& fileFilter);
230 
232 
240  const CCVector3d& P,
241  CCVector3d& Pshift,
242  bool& preserveCoordinateShift,
243  LoadParameters& loadParameters,
244  bool useInputCoordinatesShiftIfPossible = false);
245 
247 
252  const QString& action,
253  const QString& filename);
254 
256  CV_IO_LIB_API static bool CheckForSpecialChars(const QString& filename);
257 
258 public: // loading "sessions" management
262 
265 
268 
269 public: // global filters registration mechanism
271  CV_IO_LIB_API static void InitInternalFilters();
272 
274  CV_IO_LIB_API static void Register(Shared filter);
275 
277  CV_IO_LIB_API static Shared GetFilter(const QString& fileFilter,
278  bool onImport);
279 
281  CV_IO_LIB_API static Shared FindBestFilterForExtension(const QString& ext);
282 
284  using FilterContainer = std::vector<FileIOFilter::Shared>;
285 
288 
290 
293 
295 
296  virtual void unregister() {}
297 
298 public:
300  NoFeatures = 0x0000,
301 
302  Import = 0x00001, //< Imports data
303  Export = 0x0002, //< Exports data
304 
305  BuiltIn = 0x0004, //< Implemented in the core
306 
307  DynamicInfo = 0x0008, //< FilterInfo cannot be set statically (this is
308  // used for internal consistency checking)
309  };
310  Q_DECLARE_FLAGS(FilterFeatures, FilterFeature)
311 
312 protected:
313  static constexpr float DEFAULT_PRIORITY = 25.0f;
314 
315  struct FilterInfo {
317  QString id;
318 
322  float priority;
323 
327  QStringList importExtensions;
328 
331 
334 
337 
339  FilterFeatures features;
340  };
341 
342  CV_IO_LIB_API explicit FileIOFilter(const FilterInfo& info);
343 
346  void setImportExtensions(const QStringList& extensions);
347 
350  void setImportFileFilterStrings(const QStringList& filterStrings);
351 
354  void setExportFileFilterStrings(const QStringList& filterStrings);
355 
356 private:
357  void checkFilterInfo() const;
358 
359  FilterInfo m_filterInfo;
360 };
361 
362 Q_DECLARE_OPERATORS_FOR_FLAGS(FileIOFilter::FilterFeatures)
int64_t CV_CLASS_ENUM
Type of object type flags (64 bits)
Definition: CVTypes.h:97
std::string filename
#define CV_IO_LIB_API
Definition: CV_io.h:15
char type
CC_FILE_ERROR
Typical I/O filter errors.
Definition: FileIOFilter.h:20
@ CC_FERR_CONSOLE_ERROR
Definition: FileIOFilter.h:33
@ CC_FERR_CANCELED_BY_USER
Definition: FileIOFilter.h:30
@ CC_FERR_THIRD_PARTY_LIB_FAILURE
Definition: FileIOFilter.h:36
@ CC_FERR_NO_LOAD
Definition: FileIOFilter.h:28
@ CC_FERR_WRITING
Definition: FileIOFilter.h:25
@ CC_FERR_THIRD_PARTY_LIB_EXCEPTION
Definition: FileIOFilter.h:37
@ CC_FERR_MALFORMED_FILE
Definition: FileIOFilter.h:32
@ CC_FERR_BAD_ARGUMENT
Definition: FileIOFilter.h:22
@ CC_FERR_UNKNOWN_FILE
Definition: FileIOFilter.h:23
@ CC_FERR_NO_SAVE
Definition: FileIOFilter.h:27
@ CC_FERR_NO_ERROR
Definition: FileIOFilter.h:21
@ CC_FERR_NOT_IMPLEMENTED
Definition: FileIOFilter.h:38
@ CC_FERR_BROKEN_DEPENDENCY_ERROR
Definition: FileIOFilter.h:34
@ CC_FERR_BAD_ENTITY_TYPE
Definition: FileIOFilter.h:29
@ CC_FERR_INTERNAL
Definition: FileIOFilter.h:39
@ CC_FERR_READING
Definition: FileIOFilter.h:26
@ CC_FERR_FILE_WAS_WRITTEN_BY_UNKNOWN_PLUGIN
Definition: FileIOFilter.h:35
@ CC_FERR_NOT_ENOUGH_MEMORY
Definition: FileIOFilter.h:31
@ CC_FERR_WRONG_FILE_TYPE
Definition: FileIOFilter.h:24
core::Tensor result
Definition: VtkUtils.cpp:76
Generic file I/O filter.
Definition: FileIOFilter.h:46
bool importSupported() const
Returns whether this I/O filter can import files.
static constexpr float DEFAULT_PRIORITY
Definition: FileIOFilter.h:313
virtual ~FileIOFilter()=default
static CC_FILE_ERROR SaveToFile(ccHObject *entities, const QString &filename, const SaveParameters &parameters, Shared filter)
void setImportExtensions(const QStringList &extensions)
QString getDefaultExtension() const
Returns the default file extension.
static void Register(Shared filter)
Registers a new filter.
static void ResetSesionCounter()
virtual bool canSave(CV_CLASS_ENUM type, bool &multiple, bool &exclusive) const
Returns whether this I/O filter can save the specified type of entity.
Definition: FileIOFilter.h:158
virtual void unregister()
Called when the filter is unregistered.
Definition: FileIOFilter.h:296
const QStringList & getFileFilters(bool onImport) const
Returns the file filter(s) for this I/O filter.
static bool CheckForSpecialChars(const QString &filename)
Returns whether special characters are present in the input string.
static const FilterContainer & GetFilters()
Returns the set of all registered filters.
virtual CC_FILE_ERROR loadFile(const QString &filename, ccHObject &container, LoadParameters &parameters)
Loads one or more entities from a file.
Definition: FileIOFilter.h:124
bool exportSupported() const
Returns whether this I/O filter can export files.
void setImportFileFilterStrings(const QStringList &filterStrings)
static Shared FindBestFilterForExtension(const QString &ext)
Returns the best filter (presumably) to open a given file extension.
static Shared GetFilter(const QString &fileFilter, bool onImport)
Returns the filter corresponding to the given 'file filter'.
static QStringList ImportFilterList()
static void UnregisterAll()
Unregisters all filters.
static CC_FILE_ERROR SaveToFile(ccHObject *entities, const QString &filename, const SaveParameters &parameters, const QString &fileFilter)
QSharedPointer< FileIOFilter > Shared
Shared type.
Definition: FileIOFilter.h:97
static void DisplayErrorMessage(CC_FILE_ERROR err, const QString &action, const QString &filename)
Displays (to console) the message corresponding to a given error code.
static unsigned IncreaseSesionCounter()
virtual CC_FILE_ERROR saveToFile(ccHObject *entity, const QString &filename, const SaveParameters &parameters)
Saves an entity (or a group of) to a file.
Definition: FileIOFilter.h:141
static ccHObject * LoadFromFile(const QString &filename, LoadParameters &parameters, Shared filter, CC_FILE_ERROR &result)
Loads one or more entities from a file with a known filter.
FileIOFilter(const FilterInfo &info)
void setExportFileFilterStrings(const QStringList &filterStrings)
static ccHObject * LoadFromFile(const QString &filename, LoadParameters &parameters, CC_FILE_ERROR &result, const QString &fileFilter=QString())
Loads one or more entities from a file with known type.
std::vector< FileIOFilter::Shared > FilterContainer
Type of a I/O filters container.
Definition: FileIOFilter.h:284
static bool HandleGlobalShift(const CCVector3d &P, CCVector3d &Pshift, bool &preserveCoordinateShift, LoadParameters &loadParameters, bool useInputCoordinatesShiftIfPossible=false)
Shortcut to the ecvGlobalShiftManager mechanism specific for files.
Hierarchical CLOUDVIEWER Object.
Definition: ecvHObject.h:25
Mode
Strategy to handle coordinates shift/scale.
Q_DECLARE_OPERATORS_FOR_FLAGS(ecvDisplayTools::INTERACTION_FLAGS)
FilterFeatures features
Supported features.
Definition: FileIOFilter.h:339
QString id
ID used to uniquely identify the filter (not user-visible)
Definition: FileIOFilter.h:317
QStringList importExtensions
Definition: FileIOFilter.h:327
QStringList importFileFilterStrings
List of file filters for import (e.g. "Test (*.txt)", "Foo (*.foo))
Definition: FileIOFilter.h:333
QString defaultExtension
The default file extension (for export)
Definition: FileIOFilter.h:330
QStringList exportFileFilterStrings
List of file filters for export (e.g. "Test (*.txt)", "Foo (*.foo))
Definition: FileIOFilter.h:336
Generic loading parameters.
Definition: FileIOFilter.h:51
CCVector3d * coordinatesShift
If applicable, applied shift on load (optional)
Definition: FileIOFilter.h:71
ecvGlobalShiftManager::Mode shiftHandlingMode
How to handle big coordinates.
Definition: FileIOFilter.h:64
QWidget * parentWidget
Parent widget (if any)
Definition: FileIOFilter.h:78
bool sessionStart
Session start (whether the load action is the first of a session)
Definition: FileIOFilter.h:80
bool preserveShiftOnSave
If applicable, whether shift should be preserved or not (optional)
Definition: FileIOFilter.h:73
bool * coordinatesShiftEnabled
Whether shift on load has been applied after loading (optional)
Definition: FileIOFilter.h:69
LoadParameters()
Default constructor.
Definition: FileIOFilter.h:53
Generic saving parameters.
Definition: FileIOFilter.h:84
QWidget * parentWidget
Parent widget (if any)
Definition: FileIOFilter.h:93
SaveParameters()
Default constructor.
Definition: FileIOFilter.h:86