mirror of
https://git.mirrors.martin98.com/https://github.com/bambulab/BambuStudio.git
synced 2025-08-11 15:39:08 +08:00
ENH:add 3 isometric camera views
jira: none Change-Id: I94afe60a0066df95410bd40f06511a962cd696a9
This commit is contained in:
parent
ec3d5e8151
commit
53959cf579
@ -87,6 +87,12 @@ void Camera::select_view(const std::string& direction)
|
||||
{
|
||||
if (direction == "iso")
|
||||
set_iso_orientation();
|
||||
else if (direction == "iso_1")
|
||||
set_iso_orientation(ViewAngleType::Iso_1);
|
||||
else if (direction == "iso_2")
|
||||
set_iso_orientation(ViewAngleType::Iso_2);
|
||||
else if (direction == "iso_3")
|
||||
set_iso_orientation(ViewAngleType::Iso_3);
|
||||
else if (direction == "left")
|
||||
look_at(m_target - m_distance * Vec3d::UnitX(), m_target, Vec3d::UnitZ());
|
||||
else if (direction == "right")
|
||||
@ -99,11 +105,8 @@ void Camera::select_view(const std::string& direction)
|
||||
look_at(m_target - m_distance * Vec3d::UnitY(), m_target, Vec3d::UnitZ());
|
||||
else if (direction == "rear")
|
||||
look_at(m_target + m_distance * Vec3d::UnitY(), m_target, Vec3d::UnitZ());
|
||||
else if (direction == "topfront")
|
||||
else if (direction == "topfront" || "plate")
|
||||
look_at(m_target - 0.707 * m_distance * Vec3d::UnitY() + 0.707 * m_distance * Vec3d::UnitZ(), m_target, Vec3d::UnitY() + Vec3d::UnitZ());
|
||||
else if (direction == "plate") {
|
||||
look_at(m_target - 0.707 * m_distance * Vec3d::UnitY() + 0.707 * m_distance * Vec3d::UnitZ(), m_target, Vec3d::UnitY() + Vec3d::UnitZ());
|
||||
}
|
||||
}
|
||||
void Camera::select_view(ViewAngleType type)
|
||||
{
|
||||
@ -112,6 +115,18 @@ void Camera::select_view(ViewAngleType type)
|
||||
select_view("iso");
|
||||
break;
|
||||
}
|
||||
case Slic3r::GUI::Camera::ViewAngleType::Iso_1: {
|
||||
select_view("iso_1");
|
||||
break;
|
||||
}
|
||||
case Slic3r::GUI::Camera::ViewAngleType::Iso_2: {
|
||||
select_view("iso_2");
|
||||
break;
|
||||
}
|
||||
case Slic3r::GUI::Camera::ViewAngleType::Iso_3: {
|
||||
select_view("iso_3");
|
||||
break;
|
||||
}
|
||||
case Slic3r::GUI::Camera::ViewAngleType::Top_Front: {
|
||||
select_view("topfront");
|
||||
break;
|
||||
@ -746,28 +761,30 @@ void Camera::look_at(const Vec3d& position, const Vec3d& target, const Vec3d& up
|
||||
void Camera::set_default_orientation()
|
||||
{
|
||||
// BBS modify default orientation
|
||||
look_at(m_target - 0.707 * m_distance * Vec3d::UnitY() + 0.707 * m_distance * Vec3d::UnitZ(), m_target, Vec3d::UnitY() + Vec3d::UnitZ());
|
||||
|
||||
/*m_zenit = 45.0f;
|
||||
const double theta_rad = Geometry::deg2rad(-(double)m_zenit);
|
||||
const double phi_rad = Geometry::deg2rad(45.0);
|
||||
const double sin_theta = ::sin(theta_rad);
|
||||
const Vec3d camera_pos = m_target + m_distance * Vec3d(sin_theta * ::sin(phi_rad), sin_theta * ::cos(phi_rad), ::cos(theta_rad));
|
||||
m_view_rotation = Eigen::AngleAxisd(theta_rad, Vec3d::UnitX()) * Eigen::AngleAxisd(phi_rad, Vec3d::UnitZ());
|
||||
m_view_rotation.normalize();
|
||||
m_view_matrix.fromPositionOrientationScale(m_view_rotation * (-camera_pos), m_view_rotation, Vec3d::Ones());*/
|
||||
select_view("topfront");
|
||||
}
|
||||
|
||||
void Camera::set_iso_orientation()
|
||||
void Camera::set_iso_orientation(ViewAngleType va_type)
|
||||
{
|
||||
m_zenit = 45.0f;
|
||||
const double theta_rad = Geometry::deg2rad(-(double)m_zenit);
|
||||
const double phi_rad = Geometry::deg2rad(45.0);
|
||||
const double sin_theta = ::sin(theta_rad);
|
||||
const Vec3d camera_pos = m_target + m_distance * Vec3d(sin_theta * ::sin(phi_rad), sin_theta * ::cos(phi_rad), ::cos(theta_rad));
|
||||
m_view_rotation = Eigen::AngleAxisd(theta_rad, Vec3d::UnitX()) * Eigen::AngleAxisd(phi_rad, Vec3d::UnitZ());
|
||||
if (!(va_type == ViewAngleType::Iso || va_type == ViewAngleType::Iso_1 || va_type == ViewAngleType::Iso_2 ||va_type == ViewAngleType::Iso_3)) {
|
||||
return;
|
||||
}
|
||||
Vec3d dir = Vec3d(-0.5f, -0.5f, std::sqrt(2) / 2.f);
|
||||
m_view_rotation = Eigen::AngleAxisd(Geometry::deg2rad(-45.0), Vec3d::UnitX()) * Eigen::AngleAxisd(Geometry::deg2rad(45.0), Vec3d::UnitZ());
|
||||
if (va_type == ViewAngleType::Iso_1) {
|
||||
dir = Vec3d(-0.5f, 0.5f, std::sqrt(2) / 2.f);
|
||||
m_view_rotation = Eigen::AngleAxisd(Geometry::deg2rad(-45.0), Vec3d::UnitX()) * Eigen::AngleAxisd(Geometry::deg2rad(135.0), Vec3d::UnitZ());
|
||||
} else if (va_type == ViewAngleType::Iso_2) {
|
||||
dir = Vec3d(0.5f, 0.5f, std::sqrt(2) / 2.f);
|
||||
m_view_rotation = Eigen::AngleAxisd(Geometry::deg2rad(-45.0), Vec3d::UnitX()) * Eigen::AngleAxisd(Geometry::deg2rad(225.0), Vec3d::UnitZ());
|
||||
} else if (va_type == ViewAngleType::Iso_3) {
|
||||
dir = Vec3d(0.5f, -0.5f, std::sqrt(2) / 2.f);
|
||||
m_view_rotation = Eigen::AngleAxisd(Geometry::deg2rad(-45.0), Vec3d::UnitX()) * Eigen::AngleAxisd(Geometry::deg2rad(315.0), Vec3d::UnitZ());
|
||||
}
|
||||
m_view_rotation.normalize();
|
||||
const Vec3d camera_pos = m_target + m_distance * dir;
|
||||
m_view_matrix.fromPositionOrientationScale(m_view_rotation * (-camera_pos), m_view_rotation, Vec3d::Ones());
|
||||
update_zenit();
|
||||
}
|
||||
|
||||
|
||||
@ -788,7 +805,8 @@ Vec3d Camera::validate_target(const Vec3d& target) const
|
||||
|
||||
void Camera::update_zenit()
|
||||
{
|
||||
m_zenit = Geometry::rad2deg(0.5 * M_PI - std::acos(std::clamp(-get_dir_forward().dot(Vec3d::UnitZ()), -1.0, 1.0))); }
|
||||
m_zenit = Geometry::rad2deg(0.5 * M_PI - std::acos(std::clamp(-get_dir_forward().dot(Vec3d::UnitZ()), -1.0, 1.0)));
|
||||
}
|
||||
|
||||
void Camera::update_target() {
|
||||
Vec3d temptarget = get_position() + m_distance * get_dir_forward();
|
||||
|
@ -43,6 +43,9 @@ struct Camera
|
||||
Rear,
|
||||
Count_ViewAngleType,
|
||||
Top_Plate,//for 3mf and Skip parts
|
||||
Iso_1,//clockwise rotate 90 degrees on the basis of Iso
|
||||
Iso_2,//clockwise rotate 180 degrees on the basis of Iso
|
||||
Iso_3,//clockwise rotate 270 degrees on the basis of Iso
|
||||
};
|
||||
bool requires_zoom_to_bed{ false };
|
||||
//BBS
|
||||
@ -178,7 +181,7 @@ private:
|
||||
void set_distance(double distance);
|
||||
|
||||
void set_default_orientation();
|
||||
void set_iso_orientation();
|
||||
void set_iso_orientation(ViewAngleType va_type = ViewAngleType::Iso);
|
||||
Vec3d validate_target(const Vec3d& target) const;
|
||||
void update_zenit();
|
||||
void update_target();
|
||||
|
@ -3659,7 +3659,7 @@ void GLCanvas3D::on_char(wxKeyEvent& evt)
|
||||
case '4': { select_view("rear"); break; }
|
||||
case '5': { select_view("left"); break; }
|
||||
case '6': { select_view("right"); break; }
|
||||
case '7': { select_plate(); break; }
|
||||
case '7': { select_view("iso");break; }
|
||||
#ifdef __APPLE__
|
||||
case 'k':
|
||||
case 'K':
|
||||
@ -4052,7 +4052,11 @@ void GLCanvas3D::on_key(wxKeyEvent& evt)
|
||||
}
|
||||
case '7':
|
||||
case WXK_NUMPAD7: //7 on numpad
|
||||
{ select_plate(); break; }
|
||||
{
|
||||
select_view("iso");
|
||||
m_gizmos.update_paint_base_camera_rotate_rad();
|
||||
break;
|
||||
}
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
@ -247,8 +247,9 @@ void KBShortcutsDialog::fill_shortcuts()
|
||||
{ctrl + "2", L("Camera view - Bottom")},
|
||||
{ctrl + "3", L("Camera view - Front")},
|
||||
{ctrl + "4", L("Camera view - Behind")},
|
||||
{ctrl + "5", L("Camera Angle - Left side")},
|
||||
{ctrl + "6", L("Camera Angle - Right side")},
|
||||
{ctrl + "5", L("Camera view - Left")},
|
||||
{ctrl + "6", L("Camera view - Right")},
|
||||
{ctrl + "7", L("Camera view - Isometric")},
|
||||
|
||||
{ctrl + "A", L("Select all objects")},
|
||||
{ctrl + L("Shift+D"), L("Delete all")},
|
||||
|
@ -2426,6 +2426,16 @@ static void add_common_view_menu_items(wxMenu* view_menu, MainFrame* mainFrame,
|
||||
"", nullptr, [can_change_view]() { return can_change_view(); }, mainFrame);
|
||||
append_menu_item(view_menu, wxID_ANY, _CTX(L_CONTEXT("Right", "Camera"), "Camera") + "\t" + ctrl + "6", _L("Right View"),[mainFrame](wxCommandEvent &) { mainFrame->select_view("right"); },
|
||||
"", nullptr, [can_change_view]() { return can_change_view(); }, mainFrame);
|
||||
append_menu_item(view_menu, wxID_ANY, _CTX(L_CONTEXT("Isometric", "Camera"), "Camera") + "\t" + ctrl + "7", _L("Isometric View"), [mainFrame](wxCommandEvent &) { mainFrame->select_view("iso"); }, "",
|
||||
nullptr, [can_change_view]() { return can_change_view(); }, mainFrame);
|
||||
#if !BBL_RELEASE_TO_PUBLIC
|
||||
append_menu_item(view_menu, wxID_ANY, _CTX(L_CONTEXT("Isometric 1", "Camera"), "Camera"), _L("Isometric 1 View"),
|
||||
[mainFrame](wxCommandEvent &) { mainFrame->select_view("iso_1"); }, "", nullptr, [can_change_view]() { return can_change_view(); }, mainFrame);
|
||||
append_menu_item(view_menu, wxID_ANY, _CTX(L_CONTEXT("Isometric 2", "Camera"), "Camera"), _L("Isometric 2 View"),
|
||||
[mainFrame](wxCommandEvent &) { mainFrame->select_view("iso_2"); }, "", nullptr, [can_change_view]() { return can_change_view(); }, mainFrame);
|
||||
append_menu_item(view_menu, wxID_ANY, _CTX(L_CONTEXT("Isometric 3", "Camera"), "Camera"), _L("Isometric 3 View"),
|
||||
[mainFrame](wxCommandEvent &) { mainFrame->select_view("iso_3"); }, "", nullptr, [can_change_view]() { return can_change_view(); }, mainFrame);
|
||||
#endif
|
||||
}
|
||||
|
||||
void MainFrame::init_menubar_as_editor()
|
||||
|
Loading…
x
Reference in New Issue
Block a user