Cut: Fixed connector rendering in "cut plane" mode
This commit is contained in:
parent
a57e2a22f6
commit
24366c6294
@ -402,6 +402,7 @@ void GLGizmoCut3D::update_clipper()
|
|||||||
double dist = (m_plane_center - beg).norm();
|
double dist = (m_plane_center - beg).norm();
|
||||||
dist = std::clamp(dist, 0.0001, normal.norm());
|
dist = std::clamp(dist, 0.0001, normal.norm());
|
||||||
normal.normalize();
|
normal.normalize();
|
||||||
|
m_clp_normal = normal;
|
||||||
const double offset = normal.dot(beg) + dist;
|
const double offset = normal.dot(beg) + dist;
|
||||||
|
|
||||||
m_c->object_clipper()->set_range_and_pos(normal, offset, dist);
|
m_c->object_clipper()->set_range_and_pos(normal, offset, dist);
|
||||||
@ -973,9 +974,6 @@ void GLGizmoCut3D::update_raycasters_for_picking_transform()
|
|||||||
const Vec3d& instance_offset = mo->instances[inst_id]->get_offset();
|
const Vec3d& instance_offset = mo->instances[inst_id]->get_offset();
|
||||||
const double sla_shift = double(m_c->selection_info()->get_sla_shift());
|
const double sla_shift = double(m_c->selection_info()->get_sla_shift());
|
||||||
|
|
||||||
const ClippingPlane* cp = m_c->object_clipper()->get_clipping_plane();
|
|
||||||
const Vec3d& normal = cp && cp->is_active() ? cp->get_normal() : m_clp_normal;
|
|
||||||
|
|
||||||
for (size_t i = 0; i < connectors.size(); ++i) {
|
for (size_t i = 0; i < connectors.size(); ++i) {
|
||||||
const CutConnector& connector = connectors[i];
|
const CutConnector& connector = connectors[i];
|
||||||
|
|
||||||
@ -984,7 +982,7 @@ void GLGizmoCut3D::update_raycasters_for_picking_transform()
|
|||||||
Vec3d pos = connector.pos + instance_offset;
|
Vec3d pos = connector.pos + instance_offset;
|
||||||
if (connector.attribs.type == CutConnectorType::Dowel &&
|
if (connector.attribs.type == CutConnectorType::Dowel &&
|
||||||
connector.attribs.style == CutConnectorStyle::Prizm) {
|
connector.attribs.style == CutConnectorStyle::Prizm) {
|
||||||
pos -= height * normal;
|
pos -= height * m_clp_normal;
|
||||||
height *= 2;
|
height *= 2;
|
||||||
}
|
}
|
||||||
pos[Z] += sla_shift;
|
pos[Z] += sla_shift;
|
||||||
@ -1396,10 +1394,12 @@ void GLGizmoCut3D::render_clipper_cut()
|
|||||||
|
|
||||||
void GLGizmoCut3D::on_render()
|
void GLGizmoCut3D::on_render()
|
||||||
{
|
{
|
||||||
if (update_bb() || force_update_clipper_on_render || m_connectors_editing) {
|
if (update_bb() || force_update_clipper_on_render) {
|
||||||
update_clipper_on_render();
|
update_clipper_on_render();
|
||||||
m_c->object_clipper()->set_behavior(m_connectors_editing, m_connectors_editing, 0.4);
|
m_c->object_clipper()->set_behavior(m_connectors_editing, m_connectors_editing, 0.4);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
update_clipper();
|
||||||
|
|
||||||
init_picking_models();
|
init_picking_models();
|
||||||
|
|
||||||
@ -1558,7 +1558,6 @@ void GLGizmoCut3D::render_connectors_input_window(CutConnectors &connectors)
|
|||||||
ImGui::Separator();
|
ImGui::Separator();
|
||||||
|
|
||||||
if (m_imgui->button(_L("Confirm connectors"))) {
|
if (m_imgui->button(_L("Confirm connectors"))) {
|
||||||
m_clp_normal = m_c->object_clipper()->get_clipping_plane()->get_normal();
|
|
||||||
unselect_all_connectors();
|
unselect_all_connectors();
|
||||||
set_connectors_editing(false);
|
set_connectors_editing(false);
|
||||||
}
|
}
|
||||||
@ -1566,7 +1565,6 @@ void GLGizmoCut3D::render_connectors_input_window(CutConnectors &connectors)
|
|||||||
ImGui::SameLine(2.75f * m_label_width);
|
ImGui::SameLine(2.75f * m_label_width);
|
||||||
|
|
||||||
if (m_imgui->button(_L("Cancel"))) {
|
if (m_imgui->button(_L("Cancel"))) {
|
||||||
m_clp_normal = m_c->object_clipper()->get_clipping_plane()->get_normal();
|
|
||||||
reset_connectors();
|
reset_connectors();
|
||||||
set_connectors_editing(false);
|
set_connectors_editing(false);
|
||||||
}
|
}
|
||||||
@ -1945,9 +1943,6 @@ void GLGizmoCut3D::render_connectors()
|
|||||||
const Vec3d& instance_offset = mi->get_offset();
|
const Vec3d& instance_offset = mi->get_offset();
|
||||||
const double sla_shift = double(m_c->selection_info()->get_sla_shift());
|
const double sla_shift = double(m_c->selection_info()->get_sla_shift());
|
||||||
|
|
||||||
const ClippingPlane* cp = m_c->object_clipper()->get_clipping_plane();
|
|
||||||
const Vec3d& normal = cp && cp->is_active() ? cp->get_normal() : m_clp_normal;
|
|
||||||
|
|
||||||
m_has_invalid_connector = false;
|
m_has_invalid_connector = false;
|
||||||
m_info_stats.invalidate();
|
m_info_stats.invalidate();
|
||||||
|
|
||||||
@ -1979,13 +1974,13 @@ void GLGizmoCut3D::render_connectors()
|
|||||||
if (connector.attribs.type == CutConnectorType::Dowel &&
|
if (connector.attribs.type == CutConnectorType::Dowel &&
|
||||||
connector.attribs.style == CutConnectorStyle::Prizm) {
|
connector.attribs.style == CutConnectorStyle::Prizm) {
|
||||||
if (is_looking_forward())
|
if (is_looking_forward())
|
||||||
pos -= height * normal;
|
pos -= height * m_clp_normal;
|
||||||
else
|
else
|
||||||
pos += height * normal;
|
pos += height * m_clp_normal;
|
||||||
height *= 2;
|
height *= 2;
|
||||||
}
|
}
|
||||||
else if (!is_looking_forward())
|
else if (!is_looking_forward())
|
||||||
pos += 0.05 * normal;
|
pos += 0.05 * m_clp_normal;
|
||||||
|
|
||||||
const Transform3d view_model_matrix = camera.get_view_matrix() * translation_transform(pos) * m_rotation_m *
|
const Transform3d view_model_matrix = camera.get_view_matrix() * translation_transform(pos) * m_rotation_m *
|
||||||
scale_transform(Vec3f(connector.radius, connector.radius, height).cast<double>());
|
scale_transform(Vec3f(connector.radius, connector.radius, height).cast<double>());
|
||||||
|
Loading…
Reference in New Issue
Block a user