Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/tesselationhelpers.cpp

    rf67b6e r299554  
    8181
    8282  if (fabs(m11) < MYEPSILON)
    83     eLog() << Verbose(1) << "three points are colinear." << endl;
     83    DoeLog(1) && (eLog()<< Verbose(1) << "three points are colinear." << endl);
    8484
    8585  center->x[0] =  0.5 * m12/ m11;
     
    8888
    8989  if (fabs(a.Distance(center) - RADIUS) > MYEPSILON)
    90     eLog() << Verbose(1) << "The given center is further way by " << fabs(a.Distance(center) - RADIUS) << " from a than RADIUS." << endl;
     90    DoeLog(1) && (eLog()<< Verbose(1) << "The given center is further way by " << fabs(a.Distance(center) - RADIUS) << " from a than RADIUS." << endl);
    9191
    9292  gsl_matrix_free(A);
     
    132132  Center->Scale(1./(sin(2.*alpha) + sin(2.*beta) + sin(2.*gamma)));
    133133  NewUmkreismittelpunkt->CopyVector(Center);
    134   Log() << Verbose(1) << "Center of new circumference is " << *NewUmkreismittelpunkt << ".\n";
     134  DoLog(1) && (Log() << Verbose(1) << "Center of new circumference is " << *NewUmkreismittelpunkt << ".\n");
    135135  // Here we calculated center of circumscribing circle, using barycentric coordinates
    136   Log() << Verbose(1) << "Center of circumference is " << *Center << " in direction " << *Direction << ".\n";
     136  DoLog(1) && (Log() << Verbose(1) << "Center of circumference is " << *Center << " in direction " << *Direction << ".\n");
    137137
    138138  TempNormal.CopyVector(&a);
     
    143143  if (fabs(HalfplaneIndicator) < MYEPSILON)
    144144    {
    145       if ((TempNormal.ScalarProduct(AlternativeDirection) <0 and AlternativeIndicator >0) or (TempNormal.ScalarProduct(AlternativeDirection) >0 and AlternativeIndicator <0))
     145      if ((TempNormal.ScalarProduct(AlternativeDirection) <0 && AlternativeIndicator >0) || (TempNormal.ScalarProduct(AlternativeDirection) >0 && AlternativeIndicator <0))
    146146        {
    147147          TempNormal.Scale(-1);
     
    150150  else
    151151    {
    152       if (TempNormal.ScalarProduct(Direction)<0 && HalfplaneIndicator >0 || TempNormal.ScalarProduct(Direction)>0 && HalfplaneIndicator<0)
     152      if (((TempNormal.ScalarProduct(Direction)<0) && (HalfplaneIndicator >0)) || ((TempNormal.ScalarProduct(Direction)>0) && (HalfplaneIndicator<0)))
    153153        {
    154154          TempNormal.Scale(-1);
     
    158158  TempNormal.Normalize();
    159159  Restradius = sqrt(RADIUS*RADIUS - Umkreisradius*Umkreisradius);
    160   Log() << Verbose(1) << "Height of center of circumference to center of sphere is " << Restradius << ".\n";
     160  DoLog(1) && (Log() << Verbose(1) << "Height of center of circumference to center of sphere is " << Restradius << ".\n");
    161161  TempNormal.Scale(Restradius);
    162   Log() << Verbose(1) << "Shift vector to sphere of circumference is " << TempNormal << ".\n";
     162  DoLog(1) && (Log() << Verbose(1) << "Shift vector to sphere of circumference is " << TempNormal << ".\n");
    163163
    164164  Center->AddVector(&TempNormal);
    165   Log() << Verbose(1) << "Center of sphere of circumference is " << *Center << ".\n";
     165  DoLog(1) && (Log() << Verbose(1) << "Center of sphere of circumference is " << *Center << ".\n");
    166166  GetSphere(&OtherCenter, a, b, c, RADIUS);
    167   Log() << Verbose(1) << "OtherCenter of sphere of circumference is " << OtherCenter << ".\n";
     167  DoLog(1) && (Log() << Verbose(1) << "OtherCenter of sphere of circumference is " << OtherCenter << ".\n");
    168168};
    169169
     
    192192  //Log() << Verbose(1) << "INFO: alpha = " << alpha/M_PI*180. << ", beta = " << beta/M_PI*180. << ", gamma = " << gamma/M_PI*180. << "." << endl;
    193193  if (fabs(M_PI - alpha - beta - gamma) > HULLEPSILON) {
    194     eLog() << Verbose(1) << "GetCenterofCircumcircle: Sum of angles " << (alpha+beta+gamma)/M_PI*180. << " > 180 degrees by " << fabs(M_PI - alpha - beta - gamma)/M_PI*180. << "!" << endl;
     194    DoeLog(2) && (eLog()<< Verbose(2) << "GetCenterofCircumcircle: Sum of angles " << (alpha+beta+gamma)/M_PI*180. << " > 180 degrees by " << fabs(M_PI - alpha - beta - gamma)/M_PI*180. << "!" << endl);
    195195  }
    196196
     
    226226  Vector helper;
    227227  double radius, alpha;
    228 
    229   helper.CopyVector(&NewSphereCenter);
     228  Vector RelativeOldSphereCenter;
     229  Vector RelativeNewSphereCenter;
     230
     231  RelativeOldSphereCenter.CopyVector(&OldSphereCenter);
     232  RelativeOldSphereCenter.SubtractVector(&CircleCenter);
     233  RelativeNewSphereCenter.CopyVector(&NewSphereCenter);
     234  RelativeNewSphereCenter.SubtractVector(&CircleCenter);
     235  helper.CopyVector(&RelativeNewSphereCenter);
    230236  // test whether new center is on the parameter circle's plane
    231237  if (fabs(helper.ScalarProduct(&CirclePlaneNormal)) > HULLEPSILON) {
    232     eLog() << Verbose(1) << "Something's very wrong here: NewSphereCenter is not on the band's plane as desired by " <<fabs(helper.ScalarProduct(&CirclePlaneNormal))  << "!" << endl;
     238    DoeLog(1) && (eLog()<< Verbose(1) << "Something's very wrong here: NewSphereCenter is not on the band's plane as desired by " <<fabs(helper.ScalarProduct(&CirclePlaneNormal))  << "!" << endl);
    233239    helper.ProjectOntoPlane(&CirclePlaneNormal);
    234240  }
    235   radius = helper.ScalarProduct(&helper);
     241  radius = helper.NormSquared();
    236242  // test whether the new center vector has length of CircleRadius
    237243  if (fabs(radius - CircleRadius) > HULLEPSILON)
    238     eLog() << Verbose(1) << "The projected center of the new sphere has radius " << radius << " instead of " << CircleRadius << "." << endl;
    239   alpha = helper.Angle(&OldSphereCenter);
     244    DoeLog(1) && (eLog()<< Verbose(1) << "The projected center of the new sphere has radius " << radius << " instead of " << CircleRadius << "." << endl);
     245  alpha = helper.Angle(&RelativeOldSphereCenter);
    240246  // make the angle unique by checking the halfplanes/search direction
    241247  if (helper.ScalarProduct(&SearchDirection) < -HULLEPSILON)  // acos is not unique on [0, 2.*M_PI), hence extra check to decide between two half intervals
    242248    alpha = 2.*M_PI - alpha;
    243   //Log() << Verbose(1) << "INFO: RelativeNewSphereCenter is " << helper << ", RelativeOldSphereCenter is " << OldSphereCenter << " and resulting angle is " << alpha << "." << endl;
    244   radius = helper.Distance(&OldSphereCenter);
     249  DoLog(1) && (Log() << Verbose(1) << "INFO: RelativeNewSphereCenter is " << helper << ", RelativeOldSphereCenter is " << RelativeOldSphereCenter << " and resulting angle is " << alpha << "." << endl);
     250  radius = helper.Distance(&RelativeOldSphereCenter);
    245251  helper.ProjectOntoPlane(&NormalVector);
    246252  // check whether new center is somewhat away or at least right over the current baseline to prevent intersecting triangles
    247253  if ((radius > HULLEPSILON) || (helper.Norm() < HULLEPSILON)) {
    248     //Log() << Verbose(1) << "INFO: Distance between old and new center is " << radius << " and between new center and baseline center is " << helper.Norm() << "." << endl;
     254    DoLog(1) && (Log() << Verbose(1) << "INFO: Distance between old and new center is " << radius << " and between new center and baseline center is " << helper.Norm() << "." << endl);
    249255    return alpha;
    250256  } else {
    251     //Log() << Verbose(1) << "INFO: NewSphereCenter " << helper << " is too close to OldSphereCenter" << OldSphereCenter << "." << endl;
     257    DoLog(1) && (Log() << Verbose(1) << "INFO: NewSphereCenter " << RelativeNewSphereCenter << " is too close to RelativeOldSphereCenter" << RelativeOldSphereCenter << "." << endl);
    252258    return 2.*M_PI;
    253259  }
     
    358364
    359365        if (status == GSL_SUCCESS) {
    360           Log() << Verbose(1) << "converged to minimum" <<  endl;
     366          DoLog(1) && (Log() << Verbose(1) << "converged to minimum" <<  endl);
    361367        }
    362368    } while (status == GSL_CONTINUE && iter < 100);
     
    388394
    389395  if (((t1 >= 0) && (t1 <= 1)) && ((t2 >= 0) && (t2 <= 1))) {
    390     Log() << Verbose(1) << "true intersection." << endl;
     396    DoLog(1) && (Log() << Verbose(1) << "true intersection." << endl);
    391397    result = true;
    392398  } else {
    393     Log() << Verbose(1) << "intersection out of region of interest." << endl;
     399    DoLog(1) && (Log() << Verbose(1) << "intersection out of region of interest." << endl);
    394400    result = false;
    395401  }
     
    426432  }
    427433
    428   Log() << Verbose(1) << "INFO: " << point << " has angle " << phi << " with respect to reference " << reference << "." << endl;
     434  DoLog(1) && (Log() << Verbose(1) << "INFO: " << point << " has angle " << phi << " with respect to reference " << reference << "." << endl);
    429435
    430436  return phi;
     
    473479    for (int j=i+1; j<3; j++) {
    474480      if (nodes[i] == NULL) {
    475         Log() << Verbose(1) << "Node nr. " << i << " is not yet present." << endl;
     481        DoLog(1) && (Log() << Verbose(1) << "Node nr. " << i << " is not yet present." << endl);
    476482        result = true;
    477483      } else if (nodes[i]->lines.find(nodes[j]->node->nr) != nodes[i]->lines.end()) {  // there already is a line
     
    487493        }
    488494      } else { // no line
    489         Log() << Verbose(1) << "The line between " << *nodes[i] << " and " << *nodes[j] << " is not yet present, hence no need for a degenerate triangle." << endl;
     495        DoLog(1) && (Log() << Verbose(1) << "The line between " << *nodes[i] << " and " << *nodes[j] << " is not yet present, hence no need for a degenerate triangle." << endl);
    490496        result = true;
    491497      }
    492498    }
    493499  if ((!result) && (counter > 1)) {
    494     Log() << Verbose(1) << "INFO: Degenerate triangle is ok, at least two, here " << counter << ", existing lines are used." << endl;
     500    DoLog(1) && (Log() << Verbose(1) << "INFO: Degenerate triangle is ok, at least two, here " << counter << ", existing lines are used." << endl);
    495501    result = true;
    496502  }
     
    506512//  Vector BaseLineVector, OrthogonalVector, helper;
    507513//  if (candidate1->BaseLine != candidate2->BaseLine) {  // sanity check
    508 //    eLog() << Verbose(1) << "sortCandidates was called for two different baselines: " << candidate1->BaseLine << " and " << candidate2->BaseLine << "." << endl;
     514//    DoeLog(1) && (eLog()<< Verbose(1) << "sortCandidates was called for two different baselines: " << candidate1->BaseLine << " and " << candidate2->BaseLine << "." << endl);
    509515//    //return false;
    510516//    exit(1);
     
    552558 * @return point which is second closest to the provided one
    553559 */
    554 TesselPoint* FindSecondClosestPoint(const Vector* Point, const LinkedCell* const LC)
     560TesselPoint* FindSecondClosestTesselPoint(const Vector* Point, const LinkedCell* const LC)
    555561{
    556562        Info FunctionInfo(__func__);
     
    565571  for(int i=0;i<NDIM;i++) // store indices of this cell
    566572    N[i] = LC->n[i];
    567   Log() << Verbose(1) << "INFO: Center cell is " << N[0] << ", " << N[1] << ", " << N[2] << " with No. " << LC->index << "." << endl;
     573  DoLog(1) && (Log() << Verbose(1) << "INFO: Center cell is " << N[0] << ", " << N[1] << ", " << N[2] << " with No. " << LC->index << "." << endl);
    568574
    569575  LC->GetNeighbourBounds(Nlower, Nupper);
     
    572578    for (LC->n[1] = Nlower[1]; LC->n[1] <= Nupper[1]; LC->n[1]++)
    573579      for (LC->n[2] = Nlower[2]; LC->n[2] <= Nupper[2]; LC->n[2]++) {
    574         const LinkedNodes *List = LC->GetCurrentCell();
     580        const LinkedCell::LinkedNodes *List = LC->GetCurrentCell();
    575581        //Log() << Verbose(1) << "The current cell " << LC->n[0] << "," << LC->n[1] << "," << LC->n[2] << endl;
    576582        if (List != NULL) {
    577           for (LinkedNodes::const_iterator Runner = List->begin(); Runner != List->end(); Runner++) {
     583          for (LinkedCell::LinkedNodes::const_iterator Runner = List->begin(); Runner != List->end(); Runner++) {
    578584            helper.CopyVector(Point);
    579585            helper.SubtractVector((*Runner)->node);
     
    607613 * @return point which is closest to the provided one, NULL if none found
    608614 */
    609 TesselPoint* FindClosestPoint(const Vector* Point, TesselPoint *&SecondPoint, const LinkedCell* const LC)
     615TesselPoint* FindClosestTesselPoint(const Vector* Point, TesselPoint *&SecondPoint, const LinkedCell* const LC)
    610616{
    611617        Info FunctionInfo(__func__);
     
    620626  for(int i=0;i<NDIM;i++) // store indices of this cell
    621627    N[i] = LC->n[i];
    622   Log() << Verbose(1) << "INFO: Center cell is " << N[0] << ", " << N[1] << ", " << N[2] << " with No. " << LC->index << "." << endl;
     628  DoLog(1) && (Log() << Verbose(1) << "INFO: Center cell is " << N[0] << ", " << N[1] << ", " << N[2] << " with No. " << LC->index << "." << endl);
    623629
    624630  LC->GetNeighbourBounds(Nlower, Nupper);
     
    627633    for (LC->n[1] = Nlower[1]; LC->n[1] <= Nupper[1]; LC->n[1]++)
    628634      for (LC->n[2] = Nlower[2]; LC->n[2] <= Nupper[2]; LC->n[2]++) {
    629         const LinkedNodes *List = LC->GetCurrentCell();
     635        const LinkedCell::LinkedNodes *List = LC->GetCurrentCell();
    630636        //Log() << Verbose(1) << "The current cell " << LC->n[0] << "," << LC->n[1] << "," << LC->n[2] << endl;
    631637        if (List != NULL) {
    632           for (LinkedNodes::const_iterator Runner = List->begin(); Runner != List->end(); Runner++) {
     638          for (LinkedCell::LinkedNodes::const_iterator Runner = List->begin(); Runner != List->end(); Runner++) {
    633639            helper.CopyVector(Point);
    634640            helper.SubtractVector((*Runner)->node);
    635             double currentNorm = helper. Norm();
     641            double currentNorm = helper.NormSquared();
    636642            if (currentNorm < distance) {
    637643              secondDistance = distance;
     
    653659  // output
    654660  if (closestPoint != NULL) {
    655     Log() << Verbose(1) << "Closest point is " << *closestPoint;
     661    DoLog(1) && (Log() << Verbose(1) << "Closest point is " << *closestPoint);
    656662    if (SecondPoint != NULL)
    657       Log() << Verbose(0) << " and second closest is " << *SecondPoint;
    658     Log() << Verbose(0) << "." << endl;
     663      DoLog(0) && (Log() << Verbose(0) << " and second closest is " << *SecondPoint);
     664    DoLog(0) && (Log() << Verbose(0) << "." << endl);
    659665  }
    660666  return closestPoint;
     
    680686  Normal.VectorProduct(&OtherBaseline);
    681687  Normal.Normalize();
    682   Log() << Verbose(1) << "First direction is " << Baseline << ", second direction is " << OtherBaseline << ", normal of intersection plane is " << Normal << "." << endl;
     688  DoLog(1) && (Log() << Verbose(1) << "First direction is " << Baseline << ", second direction is " << OtherBaseline << ", normal of intersection plane is " << Normal << "." << endl);
    683689
    684690  // project one offset point of OtherBase onto this plane (and add plane offset vector)
     
    697703  Normal.CopyVector(Intersection);
    698704  Normal.SubtractVector(Base->endpoints[0]->node->node);
    699   Log() << Verbose(1) << "Found closest point on " << *Base << " at " << *Intersection << ", factor in line is " << fabs(Normal.ScalarProduct(&Baseline)/Baseline.NormSquared()) << "." << endl;
     705  DoLog(1) && (Log() << Verbose(1) << "Found closest point on " << *Base << " at " << *Intersection << ", factor in line is " << fabs(Normal.ScalarProduct(&Baseline)/Baseline.NormSquared()) << "." << endl);
    700706
    701707  return Intersection;
     
    758764    }
    759765  } else {
    760     eLog() << Verbose(1) << "Given vrmlfile is " << vrmlfile << "." << endl;
     766    DoeLog(1) && (eLog()<< Verbose(1) << "Given vrmlfile is " << vrmlfile << "." << endl);
    761767  }
    762768  delete(center);
     
    833839    *rasterfile << "9\n#  terminating special property\n";
    834840  } else {
    835     eLog() << Verbose(1) << "Given rasterfile is " << rasterfile << "." << endl;
     841    DoeLog(1) && (eLog()<< Verbose(1) << "Given rasterfile is " << rasterfile << "." << endl);
    836842  }
    837843  IncludeSphereinRaster3D(rasterfile, Tess, cloud);
     
    856862    } else {
    857863      *tecplot << N << "-";
    858       for (int i=0;i<3;i++)
    859         *tecplot << (i==0 ? "" : "_") << TesselStruct->LastTriangle->endpoints[i]->node->Name;
     864      if (TesselStruct->LastTriangle != NULL) {
     865        for (int i=0;i<3;i++)
     866          *tecplot << (i==0 ? "" : "_") << TesselStruct->LastTriangle->endpoints[i]->node->Name;
     867      } else {
     868        *tecplot << "none";
     869      }
    860870    }
    861871    *tecplot << "\", N=" << TesselStruct->PointsOnBoundary.size() << ", E=" << TesselStruct->TrianglesOnBoundary.size() << ", DATAPACKING=POINT, ZONETYPE=FETRIANGLE" << endl;
    862     int i=0;
    863     for (cloud->GoToFirst(); !cloud->IsEnd(); cloud->GoToNext(), i++);
     872    int i=cloud->GetMaxId();
    864873    int *LookupList = new int[i];
    865874    for (cloud->GoToFirst(), i=0; !cloud->IsEnd(); cloud->GoToNext(), i++)
     
    876885    *tecplot << endl;
    877886    // print connectivity
    878     Log() << Verbose(1) << "The following triangles were created:" << endl;
     887    DoLog(1) && (Log() << Verbose(1) << "The following triangles were created:" << endl);
    879888    for (TriangleMap::const_iterator runner = TesselStruct->TrianglesOnBoundary.begin(); runner != TesselStruct->TrianglesOnBoundary.end(); runner++) {
    880       Log() << Verbose(1) << " " << runner->second->endpoints[0]->node->Name << "<->" << runner->second->endpoints[1]->node->Name << "<->" << runner->second->endpoints[2]->node->Name << endl;
     889      DoLog(1) && (Log() << Verbose(1) << " " << runner->second->endpoints[0]->node->Name << "<->" << runner->second->endpoints[1]->node->Name << "<->" << runner->second->endpoints[2]->node->Name << endl);
    881890      *tecplot << LookupList[runner->second->endpoints[0]->node->nr] << " " << LookupList[runner->second->endpoints[1]->node->nr] << " " << LookupList[runner->second->endpoints[2]->node->nr] << endl;
    882891    }
     
    899908  for (PointMap::const_iterator PointRunner = TesselStruct->PointsOnBoundary.begin(); PointRunner != TesselStruct->PointsOnBoundary.end(); PointRunner++) {
    900909    point = PointRunner->second;
    901     Log() << Verbose(1) << "INFO: Current point is " << *point << "." << endl;
     910    DoLog(1) && (Log() << Verbose(1) << "INFO: Current point is " << *point << "." << endl);
    902911    point->value = 0;
    903912    for (LineMap::iterator LineRunner = point->lines.begin(); LineRunner != point->lines.end(); LineRunner++) {
     
    923932  int counter = 0;
    924933
    925   Log() << Verbose(1) << "Check: List of Baselines with not two connected triangles:" << endl;
     934  DoLog(1) && (Log() << Verbose(1) << "Check: List of Baselines with not two connected triangles:" << endl);
    926935  for (testline = TesselStruct->LinesOnBoundary.begin(); testline != TesselStruct->LinesOnBoundary.end(); testline++) {
    927936    if (testline->second->triangles.size() != 2) {
    928       Log() << Verbose(2) << *testline->second << "\t" << testline->second->triangles.size() << endl;
     937      DoLog(2) && (Log() << Verbose(2) << *testline->second << "\t" << testline->second->triangles.size() << endl);
    929938      counter++;
    930939    }
    931940  }
    932941  if (counter == 0) {
    933     Log() << Verbose(1) << "None." << endl;
     942    DoLog(1) && (Log() << Verbose(1) << "None." << endl);
    934943    result = true;
    935944  }
     
    937946}
    938947
     948/** Counts the number of triangle pairs that contain the given polygon.
     949 * \param *P polygon with endpoints to look for
     950 * \param *T set of triangles to create pairs from containing \a *P
     951 */
     952int CountTrianglePairContainingPolygon(const BoundaryPolygonSet * const P, const TriangleSet * const T)
     953{
     954  Info FunctionInfo(__func__);
     955  // check number of endpoints in *P
     956  if (P->endpoints.size() != 4) {
     957    DoeLog(1) && (eLog()<< Verbose(1) << "CountTrianglePairContainingPolygon works only on polygons with 4 nodes!" << endl);
     958    return 0;
     959  }
     960
     961  // check number of triangles in *T
     962  if (T->size() < 2) {
     963    DoeLog(1) && (eLog()<< Verbose(1) << "Not enough triangles to have pairs!" << endl);
     964    return 0;
     965  }
     966
     967  DoLog(0) && (Log() << Verbose(0) << "Polygon is " << *P << endl);
     968  // create each pair, get the endpoints and check whether *P is contained.
     969  int counter = 0;
     970  PointSet Trianglenodes;
     971  class BoundaryPolygonSet PairTrianglenodes;
     972  for(TriangleSet::iterator Walker = T->begin(); Walker != T->end(); Walker++) {
     973    for (int i=0;i<3;i++)
     974      Trianglenodes.insert((*Walker)->endpoints[i]);
     975
     976    for(TriangleSet::iterator PairWalker = Walker; PairWalker != T->end(); PairWalker++) {
     977      if (Walker != PairWalker) { // skip first
     978        PairTrianglenodes.endpoints = Trianglenodes;
     979        for (int i=0;i<3;i++)
     980          PairTrianglenodes.endpoints.insert((*PairWalker)->endpoints[i]);
     981        const int size = PairTrianglenodes.endpoints.size();
     982        if (size == 4) {
     983          DoLog(0) && (Log() << Verbose(0) << " Current pair of triangles: " << **Walker << "," << **PairWalker << " with " << size << " distinct endpoints:" << PairTrianglenodes << endl);
     984          // now check
     985          if (PairTrianglenodes.ContainsPresentTupel(P)) {
     986            counter++;
     987            DoLog(0) && (Log() << Verbose(0) << "  ACCEPT: Matches with " << *P << endl);
     988          } else {
     989            DoLog(0) && (Log() << Verbose(0) << "  REJECT: No match with " << *P << endl);
     990          }
     991        } else {
     992          DoLog(0) && (Log() << Verbose(0) << "  REJECT: Less than four endpoints." << endl);
     993        }
     994      }
     995    }
     996    Trianglenodes.clear();
     997  }
     998  return counter;
     999};
     1000
     1001/** Checks whether two give polygons have two or more points in common.
     1002 * \param *P1 first polygon
     1003 * \param *P2 second polygon
     1004 * \return true - are connected, false = are note
     1005 */
     1006bool ArePolygonsEdgeConnected(const BoundaryPolygonSet * const P1, const BoundaryPolygonSet * const P2)
     1007{
     1008  Info FunctionInfo(__func__);
     1009  int counter = 0;
     1010  for(PointSet::const_iterator Runner = P1->endpoints.begin(); Runner != P1->endpoints.end(); Runner++) {
     1011    if (P2->ContainsBoundaryPoint((*Runner))) {
     1012      counter++;
     1013      DoLog(1) && (Log() << Verbose(1) << *(*Runner) << " of second polygon is found in the first one." << endl);
     1014      return true;
     1015    }
     1016  }
     1017  return false;
     1018};
     1019
     1020/** Combines second into the first and deletes the second.
     1021 * \param *P1 first polygon, contains all nodes on return
     1022 * \param *&P2 second polygon, is deleted.
     1023 */
     1024void CombinePolygons(BoundaryPolygonSet * const P1, BoundaryPolygonSet * &P2)
     1025{
     1026  Info FunctionInfo(__func__);
     1027  pair <PointSet::iterator, bool> Tester;
     1028  for(PointSet::iterator Runner = P2->endpoints.begin(); Runner != P2->endpoints.end(); Runner++) {
     1029    Tester = P1->endpoints.insert((*Runner));
     1030    if (Tester.second)
     1031      DoLog(0) && (Log() << Verbose(0) << "Inserting endpoint " << *(*Runner) << " into first polygon." << endl);
     1032  }
     1033  P2->endpoints.clear();
     1034  delete(P2);
     1035};
     1036
Note: See TracChangeset for help on using the changeset viewer.