diff --git a/src/Camera.cc b/src/Camera.cc
index 14b4c1b7e..dabaa6fa6 100644
--- a/src/Camera.cc
+++ b/src/Camera.cc
@@ -118,13 +118,23 @@ double Camera::zoomValue() const
return viewer_distance;
}
+void Camera::setVpf(double f)
+{
+ fov = f;
+}
+
+double Camera::fovValue() const
+{
+ return fov;
+}
+
std::string Camera::statusText() const
{
const auto vpt = getVpt();
const auto vpr = getVpr();
- boost::format fmt(_("Viewport: translate = [ %.2f %.2f %.2f ], rotate = [ %.2f %.2f %.2f ], distance = %.2f"));
+ boost::format fmt(_("Viewport: translate = [ %.2f %.2f %.2f ], rotate = [ %.2f %.2f %.2f ], distance = %.2f, fov = %.2f"));
fmt % vpt.x() % vpt.y() % vpt.z()
% vpr.x() % vpr.y() % vpr.z()
- % viewer_distance;
+ % viewer_distance % fov;
return fmt.str();
}
diff --git a/src/Camera.h b/src/Camera.h
index 1a53dc5b2..89e562d90 100644
--- a/src/Camera.h
+++ b/src/Camera.h
@@ -30,6 +30,7 @@ public:
void setProjection(ProjectionType type);
void zoom(int delta, bool relative);
double zoomValue() const;
+ double fovValue() const;
void resetView();
void viewAll(const BoundingBox &bbox);
std::string statusText() const;
@@ -40,6 +41,7 @@ public:
Eigen::Vector3d getVpr() const;
void setVpr(double x, double y, double z);
void setVpd(double d);
+ void setVpf(double d);
// Gimbalcam
Eigen::Vector3d object_trans;
diff --git a/src/MainWindow.h b/src/MainWindow.h
index 6d0bf2f13..5055d7440 100644
--- a/src/MainWindow.h
+++ b/src/MainWindow.h
@@ -157,6 +157,7 @@ private slots:
void copyViewportTranslation();
void copyViewportRotation();
void copyViewportDistance();
+ void copyViewportFov();
void preferences();
void hideEditorToolbar();
void hide3DViewToolbar();
diff --git a/src/MainWindow.ui b/src/MainWindow.ui
index f05424495..14b2b132d 100644
--- a/src/MainWindow.ui
+++ b/src/MainWindow.ui
@@ -350,6 +350,7 @@
+
@@ -913,6 +914,11 @@
Copy vie&wport distance
+
+
+ Copy vie&wport fov
+
+
Increase Font &Size
diff --git a/src/builtin.cc b/src/builtin.cc
index a769d47a7..0e614cd87 100644
--- a/src/builtin.cc
+++ b/src/builtin.cc
@@ -114,6 +114,7 @@ Builtins::Builtins()
this->assignments.emplace_back(new Assignment("$vpt", make_shared(zero3)) );
this->assignments.emplace_back(new Assignment("$vpr", make_shared(zero3)) );
this->assignments.emplace_back(new Assignment("$vpd", make_shared(500)) );
+ this->assignments.emplace_back(new Assignment("$vpf", make_shared(22.5)) );
}
void Builtins::initKeywordList()
diff --git a/src/mainwin.cc b/src/mainwin.cc
index 96b1d66ea..c02fdcbee 100755
--- a/src/mainwin.cc
+++ b/src/mainwin.cc
@@ -323,6 +323,7 @@ MainWindow::MainWindow(const QStringList &filenames)
connect(this->editActionCopyVPT, SIGNAL(triggered()), this, SLOT(copyViewportTranslation()));
connect(this->editActionCopyVPR, SIGNAL(triggered()), this, SLOT(copyViewportRotation()));
connect(this->editActionCopyVPD, SIGNAL(triggered()), this, SLOT(copyViewportDistance()));
+ connect(this->editActionCopyVPF, SIGNAL(triggered()), this, SLOT(copyViewportFov()));
connect(this->editActionPreferences, SIGNAL(triggered()), this, SLOT(preferences()));
// Edit->Find
connect(this->editActionFind, SIGNAL(triggered()), this, SLOT(showFind()));
@@ -1466,6 +1467,12 @@ void MainWindow::copyViewportDistance()
QApplication::clipboard()->setText(txt);
}
+void MainWindow::copyViewportFov()
+{
+ const QString txt = QString::number(qglview->cam.fovValue(), 'f', 2);
+ QApplication::clipboard()->setText(txt);
+}
+
QList MainWindow::getTranslation() const
{
QList ret;
@@ -1651,6 +1658,7 @@ void MainWindow::updateTemporalVariables()
top_ctx->set_variable("$vpr", ValuePtr(vpr));
top_ctx->set_variable("$vpd", ValuePtr(qglview->cam.zoomValue()));
+ top_ctx->set_variable("$vpf", ValuePtr(qglview->cam.fovValue()));
}
@@ -1682,6 +1690,13 @@ void MainWindow::updateCamera(const std::shared_ptr ctx)
}else{
PRINTB("UI-WARNING: Unable to convert $vpd=%s to a number", vpd->toEchoString());
}
+
+ const auto vpf = ctx->lookup_variable("$vpf");
+ if (vpf->type() == Value::Type::NUMBER){
+ qglview->cam.setVpf(vpf->toDouble());
+ }else{
+ PRINTB("UI-WARNING: Unable to convert $vpf=%s to a number", vpf->toEchoString());
+ }
}
/*!