implement regular image import

This commit is contained in:
2018-11-26 00:04:44 +01:00
parent 0685155a45
commit 09bccda2cd
4 changed files with 71 additions and 2 deletions

View File

@@ -865,6 +865,44 @@ void CanvasModeTransform::enter()
if (m_action == ActionType::Import)
{
float aspect = 1.f;
if (m_source_image.data())
{
m_tex[0].create(m_source_image);
aspect = m_source_image.width / m_source_image.height;
}
auto center = zw(canvas->m_box) * 0.5f;
glm::vec2 bb_sz = glm::vec2(aspect, 0.75f) * 100.f;
glm::vec2 bb_min = center - bb_sz * 0.5f;
glm::vec2 bb_max = center + bb_sz * 0.5f;
glm::vec2 midpoint = (bb_min + bb_max) * 0.5f;
auto cam_up = glm::inverse(canvas->m_mv) * glm::vec4(0, 1, 0, 1);
auto center_mat = glm::lookAt({ 0, 0, 0 }, canvas->point_trace(midpoint), xyz(cam_up));
m_xform = glm::inverse(glm::lookAt({ 0, 0, 0 }, canvas->point_trace(midpoint), xyz(cam_up)));
m_xform_local = glm::mat4(1);
corners.clear();
corners.emplace_back(bb_min, 0); // A
corners.emplace_back(bb_max, 0); // C
corners.emplace_back(bb_max.x, bb_min.y, 0); // B
corners.emplace_back(bb_min.x, bb_max.y, 0); // D
corners.emplace_back(midpoint, 0);
corners.emplace_back(midpoint + (bb_max - bb_min) * glm::vec2(0.75f, 0), 0);
for (auto& c : corners)
c = center_mat * glm::vec4(canvas->point_trace(c), 1);
m_points_face[0] = std::vector<vertex_t>({
vertex_t(corners[0], { 0, 0 }),
vertex_t(corners[2], { 1, 0 }),
vertex_t(corners[1], { 1, 1 }),
vertex_t(corners[3], { 0, 1 }),
});
auto shape3d = canvas->triangulate(m_points_face[0]);
m_shape[0].update_vertices(shape3d.data(), shape3d.size());
return;
}
@@ -1038,6 +1076,8 @@ void CanvasModeTransform::enter()
action->m_canvas = canvas;
//action->m_stroke = std::move(m_current_stroke);
ActionManager::add(action);
m_source_image.destroy();
}
}