Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
#include "bob_dom_frame.h"//---------------------------------------------------------------------------------bool bob_dom_frame::point3d::load(bob_dom_ibinaryfilestream& is){if(!is.good()) return false;is >> x >> y >> z;return !is.fail();}//---------------------------------------------------------------------------------bool bob_dom_frame::point3d::toFile(bob_dom_otextfilestream & os){os << noSemicolons << x << ';' << y << ';' << z << "; ";return os.good();}//---------------------------------------------------------------------------------bool bob_dom_frame::point3d::toFile(bob_dom_obinaryfilestream& os){os << x << y << z;return os.good();}//---------------------------------------------------------------------------------bool bob_dom_frame::rgb::load(bob_dom_ibinaryfilestream& is){if(!is.good()) return false;is >> r >> g >> b;return !is.fail();}//---------------------------------------------------------------------------------bool bob_dom_frame::rgb::toFile(bob_dom_otextfilestream & os){os << noSemicolons << r << ';' << g << ';' << b << "; ";return os.good();}//---------------------------------------------------------------------------------bool bob_dom_frame::rgb::toFile(bob_dom_obinaryfilestream& os){os << r << g << b;return os.good();}//---------------------------------------------------------------------------------bool bob_dom_frame::angle_axis::load(bob_dom_ibinaryfilestream& is){if(!is.good()) return false;is >> angle >> x >> y >> z;return(!is.fail());}//---------------------------------------------------------------------------------bool bob_dom_frame::angle_axis::toFile(bob_dom_otextfilestream& os){os << noSemicolons << angle << ';' << x << ';' << y << ';' << z << "; ";return os.good();}//---------------------------------------------------------------------------------bool bob_dom_frame::angle_axis::toFile(bob_dom_obinaryfilestream& os){os << angle << x << y << z;return os.good();}//---------------------------------------------------------------------------------bool bob_dom_frame::tcb_info::load(bob_dom_ibinaryfilestream& is){if(!is.good()) return false;is >> tension >> continuity >> bias >> easeFrom >> easeTo;return !is.fail();}//---------------------------------------------------------------------------------bool bob_dom_frame::tcb_info::toFile(bob_dom_otextfilestream & os){os << noSemicolons;os << tension << ';' << continuity << ';' << bias << ';' << easeFrom << ';' << easeTo << "; ";return os.good();}//---------------------------------------------------------------------------------bool bob_dom_frame::tcb_info::toFile(bob_dom_obinaryfilestream& os){os << tension << continuity << bias << easeFrom << easeTo;return os.good();}//---------------------------------------------------------------------------------bool bob_dom_frame::load(bob_dom_ibinaryfilestream& is){is >> flags;// if we don't know some bits in the flags, the load will probably fail but not necessarilyif((flags & ~flagMask) > 0)error(s_warning, e_unsupportedFrameFlags, "0x%X - unsupported bits set in frame flags", flags);// these flags are "known" but they were never found so I don't know how to treat themif(flags & CUT_F_POSBEZINFO)error(s_warning, e_unsupportedFrameFlags, "0x%X: CUT_F_POSBEZINFO encountered - don't know how to output", flags);if(flags & CUT_F_SAMESCALE)error(s_warning, e_unsupportedFrameFlags, "0x%X: CUT_F_SAMESCALE encountered", flags);if((flags & CUT_F_SAMEPOS)==0){if(position.load(is)==false) { error(e_notEnoughData, "Error loading position"); return false; }if((flags & CUT_F_POSTCBINFO) > 0) {pos_tcb_info=new tcb_info();if(pos_tcb_info->load(is)==false) { error(e_notEnoughData, "Error loading position TCB data"); return false; }}}if((flags & CUT_F_SAMEROT)==0 && (flags & CUT_F_ROT) > 0){rotation=new angle_axis();if(rotation->load(is)==false) { error(e_notEnoughData, "Error loading rotation"); return false; }if((flags & CUT_F_ROTTCBINFO) > 0) {rot_tcb_info=new tcb_info();if(rot_tcb_info->load(is)==false) { error(e_notEnoughData, "Error loading rotation TCB data"); return false; }}}if((flags & CUT_F_TARGETPOS) > 0) {if((flags & CUT_F_SAMETARGET) == 0){targetPos=new point3d();if(targetPos->load(is)==false) { error(e_notEnoughData, "Error loading target position data"); return false; }}if((flags & CUT_F_SAMEROT) == 0){is >> rollAngle;if(is.fail()) { error(e_notEnoughData, "Error loading roll angle"); return false; }}if((flags & CUT_F_TPOSTCBINFO) > 0) {tpos_tcb_info=new tcb_info();if(tpos_tcb_info->load(is)==false) { error(e_notEnoughData, "Error loading target position TCB data"); return false; }}}if((flags & CUT_F_SAMEFOV)==0 && (flags & CUT_F_FOV) > 0){is >> fov;if(is.fail()) { error(e_notEnoughData, "Error loading FOV"); return false; }}if((flags & CUT_F_SAMECOLOR)==0 && (flags & CUT_F_COLOR) > 0){color=new rgb();if(color->load(is)==false) { error(e_notEnoughData, "Error loading RGB"); return false; }}is >> length >> index;if(is.fail()) { error(e_notEnoughData, "Error loading length or index"); return false; }return !is.fail();}//---------------------------------------------------------------------------------bool bob_dom_frame::toFile(bob_dom_obinaryfilestream& os){os << flags;if((flags & CUT_F_SAMEPOS)==0){position.toFile(os);if(pos_tcb_info)pos_tcb_info->toFile(os);}if((flags & CUT_F_SAMEROT)==0 && rotation){rotation->toFile(os);if(rot_tcb_info)rot_tcb_info->toFile(os);}if(flags & CUT_F_TARGETPOS) {if(targetPos)targetPos->toFile(os);if((flags & CUT_F_SAMEROT) == 0)os << rollAngle;if(tpos_tcb_info)tpos_tcb_info->toFile(os);}if((flags & CUT_F_SAMEFOV)==0 && (flags & CUT_F_FOV) > 0)os << fov;if((flags & CUT_F_SAMECOLOR)==0 && (flags & CUT_F_COLOR) > 0)color->toFile(os);os << length << index;return os.good();}//---------------------------------------------------------------------------------bool bob_dom_frame::toFile(bob_dom_otextfilestream& os){os << noSemicolons << "{ " << hex << "0x" << flags << dec << "; ";if((flags & CUT_F_SAMEPOS)==0){position.toFile(os);if(pos_tcb_info)pos_tcb_info->toFile(os);}if((flags & CUT_F_SAMEROT)==0 && rotation){rotation->toFile(os);if(rot_tcb_info)rot_tcb_info->toFile(os);}if((flags & CUT_F_TARGETPOS) > 0) {if(targetPos)targetPos->toFile(os);if((flags & CUT_F_SAMEROT) == 0)os << rollAngle << "; ";if(tpos_tcb_info)tpos_tcb_info->toFile(os);}if((flags & CUT_F_SAMEFOV)==0 && (flags & CUT_F_FOV) > 0)os << fov << "; ";if((flags & CUT_F_SAMECOLOR)==0 && (flags & CUT_F_COLOR) > 0)color->toFile(os);os << autoSemicolons << length << index << noSemicolons << '}';return os.good();}//---------------------------------------------------------------------------------int bob_dom_frame::valueCount(){int size=0;if((flags & CUT_F_SAMEPOS)==0){size+=3;if((flags & CUT_F_POSTCBINFO) > 0)size+=5;}if((flags & CUT_F_SAMEROT)==0 && (flags & CUT_F_ROT) > 0){size+=4;if((flags & CUT_F_ROTTCBINFO) > 0)size+=5;}if((flags & CUT_F_TARGETPOS) > 0) {if((flags & CUT_F_SAMETARGET) == 0)size+=3;if((flags & CUT_F_SAMEROT) == 0)size++;if((flags & CUT_F_TPOSTCBINFO) > 0)size+=5;}if((flags & CUT_F_SAMEFOV)==0 && (flags & CUT_F_FOV) > 0)size+=1;if((flags & CUT_F_SAMECOLOR)==0 && (flags & CUT_F_COLOR) > 0)size+=3;return size;}//---------------------------------------------------------------------------------