ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
filereaderutils.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 #include <vtkDataObject.h>
11 #include <vtkFLUENTReader.h>
12 #include <vtkGenericDataObjectReader.h>
13 #include <vtkLSDynaReader.h>
14 #include <vtkMultiBlockDataSet.h>
15 #include <vtkOBJReader.h>
16 #include <vtkPDBReader.h>
17 #include <vtkPLYReader.h>
18 #include <vtkSTLReader.h>
19 
20 #include <QMap>
21 #include <QObject>
22 #include <QRunnable>
23 
24 #include "../qPCL.h"
25 #include "vtkutils.h"
26 
27 class vtkDataArray;
28 
29 namespace VtkUtils {
30 
31 template <class T, class P = vtkDataObject>
32 class ReaderTempl {
33 public:
34  // virtual void run() = 0;
35  virtual P* dataObject() const {
36  if (m_reader) return m_reader->GetOutput();
37  return nullptr;
38  }
39 
40  T* reader() const { return m_reader; }
41 
42 protected:
43  T* m_reader = nullptr;
44  P* m_dataObject = nullptr;
45 };
46 
47 class QPCL_ENGINE_LIB_API AbstractFileReader : public QObject,
48  public QRunnable {
49  Q_OBJECT
50 public:
51  explicit AbstractFileReader(QObject* parent = nullptr);
52 
53  void setFileName(const QString& file);
54  QString fileName() const;
55 
56  void setTitle(const QString& title);
57  QString title() const;
58 
59 signals:
60  void finished();
61 
62 protected:
63  QString m_fileName;
64  QString m_title;
65 };
66 
68  : public AbstractFileReader,
69  public ReaderTempl<vtkGenericDataObjectReader> {
70  Q_OBJECT
71 public:
72  explicit VtkFileReader(QObject* parent = nullptr);
73 
74  void run();
75 };
76 
78  public ReaderTempl<vtkSTLReader> {
79  Q_OBJECT
80 public:
81  explicit StlFileReader(QObject* parent = nullptr);
82 
83  void run();
84 };
85 
87  public ReaderTempl<vtkOBJReader> {
88  Q_OBJECT
89 public:
90  explicit ObjFileReader(QObject* parent = nullptr);
91 
92  void run();
93 };
94 
96  : public AbstractFileReader,
97  public ReaderTempl<vtkLSDynaReader, vtkMultiBlockDataSet> {
98  Q_OBJECT
99 public:
100  explicit DynaFileReader(QObject* parent = nullptr);
101 
102  void run();
103 };
104 
106  : public AbstractFileReader,
107  public ReaderTempl<vtkGenericDataObjectReader> {
108  Q_OBJECT
109 public:
110  explicit NastranFileReader(QObject* parent = nullptr);
111 
112  void run();
113 
114 protected:
115  std::vector<int> m_matList;
116  std::map<int, int> m_uniqMatIds;
117 };
118 
120  : public AbstractFileReader,
121  public ReaderTempl<vtkFLUENTReader, vtkMultiBlockDataSet> {
122  Q_OBJECT
123 public:
124  explicit FluentFileReader(QObject* parent = nullptr);
125 
126  void run();
127 
128 protected:
129  QMap<QString, vtkDataArray*> m_dataMap;
130 };
131 
133  : public AbstractFileReader,
134  public ReaderTempl<vtkGenericDataObjectReader> {
135  Q_OBJECT
136 public:
137  explicit AnsysFileReader(QObject* parent = nullptr);
138 
139  void run();
140 
141 protected:
142  void interpretFormatString(char* line,
143  int& fieldStart,
144  int& fieldWidth,
145  int& expectedLineLength) const;
146  void interpretFormatStringEx(char* line,
147  int& firstFieldWidth,
148  int& fieldStart,
149  int& fieldWidth,
150  int& expectedLineLength) const;
151  void interpret(const char* fmt, int& fieldWidth, int& linelen) const;
152 };
153 
155  public ReaderTempl<vtkPLYReader> {
156  Q_OBJECT
157 public:
158  explicit PlyFileReader(QObject* parent = nullptr);
159 
160  void run();
161 };
162 
164  public ReaderTempl<vtkPDBReader> {
165  Q_OBJECT
166 public:
167  explicit PdbFileReader(QObject* parent = nullptr);
168 
169  void run();
170 };
171 
172 } // namespace VtkUtils
#define signals
QMap< QString, vtkDataArray * > m_dataMap
std::vector< int > m_matList
std::map< int, int > m_uniqMatIds
virtual P * dataObject() const
#define QPCL_ENGINE_LIB_API
Definition: qPCL.h:15