save camera settings on selection to avoid different result when re-projecting the selection 2d screen points transformation (does not compile because of canvas.h cyclic dependency)

This commit is contained in:
2018-11-27 14:21:56 +01:00
parent 5c39e07434
commit f34ffa825d
5 changed files with 73 additions and 6 deletions

View File

@@ -2143,6 +2143,48 @@ std::vector<glm::vec2> ui::Canvas::face_to_shape2D(int plane_index)
return points;
}
void ui::Canvas::push_camera()
{
m_camera_stack.push(get_camera());
}
void ui::Canvas::pop_camera()
{
if (!m_camera_stack.empty())
{
set_camera(m_camera_stack.top());
m_camera_stack.pop();
}
}
ui::Canvas::CameraData ui::Canvas::get_camera()
{
CameraData c;
c.m_box = m_box;
c.m_mv = m_mv;
c.m_pan = m_pan;
std::copy_n(m_plane_dir, 6, c.m_plane_dir);
std::copy_n(m_plane_unproject, 6, c.m_plane_unproject);
c.m_proj = m_proj;
c.m_vp = m_vp;
return c;
}
void ui::Canvas::set_camera(const ui::Canvas::CameraData& c)
{
m_box = c.m_box;
m_mv = c.m_mv;
m_pan = c.m_pan;
std::copy_n(c.m_plane_dir, 6, m_plane_dir);
std::copy_n(c.m_plane_unproject, 6, m_plane_unproject);
m_proj = c.m_proj;
m_vp = c.m_vp;
}
void ui::Canvas::reset_camera()
{
}
std::vector<vertex_t> ui::Canvas::triangulate_simple(const std::vector<vertex_t>& vertices)
{
std::vector<vertex_t> ret;