diff options
-rw-r--r-- | src/Camera.h | 13 | ||||
-rw-r--r-- | src/GLView.cc | 2 | ||||
-rw-r--r-- | src/QGLView.cc | 11 | ||||
-rw-r--r-- | src/openscad.cc | 4 | ||||
-rw-r--r-- | tests/CMakeLists.txt | 6 |
5 files changed, 28 insertions, 8 deletions
diff --git a/src/Camera.h b/src/Camera.h index dfc71f8..6079672 100644 --- a/src/Camera.h +++ b/src/Camera.h @@ -47,7 +47,8 @@ public: projection = Camera::PERSPECTIVE; } - void setup( std::vector<double> params ) { + void setup( std::vector<double> params ) + { if ( params.size() == 7 ) { type = Camera::GIMBAL; object_trans << params[0], params[1], params[2]; @@ -62,6 +63,16 @@ public: } } + void gimbalDefaultTranslate() + { // match the GUI viewport numbers (historical reasons) + object_trans.x() *= -1; + object_trans.y() *= -1; + object_trans.z() *= -1; + object_rot.x() = fmodf(360 - object_rot.x() + 90, 360 ); + object_rot.y() = fmodf(360 - object_rot.y(), 360); + object_rot.z() = fmodf(360 - object_rot.z(), 360); + } + // Vectorcam Eigen::Vector3d eye; Eigen::Vector3d center; // (aka 'target') diff --git a/src/GLView.cc b/src/GLView.cc index 822a246..1cfe82c 100644 --- a/src/GLView.cc +++ b/src/GLView.cc @@ -460,7 +460,7 @@ void GLView::showAxes() void GLView::showCrosshairs() { - // FIXME: this might not work with Vector camera + // FIXME: this might not work with Vector camera // FIXME: Crosshairs and axes are lighted, this doesn't make sense and causes them // to change color based on view orientation. glLineWidth(3); diff --git a/src/QGLView.cc b/src/QGLView.cc index b23ba8e..8aaeaf2 100644 --- a/src/QGLView.cc +++ b/src/QGLView.cc @@ -147,13 +147,18 @@ void QGLView::resizeGL(int w, int h) void QGLView::paintGL() { - GLView::gimbalCamPaintGL(); + GLView::gimbalCamPaintGL(); if (statusLabel) { QString msg; + + Camera nc( cam ); + nc.gimbalDefaultTranslate(); msg.sprintf("Viewport: translate = [ %.2f %.2f %.2f ], rotate = [ %.2f %.2f %.2f ], distance = %.2f", - -cam.object_trans.x(), -cam.object_trans.y(), -cam.object_trans.z(), - fmodf(360 - cam.object_rot.x() + 90, 360), fmodf(360 - cam.object_rot.y(), 360), fmodf(360 - cam.object_rot.z(), 360), cam.viewer_distance); + nc.object_trans.x(), nc.object_trans.y(), nc.object_trans.z(), + nc.object_rot.x(), nc.object_rot.y(), nc.object_rot.z(), + nc.viewer_distance ); + statusLabel->setText(msg); } diff --git a/src/openscad.cc b/src/openscad.cc index e657cb0..2fe5cde 100644 --- a/src/openscad.cc +++ b/src/openscad.cc @@ -127,6 +127,10 @@ Camera get_camera( po::variables_map vm ) } } + if (camera.type == Camera::GIMBAL) { + camera.gimbalDefaultTranslate(); + } + if (vm.count("projection")) { string proj = vm["projection"].as<string>(); if (proj=="o" || proj=="ortho" || proj=="orthogonal") diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index f0b31e9..79a285e 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -895,15 +895,15 @@ add_cmdline_test(openscad-camdist EXE ${GUI_BINPATH} SUFFIX png FILES ${CMAKE_SOURCE_DIR}/../examples/example001.scad) add_cmdline_test(openscad-camrot EXE ${GUI_BINPATH} - ARGS --imgsize=500,500 --camera=0,0,0,10,22.5,45,300 examples/example001.scad -o + ARGS --imgsize=500,500 --camera=0,0,0,440,337.5,315,300 examples/example001.scad -o SUFFIX png FILES ${CMAKE_SOURCE_DIR}/../examples/example001.scad) add_cmdline_test(openscad-camtrans EXE ${GUI_BINPATH} - ARGS --imgsize=500,500 --camera=20,100,10,0,0,0,300 examples/example001.scad -o + ARGS --imgsize=500,500 --camera=100,-20,-10,90,0,90,300 examples/example001.scad -o SUFFIX png FILES ${CMAKE_SOURCE_DIR}/../examples/example001.scad) add_cmdline_test(openscad-camortho EXE ${GUI_BINPATH} - ARGS --imgsize=500,500 --camera=20,100,10,0,0,0,300 examples/example001.scad --projection=o -o + ARGS --imgsize=500,500 --camera=100,-20,-10,90,0,90,300 examples/example001.scad --projection=o -o SUFFIX png FILES ${CMAKE_SOURCE_DIR}/../examples/example001.scad) add_cmdline_test(openscad-cameye EXE ${GUI_BINPATH} |