|
19 | 19 |
|
20 | 20 | #include <boost/filesystem.hpp>
|
21 | 21 |
|
| 22 | +// #define OLD_GROUP_BY |
| 23 | + |
22 | 24 | struct instance_filter_t {
|
23 | 25 | virtual bool operator()(const IfcUtil::IfcBaseEntity*) const = 0;
|
24 | 26 | };
|
@@ -700,6 +702,7 @@ namespace {
|
700 | 702 | }
|
701 | 703 | };
|
702 | 704 |
|
| 705 | +#ifdef OLD_GROUP_BY |
703 | 706 | template <typename Fn>
|
704 | 707 | void group_by(regular_voxel_storage* groups, abstract_voxel_storage* voxels, Fn fn, int threads=1) {
|
705 | 708 |
|
@@ -753,6 +756,33 @@ namespace {
|
753 | 756 | }
|
754 | 757 | }
|
755 | 758 | }
|
| 759 | +#else |
| 760 | + template <typename Fn> |
| 761 | + void group_by(regular_voxel_storage* groups, abstract_voxel_storage* voxels, Fn fn) { |
| 762 | + |
| 763 | + uint32_t v; |
| 764 | + |
| 765 | + std::map<uint32_t, abstract_voxel_storage*> map; |
| 766 | + |
| 767 | + // @todo this flattens to bits, make this configurable. |
| 768 | + // @todo use regions for multi threading |
| 769 | + for (auto& ijk : *(regular_voxel_storage*)voxels) { |
| 770 | + groups->Get(ijk, &v); |
| 771 | + abstract_voxel_storage* r; |
| 772 | + auto it = map.find(v); |
| 773 | + if (it == map.end()) { |
| 774 | + map.insert({ v, r = voxels->empty_copy() }); |
| 775 | + } else { |
| 776 | + r = it->second; |
| 777 | + } |
| 778 | + r->Set(ijk); |
| 779 | + } |
| 780 | + |
| 781 | + for (auto& r : map) { |
| 782 | + fn(r.first, r.second); |
| 783 | + } |
| 784 | + } |
| 785 | +#endif |
756 | 786 | }
|
757 | 787 |
|
758 | 788 | class op_describe_group_by : public voxel_operation {
|
@@ -785,7 +815,11 @@ class op_describe_group_by : public voxel_operation {
|
785 | 815 | delete c;
|
786 | 816 |
|
787 | 817 | first = false;
|
788 |
| - }, scope.get_value_or<int>("THREADS", 1)); |
| 818 | + } |
| 819 | +#ifdef OLD_GROUP_BY |
| 820 | + ,scope.get_value_or<int>("THREADS", 1) |
| 821 | +#endif |
| 822 | + ); |
789 | 823 |
|
790 | 824 | ofs << "]";
|
791 | 825 |
|
@@ -1816,7 +1850,11 @@ class op_mesh : public voxel_operation {
|
1816 | 1850 | group_by(groups, voxels, [&helper, &ofs](uint32_t id, abstract_voxel_storage* c) {
|
1817 | 1851 | ofs << "g id-" << id << "\n";
|
1818 | 1852 | ((regular_voxel_storage*)c)->obj_export(helper, false, false);
|
1819 |
| - }, scope.get_value_or<int>("THREADS", 1)); |
| 1853 | + } |
| 1854 | +#ifdef OLD_GROUP_BY |
| 1855 | + , scope.get_value_or<int>("THREADS", 1) |
| 1856 | +#endif |
| 1857 | + ); |
1820 | 1858 | } else {
|
1821 | 1859 |
|
1822 | 1860 | if (voxels->value_bits() == 1) {
|
|
0 commit comments