Exemple #1
0
int main(int argc, char* argv[]) {
  cout << "HELLO WORLD" << endl;
  //if (argc == 2) return -1;

  int currentArg = 1;

  ProgramSettings* settings = new ProgramSettings();

  // take in arguements and settings
  while (currentArg != argc) {
    char* arg = argv[currentArg];

    if (strcmp(arg, "--in") == 0) {
      settings->mesh = string(argv[++currentArg]);
    } else if (strcmp(arg, "--out") == 0) {
      cout << "FOUND OUTPUT:: " << endl;
      settings->outputMesh = string(argv[++currentArg]);
    } else if (strcmp(arg, "--config") == 0) {
      settings->config = string(argv[++currentArg]);
      cout << "FOUND FORCE FILE" << endl;
    } else if (strcmp(arg, "--force") == 0) {
      settings->outputForce = string(argv[++currentArg]);
    } else if (strcmp(arg, "--corner") == 0) {
      settings->corner = atoi(argv[++currentArg]);
    } else if (strcmp(arg, "--cubeAlign") == 0) {
      settings->needsAlignment = true;
      settings->cubeAlign = true;
      settings->depth = atof(argv[++currentArg]);
    } else if (strcmp(arg, "--topCubeAlign") == 0) {
      settings->needsAlignment = true;
      settings->topCubeAlign = true;
      settings->depth = atof(argv[++currentArg]);
    } else if (strcmp(arg, "--botCubeAlign") == 0) {
      settings->needsAlignment = true;
      settings->botCubeAlign = true;
      settings->depth = atof(argv[++currentArg]);
    } else if (strcmp(arg, "--rightCubeAlign") == 0) {
      settings->needsAlignment = true;
      settings->rightCubeAlign = true;
      settings->depth = atof(argv[++currentArg]);
    } else if (strcmp(arg, "--leftCubeAlign") == 0) {
      settings->needsAlignment = true;
      settings->leftCubeAlign = true;
      settings->depth = atof(argv[++currentArg]);
    } else if (strcmp(arg, "--frontCubeAlign") == 0) {
      settings->needsAlignment = true;
      settings->frontCubeAlign = true;
      settings->depth = atof(argv[++currentArg]);
    } else if (strcmp(arg, "--backCubeAlign") == 0) {
      settings->needsAlignment = true;
      settings->backCubeAlign = true;
      settings->depth = atof(argv[++currentArg]);
    } else if (strcmp(arg, "--maxForce") == 0) {
      settings->needsForce = true;
      cout << "FOUND MAX FORCE" << endl;
      settings->maxForce = atof(argv[++currentArg]);
    } else if (strcmp(arg, "--constant") == 0) {
      settings->needsForce = true;
      settings->constantForce = true;
      settings->maxForce = atof(argv[++currentArg]);
    } else if (strcmp(arg, "--impulse") == 0) {
      settings->needsForce = true;
      settings->impulseForce = true;
      settings->maxForce = atof(argv[++currentArg]);
    } else if (strcmp(arg, "--bezierFile") == 0) {
      settings->bezierForce = true;
      settings->bezierForceFile = string(argv[++currentArg]);
    } else if (strcmp(arg, "--topCubeForce") == 0) {
      settings->topCubeForce = true;
      settings->forceDepth = atof(argv[++currentArg]);
    } else if (strcmp(arg, "--botCubeForce") == 0) {
      settings->botCubeForce = true;
      settings->forceDepth = atof(argv[++currentArg]);
    } else if (strcmp(arg, "--rightCubeForce") == 0) {
      settings->rightCubeForce = true;
      settings->forceDepth = atof(argv[++currentArg]);
    } else if (strcmp(arg, "--leftCubeForce") == 0) {
      settings->leftCubeForce = true;
      settings->forceDepth = atof(argv[++currentArg]);
    } else if (strcmp(arg, "--frontCubeForce") == 0) {
      settings->frontCubeForce = true;
      settings->forceDepth = atof(argv[++currentArg]);
    } else if (strcmp(arg, "--backCubeForce") == 0) {
      settings->backCubeForce = true;
      settings->forceDepth = atof(argv[++currentArg]);
    } else if (strcmp(arg, "--domainMinX") == 0) {
      settings->domainForce = true;
      settings->domainX[0] = atof(argv[++currentArg]);
    } else if (strcmp(arg, "--domainMaxX") == 0) {
      settings->domainForce = true;
      settings->domainX[1] = atof(argv[++currentArg]);
    } else if (strcmp(arg, "--domainMinY") == 0) {
      settings->domainForce = true;
      settings->domainY[0] = atof(argv[++currentArg]);
    } else if (strcmp(arg, "--domainMaxY") == 0) {
      settings->domainForce = true;
      settings->domainY[1] = atof(argv[++currentArg]);
    } else if (strcmp(arg, "--domainMinZ") == 0) {
      settings->domainForce = true;
      settings->domainZ[0] = atof(argv[++currentArg]);
    } else if (strcmp(arg, "--domainMaxZ") == 0) {
      settings->domainForce = true;
      settings->domainZ[1] = atof(argv[++currentArg]);
    } else if (strcmp(arg, "--domainBezier") == 0) {
      settings->domainBezier = true;
    } else if (strcmp(arg, "--domainDirX") == 0) {
      settings->domainForce = true;
      settings->direction[0] = atof(argv[++currentArg]);
    } else if (strcmp(arg, "--domainDirY") == 0) {
      settings->domainForce = true;
      settings->direction[1] = atof(argv[++currentArg]);
    } else if (strcmp(arg, "--domainDirZ") == 0) {
      settings->domainForce = true;
      settings->direction[2] = atof(argv[++currentArg]);
    }

    currentArg++;
  }

  // stages of the program
  // read in all the verts and faces
  cout << "Making Mesh" << endl;
  Mesh* mesh = new Mesh(settings->mesh);
  cout << "Made Mesh" << endl;
  // calculate the bounding shape based on the verts
  BoundingVolume* volume = 0x0;
  //if (settings->needsAlignment) {
  if (true) {
    // initialize bounding volume
    //if (settings->cubeAlign) volume = mesh->createCubeBound(settings->depth);
    //else if (settings->topCubeAlign) volume = mesh->createTopBound(settings->depth);
    //else if (settings->botCubeAlign) volume = mesh->createBotBound(settings->depth);
    //else if (settings->rightCubeAlign) volume = mesh->createRightBound(settings->depth);
    //else if (settings->leftCubeAlign) volume = mesh->createLeftBound(settings->depth);
    //else if (settings->frontCubeAlign) volume = mesh->createFrontBound(settings->depth);
    //else if (settings->backCubeAlign) volume = mesh->createBackBound(settings->depth);
    cout << "Creating Fixed Volume" << endl;
    volume = mesh->createLeftBound(0.0);
    cout << "Created Fixed Volume" << endl;
    // translate the object to the origin
    //vec3 newOrigin = volume->getNewOrigin(settings->corner);
    cout << "Getting Origin" << endl;
    dvec3 newOrigin = volume->getNewOrigin(1);
    cout << "ORIGIN:: " << newOrigin[0] << " " << newOrigin[1] << " " << newOrigin[2] << endl;
    //mesh->translate(-newOrigin[0], -newOrigin[1], -newOrigin[2]);
    mesh->translate(-mesh->xExtremes[0], -mesh->yExtremes[1], -mesh->zExtremes[1]);
    cout << "Making Fixed" << endl;
    volume->makeFixed();
  }
  // calculate the force bounds and calculate all forces within it
  BoundingVolume* forceVolume = 0x0;
  //if (settings->needsForce
  cout << "Calculating Force Volume" << endl;
  if (true)
  {
    // initialize force bounding volume
    //if (settings->topCubeForce) forceVolume = mesh->createTopBound(settings->forceDepth);
    //else if (settings->botCubeForce) forceVolume = mesh->createBotBound(settings->forceDepth);
    //else if (settings->rightCubeForce) forceVolume = mesh->createRightBound(settings->forceDepth);
    //else if (settings->leftCubeForce) forceVolume = mesh->createLeftBound(settings->forceDepth);
    //else if (settings->frontCubeForce) forceVolume = mesh->createFrontBound(settings->forceDepth);
    //else if (settings->backCubeForce) forceVolume = mesh->createBackBound(settings->forceDepth);
    cout << "FIXED BOUNDS :: " << volume->verts.size() << endl;
    cout << "Creating Line Bound" << endl;
    cout << "MESH XBNDS :: " << mesh->xBnds()[0] << " " << mesh->xBnds()[1] << endl;
    cout << "MESH YBNDS :: " << mesh->yBnds()[0] << " " << mesh->yBnds()[1] << endl;
    cout << "MESH ZBNDS :: " << mesh->zBnds()[0] << " " << mesh->zBnds()[1] << endl;
    forceVolume = mesh->createLineBound(mesh->xBnds()[1], 0.0, mesh->zBnds()[1], false, true, false);
    // distribute force per vert in volume
    cout << "Distributing Max Force" << endl;
    cout << "MAX FORCE :: " << settings->maxForce << endl;
    forceVolume->distributeForce(settings->maxForce);
  }
  // print all verts with forces into the data file
  cout << "Writing All Files" << endl;
  mesh->writeToFile(settings);
  cout << "Cleaning Up" << endl;
  // clean up
  if (forceVolume) delete forceVolume;
  if (volume) delete volume;
  delete mesh;
  delete settings;
}