Transformation of text is now allowed only inside object instance

This commit is contained in:
Filip Sykala 2022-01-27 13:38:52 +01:00
parent 137399ef1a
commit ed818f9177
2 changed files with 19 additions and 15 deletions

View File

@ -41,6 +41,7 @@
#define ALLOW_ADD_FONT_BY_FILE #define ALLOW_ADD_FONT_BY_FILE
#define ALLOW_ADD_FONT_BY_OS_SELECTOR #define ALLOW_ADD_FONT_BY_OS_SELECTOR
#define SHOW_IMGUI_ATLAS #define SHOW_IMGUI_ATLAS
#define SHOW_FINE_POSITION
#endif // ALLOW_DEBUG_MODE #endif // ALLOW_DEBUG_MODE
#define ALLOW_ADD_FONT_BY_FILE #define ALLOW_ADD_FONT_BY_FILE
@ -187,8 +188,9 @@ bool GLGizmoEmboss::on_mouse_for_translate(const wxMouseEvent &mouse_event)
// detect start text dragging // detect start text dragging
if (mouse_event.LeftDown()) { if (mouse_event.LeftDown()) {
// initialize raycasters // initialize raycasters
// TODO: move to job, for big scene it slow down // IMPROVE: move to job, for big scene it slows down
m_raycast_manager.actualize(objects, &skip); ModelObject *act_model_object = act_model_volume->get_object();
m_raycast_manager.actualize({act_model_object}, &skip);
return false; return false;
} }
@ -204,22 +206,23 @@ bool GLGizmoEmboss::on_mouse_for_translate(const wxMouseEvent &mouse_event)
return false; return false;
} }
Transform3d object_trmat = m_raycast_manager.get_transformation(hit->tr_key);
Transform3d trmat = Emboss::create_transformation_onto_surface(hit->position, hit->normal);
if (mouse_event.Dragging()) { if (mouse_event.Dragging()) {
// hide common dragging of object // hide common dragging of object
m_parent.toggle_model_objects_visibility(false, m_volume->get_object(), gl_volume->instance_idx(), m_volume); m_parent.toggle_model_objects_visibility(false, m_volume->get_object(), gl_volume->instance_idx(), m_volume);
// Show temporary position // Show temporary position
// TODO: store z-rotation and aply after transformation matrix // TODO: store z-rotation and aply after transformation matrix
Transform3d object_trmat = m_raycast_manager.get_transformation(hit->tr_key);
Transform3d trmat = Emboss::create_transformation_onto_surface(hit->position, hit->normal);
m_temp_transformation = object_trmat * trmat; m_temp_transformation = object_trmat * trmat;
} else if (mouse_event.LeftUp()) { } else if (mouse_event.LeftUp()) {
// TODO: Disable apply common transformation after draggig // TODO: Disable apply common transformation after draggig
// Call after is used for apply transformation after common dragging to rewrite it // Call after is used for apply transformation after common dragging to rewrite it
ModelVolume *mv = m_volume; Transform3d volume_trmat =
wxGetApp().plater()->CallAfter([trmat, mv]() { gl_volume->get_instance_transformation().get_matrix().inverse() *
mv->set_transformation(trmat); *m_temp_transformation;
wxGetApp().plater()->CallAfter([volume_trmat, mv = m_volume]() {
mv->set_transformation(volume_trmat);
}); });
m_parent.toggle_model_objects_visibility(true); m_parent.toggle_model_objects_visibility(true);
@ -273,7 +276,6 @@ void GLGizmoEmboss::on_render() {
//auto color = gl_volume.render_color; //auto color = gl_volume.render_color;
auto color = GLVolume::SELECTED_COLOR; auto color = GLVolume::SELECTED_COLOR;
// Set transparent color for NEGATIVE_VOLUME & PARAMETER_MODIFIER // Set transparent color for NEGATIVE_VOLUME & PARAMETER_MODIFIER
bool is_transparent = m_volume->type() != ModelVolumeType::MODEL_PART; bool is_transparent = m_volume->type() != ModelVolumeType::MODEL_PART;
if (is_transparent) { if (is_transparent) {
color[3] = 0.5f; color[3] = 0.5f;
@ -313,10 +315,10 @@ void GLGizmoEmboss::on_render_input_window(float x, float y, float bottom_limit)
const ImVec2 &min_window_size = get_minimal_window_size(); const ImVec2 &min_window_size = get_minimal_window_size();
ImGui::PushStyleVar(ImGuiStyleVar_WindowMinSize, min_window_size); ImGui::PushStyleVar(ImGuiStyleVar_WindowMinSize, min_window_size);
#ifdef ALLOW_DEBUG_MODE #ifdef SHOW_FINE_POSITION
// draw suggested position of window // draw suggested position of window
draw_fine_position(m_parent.get_selection()); draw_fine_position(m_parent.get_selection());
#endif // ALLOW_DEBUG_MODE #endif // SHOW_FINE_POSITION
// check if is set window offset // check if is set window offset
if (m_set_window_offset.has_value()) { if (m_set_window_offset.has_value()) {
@ -329,11 +331,13 @@ void GLGizmoEmboss::on_render_input_window(float x, float y, float bottom_limit)
ImGuiWindowFlags_NoCollapse ImGuiWindowFlags_NoCollapse
; ;
bool is_open = true; bool is_open = true;
ImGui::Begin(on_get_name().c_str(), &is_open, flag); if (ImGui::Begin(on_get_name().c_str(), &is_open, flag))
draw_window(); draw_window();
ImGui::End(); ImGui::End();
// close button in header was hit
if (!is_open) close(); if (!is_open) close();
ImGui::PopStyleVar(); // WindowMinSize ImGui::PopStyleVar(); // WindowMinSize
} }

View File

@ -178,7 +178,7 @@ private:
std::string m_text; std::string m_text;
// actual volume // actual volume
ModelVolume *m_volume; ModelVolume *m_volume;
// Rotation gizmo // Rotation gizmo
GLGizmoRotate m_rotate_gizmo; GLGizmoRotate m_rotate_gizmo;