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)17 bool 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)37 bool 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