Merge branch 'master' of https://github.com/prusa3d/Slic3r
This commit is contained in:
commit
9594bf43b5
@ -46,13 +46,13 @@ const std::array<unsigned, slaposCount> OBJ_STEP_LEVELS =
|
|||||||
30, // slaposSupportPoints,
|
30, // slaposSupportPoints,
|
||||||
25, // slaposSupportTree,
|
25, // slaposSupportTree,
|
||||||
25, // slaposBasePool,
|
25, // slaposBasePool,
|
||||||
10, // slaposSliceSupports,
|
10, // slaposSliceSupports,
|
||||||
};
|
};
|
||||||
|
|
||||||
const std::array<std::string, slaposCount> OBJ_STEP_LABELS =
|
const std::array<std::string, slaposCount> OBJ_STEP_LABELS =
|
||||||
{
|
{
|
||||||
L("Slicing model"), // slaposObjectSlice,
|
L("Slicing model"), // slaposObjectSlice,
|
||||||
L("Generating support points"), // slaposSupportPoints,
|
L("Generating support points"), // slaposSupportPoints,
|
||||||
L("Generating support tree"), // slaposSupportTree,
|
L("Generating support tree"), // slaposSupportTree,
|
||||||
L("Generating pad"), // slaposBasePool,
|
L("Generating pad"), // slaposBasePool,
|
||||||
L("Slicing supports"), // slaposSliceSupports,
|
L("Slicing supports"), // slaposSliceSupports,
|
||||||
@ -61,7 +61,7 @@ const std::array<std::string, slaposCount> OBJ_STEP_LABELS =
|
|||||||
// Should also add up to 100 (%)
|
// Should also add up to 100 (%)
|
||||||
const std::array<unsigned, slapsCount> PRINT_STEP_LEVELS =
|
const std::array<unsigned, slapsCount> PRINT_STEP_LEVELS =
|
||||||
{
|
{
|
||||||
5, // slapsStats
|
5, // slapsMergeSlicesAndEval
|
||||||
95, // slapsRasterize
|
95, // slapsRasterize
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -645,7 +645,7 @@ void SLAPrint::process()
|
|||||||
const size_t objcount = m_objects.size();
|
const size_t objcount = m_objects.size();
|
||||||
|
|
||||||
const unsigned min_objstatus = 0; // where the per object operations start
|
const unsigned min_objstatus = 0; // where the per object operations start
|
||||||
const unsigned max_objstatus = PRINT_STEP_LEVELS[slapsMergeSlicesAndEval]; // where the per object operations end
|
const unsigned max_objstatus = 50; // where the per object operations end
|
||||||
|
|
||||||
// the coefficient that multiplies the per object status values which
|
// the coefficient that multiplies the per object status values which
|
||||||
// are set up for <0, 100>. They need to be scaled into the whole process
|
// are set up for <0, 100>. They need to be scaled into the whole process
|
||||||
@ -802,13 +802,13 @@ void SLAPrint::process()
|
|||||||
init = int(init * ostepd); // scale the init portion
|
init = int(init * ostepd); // scale the init portion
|
||||||
|
|
||||||
// scaling for the sub operations
|
// scaling for the sub operations
|
||||||
double d = *stthis / (objcount * 100.0);
|
double d = *stthis / 100.0;
|
||||||
|
|
||||||
ctl.statuscb = [this, init, d](unsigned st, const std::string& msg)
|
ctl.statuscb = [this, init, d, ostepd](unsigned st, const std::string& /*msg*/)
|
||||||
{
|
{
|
||||||
//FIXME this status line scaling does not seem to be correct.
|
//FIXME this status line scaling does not seem to be correct.
|
||||||
// How does it account for an increasing object index?
|
// How does it account for an increasing object index?
|
||||||
report_status(*this, int(init + st*d), msg);
|
report_status(*this, int(init + st*d*ostepd), OBJ_STEP_LABELS[slaposSupportTree]);
|
||||||
};
|
};
|
||||||
|
|
||||||
ctl.stopcondition = [this](){ return canceled(); };
|
ctl.stopcondition = [this](){ return canceled(); };
|
||||||
@ -1252,18 +1252,29 @@ void SLAPrint::process()
|
|||||||
auto lvlcnt = unsigned(m_printer_input.size());
|
auto lvlcnt = unsigned(m_printer_input.size());
|
||||||
printer.layers(lvlcnt);
|
printer.layers(lvlcnt);
|
||||||
|
|
||||||
// slot is the portion of 100% that is realted to rasterization
|
|
||||||
unsigned slot = PRINT_STEP_LEVELS[slapsRasterize];
|
|
||||||
// ist: initial state; pst: previous state
|
|
||||||
unsigned ist = max_objstatus, pst = ist;
|
|
||||||
// coefficient to map the rasterization state (0-99) to the allocated
|
// coefficient to map the rasterization state (0-99) to the allocated
|
||||||
// portion (slot) of the process state
|
// portion (slot) of the process state
|
||||||
double sd = (100 - ist) / 100.0;
|
double sd = (100 - max_objstatus) / 100.0;
|
||||||
|
|
||||||
|
// slot is the portion of 100% that is realted to rasterization
|
||||||
|
unsigned slot = PRINT_STEP_LEVELS[slapsRasterize];
|
||||||
|
|
||||||
|
// ist: initial state; pst: previous state
|
||||||
|
unsigned ist = std::accumulate(PRINT_STEP_LEVELS.begin(),
|
||||||
|
PRINT_STEP_LEVELS.begin()+slapsRasterize,
|
||||||
|
0u);
|
||||||
|
|
||||||
|
ist = max_objstatus + unsigned(ist * sd);
|
||||||
|
unsigned pst = ist;
|
||||||
|
|
||||||
|
double increment = (slot * sd) / m_printer_input.size();
|
||||||
|
double dstatus = double(ist);
|
||||||
|
|
||||||
SpinMutex slck;
|
SpinMutex slck;
|
||||||
|
|
||||||
// procedure to process one height level. This will run in parallel
|
// procedure to process one height level. This will run in parallel
|
||||||
auto lvlfn =
|
auto lvlfn =
|
||||||
[this, &slck, &printer, slot, sd, ist, &pst]
|
[this, &slck, &printer, increment, &dstatus, &pst]
|
||||||
(unsigned level_id)
|
(unsigned level_id)
|
||||||
{
|
{
|
||||||
if(canceled()) return;
|
if(canceled()) return;
|
||||||
@ -1280,9 +1291,10 @@ void SLAPrint::process()
|
|||||||
printer.finish_layer(level_id);
|
printer.finish_layer(level_id);
|
||||||
|
|
||||||
// Status indication guarded with the spinlock
|
// Status indication guarded with the spinlock
|
||||||
auto st = ist + unsigned(sd*level_id*slot/m_printer_input.size());
|
|
||||||
{
|
{
|
||||||
std::lock_guard<SpinMutex> lck(slck);
|
std::lock_guard<SpinMutex> lck(slck);
|
||||||
|
dstatus += increment;
|
||||||
|
auto st = unsigned(dstatus);
|
||||||
if( st > pst) {
|
if( st > pst) {
|
||||||
report_status(*this, int(st),
|
report_status(*this, int(st),
|
||||||
PRINT_STEP_LABELS[slapsRasterize]);
|
PRINT_STEP_LABELS[slapsRasterize]);
|
||||||
|
Loading…
Reference in New Issue
Block a user