fix triangle selector painting on models with transformation
This commit is contained in:
parent
4eaa863ba4
commit
970c9e033d
@ -428,14 +428,14 @@ void PrintObject::generate_support_spots()
|
||||
auto obj_transform = this->trafo_centered();
|
||||
for (ModelVolume *model_volume : this->model_object()->volumes) {
|
||||
if (model_volume->is_model_part()) {
|
||||
Transform3d model_transformation = model_volume->get_matrix();
|
||||
Transform3f inv_transform = (obj_transform * model_transformation).inverse().cast<float>();
|
||||
TriangleSelectorWrapper selector { model_volume->mesh() };
|
||||
Transform3d mesh_transformation = obj_transform * model_volume->get_matrix();
|
||||
Transform3d inv_transform = mesh_transformation.inverse();
|
||||
TriangleSelectorWrapper selector { model_volume->mesh(), mesh_transformation};
|
||||
|
||||
for (const SupportSpotsGenerator::SupportPoint &support_point : issues.support_points) {
|
||||
Vec3f point = Vec3f(inv_transform * support_point.position);
|
||||
Vec3f point = Vec3f(inv_transform.cast<float>() * support_point.position);
|
||||
Vec3f origin = Vec3f(
|
||||
inv_transform * Vec3f(support_point.position.x(), support_point.position.y(), 0.0f));
|
||||
inv_transform.cast<float>() * Vec3f(support_point.position.x(), support_point.position.y(), 0.0f));
|
||||
selector.enforce_spot(point, origin, 1.5f);
|
||||
}
|
||||
|
||||
|
@ -984,8 +984,6 @@ Issues check_global_stability(SupportGridFilter supports_presence_grid,
|
||||
for (size_t island_idx = 0; island_idx < islands_graph[layer_idx].islands.size(); ++island_idx) {
|
||||
const Island &island = islands_graph[layer_idx].islands[island_idx];
|
||||
ObjectPart &part = active_object_parts.access(prev_island_to_object_part_mapping[island_idx]);
|
||||
|
||||
|
||||
IslandConnection &weakest_conn = prev_island_weakest_connection[island_idx];
|
||||
#ifdef DETAILED_DEBUG_LOGS
|
||||
weakest_conn.print_info("weakest connection info: ");
|
||||
|
@ -1,11 +1,10 @@
|
||||
#include "Model.hpp"
|
||||
#include "TriangleSelectorWrapper.hpp"
|
||||
#include <memory>
|
||||
|
||||
namespace Slic3r {
|
||||
|
||||
TriangleSelectorWrapper::TriangleSelectorWrapper(const TriangleMesh &mesh) :
|
||||
mesh(mesh), selector(mesh), triangles_tree(
|
||||
TriangleSelectorWrapper::TriangleSelectorWrapper(const TriangleMesh &mesh, const Transform3d& mesh_transform) :
|
||||
mesh(mesh), mesh_transform(mesh_transform), selector(mesh), triangles_tree(
|
||||
AABBTreeIndirect::build_aabb_tree_over_indexed_triangle_set(mesh.its.vertices, mesh.its.indices)) {
|
||||
|
||||
}
|
||||
@ -23,7 +22,7 @@ void TriangleSelectorWrapper::enforce_spot(const Vec3f &point, const Vec3f &orig
|
||||
Vec3f face_normal = its_face_normal(mesh.its, hit.id);
|
||||
if ((point - pos).norm() < radius && face_normal.dot(dir) < 0) {
|
||||
std::unique_ptr<TriangleSelector::Cursor> cursor = std::make_unique<TriangleSelector::Sphere>(
|
||||
pos, origin, radius, Transform3d::Identity(), TriangleSelector::ClippingPlane { });
|
||||
pos, origin, radius, this->mesh_transform, TriangleSelector::ClippingPlane { });
|
||||
selector.select_patch(hit.id, std::move(cursor), EnforcerBlockerType::ENFORCER, Transform3d::Identity(),
|
||||
true, 0.0f);
|
||||
break;
|
||||
@ -36,7 +35,7 @@ void TriangleSelectorWrapper::enforce_spot(const Vec3f &point, const Vec3f &orig
|
||||
triangles_tree, point, hit_idx_out, hit_point_out);
|
||||
if (dist < radius) {
|
||||
std::unique_ptr<TriangleSelector::Cursor> cursor = std::make_unique<TriangleSelector::Sphere>(
|
||||
point, origin, radius, Transform3d::Identity(), TriangleSelector::ClippingPlane { });
|
||||
point, origin, radius, this->mesh_transform, TriangleSelector::ClippingPlane { });
|
||||
selector.select_patch(hit_idx_out, std::move(cursor), EnforcerBlockerType::ENFORCER,
|
||||
Transform3d::Identity(),
|
||||
true, 0.0f);
|
||||
|
@ -2,6 +2,7 @@
|
||||
#define SRC_LIBSLIC3R_TRIANGLESELECTORWRAPPER_HPP_
|
||||
|
||||
#include "TriangleSelector.hpp"
|
||||
#include "Model.hpp"
|
||||
#include "AABBTreeIndirect.hpp"
|
||||
|
||||
namespace Slic3r {
|
||||
@ -15,10 +16,11 @@ namespace Slic3r {
|
||||
class TriangleSelectorWrapper {
|
||||
public:
|
||||
const TriangleMesh &mesh;
|
||||
const Transform3d& mesh_transform;
|
||||
TriangleSelector selector;
|
||||
AABBTreeIndirect::Tree<3, float> triangles_tree;
|
||||
|
||||
TriangleSelectorWrapper(const TriangleMesh &mesh);
|
||||
TriangleSelectorWrapper(const TriangleMesh &mesh, const Transform3d& mesh_transform);
|
||||
|
||||
void enforce_spot(const Vec3f &point, const Vec3f& origin, float radius);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user