1 // This is brl/bpro/core/vpgl_pro/processes/vpgl_get_perspective_cam_center_process.cxx 2 #include <iostream> 3 #include <fstream> 4 #include <bprb/bprb_func_process.h> 5 //: 6 // \file 7 8 #ifdef _MSC_VER 9 # include "vcl_msvc_warnings.h" 10 #endif 11 #include "vpgl/vpgl_camera_double_sptr.h" 12 #include "vpgl/vpgl_perspective_camera.h" 13 #include <vpgl/io/vpgl_io_perspective_camera.h> 14 #include "vsl/vsl_binary_io.h" 15 16 //: Init function vpgl_get_perspective_cam_center_process_cons(bprb_func_process & pro)17bool vpgl_get_perspective_cam_center_process_cons(bprb_func_process& pro) 18 { 19 //this process takes one input: the filename 20 bool ok=false; 21 std::vector<std::string> input_types; 22 input_types.emplace_back("vpgl_camera_double_sptr"); 23 ok = pro.set_input_types(input_types); 24 if (!ok) return ok; 25 26 std::vector<std::string> output_types; 27 output_types.emplace_back("float"); // x 28 output_types.emplace_back("float"); // y 29 output_types.emplace_back("float"); // z 30 ok = pro.set_output_types(output_types); 31 if (!ok) return ok; 32 33 return true; 34 } 35 36 //: Execute the process vpgl_get_perspective_cam_center_process(bprb_func_process & pro)37bool vpgl_get_perspective_cam_center_process(bprb_func_process& pro) 38 { 39 if (pro.n_inputs()< 1) { 40 std::cout << "vpgl_get_perspective_cam_center_process: The number of inputs should be 1" << std::endl; 41 return false; 42 } 43 44 // get the inputs 45 vpgl_camera_double_sptr cam_ptr = pro.get_input<vpgl_camera_double_sptr>(0); 46 auto* cam = dynamic_cast<vpgl_perspective_camera<double>*>(cam_ptr.ptr()); 47 if (!cam) { 48 std::cerr << "vpgl_get_view_direction_at_point_process: couldn't cast camera\n"; 49 return false; 50 } 51 52 vgl_point_3d<double> cent = cam->get_camera_center(); 53 pro.set_output_val<float>(0, (float)cent.x()); 54 pro.set_output_val<float>(1, (float)cent.y()); 55 pro.set_output_val<float>(2, (float)cent.z()); 56 57 return true; 58 } 59