-
Notifications
You must be signed in to change notification settings - Fork 0
/
OpenFileThread.cpp
112 lines (95 loc) · 2.99 KB
/
OpenFileThread.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
/****************************************************************************
This file is part of GLC-Player.
Copyright (C) 2007-2008 Laurent Ribon ([email protected])
Version 2.2.0, packaged on July 2010.
http://www.glc-player.net
GLC-Player is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
GLC-Player is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with GLC-Player; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/
#include "OpenFileThread.h"
#include <GLC_FileFormatException>
#include <GLC_Octree>
OpenFileThread::OpenFileThread()
: m_ModelId(0)
, m_pLoadingFile(NULL)
, m_World()
, m_ErrorMsg()
, m_AttachedFileName()
{
connect(GLC_Factory::instance(), SIGNAL(currentQuantum(int)), this, SIGNAL(currentQuantum(int)));
}
OpenFileThread::~OpenFileThread()
{
m_AttachedFileName.clear();
delete m_pLoadingFile;
}
GLC_World OpenFileThread::getWorld()
{
GLC_World resultWorld(m_World);
m_World.clear();
return resultWorld;
}
GLC_uint OpenFileThread::getModelId() const
{
return m_ModelId;
}
void OpenFileThread::setOpenFile(const GLC_uint id, QFile *openFile)
{
m_ModelId= id;
delete m_pLoadingFile;
m_pLoadingFile= new QFile(openFile->fileName());
m_AttachedFileName.clear();
m_World.clear();
}
void OpenFileThread::run()
{
try
{
m_World= GLC_Factory::instance()->createWorldFromFile(*m_pLoadingFile, &m_AttachedFileName);
if (GLC_State::isSpacePartitionningActivated())
{
GLC_Octree* pOctree= new GLC_Octree(m_World.collection());
pOctree->updateSpacePartitioning();
m_World.collection()->bindSpacePartitioning(pOctree);
m_World.collection()->setSpacePartitionningUsage(true);
}
m_ErrorMsg= "";
}
catch (GLC_FileFormatException &e)
{
switch (e.exceptionType())
{
case GLC_FileFormatException::FileNotFound :
m_ErrorMsg= tr("File \"") + QFileInfo(m_pLoadingFile->fileName()).fileName() + tr("\" not found");
break;
case GLC_FileFormatException::FileNotSupported :
m_ErrorMsg= tr("File not supported");
break;
case GLC_FileFormatException::WrongFileFormat :
m_ErrorMsg= tr("File corrupted");
break;
case GLC_FileFormatException::NoMeshFound :
m_ErrorMsg= tr("No mesh found");
break;
default :
break;
}
m_pLoadingFile->close();
//m_ErrorMsg= e.what();
emit loadError();
}
catch (std::exception &e)
{
m_ErrorMsg= e.what();
emit loadError();
}
}