ProjectData::ProjectData(const char* const prjtxt) { tileOffset = 0; letterOffset = numberOffset = 0; std::ifstream prjfile(prjtxt, std::ios::in); // Make working directory from project path char prjdir[strlen(prjtxt)+1]; strcpy(prjdir, prjtxt); // Find last path separator char* posix_seperator = strrchr(prjdir, '/'); // First, POSIX char* windows_seperator = strrchr(prjdir, '\\'); // Then whatever Windows uses if (posix_seperator != NULL || windows_seperator != NULL) { if (posix_seperator != NULL) (*posix_seperator) = '\0'; else if (windows_seperator != NULL) (*windows_seperator) = '\0'; chdir(prjdir); } while (!prjfile.eof()) { char line[256]; prjfile.getline(line, 256); infoType info_type = readInfoType(line); AssignInfo(info_type, line+strcspn(line, ":")+1); } }
int main(int argc, char* argv[]) { // parse arguments const char* optstring = "hr"; int c; bool reverse = false; while ((c = getopt (argc, argv, optstring)) != -1) { switch (c) { case 'h': usage(hugin_utils::stripPath(argv[0]).c_str()); return 0; case 'r': reverse = true; break; case '?': break; default: abort (); } } if (argc - optind < 1 || argc - optind > 2) { usage(hugin_utils::stripPath(argv[0]).c_str()); return 1; } std::string input=argv[optind]; HuginBase::Panorama pano; std::ifstream prjfile(input.c_str()); if (!prjfile.good()) { std::cerr << "could not open script : " << input << std::endl; return 1; } pano.setFilePrefix(hugin_utils::getPathPrefix(input)); AppBase::DocumentData::ReadWriteError err = pano.readData(prjfile); if (err != AppBase::DocumentData::SUCCESSFUL) { std::cerr << "error while parsing panos tool script: " << input << std::endl; std::cerr << "AppBase::DocumentData::ReadWriteError code: " << err << std::endl; return 1; } // set up output format std::cout.setf ( std::ios::fixed ) ; std::cout.precision ( 6 ) ; // should be ample if ( argc - optind == 1 ) { // no image number was passed. This triggers the new // behaviour to accept triplets on cin work_on_triplets ( pano , reverse ) ; return 0; } // an image number was passed, so proceed // as in the original version int imageNumber = atoi(argv[optind+1]); if (imageNumber >= pano.getNrOfImages()) { std::cerr << "Not enough images in panorama" << std::endl; return 1; } // pano tools interface HuginBase::PTools::Transform trafo; if (reverse) { trafo.createTransform(pano.getSrcImage(imageNumber), pano.getOptions()); } else { trafo.createInvTransform(pano.getSrcImage(imageNumber), pano.getOptions()); } double xin , yin , xout , yout ; // here's where the old-style IO was, now it's all streams. // It's also format-free input, so newlines don't matter while ( std::cin >> xin >> yin ) { trafo.transformImgCoord(xout, yout, xin, yin); std::cout << xout << " " << yout << std::endl ; } }