2084{
2085 Cut cut(mo, instance_idx_in, cut_matrix);
2086 add_object(cut.perform_with_plane().front());
2087
2089
2090
2091 for (int id = int(volumes.size())-1; id >= 0; id--)
2092 if (volumes[id]->is_splittable())
2093 volumes[id]->split(1, false);
2094
2096 for (const ModelVolume* volume : volumes) {
2097 assert(volume != nullptr);
2098 m_parts.emplace_back(
Part{GLModel(), MeshRaycaster(volume->mesh()),
true, !volume->is_model_part()});
2099 m_parts.back().glmodel.set_color({ 0.f, 0.f, 1.f, 1.f });
2100 m_parts.back().glmodel.init_from(volume->mesh());
2101
2102
2105 Vec3f norm = (tr.linear().inverse().transpose() *
normal).cast<
float>();
2106 for (
const Vec3f& v : volume->mesh().its.vertices) {
2107 double p = (v -
pos).
dot(norm);
2109 m_parts.back().selected = p > 0.;
2110 break;
2111 }
2112 }
2113 }
2114
2115
2119 if (std::vector<Vec3d> pts = oc.point_per_contour();! pts.empty()) {
2120
2122
2123 for (size_t pt_idx=0; pt_idx<pts.size(); ++pt_idx) {
2124 const Vec3d& pt = pts[pt_idx];
2127
2128
2129
2130 for (
size_t part_id=0; part_id<
m_parts.size(); ++part_id) {
2131 const AABBMesh& aabb =
m_parts[part_id].raycaster.get_aabb_mesh();
2133 for (double d : {-1., 1.}) {
2134 const Vec3d dir_mesh = d * tr.linear().inverse().transpose() *
normal;
2136 AABBMesh::hit_result hit = aabb.query_ray_hit(src, dir_mesh);
2137
2139
2140 if (hit.is_inside()) {
2141
2142 if (d == 1.)
2144 else
2146 }
2147 }
2148 }
2149 }
2150
2151 }
2152
2153
2155}
#define EPSILON
Definition ColorUtils.cpp:64
ModelObject * model_object()
Definition GLGizmoCut.hpp:197
void add_object(const ModelObject *object)
Definition GLGizmoCut.cpp:2068
int m_instance_idx
Definition GLGizmoCut.hpp:207
std::vector< std::pair< std::vector< size_t >, std::vector< size_t > > > m_contour_to_parts
Definition GLGizmoCut.hpp:210
std::vector< std::vector< Vec3d > > m_debug_pts
Definition GLGizmoCut.hpp:214
bool m_valid
Definition GLGizmoCut.hpp:209
std::vector< Part > m_parts
Definition GLGizmoCut.hpp:208
std::vector< Vec3d > m_contour_points
Definition GLGizmoCut.hpp:213
Definition GLGizmoCut.hpp:187
ModelInstancePtrs instances
Definition Model.hpp:390
ModelVolumePtrs volumes
Definition Model.hpp:393
@ Cut
Definition Shortcuts.hpp:33
void translation_transform(Transform3d &transform, const Vec3d &translation)
Definition Geometry.cpp:346
Vec3d pos(const Pt &p)
Definition ReprojectPointsOnMesh.hpp:16
Eigen::Matrix< double, 3, 1, Eigen::DontAlign > Vec3d
Definition Point.hpp:68
Eigen::Transform< double, 3, Eigen::Affine, Eigen::DontAlign > Transform3d
Definition Point.hpp:96
void center(ExPolygonsWithIds &e)
Definition Emboss.cpp:1382
Eigen::Matrix< float, 3, 1, Eigen::DontAlign > Vec3f
Definition Point.hpp:65
Point normal(Point pt, double scale)
Definition TreeSupport.cpp:112
std::vector< ModelVolume * > ModelVolumePtrs
Definition Model.hpp:139
T dot(const boost::geometry::model::d2::point_xy< T > &v1, const boost::geometry::model::d2::point_xy< T > &v2)
Definition ExtrusionSimulator.cpp:154
auto cast(const BoundingBoxBase< Tin > &b)
Definition BoundingBox.hpp:299