Skip to content

Commit 14454d1

Browse files
author
Dushyant Basson
committed
Added output panel (for debug info, etc.)
1 parent 98102b9 commit 14454d1

4 files changed

Lines changed: 75 additions & 6 deletions

File tree

src/qtviewer/MainWindow.cpp

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@
66
#include <QFileInfo>
77
#include <QFile>
88
#include <QMessageBox>
9+
#include <QSplitter>
910
#include <sstream>
1011

1112
#include "MainWindow.h"
12-
#include "ParseIfcFile.h"
1313
#include "IfcViewerWidget.h"
1414

1515
MainWindow::MainWindow(QWidget *parent)
@@ -19,7 +19,18 @@ MainWindow::MainWindow(QWidget *parent)
1919
this->resize(800, 600); //temporary reasonable initial size
2020

2121
m_glWidget = new IfcViewerWidget(this);
22-
setCentralWidget(m_glWidget);
22+
QSizePolicy glSizePolicy = m_glWidget->sizePolicy();
23+
glSizePolicy.setVerticalStretch(3);
24+
m_glWidget->setSizePolicy(glSizePolicy);
25+
26+
m_outputText = new QPlainTextEdit(this);
27+
m_outputText->setReadOnly(true);
28+
29+
QSplitter* splitter = new QSplitter(Qt::Vertical, this);
30+
splitter->addWidget(m_glWidget);
31+
splitter->addWidget(m_outputText);
32+
33+
setCentralWidget(splitter);
2334

2435
createActions();
2536
createMenus();
@@ -69,6 +80,13 @@ void MainWindow::createConnections()
6980
connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit()));
7081
//connect(m_backgroundAction, SIGNAL(toggled(bool)), (QWidget*)m_v, SLOT(setViewBackground(bool)));
7182
//connect(m_outlineAction, SIGNAL(toggled(bool)), (QWidget*)m_v, SLOT(setViewOutline(bool)));
83+
84+
connect(&m_parser, &ParseIfcFile::parsingInfo, this, &MainWindow::appendToOutputText);
85+
}
86+
87+
void MainWindow::appendToOutputText(const QString& message)
88+
{
89+
m_outputText->appendPlainText(message);
7290
}
7391

7492
void MainWindow::openFile()
@@ -96,8 +114,10 @@ void MainWindow::openFile()
96114
return;
97115
}
98116

99-
ParseIfcFile parser;
100-
parser.Parse(filePath.toStdString());
117+
QString message = tr("Opening file: %1\n").arg(filePath);
118+
appendToOutputText(message);
119+
120+
m_parser.Parse(filePath.toStdString());
101121

102122
m_currentPath = filePath;
103123
setWindowTitle(tr("%1 - IFCViewer").arg(fileName));

src/qtviewer/MainWindow.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
#include <QString>
77
#include <QAction>
88
#include <QOpenGLWidget>
9+
#include <QPlainTextEdit>
10+
11+
#include "ParseIfcFile.h"
912

1013
class MainWindow : public QMainWindow
1114
{
@@ -21,6 +24,7 @@ public slots:
2124
void createActions();
2225
void createMenus();
2326
void createConnections();
27+
void appendToOutputText(const QString& message);
2428
private:
2529
QMenu *fileMenu;
2630
QAction *openAction;
@@ -35,7 +39,11 @@ public slots:
3539
QAction *m_outlineAction;
3640

3741
QString m_currentPath;
42+
3843
QOpenGLWidget *m_glWidget;
44+
QPlainTextEdit *m_outputText;
45+
46+
ParseIfcFile m_parser;
3947
};
4048

4149
#endif // MAINWINDOW_H

src/qtviewer/ParseIfcFile.cpp

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,43 @@
44
#define IfcSchema Ifc2x3
55

66
#include "../ifcgeom/IfcGeom.h"
7+
#include "../ifcgeom_schema_agnostic/IfcGeomIterator.h"
78

89
ParseIfcFile::ParseIfcFile() {}
910

1011
ParseIfcFile::~ParseIfcFile() {}
1112

13+
void ParseIfcFile::outputMsg(const std::string& msg)
14+
{
15+
emit parsingInfo(QString::fromStdString(msg));
16+
}
17+
1218
void ParseIfcFile::Parse(const std::string& filePath)
1319
{
14-
//IfcParse::IfcFile ifcFile(filePath);
20+
IfcParse::IfcFile file(filePath);
21+
22+
IfcGeom::IteratorSettings settings;
23+
settings.set(IfcGeom::IteratorSettings::USE_WORLD_COORDS, true);
24+
settings.set(IfcGeom::IteratorSettings::WELD_VERTICES, false);
25+
26+
IfcGeom::Iterator* it = new IfcGeom::Iterator(settings, &file);
27+
if (!it->initialize()) {
28+
outputMsg("Error: Iterator failed to initialize! Aborting.");
29+
delete it;
30+
return;
31+
}
32+
33+
do {
34+
//const IfcGeom::BRepElement* bRepElem = it->get_native();
35+
const IfcGeom::TriangulationElement* triElem = static_cast<const IfcGeom::TriangulationElement*>(it->get());
36+
outputMsg(triElem->type() + ": " + triElem->name());
37+
38+
const boost::shared_ptr<IfcGeom::Representation::Triangulation>& triElemGeom = triElem->geometry_pointer();
39+
40+
// materials
41+
const std::vector<IfcGeom::Material>& elemMats = triElemGeom->materials();
42+
for (auto mat : elemMats) {
43+
outputMsg(" " + mat.original_name());
44+
}
45+
} while (it->next());
1546
}

src/qtviewer/ParseIfcFile.h

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,20 @@
11
#ifndef PARSEIFCFILE_H
22
#define PARSEIFCFILE_H
33

4+
#include <QObject>
5+
#include <QString>
46
#include <string>
57

6-
class ParseIfcFile
8+
class ParseIfcFile : public QObject
79
{
10+
Q_OBJECT
11+
12+
signals:
13+
void parsingInfo(const QString& info);
14+
15+
private:
16+
void outputMsg(const std::string& msg);
17+
818
public:
919
ParseIfcFile();
1020
~ParseIfcFile();

0 commit comments

Comments
 (0)