-
Notifications
You must be signed in to change notification settings - Fork 2
/
processing.h
94 lines (76 loc) · 2.48 KB
/
processing.h
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
#ifndef PROCESSING_H
#define PROCESSING_H
#include "timer.h"
#include "context.h"
#include "settings.h"
#include "opening_collector.h"
#include <ifcgeom/kernels/cgal/CgalKernel.h>
#include <ifcgeom/IfcGeomFilter.h>
#include <ifcgeom/Iterator.h>
#include <string>
template <typename K>
struct non_manifold_polyhedron {
typedef CGAL::Point_3<K> P;
std::vector<P> points;
std::vector<std::vector<size_t>> indices;
};
// Light weight representation to be stored in global exec context
struct rgb : public std::pair<double, std::pair<double, double>> {
rgb(double r, double g, double b)
: std::pair<double, std::pair<double, double>>(r, { g, b }) {}
rgb(const Eigen::Vector3d& v)
: std::pair<double, std::pair<double, double>>(v(0), { v(1), v(2) }) {}
double& r() { return this->first; }
const double& r() const { return this->first; }
double& g() { return this->second.first; }
const double& g() const { return this->second.first; }
double& b() { return this->second.second; }
const double& b() const { return this->second.second; }
};
// Light weight representation to be stored in global exec context
struct item_info {
// @nb we don't store a reference to the ifcopenshell entity instance so the files can be freed from memory
// we can store a const reference to the ifcopenshell latebound schema type names.
int id;
int parent_id;
const std::string& entity_type;
std::string guid;
std::string name;
ifcopenshell::geometry::taxonomy::style::ptr style;
};
struct debug_writer : public execution_context {
void operator()(shape_callback_item* item);
};
// An execution context that stores processed items from the file.
struct capturing_execution_context : public execution_context {
std::list<shape_callback_item*> items;
void operator()(shape_callback_item* item) {
items.push_back(item);
}
template <typename Fn>
void run(Fn fn) {
for (auto& i : items) {
fn(i);
}
}
};
// A structure for recieving processed shapes simply defers to a vector of contexts
struct shape_callback {
std::vector<execution_context*> contexts;
void operator()(shape_callback_item* item) {
for (auto& c : contexts) {
(*c)(item);
}
}
};
// Interprets IFC geometries by means of IfcOpenShell CGAL and
// pass result to callback
struct process_geometries {
geobim_settings settings;
opening_collector all_openings;
std::list<IfcGeom::Iterator*> iterators;
process_geometries(geobim_settings&);
~process_geometries();
int operator()(const std::function<void(shape_callback_item*)>&);
};
#endif