1
1
#pragma once
2
2
3
+ #include < atomic>
4
+
3
5
#include " ifcpp/Geometry/CAdapter.h"
4
6
#include " ifcpp/Model/BuildingModel.h"
5
7
#include " ifcpp/Reader/ReaderSTEP.h"
8
10
namespace ifcpp {
9
11
10
12
template <CAdapter TAdapter>
11
- std::vector<typename TAdapter::TEntity> LoadModel ( const std::string& filePath, const std::shared_ptr<Parameters>& parameters, const std::function<void (double )>& onProgressChanged ) {
13
+ std::vector<typename TAdapter::TEntity> LoadModel ( const std::string& filePath, const std::shared_ptr<Parameters>& parameters,
14
+ const std::function<void ( double )>& onProgressChanged, const std::atomic<bool>& isCancellationRequest = false ) {
12
15
13
- auto readerMessageCallback = [onProgressChanged]( const std::shared_ptr<StatusCallback::Message>& message ) {
16
+ auto readerMessageCallback = [ onProgressChanged ]( const std::shared_ptr<StatusCallback::Message>& message ) {
14
17
if ( message->m_type == StatusCallback::PROGRESS_CHANGED ) {
15
18
onProgressChanged ( message->m_progress * 0.5 );
16
19
}
17
20
};
18
21
19
- auto geometryGeneratorProgressChangedCallback = [onProgressChanged]( double progress ) {
20
- onProgressChanged ( 0.5 + progress * 0.5 ) ;
22
+ auto readerIsCancellationRequested = [ &isCancellationRequest ] ( ) {
23
+ return ( bool )isCancellationRequest ;
21
24
};
22
25
26
+ auto geometryGeneratorProgressChangedCallback = [ onProgressChanged ]( double progress ) { onProgressChanged ( 0.5 + progress * 0.5 ); };
27
+
23
28
auto ifcModel = std::make_shared<BuildingModel>();
24
29
auto reader = std::make_shared<ReaderSTEP>();
25
30
reader->SetMessageCallBack ( readerMessageCallback );
31
+ reader->SetIsCancellationRequestedMethod ( readerIsCancellationRequested );
26
32
reader->loadModelFromFile ( filePath, ifcModel );
33
+ if ( isCancellationRequest ) {
34
+ return {};
35
+ }
27
36
auto adapter = std::make_shared<TAdapter>();
28
37
auto styleConverter = std::make_shared<ifcpp::StyleConverter>();
29
38
auto geomUtils = std::make_shared<ifcpp::GeomUtils<typename TAdapter::TVector>>( parameters );
@@ -40,7 +49,7 @@ std::vector<typename TAdapter::TEntity> LoadModel( const std::string& filePath,
40
49
std::make_shared<ifcpp::GeometryGenerator<TAdapter>>( ifcModel, adapter, curveConverter, extruder, geometryConverter, geomUtils, primitivesConverter,
41
50
profileConverter, solidConverter, splineConverter, styleConverter, parameters );
42
51
43
- return geometryGenerator->GenerateGeometry ( geometryGeneratorProgressChangedCallback );
52
+ return geometryGenerator->GenerateGeometry ( geometryGeneratorProgressChangedCallback, isCancellationRequest );
44
53
}
45
54
46
55
}
0 commit comments