1 // This is brl/bseg/betr/pro/processes/betr_set_event_trigger_data_process.cxx 2 //: 3 // \file 4 // \brief A process for seting an event_trigger data to an event_trigger 5 // 6 7 #include <iostream> 8 #include <fstream> 9 #include <string> 10 #include <bprb/bprb_func_process.h> 11 #ifdef _MSC_VER 12 # include "vcl_msvc_warnings.h" 13 #endif 14 15 #include <betr/betr_event_trigger.h> 16 #include "vpgl/vpgl_camera_double_sptr.h" 17 #include "vpgl/vpgl_camera.h" 18 #include "vpgl/vpgl_rational_camera.h" 19 #include "vpgl/vpgl_local_rational_camera.h" 20 21 22 namespace betr_set_event_trigger_partial_data_process_globals 23 { 24 constexpr unsigned n_inputs_ = 5; 25 constexpr unsigned n_outputs_ = 0; 26 } 27 betr_set_event_trigger_partial_data_process_cons(bprb_func_process & pro)28bool betr_set_event_trigger_partial_data_process_cons(bprb_func_process& pro) 29 { 30 using namespace betr_set_event_trigger_partial_data_process_globals; 31 32 //process takes 5 inputs 33 std::vector<std::string> input_types_(n_inputs_); 34 input_types_[0] = "betr_event_trigger_sptr";// event_trigger 35 input_types_[1] = "vil_image_resource_sptr";// image 36 input_types_[2] = "vpgl_camera_double_sptr";// camera 37 input_types_[3] = "bool"; // is a reference object (or if false an event object) 38 input_types_[4] = "bool"; // keep reference data (false = clear reference data) 39 40 // process has 0 outputs 41 std::vector<std::string> output_types_(n_outputs_); 42 return pro.set_input_types(input_types_) && pro.set_output_types(output_types_); 43 } 44 betr_set_event_trigger_partial_data_process(bprb_func_process & pro)45bool betr_set_event_trigger_partial_data_process(bprb_func_process& pro) 46 { 47 using namespace betr_set_event_trigger_partial_data_process_globals; 48 49 // check number of inputs 50 if ( pro.n_inputs() < n_inputs_ ) { 51 std::cout << pro.name() << ": The input number should be " << n_inputs_<< std::endl; 52 return false; 53 } 54 55 // get the inputs 56 // "cam" Assumed to be a global rational camera, projecting lon, lat, elv to (u,v) 57 unsigned i = 0; 58 betr_event_trigger_sptr event_trigger = pro.get_input<betr_event_trigger_sptr>(i++); 59 vil_image_resource_sptr imgr = pro.get_input<vil_image_resource_sptr>(i++); 60 vpgl_camera_double_sptr cam = pro.get_input<vpgl_camera_double_sptr>(i++); 61 bool is_reference = pro.get_input<bool>(i++); 62 bool keep_data = pro.get_input<bool>(i++); 63 64 // check inputs 65 if(!event_trigger || !imgr || !cam) 66 return false; 67 if(!is_reference && keep_data) { 68 std::cout << "Cannot append event data to trigger" << std::endl; 69 return false; 70 } 71 72 // convert the camera to local rational cameras using the origin of the event trigger 73 auto* rcam = dynamic_cast<vpgl_rational_camera<double>*>(cam.ptr()); 74 if(!rcam) 75 return false; 76 vpgl_local_rational_camera<double>* lcam = new vpgl_local_rational_camera<double>(event_trigger->lvcs(),*rcam); 77 vpgl_camera_double_sptr cam_converted = dynamic_cast<vpgl_camera<double>*>(lcam); 78 if(!cam_converted) 79 return false; 80 81 if (is_reference) { 82 event_trigger->set_ref_image(imgr,false,keep_data); 83 event_trigger->set_ref_camera(cam_converted,keep_data); 84 } else { 85 event_trigger->set_evt_image(imgr); 86 event_trigger->set_evt_camera(cam_converted); 87 } 88 89 return true; 90 } 91