Changes in src/tesselationhelpers.cpp [f67b6e:299554]
- File:
-
- 1 edited
-
src/tesselationhelpers.cpp (modified) (30 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/tesselationhelpers.cpp
rf67b6e r299554 81 81 82 82 if (fabs(m11) < MYEPSILON) 83 eLog() << Verbose(1) << "three points are colinear." << endl;83 DoeLog(1) && (eLog()<< Verbose(1) << "three points are colinear." << endl); 84 84 85 85 center->x[0] = 0.5 * m12/ m11; … … 88 88 89 89 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); 91 91 92 92 gsl_matrix_free(A); … … 132 132 Center->Scale(1./(sin(2.*alpha) + sin(2.*beta) + sin(2.*gamma))); 133 133 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"); 135 135 // 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"); 137 137 138 138 TempNormal.CopyVector(&a); … … 143 143 if (fabs(HalfplaneIndicator) < MYEPSILON) 144 144 { 145 if ((TempNormal.ScalarProduct(AlternativeDirection) <0 and AlternativeIndicator >0) or (TempNormal.ScalarProduct(AlternativeDirection) >0 andAlternativeIndicator <0))145 if ((TempNormal.ScalarProduct(AlternativeDirection) <0 && AlternativeIndicator >0) || (TempNormal.ScalarProduct(AlternativeDirection) >0 && AlternativeIndicator <0)) 146 146 { 147 147 TempNormal.Scale(-1); … … 150 150 else 151 151 { 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))) 153 153 { 154 154 TempNormal.Scale(-1); … … 158 158 TempNormal.Normalize(); 159 159 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"); 161 161 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"); 163 163 164 164 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"); 166 166 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"); 168 168 }; 169 169 … … 192 192 //Log() << Verbose(1) << "INFO: alpha = " << alpha/M_PI*180. << ", beta = " << beta/M_PI*180. << ", gamma = " << gamma/M_PI*180. << "." << endl; 193 193 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); 195 195 } 196 196 … … 226 226 Vector helper; 227 227 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); 230 236 // test whether new center is on the parameter circle's plane 231 237 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); 233 239 helper.ProjectOntoPlane(&CirclePlaneNormal); 234 240 } 235 radius = helper. ScalarProduct(&helper);241 radius = helper.NormSquared(); 236 242 // test whether the new center vector has length of CircleRadius 237 243 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); 240 246 // make the angle unique by checking the halfplanes/search direction 241 247 if (helper.ScalarProduct(&SearchDirection) < -HULLEPSILON) // acos is not unique on [0, 2.*M_PI), hence extra check to decide between two half intervals 242 248 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); 245 251 helper.ProjectOntoPlane(&NormalVector); 246 252 // check whether new center is somewhat away or at least right over the current baseline to prevent intersecting triangles 247 253 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); 249 255 return alpha; 250 256 } 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); 252 258 return 2.*M_PI; 253 259 } … … 358 364 359 365 if (status == GSL_SUCCESS) { 360 Log() << Verbose(1) << "converged to minimum" << endl;366 DoLog(1) && (Log() << Verbose(1) << "converged to minimum" << endl); 361 367 } 362 368 } while (status == GSL_CONTINUE && iter < 100); … … 388 394 389 395 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); 391 397 result = true; 392 398 } 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); 394 400 result = false; 395 401 } … … 426 432 } 427 433 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); 429 435 430 436 return phi; … … 473 479 for (int j=i+1; j<3; j++) { 474 480 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); 476 482 result = true; 477 483 } else if (nodes[i]->lines.find(nodes[j]->node->nr) != nodes[i]->lines.end()) { // there already is a line … … 487 493 } 488 494 } 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); 490 496 result = true; 491 497 } 492 498 } 493 499 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); 495 501 result = true; 496 502 } … … 506 512 // Vector BaseLineVector, OrthogonalVector, helper; 507 513 // 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); 509 515 // //return false; 510 516 // exit(1); … … 552 558 * @return point which is second closest to the provided one 553 559 */ 554 TesselPoint* FindSecondClosest Point(const Vector* Point, const LinkedCell* const LC)560 TesselPoint* FindSecondClosestTesselPoint(const Vector* Point, const LinkedCell* const LC) 555 561 { 556 562 Info FunctionInfo(__func__); … … 565 571 for(int i=0;i<NDIM;i++) // store indices of this cell 566 572 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); 568 574 569 575 LC->GetNeighbourBounds(Nlower, Nupper); … … 572 578 for (LC->n[1] = Nlower[1]; LC->n[1] <= Nupper[1]; LC->n[1]++) 573 579 for (LC->n[2] = Nlower[2]; LC->n[2] <= Nupper[2]; LC->n[2]++) { 574 const Linked Nodes *List = LC->GetCurrentCell();580 const LinkedCell::LinkedNodes *List = LC->GetCurrentCell(); 575 581 //Log() << Verbose(1) << "The current cell " << LC->n[0] << "," << LC->n[1] << "," << LC->n[2] << endl; 576 582 if (List != NULL) { 577 for (Linked Nodes::const_iterator Runner = List->begin(); Runner != List->end(); Runner++) {583 for (LinkedCell::LinkedNodes::const_iterator Runner = List->begin(); Runner != List->end(); Runner++) { 578 584 helper.CopyVector(Point); 579 585 helper.SubtractVector((*Runner)->node); … … 607 613 * @return point which is closest to the provided one, NULL if none found 608 614 */ 609 TesselPoint* FindClosest Point(const Vector* Point, TesselPoint *&SecondPoint, const LinkedCell* const LC)615 TesselPoint* FindClosestTesselPoint(const Vector* Point, TesselPoint *&SecondPoint, const LinkedCell* const LC) 610 616 { 611 617 Info FunctionInfo(__func__); … … 620 626 for(int i=0;i<NDIM;i++) // store indices of this cell 621 627 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); 623 629 624 630 LC->GetNeighbourBounds(Nlower, Nupper); … … 627 633 for (LC->n[1] = Nlower[1]; LC->n[1] <= Nupper[1]; LC->n[1]++) 628 634 for (LC->n[2] = Nlower[2]; LC->n[2] <= Nupper[2]; LC->n[2]++) { 629 const Linked Nodes *List = LC->GetCurrentCell();635 const LinkedCell::LinkedNodes *List = LC->GetCurrentCell(); 630 636 //Log() << Verbose(1) << "The current cell " << LC->n[0] << "," << LC->n[1] << "," << LC->n[2] << endl; 631 637 if (List != NULL) { 632 for (Linked Nodes::const_iterator Runner = List->begin(); Runner != List->end(); Runner++) {638 for (LinkedCell::LinkedNodes::const_iterator Runner = List->begin(); Runner != List->end(); Runner++) { 633 639 helper.CopyVector(Point); 634 640 helper.SubtractVector((*Runner)->node); 635 double currentNorm = helper. Norm();641 double currentNorm = helper.NormSquared(); 636 642 if (currentNorm < distance) { 637 643 secondDistance = distance; … … 653 659 // output 654 660 if (closestPoint != NULL) { 655 Log() << Verbose(1) << "Closest point is " << *closestPoint;661 DoLog(1) && (Log() << Verbose(1) << "Closest point is " << *closestPoint); 656 662 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); 659 665 } 660 666 return closestPoint; … … 680 686 Normal.VectorProduct(&OtherBaseline); 681 687 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); 683 689 684 690 // project one offset point of OtherBase onto this plane (and add plane offset vector) … … 697 703 Normal.CopyVector(Intersection); 698 704 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); 700 706 701 707 return Intersection; … … 758 764 } 759 765 } else { 760 eLog() << Verbose(1) << "Given vrmlfile is " << vrmlfile << "." << endl;766 DoeLog(1) && (eLog()<< Verbose(1) << "Given vrmlfile is " << vrmlfile << "." << endl); 761 767 } 762 768 delete(center); … … 833 839 *rasterfile << "9\n# terminating special property\n"; 834 840 } else { 835 eLog() << Verbose(1) << "Given rasterfile is " << rasterfile << "." << endl;841 DoeLog(1) && (eLog()<< Verbose(1) << "Given rasterfile is " << rasterfile << "." << endl); 836 842 } 837 843 IncludeSphereinRaster3D(rasterfile, Tess, cloud); … … 856 862 } else { 857 863 *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 } 860 870 } 861 871 *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(); 864 873 int *LookupList = new int[i]; 865 874 for (cloud->GoToFirst(), i=0; !cloud->IsEnd(); cloud->GoToNext(), i++) … … 876 885 *tecplot << endl; 877 886 // print connectivity 878 Log() << Verbose(1) << "The following triangles were created:" << endl;887 DoLog(1) && (Log() << Verbose(1) << "The following triangles were created:" << endl); 879 888 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); 881 890 *tecplot << LookupList[runner->second->endpoints[0]->node->nr] << " " << LookupList[runner->second->endpoints[1]->node->nr] << " " << LookupList[runner->second->endpoints[2]->node->nr] << endl; 882 891 } … … 899 908 for (PointMap::const_iterator PointRunner = TesselStruct->PointsOnBoundary.begin(); PointRunner != TesselStruct->PointsOnBoundary.end(); PointRunner++) { 900 909 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); 902 911 point->value = 0; 903 912 for (LineMap::iterator LineRunner = point->lines.begin(); LineRunner != point->lines.end(); LineRunner++) { … … 923 932 int counter = 0; 924 933 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); 926 935 for (testline = TesselStruct->LinesOnBoundary.begin(); testline != TesselStruct->LinesOnBoundary.end(); testline++) { 927 936 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); 929 938 counter++; 930 939 } 931 940 } 932 941 if (counter == 0) { 933 Log() << Verbose(1) << "None." << endl;942 DoLog(1) && (Log() << Verbose(1) << "None." << endl); 934 943 result = true; 935 944 } … … 937 946 } 938 947 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 */ 952 int 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 */ 1006 bool 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 */ 1024 void 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.
