This commit is contained in:
bubnikv 2019-04-03 11:12:15 +02:00
commit 9f8ad0153e
3 changed files with 23 additions and 22 deletions

View File

@ -1041,31 +1041,37 @@ void SLAPrint::process()
{ {
ClipperPolygon poly; ClipperPolygon poly;
// We need to reverse if flpXY OR is_lefthanded is true but
// not if both are true which is a logical inequality (XOR)
bool needreverse = flpXY != is_lefthanded;
// should be a move // should be a move
poly.Contour.reserve(polygon.contour.size() + 1); poly.Contour.reserve(polygon.contour.size() + 1);
for(auto& p : polygon.contour.points) auto& cntr = polygon.contour.points;
if(needreverse)
for(auto it = cntr.rbegin(); it != cntr.rend(); ++it)
poly.Contour.emplace_back(it->x(), it->y());
else
for(auto& p : cntr)
poly.Contour.emplace_back(p.x(), p.y()); poly.Contour.emplace_back(p.x(), p.y());
auto pfirst = poly.Contour.front();
poly.Contour.emplace_back(pfirst);
for(auto& h : polygon.holes) { for(auto& h : polygon.holes) {
poly.Holes.emplace_back(); poly.Holes.emplace_back();
auto& hole = poly.Holes.back(); auto& hole = poly.Holes.back();
hole.reserve(h.points.size() + 1); hole.reserve(h.points.size() + 1);
for(auto& p : h.points) hole.emplace_back(p.x(), p.y()); if(needreverse)
auto pfirst = hole.front(); hole.emplace_back(pfirst); for(auto& p : h.points)
hole.emplace_back(p.x(), p.y());
else
for(auto it = h.points.rbegin(); it != h.points.rend(); ++it)
hole.emplace_back(it->x(), it->y());
} }
if(is_lefthanded) { if(is_lefthanded) {
for(auto& p : poly.Contour) p.X = -p.X; for(auto& p : poly.Contour) p.X = -p.X;
std::reverse(poly.Contour.begin(), poly.Contour.end()); for(auto& h : poly.Holes) for(auto& p : h) p.X = -p.X;
for(auto& h : poly.Holes) {
for(auto& p : h) p.X = -p.X;
std::reverse(h.begin(), h.end());
}
} }
sl::rotate(poly, double(instances[i].rotation)); sl::rotate(poly, double(instances[i].rotation));
@ -1074,12 +1080,7 @@ void SLAPrint::process()
if (flpXY) { if (flpXY) {
for(auto& p : poly.Contour) std::swap(p.X, p.Y); for(auto& p : poly.Contour) std::swap(p.X, p.Y);
std::reverse(poly.Contour.begin(), poly.Contour.end()); for(auto& h : poly.Holes) for(auto& p : h) std::swap(p.X, p.Y);
for(auto& h : poly.Holes) {
for(auto& p : h) std::swap(p.X, p.Y);
std::reverse(h.begin(), h.end());
}
} }
polygons.emplace_back(std::move(poly)); polygons.emplace_back(std::move(poly));

View File

@ -179,7 +179,7 @@ void ObjectManipulation::update_settings_value(const Selection& selection)
changed_box = true; changed_box = true;
} }
if (changed_box || !m_cache.instance.matches_instance(instance_idx) || !m_cache.scale.isApprox(100.0 * m_new_scale)) if (changed_box || !m_cache.instance.matches_instance(instance_idx) || !m_cache.scale.isApprox(100.0 * m_new_scale))
m_new_size = volume->get_instance_transformation().get_matrix(true, true) * m_cache.instance.box_size; m_new_size = (volume->get_instance_transformation().get_matrix(true, true) * m_cache.instance.box_size).cwiseAbs();
} }
else else
// this should never happen // this should never happen
@ -209,7 +209,7 @@ void ObjectManipulation::update_settings_value(const Selection& selection)
m_new_position = volume->get_volume_offset(); m_new_position = volume->get_volume_offset();
m_new_rotation = volume->get_volume_rotation(); m_new_rotation = volume->get_volume_rotation();
m_new_scale = volume->get_volume_scaling_factor(); m_new_scale = volume->get_volume_scaling_factor();
m_new_size = volume->get_volume_transformation().get_matrix(true, true) * volume->bounding_box.size(); m_new_size = (volume->get_volume_transformation().get_matrix(true, true) * volume->bounding_box.size()).cwiseAbs();
m_new_enabled = true; m_new_enabled = true;
} }
else if (wxGetApp().obj_list()->multiple_selection()) else if (wxGetApp().obj_list()->multiple_selection())

View File

@ -565,12 +565,12 @@ void GLGizmoSlaSupports::on_render_input_window(float x, float y, float bottom_l
RENDER_AGAIN: RENDER_AGAIN:
m_imgui->set_next_window_pos(x, y, ImGuiCond_Always); m_imgui->set_next_window_pos(x, y, ImGuiCond_Always);
const ImVec2 window_size(m_imgui->scaled(15.f, 16.5f)); const ImVec2 window_size(m_imgui->scaled(17.f, 18.f));
ImGui::SetNextWindowPos(ImVec2(x, y - std::max(0.f, y+window_size.y-bottom_limit) )); ImGui::SetNextWindowPos(ImVec2(x, y - std::max(0.f, y+window_size.y-bottom_limit) ));
ImGui::SetNextWindowSize(ImVec2(window_size)); ImGui::SetNextWindowSize(ImVec2(window_size));
m_imgui->set_next_window_bg_alpha(0.5f); m_imgui->set_next_window_bg_alpha(0.5f);
m_imgui->begin(on_get_name(), ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse); m_imgui->begin(on_get_name(), ImGuiWindowFlags_NoMove | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse);
ImGui::PushItemWidth(100.0f); ImGui::PushItemWidth(100.0f);