ctatoply.cc
上传用户:kellyonhid
上传日期:2013-10-12
资源大小:932k
文件大小:1k
源码类别:

3D图形编程

开发平台:

Visual C++

  1. /* ctatoply.cc 
  2.  * jjg / dmich '98
  3.  * ----
  4.  * simple util to turn a cta into rangegrid and save the triangulated mesh of
  5.  * highest resolution
  6.  */
  7. #include "MeshSet.h"
  8. #include "ctafile.h"
  9. #include "RangeGrid.h"
  10. #include "Pnt3.h"
  11. int main (int argc, char **argv)
  12. {
  13.   RangeGrid *rg;
  14.   Mesh *mesh;
  15.   Pnt3 *avgNorm, avgView;
  16.   Pnt3 diff;
  17.   int infoFlag;
  18.   if (argc < 3) {
  19.     printf("nctatoply in.cta out.plyn");
  20.     printf("-------n");
  21.     printf("will output a fully sampled mesh from a cta file via rangegridn");
  22.     printf("n");
  23.     return 0;
  24.   }
  25.   if ((argc >= 4) && (argv[3][0] == '-') && (argv[3][1] == 'i')) {
  26.     infoFlag = true;
  27.   }
  28.   else infoFlag = false;
  29.   rg = ImportCTAFile(argv[1], &avgView);
  30.   if (rg == NULL) {
  31.     printf("Couldn't import the CTA as rangegrid... something went wrong.n");
  32.     return -1;
  33.   }
  34.   mesh = rg->toMesh(1, FALSE);
  35.   avgNorm = mesh->getAvgNormal();
  36.   diff = *avgNorm - avgView;
  37.   if (infoFlag) {
  38.     cout << "Avg Norm is " << *avgNorm << endl;
  39.     cout << "Avg View is " << avgView << endl;
  40.   }
  41.   cout << "Difference has length " << diff.norm() << endl;
  42.   if (diff.norm() > 1.41) {
  43.     printf("Flipping normals...n");
  44.     mesh->flipNormals();
  45.   }
  46.   if (!mesh->writePlyFile(argv[2], FALSE, FALSE, NULL)) {
  47.     printf("Couldn't write out the PLY filen");
  48.     return -1;
  49.   }
  50.   return 1;
  51. }
  52.