mirror of
https://git.mirrors.martin98.com/https://github.com/prusa3d/PrusaSlicer.git
synced 2025-08-14 02:35:54 +08:00
Follow-up 97d82a0d57fb675960dd0f3e7c2f56862e6b6ac5 - Fixed labels on ruler
This commit is contained in:
parent
7b795f0cdf
commit
0766638212
@ -344,12 +344,15 @@ void DSForLayers::draw_ruler(const ImRect& slideable_region)
|
|||||||
int tick = 0;
|
int tick = 0;
|
||||||
double value = 0.0;
|
double value = 0.0;
|
||||||
size_t sequence = 0;
|
size_t sequence = 0;
|
||||||
int prev_y_pos = -1;
|
float prev_y_pos = -1.f;
|
||||||
int values_size = (int)m_values.size();
|
int values_size = (int)m_values.size();
|
||||||
|
|
||||||
|
const float label_shift = 0.5f * label_height;
|
||||||
|
|
||||||
if (m_ruler.long_step < 0) {
|
if (m_ruler.long_step < 0) {
|
||||||
// sequential print when long_step wasn't detected because of a lot of printed objects
|
// sequential print when long_step wasn't detected because of a lot of printed objects
|
||||||
if (m_ruler.max_values.size() > 1) {
|
if (m_ruler.max_values.size() > 1) {
|
||||||
|
float last_pos = get_tick_pos(m_ctrl.GetMaxPos());
|
||||||
while (tick <= m_ctrl.GetMaxPos() && sequence < m_ruler.count()) {
|
while (tick <= m_ctrl.GetMaxPos() && sequence < m_ruler.count()) {
|
||||||
// draw just ticks with max value
|
// draw just ticks with max value
|
||||||
value = m_ruler.max_values[sequence];
|
value = m_ruler.max_values[sequence];
|
||||||
@ -369,7 +372,7 @@ void DSForLayers::draw_ruler(const ImRect& slideable_region)
|
|||||||
|
|
||||||
float pos = get_tick_pos(tick);
|
float pos = get_tick_pos(tick);
|
||||||
draw_tick(pos, long_outer_x);
|
draw_tick(pos, long_outer_x);
|
||||||
if (prev_y_pos < 0 || prev_y_pos - pos >= label_height) {
|
if (prev_y_pos < 0 || pos == last_pos || (prev_y_pos - pos >= label_shift && pos - last_pos >= label_shift)) {
|
||||||
draw_text(tick, pos);
|
draw_text(tick, pos);
|
||||||
prev_y_pos = pos;
|
prev_y_pos = pos;
|
||||||
}
|
}
|
||||||
@ -391,6 +394,46 @@ void DSForLayers::draw_ruler(const ImRect& slideable_region)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
std::vector<int> last_positions;
|
||||||
|
if (m_ruler.count() == 1)
|
||||||
|
last_positions.emplace_back(m_ctrl.GetMaxPos());
|
||||||
|
else {
|
||||||
|
// fill last positions for each object in sequential print
|
||||||
|
last_positions.reserve(m_ruler.count());
|
||||||
|
|
||||||
|
int tick = 0;
|
||||||
|
double value = 0.0;
|
||||||
|
size_t sequence = 0;
|
||||||
|
|
||||||
|
while (tick <= m_ctrl.GetMaxPos()) {
|
||||||
|
value += m_ruler.long_step;
|
||||||
|
|
||||||
|
if (sequence < m_ruler.count() && value > m_ruler.max_values[sequence])
|
||||||
|
value = m_ruler.max_values[sequence];
|
||||||
|
|
||||||
|
for (; tick < values_size; tick++) {
|
||||||
|
if (m_values[tick] == value)
|
||||||
|
break;
|
||||||
|
if (m_values[tick] > value) {
|
||||||
|
if (tick > 0)
|
||||||
|
tick--;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (tick > m_ctrl.GetMaxPos())
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (sequence < m_ruler.count() && value == m_ruler.max_values[sequence]) {
|
||||||
|
last_positions.emplace_back(tick);
|
||||||
|
value = 0.0;
|
||||||
|
sequence++;
|
||||||
|
tick++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
float last_pos = get_tick_pos(last_positions[sequence]);
|
||||||
|
|
||||||
while (tick <= m_ctrl.GetMaxPos()) {
|
while (tick <= m_ctrl.GetMaxPos()) {
|
||||||
value += m_ruler.long_step;
|
value += m_ruler.long_step;
|
||||||
|
|
||||||
@ -413,7 +456,7 @@ void DSForLayers::draw_ruler(const ImRect& slideable_region)
|
|||||||
|
|
||||||
float pos = get_tick_pos(tick);
|
float pos = get_tick_pos(tick);
|
||||||
draw_tick(pos, long_outer_x);
|
draw_tick(pos, long_outer_x);
|
||||||
if (prev_y_pos < 0 || prev_y_pos - pos >= label_height) {
|
if (prev_y_pos < 0 || pos == last_pos || (prev_y_pos - pos >= label_shift && pos - last_pos >= label_shift) ) {
|
||||||
draw_text(tick, pos);
|
draw_text(tick, pos);
|
||||||
prev_y_pos = pos;
|
prev_y_pos = pos;
|
||||||
}
|
}
|
||||||
@ -424,6 +467,9 @@ void DSForLayers::draw_ruler(const ImRect& slideable_region)
|
|||||||
value = 0.0;
|
value = 0.0;
|
||||||
sequence++;
|
sequence++;
|
||||||
tick++;
|
tick++;
|
||||||
|
|
||||||
|
if (sequence < m_ruler.count())
|
||||||
|
last_pos = get_tick_pos(last_positions[sequence]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// short ticks from the last tick to the end
|
// short ticks from the last tick to the end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user