Refinement of the slice index interface
This commit is contained in:
parent
c72522d566
commit
2a31f5e6fc
@ -564,6 +564,8 @@ void SLAPrint::process()
|
|||||||
// layers according to quantized height levels
|
// layers according to quantized height levels
|
||||||
std::map<LevelID, LayerRefs> levels;
|
std::map<LevelID, LayerRefs> levels;
|
||||||
|
|
||||||
|
// We have the layer polygon collection but we need to unite them into
|
||||||
|
// an index where the key is the height level in discrete levels (clipper)
|
||||||
auto index_slices = [this, ilh, ilhd, &levels](SLAPrintObject& po) {
|
auto index_slices = [this, ilh, ilhd, &levels](SLAPrintObject& po) {
|
||||||
auto sih = LevelID(scale_(ilh));
|
auto sih = LevelID(scale_(ilh));
|
||||||
|
|
||||||
@ -606,11 +608,18 @@ void SLAPrint::process()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// shortcut for empty index into the slice vectors
|
||||||
|
static const auto EMPTY_SLICE = SLAPrintObject::SliceRecord::NONE;
|
||||||
|
|
||||||
for(int i = 0; i < oslices.size(); ++i) {
|
for(int i = 0; i < oslices.size(); ++i) {
|
||||||
LevelID h = levelids[i];
|
LevelID h = levelids[i];
|
||||||
auto& lyrs = levels[h]; // this initializes a new record
|
auto& lyrs = levels[h]; // this initializes a new record
|
||||||
lyrs.emplace_back(oslices[i], po.m_instances);
|
lyrs.emplace_back(oslices[i], po.m_instances);
|
||||||
|
|
||||||
|
// now for the public slice index:
|
||||||
SLAPrintObject::SliceRecord& sr = po.m_slice_index[h];
|
SLAPrintObject::SliceRecord& sr = po.m_slice_index[h];
|
||||||
|
// There should be only one slice layer for each print object
|
||||||
|
assert(sr.model_slices_idx == EMPTY_SLICE);
|
||||||
sr.model_slices_idx = i;
|
sr.model_slices_idx = i;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -625,6 +634,7 @@ void SLAPrint::process()
|
|||||||
lyrs.emplace_back(sslices[i], po.m_instances);
|
lyrs.emplace_back(sslices[i], po.m_instances);
|
||||||
|
|
||||||
SLAPrintObject::SliceRecord& sr = po.m_slice_index[h];
|
SLAPrintObject::SliceRecord& sr = po.m_slice_index[h];
|
||||||
|
assert(sr.support_slices_idx == EMPTY_SLICE);
|
||||||
sr.support_slices_idx = i;
|
sr.support_slices_idx = i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -87,12 +87,16 @@ public:
|
|||||||
const std::vector<ExPolygons>& get_model_slices() const;
|
const std::vector<ExPolygons>& get_model_slices() const;
|
||||||
const std::vector<ExPolygons>& get_support_slices() const;
|
const std::vector<ExPolygons>& get_support_slices() const;
|
||||||
|
|
||||||
|
// An index record referencing the slices
|
||||||
|
// (get_model_slices(), get_support_slices()) where the keys are the height
|
||||||
|
// levels of the model in scaled-clipper coordinates. The levels correspond
|
||||||
|
// to the z coordinate of the object coordinate system.
|
||||||
struct SliceRecord {
|
struct SliceRecord {
|
||||||
using Key = long long;
|
using Key = long long;
|
||||||
inline static float scale_back(Key h) { return float(scale_(h)); }
|
inline static float scale_back(Key h) { return float(scale_(h)); }
|
||||||
|
|
||||||
using Idx = size_t;
|
using Idx = size_t;
|
||||||
static const Idx NONE = ULONG_MAX; // std::numeric_limits<Idx>::max() // damn msvc 2013... ;
|
static const Idx NONE = Idx(-1); // this will be the max limit of size_t
|
||||||
|
|
||||||
Idx model_slices_idx = NONE;
|
Idx model_slices_idx = NONE;
|
||||||
Idx support_slices_idx = NONE;
|
Idx support_slices_idx = NONE;
|
||||||
|
Loading…
Reference in New Issue
Block a user