home *** CD-ROM | disk | FTP | other *** search
/ Gold Fish 3 / goldfish_volume_3.bin / files / gfx / 3d / irit / docs / cexample / transfrm.c < prev   
Encoding:
C/C++ Source or Header  |  1995-02-03  |  2.3 KB  |  92 lines

  1. #include "irit_sm.h"
  2. #include "allocate.h"
  3. #include "iritprsr.h"
  4. #include "geomat3d.h"
  5. #include "genmat.h"
  6. #include "getarg.h"
  7.  
  8. static char *CtrlStr =
  9. #ifdef DOUBLE
  10.     "Transfrm x%-Degs!F y%-Degs!F z%-Degs!F t%-X|Y|Z!F!F!F s%-Scale!F h%- DFiles!*s";
  11. #else
  12.     "Transfrm x%-Degs!f y%-Degs!f z%-Degs!f t%-X|Y|Z!f!f!f s%-Scale!f h%- DFiles!*s";
  13. #endif /* DOUBLE */
  14.  
  15. void main(int argc, char **argv)
  16. {
  17.     int NumFiles, Error,
  18.     RotXFlag = FALSE,
  19.     RotYFlag = FALSE,
  20.     RotZFlag = FALSE,
  21.     TransFlag = FALSE,
  22.     ScaleFlag = FALSE,
  23.     HelpFlag = FALSE;
  24.     char **FileNames;
  25.     RealType RotXDegrees, RotYDegrees, RotZDegrees, TransX, TransY, TransZ,
  26.     Scale;
  27.     MatrixType Mat1, TransMat;
  28.     IPObjectStruct *PObjs, *PObjsTrans, *PObj;
  29.  
  30.     if ((Error = GAGetArgs(argc, argv, CtrlStr,
  31.                &RotXFlag, &RotXDegrees,
  32.                &RotYFlag, &RotYDegrees,
  33.                &RotZFlag, &RotZDegrees,
  34.                &TransFlag, &TransX, &TransY, &TransZ,
  35.                &ScaleFlag, &Scale,
  36.                &HelpFlag,
  37.                &NumFiles, &FileNames)) != 0) {
  38.     GAPrintErrMsg(Error);
  39.     GAPrintHowTo(CtrlStr);
  40.     exit(1);
  41.     }
  42.  
  43.     if (HelpFlag) {
  44.     fprintf(stderr, "This is Transform...\n");
  45.     GAPrintHowTo(CtrlStr);
  46.     exit(0);
  47.     }
  48.  
  49.     if (NumFiles == 0) {
  50.     fprintf(stderr, "No data files to process.\n");
  51.     exit(2);
  52.     }
  53.  
  54.     /* Construct the transformation matrix: */
  55.     MatGenUnitMat(TransMat);
  56.     if (RotXFlag) {
  57.     MatGenMatRotX1(DEG2RAD(RotXDegrees), Mat1);
  58.     MatMultTwo4by4(TransMat, TransMat, Mat1);
  59.     }
  60.     if (RotYFlag) {
  61.     MatGenMatRotY1(DEG2RAD(RotYDegrees), Mat1);
  62.     MatMultTwo4by4(TransMat, TransMat, Mat1);
  63.     }
  64.     if (RotZFlag) {
  65.     MatGenMatRotZ1(DEG2RAD(RotZDegrees), Mat1);
  66.     MatMultTwo4by4(TransMat, TransMat, Mat1);
  67.     }
  68.     if (TransFlag) {
  69.     MatGenMatTrans(TransX, TransY, TransZ, Mat1);
  70.     MatMultTwo4by4(TransMat, TransMat, Mat1);
  71.     }
  72.     if (ScaleFlag) {
  73.     MatGenMatUnifScale(Scale, Mat1);
  74.     MatMultTwo4by4(TransMat, TransMat, Mat1);
  75.     }
  76.  
  77.     /* Get all the data from all the input files. */
  78.     PObjs = IritPrsrGetDataFiles(FileNames, NumFiles, TRUE, TRUE);
  79.  
  80.     /* Apply the transformation to all geometry in input file(s) and dump */
  81.     /* the transformed geometry to stdout.                  */
  82.  
  83.     PObjsTrans = GMTransformObjectList(PObjs, TransMat);
  84.     for (PObj = PObjsTrans; PObj != NULL; PObj = PObj -> Pnext)
  85.         IritPrsrStdoutObject(PObj);
  86.  
  87.     IPFreeObjectList(PObjs);
  88.     IPFreeObjectList(PObjsTrans);
  89.  
  90.     exit(0);
  91. }
  92.