1
1
#pragma once
2
2
3
+ #include " ifcpp/Geometry/CAdapter.h"
4
+ #include " ifcpp/Model/BuildingModel.h"
5
+ #include " ifcpp/Reader/ReaderSTEP.h"
6
+ #include < ifcpp/Geometry/GeometryGenerator.h>
3
7
4
8
namespace ifcpp {
5
9
10
+ 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 ) {
6
12
13
+ auto readerMessageCallback = [onProgressChanged]( const std::shared_ptr<StatusCallback::Message>& message ) {
14
+ if ( message->m_type == StatusCallback::PROGRESS_CHANGED ) {
15
+ onProgressChanged ( message->m_progress * 0.5 );
16
+ }
17
+ };
18
+
19
+ auto geometryGeneratorProgressChangedCallback = [onProgressChanged]( double progress ) {
20
+ onProgressChanged ( 0.5 + progress * 0.5 );
21
+ };
22
+
23
+ auto ifcModel = std::make_shared<BuildingModel>();
24
+ auto reader = std::make_shared<ReaderSTEP>();
25
+ reader->SetMessageCallBack ( readerMessageCallback );
26
+ reader->loadModelFromFile ( filePath, ifcModel );
27
+ auto adapter = std::make_shared<TAdapter>();
28
+ auto styleConverter = std::make_shared<ifcpp::StyleConverter>();
29
+ auto geomUtils = std::make_shared<ifcpp::GeomUtils<typename TAdapter::TVector>>( parameters );
30
+ auto primitivesConverter = std::make_shared<ifcpp::PrimitiveTypesConverter<typename TAdapter::TVector>>();
31
+ auto splineConverter = std::make_shared<ifcpp::SplineConverter<typename TAdapter::TVector>>( primitivesConverter, geomUtils, parameters );
32
+ auto curveConverter = std::make_shared<ifcpp::CurveConverter<typename TAdapter::TVector>>( primitivesConverter, geomUtils, splineConverter, parameters );
33
+ auto extruder = std::make_shared<ifcpp::Extruder<typename TAdapter::TVector>>( geomUtils, parameters );
34
+ auto profileConverter = std::make_shared<ifcpp::ProfileConverter<typename TAdapter::TVector>>( curveConverter, geomUtils, primitivesConverter, parameters );
35
+ auto geometryConverter = std::make_shared<ifcpp::GeometryConverter<typename TAdapter::TVector>>( curveConverter, primitivesConverter, splineConverter,
36
+ geomUtils, extruder, profileConverter, parameters );
37
+ auto solidConverter = std::make_shared<ifcpp::SolidConverter<TAdapter>>( primitivesConverter, curveConverter, profileConverter, extruder, geometryConverter,
38
+ adapter, geomUtils, styleConverter, parameters );
39
+ auto geometryGenerator =
40
+ std::make_shared<ifcpp::GeometryGenerator<TAdapter>>( ifcModel, adapter, curveConverter, extruder, geometryConverter, geomUtils, primitivesConverter,
41
+ profileConverter, solidConverter, splineConverter, styleConverter, parameters );
42
+
43
+ return geometryGenerator->GenerateGeometry ( geometryGeneratorProgressChangedCallback );
44
+ }
7
45
8
46
}
0 commit comments