00001 // This is gel/pop/pop_geometric_object.cxx 00002 #include "pop_geometric_object.h" 00003 //: 00004 // \file 00005 #include <pop/pop_edge.h> 00006 #include <vcl_iostream.h> 00007 00008 //: constructor 00009 pop_geometric_object::pop_geometric_object(pop_vertex *coordinate_system) 00010 { 00011 coordinate_system_ = coordinate_system; 00012 } 00013 00014 //: constructor 00015 pop_geometric_object::pop_geometric_object(pop_vertex *coordinate_system, vcl_vector<pop_parameter*> ¶m ): 00016 pop_object(param) 00017 { 00018 coordinate_system_ = coordinate_system; 00019 } 00020 00021 //: destructor 00022 pop_geometric_object::~pop_geometric_object() 00023 { 00024 } 00025 00026 //: we should be able to transform to another coordinate system 00027 pop_geometric_object* pop_geometric_object::transform(pop_vertex *destination) 00028 { 00029 // step one get a list of transformations 00030 if (!coordinate_system_) 00031 return 0; 00032 00033 vcl_list<pop_edge*> transforms; 00034 if (!(coordinate_system_->find_path(destination,transforms))) 00035 return 0; 00036 00037 // transform to the end of the list 00038 00039 vcl_list<pop_edge*>::iterator ei; 00040 pop_geometric_object* go_old = this; 00041 pop_geometric_object* go = this; 00042 00043 for (ei=transforms.begin();ei!=transforms.end();ei++) 00044 { 00045 go = (*ei)->get_transform()->transform(go); 00046 00047 if (!go) 00048 vcl_cout << "Warning: pop_geometric_object::transform could not transform object\n"; 00049 00050 // delete intermediary results should be done with smart pointers TODO 00051 00052 if (go_old != this) 00053 delete go_old; 00054 go_old = go; 00055 } 00056 00057 return go; 00058 } 00059 00060 double pop_geometric_object::cost(pop_geometric_object *other) 00061 { 00062 // should be delegated to another object 00063 return 0; 00064 }
1.5.1