Removal of calls to Geometry::assemble_transform()
This commit is contained in:
parent
af509a7f74
commit
569db9689f
@ -427,7 +427,7 @@ int CLI::run(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
// model.objects.front()->cut(0, m_config.opt_float("cut"), ModelObjectCutAttribute::KeepLower | ModelObjectCutAttribute::KeepUpper | ModelObjectCutAttribute::FlipLower);
|
// model.objects.front()->cut(0, m_config.opt_float("cut"), ModelObjectCutAttribute::KeepLower | ModelObjectCutAttribute::KeepUpper | ModelObjectCutAttribute::FlipLower);
|
||||||
model.objects.front()->cut(0, Geometry::assemble_transform(m_config.opt_float("cut")* Vec3d::UnitZ()),
|
model.objects.front()->cut(0, Geometry::translation_transform(m_config.opt_float("cut") * Vec3d::UnitZ()),
|
||||||
ModelObjectCutAttribute::KeepLower | ModelObjectCutAttribute::KeepUpper | ModelObjectCutAttribute::PlaceOnCutUpper);
|
ModelObjectCutAttribute::KeepLower | ModelObjectCutAttribute::KeepUpper | ModelObjectCutAttribute::PlaceOnCutUpper);
|
||||||
#endif
|
#endif
|
||||||
model.delete_object(size_t(0));
|
model.delete_object(size_t(0));
|
||||||
|
@ -398,7 +398,7 @@ Vec3d extract_rotation(const Transform3d& transform)
|
|||||||
#if ENABLE_WORLD_COORDINATE
|
#if ENABLE_WORLD_COORDINATE
|
||||||
Transform3d Transformation::get_offset_matrix() const
|
Transform3d Transformation::get_offset_matrix() const
|
||||||
{
|
{
|
||||||
return assemble_transform(get_offset());
|
return translation_transform(get_offset());
|
||||||
}
|
}
|
||||||
|
|
||||||
static Transform3d extract_rotation_matrix(const Transform3d& trafo)
|
static Transform3d extract_rotation_matrix(const Transform3d& trafo)
|
||||||
|
@ -1260,7 +1260,7 @@ void ModelObject::apply_cut_connectors(const std::string& new_name)
|
|||||||
ModelVolume* new_volume = add_volume(std::move(mesh), ModelVolumeType::NEGATIVE_VOLUME);
|
ModelVolume* new_volume = add_volume(std::move(mesh), ModelVolumeType::NEGATIVE_VOLUME);
|
||||||
|
|
||||||
// Transform the new modifier to be aligned inside the instance
|
// Transform the new modifier to be aligned inside the instance
|
||||||
new_volume->set_transformation(assemble_transform(connector.pos) * connector.rotation_m *
|
new_volume->set_transformation(translation_transform(connector.pos) * connector.rotation_m *
|
||||||
scale_transform(Vec3f(connector.radius, connector.radius, connector.height).cast<double>()));
|
scale_transform(Vec3f(connector.radius, connector.radius, connector.height).cast<double>()));
|
||||||
|
|
||||||
new_volume->cut_info = { connector.attribs.type, connector.radius_tolerance, connector.height_tolerance };
|
new_volume->cut_info = { connector.attribs.type, connector.radius_tolerance, connector.height_tolerance };
|
||||||
@ -1437,7 +1437,7 @@ void ModelObject::process_solid_part_cut(ModelVolume* volume, const Transform3d&
|
|||||||
using namespace Geometry;
|
using namespace Geometry;
|
||||||
|
|
||||||
const Transformation cut_transformation = Transformation(cut_matrix);
|
const Transformation cut_transformation = Transformation(cut_matrix);
|
||||||
const Transform3d invert_cut_matrix = cut_transformation.get_rotation_matrix().inverse() * assemble_transform(-1 * cut_transformation.get_offset());
|
const Transform3d invert_cut_matrix = cut_transformation.get_rotation_matrix().inverse() * translation_transform(-1 * cut_transformation.get_offset());
|
||||||
|
|
||||||
// Transform the mesh by the combined transformation matrix.
|
// Transform the mesh by the combined transformation matrix.
|
||||||
// Flip the triangles in case the composite transformation is left handed.
|
// Flip the triangles in case the composite transformation is left handed.
|
||||||
@ -1505,7 +1505,7 @@ static void reset_instance_transformation(ModelObject* object, size_t src_instan
|
|||||||
obj_instance->set_transformation(Transformation());
|
obj_instance->set_transformation(Transformation());
|
||||||
|
|
||||||
const Vec3d displace = local_displace.isApprox(Vec3d::Zero()) ? Vec3d::Zero() :
|
const Vec3d displace = local_displace.isApprox(Vec3d::Zero()) ? Vec3d::Zero() :
|
||||||
assemble_transform(Vec3d::Zero(), obj_instance->get_rotation()) * local_displace;
|
rotation_transform(obj_instance->get_rotation()) * local_displace;
|
||||||
obj_instance->set_offset(offset + displace);
|
obj_instance->set_offset(offset + displace);
|
||||||
|
|
||||||
Vec3d rotation = Vec3d::Zero();
|
Vec3d rotation = Vec3d::Zero();
|
||||||
@ -1560,15 +1560,19 @@ ModelObjectPtrs ModelObject::cut(size_t instance, const Transform3d& cut_matrix,
|
|||||||
// in the transformation matrix and not applied to the mesh transform.
|
// in the transformation matrix and not applied to the mesh transform.
|
||||||
|
|
||||||
// const auto instance_matrix = instances[instance]->get_matrix(true);
|
// const auto instance_matrix = instances[instance]->get_matrix(true);
|
||||||
|
#if ENABLE_WORLD_COORDINATE
|
||||||
|
const auto instance_matrix = instances[instance]->get_transformation().get_matrix_no_offset();
|
||||||
|
#else
|
||||||
const auto instance_matrix = assemble_transform(
|
const auto instance_matrix = assemble_transform(
|
||||||
Vec3d::Zero(), // don't apply offset
|
Vec3d::Zero(), // don't apply offset
|
||||||
instances[instance]->get_rotation(),
|
instances[instance]->get_rotation(),
|
||||||
instances[instance]->get_scaling_factor(),
|
instances[instance]->get_scaling_factor(),
|
||||||
instances[instance]->get_mirror()
|
instances[instance]->get_mirror()
|
||||||
);
|
);
|
||||||
|
#endif // ENABLE_WORLD_COORDINATE
|
||||||
|
|
||||||
const Transformation cut_transformation = Transformation(cut_matrix);
|
const Transformation cut_transformation = Transformation(cut_matrix);
|
||||||
const Transform3d inverse_cut_matrix = cut_transformation.get_rotation_matrix().inverse() * assemble_transform(-1. * cut_transformation.get_offset());
|
const Transform3d inverse_cut_matrix = cut_transformation.get_rotation_matrix().inverse() * translation_transform(-1. * cut_transformation.get_offset());
|
||||||
|
|
||||||
// Displacement (in instance coordinates) to be applied to place the upper parts
|
// Displacement (in instance coordinates) to be applied to place the upper parts
|
||||||
Vec3d local_displace = Vec3d::Zero();
|
Vec3d local_displace = Vec3d::Zero();
|
||||||
@ -2338,8 +2342,7 @@ arrangement::ArrangePolygon ModelInstance::get_arrange_polygon() const
|
|||||||
|
|
||||||
Vec3d rotation = get_rotation();
|
Vec3d rotation = get_rotation();
|
||||||
rotation.z() = 0.;
|
rotation.z() = 0.;
|
||||||
Transform3d trafo_instance =
|
Transform3d trafo_instance = Geometry::assemble_transform(get_offset().z() * Vec3d::UnitZ(), rotation, get_scaling_factor(), get_mirror());
|
||||||
Geometry::assemble_transform(get_offset().z() * Vec3d::UnitZ(), rotation, get_scaling_factor(), get_mirror());
|
|
||||||
|
|
||||||
Polygon p = get_object()->convex_hull_2d(trafo_instance);
|
Polygon p = get_object()->convex_hull_2d(trafo_instance);
|
||||||
|
|
||||||
|
@ -383,6 +383,16 @@ bool Print::sequential_print_horizontal_clearance_valid(const Print& print, Poly
|
|||||||
// FIXME: Arrangement has different parameters for offsetting (jtMiter, limit 2)
|
// FIXME: Arrangement has different parameters for offsetting (jtMiter, limit 2)
|
||||||
// which causes that the warning will be showed after arrangement with the
|
// which causes that the warning will be showed after arrangement with the
|
||||||
// appropriate object distance. Even if I set this to jtMiter the warning still shows up.
|
// appropriate object distance. Even if I set this to jtMiter the warning still shows up.
|
||||||
|
#if ENABLE_WORLD_COORDINATE
|
||||||
|
Geometry::Transformation trafo = model_instance0->get_transformation();
|
||||||
|
trafo.set_offset({ 0.0, 0.0, model_instance0->get_offset().z() });
|
||||||
|
it_convex_hull = map_model_object_to_convex_hull.emplace_hint(it_convex_hull, model_object_id,
|
||||||
|
offset(print_object->model_object()->convex_hull_2d(trafo.get_matrix()),
|
||||||
|
// Shrink the extruder_clearance_radius a tiny bit, so that if the object arrangement algorithm placed the objects
|
||||||
|
// exactly by satisfying the extruder_clearance_radius, this test will not trigger collision.
|
||||||
|
float(scale_(0.5 * print.config().extruder_clearance_radius.value - BuildVolume::BedEpsilon)),
|
||||||
|
jtRound, scale_(0.1)).front());
|
||||||
|
#else
|
||||||
it_convex_hull = map_model_object_to_convex_hull.emplace_hint(it_convex_hull, model_object_id,
|
it_convex_hull = map_model_object_to_convex_hull.emplace_hint(it_convex_hull, model_object_id,
|
||||||
offset(print_object->model_object()->convex_hull_2d(
|
offset(print_object->model_object()->convex_hull_2d(
|
||||||
Geometry::assemble_transform({ 0.0, 0.0, model_instance0->get_offset().z() }, model_instance0->get_rotation(), model_instance0->get_scaling_factor(), model_instance0->get_mirror())),
|
Geometry::assemble_transform({ 0.0, 0.0, model_instance0->get_offset().z() }, model_instance0->get_rotation(), model_instance0->get_scaling_factor(), model_instance0->get_mirror())),
|
||||||
@ -390,6 +400,7 @@ bool Print::sequential_print_horizontal_clearance_valid(const Print& print, Poly
|
|||||||
// exactly by satisfying the extruder_clearance_radius, this test will not trigger collision.
|
// exactly by satisfying the extruder_clearance_radius, this test will not trigger collision.
|
||||||
float(scale_(0.5 * print.config().extruder_clearance_radius.value - BuildVolume::BedEpsilon)),
|
float(scale_(0.5 * print.config().extruder_clearance_radius.value - BuildVolume::BedEpsilon)),
|
||||||
jtRound, scale_(0.1)).front());
|
jtRound, scale_(0.1)).front());
|
||||||
|
#endif // ENABLE_WORLD_COORDINATE
|
||||||
}
|
}
|
||||||
// Make a copy, so it may be rotated for instances.
|
// Make a copy, so it may be rotated for instances.
|
||||||
Polygon convex_hull0 = it_convex_hull->second;
|
Polygon convex_hull0 = it_convex_hull->second;
|
||||||
|
@ -300,12 +300,17 @@ struct RotfinderBoilerplate {
|
|||||||
TriangleMesh mesh = mo.raw_mesh();
|
TriangleMesh mesh = mo.raw_mesh();
|
||||||
|
|
||||||
ModelInstance *mi = mo.instances[0];
|
ModelInstance *mi = mo.instances[0];
|
||||||
|
#if ENABLE_WORLD_COORDINATE
|
||||||
|
const Geometry::Transformation trafo = mi->get_transformation();
|
||||||
|
Transform3d trafo_instance = trafo.get_scaling_factor_matrix() * trafo.get_mirror_matrix();
|
||||||
|
#else
|
||||||
auto rotation = Vec3d::Zero();
|
auto rotation = Vec3d::Zero();
|
||||||
auto offset = Vec3d::Zero();
|
auto offset = Vec3d::Zero();
|
||||||
Transform3d trafo_instance =
|
Transform3d trafo_instance =
|
||||||
Geometry::assemble_transform(offset, rotation,
|
Geometry::assemble_transform(offset, rotation,
|
||||||
mi->get_scaling_factor(),
|
mi->get_scaling_factor(),
|
||||||
mi->get_mirror());
|
mi->get_mirror());
|
||||||
|
#endif // ENABLE_WORLD_COORDINATE
|
||||||
|
|
||||||
mesh.transform(trafo_instance);
|
mesh.transform(trafo_instance);
|
||||||
|
|
||||||
|
@ -818,7 +818,7 @@ void Bed3D::render_model()
|
|||||||
|
|
||||||
#if ENABLE_RAYCAST_PICKING
|
#if ENABLE_RAYCAST_PICKING
|
||||||
// register for picking
|
// register for picking
|
||||||
register_raycasters_for_picking(m_model.model.get_geometry(), Geometry::assemble_transform(m_model_offset));
|
register_raycasters_for_picking(m_model.model.get_geometry(), Geometry::translation_transform(m_model_offset));
|
||||||
#endif // ENABLE_RAYCAST_PICKING
|
#endif // ENABLE_RAYCAST_PICKING
|
||||||
|
|
||||||
// update extended bounding box
|
// update extended bounding box
|
||||||
@ -835,7 +835,7 @@ void Bed3D::render_model()
|
|||||||
shader->start_using();
|
shader->start_using();
|
||||||
shader->set_uniform("emission_factor", 0.0f);
|
shader->set_uniform("emission_factor", 0.0f);
|
||||||
#if ENABLE_LEGACY_OPENGL_REMOVAL
|
#if ENABLE_LEGACY_OPENGL_REMOVAL
|
||||||
const Transform3d model_matrix = Geometry::assemble_transform(m_model_offset);
|
const Transform3d model_matrix = Geometry::translation_transform(m_model_offset);
|
||||||
shader->set_uniform("view_model_matrix", view_matrix * model_matrix);
|
shader->set_uniform("view_model_matrix", view_matrix * model_matrix);
|
||||||
shader->set_uniform("projection_matrix", projection_matrix);
|
shader->set_uniform("projection_matrix", projection_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();
|
||||||
|
@ -307,7 +307,7 @@ void GLVolume::SinkingContours::render()
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
const GUI::Camera& camera = GUI::wxGetApp().plater()->get_camera();
|
const GUI::Camera& camera = GUI::wxGetApp().plater()->get_camera();
|
||||||
shader->set_uniform("view_model_matrix", camera.get_view_matrix() * Geometry::assemble_transform(m_shift));
|
shader->set_uniform("view_model_matrix", camera.get_view_matrix() * Geometry::translation_transform(m_shift));
|
||||||
shader->set_uniform("projection_matrix", camera.get_projection_matrix());
|
shader->set_uniform("projection_matrix", camera.get_projection_matrix());
|
||||||
#else
|
#else
|
||||||
glsafe(::glPushMatrix());
|
glsafe(::glPushMatrix());
|
||||||
|
@ -61,28 +61,28 @@ void CoordAxes::render(float emission_factor)
|
|||||||
// x axis
|
// x axis
|
||||||
#if ENABLE_LEGACY_OPENGL_REMOVAL
|
#if ENABLE_LEGACY_OPENGL_REMOVAL
|
||||||
m_arrow.set_color(ColorRGBA::X());
|
m_arrow.set_color(ColorRGBA::X());
|
||||||
render_axis(*shader, trafo * Geometry::assemble_transform(m_origin, { 0.0, 0.5 * M_PI, 0.0 }));
|
render_axis(*shader, trafo * Geometry::translation_transform(m_origin) * Geometry::rotation_transform({ 0.0, 0.5 * M_PI, 0.0 }));
|
||||||
#else
|
#else
|
||||||
m_arrow.set_color(-1, ColorRGBA::X());
|
m_arrow.set_color(-1, ColorRGBA::X());
|
||||||
render_axis(Geometry::assemble_transform(m_origin, { 0.0, 0.5 * M_PI, 0.0 }).cast<float>());
|
render_axis(Geometry::translation_transform(m_origin) * Geometry::rotation_transform({ 0.0, 0.5 * M_PI, 0.0 }).cast<float>());
|
||||||
#endif // ENABLE_LEGACY_OPENGL_REMOVAL
|
#endif // ENABLE_LEGACY_OPENGL_REMOVAL
|
||||||
|
|
||||||
// y axis
|
// y axis
|
||||||
#if ENABLE_LEGACY_OPENGL_REMOVAL
|
#if ENABLE_LEGACY_OPENGL_REMOVAL
|
||||||
m_arrow.set_color(ColorRGBA::Y());
|
m_arrow.set_color(ColorRGBA::Y());
|
||||||
render_axis(*shader, trafo * Geometry::assemble_transform(m_origin, { -0.5 * M_PI, 0.0, 0.0 }));
|
render_axis(*shader, trafo * Geometry::translation_transform(m_origin) * Geometry::rotation_transform({ -0.5 * M_PI, 0.0, 0.0 }));
|
||||||
#else
|
#else
|
||||||
m_arrow.set_color(-1, ColorRGBA::Y());
|
m_arrow.set_color(-1, ColorRGBA::Y());
|
||||||
render_axis(Geometry::assemble_transform(m_origin, { -0.5 * M_PI, 0.0, 0.0 }).cast<float>());
|
render_axis(Geometry::translation_transform(m_origin) * Geometry::rotation_transform({ -0.5 * M_PI, 0.0, 0.0 }).cast<float>());
|
||||||
#endif // ENABLE_LEGACY_OPENGL_REMOVAL
|
#endif // ENABLE_LEGACY_OPENGL_REMOVAL
|
||||||
|
|
||||||
// z axis
|
// z axis
|
||||||
#if ENABLE_LEGACY_OPENGL_REMOVAL
|
#if ENABLE_LEGACY_OPENGL_REMOVAL
|
||||||
m_arrow.set_color(ColorRGBA::Z());
|
m_arrow.set_color(ColorRGBA::Z());
|
||||||
render_axis(*shader, trafo * Geometry::assemble_transform(m_origin));
|
render_axis(*shader, trafo * Geometry::translation_transform(m_origin));
|
||||||
#else
|
#else
|
||||||
m_arrow.set_color(-1, ColorRGBA::Z());
|
m_arrow.set_color(-1, ColorRGBA::Z());
|
||||||
render_axis(Geometry::assemble_transform(m_origin).cast<float>());
|
render_axis(Geometry::translation_transform(m_origin).cast<float>());
|
||||||
#endif // ENABLE_LEGACY_OPENGL_REMOVAL
|
#endif // ENABLE_LEGACY_OPENGL_REMOVAL
|
||||||
|
|
||||||
shader->stop_using();
|
shader->stop_using();
|
||||||
|
@ -195,10 +195,10 @@ void GCodeViewer::COG::render()
|
|||||||
|
|
||||||
#if ENABLE_LEGACY_OPENGL_REMOVAL
|
#if ENABLE_LEGACY_OPENGL_REMOVAL
|
||||||
const Camera& camera = wxGetApp().plater()->get_camera();
|
const Camera& camera = wxGetApp().plater()->get_camera();
|
||||||
Transform3d model_matrix = Geometry::assemble_transform(cog());
|
Transform3d model_matrix = Geometry::translation_transform(cog());
|
||||||
if (m_fixed_size) {
|
if (m_fixed_size) {
|
||||||
const double inv_zoom = camera.get_inv_zoom();
|
const double inv_zoom = camera.get_inv_zoom();
|
||||||
model_matrix = model_matrix * Geometry::assemble_transform(Vec3d::Zero(), Vec3d::Zero(), inv_zoom * Vec3d::Ones());
|
model_matrix = model_matrix * Geometry::scale_transform(inv_zoom);
|
||||||
}
|
}
|
||||||
const Transform3d& view_matrix = camera.get_view_matrix();
|
const Transform3d& view_matrix = camera.get_view_matrix();
|
||||||
shader->set_uniform("view_model_matrix", view_matrix * model_matrix);
|
shader->set_uniform("view_model_matrix", view_matrix * model_matrix);
|
||||||
@ -315,7 +315,8 @@ void GCodeViewer::SequentialView::Marker::init()
|
|||||||
void GCodeViewer::SequentialView::Marker::set_world_position(const Vec3f& position)
|
void GCodeViewer::SequentialView::Marker::set_world_position(const Vec3f& position)
|
||||||
{
|
{
|
||||||
m_world_position = position;
|
m_world_position = position;
|
||||||
m_world_transform = (Geometry::assemble_transform((position + m_z_offset * Vec3f::UnitZ()).cast<double>()) * Geometry::assemble_transform(m_model.get_bounding_box().size().z() * Vec3d::UnitZ(), { M_PI, 0.0, 0.0 })).cast<float>();
|
m_world_transform = (Geometry::translation_transform((position + m_z_offset * Vec3f::UnitZ()).cast<double>()) *
|
||||||
|
Geometry::translation_transform(m_model.get_bounding_box().size().z() * Vec3d::UnitZ()) * Geometry::rotation_transform({ M_PI, 0.0, 0.0 })).cast<float>();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GCodeViewer::SequentialView::Marker::render()
|
void GCodeViewer::SequentialView::Marker::render()
|
||||||
@ -1550,7 +1551,8 @@ void GCodeViewer::load_toolpaths(const GCodeProcessorResult& gcode_result)
|
|||||||
const double width = static_cast<double>(1.5f * curr.width);
|
const double width = static_cast<double>(1.5f * curr.width);
|
||||||
const double height = static_cast<double>(1.5f * curr.height);
|
const double height = static_cast<double>(1.5f * curr.height);
|
||||||
|
|
||||||
const Transform3d trafo = Geometry::assemble_transform((curr.position - 0.5f * curr.height * Vec3f::UnitZ()).cast<double>(), Vec3d::Zero(), { width, width, height });
|
const Transform3d trafo = Geometry::translation_transform((curr.position - 0.5f * curr.height * Vec3f::UnitZ()).cast<double>()) *
|
||||||
|
Geometry::scale_transform({ width, width, height });
|
||||||
const Eigen::Matrix<double, 3, 3, Eigen::DontAlign> normal_matrix = trafo.matrix().template block<3, 3>(0, 0).inverse().transpose();
|
const Eigen::Matrix<double, 3, 3, Eigen::DontAlign> normal_matrix = trafo.matrix().template block<3, 3>(0, 0).inverse().transpose();
|
||||||
|
|
||||||
#if ENABLE_LEGACY_OPENGL_REMOVAL
|
#if ENABLE_LEGACY_OPENGL_REMOVAL
|
||||||
|
@ -4318,12 +4318,22 @@ void GLCanvas3D::update_sequential_clearance()
|
|||||||
for (size_t i = 0; i < m_model->objects.size(); ++i) {
|
for (size_t i = 0; i < m_model->objects.size(); ++i) {
|
||||||
ModelObject* model_object = m_model->objects[i];
|
ModelObject* model_object = m_model->objects[i];
|
||||||
ModelInstance* model_instance0 = model_object->instances.front();
|
ModelInstance* model_instance0 = model_object->instances.front();
|
||||||
|
#if ENABLE_WORLD_COORDINATE
|
||||||
|
Geometry::Transformation trafo = model_instance0->get_transformation();
|
||||||
|
trafo.set_offset({ 0.0, 0.0, model_instance0->get_offset().z() });
|
||||||
|
Polygon hull_2d = offset(model_object->convex_hull_2d(trafo.get_matrix()),
|
||||||
|
// Shrink the extruder_clearance_radius a tiny bit, so that if the object arrangement algorithm placed the objects
|
||||||
|
// exactly by satisfying the extruder_clearance_radius, this test will not trigger collision.
|
||||||
|
shrink_factor,
|
||||||
|
jtRound, mitter_limit).front();
|
||||||
|
#else
|
||||||
Polygon hull_2d = offset(model_object->convex_hull_2d(Geometry::assemble_transform({ 0.0, 0.0, model_instance0->get_offset().z() }, model_instance0->get_rotation(),
|
Polygon hull_2d = offset(model_object->convex_hull_2d(Geometry::assemble_transform({ 0.0, 0.0, model_instance0->get_offset().z() }, model_instance0->get_rotation(),
|
||||||
model_instance0->get_scaling_factor(), model_instance0->get_mirror())),
|
model_instance0->get_scaling_factor(), model_instance0->get_mirror())),
|
||||||
// Shrink the extruder_clearance_radius a tiny bit, so that if the object arrangement algorithm placed the objects
|
// Shrink the extruder_clearance_radius a tiny bit, so that if the object arrangement algorithm placed the objects
|
||||||
// exactly by satisfying the extruder_clearance_radius, this test will not trigger collision.
|
// exactly by satisfying the extruder_clearance_radius, this test will not trigger collision.
|
||||||
shrink_factor,
|
shrink_factor,
|
||||||
jtRound, mitter_limit).front();
|
jtRound, mitter_limit).front();
|
||||||
|
#endif // ENABLE_WORLD_COORDINATE
|
||||||
|
|
||||||
Pointf3s& cache_hull_2d = m_sequential_print_clearance.m_hull_2d_cache.emplace_back(Pointf3s());
|
Pointf3s& cache_hull_2d = m_sequential_print_clearance.m_hull_2d_cache.emplace_back(Pointf3s());
|
||||||
cache_hull_2d.reserve(hull_2d.points.size());
|
cache_hull_2d.reserve(hull_2d.points.size());
|
||||||
@ -6461,7 +6471,7 @@ void GLCanvas3D::_render_camera_target()
|
|||||||
shader->start_using();
|
shader->start_using();
|
||||||
#if ENABLE_LEGACY_OPENGL_REMOVAL
|
#if ENABLE_LEGACY_OPENGL_REMOVAL
|
||||||
const Camera& camera = wxGetApp().plater()->get_camera();
|
const Camera& camera = wxGetApp().plater()->get_camera();
|
||||||
shader->set_uniform("view_model_matrix", camera.get_view_matrix() * Geometry::assemble_transform(m_camera_target.target));
|
shader->set_uniform("view_model_matrix", camera.get_view_matrix() * Geometry::translation_transform(m_camera_target.target));
|
||||||
shader->set_uniform("projection_matrix", camera.get_projection_matrix());
|
shader->set_uniform("projection_matrix", camera.get_projection_matrix());
|
||||||
#if ENABLE_GL_CORE_PROFILE
|
#if ENABLE_GL_CORE_PROFILE
|
||||||
const std::array<int, 4>& viewport = camera.get_viewport();
|
const std::array<int, 4>& viewport = camera.get_viewport();
|
||||||
@ -6649,10 +6659,18 @@ void GLCanvas3D::_render_sla_slices()
|
|||||||
|
|
||||||
for (const SLAPrintObject::Instance& inst : obj->instances()) {
|
for (const SLAPrintObject::Instance& inst : obj->instances()) {
|
||||||
const Camera& camera = wxGetApp().plater()->get_camera();
|
const Camera& camera = wxGetApp().plater()->get_camera();
|
||||||
|
#if ENABLE_WORLD_COORDINATE
|
||||||
|
Transform3d view_model_matrix = camera.get_view_matrix() *
|
||||||
|
Geometry::translation_transform({ unscale<double>(inst.shift.x()), unscale<double>(inst.shift.y()), 0.0 }) *
|
||||||
|
Geometry::rotation_transform(inst.rotation * Vec3d::UnitZ());
|
||||||
|
if (obj->is_left_handed())
|
||||||
|
view_model_matrix = view_model_matrix * Geometry::scale_transform({ -1.0f, 1.0f, 1.0f });
|
||||||
|
#else
|
||||||
const Transform3d view_model_matrix = camera.get_view_matrix() *
|
const Transform3d view_model_matrix = camera.get_view_matrix() *
|
||||||
Geometry::assemble_transform(Vec3d(unscale<double>(inst.shift.x()), unscale<double>(inst.shift.y()), 0.0),
|
Geometry::assemble_transform(Vec3d(unscale<double>(inst.shift.x()), unscale<double>(inst.shift.y()), 0.0),
|
||||||
inst.rotation * Vec3d::UnitZ(), Vec3d::Ones(),
|
inst.rotation * Vec3d::UnitZ(), Vec3d::Ones(),
|
||||||
obj->is_left_handed() ? /* The polygons are mirrored by X */ Vec3d(-1.0f, 1.0f, 1.0f) : Vec3d::Ones());
|
obj->is_left_handed() ? /* The polygons are mirrored by X */ Vec3d(-1.0f, 1.0f, 1.0f) : Vec3d::Ones());
|
||||||
|
#endif // ENABLE_WORLD_COORDINATE
|
||||||
|
|
||||||
shader->set_uniform("view_model_matrix", view_model_matrix);
|
shader->set_uniform("view_model_matrix", view_model_matrix);
|
||||||
shader->set_uniform("projection_matrix", camera.get_projection_matrix());
|
shader->set_uniform("projection_matrix", camera.get_projection_matrix());
|
||||||
|
@ -129,11 +129,11 @@ void GLGizmoBase::Grabber::render(float size, const ColorRGBA& render_color, boo
|
|||||||
const Transform3d& view_matrix = camera.get_view_matrix();
|
const Transform3d& view_matrix = camera.get_view_matrix();
|
||||||
const Matrix3d view_matrix_no_offset = view_matrix.matrix().block(0, 0, 3, 3);
|
const Matrix3d view_matrix_no_offset = view_matrix.matrix().block(0, 0, 3, 3);
|
||||||
std::vector<Transform3d> elements_matrices(GRABBER_ELEMENTS_MAX_COUNT, Transform3d::Identity());
|
std::vector<Transform3d> elements_matrices(GRABBER_ELEMENTS_MAX_COUNT, Transform3d::Identity());
|
||||||
elements_matrices[0] = matrix * Geometry::assemble_transform(center, angles, 2.0 * half_size * Vec3d::Ones());
|
elements_matrices[0] = matrix * Geometry::translation_transform(center) * Geometry::rotation_transform(angles) * Geometry::scale_transform(2.0 * half_size);
|
||||||
Transform3d view_model_matrix = view_matrix * elements_matrices[0];
|
Transform3d view_model_matrix = view_matrix * elements_matrices[0];
|
||||||
#else
|
#else
|
||||||
const Transform3d& view_matrix = camera.get_view_matrix();
|
const Transform3d& view_matrix = camera.get_view_matrix();
|
||||||
const Transform3d model_matrix = matrix * Geometry::assemble_transform(center, angles, 2.0 * half_size * Vec3d::Ones());
|
const Transform3d model_matrix = matrix * Geometry::translation_transform(center) * Geometry::rotation_transform(angles) * Geometry::scale_transform(2.0 * half_size);
|
||||||
const Transform3d view_model_matrix = view_matrix * model_matrix;
|
const Transform3d view_model_matrix = view_matrix * model_matrix;
|
||||||
#endif // ENABLE_RAYCAST_PICKING
|
#endif // ENABLE_RAYCAST_PICKING
|
||||||
|
|
||||||
@ -171,55 +171,55 @@ void GLGizmoBase::Grabber::render(float size, const ColorRGBA& render_color, boo
|
|||||||
#if ENABLE_LEGACY_OPENGL_REMOVAL
|
#if ENABLE_LEGACY_OPENGL_REMOVAL
|
||||||
if ((int(extensions) & int(GLGizmoBase::EGrabberExtension::PosX)) != 0) {
|
if ((int(extensions) & int(GLGizmoBase::EGrabberExtension::PosX)) != 0) {
|
||||||
#if ENABLE_RAYCAST_PICKING
|
#if ENABLE_RAYCAST_PICKING
|
||||||
elements_matrices[1] = elements_matrices[0] * Geometry::assemble_transform(Vec3d::UnitX(), Vec3d(0.0, 0.5 * double(PI), 0.0));
|
elements_matrices[1] = elements_matrices[0] * Geometry::translation_transform(Vec3d::UnitX()) * Geometry::rotation_transform({ 0.0, 0.5 * double(PI), 0.0 });
|
||||||
render_extension(elements_matrices[1]);
|
render_extension(elements_matrices[1]);
|
||||||
#else
|
#else
|
||||||
shader->set_uniform("view_model_matrix", view_model_matrix * Geometry::assemble_transform(Vec3d::UnitX(), Vec3d(0.0, 0.5 * double(PI), 0.0)));
|
shader->set_uniform("view_model_matrix", view_model_matrix * Geometry::translation_transform(Vec3d::UnitX()) * Geometry::rotation_transform({ 0.0, 0.5 * double(PI), 0.0 }));
|
||||||
s_cone.render();
|
s_cone.render();
|
||||||
#endif // ENABLE_RAYCAST_PICKING
|
#endif // ENABLE_RAYCAST_PICKING
|
||||||
}
|
}
|
||||||
if ((int(extensions) & int(GLGizmoBase::EGrabberExtension::NegX)) != 0) {
|
if ((int(extensions) & int(GLGizmoBase::EGrabberExtension::NegX)) != 0) {
|
||||||
#if ENABLE_RAYCAST_PICKING
|
#if ENABLE_RAYCAST_PICKING
|
||||||
elements_matrices[2] = elements_matrices[0] * Geometry::assemble_transform(-Vec3d::UnitX(), Vec3d(0.0, -0.5 * double(PI), 0.0));
|
elements_matrices[2] = elements_matrices[0] * Geometry::translation_transform(-Vec3d::UnitX()) * Geometry::rotation_transform({ 0.0, -0.5 * double(PI), 0.0 });
|
||||||
render_extension(elements_matrices[2]);
|
render_extension(elements_matrices[2]);
|
||||||
#else
|
#else
|
||||||
shader->set_uniform("view_model_matrix", view_model_matrix * Geometry::assemble_transform(-Vec3d::UnitX(), Vec3d(0.0, -0.5 * double(PI), 0.0)));
|
shader->set_uniform("view_model_matrix", view_model_matrix * Geometry::translation_transform(-Vec3d::UnitX()) * Geometry::rotation_transform({ 0.0, -0.5 * double(PI), 0.0 }));
|
||||||
s_cone.render();
|
s_cone.render();
|
||||||
#endif // ENABLE_RAYCAST_PICKING
|
#endif // ENABLE_RAYCAST_PICKING
|
||||||
}
|
}
|
||||||
if ((int(extensions) & int(GLGizmoBase::EGrabberExtension::PosY)) != 0) {
|
if ((int(extensions) & int(GLGizmoBase::EGrabberExtension::PosY)) != 0) {
|
||||||
#if ENABLE_RAYCAST_PICKING
|
#if ENABLE_RAYCAST_PICKING
|
||||||
elements_matrices[3] = elements_matrices[0] * Geometry::assemble_transform(Vec3d::UnitY(), Vec3d(-0.5 * double(PI), 0.0, 0.0));
|
elements_matrices[3] = elements_matrices[0] * Geometry::translation_transform(Vec3d::UnitY()) * Geometry::rotation_transform({ -0.5 * double(PI), 0.0, 0.0 });
|
||||||
render_extension(elements_matrices[3]);
|
render_extension(elements_matrices[3]);
|
||||||
#else
|
#else
|
||||||
shader->set_uniform("view_model_matrix", view_model_matrix * Geometry::assemble_transform(Vec3d::UnitY(), Vec3d(-0.5 * double(PI), 0.0, 0.0)));
|
shader->set_uniform("view_model_matrix", view_model_matrix * Geometry::translation_transform(Vec3d::UnitY()) * Geometry::rotation_transform({ -0.5 * double(PI), 0.0, 0.0 }));
|
||||||
s_cone.render();
|
s_cone.render();
|
||||||
#endif // ENABLE_RAYCAST_PICKING
|
#endif // ENABLE_RAYCAST_PICKING
|
||||||
}
|
}
|
||||||
if ((int(extensions) & int(GLGizmoBase::EGrabberExtension::NegY)) != 0) {
|
if ((int(extensions) & int(GLGizmoBase::EGrabberExtension::NegY)) != 0) {
|
||||||
#if ENABLE_RAYCAST_PICKING
|
#if ENABLE_RAYCAST_PICKING
|
||||||
elements_matrices[4] = elements_matrices[0] * Geometry::assemble_transform(-Vec3d::UnitY(), Vec3d(0.5 * double(PI), 0.0, 0.0));
|
elements_matrices[4] = elements_matrices[0] * Geometry::translation_transform(-Vec3d::UnitY()) * Geometry::rotation_transform({ 0.5 * double(PI), 0.0, 0.0 });
|
||||||
render_extension(elements_matrices[4]);
|
render_extension(elements_matrices[4]);
|
||||||
#else
|
#else
|
||||||
shader->set_uniform("view_model_matrix", view_model_matrix * Geometry::assemble_transform(-Vec3d::UnitY(), Vec3d(0.5 * double(PI), 0.0, 0.0)));
|
shader->set_uniform("view_model_matrix", view_model_matrix* Geometry::translation_transform(-Vec3d::UnitY())* Geometry::rotation_transform({ 0.5 * double(PI), 0.0, 0.0 }));
|
||||||
s_cone.render();
|
s_cone.render();
|
||||||
#endif // ENABLE_RAYCAST_PICKING
|
#endif // ENABLE_RAYCAST_PICKING
|
||||||
}
|
}
|
||||||
if ((int(extensions) & int(GLGizmoBase::EGrabberExtension::PosZ)) != 0) {
|
if ((int(extensions) & int(GLGizmoBase::EGrabberExtension::PosZ)) != 0) {
|
||||||
#if ENABLE_RAYCAST_PICKING
|
#if ENABLE_RAYCAST_PICKING
|
||||||
elements_matrices[5] = elements_matrices[0] * Geometry::assemble_transform(Vec3d::UnitZ());
|
elements_matrices[5] = elements_matrices[0] * Geometry::translation_transform(Vec3d::UnitZ());
|
||||||
render_extension(elements_matrices[5]);
|
render_extension(elements_matrices[5]);
|
||||||
#else
|
#else
|
||||||
shader->set_uniform("view_model_matrix", view_model_matrix * Geometry::assemble_transform(Vec3d::UnitZ()));
|
shader->set_uniform("view_model_matrix", view_model_matrix* Geometry::translation_transform(Vec3d::UnitZ()));
|
||||||
s_cone.render();
|
s_cone.render();
|
||||||
#endif // ENABLE_RAYCAST_PICKING
|
#endif // ENABLE_RAYCAST_PICKING
|
||||||
}
|
}
|
||||||
if ((int(extensions) & int(GLGizmoBase::EGrabberExtension::NegZ)) != 0) {
|
if ((int(extensions) & int(GLGizmoBase::EGrabberExtension::NegZ)) != 0) {
|
||||||
#if ENABLE_RAYCAST_PICKING
|
#if ENABLE_RAYCAST_PICKING
|
||||||
elements_matrices[6] = elements_matrices[0] * Geometry::assemble_transform(-Vec3d::UnitZ(), Vec3d(double(PI), 0.0, 0.0));
|
elements_matrices[6] = elements_matrices[0] * Geometry::translation_transform(-Vec3d::UnitZ()) * Geometry::rotation_transform({ double(PI), 0.0, 0.0 });
|
||||||
render_extension(elements_matrices[6]);
|
render_extension(elements_matrices[6]);
|
||||||
#else
|
#else
|
||||||
shader->set_uniform("view_model_matrix", view_model_matrix * Geometry::assemble_transform(-Vec3d::UnitZ(), Vec3d(double(PI), 0.0, 0.0)));
|
shader->set_uniform("view_model_matrix", view_model_matrix* Geometry::translation_transform(-Vec3d::UnitZ())* Geometry::rotation_transform({ double(PI), 0.0, 0.0 }));
|
||||||
s_cone.render();
|
s_cone.render();
|
||||||
#endif // ENABLE_RAYCAST_PICKING
|
#endif // ENABLE_RAYCAST_PICKING
|
||||||
}
|
}
|
||||||
|
@ -337,7 +337,7 @@ void GLGizmoCut3D::shift_cut_z(double delta)
|
|||||||
|
|
||||||
void GLGizmoCut3D::rotate_vec3d_around_plane_center(Vec3d&vec)
|
void GLGizmoCut3D::rotate_vec3d_around_plane_center(Vec3d&vec)
|
||||||
{
|
{
|
||||||
vec = Transformation( assemble_transform(m_plane_center) * m_rotation_m * assemble_transform(-m_plane_center)).get_matrix() * vec;
|
vec = Transformation(translation_transform(m_plane_center) * m_rotation_m * translation_transform(-m_plane_center)).get_matrix() * vec;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GLGizmoCut3D::put_connectors_on_cut_plane(const Vec3d& cp_normal, double cp_offset)
|
void GLGizmoCut3D::put_connectors_on_cut_plane(const Vec3d& cp_normal, double cp_offset)
|
||||||
@ -737,10 +737,10 @@ void GLGizmoCut3D::render_cut_plane_grabbers()
|
|||||||
{
|
{
|
||||||
const BoundingBoxf3 tbb = transformed_bounding_box(m_plane_center);
|
const BoundingBoxf3 tbb = transformed_bounding_box(m_plane_center);
|
||||||
if (tbb.min.z() <= 0.0)
|
if (tbb.min.z() <= 0.0)
|
||||||
render_model(m_cone.model, color, view_matrix * assemble_transform(-offset, PI * Vec3d::UnitX(), cone_scale));
|
render_model(m_cone.model, color, view_matrix * translation_transform(-offset) * rotation_transform(PI * Vec3d::UnitX()) * scale_transform(cone_scale));
|
||||||
|
|
||||||
if (tbb.max.z() >= 0.0)
|
if (tbb.max.z() >= 0.0)
|
||||||
render_model(m_cone.model, color, view_matrix * assemble_transform(offset, Vec3d::Zero(), cone_scale));
|
render_model(m_cone.model, color, view_matrix * translation_transform(offset) * scale_transform(cone_scale));
|
||||||
}
|
}
|
||||||
|
|
||||||
// render top sphere for X/Y grabbers
|
// render top sphere for X/Y grabbers
|
||||||
@ -750,7 +750,7 @@ void GLGizmoCut3D::render_cut_plane_grabbers()
|
|||||||
size = m_dragging ? double(grabber.get_dragging_half_size(mean_size)) : double(grabber.get_half_size(mean_size));
|
size = m_dragging ? double(grabber.get_dragging_half_size(mean_size)) : double(grabber.get_half_size(mean_size));
|
||||||
color = m_hover_id == Y ? complementary(ColorRGBA::GREEN()) :
|
color = m_hover_id == Y ? complementary(ColorRGBA::GREEN()) :
|
||||||
m_hover_id == X ? complementary(ColorRGBA::RED()) : ColorRGBA::GRAY();
|
m_hover_id == X ? complementary(ColorRGBA::RED()) : ColorRGBA::GRAY();
|
||||||
render_model(m_sphere.model, color, view_matrix * assemble_transform(m_grabber_connection_len * Vec3d::UnitZ(), Vec3d::Zero(), size * Vec3d::Ones()));
|
render_model(m_sphere.model, color, view_matrix * translation_transform(m_grabber_connection_len * Vec3d::UnitZ()) * scale_transform(size));
|
||||||
}
|
}
|
||||||
|
|
||||||
// render X grabber
|
// render X grabber
|
||||||
@ -767,9 +767,9 @@ void GLGizmoCut3D::render_cut_plane_grabbers()
|
|||||||
}
|
}
|
||||||
|
|
||||||
offset = Vec3d(0.0, 1.25 * size, m_grabber_connection_len);
|
offset = Vec3d(0.0, 1.25 * size, m_grabber_connection_len);
|
||||||
render_model(m_cone.model, color, view_matrix * assemble_transform(offset, -0.5 * PI * Vec3d::UnitX(), cone_scale));
|
render_model(m_cone.model, color, view_matrix * translation_transform(offset) * rotation_transform(-0.5 * PI * Vec3d::UnitX()) * scale_transform(cone_scale));
|
||||||
offset = Vec3d(0.0, -1.25 * size, m_grabber_connection_len);
|
offset = Vec3d(0.0, -1.25 * size, m_grabber_connection_len);
|
||||||
render_model(m_cone.model, color, view_matrix * assemble_transform(offset, 0.5 * PI * Vec3d::UnitX(), cone_scale));
|
render_model(m_cone.model, color, view_matrix * translation_transform(offset) * rotation_transform(0.5 * PI * Vec3d::UnitX()) * scale_transform(cone_scale));
|
||||||
}
|
}
|
||||||
|
|
||||||
// render Y grabber
|
// render Y grabber
|
||||||
@ -786,9 +786,9 @@ void GLGizmoCut3D::render_cut_plane_grabbers()
|
|||||||
}
|
}
|
||||||
|
|
||||||
offset = Vec3d(1.25 * size, 0.0, m_grabber_connection_len);
|
offset = Vec3d(1.25 * size, 0.0, m_grabber_connection_len);
|
||||||
render_model(m_cone.model, color, view_matrix * assemble_transform(offset, 0.5 * PI * Vec3d::UnitY(), cone_scale));
|
render_model(m_cone.model, color, view_matrix * translation_transform(offset) * rotation_transform(0.5 * PI * Vec3d::UnitY()) * scale_transform(cone_scale));
|
||||||
offset = Vec3d(-1.25 * size, 0.0, m_grabber_connection_len);
|
offset = Vec3d(-1.25 * size, 0.0, m_grabber_connection_len);
|
||||||
render_model(m_cone.model, color, view_matrix * assemble_transform(offset, -0.5 * PI * Vec3d::UnitY(), cone_scale));
|
render_model(m_cone.model, color, view_matrix * translation_transform(offset)* rotation_transform(-0.5 * PI * Vec3d::UnitY()) * scale_transform(cone_scale));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -979,19 +979,19 @@ void GLGizmoCut3D::update_raycasters_for_picking_transform()
|
|||||||
Vec3d scale = Vec3d(0.75 * size, 0.75 * size, 1.8 * size);
|
Vec3d scale = Vec3d(0.75 * size, 0.75 * size, 1.8 * size);
|
||||||
|
|
||||||
Vec3d offset = Vec3d(0.0, 1.25 * size, m_grabber_connection_len);
|
Vec3d offset = Vec3d(0.0, 1.25 * size, m_grabber_connection_len);
|
||||||
m_raycasters[0]->set_transform(trafo * assemble_transform(offset, -0.5 * PI * Vec3d::UnitX(), scale));
|
m_raycasters[0]->set_transform(trafo * translation_transform(offset) * rotation_transform(-0.5 * PI * Vec3d::UnitX()) * scale_transform(scale));
|
||||||
offset = Vec3d(0.0, -1.25 * size, m_grabber_connection_len);
|
offset = Vec3d(0.0, -1.25 * size, m_grabber_connection_len);
|
||||||
m_raycasters[1]->set_transform(trafo * assemble_transform(offset, 0.5 * PI * Vec3d::UnitX(), scale));
|
m_raycasters[1]->set_transform(trafo * translation_transform(offset) * rotation_transform(0.5 * PI * Vec3d::UnitX()) * scale_transform(scale));
|
||||||
|
|
||||||
offset = Vec3d(1.25 * size, 0.0, m_grabber_connection_len);
|
offset = Vec3d(1.25 * size, 0.0, m_grabber_connection_len);
|
||||||
m_raycasters[2]->set_transform(trafo * assemble_transform(offset, 0.5 * PI * Vec3d::UnitY(), scale));
|
m_raycasters[2]->set_transform(trafo * translation_transform(offset) * rotation_transform(0.5 * PI * Vec3d::UnitY()) * scale_transform(scale));
|
||||||
offset = Vec3d(-1.25 * size, 0.0, m_grabber_connection_len);
|
offset = Vec3d(-1.25 * size, 0.0, m_grabber_connection_len);
|
||||||
m_raycasters[3]->set_transform(trafo * assemble_transform(offset, -0.5 * PI * Vec3d::UnitY(), scale));
|
m_raycasters[3]->set_transform(trafo * translation_transform(offset) * rotation_transform(-0.5 * PI * Vec3d::UnitY()) * scale_transform(scale));
|
||||||
|
|
||||||
offset = 1.25 * size * Vec3d::UnitZ();
|
offset = 1.25 * size * Vec3d::UnitZ();
|
||||||
m_raycasters[4]->set_transform(trafo * scale_transform(size));
|
m_raycasters[4]->set_transform(trafo * scale_transform(size));
|
||||||
m_raycasters[5]->set_transform(trafo * assemble_transform(-offset, PI * Vec3d::UnitX(), scale));
|
m_raycasters[5]->set_transform(trafo * translation_transform(-offset) * rotation_transform(PI * Vec3d::UnitX()) * scale_transform(scale));
|
||||||
m_raycasters[6]->set_transform(trafo * assemble_transform(offset, Vec3d::Zero(), scale));
|
m_raycasters[6]->set_transform(trafo * translation_transform(offset) * scale_transform(scale));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1245,8 +1245,8 @@ BoundingBoxf3 GLGizmoCut3D::transformed_bounding_box(const Vec3d& plane_center,
|
|||||||
Vec3d cut_center_offset = plane_center - instance_offset;
|
Vec3d cut_center_offset = plane_center - instance_offset;
|
||||||
cut_center_offset[Z] -= sel_info->get_sla_shift();
|
cut_center_offset[Z] -= sel_info->get_sla_shift();
|
||||||
|
|
||||||
const auto move = assemble_transform(-cut_center_offset);
|
const auto move = translation_transform(-cut_center_offset);
|
||||||
const auto move2 = assemble_transform(plane_center);
|
const auto move2 = translation_transform(plane_center);
|
||||||
|
|
||||||
const auto cut_matrix = (revert_move ? move2 : Transform3d::Identity()) * m_rotation_m.inverse() * move;
|
const auto cut_matrix = (revert_move ? move2 : Transform3d::Identity()) * m_rotation_m.inverse() * move;
|
||||||
|
|
||||||
@ -1257,12 +1257,16 @@ BoundingBoxf3 GLGizmoCut3D::transformed_bounding_box(const Vec3d& plane_center,
|
|||||||
// respect just to the solid parts for FFF and ignore pad and supports for SLA
|
// respect just to the solid parts for FFF and ignore pad and supports for SLA
|
||||||
if (!volume->is_modifier && !volume->is_sla_pad() && !volume->is_sla_support()) {
|
if (!volume->is_modifier && !volume->is_sla_pad() && !volume->is_sla_support()) {
|
||||||
|
|
||||||
|
#if ENABLE_WORLD_COORDINATE
|
||||||
|
const auto instance_matrix = volume->get_instance_transformation().get_matrix_no_offset();
|
||||||
|
#else
|
||||||
const auto instance_matrix = assemble_transform(
|
const auto instance_matrix = assemble_transform(
|
||||||
Vec3d::Zero(), // don't apply offset
|
Vec3d::Zero(), // don't apply offset
|
||||||
volume->get_instance_rotation().cwiseProduct(Vec3d(1.0, 1.0, 1.0)),
|
volume->get_instance_rotation().cwiseProduct(Vec3d(1.0, 1.0, 1.0)),
|
||||||
volume->get_instance_scaling_factor(),
|
volume->get_instance_scaling_factor(),
|
||||||
volume->get_instance_mirror()
|
volume->get_instance_mirror()
|
||||||
);
|
);
|
||||||
|
#endif // ENABLE_WORLD_COORDINATE
|
||||||
|
|
||||||
auto volume_trafo = instance_matrix * volume->get_volume_transformation().get_matrix();
|
auto volume_trafo = instance_matrix * volume->get_volume_transformation().get_matrix();
|
||||||
|
|
||||||
@ -1794,11 +1798,18 @@ void GLGizmoCut3D::on_render_input_window(float x, float y, float bottom_limit)
|
|||||||
Transform3d GLGizmoCut3D::get_volume_transformation(const ModelVolume* volume) const
|
Transform3d GLGizmoCut3D::get_volume_transformation(const ModelVolume* volume) const
|
||||||
{
|
{
|
||||||
bool is_prizm_dowel = m_connector_type == CutConnectorType::Dowel && m_connector_style == size_t(CutConnectorStyle::Prizm);
|
bool is_prizm_dowel = m_connector_type == CutConnectorType::Dowel && m_connector_style == size_t(CutConnectorStyle::Prizm);
|
||||||
|
#if ENABLE_WORLD_COORDINATE
|
||||||
|
const Transform3d connector_trafo = is_prizm_dowel ?
|
||||||
|
Geometry::translation_transform(-m_connector_depth_ratio * Vec3d::UnitZ()) * m_rotation_m * Geometry::scale_transform({ 0.5 * m_connector_size, 0.5 * m_connector_size, 2 * m_connector_depth_ratio }) :
|
||||||
|
m_rotation_m * Geometry::scale_transform({ 0.5 * m_connector_size, 0.5 * m_connector_size, m_connector_depth_ratio });
|
||||||
|
|
||||||
|
#else
|
||||||
const Transform3d connector_trafo = assemble_transform(
|
const Transform3d connector_trafo = assemble_transform(
|
||||||
is_prizm_dowel ? Vec3d(0.0, 0.0, -m_connector_depth_ratio) : Vec3d::Zero(),
|
is_prizm_dowel ? Vec3d(0.0, 0.0, -m_connector_depth_ratio) : Vec3d::Zero(),
|
||||||
Transformation(m_rotation_m).get_rotation(),
|
Transformation(m_rotation_m).get_rotation(),
|
||||||
Vec3d(0.5*m_connector_size, 0.5*m_connector_size, is_prizm_dowel ? 2 * m_connector_depth_ratio : m_connector_depth_ratio),
|
Vec3d(0.5*m_connector_size, 0.5*m_connector_size, is_prizm_dowel ? 2 * m_connector_depth_ratio : m_connector_depth_ratio),
|
||||||
Vec3d::Ones());
|
Vec3d::Ones());
|
||||||
|
#endif // ENABLE_WORLD_COORDINATE
|
||||||
const Vec3d connector_bb = m_connector_mesh.transformed_bounding_box(connector_trafo).size();
|
const Vec3d connector_bb = m_connector_mesh.transformed_bounding_box(connector_trafo).size();
|
||||||
|
|
||||||
const Vec3d bb = volume->mesh().bounding_box().size();
|
const Vec3d bb = volume->mesh().bounding_box().size();
|
||||||
@ -1812,7 +1823,7 @@ Transform3d GLGizmoCut3D::get_volume_transformation(const ModelVolume* volume) c
|
|||||||
const Vec3d offset(vol_trans.x() * border_scale.x(), vol_trans.y() * border_scale.y(), vol_trans.z() * border_scale.z());
|
const Vec3d offset(vol_trans.x() * border_scale.x(), vol_trans.y() * border_scale.y(), vol_trans.z() * border_scale.z());
|
||||||
|
|
||||||
// scale and translate volume to suppress to put connectors too close to the border
|
// scale and translate volume to suppress to put connectors too close to the border
|
||||||
return assemble_transform(offset, Vec3d::Zero(), Vec3d::Ones() - border_scale, Vec3d::Ones()) * vol_matrix;
|
return translation_transform(offset) * scale_transform(Vec3d::Ones() - border_scale) * vol_matrix;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GLGizmoCut3D::is_conflict_for_connector(size_t idx, const CutConnectors& connectors, const Vec3d cur_pos)
|
bool GLGizmoCut3D::is_conflict_for_connector(size_t idx, const CutConnectors& connectors, const Vec3d cur_pos)
|
||||||
@ -1979,7 +1990,7 @@ void GLGizmoCut3D::perform_cut(const Selection& selection)
|
|||||||
// update connectors pos as offset of its center before cut performing
|
// update connectors pos as offset of its center before cut performing
|
||||||
apply_connectors_in_model(mo, create_dowels_as_separate_object);
|
apply_connectors_in_model(mo, create_dowels_as_separate_object);
|
||||||
|
|
||||||
plater->cut(object_idx, instance_idx, assemble_transform(cut_center_offset) * m_rotation_m,
|
plater->cut(object_idx, instance_idx, translation_transform(cut_center_offset) * m_rotation_m,
|
||||||
only_if(has_connectors ? true : m_keep_upper, ModelObjectCutAttribute::KeepUpper) |
|
only_if(has_connectors ? true : m_keep_upper, ModelObjectCutAttribute::KeepUpper) |
|
||||||
only_if(has_connectors ? true : m_keep_lower, ModelObjectCutAttribute::KeepLower) |
|
only_if(has_connectors ? true : m_keep_lower, ModelObjectCutAttribute::KeepLower) |
|
||||||
only_if(m_place_on_cut_upper, ModelObjectCutAttribute::PlaceOnCutUpper) |
|
only_if(m_place_on_cut_upper, ModelObjectCutAttribute::PlaceOnCutUpper) |
|
||||||
@ -2001,7 +2012,7 @@ bool GLGizmoCut3D::unproject_on_cut_plane(const Vec2d& mouse_position, std::pair
|
|||||||
const ModelObject* mo = m_c->selection_info()->model_object();
|
const ModelObject* mo = m_c->selection_info()->model_object();
|
||||||
const ModelInstance* mi = mo->instances[m_c->selection_info()->get_active_instance()];
|
const ModelInstance* mi = mo->instances[m_c->selection_info()->get_active_instance()];
|
||||||
const Transform3d instance_trafo = sla_shift > 0.f ?
|
const Transform3d instance_trafo = sla_shift > 0.f ?
|
||||||
assemble_transform(Vec3d(0.0, 0.0, sla_shift)) * mi->get_transformation().get_matrix() : mi->get_transformation().get_matrix();
|
translation_transform(sla_shift * Vec3d::UnitZ()) * mi->get_transformation().get_matrix() : mi->get_transformation().get_matrix();
|
||||||
const Camera& camera = wxGetApp().plater()->get_camera();
|
const Camera& camera = wxGetApp().plater()->get_camera();
|
||||||
|
|
||||||
int mesh_id = -1;
|
int mesh_id = -1;
|
||||||
|
@ -117,7 +117,7 @@ void GLGizmoFlatten::on_render()
|
|||||||
const Transform3d& inst_matrix = selection.get_first_volume()->get_instance_transformation().get_matrix();
|
const Transform3d& inst_matrix = selection.get_first_volume()->get_instance_transformation().get_matrix();
|
||||||
#if ENABLE_LEGACY_OPENGL_REMOVAL
|
#if ENABLE_LEGACY_OPENGL_REMOVAL
|
||||||
const Camera& camera = wxGetApp().plater()->get_camera();
|
const Camera& camera = wxGetApp().plater()->get_camera();
|
||||||
const Transform3d model_matrix = Geometry::assemble_transform(selection.get_first_volume()->get_sla_shift_z() * Vec3d::UnitZ()) * inst_matrix;
|
const Transform3d model_matrix = Geometry::translation_transform(selection.get_first_volume()->get_sla_shift_z() * Vec3d::UnitZ()) * inst_matrix;
|
||||||
const Transform3d view_model_matrix = camera.get_view_matrix() * model_matrix;
|
const Transform3d view_model_matrix = camera.get_view_matrix() * model_matrix;
|
||||||
|
|
||||||
shader->set_uniform("view_model_matrix", view_model_matrix);
|
shader->set_uniform("view_model_matrix", view_model_matrix);
|
||||||
@ -168,7 +168,7 @@ void GLGizmoFlatten::on_register_raycasters_for_picking()
|
|||||||
|
|
||||||
if (!m_planes.empty()) {
|
if (!m_planes.empty()) {
|
||||||
const Selection& selection = m_parent.get_selection();
|
const Selection& selection = m_parent.get_selection();
|
||||||
const Transform3d matrix = Geometry::assemble_transform(selection.get_first_volume()->get_sla_shift_z() * Vec3d::UnitZ()) *
|
const Transform3d matrix = Geometry::translation_transform(selection.get_first_volume()->get_sla_shift_z() * Vec3d::UnitZ()) *
|
||||||
selection.get_first_volume()->get_instance_transformation().get_matrix();
|
selection.get_first_volume()->get_instance_transformation().get_matrix();
|
||||||
|
|
||||||
for (int i = 0; i < (int)m_planes.size(); ++i) {
|
for (int i = 0; i < (int)m_planes.size(); ++i) {
|
||||||
@ -204,7 +204,7 @@ void GLGizmoFlatten::on_render_for_picking()
|
|||||||
#if ENABLE_LEGACY_OPENGL_REMOVAL
|
#if ENABLE_LEGACY_OPENGL_REMOVAL
|
||||||
const Camera& camera = wxGetApp().plater()->get_camera();
|
const Camera& camera = wxGetApp().plater()->get_camera();
|
||||||
const Transform3d view_model_matrix = camera.get_view_matrix() *
|
const Transform3d view_model_matrix = camera.get_view_matrix() *
|
||||||
Geometry::assemble_transform(selection.get_first_volume()->get_sla_shift_z() * Vec3d::UnitZ()) * m;
|
Geometry::translation_transform(selection.get_first_volume()->get_sla_shift_z() * Vec3d::UnitZ()) * m;
|
||||||
|
|
||||||
shader->set_uniform("view_model_matrix", view_model_matrix);
|
shader->set_uniform("view_model_matrix", view_model_matrix);
|
||||||
shader->set_uniform("projection_matrix", camera.get_projection_matrix());
|
shader->set_uniform("projection_matrix", camera.get_projection_matrix());
|
||||||
@ -348,7 +348,7 @@ void GLGizmoFlatten::update_planes()
|
|||||||
// And yes, it is a nasty thing to do. Whoever has time is free to refactor.
|
// And yes, it is a nasty thing to do. Whoever has time is free to refactor.
|
||||||
Vec3d bb_size = BoundingBoxf3(polygon).size();
|
Vec3d bb_size = BoundingBoxf3(polygon).size();
|
||||||
float sf = std::min(1./bb_size(0), 1./bb_size(1));
|
float sf = std::min(1./bb_size(0), 1./bb_size(1));
|
||||||
Transform3d tr = Geometry::assemble_transform(Vec3d::Zero(), Vec3d::Zero(), Vec3d(sf, sf, 1.f));
|
Transform3d tr = Geometry::scale_transform({ sf, sf, 1.f });
|
||||||
polygon = transform(polygon, tr);
|
polygon = transform(polygon, tr);
|
||||||
polygon = Slic3r::Geometry::convex_hull(polygon);
|
polygon = Slic3r::Geometry::convex_hull(polygon);
|
||||||
polygon = transform(polygon, tr.inverse());
|
polygon = transform(polygon, tr.inverse());
|
||||||
|
@ -430,7 +430,7 @@ double GLGizmoMove3D::calc_projection(const UpdateData& data) const
|
|||||||
#if ENABLE_LEGACY_OPENGL_REMOVAL
|
#if ENABLE_LEGACY_OPENGL_REMOVAL
|
||||||
Transform3d GLGizmoMove3D::local_transform(const Selection& selection) const
|
Transform3d GLGizmoMove3D::local_transform(const Selection& selection) const
|
||||||
{
|
{
|
||||||
Transform3d ret = Geometry::assemble_transform(m_center);
|
Transform3d ret = Geometry::translation_transform(m_center);
|
||||||
if (!wxGetApp().obj_manipul()->is_world_coordinates()) {
|
if (!wxGetApp().obj_manipul()->is_world_coordinates()) {
|
||||||
const GLVolume& v = *selection.get_first_volume();
|
const GLVolume& v = *selection.get_first_volume();
|
||||||
Transform3d orient_matrix = v.get_instance_transformation().get_rotation_matrix();
|
Transform3d orient_matrix = v.get_instance_transformation().get_rotation_matrix();
|
||||||
|
@ -364,8 +364,8 @@ void GLGizmoPainterBase::render_cursor_sphere(const Transform3d& trafo) const
|
|||||||
|
|
||||||
const Camera& camera = wxGetApp().plater()->get_camera();
|
const Camera& camera = wxGetApp().plater()->get_camera();
|
||||||
Transform3d view_model_matrix = camera.get_view_matrix() * trafo *
|
Transform3d view_model_matrix = camera.get_view_matrix() * trafo *
|
||||||
Geometry::assemble_transform(m_rr.hit.cast<double>()) * complete_scaling_matrix_inverse *
|
Geometry::translation_transform(m_rr.hit.cast<double>()) * complete_scaling_matrix_inverse *
|
||||||
Geometry::assemble_transform(Vec3d::Zero(), Vec3d::Zero(), m_cursor_radius * Vec3d::Ones());
|
Geometry::scale_transform(m_cursor_radius * Vec3d::Ones());
|
||||||
|
|
||||||
shader->set_uniform("view_model_matrix", view_model_matrix);
|
shader->set_uniform("view_model_matrix", view_model_matrix);
|
||||||
shader->set_uniform("projection_matrix", camera.get_projection_matrix());
|
shader->set_uniform("projection_matrix", camera.get_projection_matrix());
|
||||||
|
@ -285,7 +285,7 @@ void GLGizmoScale3D::on_render()
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
m_bounding_box = selection.get_bounding_box();
|
m_bounding_box = selection.get_bounding_box();
|
||||||
m_grabbers_transform = Geometry::assemble_transform(m_bounding_box.center());
|
m_grabbers_transform = Geometry::translation_transform(m_bounding_box.center());
|
||||||
m_center = m_bounding_box.center();
|
m_center = m_bounding_box.center();
|
||||||
m_instance_center = selection.is_single_full_instance() ? selection.get_first_volume()->get_instance_offset() : m_center;
|
m_instance_center = selection.is_single_full_instance() ? selection.get_first_volume()->get_instance_offset() : m_center;
|
||||||
}
|
}
|
||||||
@ -911,7 +911,7 @@ double GLGizmoScale3D::calc_ratio(const UpdateData& data) const
|
|||||||
#if ENABLE_LEGACY_OPENGL_REMOVAL
|
#if ENABLE_LEGACY_OPENGL_REMOVAL
|
||||||
Transform3d GLGizmoScale3D::local_transform(const Selection& selection) const
|
Transform3d GLGizmoScale3D::local_transform(const Selection& selection) const
|
||||||
{
|
{
|
||||||
Transform3d ret = Geometry::assemble_transform(m_center);
|
Transform3d ret = Geometry::translation_transform(m_center);
|
||||||
if (!wxGetApp().obj_manipul()->is_world_coordinates()) {
|
if (!wxGetApp().obj_manipul()->is_world_coordinates()) {
|
||||||
const GLVolume& v = *selection.get_first_volume();
|
const GLVolume& v = *selection.get_first_volume();
|
||||||
Transform3d orient_matrix = v.get_instance_transformation().get_rotation_matrix();
|
Transform3d orient_matrix = v.get_instance_transformation().get_rotation_matrix();
|
||||||
|
@ -316,11 +316,11 @@ void GLGizmoSlaSupports::render_points(const Selection& selection, bool picking)
|
|||||||
#if ENABLE_LEGACY_OPENGL_REMOVAL
|
#if ENABLE_LEGACY_OPENGL_REMOVAL
|
||||||
const Transform3d model_matrix = vol->world_matrix() * support_matrix * Transform3d(aa.toRotationMatrix()) *
|
const Transform3d model_matrix = vol->world_matrix() * support_matrix * Transform3d(aa.toRotationMatrix()) *
|
||||||
#if ENABLE_RAYCAST_PICKING
|
#if ENABLE_RAYCAST_PICKING
|
||||||
Geometry::assemble_transform((CONE_HEIGHT + support_point.head_front_radius * RenderPointScale) * Vec3d::UnitZ(),
|
Geometry::translation_transform((CONE_HEIGHT + support_point.head_front_radius * RenderPointScale) * Vec3d::UnitZ()) *
|
||||||
Vec3d(PI, 0.0, 0.0), Vec3d(CONE_RADIUS, CONE_RADIUS, CONE_HEIGHT));
|
Geometry::rotation_transform({ double(PI), 0.0, 0.0 }) * Geometry::scale_transform({ CONE_RADIUS, CONE_RADIUS, CONE_HEIGHT });
|
||||||
#else
|
#else
|
||||||
Geometry::assemble_transform((cone_height + support_point.head_front_radius * RenderPointScale) * Vec3d::UnitZ(),
|
Geometry::translation_transform((cone_height + support_point.head_front_radius * RenderPointScale) * Vec3d::UnitZ()) *
|
||||||
Vec3d(PI, 0.0, 0.0), Vec3d(cone_radius, cone_radius, cone_height));
|
Geometry::rotation_transform({ double(PI), 0.0, 0.0 }), * Geometry::scale_transform({ cone_radius, cone_radius, cone_height });
|
||||||
#endif // ENABLE_RAYCAST_PICKING
|
#endif // ENABLE_RAYCAST_PICKING
|
||||||
|
|
||||||
shader->set_uniform("view_model_matrix", view_matrix * model_matrix);
|
shader->set_uniform("view_model_matrix", view_matrix * model_matrix);
|
||||||
@ -1463,8 +1463,8 @@ void GLGizmoSlaSupports::update_raycasters_for_picking_transform()
|
|||||||
q.setFromTwoVectors(Vec3d::UnitZ(), instance_scaling_matrix_inverse * m_editing_cache[i].normal.cast<double>());
|
q.setFromTwoVectors(Vec3d::UnitZ(), instance_scaling_matrix_inverse * m_editing_cache[i].normal.cast<double>());
|
||||||
const Eigen::AngleAxisd aa(q);
|
const Eigen::AngleAxisd aa(q);
|
||||||
const Transform3d cone_matrix = vol->world_matrix() * support_matrix * Transform3d(aa.toRotationMatrix()) *
|
const Transform3d cone_matrix = vol->world_matrix() * support_matrix * Transform3d(aa.toRotationMatrix()) *
|
||||||
Geometry::assemble_transform((CONE_HEIGHT + m_editing_cache[i].support_point.head_front_radius * RenderPointScale) * Vec3d::UnitZ(),
|
Geometry::translation_transform((CONE_HEIGHT + m_editing_cache[i].support_point.head_front_radius * RenderPointScale) * Vec3d::UnitZ()) *
|
||||||
Vec3d(PI, 0.0, 0.0), Vec3d(CONE_RADIUS, CONE_RADIUS, CONE_HEIGHT));
|
Geometry::rotation_transform({ double(PI), 0.0, 0.0 }) * Geometry::scale_transform({ CONE_RADIUS, CONE_RADIUS, CONE_HEIGHT });
|
||||||
m_raycasters[i].second->set_transform(cone_matrix);
|
m_raycasters[i].second->set_transform(cone_matrix);
|
||||||
|
|
||||||
const double radius = (double)m_editing_cache[i].support_point.head_front_radius * RenderPointScale;
|
const double radius = (double)m_editing_cache[i].support_point.head_front_radius * RenderPointScale;
|
||||||
|
@ -1767,7 +1767,7 @@ void Selection::render_sidebar_hints(const std::string& sidebar_field)
|
|||||||
glsafe(::glEnable(GL_DEPTH_TEST));
|
glsafe(::glEnable(GL_DEPTH_TEST));
|
||||||
|
|
||||||
#if ENABLE_LEGACY_OPENGL_REMOVAL
|
#if ENABLE_LEGACY_OPENGL_REMOVAL
|
||||||
const Transform3d base_matrix = Geometry::assemble_transform(get_bounding_box().center());
|
const Transform3d base_matrix = Geometry::translation_transform(get_bounding_box().center());
|
||||||
Transform3d orient_matrix = Transform3d::Identity();
|
Transform3d orient_matrix = Transform3d::Identity();
|
||||||
#else
|
#else
|
||||||
glsafe(::glPushMatrix());
|
glsafe(::glPushMatrix());
|
||||||
@ -1902,7 +1902,7 @@ void Selection::render_sidebar_hints(const std::string& sidebar_field)
|
|||||||
#if ENABLE_WORLD_COORDINATE
|
#if ENABLE_WORLD_COORDINATE
|
||||||
if (!boost::starts_with(sidebar_field, "layer")) {
|
if (!boost::starts_with(sidebar_field, "layer")) {
|
||||||
if (!wxGetApp().obj_manipul()->is_world_coordinates())
|
if (!wxGetApp().obj_manipul()->is_world_coordinates())
|
||||||
m_axes.render(Geometry::assemble_transform(axes_center) * orient_matrix, 0.25f);
|
m_axes.render(Geometry::translation_transform(axes_center) * orient_matrix, 0.25f);
|
||||||
}
|
}
|
||||||
#endif // ENABLE_WORLD_COORDINATE
|
#endif // ENABLE_WORLD_COORDINATE
|
||||||
#else
|
#else
|
||||||
@ -2613,7 +2613,7 @@ void Selection::render_sidebar_position_hints(const std::string& sidebar_field)
|
|||||||
shader.set_uniform("projection_matrix", camera.get_projection_matrix());
|
shader.set_uniform("projection_matrix", camera.get_projection_matrix());
|
||||||
|
|
||||||
if (boost::ends_with(sidebar_field, "x")) {
|
if (boost::ends_with(sidebar_field, "x")) {
|
||||||
const Transform3d model_matrix = matrix * Geometry::assemble_transform(Vec3d::Zero(), -0.5 * PI * Vec3d::UnitZ());
|
const Transform3d model_matrix = matrix * Geometry::rotation_transform(-0.5 * PI * Vec3d::UnitZ());
|
||||||
shader.set_uniform("view_model_matrix", view_matrix * model_matrix);
|
shader.set_uniform("view_model_matrix", view_matrix * 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);
|
||||||
@ -2627,7 +2627,7 @@ void Selection::render_sidebar_position_hints(const std::string& sidebar_field)
|
|||||||
m_arrow.render();
|
m_arrow.render();
|
||||||
}
|
}
|
||||||
else if (boost::ends_with(sidebar_field, "z")) {
|
else if (boost::ends_with(sidebar_field, "z")) {
|
||||||
const Transform3d model_matrix = matrix * Geometry::assemble_transform(Vec3d::Zero(), 0.5 * PI * Vec3d::UnitX());
|
const Transform3d model_matrix = matrix * Geometry::rotation_transform(0.5 * PI * Vec3d::UnitX());
|
||||||
shader.set_uniform("view_model_matrix", view_matrix * model_matrix);
|
shader.set_uniform("view_model_matrix", view_matrix * 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);
|
||||||
@ -2664,7 +2664,7 @@ void Selection::render_sidebar_rotation_hints(const std::string& sidebar_field)
|
|||||||
Matrix3d view_normal_matrix = view_matrix.matrix().block(0, 0, 3, 3) * model_matrix.matrix().block(0, 0, 3, 3).inverse().transpose();
|
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_curved_arrow.render();
|
m_curved_arrow.render();
|
||||||
const Transform3d matrix = model_matrix * Geometry::assemble_transform(Vec3d::Zero(), PI * Vec3d::UnitZ());
|
const Transform3d matrix = model_matrix * Geometry::rotation_transform(PI * Vec3d::UnitZ());
|
||||||
shader.set_uniform("view_model_matrix", view_matrix * matrix);
|
shader.set_uniform("view_model_matrix", view_matrix * matrix);
|
||||||
view_normal_matrix = view_matrix.matrix().block(0, 0, 3, 3) * matrix.matrix().block(0, 0, 3, 3).inverse().transpose();
|
view_normal_matrix = view_matrix.matrix().block(0, 0, 3, 3) * 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);
|
||||||
@ -2677,11 +2677,11 @@ void Selection::render_sidebar_rotation_hints(const std::string& sidebar_field)
|
|||||||
|
|
||||||
if (boost::ends_with(sidebar_field, "x")) {
|
if (boost::ends_with(sidebar_field, "x")) {
|
||||||
m_curved_arrow.set_color(get_color(X));
|
m_curved_arrow.set_color(get_color(X));
|
||||||
render_sidebar_rotation_hint(shader, view_matrix, matrix * Geometry::assemble_transform(Vec3d::Zero(), 0.5 * PI * Vec3d::UnitY()));
|
render_sidebar_rotation_hint(shader, view_matrix, matrix * Geometry::rotation_transform(0.5 * PI * Vec3d::UnitY()));
|
||||||
}
|
}
|
||||||
else if (boost::ends_with(sidebar_field, "y")) {
|
else if (boost::ends_with(sidebar_field, "y")) {
|
||||||
m_curved_arrow.set_color(get_color(Y));
|
m_curved_arrow.set_color(get_color(Y));
|
||||||
render_sidebar_rotation_hint(shader, view_matrix, matrix * Geometry::assemble_transform(Vec3d::Zero(), -0.5 * PI * Vec3d::UnitX()));
|
render_sidebar_rotation_hint(shader, view_matrix, matrix * Geometry::rotation_transform(-0.5 * PI * Vec3d::UnitX()));
|
||||||
}
|
}
|
||||||
else if (boost::ends_with(sidebar_field, "z")) {
|
else if (boost::ends_with(sidebar_field, "z")) {
|
||||||
m_curved_arrow.set_color(get_color(Z));
|
m_curved_arrow.set_color(get_color(Z));
|
||||||
@ -2726,7 +2726,7 @@ void Selection::render_sidebar_scale_hints(const std::string& sidebar_field)
|
|||||||
#if ENABLE_LEGACY_OPENGL_REMOVAL
|
#if ENABLE_LEGACY_OPENGL_REMOVAL
|
||||||
auto render_sidebar_scale_hint = [this, uniform_scale](Axis axis, GLShaderProgram& shader, const Transform3d& view_matrix, const Transform3d& model_matrix) {
|
auto render_sidebar_scale_hint = [this, uniform_scale](Axis axis, GLShaderProgram& shader, const Transform3d& view_matrix, const Transform3d& model_matrix) {
|
||||||
m_arrow.set_color(uniform_scale ? UNIFORM_SCALE_COLOR : get_color(axis));
|
m_arrow.set_color(uniform_scale ? UNIFORM_SCALE_COLOR : get_color(axis));
|
||||||
Transform3d matrix = model_matrix * Geometry::assemble_transform(5.0 * Vec3d::UnitY());
|
Transform3d matrix = model_matrix * Geometry::translation_transform(5.0 * Vec3d::UnitY());
|
||||||
shader.set_uniform("view_model_matrix", view_matrix * matrix);
|
shader.set_uniform("view_model_matrix", view_matrix * matrix);
|
||||||
Matrix3d view_normal_matrix = view_matrix.matrix().block(0, 0, 3, 3) * matrix.matrix().block(0, 0, 3, 3).inverse().transpose();
|
Matrix3d view_normal_matrix = view_matrix.matrix().block(0, 0, 3, 3) * 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);
|
||||||
@ -2742,7 +2742,7 @@ void Selection::render_sidebar_scale_hints(const std::string& sidebar_field)
|
|||||||
m_arrow.render();
|
m_arrow.render();
|
||||||
|
|
||||||
#if ENABLE_LEGACY_OPENGL_REMOVAL
|
#if ENABLE_LEGACY_OPENGL_REMOVAL
|
||||||
matrix = model_matrix * Geometry::assemble_transform(-5.0 * Vec3d::UnitY(), PI * Vec3d::UnitZ());
|
matrix = model_matrix * Geometry::translation_transform(-5.0 * Vec3d::UnitY()) * Geometry::rotation_transform(PI * Vec3d::UnitZ());
|
||||||
shader.set_uniform("view_model_matrix", view_matrix * matrix);
|
shader.set_uniform("view_model_matrix", view_matrix * matrix);
|
||||||
view_normal_matrix = view_matrix.matrix().block(0, 0, 3, 3) * matrix.matrix().block(0, 0, 3, 3).inverse().transpose();
|
view_normal_matrix = view_matrix.matrix().block(0, 0, 3, 3) * 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);
|
||||||
@ -2761,7 +2761,7 @@ void Selection::render_sidebar_scale_hints(const std::string& sidebar_field)
|
|||||||
|
|
||||||
if (boost::ends_with(sidebar_field, "x") || uniform_scale) {
|
if (boost::ends_with(sidebar_field, "x") || uniform_scale) {
|
||||||
#if ENABLE_LEGACY_OPENGL_REMOVAL
|
#if ENABLE_LEGACY_OPENGL_REMOVAL
|
||||||
render_sidebar_scale_hint(X, shader, view_matrix, matrix * Geometry::assemble_transform(Vec3d::Zero(), -0.5 * PI * Vec3d::UnitZ()));
|
render_sidebar_scale_hint(X, shader, view_matrix, matrix * Geometry::rotation_transform(-0.5 * PI * Vec3d::UnitZ()));
|
||||||
#else
|
#else
|
||||||
glsafe(::glPushMatrix());
|
glsafe(::glPushMatrix());
|
||||||
glsafe(::glRotated(-90.0, 0.0, 0.0, 1.0));
|
glsafe(::glRotated(-90.0, 0.0, 0.0, 1.0));
|
||||||
@ -2782,7 +2782,7 @@ void Selection::render_sidebar_scale_hints(const std::string& sidebar_field)
|
|||||||
|
|
||||||
if (boost::ends_with(sidebar_field, "z") || uniform_scale) {
|
if (boost::ends_with(sidebar_field, "z") || uniform_scale) {
|
||||||
#if ENABLE_LEGACY_OPENGL_REMOVAL
|
#if ENABLE_LEGACY_OPENGL_REMOVAL
|
||||||
render_sidebar_scale_hint(Z, shader, view_matrix, matrix * Geometry::assemble_transform(Vec3d::Zero(), 0.5 * PI * Vec3d::UnitX()));
|
render_sidebar_scale_hint(Z, shader, view_matrix, matrix * Geometry::rotation_transform(0.5 * PI * Vec3d::UnitX()));
|
||||||
#else
|
#else
|
||||||
glsafe(::glPushMatrix());
|
glsafe(::glPushMatrix());
|
||||||
glsafe(::glRotated(90.0, 1.0, 0.0, 0.0));
|
glsafe(::glRotated(90.0, 1.0, 0.0, 0.0));
|
||||||
|
Loading…
Reference in New Issue
Block a user