Fix rotation in support cubic infill

This commit is contained in:
Lukáš Hejl 2020-09-10 22:30:49 +02:00
parent 7766c6ebc4
commit e9a325c9ca
3 changed files with 9 additions and 9 deletions

View file

@ -392,7 +392,7 @@ void FillAdaptive_Internal::Octree::propagate_point(
Octree::propagate_point(point, child, (depth - 1), cubes_properties); Octree::propagate_point(point, child, (depth - 1), cubes_properties);
} }
std::unique_ptr<FillAdaptive_Internal::Octree> FillSupportCubic::build_octree_for_adaptive_support( std::unique_ptr<FillAdaptive_Internal::Octree> FillSupportCubic::build_octree(
TriangleMesh & triangle_mesh, TriangleMesh & triangle_mesh,
coordf_t line_spacing, coordf_t line_spacing,
const Vec3d & cube_center, const Vec3d & cube_center,
@ -434,7 +434,7 @@ std::unique_ptr<FillAdaptive_Internal::Octree> FillSupportCubic::build_octree_fo
auto octree = std::make_unique<Octree>(std::make_unique<Cube>(cube_center), cube_center, cubes_properties); auto octree = std::make_unique<Octree>(std::make_unique<Cube>(cube_center), cube_center, cubes_properties);
double cube_edge_length = line_spacing; double cube_edge_length = line_spacing / 2.0;
size_t max_depth = octree->cubes_properties.size() - 1; size_t max_depth = octree->cubes_properties.size() - 1;
BoundingBoxf3 mesh_bb = triangle_mesh.bounding_box(); BoundingBoxf3 mesh_bb = triangle_mesh.bounding_box();
Vec3f vertical(0, 0, 1); Vec3f vertical(0, 0, 1);
@ -497,7 +497,7 @@ std::unique_ptr<FillAdaptive_Internal::Octree> FillSupportCubic::build_octree_fo
if(intersect_triangle(cube_center_absolute_arr, dir, vert_0, vert_1, vert_2, &distance, &cord_u, &cord_v) && distance > 0 && distance <= cube_edge_length) if(intersect_triangle(cube_center_absolute_arr, dir, vert_0, vert_1, vert_2, &distance, &cord_u, &cord_v) && distance > 0 && distance <= cube_edge_length)
{ {
Vec3d cube_center_transformed(cube_center_absolute.x(), cube_center_absolute.y(), cube_center_absolute.z() + (cube_edge_length / 2.0)); Vec3d cube_center_transformed(cube_center_absolute.x(), cube_center_absolute.y(), cube_center_absolute.z() + (cube_edge_length / 2.0));
Octree::propagate_point(cube_center_transformed, octree->root_cube.get(), max_depth, octree->cubes_properties); Octree::propagate_point(rotation_matrix * cube_center_transformed, octree->root_cube.get(), max_depth, octree->cubes_properties);
} }
} }
} }

View file

@ -120,7 +120,7 @@ protected:
Polylines &polylines_out); Polylines &polylines_out);
public: public:
static std::unique_ptr<FillAdaptive_Internal::Octree> build_octree_for_adaptive_support( static std::unique_ptr<FillAdaptive_Internal::Octree> build_octree_for(
TriangleMesh & triangle_mesh, TriangleMesh & triangle_mesh,
coordf_t line_spacing, coordf_t line_spacing,
const Vec3d & cube_center, const Vec3d & cube_center,

View file

@ -491,14 +491,14 @@ std::pair<std::unique_ptr<FillAdaptive_Internal::Octree>, std::unique_ptr<FillAd
Vec3d rotation = Vec3d((5.0 * M_PI) / 4.0, Geometry::deg2rad(215.264), M_PI / 6.0); Vec3d rotation = Vec3d((5.0 * M_PI) / 4.0, Geometry::deg2rad(215.264), M_PI / 6.0);
Transform3d rotation_matrix = Geometry::assemble_transform(Vec3d::Zero(), rotation, Vec3d::Ones(), Vec3d::Ones()).inverse(); Transform3d rotation_matrix = Geometry::assemble_transform(Vec3d::Zero(), rotation, Vec3d::Ones(), Vec3d::Ones()).inverse();
if (adaptive_line_spacing != 0.) {
// Rotate mesh and build octree on it with axis-aligned (standart base) cubes // Rotate mesh and build octree on it with axis-aligned (standart base) cubes
mesh.transform(rotation_matrix); mesh.transform(rotation_matrix);
if (adaptive_line_spacing != 0.)
adaptive_fill_octree = FillAdaptive::build_octree(mesh, adaptive_line_spacing, rotation_matrix * mesh_origin); adaptive_fill_octree = FillAdaptive::build_octree(mesh, adaptive_line_spacing, rotation_matrix * mesh_origin);
}
if (support_line_spacing != 0.) if (support_line_spacing != 0.)
support_fill_octree = FillSupportCubic::build_octree_for_adaptive_support(mesh, support_line_spacing, rotation_matrix * mesh_origin, rotation_matrix); support_fill_octree = FillSupportCubic::build_octree(mesh, support_line_spacing, rotation_matrix * mesh_origin, rotation_matrix);
return std::make_pair(std::move(adaptive_fill_octree), std::move(support_fill_octree)); return std::make_pair(std::move(adaptive_fill_octree), std::move(support_fill_octree));
} }