Ignore:
Timestamp:
Apr 21, 2010, 12:07:01 PM (15 years ago)
Author:
Frederik Heber <heber@…>
Children:
1f2e46
Parents:
7d1633
git-author:
Frederik Heber <heber@…> (04/21/10 11:51:53)
git-committer:
Frederik Heber <heber@…> (04/21/10 12:07:01)
Message:

Rewrite of tesselation: treatment of degenerated triangles and polygons

several tricks have been necessary to make it work for heptane:

  • AddDegeneratedTriangle() is not used, instead AddCandidateTriangle() gets told which OptCenter to use, i.e. which triangle side to add
  • afterwards, in the case of a polygon (multiple candidates for a baseline) we have to set the candidate of internal edges in the polygon to the next point, such that AddTesselationLine() picks the right one
  • The we fill other open lines, needed in case of a degenerated triangle
  • If CheckDegeneracy() - which removes all candidates from the ListOfPoints, not just the first - results in true
  • Then we call AddCandidateTriangle() for the other side of it
  • and again in the case of a polygon, set the candidate for the internal edge accordingly.

Signed-off-by: Frederik Heber <heber@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • molecuilder/src/boundary.cpp

    r7d1633 rc43766  
    960960  bool freeLC = false;
    961961  bool status = false;
    962   CandidateForTesselation *baseline;
    963   LineMap::iterator testline;
     962  CandidateForTesselation *baseline = NULL;
    964963  bool OneLoopWithoutSuccessFlag = true;  // marks whether we went once through all baselines without finding any without two triangles
    965964  bool TesselationFailFlag = false;
    966   BoundaryTriangleSet *T = NULL;
    967965
    968966  if (TesselStruct == NULL) {
     
    997995
    998996    // 2b. find best candidate for each OpenLine
    999     for (CandidateMap::iterator Runner = TesselStruct->OpenLines.begin(); Runner != TesselStruct->OpenLines.end(); Runner++) {
    1000       baseline = Runner->second;
    1001       if (baseline->pointlist.empty()) {
    1002         T = (((baseline->BaseLine->triangles.begin()))->second);
    1003         Log() << Verbose(1) << "Finding best candidate for open line " << *baseline->BaseLine << " of triangle " << *T << endl;
    1004         TesselationFailFlag = TesselStruct->FindNextSuitableTriangle(*baseline, *T, RADIUS, LCList); //the line is there, so there is a triangle, but only one.
    1005       }
    1006     }
     997    TesselationFailFlag = TesselStruct->FindCandidatesforOpenLines(RADIUS, LCList);
    1007998
    1008999    // 2c. print OpenLines with candidates again
     
    10621053  StoreTrianglesinFile(mol, (const Tesselation *&)TesselStruct, filename, "");
    10631054
    1064   // correct degenerated polygons
    1065   TesselStruct->CorrectAllDegeneratedPolygons();
    1066 
    1067   // check envelope for consistency
    1068   status = CheckListOfBaselines(TesselStruct);
     1055//  // correct degenerated polygons
     1056//  TesselStruct->CorrectAllDegeneratedPolygons();
     1057//
     1058//  // check envelope for consistency
     1059//  status = CheckListOfBaselines(TesselStruct);
    10691060
    10701061  // write final envelope
Note: See TracChangeset for help on using the changeset viewer.