Cut: Connectors mode: Implemented forward/downward view to the cut plane
+ updated cut ikons
This commit is contained in:
parent
c80f2f14ef
commit
7edc2acfc0
@ -1,28 +1,26 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Generator: Adobe Illustrator 23.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
<!-- Generator: Adobe Illustrator 27.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
viewBox="0 0 128 128" enable-background="new 0 0 128 128" xml:space="preserve">
|
width="16px" height="16px" viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
|
||||||
<g id="cut">
|
<path fill="#ED6B21" d="M3.0597045,10.3634434H0.5884437C0.2628375,10.3634434,0,10.100606,0,9.7750006
|
||||||
<g>
|
c0-0.3256063,0.2628375-0.5884438,0.5884437-0.5884438h2.4712608c0.3256061,0,0.5884435,0.2628374,0.5884435,0.5884438
|
||||||
<path fill="#ED6B21" d="M118.12,65.5h-10c-0.83,0-1.5-0.67-1.5-1.5s0.67-1.5,1.5-1.5h10c0.83,0,1.5,0.67,1.5,1.5
|
C3.6481481,10.100606,3.3853078,10.3634434,3.0597045,10.3634434z"/>
|
||||||
S118.95,65.5,118.12,65.5z M98.12,65.5h-10c-0.83,0-1.5-0.67-1.5-1.5s0.67-1.5,1.5-1.5h10c0.83,0,1.5,0.67,1.5,1.5
|
<path fill="#ED6B21" d="M12.0967369,10.3634434h-2.471261c-0.3256063,0-0.5884438-0.2628374-0.5884438-0.5884428
|
||||||
S98.95,65.5,98.12,65.5z M78.12,65.5h-10c-0.83,0-1.5-0.67-1.5-1.5s0.67-1.5,1.5-1.5h10c0.83,0,1.5,0.67,1.5,1.5
|
c0-0.3256063,0.2628374-0.5884438,0.5884438-0.5884438h2.471261c0.3256063,0,0.5884438,0.2628374,0.5884438,0.5884438
|
||||||
S78.95,65.5,78.12,65.5z M58.12,65.5h-10c-0.83,0-1.5-0.67-1.5-1.5s0.67-1.5,1.5-1.5h10c0.83,0,1.5,0.67,1.5,1.5
|
C12.6851807,10.100606,12.4223404,10.3634434,12.0967369,10.3634434z"/>
|
||||||
S58.95,65.5,58.12,65.5z M38.12,65.5h-10c-0.83,0-1.5-0.67-1.5-1.5s0.67-1.5,1.5-1.5h10c0.83,0,1.5,0.67,1.5,1.5
|
<path fill="#ED6B21" d="M7.5782208,10.3634434h-2.471261c-0.3256059,0-0.5884438-0.2628374-0.5884438-0.5884428
|
||||||
S38.95,65.5,38.12,65.5z M18.12,65.5h-10c-0.83,0-1.5-0.67-1.5-1.5s0.67-1.5,1.5-1.5h10c0.83,0,1.5,0.67,1.5,1.5
|
c0-0.3256063,0.2628379-0.5884438,0.5884438-0.5884438h2.471261c0.3256059,0,0.5884433,0.2628374,0.5884433,0.5884438
|
||||||
S18.95,65.5,18.12,65.5z"/>
|
C8.1666641,10.100606,7.9038239,10.3634434,7.5782208,10.3634434z"/>
|
||||||
</g>
|
<g>
|
||||||
<g>
|
<path fill="#808080" d="M10.98001,11.9849854c-0.289978,0-0.5199585,0.2299805-0.5199585,0.5199585v0.5922852v0.3327637
|
||||||
<g>
|
c0,0.289978-0.2300415,0.5200195-0.5200195,0.5200195H2.7452075c-0.289978,0-0.5200195-0.2300415-0.5200195-0.5200195V13.097229
|
||||||
<path fill="#808080" d="M108.79,51.6H19.21c-1.93,0-3.5-1.57-3.5-3.5V10.12c0-1.93,1.57-3.5,3.5-3.5h89.57
|
v-0.5922852c0-0.289978-0.2299803-0.5199585-0.5199584-0.5199585c-0.2900391,0-0.5200195,0.2299805-0.5200195,0.5199585v0.5922852
|
||||||
c1.93,0,3.5,1.57,3.5,3.5V48.1C112.29,50.03,110.71,51.6,108.79,51.6z M19.21,9.62c-0.27,0-0.5,0.23-0.5,0.5V48.1
|
v0.3327637C1.1852101,14.2999878,1.8952321,15,2.7552173,15h7.1748047c0.8599854,0,1.5700073-0.7000122,1.5700073-1.5700073
|
||||||
c0,0.27,0.23,0.5,0.5,0.5h89.57c0.27,0,0.5-0.23,0.5-0.5V10.12c0-0.27-0.23-0.5-0.5-0.5H19.21z"/>
|
V13.097229v-0.5922852C11.5000296,12.2149658,11.2700491,11.9849854,10.98001,11.9849854z"/>
|
||||||
</g>
|
<path fill="#808080" d="M9.9300222,4.5499878H2.7552173c-0.8599852,0-1.5700072,0.7000122-1.5700072,1.5700073v0.3327637v0.5922852
|
||||||
<g>
|
c0,0.289978,0.2299805,0.5199585,0.5200195,0.5199585c0.289978,0,0.5199584-0.2299805,0.5199584-0.5199585V6.4527588V6.1199951
|
||||||
<path fill="#808080" d="M108.79,121.38H19.21c-1.93,0-3.5-1.57-3.5-3.5V79.4c0-1.93,1.57-3.5,3.5-3.5h89.57
|
c0-0.289978,0.2300415-0.5200195,0.5200195-0.5200195H9.940032c0.289978,0,0.5200195,0.2300415,0.5200195,0.5200195v0.3327637
|
||||||
c1.93,0,3.5,1.57,3.5,3.5v38.49C112.29,119.81,110.71,121.38,108.79,121.38z M19.21,78.9c-0.27,0-0.5,0.23-0.5,0.5v38.49
|
v0.5922852c0,0.289978,0.2299805,0.5199585,0.5199585,0.5199585c0.2900391,0,0.5200195-0.2299805,0.5200195-0.5199585V6.4527588
|
||||||
c0,0.27,0.23,0.5,0.5,0.5h89.57c0.27,0,0.5-0.23,0.5-0.5V79.4c0-0.27-0.23-0.5-0.5-0.5H19.21z"/>
|
V6.1199951C11.5000296,5.25,10.7900076,4.5499878,9.9300222,4.5499878z"/>
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 2.4 KiB |
@ -1,26 +1,20 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
<!-- Generator: Adobe Illustrator 27.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
|
width="16px" height="16px" viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
|
||||||
<g id="add_x5F_part">
|
<path fill="#ED6B21" d="M7.2122064,10.8825388H5.473033c-0.6128426,0-1.1075444-0.4947023-1.1075444-1.1075449
|
||||||
<g>
|
S4.8601904,8.667449,5.473033,8.667449h1.7391734c0.6128426,0,1.1075444,0.4947023,1.1075444,1.1075449
|
||||||
<path fill="#ED6B21" d="M14.62,4.37c-0.01-0.14,0.06-0.34,0.15-0.44l0.13-0.15c0.09-0.11,0.12-0.3,0.07-0.43l-0.2-0.49
|
S7.8250437,10.8825388,7.2122064,10.8825388z"/>
|
||||||
c-0.05-0.13-0.21-0.24-0.35-0.25l-0.2-0.01c-0.14-0.01-0.33-0.1-0.42-0.21c-0.09-0.1-0.37-0.46-0.38-0.6l-0.01-0.2
|
<g>
|
||||||
c-0.01-0.14-0.12-0.3-0.25-0.35l-0.49-0.2C12.52,0.97,12.33,1,12.22,1.1l-0.15,0.13c-0.11,0.09-0.31,0.16-0.44,0.15
|
<path fill="#808080" d="M10.98001,15c-0.289978,0-0.5199585-0.2299805-0.5199585-0.5199585v-0.5922852v-0.3327637
|
||||||
c-0.14-0.01-0.59-0.06-0.69-0.15L10.78,1.1c-0.11-0.09-0.3-0.12-0.43-0.07l-0.49,0.2C9.73,1.28,9.61,1.44,9.6,1.58l-0.01,0.2
|
c0-0.289978-0.2300415-0.5200195-0.5200195-0.5200195H2.7452075c-0.289978,0-0.5200195,0.2300415-0.5200195,0.5200195v0.3327637
|
||||||
C9.58,1.92,9.49,2.11,9.38,2.2c-0.1,0.09-0.46,0.37-0.6,0.38L8.58,2.6c-0.14,0.01-0.3,0.12-0.35,0.25l-0.2,0.49
|
v0.5922852C2.225188,14.7700195,1.9952077,15,1.7052296,15c-0.2900391,0-0.5200195-0.2299805-0.5200195-0.5199585v-0.5922852
|
||||||
C7.97,3.48,8,3.67,8.1,3.78l0.13,0.15c0.09,0.11,0.16,0.31,0.15,0.44C8.37,4.52,8.32,4.96,8.23,5.07L8.1,5.22
|
v-0.3327637c0-0.8699951,0.710022-1.5700073,1.5700072-1.5700073h7.1748047c0.8599854,0,1.5700073,0.7000122,1.5700073,1.5700073
|
||||||
C8,5.33,7.97,5.52,8.03,5.65l0.2,0.49C8.28,6.27,8.44,6.39,8.58,6.4l0.2,0.01c0.14,0.01,0.33,0.1,0.42,0.21
|
v0.3327637v0.5922852C11.5000296,14.7700195,11.2700491,15,10.98001,15z"/>
|
||||||
c0.09,0.1,0.37,0.46,0.38,0.6l0.01,0.2c0.01,0.14,0.12,0.3,0.25,0.35l0.49,0.2C10.48,8.03,10.67,8,10.78,7.9l0.15-0.13
|
<path fill="#808080" d="M9.9300222,7.5650024H2.7552173c-0.8599852,0-1.5700072-0.7000122-1.5700072-1.5700073V5.6622314V5.0699463
|
||||||
c0.11-0.09,0.31-0.16,0.44-0.15c0.14,0.01,0.59,0.06,0.69,0.15l0.15,0.13c0.11,0.09,0.3,0.12,0.43,0.07l0.49-0.2
|
c0-0.289978,0.2299805-0.5199585,0.5200195-0.5199585c0.289978,0,0.5199584,0.2299805,0.5199584,0.5199585v0.5922852v0.3327637
|
||||||
c0.13-0.05,0.24-0.21,0.25-0.35l0.01-0.2c0.01-0.14,0.1-0.33,0.21-0.42s0.46-0.37,0.6-0.38l0.2-0.01c0.14-0.01,0.3-0.12,0.35-0.25
|
c0,0.289978,0.2300415,0.5200195,0.5200195,0.5200195H9.940032c0.289978,0,0.5200195-0.2300415,0.5200195-0.5200195V5.6622314
|
||||||
l0.2-0.49C15.03,5.52,15,5.33,14.9,5.22l-0.13-0.15C14.68,4.96,14.63,4.51,14.62,4.37z M11.5,6.6c-1.16,0-2.1-0.94-2.1-2.1
|
V5.0699463c0-0.289978,0.2299805-0.5199585,0.5199585-0.5199585c0.2900391,0,0.5200195,0.2299805,0.5200195,0.5199585v0.5922852
|
||||||
s0.94-2.1,2.1-2.1s2.1,0.94,2.1,2.1S12.66,6.6,11.5,6.6z"/>
|
v0.3327637C11.5000296,6.8649902,10.7900076,7.5650024,9.9300222,7.5650024z"/>
|
||||||
</g>
|
|
||||||
<path fill="#808080" d="M10.98,9.78c-0.29,0-0.52,0.23-0.52,0.52v2.09v1.04c0,0.29-0.23,0.52-0.52,0.52H2.62
|
|
||||||
c-0.29,0-0.53-0.24-0.53-0.53L2.04,6.12c0-0.14,0.05-0.27,0.15-0.37c0.1-0.1,0.23-0.15,0.37-0.15l3.19,0v0
|
|
||||||
c0.29,0,0.52-0.23,0.52-0.52S6.04,4.55,5.75,4.55H3.66c-0.01,0-0.01,0-0.02,0l-1.08,0c-0.42,0-0.81,0.16-1.11,0.46
|
|
||||||
C1.16,5.31,1,5.71,1,6.13l0.04,7.31C1.05,14.3,1.75,15,2.62,15h7.31c0.86,0,1.57-0.7,1.57-1.57v-1.04V10.3
|
|
||||||
C11.5,10.01,11.27,9.78,10.98,9.78z"/>
|
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 1.7 KiB |
@ -359,10 +359,19 @@ void GLGizmoCut3D::put_connectors_on_cut_plane(const Vec3d& cp_normal, double cp
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// returns true if the camera (forward) is pointing in the negative direction of the cut normal
|
||||||
|
bool GLGizmoCut3D::is_looking_forward() const
|
||||||
|
{
|
||||||
|
const Camera& camera = wxGetApp().plater()->get_camera();
|
||||||
|
const double dot = camera.get_dir_forward().dot(m_cut_normal);
|
||||||
|
return dot < 0.05;
|
||||||
|
}
|
||||||
|
|
||||||
void GLGizmoCut3D::update_clipper()
|
void GLGizmoCut3D::update_clipper()
|
||||||
{
|
{
|
||||||
BoundingBoxf3 box = bounding_box();
|
BoundingBoxf3 box = bounding_box();
|
||||||
|
|
||||||
|
// update cut_normal
|
||||||
Vec3d beg, end = beg = m_plane_center;
|
Vec3d beg, end = beg = m_plane_center;
|
||||||
beg[Z] = box.center().z() - m_radius;
|
beg[Z] = box.center().z() - m_radius;
|
||||||
end[Z] = box.center().z() + m_radius;
|
end[Z] = box.center().z() + m_radius;
|
||||||
@ -370,12 +379,26 @@ void GLGizmoCut3D::update_clipper()
|
|||||||
rotate_vec3d_around_plane_center(beg);
|
rotate_vec3d_around_plane_center(beg);
|
||||||
rotate_vec3d_around_plane_center(end);
|
rotate_vec3d_around_plane_center(end);
|
||||||
|
|
||||||
double dist = (m_plane_center - beg).norm();
|
// calculate normal for cut plane
|
||||||
|
Vec3d normal = m_cut_normal = end - beg;
|
||||||
|
m_cut_normal.normalize();
|
||||||
|
|
||||||
|
if (!is_looking_forward()) {
|
||||||
|
end = beg = m_plane_center;
|
||||||
|
beg[Z] = box.center().z() + m_radius;
|
||||||
|
end[Z] = box.center().z() - m_radius;
|
||||||
|
|
||||||
|
rotate_vec3d_around_plane_center(beg);
|
||||||
|
rotate_vec3d_around_plane_center(end);
|
||||||
|
|
||||||
|
// recalculate normal for clipping plane, if camera is looking downward to cut plane
|
||||||
|
normal = end - beg;
|
||||||
|
if (normal == Vec3d::Zero())
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// calculate normal and offset for clipping plane
|
// calculate normal and offset for clipping plane
|
||||||
Vec3d normal = end - beg;
|
double dist = (m_plane_center - beg).norm();
|
||||||
if (normal == Vec3d::Zero())
|
|
||||||
return;
|
|
||||||
dist = std::clamp(dist, 0.0001, normal.norm());
|
dist = std::clamp(dist, 0.0001, normal.norm());
|
||||||
normal.normalize();
|
normal.normalize();
|
||||||
const double offset = normal.dot(beg) + dist;
|
const double offset = normal.dot(beg) + dist;
|
||||||
@ -1372,7 +1395,7 @@ void GLGizmoCut3D::render_clipper_cut()
|
|||||||
|
|
||||||
void GLGizmoCut3D::on_render()
|
void GLGizmoCut3D::on_render()
|
||||||
{
|
{
|
||||||
if (update_bb() || force_update_clipper_on_render) {
|
if (update_bb() || force_update_clipper_on_render || m_connectors_editing) {
|
||||||
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);
|
||||||
}
|
}
|
||||||
@ -1914,9 +1937,15 @@ void GLGizmoCut3D::render_connectors()
|
|||||||
const Camera& camera = wxGetApp().plater()->get_camera();
|
const Camera& camera = wxGetApp().plater()->get_camera();
|
||||||
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;
|
if (is_looking_forward())
|
||||||
|
pos -= height * normal;
|
||||||
|
else
|
||||||
|
pos += height * normal;
|
||||||
height *= 2;
|
height *= 2;
|
||||||
}
|
}
|
||||||
|
else if (!is_looking_forward())
|
||||||
|
pos += 0.05 * 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>());
|
||||||
|
|
||||||
|
@ -73,6 +73,7 @@ class GLGizmoCut3D : public GLGizmoBase
|
|||||||
GLModel m_angle_arc;
|
GLModel m_angle_arc;
|
||||||
|
|
||||||
Vec3d m_old_center;
|
Vec3d m_old_center;
|
||||||
|
Vec3d m_cut_normal;
|
||||||
|
|
||||||
struct InvalidConnectorsStatistics
|
struct InvalidConnectorsStatistics
|
||||||
{
|
{
|
||||||
@ -160,6 +161,7 @@ public:
|
|||||||
|
|
||||||
bool is_in_editing_mode() const override { return m_connectors_editing; }
|
bool is_in_editing_mode() const override { return m_connectors_editing; }
|
||||||
bool is_selection_rectangle_dragging() const override { return m_selection_rectangle.is_dragging(); }
|
bool is_selection_rectangle_dragging() const override { return m_selection_rectangle.is_dragging(); }
|
||||||
|
bool is_looking_forward() const;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Drag of plane
|
/// Drag of plane
|
||||||
|
Loading…
Reference in New Issue
Block a user