Measuring: refactoring related to plane models cache
This commit is contained in:
parent
c30cc15f41
commit
62a28c7baf
@ -233,23 +233,28 @@ void GLGizmoMeasure::on_render()
|
|||||||
case Measure::SurfaceFeatureType::Plane:
|
case Measure::SurfaceFeatureType::Plane:
|
||||||
{
|
{
|
||||||
const auto& [idx, normal, pt] = feature.get_plane();
|
const auto& [idx, normal, pt] = feature.get_plane();
|
||||||
assert(idx < m_plane_models.size());
|
assert(idx < m_plane_models_cache.size());
|
||||||
const Transform3d view_model_matrix = view_matrix * model_matrix;
|
const Transform3d view_model_matrix = view_matrix * model_matrix;
|
||||||
shader->set_uniform("view_model_matrix", view_model_matrix);
|
shader->set_uniform("view_model_matrix", view_model_matrix);
|
||||||
const Matrix3d view_normal_matrix = view_matrix.matrix().block(0, 0, 3, 3) * model_matrix.matrix().block(0, 0, 3, 3).inverse().transpose();
|
const Matrix3d view_normal_matrix = view_matrix.matrix().block(0, 0, 3, 3) * model_matrix.matrix().block(0, 0, 3, 3).inverse().transpose();
|
||||||
shader->set_uniform("view_normal_matrix", view_normal_matrix);
|
shader->set_uniform("view_normal_matrix", view_normal_matrix);
|
||||||
m_plane_models[idx]->set_color(HOVER_COLOR);
|
m_plane_models_cache[idx].set_color(HOVER_COLOR);
|
||||||
m_plane_models[idx]->render();
|
m_plane_models_cache[idx].render();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#if ENABLE_DEBUG_DIALOG
|
#if ENABLE_DEBUG_DIALOG
|
||||||
if (m_show_planes)
|
if (m_show_planes) {
|
||||||
for (const auto& glmodel : m_plane_models) {
|
const Transform3d view_model_matrix = view_matrix * model_matrix;
|
||||||
glmodel->set_color(HOVER_COLOR);
|
shader->set_uniform("view_model_matrix", view_model_matrix);
|
||||||
glmodel->render();
|
const Matrix3d view_normal_matrix = view_matrix.matrix().block(0, 0, 3, 3) * model_matrix.matrix().block(0, 0, 3, 3).inverse().transpose();
|
||||||
|
shader->set_uniform("view_normal_matrix", view_normal_matrix);
|
||||||
|
for (GLModel& glmodel : m_plane_models_cache) {
|
||||||
|
glmodel.set_color(HOVER_COLOR);
|
||||||
|
glmodel.render();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
#endif // ENABLE_DEBUG_DIALOG
|
#endif // ENABLE_DEBUG_DIALOG
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -279,17 +284,14 @@ void GLGizmoMeasure::on_render_for_picking()
|
|||||||
|
|
||||||
void GLGizmoMeasure::update_if_needed()
|
void GLGizmoMeasure::update_if_needed()
|
||||||
{
|
{
|
||||||
auto do_update = [this](const ModelObject* object, const ModelVolume* volume) {
|
auto update_plane_models_cache = [this](const indexed_triangle_set& its) {
|
||||||
const indexed_triangle_set& its = (volume != nullptr) ? volume->mesh().its : object->volumes.front()->mesh().its;
|
m_plane_models_cache.clear();
|
||||||
m_measuring.reset(new Measure::Measuring(its));
|
|
||||||
m_plane_models.clear();
|
|
||||||
const std::vector<std::vector<int>> planes_triangles = m_measuring->get_planes_triangle_indices();
|
const std::vector<std::vector<int>> planes_triangles = m_measuring->get_planes_triangle_indices();
|
||||||
for (const std::vector<int>& triangle_indices : planes_triangles) {
|
for (const std::vector<int>& triangle_indices : planes_triangles) {
|
||||||
m_plane_models.emplace_back(std::unique_ptr<GLModel>(new GLModel()));
|
m_plane_models_cache.emplace_back(GLModel());
|
||||||
GLModel::Geometry init_data;
|
GLModel::Geometry init_data;
|
||||||
init_data.format = { GUI::GLModel::Geometry::EPrimitiveType::Triangles, GLModel::Geometry::EVertexLayout::P3N3 };
|
init_data.format = { GUI::GLModel::Geometry::EPrimitiveType::Triangles, GLModel::Geometry::EVertexLayout::P3N3 };
|
||||||
init_data.color = ColorRGBA(0.9f, 0.9f, 0.9f, 0.5f);
|
unsigned int i = 0;
|
||||||
int i = 0;
|
|
||||||
for (int idx : triangle_indices) {
|
for (int idx : triangle_indices) {
|
||||||
const Vec3f& v0 = its.vertices[its.indices[idx][0]];
|
const Vec3f& v0 = its.vertices[its.indices[idx][0]];
|
||||||
const Vec3f& v1 = its.vertices[its.indices[idx][1]];
|
const Vec3f& v1 = its.vertices[its.indices[idx][1]];
|
||||||
@ -302,8 +304,15 @@ void GLGizmoMeasure::update_if_needed()
|
|||||||
init_data.add_triangle(i, i + 1, i + 2);
|
init_data.add_triangle(i, i + 1, i + 2);
|
||||||
i += 3;
|
i += 3;
|
||||||
}
|
}
|
||||||
m_plane_models.back()->init_from(std::move(init_data));
|
m_plane_models_cache.back().init_from(std::move(init_data));
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
auto do_update = [this, update_plane_models_cache](const ModelObject* object, const ModelVolume* volume) {
|
||||||
|
const indexed_triangle_set& its = (volume != nullptr) ? volume->mesh().its : object->volumes.front()->mesh().its;
|
||||||
|
m_measuring.reset(new Measure::Measuring(its));
|
||||||
|
|
||||||
|
update_plane_models_cache(its);
|
||||||
|
|
||||||
// Let's save what we calculated it from:
|
// Let's save what we calculated it from:
|
||||||
m_volumes_matrices.clear();
|
m_volumes_matrices.clear();
|
||||||
@ -315,7 +324,7 @@ void GLGizmoMeasure::update_if_needed()
|
|||||||
m_volumes_matrices.push_back(vol->get_matrix());
|
m_volumes_matrices.push_back(vol->get_matrix());
|
||||||
m_volumes_types.push_back(vol->type());
|
m_volumes_types.push_back(vol->type());
|
||||||
}
|
}
|
||||||
m_first_instance_scale = object->instances.front()->get_scaling_factor();
|
m_first_instance_scale = object->instances.front()->get_scaling_factor();
|
||||||
m_first_instance_mirror = object->instances.front()->get_mirror();
|
m_first_instance_mirror = object->instances.front()->get_mirror();
|
||||||
}
|
}
|
||||||
m_old_model_object = object;
|
m_old_model_object = object;
|
||||||
|
@ -35,6 +35,7 @@ private:
|
|||||||
GLModel m_sphere;
|
GLModel m_sphere;
|
||||||
GLModel m_cylinder;
|
GLModel m_cylinder;
|
||||||
GLModel m_circle;
|
GLModel m_circle;
|
||||||
|
std::vector<GLModel> m_plane_models_cache;
|
||||||
|
|
||||||
// This holds information to decide whether recalculation is necessary:
|
// This holds information to decide whether recalculation is necessary:
|
||||||
std::vector<Transform3d> m_volumes_matrices;
|
std::vector<Transform3d> m_volumes_matrices;
|
||||||
@ -54,7 +55,6 @@ private:
|
|||||||
bool m_show_all = false;
|
bool m_show_all = false;
|
||||||
bool m_show_planes = false;
|
bool m_show_planes = false;
|
||||||
#endif // ENABLE_DEBUG_DIALOG
|
#endif // ENABLE_DEBUG_DIALOG
|
||||||
std::vector<std::unique_ptr<GLModel>> m_plane_models;
|
|
||||||
|
|
||||||
void update_if_needed();
|
void update_if_needed();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user