X-Git-Url: http://git.kpe.io/?p=ctsim.git;a=blobdiff_plain;f=tools%2Fpjinfo.cpp;h=8a4d0e24b36a12a6bc3a7c6475ccbeb90e7473a9;hp=0ca578c05d9c0e01d850f02651576fbaf1b99c47;hb=9703ace3c451ce079967284bf191783736dbc77f;hpb=bfcc769cf8019eabc8c65c07257c8dbee4b4c977 diff --git a/tools/pjinfo.cpp b/tools/pjinfo.cpp index 0ca578c..8a4d0e2 100644 --- a/tools/pjinfo.cpp +++ b/tools/pjinfo.cpp @@ -1,7 +1,7 @@ /***************************************************************************** ** FILE IDENTIFICATION ** -** Name: pjfinfo.cpp +** Name: pjinfo.cpp ** Purpose: Convert an projection data file to an image file ** Programmer: Kevin Rosenberg ** Date Started: April 2000 @@ -9,7 +9,7 @@ ** This is part of the CTSim program ** Copyright (C) 1983-2000 Kevin Rosenberg ** -** $Id: pjinfo.cpp,v 1.1 2000/09/02 05:17:29 kevin Exp $ +** $Id: pjinfo.cpp,v 1.2 2000/12/16 02:31:00 kevin Exp $ ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License (version 2) as @@ -26,7 +26,7 @@ ******************************************************************************/ /* FILE - * pjfinfo.c Convert Raysum to image + * pjinfo.c Convert Raysum to image * * DATE * August 2000 @@ -36,41 +36,53 @@ #include "timer.h" -enum { O_DUMP, O_HELP, O_VERSION }; +enum { O_BINARYHEADER, O_BINARYVIEWS, O_STARTVIEW, O_ENDVIEW, O_DUMP, O_HELP, O_VERSION }; static struct option my_options[] = { + {"binaryheader", 0, 0, O_BINARYHEADER}, + {"binaryviews", 0, 0, O_BINARYVIEWS}, + {"startview", 1, 0, O_STARTVIEW}, + {"endview", 1, 0, O_ENDVIEW}, {"dump", 0, 0, O_DUMP}, {"help", 0, 0, O_HELP}, {"version", 0, 0, O_VERSION}, {0, 0, 0, 0} }; -static const char* g_szIdStr = "$Id: pjinfo.cpp,v 1.1 2000/09/02 05:17:29 kevin Exp $"; +static const char* g_szIdStr = "$Id: pjinfo.cpp,v 1.2 2000/12/16 02:31:00 kevin Exp $"; void -pjfinfo_usage (const char *program) +pjinfo_usage (const char *program) { cout << "usage: " << fileBasename(program) << " proj-file [OPTIONS]" << endl; cout << "Display projection file information" << endl; - cout << endl; - cout << " --dump Dump all scan data" << endl; - cout << " --version Print version" << endl; - cout << " --help Print this help message" << endl; + cout << "\n"; + cout << " --binaryheader Dump binary header data\n"; + cout << " --binaryviews Dump binary view data\n"; + cout << " --startview n Beginning view number to display (default=0)\n"; + cout << " --endview n Ending view number to display (default=last view)\n"; + cout << " --dump Print all scan data ASCII format\n"; + cout << " --version Print version" << endl; + cout << " --help Print this help message" << endl; } int -pjfinfo_main (const int argc, char *const argv[]) +pjinfo_main (const int argc, char *const argv[]) { string pj_name; bool optDump = false; + bool optBinaryHeader = false; + bool optBinaryViews = false; + int optStartView = 0; + int optEndView = -1; // tells copyViewData to use default last view extern int optind; - Timer timerProgram; while (1) { + char *endptr, *endstr; int c = getopt_long (argc, argv, "", my_options, NULL); if (c == -1) break; @@ -80,6 +92,30 @@ pjfinfo_main (const int argc, char *const argv[]) case O_DUMP: optDump = true; break; + case O_BINARYHEADER: + optBinaryHeader = true; + break; + case O_BINARYVIEWS: + optBinaryViews = true; + break; + case O_STARTVIEW: + optStartView = strtol(optarg, &endptr, 10); + endstr = optarg + strlen(optarg); + if (endptr != endstr) { + cerr << "Error setting --startview to %s" << optarg << endl; + pjinfo_usage(argv[0]); + return (1); + } + break; + case O_ENDVIEW: + optEndView = strtol(optarg, &endptr, 10); + endstr = optarg + strlen(optarg); + if (endptr != endstr) { + cerr << "Error setting --endview to %s" << optarg << endl; + pjinfo_usage(argv[0]); + return (1); + } + break; case O_VERSION: #ifdef VERSION cout << "Version " << VERSION << endl << g_szIdStr << endl; @@ -89,33 +125,39 @@ pjfinfo_main (const int argc, char *const argv[]) return (0); case O_HELP: case '?': - pjfinfo_usage(argv[0]); + pjinfo_usage(argv[0]); return (0); default: - pjfinfo_usage(argv[0]); + pjinfo_usage(argv[0]); return (1); } } if (argc - optind != 1) { - pjfinfo_usage(argv[0]); + pjinfo_usage(argv[0]); return (1); } pj_name = argv[optind]; - Projections pj; - if (! pj.read (pj_name)) { - sys_error (ERR_SEVERE, "Can not open projection file %s", pj_name.c_str()); - return (1); - } - - if (optDump) - pj.printProjectionData(); + if (optBinaryHeader) + Projections::copyHeader (pj_name, cout); + else if (optBinaryViews) + Projections::copyViewData (pj_name, cout, optStartView, optEndView); else { - ostringstream os; - pj.printScanInfo (os); - cout << os.str(); + Projections pj; + if (! pj.read (pj_name)) { + sys_error (ERR_SEVERE, "Can not open projection file %s", pj_name.c_str()); + return (1); + } + + if (optDump) { + pj.printProjectionData (optStartView, optEndView); + } else { + ostringstream os; + pj.printScanInfo (os); + cout << os.str(); + } } return(0); @@ -129,7 +171,7 @@ main (const int argc, char *const argv[]) int retval = 1; try { - retval = pjfinfo_main(argc, argv); + retval = pjinfo_main(argc, argv); } catch (exception e) { cerr << "Exception: " << e.what() << endl; } catch (...) {