From 8c5eb9a5520722843c29bc0261877a39394f2521 Mon Sep 17 00:00:00 2001 From: Carl Doersch Date: Thu, 28 Nov 2013 04:33:26 +0000 Subject: [PATCH] first commit --- README.md | 125 + RGB2Lab.m | 69 + TestImages.txt | 1340 ++++ TrainImages.txt | 5360 ++++++++++++++ aggregate_covariance.m | 40 + assigntoclosest.m | 36 + autoclust_opt_init.m | 82 + autoclust_optimize.m | 155 + bestInImbb.m | 145 + clipper/C#/ConsoleDemo/ConsoleDemo.sln | 45 + .../ConsoleDemo/ConsoleDemo.csproj | 103 + clipper/C#/ConsoleDemo/ConsoleDemo/Program.cs | 453 ++ .../ConsoleDemo/Properties/AssemblyInfo.cs | 36 + .../ConsoleDemo/bin/Release/ConsoleDemo.exe | Bin 0 -> 15872 bytes .../ConsoleDemo/bin/Release/clip.txt | 6 + .../bin/Release/clipper_library.dll | Bin 0 -> 44544 bytes .../ConsoleDemo/bin/Release/subj.txt | 13 + clipper/C#/GuiDemo/GuiDemo.sln | 45 + clipper/C#/GuiDemo/GuiDemo/Form1.Designer.cs | 419 ++ clipper/C#/GuiDemo/GuiDemo/Form1.cs | 661 ++ clipper/C#/GuiDemo/GuiDemo/Form1.resx | 225 + clipper/C#/GuiDemo/GuiDemo/GuiDemo.csproj | 135 + clipper/C#/GuiDemo/GuiDemo/Program.cs | 21 + .../GuiDemo/Properties/AssemblyInfo.cs | 36 + .../GuiDemo/Properties/Resources.Designer.cs | 70 + .../GuiDemo/GuiDemo/Properties/Resources.resx | 124 + .../GuiDemo/Properties/Settings.Designer.cs | 26 + .../GuiDemo/Properties/Settings.settings | 7 + clipper/C#/GuiDemo/GuiDemo/Settings.cs | 28 + clipper/C#/GuiDemo/GuiDemo/aust.bin | Bin 0 -> 6828 bytes .../GuiDemo/GuiDemo/bin/Release/GuiDemo.exe | Bin 0 -> 49664 bytes .../GuiDemo/bin/Release/clipper_library.dll | Bin 0 -> 44544 bytes .../Properties/AssemblyInfo.cs | 36 + clipper/C#/clipper_library/clipper.cs | 3695 ++++++++++ .../C#/clipper_library/clipper_library.csproj | 54 + clipper/Delphi/agg demo/about_agg.txt | 1 + clipper/Delphi/agg demo/agg_conv_clipper.pas | 343 + clipper/Delphi/agg demo/clipper_test.dpr | 975 +++ clipper/Delphi/agg demo/clipper_test.exe | Bin 0 -> 247296 bytes clipper/Delphi/cairo demo/Cairo Resources.txt | 12 + .../Delphi/cairo demo/CairoClipperDemo1.dpr | 206 + .../Delphi/cairo demo/CairoClipperDemo1.res | Bin 0 -> 876 bytes clipper/Delphi/cairo demo/cairo_clipper.pas | 121 + clipper/Delphi/clipper.pas | 3968 +++++++++++ clipper/Delphi/main demo/GR32_Misc.pas | 293 + clipper/Delphi/main demo/clipper_demo.dpr | 16 + clipper/Delphi/main demo/clipper_demo.exe | Bin 0 -> 644096 bytes clipper/Delphi/main demo/clipper_demo.res | Bin 0 -> 5572 bytes clipper/Delphi/main demo/main.dfm | 289 + clipper/Delphi/main demo/main.pas | 789 +++ clipper/Delphi/main demo/polygons.res | Bin 0 -> 19376 bytes .../Documentation/Docs/Overview/Changes.htm | 793 +++ .../Compatibility with Prior Versions.htm | 204 + .../Documentation/Docs/Overview/Example.htm | 211 + clipper/Documentation/Docs/Overview/FAQ.htm | 160 + .../Documentation/Docs/Overview/License.htm | 75 + .../Documentation/Docs/Overview/Rounding.htm | 67 + clipper/Documentation/Docs/Overview/_Body.htm | 84 + .../Classes/Clipper/Methods/Constructor.htm | 73 + .../Classes/Clipper/Methods/Execute.htm | 75 + .../Clipper/Properties/ReverseSolution.htm | 76 + .../ClipperLib/Classes/Clipper/_Body.htm | 118 + .../ClipperBase/Methods/AddPolygon.htm | 96 + .../ClipperBase/Methods/AddPolygons.htm | 95 + .../Classes/ClipperBase/Methods/Clear.htm | 73 + .../Classes/ClipperBase/Methods/GetBounds.htm | 76 + .../ClipperLib/Classes/ClipperBase/_Body.htm | 91 + .../Classes/PolyNode/Methods/GetNext.htm | 93 + .../PolyNode/Properties/ChildCount.htm | 74 + .../Classes/PolyNode/Properties/Childs.htm | 75 + .../Classes/PolyNode/Properties/Contour.htm | 71 + .../Classes/PolyNode/Properties/IsHole.htm | 72 + .../Classes/PolyNode/Properties/Parent.htm | 69 + .../ClipperLib/Classes/PolyNode/_Body.htm | 117 + .../Classes/PolyTree/Methods/Clear.htm | 73 + .../Classes/PolyTree/Methods/GetFirst.htm | 77 + .../Classes/PolyTree/Properties/Total.htm | 74 + .../ClipperLib/Classes/PolyTree/_Body.htm | 181 + .../Docs/Units/ClipperLib/Routines/Area.htm | 72 + .../ClipperLib/Routines/CleanPolygon.htm | 71 + .../ClipperLib/Routines/CleanPolygons.htm | 71 + .../ClipperLib/Routines/OffsetPolygons.htm | 85 + .../Units/ClipperLib/Routines/Orientation.htm | 97 + .../ClipperLib/Routines/ReversePolygon.htm | 67 + .../ClipperLib/Routines/ReversePolygons.htm | 67 + .../ClipperLib/Routines/SimplifyPolygon.htm | 71 + .../ClipperLib/Routines/SimplifyPolygons.htm | 73 + .../Docs/Units/ClipperLib/Types/ClipType.htm | 74 + .../Units/ClipperLib/Types/ExPolygons.htm | 61 + .../Docs/Units/ClipperLib/Types/IntPoint.htm | 71 + .../Docs/Units/ClipperLib/Types/IntRect.htm | 69 + .../Docs/Units/ClipperLib/Types/JoinType.htm | 71 + .../Units/ClipperLib/Types/PolyFillType.htm | 72 + .../Docs/Units/ClipperLib/Types/PolyType.htm | 71 + .../Docs/Units/ClipperLib/Types/Polygon.htm | 69 + .../Docs/Units/ClipperLib/Types/Polygons.htm | 72 + .../Docs/Units/ClipperLib/Types/long64.htm | 67 + .../Docs/Units/ClipperLib/_Body.htm | 145 + clipper/Documentation/Docs/_Body.htm | 147 + clipper/Documentation/Images/_BranchEmpty.gif | Bin 0 -> 56 bytes clipper/Documentation/Images/_BranchRight.gif | Bin 0 -> 62 bytes clipper/Documentation/Images/_BranchVert.gif | Bin 0 -> 64 bytes .../Documentation/Images/_BranchVertRight.gif | Bin 0 -> 65 bytes clipper/Documentation/Images/_Class.gif | Bin 0 -> 118 bytes clipper/Documentation/Images/_Home.gif | Bin 0 -> 125 bytes .../Documentation/Images/_Project_Logo.gif | Bin 0 -> 1589 bytes clipper/Documentation/Images/_Unit.gif | Bin 0 -> 171 bytes clipper/Documentation/Images/_buttons.gif | Bin 0 -> 311 bytes .../Documentation/Images/clipper_rounding.png | Bin 0 -> 10630 bytes .../Images/clipper_rounding2.png | Bin 0 -> 21109 bytes .../Images/clipper_rounding3.png | Bin 0 -> 8335 bytes .../Images/clipper_rounding4.png | Bin 0 -> 5933 bytes clipper/Documentation/Images/cliptype.png | Bin 0 -> 4267 bytes clipper/Documentation/Images/difference.png | Bin 0 -> 3873 bytes clipper/Documentation/Images/evenodd.png | Bin 0 -> 2773 bytes clipper/Documentation/Images/int.png | Bin 0 -> 69459 bytes clipper/Documentation/Images/intersection.png | Bin 0 -> 3814 bytes clipper/Documentation/Images/jointypes.png | Bin 0 -> 14436 bytes .../Documentation/Images/kangaroo_small.png | Bin 0 -> 44887 bytes clipper/Documentation/Images/negative.png | Bin 0 -> 4432 bytes clipper/Documentation/Images/nonzero.png | Bin 0 -> 2819 bytes .../Documentation/Images/polyline_offset.png | Bin 0 -> 8016 bytes clipper/Documentation/Images/polytree.png | Bin 0 -> 6258 bytes clipper/Documentation/Images/positive.png | Bin 0 -> 4873 bytes clipper/Documentation/Images/sample1.png | Bin 0 -> 17499 bytes clipper/Documentation/Images/union.png | Bin 0 -> 3874 bytes clipper/Documentation/Images/xor.png | Bin 0 -> 4151 bytes .../Scripts/SyntaxHighlighter/LGPL-LICENSE | 165 + .../Scripts/SyntaxHighlighter/MIT-LICENSE | 20 + .../compass/_theme_template.scss | 120 + .../SyntaxHighlighter/compass/config.rb | 14 + .../SyntaxHighlighter/compass/shCore.scss | 216 + .../compass/shCoreDefault.scss | 2 + .../compass/shCoreDjango.scss | 2 + .../compass/shCoreEclipse.scss | 2 + .../compass/shCoreEmacs.scss | 2 + .../compass/shCoreFadeToGrey.scss | 2 + .../compass/shCoreMDUltra.scss | 2 + .../compass/shCoreMidnight.scss | 2 + .../compass/shCoreRDark.scss | 2 + .../compass/shThemeDefault.scss | 7 + .../compass/shThemeDjango.scss | 36 + .../compass/shThemeEclipse.scss | 48 + .../compass/shThemeEmacs.scss | 32 + .../compass/shThemeFadeToGrey.scss | 36 + .../compass/shThemeMDUltra.scss | 32 + .../compass/shThemeMidnight.scss | 32 + .../compass/shThemeRDark.scss | 32 + .../Scripts/SyntaxHighlighter/index.html | 22 + .../SyntaxHighlighter/scripts/shAutoloader.js | 17 + .../SyntaxHighlighter/scripts/shBrushAS3.js | 59 + .../scripts/shBrushAppleScript.js | 75 + .../SyntaxHighlighter/scripts/shBrushBash.js | 59 + .../scripts/shBrushCSharp.js | 65 + .../scripts/shBrushColdFusion.js | 100 + .../SyntaxHighlighter/scripts/shBrushCpp.js | 97 + .../SyntaxHighlighter/scripts/shBrushCss.js | 91 + .../scripts/shBrushDelphi.js | 55 + .../SyntaxHighlighter/scripts/shBrushDiff.js | 41 + .../scripts/shBrushErlang.js | 52 + .../scripts/shBrushGroovy.js | 67 + .../scripts/shBrushJScript.js | 52 + .../SyntaxHighlighter/scripts/shBrushJava.js | 57 + .../scripts/shBrushJavaFX.js | 58 + .../SyntaxHighlighter/scripts/shBrushPerl.js | 72 + .../SyntaxHighlighter/scripts/shBrushPhp.js | 88 + .../SyntaxHighlighter/scripts/shBrushPlain.js | 33 + .../scripts/shBrushPowerShell.js | 74 + .../scripts/shBrushPython.js | 64 + .../SyntaxHighlighter/scripts/shBrushRuby.js | 55 + .../SyntaxHighlighter/scripts/shBrushSass.js | 94 + .../SyntaxHighlighter/scripts/shBrushScala.js | 51 + .../SyntaxHighlighter/scripts/shBrushSql.js | 66 + .../SyntaxHighlighter/scripts/shBrushVb.js | 56 + .../SyntaxHighlighter/scripts/shBrushXml.js | 69 + .../SyntaxHighlighter/scripts/shCore.js | 17 + .../SyntaxHighlighter/scripts/shLegacy.js | 17 + .../SyntaxHighlighter/src/shAutoloader.js | 130 + .../Scripts/SyntaxHighlighter/src/shCore.js | 1721 +++++ .../Scripts/SyntaxHighlighter/src/shLegacy.js | 157 + .../SyntaxHighlighter/styles/shCore.css | 226 + .../styles/shCoreDefault.css | 328 + .../SyntaxHighlighter/styles/shCoreDjango.css | 331 + .../styles/shCoreEclipse.css | 339 + .../SyntaxHighlighter/styles/shCoreEmacs.css | 324 + .../styles/shCoreFadeToGrey.css | 328 + .../styles/shCoreMDUltra.css | 324 + .../styles/shCoreMidnight.css | 324 + .../SyntaxHighlighter/styles/shCoreRDark.css | 324 + .../styles/shThemeDefault.css | 119 + .../styles/shThemeDjango.css | 120 + .../styles/shThemeEclipse.css | 128 + .../SyntaxHighlighter/styles/shThemeEmacs.css | 113 + .../styles/shThemeFadeToGrey.css | 117 + .../styles/shThemeMDUltra.css | 113 + .../styles/shThemeMidnight.css | 113 + .../SyntaxHighlighter/styles/shThemeRDark.css | 113 + .../Scripts/SyntaxHighlighter/tests/.rvmrc | 1 + .../SyntaxHighlighter/tests/brushes/sass.html | 204 + .../tests/brushes_tests.html | 136 + .../tests/cases/001_basic.html | 42 + .../tests/cases/002_brushes.html | 50 + .../tests/cases/003_script_tag.html | 42 + .../tests/cases/004_url_parsing.html | 43 + .../tests/cases/005_no_gutter.html | 33 + .../tests/cases/006_pad_line_numbers.html | 39 + .../tests/cases/007_collapse.html | 60 + .../tests/cases/007_collapse_interaction.html | 44 + .../tests/cases/008_first_line.html | 29 + .../tests/cases/009_class_name.html | 32 + .../tests/cases/010_highlight.html | 70 + .../tests/cases/011_smart_tabs.html | 98 + .../tests/cases/012_server_side.html | 35 + .../tests/cases/013_html_script.html | 34 + .../tests/cases/014_legacy.html | 70 + .../SyntaxHighlighter/tests/commonjs_tests.js | 52 + .../tests/js/jquery-1.4.2.js | 6240 +++++++++++++++++ .../SyntaxHighlighter/tests/js/qunit.css | 135 + .../SyntaxHighlighter/tests/js/qunit.js | 1069 +++ .../tests/syntaxhighlighter_tests.html | 242 + .../SyntaxHighlighter/tests/theme_tests.html | 134 + .../SyntaxHighlighter/tests/webrick.rb | 11 + .../SyntaxHighlighter/tests/webrick.sh | 2 + clipper/Documentation/Scripts/bootstrap.js | 2 + clipper/Documentation/Scripts/expandable.js | 190 + clipper/Documentation/Scripts/menu_data.js | 21 + clipper/Documentation/Scripts/menu_script.js | 130 + clipper/Documentation/Styles/Default.css | 265 + clipper/Documentation/clipper.chm | Bin 0 -> 327688 bytes clipper/Documentation/index.htm | 12 + clipper/Flash/AS3_flash_readme.txt | 2 + clipper/Haskell/Haskell_readme.txt | 4 + clipper/License.txt | 29 + clipper/Matlab/matlab_readme.txt | 4 + clipper/README | 288 + clipper/clipper.cpp | 3469 +++++++++ clipper/clipper.hpp | 340 + clipper/clipper_ver5.1.0.zip | Bin 0 -> 1714315 bytes clipper/cpp/CMakeLists.txt | 15 + clipper/cpp/clipper.cpp | 3469 +++++++++ clipper/cpp/clipper.hpp | 340 + clipper/cpp/cpp_agg/agg_conv_clipper.h | 295 + clipper/cpp/cpp_agg/clipper_test.cpp | 574 ++ clipper/cpp/cpp_agg/clipper_test.exe | Bin 0 -> 240640 bytes clipper/cpp/cpp_agg/clipper_test.sln | 20 + clipper/cpp/cpp_agg/clipper_test.vcxproj | 114 + .../cpp/cpp_agg/clipper_test.vcxproj.filters | 118 + clipper/cpp/cpp_agg/icon.res | Bin 0 -> 5556 bytes clipper/cpp/cpp_cairo/Cairo Resources.txt | 6 + clipper/cpp/cpp_cairo/cairo_clipper.cbproj | 155 + clipper/cpp/cpp_cairo/cairo_clipper.cpp | 134 + clipper/cpp/cpp_cairo/cairo_clipper.hpp | 59 + .../cpp/cpp_cairo/libcairo-2.lib (cppbuilder) | Bin 0 -> 52224 bytes clipper/cpp/cpp_cairo/libcairo-2.lib (msvc) | Bin 0 -> 83700 bytes clipper/cpp/cpp_cairo/main.cpp | 180 + clipper/cpp/cpp_console/Debug/clip.txt | 6 + clipper/cpp/cpp_console/Debug/subj.txt | 13 + clipper/cpp/cpp_console/File1.cpp | 458 ++ clipper/cpp/cpp_console/clipper.cbproj | 147 + clipper/cpp/cpp_opengl/clipper_demo.exe | Bin 0 -> 208384 bytes clipper/cpp/cpp_opengl/clipper_demo.sln | 20 + clipper/cpp/cpp_opengl/clipper_demo.vcxproj | 95 + clipper/cpp/cpp_opengl/icon.res | Bin 0 -> 5556 bytes clipper/cpp/cpp_opengl/main.cpp | 645 ++ clipper/cpp/cpp_opengl/menu.res | Bin 0 -> 1352 bytes clipper/greedySelectDetrsCoveragemex.cpp | 190 + clipper/greedySelectDetrsCoveragemex.mexa64 | Bin 0 -> 99102 bytes clipper/perl/perl_readme.txt | 5 + clipper/python/clipper.py | 2107 ++++++ clipper/python/clipper_demo.py | 267 + clipper/python/python_readme.txt | 9 + clipper/ruby/ruby_readme.txt | 4 + computeOverlap.m | 119 + constructFeaturePyramid.m | 11 + constructFeaturePyramidForImg.m | 105 + det2mat.m | 26 + detectInIm.m | 32 + dispClassifier.m | 118 + display_indoor67.m | 29 + display_indoor67.mhp | 11 + distGenPooledFeats.m | 13 + doGradDescentproj.m | 388 + errdisp.m | 79 + errdisp.mhp | 13 + extractpatches.m | 104 + findOverlapping3.m | 211 + findmatches.m | 30 + genPoolFeats2.m | 41 + genheatmap.m | 7 + getFeaturesForLevel.m | 59 + getLevelScales.m | 5 + getMinimalModel2.m | 23 + getRandForPdf.m | 18 + getimg.m | 41 + getimgs.m | 3 + getscorepyramid.m | 23 + greedySelectDetrsCoverage.m | 106 + hog/COPYING | 21 + hog/features.cc | 234 + hog/features.mexa64 | Bin 0 -> 11488 bytes indoor67_main.m | 671 ++ linkage2.m | 456 ++ linkagemex.mexa64 | Bin 0 -> 48472 bytes mat2det.m | 16 + myNms.m | 56 + myNmsClass.m | 7 + myaddpath.m | 5 + overlapReweight.m | 133 + overlapReweightForImg.m | 45 + patch2feat.m | 18 + patchdisplay.m | 82 + patchdisplay.mhp | 48 + preprocessindoor67.m | 67 + pyridx2pos.m | 35 + sampleRandomPatchesbb.m | 171 + selectdetrs2.m | 7 + setdataset.m | 40 + unentanglePyramid.m | 112 + util/c.m | 3 + util/distributeby.m | 61 + util/effstr2str.m | 53 + util/effstrcell2mat.m | 4 + util/effstridx.m | 22 + util/idxof.m | 3 + util/idxwithdefault.m | 10 + util/invertdistributeby.m | 9 + util/maxk.m | 5 + util/maxkall.m | 8 + util/mink.m | 5 + util/minkall.m | 8 + util/mymemory.m | 11 + util/normrows.m | 14 + util/overrideConf.m | 10 + util/str2effstr.m | 15 + util/structcell2mat.m | 14 + 335 files changed, 61172 insertions(+) create mode 100644 README.md create mode 100755 RGB2Lab.m create mode 100755 TestImages.txt create mode 100755 TrainImages.txt create mode 100755 aggregate_covariance.m create mode 100755 assigntoclosest.m create mode 100755 autoclust_opt_init.m create mode 100755 autoclust_optimize.m create mode 100755 bestInImbb.m create mode 100755 clipper/C#/ConsoleDemo/ConsoleDemo.sln create mode 100755 clipper/C#/ConsoleDemo/ConsoleDemo/ConsoleDemo.csproj create mode 100755 clipper/C#/ConsoleDemo/ConsoleDemo/Program.cs create mode 100755 clipper/C#/ConsoleDemo/ConsoleDemo/Properties/AssemblyInfo.cs create mode 100755 clipper/C#/ConsoleDemo/ConsoleDemo/bin/Release/ConsoleDemo.exe create mode 100755 clipper/C#/ConsoleDemo/ConsoleDemo/bin/Release/clip.txt create mode 100755 clipper/C#/ConsoleDemo/ConsoleDemo/bin/Release/clipper_library.dll create mode 100755 clipper/C#/ConsoleDemo/ConsoleDemo/bin/Release/subj.txt create mode 100755 clipper/C#/GuiDemo/GuiDemo.sln create mode 100755 clipper/C#/GuiDemo/GuiDemo/Form1.Designer.cs create mode 100755 clipper/C#/GuiDemo/GuiDemo/Form1.cs create mode 100755 clipper/C#/GuiDemo/GuiDemo/Form1.resx create mode 100755 clipper/C#/GuiDemo/GuiDemo/GuiDemo.csproj create mode 100755 clipper/C#/GuiDemo/GuiDemo/Program.cs create mode 100755 clipper/C#/GuiDemo/GuiDemo/Properties/AssemblyInfo.cs create mode 100755 clipper/C#/GuiDemo/GuiDemo/Properties/Resources.Designer.cs create mode 100755 clipper/C#/GuiDemo/GuiDemo/Properties/Resources.resx create mode 100755 clipper/C#/GuiDemo/GuiDemo/Properties/Settings.Designer.cs create mode 100755 clipper/C#/GuiDemo/GuiDemo/Properties/Settings.settings create mode 100755 clipper/C#/GuiDemo/GuiDemo/Settings.cs create mode 100755 clipper/C#/GuiDemo/GuiDemo/aust.bin create mode 100755 clipper/C#/GuiDemo/GuiDemo/bin/Release/GuiDemo.exe create mode 100755 clipper/C#/GuiDemo/GuiDemo/bin/Release/clipper_library.dll create mode 100755 clipper/C#/clipper_library/Properties/AssemblyInfo.cs create mode 100755 clipper/C#/clipper_library/clipper.cs create mode 100755 clipper/C#/clipper_library/clipper_library.csproj create mode 100755 clipper/Delphi/agg demo/about_agg.txt create mode 100755 clipper/Delphi/agg demo/agg_conv_clipper.pas create mode 100755 clipper/Delphi/agg demo/clipper_test.dpr create mode 100755 clipper/Delphi/agg demo/clipper_test.exe create mode 100755 clipper/Delphi/cairo demo/Cairo Resources.txt create mode 100755 clipper/Delphi/cairo demo/CairoClipperDemo1.dpr create mode 100755 clipper/Delphi/cairo demo/CairoClipperDemo1.res create mode 100755 clipper/Delphi/cairo demo/cairo_clipper.pas create mode 100755 clipper/Delphi/clipper.pas create mode 100755 clipper/Delphi/main demo/GR32_Misc.pas create mode 100755 clipper/Delphi/main demo/clipper_demo.dpr create mode 100755 clipper/Delphi/main demo/clipper_demo.exe create mode 100755 clipper/Delphi/main demo/clipper_demo.res create mode 100755 clipper/Delphi/main demo/main.dfm create mode 100755 clipper/Delphi/main demo/main.pas create mode 100755 clipper/Delphi/main demo/polygons.res create mode 100755 clipper/Documentation/Docs/Overview/Changes.htm create mode 100755 clipper/Documentation/Docs/Overview/Compatibility with Prior Versions.htm create mode 100755 clipper/Documentation/Docs/Overview/Example.htm create mode 100755 clipper/Documentation/Docs/Overview/FAQ.htm create mode 100755 clipper/Documentation/Docs/Overview/License.htm create mode 100755 clipper/Documentation/Docs/Overview/Rounding.htm create mode 100755 clipper/Documentation/Docs/Overview/_Body.htm create mode 100755 clipper/Documentation/Docs/Units/ClipperLib/Classes/Clipper/Methods/Constructor.htm create mode 100755 clipper/Documentation/Docs/Units/ClipperLib/Classes/Clipper/Methods/Execute.htm create mode 100755 clipper/Documentation/Docs/Units/ClipperLib/Classes/Clipper/Properties/ReverseSolution.htm create mode 100755 clipper/Documentation/Docs/Units/ClipperLib/Classes/Clipper/_Body.htm create mode 100755 clipper/Documentation/Docs/Units/ClipperLib/Classes/ClipperBase/Methods/AddPolygon.htm create mode 100755 clipper/Documentation/Docs/Units/ClipperLib/Classes/ClipperBase/Methods/AddPolygons.htm create mode 100755 clipper/Documentation/Docs/Units/ClipperLib/Classes/ClipperBase/Methods/Clear.htm create mode 100755 clipper/Documentation/Docs/Units/ClipperLib/Classes/ClipperBase/Methods/GetBounds.htm create mode 100755 clipper/Documentation/Docs/Units/ClipperLib/Classes/ClipperBase/_Body.htm create mode 100755 clipper/Documentation/Docs/Units/ClipperLib/Classes/PolyNode/Methods/GetNext.htm create mode 100755 clipper/Documentation/Docs/Units/ClipperLib/Classes/PolyNode/Properties/ChildCount.htm create mode 100755 clipper/Documentation/Docs/Units/ClipperLib/Classes/PolyNode/Properties/Childs.htm create mode 100755 clipper/Documentation/Docs/Units/ClipperLib/Classes/PolyNode/Properties/Contour.htm create mode 100755 clipper/Documentation/Docs/Units/ClipperLib/Classes/PolyNode/Properties/IsHole.htm create mode 100755 clipper/Documentation/Docs/Units/ClipperLib/Classes/PolyNode/Properties/Parent.htm create mode 100755 clipper/Documentation/Docs/Units/ClipperLib/Classes/PolyNode/_Body.htm create mode 100755 clipper/Documentation/Docs/Units/ClipperLib/Classes/PolyTree/Methods/Clear.htm create mode 100755 clipper/Documentation/Docs/Units/ClipperLib/Classes/PolyTree/Methods/GetFirst.htm create mode 100755 clipper/Documentation/Docs/Units/ClipperLib/Classes/PolyTree/Properties/Total.htm create mode 100755 clipper/Documentation/Docs/Units/ClipperLib/Classes/PolyTree/_Body.htm create mode 100755 clipper/Documentation/Docs/Units/ClipperLib/Routines/Area.htm create mode 100755 clipper/Documentation/Docs/Units/ClipperLib/Routines/CleanPolygon.htm create mode 100755 clipper/Documentation/Docs/Units/ClipperLib/Routines/CleanPolygons.htm create mode 100755 clipper/Documentation/Docs/Units/ClipperLib/Routines/OffsetPolygons.htm create mode 100755 clipper/Documentation/Docs/Units/ClipperLib/Routines/Orientation.htm create mode 100755 clipper/Documentation/Docs/Units/ClipperLib/Routines/ReversePolygon.htm create mode 100755 clipper/Documentation/Docs/Units/ClipperLib/Routines/ReversePolygons.htm create mode 100755 clipper/Documentation/Docs/Units/ClipperLib/Routines/SimplifyPolygon.htm create mode 100755 clipper/Documentation/Docs/Units/ClipperLib/Routines/SimplifyPolygons.htm create mode 100755 clipper/Documentation/Docs/Units/ClipperLib/Types/ClipType.htm create mode 100755 clipper/Documentation/Docs/Units/ClipperLib/Types/ExPolygons.htm create mode 100755 clipper/Documentation/Docs/Units/ClipperLib/Types/IntPoint.htm create mode 100755 clipper/Documentation/Docs/Units/ClipperLib/Types/IntRect.htm create mode 100755 clipper/Documentation/Docs/Units/ClipperLib/Types/JoinType.htm create mode 100755 clipper/Documentation/Docs/Units/ClipperLib/Types/PolyFillType.htm create mode 100755 clipper/Documentation/Docs/Units/ClipperLib/Types/PolyType.htm create mode 100755 clipper/Documentation/Docs/Units/ClipperLib/Types/Polygon.htm create mode 100755 clipper/Documentation/Docs/Units/ClipperLib/Types/Polygons.htm create mode 100755 clipper/Documentation/Docs/Units/ClipperLib/Types/long64.htm create mode 100755 clipper/Documentation/Docs/Units/ClipperLib/_Body.htm create mode 100755 clipper/Documentation/Docs/_Body.htm create mode 100755 clipper/Documentation/Images/_BranchEmpty.gif create mode 100755 clipper/Documentation/Images/_BranchRight.gif create mode 100755 clipper/Documentation/Images/_BranchVert.gif create mode 100755 clipper/Documentation/Images/_BranchVertRight.gif create mode 100755 clipper/Documentation/Images/_Class.gif create mode 100755 clipper/Documentation/Images/_Home.gif create mode 100755 clipper/Documentation/Images/_Project_Logo.gif create mode 100755 clipper/Documentation/Images/_Unit.gif create mode 100755 clipper/Documentation/Images/_buttons.gif create mode 100755 clipper/Documentation/Images/clipper_rounding.png create mode 100755 clipper/Documentation/Images/clipper_rounding2.png create mode 100755 clipper/Documentation/Images/clipper_rounding3.png create mode 100755 clipper/Documentation/Images/clipper_rounding4.png create mode 100755 clipper/Documentation/Images/cliptype.png create mode 100755 clipper/Documentation/Images/difference.png create mode 100755 clipper/Documentation/Images/evenodd.png create mode 100755 clipper/Documentation/Images/int.png create mode 100755 clipper/Documentation/Images/intersection.png create mode 100755 clipper/Documentation/Images/jointypes.png create mode 100755 clipper/Documentation/Images/kangaroo_small.png create mode 100755 clipper/Documentation/Images/negative.png create mode 100755 clipper/Documentation/Images/nonzero.png create mode 100755 clipper/Documentation/Images/polyline_offset.png create mode 100755 clipper/Documentation/Images/polytree.png create mode 100755 clipper/Documentation/Images/positive.png create mode 100755 clipper/Documentation/Images/sample1.png create mode 100755 clipper/Documentation/Images/union.png create mode 100755 clipper/Documentation/Images/xor.png create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/LGPL-LICENSE create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/MIT-LICENSE create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/compass/_theme_template.scss create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/compass/config.rb create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/compass/shCore.scss create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/compass/shCoreDefault.scss create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/compass/shCoreDjango.scss create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/compass/shCoreEclipse.scss create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/compass/shCoreEmacs.scss create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/compass/shCoreFadeToGrey.scss create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/compass/shCoreMDUltra.scss create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/compass/shCoreMidnight.scss create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/compass/shCoreRDark.scss create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/compass/shThemeDefault.scss create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/compass/shThemeDjango.scss create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/compass/shThemeEclipse.scss create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/compass/shThemeEmacs.scss create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/compass/shThemeFadeToGrey.scss create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/compass/shThemeMDUltra.scss create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/compass/shThemeMidnight.scss create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/compass/shThemeRDark.scss create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/index.html create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shAutoloader.js create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushAS3.js create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushAppleScript.js create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushBash.js create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushCSharp.js create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushColdFusion.js create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushCpp.js create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushCss.js create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushDelphi.js create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushDiff.js create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushErlang.js create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushGroovy.js create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushJScript.js create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushJava.js create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushJavaFX.js create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushPerl.js create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushPhp.js create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushPlain.js create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushPowerShell.js create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushPython.js create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushRuby.js create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushSass.js create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushScala.js create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushSql.js create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushVb.js create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushXml.js create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shCore.js create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shLegacy.js create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/src/shAutoloader.js create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/src/shCore.js create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/src/shLegacy.js create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/styles/shCore.css create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/styles/shCoreDefault.css create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/styles/shCoreDjango.css create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/styles/shCoreEclipse.css create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/styles/shCoreEmacs.css create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/styles/shCoreFadeToGrey.css create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/styles/shCoreMDUltra.css create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/styles/shCoreMidnight.css create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/styles/shCoreRDark.css create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/styles/shThemeDefault.css create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/styles/shThemeDjango.css create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/styles/shThemeEclipse.css create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/styles/shThemeEmacs.css create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/styles/shThemeFadeToGrey.css create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/styles/shThemeMDUltra.css create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/styles/shThemeMidnight.css create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/styles/shThemeRDark.css create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/tests/.rvmrc create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/tests/brushes/sass.html create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/tests/brushes_tests.html create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/001_basic.html create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/002_brushes.html create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/003_script_tag.html create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/004_url_parsing.html create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/005_no_gutter.html create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/006_pad_line_numbers.html create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/007_collapse.html create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/007_collapse_interaction.html create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/008_first_line.html create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/009_class_name.html create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/010_highlight.html create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/011_smart_tabs.html create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/012_server_side.html create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/013_html_script.html create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/014_legacy.html create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/tests/commonjs_tests.js create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/tests/js/jquery-1.4.2.js create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/tests/js/qunit.css create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/tests/js/qunit.js create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/tests/syntaxhighlighter_tests.html create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/tests/theme_tests.html create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/tests/webrick.rb create mode 100755 clipper/Documentation/Scripts/SyntaxHighlighter/tests/webrick.sh create mode 100755 clipper/Documentation/Scripts/bootstrap.js create mode 100755 clipper/Documentation/Scripts/expandable.js create mode 100755 clipper/Documentation/Scripts/menu_data.js create mode 100755 clipper/Documentation/Scripts/menu_script.js create mode 100755 clipper/Documentation/Styles/Default.css create mode 100755 clipper/Documentation/clipper.chm create mode 100755 clipper/Documentation/index.htm create mode 100755 clipper/Flash/AS3_flash_readme.txt create mode 100755 clipper/Haskell/Haskell_readme.txt create mode 100755 clipper/License.txt create mode 100755 clipper/Matlab/matlab_readme.txt create mode 100755 clipper/README create mode 100755 clipper/clipper.cpp create mode 100755 clipper/clipper.hpp create mode 100755 clipper/clipper_ver5.1.0.zip create mode 100755 clipper/cpp/CMakeLists.txt create mode 100755 clipper/cpp/clipper.cpp create mode 100755 clipper/cpp/clipper.hpp create mode 100755 clipper/cpp/cpp_agg/agg_conv_clipper.h create mode 100755 clipper/cpp/cpp_agg/clipper_test.cpp create mode 100755 clipper/cpp/cpp_agg/clipper_test.exe create mode 100755 clipper/cpp/cpp_agg/clipper_test.sln create mode 100755 clipper/cpp/cpp_agg/clipper_test.vcxproj create mode 100755 clipper/cpp/cpp_agg/clipper_test.vcxproj.filters create mode 100755 clipper/cpp/cpp_agg/icon.res create mode 100755 clipper/cpp/cpp_cairo/Cairo Resources.txt create mode 100755 clipper/cpp/cpp_cairo/cairo_clipper.cbproj create mode 100755 clipper/cpp/cpp_cairo/cairo_clipper.cpp create mode 100755 clipper/cpp/cpp_cairo/cairo_clipper.hpp create mode 100755 clipper/cpp/cpp_cairo/libcairo-2.lib (cppbuilder) create mode 100755 clipper/cpp/cpp_cairo/libcairo-2.lib (msvc) create mode 100755 clipper/cpp/cpp_cairo/main.cpp create mode 100755 clipper/cpp/cpp_console/Debug/clip.txt create mode 100755 clipper/cpp/cpp_console/Debug/subj.txt create mode 100755 clipper/cpp/cpp_console/File1.cpp create mode 100755 clipper/cpp/cpp_console/clipper.cbproj create mode 100755 clipper/cpp/cpp_opengl/clipper_demo.exe create mode 100755 clipper/cpp/cpp_opengl/clipper_demo.sln create mode 100755 clipper/cpp/cpp_opengl/clipper_demo.vcxproj create mode 100755 clipper/cpp/cpp_opengl/icon.res create mode 100755 clipper/cpp/cpp_opengl/main.cpp create mode 100755 clipper/cpp/cpp_opengl/menu.res create mode 100755 clipper/greedySelectDetrsCoveragemex.cpp create mode 100755 clipper/greedySelectDetrsCoveragemex.mexa64 create mode 100755 clipper/perl/perl_readme.txt create mode 100755 clipper/python/clipper.py create mode 100755 clipper/python/clipper_demo.py create mode 100755 clipper/python/python_readme.txt create mode 100755 clipper/ruby/ruby_readme.txt create mode 100755 computeOverlap.m create mode 100755 constructFeaturePyramid.m create mode 100755 constructFeaturePyramidForImg.m create mode 100755 det2mat.m create mode 100755 detectInIm.m create mode 100755 dispClassifier.m create mode 100644 display_indoor67.m create mode 100644 display_indoor67.mhp create mode 100755 distGenPooledFeats.m create mode 100755 doGradDescentproj.m create mode 100755 errdisp.m create mode 100755 errdisp.mhp create mode 100755 extractpatches.m create mode 100755 findOverlapping3.m create mode 100755 findmatches.m create mode 100755 genPoolFeats2.m create mode 100755 genheatmap.m create mode 100755 getFeaturesForLevel.m create mode 100755 getLevelScales.m create mode 100755 getMinimalModel2.m create mode 100755 getRandForPdf.m create mode 100755 getimg.m create mode 100755 getimgs.m create mode 100644 getscorepyramid.m create mode 100755 greedySelectDetrsCoverage.m create mode 100755 hog/COPYING create mode 100755 hog/features.cc create mode 100755 hog/features.mexa64 create mode 100755 indoor67_main.m create mode 100755 linkage2.m create mode 100755 linkagemex.mexa64 create mode 100755 mat2det.m create mode 100755 myNms.m create mode 100755 myNmsClass.m create mode 100755 myaddpath.m create mode 100755 overlapReweight.m create mode 100755 overlapReweightForImg.m create mode 100755 patch2feat.m create mode 100755 patchdisplay.m create mode 100755 patchdisplay.mhp create mode 100755 preprocessindoor67.m create mode 100755 pyridx2pos.m create mode 100755 sampleRandomPatchesbb.m create mode 100755 selectdetrs2.m create mode 100644 setdataset.m create mode 100755 unentanglePyramid.m create mode 100755 util/c.m create mode 100755 util/distributeby.m create mode 100755 util/effstr2str.m create mode 100755 util/effstrcell2mat.m create mode 100755 util/effstridx.m create mode 100644 util/idxof.m create mode 100755 util/idxwithdefault.m create mode 100755 util/invertdistributeby.m create mode 100755 util/maxk.m create mode 100755 util/maxkall.m create mode 100755 util/mink.m create mode 100755 util/minkall.m create mode 100755 util/mymemory.m create mode 100755 util/normrows.m create mode 100755 util/overrideConf.m create mode 100755 util/str2effstr.m create mode 100755 util/structcell2mat.m diff --git a/README.md b/README.md new file mode 100644 index 0000000..19fa232 --- /dev/null +++ b/README.md @@ -0,0 +1,125 @@ +This code is the author's implementation of the algorithm presented in: + +Carl Doersch, Abhinav Gupta, and Alexei A. Efros, "Mid Level Visual Element +Discovery as Discriminative Mode Seeking" in NIPS 2013. + +The majority of the code was written by Carl Doersch (cdoersch at cs dot cmu dot edu), +although there are major contributions from Saurabh Singh and some from others who +are noted in the code. + +This is officially unsupported research code, but our goal is that this will be +as useful as possible. You are encouraged to ask questions via e-mail, +and strongly encouraged to give feedback if you find the code +counter-intuitive. I plan to update this code as issues are discovered. + +General setup: + +0) This code is only designed to run on linux. It might run on a mac or other + unix system since it only uses unix commands, but it has not been tested. + +1) Install libsvm and edit the file 'myaddpath.m' so that it adds libsvm to the path. + +2) Check that you have the statistics toolbox. If you plan to use the inter-element + communication and are not running 64-bit linux, you need to copy the file + [MATLAB ROOT]/toolbox/stats/stats/private/linkagemex.(your extension) + onto the matlab path (e.g. in the directory containing this file). This is to + work around a bug I've experienced in Matlab's linkage implementation; if + you don't want to use the workaround, you can switch the call in findOverlapping3.m + from linkage2 to linkage. + +3) Edit the indoor67_main file with the path of your download of the indoor67 dataset + (there's directions in the file). If you want to use your own data, setdataset.m gives + instructions on how to do this. + +4) If you aren't running on 64-bit linux, go to the hog/ directory + and run 'mex features.cc'. + +5) [optional] If you want to measure coverage pixel-wise (the code doesn't by default), compile + the code in the clipper directory--i.e. cd into the directory and run + "mex greedySelectDetrsCoveragemex.cpp clipper.hpp clipper.cpp" + +6) Make the .matlab folder in your home directory read-only--i.e. 'chmod -R 555 ~/.matlab'. + The code may work without this, but by default matlab writes a toolbox cache file + to the home directory when it starts up. If many matlabs start at the same time, + they can corrupt this file and cause some matlab processes to error out. The dswork + code restarts the workers occasionally, which means the execution will get stuck if + matlab can no longer start properly. + +7) Run the clustering code in Matlab. The main script for the indoor67 experiment + is indoor67_main.m. + +Running the code on indoor67 should require about 8GB of RAM per machine. indoor67_main +will attempt to estimate the number of jobs to run on each machine based on the RAM +each machine has. The program also needs about 30GB of free disk space and about 300GB +in the temporary local directories (that's total; it can be distributed across different +machines). If you're not using local directories, then that 300GB will need to be on +the shared filesystem. + + +Parallelizing the code with dswork: + +This codebase uses heavily the dswork framework. The README in the dswork +directory gives full documentation, but here's a tl;dr summary. + +dswork has two main features. (1) it establishes a mapping between +some directory on the filesystem and the variable 'ds' in your +workspace. Hence, you can call + +dssetout('/tmp'); +ds.mydirectory.myvariable=rand(100); +dssave; + +This causes the variable ds.myvariable to be saved to '/tmp/ds/mydirectory/myvariable.mat'. +dswork supports filesystem command analogous to unix, including dsmv, dsdelete, +dssymlink (though this implementation is incomplete), and dscd. To make the syntax +as concise as possible, the format that things are saved in depends on the variable +suffix--thus far, the suffixes img and html and txt have special meanings. + +On top of this, dswork supports some basic distributed processing features, including +multiple MATLAB's on one machine, and multiple matlabs on different machines. For these +to work, the directory where dswork saves its files needs to be shared among all machines +you are using. + +At a high level, dsmapredopen() sets up a pool of workers that are essentially stateless. +Using dsrundistributed() or dsmapreduce() will assign work to each worker, allows the +workers to load data from the shared storage, and tracks the variables that +get written. Additionally, dsmapreduce() supports mapreduce-like communication between +the workers that does not go through the shared storage. This instead uses ssh to +share data. This is important because, if you share all your data using an nfs-share +of a disk on a single machine (as I did), I/O will likely become a bottleneck for the +main element mining loop. Sharing data directly between machines alleviates this +issue. To use this, the only setup required should be to give dswork a local directory +where it can save temporary files on each machine, via the dssetlocaldir() funciton. + + +Running multiple matlab's locally should not require any additional setup, but running +distributed will require a machine that supports qsub. All of the experiments +for this project were performed using Starcluster on EC2, which sets up an +OGS cluster with data shared over nfs. See dsmapredopen for instructions on +starting the distributed session. + + +So you want to understand the code... + +My coding style is developed around rapid prototyping, and is probably different from +what you're used to. Here's a few patterns that I tend to use. + +1) I generally use parallel arrays where other programmers would use arrays of structs or + arrays of objects. This is the case because I often need quick access to all values of a single + field. Matlab's struct arrays support this, but it is extremely inefficient. + The distributeby/invertdistributeby have become a sort of swiss army knife for handling + parallel arrays in my code. You should memorize what distributeby does. + +2) To ease dealing with parallel arrays, the effstr... commands are designed to deal + with a struct holding multiple parallel arrays (effstr means 'efficient replacement + for matlab struct arrays'). The motivation is that I can add temporary data to an + object and keep track of it alongside those objects, all with minimal modification + of the code. + +3) If I have a collection of n bounding boxes, they will be stored in an n-by-8 array with + the following column order: [x1 y1 x2 y2 detection_score detector_id image_id flip]. + x- and y- coordinates are in terms of pixels *in the space returned by getimg*. flipped + detections have flip=1, but are still in terms of the coordinates of the un-flipped image. + These are used so frequently in the code that this format is used without comment; you + should memorize the order. + diff --git a/RGB2Lab.m b/RGB2Lab.m new file mode 100755 index 0000000..25692fe --- /dev/null +++ b/RGB2Lab.m @@ -0,0 +1,69 @@ +function [L,a,b] = RGB2Lab(color_image) +% function [L, a, b] = RGB2Lab(R, G, B) +% RGB2Lab takes matrices corresponding to Red, Green, and Blue, and +% transforms them into CIELab. This transform is based on ITU-R +% Recommendation BT.709 using the D65 white point reference. +% The error in transforming RGB -> Lab -> RGB is approximately +% 10^-5. RGB values can be either between 0 and 1 or between 0 and 255. +% By Mark Ruzon from C code by Yossi Rubner, 23 September 1997. +% Updated for MATLAB 5 28 January 1998. + +% commented out grayscale case +% if (nargin == 1) +% B = double(R(:,:,3)); +% G = double(R(:,:,2)); +% R = double(R(:,:,1)); +% end + +% commented out error checking, jhhays +% if ((max(max(R)) > 1.0) | (max(max(G)) > 1.0) | (max(max(B)) > 1.0)) +% R = R/255; +% G = G/255; +% B = B/255; +% end + +M = size(color_image,1); +N = size(color_image,2); +s = M*N; + +% Set a threshold +T = 0.008856; + +RGB = [reshape(color_image(:,:,1),1,s); ... + reshape(color_image(:,:,2),1,s); ... + reshape(color_image(:,:,3),1,s)]; + +% RGB to XYZ +MAT = [0.412453 0.357580 0.180423; + 0.212671 0.715160 0.072169; + 0.019334 0.119193 0.950227]; +XYZ = MAT * RGB; + +X = XYZ(1,:) / 0.950456; +Y = XYZ(2,:); +Z = XYZ(3,:) / 1.088754; + +XT = X > T; +YT = Y > T; +ZT = Z > T; + +fX = XT .* X.^(1/3) + (~XT) .* (7.787 .* X + 16/116); + +% Compute L +Y3 = Y.^(1/3); +fY = YT .* Y3 + (~YT) .* (7.787 .* Y + 16/116); +L = YT .* (116 * Y3 - 16.0) + (~YT) .* (903.3 * Y); + +fZ = ZT .* Z.^(1/3) + (~ZT) .* (7.787 .* Z + 16/116); + +% Compute a and b +a = 500 * (fX - fY); +b = 200 * (fY - fZ); + +L = reshape(L, M, N); +a = reshape(a, M, N); +b = reshape(b, M, N); + +if ((nargout == 1) | (nargout == 0)) + L = cat(3,L,a,b); +end diff --git a/TestImages.txt b/TestImages.txt new file mode 100755 index 0000000..77c7d4f --- /dev/null +++ b/TestImages.txt @@ -0,0 +1,1340 @@ +kitchen/int474.jpg +operating_room/operating_room_31_03_altavista.jpg +restaurant_kitchen/restaurant_kitchen_google_0075.jpg +videostore/videoclub_05_14_flickr.jpg +poolinside/piscine_interieureee.jpg +videostore/blockbuster_08_10_flickr.jpg +poolinside/piscina_cubierta_07_19_altavista.jpg +mall/mall26.jpg +kindergarden/toddler.jpg +buffet/Buffet_1.jpg +hospitalroom/IMG_1482.jpg +library/scotland_library.jpg +inside_bus/inside_bus_093.jpg +bar/bar_0382.jpg +kindergarden/McMil_PicImg00011.jpg +dentaloffice/dentista_oficina_01_02_flickr.jpg +office/img_0013.jpg +videostore/3_1interior1.jpg +buffet/Buffet_Set_Up_gif.jpg +computerroom/SALLE_ORDINATEUR_NDC.jpg +grocerystore/800px_Rewe_supermarkt.jpg +cloister/cloister2_wc_gfdl.jpg +concert_hall/e8708arial.jpg +operating_room/operating_room_24_02_altavista.jpg +jewelleryshop/pandora_jewelry_store3_25_.jpg +laundromat/interior010.jpg +warehouse/warehouse_0398.jpg +gym/gimnasio_47_20_altavista.jpg +lobby/RenaissanceHotelAmsterdam_lobby.jpg +meeting_room/conferencerm2_gif.jpg +garage/IMG_0130.jpg +inside_bus/inside_bus_079.jpg +inside_subway/metropolitana_46_08_flickr.jpg +mall/room204.jpg +buffet/Holiday_Buffet_3.jpg +library/JPB_Library.jpg +restaurant/restaurante_24_20_altavista.jpg +inside_subway/inside_subway_0006.jpg +videostore/videoclub_01_24_flickr.jpg +inside_bus/inside_bus_065.jpg +children_room/OR_03_06_1002_56_l.jpg +grocerystore/supermarkt055.jpg +jewelleryshop/pamodificada_c_42_.jpg +mall/ins46.jpg +corridor/londres_023.jpg +hairsalon/1cb88b407105e7f93511d544d9b7_1_3.jpg +bookstore/Libreria_25_04_altavista.jpg +dentaloffice/302406458_d635d6851e.jpg +office/homeoff008.jpg +concert_hall/33_e_498.jpg +movietheater/816105903_94823d06a7_1__13.jpg +hairsalon/coiffeur0636yp5.jpg +elevator/elevator_google_0057.jpg +restaurant/room106.jpg +stairscase/AT_04_04_2000_26_l.jpg +artstudio/taller_de_arte_03_03_altavista.jpg +elevator/elevator_google_0099.jpg +hairsalon/HS_partners.jpg +office/homeoff007.jpg +children_room/kids2_46_.jpg +grocerystore/2fgr_supermarkt.jpg +bathroom/room311.jpg +gameroom/salle_de_jeux_07_19_altavista.jpg +locker_room/locker_room_google_0125.jpg +lobby/Cascades_lobby_sized.jpg +nursery/modern_fish.jpg +waitingroom/Waiting_Room093.jpg +hairsalon/salon2678.jpg +winecellar/cave_vin_21_13_altavista.jpg +locker_room/locker_room_google_0196.jpg +meeting_room/conf12.jpg +nursery/image001.jpg +florist/scai_fev_07_9.jpg +closet/closet4.jpg +hospitalroom/blueberry_hill_blog_5_4.jpg +inside_bus/inside_bus_001.jpg +winecellar/cave_vin_31_17_altavista.jpg +library/librairie_16.jpg +jewelleryshop/joyeria_24_04_altavista.jpg +clothingstore/boutique777.jpg +grocerystore/idd_supermarche.jpg +inside_bus/inside_bus_083.jpg +pantry/pantry_85_24_flickr.jpg +bar/bar_0564.jpg +florist/c04652600522c7ad139144ca0e2b_2_4.jpg +prisoncell/jail1.jpg +shoeshop/lake_garda_shopping_shoe_shop.jpg +florist/florist_38_20_altavista.jpg +meeting_room/conf26.jpg +museum/museo_32_10_flickr.jpg +clothingstore/MashStorecopy.jpg +fastfood_restaurant/Carl_s_Jr_Green_Burrito_counter_in_SSF.jpg +auditorium/flunoauditorium5_1__54.jpg +meeting_room/113_bis_meeting_room.jpg +fastfood_restaurant/DSC06236.jpg +subway/subway_0268.jpg +classroom/american_history_classroom.jpg +kitchen/int396.jpg +meeting_room/Tuinh_Int_01.jpg +videostore/come_in.jpg +hairsalon/thumb.jpg +kitchen/indoor_0460.jpg +laboratorywet/peterfeinhood.jpg +deli/deli_120_05_flickr.jpg +operating_room/operating_room_05_16_altavista.jpg +tv_studio/studio02_lg_100_.jpg +grocerystore/800px_SuperstoreWinkler3.jpg +inside_subway/inside_subway_0337.jpg +classroom/90468092_47c4b7f04d.jpg +corridor/img_7677.jpg +prisoncell/jail_cell_3.jpg +auditorium/locaux_amphi_1_1__156.jpg +kindergarden/preschool23.jpg +closet/PeterCloset1edit.jpg +restaurant/restau_11.jpg +pantry/pantry_26_07_flickr.jpg +bedroom/indoor_0405.jpg +clothingstore/kleidung600.jpg +fastfood_restaurant/p374062_Fajardo_El_Pollo_Tropical.jpg +corridor/c16.jpg +warehouse/warehouse_0382.jpg +kindergarden/PreschoolClassroom2.jpg +fastfood_restaurant/cam2_big.jpg +bookstore/Lehmann_Buchhandlung_neu.jpg +garage/IMG_0778.jpg +children_room/100_3520_5_.jpg +garage/mso1011_ShelvesBike_aft1_w609.jpg +bowling/bowling_0071.jpg +computerroom/_7BB05260_2CB9_464F_8403_ABFA52061E3E_.jpg +jewelleryshop/joyeria21.jpg +concert_hall/CH_intro.jpg +dentaloffice/dentista_06_15_altavista.jpg +livingroom/n457042.jpg +dining_room/dining012.jpg +office/webP1010001.jpg +buffet/411053258_31173c5bea.jpg +elevator/elevator_google_0064.jpg +gameroom/sala_de_juegos_03_06_altavista.jpg +gym/1156_3.jpg +jewelleryshop/joyeria1.jpg +livingroom/at_01_5a_1604_05_l.jpg +cloister/oman_cloister.jpg +elevator/elevator_google_0070.jpg +trainstation/estacion_de_ferrocarriles_40_03_altavista.jpg +bedroom/indoor_0154.jpg +corridor/room113.jpg +videostore/blockbuster_28_11_flickr.jpg +mall/800px_Ueno_station_shopping_mall.jpg +airport_inside/airport_inside_0389.jpg +museum/museo_158_06_flickr.jpg +inside_subway/inside_subway_0364.jpg +locker_room/locker_room_google_0147.jpg +poolinside/0310_piscines_10.jpg +corridor/n457059.jpg +concert_hall/Essen_Philharmonie_594.jpg +dentaloffice/dentaire_12_09_flickr.jpg +movietheater/movietheater_google_0036.jpg +inside_subway/inside_subway_0110.jpg +laundromat/maschine_gross.jpg +library/bibliotheksaq.jpg +laundromat/how_to_organize_a_laundry_room_1.jpg +kindergarden/ClassroomLarge_gif.jpg +children_room/img_3971_25_.jpg +deli/deli_05_17_yahoo.jpg +bookstore/bookstore_01_09_flickr.jpg +kitchen/indoor_0250.jpg +artstudio/artist_studio_50_13_altavista.jpg +bookstore/bookstore_25_17_flickr.jpg +bedroom/room33.jpg +library/bibliotheque_400px.jpg +movietheater/movietheater_google_0028.jpg +church_inside/Westminster_Presbyterian_Church_Interior.jpg +inside_subway/inside_subway_0061.jpg +office/homeoff009.jpg +artstudio/art_painting_studio_30_13_altavista.jpg +bedroom/b28.jpg +deli/deli_03_03_altavista.jpg +museum/museum_36_07_altavista.jpg +hospitalroom/DSC_0035.jpg +library/Library_Pictures_3_.jpg +laundromat/VA_02_01_6305_27_l.jpg +livingroom/room408.jpg +bowling/bowling_0105.jpg +inside_bus/inside_bus_058.jpg +meeting_room/c1.jpg +prisoncell/prison_cell_22_18_altavista.jpg +pantry/pantry_144_18_flickr.jpg +toystore/spider_knife_low.jpg +lobby/lobby23.jpg +pantry/pantry_87_04_flickr.jpg +toystore/toys_store_23_20_altavista.jpg +mall/TheMallEngland.jpg +office/indoor_0148.jpg +gameroom/GameRoom45.jpg +operating_room/surgery_room_16_16_altavista.jpg +gym/uploads_images_photos_images_fullsize_gym.jpg +lobby/recibidor2.jpg +tv_studio/tvseriouscam2_540x404_119_.jpg +kitchen/indoor_0464.jpg +closet/banner2.jpg +bathroom/img_1115.jpg +toystore/tienda1.jpg +church_inside/metropolitana_123_11_flickr.jpg +fastfood_restaurant/connies_gif.jpg +kitchen/indoor_0439.jpg +bedroom/indoor_0332.jpg +trainstation/estacion_de_ferrocarriles_05_08_altavista.jpg +jewelleryshop/us1_54_.jpg +movietheater/movietheater_google_0050.jpg +church_inside/metropolitana_42_03_flickr.jpg +operating_room/surgery_room_15_08_altavista.jpg +airport_inside/airport_inside_0140.jpg +elevator/elevator_google_0098.jpg +hairsalon/salon03.jpg +movietheater/la_salle_1__52.jpg +trainstation/estacion_de_ferrocarriles_19_16_altavista.jpg +bowling/bowling_0117.jpg +casino/casino_0390.jpg +elevator/elevator_google_0049.jpg +locker_room/locker_room_google_0047.jpg +bedroom/indoor_0401.jpg +library/bibliotheque_photo.jpg +clothingstore/boutique_02_g.jpg +computerroom/laboratoire_informatique_bibliotheque.jpg +children_room/playroom11_55_.jpg +stairscase/S25.jpg +tv_studio/tv_studio_1b_70_.jpg +bar/bar_0308.jpg +subway/subway_0496.jpg +bakery/boulangerie_10_08_altavista.jpg +bakery/new_bakery_12_12_altavista.jpg +bowling/bowling_0085.jpg +garage/Garage77.jpg +deli/deli_09_06_yahoo.jpg +lobby/rectorate_lobby.jpg +pantry/pantry_29_19_flickr.jpg +pantry/larder.jpg +dentaloffice/dentista_124_14_flickr.jpg +restaurant_kitchen/restaurant_kitchen_google_0012.jpg +winecellar/wine_cellar_24_03_altavista.jpg +restaurant_kitchen/restaurant_kitchen_google_0088.jpg +videostore/jobeth2.jpg +dentaloffice/dental_office_05_02_altavista.jpg +livingroom/room140.jpg +deli/deli_15_19_altavista.jpg +fastfood_restaurant/866_camilles_3_adamo_standalone_prod_affiliate_25.jpg +warehouse/warehouse_0295.jpg +bakery/best_bakery_01_17_altavista.jpg +prisoncell/prison_cell_01_20_flickr.jpg +mall/p312066_PATIO_OLMOS_SHOPPING_CENTER.jpg +bathroom/b9.jpg +greenhouse/Greenhouse632.jpg +greenhouse/hortela_nas_estufas_2.jpg +toystore/toys_store_35_03_altavista.jpg +warehouse/warehouse_0483.jpg +meeting_room/smallroom2W625.jpg +restaurant/pk_cella_bistro_1.jpg +restaurant_kitchen/restaurant_kitchen_google_0096.jpg +airport_inside/airport_inside_0425.jpg +corridor/n457056.jpg +meeting_room/conference5.jpg +movietheater/3_cin_1_1__11.jpg +dentaloffice/dental_office_01_08_altavista.jpg +laundromat/Waschsalon_05.jpg +nursery/baby_room.jpg +auditorium/the_auditorium_the_speakers_table_big_2104194540_1__73.jpg +gym/gimnasio_56_19_flickr.jpg +studiomusic/CzaplaMusicStudio_1.jpg +library/ins20.jpg +bar/bar_0349.jpg +gym/imgP2090065.jpg +florist/callas_floristeria.jpg +bookstore/PublicP131C_L.jpg +movietheater/cine0_1__43.jpg +grocerystore/store_400.jpg +livingroom/indoor_0483.jpg +hospitalroom/Afghan_Hospital_Room2_sized.jpg +grocerystore/moody_grocery_isle.jpg +pantry/WH_Pantry_WI.jpg +movietheater/petit_melies_1__56.jpg +dentaloffice/dentista_92_14_flickr.jpg +studiomusic/control5g.jpg +bakery/best_bakery_11_14_altavista.jpg +buffet/food_large_dessert.jpg +garage/Garage3.jpg +restaurant_kitchen/restaurant_kitchen_google_0081.jpg +studiomusic/studio_overall.jpg +locker_room/locker_room_google_0077.jpg +subway/subway_0369.jpg +livingroom/roomscan9.jpg +bowling/bowling_0025.jpg +children_room/VR_06_01_1001_06_l.jpg +shoeshop/taller11.jpg +stairscase/HO_06_04_4000_07_l.jpg +bakery/panaderia_39_02_altavista.jpg +florist/MVC_107S.jpg +kitchen/indoor_0468.jpg +bookstore/Librairie_07_08_altavista.jpg +greenhouse/greenhouse203.jpg +museum/museum_61_18_flickr.jpg +nursery/nursery_rhymes_wall_mural_main.jpg +museum/museum_20_09_altavista.jpg +bar/bar_0135.jpg +subway/subway_0014.jpg +bathroom/pasadena_IMG_0153.jpg +bedroom/n190068.jpg +cloister/Cloister_of_the_monastery_Unser_Lieben_Frauen_Magdeburg.jpg +prisoncell/prison_cell_05_11_altavista.jpg +garage/InsideGarDoor.jpg +gym/Weight_Room.jpg +hairsalon/home_cover_01.jpg +prisoncell/prison_cell_16_03_altavista.jpg +bedroom/roomscan37.jpg +clothingstore/images_bookstore_main1.jpg +cloister/DurhamCloister.jpg +bathroom/img_0646.jpg +inside_bus/inside_bus_025.jpg +airport_inside/airport_inside_0352.jpg +livingroom/indoor_0359.jpg +lobby/LV_04_01_0002_14_l.jpg +grocerystore/IMG_3103.jpg +jewelleryshop/fine_diamond_jeweler_35_.jpg +subway/subway_0420.jpg +bakery/panaderia_29_19_yahoo.jpg +prisoncell/prison_cell_03_11_altavista.jpg +restaurant_kitchen/restaurant_kitchen_google_0031.jpg +casino/casino_0323.jpg +library/Off_Library.jpg +trainstation/train_station_03_14_altavista.jpg +bookstore/bookstore_10_23_flickr.jpg +inside_bus/inside_bus_042.jpg +locker_room/locker_room_google_0014.jpg +concert_hall/g_vigoenfotos_1961d.jpg +hospitalroom/DSC02829.jpg +inside_subway/inside_subway_0370.jpg +dentaloffice/dentista_09_24_flickr.jpg +restaurant/restaurante_157_21_flickr.jpg +videostore/lifeblog13122007004.jpg +studiomusic/1175259599.jpg +waitingroom/Studio.jpg +jewelleryshop/joyeria_08_18_flickr.jpg +winecellar/wine_cellar_33_15_altavista.jpg +church_inside/metropolitana_116_22_flickr.jpg +movietheater/dsc00021_1__50.jpg +elevator/elevator_google_0044.jpg +locker_room/locker_room_google_0138.jpg +shoeshop/bottom.jpg +artstudio/painters_studio_43_09_altavista.jpg +elevator/elevator_google_0004.jpg +hairsalon/shop.jpg +inside_bus/inside_bus_063.jpg +bookstore/bookstore_32_10_flickr.jpg +meeting_room/n457098.jpg +locker_room/locker_room_google_0162.jpg +airport_inside/airport_inside_0507.jpg +dining_room/dining046.jpg +gym/gimnasio_09_11_altavista.jpg +hairsalon/3_bains_du_marais.jpg +classroom/salle_de_classe67.jpg +laundromat/laverie092007_011.jpg +greenhouse/DSC00024.jpg +classroom/salle1950bg.jpg +kindergarden/pre_school_015_137130855_std.jpg +laundromat/lavanderia_74_14_flickr.jpg +waitingroom/attente.jpg +clothingstore/boutique_header5.jpg +airport_inside/airport_inside_0165.jpg +kindergarden/pre1.jpg +toystore/jugueteria_14_06_flickr.jpg +airport_inside/airport_inside_0321.jpg +dining_room/casa2.jpg +grocerystore/bstone13.jpg +laboratorywet/wet_lab_37_19_altavista.jpg +dining_room/dining033.jpg +closet/WC_Tower.jpg +kitchen/indoor_0251.jpg +computerroom/computerR.jpg +florist/floristeria2.jpg +inside_bus/inside_bus_002.jpg +bedroom/indoor_0069.jpg +laundromat/lavanderia_45_07_flickr.jpg +restaurant_kitchen/restaurant_kitchen_google_0101.jpg +studiomusic/lateraltecnico.jpg +jewelleryshop/2641107.jpg +inside_bus/inside_bus_010.jpg +lobby/Lobbywithstatue.jpg +pantry/13.jpg +pantry/pantry_16_22_flickr.jpg +movietheater/cinema_1__48.jpg +poolinside/t_pool.jpg +dining_room/dining016.jpg +gameroom/LW3DHc.jpg +buffet/Wedding_Food_3_edited.jpg +prisoncell/27jail_slide01.jpg +winecellar/cellar_design_svcs.jpg +classroom/classroom3.jpg +laboratorywet/wet_lab_08_04_altavista.jpg +toystore/toys_store_41_20_altavista.jpg +bookstore/bookstore_16_04_altavista.jpg +operating_room/surgery_room_07_08_altavista.jpg +bar/bar_0491.jpg +artstudio/estudio_de_pintor_06_02_altavista.jpg +lobby/bpi_lobby1.jpg +airport_inside/airport_inside_0306.jpg +florist/floristeria61.jpg +restaurant_kitchen/restaurant_kitchen_google_0042.jpg +stairscase/N190075.jpg +auditorium/auditorium_400_1__93.jpg +grocerystore/orlando.jpg +inside_bus/inside_bus_020.jpg +office/room477.jpg +office/office21.jpg +restaurant_kitchen/restaurant_kitchen_google_0040.jpg +waitingroom/waiting_room_34_14_altavista.jpg +deli/deli_34_21_flickr.jpg +buffet/url.jpg +deli/deli_counter.jpg +inside_subway/inside_subway_0316.jpg +children_room/VR_06_02_2000_59_l.jpg +kitchen/aa014484.jpg +warehouse/warehouse_0256.jpg +restaurant/restaurant_10_14_altavista.jpg +prisoncell/prison_cell_01_16_altavista.jpg +church_inside/pantry_120_08_flickr.jpg +inside_bus/inside_bus_021.jpg +museum/museum_128_24_flickr.jpg +casino/casino_0138.jpg +cloister/Claustro_Plasencia.jpg +jewelleryshop/PYC_039_PRY_PRY_146-153_014_i.jpg +children_room/VA_03_00_0003_42_l.jpg +laundromat/West_Equip.jpg +shoeshop/zapateria_04_11_flickr.jpg +warehouse/warehouse_0255.jpg +buffet/114811570_481eefa09f.jpg +operating_room/surgery_room_34_16_altavista.jpg +poolinside/lidopool03.jpg +hairsalon/Salon_poste_coiffure2_grand.jpg +dining_room/easyst036.jpg +winecellar/bodega_11_23_flickr.jpg +gameroom/AT_98_2_1623_31_l.jpg +tv_studio/438771324_4e003a475b_24_.jpg +operating_room/surgery_room_49_20_altavista.jpg +restaurant_kitchen/restaurant_kitchen_google_0070.jpg +airport_inside/airport_inside_0290.jpg +nursery/2007_05_30_nursery_flickrfinds7.jpg +shoeshop/Chaussures.jpg +videostore/videoteca_13_10_altavista.jpg +elevator/elevator_google_0088.jpg +elevator/elevator_google_0022.jpg +greenhouse/47_Invernadero_1.jpg +classroom/Im423_5.jpg +locker_room/locker_room_google_0246.jpg +movietheater/movietheater_google_0046.jpg +gameroom/BR_05_01_1000_10_l.jpg +tv_studio/thumbnail_studiocameras_norm_106_.jpg +inside_bus/inside_bus_030.jpg +winecellar/cave.jpg +jewelleryshop/vilanova_i_la_geltru_joieria_maestre.jpg +toystore/jugueteria_16_16_flickr.jpg +bedroom/indoor_0177.jpg +jewelleryshop/r.jpg +movietheater/movietheater_google_0029.jpg +locker_room/locker_room_google_0168.jpg +shoeshop/zapateria_08_09_flickr.jpg +auditorium/auditorium_465x309_1__127.jpg +bedroom/indoor_0418.jpg +concert_hall/09260032.jpg +warehouse/warehouse_0139.jpg +inside_bus/inside_bus_031.jpg +children_room/br3playroom_10_.jpg +restaurant_kitchen/restaurant_kitchen_google_0055.jpg +clothingstore/shop10.jpg +bathroom/indoor_0309.jpg +pantry/pantry_104_14_flickr.jpg +subway/subway_0137.jpg +hospitalroom/brady_hospital.jpg +dining_room/homeoff002.jpg +trainstation/estacion_de_ferrocarriles_29_04_altavista.jpg +poolinside/059088D.jpg +waitingroom/salle_attente1.jpg +airport_inside/airport_inside_0428.jpg +inside_subway/inside_subway_0052.jpg +hospitalroom/HospitalRoom2_big.jpg +laundromat/VA_02_04_7112_19_l.jpg +winecellar/bodega_114_20_flickr.jpg +dentaloffice/dentaire_41_16_altavista.jpg +stairscase/int221.jpg +church_inside/iglesia2.jpg +library/library04.jpg +poolinside/1996_Pool.jpg +artstudio/art_painting_studio_10_19_altavista.jpg +fastfood_restaurant/Img_2369a.jpg +hairsalon/salon44.jpg +kindergarden/kindergarten_ansicht1.jpg +artstudio/art_painting_studio_09_10_altavista.jpg +kindergarden/Classroom_pic_8_23_07_001.jpg +dining_room/easyst042.jpg +casino/casino_0416.jpg +closet/152t.jpg +hospitalroom/hospital_room_1_second_foto.jpg +nursery/africa_nursery.jpg +subway/subway_0135.jpg +artstudio/painters_studio_08_12_altavista.jpg +inside_bus/inside_bus_077.jpg +elevator/elevator_google_0101.jpg +trainstation/gare_32_16_flickr.jpg +bowling/bowling_0026.jpg +concert_hall/PetronasPhilharmonicConcertHall.jpg +kitchen/kitchen003.jpg +studiomusic/sala6.jpg +florist/16943_7438_5.jpg +airport_inside/airport_inside_0275.jpg +concert_hall/concertHall.jpg +dentaloffice/dentista_112_04_flickr.jpg +mall/Wafi_RamRaid_Hussein_GNreader.jpg +toystore/toys_store_26_12_altavista.jpg +laboratorywet/wet_lab_35_12_altavista.jpg +movietheater/salle2_1__67.jpg +movietheater/slide8_74.jpg +garage/garage_inside_desk.jpg +meeting_room/n457017.jpg +subway/subway_0339.jpg +subway/underground_57_11_flickr.jpg +videostore/videotheque_02_07_flickr.jpg +computerroom/comproom3lrg.jpg +church_inside/metropolitana_147_01_flickr.jpg +nursery/cool_nursery.jpg +laundromat/lavanderia_110_22_flickr.jpg +computerroom/TrainingRoom_2.jpg +concert_hall/GD4777628_4112.jpg +classroom/classroom_front.jpg +prisoncell/jail_cells_3_big.jpg +videostore/videoclub_03_02_flickr.jpg +meeting_room/salledereunion1.jpg +bar/bar_0330.jpg +church_inside/Iglesia_del_Carmen.jpg +trainstation/gare_101_12_flickr.jpg +mall/galleria1.jpg +concert_hall/Flagey_Auditorium.jpg +grocerystore/store_counter.jpg +bowling/bowling_0161.jpg +concert_hall/rh_photo02.jpg +livingroom/dsc3101.jpg +warehouse/warehouse_0110.jpg +bathroom/room30.jpg +nursery/baby_room1.jpg +buffet/285264036_2976da5ec8.jpg +laboratorywet/wet_lab_22_15_altavista.jpg +poolinside/piscina_cubierta_09_01_altavista.jpg +cloister/808076.jpg +church_inside/buda_eglise_1.jpg +dentaloffice/dental_office_15_11_altavista.jpg +inside_bus/inside_bus_102.jpg +restaurant/witches_bistro_in_benidorm_large04.jpg +auditorium/auditorium_2__122.jpg +kindergarden/DSC000562.jpg +children_room/playroom15_57_.jpg +locker_room/locker_room_google_0039.jpg +auditorium/3195_auditorium_1__8.jpg +laundromat/lavanderia_05_14_flickr.jpg +meeting_room/conf16.jpg +poolinside/pool_inside_31_06_altavista.jpg +prisoncell/2226542443_5481b41c51.jpg +winecellar/wine_cellar_49_05_altavista.jpg +office/int594.jpg +lobby/AppLogicbooker_004.jpg +videostore/vanguard.jpg +bowling/bowling_0195.jpg +fastfood_restaurant/DSC00477.jpg +buffet/buffet-food.jpg +casino/casino_0183.jpg +corridor/accessories24.jpg +pantry/despensa_134_18_flickr.jpg +closet/p3_a.jpg +deli/deli_56_24_flickr.jpg +airport_inside/airport_inside_0062.jpg +closet/url_1.jpg +bar/bar_0597.jpg +inside_subway/inside_subway_0279.jpg +mall/hillsdale_mall_4.jpg +videostore/video_store_49_20_altavista.jpg +pantry/WC_Pantry_Door.jpg +toystore/jugueteria_21_11_flickr.jpg +winecellar/cave_champagne_08_06_altavista.jpg +classroom/classroom06.jpg +museum/museo_133_19_flickr.jpg +videostore/video_shop.jpg +classroom/Classroom.jpg +florist/anais480.jpg +clothingstore/Loja_de_roupa_e_sapataria.jpg +warehouse/warehouse_0437.jpg +hairsalon/peluqueria01.jpg +livingroom/l1.jpg +subway/subway_0150.jpg +casino/casino_0409.jpg +casino/casino_0336.jpg +library/shakespearebookshop.jpg +movietheater/movietheater_google_0061.jpg +auditorium/parsons_20auditorium_1__66.jpg +greenhouse/site_estufa_04.jpg +restaurant/interior.jpg +dentaloffice/dentaire_13_14_altavista.jpg +hairsalon/hair_salon_brisbane.jpg +bedroom/indoor_0166.jpg +inside_subway/inside_subway_0126.jpg +bedroom/bed136.jpg +dentaloffice/dentista_06_12_altavista.jpg +corridor/IMG_1691.jpg +clothingstore/dhd_boutique_2.jpg +library/bibliothek_ParagraphContainerList_ParagraphContainer0_ParagraphList_0002_Image.jpg +meeting_room/c14.jpg +bowling/bowling_0046.jpg +shoeshop/2200865379_9c78486bcd.jpg +studiomusic/estudio43.jpg +airport_inside/airport_inside_0095.jpg +restaurant_kitchen/restaurant_kitchen_google_0098.jpg +tv_studio/tv_studio3221_109_.jpg +laundromat/laundromat122.jpg +waitingroom/waiting_room_34_10_altavista.jpg +lobby/lobby21.jpg +kitchen/k2.jpg +museum/museum_19_19_altavista.jpg +pantry/pantry456781.jpg +kitchen/dscf2952.jpg +laboratorywet/laboratorio_quimica_17_11_altavista.jpg +restaurant_kitchen/restaurant_kitchen_google_0068.jpg +buffet/buffet95.jpg +corridor/room497.jpg +bowling/bowling_0113.jpg +shoeshop/zapateria_11_23_flickr.jpg +clothingstore/bookstore.jpg +bedroom/room35.jpg +gameroom/sala_de_juegos_24_14_altavista.jpg +office/00_17.jpg +closet/smallsp019.jpg +shoeshop/zapateria11.jpg +inside_subway/inside_subway_0179.jpg +toystore/jugueteria_07_08_yahoo.jpg +bar/bar_0125.jpg +clothingstore/CIMG0506.jpg +waitingroom/bookstore_sittingarea.jpg +garage/8751_12.jpg +children_room/playroom30_63_.jpg +bar/bar_0353.jpg +laboratorywet/wet_lab_28_11_altavista.jpg +pantry/pantry_97_14_flickr.jpg +tv_studio/tv_studio_13_08_altavista.jpg +clothingstore/michis_boutique.jpg +pantry/pantry_51_10_flickr.jpg +inside_subway/inside_subway_0069.jpg +kitchen/indoor_0438.jpg +pantry/elfa_reach_in_pantry_thumb.jpg +cloister/durham_cathedral_cloister_3_353x470.jpg +toystore/286605441_d9919621ce.jpg +winecellar/Wine_cellar.jpg +pantry/despensa_05_08_flickr.jpg +laundromat/VR_06_02_2000_89_l.jpg +dentaloffice/IMG_0087_1_.jpg +classroom/position_room.jpg +laboratorywet/wet_lab_2.jpg +hospitalroom/PICT8223.jpg +nursery/Chambre_enfant.jpg +bookstore/bookstore_19_16_altavista.jpg +gym/gimnasio_98_10_flickr.jpg +kindergarden/meeting_rug_windows_doors_large2.jpg +hairsalon/img125712.jpg +operating_room/operating_room_29_19_altavista.jpg +casino/casino_0375.jpg +office/homeoff004.jpg +corridor/c13.jpg +bookstore/Photo_Librairie_001_Small_.jpg +greenhouse/greenhouselk2.jpg +museum/museo_01_12_altavista.jpg +concert_hall/6.jpg +elevator/elevator_google_0018.jpg +warehouse/warehouse_0412.jpg +warehouse/warehouse_0189.jpg +restaurant/restaurante_27_10_altavista.jpg +waitingroom/105NC_New_Reception_area_on_7th_floor.jpg +museum/museum_36_08_altavista.jpg +locker_room/locker_room_google_0070.jpg +toystore/url.jpg +bakery/panaderia_06_14_yahoo.jpg +museum/museo_32_13_flickr.jpg +waitingroom/Waiting_Area2.jpg +gym/HO_00_01_5186_23_l.jpg +locker_room/locker_room_google_0012.jpg +stairscase/AT_04_05_4901_42_l.jpg +dentaloffice/dentista_74_09_flickr.jpg +warehouse/warehouse_0058.jpg +bathroom/room322.jpg +casino/casino_0453.jpg +bar/bar_0263.jpg +corridor/int74.jpg +trainstation/gare_116_03_flickr.jpg +nursery/photo_baby_nursery1_062203.jpg +children_room/083008_saturday_24__3_.jpg +jewelleryshop/610x2_11_.jpg +nursery/baby_nursery_decorating_ideas_8.jpg +kindergarden/classroom02.jpg +stairscase/N457076.jpg +restaurant/restaurant_16_03_altavista.jpg +videostore/VhsMachine.jpg +airport_inside/airport_inside_0044.jpg +casino/casino_0145.jpg +office/n457048.jpg +church_inside/2054074790031860892lbuUCO_ph.jpg +stairscase/escalier7.jpg +winecellar/cave_vin_48_06_altavista.jpg +buffet/944.jpg +garage/julian_garage.jpg +inside_bus/inside_bus_055.jpg +nursery/2006_09_21_nursery4.jpg +shoeshop/2046shoes2.jpg +livingroom/int123.jpg +shoeshop/32814.jpg +toystore/toys_store_23_02_altavista.jpg +bedroom/b1.jpg +laboratorywet/wet_lab_25_15_altavista.jpg +poolinside/Schwimmbad_badestube.jpg +greenhouse/greenhouse_l.jpg +laboratorywet/laboratorio_quimica_03_04_altavista.jpg +office/n457052.jpg +casino/casino_0134.jpg +poolinside/Branzez_new_bazen2a.jpg +closet/Maple_Walk_in_Closet.jpg +dining_room/d10.jpg +buffet/417654380_efa8dabfda.jpg +casino/casino_0367.jpg +meeting_room/int864.jpg +bathroom/bathroom2.jpg +livingroom/06_salon_y_cocina.jpg +bowling/bowling_0184.jpg +toystore/jugueteria_16_09_flickr.jpg +studiomusic/deep_studios_901.jpg +casino/casino_0374.jpg +clothingstore/r6yf3e33.jpg +airport_inside/airport_inside_0568.jpg +jewelleryshop/314097artemovilBig.jpg +stairscase/AT_99_4_7098_27_l.jpg +greenhouse/Pic_4748_33.jpg +meeting_room/n457012.jpg +museum/museum_43_05_altavista.jpg +warehouse/warehouse_0027.jpg +grocerystore/44l.jpg +laboratorywet/lab_testing_i1.jpg +museum/museo_158_08_flickr.jpg +buffet/buffet_galleryfull.jpg +inside_bus/inside_bus_084.jpg +cloister/462681141_71f2f52863.jpg +restaurant_kitchen/restaurant_kitchen_google_0004.jpg +greenhouse/AMFWTOaa.jpg +airport_inside/airport_inside_0088.jpg +warehouse/warehouse_0291.jpg +concert_hall/3673_Concert_Hall_interior_1_Nigel_Luckhurst_1.jpg +kitchen/indoor_0514.jpg +gameroom/GottliebCorner4.jpg +hairsalon/salon_front.jpg +subway/subway_0265.jpg +grocerystore/main.jpg +toystore/Spielzeug_168_24_flickr.jpg +bowling/bowling_0150.jpg +hairsalon/1117858298_3ddfab52d3.jpg +meeting_room/ins28.jpg +nursery/baby's_room.jpg.jpg +operating_room/operating_room_24_11_altavista.jpg +deli/deli_123_12_flickr.jpg +gameroom/doc0003.jpg +poolinside/piscina_cubierta_07_05_altavista.jpg +bowling/bowling_0072.jpg +buffet/buffet.jpg +bookstore/bookstore_48_01_flickr.jpg +artstudio/painters_studio_02_15_altavista.jpg +fastfood_restaurant/Godfathers_Knoxville_1.jpg +livingroom/indoor_0038.jpg +studiomusic/frente3.jpg +florist/floreria_05_02_flickr.jpg +stairscase/D26.jpg +gym/gimnasio_24_12_altavista.jpg +restaurant_kitchen/restaurant_kitchen_google_0043.jpg +subway/subway_0495.jpg +trainstation/estacion_de_tren_07_13_altavista.jpg +garage/3_CAR_GARAGE_1_2_25782147_std.jpg +auditorium/auditorium_seats_1__98.jpg +computerroom/computer.jpg +mall/galleria.jpg +tv_studio/837109_174933784a_m_28_.jpg +bookstore/800px_Wil_Buchhandlung_3104.jpg +dining_room/indoor_0054.jpg +museum/museo_139_14_flickr.jpg +meeting_room/c_salle26.jpg +operating_room/surgery_room_03_18_altavista.jpg +shoeshop/zapateria_08_05_flickr.jpg +bowling/bowling_0127.jpg +cloister/Claustro_de_Sant_Benet_de_Bages.jpg +nursery/complete_baby_room_furnitures2.jpg +office/homeoff012.jpg +classroom/classroom10.jpg +restaurant_kitchen/restaurant_kitchen_google_0032.jpg +bookstore/bookstore_03_15_flickr.jpg +trainstation/estacion_de_ferrocarriles_28_19_altavista.jpg +computerroom/302496265_f7b9b7a91f.jpg +museum/museo_16_20_flickr.jpg +movietheater/2792925915_36557baec0_1__10.jpg +tv_studio/tv2_111_.jpg +bakery/boulangerie_15_05_altavista.jpg +airport_inside/airport_inside_0470.jpg +artstudio/artist_studio_50_02_altavista.jpg +computerroom/Vaololoa_Computer_Room.jpg +stairscase/N457078.jpg +bakery/famous_bakery_05_12_altavista.jpg +church_inside/metropolitana_69_04_flickr.jpg +studiomusic/int285.jpg +poolinside/room147.jpg +computerroom/computer_room500px.jpg +auditorium/salle_amphitheatre4_1__171.jpg +grocerystore/feijen_1.jpg +cloister/cloister_cc_redandgray.jpg +fastfood_restaurant/quiznos1b.jpg +office/homeoff003.jpg +stairscase/int839.jpg +concert_hall/russia_concert_hall1.jpg +bakery/panaderia_01_03_yahoo.jpg +deli/deli_165_16_flickr.jpg +jewelleryshop/joyeria_01.jpg +lobby/hotel_lobby_big.jpg +tv_studio/studio1_101_.jpg +bathroom/int17.jpg +cloister/cloister_lg.jpg +library/library.jpg +laundromat/lavanderia_74_21_flickr.jpg +office/IMG_1530.jpg +trainstation/gare_163_18_flickr.jpg +gym/1192_original_gym_photos_001.jpg +locker_room/locker_room_google_0008.jpg +kindergarden/Preschool_Class.jpg +operating_room/operating_room_12_03_altavista.jpg +children_room/playroom_261100837_std_29_.jpg +trainstation/estacion_de_ferrocarriles_46_05_altavista.jpg +tv_studio/plato_de_malaga_television_situada_en_el_parque_tecnologico_de_andalucia_3896_57_.jpg +children_room/021108_spasticroomjpg_1_.jpg +waitingroom/waiting_room_36_20_altavista.jpg +bathroom/room268.jpg +dining_room/d7.jpg +florist/Floristeria002.jpg +toystore/giocattolo_57_16_flickr.jpg +deli/deli_02_03_altavista.jpg +greenhouse/invernadero1112.jpg +deli/deli_40_24_flickr.jpg +laboratorywet/wet_lab_08_11_altavista.jpg +elevator/elevator_google_0051.jpg +bedroom/IMG_9810.jpg +florist/1124747997193_600x600.jpg +videostore/videotheque_02_02_flickr.jpg +bathroom/dsc01582.jpg +jewelleryshop/rlj_showroom_26_.jpg +museum/museum_22_20_altavista.jpg +operating_room/surgery_room_06_05_altavista.jpg +bowling/bowling_0018.jpg +concert_hall/2588262_5876a97acf.jpg +bowling/bowling_0044.jpg +corridor/couloir_sized.jpg +kindergarden/Classroom04.jpg +elevator/elevator_google_0030.jpg +kitchen/indoor_0259.jpg +laboratorywet/wet_lab_48_10_altavista.jpg +operating_room/surgery_room_51_07_altavista.jpg +jewelleryshop/jewelry_store_2_40_.jpg +bookstore/librairie2.jpg +classroom/classroom6.jpg +restaurant/restaurant_18_15_altavista.jpg +livingroom/living7.jpg +museum/museum_120_07_flickr.jpg +gameroom/AT_04_04_2000_36_l.jpg +operating_room/operating_room_08_18_altavista.jpg +grocerystore/grocery_store_empty_ezr.jpg +livingroom/indoor_0158.jpg +restaurant_kitchen/restaurant_kitchen_google_0028.jpg +buffet/tsn_buffet_table.jpg +warehouse/warehouse_0148.jpg +gameroom/gameroom78.jpg +bar/bar_0321.jpg +mall/url.jpg +corridor/hall135.jpg +inside_subway/inside_subway_0068.jpg +library/howland.jpg +kindergarden/playroom01.jpg +winecellar/wine_cellar_32_04_altavista.jpg +inside_subway/inside_subway_0039.jpg +deli/deli_23_18_flickr.jpg +museum/museum_21_10_altavista.jpg +cloister/Cloister_Jun04_DC4408sAR.jpg +computerroom/Salle_informatique.jpg +tv_studio/george_neta_studio_90_.jpg +stairscase/room45.jpg +lobby/lobby27.jpg +nursery/nursery2.jpg +mall/mall06.jpg +garage/35228685_image052a.jpg +bakery/panaderia_01_06_yahoo.jpg +trainstation/estacion_de_ferrocarriles_38_16_altavista.jpg +gym/gym_147_01_flickr.jpg +movietheater/auditorium712_39.jpg +casino/casino_0270.jpg +cloister/cloister8.jpg +bedroom/dsc_4440.jpg +poolinside/piscina_cubierta_10_11_altavista.jpg +computerroom/salle_informatique_hr.jpg +meeting_room/int677.jpg +church_inside/metropolitana_115_15_flickr.jpg +grocerystore/Image023.jpg +closet/St_Ann_s_Clothes_Closet.jpg +restaurant_kitchen/restaurant_kitchen_google_0025.jpg +bookstore/livres.jpg +grocerystore/023_supermarkt.jpg +winecellar/wine_cellar_21_02_altavista.jpg +bathroom/IMG_9647.jpg +children_room/playroom26_60_.jpg +kindergarden/DSC000502.jpg +prisoncell/Alcatraz_prison_cell.jpg +inside_bus/inside_bus_057.jpg +waitingroom/sala_de_espera_01_17_altavista.jpg +mall/mall_of_the_emirates.jpg +restaurant/restaurante_07_13_altavista.jpg +fastfood_restaurant/DSC00478.jpg +gameroom/gameroom98.jpg +library/danielkimberlylibrarycl1.jpg +toystore/jugueteria_21_01_flickr.jpg +livingroom/indoor_0327.jpg +toystore/Spielzeug_58_01_flickr.jpg +church_inside/_wsb_534x461_Kirche_innen_2.jpg +jewelleryshop/hols2008036.jpg +poolinside/47220_pool_inside4.jpg +children_room/cimg1971_11_.jpg +garage/Garage678.jpg +fastfood_restaurant/showcase_2_177.jpg +laboratorywet/wet_lab_12_07_altavista.jpg +bakery/bakery_07_20_yahoo.jpg +hospitalroom/habitacion_hospital_01_18_altavista.jpg +florist/florist_83_07_flickr.jpg +prisoncell/Jail40.jpg +office/office15.jpg +deli/Superquinn_Deli.jpg +museum/museo_138_15_flickr.jpg +corridor/c20.jpg +elevator/elevator_google_0093.jpg +closet/closet34.jpg +elevator/elevator_google_0094.jpg +garage/garage89.jpg +movietheater/salle_cinema_corte_1__63.jpg +kitchen/100_2855.jpg +videostore/blockbuster_22_08_flickr.jpg +bar/bar_0020.jpg +jewelleryshop/joyeria_163_02_flickr.jpg +videostore/videoteca_38_04_altavista.jpg +laboratorywet/wet_lab_05_10_altavista.jpg +shoeshop/211519.jpg +clothingstore/dd_streets3.jpg +florist/floreria_03_20_flickr.jpg +stairscase/int743.jpg +closet/master_closet56.jpg +livingroom/indoor_0466.jpg +restaurant/restaurant_31_03_altavista.jpg +bakery/new_bakery_02_08_altavista.jpg +children_room/VR_06_02_2000_70_l.jpg +grocerystore/Grocery_Store_2.jpg +restaurant_kitchen/restaurant_kitchen_google_0089.jpg +inside_bus/inside_bus_082.jpg +gym/gimnasio_24_15_altavista.jpg +studiomusic/22949091_692d02b8f1.jpg +cloister/claustro53.jpg +mall/mall48.jpg +greenhouse/site_estufa_02.jpg +laundromat/laverie0054.jpg +greenhouse/finished_inside.jpg +subway/subway_0167.jpg +prisoncell/Carcel_Prision_Break.jpg +concert_hall/EmersonConcertHall.jpg +bakery/bakery_01_06_yahoo.jpg +greenhouse/greenhouse2iu1.jpg +florist/florist_85_16_flickr.jpg +closet/N43m.jpg +laundromat/paseacoastwash.jpg +concert_hall/Concert_Hall_color.jpg +office/img_0012.jpg +stairscase/room44.jpg +trainstation/estacion_de_ferrocarriles_37_12_altavista.jpg +corridor/hall89.jpg +fastfood_restaurant/buffet2.jpg +trainstation/gare_161_05_flickr.jpg +library/room215.jpg +locker_room/locker_room_google_0075.jpg +shoeshop/zapato_3.jpg +deli/deli_34_06_altavista.jpg +kindergarden/S5030019.jpg +winecellar/wine_storage_35_15_altavista.jpg +poolinside/photo_spa_buddhabarevian.jpg +laboratorywet/laboratorio_quimica_07_02_altavista.jpg +meeting_room/Salle_reunion2.jpg +restaurant/restaurant_01_01_altavista.jpg +dentaloffice/dentaloffice03.jpg +hospitalroom/hospital_room_0.jpg +kitchen/indoor_0300.jpg +artstudio/art_painting_studio_05_14_altavista.jpg +greenhouse/greenhouse_pics_019.jpg +inside_subway/inside_subway_0264.jpg +classroom/400px_Walton_High_School_New_Classroom.jpg +fastfood_restaurant/fast_food_restaurant.jpg +waitingroom/sigmund_freud_museum11.jpg +restaurant_kitchen/restaurant_kitchen_google_0013.jpg +dentaloffice/dentaire_11_02_flickr.jpg +prisoncell/Jail_Cell_4.jpg +bar/bar_0040.jpg +museum/museo_149_24_flickr.jpg +studiomusic/estudioB01.jpg +cloister/2551810032_c75699b9dd.jpg +corridor/corridor3.jpg +bowling/bowling_0114.jpg +poolinside/Pool_inside2_1.jpg +tv_studio/muticamera_studio_set_93_.jpg +kitchen/room7.jpg +artstudio/artist_studio_50_15_altavista.jpg +buffet/1092889351_618b8c3798_o.jpg +prisoncell/prison_cell_38_05_altavista.jpg +bookstore/Libreria_15_06_altavista.jpg +gameroom/AT_99_4_7096_33_l.jpg +jewelleryshop/silverjewelleryshop1.jpg +mall/milano_galleria_statues.jpg +livingroom/n57.jpg +classroom/fouarre_classroom_02.jpg +subway/subway_0211.jpg +poolinside/0310_piscines_7.jpg +dining_room/dining004.jpg +restaurant/room257.jpg +videostore/blockbuster_40_01_flickr.jpg +waitingroom/JHC_3.jpg +hospitalroom/hospital_room02.jpg +videostore/web_japanese_video_store.jpg +restaurant_kitchen/restaurant_kitchen_google_0071.jpg +toystore/im001034.jpg +hairsalon/innen1.jpg +winecellar/bodega_123_16_flickr.jpg +restaurant_kitchen/restaurant_kitchen_google_0083.jpg +inside_subway/inside_subway_0024.jpg +gameroom/Salle_de_Jeux_Villa_3_1_.jpg +winecellar/cave_champagne_08_08_altavista.jpg +dining_room/easyst027.jpg +tv_studio/2090354493_0da1a70d82_b_14_.jpg +dining_room/easyst039.jpg +florist/florist_47_11_flickr.jpg +artstudio/artistic_studio_08_08_altavista.jpg +bowling/bowling_0063.jpg +nursery/nursery_front.jpg +grocerystore/market.jpg +elevator/elevator_google_0068.jpg +prisoncell/41935jOqn_w.jpg +cloister/Claustro32.jpg +nursery/201584pvxu_w.jpg +waitingroom/waitingroom580.jpg +toystore/jugueteria_05_02_flickr.jpg +florist/floreria_04_22_flickr.jpg +kindergarden/DSC000493.jpg +library/Bibliothek_im_Reformierten_Kollegium_Debrecen.jpg +locker_room/locker_room_google_0029.jpg +waitingroom/JHC_2.jpg +greenhouse/1412_mb_file_0a8c5_gif.jpg +auditorium/sbu_auditorium_1__172.jpg +bedroom/IMG_2429.jpg +hospitalroom/SuperStock_1560R2033878.jpg +bedroom/b20.jpg +dentaloffice/dentaire_24_16_altavista.jpg +operating_room/surgery_room_19_08_altavista.jpg +waitingroom/waiting_room_50_10_altavista.jpg +subway/subway_0491.jpg +tv_studio/artmediamuseum_79_.jpg +closet/closet31.jpg +waitingroom/waiting_room_28_18_altavista.jpg +computerroom/Computer_room_2.jpg +corridor/IMG_9659.jpg +computerroom/comp8.jpg +stairscase/int79.jpg +bookstore/Libreria_11_10_altavista.jpg +gym/gimnasio_54_12_flickr.jpg +clothingstore/magasin1_enfants.jpg +kindergarden/perdue_preschool.jpg +cloister/cloister5.jpg +mall/mallparadisevalley03.jpg +waitingroom/salle_d_attente.jpg +bathroom/indoor_0391.jpg +deli/deli_97_02_flickr.jpg +gameroom/_wsb_488x346_salle.jpg +museum/museo_155_18_flickr.jpg +waitingroom/salle_attente35.jpg +shoeshop/tienda2.jpg +elevator/elevator_google_0073.jpg +operating_room/surgery_room_02_19_altavista.jpg +church_inside/KircheMariannhillInnen.jpg +church_inside/HDRInderKirche_l.jpg +deli/deli_04_13_altavista.jpg +subway/subway_0313.jpg +cloister/Claustro_de_San_Juan_de_los_Reyes.jpg +garage/garage2.jpg +concert_hall/g_vigoenfotos_1936d.jpg +deli/deli_42_15_altavista.jpg +florist/florist_50_08_flickr.jpg +auditorium/hi_res_400x300_auditorium_s_1__148.jpg +studiomusic/studio2.jpg +library/Bibliothek1.jpg +bathroom/indoor_0416.jpg +corridor/n457040.jpg +dentaloffice/dentista_99_19_flickr.jpg +restaurant/restaurante_38_09_altavista.jpg +laundromat/laundry room.jpg +closet/WH_WI_with_Models.jpg +gym/gimnasio_10_01_altavista.jpg +artstudio/painters_studio_02_01_altavista.jpg +kindergarden/FSLO_1168018158_111158.jpg +livingroom/room131.jpg +operating_room/operating_room_16_10_altavista.jpg +stairscase/stairs08.jpg +cloister/04claustro.jpg +clothingstore/frenchconnection.jpg +locker_room/locker_room_google_0181.jpg +elevator/elevator_google_0021.jpg +winecellar/wine_cellar_32_09_altavista.jpg +lobby/Fairmont_Hotel_Lobby_PC_SF_CA.jpg +subway/subway_0371.jpg +lobby/sLobby19.jpg +gym/gimnasio_73_08_flickr.jpg +videostore/videoclub_07_10_flickr.jpg +bar/bar_0162.jpg +jewelleryshop/big_island_jewelers_ltd_4354_31_.jpg +kitchen/cdmc1151.jpg +lobby/27y5_1.jpg +winecellar/wine_cellar_05_15_altavista.jpg +winecellar/bodega_119_18_flickr.jpg +subway/subway_0381.jpg +mall/IMG_6449.jpg +nursery/_nana_s_corner_baby_s_room_2005_029.jpg +shoeshop/viv_29387_no.jpg +subway/subway_0035.jpg +waitingroom/egf_waitingroom.jpg +bookstore/bookstore_36_06_altavista.jpg +dining_room/int767.jpg +hospitalroom/Nathans_hospital_room.jpg +laboratorywet/Lab_3.jpg +casino/casino_0075.jpg +studiomusic/SynthesizerStudio.jpg +laundromat/lavanderia_79_21_flickr.jpg +hospitalroom/private_recovery_room.jpg +library/Library_Pictures.jpg +grocerystore/P1010024.jpg +poolinside/piscina_cubierta_03_10_altavista.jpg +children_room/_kids_rooms_38_.jpg +trainstation/train station_01_05_altavista.jpg +pantry/despensa_142_16_flickr.jpg +studiomusic/estudio02.jpg +livingroom/aa016553.jpg +gym/gimnasio_142_20_flickr.jpg +hairsalon/1870565281_d339778e97.jpg +hairsalon/area_belones_ella_el_peluqueria7.jpg +inside_subway/inside_subway_0426.jpg +artstudio/art_painting_studio_15_09_altavista.jpg +greenhouse/greenhouse123.jpg +casino/casino_0477.jpg +auditorium/auditorium_3__123.jpg +dining_room/dsc02285.jpg +lobby/Throne_Hall2.jpg +videostore/Curts001.jpg +office/img_0011.jpg +kitchen/indoor_0076.jpg +mall/Mall_of_America2.jpg +bathroom/indoor_0458.jpg +buffet/Buffet_Set_Up_2_gif.jpg +computerroom/Salle_informatiquewe.jpg +prisoncell/10e0gvm.jpg +tv_studio/a3tv_noticias_94_02_01_78_.jpg +warehouse/warehouse_0002.jpg +bathroom/indoor_0137.jpg +dining_room/easyst047.jpg +gameroom/OR_99_6_9534_25A_l.jpg +artstudio/artist_studio_33_01_altavista.jpg +laboratorywet/laboratorio_quimica_07_06_altavista.jpg +classroom/sala_convegni.jpg +corridor/aa053951.jpg +clothingstore/Dscf0007.jpg +hairsalon/fdc_2196_1.jpg +hospitalroom/hospital_room_10_09_altavista.jpg +lobby/lobby47.jpg +pantry/pantry_24_08_flickr.jpg +buffet/212297870_fbc8f52ba4.jpg +casino/casino_0391.jpg +office/ap_de_marlene035.jpg +meeting_room/Small_meeting_room.jpg +meeting_room/IDC_salle_de_reunion_01.jpg +lobby/lobby3423.jpg +bar/bar_0163.jpg +casino/casino_0161.jpg +inside_subway/inside_subway_0027.jpg +trainstation/train_station_06_17_altavista.jpg +classroom/web_classe.jpg +warehouse/warehouse_0495.jpg +elevator/elevator_google_0023.jpg +buffet/photo21_1.jpg +meeting_room/conf07.jpg +laboratorywet/laboratorio_quimica_10_05_altavista.jpg +hospitalroom/IMG_0453.jpg +winecellar/wine_cellar_25_02_altavista.jpg +bar/bar_0301.jpg +operating_room/operating_room_15_16_altavista.jpg +computerroom/COMPUTER_ROOM_1a.jpg +stairscase/bergot2.jpg +laundromat/lavanderia_04_11_flickr.jpg +closet/closet_systems.jpg +garage/623sw39ter_garage3.jpg +lobby/lobby02.jpg +bowling/bowling_0194.jpg +shoeshop/Interior_Marta_Corral.jpg +artstudio/painters_studio_02_03_altavista.jpg +laundromat/laundry_room_SHNS.jpg +airport_inside/airport_inside_0039.jpg +hospitalroom/habitacion_hospital_01_16_altavista.jpg +mall/atrio_home.jpg +greenhouse/Riverview08.jpg +tv_studio/room_g_59_.jpg +restaurant/Gaststatte_kl.jpg +hospitalroom/SL271112.jpg +bakery/famous_bakery_23_04_altavista.jpg +poolinside/47220_pool_mtn_patio_view2.jpg +warehouse/warehouse_0426.jpg +restaurant/restaurant_05_18_altavista.jpg +restaurant_kitchen/restaurant_kitchen_google_0054.jpg +grocerystore/aislesjpg.jpg +auditorium/theatreroyalbristolauditorium_1__74.jpg +fastfood_restaurant/P1020181.jpg +subway/subway_0394.jpg +locker_room/locker_room_google_0151.jpg +studiomusic/ctr_scaled.jpg +tv_studio/egtv_estudiopg2_lo_43_.jpg +bar/bar_0484.jpg +church_inside/Kirche1.jpg +closet/closet36.jpg +trainstation/gare_130_20_flickr.jpg +hairsalon/salon_03.jpg +laboratorywet/Wet_Chem_Lab.jpg +stairscase/N190049.jpg +bakery/panaderia_05_20_yahoo.jpg +fastfood_restaurant/blimpie.jpg +bedroom/indoor_0246.jpg +mall/cover_home3.jpg +artstudio/painters_studio_08_10_altavista.jpg +bowling/bowling_0034.jpg +nursery/finished_babys_room__5_.jpg +church_inside/0706eglise_lg.jpg +dining_room/dining050.jpg +gameroom/HO_06_03_3000_63_l.jpg +gameroom/int30.jpg +shoeshop/101247.jpg +garage/garage-inside.jpg +pantry/pantry_124_03_flickr.jpg +toystore/281568964_bb524a3c9e_o.jpg +museum/museum_19_13_altavista.jpg +computerroom/1552211138_a17100bcf5.jpg +inside_subway/inside_subway_0212.jpg +restaurant/2006_11_tastingroom.jpg +greenhouse/greenhousegh1.jpg +bakery/bakery_17_09_yahoo.jpg +inside_subway/inside_subway_0017.jpg +prisoncell/cell.jpg +stairscase/escalera.jpg +dentaloffice/dental_office_20_06_altavista.jpg +florist/FLORISTERIA-CASAMITJANA-2.jpg +lobby/hotelobby222.jpg +bakery/boulangerie_25_20_yahoo.jpg +studiomusic/pic2.jpg +laboratorywet/senior_wet_lab_2.jpg +classroom/izieu_classe.jpg +auditorium/bernard_20tschumi_3_popup_1__47.jpg +classroom/salle_de_classe34.jpg +warehouse/warehouse_0268.jpg +bedroom/indoor_0210.jpg +library/370663920_b87c065936.jpg +trainstation/gare_72_23_flickr.jpg +concert_hall/Meng_Concert_Hall_.jpg +garage/garage654.jpg +fastfood_restaurant/fast_food_restaurants.jpg +laundromat/lavanderia_103_15_flickr.jpg +movietheater/sala_de_cine_04_20_altavista.jpg +movietheater/movietheater_google_0038.jpg +airport_inside/airport_inside_0003.jpg +trainstation/gare_75_17_flickr.jpg +hospitalroom/hospital_room_04_10_altavista.jpg +warehouse/warehouse_0065.jpg +inside_bus/inside_bus_096.jpg +auditorium/callway_auditorium_overview_500_x_345_1__49.jpg +artstudio/artstudio.jpg +clothingstore/0012.jpg +airport_inside/airport_inside_0152.jpg +locker_room/locker_room_google_0243.jpg +prisoncell/400_jailcell_doorview_070917_lasvegaspd.jpg +locker_room/locker_room_google_0063.jpg +corridor/c12.jpg +auditorium/auditorium_4__124.jpg +gameroom/Gameroom022.jpg +subway/metropolitana_106_01_flickr.jpg +warehouse/warehouse_0219.jpg +greenhouse/greenhousey_2.jpg +jewelleryshop/tienda.jpg +studiomusic/music_studio12.jpg +laboratorywet/laboratorio_quimica_14_14_altavista.jpg +bathroom/int483.jpg +elevator/elevator_google_0065.jpg +gameroom/salle_de_jeux56.jpg +gym/highfields_gym_420x315.jpg +waitingroom/waiting_room_15_20_altavista.jpg +garage/insidemahal03.jpg +casino/casino_0450.jpg +kitchen/indoor_0383.jpg +church_inside/4_9rieur_Le_Raincy_France_2007_interior.jpg +nursery/jungle_nursery3.jpg +shoeshop/2201663658_3ae8af1eac.jpg +toystore/IMG_0198_Asakusa_toy_store.jpg +inside_bus/inside_bus_049.jpg +closet/CherryCloset_Small_.jpg +bakery/bakery_19_05_yahoo.jpg +computerroom/00.jpg +church_inside/chiemsee_fraueninsel_kircheP9175239_gross.jpg +museum/museo_21_15_altavista.jpg +office/office7.jpg +artstudio/artist_studio_40_09_altavista.jpg +concert_hall/eej_concert_hall.jpg +deli/deli_68_04_flickr.jpg +restaurant/restaurante_51_04_altavista.jpg +auditorium/auditoriumherbauges_060042700_1223_28112007_1__137.jpg +livingroom/indoor_0021.jpg +locker_room/locker_room_google_0105.jpg +corridor/IMG_9660.jpg +studiomusic/int774.jpg +cloister/20188429.jpg +bookstore/Librairie_49_01_altavista.jpg \ No newline at end of file diff --git a/TrainImages.txt b/TrainImages.txt new file mode 100755 index 0000000..1ae64ef --- /dev/null +++ b/TrainImages.txt @@ -0,0 +1,5360 @@ +gameroom/bt_132294gameroom2.jpg +poolinside/inside_pool_and_hot_tub.jpg +winecellar/bodega_12_11_flickr.jpg +casino/casino_0512.jpg +livingroom/living58.jpg +mall/4984307.jpg +corridor/pasilltmpo_t.jpg +laboratorywet/laboratorio_quimica_07_05_altavista.jpg +bookstore/CIMG2743.jpg +casino/casino_0044.jpg +waitingroom/800px_VTBS_Waiting_room_of_Thai_Airways.jpg +clothingstore/c0011.jpg +garage/mso1012_FridgeBikes_aft_w609.jpg +prisoncell/territorial_prison_cell_block.jpg +tv_studio/tv_studio_11_13_altavista.jpg +inside_bus/inside_bus_024.jpg +laboratorywet/wet_lab_10_17_altavista.jpg +videostore/videoclub_07_11_flickr.jpg +grocerystore/Market5.jpg +inside_bus/inside_bus_078.jpg +bathroom/itoiletpaper.jpg +closet/458309322_42d901b9d8.jpg +laboratorywet/wet_lab_13_10_altavista.jpg +winecellar/cave_vin_10_10_altavista.jpg +jewelleryshop/Joyeria_Madrid_4.jpg +restaurant_kitchen/restaurant_kitchen_google_0103.jpg +airport_inside/airport_inside_0148.jpg +church_inside/CH_Horgen_RefKirche.jpg +library/Homework2.jpg +waitingroom/Waiting_Room_3.jpg +classroom/Kindergarden_classroom.jpg +laundromat/lavanderia_49_01_flickr.jpg +jewelleryshop/joyeria_44_18_altavista.jpg +closet/458309564_4e61036dc8.jpg +inside_subway/inside_subway_0305.jpg +winecellar/wine_cellar_24_10_altavista.jpg +gym/gym.jpg +fastfood_restaurant/DSC00472.jpg +warehouse/warehouse_0116.jpg +hospitalroom/hospitalRoom2.jpg +warehouse/warehouse_0241.jpg +trainstation/gare_117_20_flickr.jpg +dining_room/d5.jpg +greenhouse/paghmist.jpg +library/bibliothekfgd.jpg +bar/bar_0026.jpg +bookstore/photo_magasin.jpg +closet/closet6_lg.jpg +dentaloffice/dentista_48_04_altavista.jpg +florist/florist_40_10_altavista.jpg +subway/subway_0344.jpg +gym/hotel_megeve_11.jpg +bakery/new_bakery_34_18_altavista.jpg +children_room/img_0499_22_.jpg +computerroom/computer_room06.jpg +office/o4.jpg +waitingroom/sala_de_espera_01_14_altavista.jpg +hairsalon/_peluqueria2_w_gra.jpg +warehouse/warehouse_0041.jpg +toystore/jugueteria_08_09_yahoo.jpg +shoeshop/tienda_zapatos.jpg +stairscase/TA_99_3_0525_34_l.jpg +classroom/biblioteca2.jpg +movietheater/movietheater_google_0020.jpg +hairsalon/salon_karin_pc080158.jpg +greenhouse/051011Greenhouse.jpg +office/office19.jpg +bedroom/indoor_0194.jpg +laundromat/wasserette.jpg +studiomusic/08_alex_studio_shoot_053.jpg +videostore/410w.jpg +pantry/pantry_164_02_flickr.jpg +deli/deli_06_11_altavista.jpg +laboratorywet/dscn0387.jpg +laundromat/3349laundromat_01.jpg +airport_inside/airport_inside_0130.jpg +artstudio/artist_studio_33_14_altavista.jpg +bookstore/bookstore_03_09_flickr.jpg +bathroom/indoor_0404.jpg +toystore/1164876979_0.jpg +cloister/cloister66.jpg +operating_room/surgery_room_09_16_altavista.jpg +inside_subway/inside_subway_0378.jpg +bathroom/indoor_0323.jpg +inside_bus/inside_bus_029.jpg +clothingstore/indeximage.jpg +poolinside/0310_piscines_8.jpg +laboratorywet/wet_lab_38_18_altavista.jpg +prisoncell/prison_cell_22_19_altavista.jpg +toystore/InsideofStore.jpg +artstudio/artist_studio_50_19_altavista.jpg +gameroom/sallejeux567.jpg +warehouse/warehouse_0096.jpg +bedroom/hunter_room.jpg +cloister/Cloisterold.jpg +studiomusic/int772.jpg +dining_room/yellow_dining_room.jpg +dining_room/kitchen052.jpg +gameroom/Catskill_Hall_Recreational_Room.jpg +grocerystore/mod16b.jpg +trainstation/estacion_de_tren_08_03_altavista.jpg +bakery/best_bakery_08_01_altavista.jpg +hospitalroom/IMG_0124.jpg +tv_studio/studiocameras24_65_.jpg +hospitalroom/hosp_073.jpg +inside_bus/inside_bus_036.jpg +auditorium/spaauditorium2_1__69.jpg +pantry/pantry_106_24_flickr.jpg +pantry/pantry_28_01_flickr.jpg +airport_inside/airport_inside_0029.jpg +classroom/AULA11_1TAMAOGRANDE.jpg +clothingstore/kleidung01.jpg +bathroom/b11.jpg +pantry/pantry_43_24_flickr.jpg +closet/df_0_0.jpg +gym/gimnasio_48_07_altavista.jpg +kindergarden/preschool_large.jpg +poolinside/piscine_interieur.jpg +winecellar/ca_97_2_287_35a_l.jpg +inside_bus/inside_bus_045.jpg +toystore/toys_store_45_15_altavista.jpg +classroom/int116.jpg +deli/deli_158_04_flickr.jpg +office/estudio2.jpg +subway/metropolitana_24_08_altavista.jpg +hairsalon/hair.jpg +restaurant/restaurant_09_11_altavista.jpg +bar/bar_0171.jpg +operating_room/operating_room_03_18_altavista.jpg +laboratorywet/laboratorio_quimica_02_08_altavista.jpg +studiomusic/IglooMusicStudio2.jpg +closet/twincitiesclosets.jpg +bar/bar_0528.jpg +children_room/06playroom_2_.jpg +bedroom/room34.jpg +bar/bar_0430.jpg +concert_hall/theater.jpg +operating_room/operating_room_05_09_altavista.jpg +classroom/salle_classe_int.jpg +corridor/room513.jpg +hospitalroom/IMG_3470.jpg +bathroom/indoor_0452.jpg +dining_room/dining010.jpg +inside_bus/inside_bus_075.jpg +florist/florist_86_15_flickr.jpg +hospitalroom/Birthing_room_2.jpg +concert_hall/ConcertHallInterior.jpg +gym/SALLE3.jpg +auditorium/auditorium_side_view_134.jpg +inside_subway/inside_subway_0151.jpg +tv_studio/dsc02482_38_.jpg +toystore/Image13852843.jpg +classroom/img_0007.jpg +closet/Closet_Before_1_.jpg +dining_room/d15.jpg +computerroom/12_student_classroom_4_computer_training_1.jpg +studiomusic/estudio03.jpg +lobby/sLobby14.jpg +artstudio/art_painting_studio_19_07_altavista.jpg +auditorium/auditorium_6__126.jpg +bakery/panaderia_37_09_yahoo.jpg +kitchen/kitchen138.jpg +prisoncell/18_jail.jpg +elevator/elevator_google_0020.jpg +florist/floreria_07_08_flickr.jpg +inside_bus/inside_bus_014.jpg +garage/12_large.jpg +garage/GaragePOP_526x800.jpg +winecellar/bodega_36_10_yahoo.jpg +library/Bibliotheque.jpg +subway/subway_0334.jpg +gameroom/gameroom_tennis.jpg +clothingstore/arredo_negozio_abbigliamento.jpg +grocerystore/grocery_isle.jpg +gym/Gym1_png.jpg +casino/casino_0491.jpg +studiomusic/StudioA1.jpg +garage/ThierGarageStoreHomePage2.jpg +toystore/Spielzeug_101_24_flickr.jpg +grocerystore/bstone1.jpg +movietheater/movietheater_google_0007.jpg +prisoncell/carcel_carabanchel_04.jpg +auditorium/espace_du_centenaire_salle_de_conferences_spectacles_paris_12_auditorium_04_1__53.jpg +buffet/126829079_ec08a3996c.jpg +dentaloffice/dentista_70_19_flickr.jpg +bedroom/int107.jpg +corridor/pasillo_bajo_c.jpg +studiomusic/control_room_web.jpg +cloister/image.jpg +airport_inside/airport_inside_0309.jpg +closet/2007_09_07_nursery_WhiteelfaKidsReachInCloset.jpg +computerroom/Computer_room65.jpg +garage/basement_4.jpg +concert_hall/concert.hall.jpg +shoeshop/706140700191528.jpg +bedroom/bedroom14.jpg +bathroom/bath244.jpg +kindergarden/gingerroom1.jpg +dentaloffice/dentista_11_09_altavista.jpg +meeting_room/conf25.jpg +operating_room/surgery_room_01_18_altavista.jpg +poolinside/your_pool.jpg +library/publiclibrarypic.jpg +buffet/450px_Houseparty_buffet.jpg +concert_hall/400px_National_Theater_and_Concert_Hall_of_Taiwan.jpg +airport_inside/airport_inside_0246.jpg +operating_room/surgery_room_47_11_altavista.jpg +deli/deli_13_14_yahoo.jpg +kitchen/k3.jpg +children_room/imgp0662_20_.jpg +tv_studio/sandiego_newsteam_61_.jpg +office/room12.jpg +church_inside/metropolitana_136_23_flickr.jpg +clothingstore/MVC_013F.jpg +laundromat/PIC00033.jpg +gameroom/TA_99_2_0321_32_l.jpg +poolinside/Lis_3.jpg +jewelleryshop/tienda4.jpg +airport_inside/airport_inside_0449.jpg +bathroom/n190015.jpg +hairsalon/L_UniversDeL_Hom_01_photo_AG.jpg +laboratorywet/Tissue_culture.jpg +auditorium/photo_of_auditorium_1__160.jpg +closet/closet05.jpg +florist/3_1001.jpg +bookstore/librairie_Ermeton_sur_Biert_500_PIXELS.jpg +studiomusic/home.jpg +grocerystore/grocery1.jpg +deli/deli_97_23_flickr.jpg +bowling/bowling_0008.jpg +jewelleryshop/photo_hpf_boutique_kobe.jpg +inside_bus/inside_bus_097.jpg +concert_hall/jack_singer_concert_hall01.jpg +casino/casino_0133.jpg +airport_inside/airport_inside_0431.jpg +toystore/toys_store_06_15_altavista.jpg +waitingroom/waiting_room_36_14_altavista.jpg +corridor/room473.jpg +concert_hall/interiorconcert02.jpg +laboratorywet/wet_lab_08_05_altavista.jpg +restaurant/chambre_resto_2.jpg +hospitalroom/op_Room.jpg +videostore/mws_STOREINT.jpg +auditorium/mc2_auditorium_1__63.jpg +jewelleryshop/silver_jewellery_shop1.jpg +corridor/corridora4.jpg +gameroom/room381.jpg +bathroom/n190010.jpg +classroom/classroom_006.jpg +nursery/Chambre_Bebe_Babble_Circus.jpg +trainstation/gare_154_14_flickr.jpg +church_inside/friedrichswerdersche_kirche_eglise_friedrichswerder_03a.jpg +auditorium/kingsway_20auditorium_jpg_60.jpg +auditorium/dunning_20auditorium_52.jpg +waitingroom/400_Waiting_Room_2.jpg +bakery/best_bakery_12_16_altavista.jpg +airport_inside/airport_inside_0015.jpg +museum/museo_32_01_altavista.jpg +deli/deli_24_19_altavista.jpg +inside_subway/inside_subway_0194.jpg +warehouse/warehouse_0221.jpg +gameroom/OR_99_2_5387_32_l.jpg +kindergarden/image4.jpg +buffet/buffet5.jpg +fastfood_restaurant/resto.jpg +nursery/Chambre_Bebe_Kids_Gallery.jpg +deli/deli_128_19_flickr.jpg +computerroom/room201.jpg +laboratorywet/wet_lab_01_17_altavista.jpg +office/o9.jpg +garage/garage_103.jpg +hospitalroom/habitacion_hospital_07_11_altavista.jpg +livingroom/n457041.jpg +stairscase/S26.jpg +pantry/pantry_23_13_flickr.jpg +grocerystore/kasten_supermarkt_brouwers2_spar.jpg +operating_room/operating_room_13_03_altavista.jpg +restaurant_kitchen/restaurant_kitchen_google_0063.jpg +classroom/dam_classroom4.jpg +hairsalon/DSC_0091.jpg +tv_studio/cd_teleideal_035_31_.jpg +waitingroom/waitingroom03.jpg +florist/florist2.jpg +museum/museo_106_06_flickr.jpg +church_inside/metropolitana_19_23_flickr.jpg +bookstore/ladder2.jpg +children_room/playroom_lg_35_.jpg +computerroom/informatica2.jpg +deli/deli_106_13_flickr.jpg +poolinside/30_x_50_Pool_Cover_Vertical_Inside_Shot.jpg +gameroom/FW_97_8_0587_31_l.jpg +hospitalroom/cama_hospital_09_09_altavista.jpg +bar/bar_0236.jpg +computerroom/749300760_2f7b1f5ccb.jpg +restaurant/restaurant_03_10_altavista.jpg +classroom/sala_aula.jpg +bedroom/roomscan36.jpg +gameroom/LV_04_02_0006_06_l.jpg +closet/816977_Orig.jpg +trainstation/int55.jpg +kitchen/cdmc1194.jpg +laboratorywet/laboratorio_quimica_04_03_altavista.jpg +grocerystore/CHG_GROCERY_2.jpg +jewelleryshop/store4_49_.jpg +poolinside/pool_inside_18_08_altavista.jpg +bookstore/Libreria_13_15_altavista.jpg +inside_bus/inside_bus_068.jpg +tv_studio/tv_studio324_116_.jpg +casino/casino_0372.jpg +laundromat/laundryroom02.jpg +grocerystore/318111272_14218344c8.jpg +operating_room/operating_room_34_08_altavista.jpg +bar/bar_0574.jpg +mall/West_End_Mall_3_DSC01801_m.jpg +greenhouse/dads_greenhouse.jpg +prisoncell/jail_cell2.jpg +elevator/elevator_google_0012.jpg +artstudio/artist_studio_47_03_altavista.jpg +clothingstore/boutique3.jpg +artstudio/art_painting_studio_04_10_altavista.jpg +classroom/Sala_de_Clases2.jpg +meeting_room/conference_room_1_lr_sm.jpg +greenhouse/greenhouse6789.jpg +prisoncell/scr_newjail1.jpg +waitingroom/Waiting-room.jpg +library/bibliothek1df.jpg +stairscase/Escalier_B1.jpg +elevator/elevator_google_0013.jpg +lobby/salones_04.jpg +deli/deli_62_12_flickr.jpg +corridor/slobby27.jpg +fastfood_restaurant/32170441.jpg +greenhouse/med_gallery_3601_179_581844.jpg +gym/herade_inside.jpg +bakery/bakery_16_12_yahoo.jpg +greenhouse/geranium.jpg +poolinside/pool_inside_23_18_altavista.jpg +bedroom/b24.jpg +lobby/lobby05.jpg +bar/bar_0118.jpg +cloister/claustro_romanico.jpg +dentaloffice/dentista_30_20_altavista.jpg +clothingstore/ins35.jpg +auditorium/auditori_1__91.jpg +winecellar/wine_cellar_floor_stone_gif.jpg +children_room/playroom28_61_.jpg +computerroom/ComputerClassroom1.jpg +casino/casino_0007.jpg +lobby/lobby17.jpg +livingroom/l14.jpg +prisoncell/carcel_143_15_flickr.jpg +computerroom/SalleInformatique45.jpg +casino/casino_0028.jpg +bakery/bakery.jpg +inside_bus/inside_bus_048.jpg +nursery/baby_bedding.jpg +lobby/AT_05_04_4000_59_l.jpg +poolinside/room153.jpg +artstudio/artist_studio_49_04_altavista.jpg +garage/mso901_1f_sportswallandlockersystem_w609.jpg +inside_bus/inside_bus_062.jpg +cloister/Claustro_de_la_catedral_de_Roda_de_Isabena.jpg +closet/showroom.jpg +garage/3009Garaje.jpg +movietheater/p1010969_1__27.jpg +poolinside/N190005.jpg +corridor/p1010080_c.jpg +garage/2006_09Action02.jpg +poolinside/pool_inside_34_04_altavista.jpg +movietheater/movietheater_google_0005.jpg +concert_hall/euph_soh_concert_hall_2300.jpg +prisoncell/jailcell6edited.jpg +artstudio/artist_studio_28_09_altavista.jpg +dentaloffice/dentista_74_08_flickr.jpg +trainstation/gare_137_21_flickr.jpg +computerroom/computer_lab.jpg +hospitalroom/hospital_room_10_01_altavista.jpg +tv_studio/plato2_96_.jpg +auditorium/grandauditorium_1__56.jpg +kindergarden/preschool_2.jpg +kitchen/k9.jpg +bowling/bowling_0010.jpg +mall/consumer1.jpg +dentaloffice/dentista_04_19_flickr.jpg +studiomusic/rspixstudio1.jpg +winecellar/bodega_48_09_flickr.jpg +deli/deli_158_17_flickr.jpg +clothingstore/Lulas_013.jpg +grocerystore/2058337_Shopping_for_fruit_in_the_grocery_store_0.jpg +warehouse/warehouse_0346.jpg +fastfood_restaurant/KFC_Interior_2.jpg +studiomusic/estudio_de_grabacion12.jpg +videostore/fall_profile11_312.jpg +auditorium/500x240_escalesaudito31211_1__12.jpg +cloister/cloister_wallpaper_1024x768.jpg +cloister/Cloister_Jun05_DC2822sAR800.jpg +buffet/528281656_34a35d85f2.jpg +grocerystore/152.jpg +gym/1_gymEmpty.jpg +lobby/LobbyWide.jpg +cloister/636059.jpg +operating_room/operating_room_01_18_altavista.jpg +classroom/aulainfantil.jpg +kindergarden/SA_3_4_PS_Classroom_pictures_011_2_.jpg +bowling/bowling_0207.jpg +waitingroom/waitroom127.jpg +mall/shopping mall.jpg +greenhouse/inverna_izq_full.jpg +grocerystore/f2b51ff9_67ac_4ffc_8efa_1355088ad5b6.jpg +hairsalon/Salon_innenaufnahme_03.jpg +poolinside/piscina_cubierta_01_01_flickr.jpg +shoeshop/zapateria_04_01_flickr.jpg +corridor/pasillo_1_c.jpg +cloister/202.jpg +auditorium/770248_942445_1__18.jpg +church_inside/kirche_innenu.jpg +warehouse/warehouse_0269.jpg +grocerystore/japanese_food_fruit_stand.jpg +restaurant/restaurant_37_11_altavista.jpg +subway/subway_0106.jpg +grocerystore/2479111961_003a15f0cf.jpg +jewelleryshop/Interior_1.jpg +restaurant_kitchen/restaurant_kitchen_google_0104.jpg +buffet/34583009_3e0d0befc2.jpg +dining_room/d14.jpg +shoeshop/zapato_4.jpg +bathroom/indoor_0278.jpg +gym/gym_16_01_altavista.jpg +church_inside/brenac01_eglise02.jpg +greenhouse/greenhouse_009.jpg +mall/larcomar_shopping.jpg +deli/new_deli_42_13_altavista.jpg +locker_room/locker_room_google_0173.jpg +computerroom/Salle_Multimedia.jpg +inside_subway/inside_subway_0408.jpg +meeting_room/c15.jpg +movietheater/auditorium799_40.jpg +meeting_room/conference_room_2.jpg +airport_inside/airport_inside_0344.jpg +laundromat/DSC03063.jpg +movietheater/img_1354_1__21.jpg +bowling/bowling_0052.jpg +grocerystore/DSC01468.jpg +airport_inside/airport_inside_0134.jpg +dentaloffice/dentista_91_20_flickr.jpg +florist/florist_08_13_altavista.jpg +shoeshop/zapateria_01_14_flickr.jpg +auditorium/audit400_1__89.jpg +elevator/elevator_google_0056.jpg +laundromat/Laundry_Room_bmp.jpg +bathroom/b12.jpg +winecellar/wine_cellar_18_11_altavista.jpg +elevator/elevator_google_0028.jpg +greenhouse/serre.jpg +bakery/new_bakery_02_20_altavista.jpg +meeting_room/n457009.jpg +shoeshop/shoes_shop_23_11_altavista.jpg +meeting_room/conf11.jpg +gym/gym_05_11_altavista.jpg +classroom/Osseo_classroom_flag.jpg +computerroom/recurso4.jpg +deli/deli_69_08_flickr.jpg +subway/subway_0437.jpg +operating_room/operating_room_01_08_altavista.jpg +children_room/playroom4_32_.jpg +pantry/pantry_51_16_flickr.jpg +poolinside/pool_inside_12_14_altavista.jpg +deli/new_deli_38_07_altavista.jpg +livingroom/room163.jpg +laundromat/laundry1.jpg +livingroom/int104.jpg +bar/bar_0369.jpg +mall/mall13.jpg +inside_bus/inside_bus_047.jpg +operating_room/surgery_room_48_15_altavista.jpg +casino/casino_0139.jpg +operating_room/surgery_room_15_06_altavista.jpg +church_inside/metropolitana_155_12_flickr.jpg +gym/gym5.jpg +jewelleryshop/non_art_side_jewelry_store_9_23_.jpg +inside_subway/inside_subway_0076.jpg +museum/museum_48_17_altavista.jpg +closet/MasterSuiteMapleLamWIBedrm.jpg +shoeshop/n301_image.jpg +stairscase/ins36.jpg +inside_subway/inside_subway_0085.jpg +movietheater/PPP0001908_P.jpg +studiomusic/262039342_29adefe21f.jpg +warehouse/warehouse_0091.jpg +grocerystore/cbra3.jpg +museum/museum_37_10_altavista.jpg +children_room/LV_04_04_0004_53_l.jpg +hairsalon/DVP4957863_P.jpg +fastfood_restaurant/ATCS_14_TacoBell.jpg +deli/new_deli_02_02_altavista.jpg +kindergarden/IMG_1643_35195531_std.jpg +lobby/Nef1.jpg +restaurant_kitchen/restaurant_kitchen_google_0082.jpg +bathroom/indoor_0491.jpg +operating_room/surgery_room_42_18_altavista.jpg +bathroom/dsc3101.jpg +florist/vente_de_fleurs_et_compositions_CAP1.jpg +church_inside/Chauvigny_Collegiale_Saint_Piere_IMG_4982.jpg +cloister/cloister_gladman.jpg +bedroom/indoor_0216.jpg +museum/museo_20_06_altavista.jpg +corridor/couloir_vestiaires_450.jpg +library/DSC02518.jpg +poolinside/pool_inside1.jpg +studiomusic/14770A04.jpg +trainstation/gare_109_17_flickr.jpg +bowling/bowling_0132.jpg +locker_room/locker_room_google_0176.jpg +bakery/bakery_07_18_yahoo.jpg +library/bibliothek_olbdw.jpg +artstudio/artistic_studio_08_13_altavista.jpg +mall/ins35.jpg +shoeshop/zapateria_09_02_flickr.jpg +laundromat/lavanderia_82_18_flickr.jpg +poolinside/piscina_cubierta_07_10_altavista.jpg +buffet/276833180_70e3e48991.jpg +concert_hall/xConcertHallF.jpg +church_inside/107_0781Wittenberg_Inside_SchlossKirche_1.jpg +cloister/IMG_0432.jpg +inside_bus/inside_bus_095.jpg +movietheater/20061119203235.jpg +deli/deli_68_10_flickr.jpg +library/BM_Frejus_Bibliotheque_1.jpg +locker_room/locker_room_google_0107.jpg +nursery/hddsn111_nurseryafter_w609.jpg +bar/bar_0141.jpg +elevator/elevator_google_0081.jpg +auditorium/presentation_20banque_20amphitheatre_1__164.jpg +nursery/cmag0308_babyrooms01.jpg +cloister/IMG_0425.jpg +operating_room/surgery_room_06_02_altavista.jpg +children_room/playroom_furniture_49_.jpg +cloister/2468653788_fb0b50ab2e.jpg +closet/main.jpg +kindergarden/Huntington_preschool_room.jpg +winecellar/bodega_50_04_yahoo.jpg +classroom/G28bsdc.jpg +children_room/playroom3_62_.jpg +dining_room/room4.jpg +gym/gimnasio_04_14_altavista.jpg +locker_room/locker_room_google_0209.jpg +concert_hall/concert_hall_photo.jpg +meeting_room/n457010.jpg +inside_bus/inside_bus_053.jpg +subway/subway_0330.jpg +waitingroom/waiting_room_10_05_altavista.jpg +movietheater/ZonasComunes122.jpg +closet/closet32.jpg +inside_bus/inside_bus_080.jpg +locker_room/locker_room_google_0087.jpg +closet/Haley_Custom_Closet_450.jpg +fastfood_restaurant/EnfieldTB.jpg +corridor/ins30.jpg +warehouse/warehouse_0406.jpg +prisoncell/prison-4.jpg +office/office_10.jpg +meeting_room/conference3.jpg +livingroom/living22.jpg +stairscase/int67.jpg +bakery/bakery_01_16_yahoo.jpg +fastfood_restaurant/Pizza_Hut_2.jpg +concert_hall/GrossesFsphs_gif.jpg +elevator/elevator_google_0052.jpg +subway/subway_0477.jpg +casino/casino_0036.jpg +kitchen/kitchen1a.jpg +library/library2.jpg +movietheater/img_entete.jpg +concert_hall/Grand_Theater_web.jpg +tv_studio/tv_studio_29_06_altavista.jpg +bedroom/b23.jpg +inside_subway/inside_subway_0272.jpg +meeting_room/conf23.jpg +operating_room/operating_room_02_02_altavista.jpg +classroom/reportage_322_4.jpg +dentaloffice/dentista_52_24_flickr.jpg +church_inside/33ChurchInterior.jpg +poolinside/RMC_Pool_picture_main_pool.jpg +kitchen/kitchen169.jpg +museum/museum_79_03_flickr.jpg +bar/bar_0310.jpg +toystore/jugueteria_10_17_yahoo.jpg +bar/bar_0196.jpg +bookstore/bookstore_17_13_altavista.jpg +corridor/p1010075_c.jpg +dining_room/d4.jpg +poolinside/piscina_cubierta_01_14_altavista.jpg +grocerystore/supermarche_2.jpg +fastfood_restaurant/CIMG0334_resize.jpg +buffet/food_table_3.jpg +bedroom/b18.jpg +inside_subway/inside_subway_0219.jpg +dentaloffice/dentista_114_20_flickr.jpg +toystore/Spielzeug_14_02_flickr.jpg +prisoncell/dp1795698.jpg +waitingroom/waiting_room_01_24_flickr.jpg +classroom/195707530_69d72677ab.jpg +prisoncell/cell0705.jpg +museum/museum_149_07_flickr.jpg +studiomusic/panoramica.jpg +locker_room/locker_room_google_0041.jpg +warehouse/warehouse_0001.jpg +inside_bus/inside_bus_037.jpg +nursery/pinkprincess_crib_full.jpg +office/room263.jpg +computerroom/ORDINATEUR2.jpg +livingroom/at_98_5_950_34_l.jpg +videostore/videotheque_01_02_flickr.jpg +fastfood_restaurant/mcdonalds.jpg +operating_room/operating_room_03_07_altavista.jpg +church_inside/metropolitana_79_07_flickr.jpg +elevator/elevator_google_0059.jpg +pantry/Picture_013_30581853_std.jpg +bathroom/indoor_0217.jpg +bowling/bowling_0191.jpg +computerroom/CompLab.jpg +artstudio/painters_studio_32_20_altavista.jpg +fastfood_restaurant/pizzahut_storefront0308.jpg +lobby/lobby20.jpg +bookstore/bookstore_51_10_altavista.jpg +cloister/Cloister_Monastery_Santa_Catalina_Arequipa_Peru.jpg +inside_bus/inside_bus_003.jpg +meeting_room/n457019.jpg +meeting_room/int754.jpg +bowling/bowling_0112.jpg +dentaloffice/dental_office_27_11_altavista.jpg +restaurant/restaurant_03_05_altavista.jpg +library/Bibliotheque_solvay_wall.jpg +greenhouse/greenhouse3.jpg +clothingstore/boutique8.jpg +garage/Green_Roof_Garage_Rob_and_Rowan.jpg +lobby/sLobby17.jpg +library/Library98.jpg +mall/ins34.jpg +kindergarden/classroom3.jpg +artstudio/art_painting_studio_10_11_altavista.jpg +closet/WH_WI_with_SuperSlide.jpg +bakery/panaderia_18_11_yahoo.jpg +bar/bar_0051.jpg +bathroom/b8.jpg +clothingstore/Bookstore88.jpg +library/130309783_f194f43f71.jpg +classroom/aulas_007.jpg +bar/bar_0006.jpg +inside_bus/inside_bus_044.jpg +artstudio/artist_studio_17_05_altavista.jpg +subway/subway_0028.jpg +florist/06_1.jpg +library/pano2.jpg +clothingstore/balboa_wet_seal_boutique.jpg +inside_bus/inside_bus_076.jpg +lobby/lobby04.jpg +auditorium/auditorium_web_2_1__100.jpg +hospitalroom/HospitalRoom3.jpg +nursery/abc_babylg.jpg +fastfood_restaurant/Papa_John_s_at_the_Al_Seef_Mall.jpg +laboratorywet/laboratorio_quimica_03_03_altavista.jpg +hairsalon/claudy_coiffure_salon_1.jpg +gameroom/OR_02_02_0480_29_l.jpg +dentaloffice/dentista_64_03_flickr.jpg +casino/casino_0045.jpg +closet/Master_Closet2.jpg +kitchen/dining047.jpg +bedroom/indoor_0434.jpg +buffet/hot_food.jpg +elevator/elevator_google_0032.jpg +winecellar/wine_cellar_03_10_altavista.jpg +bookstore/bookstore_05_14_altavista.jpg +concert_hall/BeallHall.jpg +restaurant/restaurante_04_18_altavista.jpg +garage/mso1012_LaundryTools_aft_w609.jpg +movietheater/movietheater_google_0031.jpg +poolinside/serv8_450.jpg +restaurant_kitchen/restaurant_kitchen_google_0046.jpg +casino/casino_0048.jpg +computerroom/url_gif.jpg +kitchen/cdmc1123.jpg +poolinside/P1050218.jpg +closet/10022250_2T.jpg +videostore/videoclub_14_15_altavista.jpg +elevator/elevator_google_0086.jpg +bookstore/bulles_vienne_04.jpg +buffet/P8311103.jpg +locker_room/locker_room_google_0102.jpg +cloister/SenanqueCloister.jpg +kindergarden/preschool_chairs_2006_3.jpg +laboratorywet/laboratorio_quimica_17_15_altavista.jpg +fastfood_restaurant/358x283.jpg +clothingstore/45_1343_Foto_nova_loja_Toulon_DSCN0669.jpg +livingroom/ph_01_06_87775_01_l.jpg +church_inside/kirche11.jpg +office/office3.jpg +restaurant/restaurant_19_19_altavista.jpg +dining_room/d12.jpg +garage/GarageInside_1.jpg +tv_studio/thumbnail_soundstage_norm_105_.jpg +museum/museo_161_19_flickr.jpg +restaurant_kitchen/restaurant_kitchen_google_0076.jpg +shoeshop/TIENDA.jpg +locker_room/locker_room_google_0185.jpg +hospitalroom/P1012467.jpg +winecellar/wine_cellar_44_03_altavista.jpg +prisoncell/2005_0809Image0027.jpg +library/Bibliothek.jpg +children_room/opt_playroom_tepee_47_.jpg +laboratorywet/laboratorio_quimica_18_12_altavista.jpg +pantry/pantry_42_04_flickr.jpg +buffet/528283746_b1dea3f70f.jpg +casino/casino_0340.jpg +gameroom/salle_de_jeux_08_09_altavista.jpg +movietheater/movietheater_google_0034.jpg +buffet/african_village_bakau_12.jpg +pantry/pantry_143_06_flickr.jpg +prisoncell/index_jail.jpg +bowling/bowling_0062.jpg +bowling/bowling_0170.jpg +casino/casino_0006.jpg +pantry/White_Pantry_System_Web_Size.jpg +poolinside/schwimmbad11_2.jpg +shoeshop/pht_mag_01.jpg +children_room/PO_06_03_3000_56_l.jpg +inside_bus/inside_bus_019.jpg +shoeshop/zapateria_23_21_flickr.jpg +elevator/elevator_google_0043.jpg +florist/florist_46_20_altavista.jpg +kitchen/kitchen174.jpg +kindergarden/preschool1.jpg +bathroom/cimg2046.jpg +church_inside/3_Le_Raincy_eglise_Notre_Dame_Vue_d_ensemble.jpg +closet/closets.jpg +toystore/262507104_bfa08ef897.jpg +laundromat/original.jpg +hairsalon/foa6agrande.jpg +movietheater/8cd35967ac80b2212d15ee90a06329ac_1__14.jpg +bowling/bowling_0037.jpg +movietheater/FindingNemo1_480x320.jpg +corridor/upper_main_hallway_1_c.jpg +gym/gimnasio_10_03_altavista.jpg +meeting_room/conf14.jpg +museum/museo_44_01_flickr.jpg +nursery/baby_room_011_738273.jpg +trainstation/gare_27_22_flickr.jpg +restaurant/restaurante_04_15_altavista.jpg +auditorium/global_millennium_prize_promotion_to_ricardo_palma_universitystudents_at_the_auditorium_df95e_1__55.jpg +deli/deli_40_11_altavista.jpg +dentaloffice/dentista_85_08_flickr.jpg +bookstore/Libreria_30_16_altavista.jpg +hairsalon/venta_405073650.jpg +restaurant/bistro_19_10_altavista.jpg +auditorium/amphi05_1__78.jpg +bowling/bowling_0013.jpg +casino/casino_0037.jpg +hospitalroom/hospital_room_04_13_altavista.jpg +children_room/playroom_0506_33_.jpg +florist/florist_26_19_altavista.jpg +hairsalon/photo_salon1.jpg +winecellar/wine_cellar_46_17_altavista.jpg +dining_room/kitchen064.jpg +gameroom/Salle_Jeux_58936.jpg +restaurant_kitchen/restaurant_kitchen_google_0030.jpg +gameroom/OGS_jeux_web.jpg +videostore/videotheque_01_23_flickr.jpg +inside_subway/inside_subway_0159.jpg +studiomusic/estudio01.jpg +auditorium/sp_auditorium_1907_3_1__175.jpg +bathroom/indoor_0498.jpg +classroom/sala02.jpg +restaurant_kitchen/restaurant_kitchen_google_0007.jpg +grocerystore/Oliera_Wijnegem_Shopping_Center.jpg +garage/hdts1013_Garage_bef_photo_w609.jpg +dentaloffice/dental_office_02_10_altavista.jpg +pantry/pantry_83_22_flickr.jpg +fastfood_restaurant/baja_fresh_restaurant_inside.jpg +mall/p95536_Minneapolis_Mall_of_America.jpg +pantry/pantry_120_01_flickr.jpg +dining_room/n190088.jpg +livingroom/int13.jpg +auditorium/amphitheatre987_25.jpg +cloister/build1383.jpg +museum/museo_07_01_flickr.jpg +library/473767793_d3cafc4eff.jpg +garage/UltiPro.jpg +library/Concord_Free_Public_Library_Renovation_122.jpg +livingroom/aa016556.jpg +children_room/ft_playroom01_l_43_.jpg +children_room/playroom10_54_.jpg +garage/garage_03uu.jpg +prisoncell/Mens_Jail.jpg +restaurant/room264.jpg +computerroom/1782001450_ec797a2c7c.jpg +poolinside/pool_inside_46_08_altavista.jpg +toystore/toys_store_03_20_altavista.jpg +closet/Walk_In_Closet_1.jpg +clothingstore/YogaBoutique.jpg +mall/eastridg1.jpg +bakery/panaderia_20_21_yahoo.jpg +bookstore/Librairie_07_07_altavista.jpg +waitingroom/PatientWaitingRoom.jpg +concert_hall/Atwood_bubble.jpg +waitingroom/a67092.jpg +gym/gym45.jpg +studiomusic/studiomusic.jpg +restaurant_kitchen/restaurant_kitchen_google_0065.jpg +auditorium/6a00d8341e38b153ef00e54f6a70a48834_500wi_1__15.jpg +inside_bus/inside_bus_094.jpg +laundromat/2067f.jpg +stairscase/room454.jpg +inside_subway/inside_subway_0291.jpg +waitingroom/cab3.jpg +auditorium/serre43_173.jpg +toystore/speelgoed_35_13_altavista.jpg +artstudio/artist_studio_36_05_altavista.jpg +office/ins4.jpg +auditorium/amphitheatre8_1__84.jpg +children_room/VA_04_02_6000_08_l.jpg +elevator/elevator_google_0096.jpg +library/Bibliothek_3_gr.jpg +jewelleryshop/duran_joyeros.jpg +bowling/bowling_0204.jpg +poolinside/pool_inside_40_20_altavista.jpg +computerroom/salle_info1.jpg +dentaloffice/dentaire_10_03_altavista.jpg +deli/deli_73_02_flickr.jpg +nursery/baby_room2.jpg +tv_studio/famie_studio_89_.jpg +poolinside/indooPool_Inside_gif.jpg +bakery/panaderia_49_01_altavista.jpg +stairscase/int667.jpg +artstudio/art_painting_studio_12_16_altavista.jpg +garage/garage_wall_strip_handled_500.jpg +greenhouse/redwhite.jpg +library/57048683_74701f9fa9.jpg +movietheater/movietheater_google_0015.jpg +restaurant/room251.jpg +tv_studio/tv_studio_3b_72_.jpg +warehouse/warehouse_0071.jpg +auditorium/auditorium001_102.jpg +livingroom/familyroom22.jpg +hospitalroom/HospitalRoom_big.jpg +locker_room/locker_room_google_0079.jpg +pantry/fp_closet_3.jpg +waitingroom/3multi1.jpg +jewelleryshop/452121570_c989f6e216.jpg +hospitalroom/IMG_0036.jpg +church_inside/P0000231.jpg +airport_inside/airport_inside_0162.jpg +subway/subway_0083.jpg +laboratorywet/wet_lab_09_02_altavista.jpg +mall/mall04.jpg +restaurant_kitchen/restaurant_kitchen_google_0020.jpg +movietheater/2234326815_058f93a495_1__6.jpg +mall/shopping_mall.jpg +cloister/claustro2.jpg +laboratorywet/laboratorio_quimica_06_04_altavista.jpg +prisoncell/46442359_cf7bc5c5d2.jpg +trainstation/train_station_07_07_altavista.jpg +artstudio/artist_studio_22_07_altavista.jpg +movietheater/movietheater_google_0009.jpg +grocerystore/Afbeelding_supermarkt_ergo.jpg +poolinside/pool_inside_08_07_altavista.jpg +winecellar/cave_champagne_21_15_altavista.jpg +operating_room/operating_room_08_09_altavista.jpg +prisoncell/policestationjailcell.jpg +subway/subway_0048.jpg +jewelleryshop/Silver_shop_in_Wua_Lai_Rd.jpg +airport_inside/airport_inside_0608.jpg +fastfood_restaurant/pizza_hut.jpg +operating_room/operating_room_33_02_altavista.jpg +classroom/rdg1.jpg +subway/subway_0349.jpg +hospitalroom/habitacion_hospital_01_05_flickr.jpg +church_inside/metropolitana_137_03_flickr.jpg +bakery/boulangerie_40_09_altavista.jpg +inside_subway/inside_subway_0261.jpg +waitingroom/waiting_ig.jpg +church_inside/KaGrou2.jpg +deli/deli_14_06_altavista.jpg +airport_inside/airport_inside_0535.jpg +florist/florist_40_09_altavista.jpg +operating_room/operating_room_02_19_altavista.jpg +deli/StoddartDeli1_1.jpg +waitingroom/photo_1241582.jpg +office/int281.jpg +warehouse/warehouse_0051.jpg +bathroom/room29.jpg +greenhouse/DSCN1239.jpg +gym/velocity_hoboken_gym.jpg +inside_subway/inside_subway_0398.jpg +poolinside/piscina_cubierta_06_04_altavista.jpg +prisoncell/prison_cell_22_10_altavista.jpg +laundromat/lavanderia_11_20_flickr.jpg +casino/casino_0266.jpg +closet/closet1.jpg +dining_room/room369.jpg +laboratorywet/laboratorio_quimica_08_13_altavista.jpg +dentaloffice/dentaire_44_12_altavista.jpg +bakery/boulangerie_24_19_altavista.jpg +buffet/P1011256_fs.jpg +winecellar/wine_cellar_04_06_altavista.jpg +poolinside/pool_inside_38_05_altavista.jpg +prisoncell/carcel_21_20_flickr.jpg +florist/44122_1.jpg +laboratorywet/wet_lab_03_14_altavista.jpg +concert_hall/Raoul_Jobin_07600017_200703_1.jpg +laundromat/lavanderia_01_08_altavista.jpg +elevator/elevator_google_0039.jpg +operating_room/surgery_room_02_07_altavista.jpg +bowling/bowling_0120.jpg +pantry/pantry_100_19_flickr.jpg +florist/florist_07_11_altavista.jpg +buffet/998866690_b2cc196ee1.jpg +meeting_room/conf17.jpg +bedroom/room359.jpg +winecellar/bodega_45_18_yahoo.jpg +classroom/sala01.jpg +poolinside/0310_piscines_6.jpg +buffet/food2.jpg +clothingstore/Bookstore_5.jpg +airport_inside/airport_inside_0409.jpg +lobby/url.jpg +dentaloffice/dentista_40_01_altavista.jpg +greenhouse/dscn0088.jpg +hospitalroom/hospital_room_07_17_altavista.jpg +lobby/LV_00_07_4491_02A_l.jpg +office/office16.jpg +trainstation/estacion_de_ferrocarriles_44_06_altavista.jpg +mall/ar118983325881591.jpg +auditorium/salle_auditorium_valenciennes_1__169.jpg +bowling/bowling_0074.jpg +computerroom/computer_room_jpg.jpg +inside_subway/inside_subway_0431.jpg +waitingroom/sala_de_espera_03_14_altavista.jpg +bakery/panetteria_03_12_altavista.jpg +airport_inside/airport_inside_0057.jpg +bathroom/indoor_0433.jpg +bar/bar_0254.jpg +computerroom/computer_2520classroom.jpg +casino/casino_0338.jpg +greenhouse/invernadero04.jpg +toystore/Spielzeug_24_11_altavista.jpg +trainstation/estacion_de_ferrocarriles_16_16_altavista.jpg +bedroom/int452.jpg +bookstore/Buchhandlung_Ansichten_innen5_150dpi.jpg +gym/gimnasio_68_21_flickr.jpg +bathroom/indoor_0196.jpg +library/scotland_library2_png.jpg +inside_subway/inside_subway_0421.jpg +florist/rt_wall.jpg +casino/casino_0261.jpg +trainstation/gare_100_06_flickr.jpg +hospitalroom/Baby063.jpg +waitingroom/recept2.jpg +bedroom/indoor_0584.jpg +pantry/Cognac_Pantry_wFull_Doors_Bskts_150.jpg +warehouse/warehouse_0381.jpg +gameroom/AT_98_4_1270_26_l.jpg +kindergarden/classroom_large2.jpg +pantry/agm_pantry_melamine.jpg +restaurant_kitchen/restaurant_kitchen_google_0009.jpg +corridor/p1010064_b.jpg +clothingstore/274757141_small.jpg +kitchen/kitchen265.jpg +trainstation/train_station_42_09_altavista.jpg +office/emba_offices_before_move.jpg +operating_room/surgery_room_22_09_altavista.jpg +casino/casino_0014.jpg +kitchen/kitchen65.jpg +pantry/42_17956239.jpg +cloister/852054.jpg +jewelleryshop/b102.jpg +airport_inside/airport_inside_0197.jpg +casino/casino_0038.jpg +meeting_room/n457003.jpg +bar/bar_0161.jpg +children_room/AT_04_02_3000_58_l.jpg +hairsalon/HPIM0491.jpg +classroom/salle_2.jpg +clothingstore/MelangeStoreInside.jpg +nursery/p1000855_1.jpg +tv_studio/grimshaw_photo7_91_.jpg +locker_room/locker_room_google_0154.jpg +airport_inside/airport_inside_0050.jpg +trainstation/estacion_de_ferrocarriles_30_01_altavista.jpg +office/o5.jpg +bookstore/Librairie_Licap1.jpg +tv_studio/3_estudio_de_television_1_23_.jpg +bowling/bowling_0081.jpg +deli/deli_142_15_flickr.jpg +kindergarden/IMG_1073.jpg +gym/gimnasio_28_20_flickr.jpg +kitchen/cdmc1145.jpg +operating_room/surgery_room_16_10_altavista.jpg +fastfood_restaurant/cam1_big.jpg +bowling/bowling_0124.jpg +subway/subway_0382.jpg +corridor/dsc00239.jpg +warehouse/warehouse_0094.jpg +church_inside/Random_church_interior.jpg +inside_subway/metropolitana_19_12_flickr.jpg +tv_studio/tv_studio_17_13_altavista.jpg +classroom/image17.jpg +inside_subway/inside_subway_0283.jpg +artstudio/art_painting_studio_10_12_altavista.jpg +buffet/616739082_d546057033.jpg +bakery/boulangerie_16_09_yahoo.jpg +computerroom/salle_matos.jpg +elevator/elevator_google_0092.jpg +greenhouse/Estufa_178.jpg +bookstore/bookstore_02_08_altavista.jpg +church_inside/metropolitana_68_11_flickr.jpg +laundromat/laundromat78.jpg +waitingroom/art2217_2.jpg +toystore/toys_store_22_11_altavista.jpg +tv_studio/estudiodetv_88_.jpg +bookstore/9f63b46ad67dbc0868afa77a45d339bb.jpg +kindergarden/DSC000522.jpg +elevator/elevator_google_0002.jpg +garage/623sw39ter_garage2.jpg +airport_inside/airport_inside_0330.jpg +kindergarden/Kindergarten_classroom.jpg +trainstation/gare_63_05_flickr.jpg +prisoncell/IMG_3782Copying.jpg +jewelleryshop/vase2_55_.jpg +shoeshop/75421439_6007807504.jpg +cloister/cloister3.jpg +stairscase/AT_97_4_396_33_l.jpg +greenhouse/53_3.jpg +toystore/262508526_93634b3c2c.jpg +bookstore/Libreria_34_13_altavista.jpg +casino/casino_0008.jpg +children_room/playroom_july_68_.jpg +greenhouse/greenhouse9.jpg +studiomusic/studio87.jpg +artstudio/estudio_de_pintor_07_08_altavista.jpg +bathroom/IMG_2437.jpg +airport_inside/airport_inside_0127.jpg +computerroom/Salle_Informatique_Bellavista_060831_2_.jpg +livingroom/living20.jpg +laundromat/lavanderia.jpg +winecellar/bodega_vino_03_10_altavista.jpg +library/bnf.jpg +cloister/bt_cloister.jpg +lobby/Ashburton_Meeting_Room_003.jpg +mall/2007_02_galleria.jpg +office/office.jpg +videostore/videoclub_01_15_altavista.jpg +hospitalroom/roomhospital.jpg +nursery/lit_bois_bebe_01_1.jpg +videostore/videoteca_07_04_flickr.jpg +stairscase/escalier_chapelle_loretto2.jpg +classroom/Classroom1.jpg +fastfood_restaurant/800px_Nandos_dhanmondi.jpg +prisoncell/prison_cell_48_07_altavista.jpg +fastfood_restaurant/Taco_Bell_8.jpg +artstudio/modern_art_studio_50_11_altavista.jpg +gym/gimnasio_11_12_altavista.jpg +corridor/corridora7.jpg +church_inside/Inside_a_large_church_Vienna.jpg +auditorium/image_preview_1__149.jpg +mall/thumb_3aa796fc07fe0a44839609f6fffb7384_a1151d110007d93035896c753526fed3.jpg +gym/1852272142_7c45e7c342.jpg +livingroom/living23.jpg +pantry/pantry_09_02_altavista.jpg +classroom/classroom05.jpg +videostore/videoteca_06_24_flickr.jpg +laboratorywet/nathanfeinlab.jpg +mall/Galleria_1.jpg +cloister/Claustro1.jpg +lobby/sLobby05.jpg +auditorium/stevensstraight_72.jpg +bedroom/indoor_0578.jpg +laundromat/ins7.jpg +subway/underground_08_12_altavista.jpg +gameroom/LV_00_05_4690_34_l.jpg +videostore/videoclub_01_13_altavista.jpg +fastfood_restaurant/Taco_Bell_7.jpg +inside_bus/inside_bus_051.jpg +laboratorywet/laboratorio_quimica_13_01_altavista.jpg +warehouse/warehouse_0447.jpg +church_inside/597086.jpg +locker_room/locker_room_google_0116.jpg +hairsalon/Picture_013.jpg +prisoncell/prison4.jpg +cloister/Claustro_Monasterio_San_Juan_de_los_Reyes.jpg +inside_bus/inside_bus_043.jpg +studiomusic/82793611.oGmwNa9a.20070629studio01comp.jpg +cloister/claustro_silos.jpg +children_room/VA_05_02_8100_37_l.jpg +bakery/bakery_21_02_yahoo.jpg +library/34_AvH_014_library_stacks.jpg +buffet/food.jpg +library/450px_Bibliothek_im_Reformierten_Kollegium_Debrecen.jpg +clothingstore/b0011.jpg +lobby/hall_entree.jpg +toystore/toys_store_14_14_altavista.jpg +jewelleryshop/e_jewelry_store_13_.jpg +restaurant_kitchen/restaurant_kitchen_google_0035.jpg +toystore/jugueteria_02_15_flickr.jpg +grocerystore/MainFoodStoreProduce1.jpg +livingroom/easyst035.jpg +lobby/entrhallstair66.jpg +elevator/elevator_google_0003.jpg +subway/subway_0319.jpg +bakery/famous_bakery_04_03_altavista.jpg +movietheater/auditorium12_35.jpg +subway/subway_0027.jpg +artstudio/art_painting_studio_22_03_altavista.jpg +kitchen/dsc01464.jpg +bakery/new_bakery_30_07_altavista.jpg +fastfood_restaurant/DSC00471.jpg +bookstore/bookstore_46_15_altavista.jpg +bathroom/IMG_1703.jpg +pantry/300_78375.jpg +poolinside/OR_04_03_0005_23_l.jpg +hairsalon/bez2.jpg +bookstore/livMezanino2.jpg +children_room/VA_05_20_0020_15_l.jpg +kindergarden/play_area_and_windows_large2.jpg +operating_room/operating_room_15_19_altavista.jpg +bowling/bowling_0151.jpg +poolinside/piscina_cubierta_02_18_altavista.jpg +bathroom/008.jpg +livingroom/easyst020.jpg +garage/garajep0.jpg +operating_room/surgery_room_45_01_altavista.jpg +waitingroom/salleAttente.jpg +grocerystore/DSCN0258.jpg +locker_room/locker_room_google_0201.jpg +airport_inside/airport_inside_0022.jpg +cloister/Cloister_Nov03_D3598sAR800.jpg +computerroom/PICT0004.jpg +studiomusic/electronic_music1.jpg +airport_inside/airport_inside_0001.jpg +restaurant/restaurant_46_05_altavista.jpg +elevator/elevator_google_0076.jpg +corridor/corridora6.jpg +inside_bus/inside_bus_061.jpg +mall/galleria2.jpg +classroom/fourmies_ecomusee2.jpg +kitchen/kitchen46.jpg +cloister/claustro29dd.jpg +inside_subway/inside_subway_0134.jpg +concert_hall/NorwoodConcertHall_copy.jpg +jewelleryshop/Interior_3.jpg +livingroom/Living66.jpg +shoeshop/zapateria_09_05_altavista.jpg +cloister/claustropi7.jpg +laundromat/OR_03_05_1000_59_l.jpg +library/spellbinding_bookstore.jpg +restaurant_kitchen/restaurant_kitchen_google_0105.jpg +children_room/playroom2_30_.jpg +bowling/bowling_0017.jpg +fastfood_restaurant/800px_Lincoln_park_chicago_qdoba.jpg +videostore/video01.jpg +church_inside/church15_1.jpg +greenhouse/747202.jpg +warehouse/warehouse_0458.jpg +children_room/AT_04_05_6000_54_l.jpg +concert_hall/salle_de_concert.jpg +subway/subway_0071.jpg +elevator/elevator_google_0072.jpg +airport_inside/airport_inside_0267.jpg +buffet/food_4904.jpg +church_inside/pantry_120_09_flickr.jpg +inside_bus/inside_bus_008.jpg +garage/12_x_24_Garage_Interior_.jpg +closet/075381028998.jpg +gym/gimnasio_32_04_altavista.jpg +auditorium/amphitheatre_1__85.jpg +studiomusic/control_water_music.jpg +greenhouse/invernaderos_fotos_020.jpg +cloister/I007CloisterMoyneAbbey.jpg +warehouse/warehouse_0086.jpg +fastfood_restaurant/panther_grill_gif.jpg +hairsalon/c6fde69b_523f.jpg +stairscase/TA_99_3_0525_33_l.jpg +inside_subway/inside_subway_0358.jpg +shoeshop/shoeshop.jpg +artstudio/estudio_de_pintor_02_07_altavista.jpg +closet/Laminated_Clothing_Closet.jpg +concert_hall/concertFull.jpg +restaurant/restaurante_20_04_altavista.jpg +gym/gimnasio_57_15_flickr.jpg +clothingstore/rotterdam.jpg +closet/Maple_DH_Closet_Propped.jpg +museum/museum_120_08_flickr.jpg +toystore/toys_store_01_13_altavista.jpg +bookstore/Librairie_36_11_altavista.jpg +dentaloffice/dental_office_11_12_altavista.jpg +bookstore/bookstore_02_09_altavista.jpg +greenhouse/hydroponic_greenhouse_1.jpg +gym/gimnasio_23_17_altavista.jpg +greenhouse/site_estufa_03.jpg +bar/bar_0246.jpg +bathroom/indoor_0407.jpg +clothingstore/our_boutique011.jpg +airport_inside/airport_inside_0078.jpg +fastfood_restaurant/30835528_scaled_408x271.jpg +deli/deli_85_04_flickr.jpg +museum/museum_41_15_altavista.jpg +pantry/ShelfTrack_Pantry.jpg +gym/Gym_Equipment_Cardio.jpg +jewelleryshop/storefloor_52_.jpg +pantry/WH_Sidelines_Baskets_Pantry.jpg +casino/casino_0023.jpg +classroom/classroom04.jpg +toystore/Spielzeug_29_02_flickr.jpg +waitingroom/Waiting_Room_sm.jpg +meeting_room/conference6.jpg +meeting_room/c17.jpg +hospitalroom/SUDEEP_HOSPITAL.jpg +museum/museum_08_09_flickr.jpg +grocerystore/1ng10a.jpg +videostore/blockbuster_22_05_altavista.jpg +florist/floreria_02_13_flickr.jpg +buffet/528370197_65f7ccd505.jpg +bowling/bowling_0214.jpg +shoeshop/zapateria_24_16_flickr.jpg +classroom/236254301_fa02eae064.jpg +fastfood_restaurant/101_0301.jpg +livingroom/book_living_room.jpg +hairsalon/salondebelleza.jpg +airport_inside/airport_inside_0061.jpg +nursery/nursery_moon_theme800px.jpg +casino/casino_0013.jpg +warehouse/warehouse_0026.jpg +hospitalroom/smartroomdrhassan_hi.jpg +kitchen/kitchen1.jpg +stairscase/INT69.jpg +artstudio/ateliers_11_09_altavista.jpg +subway/subway_0217.jpg +bedroom/ph_02_04_4682_01_l.jpg +jewelleryshop/50_7_.jpg +auditorium/amphitheatre_2__86.jpg +library/mainLibrary.jpg +elevator/elevator_google_0035.jpg +museum/museum_42_12_altavista.jpg +office/mayors_office.jpg +museum/museo_86_11_flickr.jpg +stairscase/AT_04_02_3000_35_l.jpg +dentaloffice/dentista_22_16_flickr.jpg +inside_bus/inside_bus_035.jpg +kindergarden/IMG_1522_18203029_std.jpg +deli/deli_62_15_flickr.jpg +videostore/videoteka_02_12_altavista.jpg +deli/deli_98_18_flickr.jpg +subway/metropolitana_15_12_flickr.jpg +lobby/sLobby26.jpg +tv_studio/tv_studio11_21_07_113_.jpg +concert_hall/slleconcert.jpg +locker_room/locker_room_google_0200.jpg +warehouse/warehouse_0317.jpg +inside_bus/inside_bus_005.jpg +subway/subway_0312.jpg +hospitalroom/saifee_bed.jpg +jewelleryshop/5000000_8_.jpg +operating_room/surgery_room_08_13_altavista.jpg +elevator/elevator_google_0067.jpg +garage/Garage_03.jpg +movietheater/movietheater_google_0019.jpg +waitingroom/waiting_room_41_04_altavista.jpg +bathroom/b4.jpg +classroom/classroom_001.jpg +dining_room/roomscan24.jpg +trainstation/estacion_de_ferrocarriles_01_21_flickr.jpg +greenhouse/hydroponic_greenhouse.jpg +studiomusic/pic3.jpg +garage/Garage890.jpg +grocerystore/supermarche33_1.jpg +dining_room/dining001.jpg +operating_room/surgery_room_44_02_altavista.jpg +bakery/new_bakery_26_09_altavista.jpg +elevator/elevator_google_0009.jpg +movietheater/auditorium39_16.jpg +pantry/pantry_50_20_flickr.jpg +hospitalroom/lister_hospital_05.jpg +library/bibliothekd.jpg +bedroom/dsc04183.jpg +laboratorywet/laboratorio_quimica_18_01_altavista.jpg +locker_room/locker_room_google_0055.jpg +computerroom/fitxer75b_IMG_1581a.jpg +dining_room/dining38.jpg +museum/museum_26_20_altavista.jpg +prisoncell/prison_cell_26_02_altavista.jpg +elevator/elevator_google_0077.jpg +cloister/Abbaye_Royale_de_Fontevraud_IMG_5466.jpg +computerroom/cr3.jpg +kindergarden/prek1.jpg +computerroom/Computer_Room_5a.jpg +elevator/elevator_google_0014.jpg +museum/museo_32_09_flickr.jpg +operating_room/operating_room_21_09_altavista.jpg +mall/mall14.jpg +laboratorywet/feinlabcentrifuge.jpg +tv_studio/set_camera2_465x370_97_.jpg +bedroom/n190033.jpg +hairsalon/Copie_de_DSCF1579.jpg +hospitalroom/DSC_0001.jpg +mall/663265908_597972e155.jpg +lobby/egypt004.jpg +tv_studio/estudio_de_television_04_14_altavista.jpg +stairscase/N25.jpg +museum/museo_67_23_flickr.jpg +elevator/elevator_google_0097.jpg +prisoncell/jailcell334.jpg +bar/bar_0186.jpg +library/gallerie_1130426509812_81_80_90_133.jpg +greenhouse/greenhouse98.jpg +dentaloffice/dentista_09_20_altavista.jpg +pantry/1128_pantry.jpg +fastfood_restaurant/restaurant.jpg +operating_room/surgery_room_06_19_altavista.jpg +shoeshop/zapabulo02.jpg +hairsalon/4613843c_peluqueria2.jpg +lobby/vilnius_neringa_hotel_lobby.jpg +locker_room/locker_room_google_0007.jpg +subway/subway_0092.jpg +warehouse/warehouse_0376.jpg +florist/floristeria_belinda.jpg +laundromat/image052.jpg +locker_room/locker_room_google_0238.jpg +corridor/c18.jpg +poolinside/room175.jpg +dentaloffice/24304190.jpg +mall/386349.jpg +bowling/bowling_0158.jpg +locker_room/locker_room_google_0073.jpg +kindergarden/toddler1.jpg +pantry/pantry_123_06_flickr.jpg +prisoncell/1793365943_cc1f2e4d69.jpg +deli/new_deli_41_12_altavista.jpg +trainstation/train_station_01_05_altavista.jpg +bakery/boulangerie_28_03_yahoo.jpg +airport_inside/airport_inside_0174.jpg +trainstation/gare_127_13_flickr.jpg +nursery/Room1.jpg +poolinside/pool_inside_15_13_altavista.jpg +trainstation/gare_06_01_flickr.jpg +airport_inside/airport_inside_0038.jpg +tv_studio/plato_de_television_02_03_altavista.jpg +shoeshop/zapateria_12_06_flickr.jpg +winecellar/bodega_vino_04_05_altavista.jpg +garage/garage876.jpg +grocerystore/dsc011758jj.jpg +mall/2120.jpg +inside_subway/inside_subway_0297.jpg +bar/bar_0190.jpg +cloister/14claustro.jpg +inside_subway/inside_subway_0105.jpg +operating_room/surgery_room_41_01_altavista.jpg +museum/museo_127_07_flickr.jpg +children_room/507_playroom_8_.jpg +gym/Exercise_Gym.jpg +children_room/TA_99_3_0523_01_l.jpg +livingroom/indoor_0325.jpg +videostore/videoclub_14_07_altavista.jpg +elevator/elevator_google_0047.jpg +fastfood_restaurant/451033421_2252a21567.jpg +meeting_room/conf05.jpg +church_inside/hottinger_kirche_neu_innen.jpg +studiomusic/4683183.jpg +hairsalon/11555455012.jpg +tv_studio/tv_studio_03_18_altavista.jpg +artstudio/artist_studio_30_14_altavista.jpg +concert_hall/dpac_int.jpg +cloister/cloistetr.jpg +winecellar/cave_champagne_01_19_altavista.jpg +garage/garage99.jpg +bathroom/d47.jpg +computerroom/MCentre06.jpg +library/image_bibliotheque.jpg +stairscase/room191.jpg +operating_room/surgery_room_14_05_altavista.jpg +waitingroom/BATH06.jpg +gym/gym_floor_mirror_view.jpg +gameroom/salle_de_jeux_10_17_altavista.jpg +greenhouse/greenhouseikjj2.jpg +bar/bar_0063.jpg +livingroom/living14.jpg +museum/museum_101_16_flickr.jpg +restaurant/Salle_de_Restaurant_2.jpg +restaurant_kitchen/restaurant_kitchen_google_0087.jpg +winecellar/wine_cellar_12_14_altavista.jpg +gym/gimnasio_20_13_altavista.jpg +studiomusic/djban_estudio_01.jpg +hairsalon/CarrollCountyHairSalonStaff.jpg +inside_subway/inside_subway_0391.jpg +shoeshop/193499659_cc6d11184c.jpg +classroom/ClassroomElem.jpg +winecellar/wine_storage_21_19_altavista.jpg +meeting_room/n457005.jpg +laboratorywet/Ion_Chromatography.jpg +videostore/videoteca_04_11_flickr.jpg +jewelleryshop/05.jpg +florist/r0.jpg +nursery/600_nontoxic_nursery_crib.jpg +garage/mso1012_BackWall_bef_w609.jpg +bar/bar_0101.jpg +bathroom/ta_99_2_0319_02_l.jpg +laundromat/lavanderia_41_07_flickr.jpg +museum/museo_54_09_flickr.jpg +jewelleryshop/jewelrystore002_20_.jpg +trainstation/gare_152_14_flickr.jpg +bathroom/bath288.jpg +closet/closet_rack.jpg +children_room/playroom_decorating_ideas_239_51_.jpg +grocerystore/supermarket_fluores.jpg +stairscase/N190086.jpg +museum/museum_46_08_altavista.jpg +greenhouse/url.jpg +studiomusic/int773.jpg +laundromat/image_preview.jpg +warehouse/warehouse_0120.jpg +closet/closet33.jpg +inside_bus/inside_bus_090.jpg +videostore/videoclub_10_22_flickr.jpg +closet/MasterSuiteLaminateWIBR.jpg +clothingstore/Bookstore2.jpg +inside_bus/inside_bus_101.jpg +meeting_room/int283.jpg +office/or_02_05_0479_11_l.jpg +poolinside/room239.jpg +stairscase/N05m.jpg +dentaloffice/dentista_128_16_flickr.jpg +elevator/elevator_google_0085.jpg +casino/casino_0256.jpg +children_room/pippins_main_play_room_28_.jpg +office/neutbbl.t.jpg +greenhouse/greenhouse2yy1.jpg +subway/subway_0342.jpg +stairscase/N457087.jpg +warehouse/warehouse_0038.jpg +concert_hall/concert_theater_photo01.jpg +gameroom/sala_de_juegos_16_19_altavista.jpg +cloister/01Claustro.jpg +bedroom/bedroom18.jpg +artstudio/art_painting_studio_43_06_altavista.jpg +videostore/videoclub_34_03_altavista.jpg +deli/deli_11_04_yahoo.jpg +bowling/bowling_0134.jpg +restaurant_kitchen/restaurant_kitchen_google_0003.jpg +bakery/boulangerie_14_21_yahoo.jpg +bedroom/indoor_0323.jpg +concert_hall/grieghalle05.jpg +dining_room/dining008.jpg +gameroom/LV_04_01_0004_22_l.jpg +gameroom/gameroom2.jpg +tv_studio/tv_studio_19_02_altavista.jpg +inside_subway/inside_subway_0208.jpg +subway/subway_0315.jpg +winecellar/wine_cellar_36_17_altavista.jpg +elevator/elevator_google_0078.jpg +winecellar/wine_cellar_47_08_altavista.jpg +children_room/playroom16_58_.jpg +office/n457024.jpg +cloister/VeniceSantApolloniaCloister.jpg +laundromat/lavanderia_39_02_flickr.jpg +restaurant_kitchen/restaurant_kitchen_google_0100.jpg +studiomusic/clients_forge2.jpg +auditorium/auditorium_17_1__42.jpg +computerroom/IMG_0595.jpg +videostore/onyeze.jpg +children_room/skd_photo_playroom_69_.jpg +inside_bus/inside_bus_067.jpg +lobby/lobby1332.jpg +gameroom/gameroom789.jpg +bathroom/IMG_1701.jpg +bedroom/at_01_5a_1420_19_l.jpg +laboratorywet/wet_lab_09_01_altavista.jpg +restaurant_kitchen/restaurant_kitchen_google_0059.jpg +studiomusic/p_14_Music_studio.jpg +toystore/245006402_b27063dfcd.jpg +clothingstore/mg004.jpg +dentaloffice/dentaloffice04.jpg +dining_room/d15b.jpg +jewelleryshop/532g.jpg +toystore/PICT0009.jpg +mall/mall24.jpg +kitchen/room14.jpg +videostore/picvideostore.jpg +children_room/playroom4500_64_.jpg +classroom/Pinas.jpg +airport_inside/airport_inside_0120.jpg +winecellar/cave_champagne_04_15_altavista.jpg +gameroom/sala_de_juegos_17_13_altavista.jpg +auditorium/anderson_1__88.jpg +lobby/lobby_reception_1.jpg +office/tuscan_home_office500A.jpg +bowling/bowling_0125.jpg +trainstation/gare_41_15_flickr.jpg +artstudio/painters_studio_29_02_altavista.jpg +bathroom/bath287.jpg +closet/closet_design_lg_gif.jpg +prisoncell/JAIL4.jpg +auditorium/img_1211445319655_1__150.jpg +cloister/en_el_claustro.jpg +garage/truckgarage.jpg +livingroom/l13.jpg +lobby/SD_00_01_51255_17_l.jpg +restaurant/restaurant_51_20_altavista.jpg +pantry/closetstoragekitchen.jpg +operating_room/surgery_room_03_06_altavista.jpg +lobby/lobby03.jpg +restaurant/restaurant_20_06_altavista.jpg +pantry/despensa_32_20_flickr.jpg +grocerystore/shop15.jpg +poolinside/17429_1_Pool7Inside.jpg +prisoncell/610x.jpg +nursery/babyroom_1.jpg +subway/subway_0356.jpg +videostore/610x.jpg +gameroom/int511.jpg +warehouse/warehouse_0378.jpg +gameroom/salle_de_jeux_08_14_altavista.jpg +lobby/Foyer_Lobby.jpg +church_inside/church234567.jpg +bar/bar_0156.jpg +grocerystore/supermercato_fs.jpg +shoeshop/zapateria_01_16_flickr.jpg +auditorium/auditorium098_105.jpg +grocerystore/IMG_4862BeerinNewHampshire.jpg +mall/Buenos_Aires_shopping_center_2_.jpg +office/despacho2_400.jpg +computerroom/computadores.jpg +greenhouse/greenhouse2123.jpg +museum/museum_137_18_flickr.jpg +bar/bar_0166.jpg +church_inside/1347447925_425d67a816.jpg +library/library01.jpg +garage/ihs_house_garage_inside.jpg +warehouse/warehouse_0036.jpg +dentaloffice/dental_office_49_11_altavista.jpg +jewelleryshop/1202199587interior.jpg +children_room/VA_03_00_0003_44_l.jpg +restaurant/restaurant_05_20_altavista.jpg +auditorium/g_5eauditorium_1__147.jpg +dining_room/room272.jpg +garage/Garage_rollup_open_1_262135554_std.jpg +dining_room/dining011.jpg +nursery/amys_baby_room_lg.jpg +artstudio/int12.jpg +subway/subway_0474.jpg +dining_room/n457043.jpg +buffet/buffet648.jpg +locker_room/locker_room_google_0166.jpg +toystore/Spielzeug_84_23_flickr.jpg +closet/MasterSuiteWI.jpg +buffet/food_table03.jpg +gameroom/gameroom_web.jpg +corridor/p1010068_c.jpg +auditorium/facility_rentals_auditorium_1__146.jpg +greenhouse/DSCF0009.jpg +shoeshop/f339.jpg +airport_inside/airport_inside_0323.jpg +shoeshop/shoes_shop_01_20_altavista.jpg +studiomusic/clients_forge1.jpg +winecellar/wine_cellar_09_18_altavista.jpg +computerroom/salle_info.jpg +prisoncell/todd_232087_14.jpg +restaurant/restaurant_20_18_altavista.jpg +auditorium/auditorium712_38.jpg +kindergarden/DSC000572.jpg +poolinside/piscina_cubierta_03_12_altavista.jpg +videostore/DVD3268.jpg +gameroom/sala_de_juegos_13_14_altavista.jpg +garage/mso1004_StuffOnWalls_aft1_w609.jpg +laboratorywet/laboratorio_quimica_01_18_altavista.jpg +winecellar/wine_cellar_47_19_altavista.jpg +children_room/LV_98_3_7013_14_l.jpg +bakery/boulangerie_38_18_altavista.jpg +greenhouse/BA_Greenhouse.jpg +prisoncell/JailCell1950.jpg +grocerystore/caraman_supermarche_90d5b.jpg +artstudio/art_painting_studio_43_20_altavista.jpg +toystore/toys_store_36_07_altavista.jpg +videostore/videoclub_30_06_altavista.jpg +fastfood_restaurant/Blimpie21.jpg +hospitalroom/hospital_room_07_16_altavista.jpg +kindergarden/Classroom566.jpg +buffet/fffffda05b0b.jpg +inside_subway/inside_subway_0183.jpg +nursery/kimberly_grant.jpg +kitchen/room40.jpg +bakery/panetteria_10_10_altavista.jpg +inside_bus/inside_bus_070.jpg +children_room/playroom_000_66_.jpg +hairsalon/fdc_2701_1.jpg +videostore/videoteca_05_12_flickr.jpg +kindergarden/Classroom_109.jpg +laundromat/laundry_room_area.jpg +bowling/bowling_0036.jpg +buffet/buffet87.jpg +church_inside/144952333.jpg +classroom/class_room_2.jpg +bakery/panetteria_01_01_altavista.jpg +gym/VAVORITE_GYM_SHOT_DIGITAL.jpg +concert_hall/concert2.jpg +kindergarden/classA01.jpg +livingroom/familyroom97.jpg +fastfood_restaurant/149212593_1abe45be1e.jpg +bathroom/indoor_0197.jpg +lobby/egypt005.jpg +bowling/bowling_0029.jpg +lobby/lobby31.jpg +pantry/White_WI_Pantry_woDining_Rm.jpg +garage/Garage7654.jpg +warehouse/warehouse_0216.jpg +concert_hall/19052005180320_6.jpg +winecellar/bodega_38_21_yahoo.jpg +museum/museo_43_04_flickr.jpg +kindergarden/Preschool_Place_Market.jpg +garage/GarageInside.jpg +lobby/16.jpg +inside_bus/inside_bus_071.jpg +meeting_room/conf08.jpg +children_room/girlsplayroom_18_.jpg +casino/casino_0041.jpg +jewelleryshop/170208.jpg +restaurant/bistro_43_06_altavista.jpg +videostore/video_store_05_01_altavista.jpg +corridor/p1010076_c.jpg +greenhouse/_7CCDF0C3_D08A_420C_8275_8544C0A84D0C_19112003_002.jpg +operating_room/surgery_room_06_04_altavista.jpg +poolinside/pool_inside_16_02_altavista.jpg +trainstation/train_station_11_18_altavista.jpg +office/water_office.jpg +stairscase/stairs07.jpg +bakery/bakery_23_13_yahoo.jpg +tv_studio/estudio_rbs_tv_bage_44_.jpg +toystore/toys_store_14_15_altavista.jpg +trainstation/gare_97_15_flickr.jpg +buffet/buffet_food.jpg +grocerystore/veg_isle1.jpg +laundromat/PO_06_03_3000_81_l.jpg +elevator/elevator_google_0074.jpg +mall/ins47.jpg +hairsalon/ricardo_maggiore_salon.jpg +subway/subway_0259.jpg +trainstation/gare_67_13_flickr.jpg +grocerystore/integral_color4_detail.jpg +dining_room/n15m.jpg +office/interior004.jpg +hairsalon/salon_coiffure_ca.jpg +meeting_room/conf20.jpg +deli/deli_08_18_yahoo.jpg +bedroom/int139.jpg +restaurant/restaurante_40_11_altavista.jpg +bowling/bowling_0035.jpg +operating_room/operating_room_04_19_altavista.jpg +pantry/despensa_99_09_flickr.jpg +casino/casino_0077.jpg +tv_studio/estudio028_86_.jpg +cloister/Graus_Claustro.jpg +videostore/videoclub_03_23_flickr.jpg +bedroom/IMG_9816.jpg +jewelleryshop/shopinterior.jpg +hospitalroom/UGHHPD010.jpg +dining_room/dining2.jpg +poolinside/schwimmbad003.jpg +bar/bar_0435.jpg +inside_subway/inside_subway_0171.jpg +subway/subway_0460.jpg +videostore/videoclub_04_19_flickr.jpg +closet/8c.jpg +prisoncell/jail_cell22.jpg +warehouse/warehouse_0333.jpg +bar/bar_0376.jpg +concert_hall/GTPR_DiGiCo_VAC_04_LR.jpg +casino/casino_0236.jpg +warehouse/warehouse_0154.jpg +dining_room/d3.jpg +gameroom/gameroom_pocket.jpg +restaurant_kitchen/restaurant_kitchen_google_0010.jpg +waitingroom/Bistro_3_BMP.jpg +dentaloffice/dentaire_11_13_flickr.jpg +poolinside/0310_piscines_9.jpg +classroom/sdeclasse2.jpg +fastfood_restaurant/chip2.jpg +florist/floreria_08_08_flickr.jpg +casino/casino_0232.jpg +toystore/jugueteria_04_03_flickr.jpg +casino/casino_0018.jpg +bookstore/Librairie_48_13_altavista.jpg +greenhouse/invernadero_flores2.jpg +hairsalon/1871389960_44f51e02e4.jpg +kindergarden/pre2.jpg +mall/3163.jpg +artstudio/artist_studio_24_05_altavista.jpg +office/int85.jpg +bathroom/indoor_0187.jpg +waitingroom/WebsiteWaitingRoom.jpg +corridor/pasillo33_c.jpg +locker_room/locker_room_google_0031.jpg +kitchen/kitchen037.jpg +studiomusic/int806.jpg +bowling/bowling_0183.jpg +trainstation/gare_03_09_altavista.jpg +winecellar/wine_cellar_17_19_altavista.jpg +office/o3.jpg +locker_room/locker_room_google_0227.jpg +corridor/p1010069_c.jpg +deli/deli_47_17_flickr.jpg +poolinside/69214_1.jpg +mall/mbk_center.jpg +bookstore/bookstore_41_04_altavista.jpg +computerroom/Salle_Informatique_Bellavista_060831_2_1.jpg +trainstation/gare_87_18_flickr.jpg +gym/gimnasio_02_04_altavista.jpg +artstudio/art_painting_studio_01_10_altavista.jpg +casino/casino_0265.jpg +dentaloffice/dental_office_46_03_altavista.jpg +grocerystore/shop14.jpg +corridor/p1010072_c.jpg +bakery/144215_Delicious_bakery_0.jpg +jewelleryshop/jewelry_store_case_1_9_21_.jpg +locker_room/locker_room_google_0242.jpg +studiomusic/fqtr_estudio.jpg +bowling/bowling_0087.jpg +restaurant_kitchen/restaurant_kitchen_google_0106.jpg +clothingstore/Lacys_4.jpg +auditorium/d38_img_1758_1__145.jpg +fastfood_restaurant/dining_room.jpg +gym/MSAC_Gym_20061515.jpg +nursery/nursery1.jpg +winecellar/Restaurant_Wine_Cellar_larg.jpg +meeting_room/conference_room4.jpg +casino/casino_0157.jpg +library/store.jpg +library/association_bibliotheque.jpg +gym/gimnasio_40_24_flickr.jpg +casino/casino_0455.jpg +hospitalroom/HospitalRoom.jpg +nursery/baba7.jpg +children_room/AT_99_1_7839_22_l.jpg +toystore/speelgoed_54_22_flickr.jpg +lobby/erasme_acceuil.jpg +church_inside/3810071_l.jpg +elevator/elevator_google_0045.jpg +meeting_room/conference_room_600.jpg +restaurant_kitchen/restaurant_kitchen_google_0094.jpg +bakery/new_bakery_33_09_altavista.jpg +florist/floreria_05_07_flickr.jpg +hairsalon/onglet_salon_d_application_paragraphe_coiffure.jpg +movietheater/movietheater_google_0035.jpg +museum/museum_127_04_flickr.jpg +office/office17.jpg +bowling/bowling_0111.jpg +gym/HO_00_02_5304_28A_l.jpg +closet/closet12345.jpg +children_room/hiemstra_011_19_.jpg +pantry/pantry_145_11_flickr.jpg +movietheater/movietheater_google_0040.jpg +auditorium/auditorium_back_30.jpg +garage/GarageInside1.jpg +library/763634302_e25f44402d.jpg +lobby/lobby6.jpg +nursery/enfant2.jpg +subway/subway_0478.jpg +bar/bar_0056.jpg +church_inside/kirche_rueckansicht.jpg +gym/refurbished_gym_equipment.jpg +restaurant_kitchen/restaurant_kitchen_google_0092.jpg +closet/LargeWalkin.jpg +bowling/bowling_0145.jpg +closet/JLH_deluxemaplea.jpg +bathroom/interior015.jpg +inside_bus/inside_bus_026.jpg +deli/deli_34_20_flickr.jpg +garage/3_CAR_GARAGE_1_1_25782352_std.jpg +inside_subway/inside_subway_0269.jpg +studiomusic/364906b0.jpg +shoeshop/zapato_1.jpg +florist/fleuriste_69.jpg +nursery/2008_08_05_abc_nursery.jpg +bakery/boulangerie_04_12_altavista.jpg +florist/floreria_03_18_flickr.jpg +library/207157437_14c21369e9.jpg +classroom/classroom02.jpg +bowling/bowling_0078.jpg +stairscase/AT_04_03_2000_52_l.jpg +jewelleryshop/412531_2.jpg +meeting_room/conf03.jpg +artstudio/art_painting_studio_24_02_altavista.jpg +artstudio/art_painting_studio_15_16_altavista.jpg +jewelleryshop/inside_18_.jpg +kitchen/int35.jpg +dining_room/lv_02_03_9714_10_l.jpg +garage/CustomGarage006_1.jpg +toystore/165.jpg +bookstore/bookstore72.jpg +warehouse/warehouse_0235.jpg +inside_subway/inside_subway_0248.jpg +jewelleryshop/joyeria_156_16_flickr.jpg +bathroom/indoor_0332.jpg +garage/InsideDoor.jpg +hospitalroom/20080116aslocscreen3_500.jpg +gym/gimnasio_21_14_altavista.jpg +library/bibliotheaaak.jpg +church_inside/243069.jpg +hairsalon/hair_salon.jpg +toystore/109_0940.jpg +dining_room/indoor_0314.jpg +restaurant/restaurant_12_01_altavista.jpg +shoeshop/013D2RIO001_1.jpg +lobby/lobby56.jpg +greenhouse/greenhouse_981.jpg +nursery/babys_room.jpg +deli/deli_68_06_flickr.jpg +waitingroom/27_blood_donation_waiting_full.jpg +warehouse/warehouse_0075.jpg +buffet/lg_buffet_table.jpg +children_room/indoor_playroom_27_.jpg +museum/museo_124_20_flickr.jpg +auditorium/c54884a_19601d8_b_1__142.jpg +gameroom/OR_99_3_4797_22_l.jpg +stairscase/N190079.jpg +corridor/couloir_ch1_5e.jpg +locker_room/locker_room_google_0132.jpg +bathroom/indoor_0364.jpg +florist/florist_26_04_flickr.jpg +laboratorywet/laboratorio_quimica_07_11_altavista.jpg +hospitalroom/hospital_room_lighting.jpg +waitingroom/waiting_room03.jpg +casino/casino_0452.jpg +children_room/100_1678_4_.jpg +hairsalon/salon1_gr.jpg +warehouse/warehouse_0413.jpg +toystore/299724113_39b3a2b7f8.jpg +bakery/boulangerie_50_12_yahoo.jpg +auditorium/ptamphi_1__165.jpg +hairsalon/salon2.jpg +livingroom/indoor_0311.jpg +cloister/Picture159.jpg +auditorium/auditorium_from_stage_1__44.jpg +fastfood_restaurant/DSCF0039.jpg +elevator/elevator_google_0091.jpg +mall/31990541_ShanghaiDepartmentStoreNanjingRoad002.jpg +movietheater/sala_de_cine_13_15_altavista.jpg +winecellar/wine_cellar_air_conditioning.jpg +meeting_room/conference8.jpg +hospitalroom/room232.jpg +restaurant_kitchen/restaurant_kitchen_google_0086.jpg +bowling/bowling_0176.jpg +tv_studio/tv_studio_40_12_altavista.jpg +gym/118094196_dd8cc14df0.jpg +stairscase/treppe_birke_edelstahl_01.jpg +computerroom/BGEOG_salle_informatique.jpg +stairscase/Treppen_03.jpg +inside_bus/inside_bus_054.jpg +laboratorywet/01exbiochem.jpg +deli/deli_49_18_altavista.jpg +hospitalroom/ToFiladelfia_Hospital_Saddlery.jpg +prisoncell/prison_cell_41_02_altavista.jpg +videostore/videoclub_04_02_yahoo.jpg +closet/closet35.jpg +inside_bus/inside_bus_064.jpg +mall/y1pSu087_GTs3Qjf_zXRR_cQ05_sTqPwFpKHEiAthZJft3pnI3nF082_H06_1yvbjB5hJ0EhbGFFXE.jpg +studiomusic/studio_1.jpg +videostore/video_store_02_09_altavista.jpg +florist/floristeria3.jpg +greenhouse/bob_black_greenhouse.jpg +winecellar/wine_cellar_43_11_altavista.jpg +museum/museo_18_12_altavista.jpg +locker_room/locker_room_google_0052.jpg +operating_room/operating_room_23_20_altavista.jpg +operating_room/surgery_room_06_08_altavista.jpg +museum/museum_44_10_altavista.jpg +airport_inside/airport_inside_0281.jpg +garage/garage_11.jpg +kindergarden/actvitycenterwacr.jpg +livingroom/int4.jpg +greenhouse/invernadero_2.jpg +clothingstore/japan_2006_1153069200_harajuku2.jpg +inside_bus/inside_bus_018.jpg +videostore/blockbuster_11_05_flickr.jpg +subway/subway_0435.jpg +trainstation/estacion_de_ferrocarriles_28_14_altavista.jpg +hospitalroom/IMG_1901.jpg +children_room/fairfield_real_estate_85dogwood_playroom_750_17_.jpg +dentaloffice/dentista_35_11_flickr.jpg +bakery/panaderia_36_07_yahoo.jpg +laboratorywet/wet_lab_12_13_altavista.jpg +laundromat/685px_Laundromat_ontario.jpg +stairscase/int538.jpg +gym/gimnasio_21_11_altavista.jpg +meeting_room/n457000.jpg +trainstation/train_station_01_10_altavista.jpg +library/204942053_a5d52d7746.jpg +office/office1.jpg +closet/closet2_1.jpg +dining_room/int473.jpg +classroom/salle_classe.jpg +concert_hall/Goldenesaal.jpg +restaurant_kitchen/restaurant_kitchen_google_0027.jpg +corridor/c3.jpg +operating_room/surgery_room_19_02_altavista.jpg +hospitalroom/SuperStock_1444R-256189.jpg +jewelleryshop/mobicolor_8416.jpg +laboratorywet/wet_lab_13_04_altavista.jpg +bathroom/indoor_0486.jpg +office/despacho.jpg +bakery/boulangerie_12_11_yahoo.jpg +children_room/img_1896_23_.jpg +bedroom/indoor_0430.jpg +bar/bar_0313.jpg +corridor/c9.jpg +kindergarden/IMG_2325_t600.jpg +clothingstore/url.jpg +deli/deli_23_05_yahoo.jpg +garage/hdts1013_Garage_aft_photo_w609.jpg +dining_room/d8.jpg +poolinside/inside_romney.jpg +fastfood_restaurant/quick.jpg +trainstation/gare_99_24_flickr.jpg +classroom/auingl.jpg +bathroom/bothroom99.jpg +computerroom/dekdi3gv0.jpg +mall/2904502_Podium_shopping_mall_Mandaluyong.jpg +videostore/videoteca_07_05_flickr.jpg +prisoncell/prison_cell_08_19_altavista.jpg +casino/casino_0027.jpg +fastfood_restaurant/Blimpie_Columbia_002.jpg +hospitalroom/hospital_room_08_07_altavista.jpg +buffet/15_The_Buffet_small.jpg +tv_studio/estudio_de_television_01_04_altavista.jpg +classroom/244class.jpg +pantry/bob_connie_kitchen_pantry_after_02.jpg +greenhouse/segu_est.jpg +mall/mall22.jpg +meeting_room/c4.jpg +stairscase/L_Opera_Escalier_pr.jpg +studiomusic/lime_grove_music_studio_bob_foley.jpg +children_room/dsc_0090_16_.jpg +garage/ddt_3_03_garage_interior.jpg +stairscase/3Miguel_Angel_Vestibule_of_the_Laurentian_Library.jpg +grocerystore/P3260270.jpg +nursery/nursery___crib.jpg +operating_room/surgery_room_37_18_altavista.jpg +pantry/12.jpg +subway/subway_0418.jpg +corridor/p1010810_c.jpg +inside_subway/metropolitana_55_12_flickr.jpg +clothingstore/freeClothing.jpg +florist/p1_1.jpg +laundromat/Laundromatyu.jpg +gameroom/CA_97_5_294_22_l.jpg +jewelleryshop/joyeros.jpg +nursery/f3eda62a_8161_459e_9154_08c87eca8f96_player.jpg +tv_studio/estudio_fotografico_84_.jpg +auditorium/9_auditorium_20balcony_20contemporary_20_the_20carlu__20.jpg +casino/casino_0011.jpg +dining_room/d16.jpg +deli/deli_152_23_flickr.jpg +lobby/lobby_122222.jpg +subway/subway_0285.jpg +toystore/speelgoed_78_15_flickr.jpg +auditorium/auditorium_reserved_seating_003_sized_1__45.jpg +laundromat/lavanderia01.jpg +kitchen/kitchen089.jpg +restaurant/restaurant_09_10_altavista.jpg +auditorium/658_1_457_1__14.jpg +locker_room/locker_room_google_0135.jpg +prisoncell/hi_res.jpg +gameroom/AA_A9_GAMEROOM.jpg +artstudio/artist_work_place_07_07_altavista.jpg +garage/Garage_Inside_44.jpg +locker_room/locker_room_google_0186.jpg +grocerystore/Grocery02.jpg +casino/casino_0224.jpg +library/library_bookshelves_large.jpg +mall/p282857_Dsseldorf_Shopping_Mall.jpg +casino/casino_0436.jpg +museum/museo_72_07_flickr.jpg +library/68522859_a36fa01d31.jpg +casino/casino_0434.jpg +hairsalon/radius_main_17Mar2008101648939000.jpg +buffet/109484501_3d010b4367.jpg +library/scaihs_bookstore2.jpg +bedroom/indoor_0588.jpg +bowling/bowling_0003.jpg +tv_studio/xleague_tv_studio_with_steven_tu_76_.jpg +airport_inside/airport_inside_0295.jpg +deli/deli_103_09_flickr.jpg +corridor/c21.jpg +laundromat/lavanderia_72_12_flickr.jpg +dentaloffice/dentist1.jpg +movietheater/102_1__2.jpg +airport_inside/airport_inside_0523.jpg +dentaloffice/dentaloffice06.jpg +computerroom/comproom348.jpg +stairscase/int18.jpg +computerroom/hank_comproom_lg.jpg +dentaloffice/dentista_109_09_flickr.jpg +meeting_room/n457001.jpg +videostore/video_store470.jpg +restaurant_kitchen/restaurant_kitchen_google_0023.jpg +artstudio/artist_studio_33_16_altavista.jpg +warehouse/warehouse_0191.jpg +lobby/Hall1Planta.jpg +movietheater/salle_cinema.jpg +trainstation/gare_102_04_flickr.jpg +mall/center_point.jpg +mall/791.jpg +computerroom/computerroom08.jpg +elevator/elevator_google_0095.jpg +corridor/pasillo2_c.jpg +computerroom/open_computer_room.jpg +kindergarden/DSC05012.jpg +buffet/AsianDeliCounterWeb.jpg +casino/casino_0046.jpg +operating_room/operating_room_24_20_altavista.jpg +stairscase/room192.jpg +videostore/videoclub_03_19_flickr.jpg +bakery/bakery_07_10_yahoo.jpg +dining_room/dining16.jpg +restaurant_kitchen/restaurant_kitchen_google_0017.jpg +florist/florist_29_08_flickr.jpg +subway/subway_0043.jpg +auditorium/auditorium44_113.jpg +bowling/bowling_0175.jpg +airport_inside/airport_inside_0071.jpg +fastfood_restaurant/26338834.jpg +tv_studio/victor_tv_studio_121_.jpg +gameroom/sala_de_juegos_17_01_altavista.jpg +lobby/lobby22345.jpg +movietheater/cinema_altkirch_3_46.jpg +locker_room/locker_room_google_0054.jpg +computerroom/scuola06_2.jpg +lobby/pinelakeLOBBY01large.jpg +waitingroom/development_lab_wait_room_chairs.jpg +bakery/best_bakery_10_17_altavista.jpg +artstudio/artist_studio_49_10_altavista.jpg +fastfood_restaurant/2274247982_b8a09af8c5.jpg +waitingroom/hg_waiting_room_v.jpg +bathroom/room270.jpg +closet/url5678.jpg +jewelleryshop/sanfrancisco_poodle_ga_45_.jpg +livingroom/or_02_04_0211_14_l.jpg +hairsalon/peluqueria1.jpg +bedroom/indoor_0085.jpg +subway/subway_0366.jpg +florist/floreria_05_13_flickr.jpg +closet/elfaDecorBrchWhtDreamCloset_l.jpg +trainstation/gare_133_22_flickr.jpg +dining_room/lv_02_04_10917_23a_l.jpg +cloister/florence_Santa_Maria_Novella_Cloister.jpg +warehouse/warehouse_0081.jpg +laboratorywet/wet_lab_30_06_altavista.jpg +dentaloffice/dentista_128_15_flickr.jpg +laboratorywet/wet_lab_51_06_altavista.jpg +inside_subway/metropolitana_54_11_flickr.jpg +meeting_room/n457014.jpg +poolinside/pool_inside_16_03_altavista.jpg +bathroom/100_0281.jpg +inside_subway/inside_subway_0092.jpg +stairscase/lest_b.jpg +prisoncell/7_Jail_Cells.jpg +elevator/elevator_google_0005.jpg +bowling/bowling_0080.jpg +cloister/cloister2s.jpg +prisoncell/carcel_139_19_flickr.jpg +grocerystore/supermarche467.jpg +fastfood_restaurant/2008_02_mcdonalds_thumb.jpg +dining_room/dining006.jpg +inside_subway/inside_subway_0223.jpg +bakery/bakery_display_case.jpg +restaurant/restaurant_30_06_altavista.jpg +classroom/classroom03.jpg +prisoncell/Prison04.jpg +waitingroom/Waiting_Room_sized.jpg +florist/florist_64_05_flickr.jpg +hospitalroom/Elijah_040.jpg +shoeshop/1.jpg +subway/subway_0336.jpg +tv_studio/tv_studio_09_20_altavista.jpg +mall/GUM_Department_Store.jpg +dentaloffice/KovacsLSC1_web.jpg +movietheater/sala_de_cine_01_18_altavista.jpg +closet/1.jpg +trainstation/train_station_34_15_altavista.jpg +bathroom/dublin___apartamento___29_03_2007_006.jpg +fastfood_restaurant/ElRapido.jpg +gameroom/WedSocial_Graceland_GameRoom_2.jpg +jewelleryshop/joyeria_23_07_altavista.jpg +lobby/savoy_int_vestibule.jpg +movietheater/movietheater_google_0016.jpg +shoeshop/zapateria_03_20_flickr.jpg +office/interior003.jpg +kindergarden/toddler3.jpg +library/bookstore_more_books.jpg +corridor/indoor_0233.jpg +meeting_room/n457002.jpg +inside_bus/inside_bus_050.jpg +deli/deli_43_10_altavista.jpg +meeting_room/n457011.jpg +prisoncell/jail_cell_jpg.jpg +classroom/int57.jpg +locker_room/locker_room_google_0097.jpg +subway/subway_0204.jpg +nursery/nursery6.jpg +kindergarden/two1.jpg +fastfood_restaurant/taco_bell_waikiki_counter.jpg +trainstation/train_station_05_20_altavista.jpg +greenhouse/ART2901025.jpg +bedroom/indoor_0557.jpg +casino/casino_0039.jpg +laboratorywet/wet_lab_40_18_altavista.jpg +deli/new_deli_27_08_altavista.jpg +bowling/bowling_0182.jpg +prisoncell/JailCells.jpg +gameroom/sala_de_juegos_17_14_altavista.jpg +operating_room/operating_room_23_02_altavista.jpg +pantry/pantry_20_09_flickr.jpg +restaurant/restaurant_02_14_altavista.jpg +shoeshop/zapateria_09_15_flickr.jpg +trainstation/gare_148_21_flickr.jpg +casino/casino_0215.jpg +museum/museum_42_03_altavista.jpg +nursery/dsc00680_778004.jpg +operating_room/surgery_room_02_20_altavista.jpg +closet/MainPageCloset2.jpg +fastfood_restaurant/NYBCinside1.jpg +tv_studio/tv_studio_2b_71_.jpg +warehouse/warehouse_0394.jpg +inside_subway/inside_subway_0396.jpg +poolinside/piscine2.jpg +grocerystore/shop18.jpg +artstudio/art_painting_studio_31_09_altavista.jpg +warehouse/warehouse_0488.jpg +concert_hall/p09_symphony.jpg +movietheater/sala_de_cine_06_19_altavista.jpg +bathroom/room316.jpg +hospitalroom/hospitalroom1.jpg +library/fine_arts.jpg +library/image_preview.jpg +toystore/Peluqueria_043.jpg +videostore/02_02.jpg +inside_bus/inside_bus_056.jpg +gameroom/salle_de_jeux_05_19_altavista.jpg +hairsalon/salon_page.jpg +meeting_room/n457007.jpg +videostore/videoteca_06_20_flickr.jpg +elevator/elevator_google_0063.jpg +florist/fleuriste_008.jpg +videostore/videoclub_07_04_flickr.jpg +laundromat/404776986_34fc3c3d65.jpg +toystore/toys_store_43_15_altavista.jpg +bar/bar_0183.jpg +bookstore/bookstore_41_05_flickr.jpg +movietheater/2421694668_810471b4cc_1__7.jpg +gameroom/OR_97_3_5172_33_l.jpg +bedroom/b17.jpg +bowling/bowling_0189.jpg +operating_room/operating_room_11_07_altavista.jpg +buffet/133_3369_IMG.jpg +concert_hall/hall.jpg +dining_room/dining35.jpg +office/office_13.jpg +fastfood_restaurant/food_450.jpg +lobby/int52.jpg +toystore/UMW_Rummage_Before_Boutique_with_dolls_780356.jpg +dentaloffice/tworivers23.jpg +restaurant/restaurante_04_17_altavista.jpg +toystore/CIMG3313.jpg +restaurant/restaurant_05_04_altavista.jpg +restaurant_kitchen/restaurant_kitchen_google_0048.jpg +movietheater/scr_bluetheatre2jan19.jpg +classroom/Classroom4.jpg +laboratorywet/wet_lab_18_02_altavista.jpg +buffet/31248686_d2f7aa4f63.jpg +toystore/jugueteria_14_15_flickr.jpg +bar/bar_0362.jpg +bookstore/Libreria_08_03_altavista.jpg +tv_studio/1189186334_extras_video_1_8_.jpg +closet/custom_closet.jpg +kitchen/kitchen055.jpg +studiomusic/recording_studio.jpg +airport_inside/airport_inside_0040.jpg +children_room/SD_00_03_4446_23_l.jpg +bedroom/indoor_0047.jpg +deli/deli_02_21_yahoo.jpg +pantry/23_org_Pantry.jpg +trainstation/estacion_de_tren_04_17_altavista.jpg +warehouse/warehouse_0111.jpg +bakery/boulangerie_19_13_yahoo.jpg +dining_room/Dining4.jpg +kindergarden/preschool_crafts.jpg +bowling/bowling_0109.jpg +casino/casino_0004.jpg +concert_hall/DInsidefromstage.jpg +bar/bar_0216.jpg +corridor/va_04_01_5000_32_l.jpg +garage/GarageInside2.jpg +artstudio/art_painting_studio_16_08_altavista.jpg +bowling/bowling_0031.jpg +buffet/208671604_b7839a0955.jpg +videostore/video_store.jpg +clothingstore/bg_149.jpg +church_inside/churchinterior02.jpg +mall/mall35.jpg +office/n457028.jpg +buffet/buffet678.jpg +bathroom/indoor_0279.jpg +restaurant/restaurant_51_11_altavista.jpg +nursery/shakery_square.jpg +buffet/P1011257_fs.jpg +church_inside/292054.jpg +tv_studio/set_camera_465x370_98_.jpg +videostore/videoteca_13_12_altavista.jpg +meeting_room/n457022.jpg +operating_room/operating_room_23_11_altavista.jpg +kitchen/kitchen054.jpg +bar/bar_0116.jpg +hairsalon/PELUQUERIA_EROTICA_1155_3.jpg +laundromat/img_2196was.jpg +studiomusic/Beach_Studio.jpg +prisoncell/pariscellR_450x348.jpg +hairsalon/salon_karin_pc080164.jpg +restaurant_kitchen/restaurant_kitchen_google_0033.jpg +classroom/Classroom11.jpg +gameroom/AT_04_05_5000_58_l.jpg +movietheater/sala_cine2.jpg +computerroom/mr_ordinateur.jpg +corridor/IMG_0065.jpg +casino/casino_0160.jpg +shoeshop/eaed369ae9edc95c6c795ba27783.jpg +elevator/elevator_google_0008.jpg +auditorium/auditorium09_104.jpg +museum/museum_01_01_altavista.jpg +tv_studio/0421_6_.jpg +corridor/p1010063_c.jpg +corridor/img_0005.jpg +mall/metcalf_south_09.jpg +bedroom/indoor_0341.jpg +dining_room/dining025.jpg +airport_inside/airport_inside_0169.jpg +corridor/pasillo.jpg +restaurant/Salle_restaurant_reduit.jpg +closet/gallery_1_large_schulte_closets.jpg +corridor/corridora1.jpg +nursery/chambre_enfant_apres.jpg +locker_room/locker_room_google_0015.jpg +children_room/LV_00_03_2844_08_l.jpg +jewelleryshop/30446026.jpg +pantry/pantry_775384.jpg +gameroom/AT_01_2B_5492_21A_l.jpg +bookstore/manga_at_the_bookstore.jpg +dining_room/fw_97_2_0861_5_l.jpg +pantry/2323232327Ffp3323Enu3D32473E33C83E83B83EWSNRCG3D32323B93B844425nu0mrj1_87161114_std.jpg +toystore/toys_store_48_16_altavista.jpg +tv_studio/tv_studio_01_18_altavista.jpg +museum/museum_149_08_flickr.jpg +studiomusic/JUK30_JP6_Hifi_RackLit.jpg +church_inside/malbis_church_altar_big.jpg +elevator/elevator_google_0075.jpg +florist/florist_40_12_altavista.jpg +mall/mall27.jpg +buffet/ImpBuffet_0268.jpg +deli/new_deli_21_15_altavista.jpg +hairsalon/Image016_17.jpg +bakery/bakery_23_06_yahoo.jpg +inside_bus/inside_bus_046.jpg +locker_room/locker_room_google_0220.jpg +operating_room/surgery_room_50_15_altavista.jpg +lobby/6059968_lobby.jpg +restaurant_kitchen/restaurant_kitchen_google_0015.jpg +clothingstore/MVC_014F.jpg +artstudio/homeoff006.jpg +studiomusic/djban_curso_dj_01.jpg +museum/museum_116_08_flickr.jpg +kitchen/kitchen15.jpg +casino/casino_0235.jpg +studiomusic/Estudio_Musica_1.jpg +deli/deli_110_20_flickr.jpg +dentaloffice/farr_11.jpg +shoeshop/zapateria_04_18_flickr.jpg +children_room/web_playroom_70_.jpg +children_room/2369460826_37998bb932_7_.jpg +dentaloffice/dentista_09_05_altavista.jpg +pantry/pantry_91_15_flickr.jpg +trainstation/room213.jpg +bar/bar_0126.jpg +greenhouse/letter_greenhouse.jpg +pantry/web_pantr1.jpg +dining_room/sa_97_4_757_21_l.jpg +nursery/nursery5.jpg +laboratorywet/wet_lab_45_04_altavista.jpg +lobby/Raffles_Marina_lobby.jpg +pantry/pantry_140_10_flickr.jpg +tv_studio/tv_studio_11_16_altavista.jpg +garage/onsite_insidebg.jpg +movietheater/prod_photo1_377_1146674705_1__32.jpg +buffet/450407910_0c165a37aa.jpg +church_inside/Kirche_Mitterdorf_0050_web.jpg +closet/closet_ts.jpg +garage/gar7.jpg +waitingroom/sala_de_espera_02_04_altavista.jpg +clothingstore/Lacys_6.jpg +buffet/june_29_FOOD_BUFFET_002.jpg +clothingstore/STORE_032.jpg +laboratorywet/wet_lab_10_14_altavista.jpg +toystore/magasin_jouet_39_19_altavista.jpg +casino/casino_0476.jpg +waitingroom/waitingroom.jpg +livingroom/l6.jpg +inside_subway/inside_subway_0277.jpg +fastfood_restaurant/HK_Pizza_Hut.jpg +inside_bus/inside_bus_013.jpg +florist/florist_15_14_altavista.jpg +gameroom/smallsp001.jpg +classroom/Wicoff_Classroom_1.jpg +corridor/p1010073_c.jpg +deli/deli_149_08_flickr.jpg +elevator/elevator_google_0026.jpg +inside_subway/inside_subway_0254.jpg +warehouse/warehouse_0176.jpg +laundromat/lavanderia_53_15_flickr.jpg +kitchen/kitchen033.jpg +auditorium/amphi_gb2_1_1__22.jpg +locker_room/locker_room_google_0199.jpg +dining_room/dining013.jpg +kindergarden/classroom12.jpg +laundromat/lavanderia_51_19_flickr.jpg +livingroom/living24.jpg +bowling/bowling_0042.jpg +restaurant/restaurant_29_06_altavista.jpg +gameroom/gameroom_c1.jpg +gameroom/salle_de_jeux_03_12_altavista.jpg +waitingroom/waiting_room_large.jpg +bakery/bakery_01_17_yahoo.jpg +bathroom/interior017.jpg +gameroom/OR_99_9_0039_06_l.jpg +warehouse/warehouse_0006.jpg +airport_inside/airport_inside_0204.jpg +artstudio/art_painting_studio_04_17_altavista.jpg +bedroom/roomscan2.jpg +prisoncell/Men_Jail2.jpg +laundromat/Ricks_laundromat_pictures_april_2007_133.jpg +pantry/pantry_87_18_flickr.jpg +warehouse/warehouse_0084.jpg +elevator/elevator_google_0054.jpg +grocerystore/super_market.jpg +laundromat/3170849.jpg +deli/deli_111_14_flickr.jpg +grocerystore/Supermercado1.jpg +subway/subway_0173.jpg +corridor/allee2yp.jpg +library/bibliotheque_0908.jpg +pantry/pantry_43_23_flickr.jpg +meeting_room/conference2.jpg +pantry/pantry_48_07_flickr.jpg +nursery/nursery_005.jpg +shoeshop/zapateria_27_21_flickr.jpg +kindergarden/DSC000512.jpg +classroom/classroom5.jpg +florist/11528159612.jpg +florist/ildo_encabo_150206_c_ok.jpg +bathroom/indoor_0124.jpg +elevator/elevator_google_0006.jpg +tv_studio/35_20_.jpg +museum/museo_157_13_flickr.jpg +nursery/completed_nursery_010.jpg +restaurant_kitchen/restaurant_kitchen_google_0037.jpg +bowling/bowling_0149.jpg +dining_room/room503.jpg +inside_subway/inside_subway_0169.jpg +museum/museo_137_20_flickr.jpg +toystore/59516206_45f74119d6.jpg +laboratorywet/wet_lab_12_17_altavista.jpg +bedroom/b29.jpg +bookstore/librairie_gif.jpg +museum/museo_158_20_flickr.jpg +concert_hall/ven_chall_big.jpg +florist/floreria_08_21_flickr.jpg +computerroom/ordinateurs.jpg +concert_hall/photo2.jpg +locker_room/locker_room_google_0112.jpg +mall/lakeside_center_42.jpg +concert_hall/milwaukeetheatre.jpg +nursery/babyroomshelves.jpg +videostore/videoclub_09_19_flickr.jpg +airport_inside/airport_inside_0107.jpg +locker_room/locker_room_google_0066.jpg +toystore/speelgoed_45_01_flickr.jpg +closet/MasterSuiteLaminateWI.jpg +airport_inside/airport_inside_0163.jpg +hairsalon/mfotos_peluqueria_001.jpg +church_inside/P1000169.jpg +buffet/buffetmetro_533.jpg +stairscase/N457080.jpg +movietheater/cine_sony.jpg +gameroom/room397.jpg +office/ins26.jpg +fastfood_restaurant/quiznos020508a.jpg +bedroom/indoor_0215.jpg +prisoncell/Jail_DSC00095.jpg +church_inside/kirche_innen_2.jpg +dentaloffice/dental_office_20_20_altavista.jpg +library/New_York_Public_Library5.jpg +buffet/1600963137_2dc4c3f005.jpg +laundromat/lavanderia_19_19_flickr.jpg +hairsalon/salon1.jpg +deli/deli_121_18_flickr.jpg +mall/abasto_mall.jpg +tv_studio/tv_studio_03_03_altavista.jpg +laundromat/maytagLAUNDNORTHVIEW.jpg +office/despacho_medico_2.jpg +bar/bar_0081.jpg +classroom/classroom12.jpg +deli/deli_27_12_yahoo.jpg +jewelleryshop/rewardsstore2_27_.jpg +nursery/photo_5353117.jpg +dining_room/int294.jpg +greenhouse/invernadero01.jpg +jewelleryshop/img_5204_36_.jpg +bookstore/Libreria_27_16_altavista.jpg +laundromat/lavanderia_60_01_flickr.jpg +florist/florist_28_12_flickr.jpg +operating_room/operating_room_25_02_altavista.jpg +fastfood_restaurant/Subway1.jpg +gym/gym11.jpg +kindergarden/classroom_october.jpg +cloister/claustro_san_francisco.jpg +hospitalroom/Afghan_Hospital_Room_sized.jpg +movietheater/movietheater_google_0057.jpg +church_inside/FreeFoto_castle_30_36.jpg +bakery/boulangerie_32_16_yahoo.jpg +movietheater/projection_hippo_1__59.jpg +office/office10.jpg +bowling/bowling_0055.jpg +nursery/2502867662_5fc6c074f4.jpg +tv_studio/tv_studio4_117_.jpg +library/meura1.jpg +pantry/pantry_97_19_flickr.jpg +classroom/classroom86.jpg +bookstore/bookstore_02.jpg +garage/Garage104_w560h420.jpg +shoeshop/ZAPATERIA43.jpg +trainstation/gare_63_02_flickr.jpg +hairsalon/Salon254.jpg +kitchen/int362.jpg +fastfood_restaurant/rss_d.jpg +jewelleryshop/sjstore2_28_.jpg +shoeshop/gallery342.jpg +gym/gimnasio_17_08_altavista.jpg +restaurant/restaurant_31_10_altavista.jpg +garage/Garage_After.jpg +studiomusic/60984.jpg +gameroom/AT_01_6B_5479_25_l.jpg +kitchen/int423.jpg +children_room/playroom_1_34_.jpg +classroom/sala_de_clases.jpg +tv_studio/dscn9703_41_.jpg +artstudio/art_painting_studio_01_13_altavista.jpg +grocerystore/zoom_1_1188095.jpg +dining_room/int468.jpg +subway/subway_0172.jpg +kitchen/cdmc1146.jpg +children_room/playroom6_31_.jpg +inside_bus/inside_bus_016.jpg +nursery/mayalau_robot_nursery.jpg +operating_room/surgery_room_08_16_altavista.jpg +bedroom/indoor_0113.jpg +church_inside/kirche_innen.jpg +bowling/bowling_0027.jpg +meeting_room/c20.jpg +jewelleryshop/joyeria_01g.jpg +inside_bus/inside_bus_007.jpg +warehouse/warehouse_0040.jpg +grocerystore/supermarkt_fr.jpg +locker_room/locker_room_google_0046.jpg +tv_studio/21lg_15_.jpg +closet/closet_2.jpg +gym/Gym2_png.jpg +poolinside/pool_inside_24_13_altavista.jpg +greenhouse/Greenhouse_2.jpg +stairscase/CA_97_1_289_24A_l.jpg +dentaloffice/dental_office_01_04_altavista.jpg +bowling/bowling_0166.jpg +dining_room/dining41.jpg +bakery/panaderia_49_21_yahoo.jpg +closet/closet01.jpg +subway/subway_0224.jpg +auditorium/amphi01_1__77.jpg +dentaloffice/dental_office_49_03_altavista.jpg +library/library05.jpg +casino/casino_0049.jpg +pantry/11.jpg +bathroom/room315.jpg +concert_hall/KnightHallMiami460.jpg +inside_bus/inside_bus_011.jpg +movietheater/auditorium609_37.jpg +inside_subway/inside_subway_0259.jpg +bathroom/b1.jpg +closet/Clothed_Closet_photo_300px_22Mar00.jpg +inside_subway/inside_subway_0191.jpg +poolinside/poolMain.jpg +trainstation/gare_100_19_flickr.jpg +dentaloffice/dental_office_17_06_altavista.jpg +lobby/sLobby16.jpg +concert_hall/concert_Hall.jpg +florist/florist_19_14_altavista.jpg +church_inside/283421883_0a184e7b4d.jpg +library/112630581_f21ae30872.jpg +closet/Master-Closet.jpg +jewelleryshop/20040407a01.jpg +deli/deli_59_09_flickr.jpg +gameroom/317_salle_de_jeux.jpg +hospitalroom/Hospital_Room_30.jpg +meeting_room/n457004.jpg +cloister/2474769210_7847df4894.jpg +bakery/panaderia_49_08_yahoo.jpg +movietheater/cinema2_47.jpg +bakery/boulangerie_01_05_yahoo.jpg +nursery/url.jpg +shoeshop/zapateria_07_11_flickr.jpg +garage/XF_HOMES_400.jpg +laundromat/LV_02_03_9714_21_l.jpg +meeting_room/n457037.jpg +greenhouse/Fabricated_Metal_Plastic_Tube_Greenhouse.jpg +subway/subway_0337.jpg +laboratorywet/laboratorio_quimica_12_15_altavista.jpg +meeting_room/conf02.jpg +studiomusic/DSCN3237M.jpg +clothingstore/Bookstore_Interior_rdax_90.jpg +lobby/sLobby10.jpg +bar/bar_0066.jpg +classroom/Laura_Lander_SMART_Classroom.jpg +gameroom/Gameroom7.jpg +airport_inside/airport_inside_0253.jpg +bedroom/indoor_0267.jpg +church_inside/metropolitana_160_23_flickr.jpg +laundromat/lavanderia_09_22_flickr.jpg +livingroom/iship.jpg +studiomusic/DCOM_Music_lg_nws_2164_5043.jpg +videostore/videostore2.jpg +nursery/babys_room_crib_714240.jpg +bakery/boulangerie_31_05_yahoo.jpg +clothingstore/Lulas_017_VG6D.jpg +bar/bar_0372.jpg +dining_room/d13.jpg +clothingstore/home0001.jpg +kitchen/img_6613.jpg +winecellar/bodega_44_19_flickr.jpg +nursery/baby_room_sm.jpg +waitingroom/icu_waiting_room_1.jpg +meeting_room/conf27.jpg +office/office8.jpg +grocerystore/MG_56_belo_grocery_2.jpg +bowling/bowling_0088.jpg +bedroom/b12.jpg +gameroom/OR_02_05_0481_11_l.jpg +museum/museo_161_02_flickr.jpg +nursery/perfect_nursery_shot.jpg +bakery/new_bakery_16_09_altavista.jpg +nursery/idkidsc0301_png.jpg +cloister/cloister_med.jpg +church_inside/243088.jpg +florist/florist_41_11_flickr.jpg +computerroom/informatica.jpg +videostore/videotheque_02_01_flickr.jpg +dentaloffice/dentaloffice05.jpg +nursery/chambre_enfant_avant.jpg +bedroom/bed2.jpg +laboratorywet/wet_lab_46_11_altavista.jpg +buffet/413438433_cdcef3db3e.jpg +poolinside/piscina_cubierta_02_13_altavista.jpg +clothingstore/d0001.jpg +gym/SalleMuscu.jpg +toystore/toys_store_01_08_altavista.jpg +hospitalroom/causulty_room.jpg +movietheater/movie-theater.jpg +mall/Rome_Shopping_mall.jpg +warehouse/warehouse_0056.jpg +museum/museum_41_03_altavista.jpg +office/ph_02_03_4680_35_l.jpg +pantry/62277822_SbYbMw5F.jpg +kindergarden/classroom233.jpg +stairscase/HO_00_04_5808_09A_l.jpg +clothingstore/1.jpg +greenhouse/gewaechshaus_4.jpg +restaurant_kitchen/restaurant_kitchen_google_0022.jpg +prisoncell/Photo28120.jpg +jewelleryshop/1ct1.jpg +videostore/videoclub_04_17_flickr.jpg +prisoncell/large_new-jail-cell.jpg +waitingroom/waiting_room_32_20_altavista.jpg +nursery/313886124_6ed775cde1.jpg +computerroom/biblioteca1.jpg +movietheater/movietheater_google_0051.jpg +church_inside/steinh2.jpg +classroom/CLASSE3.jpg +airport_inside/airport_inside_0176.jpg +dentaloffice/dentaire_27_16_altavista.jpg +museum/museum_38_03_altavista.jpg +pantry/despensa_02_20_altavista.jpg +operating_room/operating_room_01_20_altavista.jpg +buffet/413223473_be5a4b6fc3.jpg +nursery/babyroom003.jpg +clothingstore/storesshot2.jpg +museum/museo_01_06_flickr.jpg +deli/deli_10_13_altavista.jpg +corridor/c8.jpg +fastfood_restaurant/dsc00878smdj1.jpg +garage/Garage inside.jpg +cloister/claustre.jpg +gym/gym_21_01_altavista.jpg +warehouse/warehouse_0204.jpg +hospitalroom/hospital_room_01_16_altavista.jpg +restaurant/restaurante_04_20_altavista.jpg +shoeshop/11511434951.jpg +museum/museo_33_14_altavista.jpg +casino/casino_0352.jpg +garage/pic.jpg +mall/supermarkt.jpg +florist/floristeria.jpg +locker_room/locker_room_google_0013.jpg +stairscase/PA_07_01_1000_38_m.jpg +pantry/7.jpg +gym/gym_01_01_altavista.jpg +laboratorywet/wet_lab_10_15_altavista.jpg +lobby/09_Vestibulo.jpg +restaurant/restaurante_30_02_altavista.jpg +restaurant_kitchen/restaurant_kitchen_google_0107.jpg +hairsalon/DSCN3259_modifie_1.jpg +livingroom/indoor_0260.jpg +studiomusic/studio_a.jpg +livingroom/easyst013.jpg +laboratorywet/wet_lab_34_05_altavista.jpg +restaurant/IMG_0350.jpg +restaurant_kitchen/restaurant_kitchen_google_0011.jpg +tv_studio/lakeview_desk_013_50_.jpg +prisoncell/jail_hallway.jpg +casino/casino_0035.jpg +stairscase/AT_01_6B_5479_32_l.jpg +deli/deli_10_17_yahoo.jpg +gameroom/SD_00_06_51275_24_l.jpg +children_room/VR_06_01_1000_95_l.jpg +bar/bar_0021.jpg +videostore/videoteca_07_03_flickr.jpg +poolinside/room154.jpg +locker_room/locker_room_google_0019.jpg +grocerystore/Bashas_Int2_.jpg +poolinside/0310_piscines_1.jpg +fastfood_restaurant/KFC_Interior_1.jpg +restaurant_kitchen/restaurant_kitchen_google_0036.jpg +closet/0207_closet.jpg +shoeshop/pmv810_en.jpg +subway/subway_0117.jpg +bowling/bowling_0041.jpg +clothingstore/bookstore_photo.jpg +stairscase/treppe_neu_g.jpg +studiomusic/control.jpg +winecellar/wine_cellar_02_13_altavista.jpg +waitingroom/salon_accueil.jpg +concert_hall/concert_hall_lg.jpg +concert_hall/segerstrom_concert_hall_01_1.jpg +gameroom/sala_de_juegos_14_06_altavista.jpg +laundromat/lavanderia_52_19_flickr.jpg +clothingstore/Mvc_006f.jpg +fastfood_restaurant/blimpies.jpg +kindergarden/DSC01105.jpg +restaurant_kitchen/restaurant_kitchen_google_0077.jpg +casino/casino_0002.jpg +inside_subway/inside_subway_0286.jpg +gameroom/AT_05_05_5000_43_l.jpg +gym/int837.jpg +inside_subway/metropolitana_19_20_flickr.jpg +bedroom/indoor_0285.jpg +jewelleryshop/silver_shop_11.jpg +computerroom/aut_0003.jpg +livingroom/living69.jpg +pantry/pantry_12_11_altavista.jpg +subway/subway_0061.jpg +mall/mall23.jpg +casino/casino_0034.jpg +operating_room/operating_room_11_12_altavista.jpg +church_inside/as_kirche.jpg +elevator/elevator_google_0069.jpg +livingroom/l10.jpg +subway/subway_0323.jpg +dining_room/n190003.jpg +winecellar/bodega_107_06_flickr.jpg +clothingstore/100_0086.jpg +artstudio/famous_painters_studio_01_12_altavista.jpg +tv_studio/2d_1_.jpg +mall/HoustonGalleria_XMas.jpg +pantry/pantry_149_06_flickr.jpg +pantry/WhiteWIPantry.jpg +waitingroom/waiting.jpg +dining_room/or_02_01_0743_30_l.jpg +fastfood_restaurant/32_The_Angkor_Fast_Food_Restaurant.jpg +dentaloffice/dental_office_01_12_altavista.jpg +stairscase/N28.jpg +dentaloffice/dentista_123_04_flickr.jpg +poolinside/pool_inside_26_10_altavista.jpg +bedroom/indoor_0289.jpg +dentaloffice/dental_office_19_20_altavista.jpg +florist/florist_32_09_flickr.jpg +trainstation/train_station_32_10_altavista.jpg +deli/deli_59_06_flickr.jpg +restaurant/bistro_49_08_altavista.jpg +museum/museo_03_01_flickr.jpg +tv_studio/philhulettlecture_95_.jpg +computerroom/IM000834.jpg +bar/bar_0594.jpg +kindergarden/Lower_Kindergarten.jpg +children_room/reading_circle_time_37_.jpg +buffet/dessert_buffet17_11_2007_9_14_28_PM.jpg +bar/bar_0483.jpg +office/int61.jpg +bakery/panetteria_13_16_altavista.jpg +dentaloffice/IMG_0130_jpg_450x450.jpg +locker_room/locker_room_google_0003.jpg +mall/mall25.jpg +bathroom/bath303.jpg +jewelleryshop/garnetsDSC00059.jpg +gym/GymInt1.jpg +hairsalon/salon345.jpg +restaurant_kitchen/restaurant_kitchen_google_0034.jpg +closet/closet.jpg +jewelleryshop/boutiqueoo.jpg +pantry/03_pantry_storage_organization_lg.jpg +bedroom/bedroom27.jpg +winecellar/cave_champagne_07_11_altavista.jpg +museum/museum_02_09_altavista.jpg +toystore/jugueteria_02_08_altavista.jpg +poolinside/schwimmbad333.jpg +toystore/jugueteria_21_03_flickr.jpg +dining_room/dining22.jpg +operating_room/surgery_room_09_10_altavista.jpg +restaurant/home_12.jpg +livingroom/living29.jpg +toystore/jugueteria_05_03_flickr.jpg +dentaloffice/dental_office_21_02_altavista.jpg +bathroom/bath166.jpg +cloister/1526793682_7d53006762.jpg +garage/SantaRosaGarage_small_.jpg +meeting_room/n457021.jpg +videostore/P1020026.jpg +kindergarden/lokilani_room_1.jpg +concert_hall/Music_Concert_Hall_3.jpg +office/or_02_03_0212_11_l.jpg +bookstore/Librairie_02.jpg +children_room/PO_06_02_2000_71_l.jpg +classroom/P1010077.jpg +cloister/claustroreyes.jpg +closet/child2.jpg +videostore/videoclub_04_09_flickr.jpg +children_room/dramatic_play_room_42_.jpg +cloister/Pamplona_catedral_claustro.jpg +laundromat/MVC_003F.jpg +movietheater/movietheater_google_0052.jpg +livingroom/roomscan17.jpg +buffet/322497200_a22d028e6f.jpg +waitingroom/waitingarea.jpg +gym/gimnasio_09_15_altavista.jpg +warehouse/warehouse_0371.jpg +greenhouse/2026_2006_Grimm_s_Gardens_Greenhouse.jpg +jewelleryshop/jewelry_store_interior_design_751036_19_.jpg +elevator/elevator_google_0048.jpg +meeting_room/c10.jpg +meeting_room/n457013.jpg +buffet/NOR_BuffetFood_300x225_300x225.jpg +hairsalon/11549402671.jpg +winecellar/wine_storage_26_12_altavista.jpg +pantry/pantry_85_06_flickr.jpg +deli/deli_06_15_yahoo.jpg +library/ins22.jpg +greenhouse/greenhouse8.jpg +laundromat/oaklandlaundromat_main_full.jpg +gym/gimnasio_167_12_flickr.jpg +garage/Garage_3_view_3_interior.jpg +jewelleryshop/joyeria_rometsch03.jpg +bakery/boulangerie_36_01_altavista.jpg +operating_room/surgery_room_17_15_altavista.jpg +bar/bar_0261.jpg +mall/ins23.jpg +waitingroom/WtRoomJan06.jpg +bedroom/indoor_0338.jpg +restaurant_kitchen/restaurant_kitchen_google_0090.jpg +mall/wafi_shopping_center.jpg +trainstation/gare_80_11_flickr.jpg +clothingstore/cupido_vestiti.jpg +nursery/cotsl.jpg +shoeshop/zapateria10.jpg +concert_hall/baxter3.jpg +shoeshop/zapateria_23_03_flickr.jpg +elevator/elevator_google_0024.jpg +clothingstore/77_bookstore.jpg +subway/metropolitana_20_02_altavista.jpg +cloister/claustro34.jpg +meeting_room/conf22.jpg +deli/deli_98_21_flickr.jpg +computerroom/COMPUTER_ROOM2.jpg +museum/museum_20_19_altavista.jpg +auditorium/3_10_08auditorium2_1__7.jpg +laboratorywet/laboratorio_quimica_10_01_altavista.jpg +pantry/Close_Mesh_Pantry_w_Drawer.jpg +subway/subway_0310.jpg +warehouse/warehouse_0186.jpg +church_inside/st_anne_church_budapest_inside.jpg +auditorium/auditorium3_l_1__111.jpg +garage/garage66.jpg +library/biblio_livre.jpg +livingroom/living88.jpg +auditorium/auditorium2_l_1__108.jpg +bedroom/linama_014.jpg +deli/new_deli_39_04_altavista.jpg +movietheater/movietheater_google_0037.jpg +dentaloffice/dental_office_11_02_altavista.jpg +laundromat/laundromat_shark_perspectiv.jpg +casino/casino_0025.jpg +church_inside/blasii_kirche_nordhausen.jpg +corridor/couloir06.jpg +greenhouse/Gewaechshaus.jpg +laundromat/kachel10.jpg +subway/subway_0066.jpg +clothingstore/boutique6.jpg +computerroom/computerroom04.jpg +classroom/classroom7.jpg +concert_hall/Overture_Hall_1.jpg +shoeshop/zapateria_26_20_flickr.jpg +florist/floreria_04_03_flickr.jpg +restaurant/restaurant_11_07_altavista.jpg +toystore/toys_store_12_18_altavista.jpg +meeting_room/c13.jpg +closet/MasterSuiteLrg.jpg +greenhouse/celosie_02.jpg +mall/crocker_galleria_735089.jpg +restaurant_kitchen/restaurant_kitchen_google_0051.jpg +office/office20.jpg +livingroom/n14m.jpg +movietheater/sallecine_72.jpg +dentaloffice/dentista_45_10_altavista.jpg +operating_room/surgery_room_07_13_altavista.jpg +kitchen/kitchenblack.jpg +inside_bus/inside_bus_087.jpg +jewelleryshop/2711107.jpg +gameroom/8a_gameroom2.jpg +greenhouse/ESTUFA.jpg +bathroom/bath181.jpg +grocerystore/shop12.jpg +poolinside/pool_inside_01_14_altavista.jpg +subway/subway_0286.jpg +kitchen/cdmc1170.jpg +operating_room/operating_room_05_20_altavista.jpg +florist/florist_02_06_altavista.jpg +inside_bus/inside_bus_059.jpg +kindergarden/Preschool_classroom78.jpg +hospitalroom/IMG_0625.jpg +poolinside/Pool_inside_birdcage_1641Pas2202.jpg +winecellar/bodega_100_24_flickr.jpg +library/la_bibliotheque_de_la_tour_du_valat.jpg +bathroom/indoor_0342.jpg +inside_subway/inside_subway_0057.jpg +buffet/Maritimo_Restaurant_Buffet.jpg +church_inside/metropolitana_83_13_flickr.jpg +dentaloffice/office3.jpg +gym/gym04.jpg +bathroom/indoor_0465.jpg +operating_room/surgery_room_17_07_altavista.jpg +poolinside/buddysbi.jpg +closet/lamCloset.jpg +computerroom/Room_2520116E.jpg +auditorium/amphitheatre_bastille_1__23.jpg +bar/bar_0296.jpg +laundromat/100_0125kleinNEW.jpg +movietheater/findingnemo1_480x320_1__20.jpg +kindergarden/DSC000552.jpg +florist/tienda_005.jpg +gym/southwaterGym.jpg +florist/floristeria1.jpg +kitchen/int34.jpg +restaurant/salle_restaurant2.jpg +inside_subway/inside_subway_0055.jpg +gym/biosite_gym.jpg +artstudio/art_painting_studio_04_20_altavista.jpg +bakery/bakery_19_10_yahoo.jpg +church_inside/CatholicChurchInteriorCapeMayNJ.jpg +pantry/WhiteRaisedPanelRI_Pantry.jpg +prisoncell/1_jail_cell.jpg +inside_bus/inside_bus_006.jpg +meeting_room/c2.jpg +airport_inside/airport_inside_0294.jpg +bar/bar_0011.jpg +church_inside/church13.jpg +closet/master_SCI132.jpg +inside_subway/inside_subway_0243.jpg +dentaloffice/dental_room.jpg +laboratorywet/Wet_lab.jpg +winecellar/1184099831156_02.jpg +florist/florist_02_02_altavista.jpg +buffet/buffet_FoodLine1.jpg +poolinside/lignon_piscine.jpg +bedroom/b2.jpg +bakery/best_bakery_02_07_altavista.jpg +hairsalon/peluqueria.jpg +waitingroom/waiting_room_closeup_1.jpg +greenhouse/greenhouse842.jpg +subway/subway_0272.jpg +cloister/cloister1ms.jpg +movietheater/image_preview_1__51.jpg +nursery/colorful_mod_nursery_amazing_wall_painting_techniques_8178.jpg +mall/Moscow2006ssIMG_7450.jpg +clothingstore/Paris_Boutique_Inside_Store.jpg +florist/florist_35_17_altavista.jpg +shoeshop/pht_mag_02.jpg +waitingroom/sala_de_espera_04_16_altavista.jpg +garage/here_is_a_closer_look_inside_the_garage.jpg +locker_room/locker_room_google_0180.jpg +bedroom/IMG_1555.jpg +stairscase/hall117.jpg +bowling/bowling_0059.jpg +clothingstore/wares2.jpg +mall/CP67791.jpg +mall/800px_Interior_mall_of_america.jpg +deli/deli_131_13_flickr.jpg +mall/mall08.jpg +fastfood_restaurant/guest3.jpg +inside_bus/inside_bus_073.jpg +movietheater/rade88fb_1__60.jpg +warehouse/warehouse_0161.jpg +deli/new_deli_03_01_altavista.jpg +dining_room/dining003.jpg +library/fibiba1.jpg +restaurant_kitchen/restaurant_kitchen_google_0049.jpg +florist/anaisflor480.jpg +bakery/bakery_51_21_yahoo.jpg +studiomusic/studio14.jpg +florist/florist_interior.jpg +restaurant_kitchen/restaurant_kitchen_google_0064.jpg +bar/bar_0106.jpg +children_room/our_house_043_48_.jpg +closet/closet_after_2.jpg +kitchen/room3.jpg +restaurant_kitchen/restaurant_kitchen_google_0080.jpg +bathroom/indoor_0493.jpg +restaurant_kitchen/restaurant_kitchen_google_0102.jpg +bookstore/JR64407_ArtProst_bookstore.jpg +operating_room/surgery_room_43_11_altavista.jpg +bedroom/b26.jpg +waitingroom/general_waiting_area.jpg +restaurant/int131.jpg +shoeshop/zapateria_15_23_flickr.jpg +cloister/cc_cloister_3.jpg +closet/Closet_main_page_415x319.jpg +inside_subway/inside_subway_0040.jpg +bedroom/indoor_0331.jpg +bar/bar_0180.jpg +livingroom/l2.jpg +church_inside/metropolitana_41_08_flickr.jpg +meeting_room/c16.jpg +studiomusic/ControlRoomSm.jpg +tv_studio/pb030044_53_.jpg +nursery/15806.jpg +studiomusic/int769.jpg +inside_subway/inside_subway_0146.jpg +bar/bar_0364.jpg +hospitalroom/Hospital_room_ubt.jpg +bar/bar_0398.jpg +restaurant_kitchen/restaurant_kitchen_google_0085.jpg +airport_inside/airport_inside_0036.jpg +hospitalroom/int180.jpg +hospitalroom/int197.jpg +computerroom/biblioteca_salamultimedia_g.jpg +concert_hall/Feature0202_04x.jpg +bowling/bowling_0208.jpg +winecellar/wine_cellar_48_12_altavista.jpg +computerroom/computer_room.jpg +kitchen/kitchen014.jpg +meeting_room/pz707.jpg +elevator/elevator_google_0080.jpg +bakery/bakery_25_11_yahoo.jpg +mall/main_boutique_b.jpg +movietheater/6_voyager_magazine_256322_1__12.jpg +computerroom/computerroom01.jpg +laboratorywet/laboratorio_quimica_03_15_altavista.jpg +trainstation/gare_22_22_flickr.jpg +inside_subway/inside_subway_0401.jpg +bar/bar_0298.jpg +mall/mall10.jpg +toystore/jugueteria_20_11_flickr.jpg +artstudio/artist_studio_01_05_altavista.jpg +elevator/elevator_google_0029.jpg +kindergarden/daycare03142008062.jpg +office/n457026.jpg +closet/MasterSuiteBoyBR.jpg +bedroom/b10.jpg +dining_room/int553.jpg +operating_room/surgery_room_16_19_altavista.jpg +operating_room/operating_room_06_10_altavista.jpg +subway/subway_0181.jpg +bakery/boulangerie_12_13_yahoo.jpg +classroom/NFA128_classroom.jpg +studiomusic/6176_2.jpg +bathroom/b7.jpg +airport_inside/airport_inside_0008.jpg +buffet/seafoodbuffet.jpg +inside_subway/inside_subway_0094.jpg +inside_subway/metropolitana_39_04_flickr.jpg +waitingroom/photo_office_tour_1.jpg +airport_inside/airport_inside_0225.jpg +casino/casino_0449.jpg +restaurant/restaurant_27_10_altavista.jpg +cloister/Claustro_de_San_Isidoro_0.jpg +inside_subway/inside_subway_0167.jpg +kindergarden/rocking_chair_area_large2.jpg +hospitalroom/DSC01602.jpg +meeting_room/n457006.jpg +inside_subway/inside_subway_0339.jpg +dentaloffice/dentista_94_08_flickr.jpg +fastfood_restaurant/x_panda.jpg +bowling/bowling_0136.jpg +hairsalon/387_photoCommerce_1.jpg +tv_studio/estudio_fabricio_ojeda_87_.jpg +laboratorywet/wet_lab_16_03_altavista.jpg +garage/Hafdal_Garage_008crop.jpg +laboratorywet/laboratorio_quimica_01_13_altavista.jpg +shoeshop/zapateria3.jpg +bookstore/bookstore_21_07_flickr.jpg +hairsalon/Photo6.jpg +office/int230.jpg +warehouse/warehouse_0130.jpg +bowling/bowling_0188.jpg +library/int91.jpg +bedroom/b16.jpg +bakery/panaderia_35_06_yahoo.jpg +church_inside/innenansicht_kirche.jpg +fastfood_restaurant/dunkin_donuts.jpg +deli/deli_81_07_flickr.jpg +garage/garage4_1.jpg +grocerystore/grocery_store01.jpg +hospitalroom/hospital_room_33_10_altavista.jpg +pantry/despensa_11_18_flickr.jpg +corridor/couloir.jpg +inside_bus/inside_bus_038.jpg +locker_room/locker_room_google_0164.jpg +garage/bens_garage.jpg +greenhouse/04_06Greenhouse.jpg +subway/subway_0270.jpg +deli/deli_80_01_flickr.jpg +movietheater/sallevideok.jpg +prisoncell/JailCell2.jpg +warehouse/warehouse_0101.jpg +studiomusic/music_studio1.jpg +livingroom/living25.jpg +grocerystore/800px_Fett_supermarkt.jpg +shoeshop/zapateria_09_04_flickr.jpg +laboratorywet/AA049672.jpg +studiomusic/room222.jpg +operating_room/operating_table_05_02_altavista.jpg +meeting_room/conf21.jpg +bedroom/indoor_0448.jpg +shoeshop/zapateria_02_22_flickr.jpg +waitingroom/Waiting_Area.jpg +classroom/CEC_208_classroom.jpg +restaurant/restaurant_18_19_altavista.jpg +classroom/classroom_full.jpg +poolinside/piscina_cubierta_10_12_altavista.jpg +bedroom/b21.jpg +classroom/dark_empty_classroom.jpg +hairsalon/salon3-gr.jpg +meeting_room/tc_conference_room.jpg +studiomusic/studio99.jpg +waitingroom/waiting_room_39_03_altavista.jpg +tv_studio/plato_de_television_01_11_altavista.jpg +clothingstore/boutique55.jpg +gym/gimnasio_22_05_altavista.jpg +inside_bus/inside_bus_098.jpg +kindergarden/two2.jpg +deli/deli_08_12_yahoo.jpg +locker_room/locker_room_google_0045.jpg +laboratorywet/laboratorio_quimica_11_01_altavista.jpg +poolinside/pool_inside.jpg +winecellar/bodega_102_04_flickr.jpg +poolinside/2141886.jpg +fastfood_restaurant/BurgerKing.jpg +corridor/p1010062_c.jpg +jewelleryshop/interior.jpg +office/o10.jpg +winecellar/wine_cellar_46_03_altavista.jpg +elevator/elevator_google_0062.jpg +mall/room402.jpg +waitingroom/sample18.jpg +bookstore/bookstore_24_24_flickr.jpg +corridor/c2.jpg +bakery/The_12_Bakery.jpg +trainstation/train_station_15_19_altavista.jpg +computerroom/Our_Computer_Room_2007.jpg +meeting_room/c3.jpg +church_inside/metropolitana_102_20_flickr.jpg +dining_room/dining29.jpg +buffet/buffet07.jpg +meeting_room/c12.jpg +casino/casino_0320.jpg +gym/gimnasio_17_07_altavista.jpg +pantry/pantry_35_12_flickr.jpg +bar/bar_0374.jpg +clothingstore/dresses.jpg +library/Bibliotheque02.jpg +hospitalroom/IMG_1026.jpg +computerroom/lab2.jpg +greenhouse/invernadero_1111.jpg +stairscase/N457073.jpg +computerroom/aula_informat1.jpg +elevator/elevator_google_0041.jpg +greenhouse/serre_4.jpg +dining_room/indoor_0582.jpg +buffet/buffet04.jpg +bookstore/bookstore_41_02_altavista.jpg +casino/casino_0470.jpg +restaurant/restaurant_10_09_altavista.jpg +corridor/n457055.jpg +kitchen/indoor_0558.jpg +stairscase/N457090.jpg +closet/WH_WI.jpg +airport_inside/airport_inside_0064.jpg +winecellar/bodega_88_08_flickr.jpg +dentaloffice/dental_office_02_12_altavista.jpg +hospitalroom/hospital_room_sm.jpg +meeting_room/conf24.jpg +restaurant/restaurante_04_14_altavista.jpg +laundromat/lavanderia_106_03_flickr.jpg +airport_inside/airport_inside_0032.jpg +warehouse/warehouse_0325.jpg +locker_room/locker_room_google_0092.jpg +nursery/chambrebebe2.jpg +prisoncell/prison_cell_04_01_altavista.jpg +cloister/london_westminster_cloister.jpg +office/n457029.jpg +operating_room/hospital room_30_06_altavista.jpg +toystore/jugueteria_15_13_flickr.jpg +church_inside/kirche_01.jpg +library/Dsc00613_3.jpg +locker_room/locker_room_google_0192.jpg +bookstore/Libreria_46_17_altavista.jpg +lobby/Dolphin_01l_lobby_fountain.jpg +greenhouse/greenhouse_652.jpg +kitchen/cdmc1119.jpg +clothingstore/KIK.jpg +kitchen/kitchen102.jpg +office/office13.jpg +deli/deli_120_17_flickr.jpg +grocerystore/1760032753_ceceee30e7.jpg +pantry/White_Pantry_lg_logo.jpg +shoeshop/fashion.jpg +airport_inside/airport_inside_0337.jpg +bakery/boulangerie_06_16_yahoo.jpg +elevator/elevator_google_0071.jpg +restaurant/restaurante_37_06_altavista.jpg +inside_bus/inside_bus_032.jpg +lobby/recibidor10.jpg +waitingroom/surroundings1_large.jpg +casino/casino_0003.jpg +elevator/elevator_google_0034.jpg +grocerystore/supermarche1.jpg +lobby/sLobby15.jpg +lobby/lobby25.jpg +locker_room/locker_room_google_0128.jpg +computerroom/salle_informatique2.jpg +concert_hall/csi.jpg +restaurant_kitchen/restaurant_kitchen_google_0093.jpg +auditorium/auditorium015_103.jpg +stairscase/N190092.jpg +meeting_room/conf09.jpg +office/room472.jpg +hairsalon/aula_parrucchiere.jpg +museum/metropolitana_11_01_altavista.jpg +pantry/despensa_140_11_flickr.jpg +computerroom/biblioteca.jpg +locker_room/locker_room_google_0191.jpg +computerroom/DSCN1030.jpg +jewelleryshop/banner55.jpg +laundromat/laundry_II.jpg +restaurant_kitchen/restaurant_kitchen_google_0038.jpg +bookstore/bookstore_45_11_flickr.jpg +kindergarden/Classroom_pic_8_23_07_002.jpg +deli/deli_02_03_yahoo.jpg +artstudio/art_painting_studio_16_06_altavista.jpg +closet/Open_Closet.jpg +warehouse/warehouse_0078.jpg +greenhouse/20070417klpcnatun_229_Ies_SCO.jpg +studiomusic/Sala_de_actuacion.jpg +elevator/elevator_google_0033.jpg +meeting_room/conf10.jpg +deli/deli_106_23_flickr.jpg +greenhouse/greenhouse167.jpg +waitingroom/waiting_room_36_19_altavista.jpg +bedroom/indoor_0431.jpg +bowling/bowling_0209.jpg +clothingstore/american_shorts.jpg +mall/A_Grand_240905.jpg +winecellar/sacristia.jpg +airport_inside/airport_inside_0391.jpg +buffet/1430398034_7ab3fed17f.jpg +kindergarden/100_0034.jpg +warehouse/warehouse_0486.jpg +clothingstore/0009.jpg +concert_hall/11_19_2005_NGL_19opacHALL_GB61OCUJ6_1.jpg +nursery/visuel2.jpg +restaurant_kitchen/restaurant_kitchen_google_0062.jpg +laundromat/laundry_room_large.jpg +livingroom/lv_02_04_10917_04a_l.jpg +locker_room/locker_room_google_0067.jpg +pantry/pantry_15.jpg +tv_studio/tv_studio_32_12_altavista.jpg +concert_hall/Concert_Hall_1.jpg +shoeshop/2574_1914_DSCN2351.jpg +artstudio/artist_studio_49_17_altavista.jpg +bowling/bowling_0177.jpg +corridor/p1010074_c.jpg +inside_bus/inside_bus_040.jpg +gameroom/salle_jeux.jpg +warehouse/warehouse_0021.jpg +inside_bus/inside_bus_069.jpg +nursery/1323nursery5_med.jpg +library/BIB_bibliothek.jpg +studiomusic/int805.jpg +subway/subway_0219.jpg +videostore/videoteca_06_17_flickr.jpg +church_inside/churchinside01.jpg +dining_room/d11.jpg +dentaloffice/dentista_99_23_flickr.jpg +deli/deli_28_07_altavista.jpg +clothingstore/The_Boutique.jpg +office/n457050.jpg +meeting_room/c5.jpg +videostore/videoclub_29_18_altavista.jpg +winecellar/wine_storage_04_03_altavista.jpg +bakery/boulangerie_10_10_yahoo.jpg +library/Library_P2150016.jpg +shoeshop/zapateria.jpg +casino/casino_0302.jpg +toystore/toys_store_16_05_altavista.jpg +concert_hall/Concert_Hall2_1.jpg +hairsalon/salondecoiffure9215oq7.jpg +library/Bibliotheque6.jpg +livingroom/smallsp008.jpg +bookstore/librairie2_g.jpg +florist/flower_shop_spring_2006.jpg +kindergarden/classroom_north_bmp.jpg +buffet/buffet02.jpg +winecellar/wine_cellar_05_16_altavista.jpg +computerroom/Computer_Classroom.jpg +operating_room/operating_room_49_20_altavista.jpg +bowling/bowling_0061.jpg +kindergarden/tots6.jpg +church_inside/metropolitana_115_18_flickr.jpg +corridor/n190039.jpg +concert_hall/Concert Hall.jpg +inside_bus/inside_bus_092.jpg +kitchen/cdmc1299.jpg +church_inside/metropolitana_151_07_flickr.jpg +hairsalon/hair_salon1.jpg +lobby/lobby51.jpg +bathroom/IMG_1252.jpg +locker_room/locker_room_google_0050.jpg +trainstation/gare_03_12_altavista.jpg +dining_room/cdmc1295.jpg +clothingstore/boutique42.jpg +dining_room/dsc00627.jpg +nursery/baby_room_decoration_lg.jpg +shoeshop/zapato_2.jpg +studiomusic/blossom_music_studio_2.jpg +office/homeoff014.jpg +closet/075381028905.jpg +fastfood_restaurant/Camille_s_027.jpg +locker_room/locker_room_google_0141.jpg +church_inside/metropolitana_149_08_flickr.jpg +meeting_room/room451.jpg +shoeshop/zapateria_16_08_flickr.jpg +bookstore/bookstore_57_04_flickr.jpg +closet/closet_4.jpg +shoeshop/shoes_shop_01_01_altavista.jpg +elevator/elevator_google_0038.jpg +livingroom/Living31.jpg +artstudio/artist_studio_41_05_altavista.jpg +tv_studio/estudio_de_television_01_02_flickr.jpg +buffet/e02_buffet.jpg +bookstore/Librairie_48_15_altavista.jpg +dentaloffice/1730803206_3f16248ecb.jpg +videostore/videoclub_03_24_flickr.jpg +bakery/boulangerie_13_20_yahoo.jpg +clothingstore/boutique2.jpg +closet/NFD_30ClosetMaid.jpg +poolinside/pool_inside_25_20_altavista.jpg +restaurant/bistro_22_16_altavista.jpg +shoeshop/shoes_shop_48_08_altavista.jpg +mall/PublicP117C_L.jpg +restaurant_kitchen/restaurant_kitchen_google_0016.jpg +artstudio/painters_studio_03_18_altavista.jpg +kitchen/kitchen35.jpg +winecellar/bodega_07_14_yahoo.jpg +pantry/pantry_02_18_altavista.jpg +concert_hall/120703.jpg +kitchen/kitchen060.jpg +laboratorywet/wet_lab_13_03_altavista.jpg +livingroom/roomscan27.jpg +videostore/videotheque_02_05_flickr.jpg +waitingroom/rujin_femme.jpg +casino/casino_0042.jpg +elevator/elevator_google_0100.jpg +children_room/FW_97_2_0861_19_l.jpg +locker_room/locker_room_google_0098.jpg +restaurant/food_Bistro_450.jpg +garage/aug_outside04.jpg +kindergarden/2Preschool.jpg +tv_studio/52014180_110805_crw_3248_kteh_27_.jpg +bakery/bakery_06_11_altavista.jpg +videostore/blockbuster_32_13_altavista.jpg +locker_room/locker_room_google_0084.jpg +computerroom/CEJBA_sala_camputadoras.jpg +bathroom/room317.jpg +gameroom/P6170172.jpg +artstudio/art_painting_studio_01_15_altavista.jpg +greenhouse/conservatory_greenhouse_big.jpg +grocerystore/grocery_3.jpg +restaurant_kitchen/restaurant_kitchen_google_0001.jpg +concert_hall/W020070919331447037125.jpg +hospitalroom/hospital_room_38_10_altavista.jpg +livingroom/va_02_01_6306_03_l.jpg +classroom/30_AvH_112_classroom.jpg +prisoncell/robben_island.jpg +bedroom/indoor_0061.jpg +nursery/replace_orange_400x302.jpg +winecellar/bodega_78_08_flickr.jpg +dentaloffice/1796458857_21fc169bd0.jpg +inside_bus/inside_bus_100.jpg +mall/Shopping-mall.jpg +concert_hall/crbst_pict0027.jpg +tv_studio/2244288989_47ec1d796b_17_.jpg +grocerystore/kays_1.jpg +buffet/1351747750_8bbafedfd9.jpg +buffet/buffet57.jpg +cloister/san_millan_claustro.jpg +kitchen/kitchen036.jpg +mall/IMG_0111_Takashimayafoyer.jpg +winecellar/bodega_01_10_flickr.jpg +laboratorywet/laboratorio_quimica_14_01_altavista.jpg +kitchen/2335_1.jpg +bowling/bowling_0141.jpg +fastfood_restaurant/fast_food_restaurant_pef05022.jpg +poolinside/pool_inside_300_x_253_1_.jpg +prisoncell/jailcell234.jpg +studiomusic/MusicStudio.jpg +waitingroom/photo_hwhc_waiting.jpg +auditorium/amphi_1__81.jpg +dentaloffice/dentista_109_05_flickr.jpg +winecellar/cave_vin_25_17_altavista.jpg +bowling/bowling_0143.jpg +restaurant/coin_sympa.jpg +auditorium/la_grand_1__62.jpg +restaurant_kitchen/restaurant_kitchen_google_0018.jpg +inside_bus/inside_bus_041.jpg +garage/Basement_2_.jpg +locker_room/locker_room_google_0131.jpg +stairscase/hall21.jpg +casino/casino_0005.jpg +operating_room/surgery_room_08_03_altavista.jpg +classroom/web_lalemant.jpg +office/judges_office.jpg +bedroom/madison_room.jpg +artstudio/art_painting_studio_31_14_altavista.jpg +airport_inside/airport_inside_0155.jpg +poolinside/piscine_interieur_2.jpg +restaurant_kitchen/restaurant_kitchen_google_0097.jpg +subway/subway_0308.jpg +clothingstore/bestshopyet_full.jpg +children_room/AT_04_02_3000_55_l.jpg +locker_room/locker_room_google_0068.jpg +lobby/01_priv_ent.jpg +movietheater/sala_de_cine_21_05_altavista.jpg +grocerystore/Spirituosen_im_supermarkt_1.jpg +lobby/lobby223233.jpg +kitchen/kitchen99.jpg +laboratorywet/wetlab2.jpg +laundromat/PO_06_02_2000_70_l.jpg +stairscase/S32.jpg +livingroom/int122.jpg +florist/16944_7439_6.jpg +hairsalon/bild5_gross.jpg +inside_subway/inside_subway_0015.jpg +livingroom/indoor_0479.jpg +artstudio/artist_studio_14_12_altavista.jpg +cloister/Mosteiro_da_Batalha_Claustro_2.jpg +children_room/playroom_500_67_.jpg +prisoncell/cellDM1405_468x300.jpg +restaurant_kitchen/restaurant_kitchen_google_0041.jpg +tv_studio/tvstudio_120_.jpg +locker_room/locker_room_google_0175.jpg +bar/bar_0036.jpg +laundromat/100_2490_357122904_std.jpg +greenhouse/main.jpg +office/homeoff011.jpg +classroom/photo_classroom.jpg +greenhouse/greenhouse2gtr.jpg +shoeshop/zapateria_08_03_flickr.jpg +artstudio/artist_studio_43_07_altavista.jpg +mall/_69D9FF75_39DD_4F94_9FF4_6F01F5798173_.jpg +airport_inside/airport_inside_0175.jpg +corridor/p1010089_c.jpg +bedroom/indoor_0133.jpg +subway/subway_0263.jpg +artstudio/art_painting_studio_13_16_altavista.jpg +florist/c04652600522c7ad139144ca0e2b_3_4.jpg +gameroom/LV_00_01_5962_21_l.jpg +subway/subway_0318.jpg +movietheater/1190197963img_0239_1__3.jpg +nursery/dsc_0713_thumb_480xauto.jpg +corridor/IMG_3275.jpg +gameroom/gameroom.jpg +movietheater/theater_brady_450.jpg +laundromat/PB_99_4_7760_35A_l.jpg +museum/museo_134_21_flickr.jpg +bowling/bowling_0140.jpg +casino/casino_0478.jpg +hairsalon/Hair_Salon_Greensboro_NC_27406_235115.jpg +videostore/blockbuster_24_07_altavista.jpg +kindergarden/kindergarten_2.jpg +kitchen/indoor_0281.jpg +toystore/toys_store_21_19_altavista.jpg +garage/1.jpg +deli/deli_13_07_flickr.jpg +lobby/lobby33.jpg +bathroom/b3.jpg +florist/f_floristeria_04g.jpg +clothingstore/Purple_Tulip_Boutique_Photo.jpg +videostore/videoteca_06_03_flickr.jpg +clothingstore/shop01.jpg +jewelleryshop/store3_48_.jpg +mall/mallarizonamills01.jpg +nursery/baby_room_2.jpg +livingroom/room136.jpg +winecellar/bodega_152_04_flickr.jpg +casino/casino_0021.jpg +florist/florist_73_06_flickr.jpg +studiomusic/851_bandroom.jpg +laboratorywet/wet_lab_39_17_altavista.jpg +tv_studio/nice_casino_50_16_altavista.jpg +dining_room/dining9.jpg +meeting_room/int200.jpg +children_room/VA_02_05_7656_19A_l.jpg +videostore/videotheque_01_22_flickr.jpg +bakery/bakery34.jpg +dentaloffice/dental_chair.jpg +fastfood_restaurant/chick_fil_a.jpg +winecellar/cave_champagne_05_15_altavista.jpg +closet/url.jpg +gym/gym09.jpg +inside_bus/inside_bus_033.jpg +inside_subway/inside_subway_0240.jpg +office/d53.jpg +restaurant/restaurante_04_06_altavista.jpg +elevator/elevator_google_0040.jpg +kitchen/kitchen061.jpg +artstudio/artist_studio_43_03_altavista.jpg +bedroom/b30.jpg +gameroom/HO_06_02_2000_99_l.jpg +inside_subway/inside_subway_0250.jpg +meeting_room/conference1.jpg +subway/subway_0127.jpg +jewelleryshop/7777.jpg +bedroom/indoor_0186.jpg +tv_studio/peter_morse_teaching_unimelb_preview_55_.jpg +lobby/20076262_Collection_Lobby_02_w.jpg +casino/casino_0121.jpg +waitingroom/Concourse.jpg +operating_room/operating_room_34_11_altavista.jpg +cloister/claustro_interior.jpg +florist/florist_32_21_flickr.jpg +clothingstore/428460833_e89f97664b_b.jpg +laundromat/lavanderia_107_04_flickr.jpg +hospitalroom/LLIT_OBERT.jpg +cloister/claustro234.jpg +shoeshop/redwing.jpg +pantry/KitchenPantry.jpg +videostore/img_76381_renta.jpg +auditorium/inauguration_amphitheatre_1__151.jpg +trainstation/gare_129_07_flickr.jpg +hospitalroom/Birthing_Class7.jpg +fastfood_restaurant/539w.jpg +florist/cb72f48b619b1ff77bd11478d.jpg +garage/garage_workshop.jpg +pantry/section_pantry.jpg +jewelleryshop/299846537.jpg +waitingroom/waiting_room_49_19_altavista.jpg +studiomusic/RecordingStudio.jpg +winecellar/bodega_40_09_yahoo.jpg +auditorium/lar22_main_auditorium_a_copy_61.jpg +hairsalon/windor_hair_salon_189_380.jpg +classroom/IMG_2226.jpg +office/n457053.jpg +greenhouse/Invernadero.jpg +livingroom/l5.jpg +church_inside/St_Germain_des_Pr_s_autel.jpg +airport_inside/airport_inside_0232.jpg +corridor/n190054.jpg +bedroom/indoor_0567.jpg +waitingroom/CRL_Waitingarea.jpg +operating_room/surgery_room_25_11_altavista.jpg +dining_room/dining10.jpg +hospitalroom/hospital_room_36_11_altavista.jpg +studiomusic/solarstudio.jpg +hospitalroom/hospital_room_30_05_altavista.jpg +elevator/elevator_google_0053.jpg +nursery/baby_room_2_sized.jpg +shoeshop/t050dh02.jpg +warehouse/warehouse_0359.jpg +casino/casino_0177.jpg +operating_room/surgery_room_09_20_altavista.jpg +garage/10_GARAJE_3_JPG.jpg +artstudio/art_painting_studio_32_18_altavista.jpg +dining_room/easyst048.jpg +corridor/IMG_3081.jpg +laundromat/Ricks_laundromat_pictures_april_2007_139.jpg +florist/florist_21_16_flickr.jpg +jewelleryshop/3607308_scaled_416x312.jpg +tv_studio/tv_studio_05_12_altavista.jpg +buffet/ov_banquet_buffet2.jpg +meeting_room/conference_room.jpg +grocerystore/gs_image_Grocery_LEED_09_10.jpg +trainstation/gare_67_14_flickr.jpg +operating_room/surgery_room_09_12_altavista.jpg +lobby/sLobby18.jpg +bookstore/Libreria_44_19_altavista.jpg +livingroom/or_02_03_0212_36_l.jpg +videostore/videoclub_04_03_flickr.jpg +bakery/bakery_09_11_yahoo.jpg +warehouse/warehouse_0011.jpg +locker_room/locker_room_google_0232.jpg +shoeshop/75421584_9554abbb01.jpg +library/library_chess.jpg +museum/museum_44_15_altavista.jpg +dining_room/int130.jpg +waitingroom/wroom2.jpg +bar/bar_0086.jpg +hairsalon/peluqueria03.jpg +stairscase/N457075.jpg +dentaloffice/dentaire_03_19_altavista.jpg +trainstation/gare_51_05_flickr.jpg +tv_studio/estudio_rbs_tv_pelotas_45_.jpg +shoeshop/172402.jpg +deli/deli_129_10_flickr.jpg +prisoncell/prison_cell_36_02_altavista.jpg +prisoncell/P2170478.jpg +artstudio/painters_studio_08_03_altavista.jpg +bathroom/indoor_0566.jpg +hospitalroom/hospital_room_1.jpg +bedroom/b22.jpg +lobby/00320003.jpg +stairscase/D05b.jpg +bowling/bowling_0033.jpg +locker_room/locker_room_google_0218.jpg +office/office4.jpg +waitingroom/PDR_0026.jpg +restaurant_kitchen/restaurant_kitchen_google_0047.jpg +toystore/5.jpg +restaurant_kitchen/restaurant_kitchen_google_0056.jpg +buffet/23142_1177445820.jpg +kindergarden/playroom.jpg +mall/mall37.jpg +movietheater/p1010962_1__25.jpg +stairscase/OR_99_5_9379_27_l.jpg +warehouse/warehouse_0231.jpg +mall/West_End_Mall_DSC_0550_m.jpg +bookstore/3e7e40981ddd4cdb055c7ffe4c2af5d8.jpg +toystore/south_haven_michigan_toy_educational_store4.jpg +bakery/panetteria_01_13_altavista.jpg +church_inside/metropolitana_75_05_flickr.jpg +gym/gym13.jpg +studiomusic/datos_adjuntos.jpg +artstudio/painters_studio_19_05_altavista.jpg +office/office12.jpg +bakery/panaderia_49_18_yahoo.jpg +restaurant/bistro_01_06_altavista.jpg +waitingroom/PHOTO22.jpg +museum/museum_07_15_altavista.jpg +subway/subway_0260.jpg +closet/master_closet.jpg +greenhouse/088_invernadero.jpg +restaurant/bistro_31_02_altavista.jpg +garage/home_garage_cabinets.jpg +studiomusic/mixingdesk.jpg +laboratorywet/laboratorio_quimica_13_12_altavista.jpg +elevator/elevator_google_0001.jpg +meeting_room/n457008.jpg +movietheater/movietheater_google_0011.jpg +warehouse/warehouse_0498.jpg +deli/deli_04_14_altavista.jpg +winecellar/wine_cellar_45_01_altavista.jpg +subway/subway_0504.jpg +airport_inside/airport_inside_0497.jpg +deli/deli_31_04_altavista.jpg +lobby/Marshall_McLuhan_Salon_1.jpg +computerroom/sala_informatica.jpg +prisoncell/url.jpg +artstudio/art_painting_studio_13_20_altavista.jpg +office/eagle_office.jpg +poolinside/pool_inside_04_11_altavista.jpg +cloister/Cloister92.jpg +florist/floreria_09_04_flickr.jpg +laboratorywet/wet-lab.jpg +museum/museo_03_24_flickr.jpg +airport_inside/airport_inside_0043.jpg +deli/deli_148_16_flickr.jpg +grocerystore/supermarche_1.jpg +kitchen/kitchen045.jpg +subway/subway_0185.jpg +deli/deli_28_22_flickr.jpg +laboratorywet/wet_lab_11_02_altavista.jpg +locker_room/locker_room_google_0213.jpg +restaurant/restaurant_32_19_altavista.jpg +classroom/groupe_scolaire_2.jpg +videostore/gn704.jpg +operating_room/surgery_room_09_01_altavista.jpg +greenhouse/horti_estufa.jpg +kindergarden/Preschool_Kindergarten_Classroom_full.jpg +garage/3_5_08_garage.jpg +videostore/club_video_26_08_altavista.jpg +prisoncell/jail_cell321.jpg +corridor/img_9683_c.jpg +greenhouse/jardin_celeste_nouv.jpg +jewelleryshop/12907.jpg +artstudio/art_studio_01_01_altavista.jpg +restaurant_kitchen/restaurant_kitchen_google_0019.jpg +kitchen/int42.jpg +mall/mall38.jpg +laundromat/Laundromat_013.jpg +winecellar/bodega_153_13_flickr.jpg +clothingstore/fashionfix_drift21.jpg +classroom/IM000820.jpg +greenhouse/greenhouseoi1.jpg +clothingstore/fall_2006_B_146.jpg +clothingstore/mob989_1158475595.jpg +mall/latham_circle_mall_16.jpg +bedroom/b13.jpg +kindergarden/classroom223.jpg +dentaloffice/dental_office_40_05_altavista.jpg +inside_bus/inside_bus_009.jpg +bedroom/cimg8169.jpg +bookstore/Libreria_02_01_altavista.jpg +bakery/panaderia_15_06_yahoo.jpg +bowling/bowling_0171.jpg +computerroom/board05e.jpg +museum/museo_10_06_flickr.jpg +elevator/elevator_google_0019.jpg +closet/082806_the_stash_closet.jpg +nursery/lpbedding_hero.jpg +winecellar/wine_storage_05_20_altavista.jpg +computerroom/SALA_DE_INFORMaTICA.jpg +locker_room/locker_room_google_0163.jpg +winecellar/wine_cellar_37_13_altavista.jpg +tv_studio/16580_2_9_.jpg +poolinside/Inside-Pool.jpg +airport_inside/airport_inside_0549.jpg +florist/florist_01_18_altavista.jpg +subway/subway_0098.jpg +fastfood_restaurant/arbys4.jpg +classroom/118463509_99bde44e96.jpg +garage/garaje4567.jpg +livingroom/room502.jpg +movietheater/movietheater_google_0021.jpg +kitchen/k11.jpg +dentaloffice/img_op_room_bg.jpg +fastfood_restaurant/1213796_gross_burger_king_0.jpg +trainstation/gare_04_18_flickr.jpg +gym/pacific_newport_gym.jpg +airport_inside/airport_inside_0194.jpg +bar/bar_0080.jpg +cloister/IMG_0433.jpg +livingroom/indoor_0597.jpg +closet/section_closet.jpg +kitchen/cdmc1128.jpg +garage/Garage_Grid_10.jpg +buffet/137902351_6f2025ac9d.jpg +artstudio/art_painting_studio_47_02_altavista.jpg +toystore/toys_store_34_07_altavista.jpg +trainstation/gare_97_23_flickr.jpg +warehouse/warehouse_0151.jpg +shoeshop/zapateria_20_22_flickr.jpg +videostore/videoclub_09_17_flickr.jpg +concert_hall/konzertsaal.jpg +gameroom/sala_de_juegos_03_20_altavista.jpg +bedroom/easyst031.jpg +buffet/url_1.jpg +dentaloffice/dental_office_08_12_altavista.jpg +movietheater/movie_THeater.jpg +pantry/Warm_Cognac_Pantry.jpg +museum/museum_27_08_altavista.jpg +trainstation/estacion_de_ferrocarriles_35_20_altavista.jpg +airport_inside/airport_inside_0099.jpg +bathroom/room319.jpg +nursery/bali_nursery.jpg +buffet/358396421_aa2d3f6f03.jpg +bookstore/Bookstore111.jpg +restaurant/salle63.jpg +prisoncell/Jail.jpg +meeting_room/conference7.jpg +gameroom/Gameroom3.jpg +trainstation/gare_144_17_flickr.jpg +prisoncell/jackson_jail_1.jpg +hospitalroom/int173.jpg +bakery/boulangerie_17_17_yahoo.jpg +toystore/n8.jpg +locker_room/locker_room_google_0113.jpg +movietheater/sala-31.jpg +laundromat/laund_doc_010.jpg +dentaloffice/dental_office_13_13_altavista.jpg +fastfood_restaurant/url.jpg +poolinside/catalogue_piscine_interieur.jpg +dentaloffice/dentista_oficina_01_01_flickr.jpg +livingroom/living49.jpg +inside_subway/metropolitana_128_13_flickr.jpg +restaurant_kitchen/restaurant_kitchen_google_0108.jpg +concert_hall/luzerne.jpg +auditorium/06salle_1__2.jpg +prisoncell/323011538894332.jpg +gym/983000854_2bfd6a9ccf.jpg +airport_inside/airport_inside_0211.jpg +gameroom/gameroom2_600x448.jpg +casino/casino_0285.jpg +fastfood_restaurant/subway_gif.jpg +laundromat/lavanderia_40_18_flickr.jpg +laundromat/wasmachine.jpg +deli/deli_84_07_flickr.jpg +studiomusic/int597.jpg +shoeshop/zapateria_15_19_flickr.jpg +clothingstore/main_store_pic_01.jpg +mall/2038935077_84f209ff2b.jpg +bedroom/room405.jpg +kitchen/cdmc1144.jpg +church_inside/metropolitana_71_22_flickr.jpg +hospitalroom/hospital_room_02_18_altavista.jpg +inside_subway/inside_subway_0163.jpg +poolinside/Pool_Inside_Out.jpg +bathroom/n190042.jpg +livingroom/l8.jpg +children_room/img_3808_24_.jpg +florist/floreria_05_01_flickr.jpg +auditorium/auditorium68_115.jpg +dining_room/cdmc1195.jpg +locker_room/locker_room_google_0210.jpg +fastfood_restaurant/restaurant_panda.jpg +waitingroom/celibre_waiting_room.jpg +hairsalon/17630_7927_qsoms.jpg +inside_subway/inside_subway_0397.jpg +prisoncell/153430565_b7c67fd743.jpg +restaurant_kitchen/restaurant_kitchen_google_0044.jpg +gameroom/int92.jpg +restaurant_kitchen/restaurant_kitchen_google_0005.jpg +classroom/file_279474_23340.jpg +fastfood_restaurant/universitycenter056.jpg +gym/gimnasio_18_01_altavista.jpg +church_inside/metropolitana_14_19_flickr.jpg +tv_studio/tv_studio_01_03_altavista.jpg +bakery/bakery_02_03_altavista.jpg +children_room/VA_05_03_8000_49_l.jpg +jewelleryshop/boutique66.jpg +corridor/corridora8.jpg +meeting_room/room291.jpg +restaurant/gaststaette15.jpg +inside_subway/inside_subway_0273.jpg +meeting_room/conf19.jpg +children_room/OR_99_1_4913_31_l.jpg +casino/casino_0017.jpg +tv_studio/tv_studio_48_15_altavista.jpg +bowling/bowling_0201.jpg +airport_inside/airport_inside_0302.jpg +buffet/296063760_c41c08fab3.jpg +office/homeoff015.jpg +artstudio/painters_studio_13_13_altavista.jpg +buffet/buffet001.jpg +tv_studio/37048_c738e97b_cefe_433b_8ba1_37b1e54b5396_21_.jpg +buffet/413438464_9118ab17b8.jpg +children_room/playroom7_65_.jpg +mall/deira_city_centre_dubai_08.jpg +trainstation/gare_139_21_flickr.jpg +inside_bus/inside_bus_074.jpg +laundromat/laundry_room1.jpg +deli/deli_138_13_flickr.jpg +studiomusic/Pegnotti_estudio_River.jpg +bakery/bakery_17_17_yahoo.jpg +dining_room/room411.jpg +mall/34970_1_0012.jpg +florist/florist_23_20_flickr.jpg +poolinside/47220_pool_inside8.jpg +waitingroom/sLobby23.jpg +movietheater/salle1_1__66.jpg +museum/museo_67_01_flickr.jpg +fastfood_restaurant/Pizza_hut_express.jpg +grocerystore/grocery2.jpg +stairscase/dining044.jpg +classroom/int115.jpg +meeting_room/conf18.jpg +bookstore/bookstore_15_05_altavista.jpg +computerroom/computer_room_1.jpg +garage/garage_pics_003_1_.jpg +hairsalon/348_img159643_365652.jpg +bedroom/indoor_0330.jpg +nursery/nursery10.jpg +operating_room/operating_room_17_04_altavista.jpg +bowling/bowling_0015.jpg +casino/casino_0492.jpg +garage/hpgarageinside.jpg +subway/subway_0317.jpg +tv_studio/2004092000530101_12_.jpg +winecellar/wine_cellar_27_11_altavista.jpg +grocerystore/grocery23.jpg +cloister/Cloister456.jpg +livingroom/va_02_03_7115_16_l.jpg +warehouse/warehouse_0136.jpg +artstudio/art_painting_studio_25_15_altavista.jpg +gym/gimnasio_60_11_flickr.jpg +prisoncell/prison_cell_16_16_altavista.jpg +subway/subway_0277.jpg +subway/subway_0503.jpg +bar/bar_0429.jpg +livingroom/l7.jpg +movietheater/salle_cinema_metz_1__64.jpg +subway/subway_0273.jpg +laboratorywet/senior_wet_lab_1.jpg +greenhouse/1412_mb_file_0a8c5.jpg +lobby/sLobby21.jpg +warehouse/warehouse_0416.jpg +concert_hall/dekelboum2.jpg +studiomusic/Jw1qBartists1166828911.jpg +auditorium/amphi1_1__79.jpg +laboratorywet/wet_lab_26_05_altavista.jpg +locker_room/locker_room_google_0130.jpg +garage/basement_garage.jpg +restaurant/restaurant_16_05_altavista.jpg +nursery/c0020759_baby_room1_large.jpg +grocerystore/dogfooddisplaypiggb7xe.jpg +videostore/blockbuster_49_08_flickr.jpg +kitchen/kitchen137.jpg +auditorium/4875_amphitheatre_5_1__11.jpg +videostore/video_store_43_09_altavista.jpg +dining_room/dining46.jpg +garage/salmon_garage_after_gif.jpg +locker_room/locker_room_google_0011.jpg +classroom/Classroom9.jpg +kindergarden/SA_Pre_K_PS_Classroom_pictures_002.jpg +lobby/sLobby12.jpg +bar/bar_0031.jpg +hairsalon/SalonCoiffureMontelimar4.jpg +livingroom/room1.jpg +inside_subway/inside_subway_0257.jpg +shoeshop/zapateria_09_11_flickr.jpg +studiomusic/int807.jpg +bakery/best_bakery_02_06_altavista.jpg +hairsalon/hair_salon_hl.jpg +laundromat/alex_winch8.jpg +shoeshop/zapateria_22_08_flickr.jpg +livingroom/pb_99_1_0532_33_l.jpg +operating_room/operating_room_05_11_altavista.jpg +bar/bar_0407.jpg +subway/subway_0045.jpg +lobby/lobby3456.jpg +church_inside/1348333936_c97997d450.jpg +closet/closet2i.jpg +hospitalroom/00040220.jpg +dining_room/dining015.jpg +dining_room/d1.jpg +stairscase/maison_moissac_82_2.jpg +subway/subway_0261.jpg +toystore/speelgoed_66_02_flickr.jpg +tv_studio/burkebushbillm1967_30_.jpg +grocerystore/400_F_2072702_0czrOPPRxph5STUVfX3QxpCrEk80sG.jpg +gameroom/HO_00_01_4523_26A_l.jpg +waitingroom/waiting_room_03_13_altavista.jpg +winecellar/wine_cellar_main.jpg +buffet/31248717_88518f1e6d.jpg +artstudio/painters_studio_41_20_altavista.jpg +greenhouse/greenhouse2_1.jpg +locker_room/locker_room_google_0197.jpg +stairscase/LV_98_3_8762_18_l.jpg +airport_inside/airport_inside_0092.jpg +studiomusic/djban_estudio_musical.jpg +children_room/dscn0208_15_.jpg +church_inside/metropolitana_31_10_flickr.jpg +inside_bus/inside_bus_072.jpg +winecellar/wine_cellar_35_06_altavista.jpg +gameroom/Salle_expositions_jeux_d_echecs_02.jpg +waitingroom/pictureb_waitingroom.jpg +videostore/blockbuster_23_20_flickr.jpg +livingroom/cdmc1298.jpg +prisoncell/oldJail_Run.jpg +trainstation/estacion_de_ferrocarriles_49_09_altavista.jpg +corridor/n457064.jpg +toystore/jugueteria_16_08_flickr.jpg +airport_inside/airport_inside_0239.jpg +lobby/Art_Steinman_800_567.jpg +trainstation/gare_140_03_flickr.jpg +cloister/2611191511_4deb4bcf31.jpg +locker_room/locker_room_google_0036.jpg +prisoncell/justice_7.jpg +laboratorywet/wet_lab_35_20_altavista.jpg +pantry/pantry_57_22_flickr.jpg +garage/lot_16_garage.jpg +poolinside/LOU_HURS_pooli_1.jpg +warehouse/warehouse_0225.jpg +florist/florist_shop.jpg +lobby/halld_entree_500x354.jpg +trainstation/gare_99_08_flickr.jpg +meeting_room/n457038.jpg +casino/casino_0316.jpg +dentaloffice/dentista_93_04_flickr.jpg +nursery/nursery1a_1.jpg +shoeshop/panel_zapatos.jpg +dentaloffice/dental_office_47_13_altavista.jpg +dining_room/d6.jpg +restaurant/restaurant_08_17_altavista.jpg +fastfood_restaurant/Arbys_2.jpg +bakery/boulangerie_35_01_altavista.jpg +dentaloffice/aboutus_image1.jpg +laboratorywet/laboratorio_quimica_15_03_altavista.jpg +museum/galleria.jpg +locker_room/locker_room_google_0072.jpg +inside_subway/inside_subway_0220.jpg +cloister/cloister_cc_miladus.jpg +clothingstore/boutique9.jpg +kitchen/kitchen17.jpg +restaurant/restaurant_23_05_altavista.jpg +gym/GYM_C.jpg +locker_room/locker_room_google_0093.jpg +operating_room/operating_room_39_02_altavista.jpg +livingroom/living74.jpg +bedroom/b27.jpg +corridor/p1010090_c.jpg +inside_subway/inside_subway_0418.jpg +jewelleryshop/jewelry_dealer_business_38_.jpg +corridor/corridora2.jpg +church_inside/kirche_stettfeld_i.jpg +clothingstore/CP67794.jpg +livingroom/l9.jpg +stairscase/room228.jpg +trainstation/train_station_02_20_altavista.jpg +gym/gym_37_06_altavista.jpg +airport_inside/airport_inside_0224.jpg +toystore/jugueteria_25_08_yahoo.jpg +pantry/pantry_12_20_flickr.jpg +prisoncell/Penh2.jpg +fastfood_restaurant/3.jpg +pantry/pantry_05_24_flickr.jpg +bookstore/bookstore_21_14_flickr.jpg +elevator/elevator_google_0017.jpg +airport_inside/airport_inside_0288.jpg +bar/bar_0206.jpg +computerroom/Room_002s.jpg +warehouse/warehouse_0066.jpg +operating_room/operating_room_07_14_altavista.jpg +library/librairie.jpg +fastfood_restaurant/hut1.jpg +casino/casino_0040.jpg +kindergarden/housekeeping_center_18202041_std.jpg +bakery/panaderia_07_02_yahoo.jpg +kindergarden/51122_1124224733_6.jpg +toystore/jugueteria_19_18_flickr.jpg +artstudio/art_painting_studio_21_17_altavista.jpg +videostore/videoclub_10_12_flickr.jpg +clothingstore/0020.jpg +nursery/cmag0308_babyrooms02.jpg +subway/subway_0498.jpg +bathroom/indoor_0258.jpg +tv_studio/estudio_de_television_83_.jpg +inside_subway/inside_subway_0177.jpg +greenhouse/2_wallington_greenhouse_470x353.jpg +prisoncell/cell4.jpg +restaurant/restaurante_24_15_altavista.jpg +gym/southglade_gym_2.jpg +jewelleryshop/Interior1.jpg +kitchen/kitchen5.jpg +operating_room/operating_room_26_19_altavista.jpg +artstudio/painters_studio_03_12_altavista.jpg +hairsalon/DSCN3262_modifie_1.jpg +airport_inside/airport_inside_0570.jpg +kitchen/kitchen031.jpg +stairscase/room476.jpg +cloister/BAC09297.jpg +jewelleryshop/joyeria_10_20_altavista.jpg +videostore/blockbuster_46_07_flickr.jpg +lobby/9dVestibule_2_After_.jpg +artstudio/artistic_studio_01_08_altavista.jpg +bowling/bowling_0091.jpg +fastfood_restaurant/hut4.jpg +airport_inside/airport_inside_0013.jpg +shoeshop/za4.jpg +museum/museo_149_10_flickr.jpg +hairsalon/BIG_20080418112453.jpg +kindergarden/PreschoolKids.jpg +florist/florist_02_18_flickr.jpg +cloister/east_cloister320.jpg +florist/floreria_09_24_flickr.jpg +trainstation/train_station_24_08_altavista.jpg +hairsalon/salon3.jpg +studiomusic/Music_Studio.jpg +hairsalon/296614426_3b58446e42.jpg +inside_bus/inside_bus_066.jpg +bookstore/bookstore_49_17_altavista.jpg +cloister/build1385.jpg +auditorium/auditorium3_1__36.jpg +bowling/bowling_0050.jpg +closet/Maple_Tower_Doors.jpg +grocerystore/610x.jpg +inside_subway/inside_subway_0088.jpg +artstudio/artistic_studio_05_19_altavista.jpg +casino/casino_0047.jpg +artstudio/art_painting_studio_05_06_altavista.jpg +hairsalon/p01_10_07_1833.jpg +kitchen/kitchen177.jpg +mall/Galleria_003.jpg +cloister/Moissac_cloister.jpg +locker_room/locker_room_google_0189.jpg +trainstation/gare_138_18_flickr.jpg +auditorium/auditorium8_1__119.jpg +concert_hall/news_palms_web505.jpg +church_inside/betischurch_interior.jpg +gameroom/119gameroombig.jpg +museum/museo_134_07_flickr.jpg +computerroom/garantia.jpg +hairsalon/suburbia_hair_3.jpg +laboratorywet/laboratorio_quimica_14_03_altavista.jpg +church_inside/kirche_sao_lourenco_almancil.jpg +hospitalroom/CIMG0952.jpg +gym/gimnasio_24_03_altavista.jpg +toystore/toys_store_23_18_altavista.jpg +bar/bar_0130.jpg +bar/bar_0001.jpg +corridor/quiet_corridor_c.jpg +waitingroom/sLobby02.jpg +bookstore/Librairie_45_19_altavista.jpg +kindergarden/IMG_2327_t600.jpg +airport_inside/airport_inside_0183.jpg +stairscase/0307280855117les8.jpg +trainstation/gare_15_04_flickr.jpg +hospitalroom/Ben_001.jpg +kindergarden/PRESCHOOL_PLAYMAT2.jpg +airport_inside/airport_inside_0190.jpg +livingroom/easyst022.jpg +kitchen/iclock.jpg +lobby/uploads_images_photos_images_fullsize_hotellobby.jpg +shoeshop/moder.jpg +shoeshop/Browns2.jpg +videostore/2vhs.jpg +concert_hall/Schermerhorn.jpg +elevator/elevator_google_0061.jpg +deli/deli_118_06_flickr.jpg +bakery/bakery_32_04_yahoo.jpg +shoeshop/zapateria_25_17_flickr.jpg +kitchen/cdmc1175.jpg +movietheater/movietheater_google_0026.jpg +stairscase/N67.jpg +winecellar/bodega_vino_01_17_altavista.jpg +cloister/salisbury_cloister_350.jpg +poolinside/pool_inside_06_10_altavista.jpg +studiomusic/wideshot_main_studio.jpg +nursery/seeing_stripes_beautiful_brown_and_blue_baby_boys_nursery_10422.jpg +fastfood_restaurant/OrangeIn.jpg +stairscase/stairs04.jpg +inside_subway/inside_subway_0029.jpg +florist/fleuriste2.jpg +waitingroom/Aug29_2007.jpg +bathroom/el_cuarto_de_bano.jpg +classroom/IPODIUM.jpg +museum/museo_83_02_flickr.jpg +stairscase/int697.jpg +bakery/bakery7.jpg +auditorium/booker_20twashingtonhs_auditorium450b_1__48.jpg +clothingstore/ins32.jpg +kitchen/k8.jpg +tv_studio/tv_studio_2_112_.jpg +greenhouse/20070418klpcnaecl_364_Ies_SCO.jpg +grocerystore/9d37cca1_088e_4812_a319_9f8d3fcf37a1.jpg +church_inside/oberkirche01.jpg +clothingstore/Kleidung1.jpg +shoeshop/zapateria_21_03_flickr.jpg +toystore/Spielzeug_56_09_flickr.jpg +movietheater/3511628962884727_0.jpg +children_room/AT_01_3B_5486_10_l.jpg +classroom/classroom_710755.jpg +subway/subway_0358.jpg +kitchen/kitchen125.jpg +cloister/afm_cloister.jpg +auditorium/11472676233attendees_in_the_main_auditorium_1_1__3.jpg +dining_room/dining032.jpg +florist/Flower_shop_Kuala_Lumpur.jpg +library/28_06_06_Bibliotheque_Municipale_19_2.jpg +operating_room/operating_room_20_04_altavista.jpg +poolinside/piscine_interieur_3.jpg +hospitalroom/DSC01127.jpg +restaurant/restaurant_19_16_altavista.jpg +operating_room/surgery_room_16_17_altavista.jpg +bar/bar_0151.jpg +computerroom/electronica.jpg +bookstore/Librairie_22_12_altavista.jpg +florist/florist_40_04_altavista.jpg +prisoncell/fatherscell_01.jpg +restaurant_kitchen/restaurant_kitchen_google_0078.jpg +kindergarden/PreschoolClassroom1.jpg +restaurant_kitchen/restaurant_kitchen_google_0061.jpg +dentaloffice/1626665740_37aaacaff5.jpg +dining_room/d9.jpg +jewelleryshop/joyeria10.jpg +videostore/video_store_19_05_altavista.jpg +bookstore/spellbinding_bookstore.jpg +restaurant_kitchen/restaurant_kitchen_google_0067.jpg +gym/gimnasio_10_08_altavista.jpg +hairsalon/salon6.jpg +movietheater/ccs_3_1__19.jpg +bathroom/b10.jpg +gameroom/VA_04_02_6000_24_l.jpg +church_inside/kirche_uebergang.jpg +prisoncell/15208484cellblock.jpg +casino/casino_0010.jpg +mall/4Larcomar_Shopping_Center.jpg +bathroom/indoor_0461.jpg +gym/gym001.jpg +livingroom/living53.jpg +airport_inside/airport_inside_0261.jpg +closet/Cognac_RI_Cropped_Shot.jpg +meeting_room/n457020.jpg +meeting_room/conf15.jpg +pantry/pantry_12_11_flickr.jpg +videostore/video_store_04_15_altavista.jpg +closet/thumb_l_31.jpg +laundromat/lavanderia_47_23_flickr.jpg +library/library03.jpg +hospitalroom/hospital_room_37_19_altavista.jpg +laundromat/Catskill_Hall_Laundry_Room.jpg +bar/bar_0038.jpg +trainstation/gare_95_19_flickr.jpg +bar/bar_0570.jpg +casino/casino_0424.jpg +livingroom/int114.jpg +dentaloffice/dentista_65_14_flickr.jpg +waitingroom/MeetingPlace.jpg +deli/deli_18_02_yahoo.jpg +trainstation/gare_107_03_flickr.jpg +kitchen/cdmc1126.jpg +dining_room/dining039.jpg +restaurant_kitchen/restaurant_kitchen_google_0079.jpg +inside_subway/inside_subway_0428.jpg +church_inside/metropolitana_97_12_flickr.jpg +artstudio/painters_studio_31_18_altavista.jpg +artstudio/art_painting_studio_44_08_altavista.jpg +dining_room/va_02_04_7112_05_l.jpg +restaurant/restaurant_01_09_altavista.jpg +stairscase/N190008.jpg +tv_studio/dscn2300_copia_40_.jpg +fastfood_restaurant/Taco_Bell_9.jpg +greenhouse/spr2007_greenhouse_filling_up.jpg +hospitalroom/IMG_6996.jpg +winecellar/bodega_vino_11_12_altavista.jpg +inside_subway/inside_subway_0202.jpg +grocerystore/800px_Obst_supermarkt.jpg +bedroom/homeoff005.jpg +computerroom/Mvc_001f.jpg +gameroom/LV_02_04_10915_17_l.jpg +laundromat/lavanderia_62_16_flickr.jpg +studiomusic/BB_Studio_1_Mar2005_800.jpg +nursery/1662_z_1.jpg +winecellar/wine_storage_42_02_altavista.jpg +greenhouse/greenhouse276.jpg +office/despacho2.jpg +laboratorywet/wetlab.jpg +stairscase/OR_97_1_5167_13_l.jpg +bookstore/ins15.jpg +lobby/sLobby28.jpg +stairscase/va_02_04_7114_21a_l.jpg +bookstore/shakespearebookshop.jpg +classroom/classroom83.jpg +bowling/bowling_0084.jpg +kindergarden/lehuaroom.jpg +nursery/101345g_1.jpg +bedroom/b19.jpg +bookstore/Bookstore1_2.jpg +gym/Gym05.jpg +hairsalon/large_img_nj.jpg +tv_studio/tv_studio_18_01_altavista.jpg +bowling/bowling_0070.jpg +stairscase/D05a.jpg +poolinside/piscina_cubierta_03_04_altavista.jpg +fastfood_restaurant/barinfireworks.jpg +operating_room/surgery_room_28_08_altavista.jpg +dining_room/dining03.jpg +bowling/bowling_0043.jpg +restaurant_kitchen/restaurant_kitchen_google_0058.jpg +meeting_room/conf06.jpg +auditorium/star_20auditorium_202_20k_1__71.jpg +warehouse/warehouse_0211.jpg +cloister/Index_claustro.jpg +restaurant/restaurant_05_09_altavista.jpg +lobby/Fairmont_Lobby.jpg +inside_subway/inside_subway_0373.jpg +auditorium/auditorium_seating_1__33.jpg +cloister/claustro_pano_w.jpg +museum/museum_13_08_flickr.jpg +tv_studio/picfornewsletteraug82003sftechtvset_56_.jpg +children_room/western_playroom_71_.jpg +lobby/lobby9909.jpg +museum/museo_162_24_flickr.jpg +kindergarden/Toddler_room.jpg +closet/closet26.jpg +hospitalroom/int211.jpg +library/library02.jpg +prisoncell/jail_cell32.jpg +museum/museo_90_19_flickr.jpg +warehouse/warehouse_0031.jpg +corridor/corbusier_1_leg.jpg +airport_inside/airport_inside_0362.jpg +grocerystore/grocery.jpg +livingroom/in108.jpg +waitingroom/Salle_attente_clinilab_4.jpg +gameroom/P6170163.jpg +laundromat/DSC01042.jpg +nursery/ss_100446680.jpg +videostore/video_store_2_1.jpg +studiomusic/studio_2.jpg +fastfood_restaurant/snack.jpg +jewelleryshop/DSC01829.jpg +office/office2.jpg +stairscase/lobby30.jpg +livingroom/l3.jpg +museum/museum_38_17_altavista.jpg +grocerystore/shop04.jpg +laundromat/1209023191.jpg +greenhouse/greenhousetr_2.jpg +concert_hall/MAMusicBuildingView1_Small_.jpg +jewelleryshop/95_14.jpg +poolinside/swimming_pool_inside.jpg +gameroom/sallejeux78.jpg +corridor/corridor1.jpg +airport_inside/airport_inside_0182.jpg +office/ins9.jpg +deli/deli_14_16_yahoo.jpg +fastfood_restaurant/PH_ROCHESTER_INT3.jpg +shoeshop/zapateria_24_23_flickr.jpg +garage/mso1011_LadderBike_bef1_w609.jpg +bedroom/strongcpl_t.jpg +office/despacho1_400.jpg +corridor/hall_c.jpg +corridor/south_hallway_from_front_c.jpg +jewelleryshop/joyeria_157_15_flickr.jpg +kitchen/kitchen189.jpg +trainstation/gare_144_03_flickr.jpg +concert_hall/phbalcony.jpg +florist/florist_26_02_flickr.jpg +hairsalon/coiffure.jpg +restaurant/restaurant_43_20_altavista.jpg +warehouse/warehouse_0181.jpg +office/o1.jpg +casino/casino_0015.jpg +garage/garaje_norte_este.jpg +elevator/elevator_google_0082.jpg +florist/florist_41_17_altavista.jpg +shoeshop/zapatos_tematica.jpg +inside_subway/inside_subway_0143.jpg +poolinside/phil3.jpg +mall/70_12_03_01.jpg +kindergarden/pre3.jpg +artstudio/artist_work_place_24_16_altavista.jpg +cloister/cloisters.jpg +greenhouse/greenhouse2ln1.jpg +warehouse/warehouse_0166.jpg +bakery/bakery_21_08_yahoo.jpg +concert_hall/nemzeti_hangversenyterem.jpg +stairscase/AT_01_6B_5490_20_l.jpg +nursery/2190204970_7b449af783_o.jpg +restaurant/restaurante_35_12_altavista.jpg +stairscase/273_2_zoom_1_aminta_grand_hotel_sorrento_lounge.jpg +bookstore/Librairie_27_01_altavista.jpg +florist/florist_38_21_flickr.jpg +kitchen/int365.jpg +grocerystore/supermarche3_1.jpg +bathroom/bath17.jpg +artstudio/art_painting_studio_23_01_altavista.jpg +library/Bibliothek_kalocsa.jpg +airport_inside/airport_inside_0106.jpg +bathroom/room299.jpg +corridor/n457047.jpg +mall/West_End_Mall_2_DSC01799_m.jpg +bar/bar_0016.jpg +waitingroom/Greatclips_wait.jpg +children_room/portland_114_36_.jpg +bakery/bakery_04_03_altavista.jpg +trainstation/train_station_14_13_altavista.jpg +movietheater/auditorium_resized_18.jpg +bakery/boulangerie_01_06_yahoo.jpg +kitchen/indoor_0263.jpg +cloister/eandl.jpg +clothingstore/p0011.jpg +shoeshop/2008050303001187_375.jpg +hairsalon/friseur1.jpg +florist/florist_39_19_altavista.jpg +closet/Closet_After_1_.jpg +kindergarden/classroom.jpg +gameroom/6.jpg +concert_hall/vhstage.jpg +livingroom/indoor_0073.jpg +winecellar/cave_vin_41_15_altavista.jpg +operating_room/operating_room_26_01_altavista.jpg +office/office18.jpg +elevator/elevator_google_0089.jpg +hospitalroom/DSC_0097.jpg +stairscase/escalier377.jpg +church_inside/QuitoChurch.jpg +gym/gimnasio_137_08_flickr.jpg +kitchen/int347.jpg +laundromat/lavanderia_43_13_flickr.jpg +bedroom/indoor_0110.jpg +bar/bar_0235.jpg +prisoncell/Police_1.jpg +stairscase/spk_murnau_treppe1_big.jpg +hospitalroom/My_hospital_Room.jpg +inside_bus/inside_bus_004.jpg +grocerystore/big_Grocery_Store.jpg +kitchen/kitchen143.jpg +elevator/elevator_google_0066.jpg +greenhouse/serreyu.jpg +waitingroom/7.jpg +bookstore/Libreria_48_03_altavista.jpg +restaurant_kitchen/restaurant_kitchen_google_0014.jpg +dentaloffice/Dental.jpg +children_room/AT_01_2B_5493_35_l.jpg +greenhouse/greenhouse_1.jpg +closet/closet_1.jpg +laboratorywet/wet_lab_03_15_altavista.jpg +bowling/bowling_0178.jpg +auditorium/auditorium39_112.jpg +meeting_room/c18.jpg +waitingroom/deco5_png.jpg +bar/bar_0054.jpg +office/home_office_after.jpg +subway/underground_56_07_flickr.jpg +greenhouse/serre_printemps.jpg +clothingstore/946590115_035579bce7_b.jpg +bar/bar_0061.jpg +bookstore/index_librairie.jpg +prisoncell/scrnewjailcell.jpg +toystore/Spielzeug_41_05_flickr.jpg +church_inside/kirche76.jpg +grocerystore/grocery74.jpg +warehouse/warehouse_0131.jpg +gym/gym_42_12_altavista.jpg +clothingstore/common.jpg +concert_hall/UMass_EX_3.jpg +waitingroom/waiting_room_31_12_altavista.jpg +hospitalroom/DSC_0454.jpg +concert_hall/cscseats.jpg +gym/gimnasio_38_16_flickr.jpg +winecellar/cave_champagne_09_20_altavista.jpg +corridor/2326_2.jpg +toystore/jugueteria_18_12_flickr.jpg +artstudio/art_painting_studio_32_17_altavista.jpg +laundromat/lavanderia_101_20_flickr.jpg +library/library5.jpg +museum/museo_14_11_altavista.jpg +warehouse/warehouse_0050.jpg +jewelleryshop/joyeria_66_11_flickr.jpg +elevator/elevator_google_0058.jpg +artstudio/painters_studio_18_10_altavista.jpg +airport_inside/airport_inside_0303.jpg +corridor/p1010067_c.jpg +auditorium/baird_1__141.jpg +classroom/scuola06_4.jpg +clothingstore/1470195165_8499fd04bf.jpg +classroom/salle_reunion_joliot_b.jpg +mall/Scarpe_Italiane_Milan_Italy.jpg +subway/subway_0267.jpg +artstudio/artist_studio_30_06_altavista.jpg +bookstore/Libreria_03_09_altavista.jpg +deli/deli_148_17_flickr.jpg +kitchen/indoor_0542.jpg +deli/deli_21_12_yahoo.jpg +library/43407107_204b8504b5.jpg +tv_studio/studio11_102_.jpg +dentaloffice/dentista_75_19_flickr.jpg +florist/florist_46_10_flickr.jpg +laundromat/o_laundromat.jpg +museum/museo_151_05_flickr.jpg +operating_room/operating_room_25_01_altavista.jpg +church_inside/underground_55_06_flickr.jpg +auditorium/websterauditorium_75.jpg +kindergarden/image4251.jpg +stairscase/int36.jpg +tv_studio/set_tv_99_.jpg +auditorium/auditorium_ambiance_494x326_95.jpg +florist/floreria_05_17_flickr.jpg +videostore/blockbuster_04_14_altavista.jpg +bathroom/room31.jpg +bar/bar_0047.jpg +studiomusic/control_console_right_1.jpg +bathroom/bano3_2.jpg +hairsalon/peluqueria1_2.jpg +waitingroom/url_1.jpg +elevator/elevator_google_0087.jpg +videostore/videoteka_04_03_altavista.jpg +church_inside/methodist_june04_02s.jpg +winecellar/bodega2.jpg +nursery/chambre_enfant2R.jpg +clothingstore/boutique_wide.jpg +elevator/elevator_google_0011.jpg +locker_room/locker_room_google_0188.jpg +meeting_room/conf04.jpg +trainstation/gare_145_04_flickr.jpg +gym/fieldhouse_weightroom.jpg +corridor/corridora5.jpg +fastfood_restaurant/CamilesCafe01.jpg +bar/bar_0146.jpg +laundromat/waschsalon_klein.jpg +library/ins18.jpg +bathroom/b2.jpg +cloister/Claustro_de_San_Juan_de_los_Reyes_II.jpg +hospitalroom/hospital_room_10.jpg +warehouse/warehouse_0206.jpg +casino/casino_0012.jpg +elevator/elevator_google_0010.jpg +computerroom/Lab_de_Informatica_1.jpg +bar/bar_0041.jpg +florist/floreria_08_16_flickr.jpg +movietheater/10_auditorium_1__1.jpg +closet/WH_Raised_Panel_RI.jpg +trainstation/gare_165_15_flickr.jpg +dining_room/d15a.jpg +hospitalroom/ashley2007_birth_002.jpg +kitchen/cdmc1167.jpg +studiomusic/trabajo_238115785.jpg +library/library466.jpg +restaurant/int655.jpg +hairsalon/dscn2934.jpg +cloister/kelso_cloister.jpg +grocerystore/a20071138236957.jpg +elevator/elevator_google_0027.jpg +kindergarden/events7.jpg +movietheater/2535570691_3518c2a636_1__8.jpg +bathroom/room267.jpg +clothingstore/Louise_Billgert_35277_RGB_72DPI_2.jpg +grocerystore/Rachel_at_grocery_store.jpg +deli/deli_100_17_flickr.jpg +videostore/blockbuster_42_21_flickr.jpg +florist/florist_52_08_flickr.jpg +kindergarden/tourKINDERGARTEN.jpg +toystore/Spielzeug_62_10_flickr.jpg +airport_inside/airport_inside_0113.jpg +shoeshop/Shoe_side_of_shop_SVL.jpg +subway/subway_0140.jpg +auditorium/costa_atlantica_navire_amphitheatre_1__144.jpg +operating_room/surgery_room_14_09_altavista.jpg +stairscase/Balcony_Epoch.jpg +pantry/despensa_133_09_flickr.jpg +poolinside/pool_inside_36_06_altavista.jpg +prisoncell/jailtour002.jpg +deli/deli_45_23_flickr.jpg +gym/gym2.jpg +laboratorywet/labmartiniempty.jpg +bar/bar_0482.jpg +classroom/classroom2.jpg +classroom/118463700_ead3ee32e3.jpg +children_room/kids_in_the_playroom_44_.jpg +bookstore/bookstore_31_03_flickr.jpg +clothingstore/crystal_shop.jpg +corridor/hall50.jpg +prisoncell/Jailcell2323.jpg +bowling/bowling_0048.jpg +church_inside/pantry_55_13_flickr.jpg +computerroom/IM000835.jpg +children_room/AT_04_04_2000_78_l.jpg +dining_room/easyst034.jpg +poolinside/piscina_cubierta_03_03_altavista.jpg +church_inside/kirche_mogelsberg.jpg +hairsalon/11571232651.jpg +laundromat/noosa_124.jpg +bowling/bowling_0053.jpg +dining_room/d2.jpg +bedroom/child4.jpg +inside_bus/inside_bus_091.jpg +toystore/toys_store_43_03_altavista.jpg +warehouse/warehouse_0046.jpg +children_room/PO_06_03_3000_76_l.jpg +jewelleryshop/newyork_caron_boutique.jpg +jewelleryshop/park_jewellers.jpg +library/neilson_hays_library02.jpg +fastfood_restaurant/B_CInside.jpg +warehouse/warehouse_0196.jpg +buffet/food_on_table.jpg +dining_room/dining048.jpg +inside_subway/inside_subway_0113.jpg +shoeshop/shoes_shop_29_20_altavista.jpg +inside_bus/inside_bus_089.jpg +greenhouse/green01.jpg +kindergarden/classroom2.jpg +buffet/buffet06.jpg +garage/tractor_barn_inside.jpg +grocerystore/shop16.jpg +lobby/AT_04_03_2001_03_l.jpg +library/library4.jpg +locker_room/locker_room_google_0065.jpg +bookstore/bookstore_10_02_altavista.jpg +computerroom/computer_lab333.jpg +grocerystore/organic_food_for_web.jpg +laboratorywet/wet_lab_06_07_altavista.jpg +dentaloffice/dentista_85_07_flickr.jpg +toystore/Spielzeug_145_06_flickr.jpg +auditorium/auditorium_mc2_1__94.jpg +jewelleryshop/dsc00562_12_.jpg +bowling/bowling_0009.jpg +waitingroom/waiting_room_32_10_altavista.jpg +auditorium/salle_amphitheatre3_1__170.jpg +restaurant_kitchen/restaurant_kitchen_google_0021.jpg +bar/bar_0025.jpg +bowling/bowling_0107.jpg +warehouse/warehouse_0121.jpg +computerroom/computer_room07.jpg +corridor/pasillo_interior_1_t.jpg +inside_bus/inside_bus_027.jpg +nursery/2007_05_01_replace3.jpg +florist/c04652600522c7ad139144ca0e2b_1_4.jpg +lobby/sLobby29.jpg +toystore/store3sm.jpg +laboratorywet/laboratorio_quimica_12_16_altavista.jpg +museum/museum_31_15_altavista.jpg +auditorium/affich_1__76.jpg +classroom/SALA_DE_AULA_DCNAT.jpg +cloister/esglesiavic21of1cc1.jpg +dentaloffice/dentista_32_04_altavista.jpg +closet/WC_Hutch.jpg +dining_room/dining31.jpg +trainstation/gare_160_22_flickr.jpg +artstudio/art_painting_studio_25_03_altavista.jpg +casino/casino_0083.jpg +corridor/coll_couloir.jpg +bookstore/bookstore_36_02_flickr.jpg +livingroom/indoor_0463.jpg +nursery/monkey_nursery_2.jpg +pantry/pantry_76_14_flickr.jpg +office/n457045.jpg +warehouse/warehouse_0018.jpg +bowling/bowling_0024.jpg +garage/20071218200319_garaje.jpg +auditorium/auditorium_101.jpg +fastfood_restaurant/442a2fd659407_81_1.jpg +children_room/dsc02536_main_full_14_.jpg +gym/salle_cardio_grand.jpg +toystore/Spielzeug_41_09_flickr.jpg +church_inside/Interieur_Gris.jpg +waitingroom/waiting_room_04_02_altavista.jpg +pantry/pantry_63_16_flickr.jpg +warehouse/warehouse_0102.jpg +waitingroom/waitingroom1.jpg +inside_subway/inside_subway_0020.jpg +locker_room/locker_room_google_0106.jpg +nursery/img_nursery_planner.jpg +locker_room/locker_room_google_0103.jpg +tv_studio/dscn0726_39_.jpg +concert_hall/allenroom.jpg +trainstation/train_station_03_08_altavista.jpg +stairscase/N457074.jpg +subway/subway_0109.jpg +bedroom/b3.jpg +winecellar/wine_cellar_30_20_altavista.jpg +greenhouse/greenhouse_452.jpg +hospitalroom/hospital061113_3_560.jpg +hospitalroom/SUDEEP_HOSPITAL3.jpg +children_room/HO_00_02_5271_23_l.jpg +hospitalroom/P1000698.jpg +meeting_room/conf13.jpg +restaurant_kitchen/restaurant_kitchen_google_0069.jpg +waitingroom/patient_waiting_room.jpg +florist/floreria_05_11_flickr.jpg +subway/subway_0012.jpg +toystore/a1_toystore1.jpg +museum/museo_163_01_flickr.jpg +jewelleryshop/1p.jpg +nursery/baby_room_012.jpg +jewelleryshop/inst_ilum_nego_joyeria.jpg +bookstore/librairie_wallonie_bruxelles_003.jpg +prisoncell/jzleoben_21.jpg +bookstore/bookstore_41_18_altavista.jpg +closet/BedroomCloset.jpg +clothingstore/ClothingStore.jpg +buffet/413224656_cd51fb5f4d.jpg +stairscase/N26m.jpg +jewelleryshop/1_1_.jpg +lobby/IM004853_JPG.jpg +inside_bus/inside_bus_015.jpg +children_room/AT_98_3_945_14_l.jpg +toystore/speelgoed_66_08_flickr.jpg +winecellar/bodega_17_19_flickr.jpg +cloister/claustro_de_la_catedral_1224_2.jpg +hairsalon/thumb52.jpg +museum/museo_105_12_flickr.jpg +warehouse/warehouse_0076.jpg +winecellar/bodega_135_18_flickr.jpg +children_room/OR_99_4_4922_07A_l.jpg +gameroom/AT_00_01_8142_36A_l.jpg +laboratorywet/wet_lab_11_19_altavista.jpg +elevator/elevator_google_0036.jpg +cloister/96847179_5961f50b85.jpg +dining_room/dining023.jpg +shoeshop/zapateria_22_10_flickr.jpg +prisoncell/prison_cell_07_02_altavista.jpg +tv_studio/antena_3_noticias_2004_noticias_3_rafaga_11052004_dvd30015_26_01_29_.jpg +inside_subway/inside_subway_0235.jpg +poolinside/schwimmen03_g.jpg +greenhouse/greenhouse_main.jpg +concert_hall/City_Halls.jpg +kitchen/kitchen032.jpg +buffet/buffet08.jpg +bakery/best_bakery_01_04_altavista.jpg +restaurant/restaurante_19_15_altavista.jpg +elevator/elevator_google_0060.jpg +casino/casino_0144.jpg +library/ins21.jpg +movietheater/14333_dsc02540_1__4.jpg +winecellar/bodega_64_22_flickr.jpg +trainstation/gare_20_08_flickr.jpg +inside_bus/inside_bus_017.jpg +bookstore/Libreria_20_14_altavista.jpg +studiomusic/Music_Studio_150_dpi.jpg +pantry/pantry_59_17_flickr.jpg +corridor/c11.jpg +grocerystore/h_3_1103585_1209394189.jpg +shoeshop/f338.jpg +inside_subway/inside_subway_0156.jpg +kindergarden/Preschool_Classroom.jpg +winecellar/wine_cellar_24_11_altavista.jpg +bathroom/indoor_0513.jpg +bowling/bowling_0152.jpg +computerroom/373437852_4e3926fe0c.jpg +nursery/babyroom005.jpg +restaurant_kitchen/restaurant_kitchen_google_0060.jpg +computerroom/jpg_im17.jpg +hospitalroom/WFUniversity_Hospital.jpg +poolinside/pool_inside_01_17_altavista.jpg +greenhouse/fotos2433.jpg +museum/museum_43_04_altavista.jpg +clothingstore/meatpack_boutique2.jpg +buffet/image_services_restaurant_buffet_1.jpg +bathroom/bathroom35.jpg +buffet/Buffet_of_Portuguese_food.jpg +bathroom/bath98.jpg +kindergarden/Picture_042.jpg +bowling/bowling_0157.jpg +bedroom/rose_bed_room.jpg +classroom/Imagen_008.jpg +lobby/lobby34.jpg +bar/bar_0046.jpg +cloister/claustro_catedral_oporto.jpg +computerroom/ComputerRoom_full.jpg +deli/deli_147_24_flickr.jpg +florist/florist_31_08_flickr.jpg +prisoncell/415957860_b226b6b23e.jpg +casino/casino_0016.jpg +garage/garage.jpg +deli/deli_128_21_flickr.jpg +kitchen/cdmc1164.jpg +bathroom/indoor_0045.jpg +fastfood_restaurant/pizza_hut_big.jpg +auditorium/amphivide_1__87.jpg +bar/bar_0285.jpg +locker_room/locker_room_google_0195.jpg +inside_bus/inside_bus_060.jpg +meeting_room/conf01.jpg +lobby/sLobby22.jpg +museum/museo_01_13_altavista.jpg +stairscase/AT_98_3_0944_36_l.jpg +tv_studio/tibetantv_studio48_1_75_.jpg +museum/museo_08_13_altavista.jpg +nursery/IM_137611_1.jpg +corridor/p1010066_c.jpg +bar/bar_0458.jpg +casino/casino_0097.jpg +florist/image002.jpg +poolinside/141821195_M.jpg +jewelleryshop/Interior_2.jpg +bowling/bowling_0020.jpg +office/room205.jpg +office/n457030.jpg +restaurant/restaurante_35_05_altavista.jpg +restaurant_kitchen/restaurant_kitchen_google_0057.jpg +bathroom/indoor_0264.jpg +kindergarden/Preschool_art.jpg +warehouse/warehouse_0207.jpg +movietheater/121880878_93cb1c9058.jpg +gym/gimnasio_68_19_flickr.jpg +laundromat/lavanderia_77_06_flickr.jpg +operating_room/operating_room_18_06_altavista.jpg +elevator/elevator_google_0007.jpg +kindergarden/preschool_chairs_2006_2.jpg +buffet/buffet05.jpg +toystore/jugueteria_19_22_flickr.jpg +trainstation/gare_94_09_flickr.jpg +stairscase/Treppe_1.jpg +classroom/IGLOBE.jpg +clothingstore/Tibi_Boutique_1_Credit_Ad.jpg +lobby/lobby0002.jpg +office/office9.jpg +mall/1782523123_756a565e97.jpg +laboratorywet/laboratorio_quimica_14_04_altavista.jpg +museum/museo_128_11_flickr.jpg +gameroom/gameroom_1.jpg +kindergarden/ps_room_475x335.jpg +library/ins19.jpg +restaurant_kitchen/restaurant_kitchen_google_0002.jpg +gym/punttis_gym_overview.jpg +bookstore/bookstore_142_11_flickr.jpg +library/biblio01.jpg +casino/casino_0129.jpg +computerroom/computer_room1.jpg +locker_room/locker_room_google_0124.jpg +artstudio/artist_studio_36_17_altavista.jpg +buffet/1684965730_e82d832010_b.jpg +classroom/salleXL.jpg +mall/mall09.jpg +children_room/AT_04_02_3000_46_l.jpg +corridor/corridora3.jpg +garage/mso1012_ClothesRackBike_bef_w609.jpg +laboratorywet/peterfeinph.jpg +dining_room/dining3.jpg +library/792089_e681119c26.jpg +movietheater/CYP0101072_P.jpg +kitchen/kitchen78.jpg +concert_hall/events1.jpg +fastfood_restaurant/chipolte2.jpg +movietheater/domealbertville1.jpg +nursery/000000.jpg +movietheater/INP172655C_P.jpg +studiomusic/studio16.jpg +church_inside/prty3dfhxo3.jpg +deli/deli_162_20_flickr.jpg +livingroom/living82.jpg +office/homeoff001.jpg +gym/gimnasio_18_07_altavista.jpg +winecellar/wine_cellar_expo.jpg +subway/subway_0456.jpg +inside_bus/inside_bus_023.jpg +kitchen/cdmc1178.jpg +pantry/pantry_117_01_flickr.jpg +elevator/elevator_google_0031.jpg +fastfood_restaurant/114543829_e8ef2f7e7e.jpg +corridor/pasillo_edificio_escuela__480x640_c.jpg +hairsalon/url.jpg +bar/bar_0201.jpg +hospitalroom/5816CareForPatient.jpg +dining_room/int682.jpg +studiomusic/estudio1b.jpg +gym/gimnasio_68_20_flickr.jpg +laboratorywet/wet_lab_12_10_altavista.jpg +toystore/jugueteria_01_17_flickr.jpg +corridor/p1010079_c.jpg +concert_hall/url.jpg +stairscase/stairs06.jpg +grocerystore/2007_03_wfo11.jpg +studiomusic/int804.jpg +shoeshop/192622.jpg +church_inside/metropolitana_134_02_flickr.jpg +gameroom/gameroom_inside2.jpg +laboratorywet/laboratorio_quimica_07_04_altavista.jpg +movietheater/salle_20cinema_1__62.jpg +kitchen/kitchen086.jpg +poolinside/022506D.jpg +restaurant/restaurante_46_08_altavista.jpg +tv_studio/be5bd13e_1fb4_4dde_8d38_e29dda3815cb_81_.jpg +inside_bus/inside_bus_086.jpg +livingroom/int566.jpg +gym/gimnasio_78_14_flickr.jpg +restaurant_kitchen/restaurant_kitchen_google_0008.jpg +dining_room/dining005.jpg +florist/florist_59_21_flickr.jpg +hairsalon/pagiovanni.jpg +livingroom/indoor_0326.jpg +lobby/800px_DirkvdM_panama_hotel_lobby_1.jpg +restaurant_kitchen/restaurant_kitchen_google_0073.jpg +stairscase/kenngott_treppe_buche_sondergelaender.jpg +fastfood_restaurant/quiznos3.jpg +corridor/IMGP3211.jpg +shoeshop/zapateria_06_11_flickr.jpg +buffet/233827470_93eda76dee.jpg +concert_hall/Music_Concert_Hall_2.jpg +gameroom/fac_gameroom.jpg +studiomusic/novedades639.jpg +auditorium/auditor_1__90.jpg +restaurant_kitchen/restaurant_kitchen_google_0045.jpg +lobby/SD_00_01_51257_09_l.jpg +auditorium/p1010008_73cb7_1__65.jpg +restaurant/Restaurant_2.jpg +computerroom/Computer8i7.jpg +locker_room/locker_room_google_0240.jpg +airport_inside/airport_inside_0100.jpg +laundromat/4_vono.jpg +laboratorywet/laboratorio_quimica_17_12_altavista.jpg +concert_hall/g_vigoenfotos_1934d.jpg +hospitalroom/hospital_room_08_14_altavista.jpg +tv_studio/studio09_63_.jpg +auditorium/auditorium_560_43.jpg +bowling/bowling_0077.jpg +trainstation/gare_148_17_flickr.jpg +office/home_office.jpg +laundromat/lavanderia_25_07_flickr.jpg +shoeshop/shoes_shop_18_19_altavista.jpg +airport_inside/airport_inside_0274.jpg +gym/web_cardio_theatre_gym.jpg +kindergarden/100_1356_0096.jpg +concert_hall/asplundh_concert_hall.jpg +laundromat/lavanderia_96_20_flickr.jpg +computerroom/cyb_salle_pc_1.jpg +closet/graphic_home.jpg +office/corneroffice.jpg +kitchen/kitchen006.jpg +locker_room/locker_room_google_0061.jpg +subway/subway_0073.jpg +library/opacs.jpg +kitchen/dsc04183.jpg +videostore/videoclub_01_15_flickr.jpg +bookstore/Librairie_28_01_altavista.jpg +tv_studio/tv_studio_21_02_altavista.jpg +grocerystore/APRIL242002FakeGroceryStore.jpg +artstudio/art_painting_studio_10_15_altavista.jpg +pantry/pantry_165_16_flickr.jpg +warehouse/warehouse_0467.jpg +library/Day100006web.jpg +bathroom/room318.jpg +inside_subway/inside_subway_0037.jpg +waitingroom/salle_attente3.jpg +poolinside/spa_480x320.jpg +hospitalroom/01HospitalRoom.jpg +kitchen/kitchen136.jpg +movietheater/p1010975_1__28.jpg +winecellar/wine_storage_16_09_altavista.jpg +bowling/bowling_0139.jpg +gameroom/gameroom_05_400.jpg +laboratorywet/wet_lab_30_15_altavista.jpg +restaurant_kitchen/restaurant_kitchen_google_0091.jpg +movietheater/tmpa4d7c0f.jpg +dining_room/indoor_0315.jpg +bookstore/Libreria_19_03_altavista.jpg +bedroom/int855.jpg +jewelleryshop/281208.jpg +waitingroom/lobby2.jpg +auditorium/6a00d834515beb69e200e55378baa58834_800wi_1__16.jpg +bookstore/Libreria_15_07_altavista.jpg +computerroom/COMPUTER_2520ROOM_2520PICTURE2.jpg +grocerystore/shop30.jpg +laboratorywet/wet_lab_43_17_altavista.jpg +bowling/bowling_0086.jpg +greenhouse/ferns4.jpg +operating_room/surgery_room_30_14_altavista.jpg +closet/closet_organizer.jpg +gym/gimnasio_167_13_flickr.jpg +cloister/cloister1.jpg +meeting_room/i_f_small_conference_room.jpg +pantry/pantry_33_15_flickr.jpg +casino/casino_0228.jpg +kindergarden/langlib.jpg +lobby/marina_terra_hotel_lobby.jpg +buffet/warwick_buffet_cater_catering_food_1960_1960s_retro_kf5837.jpg +cloister/Cloister221.jpg +movietheater/sala_de_cine4.jpg +nursery/rowans_nursery_baby_room_1.jpg +toystore/jugueteria_08_21_flickr.jpg +nursery/nursery2thumb.jpg +bathroom/IMG_1313.jpg +shoeshop/zapateria_04_02_flickr.jpg +videostore/StoreWeb.jpg +jewelleryshop/12_1.jpg +prisoncell/prison_cell_05_14_altavista.jpg +classroom/earthquake_relief1.jpg +bakery/bakery_02_03_yahoo.jpg +office/ins2.jpg +shoeshop/shoes_shop_47_04_altavista.jpg +trainstation/estacion_de_ferrocarriles_44_19_altavista.jpg +library/inside01.jpg +kindergarden/pre_school_6_66104926_std.jpg +buffet/cimg3556_1.jpg +lobby/lobby5.jpg +pantry/02_pantry_storage_organization_lg.jpg +subway/subway_0242.jpg +bookstore/bookstore_full.jpg +poolinside/piscina_cubierta_11_11_altavista.jpg +waitingroom/11.jpg +laundromat/lavanderia_77_05_flickr.jpg +dentaloffice/dental_office_15_17_altavista.jpg +inside_subway/inside_subway_0115.jpg +hairsalon/6988.jpg +lobby/sLobby11.jpg +shoeshop/facade_gd.jpg +children_room/AT_99_6_8883_12_l.jpg +tv_studio/tv_studio_40_01_altavista.jpg +trainstation/gare_32_02_flickr.jpg +fastfood_restaurant/Siem_Reap_airport_Dairy_Queen.jpg +bar/bar_0231.jpg +casino/casino_0001.jpg +nursery/7_chambre_enfant360.jpg +mall/ShopView_Gesundbrunnen.jpg +museum/museo_138_19_flickr.jpg +airport_inside/airport_inside_0123.jpg +grocerystore/groceries3_main_Full.jpg +toystore/toys_store_16_01_altavista.jpg +office/o8.jpg +garage/IMG_2145.jpg +livingroom/living71.jpg +locker_room/locker_room_google_0043.jpg +bathroom/indoor_0078.jpg +dentaloffice/dentista_119_22_flickr.jpg +elevator/elevator_google_0015.jpg +livingroom/roomscan11.jpg +computerroom/cip_pool.jpg +elevator/elevator_google_0042.jpg +operating_room/surgery_room_07_19_altavista.jpg +airport_inside/airport_inside_0371.jpg +elevator/elevator_google_0084.jpg +office/o7.jpg +operating_room/surgery_room_31_13_altavista.jpg +closet/closet9713.jpg +livingroom/room368.jpg +corridor/p1010077_c.jpg +grocerystore/store_fruit_counter.jpg +lobby/Locker_Room.jpg +airport_inside/airport_inside_0316.jpg +kitchen/kitchen004.jpg +fastfood_restaurant/DSC00476.jpg +livingroom/room498.jpg +auditorium/b76521a_3966ea3_b_1__139.jpg +bedroom/indoor_0057.jpg +prisoncell/prison_cell_baby_child.jpg +bedroom/masterbed2.jpg +casino/casino_0362.jpg +inside_subway/inside_subway_0053.jpg +greenhouse/greenhouse_fullgrowth.jpg +lobby/MBASE_historia.jpg +bar/bar_0426.jpg +bookstore/Libreria_17_03_altavista.jpg +grocerystore/08082003_aisle.jpg +bowling/bowling_0001.jpg +clothingstore/st_joseph_michigan_shopping_fashion_boutique_clothing3.jpg +dentaloffice/dentista_03_17_altavista.jpg +subway/subway_0355.jpg +inside_subway/inside_subway_0018.jpg +museum/museo_16_22_flickr.jpg +library/Orlando_library_090.jpg +cloister/lacock_cloister.jpg +corridor/n457061.jpg +inside_bus/inside_bus_012.jpg +hospitalroom/DSC01811.jpg +office/int77.jpg +library/Fairfield_Pub_Library_A.jpg +lobby/Le_Meridien_Kathmandu_Hotel_Lobby_Sep_2005.jpg +poolinside/piscina_cubierta_12_11_altavista.jpg +inside_bus/inside_bus_052.jpg +toystore/keeling_market20.jpg +trainstation/train_station_48_05_altavista.jpg +winecellar/bodega_04_03_altavista.jpg +concert_hall/1217_2_1000_Buro_Perth_Concert_Hall_2.jpg +restaurant/restaurant_15_18_altavista.jpg +buffet/ricetable.jpg +florist/star_florist.jpg +airport_inside/airport_inside_0453.jpg +greenhouse/greenhouse042.jpg +bakery/bakery_11_14_yahoo.jpg +garage/garage187.jpg +jewelleryshop/94_13.jpg +fastfood_restaurant/6.jpg +gym/media39989.jpg +laundromat/lavanderia_53_13_flickr.jpg +shoeshop/marky_png.jpg +poolinside/1637_7502M.jpg +livingroom/living67.jpg +warehouse/warehouse_0171.jpg +artstudio/art_painting_studio_51_15_altavista.jpg +church_inside/Poitiers_Church_of_Notre_Dame_de_la_Grande_IMG_4877.jpg +hospitalroom/IMG_1313.jpg +stairscase/IMG_7676.jpg +toystore/Spielzeug_35_09_flickr.jpg +hospitalroom/habitacion_hospital_06_10_altavista.jpg +laboratorywet/laboratorio_quimica_06_05_altavista.jpg +airport_inside/airport_inside_0244.jpg +gym/gimnasio_26_15_flickr.jpg +studiomusic/control1.jpg +bookstore/Libreria_35_17_altavista.jpg +hospitalroom/IMG_0042.jpg +studiomusic/studio21.jpg +inside_bus/inside_bus_028.jpg +trainstation/gare_07_11_flickr.jpg +hairsalon/hair_total.jpg +shoeshop/3149_1_empresa1.jpg +artstudio/art_painting_studio_39_06_altavista.jpg +classroom/salle_24.jpg +concert_hall/concerthall_empty.jpg +waitingroom/Waiting_Room_1.jpg +auditorium/la_salle_de_l_auditorium_imagelarge_1__154.jpg +trainstation/train_station_37_10_altavista.jpg +bookstore/bookstore_25_20_altavista.jpg +inside_subway/inside_subway_0280.jpg +bar/bar_0131.jpg +buffet/308782383_1400880090.jpg +gym/gimnasio_46_18_altavista.jpg +fastfood_restaurant/colorado_springs_chipotle6.jpg +buffet/Sunday_Dinner.jpg +gym/url.jpg +corridor/p1010078_c.jpg +mall/mall40.jpg +prisoncell/jailcell333.jpg +studiomusic/susustudio.jpg +inside_subway/inside_subway_0359.jpg +stairscase/1115735139.jpg +concert_hall/OnondagaCivicCenter.jpg +children_room/bec438b5_c449_400d_a0b3_e9f9309c0d7e_player_41_.jpg +locker_room/locker_room_google_0245.jpg +restaurant/int60.jpg +gameroom/salle_de_jeux_09_05_altavista.jpg +gameroom/gameroom_good.jpg +mall/alamanda.jpg +studiomusic/117989573_65294a6fcb.jpg +gameroom/salle_de_jeux441.jpg +office/o6.jpg +classroom/Japanese_classroom.jpg +grocerystore/WEB2.jpg +buffet/Buffet_Lettuce_gif.jpg +tv_studio/cd_teleideal_108_33_.jpg +bedroom/indoor_0515.jpg +dining_room/interior005.jpg +hairsalon/salon1687.jpg +studiomusic/Studiow560h420.jpg +restaurant_kitchen/restaurant_kitchen_google_0039.jpg +trainstation/room212.jpg +concert_hall/canopy.jpg +pantry/pantry_106_16_flickr.jpg +library/1093023.jpg +children_room/AT_99_1_7838_12A_l.jpg +gym/fitness_center3.jpg +stairscase/roomscan29.jpg +bookstore/125_115_LibrairieNas.jpg +classroom/Level_6_C_classroom.jpg +bar/bar_0233.jpg +grocerystore/167613_3.jpg +cloister/525066.jpg +hairsalon/salon10.jpg +operating_room/surgery_room_30_08_altavista.jpg +hairsalon/Salon1111.jpg +restaurant/bistro_restaurant_for.jpg +bakery/boulangerie_48_07_yahoo.jpg +studiomusic/music-studio.jpg +elevator/elevator_google_0050.jpg +livingroom/living38.jpg +winecellar/bodega_101_07_flickr.jpg +locker_room/locker_room_google_0143.jpg +winecellar/cave_champagne_06_08_altavista.jpg +restaurant/Bertucci_01_lg.jpg +prisoncell/036f.jpg +clothingstore/86_Bookstore1.jpg +elevator/elevator_google_0102.jpg +nursery/baby_room_and_jenny_722549.jpg +bar/bar_0132.jpg +inside_bus/inside_bus_034.jpg +pantry/Closet_off_of_kitchen.jpg +children_room/adler_pink_kids_room.jpg +library/PCPL_gen.jpg +corridor/hallway1_c.jpg +hairsalon/111528037_7494ae335f.jpg +closet/One_of_2_Closets_in_Master_Bedroom_A_Walk_In_Closet.jpg +stairscase/N457072.jpg +movietheater/movietheater_google_0010.jpg +winecellar/wine_cellar_40_18_altavista.jpg +bowling/bowling_0090.jpg +clothingstore/FotoLoj_ID1_2007_3_30_L1030672.jpg +children_room/kids_playroom_zurich_45_.jpg +deli/deli_131_15_flickr.jpg +hairsalon/willkommen.jpg +bedroom/IMG_2127.jpg +closet/main_closet.jpg +restaurant/photos_salle1.jpg +restaurant_kitchen/restaurant_kitchen_google_0066.jpg +church_inside/FreeFoto_castle_30_33.jpg +dentaloffice/dentista_oficina_01_07_flickr.jpg +lobby/lobby121211.jpg +bar/bar_0194.jpg +laboratorywet/wet_lab_08_10_altavista.jpg +office/despacho3_400.jpg +stairscase/stairs02.jpg +bowling/bowling_0058.jpg +restaurant/restaurant_06_10_altavista.jpg +concert_hall/west1.jpg +jewelleryshop/colonialjewelers41_32_.jpg +restaurant/url_2.jpg +dentaloffice/dental_office.jpg +mall/full_shopping_Central_1.jpg +stairscase/D16a.jpg +winecellar/wine_cellar_03_03_altavista.jpg +office/cover_image_dreamoffice.jpg +locker_room/locker_room_google_0034.jpg +garage/garage_02.jpg +gameroom/sala_de_juegos_08_20_altavista.jpg +kindergarden/preschool_room.jpg +meeting_room/c11.jpg +garage/vacation_home_57garage.jpg +operating_room/operating_room_27_01_altavista.jpg +buffet/060926buffet_560.jpg +computerroom/IMG_1144.jpg +trainstation/estacion_de_ferrocarriles_39_16_altavista.jpg +bathroom/indoor_0242.jpg +videostore/blockbuster_38_01_altavista.jpg +office/va_02_05_9775_04_l.jpg +buffet/322497197_a67f529fbe.jpg +artstudio/art_painting_studio_36_06_altavista.jpg +toystore/jugueteria_15_10_flickr.jpg +casino/casino_0324.jpg +concert_hall/ava_theater.jpg +subway/subway_0288.jpg +kitchen/cdmc1289.jpg +laboratorywet/wet_lab_24_11_altavista.jpg +tv_studio/tv_studio876_69_.jpg +inside_subway/inside_subway_0175.jpg +bookstore/Libreria_49_02_altavista.jpg +laundromat/lavanderia_48_01_flickr.jpg +subway/subway_0463.jpg +trainstation/train_station_47_06_altavista.jpg +deli/deli_63_04_flickr.jpg +gameroom/AT_99_2_7450_20_l.jpg +bookstore/OakParkFrontView.jpg +gameroom/gameroom688.jpg +movietheater/sala_de_cine_13_03_altavista.jpg +mall/hillsdale_mall_photo2.jpg +prisoncell/jail02.jpg +artstudio/artist_studio_12_14_altavista.jpg +subway/subway_0257.jpg +bathroom/bath.jpg +waitingroom/JubileeMeetingRoom.jpg +hospitalroom/050622_13x.jpg +garage/dbl_garage_interior.jpg +clothingstore/Boutique_Takenoko.jpg +cloister/525014.jpg +livingroom/ph_02_03_4675_04_l.jpg +pantry/pantry_01_11_flickr.jpg +studiomusic/estudio.jpg +toystore/url56.jpg +florist/050621_florist2.jpg +concert_hall/concertgebouw2005.jpg +waitingroom/sLobby09.jpg +museum/museum_33_14_altavista.jpg +shoeshop/shoes_shop_32_06_altavista.jpg +warehouse/warehouse_0062.jpg +concert_hall/slide7.jpg +library/bibliotheque55.jpg +children_room/img_0194_21_.jpg +mall/wMallAmInt2_ep.jpg +meeting_room/n457018.jpg +bookstore/Libreria_08_02_altavista.jpg +concert_hall/concerthall01.jpg +inside_bus/inside_bus_099.jpg +museum/museum_10_11_flickr.jpg +office/office5.jpg +gameroom/SalleDeJeux.jpg +movietheater/img_497_819_1__23.jpg +dining_room/dinner01.jpg +locker_room/locker_room_google_0205.jpg +bookstore/bookstore_45_03_altavista.jpg +grocerystore/url_1.jpg +bowling/bowling_0103.jpg +concert_hall/PAC_interior.jpg +restaurant_kitchen/restaurant_kitchen_google_0024.jpg +hairsalon/_PZF03ZQH3ZmH0Av0kYGRg.jpg +laboratorywet/1_analytical_laboratories.jpg +movietheater/movietheater_google_0042.jpg +corridor/couloir01.jpg +toystore/speelgoed_40_18_flickr.jpg +kindergarden/prek2.jpg +lobby/sLobby20.jpg +museum/museo_86_05_flickr.jpg +computerroom/2632.jpg +toystore/toys_store_27_19_altavista.jpg +bakery/boulangerie_30_11_altavista.jpg +concert_hall/Mecanoo_in_Kaohsiung_Taiwan_3.jpg +corridor/lv_02_04_10915_20_l.jpg +studiomusic/int771.jpg +bathroom/room357.jpg +restaurant/salle1.jpg +computerroom/Informatica4.jpg +children_room/AT_98_5_989_08_l.jpg +deli/deli_119_04_flickr.jpg +tv_studio/tv_studio2b_115_.jpg +videostore/videoclub_09_13_altavista.jpg +buffet/860304346_f61ad7eb22.jpg +deli/deli_111_17_flickr.jpg +shoeshop/Franchise500x375_1.jpg +artstudio/artist_studio_31_11_altavista.jpg +garage/garage_inside.jpg +kitchen/indoor_0440.jpg +artstudio/art_painting_studio_23_06_altavista.jpg +inside_bus/inside_bus_039.jpg +clothingstore/img_3242_tokyo_harajuku_jingu_mae_meiji_dori_mise_fashion_clothing_store_on_meiji_dori_harajuku_jingumae.jpg +fastfood_restaurant/melvados_gif.jpg +jewelleryshop/01.jpg +livingroom/room5.jpg +tv_studio/tv_am_studio_a_1983_tv_am_org_uk_400p_107_.jpg +bar/bar_0386.jpg +dining_room/Dining20.jpg +concert_hall/sydney_opera_house_concert_hall.jpg +livingroom/living75.jpg +laboratorywet/wet_lab_17_14_altavista.jpg +subway/subway_0351.jpg +trainstation/gare_125_22_flickr.jpg +tv_studio/tv_studio_06_08_altavista.jpg +restaurant_kitchen/restaurant_kitchen_google_0026.jpg +museum/museum_48_11_altavista.jpg +children_room/AT_99_2_8171_36_l.jpg +grocerystore/shop17.jpg +pantry/Blakes_26_.jpg +concert_hall/main_concert_hall_within.jpg +airport_inside/airport_inside_0085.jpg +hospitalroom/ICU.jpg +laundromat/470_144925.jpg +classroom/02_3_Day_Classroom_Overview.jpg +restaurant/restaurant_09_03_altavista.jpg +kitchen/kitchen226.jpg +elevator/elevator_google_0079.jpg +laundromat/Guest_Laundry_Room.jpg +livingroom/at_01_6b_5490_30a_l.jpg +restaurant/BistroMini.jpg +restaurant_kitchen/restaurant_kitchen_google_0099.jpg +kindergarden/classroom8.jpg +office/office6.jpg +bar/bar_0136.jpg +elevator/elevator_google_0037.jpg +locker_room/locker_room_google_0126.jpg +stairscase/stairs01.jpg +winecellar/bodega_69_16_flickr.jpg +bedroom/s61.jpg +classroom/salle_de_cours_2.jpg +garage/garage_interior1.jpg +inside_bus/inside_bus_085.jpg +deli/deli_45_19_flickr.jpg +gameroom/salle_de_jeux156.jpg +casino/casino_0387.jpg +computerroom/ComputerClassroom2.jpg +corridor/IMG_9415.jpg +museum/museo_10_09_altavista.jpg +operating_room/operating_room_24_16_altavista.jpg +bar/bar_0279.jpg +grocerystore/070707_15291.jpg +jewelleryshop/foto_joyeria.jpg +stairscase/room511.jpg +laundromat/lavanderia_53_23_flickr.jpg +prisoncell/Jail_Cell23.jpg +bookstore/bookstore_23_21_flickr.jpg +locker_room/locker_room_google_0244.jpg +movietheater/CCP0014467_P.jpg +bar/bar_0302.jpg +church_inside/metropolitana_36_18_flickr.jpg +restaurant/chambre_resto_3.jpg +children_room/children_playroom_12_.jpg +restaurant_kitchen/restaurant_kitchen_google_0072.jpg +livingroom/l11.jpg +pantry/pantry_40_03_flickr.jpg +closet/Duluth_CherryX.jpg +jewelleryshop/yampell_sidewall_30_.jpg +meeting_room/conf28.jpg +winecellar/cave_champagne_09_14_altavista.jpg +winecellar/wine_cellar_39_13_altavista.jpg +closet/MasterSuiteTrad.jpg +inside_subway/inside_subway_0338.jpg +bathroom/indoor_0368.jpg +deli/deli_119_19_flickr.jpg +dentaloffice/dentaire_01_22_flickr.jpg +laboratorywet/wet_lab_03_19_altavista.jpg +office/o2.jpg +concert_hall/Concertgebouw1.jpg +bar/bar_0439.jpg +kindergarden/classroom122.jpg +nursery/complete_baby_room_furnitures.jpg +classroom/Classroom010_full.jpg +computerroom/aula_informatica_gif.jpg +elevator/elevator_google_0083.jpg +kitchen/indoor_0262.jpg +dentaloffice/dentista_117_06_flickr.jpg +tv_studio/plato_de_television_01_03_altavista.jpg +restaurant/restaurante_06_08_altavista.jpg +gym/Gym432.jpg +bookstore/Libreria_19_02_altavista.jpg +library/students_library_computers.jpg +lobby/lobby2998.jpg +nursery/103ensembleb.jpg +bathroom/roomscan34.jpg +classroom/sala_de_aula.jpg +kindergarden/toddlers.jpg +prisoncell/carcel_79_22_flickr.jpg +museum/museum_43_03_altavista.jpg +trainstation/gare_83_16_flickr.jpg +florist/florist_03_01_flickr.jpg +gameroom/game_room.jpg +videostore/videoclub_07_15_flickr.jpg +stairscase/int696.jpg +church_inside/Kirche45.jpg +warehouse/warehouse_0126.jpg +dining_room/dining017.jpg +restaurant/restaurant_17_17_altavista.jpg +trainstation/gare_115_16_flickr.jpg +greenhouse/invernaderos_fotos_015.jpg +elevator/elevator_google_0055.jpg +livingroom/l12.jpg +movietheater/movietheater_google_0006.jpg +bakery/bakery_02_20_yahoo.jpg +inside_subway/inside_subway_0154.jpg +bakery/bakery_14_17_yahoo.jpg +dentaloffice/dentista_121_23_flickr.jpg +laboratorywet/laboratorio_quimica_01_18_flickr.jpg +church_inside/Columb_Eglise_int1.jpg +garage/9_large.jpg +buffet/central_buffet_inside.jpg +airport_inside/airport_inside_0141.jpg +bedroom/at_00_05_8293_15_l.jpg +clothingstore/501005839_primary.jpg +restaurant/restaurant_27_17_altavista.jpg +cloister/Refect_Cloister_Jun04_D3613sAR.jpg +toystore/toys_store_27_05_altavista.jpg +garage/IMG_0122.jpg +nursery/nursery3.jpg +computerroom/computerroom03.jpg +movietheater/p1010981_1__30.jpg +warehouse/warehouse_0194.jpg +pantry/pantry_87_02_flickr.jpg +bathroom/room280.jpg +florist/florist_43_02_altavista.jpg +prisoncell/7579543Cruise094.jpg +children_room/playroom1_53_.jpg +elevator/elevator_google_0016.jpg +jewelleryshop/5b_tesorini_9_.jpg +bookstore/bookstore_39_06_altavista.jpg +trainstation/estacion_de_ferrocarriles_28_09_altavista.jpg +dining_room/dining058.jpg +inside_bus/inside_bus_081.jpg +videostore/video_store_10_15_altavista.jpg +classroom/DCP_1461grande.jpg +gym/gym3.jpg +jewelleryshop/joyeria.jpg +subway/subway_0094.jpg +stairscase/int10.jpg +elevator/elevator_google_0025.jpg +videostore/videostore.jpg +tv_studio/tv_studio_18_08_altavista.jpg +clothingstore/Paris_Boutique_Inside_Photo_three_way_mirro.jpg +videostore/videoteca_02_18_flickr.jpg +warehouse/warehouse_0366.jpg +meeting_room/n457039.jpg +poolinside/piscina_cubierta_04_14_altavista.jpg +jewelleryshop/4.jpg +bedroom/b9.jpg +bookstore/Libreria_16_18_altavista.jpg +children_room/90906stacysplayroomafter004_w300h225_9_.jpg +bakery/bakery_07_17_yahoo.jpg +closet/closet_open.jpg +studiomusic/Studio1small.jpg +clothingstore/336110682_2e01b0f9be.jpg +kindergarden/IMG_1504_18202246_std.jpg +concert_hall/StageFulltag.jpg \ No newline at end of file diff --git a/aggregate_covariance.m b/aggregate_covariance.m new file mode 100755 index 0000000..17e5faf --- /dev/null +++ b/aggregate_covariance.m @@ -0,0 +1,40 @@ +% Carl Doersch (cdoersch at cs dot cmu dot edu) +% compute features for a set of images, and then the sufficient +% statistics needed for computing the mean and covariance matrix. +ntotal=0; +for(i=1:numel(dsidx)) + params=ds.conf.params; + I = im2double(getimg(ds,ds.myiminds(dsidx(i)))); + + if(dsfield(params,'imageCanonicalSize')) + [IS, scale] = convertToCanonicalSize(I, params.imageCanonicalSize); + else + IS=I; + end + pyramid = constructFeaturePyramidForImg(I, params); + pcs=round(ds.conf.params.patchCanonicalSize/ds.conf.params.sBins)-2; + [features, levels, indexes] = unentanglePyramid(pyramid, pcs,struct('normalizefeats',false)); + if(isempty(features)) + continue; + end + if(~exist('featsum','var')) + featsum=sum(features,1); + else + featsum=featsum+sum(features,1); + end + ntotal=ntotal+size(features,1); + if(~exist('dotsum','var')) + dotsum=features'*features; + else + dotsum=dotsum+features'*features; + end +end +if(ntotal==0) + return +end +ds.n{dsidx(1)}=ntotal; +ds.featsum{dsidx(1)}=featsum; +ds.dotsum{dsidx(1)}=dotsum; +for(i=1:numel(dsidx)) + ds.imgflags{dsidx(i)}=1; +end diff --git a/assigntoclosest.m b/assigntoclosest.m new file mode 100755 index 0000000..327d24c --- /dev/null +++ b/assigntoclosest.m @@ -0,0 +1,36 @@ +% efficient nearest-neighbors in Euclidean distance. +% each row of toassign is assigned to the nearest row in targets. +% closest(i) is the row-index in targets of the closest element +% for toassign(i,:). outdist(i) is the distance to that point. +function [closest,outdist]=assigntoclosest(toassign,targets,nonrm) + global ds; + if(isempty(targets)) + closest=[]; + outdist=[]; + return; + end + targsq=targets.^2;%sum(targets.^2,2); + closest=zeros(size(toassign,1),1); + outdist=zeros(size(toassign,1),1); + for(i=1:800:size(toassign,1)) + inds=i:min(i+800-1,size(toassign,1)); + batch=toassign(inds,:); + batchsq=sum(batch.^2,2); + inprod=targets*(batch'); + if(dsbool(ds.conf,'whiteningv2')||(exist('nonrm','var')&&nonrm)) + dist=inprod; + [outdist(inds),closest(inds)]=max(dist,[],1); + else + %dist=bsxfun(@plus,bsxfun(@minus,batchsq',2*inprod),targsq); + normval=sqrt(bsxfun(@rdivide,targsq*(batch'~=0),sum(batch'~=0,1))-bsxfun(@rdivide,(targets*(batch'~=0)).^2,sum(batch'~=0,1).^2)); + %normval=sqrt(targsq*(batch'~=0)-bsxfun(@rdivide,(targets*(batch'~=0)).^2,sum(batch'~=0,1))); + + normval(normval==0)=1; + dist=(-bsxfun(@rdivide,inprod,sum(batch'~=0,1))./normval); + %if(any(dist(:))<0) + %keyboard; + %end + [outdist(inds),closest(inds)]=min(dist,[],1); + end + end +end diff --git a/autoclust_opt_init.m b/autoclust_opt_init.m new file mode 100755 index 0000000..2b3bb39 --- /dev/null +++ b/autoclust_opt_init.m @@ -0,0 +1,82 @@ +% Carl Doersch (cdoersch at cs dot cmu dot edu) +% Initialize each detector in one batch. Initial weight vectors are in +% ds.detectors{dsidx}, and initial patch features are in ds.initFeats. +% For the most part, it's just copying the data in ds.initFeats into the +% detector structure, but it also needs to set the bias. It's important +% to give a reasonable initial estimate of the bias because if affects the +% number of patches mined in the early rounds, which can have a big impact +% on speed. + +posPats=dsload('ds.initPatches'); +dsload('ds.initFeats'); + +% Find the label for this batch and select a set of negative patches from +% ds.initFeats. These negatives are needed to calibrate each detector in the batch. +dsload('ds.imgs'); +dsload('ds.classperbatch'); +dsload('ds.batchfordetr'); +myclusts=ds.batchfordetr(ds.batchfordetr(:,2)==dsidx,1); +neginds=find(idxwithdefault(ds.imgs{ds.conf.currimset}.label,ds.initPatches(:,7),0)~=ds.classperbatch(dsidx)); +rand('seed',dsidx); +rp=randperm(numel(neginds)); +rp=rp(1:min(numel(rp),5000)); +negPats=ds.initPatches(neginds(rp),:); +initFeatsNeg=ds.initFeats(neginds(rp),:); + +% loop over the detectors, initializing each one. Note that ds.conf.params.graddescfun +% is called to actually do the initialization. +alldets=[]; +featstokeep={}; +for(i=1:size(ds.detectors{dsidx}.id,1)) + % Select a single detector. + ctr=effstridx(ds.detectors{dsidx},i); + disp(['optimizing: ' num2str(ctr.id)]); + + % Find the initial feature(s) for this patch (in this algorithm, it + % will be the single initially sampled patch). + data=[ds.initFeats(ds.initPatches(:,6)==myclusts(i),:);initFeatsNeg]; + + % Compute whether each patch is a positive (it's associated with this detector) + % or a negative (it came from initFeatsNeg). + lab=zeros(size(data,1),1); + lastpos=sum(ds.initPatches(:,6)==myclusts(i)); + lab(1:lastpos)=1; + + % Normalize and rescale the detector. TODO: this should probably + % be a parameter. + ctr.w=ctr.w/norm(ctr.w)*2; + ctr.b=.1; + + % Call the gradient descent function to do the initialization. + % doGradDescentProj will simply set ctr.b such that the constraint + % is satisfied. + [ctr_out_tmp,scores]=ds.conf.params.graddescfun(data',lab*2-1,[ctr.w ctr.b]',ones(size(lab')),0); + ctr.w=c(ctr_out_tmp(1:end-1))'; + ctr.b=ctr_out_tmp(end); + ctr_out(i)=ctr; + + % Read the scores produced by ds.conf.params.graddescfun for each patch + % and select only the ones above -.02. However, make sure that we have + % at least numel(ctr.w)/5; too few patches may cause us to degenerate later. + sscores=sort(scores,'descend'); + thr=min(-.02,sscores(min(ceil(numel(ctr.w)/5),numel(sscores)))); + dets=[posPats(ds.initPatches(:,6)==myclusts(i),:);negPats(scores((lastpos+1):end)>=thr,:)]; + featstokeep{end+1,1}=data([true(lastpos,1);(scores((lastpos+1):end)>=thr)'],:); + dets(:,6)=myclusts(i); + alldets=[alldets;dets]; + +end + +% write out the initialized detectors & cache the detections in the +% proper location. If ds.sys.distproc.localdir is set, write the +% cached features there. Note that this will "assign" this batch +% to one particular machine; any other machine that tries to access +% the cache will fail! +ds.round.detectors{dsidx}=str2effstr(ctr_out); +ds.round.prevdets{dsidx}=alldets; +if(dsfield(ds,'sys','distproc','localdir')) + prevfeats=cell2mat(featstokeep); + save([ds.sys.distproc.localdir 'prevfeats' num2str(dsidx) '_0.mat'],'prevfeats'); +else + ds.round.prevfeats{dsidx}=cell2mat(featstokeep); +end diff --git a/autoclust_optimize.m b/autoclust_optimize.m new file mode 100755 index 0000000..cc014e8 --- /dev/null +++ b/autoclust_optimize.m @@ -0,0 +1,155 @@ +dsload('ds.batchfordetr'); +dsload('ds.classperbatch'); +imgs=dsload('ds.imgs{ds.conf.currimset}'); +% load the detections that were used for training on the previous round. +% prevdets countains the bounding boxes; prevweights contains the alpha's +% from the paper, and prevfeats is the actual feature vectors. +prevdets=dsload(['ds.round.prevdets{' num2str(dsidx) '}'],'clear'); +dsload(['ds.round.prevweights{' num2str(dsidx) '}']); +if(isfield(ds.round,'prevweights')) + prevweights=ds.round.prevweights{dsidx}; + ds.round=rmfield(ds.round,'prevweights'); +else + prevweights=ones(size(prevdets,1),1); +end +dsload('ds.round.roundid'); +% if there's a local directory, load the features from there (we're guaranteed +% to be the only machine optimizing this detector). Otherwise they're +% stored in dswork. +if(dsfield(ds,'sys','distproc','localdir')) + if(ds.round.roundid>5) + % if you're running out of disk space you can delete data from old rounds...but note + % that this will make it impossible to back up. + delete([ds.sys.distproc.localdir 'prevfeats' num2str(dsidx) '_' num2str(ds.round.roundid-2) '.mat']); + end + load([ds.sys.distproc.localdir 'prevfeats' num2str(dsidx) '_' num2str(ds.round.roundid-1) '.mat']); +else + prevfeats=dsload(['ds.round.prevfeats{' num2str(dsidx) '}'],'clear'); +end + +dsload('ds.round.myiminds'); +mydetrs=ds.batchfordetr(ds.batchfordetr(:,2)==dsidx,1); + +% Discard any irrelevant patches from previous rounds. That generally means +% any patch from an image that we re-ran detection on during hte current round. +% The first patch in the list for each detector, however, is generally +% kept (control this behavior with the ds.round.exceptfirst flag). This patch +% is the one that was randomly sampled to initialize the cluster. This behavior +% is an artifact from versions of this codebase which treated the initial patch +% as special and broke if it disappeared. It's probably not needed, but +% I had this flag set for the experiments in the paper. +dsload('ds.round.discardprevpatches'); +dsload('ds.round.exceptfirst'); +tokeep=~ismember(prevdets(:,7),ds.round.myiminds); +[~,candidatepatches]=ismember(mydetrs,prevdets(:,6),'R2012a'); +if(~all(imgs.label(prevdets(candidatepatches,7))==ds.classperbatch(dsidx))) + error('classperbatch wrong'); +end +tokeep(candidatepatches)=true; +if(dsbool(ds.round,'discardprevpatches')) + tokeep(:)=false; + if(dsbool(ds.round,'exceptfirst')) + tokeep(candidatepatches)=true; + end +end +discardifnew=prevdets(candidatepatches(tokeep(candidatepatches)),[6:7]); +dets={prevdets(tokeep,:)}; +feats={prevfeats(tokeep,:)}; +allovlweight={prevweights(tokeep,:)}; +clear prevdets; +clear prevfeats; +clear prevweights; + +% Load the detections from the current round of detection. +for(i=1:numel(ds.round.myiminds)) + if(~isempty(ds.round.newfeat{dsidx,i}.assignedidx)) + tokeep=~ismember(ds.round.newfeat{dsidx,i}.assignedidx(:,6:7),discardifnew,'rows'); + dets{end+1}=ds.round.newfeat{dsidx,i}.assignedidx(tokeep,:); + feats{end+1}=double(ds.round.newfeat{dsidx,i}.feat(tokeep,:)); + if(isfield(ds.round.newfeat{dsidx,i},'ovlweights')) + allovlweight{end+1}=ds.round.newfeat{dsidx,i}.ovlweights(tokeep,:); + else + allovlweight{end+1}=ones(size(feats{end},1),1); + end + end + if(mod(i,100)==0) + disp(['img ' num2str(i) ' of ' num2str(numel(ds.round.myiminds))]) + end +end +ds.newdets{dsload('ds.round.roundid'),dsidx}=structcell2mat(dets(2:end)'); + +dets=structcell2mat(dets(:)); +allovlweight=structcell2mat(allovlweight(:)); +feats=structcell2mat(feats(:)); +if(size(feats,1)>500000) + error('featsall too big') +end + +% Distribute the detections in this batch by detector id, so we can train one +% detector at a time. +[dets feats allovlweight idforcell]=distributeby(dets, feats, allovlweight, dets(:,6)); +if(~all(idforcell==mydetrs(:))) + idforcell + mydetrs + error('something got out of order!'); +end + +% load the actual detectors. +ctrs=dsload(['ds.round.detectors{' num2str(dsidx) '}'],'clear'); +newctrs=zeros(size(ctrs)); +resfeat={}; +resdets={}; + +ds.round.newfeat={}; +nsv=[]; +for(i=1:numel(mydetrs)) + a=tic; + mymemory; + weights=allovlweight{i}; + + disp(['optimizing:' num2str(mydetrs(i))]); + disp(['total features:' num2str(size(feats{i},1))]); + + % Pull out the detector and optimize it. See doGradientDescentproj. + ctr=effstridx(ctrs,i); + [newctrtmp,scores]=ds.conf.params.graddescfun(feats{i}',imgs.label(dets{i}(:,7))==ds.classperbatch(dsidx),[ctr.w ctr.b]',weights,dsload('ds.round.roundid')); + newctr{i,1}=ctr; + newctrtmp=newctrtmp(:)'; + newctr{i}.w=newctrtmp(1:end-1); + newctr{i}.b=newctrtmp(end); + + dets{i}(:,5)=scores(:); + + % discard any detections that have low scores. We keep any detections + % with score higher than -.02/round_id, and keep at least as many detections + % as the number of dimensions divided by 5. Any less than this and the detections + % on the next round could cause the element to overfit to a tiny number of patches + % on the next round, and the round after that it will fire all over the place. + thr=sort(scores,'descend'); + thr=min(-.02/dsload('ds.round.ndetrounds'),thr(min(ceil(size(ctr.w,2)/5),numel(thr)))); + scores(1)=Inf;%make sure we keep the first one, since the rest of the code assumes it's there. + feats{i}=feats{i}((scores>=thr)',:); + dets{i}=dets{i}(scores>=thr,:); + allovlweight{i}=allovlweight{i}(scores>=thr); + nsv(i,1)=sum(scores>=thr); + toc(a) +end + +% convert the set of detections and features into giant matrices to save. +dets=cell2mat(dets(:)); +feats=cell2mat(feats(:)); +ds.nextround.prevdets{dsidx}=dets; +ds.nextround.nsv{dsidx}=nsv; +% again, if we have local storage, save it locally. Otherwise, save it to dswork. +if(dsfield(ds,'sys','distproc','localdir')) + prevfeats=feats; + save([ds.sys.distproc.localdir 'prevfeats' num2str(dsidx) '_' num2str(ds.round.roundid) '.mat'],'prevfeats'); +else + ds.nextround.prevfeats{dsidx}=resfeat; +end +ds.nextround.detectors{dsidx}=effstrcell2mat(newctr); + +dssave(); +ds.nextround=struct(); +ds.round=struct(); +ds.newdets={}; diff --git a/bestInImbb.m b/bestInImbb.m new file mode 100755 index 0000000..1e1fe22 --- /dev/null +++ b/bestInImbb.m @@ -0,0 +1,145 @@ +% The core of the detection code. Don't call this; call detectInIm instead. +% Note that this supports bounding boxes, but they're not used in the +% indoor67 code. +function [posall,distall,clustidall,featsall,flipall,boxidall]=bestInIm(centers,imid,conf) + global ds; + if(~exist('conf','var')) + conf=struct(); + end + conf=overrideConf(ds.conf.params,conf); + if(~dsfield(conf,'thresh')) + conf.thresh=-Inf; + end + imfull=im2double(getimg(imid)); + noprocess=0; + boxidall=[]; + flipall=[]; + if(dsfield(conf,'detsforclass'))% the flag indicating that we're using Pascal bounding boxes. + annot=getannot(imid); + bbs=[annot.x1 annot.y1 annot.x2 annot.y2]; + classes=[annot.label]; + occl=annot.occluded; + difficult=annot.difficult; + boxid=annot.boxid; + flip=zeros(size(bbs,1),1); + bbminsize=[bbs(:,4)-bbs(:,2)+1,bbs(:,3)-bbs(:,1)+1]; + if(dsbool(conf,'allowoccluded')) + occl(:)=false; + end + valid=(~occl & ismember(classes,conf.detsforclass) & ~difficult & all(bsxfun(@ge,bbminsize,ds.conf.params.patchCanonicalSize),2)); + bbs(~valid,:)=[]; + boxid(~valid)=[]; + flip(~valid)=[]; + else % in this case, we simply specify one bounding box containing the full image. + bbs=[1,1,size(imfull,2),size(imfull,1)]; + bbminsize=[bbs(:,4)-bbs(:,2)+1,bbs(:,3)-bbs(:,1)+1]; + if(~all(bbminsize>=ds.conf.params.patchCanonicalSize)) + bbs=[]; + end + boxid=0; + flip=0; + end + if(dsbool(conf,'flipall')) %add a flipped bounding box. + bbs=[bbs;bbs]; + boxid=[boxid;boxid]; + flip=[flip;ones(size(flip))]; + end + if(isempty(bbs)) + posall=[]; + distall=[]; + clustidall=[]; + featsall=[]; + boxid=[]; + return + end + for(bbidx=1:size(bbs,1)) + im=imfull(bbs(bbidx,2):bbs(bbidx,4),bbs(bbidx,1):bbs(bbidx,3),:); + if(flip(bbidx)),im=im(:,end:-1:1,:);end + pyramid = constructFeaturePyramid(im, ds.conf.params); % HOG feature pyramid + pcs=round(ds.conf.params.patchCanonicalSize/ds.conf.params.sBins)-2; + pcs(3)=size(pyramid.features{1},3); + pcs(4)=0; + conf.imid=imid; + % unentangling the fieature pyramid gives us 'features', where each row + % is the feature vector for a single patch. levels and indexes specify + % where those patches were in the pyramid, and gradsums tells us the strength + % of the gradient in each patch so we can get rid of empty ones that are likely + % to make our detectors misfire thanks to HOG's normalization. + [features, levels, indexes,gradsums] = unentanglePyramid(pyramid, ... + pcs,conf); + + + invalid=(gradsums<9); + features(invalid,:)=[]; + levels(invalid)=[]; + indexes(invalid,:)=[]; + gradsums(invalid)=[]; + + if(dsbool(conf,'multperim')) + % findmatches finds all detections above a certain threshold + [assignedidx, dist, clustid]=findmatches(centers,features,conf.thresh,conf); + else + % assigntoclosest gives us the top detection for each detector. + [assignedidx, dist]=assigntoclosest(centers,features,1); + if(isempty(dist)) + clustid=[]; + else + clustid=(1:size(centers,1))'; + valid=dist>conf.thresh; + assignedidx=assignedidx(valid); + dist=dist(valid); + clustid=clustid(valid); + end + end + patsz=ds.conf.params.patchCanonicalSize;%allsz(resinds(k),:); + fsz=(patsz-2*ds.conf.params.sBins)/ds.conf.params.sBins; + imgs=getimgs(); + % convert the pyramid indexes into bounding boxes with pixel coordinates. + pos=pyridx2pos(indexes(assignedidx,:),reshape(levels(assignedidx),[],1),fsz,pyramid); + % if we allow more than one per image, we need to do non-maximum suppresion. + if(dsbool(conf,'multperim')) + pos=[pos.x1 pos.y1 pos.x2 pos.y2]; + [pos,assignedidx,dist,clustidl,clustid]=distributeby(pos,assignedidx,dist,clustid,clustid); + for(i=1:numel(pos)) + [posinds]=myNms([pos{i} dist{i}],ds.conf.params.nmsOverlapThreshold); + assignedidx{i}=assignedidx{i}(posinds); + dist{i}=dist{i}(posinds); + pos{i}=pos{i}(posinds,:); + clustidl{i}=clustidl{i}(posinds); + end + assignedidx=cell2mat(assignedidx); + dist=cell2mat(dist); + p=cell2mat(pos); + if(isempty(p)) + p=zeros(0,4); + end + clear pos; + pos.x1=p(:,1);pos.x2=p(:,3);pos.y1=p(:,2);pos.y2=p(:,4); + clustid=cell2mat(clustidl); + end + feats=features(assignedidx,:); + pos.x1=pos.x1+bbs(bbidx,1)-1; + pos.x2=pos.x2+bbs(bbidx,1)-1; + pos.y1=pos.y1+bbs(bbidx,2)-1; + pos.y2=pos.y2+bbs(bbidx,2)-1; + if(flip(bbidx)) + medval=(bbs(bbidx,3)+bbs(bbidx,1))/2; + tmp=medval+(medval-pos.x2); + pos.x2=medval+(medval-pos.x1); + pos.x1=tmp; + end + + posall{bbidx,1}=effstr2str(pos); + featsall{bbidx,1}=feats; + distall{bbidx,1}=dist; + clustidall{bbidx,1}=clustid; + boxidall{bbidx,1}=repmat(boxid(bbidx),size(dist,1),1); + flipall{bbidx,1}=repmat(flip(bbidx),size(dist,1),1); + end + posall=str2effstr(cell2mat(posall)); + featsall=cell2mat(featsall); + distall=cell2mat(distall); + clustidall=cell2mat(clustidall); + boxidall=cell2mat(boxidall); + flipall=cell2mat(flipall); +end diff --git a/clipper/C#/ConsoleDemo/ConsoleDemo.sln b/clipper/C#/ConsoleDemo/ConsoleDemo.sln new file mode 100755 index 0000000..0ee75df --- /dev/null +++ b/clipper/C#/ConsoleDemo/ConsoleDemo.sln @@ -0,0 +1,45 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual C# Express 2010 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConsoleDemo", "ConsoleDemo\ConsoleDemo.csproj", "{185E6664-6A68-4377-99BE-4D4BFED19298}" + ProjectSection(ProjectDependencies) = postProject + {9B062971-A88E-4A3D-B3C9-12B78D15FA66} = {9B062971-A88E-4A3D-B3C9-12B78D15FA66} + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "clipper_library", "..\clipper_library\clipper_library.csproj", "{9B062971-A88E-4A3D-B3C9-12B78D15FA66}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {185E6664-6A68-4377-99BE-4D4BFED19298}.Debug|Any CPU.ActiveCfg = Debug|x86 + {185E6664-6A68-4377-99BE-4D4BFED19298}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {185E6664-6A68-4377-99BE-4D4BFED19298}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {185E6664-6A68-4377-99BE-4D4BFED19298}.Debug|x86.ActiveCfg = Debug|x86 + {185E6664-6A68-4377-99BE-4D4BFED19298}.Debug|x86.Build.0 = Debug|x86 + {185E6664-6A68-4377-99BE-4D4BFED19298}.Release|Any CPU.ActiveCfg = Release|x86 + {185E6664-6A68-4377-99BE-4D4BFED19298}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {185E6664-6A68-4377-99BE-4D4BFED19298}.Release|Mixed Platforms.Build.0 = Release|x86 + {185E6664-6A68-4377-99BE-4D4BFED19298}.Release|x86.ActiveCfg = Release|x86 + {185E6664-6A68-4377-99BE-4D4BFED19298}.Release|x86.Build.0 = Release|x86 + {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Debug|x86.ActiveCfg = Debug|Any CPU + {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Release|Any CPU.Build.0 = Release|Any CPU + {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Release|x86.ActiveCfg = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/clipper/C#/ConsoleDemo/ConsoleDemo/ConsoleDemo.csproj b/clipper/C#/ConsoleDemo/ConsoleDemo/ConsoleDemo.csproj new file mode 100755 index 0000000..ab09c30 --- /dev/null +++ b/clipper/C#/ConsoleDemo/ConsoleDemo/ConsoleDemo.csproj @@ -0,0 +1,103 @@ + + + + Debug + x86 + 8.0.30703 + 2.0 + {185E6664-6A68-4377-99BE-4D4BFED19298} + Exe + Properties + ConsoleDemo + ConsoleDemo + v4.0 + Client + 512 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + x86 + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + true + + + x86 + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + true + + + + + + + + + + + + + + + + + + False + Microsoft .NET Framework 4 Client Profile %28x86 and x64%29 + true + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + false + + + False + Windows Installer 3.1 + true + + + + + {9B062971-A88E-4A3D-B3C9-12B78D15FA66} + clipper_library + + + + + \ No newline at end of file diff --git a/clipper/C#/ConsoleDemo/ConsoleDemo/Program.cs b/clipper/C#/ConsoleDemo/ConsoleDemo/Program.cs new file mode 100755 index 0000000..344414d --- /dev/null +++ b/clipper/C#/ConsoleDemo/ConsoleDemo/Program.cs @@ -0,0 +1,453 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.IO; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Globalization; +using ClipperLib; + +namespace ClipperTest1 +{ + using Polygon = List; + using Polygons = List>; + + class Program + { + + //a very simple class that builds an SVG file with any number of + //polygons of the specified formats ... + class SVGBuilder + { + + public class StyleInfo + { + public PolyFillType pft; + public Color brushClr; + public Color penClr; + public double penWidth; + public int[] dashArray; + public Boolean showCoords; + public StyleInfo Clone() + { + StyleInfo si = new StyleInfo(); + si.pft = this.pft; + si.brushClr = this.brushClr; + si.dashArray = this.dashArray; + si.penClr = this.penClr; + si.penWidth = this.penWidth; + si.showCoords = this.showCoords; + return si; + } + public StyleInfo() + { + pft = PolyFillType.pftNonZero; + brushClr = Color.AntiqueWhite; + dashArray = null; + penClr = Color.Black; + penWidth = 0.8; + showCoords = false; + } + } + + public class PolyInfo + { + public Polygons polygons; + public StyleInfo si; + } + + public StyleInfo style; + private List PolyInfoList; + const string svg_header = "\n" + + "\n\n" + + "\n\n"; + const string svg_path_format = "\"\n style=\"fill:{0};" + + " fill-opacity:{1:f2}; fill-rule:{2}; stroke:{3};" + + " stroke-opacity:{4:f2}; stroke-width:{5:f2};\"/>\n\n"; + + public SVGBuilder() + { + PolyInfoList = new List(); + style = new StyleInfo(); + } + + public void AddPolygons(Polygons poly) + { + if (poly.Count == 0) return; + PolyInfo pi = new PolyInfo(); + pi.polygons = poly; + pi.si = style.Clone(); + PolyInfoList.Add(pi); + } + + public Boolean SaveToFile(string filename, double scale = 1.0, int margin = 10) + { + if (scale == 0) scale = 1.0; + if (margin < 0) margin = 0; + + //calculate the bounding rect ... + int i = 0, j = 0; + while (i < PolyInfoList.Count) + { + j = 0; + while (j < PolyInfoList[i].polygons.Count && + PolyInfoList[i].polygons[j].Count == 0) j++; + if (j < PolyInfoList[i].polygons.Count) break; + i++; + } + if (i == PolyInfoList.Count) return false; + IntRect rec = new IntRect(); + rec.left = PolyInfoList[i].polygons[j][0].X; + rec.right = rec.left; + rec.top = PolyInfoList[0].polygons[j][0].Y; + rec.bottom = rec.top; + + for ( ; i < PolyInfoList.Count; i++ ) + { + foreach (Polygon pg in PolyInfoList[i].polygons) + foreach (IntPoint pt in pg) + { + if (pt.X < rec.left) rec.left = pt.X; + else if (pt.X > rec.right) rec.right = pt.X; + if (pt.Y < rec.top) rec.top = pt.Y; + else if (pt.Y > rec.bottom) rec.bottom = pt.Y; + } + } + + rec.left = (Int64)((double)rec.left * scale); + rec.top = (Int64)((double)rec.top * scale); + rec.right = (Int64)((double)rec.right * scale); + rec.bottom = (Int64)((double)rec.bottom * scale); + Int64 offsetX = -rec.left + margin; + Int64 offsetY = -rec.top + margin; + + StreamWriter writer = new StreamWriter(filename); + if (writer == null) return false; + writer.Write(svg_header, + (rec.right - rec.left) + margin * 2, + (rec.bottom - rec.top) + margin * 2, + (rec.right - rec.left) + margin * 2, + (rec.bottom - rec.top) + margin * 2); + + foreach (PolyInfo pi in PolyInfoList) + { + writer.Write(" \n\n"); + foreach (Polygon p in pi.polygons) + { + foreach (IntPoint pt in p) + { + Int64 x = pt.X; + Int64 y = pt.Y; + writer.Write(String.Format( + "{2},{3}\n", + (int)(x * scale + offsetX), (int)(y * scale + offsetY), x, y)); + + } + writer.Write("\n"); + } + writer.Write("\n"); + } + } + writer.Write("\n"); + writer.Close(); + return true; + } + } + + //////////////////////////////////////////////// + + static bool LoadFromFile(string filename, Polygons ppg, int dec_places, int xOffset = 0, int yOffset = 0) + { + double scaling; + scaling = Math.Pow(10, dec_places); + + ppg.Clear(); + if (!File.Exists(filename)) return false; + StreamReader sr = new StreamReader(filename); + if (sr == null) return false; + string line; + if ((line = sr.ReadLine()) == null) return false; + int polyCnt, vertCnt; + if (!Int32.TryParse(line, out polyCnt) || polyCnt < 0) return false; + ppg.Capacity = polyCnt; + for (int i = 0; i < polyCnt; i++) + { + if ((line = sr.ReadLine()) == null) return false; + if (!Int32.TryParse(line, out vertCnt) || vertCnt < 0) return false; + Polygon pg = new Polygon(vertCnt); + ppg.Add(pg); + if (scaling > 0.999 & scaling < 1.001) + for (int j = 0; j < vertCnt; j++) + { + Int64 x, y; + if ((line = sr.ReadLine()) == null) return false; + char[] delimiters = new char[] { ',', ' ' }; + string[] vals = line.Split(delimiters); + if (vals.Length < 2) return false; + if (!Int64.TryParse(vals[0], out x)) return false; + if (!Int64.TryParse(vals[1], out y)) + if (vals.Length < 2 || !Int64.TryParse(vals[2], out y)) return false; + x = x + xOffset; + y = y + yOffset; + pg.Add(new IntPoint(x, y)); + } + else + for (int j = 0; j < vertCnt; j++) + { + double x, y; + if ((line = sr.ReadLine()) == null) return false; + char[] delimiters = new char[] { ',', ' ' }; + string[] vals = line.Split(delimiters); + if (vals.Length < 2) return false; + if (!double.TryParse(vals[0], out x)) return false; + if (!double.TryParse(vals[1], out y)) + if (vals.Length < 2 || !double.TryParse(vals[2], out y)) return false; + x = x * scaling + xOffset; + y = y * scaling + yOffset; + pg.Add(new IntPoint((Int64)Math.Round(x), (Int64)Math.Round(y))); + } + } + return true; + } + + //////////////////////////////////////////////// + static void SaveToFile(string filename, Polygons ppg, int dec_places) + { + double scaling = Math.Pow(10, dec_places); + StreamWriter writer = new StreamWriter(filename); + if (writer == null) return; + writer.Write("{0}\r\n", ppg.Count); + foreach (Polygon pg in ppg) + { + writer.Write("{0}\r\n", pg.Count); + foreach (IntPoint ip in pg) + writer.Write("{0:0.####}, {1:0.####}\r\n", (double)ip.X / scaling, (double)ip.Y / scaling); + } + writer.Close(); + } + + //////////////////////////////////////////////// + + static void OutputFileFormat() + { + Console.WriteLine("The expected (text) file format is ..."); + Console.WriteLine("Polygon Count"); + Console.WriteLine("First polygon vertex count"); + Console.WriteLine("first X, Y coordinate of first polygon"); + Console.WriteLine("second X, Y coordinate of first polygon"); + Console.WriteLine("etc."); + Console.WriteLine("Second polygon vertex count (if there is one)"); + Console.WriteLine("first X, Y coordinate of second polygon"); + Console.WriteLine("second X, Y coordinate of second polygon"); + Console.WriteLine("etc."); + } + + //////////////////////////////////////////////// + + static Polygon IntsToPolygon(int[] ints) + { + int len1 = ints.Length /2; + Polygon result = new Polygon(len1); + for (int i = 0; i < len1; i++) + result.Add(new IntPoint(ints[i * 2], ints[i * 2 +1])); + return result; + } + + //////////////////////////////////////////////// + + static Polygon MakeRandomPolygon(Random r, int maxWidth, int maxHeight, int edgeCount, Int64 scale = 1) + { + Polygon result = new Polygon(edgeCount); + for (int i = 0; i < edgeCount; i++) + { + result.Add(new IntPoint(r.Next(maxWidth)*scale, r.Next(maxHeight)*scale)); + } + return result; + } + //////////////////////////////////////////////// + + static void Main(string[] args) + { + ////quick test with random polygons ... + //Polygons ss = new Polygons(1), cc = new Polygons(1), sss = new Polygons(); + //Random r = new Random((int)DateTime.Now.Ticks); + //int scale = 1000000000; //tests 128bit math + //ss.Add(MakeRandomPolygon(r, 400, 350, 9, scale)); + //cc.Add(MakeRandomPolygon(r, 400, 350, 9, scale)); + //Clipper cpr = new Clipper(); + //cpr.AddPolygons(ss, PolyType.ptSubject); + //cpr.AddPolygons(cc, PolyType.ptClip); + //cpr.Execute(ClipType.ctUnion, sss, PolyFillType.pftNonZero, PolyFillType.pftNonZero); + //sss = Clipper.OffsetPolygons(sss, -5.0*scale, JoinType.jtMiter, 4); + //SVGBuilder svg1 = new SVGBuilder(); + //svg1.style.brushClr = Color.FromArgb(0x20, 0, 0, 0x9c); + //svg1.style.penClr = Color.FromArgb(0xd3, 0xd3, 0xda); + //svg1.AddPolygons(ss); + //svg1.style.brushClr = Color.FromArgb(0x20, 0x9c, 0, 0); + //svg1.style.penClr = Color.FromArgb(0xff, 0xa0, 0x7a); + //svg1.AddPolygons(cc); + //svg1.style.brushClr = Color.FromArgb(0xAA, 0x80, 0xff, 0x9c); + //svg1.style.penClr = Color.FromArgb(0, 0x33, 0); + //svg1.AddPolygons(sss); + //svg1.SaveToFile("solution.svg", 1.0/scale); + //return; + + if (args.Length < 5) + { + string appname = System.Environment.GetCommandLineArgs()[0]; + appname = Path.GetFileName(appname); + Console.WriteLine(""); + Console.WriteLine("Usage:"); + Console.WriteLine(" {0} CLIPTYPE s_file c_file INPUT_DEC_PLACES SVG_SCALE [S_FILL, C_FILL]", appname); + Console.WriteLine(" where ..."); + Console.WriteLine(" CLIPTYPE = INTERSECTION|UNION|DIFFERENCE|XOR"); + Console.WriteLine(" FILLMODE = NONZERO|EVENODD"); + Console.WriteLine(" INPUT_DEC_PLACES = signific. decimal places for subject & clip coords."); + Console.WriteLine(" SVG_SCALE = scale of SVG image as power of 10. (Fractions are accepted.)"); + Console.WriteLine(" both S_FILL and C_FILL are optional. The default is EVENODD."); + Console.WriteLine("Example:"); + Console.WriteLine(" Intersect polygons, rnd to 4 dec places, SVG is 1/100 normal size ..."); + Console.WriteLine(" {0} INTERSECTION subj.txt clip.txt 0 0 NONZERO NONZERO", appname); + return; + } + + ClipType ct; + switch (args[0].ToUpper()) + { + case "INTERSECTION": ct = ClipType.ctIntersection; break; + case "UNION": ct = ClipType.ctUnion; break; + case "DIFFERENCE": ct = ClipType.ctDifference; break; + case "XOR": ct = ClipType.ctXor; break; + default: Console.WriteLine("Error: invalid operation - {0}", args[0]); return; + } + + string subjFilename = args[1]; + string clipFilename = args[2]; + if (!File.Exists(subjFilename)) + { + Console.WriteLine("Error: file - {0} - does not exist.", subjFilename); + return; + } + if (!File.Exists(clipFilename)) + { + Console.WriteLine("Error: file - {0} - does not exist.", clipFilename); + return; + } + + int decimal_places = 0; + if (!Int32.TryParse(args[3], out decimal_places)) + { + Console.WriteLine("Error: invalid number of decimal places - {0}", args[3]); + return; + } + if (decimal_places > 8) decimal_places = 8; + else if (decimal_places < 0) decimal_places = 0; + + double svg_scale = 0; + if (!double.TryParse(args[4], out svg_scale)) + { + Console.WriteLine("Error: invalid value for SVG_SCALE - {0}", args[4]); + return; + } + if (svg_scale < -18) svg_scale = -18; + else if (svg_scale > 18) svg_scale = 18; + svg_scale = Math.Pow(10, svg_scale - decimal_places);//nb: also compensate for decimal places + + + PolyFillType pftSubj = PolyFillType.pftEvenOdd; + PolyFillType pftClip = PolyFillType.pftEvenOdd; + if (args.Length > 6) + { + switch (args[5].ToUpper()) + { + case "EVENODD": pftSubj = PolyFillType.pftEvenOdd; break; + case "NONZERO": pftSubj = PolyFillType.pftNonZero; break; + default: Console.WriteLine("Error: invalid cliptype - {0}", args[5]); return; + } + switch (args[6].ToUpper()) + { + case "EVENODD": pftClip = PolyFillType.pftEvenOdd; break; + case "NONZERO": pftClip = PolyFillType.pftNonZero; break; + default: Console.WriteLine("Error: invalid cliptype - {0}", args[6]); return; + } + } + + Polygons subjs = new Polygons(); + Polygons clips = new Polygons(); + if (!LoadFromFile(subjFilename, subjs, decimal_places)) + { + Console.WriteLine("Error processing subject polygons file - {0} ", subjFilename); + OutputFileFormat(); + return; + } + if (!LoadFromFile(clipFilename, clips, decimal_places)) + { + Console.WriteLine("Error processing clip polygons file - {0} ", clipFilename); + OutputFileFormat(); + return; + } + + Console.WriteLine("wait ..."); + Clipper cp = new Clipper(); + cp.AddPolygons(subjs, PolyType.ptSubject); + cp.AddPolygons(clips, PolyType.ptClip); + + Polygons solution = new Polygons(); + //Polygons solution = new Polygons(); + if (cp.Execute(ct, solution, pftSubj, pftClip)) + { + SaveToFile("solution.txt", solution, decimal_places); + + //solution = Clipper.OffsetPolygons(solution, -4, JoinType.jtRound); + + SVGBuilder svg = new SVGBuilder(); + svg.style.brushClr = Color.FromArgb(0x20, 0, 0, 0x9c); + svg.style.penClr = Color.FromArgb(0xd3, 0xd3, 0xda); + svg.AddPolygons(subjs); + svg.style.brushClr = Color.FromArgb(0x20, 0x9c, 0, 0); + svg.style.penClr = Color.FromArgb(0xff, 0xa0, 0x7a); + svg.AddPolygons(clips); + svg.style.brushClr = Color.FromArgb(0xAA, 0x80, 0xff, 0x9c); + svg.style.penClr = Color.FromArgb(0, 0x33, 0); + svg.AddPolygons(solution); + svg.SaveToFile("solution.svg", svg_scale); + + Console.WriteLine("finished!"); + } + else + { + Console.WriteLine("failed!"); + } + } + + } //class Program +} diff --git a/clipper/C#/ConsoleDemo/ConsoleDemo/Properties/AssemblyInfo.cs b/clipper/C#/ConsoleDemo/ConsoleDemo/Properties/AssemblyInfo.cs new file mode 100755 index 0000000..5078525 --- /dev/null +++ b/clipper/C#/ConsoleDemo/ConsoleDemo/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("ClipperTest1")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("ClipperTest1")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2011")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("a8009709-1ebc-44a6-a094-298ec0b23d42")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/clipper/C#/ConsoleDemo/ConsoleDemo/bin/Release/ConsoleDemo.exe b/clipper/C#/ConsoleDemo/ConsoleDemo/bin/Release/ConsoleDemo.exe new file mode 100755 index 0000000000000000000000000000000000000000..2fb60e12545a3122d08ec4f001f080ba975350e8 GIT binary patch literal 15872 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 VfMm|!XLk4g?wk5U3;*{#@ZW#}c@+Qv literal 0 HcmV?d00001 diff --git a/clipper/C#/ConsoleDemo/ConsoleDemo/bin/Release/clip.txt b/clipper/C#/ConsoleDemo/ConsoleDemo/bin/Release/clip.txt new file mode 100755 index 0000000..6a2a2b0 --- /dev/null +++ b/clipper/C#/ConsoleDemo/ConsoleDemo/bin/Release/clip.txt @@ -0,0 +1,6 @@ +1 +4 +120, 10, +240, 10, +240, 90, +120, 90 \ No newline at end of file diff --git a/clipper/C#/ConsoleDemo/ConsoleDemo/bin/Release/clipper_library.dll b/clipper/C#/ConsoleDemo/ConsoleDemo/bin/Release/clipper_library.dll new file mode 100755 index 0000000000000000000000000000000000000000..18887a4d585796abd63711fbe37894cda569de9f GIT binary patch literal 44544 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 OF6yrT_4EIn2L2bGx)g2z literal 0 HcmV?d00001 diff --git a/clipper/C#/ConsoleDemo/ConsoleDemo/bin/Release/subj.txt b/clipper/C#/ConsoleDemo/ConsoleDemo/bin/Release/subj.txt new file mode 100755 index 0000000..7033a4c --- /dev/null +++ b/clipper/C#/ConsoleDemo/ConsoleDemo/bin/Release/subj.txt @@ -0,0 +1,13 @@ +1 +11 +0, 0, +200, 0, +200, 100, +50, 100, +50, 50, +75, 75, +100, 50, +75, 25, +50, 50, +50, 100, +0, 100, diff --git a/clipper/C#/GuiDemo/GuiDemo.sln b/clipper/C#/GuiDemo/GuiDemo.sln new file mode 100755 index 0000000..d17656f --- /dev/null +++ b/clipper/C#/GuiDemo/GuiDemo.sln @@ -0,0 +1,45 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual C# Express 2010 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GuiDemo", "GuiDemo\GuiDemo.csproj", "{8BD44147-3290-4A73-BAA2-1C171566BC25}" + ProjectSection(ProjectDependencies) = postProject + {9B062971-A88E-4A3D-B3C9-12B78D15FA66} = {9B062971-A88E-4A3D-B3C9-12B78D15FA66} + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "clipper_library", "..\clipper_library\clipper_library.csproj", "{9B062971-A88E-4A3D-B3C9-12B78D15FA66}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {8BD44147-3290-4A73-BAA2-1C171566BC25}.Debug|Any CPU.ActiveCfg = Debug|x86 + {8BD44147-3290-4A73-BAA2-1C171566BC25}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {8BD44147-3290-4A73-BAA2-1C171566BC25}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {8BD44147-3290-4A73-BAA2-1C171566BC25}.Debug|x86.ActiveCfg = Debug|x86 + {8BD44147-3290-4A73-BAA2-1C171566BC25}.Debug|x86.Build.0 = Debug|x86 + {8BD44147-3290-4A73-BAA2-1C171566BC25}.Release|Any CPU.ActiveCfg = Release|x86 + {8BD44147-3290-4A73-BAA2-1C171566BC25}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {8BD44147-3290-4A73-BAA2-1C171566BC25}.Release|Mixed Platforms.Build.0 = Release|x86 + {8BD44147-3290-4A73-BAA2-1C171566BC25}.Release|x86.ActiveCfg = Release|x86 + {8BD44147-3290-4A73-BAA2-1C171566BC25}.Release|x86.Build.0 = Release|x86 + {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Debug|x86.ActiveCfg = Debug|Any CPU + {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Release|Any CPU.Build.0 = Release|Any CPU + {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Release|x86.ActiveCfg = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/clipper/C#/GuiDemo/GuiDemo/Form1.Designer.cs b/clipper/C#/GuiDemo/GuiDemo/Form1.Designer.cs new file mode 100755 index 0000000..79e0846 --- /dev/null +++ b/clipper/C#/GuiDemo/GuiDemo/Form1.Designer.cs @@ -0,0 +1,419 @@ +namespace WindowsFormsApplication1 +{ + partial class Form1 + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); + this.statusStrip1 = new System.Windows.Forms.StatusStrip(); + this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel(); + this.panel1 = new System.Windows.Forms.Panel(); + this.bSave = new System.Windows.Forms.Button(); + this.groupBox3 = new System.Windows.Forms.GroupBox(); + this.rbNone = new System.Windows.Forms.RadioButton(); + this.rbXor = new System.Windows.Forms.RadioButton(); + this.rbDifference = new System.Windows.Forms.RadioButton(); + this.rbUnion = new System.Windows.Forms.RadioButton(); + this.rbIntersect = new System.Windows.Forms.RadioButton(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.rbTest2 = new System.Windows.Forms.RadioButton(); + this.rbTest1 = new System.Windows.Forms.RadioButton(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.label2 = new System.Windows.Forms.Label(); + this.nudOffset = new System.Windows.Forms.NumericUpDown(); + this.lblCount = new System.Windows.Forms.Label(); + this.nudCount = new System.Windows.Forms.NumericUpDown(); + this.rbNonZero = new System.Windows.Forms.RadioButton(); + this.rbEvenOdd = new System.Windows.Forms.RadioButton(); + this.bRefresh = new System.Windows.Forms.Button(); + this.bCancel = new System.Windows.Forms.Button(); + this.panel2 = new System.Windows.Forms.Panel(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.saveFileDialog1 = new System.Windows.Forms.SaveFileDialog(); + this.statusStrip1.SuspendLayout(); + this.panel1.SuspendLayout(); + this.groupBox3.SuspendLayout(); + this.groupBox2.SuspendLayout(); + this.groupBox1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.nudOffset)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.nudCount)).BeginInit(); + this.panel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.SuspendLayout(); + // + // statusStrip1 + // + this.statusStrip1.GripStyle = System.Windows.Forms.ToolStripGripStyle.Visible; + this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripStatusLabel1}); + this.statusStrip1.Location = new System.Drawing.Point(0, 459); + this.statusStrip1.Name = "statusStrip1"; + this.statusStrip1.Size = new System.Drawing.Size(716, 22); + this.statusStrip1.TabIndex = 4; + // + // toolStripStatusLabel1 + // + this.toolStripStatusLabel1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.toolStripStatusLabel1.Name = "toolStripStatusLabel1"; + this.toolStripStatusLabel1.Size = new System.Drawing.Size(0, 17); + // + // panel1 + // + this.panel1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.panel1.Controls.Add(this.bSave); + this.panel1.Controls.Add(this.groupBox3); + this.panel1.Controls.Add(this.groupBox2); + this.panel1.Controls.Add(this.groupBox1); + this.panel1.Controls.Add(this.bRefresh); + this.panel1.Controls.Add(this.bCancel); + this.panel1.Dock = System.Windows.Forms.DockStyle.Left; + this.panel1.Location = new System.Drawing.Point(0, 0); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(121, 459); + this.panel1.TabIndex = 5; + // + // bSave + // + this.bSave.Location = new System.Drawing.Point(9, 412); + this.bSave.Name = "bSave"; + this.bSave.Size = new System.Drawing.Size(100, 25); + this.bSave.TabIndex = 9; + this.bSave.Text = "S&ave as SVG File"; + this.bSave.UseVisualStyleBackColor = true; + this.bSave.Click += new System.EventHandler(this.bSave_Click); + // + // groupBox3 + // + this.groupBox3.Controls.Add(this.rbNone); + this.groupBox3.Controls.Add(this.rbXor); + this.groupBox3.Controls.Add(this.rbDifference); + this.groupBox3.Controls.Add(this.rbUnion); + this.groupBox3.Controls.Add(this.rbIntersect); + this.groupBox3.Location = new System.Drawing.Point(9, 12); + this.groupBox3.Name = "groupBox3"; + this.groupBox3.Size = new System.Drawing.Size(100, 125); + this.groupBox3.TabIndex = 5; + this.groupBox3.TabStop = false; + this.groupBox3.Text = "&Boolean Op:"; + // + // rbNone + // + this.rbNone.AutoSize = true; + this.rbNone.Location = new System.Drawing.Point(14, 100); + this.rbNone.Name = "rbNone"; + this.rbNone.Size = new System.Drawing.Size(51, 17); + this.rbNone.TabIndex = 4; + this.rbNone.Text = "None"; + this.rbNone.UseVisualStyleBackColor = true; + this.rbNone.CheckedChanged += new System.EventHandler(this.rbNonZero_Click); + // + // rbXor + // + this.rbXor.AutoSize = true; + this.rbXor.Location = new System.Drawing.Point(14, 81); + this.rbXor.Name = "rbXor"; + this.rbXor.Size = new System.Drawing.Size(48, 17); + this.rbXor.TabIndex = 3; + this.rbXor.Text = "XOR"; + this.rbXor.UseVisualStyleBackColor = true; + this.rbXor.CheckedChanged += new System.EventHandler(this.rbNonZero_Click); + // + // rbDifference + // + this.rbDifference.AutoSize = true; + this.rbDifference.Location = new System.Drawing.Point(14, 60); + this.rbDifference.Name = "rbDifference"; + this.rbDifference.Size = new System.Drawing.Size(74, 17); + this.rbDifference.TabIndex = 2; + this.rbDifference.Text = "Difference"; + this.rbDifference.UseVisualStyleBackColor = true; + this.rbDifference.CheckedChanged += new System.EventHandler(this.rbNonZero_Click); + // + // rbUnion + // + this.rbUnion.AutoSize = true; + this.rbUnion.Location = new System.Drawing.Point(14, 39); + this.rbUnion.Name = "rbUnion"; + this.rbUnion.Size = new System.Drawing.Size(53, 17); + this.rbUnion.TabIndex = 1; + this.rbUnion.Text = "Union"; + this.rbUnion.UseVisualStyleBackColor = true; + this.rbUnion.CheckedChanged += new System.EventHandler(this.rbNonZero_Click); + // + // rbIntersect + // + this.rbIntersect.AutoSize = true; + this.rbIntersect.Checked = true; + this.rbIntersect.Location = new System.Drawing.Point(14, 19); + this.rbIntersect.Name = "rbIntersect"; + this.rbIntersect.Size = new System.Drawing.Size(66, 17); + this.rbIntersect.TabIndex = 0; + this.rbIntersect.TabStop = true; + this.rbIntersect.Text = "Intersect"; + this.rbIntersect.UseVisualStyleBackColor = true; + this.rbIntersect.CheckedChanged += new System.EventHandler(this.rbNonZero_Click); + // + // groupBox2 + // + this.groupBox2.Controls.Add(this.rbTest2); + this.groupBox2.Controls.Add(this.rbTest1); + this.groupBox2.Location = new System.Drawing.Point(9, 310); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(100, 61); + this.groupBox2.TabIndex = 7; + this.groupBox2.TabStop = false; + this.groupBox2.Text = "Sample"; + // + // rbTest2 + // + this.rbTest2.AutoSize = true; + this.rbTest2.Location = new System.Drawing.Point(14, 35); + this.rbTest2.Name = "rbTest2"; + this.rbTest2.Size = new System.Drawing.Size(46, 17); + this.rbTest2.TabIndex = 1; + this.rbTest2.Text = "&Two"; + this.rbTest2.UseVisualStyleBackColor = true; + this.rbTest2.Click += new System.EventHandler(this.rbTest1_Click); + // + // rbTest1 + // + this.rbTest1.AutoSize = true; + this.rbTest1.Checked = true; + this.rbTest1.Location = new System.Drawing.Point(14, 17); + this.rbTest1.Name = "rbTest1"; + this.rbTest1.Size = new System.Drawing.Size(45, 17); + this.rbTest1.TabIndex = 0; + this.rbTest1.TabStop = true; + this.rbTest1.Text = "&One"; + this.rbTest1.UseVisualStyleBackColor = true; + this.rbTest1.Click += new System.EventHandler(this.rbTest1_Click); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.label2); + this.groupBox1.Controls.Add(this.nudOffset); + this.groupBox1.Controls.Add(this.lblCount); + this.groupBox1.Controls.Add(this.nudCount); + this.groupBox1.Controls.Add(this.rbNonZero); + this.groupBox1.Controls.Add(this.rbEvenOdd); + this.groupBox1.Location = new System.Drawing.Point(9, 144); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(100, 159); + this.groupBox1.TabIndex = 6; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Options:"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(11, 108); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(38, 13); + this.label2.TabIndex = 4; + this.label2.Text = "O&ffset:"; + // + // nudOffset + // + this.nudOffset.DecimalPlaces = 1; + this.nudOffset.Location = new System.Drawing.Point(14, 126); + this.nudOffset.Maximum = new decimal(new int[] { + 10, + 0, + 0, + 0}); + this.nudOffset.Minimum = new decimal(new int[] { + 10, + 0, + 0, + -2147483648}); + this.nudOffset.Name = "nudOffset"; + this.nudOffset.Size = new System.Drawing.Size(54, 20); + this.nudOffset.TabIndex = 5; + this.nudOffset.ValueChanged += new System.EventHandler(this.nudCount_ValueChanged); + // + // lblCount + // + this.lblCount.AutoSize = true; + this.lblCount.Location = new System.Drawing.Point(11, 62); + this.lblCount.Name = "lblCount"; + this.lblCount.Size = new System.Drawing.Size(71, 13); + this.lblCount.TabIndex = 2; + this.lblCount.Text = "Vertex &Count:"; + // + // nudCount + // + this.nudCount.Location = new System.Drawing.Point(14, 80); + this.nudCount.Minimum = new decimal(new int[] { + 3, + 0, + 0, + 0}); + this.nudCount.Name = "nudCount"; + this.nudCount.Size = new System.Drawing.Size(54, 20); + this.nudCount.TabIndex = 3; + this.nudCount.Value = new decimal(new int[] { + 50, + 0, + 0, + 0}); + this.nudCount.ValueChanged += new System.EventHandler(this.bRefresh_Click); + // + // rbNonZero + // + this.rbNonZero.AutoSize = true; + this.rbNonZero.Checked = true; + this.rbNonZero.Location = new System.Drawing.Point(14, 39); + this.rbNonZero.Name = "rbNonZero"; + this.rbNonZero.Size = new System.Drawing.Size(67, 17); + this.rbNonZero.TabIndex = 1; + this.rbNonZero.TabStop = true; + this.rbNonZero.Text = "Non&Zero"; + this.rbNonZero.UseVisualStyleBackColor = true; + this.rbNonZero.Click += new System.EventHandler(this.rbNonZero_Click); + // + // rbEvenOdd + // + this.rbEvenOdd.AutoSize = true; + this.rbEvenOdd.Location = new System.Drawing.Point(14, 21); + this.rbEvenOdd.Name = "rbEvenOdd"; + this.rbEvenOdd.Size = new System.Drawing.Size(70, 17); + this.rbEvenOdd.TabIndex = 0; + this.rbEvenOdd.Text = "&EvenOdd"; + this.rbEvenOdd.UseVisualStyleBackColor = true; + this.rbEvenOdd.Click += new System.EventHandler(this.rbNonZero_Click); + // + // bRefresh + // + this.bRefresh.Location = new System.Drawing.Point(9, 381); + this.bRefresh.Name = "bRefresh"; + this.bRefresh.Size = new System.Drawing.Size(100, 25); + this.bRefresh.TabIndex = 8; + this.bRefresh.Text = "&New Sample"; + this.bRefresh.UseVisualStyleBackColor = true; + this.bRefresh.Click += new System.EventHandler(this.bRefresh_Click); + // + // bCancel + // + this.bCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.bCancel.Location = new System.Drawing.Point(9, 458); + this.bCancel.Name = "bCancel"; + this.bCancel.Size = new System.Drawing.Size(100, 27); + this.bCancel.TabIndex = 11; + this.bCancel.Text = "E&xit"; + this.bCancel.UseVisualStyleBackColor = true; + this.bCancel.Click += new System.EventHandler(this.bClose_Click); + // + // panel2 + // + this.panel2.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.panel2.Controls.Add(this.pictureBox1); + this.panel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel2.Location = new System.Drawing.Point(121, 0); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(595, 459); + this.panel2.TabIndex = 6; + // + // pictureBox1 + // + this.pictureBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.pictureBox1.Location = new System.Drawing.Point(0, 0); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(591, 455); + this.pictureBox1.TabIndex = 1; + this.pictureBox1.TabStop = false; + this.pictureBox1.DoubleClick += new System.EventHandler(this.bRefresh_Click); + // + // saveFileDialog1 + // + this.saveFileDialog1.DefaultExt = "svg"; + this.saveFileDialog1.Filter = "SVG Files (*.svg)|*.svg"; + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(716, 481); + this.Controls.Add(this.panel2); + this.Controls.Add(this.panel1); + this.Controls.Add(this.statusStrip1); + this.DoubleBuffered = true; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.KeyPreview = true; + this.Name = "Form1"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Clipper C# Demo1"; + this.Load += new System.EventHandler(this.Form1_Load); + this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Form1_KeyDown); + this.Resize += new System.EventHandler(this.Form1_Resize); + this.statusStrip1.ResumeLayout(false); + this.statusStrip1.PerformLayout(); + this.panel1.ResumeLayout(false); + this.groupBox3.ResumeLayout(false); + this.groupBox3.PerformLayout(); + this.groupBox2.ResumeLayout(false); + this.groupBox2.PerformLayout(); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.nudOffset)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.nudCount)).EndInit(); + this.panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.StatusStrip statusStrip1; + private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel1; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.GroupBox groupBox3; + private System.Windows.Forms.RadioButton rbNone; + private System.Windows.Forms.RadioButton rbXor; + private System.Windows.Forms.RadioButton rbDifference; + private System.Windows.Forms.RadioButton rbUnion; + private System.Windows.Forms.RadioButton rbIntersect; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.RadioButton rbTest2; + private System.Windows.Forms.RadioButton rbTest1; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.NumericUpDown nudOffset; + private System.Windows.Forms.Label lblCount; + private System.Windows.Forms.NumericUpDown nudCount; + private System.Windows.Forms.RadioButton rbNonZero; + private System.Windows.Forms.RadioButton rbEvenOdd; + private System.Windows.Forms.Button bRefresh; + private System.Windows.Forms.Button bCancel; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.PictureBox pictureBox1; + private System.Windows.Forms.Button bSave; + private System.Windows.Forms.SaveFileDialog saveFileDialog1; + } +} + diff --git a/clipper/C#/GuiDemo/GuiDemo/Form1.cs b/clipper/C#/GuiDemo/GuiDemo/Form1.cs new file mode 100755 index 0000000..b8e5984 --- /dev/null +++ b/clipper/C#/GuiDemo/GuiDemo/Form1.cs @@ -0,0 +1,661 @@ +using System; +using System.Diagnostics; +using System.Text; +using System.Collections.Generic; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Drawing.Imaging; +using System.IO; +using System.Reflection; +using System.Linq; +using System.Windows.Forms; +using System.Globalization; +using ClipperLib; + + +namespace WindowsFormsApplication1 +{ + + using Polygon = List; + using Polygons = List>; + + public partial class Form1 : Form + { + + Assembly _assembly; + Stream polyStream; + + private Bitmap mybitmap; + private Polygons subjects; + private Polygons clips; + private Polygons solution; + + //Here we are scaling all coordinates up by 100 when they're passed to Clipper + //via Polygon (or Polygons) objects because Clipper no longer accepts floating + //point values. Likewise when Clipper returns a solution in a Polygons object, + //we need to scale down these returned values by the same amount before displaying. + private int scale = 100; //or 1 or 10 or 10000 etc for lesser or greater precision. + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + + //a very simple class that builds an SVG file with any number of + //polygons of the specified formats ... + class SVGBuilder + { + + public class StyleInfo + { + public PolyFillType pft; + public Color brushClr; + public Color penClr; + public double penWidth; + public int[] dashArray; + public Boolean showCoords; + public StyleInfo Clone() + { + StyleInfo si = new StyleInfo(); + si.pft = this.pft; + si.brushClr = this.brushClr; + si.dashArray = this.dashArray; + si.penClr = this.penClr; + si.penWidth = this.penWidth; + si.showCoords = this.showCoords; + return si; + } + public StyleInfo() + { + pft = PolyFillType.pftNonZero; + brushClr = Color.AntiqueWhite; + dashArray = null; + penClr = Color.Black; + penWidth = 0.8; + showCoords = false; + } + } + + public class PolyInfo + { + public Polygons polygons; + public StyleInfo si; + } + + public StyleInfo style; + private List PolyInfoList; + const string svg_header = "\n" + + "\n\n" + + "\n\n"; + const string svg_path_format = "\"\n style=\"fill:{0};" + + " fill-opacity:{1:f2}; fill-rule:{2}; stroke:{3};" + + " stroke-opacity:{4:f2}; stroke-width:{5:f2};\"/>\n\n"; + + public SVGBuilder() + { + PolyInfoList = new List(); + style = new StyleInfo(); + } + + public void AddPolygons(Polygons poly) + { + if (poly.Count == 0) return; + PolyInfo pi = new PolyInfo(); + pi.polygons = poly; + pi.si = style.Clone(); + PolyInfoList.Add(pi); + } + + public Boolean SaveToFile(string filename, double scale = 1.0, int margin = 10) + { + if (scale == 0) scale = 1.0; + if (margin < 0) margin = 0; + + //calculate the bounding rect ... + int i = 0, j = 0; + while (i < PolyInfoList.Count) + { + j = 0; + while (j < PolyInfoList[i].polygons.Count && + PolyInfoList[i].polygons[j].Count == 0) j++; + if (j < PolyInfoList[i].polygons.Count) break; + i++; + } + if (i == PolyInfoList.Count) return false; + IntRect rec = new IntRect(); + rec.left = PolyInfoList[i].polygons[j][0].X; + rec.right = rec.left; + rec.top = PolyInfoList[0].polygons[j][0].Y; + rec.bottom = rec.top; + + for (; i < PolyInfoList.Count; i++) + { + foreach (Polygon pg in PolyInfoList[i].polygons) + foreach (IntPoint pt in pg) + { + if (pt.X < rec.left) rec.left = pt.X; + else if (pt.X > rec.right) rec.right = pt.X; + if (pt.Y < rec.top) rec.top = pt.Y; + else if (pt.Y > rec.bottom) rec.bottom = pt.Y; + } + } + + rec.left = (Int64)((double)rec.left * scale); + rec.top = (Int64)((double)rec.top * scale); + rec.right = (Int64)((double)rec.right * scale); + rec.bottom = (Int64)((double)rec.bottom * scale); + Int64 offsetX = -rec.left + margin; + Int64 offsetY = -rec.top + margin; + + StreamWriter writer = new StreamWriter(filename); + if (writer == null) return false; + writer.Write(svg_header, + (rec.right - rec.left) + margin * 2, + (rec.bottom - rec.top) + margin * 2, + (rec.right - rec.left) + margin * 2, + (rec.bottom - rec.top) + margin * 2); + + foreach (PolyInfo pi in PolyInfoList) + { + writer.Write(" \n\n"); + foreach (Polygon p in pi.polygons) + { + foreach (IntPoint pt in p) + { + Int64 x = pt.X; + Int64 y = pt.Y; + writer.Write(String.Format( + "{2},{3}\n", + (int)(x * scale + offsetX), (int)(y * scale + offsetY), x, y)); + + } + writer.Write("\n"); + } + writer.Write("\n"); + } + } + writer.Write("\n"); + writer.Close(); + return true; + } + } + + //------------------------------------------------------------------------------ + //------------------------------------------------------------------------------ + + static private System.Drawing.PointF[] PolygonToPointFArray(Polygon pg, int scale) + { + System.Drawing.PointF[] result = new System.Drawing.PointF[pg.Count]; + for (int i = 0; i < pg.Count; ++i) + { + result[i].X = (float)pg[i].X / scale; + result[i].Y = (float)pg[i].Y / scale; + } + return result; + } + //--------------------------------------------------------------------- + + public Form1() + { + InitializeComponent(); + this.MouseWheel += new MouseEventHandler(Form1_MouseWheel); + } + //--------------------------------------------------------------------- + + private void Form1_MouseWheel(object sender, MouseEventArgs e) + { + if (e.Delta > 0 && nudOffset.Value < 10) nudOffset.Value += (decimal)0.5; + else if (e.Delta < 0 && nudOffset.Value > -10) nudOffset.Value -= (decimal)0.5; + } + //--------------------------------------------------------------------- + + private void bRefresh_Click(object sender, EventArgs e) + { + DrawBitmap(); + } + //--------------------------------------------------------------------- + + private void GenerateAustPlusRandomEllipses(int count) + { + subjects.Clear(); + //load map of Australia from resource ... + _assembly = Assembly.GetExecutingAssembly(); + polyStream = _assembly.GetManifestResourceStream("GuiDemo.aust.bin"); + int len = (int)polyStream.Length; + byte[] b = new byte[len]; + polyStream.Read(b, 0, len); + int polyCnt = BitConverter.ToInt32(b, 0); + int k = 4; + for (int i = 0; i < polyCnt; ++i) + { + int vertCnt = BitConverter.ToInt32(b, k); + k += 4; + Polygon pg = new Polygon(vertCnt); + for (int j = 0; j < vertCnt; ++j) + { + float x = BitConverter.ToSingle(b, k) * scale; + float y = BitConverter.ToSingle(b, k + 4) * scale; + k += 8; + pg.Add(new IntPoint((int)x, (int)y)); + } + subjects.Add(pg); + } + + clips.Clear(); + Random rand = new Random(); + GraphicsPath path = new GraphicsPath(); + Point pt = new Point(); + + const int ellipse_size = 100, margin = 10; + for (int i = 0; i < count; ++i) + { + int w = pictureBox1.ClientRectangle.Width - ellipse_size - margin *2; + int h = pictureBox1.ClientRectangle.Height - ellipse_size - margin * 2 - statusStrip1.Height; + + pt.X = rand.Next(w) + margin; + pt.Y = rand.Next(h) + margin; + int size = rand.Next(ellipse_size - 20) + 20; + path.Reset(); + path.AddEllipse(pt.X, pt.Y, size, size); + path.Flatten(); + Polygon clip = new Polygon(path.PathPoints.Count()); + foreach (PointF p in path.PathPoints) + clip.Add(new IntPoint((int)(p.X * scale), (int)(p.Y * scale))); + clips.Add(clip); + } + } + //--------------------------------------------------------------------- + + private IntPoint GenerateRandomPoint(int l, int t, int r, int b, Random rand) + { + int Q = 10; + IntPoint newPt = new IntPoint(); + newPt.X = (rand.Next(r / Q) * Q + l + 10) * scale; + newPt.Y = (rand.Next(b / Q) * Q + t + 10) * scale; + return newPt; + } + //--------------------------------------------------------------------- + + private void GenerateRandomPolygon(int count) + { + int Q = 10; + Random rand = new Random(); + int l = 10; + int t = 10; + int r = (pictureBox1.ClientRectangle.Width - 20) / Q * Q; + int b = (pictureBox1.ClientRectangle.Height - 20) / Q * Q; + + subjects.Clear(); + clips.Clear(); + + Polygon subj = new Polygon(count); + for (int i = 0; i < count; ++i) + subj.Add(GenerateRandomPoint(l, t, r, b, rand)); + subjects.Add(subj); + + Polygon clip = new Polygon(count); + for (int i = 0; i < count; ++i) + clip.Add(GenerateRandomPoint(l, t, r, b, rand)); + clips.Add(clip); + } + //--------------------------------------------------------------------- + + ClipType GetClipType() + { + if (rbIntersect.Checked) return ClipType.ctIntersection; + if (rbUnion.Checked) return ClipType.ctUnion; + if (rbDifference.Checked) return ClipType.ctDifference; + else return ClipType.ctXor; + } + //--------------------------------------------------------------------- + + PolyFillType GetPolyFillType() + { + if (rbNonZero.Checked) return PolyFillType.pftNonZero; + else return PolyFillType.pftEvenOdd; + } + //--------------------------------------------------------------------- + + bool LoadFromFile(string filename, Polygons ppg, double scale = 0, + int xOffset = 0, int yOffset = 0) + { + double scaling = Math.Pow(10, scale); + ppg.Clear(); + if (!File.Exists(filename)) return false; + StreamReader sr = new StreamReader(filename); + if (sr == null) return false; + string line; + if ((line = sr.ReadLine()) == null) return false; + int polyCnt, vertCnt; + if (!Int32.TryParse(line, out polyCnt) || polyCnt < 0) return false; + ppg.Capacity = polyCnt; + for (int i = 0; i < polyCnt; i++) + { + if ((line = sr.ReadLine()) == null) return false; + if (!Int32.TryParse(line, out vertCnt) || vertCnt < 0) return false; + Polygon pg = new Polygon(vertCnt); + ppg.Add(pg); + for (int j = 0; j < vertCnt; j++) + { + double x, y; + if ((line = sr.ReadLine()) == null) return false; + char[] delimiters = new char[] { ',', ' ' }; + string [] vals = line.Split(delimiters); + if (vals.Length < 2) return false; + if (!double.TryParse(vals[0], out x)) return false; + if (!double.TryParse(vals[1], out y)) + if (vals.Length < 2 || !double.TryParse(vals[2], out y)) return false; + x = x * scaling + xOffset; + y = y * scaling + yOffset; + pg.Add(new IntPoint((int)Math.Round(x), (int)Math.Round(y))); + } + } + return true; + } + //------------------------------------------------------------------------------ + + void SaveToFile(string filename, Polygons ppg, int scale = 0) + { + double scaling = Math.Pow(10, scale); + StreamWriter writer = new StreamWriter(filename); + if (writer == null) return; + writer.Write("{0}\n", ppg.Count); + foreach (Polygon pg in ppg) + { + writer.Write("{0}\n", pg.Count); + foreach (IntPoint ip in pg) + writer.Write("{0:0.0000}, {1:0.0000}\n", + (double)ip.X/scaling, (double)ip.Y/scaling); + } + writer.Close(); + } + //--------------------------------------------------------------------------- + + private void DrawBitmap(bool justClip = false) + { + + if (!justClip) + { + if (rbTest2.Checked) + GenerateAustPlusRandomEllipses((int)nudCount.Value); + else + GenerateRandomPolygon((int)nudCount.Value); + } + + Cursor.Current = Cursors.WaitCursor; + Graphics newgraphic; + newgraphic = Graphics.FromImage(mybitmap); + newgraphic.SmoothingMode = SmoothingMode.AntiAlias; + newgraphic.Clear(Color.White); + + GraphicsPath path = new GraphicsPath(); + if (rbNonZero.Checked) path.FillMode = FillMode.Winding; + + //draw subjects ... + foreach (Polygon pg in subjects) + { + PointF[] pts = PolygonToPointFArray(pg, scale); + path.AddPolygon(pts); + pts = null; + } + Pen myPen = new Pen(Color.FromArgb(196, 0xC3, 0xC9, 0xCF), (float)0.6); + SolidBrush myBrush = new SolidBrush(Color.FromArgb(127, 0xDD, 0xDD, 0xF0)); + newgraphic.FillPath(myBrush, path); + newgraphic.DrawPath(myPen, path); + path.Reset(); + + //draw clips ... + if (rbNonZero.Checked) path.FillMode = FillMode.Winding; + foreach (Polygon pg in clips) + { + PointF[] pts = PolygonToPointFArray(pg, scale); + path.AddPolygon(pts); + pts = null; + } + myPen.Color = Color.FromArgb(196, 0xF9, 0xBE, 0xA6); + myBrush.Color = Color.FromArgb(127, 0xFF, 0xE0, 0xE0); + newgraphic.FillPath(myBrush, path); + newgraphic.DrawPath(myPen, path); + + //do the clipping ... + if ((clips.Count > 0 || subjects.Count > 0) && !rbNone.Checked) + { + Polygons solution2 = new Polygons(); + Clipper c = new Clipper(); + c.AddPolygons(subjects, PolyType.ptSubject); + c.AddPolygons(clips, PolyType.ptClip); + solution.Clear(); + bool succeeded = c.Execute(GetClipType(), solution, GetPolyFillType(), GetPolyFillType()); + if (succeeded) + { + myBrush.Color = Color.Black; + path.Reset(); + + //It really shouldn't matter what FillMode is used for solution + //polygons because none of the solution polygons overlap. + //However, FillMode.Winding will show any orientation errors where + //holes will be stroked (outlined) correctly but filled incorrectly ... + path.FillMode = FillMode.Winding; + + //or for something fancy ... + if (nudOffset.Value != 0) + solution2 = Clipper.OffsetPolygons(solution, (double)nudOffset.Value * scale, JoinType.jtMiter); + else + solution2 = new Polygons(solution); + foreach (Polygon pg in solution2) + { + PointF[] pts = PolygonToPointFArray(pg, scale); + if (pts.Count() > 2) + path.AddPolygon(pts); + pts = null; + } + myBrush.Color = Color.FromArgb(127, 0x66, 0xEF, 0x7F); + myPen.Color = Color.FromArgb(255, 0, 0x33, 0); + myPen.Width = 1.0f; + newgraphic.FillPath(myBrush, path); + newgraphic.DrawPath(myPen, path); + + //now do some fancy testing ... + Font f = new Font("Arial", 8); + SolidBrush b = new SolidBrush(Color.Navy); + double subj_area = 0, clip_area = 0, int_area = 0, union_area = 0; + c.Clear(); + c.AddPolygons(subjects, PolyType.ptSubject); + c.Execute(ClipType.ctUnion, solution2, GetPolyFillType(), GetPolyFillType()); + foreach (Polygon pg in solution2) subj_area += Clipper.Area(pg); + c.Clear(); + c.AddPolygons(clips, PolyType.ptClip); + c.Execute(ClipType.ctUnion, solution2, GetPolyFillType(), GetPolyFillType()); + foreach (Polygon pg in solution2) clip_area += Clipper.Area(pg); + c.AddPolygons(subjects, PolyType.ptSubject); + c.Execute(ClipType.ctIntersection, solution2, GetPolyFillType(), GetPolyFillType()); + foreach (Polygon pg in solution2) int_area += Clipper.Area(pg); + c.Execute(ClipType.ctUnion, solution2, GetPolyFillType(), GetPolyFillType()); + foreach (Polygon pg in solution2) union_area += Clipper.Area(pg); + + StringFormat lftStringFormat = new StringFormat(); + lftStringFormat.Alignment = StringAlignment.Near; + lftStringFormat.LineAlignment = StringAlignment.Near; + StringFormat rtStringFormat = new StringFormat(); + rtStringFormat.Alignment = StringAlignment.Far; + rtStringFormat.LineAlignment = StringAlignment.Near; + Rectangle rec = new Rectangle(pictureBox1.ClientSize.Width - 108, + pictureBox1.ClientSize.Height - 116, 104, 106); + newgraphic.FillRectangle(new SolidBrush(Color.FromArgb(196, Color.WhiteSmoke)), rec); + newgraphic.DrawRectangle(myPen, rec); + rec.Inflate(new Size(-2, 0)); + newgraphic.DrawString("Areas", f, b, rec, rtStringFormat); + rec.Offset(new Point(0, 14)); + newgraphic.DrawString("subj: ", f, b, rec, lftStringFormat); + newgraphic.DrawString((subj_area / 100000).ToString("0,0"), f, b, rec, rtStringFormat); + rec.Offset(new Point(0, 12)); + newgraphic.DrawString("clip: ", f, b, rec, lftStringFormat); + newgraphic.DrawString((clip_area / 100000).ToString("0,0"), f, b, rec, rtStringFormat); + rec.Offset(new Point(0, 12)); + newgraphic.DrawString("intersect: ", f, b, rec, lftStringFormat); + newgraphic.DrawString((int_area / 100000).ToString("0,0"), f, b, rec, rtStringFormat); + rec.Offset(new Point(0, 12)); + newgraphic.DrawString("---------", f, b, rec, rtStringFormat); + rec.Offset(new Point(0, 10)); + newgraphic.DrawString("s + c - i: ", f, b, rec, lftStringFormat); + newgraphic.DrawString(((subj_area + clip_area - int_area) / 100000).ToString("0,0"), f, b, rec, rtStringFormat); + rec.Offset(new Point(0, 10)); + newgraphic.DrawString("---------", f, b, rec, rtStringFormat); + rec.Offset(new Point(0, 10)); + newgraphic.DrawString("union: ", f, b, rec, lftStringFormat); + newgraphic.DrawString((union_area / 100000).ToString("0,0"), f, b, rec, rtStringFormat); + rec.Offset(new Point(0, 10)); + newgraphic.DrawString("---------", f, b, rec, rtStringFormat); + } //end if succeeded + } //end if something to clip + + pictureBox1.Image = mybitmap; + newgraphic.Dispose(); + Cursor.Current = Cursors.Default; + } + //--------------------------------------------------------------------- + + private void Form1_Load(object sender, EventArgs e) + { + mybitmap = new Bitmap( + pictureBox1.ClientRectangle.Width, + pictureBox1.ClientRectangle.Height, + PixelFormat.Format32bppArgb); + + subjects = new Polygons(); + clips = new Polygons(); + solution = new Polygons(); + + toolStripStatusLabel1.Text = + "Tip: Use the mouse-wheel (or +,-,0) to adjust the offset of the solution polygons."; + DrawBitmap(); + } + //--------------------------------------------------------------------- + + private void bClose_Click(object sender, EventArgs e) + { + Close(); + } + //--------------------------------------------------------------------- + + private void Form1_Resize(object sender, EventArgs e) + { + if (pictureBox1.ClientRectangle.Width == 0 || + pictureBox1.ClientRectangle.Height == 0) return; + mybitmap.Dispose(); + mybitmap = new Bitmap( + pictureBox1.ClientRectangle.Width, + pictureBox1.ClientRectangle.Height, + PixelFormat.Format32bppArgb); + pictureBox1.Image = mybitmap; + DrawBitmap(); + } + //--------------------------------------------------------------------- + + private void rbNonZero_Click(object sender, EventArgs e) + { + DrawBitmap(true); + } + //--------------------------------------------------------------------- + + private void Form1_KeyDown(object sender, KeyEventArgs e) + { + switch (e.KeyCode) + { + case (Keys)27: + this.Close(); + return; + case Keys.F1: + MessageBox.Show(this.Text + "\nby Angus Johnson\nCopyright © 2010, 2011", + this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); + e.Handled = true; + return; + case (Keys)187: + case Keys.Add: + if (nudOffset.Value == 10) return; + nudOffset.Value += (decimal)0.5; + e.Handled = true; + break; + case (Keys)189: + case Keys.Subtract: + if (nudOffset.Value == -10) return; + nudOffset.Value -= (decimal)0.5; + e.Handled = true; + break; + case Keys.NumPad0: + case Keys.D0: + if (nudOffset.Value == 0) return; + nudOffset.Value = (decimal)0; + e.Handled = true; + break; + default: return; + } + + } + //--------------------------------------------------------------------- + + private void nudCount_ValueChanged(object sender, EventArgs e) + { + DrawBitmap(true); + } + //--------------------------------------------------------------------- + + private void rbTest1_Click(object sender, EventArgs e) + { + if (rbTest1.Checked) + lblCount.Text = "Vertex &Count:"; + else + lblCount.Text = "Ellipse &Count:"; + DrawBitmap(); + } + //--------------------------------------------------------------------- + + private void bSave_Click(object sender, EventArgs e) + { + //save to SVG ... + if (saveFileDialog1.ShowDialog() == DialogResult.OK) + { + PolyFillType pft = GetPolyFillType(); + SVGBuilder svg = new SVGBuilder(); + svg.style.brushClr = Color.FromArgb(0x10, 0, 0, 0x9c); + svg.style.penClr = Color.FromArgb(0xd3, 0xd3, 0xda); + svg.AddPolygons(subjects); + svg.style.brushClr = Color.FromArgb(0x10, 0x9c, 0, 0); + svg.style.penClr = Color.FromArgb(0xff, 0xa0, 0x7a); + svg.AddPolygons(clips); + svg.style.brushClr = Color.FromArgb(0xAA, 0x80, 0xff, 0x9c); + svg.style.penClr = Color.FromArgb(0, 0x33, 0); + svg.AddPolygons(solution); + svg.SaveToFile(saveFileDialog1.FileName, 1.0 / scale); + } + } + //--------------------------------------------------------------------- + + } +} diff --git a/clipper/C#/GuiDemo/GuiDemo/Form1.resx b/clipper/C#/GuiDemo/GuiDemo/Form1.resx new file mode 100755 index 0000000..2f4b5d7 --- /dev/null +++ b/clipper/C#/GuiDemo/GuiDemo/Form1.resx @@ -0,0 +1,225 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 127, 17 + + + 25 + + + + + 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 + 7/955u//eebv/3nm7/955u//W620/wAAAP8EBAr/GAs5/1M/cP+xoaT/5ty6/8+FSP/BUgT1AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMFRAzvBUQP/27OE/+bcuv+FdYT/AAAA/ztvdP955u//eebv/3nm + 7/955u//eebv/3nm7/955u//eebv/3nm7/924Oj/Upuh/y9aXv8NGRr/AAAA/wAAAP8OCxz/Pic9/4M1 + Dv+uSQMeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwVEDU8FRA//fwpj/5ty6/+TZuv8cDTv/AAAA/2bD + yv955u//eebv/3nm7/955u//eebv/3nm7/955u//eebv/3nm7/955u//eebv/3nm7/9lv8f/Qn6D/yA9 + QP8EBgf/AAAA/zsIlcw7A71bOwO9BwAAAAAAAAAAAAAAAAAAAADBUQNTwVED/9/CmP/m3Lr/Xkh8/wAA + AP8xXmH/eebv/3nm7/955u//eebv/3nm7/955u//eebv/3nm7/955u//eebv/3nm7/955u//eebv/3nm + 7/955u//eebv/1emrP8AAAD/NAOm/zsDvf87A73zOwO9jwAAAAAAAAAAAAAAAMFRAzvBUQP/27OE/4Vw + k/8DAwn/ID1A/3jj7P955u//eebv/3nm7/955u//eebv/3nm7/955u//eebv/3nm7/955u//eebv/3nm + 7/903OX/V6as/zlscP8aMTT/AgME/wAAAP83CJ3POwO9dzsDvTcAAAAAAAAAAAAAAAAAAAAAwVEDE8FR + A/+ibGb/BwQS/xMiJf903OX/eebv/3nm7/955u//eebv/3nm7/955u//eebv/3nm7/955u//duDo/1em + rP85bHD/GjE0/wIDBP8AAAD/AgED/x4XKv9OLjH/hTgJ+AAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAqUUZ0A0EH/8LExb/aMbO/3nm7/955u//eebv/3nm7/955u//eebv/3nm7/955u//eebv/3nm + 7/9brbT/AAAA/wEBA/8bFCr/UENY/5uQhv/c07L/5ty6/8RcEvvBUQOnAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAACkChAoVBS72AgME/12xuP955u//eebv/3nm7/955u//duDo/1+0u/955u//eebv/3nm + 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 + + + \ No newline at end of file diff --git a/clipper/C#/GuiDemo/GuiDemo/GuiDemo.csproj b/clipper/C#/GuiDemo/GuiDemo/GuiDemo.csproj new file mode 100755 index 0000000..d592685 --- /dev/null +++ b/clipper/C#/GuiDemo/GuiDemo/GuiDemo.csproj @@ -0,0 +1,135 @@ + + + + Debug + x86 + 8.0.30703 + 2.0 + {8BD44147-3290-4A73-BAA2-1C171566BC25} + WinExe + Properties + GuiDemo + GuiDemo + v4.0 + + + 512 + false + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + true + + + x86 + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + true + + + x86 + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + true + + + + + + + + + + + + + + + Form + + + Form1.cs + + + + + + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + False + Microsoft .NET Framework 4 Client Profile %28x86 and x64%29 + true + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + false + + + False + Windows Installer 3.1 + true + + + + + {9B062971-A88E-4A3D-B3C9-12B78D15FA66} + clipper_library + + + + + \ No newline at end of file diff --git a/clipper/C#/GuiDemo/GuiDemo/Program.cs b/clipper/C#/GuiDemo/GuiDemo/Program.cs new file mode 100755 index 0000000..cc4a2c7 --- /dev/null +++ b/clipper/C#/GuiDemo/GuiDemo/Program.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Windows.Forms; + +namespace WindowsFormsApplication1 +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} diff --git a/clipper/C#/GuiDemo/GuiDemo/Properties/AssemblyInfo.cs b/clipper/C#/GuiDemo/GuiDemo/Properties/AssemblyInfo.cs new file mode 100755 index 0000000..8d8be3c --- /dev/null +++ b/clipper/C#/GuiDemo/GuiDemo/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("ClipperCSharpDemo1")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Angus Johnson")] +[assembly: AssemblyProduct("ClipperCSharpDemo1")] +[assembly: AssemblyCopyright("Copyright © Angus Johnson 2010")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("7eac3b0b-6f6f-4b48-b26b-c7acb1f769f5")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/clipper/C#/GuiDemo/GuiDemo/Properties/Resources.Designer.cs b/clipper/C#/GuiDemo/GuiDemo/Properties/Resources.Designer.cs new file mode 100755 index 0000000..84210c0 --- /dev/null +++ b/clipper/C#/GuiDemo/GuiDemo/Properties/Resources.Designer.cs @@ -0,0 +1,70 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.235 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace GuiDemo.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("GuiDemo.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + internal static byte[] aust { + get { + object obj = ResourceManager.GetObject("aust", resourceCulture); + return ((byte[])(obj)); + } + } + } +} diff --git a/clipper/C#/GuiDemo/GuiDemo/Properties/Resources.resx b/clipper/C#/GuiDemo/GuiDemo/Properties/Resources.resx new file mode 100755 index 0000000..4ab87d2 --- /dev/null +++ b/clipper/C#/GuiDemo/GuiDemo/Properties/Resources.resx @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\aust.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/clipper/C#/GuiDemo/GuiDemo/Properties/Settings.Designer.cs b/clipper/C#/GuiDemo/GuiDemo/Properties/Settings.Designer.cs new file mode 100755 index 0000000..e31c5b7 --- /dev/null +++ b/clipper/C#/GuiDemo/GuiDemo/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.235 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace GuiDemo.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/clipper/C#/GuiDemo/GuiDemo/Properties/Settings.settings b/clipper/C#/GuiDemo/GuiDemo/Properties/Settings.settings new file mode 100755 index 0000000..abf36c5 --- /dev/null +++ b/clipper/C#/GuiDemo/GuiDemo/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/clipper/C#/GuiDemo/GuiDemo/Settings.cs b/clipper/C#/GuiDemo/GuiDemo/Settings.cs new file mode 100755 index 0000000..dfa1e2a --- /dev/null +++ b/clipper/C#/GuiDemo/GuiDemo/Settings.cs @@ -0,0 +1,28 @@ +namespace WindowsFormsApplication1.Properties { + + + // This class allows you to handle specific events on the settings class: + // The SettingChanging event is raised before a setting's value is changed. + // The PropertyChanged event is raised after a setting's value is changed. + // The SettingsLoaded event is raised after the setting values are loaded. + // The SettingsSaving event is raised before the setting values are saved. + internal sealed partial class Settings { + + public Settings() { + // // To add event handlers for saving and changing settings, uncomment the lines below: + // + // this.SettingChanging += this.SettingChangingEventHandler; + // + // this.SettingsSaving += this.SettingsSavingEventHandler; + // + } + + private void SettingChangingEventHandler(object sender, System.Configuration.SettingChangingEventArgs e) { + // Add code to handle the SettingChangingEvent event here. + } + + private void SettingsSavingEventHandler(object sender, System.ComponentModel.CancelEventArgs e) { + // Add code to handle the SettingsSaving event here. + } + } +} diff --git a/clipper/C#/GuiDemo/GuiDemo/aust.bin b/clipper/C#/GuiDemo/GuiDemo/aust.bin new file mode 100755 index 0000000000000000000000000000000000000000..9d3bd082bac472c9c1d145c7d6355435e76d5501 GIT binary patch literal 6828 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 b<(j`6`(PG7D zt+n7TZn%I}tI@gvE>)pQt3}#c#jRRuYhSC?zSjAFzvp?LnaM(HfB(Mk=kxpg7h!!P($yoLgM&LQ3l9!n zzNR)BY>a3%k@EUrWqCt`))cG=2P4f5!P@$`H>$R$IL0X!3sKI*i9HkaoY|8tx zcZn(O9c8toSlqfY0Q`LO29hAIcW_a=Ab?fZ8#&RRPz5c5XV$7_wkwq({}a$Ck^rB3 zz;_ul??9Y`neHEpN(CwvbOX9q{j+jVDMNLka-%#yiN2sIys-&o`=dxuCx%CVl0QME z&MSySBb7jkZto!D#PtNOq|Zzkq#zQm(?CdFl`?GbtQ6wOOr=WV1taqg?TQa|vnq$W zb%#=QQA=^Ik%qaTe3Kz?C4vXP&7Wvlf zP#ft(Ozo}pI=7t+ zd#30(SGH3d1@v%Nc4#zUYQMDXfPK^kmq&^Lho|4lG@m0n26X{vcEB~N1XTqnSzBq% zb!P|MF3@yEc|3#A%IS00uJw6p*G9*JUK@wRhfxW*d@i43e5c+4pHnMjg&h@kpWQva z-P(#F(K{9$kE(z-T11fIPyHqf&S=RFq)pC42d%9b2)j0cl>vVsG!dD+s#STJs{-lC zb(#Lm(4=^swbjd3uz`0~ppQS*=k=v)lUeOu8JYqps6KHNBzk?`yu~^qb7dgIm!h3Q zBoqowlLnz;mNR@A+H|SVX6RrhKnR+S((UI%OQHf<*@5g)vwc~XCRAJL8G^XbM+LsgnD%{Jr6H?bH-JuuF$7AbTa zev{|*`YqpNVel+|OS;41JV$!wJlnPs7SKhXy>>I_8SB&SaRPf60!}uU@OG(RfH%C6 zyk*Ez^1P{e-n8UF@cO;_0A;Rnp5r__0G|xTM=!;nqK}YK=}30&gge-h+_0a|X?1&i zcAvu)g87_X+{-rpXczA?8oILso>BdL?p_*tU@?!+BMs?(KDStMO#-j23r zkF>V>62%-8v7nf>eMjbwoNH}Gcrh_KBeO@+_VeHa;OawI;AiMeM`#WhdUY?ih329# z2Hb7YdB~->n0IOOksp@IyxVUJEkJ3s-IF~QWxGc^6~*j;WAcaK*Ok<+lRA8Mq4n7f ztJ#gIhDkj6wr;KZZiAay0;#^#?7Y!8`BHQ8f=B~ix6iAc21$VwU&>XreJR_QlD)(4 z4lM+hs`*lKcKAJdFj1Wd9$+yig zVV`kkEEe-QFggyO!!yH=QqD-#A93*K>_Qit*6BvIMd9i+qGhBj0*g1=wKIUY5;M!9 zEk@3+VRPX{l#BT7p{2;C>U3^dc@lJP4SNA^z%i=O?+7hNHq8}59BlO4WEHA&o^vHe z(Sjo9f?3p7pnwKv0*ra#cjOOkPD2szjUo9outfM5~Ys*z+z5 zzQsyOJ~b(#VOBbvhyYqOvQD4frPUzglJMNS&X|S9@b@1z#NS_Z4mc4@WHl4511>C3 zy50d7NJR11p?Lpf#eH^N^{=Sd(@gF%71P#037-R6$B2K&Or&30t*F{vXJgT$qh^mY z*LEpQcSC1uD||s8>8W2L(ni;UFyM}^BS75J2P0dnLwPuh>}QT%w6&k<@sS#;H{86Wh%=OVAL4@0DUMBXOf2k0ZG=+zJ+d=FVz^7R1nLcyo^B^ z&}C3y^t|fepJDO5ixTF>SaBq>^NO-{qzsTfU#TrKv?x^R=|d6Bhei;nSESk@=gf^p^K0W zZ9yVV;>*?ASceTtu68kU{#^7mdI^axWkm#WpwXA+OZVl5+JW%()h-jV?7Z~os4v;t6?6~{gXs-j$%L!&_pb*tvskXwk$f@bJ1Y8wlJ&frgx z)hov$_dc%mxJDXAuxj52@5m1$eYu5ua zD#O6otp>&%5Z>!LR2mG5y$yT>OSoP85t`)8{BIahUvh^>`@z^=XX`N3=4E7O2X923 zYz;PtfYK|1zXVcGe$8q`IPc~WtTwj3*b_TV9>O78-(Dp1kR9NyXr8yJ3j=z-mS7OP zm$J4nkrut_Biol`C1hJCJdA$sfQEX=QJ>B*_Fm`Yd9?vhboj_kw$TA=E2gh~H1=48 za!X>hg>FDQ{XR8AsWjN_HF%~q1SP!Dn~->|(VGD_W7=W5-oh*=sx^8mvoJKWw=p|d zvbQq}Ho)#=7U9Fp_DN(R%EbB-S-)h3Lm+|WZH~c=USW+2LAGS?pa`5+0DC91bZ%=@ zuyh&&ivdSg)Pcp!EDVFJs6H@}9VA)lTb^X^BHy57?`D=xWgH{jgR-@iCeZXO`)y>| z0V7LQjjT+|UDAw7X?m7|3<3($u_2u$&7PydLm-KH?LK64ww;T>k>bkMgXZln?fy7H zcJLKU09hin2jbYsP)?TJ@pABh6>h2TNwht2bU*Du$#aBrG^~J-%6w!xoBudo&d&46 zc1C+xP&7eb?U8t1`-x=f5!$2Ov0|hiSg}_RteCC`mc!MPFGns3o2xw*mz12eDj`c~icD|Q zElQl}s6zjKcmBFTSqFo{vkZeiC1PnWQw8Rs!jfbah>QFwp@Pti>#72AxyG0Z{ofNR zuxySg^S!9R!7)`}9x6;rR)M&P)fS(zLUU?Y6^QF=s37zMNUysU%ccs<_o4zl!Bl~H zsBluU3dBXmCsYuciCtCDc|0gq75b8d3VNMB5X|?Y0^QD3LC-%eteA&7fn;@vi!4g0 zBQzyl)gdn1un6-x+B0!}k?MqMdY!Hs^S!7h(MX?kTz-tnk%Z++l!QfWm}Kc1bx9oA zl+c)E%$nllSwq}FLu2O6StD()N@z?SOiM8j>kLV@4snqi6S9P+psRIs9{OMj{r%nf z>lR@hEP}|}B@D5{rV4sqA1vmfjxSjq;v$bG)DfC7UDYAZ94zL|!IHKwBvjMubk&&e zMKxI@ej-DS;Asv^61H!zSZ)xEAxxr`W%*HImW1WDp(ibO5J^}#!PTm(6Ocs&8!B_@ zWjU`Zh+ULQ_5-2^7=FOK=?BvM{e&^tJ#!G4&r8XxOEx@lkuMVBgl2eNTCyzS%;+if zc6&T-&`>$rv(kI!F|ZdV^Czy~wi4_;Qr+2k-kaUgy`a_h#T)3AX&zR3aA-Rc7bjjE5`IeZ6O_j!a94WI3-}&xkXZjU;w>x{;kX z{$@OB6@Ejdi>yb_vCr?)b9$oLb3L!mL*}7zml#f5WKlvTp(*V;4|N`TSkUu&(3G|n zY@s!NFAbTCz89_nNz8<4n2Q$ih~ncGzz;>@rh^xsXWz_PijG2e>{ z+!?w8-CN%6!)iH!+bvC3vzNJcB%6q=}OD+^osbUJxq^ zAMM3>zKhX+Cg^-Jb~@msFD1(9EWgY$s-K;SWbv%%D=3E!5SbG?NFX;r!K0@9(9eks z>8l8PrpI*y!CQeY2)Pq`RM=^+5;!B%DfTtwo0<_HLx-d?^b3N>a@2)(>zH2(<~&l% z%tE&^%s~vj&Prgg2s@*1pb+|%fx$*aAL!6wV&q;hTYEE}*N#Y*nwn^RAFh)yZ;1G@c;bt37 z>)gz9mywERHC8nN5ZiR0O`g)?v@QzHIGnL<9s??zwUAiDlyhz_Act1+acXZ-K>u+r zwbZE;_SioA5HONYQHqiMbVi2Nkv-Oyong!7yF_KU?D~5_2AAJ~ODpAw@UeqT?s2?J zdmAM3V0iTNt{&CWY`ou@v(gJqshRc;=*Rysxm1K_;C|~jSsURLejGsR9q1+^JMntc z=A&TYx8l@`na%G?NpF^|_1+ANmv{4fW;13szmH_{XD~<)f%-$YK9k|R%HKzxsHA!H zXWbc-+lkDO$K3(D-!4zO4Nb;oKq(y~D&nDUyq-!HrYGt}X}dfaM{6o%w2o^ktyw}n zbv0T`J64WnaB}nZC?ypC`$I zVJ;uu@~D&7BX0L)=EQ3`x~z33)rS56q$rUS@Q$i71w57zkmbvQ0KAHVprpS6*iAwf zB$(B`h{#Ha@Okkn2_ADBeHwoajBvy>0(!g>5~f;pw+bY?m8sU-AReIi8!uns0cb0u zQfmlF=olK`?#sqgOhH~C$Ug$PE?=pOO3%4+vy69kU$fOoXf@gudD*QRM>!(D20-&% zvvx!hPrS9H^Auz+Jo}ri5LfMn;j@$aZRj}~wNp5{==UEWujk8po@RDY_3g+LlIGq|4{ zKyI!t-OPqQ0Z&m35*Y*JZJEBw0RZyuf;^olM<2BX`l#h}9ks~4aXNqKPhd9n>#rrC z_`k`<%3-{g1AdR1ba?q=73lDqk(%`bK1)+-F7^mN0{k5y)++fBUx+fc9qRAh@Cz~R z9l$NIccsUYuPy@p+knY@7NGnz@GfYSj2{XKc}pwM3i3^#x1AQLQ;r8IHztOT*<= z;mGJ;HRC6hsxJADYr|Qk0$tfk&neDL6U;7eDwoW%+D&1X-P)a)XcF`C zU~VY~;z8_qRF3m&tD4q0*Mw_p)-*wao6XEmA2y$ag9#ulNPQz>=^q#-SzZ)|E_$rqj&w&59IX0b^hL^j+X#q=Jm{CN30-q zHfmi*oG>>q&ktloGX4+q%~a|G_r6Zou^~ZA+aXGXVej zggWpVWL+)1`ltC~+ro3>GEMnUKCmn1vioCM!$!oKe)~bJ<-5w~CI9YvoVxA%UFv)5zl_zdJ7X_Y z_Wv4w^yar2hbPalwT$xlVh)!#R{7-q9x|xMiraVfz#msWY;fe>7IPf_<(%OBeyTR~ zcVAlnSbEMt83WV4{|cJ+zjfPfJ^b~#GXH<0|9AIha}$Sp#n4r>tD%E?!VpcjrC2L5?eN-G4{}HcZe>pw$G1Y3_dqy^#&pP6v{W}d3*DvG6zr5 zy86QLbm7=6z2Ual*t5SAOUvyiZ6PO?o-!ad{iNd9B@@$QyBF97^(LD*$X-VIZ}0n& z==}bXCt?HAP7yxU`(N&L%#WuF@!@A)jFnt?Ni0}AGiG}t-6+`NQI|^ot9yXbg%*PPtf((HM$lt6ZD%?m&O*8Mi;o(1yyXO4_5E?pVB z;p)p`zy0Np#h1R#{2O7t)SKlf_=2(Z+=n`Q$Yvi`Kl0Nac-qF4zyFDwd(8cB8-Ie< znrC5%*o^Zph|8eg&u#x+EPrNc%x3s-Z}HERpB(%Do%joXh)%ZsIOepa#`=w$5Tnnh z_ZuiaOP#X({bOe@T^cJGH9D4>ncE{S9#8(aS$`mV9`}ua@pa#7vBrk?=@V;SeOl~= zr*Dnhl>Ku$J+U#%SH*3VZ2#o`f1C9eGEc(wdt8sZL(S?7f;+546|f3tU) z5qrk7k$Cw565hc5lcns?}`W#4N50hvQ^^@v5#f%7rN+<(0s9rw*!PizxC z-aFD68##PLmvJ!VKYPP^*{h)~<$vq_7v&xA13uh;{)IfbmUI94==WB~>^5g?#OX`L z_qj(w``EqnAa|MLL(u-qwf1=Odc%WXkNtPeC}-S1DVx_d#n#QB?bV*W@%=x+fj{Hq zDNii2t(c!P^On)pt75!{S|hiB-~XuW-t>k4@ZN#z%0<1^|4-u}w-4s;`+%+g)3T1o zAF{c3Uwyp#?xPrL;|DIEz|GATGd+_k& z+kfE44qW*U&g(bqWcvdzOt$a&u(#IWojuvM`!|#AyH~ItZTjzBV!!Eys)2twc;SrL zl3}A`zW({KIk_V{QHQ4oJwM?6>16wZfAd?%-E`UP+&{jzvpvRZTieC4(M!*Yt$pcG z>^pPE;vP5mL)^EG@6G`_WKHy4^@q@@i)4Koanjh>rp8EYP|>tl^V=WEy;!(>sqh4k z_n}9RbC~g&-pA%$cBQNx>kj-fHmQ1Ttp2q(rObOdvpw}f`zw=mK-uy9+F_rbjQhg! z$DZx7{%{Rq`w>G&#ja|*Ty#LJ>|#r_ANuNL3#1Nz`x|R|>%%TQHh%C)?A!+*lY6fL z<0r=obF*TT?f1Wpe#=pq**;p`923dw z;IT~B@{K43q zOTHUBt>d~lpMtZ_mcE(e3VCt+p$~rC+x{jaEfnjQKQwm6yi;Nwmv4-fmQ0IPJ^h04 zNN(SK{NQ_UsEnY`YI9;d0t(R)1><``9r~ zA04kj3@gjmd59H#@RAo+m@PO}c@`Jp7BrFzBgL}f1)5Jm%Qi7Yp_KdaJ^{Tb8uSvg{Y7WgVk|`(^2l?PCOH?H((zV_#uu`>|h^rW`IR-P!m$@)HFr zH5qN+C^aGRdF{U{oqu#fX|eZk>Hg0rm9}QSDfOL$j+9RKP66*X1%G(w5rKaT{aWyZ zor6v(B`hi`7Px2L41pucW|d~`{&ndcjiseaJAWha>V3b3tU09z54;7Q^U#mql^)(X zAF|&D?E>iiPHD%!)1c>3=zTi$d>3_#pv!xZyBKZXgWP4M=XSggxhufq1IRrK`hHNl zXWl9)k1RU}bsvJqxdQXrR}0*+ytV-2Zu- z$WiJNfz!R0iaxEG?V?BLpvwe)5xQLPMMdA0^7`VfMnA6*cx=h{#113Mt`xh}RBsb_ zN8?puuXi_fz-C90zZzrz4(xV~*tx9Z8nOG1?cXmwwuJV-R>mW1_YX=rK1(~V6WFou zhoz0hzeU~k!2Jf}@gwx-*Wj^TVEeHhGS2%yzd@ia4EdzF3H>L{jgWV1ylmDVkDl#zY`>*+MA^;Kp3p3pb=-`3a}(@-3uN9Pc=BgG z%apUUbBDmJ-P@)8;hjGc*g5D&Lia^zyR(JL9id@DE>cjX!$aq3M8DCgtyrF)1?NFG{5l6w z_7Bk4ABY}BMb}|GuZ92pQ1m1mQFe{UJGSI%`04eyIz*3-eOHNIOFOrTo>{xEH0*Yz z*s-W+8+hFSyKa+yeG$4+VCSIk32e>0Lh7e`w@N#fX?H^QyR2iY@F&#!{aw-H-A$K^ zeuTQdmx=!E$J(Vo^N(ICc1SsViS+Z>l1s!6Bg!sC->(7BOVIbL!SiB)d*)pXeXjz~ zHt2H|cy1ARY{`WJ8;dUx__xp|*kl{@+bB?}4FcPbMFn~fuZP}OB7SSI*_9ZRddT`7 zbXW(U{T{}k7Ba8E+E^oSWLa47d*)RNEGjA&*g0smz+&&Y0{4G@w!ryER|-6M;7ox_ zJC_Up!#kG>Jhx-9z;`z-68SaN3q_w}OHLL2))&u*eYe3@a|O0$&X#`RYt{s|ADba| zNI6_Auw&mT0<(5c5x8Uf$pZ7*Ckniyu}I*EvO23P1-52p2*evI0^5(J2uwNbfvoFsxrNWtPN(1x@3c#~tix*fl@k2H17DZW&kyhX zQsBFr{wna;l21#>r#15rQf@!?ft0V_cT`~3?zceD50MpJn*v;&X1*?FO+cJmv!tDSX2FU3FFcF;wMTNPg*k{71)04A;EX-dqCih z?Yjit(Rio8J@al8*g5DXf%`xIk?=cs;0Gm)YlnAUEpp%8bfxHVY{_>;&o4rkmN2ei z8yttnmN4FIk$w^~4v>!H!FKw%Tv@`nQ`T`+3F8hS;|lpR&JZ&0P_7<-u7W-tLdSVV zdd??8&KJ^ip43!d0l8O*9PYc;7hhJweHi6)U)Gv=aS8Wn)QkHzLhj=Txv%pcZbg6F zq|ALE%iISNa$lI&9)+H**h6a2XCwS|9rW0MeNqkNH(@-!1Nl+x@6LwY^#ZvMWtscZ zn(8ybe=YWBOJTn?&}R|GzZ!FD0qjx*U!DbfRAAhvKu)@@MZMXvHuN^Xc(8q~B^^rI^qAU%1dC}Jt^gk7S z@JjiMkXvADrW0$82Xo9W<@RG1^g9K7W6&)feE$Jm`yd8>g+BSf=X3Nu02}^AAj^#3 ztlu+_y8HvS%?2+8JN1Q3D|E?~G9l~p+WQNCt_ykX{|%q+C+%5Jer!kn#1j&~|MNde zJ3_W2p6g7p_s{T!pp>}|5zlprkn5CLCLQYuJN9v`{s3DJ5lH&OJKvZ3rJWy2{ka|Q z3aqLAozM}IZhi5uh3~N?zlB{!ppU;3XyQ%Sn)xfiEA=|;HVQuUD}n9D4hgSFt4lusgpQEy%<|Ry7`qOYcn|Z8;#UG$Za=n4+7nOxxSygONl!bn%zkmdMLUt6b|9R8 z^ilYC8Rp0%==XOpXMT(|;atqA-2!W>?}Z(>f4isTZ=v&`&mAR=#T9X=)UD`O74*Fo z<54Y;`@odLH=utt&}Tcwr55(P9xm~Mo^s|Ny;%56_g;>Eo-ge?2ek-Y zQBkXuxlg7%?wbkqee^XLU+$}~!MI*5ko$4!$Nl(@?bpE$?V|S`jXZm~4*q$$l=IrT z-`|dTyH((h?NQ?58i*!Uh9i_HghZHC+}PIGV6Ii z!*;yCAxt@Zwbb)|jeH2(kKH8r*38?5Zhi4x0y*9X4{%SjTlf<4e(2pz_lw-aJ0BE1 z=r7b~|L2{8=R9JWe#ZME`W^3!=!fhl{ZhXlIwW|`1Jcot*&ogy_J{L@{dsrOJE8~U z5A|nUqTY;4yw5y%fNRCI61RBY$9Ty5KtkRpGT!n2m~oW%y(7#1201$n(TnF9)N{|gU7|N3`$fq966$u?C3ZQsgy$h|LQkG)ypHj@7vuUW z?8NhtR|GOX63_TZJm)*19`|-ZpGT#h^PF@XUqX)ih_d@I4tK$S??=CGm$L33_ez;` zy5HO@enfiu7wPGDg!E%V&KI8N==1b`$iEzMn`cKC3w~$gW{lqhu*YW1!#%J=vp|-4 zK6LQF7R-|eVV6rWo)5{qWO>iLZBpj^=>x9ABQ>al8pR{)D<8KP~>j^E~?T;hoQjAM@Og`-P&Sy#je2 z$bAaS+_&(YkbX!=KPBWohxOd|uzYL@_dxq#k93UXKIoAlu&l!m9ri|K?-vB}Jd^t_o^KN7wZ8<~T-feq(DaAQR|IwrI)Hv~KX(wcgTU(`>Vn|$bAdch z<$iI`yw{-H5bTd%g`W8WxxZvR_oqC6<$e_pP!-Qu5AS>e*8$M}RCpH^Jt=T~@lyi# z%zIkku_ez498vbHz?$m40`F+tC+%6Ljx3Y!yPNil?s@Ic2`uY)Uhq4%zaa4N&KKb~ zFQe^?(&x@WdYSdKL2Kp<;PEriz5t#t3SCY03vrmW`)7tNX|LyChnK|GMMbpZKG@(T z;P%Gh7onfQX3t7{jy>hk7s#JJLjCAN)R#U+{R!D0*0aodmWgM7>65g_yPJLr+dhNw zc>?x-8Z=M9ALyr#L;jOerhQ3A$TMO>@*|`kS-XD<-JTIhJ(qSqDf$z#KjcSWVp;F+ zlhS|U=~I+LpCY7Bksp1Ekai~A)c^mIzYl?L;!mDu^M7_{{RJ%Y@08r-su_Q~fj?xx zCwSuN+li-de9Cy@>D!5?Z;Zqzp1$#^?1`suC!W4tj~&B_r*C|EaN_A(A$EgTVOM(M z>D!5?ZzrC!+li-dC!W5Yc=~qY>D!5? zZ~RM(6Hnj%r=Gsyji_a(mRO9x{Y%9otPT9KwW4uFg;V%I%c1I!j>ccE4!IED*9SO1 z6ZvIL5qv#bloam_#TS!#fm^Xm{jos*BiAAGRxFr}y01}gOhH{q9e-y~K34pp;aLN3 z_jrI;e;-z)@F#fu%fpLtd2o%x#XpuM#5c+bj(??x@1v8yYqJC5>*n}(Z_>^QXfrPT zFBrW>Z=7ncx*uO&_a}7(-vIcvx)bRP%NYD@SD9t0#jiG78j!!ovdxmMUbZ{~%wK@< zsx&L<$5=@pMw+dDXnh7W_aXJFpzR2Lcec&8&gNAQBkxrQB>kJDb~`aSk~T|vv82yR z`nIHBBlW9Q4oZK}aSMJ5?5N{_!>MLF?+51==Q{j=m;*nxnyv;&Iz`fzlCGEZ3Q6yj z^jS&2bRBV}t5i4Ber~ocl60+mu{&M;(0z&fF?Fw---LL?{WvgRNt)+*9KVFQ)HBuN zRE-|m>H!b+e+Fr~ddEWxM7&HdK06TiL2CboG*7wVdg*FX>Yb3jJe4|>A@!>ZQz`3mNv}_( z^u3ZE6U?6_{X5cZH6V>+G*r@YlCDDPSFLH}aFwJtNcxJT{&eEQ>5J06YJEB-epk|6 zl0G8oUP*r`X-v|bKD5l(KJ4iPq)xT6&pMk^U4+!DZbYqDJtgUjk`BrsW&zT}Dva6V zRhJ6pdZg*<=?q%+5+A*8tB;gFM(S7J2&TWEnE6Pv)%X3+z^V`WDfdzT0r<=jV=4B^b@s0qV06X}a15yjR^CID+|M{(Y~^bxQ_#=3ySOWWgV%k5`j1)2zyl zxs;*sjkWmAsv)W$Fd3>$N++p-QmU5H7_{bG*8tPhSQS)Tz_SHh(o~@u24R%YCZ*x{ zZb}<^Xi@X=L%bGMX$c~|)G`L?FD->ge=F&`k{+`Z19PQqC(>u|JxUgJ)OH`zf7tdQ zO|w6Ybcp>iq$4FACuy;yb0l3NH0MaZQqpyTX|?|pt**8|gLH@FcS`<#p?Or&7w!8| z`{*G6X4oB)#lN_Bki<;(m5;kAqID&Mw<1M6XB-I>8 zITnuhkzVZh2D zzk56Z5uEL|pe{}MF?cN9VqFKHDltl()<%?;8>OFFn^C%FxK8P(Zx1OYz-mzYf zksrYD4KBwZJx5({l)gYISKVrqY_{d9zbY)$DKk(SsHPdEF}54wS#9#w0B!ivxaDfF zy22yDSMBP_LX{+-j zJHEUXV}A!0KC3!rVg7E(??&1+|Da$VmD*0EHuVHjyLu9-Lp_buqI8=5$XnF`XGVq% zJTo%v>NVsY>P?~PUTabB2>y6-|5NynMapM}4jCEjFE#v9FtOw6V6o&`7TP_M`XtSj zbg-l&BrTM5ilnoUUauBNeu<>3BrTV;7U>du3(|8`8`6NFVu`-Ji~wEfV&%krY&nj7t&plmaBhw%N>U-w|LG`hb(s^eaT`?2_WxIIcPs*Nk{sUB{QYk0Y1RLWH~9N z!Ew}5lhWi^pxi0#NYjz-QuQgnbNt0}VamIXuPm3ReB`iLWsIzMrF`P>S$~r97ijf# z$~kJV^>E6UjuF7bK>vP<(^)8#nPS^1R%_}o{EkB)b(C{}8k{=InJW3Al4tEA=TJ2! z^>>a1*6T6*2S|R3wInqFtIki|;9O#@Ox^5UWsRg>;w-mrOT7Z=ovGJ4kEq8|cOXCB zdyDfW%gd>EB0ZdXKk)CSKJ09R4o^C_BE1DPDs4YfPufA?{b{!V&ooo)xg9hCb(?j8 z)I>a_FC^tn}Yn~NOxIYOPlFBWaUU5vT~%3U<9ijN7UPBOKs=6%B_D&TZHuM zw3VRDvsAc_SiI?LTt}<}(>35nq;GT`LM!4Yq;GYNu%42Bwd*A{JN-J;(r!zv0n27* zAv9d+{@8j^`a<|EZCER{EoxhOi+h)4d-^Ai!PeW;FLHlneK)<`-J*V zbJWMy$r*>xFXBJ862D!o$aoX<=V!d_UT@ps{Q&u^GXCgpv)!I?z1j*rIa^=J_{@Eq zdIOkUmZMD7pMcq=EI#Ime_W;cIDhjje|JM$Uth=LYLuiW`#y8;Rr7ty^OB+tFByDR z0YBJQ>sx3aY}<(R8pv{aw%d02(vUvu%k=ovFMQPeD5M-!fA#eT#^w(qP4!=oz10~1 zNyyLef98JN&~v4~z_ZIz1t4v8p%PiY#+u=WK z-)p-?(mN&Hg_QGanP;@jxC!wYx6ppb_M*SSGuZmEe~ss;O$8#je{cmh3g!aO1et?J zRAyj@^DoelI+O$oy(4T(11EcrLX&Ao|LU9X{R*{bdOdd1`0V!w2H+Q=o(WWYefFb) zb>1|5k9vXKt>&nckuH#Q1yZY8rKaJ>m9JF4z^>$K^>b?)Mq@f?9#He_1=wS3^%h{q z(1G+4bw)}7eouHk^6(g>qa4MEAF!%bVF5x zFz+g1j}*JMoy2>5`LObX08RtYHRjWCiV(yOj`=*~dEenc>cn-4+Ts9u+UZ(Vb6t44 zn%7)AJ6x|7gg1s2zOTJWP999;;)vE5jx^PVqiU`esV`J#)izXV=SNwH&T4GLx5Jk= z;XC9D)v`0^l{DAZ;Vb6VvZj{0@PdYFO)b{yS|nqBA$(MUV@;&I{nrM7)ar6GXAmto1O1PL(Zfb` z-pCqt#`oT*F@Qb%F;2$lR7j6hgYAe;k+Gx{xg{rcywh;rd8sFO= zDUYY7E@Xk~d_7()S?xiTU(TElWpFVBiZ z%3IXwT5~i!XG6H5X;uWsPBPM~1$ow*aJWt-sw!ZENI1G?H58~^r$o#0rtqxhXw%}l z=IGLLct`!5I%pS#%jm^8m0r}9HCvjvx)x|9-CEw#7)FyOc2V+lqPewob!J7E@+0)yq@Xj7rlyn?D2`S|G8H);*AF(w{t zx&ZFnR9=fwR+XAj6IHWoqm9rIgIe2ETV4mvO3g~RRe4i$lxKsD3NCBr3)ON>s}rk2xv2?*Ats?^R$?kdDrVPK zSBE2E&Xh>SiU!VtNClh^KO(`|WbzmfEG=Qe!gx)g(lx82e&f}m=6ZVgibm6@XH-{5 z!%eELqE5^kw=)IM$1)__Sl+Z|bv5E$Ii?sRTRf_9ZmL;TRdh&rZ&Wo_Hz`bF zn5!bv99>gd7g3Gj1_PYMpJh;0<HZ6&M(!pNL3VW566&rA#9?xW)w?=O*40T zc|&;(d+9)QB$-^XV#Mp!zxT1tHM=;}XTHd5!TonN` zRgEERD6fa%K)BKHo)!bHh02T|s!C=QSc`pCeR-q?s&C-bjYsk2wM}*5SxuN(70pcv z^z3l75|fQVv}a|P)u^}Xdd#wxo)uW$s+udCdRCNbjV%%WW=GGeJ;mg+ymQXmslYg`tNY^cSr!N5K1&#aBsRwVZqi+xpsfw{C9zYf#0f^(%uWjC=# zJJUrX+S(FC)wra_A~)m9?>g)5qCYRbE4r{lnhaWiTI+QD_$r6R zp(@Fl3MyqQ(QS{?P`M_eH6XlK$z;?69;ey@{CJOA3BPYzy%HO5!c|G@vpF@mcto^1 zRbEw~LLEIV@ROTVGx$+-03oTI1@4;b?R@)+^=_x3I(@h*LzIVjgxbi0CHK zvgQi>5Rks*DXj~aN4PN0*%+?G&Z42l^b{fyhia=4_RX+jY<#HD!f-hI8UntuW2A9t5ol**2_S&` z0kKh}WpO!{TN$&`^2YK?IIlvO<(`|54AnC1$eYw`4Zqt2VGqOA0kEyRiFTapp|Wbx*@fz7tL$(Gv+a+M9J?)|#6mDH7E6ATk9 zXb7)w#@dU~I2HSBA=DS5_}+l*bw`|wxhuw5RKB4_&5DG}jnU&a6PpZuC}-8x)-=@9 z`fS;?M3+cl`14TuaEb57i()63Z=G(e#GGK46D8~r;Ov~5#ypxUJ*qbbmBfZ~8A~f> zs_tx5%osNPrpuV81w_&t7uRkK*BQNvZ&D?~u_^srVN)Fy<&k0Fl)Tg+MBv_1osO6V zAK^|;->+fb;;tjVvdnk)^A# zxCjfEk`XnQ4(4^9oH8uYe+>+m1KH)9fzaHrEo+WqFIcs(yhUqnQVW(fH#TY!+~k3=bM%LFN{nz(-yD-soDP{TbICK*k>P}6VMr63(6Ry;;V zq#PUis_@3HY&qxa%5f{py)VhSAWE=<#qt}kOfDO%R5!g0ELMB1a$TY!OUAZdW*jB0 zh=#FS!ORk}63jMzdo9~X-Qp2h12JXM+UUcwCJlE;Xg;gC39AZbM>&>BBLJKCYpge8 zGV{iQxfoL#y9{DZFW*>O-(0WfYa1j_MqO_Eq^Y=(;g_V)<8MMI;~ZfQ{GIghD#l`J zHWw>|aT{ouC80QP+h^m)^cwgheHch~hPZgt>xt12tuaI6qbY!SL**h{&iM!Oz^0i4{^kqB1d0MIz~VZ-?shaqAs>JKD#4!Y^x-jmdWFw4w*hW>M;byd+3*e*)yl1QkNA!pycQ%})3mP_*M{3I( zFqv@Vv_P-LHhV)YS5v(RGvl@l`{;%!f*qE(<=XtFdVPB|3nLNVKg`1K7p`v(>uZd@ z^$bUF`w35sbluqDBt*X*p2MJ`2eJ5$Xbv`4TBIa`qq45M*=`lQW5-rv`K;w@unr{c zGLw$Cutt+d(nP?90p}ye4z@0=Zy0!^gnpQ3RtQ$dKVzd&3JW6UZ$!q=0C{g$P=WiS zp67q@-;sTPri2>H+*Diz zxb%OU)o2yOsc&HqJm^zq;cl-M9P5lcW-`u+Raz7>E7V%F3F1|yao~Z6-f5Mft5uCU zHixpCpj8AdaQ}$BPzT1S?*A+~QScdss}k23T(v@L>C+4zwdhrY-ge8K%i{u82-_go zt^xa?be`W-5C((u1s8@oK|CPWpaR*CMhz7mfl?E&L3E}HozTDEAi+sf)%ZtFO`u^Z zQ5QwI4lSAtwSwp_F)gYF5Sw|J*0RJ4}yQKOZ@XjRE}S-oQWkbVVdbjMODN%CkzcZB2jp_${7ycVOW6vk!+_5XvOj8s4>*cL4P)4eDJL!NnVGZ<}?D! zP|_@1bx(qYTv5obL4fP-cl5=O8i`q{Q;bj-B$ZTFufI;4f*m;c*VF3&O4Nbs^r#n|Mo@5nDw9Q8y-GJS!LRtqAbZ$~KAfFE& z(-9V?;R)Dm7_}7cu?oN1JV)BGb3v3=V8SefgO;L{k8m~?|IWfxDwW)9w3&?>(+Ij` z(#(P3^T9n|0!o2>97q^r@EsGc8K}N_#POb)Abbm#DiZTj=&14M=-UL$A!X zZf$y#4VOF&|?lGKO<;?#8d7-82uP4u@&=}+dXUrPja98 zgRSQk%-ZwfjrUI&*E(OhAKO%RX6}S{w%VM2H=bSl-L{~z;LQPKoPHm!Ecb&mR$t_M z!#fp)+!SY)f1rhzZ?M&gmzJ#qeZ%yk+ZnW42KYzlV2nLzvADfKhi|YOAAg}esC*Nd zOz{OB*7O9MG`G7?&}K=(xY^dK^C^bZS-9rlT7c_xTuX4Rz_kk3xwy)4g>ltdo#}0V zKM`yHUyZd}KKg$p6vEjvT{0E@ebX>m60^w}v{}>BFnN7baMfF#X*TCTx7BII)bnSe z-FjTjoayVCG~*3;i8fxjuS=yR||2b=Nd6Z!`&`R0mI{&a>N!Ao({ zraO`NwmfdP0O3G9NKap7QKy|=TN%-!T6I%_d5hePhu8)Bop!VUx61NP3!diTL^T|V zBlNp|9`PAZd9;YTa2)V)_m)fK{T?|h^A~5x( zYW^*U90);Mj^I^)D**nxgANMdA?REw26oG05by6}A7_4rW`SzipzJzHJKZ?W?CH zef2t~n1DT3c3(YvOsDkKr+NVVZ3|#4JvR%vjG)y@@rDX*D*{2g)i*H-HN`gtg43Wy zKV?hc6S*{B+bS<4%0O{6;mfHWG|_qLI)ypNZM80VPQBY#Z>R#}8>%43hSU`uX{$vi zeQou?X29vv{cYz$aUlF{I5(8;1GslfH4$C zQ;7=xwzqsPr@!qcN*n0b{~3{(Y9h?QQw9#u=Y+qnIQhpOWy5fP0=z?6(tY)qiuijs zbbjD~8dpDB>ZopS-(as7bI0FTFPak{*zQAxp&lSO&?d%f-~j$hLP(ahR4#L-MHQLv z0hmXN1$@yenOXr=pE~u@Se(4lWqVkH2r4)lkzM z4W6p4X^7$xks4}IdGYryg8Oy_yVM8Ak1NDVFv6mSo*XW(EUFk+F=kTrr0OvfDke-G zQ!##0#hA*I%PT7it52RZrFtU%P!sQ%7Mh)zXHoqM7R^~6fAe9q@lr%F{|3~emZxXN ztBfZqd?J&ROK)G)KGpNEHmUYLHYuH2X1tLZh{_Rzd5kLr>OuQ=5hyIsNk5e5|JNfCVRWnjAS(MhkkxLy@qsp9M_sk00<=&)C^n;)7@9vlN=H zk^VNK_xckj#CLqgal;{S*1 zZqkCYGrXuEEqXpiK}>~3dV92Te0!LWTBw;)Gex&E#2PiQh_0JCE-dL5KAw*A#kTqp zP8AMocwn78F5lLs6U3%n`E<8zPrGs)W??k>FrZ!zw)iOOU$y)5PoJ4KV`F_?5U+*t zd3SL>7SjA6UN_dNu-p{quUI~J%;fxF6z_Uf;kDg{aB+T1IGR6WdYX4yx$zEu5DXfk z#re&VhN;oYHF#w*I;P&dI~-G~)lV&t))#Cj%n#NZudA6$vPc7~U@*>XK^0!U!5ckY zG~(i(ALLu7#rdbVBt4`pC~s`cAFFd{!h1&YF#22SGd^G1K{no`ZpMpREk+rb2wp70 ziW{z49I4%a1-b@H^tbC}k;yfPPlAu}_MXHi)J F{C~#-*t!4! literal 0 HcmV?d00001 diff --git a/clipper/C#/GuiDemo/GuiDemo/bin/Release/clipper_library.dll b/clipper/C#/GuiDemo/GuiDemo/bin/Release/clipper_library.dll new file mode 100755 index 0000000000000000000000000000000000000000..18887a4d585796abd63711fbe37894cda569de9f GIT binary patch literal 44544 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 OF6yrT_4EIn2L2bGx)g2z literal 0 HcmV?d00001 diff --git a/clipper/C#/clipper_library/Properties/AssemblyInfo.cs b/clipper/C#/clipper_library/Properties/AssemblyInfo.cs new file mode 100755 index 0000000..cb9c080 --- /dev/null +++ b/clipper/C#/clipper_library/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("clipper_library")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("clipper_library")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2011")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("51a6bdca-bc4e-4b2c-ae69-36e2497204f2")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/clipper/C#/clipper_library/clipper.cs b/clipper/C#/clipper_library/clipper.cs new file mode 100755 index 0000000..3d6b901 --- /dev/null +++ b/clipper/C#/clipper_library/clipper.cs @@ -0,0 +1,3695 @@ +/******************************************************************************* +* * +* Author : Angus Johnson * +* Version : 5.1.0 * +* Date : 1 February 2013 * +* Website : http://www.angusj.com * +* Copyright : Angus Johnson 2010-2013 * +* * +* License: * +* Use, modification & distribution is subject to Boost Software License Ver 1. * +* http://www.boost.org/LICENSE_1_0.txt * +* * +* Attributions: * +* The code in this library is an extension of Bala Vatti's clipping algorithm: * +* "A generic solution to polygon clipping" * +* Communications of the ACM, Vol 35, Issue 7 (July 1992) pp 56-63. * +* http://portal.acm.org/citation.cfm?id=129906 * +* * +* Computer graphics and geometric modeling: implementation and algorithms * +* By Max K. Agoston * +* Springer; 1 edition (January 4, 2005) * +* http://books.google.com/books?q=vatti+clipping+agoston * +* * +* See also: * +* "Polygon Offsetting by Computing Winding Numbers" * +* Paper no. DETC2005-85513 pp. 565-575 * +* ASME 2005 International Design Engineering Technical Conferences * +* and Computers and Information in Engineering Conference (IDETC/CIE2005) * +* September 24-28, 2005 , Long Beach, California, USA * +* http://www.me.berkeley.edu/~mcmains/pubs/DAC05OffsetPolygon.pdf * +* * +*******************************************************************************/ + +/******************************************************************************* +* * +* This is a translation of the Delphi Clipper library and the naming style * +* used has retained a Delphi flavour. * +* * +*******************************************************************************/ + +using System; +using System.Collections.Generic; +//using System.Text; //for Int128.AsString() & StringBuilder + +namespace ClipperLib +{ + + + using Polygon = List; + using Polygons = List>; + + + //------------------------------------------------------------------------------ + // PolyTree & PolyNode classes + //------------------------------------------------------------------------------ + + public class PolyTree : PolyNode + { + internal List m_AllPolys = new List(); + + ~PolyTree() + { + Clear(); + } + + public void Clear() + { + for (int i = 0; i < m_AllPolys.Count; i++) + m_AllPolys[i] = null; + m_AllPolys.Clear(); + m_Childs.Clear(); + } + + public PolyNode GetFirst() + { + if (m_Childs.Count > 0) + return m_Childs[0]; + else + return null; + } + + public int Total + { + get { return m_AllPolys.Count; } + } + + } + + public class PolyNode + { + internal PolyNode m_Parent; + internal Polygon m_polygon = new Polygon(); + internal int m_Index; + internal List m_Childs = new List(); + + private bool IsHoleNode() + { + bool result = true; + PolyNode node = m_Parent; + while (node != null) + { + result = !result; + node = node.m_Parent; + } + return result; + } + + public int ChildCount + { + get { return m_Childs.Count; } + } + + public Polygon Contour + { + get { return m_polygon; } + } + + internal void AddChild(PolyNode Child) + { + int cnt = m_Childs.Count; + m_Childs.Add(Child); + Child.m_Parent = this; + Child.m_Index = cnt; + } + + public PolyNode GetNext() + { + if (m_Childs.Count > 0) + return m_Childs[0]; + else + return GetNextSiblingUp(); + } + + internal PolyNode GetNextSiblingUp() + { + if (m_Parent == null) + return null; + else if (m_Index == m_Parent.m_Childs.Count - 1) + return m_Parent.GetNextSiblingUp(); + else + return m_Parent.m_Childs[m_Index + 1]; + } + + public List Childs + { + get { return m_Childs; } + } + + public PolyNode Parent + { + get { return m_Parent; } + } + + public bool IsHole + { + get { return IsHoleNode(); } + } + } + + + //------------------------------------------------------------------------------ + // Int128 struct (enables safe math on signed 64bit integers) + // eg Int128 val1((Int64)9223372036854775807); //ie 2^63 -1 + // Int128 val2((Int64)9223372036854775807); + // Int128 val3 = val1 * val2; + // val3.ToString => "85070591730234615847396907784232501249" (8.5e+37) + //------------------------------------------------------------------------------ + + internal struct Int128 + { + private Int64 hi; + private UInt64 lo; + + public Int128(Int64 _lo) + { + lo = (UInt64)_lo; + if (_lo < 0) hi = -1; + else hi = 0; + } + + public Int128(Int64 _hi, UInt64 _lo) + { + lo = _lo; + hi = _hi; + } + + public Int128(Int128 val) + { + hi = val.hi; + lo = val.lo; + } + + public bool IsNegative() + { + return hi < 0; + } + + public static bool operator ==(Int128 val1, Int128 val2) + { + if ((object)val1 == (object)val2) return true; + else if ((object)val1 == null || (object)val2 == null) return false; + return (val1.hi == val2.hi && val1.lo == val2.lo); + } + + public static bool operator!= (Int128 val1, Int128 val2) + { + return !(val1 == val2); + } + + public override bool Equals(System.Object obj) + { + if (obj == null || !(obj is Int128)) + return false; + Int128 i128 = (Int128)obj; + return (i128.hi == hi && i128.lo == lo); + } + + public override int GetHashCode() + { + return hi.GetHashCode() ^ lo.GetHashCode(); + } + + public static bool operator> (Int128 val1, Int128 val2) + { + if (val1.hi != val2.hi) + return val1.hi > val2.hi; + else + return val1.lo > val2.lo; + } + + public static bool operator< (Int128 val1, Int128 val2) + { + if (val1.hi != val2.hi) + return val1.hi < val2.hi; + else + return val1.lo < val2.lo; + } + + public static Int128 operator+ (Int128 lhs, Int128 rhs) + { + lhs.hi += rhs.hi; + lhs.lo += rhs.lo; + if (lhs.lo < rhs.lo) lhs.hi++; + return lhs; + } + + public static Int128 operator- (Int128 lhs, Int128 rhs) + { + return lhs + -rhs; + } + + public static Int128 operator -(Int128 val) + { + if (val.lo == 0) + return new Int128(-val.hi, 0); + else + return new Int128(~val.hi, ~val.lo +1); + } + + //nb: Constructing two new Int128 objects every time we want to multiply longs + //is slow. So, although calling the Int128Mul method doesn't look as clean, the + //code runs significantly faster than if we'd used the * operator. + + public static Int128 Int128Mul(Int64 lhs, Int64 rhs) + { + bool negate = (lhs < 0) != (rhs < 0); + if (lhs < 0) lhs = -lhs; + if (rhs < 0) rhs = -rhs; + UInt64 int1Hi = (UInt64)lhs >> 32; + UInt64 int1Lo = (UInt64)lhs & 0xFFFFFFFF; + UInt64 int2Hi = (UInt64)rhs >> 32; + UInt64 int2Lo = (UInt64)rhs & 0xFFFFFFFF; + + //nb: see comments in clipper.pas + UInt64 a = int1Hi * int2Hi; + UInt64 b = int1Lo * int2Lo; + UInt64 c = int1Hi * int2Lo + int1Lo * int2Hi; + + UInt64 lo; + Int64 hi; + hi = (Int64)(a + (c >> 32)); + + unchecked { lo = (c << 32) + b; } + if (lo < b) hi++; + Int128 result = new Int128(hi, lo); + return negate ? -result : result; + } + + public static Int128 operator /(Int128 lhs, Int128 rhs) + { + if (rhs.lo == 0 && rhs.hi == 0) + throw new ClipperException("Int128: divide by zero"); + + bool negate = (rhs.hi < 0) != (lhs.hi < 0); + if (lhs.hi < 0) lhs = -lhs; + if (rhs.hi < 0) rhs = -rhs; + + if (rhs < lhs) + { + Int128 result = new Int128(0); + Int128 cntr = new Int128(1); + while (rhs.hi >= 0 && !(rhs > lhs)) + { + rhs.hi <<= 1; + if ((Int64)rhs.lo < 0) rhs.hi++; + rhs.lo <<= 1; + + cntr.hi <<= 1; + if ((Int64)cntr.lo < 0) cntr.hi++; + cntr.lo <<= 1; + } + rhs.lo >>= 1; + if ((rhs.hi & 1) == 1) + rhs.lo |= 0x8000000000000000; + rhs.hi = (Int64)((UInt64)rhs.hi >> 1); + + cntr.lo >>= 1; + if ((cntr.hi & 1) == 1) + cntr.lo |= 0x8000000000000000; + cntr.hi >>= 1; + + while (cntr.hi != 0 || cntr.lo != 0) + { + if (!(lhs < rhs)) + { + lhs -= rhs; + result.hi |= cntr.hi; + result.lo |= cntr.lo; + } + rhs.lo >>= 1; + if ((rhs.hi & 1) == 1) + rhs.lo |= 0x8000000000000000; + rhs.hi >>= 1; + + cntr.lo >>= 1; + if ((cntr.hi & 1) == 1) + cntr.lo |= 0x8000000000000000; + cntr.hi >>= 1; + } + return negate ? -result : result; + } + else if (rhs == lhs) + return new Int128(1); + else + return new Int128(0); + } + + public double ToDouble() + { + const double shift64 = 18446744073709551616.0; //2^64 + if (hi < 0) + { + if (lo == 0) + return (double)hi * shift64; + else + return -(double)(~lo + ~hi * shift64); + } + else + return (double)(lo + hi * shift64); + } + + }; + + //------------------------------------------------------------------------------ + //------------------------------------------------------------------------------ + + public struct IntPoint + { + public Int64 X; + public Int64 Y; + + public IntPoint(Int64 X, Int64 Y) + { + this.X = X; this.Y = Y; + } + + public IntPoint(IntPoint pt) + { + this.X = pt.X; this.Y = pt.Y; + } + } + + public struct IntRect + { + public Int64 left; + public Int64 top; + public Int64 right; + public Int64 bottom; + + public IntRect(Int64 l, Int64 t, Int64 r, Int64 b) + { + this.left = l; this.top = t; + this.right = r; this.bottom = b; + } + } + + public enum ClipType { ctIntersection, ctUnion, ctDifference, ctXor }; + public enum PolyType { ptSubject, ptClip }; + //By far the most widely used winding rules for polygon filling are + //EvenOdd & NonZero (GDI, GDI+, XLib, OpenGL, Cairo, AGG, Quartz, SVG, Gr32) + //Others rules include Positive, Negative and ABS_GTR_EQ_TWO (only in OpenGL) + //see http://glprogramming.com/red/chapter11.html + public enum PolyFillType { pftEvenOdd, pftNonZero, pftPositive, pftNegative }; + public enum JoinType { jtSquare, jtRound, jtMiter }; + + + [Flags] + internal enum EdgeSide { esLeft = 1, esRight = 2 }; + [Flags] + internal enum Protects { ipNone = 0, ipLeft = 1, ipRight = 2, ipBoth = 3 }; + internal enum Direction { dRightToLeft, dLeftToRight }; + + internal class TEdge { + public Int64 xbot; + public Int64 ybot; + public Int64 xcurr; + public Int64 ycurr; + public Int64 xtop; + public Int64 ytop; + public double dx; + public Int64 deltaX; + public Int64 deltaY; + public Int64 tmpX; + public PolyType polyType; + public EdgeSide side; + public int windDelta; //1 or -1 depending on winding direction + public int windCnt; + public int windCnt2; //winding count of the opposite polytype + public int outIdx; + public TEdge next; + public TEdge prev; + public TEdge nextInLML; + public TEdge nextInAEL; + public TEdge prevInAEL; + public TEdge nextInSEL; + public TEdge prevInSEL; + }; + + internal class IntersectNode + { + public TEdge edge1; + public TEdge edge2; + public IntPoint pt; + public IntersectNode next; + }; + + internal class LocalMinima + { + public Int64 Y; + public TEdge leftBound; + public TEdge rightBound; + public LocalMinima next; + }; + + internal class Scanbeam + { + public Int64 Y; + public Scanbeam next; + }; + + internal class OutRec + { + public int idx; + public bool isHole; + public OutRec FirstLeft; //see comments in clipper.pas + public OutPt pts; + public OutPt bottomPt; + public PolyNode polyNode; + }; + + internal class OutPt + { + public int idx; + public IntPoint pt; + public OutPt next; + public OutPt prev; + }; + + internal class JoinRec + { + public IntPoint pt1a; + public IntPoint pt1b; + public int poly1Idx; + public IntPoint pt2a; + public IntPoint pt2b; + public int poly2Idx; + }; + + internal class HorzJoinRec + { + public TEdge edge; + public int savedIdx; + }; + + public class ClipperBase + { + protected const double horizontal = -3.4E+38; + internal const Int64 loRange = 0x3FFFFFFF; + internal const Int64 hiRange = 0x3FFFFFFFFFFFFFFFL; + + internal LocalMinima m_MinimaList; + internal LocalMinima m_CurrentLM; + internal List> m_edges = new List>(); + internal bool m_UseFullRange; + + //------------------------------------------------------------------------------ + + protected static bool PointsEqual(IntPoint pt1, IntPoint pt2) + { + return ( pt1.X == pt2.X && pt1.Y == pt2.Y ); + } + //------------------------------------------------------------------------------ + + internal bool PointIsVertex(IntPoint pt, OutPt pp) + { + OutPt pp2 = pp; + do + { + if (PointsEqual(pp2.pt, pt)) return true; + pp2 = pp2.next; + } + while (pp2 != pp); + return false; + } + //------------------------------------------------------------------------------ + + internal bool PointInPolygon(IntPoint pt, OutPt pp, bool UseFulllongRange) + { + OutPt pp2 = pp; + bool result = false; + if (UseFulllongRange) + { + do + { + if ((((pp2.pt.Y <= pt.Y) && (pt.Y < pp2.prev.pt.Y)) || + ((pp2.prev.pt.Y <= pt.Y) && (pt.Y < pp2.pt.Y))) && + new Int128(pt.X - pp2.pt.X) < + Int128.Int128Mul(pp2.prev.pt.X - pp2.pt.X, pt.Y - pp2.pt.Y) / + new Int128(pp2.prev.pt.Y - pp2.pt.Y)) + result = !result; + pp2 = pp2.next; + } + while (pp2 != pp); + } + else + { + do + { + if ((((pp2.pt.Y <= pt.Y) && (pt.Y < pp2.prev.pt.Y)) || + ((pp2.prev.pt.Y <= pt.Y) && (pt.Y < pp2.pt.Y))) && + (pt.X - pp2.pt.X < (pp2.prev.pt.X - pp2.pt.X) * (pt.Y - pp2.pt.Y) / + (pp2.prev.pt.Y - pp2.pt.Y))) result = !result; + pp2 = pp2.next; + } + while (pp2 != pp); + } + return result; + } + //------------------------------------------------------------------------------ + + internal bool SlopesEqual(TEdge e1, TEdge e2, bool UseFullRange) + { + if (UseFullRange) + return Int128.Int128Mul(e1.deltaY, e2.deltaX) == + Int128.Int128Mul(e1.deltaX, e2.deltaY); + else return (Int64)(e1.deltaY) * (e2.deltaX) == + (Int64)(e1.deltaX) * (e2.deltaY); + } + //------------------------------------------------------------------------------ + + protected bool SlopesEqual(IntPoint pt1, IntPoint pt2, + IntPoint pt3, bool UseFullRange) + { + if (UseFullRange) + return Int128.Int128Mul(pt1.Y - pt2.Y, pt2.X - pt3.X) == + Int128.Int128Mul(pt1.X - pt2.X, pt2.Y - pt3.Y); + else return + (Int64)(pt1.Y - pt2.Y) * (pt2.X - pt3.X) - (Int64)(pt1.X - pt2.X) * (pt2.Y - pt3.Y) == 0; + } + //------------------------------------------------------------------------------ + + protected bool SlopesEqual(IntPoint pt1, IntPoint pt2, + IntPoint pt3, IntPoint pt4, bool UseFullRange) + { + if (UseFullRange) + return Int128.Int128Mul(pt1.Y - pt2.Y, pt3.X - pt4.X) == + Int128.Int128Mul(pt1.X - pt2.X, pt3.Y - pt4.Y); + else return + (Int64)(pt1.Y - pt2.Y) * (pt3.X - pt4.X) - (Int64)(pt1.X - pt2.X) * (pt3.Y - pt4.Y) == 0; + } + //------------------------------------------------------------------------------ + + internal ClipperBase() //constructor (nb: no external instantiation) + { + m_MinimaList = null; + m_CurrentLM = null; + m_UseFullRange = false; + } + //------------------------------------------------------------------------------ + + //destructor - commented out since I gather this impedes the GC + //~ClipperBase() + //{ + // Clear(); + //} + //------------------------------------------------------------------------------ + + public virtual void Clear() + { + DisposeLocalMinimaList(); + for (int i = 0; i < m_edges.Count; ++i) + { + for (int j = 0; j < m_edges[i].Count; ++j) m_edges[i][j] = null; + m_edges[i].Clear(); + } + m_edges.Clear(); + m_UseFullRange = false; + } + //------------------------------------------------------------------------------ + + private void DisposeLocalMinimaList() + { + while( m_MinimaList != null ) + { + LocalMinima tmpLm = m_MinimaList.next; + m_MinimaList = null; + m_MinimaList = tmpLm; + } + m_CurrentLM = null; + } + //------------------------------------------------------------------------------ + + public bool AddPolygons(Polygons ppg, PolyType polyType) + { + bool result = false; + for (int i = 0; i < ppg.Count; ++i) + if (AddPolygon(ppg[i], polyType)) result = true; + return result; + } + //------------------------------------------------------------------------------ + + public bool AddPolygon(Polygon pg, PolyType polyType) + { + int len = pg.Count; + if (len < 3) return false; + Polygon p = new Polygon(len); + p.Add(new IntPoint(pg[0].X, pg[0].Y)); + int j = 0; + for (int i = 1; i < len; ++i) + { + + Int64 maxVal; + if (m_UseFullRange) maxVal = hiRange; else maxVal = loRange; + if (Math.Abs(pg[i].X) > maxVal || Math.Abs(pg[i].Y) > maxVal) + { + if (Math.Abs(pg[i].X) > hiRange || Math.Abs(pg[i].Y) > hiRange) + throw new ClipperException("Coordinate exceeds range bounds"); + maxVal = hiRange; + m_UseFullRange = true; + } + + if (PointsEqual(p[j], pg[i])) continue; + else if (j > 0 && SlopesEqual(p[j-1], p[j], pg[i], m_UseFullRange)) + { + if (PointsEqual(p[j-1], pg[i])) j--; + } else j++; + if (j < p.Count) + p[j] = pg[i]; else + p.Add(new IntPoint(pg[i].X, pg[i].Y)); + } + if (j < 2) return false; + + len = j+1; + while (len > 2) + { + //nb: test for point equality before testing slopes ... + if (PointsEqual(p[j], p[0])) j--; + else if (PointsEqual(p[0], p[1]) || SlopesEqual(p[j], p[0], p[1], m_UseFullRange)) + p[0] = p[j--]; + else if (SlopesEqual(p[j - 1], p[j], p[0], m_UseFullRange)) j--; + else if (SlopesEqual(p[0], p[1], p[2], m_UseFullRange)) + { + for (int i = 2; i <= j; ++i) p[i - 1] = p[i]; + j--; + } + else break; + len--; + } + if (len < 3) return false; + + //create a new edge array ... + List edges = new List(len); + for (int i = 0; i < len; i++) edges.Add(new TEdge()); + m_edges.Add(edges); + + //convert vertices to a double-linked-list of edges and initialize ... + edges[0].xcurr = p[0].X; + edges[0].ycurr = p[0].Y; + InitEdge(edges[len-1], edges[0], edges[len-2], p[len-1], polyType); + for (int i = len-2; i > 0; --i) + InitEdge(edges[i], edges[i+1], edges[i-1], p[i], polyType); + InitEdge(edges[0], edges[1], edges[len-1], p[0], polyType); + + //reset xcurr & ycurr and find 'eHighest' (given the Y axis coordinates + //increase downward so the 'highest' edge will have the smallest ytop) ... + TEdge e = edges[0]; + TEdge eHighest = e; + do + { + e.xcurr = e.xbot; + e.ycurr = e.ybot; + if (e.ytop < eHighest.ytop) eHighest = e; + e = e.next; + } + while ( e != edges[0]); + + //make sure eHighest is positioned so the following loop works safely ... + if (eHighest.windDelta > 0) eHighest = eHighest.next; + if (eHighest.dx == horizontal) eHighest = eHighest.next; + + //finally insert each local minima ... + e = eHighest; + do { + e = AddBoundsToLML(e); + } + while( e != eHighest ); + return true; + } + //------------------------------------------------------------------------------ + + private void InitEdge(TEdge e, TEdge eNext, + TEdge ePrev, IntPoint pt, PolyType polyType) + { + e.next = eNext; + e.prev = ePrev; + e.xcurr = pt.X; + e.ycurr = pt.Y; + if (e.ycurr >= e.next.ycurr) + { + e.xbot = e.xcurr; + e.ybot = e.ycurr; + e.xtop = e.next.xcurr; + e.ytop = e.next.ycurr; + e.windDelta = 1; + } else + { + e.xtop = e.xcurr; + e.ytop = e.ycurr; + e.xbot = e.next.xcurr; + e.ybot = e.next.ycurr; + e.windDelta = -1; + } + SetDx(e); + e.polyType = polyType; + e.outIdx = -1; + } + //------------------------------------------------------------------------------ + + private void SetDx(TEdge e) + { + e.deltaX = (e.xtop - e.xbot); + e.deltaY = (e.ytop - e.ybot); + if (e.deltaY == 0) e.dx = horizontal; + else e.dx = (double)(e.deltaX) / (e.deltaY); + } + //--------------------------------------------------------------------------- + + TEdge AddBoundsToLML(TEdge e) + { + //Starting at the top of one bound we progress to the bottom where there's + //a local minima. We then go to the top of the next bound. These two bounds + //form the left and right (or right and left) bounds of the local minima. + e.nextInLML = null; + e = e.next; + for (;;) + { + if ( e.dx == horizontal ) + { + //nb: proceed through horizontals when approaching from their right, + // but break on horizontal minima if approaching from their left. + // This ensures 'local minima' are always on the left of horizontals. + if (e.next.ytop < e.ytop && e.next.xbot > e.prev.xbot) break; + if (e.xtop != e.prev.xbot) SwapX(e); + e.nextInLML = e.prev; + } + else if (e.ycurr == e.prev.ycurr) break; + else e.nextInLML = e.prev; + e = e.next; + } + + //e and e.prev are now at a local minima ... + LocalMinima newLm = new LocalMinima(); + newLm.next = null; + newLm.Y = e.prev.ybot; + + if ( e.dx == horizontal ) //horizontal edges never start a left bound + { + if (e.xbot != e.prev.xbot) SwapX(e); + newLm.leftBound = e.prev; + newLm.rightBound = e; + } else if (e.dx < e.prev.dx) + { + newLm.leftBound = e.prev; + newLm.rightBound = e; + } else + { + newLm.leftBound = e; + newLm.rightBound = e.prev; + } + newLm.leftBound.side = EdgeSide.esLeft; + newLm.rightBound.side = EdgeSide.esRight; + InsertLocalMinima( newLm ); + + for (;;) + { + if ( e.next.ytop == e.ytop && e.next.dx != horizontal ) break; + e.nextInLML = e.next; + e = e.next; + if ( e.dx == horizontal && e.xbot != e.prev.xtop) SwapX(e); + } + return e.next; + } + //------------------------------------------------------------------------------ + + private void InsertLocalMinima(LocalMinima newLm) + { + if( m_MinimaList == null ) + { + m_MinimaList = newLm; + } + else if( newLm.Y >= m_MinimaList.Y ) + { + newLm.next = m_MinimaList; + m_MinimaList = newLm; + } else + { + LocalMinima tmpLm = m_MinimaList; + while( tmpLm.next != null && ( newLm.Y < tmpLm.next.Y ) ) + tmpLm = tmpLm.next; + newLm.next = tmpLm.next; + tmpLm.next = newLm; + } + } + //------------------------------------------------------------------------------ + + protected void PopLocalMinima() + { + if (m_CurrentLM == null) return; + m_CurrentLM = m_CurrentLM.next; + } + //------------------------------------------------------------------------------ + + private void SwapX(TEdge e) + { + //swap horizontal edges' top and bottom x's so they follow the natural + //progression of the bounds - ie so their xbots will align with the + //adjoining lower edge. [Helpful in the ProcessHorizontal() method.] + e.xcurr = e.xtop; + e.xtop = e.xbot; + e.xbot = e.xcurr; + } + //------------------------------------------------------------------------------ + + protected virtual void Reset() + { + m_CurrentLM = m_MinimaList; + + //reset all edges ... + LocalMinima lm = m_MinimaList; + while (lm != null) + { + TEdge e = lm.leftBound; + while (e != null) + { + e.xcurr = e.xbot; + e.ycurr = e.ybot; + e.side = EdgeSide.esLeft; + e.outIdx = -1; + e = e.nextInLML; + } + e = lm.rightBound; + while (e != null) + { + e.xcurr = e.xbot; + e.ycurr = e.ybot; + e.side = EdgeSide.esRight; + e.outIdx = -1; + e = e.nextInLML; + } + lm = lm.next; + } + return; + } + //------------------------------------------------------------------------------ + + public IntRect GetBounds() + { + IntRect result = new IntRect(); + LocalMinima lm = m_MinimaList; + if (lm == null) return result; + result.left = lm.leftBound.xbot; + result.top = lm.leftBound.ybot; + result.right = lm.leftBound.xbot; + result.bottom = lm.leftBound.ybot; + while (lm != null) + { + if (lm.leftBound.ybot > result.bottom) + result.bottom = lm.leftBound.ybot; + TEdge e = lm.leftBound; + for (; ; ) + { + TEdge bottomE = e; + while (e.nextInLML != null) + { + if (e.xbot < result.left) result.left = e.xbot; + if (e.xbot > result.right) result.right = e.xbot; + e = e.nextInLML; + } + if (e.xbot < result.left) result.left = e.xbot; + if (e.xbot > result.right) result.right = e.xbot; + if (e.xtop < result.left) result.left = e.xtop; + if (e.xtop > result.right) result.right = e.xtop; + if (e.ytop < result.top) result.top = e.ytop; + + if (bottomE == lm.leftBound) e = lm.rightBound; + else break; + } + lm = lm.next; + } + return result; + } + + } //ClipperBase + + public class Clipper : ClipperBase + { + private List m_PolyOuts; + private ClipType m_ClipType; + private Scanbeam m_Scanbeam; + private TEdge m_ActiveEdges; + private TEdge m_SortedEdges; + private IntersectNode m_IntersectNodes; + private bool m_ExecuteLocked; + private PolyFillType m_ClipFillType; + private PolyFillType m_SubjFillType; + private List m_Joins; + private List m_HorizJoins; + private bool m_ReverseOutput; + private bool m_UsingPolyTree; + + public Clipper() + { + m_Scanbeam = null; + m_ActiveEdges = null; + m_SortedEdges = null; + m_IntersectNodes = null; + m_ExecuteLocked = false; + m_UsingPolyTree = false; + m_PolyOuts = new List(); + m_Joins = new List(); + m_HorizJoins = new List(); + m_ReverseOutput = false; + } + //------------------------------------------------------------------------------ + + //destructor - commented out since I gather this impedes the GC + //~Clipper() //destructor + //{ + // Clear(); + // DisposeScanbeamList(); + //} + //------------------------------------------------------------------------------ + + public override void Clear() + { + if (m_edges.Count == 0) return; //avoids problems with ClipperBase destructor + DisposeAllPolyPts(); + base.Clear(); + } + //------------------------------------------------------------------------------ + + void DisposeScanbeamList() + { + while ( m_Scanbeam != null ) { + Scanbeam sb2 = m_Scanbeam.next; + m_Scanbeam = null; + m_Scanbeam = sb2; + } + } + //------------------------------------------------------------------------------ + + protected override void Reset() + { + base.Reset(); + m_Scanbeam = null; + m_ActiveEdges = null; + m_SortedEdges = null; + DisposeAllPolyPts(); + LocalMinima lm = m_MinimaList; + while (lm != null) + { + InsertScanbeam(lm.Y); + InsertScanbeam(lm.leftBound.ytop); + lm = lm.next; + } + } + //------------------------------------------------------------------------------ + + public bool ReverseSolution + { + get { return m_ReverseOutput; } + set { m_ReverseOutput = value; } + } + //------------------------------------------------------------------------------ + + private void InsertScanbeam(Int64 Y) + { + if( m_Scanbeam == null ) + { + m_Scanbeam = new Scanbeam(); + m_Scanbeam.next = null; + m_Scanbeam.Y = Y; + } + else if( Y > m_Scanbeam.Y ) + { + Scanbeam newSb = new Scanbeam(); + newSb.Y = Y; + newSb.next = m_Scanbeam; + m_Scanbeam = newSb; + } else + { + Scanbeam sb2 = m_Scanbeam; + while( sb2.next != null && ( Y <= sb2.next.Y ) ) sb2 = sb2.next; + if( Y == sb2.Y ) return; //ie ignores duplicates + Scanbeam newSb = new Scanbeam(); + newSb.Y = Y; + newSb.next = sb2.next; + sb2.next = newSb; + } + } + //------------------------------------------------------------------------------ + + public bool Execute(ClipType clipType, Polygons solution, + PolyFillType subjFillType, PolyFillType clipFillType) + { + if (m_ExecuteLocked) return false; + m_ExecuteLocked = true; + solution.Clear(); + m_SubjFillType = subjFillType; + m_ClipFillType = clipFillType; + m_ClipType = clipType; + m_UsingPolyTree = false; + bool succeeded = ExecuteInternal(); + //build the return polygons ... + if (succeeded) BuildResult(solution); + m_ExecuteLocked = false; + return succeeded; + } + //------------------------------------------------------------------------------ + + public bool Execute(ClipType clipType, PolyTree polytree, + PolyFillType subjFillType, PolyFillType clipFillType) + { + if (m_ExecuteLocked) return false; + m_ExecuteLocked = true; + m_SubjFillType = subjFillType; + m_ClipFillType = clipFillType; + m_ClipType = clipType; + m_UsingPolyTree = true; + bool succeeded = ExecuteInternal(); + //build the return polygons ... + if (succeeded) BuildResult2(polytree); + m_ExecuteLocked = false; + return succeeded; + } + //------------------------------------------------------------------------------ + + public bool Execute(ClipType clipType, Polygons solution) + { + return Execute(clipType, solution, + PolyFillType.pftEvenOdd, PolyFillType.pftEvenOdd); + } + //------------------------------------------------------------------------------ + + public bool Execute(ClipType clipType, PolyTree polytree) + { + return Execute(clipType, polytree, + PolyFillType.pftEvenOdd, PolyFillType.pftEvenOdd); + } + //------------------------------------------------------------------------------ + + internal void FixHoleLinkage(OutRec outRec) + { + //skip if an outermost polygon or + //already already points to the correct FirstLeft ... + if (outRec.FirstLeft == null || + (outRec.isHole != outRec.FirstLeft.isHole && + outRec.FirstLeft.pts != null)) return; + + OutRec orfl = outRec.FirstLeft; + while (orfl != null && ((orfl.isHole == outRec.isHole) || orfl.pts == null)) + orfl = orfl.FirstLeft; + outRec.FirstLeft = orfl; + } + //------------------------------------------------------------------------------ + + private bool ExecuteInternal() + { + bool succeeded; + try + { + Reset(); + if (m_CurrentLM == null) return true; + Int64 botY = PopScanbeam(); + do + { + InsertLocalMinimaIntoAEL(botY); + m_HorizJoins.Clear(); + ProcessHorizontals(); + Int64 topY = PopScanbeam(); + succeeded = ProcessIntersections(botY, topY); + if (!succeeded) break; + ProcessEdgesAtTopOfScanbeam(topY); + botY = topY; + } while (m_Scanbeam != null); + } + catch { succeeded = false; } + + if (succeeded) + { + //tidy up output polygons and fix orientations where necessary ... + for (int i = 0; i < m_PolyOuts.Count; i++) + { + OutRec outRec = m_PolyOuts[i]; + if (outRec.pts == null) continue; + FixupOutPolygon(outRec); + if (outRec.pts == null) continue; + if ((outRec.isHole ^ m_ReverseOutput) == (Area(outRec, m_UseFullRange) > 0)) + ReversePolyPtLinks(outRec.pts); + } + JoinCommonEdges(); + } + m_Joins.Clear(); + m_HorizJoins.Clear(); + return succeeded; + } + //------------------------------------------------------------------------------ + + private Int64 PopScanbeam() + { + Int64 Y = m_Scanbeam.Y; + Scanbeam sb2 = m_Scanbeam; + m_Scanbeam = m_Scanbeam.next; + sb2 = null; + return Y; + } + //------------------------------------------------------------------------------ + + private void DisposeAllPolyPts(){ + for (int i = 0; i < m_PolyOuts.Count; ++i) DisposeOutRec(i); + m_PolyOuts.Clear(); + } + //------------------------------------------------------------------------------ + + void DisposeOutRec(int index) + { + OutRec outRec = m_PolyOuts[index]; + if (outRec.pts != null) DisposeOutPts(outRec.pts); + outRec = null; + m_PolyOuts[index] = null; + } + //------------------------------------------------------------------------------ + + private void DisposeOutPts(OutPt pp) + { + if (pp == null) return; + OutPt tmpPp = null; + pp.prev.next = null; + while (pp != null) + { + tmpPp = pp; + pp = pp.next; + tmpPp = null; + } + } + //------------------------------------------------------------------------------ + + private void AddJoin(TEdge e1, TEdge e2, int e1OutIdx, int e2OutIdx) + { + JoinRec jr = new JoinRec(); + if (e1OutIdx >= 0) + jr.poly1Idx = e1OutIdx; else + jr.poly1Idx = e1.outIdx; + jr.pt1a = new IntPoint(e1.xcurr, e1.ycurr); + jr.pt1b = new IntPoint(e1.xtop, e1.ytop); + if (e2OutIdx >= 0) + jr.poly2Idx = e2OutIdx; else + jr.poly2Idx = e2.outIdx; + jr.pt2a = new IntPoint(e2.xcurr, e2.ycurr); + jr.pt2b = new IntPoint(e2.xtop, e2.ytop); + m_Joins.Add(jr); + } + //------------------------------------------------------------------------------ + + private void AddHorzJoin(TEdge e, int idx) + { + HorzJoinRec hj = new HorzJoinRec(); + hj.edge = e; + hj.savedIdx = idx; + m_HorizJoins.Add(hj); + } + //------------------------------------------------------------------------------ + + private void InsertLocalMinimaIntoAEL(Int64 botY) + { + while( m_CurrentLM != null && ( m_CurrentLM.Y == botY ) ) + { + TEdge lb = m_CurrentLM.leftBound; + TEdge rb = m_CurrentLM.rightBound; + + InsertEdgeIntoAEL( lb ); + InsertScanbeam( lb.ytop ); + InsertEdgeIntoAEL( rb ); + + if (IsEvenOddFillType(lb)) + { + lb.windDelta = 1; + rb.windDelta = 1; + } + else + { + rb.windDelta = -lb.windDelta; + } + SetWindingCount(lb); + rb.windCnt = lb.windCnt; + rb.windCnt2 = lb.windCnt2; + + if( rb.dx == horizontal ) + { + //nb: only rightbounds can have a horizontal bottom edge + AddEdgeToSEL( rb ); + InsertScanbeam( rb.nextInLML.ytop ); + } + else + InsertScanbeam( rb.ytop ); + + if( IsContributing(lb) ) + AddLocalMinPoly(lb, rb, new IntPoint(lb.xcurr, m_CurrentLM.Y)); + + //if any output polygons share an edge, they'll need joining later ... + if (rb.outIdx >= 0 && rb.dx == horizontal) + { + for (int i = 0; i < m_HorizJoins.Count; i++) + { + IntPoint pt = new IntPoint(), pt2 = new IntPoint(); //used as dummy params. + HorzJoinRec hj = m_HorizJoins[i]; + //if horizontals rb and hj.edge overlap, flag for joining later ... + if (GetOverlapSegment(new IntPoint(hj.edge.xbot, hj.edge.ybot), + new IntPoint(hj.edge.xtop, hj.edge.ytop), + new IntPoint(rb.xbot, rb.ybot), + new IntPoint(rb.xtop, rb.ytop), + ref pt, ref pt2)) + AddJoin(hj.edge, rb, hj.savedIdx, -1); + } + } + + + if( lb.nextInAEL != rb ) + { + if (rb.outIdx >= 0 && rb.prevInAEL.outIdx >= 0 && + SlopesEqual(rb.prevInAEL, rb, m_UseFullRange)) + AddJoin(rb, rb.prevInAEL, -1, -1); + + TEdge e = lb.nextInAEL; + IntPoint pt = new IntPoint(lb.xcurr, lb.ycurr); + while( e != rb ) + { + if(e == null) + throw new ClipperException("InsertLocalMinimaIntoAEL: missing rightbound!"); + //nb: For calculating winding counts etc, IntersectEdges() assumes + //that param1 will be to the right of param2 ABOVE the intersection ... + IntersectEdges( rb , e , pt , Protects.ipNone); //order important here + e = e.nextInAEL; + } + } + PopLocalMinima(); + } + } + //------------------------------------------------------------------------------ + + private void InsertEdgeIntoAEL(TEdge edge) + { + edge.prevInAEL = null; + edge.nextInAEL = null; + if (m_ActiveEdges == null) + { + m_ActiveEdges = edge; + } + else if( E2InsertsBeforeE1(m_ActiveEdges, edge) ) + { + edge.nextInAEL = m_ActiveEdges; + m_ActiveEdges.prevInAEL = edge; + m_ActiveEdges = edge; + } else + { + TEdge e = m_ActiveEdges; + while (e.nextInAEL != null && !E2InsertsBeforeE1(e.nextInAEL, edge)) + e = e.nextInAEL; + edge.nextInAEL = e.nextInAEL; + if (e.nextInAEL != null) e.nextInAEL.prevInAEL = edge; + edge.prevInAEL = e; + e.nextInAEL = edge; + } + } + //---------------------------------------------------------------------- + + private bool E2InsertsBeforeE1(TEdge e1, TEdge e2) + { + return e2.xcurr == e1.xcurr? e2.dx > e1.dx : e2.xcurr < e1.xcurr; + } + //------------------------------------------------------------------------------ + + private bool IsEvenOddFillType(TEdge edge) + { + if (edge.polyType == PolyType.ptSubject) + return m_SubjFillType == PolyFillType.pftEvenOdd; + else + return m_ClipFillType == PolyFillType.pftEvenOdd; + } + //------------------------------------------------------------------------------ + + private bool IsEvenOddAltFillType(TEdge edge) + { + if (edge.polyType == PolyType.ptSubject) + return m_ClipFillType == PolyFillType.pftEvenOdd; + else + return m_SubjFillType == PolyFillType.pftEvenOdd; + } + //------------------------------------------------------------------------------ + + private bool IsContributing(TEdge edge) + { + PolyFillType pft, pft2; + if (edge.polyType == PolyType.ptSubject) + { + pft = m_SubjFillType; + pft2 = m_ClipFillType; + } + else + { + pft = m_ClipFillType; + pft2 = m_SubjFillType; + } + + switch (pft) + { + case PolyFillType.pftEvenOdd: + case PolyFillType.pftNonZero: + if (Math.Abs(edge.windCnt) != 1) return false; + break; + case PolyFillType.pftPositive: + if (edge.windCnt != 1) return false; + break; + default: //PolyFillType.pftNegative + if (edge.windCnt != -1) return false; + break; + } + + switch (m_ClipType) + { + case ClipType.ctIntersection: + switch (pft2) + { + case PolyFillType.pftEvenOdd: + case PolyFillType.pftNonZero: + return (edge.windCnt2 != 0); + case PolyFillType.pftPositive: + return (edge.windCnt2 > 0); + default: + return (edge.windCnt2 < 0); + } + case ClipType.ctUnion: + switch (pft2) + { + case PolyFillType.pftEvenOdd: + case PolyFillType.pftNonZero: + return (edge.windCnt2 == 0); + case PolyFillType.pftPositive: + return (edge.windCnt2 <= 0); + default: + return (edge.windCnt2 >= 0); + } + case ClipType.ctDifference: + if (edge.polyType == PolyType.ptSubject) + switch (pft2) + { + case PolyFillType.pftEvenOdd: + case PolyFillType.pftNonZero: + return (edge.windCnt2 == 0); + case PolyFillType.pftPositive: + return (edge.windCnt2 <= 0); + default: + return (edge.windCnt2 >= 0); + } + else + switch (pft2) + { + case PolyFillType.pftEvenOdd: + case PolyFillType.pftNonZero: + return (edge.windCnt2 != 0); + case PolyFillType.pftPositive: + return (edge.windCnt2 > 0); + default: + return (edge.windCnt2 < 0); + } + } + return true; + } + //------------------------------------------------------------------------------ + + private void SetWindingCount(TEdge edge) + { + TEdge e = edge.prevInAEL; + //find the edge of the same polytype that immediately preceeds 'edge' in AEL + while (e != null && e.polyType != edge.polyType) + e = e.prevInAEL; + if (e == null) + { + edge.windCnt = edge.windDelta; + edge.windCnt2 = 0; + e = m_ActiveEdges; //ie get ready to calc windCnt2 + } + else if (IsEvenOddFillType(edge)) + { + //even-odd filling ... + edge.windCnt = 1; + edge.windCnt2 = e.windCnt2; + e = e.nextInAEL; //ie get ready to calc windCnt2 + } + else + { + //nonZero filling ... + if (e.windCnt * e.windDelta < 0) + { + if (Math.Abs(e.windCnt) > 1) + { + if (e.windDelta * edge.windDelta < 0) + edge.windCnt = e.windCnt; + else + edge.windCnt = e.windCnt + edge.windDelta; + } + else + edge.windCnt = e.windCnt + e.windDelta + edge.windDelta; + } + else + { + if (Math.Abs(e.windCnt) > 1 && e.windDelta * edge.windDelta < 0) + edge.windCnt = e.windCnt; + else if (e.windCnt + edge.windDelta == 0) + edge.windCnt = e.windCnt; + else + edge.windCnt = e.windCnt + edge.windDelta; + } + edge.windCnt2 = e.windCnt2; + e = e.nextInAEL; //ie get ready to calc windCnt2 + } + + //update windCnt2 ... + if (IsEvenOddAltFillType(edge)) + { + //even-odd filling ... + while (e != edge) + { + edge.windCnt2 = (edge.windCnt2 == 0) ? 1 : 0; + e = e.nextInAEL; + } + } + else + { + //nonZero filling ... + while (e != edge) + { + edge.windCnt2 += e.windDelta; + e = e.nextInAEL; + } + } + } + //------------------------------------------------------------------------------ + + private void AddEdgeToSEL(TEdge edge) + { + //SEL pointers in PEdge are reused to build a list of horizontal edges. + //However, we don't need to worry about order with horizontal edge processing. + if (m_SortedEdges == null) + { + m_SortedEdges = edge; + edge.prevInSEL = null; + edge.nextInSEL = null; + } + else + { + edge.nextInSEL = m_SortedEdges; + edge.prevInSEL = null; + m_SortedEdges.prevInSEL = edge; + m_SortedEdges = edge; + } + } + //------------------------------------------------------------------------------ + + private void CopyAELToSEL() + { + TEdge e = m_ActiveEdges; + m_SortedEdges = e; + while (e != null) + { + e.prevInSEL = e.prevInAEL; + e.nextInSEL = e.nextInAEL; + e = e.nextInAEL; + } + } + //------------------------------------------------------------------------------ + + private void SwapPositionsInAEL(TEdge edge1, TEdge edge2) + { + if (edge1.nextInAEL == edge2) + { + TEdge next = edge2.nextInAEL; + if (next != null) + next.prevInAEL = edge1; + TEdge prev = edge1.prevInAEL; + if (prev != null) + prev.nextInAEL = edge2; + edge2.prevInAEL = prev; + edge2.nextInAEL = edge1; + edge1.prevInAEL = edge2; + edge1.nextInAEL = next; + } + else if (edge2.nextInAEL == edge1) + { + TEdge next = edge1.nextInAEL; + if (next != null) + next.prevInAEL = edge2; + TEdge prev = edge2.prevInAEL; + if (prev != null) + prev.nextInAEL = edge1; + edge1.prevInAEL = prev; + edge1.nextInAEL = edge2; + edge2.prevInAEL = edge1; + edge2.nextInAEL = next; + } + else + { + TEdge next = edge1.nextInAEL; + TEdge prev = edge1.prevInAEL; + edge1.nextInAEL = edge2.nextInAEL; + if (edge1.nextInAEL != null) + edge1.nextInAEL.prevInAEL = edge1; + edge1.prevInAEL = edge2.prevInAEL; + if (edge1.prevInAEL != null) + edge1.prevInAEL.nextInAEL = edge1; + edge2.nextInAEL = next; + if (edge2.nextInAEL != null) + edge2.nextInAEL.prevInAEL = edge2; + edge2.prevInAEL = prev; + if (edge2.prevInAEL != null) + edge2.prevInAEL.nextInAEL = edge2; + } + + if (edge1.prevInAEL == null) + m_ActiveEdges = edge1; + else if (edge2.prevInAEL == null) + m_ActiveEdges = edge2; + } + //------------------------------------------------------------------------------ + + private void SwapPositionsInSEL(TEdge edge1, TEdge edge2) + { + if (edge1.nextInSEL == null && edge1.prevInSEL == null) + return; + if (edge2.nextInSEL == null && edge2.prevInSEL == null) + return; + + if (edge1.nextInSEL == edge2) + { + TEdge next = edge2.nextInSEL; + if (next != null) + next.prevInSEL = edge1; + TEdge prev = edge1.prevInSEL; + if (prev != null) + prev.nextInSEL = edge2; + edge2.prevInSEL = prev; + edge2.nextInSEL = edge1; + edge1.prevInSEL = edge2; + edge1.nextInSEL = next; + } + else if (edge2.nextInSEL == edge1) + { + TEdge next = edge1.nextInSEL; + if (next != null) + next.prevInSEL = edge2; + TEdge prev = edge2.prevInSEL; + if (prev != null) + prev.nextInSEL = edge1; + edge1.prevInSEL = prev; + edge1.nextInSEL = edge2; + edge2.prevInSEL = edge1; + edge2.nextInSEL = next; + } + else + { + TEdge next = edge1.nextInSEL; + TEdge prev = edge1.prevInSEL; + edge1.nextInSEL = edge2.nextInSEL; + if (edge1.nextInSEL != null) + edge1.nextInSEL.prevInSEL = edge1; + edge1.prevInSEL = edge2.prevInSEL; + if (edge1.prevInSEL != null) + edge1.prevInSEL.nextInSEL = edge1; + edge2.nextInSEL = next; + if (edge2.nextInSEL != null) + edge2.nextInSEL.prevInSEL = edge2; + edge2.prevInSEL = prev; + if (edge2.prevInSEL != null) + edge2.prevInSEL.nextInSEL = edge2; + } + + if (edge1.prevInSEL == null) + m_SortedEdges = edge1; + else if (edge2.prevInSEL == null) + m_SortedEdges = edge2; + } + //------------------------------------------------------------------------------ + + + private void AddLocalMaxPoly(TEdge e1, TEdge e2, IntPoint pt) + { + AddOutPt(e1, pt); + if (e1.outIdx == e2.outIdx) + { + e1.outIdx = -1; + e2.outIdx = -1; + } + else if (e1.outIdx < e2.outIdx) + AppendPolygon(e1, e2); + else + AppendPolygon(e2, e1); + } + //------------------------------------------------------------------------------ + + private void AddLocalMinPoly(TEdge e1, TEdge e2, IntPoint pt) + { + TEdge e, prevE; + if (e2.dx == horizontal || (e1.dx > e2.dx)) + { + AddOutPt(e1, pt); + e2.outIdx = e1.outIdx; + e1.side = EdgeSide.esLeft; + e2.side = EdgeSide.esRight; + e = e1; + if (e.prevInAEL == e2) + prevE = e2.prevInAEL; + else + prevE = e.prevInAEL; + } + else + { + AddOutPt(e2, pt); + e1.outIdx = e2.outIdx; + e1.side = EdgeSide.esRight; + e2.side = EdgeSide.esLeft; + e = e2; + if (e.prevInAEL == e1) + prevE = e1.prevInAEL; + else + prevE = e.prevInAEL; + } + + if (prevE != null && prevE.outIdx >= 0 && + (TopX(prevE, pt.Y) == TopX(e, pt.Y)) && + SlopesEqual(e, prevE, m_UseFullRange)) + AddJoin(e, prevE, -1, -1); + + } + //------------------------------------------------------------------------------ + + private OutRec CreateOutRec() + { + OutRec result = new OutRec(); + result.idx = -1; + result.isHole = false; + result.FirstLeft = null; + result.pts = null; + result.bottomPt = null; + result.polyNode = null; + return result; + } + //------------------------------------------------------------------------------ + + private void AddOutPt(TEdge e, IntPoint pt) + { + bool ToFront = (e.side == EdgeSide.esLeft); + if( e.outIdx < 0 ) + { + OutRec outRec = CreateOutRec(); + m_PolyOuts.Add(outRec); + outRec.idx = m_PolyOuts.Count -1; + e.outIdx = outRec.idx; + OutPt op = new OutPt(); + outRec.pts = op; + outRec.bottomPt = op; + op.pt = pt; + op.idx = outRec.idx; + op.next = op; + op.prev = op; + SetHoleState(e, outRec); + } else + { + OutRec outRec = m_PolyOuts[e.outIdx]; + OutPt op = outRec.pts, op2; + if (ToFront && PointsEqual(pt, op.pt) || + (!ToFront && PointsEqual(pt, op.prev.pt))) return; + + op2 = new OutPt(); + op2.pt = pt; + op2.idx = outRec.idx; + if (op2.pt.Y == outRec.bottomPt.pt.Y && + op2.pt.X < outRec.bottomPt.pt.X) + outRec.bottomPt = op2; + op2.next = op; + op2.prev = op.prev; + op2.prev.next = op2; + op.prev = op2; + if (ToFront) outRec.pts = op2; + } + } + //------------------------------------------------------------------------------ + + internal void SwapPoints(ref IntPoint pt1, ref IntPoint pt2) + { + IntPoint tmp = pt1; + pt1 = pt2; + pt2 = tmp; + } + //------------------------------------------------------------------------------ + + private bool GetOverlapSegment(IntPoint pt1a, IntPoint pt1b, IntPoint pt2a, + IntPoint pt2b, ref IntPoint pt1, ref IntPoint pt2) + { + //precondition: segments are colinear. + if (Math.Abs(pt1a.X - pt1b.X) > Math.Abs(pt1a.Y - pt1b.Y)) + { + if (pt1a.X > pt1b.X) SwapPoints(ref pt1a, ref pt1b); + if (pt2a.X > pt2b.X) SwapPoints(ref pt2a, ref pt2b); + if (pt1a.X > pt2a.X) pt1 = pt1a; else pt1 = pt2a; + if (pt1b.X < pt2b.X) pt2 = pt1b; else pt2 = pt2b; + return pt1.X < pt2.X; + } else + { + if (pt1a.Y < pt1b.Y) SwapPoints(ref pt1a, ref pt1b); + if (pt2a.Y < pt2b.Y) SwapPoints(ref pt2a, ref pt2b); + if (pt1a.Y < pt2a.Y) pt1 = pt1a; else pt1 = pt2a; + if (pt1b.Y > pt2b.Y) pt2 = pt1b; else pt2 = pt2b; + return pt1.Y > pt2.Y; + } + } + //------------------------------------------------------------------------------ + + private bool FindSegment(ref OutPt pp, ref IntPoint pt1, ref IntPoint pt2) + { + if (pp == null) return false; + OutPt pp2 = pp; + IntPoint pt1a = new IntPoint(pt1); + IntPoint pt2a = new IntPoint(pt2); + do + { + if (SlopesEqual(pt1a, pt2a, pp.pt, pp.prev.pt, true) && + SlopesEqual(pt1a, pt2a, pp.pt, true) && + GetOverlapSegment(pt1a, pt2a, pp.pt, pp.prev.pt, ref pt1, ref pt2)) + return true; + pp = pp.next; + } + while (pp != pp2); + return false; + } + //------------------------------------------------------------------------------ + + internal bool Pt3IsBetweenPt1AndPt2(IntPoint pt1, IntPoint pt2, IntPoint pt3) + { + if (PointsEqual(pt1, pt3) || PointsEqual(pt2, pt3)) return true; + else if (pt1.X != pt2.X) return (pt1.X < pt3.X) == (pt3.X < pt2.X); + else return (pt1.Y < pt3.Y) == (pt3.Y < pt2.Y); + } + //------------------------------------------------------------------------------ + + private OutPt InsertPolyPtBetween(OutPt p1, OutPt p2, IntPoint pt) + { + OutPt result = new OutPt(); + result.pt = pt; + if (p2 == p1.next) + { + p1.next = result; + p2.prev = result; + result.next = p2; + result.prev = p1; + } else + { + p2.next = result; + p1.prev = result; + result.next = p1; + result.prev = p2; + } + return result; + } + //------------------------------------------------------------------------------ + + private void SetHoleState(TEdge e, OutRec outRec) + { + bool isHole = false; + TEdge e2 = e.prevInAEL; + while (e2 != null) + { + if (e2.outIdx >= 0) + { + isHole = !isHole; + if (outRec.FirstLeft == null) + outRec.FirstLeft = m_PolyOuts[e2.outIdx]; + } + e2 = e2.prevInAEL; + } + if (isHole) outRec.isHole = true; + } + //------------------------------------------------------------------------------ + + private double GetDx(IntPoint pt1, IntPoint pt2) + { + if (pt1.Y == pt2.Y) return horizontal; + else return (double)(pt2.X - pt1.X) / (pt2.Y - pt1.Y); + } + //--------------------------------------------------------------------------- + + private bool FirstIsBottomPt(OutPt btmPt1, OutPt btmPt2) + { + OutPt p = btmPt1.prev; + while (PointsEqual(p.pt, btmPt1.pt) && (p != btmPt1)) p = p.prev; + double dx1p = Math.Abs(GetDx(btmPt1.pt, p.pt)); + p = btmPt1.next; + while (PointsEqual(p.pt, btmPt1.pt) && (p != btmPt1)) p = p.next; + double dx1n = Math.Abs(GetDx(btmPt1.pt, p.pt)); + + p = btmPt2.prev; + while (PointsEqual(p.pt, btmPt2.pt) && (p != btmPt2)) p = p.prev; + double dx2p = Math.Abs(GetDx(btmPt2.pt, p.pt)); + p = btmPt2.next; + while (PointsEqual(p.pt, btmPt2.pt) && (p != btmPt2)) p = p.next; + double dx2n = Math.Abs(GetDx(btmPt2.pt, p.pt)); + return (dx1p >= dx2p && dx1p >= dx2n) || (dx1n >= dx2p && dx1n >= dx2n); + } + //------------------------------------------------------------------------------ + + private OutPt GetBottomPt(OutPt pp) + { + OutPt dups = null; + OutPt p = pp.next; + while (p != pp) + { + if (p.pt.Y > pp.pt.Y) + { + pp = p; + dups = null; + } + else if (p.pt.Y == pp.pt.Y && p.pt.X <= pp.pt.X) + { + if (p.pt.X < pp.pt.X) + { + dups = null; + pp = p; + } else + { + if (p.next != pp && p.prev != pp) dups = p; + } + } + p = p.next; + } + if (dups != null) + { + //there appears to be at least 2 vertices at bottomPt so ... + while (dups != p) + { + if (!FirstIsBottomPt(p, dups)) pp = dups; + dups = dups.next; + while (!PointsEqual(dups.pt, pp.pt)) dups = dups.next; + } + } + return pp; + } + //------------------------------------------------------------------------------ + + private OutRec GetLowermostRec(OutRec outRec1, OutRec outRec2) + { + //work out which polygon fragment has the correct hole state ... + OutPt bPt1 = outRec1.bottomPt; + OutPt bPt2 = outRec2.bottomPt; + if (bPt1.pt.Y > bPt2.pt.Y) return outRec1; + else if (bPt1.pt.Y < bPt2.pt.Y) return outRec2; + else if (bPt1.pt.X < bPt2.pt.X) return outRec1; + else if (bPt1.pt.X > bPt2.pt.X) return outRec2; + else if (bPt1.next == bPt1) return outRec2; + else if (bPt2.next == bPt2) return outRec1; + else if (FirstIsBottomPt(bPt1, bPt2)) return outRec1; + else return outRec2; + } + //------------------------------------------------------------------------------ + + bool Param1RightOfParam2(OutRec outRec1, OutRec outRec2) + { + do + { + outRec1 = outRec1.FirstLeft; + if (outRec1 == outRec2) return true; + } while (outRec1 != null); + return false; + } + //------------------------------------------------------------------------------ + + private void AppendPolygon(TEdge e1, TEdge e2) + { + //get the start and ends of both output polygons ... + OutRec outRec1 = m_PolyOuts[e1.outIdx]; + OutRec outRec2 = m_PolyOuts[e2.outIdx]; + + OutRec holeStateRec; + if (Param1RightOfParam2(outRec1, outRec2)) + holeStateRec = outRec2; + else if (Param1RightOfParam2(outRec2, outRec1)) + holeStateRec = outRec1; + else + holeStateRec = GetLowermostRec(outRec1, outRec2); + + OutPt p1_lft = outRec1.pts; + OutPt p1_rt = p1_lft.prev; + OutPt p2_lft = outRec2.pts; + OutPt p2_rt = p2_lft.prev; + + EdgeSide side; + //join e2 poly onto e1 poly and delete pointers to e2 ... + if( e1.side == EdgeSide.esLeft ) + { + if (e2.side == EdgeSide.esLeft) + { + //z y x a b c + ReversePolyPtLinks(p2_lft); + p2_lft.next = p1_lft; + p1_lft.prev = p2_lft; + p1_rt.next = p2_rt; + p2_rt.prev = p1_rt; + outRec1.pts = p2_rt; + } else + { + //x y z a b c + p2_rt.next = p1_lft; + p1_lft.prev = p2_rt; + p2_lft.prev = p1_rt; + p1_rt.next = p2_lft; + outRec1.pts = p2_lft; + } + side = EdgeSide.esLeft; + } else + { + if (e2.side == EdgeSide.esRight) + { + //a b c z y x + ReversePolyPtLinks( p2_lft ); + p1_rt.next = p2_rt; + p2_rt.prev = p1_rt; + p2_lft.next = p1_lft; + p1_lft.prev = p2_lft; + } else + { + //a b c x y z + p1_rt.next = p2_lft; + p2_lft.prev = p1_rt; + p1_lft.prev = p2_rt; + p2_rt.next = p1_lft; + } + side = EdgeSide.esRight; + } + + if (holeStateRec == outRec2) + { + outRec1.bottomPt = outRec2.bottomPt; + outRec1.bottomPt.idx = outRec1.idx; + if (outRec2.FirstLeft != outRec1) + outRec1.FirstLeft = outRec2.FirstLeft; + outRec1.isHole = outRec2.isHole; + } + outRec2.pts = null; + outRec2.bottomPt = null; + + outRec2.FirstLeft = outRec1; + + int OKIdx = e1.outIdx; + int ObsoleteIdx = e2.outIdx; + + e1.outIdx = -1; //nb: safe because we only get here via AddLocalMaxPoly + e2.outIdx = -1; + + TEdge e = m_ActiveEdges; + while( e != null ) + { + if( e.outIdx == ObsoleteIdx ) + { + e.outIdx = OKIdx; + e.side = side; + break; + } + e = e.nextInAEL; + } + + + for (int i = 0; i < m_Joins.Count; ++i) + { + if (m_Joins[i].poly1Idx == ObsoleteIdx) m_Joins[i].poly1Idx = OKIdx; + if (m_Joins[i].poly2Idx == ObsoleteIdx) m_Joins[i].poly2Idx = OKIdx; + } + + for (int i = 0; i < m_HorizJoins.Count; ++i) + { + if (m_HorizJoins[i].savedIdx == ObsoleteIdx) + m_HorizJoins[i].savedIdx = OKIdx; + } + + } + //------------------------------------------------------------------------------ + + private void ReversePolyPtLinks(OutPt pp) + { + if (pp == null) return; + OutPt pp1; + OutPt pp2; + pp1 = pp; + do + { + pp2 = pp1.next; + pp1.next = pp1.prev; + pp1.prev = pp2; + pp1 = pp2; + } while (pp1 != pp); + } + //------------------------------------------------------------------------------ + + private static void SwapSides(TEdge edge1, TEdge edge2) + { + EdgeSide side = edge1.side; + edge1.side = edge2.side; + edge2.side = side; + } + //------------------------------------------------------------------------------ + + private static void SwapPolyIndexes(TEdge edge1, TEdge edge2) + { + int outIdx = edge1.outIdx; + edge1.outIdx = edge2.outIdx; + edge2.outIdx = outIdx; + } + //------------------------------------------------------------------------------ + + private void DoEdge1(TEdge edge1, TEdge edge2, IntPoint pt) + { + AddOutPt(edge1, pt); + SwapSides(edge1, edge2); + SwapPolyIndexes(edge1, edge2); + } + //------------------------------------------------------------------------------ + + private void DoEdge2(TEdge edge1, TEdge edge2, IntPoint pt) + { + AddOutPt(edge2, pt); + SwapSides(edge1, edge2); + SwapPolyIndexes(edge1, edge2); + } + //------------------------------------------------------------------------------ + + private void DoBothEdges(TEdge edge1, TEdge edge2, IntPoint pt) + { + AddOutPt(edge1, pt); + AddOutPt(edge2, pt); + SwapSides(edge1, edge2); + SwapPolyIndexes(edge1, edge2); + } + //------------------------------------------------------------------------------ + + private void IntersectEdges(TEdge e1, TEdge e2, IntPoint pt, Protects protects) + { + //e1 will be to the left of e2 BELOW the intersection. Therefore e1 is before + //e2 in AEL except when e1 is being inserted at the intersection point ... + + bool e1stops = (Protects.ipLeft & protects) == 0 && e1.nextInLML == null && + e1.xtop == pt.X && e1.ytop == pt.Y; + bool e2stops = (Protects.ipRight & protects) == 0 && e2.nextInLML == null && + e2.xtop == pt.X && e2.ytop == pt.Y; + bool e1Contributing = (e1.outIdx >= 0); + bool e2contributing = (e2.outIdx >= 0); + + //update winding counts... + //assumes that e1 will be to the right of e2 ABOVE the intersection + if (e1.polyType == e2.polyType) + { + if (IsEvenOddFillType(e1)) + { + int oldE1WindCnt = e1.windCnt; + e1.windCnt = e2.windCnt; + e2.windCnt = oldE1WindCnt; + } + else + { + if (e1.windCnt + e2.windDelta == 0) e1.windCnt = -e1.windCnt; + else e1.windCnt += e2.windDelta; + if (e2.windCnt - e1.windDelta == 0) e2.windCnt = -e2.windCnt; + else e2.windCnt -= e1.windDelta; + } + } + else + { + if (!IsEvenOddFillType(e2)) e1.windCnt2 += e2.windDelta; + else e1.windCnt2 = (e1.windCnt2 == 0) ? 1 : 0; + if (!IsEvenOddFillType(e1)) e2.windCnt2 -= e1.windDelta; + else e2.windCnt2 = (e2.windCnt2 == 0) ? 1 : 0; + } + + PolyFillType e1FillType, e2FillType, e1FillType2, e2FillType2; + if (e1.polyType == PolyType.ptSubject) + { + e1FillType = m_SubjFillType; + e1FillType2 = m_ClipFillType; + } + else + { + e1FillType = m_ClipFillType; + e1FillType2 = m_SubjFillType; + } + if (e2.polyType == PolyType.ptSubject) + { + e2FillType = m_SubjFillType; + e2FillType2 = m_ClipFillType; + } + else + { + e2FillType = m_ClipFillType; + e2FillType2 = m_SubjFillType; + } + + int e1Wc, e2Wc; + switch (e1FillType) + { + case PolyFillType.pftPositive: e1Wc = e1.windCnt; break; + case PolyFillType.pftNegative: e1Wc = -e1.windCnt; break; + default: e1Wc = Math.Abs(e1.windCnt); break; + } + switch (e2FillType) + { + case PolyFillType.pftPositive: e2Wc = e2.windCnt; break; + case PolyFillType.pftNegative: e2Wc = -e2.windCnt; break; + default: e2Wc = Math.Abs(e2.windCnt); break; + } + + + if (e1Contributing && e2contributing) + { + if ( e1stops || e2stops || + (e1Wc != 0 && e1Wc != 1) || (e2Wc != 0 && e2Wc != 1) || + (e1.polyType != e2.polyType && m_ClipType != ClipType.ctXor)) + AddLocalMaxPoly(e1, e2, pt); + else + DoBothEdges(e1, e2, pt); + } + else if (e1Contributing) + { + if ((e2Wc == 0 || e2Wc == 1) && + (m_ClipType != ClipType.ctIntersection || + e2.polyType == PolyType.ptSubject || (e2.windCnt2 != 0))) + DoEdge1(e1, e2, pt); + } + else if (e2contributing) + { + if ((e1Wc == 0 || e1Wc == 1) && + (m_ClipType != ClipType.ctIntersection || + e1.polyType == PolyType.ptSubject || (e1.windCnt2 != 0))) + DoEdge2(e1, e2, pt); + } + else if ( (e1Wc == 0 || e1Wc == 1) && + (e2Wc == 0 || e2Wc == 1) && !e1stops && !e2stops ) + { + //neither edge is currently contributing ... + Int64 e1Wc2, e2Wc2; + switch (e1FillType2) + { + case PolyFillType.pftPositive: e1Wc2 = e1.windCnt2; break; + case PolyFillType.pftNegative: e1Wc2 = -e1.windCnt2; break; + default: e1Wc2 = Math.Abs(e1.windCnt2); break; + } + switch (e2FillType2) + { + case PolyFillType.pftPositive: e2Wc2 = e2.windCnt2; break; + case PolyFillType.pftNegative: e2Wc2 = -e2.windCnt2; break; + default: e2Wc2 = Math.Abs(e2.windCnt2); break; + } + + if (e1.polyType != e2.polyType) + AddLocalMinPoly(e1, e2, pt); + else if (e1Wc == 1 && e2Wc == 1) + switch (m_ClipType) + { + case ClipType.ctIntersection: + { + if (e1Wc2 > 0 && e2Wc2 > 0) + AddLocalMinPoly(e1, e2, pt); + break; + } + case ClipType.ctUnion: + { + if (e1Wc2 <= 0 && e2Wc2 <= 0) + AddLocalMinPoly(e1, e2, pt); + break; + } + case ClipType.ctDifference: + { + if (((e1.polyType == PolyType.ptClip) && (e1Wc2 > 0) && (e2Wc2 > 0)) || + ((e1.polyType == PolyType.ptSubject) && (e1Wc2 <= 0) && (e2Wc2 <= 0))) + AddLocalMinPoly(e1, e2, pt); + break; + } + case ClipType.ctXor: + { + AddLocalMinPoly(e1, e2, pt); + break; + } + } + else + SwapSides(e1, e2); + } + + if ((e1stops != e2stops) && + ((e1stops && (e1.outIdx >= 0)) || (e2stops && (e2.outIdx >= 0)))) + { + SwapSides(e1, e2); + SwapPolyIndexes(e1, e2); + } + + //finally, delete any non-contributing maxima edges ... + if (e1stops) DeleteFromAEL(e1); + if (e2stops) DeleteFromAEL(e2); + } + //------------------------------------------------------------------------------ + + private void DeleteFromAEL(TEdge e) + { + TEdge AelPrev = e.prevInAEL; + TEdge AelNext = e.nextInAEL; + if (AelPrev == null && AelNext == null && (e != m_ActiveEdges)) + return; //already deleted + if (AelPrev != null) + AelPrev.nextInAEL = AelNext; + else m_ActiveEdges = AelNext; + if (AelNext != null) + AelNext.prevInAEL = AelPrev; + e.nextInAEL = null; + e.prevInAEL = null; + } + //------------------------------------------------------------------------------ + + private void DeleteFromSEL(TEdge e) + { + TEdge SelPrev = e.prevInSEL; + TEdge SelNext = e.nextInSEL; + if (SelPrev == null && SelNext == null && (e != m_SortedEdges)) + return; //already deleted + if (SelPrev != null) + SelPrev.nextInSEL = SelNext; + else m_SortedEdges = SelNext; + if (SelNext != null) + SelNext.prevInSEL = SelPrev; + e.nextInSEL = null; + e.prevInSEL = null; + } + //------------------------------------------------------------------------------ + + private void UpdateEdgeIntoAEL(ref TEdge e) + { + if (e.nextInLML == null) + throw new ClipperException("UpdateEdgeIntoAEL: invalid call"); + TEdge AelPrev = e.prevInAEL; + TEdge AelNext = e.nextInAEL; + e.nextInLML.outIdx = e.outIdx; + if (AelPrev != null) + AelPrev.nextInAEL = e.nextInLML; + else m_ActiveEdges = e.nextInLML; + if (AelNext != null) + AelNext.prevInAEL = e.nextInLML; + e.nextInLML.side = e.side; + e.nextInLML.windDelta = e.windDelta; + e.nextInLML.windCnt = e.windCnt; + e.nextInLML.windCnt2 = e.windCnt2; + e = e.nextInLML; + e.prevInAEL = AelPrev; + e.nextInAEL = AelNext; + if (e.dx != horizontal) InsertScanbeam(e.ytop); + } + //------------------------------------------------------------------------------ + + private void ProcessHorizontals() + { + TEdge horzEdge = m_SortedEdges; + while (horzEdge != null) + { + DeleteFromSEL(horzEdge); + ProcessHorizontal(horzEdge); + horzEdge = m_SortedEdges; + } + } + //------------------------------------------------------------------------------ + + private void ProcessHorizontal(TEdge horzEdge) + { + Direction Direction; + Int64 horzLeft, horzRight; + + if (horzEdge.xcurr < horzEdge.xtop) + { + horzLeft = horzEdge.xcurr; + horzRight = horzEdge.xtop; + Direction = Direction.dLeftToRight; + } + else + { + horzLeft = horzEdge.xtop; + horzRight = horzEdge.xcurr; + Direction = Direction.dRightToLeft; + } + + TEdge eMaxPair; + if (horzEdge.nextInLML != null) + eMaxPair = null; + else + eMaxPair = GetMaximaPair(horzEdge); + + TEdge e = GetNextInAEL(horzEdge, Direction); + while (e != null) + { + TEdge eNext = GetNextInAEL(e, Direction); + if (eMaxPair != null || + ((Direction == Direction.dLeftToRight) && (e.xcurr <= horzRight)) || + ((Direction == Direction.dRightToLeft) && (e.xcurr >= horzLeft))) + { + //ok, so far it looks like we're still in range of the horizontal edge + if (e.xcurr == horzEdge.xtop && eMaxPair == null) + { + if (SlopesEqual(e, horzEdge.nextInLML, m_UseFullRange)) + { + //if output polygons share an edge, they'll need joining later ... + if (horzEdge.outIdx >= 0 && e.outIdx >= 0) + AddJoin(horzEdge.nextInLML, e, horzEdge.outIdx, -1); + break; //we've reached the end of the horizontal line + } + else if (e.dx < horzEdge.nextInLML.dx) + //we really have got to the end of the intermediate horz edge so quit. + //nb: More -ve slopes follow more +ve slopes ABOVE the horizontal. + break; + } + + if (e == eMaxPair) + { + //horzEdge is evidently a maxima horizontal and we've arrived at its end. + if (Direction == Direction.dLeftToRight) + IntersectEdges(horzEdge, e, new IntPoint(e.xcurr, horzEdge.ycurr), 0); + else + IntersectEdges(e, horzEdge, new IntPoint(e.xcurr, horzEdge.ycurr), 0); + if (eMaxPair.outIdx >= 0) throw new ClipperException("ProcessHorizontal error"); + return; + } + else if (e.dx == horizontal && !IsMinima(e) && !(e.xcurr > e.xtop)) + { + if (Direction == Direction.dLeftToRight) + IntersectEdges(horzEdge, e, new IntPoint(e.xcurr, horzEdge.ycurr), + (IsTopHorz(horzEdge, e.xcurr)) ? Protects.ipLeft : Protects.ipBoth); + else + IntersectEdges(e, horzEdge, new IntPoint(e.xcurr, horzEdge.ycurr), + (IsTopHorz(horzEdge, e.xcurr)) ? Protects.ipRight : Protects.ipBoth); + } + else if (Direction == Direction.dLeftToRight) + { + IntersectEdges(horzEdge, e, new IntPoint(e.xcurr, horzEdge.ycurr), + (IsTopHorz(horzEdge, e.xcurr)) ? Protects.ipLeft : Protects.ipBoth); + } + else + { + IntersectEdges(e, horzEdge, new IntPoint(e.xcurr, horzEdge.ycurr), + (IsTopHorz(horzEdge, e.xcurr)) ? Protects.ipRight : Protects.ipBoth); + } + SwapPositionsInAEL(horzEdge, e); + } + else if ( (Direction == Direction.dLeftToRight && + e.xcurr > horzRight && horzEdge.nextInSEL == null) || + (Direction == Direction.dRightToLeft && + e.xcurr < horzLeft && horzEdge.nextInSEL == null) ) break; + e = eNext; + } //end while ( e ) + + if (horzEdge.nextInLML != null) + { + if (horzEdge.outIdx >= 0) + AddOutPt(horzEdge, new IntPoint(horzEdge.xtop, horzEdge.ytop)); + UpdateEdgeIntoAEL(ref horzEdge); + } + else + { + if (horzEdge.outIdx >= 0) + IntersectEdges(horzEdge, eMaxPair, + new IntPoint(horzEdge.xtop, horzEdge.ycurr), Protects.ipBoth); + DeleteFromAEL(eMaxPair); + DeleteFromAEL(horzEdge); + } + } + //------------------------------------------------------------------------------ + + private bool IsTopHorz(TEdge horzEdge, double XPos) + { + TEdge e = m_SortedEdges; + while (e != null) + { + if ((XPos >= Math.Min(e.xcurr, e.xtop)) && (XPos <= Math.Max(e.xcurr, e.xtop))) + return false; + e = e.nextInSEL; + } + return true; + } + //------------------------------------------------------------------------------ + + private TEdge GetNextInAEL(TEdge e, Direction Direction) + { + return Direction == Direction.dLeftToRight ? e.nextInAEL: e.prevInAEL; + } + //------------------------------------------------------------------------------ + + private bool IsMinima(TEdge e) + { + return e != null && (e.prev.nextInLML != e) && (e.next.nextInLML != e); + } + //------------------------------------------------------------------------------ + + private bool IsMaxima(TEdge e, double Y) + { + return (e != null && e.ytop == Y && e.nextInLML == null); + } + //------------------------------------------------------------------------------ + + private bool IsIntermediate(TEdge e, double Y) + { + return (e.ytop == Y && e.nextInLML != null); + } + //------------------------------------------------------------------------------ + + private TEdge GetMaximaPair(TEdge e) + { + if (!IsMaxima(e.next, e.ytop) || (e.next.xtop != e.xtop)) + return e.prev; else + return e.next; + } + //------------------------------------------------------------------------------ + + private bool ProcessIntersections(Int64 botY, Int64 topY) + { + if( m_ActiveEdges == null ) return true; + try { + BuildIntersectList(botY, topY); + if ( m_IntersectNodes == null) return true; + if ( FixupIntersections() ) ProcessIntersectList(); + else return false; + } + catch { + m_SortedEdges = null; + DisposeIntersectNodes(); + throw new ClipperException("ProcessIntersections error"); + } + return true; + } + //------------------------------------------------------------------------------ + + private void BuildIntersectList(Int64 botY, Int64 topY) + { + if ( m_ActiveEdges == null ) return; + + //prepare for sorting ... + TEdge e = m_ActiveEdges; + m_SortedEdges = e; + while( e != null ) + { + e.prevInSEL = e.prevInAEL; + e.nextInSEL = e.nextInAEL; + e.tmpX = TopX( e, topY ); + e = e.nextInAEL; + } + + //bubblesort ... + bool isModified = true; + while( isModified && m_SortedEdges != null ) + { + isModified = false; + e = m_SortedEdges; + while( e.nextInSEL != null ) + { + TEdge eNext = e.nextInSEL; + IntPoint pt = new IntPoint(); + if(e.tmpX > eNext.tmpX && IntersectPoint(e, eNext, ref pt)) + { + if (pt.Y > botY) + { + pt.Y = botY; + pt.X = TopX(e, pt.Y); + } + AddIntersectNode(e, eNext, pt); + SwapPositionsInSEL(e, eNext); + isModified = true; + } + else + e = eNext; + } + if( e.prevInSEL != null ) e.prevInSEL.nextInSEL = null; + else break; + } + m_SortedEdges = null; + } + //------------------------------------------------------------------------------ + + private bool FixupIntersections() + { + if ( m_IntersectNodes.next == null ) return true; + + CopyAELToSEL(); + IntersectNode int1 = m_IntersectNodes; + IntersectNode int2 = m_IntersectNodes.next; + while (int2 != null) + { + TEdge e1 = int1.edge1; + TEdge e2; + if (e1.prevInSEL == int1.edge2) e2 = e1.prevInSEL; + else if (e1.nextInSEL == int1.edge2) e2 = e1.nextInSEL; + else + { + //The current intersection is out of order, so try and swap it with + //a subsequent intersection ... + while (int2 != null) + { + if (int2.edge1.nextInSEL == int2.edge2 || + int2.edge1.prevInSEL == int2.edge2) break; + else int2 = int2.next; + } + if (int2 == null) return false; //oops!!! + + //found an intersect node that can be swapped ... + SwapIntersectNodes(int1, int2); + e1 = int1.edge1; + e2 = int1.edge2; + } + SwapPositionsInSEL(e1, e2); + int1 = int1.next; + int2 = int1.next; + } + + m_SortedEdges = null; + + //finally, check the last intersection too ... + return (int1.edge1.prevInSEL == int1.edge2 || int1.edge1.nextInSEL == int1.edge2); + } + //------------------------------------------------------------------------------ + + private void ProcessIntersectList() + { + while( m_IntersectNodes != null ) + { + IntersectNode iNode = m_IntersectNodes.next; + { + IntersectEdges( m_IntersectNodes.edge1 , + m_IntersectNodes.edge2 , m_IntersectNodes.pt, Protects.ipBoth ); + SwapPositionsInAEL( m_IntersectNodes.edge1 , m_IntersectNodes.edge2 ); + } + m_IntersectNodes = null; + m_IntersectNodes = iNode; + } + } + //------------------------------------------------------------------------------ + + private static Int64 Round(double value) + { + return value < 0 ? (Int64)(value - 0.5) : (Int64)(value + 0.5); + } + //------------------------------------------------------------------------------ + + private static Int64 TopX(TEdge edge, Int64 currentY) + { + if (currentY == edge.ytop) + return edge.xtop; + return edge.xbot + Round(edge.dx *(currentY - edge.ybot)); + } + //------------------------------------------------------------------------------ + + private void AddIntersectNode(TEdge e1, TEdge e2, IntPoint pt) + { + IntersectNode newNode = new IntersectNode(); + newNode.edge1 = e1; + newNode.edge2 = e2; + newNode.pt = pt; + newNode.next = null; + if (m_IntersectNodes == null) m_IntersectNodes = newNode; + else if (ProcessParam1BeforeParam2(newNode, m_IntersectNodes)) + { + newNode.next = m_IntersectNodes; + m_IntersectNodes = newNode; + } + else + { + IntersectNode iNode = m_IntersectNodes; + while (iNode.next != null && ProcessParam1BeforeParam2(iNode.next, newNode)) + iNode = iNode.next; + newNode.next = iNode.next; + iNode.next = newNode; + } + } + //------------------------------------------------------------------------------ + + private bool ProcessParam1BeforeParam2(IntersectNode node1, IntersectNode node2) + { + bool result; + if (node1.pt.Y == node2.pt.Y) + { + if (node1.edge1 == node2.edge1 || node1.edge2 == node2.edge1) + { + result = node2.pt.X > node1.pt.X; + return node2.edge1.dx > 0 ? !result : result; + } + else if (node1.edge1 == node2.edge2 || node1.edge2 == node2.edge2) + { + result = node2.pt.X > node1.pt.X; + return node2.edge2.dx > 0 ? !result : result; + } + else return node2.pt.X > node1.pt.X; + } + else return node1.pt.Y > node2.pt.Y; + } + //------------------------------------------------------------------------------ + + private void SwapIntersectNodes(IntersectNode int1, IntersectNode int2) + { + TEdge e1 = int1.edge1; + TEdge e2 = int1.edge2; + IntPoint p = int1.pt; + int1.edge1 = int2.edge1; + int1.edge2 = int2.edge2; + int1.pt = int2.pt; + int2.edge1 = e1; + int2.edge2 = e2; + int2.pt = p; + } + //------------------------------------------------------------------------------ + + private bool IntersectPoint(TEdge edge1, TEdge edge2, ref IntPoint ip) + { + double b1, b2; + if (SlopesEqual(edge1, edge2, m_UseFullRange)) return false; + else if (edge1.dx == 0) + { + ip.X = edge1.xbot; + if (edge2.dx == horizontal) + { + ip.Y = edge2.ybot; + } else + { + b2 = edge2.ybot - (edge2.xbot / edge2.dx); + ip.Y = Round(ip.X / edge2.dx + b2); + } + } + else if (edge2.dx == 0) + { + ip.X = edge2.xbot; + if (edge1.dx == horizontal) + { + ip.Y = edge1.ybot; + } else + { + b1 = edge1.ybot - (edge1.xbot / edge1.dx); + ip.Y = Round(ip.X / edge1.dx + b1); + } + } else + { + b1 = edge1.xbot - edge1.ybot * edge1.dx; + b2 = edge2.xbot - edge2.ybot * edge2.dx; + double q = (b2-b1) / (edge1.dx - edge2.dx); + ip.Y = Round(q); + if (Math.Abs(edge1.dx) < Math.Abs(edge2.dx)) + ip.X = Round(edge1.dx * q + b1); + else + ip.X = Round(edge2.dx * q + b2); + } + + if (ip.Y < edge1.ytop || ip.Y < edge2.ytop) + { + if (edge1.ytop > edge2.ytop) + { + ip.X = edge1.xtop; + ip.Y = edge1.ytop; + return TopX(edge2, edge1.ytop) < edge1.xtop; + } + else + { + ip.X = edge2.xtop; + ip.Y = edge2.ytop; + return TopX(edge1, edge2.ytop) > edge2.xtop; + } + } + else + return true; + } + //------------------------------------------------------------------------------ + + private void DisposeIntersectNodes() + { + while ( m_IntersectNodes != null ) + { + IntersectNode iNode = m_IntersectNodes.next; + m_IntersectNodes = null; + m_IntersectNodes = iNode; + } + } + //------------------------------------------------------------------------------ + + private void ProcessEdgesAtTopOfScanbeam(Int64 topY) + { + TEdge e = m_ActiveEdges; + while( e != null ) + { + //1. process maxima, treating them as if they're 'bent' horizontal edges, + // but exclude maxima with horizontal edges. nb: e can't be a horizontal. + if( IsMaxima(e, topY) && GetMaximaPair(e).dx != horizontal ) + { + //'e' might be removed from AEL, as may any following edges so ... + TEdge ePrev = e.prevInAEL; + DoMaxima(e, topY); + if( ePrev == null ) e = m_ActiveEdges; + else e = ePrev.nextInAEL; + } + else + { + //2. promote horizontal edges, otherwise update xcurr and ycurr ... + if( IsIntermediate(e, topY) && e.nextInLML.dx == horizontal ) + { + if (e.outIdx >= 0) + { + AddOutPt(e, new IntPoint(e.xtop, e.ytop)); + + for (int i = 0; i < m_HorizJoins.Count; ++i) + { + IntPoint pt = new IntPoint(), pt2 = new IntPoint(); + HorzJoinRec hj = m_HorizJoins[i]; + if (GetOverlapSegment(new IntPoint(hj.edge.xbot, hj.edge.ybot), + new IntPoint(hj.edge.xtop, hj.edge.ytop), + new IntPoint(e.nextInLML.xbot, e.nextInLML.ybot), + new IntPoint(e.nextInLML.xtop, e.nextInLML.ytop), ref pt, ref pt2)) + AddJoin(hj.edge, e.nextInLML, hj.savedIdx, e.outIdx); + } + + AddHorzJoin(e.nextInLML, e.outIdx); + } + UpdateEdgeIntoAEL(ref e); + AddEdgeToSEL(e); + } + else + { + //this just simplifies horizontal processing ... + e.xcurr = TopX( e, topY ); + e.ycurr = topY; + } + e = e.nextInAEL; + } + } + + //3. Process horizontals at the top of the scanbeam ... + ProcessHorizontals(); + + //4. Promote intermediate vertices ... + e = m_ActiveEdges; + while( e != null ) + { + if( IsIntermediate( e, topY ) ) + { + if (e.outIdx >= 0) AddOutPt(e, new IntPoint(e.xtop, e.ytop)); + UpdateEdgeIntoAEL(ref e); + + //if output polygons share an edge, they'll need joining later ... + TEdge ePrev = e.prevInAEL; + TEdge eNext = e.nextInAEL; + if (ePrev != null && ePrev.xcurr == e.xbot && + ePrev.ycurr == e.ybot && e.outIdx >= 0 && + ePrev.outIdx >= 0 && ePrev.ycurr > ePrev.ytop && + SlopesEqual(e, ePrev, m_UseFullRange)) + { + AddOutPt(ePrev, new IntPoint(e.xbot, e.ybot)); + AddJoin(e, ePrev, -1, -1); + } + else if (eNext != null && eNext.xcurr == e.xbot && + eNext.ycurr == e.ybot && e.outIdx >= 0 && + eNext.outIdx >= 0 && eNext.ycurr > eNext.ytop && + SlopesEqual(e, eNext, m_UseFullRange)) + { + AddOutPt(eNext, new IntPoint(e.xbot, e.ybot)); + AddJoin(e, eNext, -1, -1); + } + } + e = e.nextInAEL; + } + } + //------------------------------------------------------------------------------ + + private void DoMaxima(TEdge e, Int64 topY) + { + TEdge eMaxPair = GetMaximaPair(e); + Int64 X = e.xtop; + TEdge eNext = e.nextInAEL; + while( eNext != eMaxPair ) + { + if (eNext == null) throw new ClipperException("DoMaxima error"); + IntersectEdges( e, eNext, new IntPoint(X, topY), Protects.ipBoth ); + SwapPositionsInAEL(e, eNext); + eNext = eNext.nextInAEL; + } + if( e.outIdx < 0 && eMaxPair.outIdx < 0 ) + { + DeleteFromAEL( e ); + DeleteFromAEL( eMaxPair ); + } + else if( e.outIdx >= 0 && eMaxPair.outIdx >= 0 ) + { + IntersectEdges(e, eMaxPair, new IntPoint(X, topY), Protects.ipNone); + } + else throw new ClipperException("DoMaxima error"); + } + //------------------------------------------------------------------------------ + + public static void ReversePolygons(Polygons polys) + { + polys.ForEach(delegate(Polygon poly) { poly.Reverse(); }); + } + //------------------------------------------------------------------------------ + + public static bool Orientation(Polygon poly) + { + return Area(poly) >= 0; + } + //------------------------------------------------------------------------------ + + private int PointCount(OutPt pts) + { + if (pts == null) return 0; + int result = 0; + OutPt p = pts; + do + { + result++; + p = p.next; + } + while (p != pts); + return result; + } + //------------------------------------------------------------------------------ + + private void BuildResult(Polygons polyg) + { + polyg.Clear(); + polyg.Capacity = m_PolyOuts.Count; + for (int i = 0; i < m_PolyOuts.Count; i++) + { + OutRec outRec = m_PolyOuts[i]; + if (outRec.pts == null) continue; + OutPt p = outRec.pts; + int cnt = PointCount(p); + if (cnt < 3) continue; + Polygon pg = new Polygon(cnt); + for (int j = 0; j < cnt; j++) + { + pg.Add(p.pt); + p = p.prev; + } + polyg.Add(pg); + } + } + //------------------------------------------------------------------------------ + + private void BuildResult2(PolyTree polytree) + { + polytree.Clear(); + + //add each output polygon/contour to polytree ... + polytree.m_AllPolys.Capacity = m_PolyOuts.Count; + for (int i = 0; i < m_PolyOuts.Count; i++) + { + OutRec outRec = m_PolyOuts[i]; + int cnt = PointCount(outRec.pts); + if (cnt < 3) continue; + FixHoleLinkage(outRec); + PolyNode pn = new PolyNode(); + polytree.m_AllPolys.Add(pn); + outRec.polyNode = pn; + pn.m_polygon.Capacity = cnt; + OutPt op = outRec.pts; + for (int j = 0; j < cnt; j++) + { + pn.m_polygon.Add(op.pt); + op = op.prev; + } + } + + //fixup PolyNode links etc ... + polytree.m_Childs.Capacity = m_PolyOuts.Count; + for (int i = 0; i < m_PolyOuts.Count; i++) + { + OutRec outRec = m_PolyOuts[i]; + if (outRec.polyNode == null) continue; + if (outRec.FirstLeft == null) + polytree.AddChild(outRec.polyNode); + else + outRec.FirstLeft.polyNode.AddChild(outRec.polyNode); + } + } + //------------------------------------------------------------------------------ + + private void FixupOutPolygon(OutRec outRec) + { + //FixupOutPolygon() - removes duplicate points and simplifies consecutive + //parallel edges by removing the middle vertex. + OutPt lastOK = null; + outRec.pts = outRec.bottomPt; + OutPt pp = outRec.bottomPt; + for (;;) + { + if (pp.prev == pp || pp.prev == pp.next) + { + DisposeOutPts(pp); + outRec.pts = null; + outRec.bottomPt = null; + return; + } + //test for duplicate points and for same slope (cross-product) ... + if (PointsEqual(pp.pt, pp.next.pt) || + SlopesEqual(pp.prev.pt, pp.pt, pp.next.pt, m_UseFullRange)) + { + lastOK = null; + OutPt tmp = pp; + if (pp == outRec.bottomPt) + outRec.bottomPt = null; //flags need for updating + pp.prev.next = pp.next; + pp.next.prev = pp.prev; + pp = pp.prev; + tmp = null; + } + else if (pp == lastOK) break; + else + { + if (lastOK == null) lastOK = pp; + pp = pp.next; + } + } + if (outRec.bottomPt == null) + { + outRec.bottomPt = GetBottomPt(pp); + outRec.bottomPt.idx = outRec.idx; + outRec.pts = outRec.bottomPt; + } + } + //------------------------------------------------------------------------------ + + private bool JoinPoints(JoinRec j, out OutPt p1, out OutPt p2) + { + p1 = null; p2 = null; + OutRec outRec1 = m_PolyOuts[j.poly1Idx]; + OutRec outRec2 = m_PolyOuts[j.poly2Idx]; + if (outRec1 == null || outRec2 == null) return false; + OutPt pp1a = outRec1.pts; + OutPt pp2a = outRec2.pts; + IntPoint pt1 = j.pt2a, pt2 = j.pt2b; + IntPoint pt3 = j.pt1a, pt4 = j.pt1b; + if (!FindSegment(ref pp1a, ref pt1, ref pt2)) return false; + if (outRec1 == outRec2) + { + //we're searching the same polygon for overlapping segments so + //segment 2 mustn't be the same as segment 1 ... + pp2a = pp1a.next; + if (!FindSegment(ref pp2a, ref pt3, ref pt4) || (pp2a == pp1a)) return false; + } + else if (!FindSegment(ref pp2a, ref pt3, ref pt4)) return false; + + if (!GetOverlapSegment(pt1, pt2, pt3, pt4, ref pt1, ref pt2)) return false; + + OutPt p3, p4, prev = pp1a.prev; + //get p1 & p2 polypts - the overlap start & endpoints on poly1 + if (PointsEqual(pp1a.pt, pt1)) p1 = pp1a; + else if (PointsEqual(prev.pt, pt1)) p1 = prev; + else p1 = InsertPolyPtBetween(pp1a, prev, pt1); + + if (PointsEqual(pp1a.pt, pt2)) p2 = pp1a; + else if (PointsEqual(prev.pt, pt2)) p2 = prev; + else if ((p1 == pp1a) || (p1 == prev)) + p2 = InsertPolyPtBetween(pp1a, prev, pt2); + else if (Pt3IsBetweenPt1AndPt2(pp1a.pt, p1.pt, pt2)) + p2 = InsertPolyPtBetween(pp1a, p1, pt2); else + p2 = InsertPolyPtBetween(p1, prev, pt2); + + //get p3 & p4 polypts - the overlap start & endpoints on poly2 + prev = pp2a.prev; + if (PointsEqual(pp2a.pt, pt1)) p3 = pp2a; + else if (PointsEqual(prev.pt, pt1)) p3 = prev; + else p3 = InsertPolyPtBetween(pp2a, prev, pt1); + + if (PointsEqual(pp2a.pt, pt2)) p4 = pp2a; + else if (PointsEqual(prev.pt, pt2)) p4 = prev; + else if ((p3 == pp2a) || (p3 == prev)) + p4 = InsertPolyPtBetween(pp2a, prev, pt2); + else if (Pt3IsBetweenPt1AndPt2(pp2a.pt, p3.pt, pt2)) + p4 = InsertPolyPtBetween(pp2a, p3, pt2); else + p4 = InsertPolyPtBetween(p3, prev, pt2); + + //p1.pt == p3.pt and p2.pt == p4.pt so join p1 to p3 and p2 to p4 ... + if (p1.next == p2 && p3.prev == p4) + { + p1.next = p3; + p3.prev = p1; + p2.prev = p4; + p4.next = p2; + return true; + } + else if (p1.prev == p2 && p3.next == p4) + { + p1.prev = p3; + p3.next = p1; + p2.next = p4; + p4.prev = p2; + return true; + } + else + return false; //an orientation is probably wrong + } + //---------------------------------------------------------------------- + + private void FixupJoinRecs(JoinRec j, OutPt pt, int startIdx) + { + for (int k = startIdx; k < m_Joins.Count; k++) + { + JoinRec j2 = m_Joins[k]; + if (j2.poly1Idx == j.poly1Idx && PointIsVertex(j2.pt1a, pt)) + j2.poly1Idx = j.poly2Idx; + if (j2.poly2Idx == j.poly1Idx && PointIsVertex(j2.pt2a, pt)) + j2.poly2Idx = j.poly2Idx; + } + } + //---------------------------------------------------------------------- + + private bool Poly2ContainsPoly1(OutPt outPt1, OutPt outPt2, bool UseFullInt64Range) + { + //find the first pt in outPt1 that isn't also a vertex of outPt2 ... + OutPt outPt = outPt1; + do + { + if (!PointIsVertex(outPt.pt, outPt2)) break; + outPt = outPt.next; + } + while (outPt != outPt1); + bool result; + //sometimes a point on one polygon can be touching the other polygon + //so to be totally confident outPt1 is inside outPt2 repeat ... + do + { + result = PointInPolygon(outPt.pt, outPt2, UseFullInt64Range); + outPt = outPt.next; + } + while (result && outPt != outPt1); + return result; + } + //---------------------------------------------------------------------- + + private void FixupFirstLefts1(OutRec OldOutRec, OutRec NewOutRec) + { + for (int i = 0; i < m_PolyOuts.Count; i++) + { + OutRec outRec = m_PolyOuts[i]; + if (outRec.pts != null && outRec.FirstLeft == OldOutRec) + { + if (Poly2ContainsPoly1(outRec.pts, NewOutRec.pts, m_UseFullRange)) + outRec.FirstLeft = NewOutRec; + } + } + } + //---------------------------------------------------------------------- + + private void FixupFirstLefts2(OutRec OldOutRec, OutRec NewOutRec) + { + foreach (OutRec outRec in m_PolyOuts) + if (outRec.FirstLeft == OldOutRec) outRec.FirstLeft = NewOutRec; + } + //---------------------------------------------------------------------- + + private void JoinCommonEdges() + { + for (int i = 0; i < m_Joins.Count; i++) + { + JoinRec j = m_Joins[i]; + + OutRec outRec1 = m_PolyOuts[j.poly1Idx]; + OutRec outRec2 = m_PolyOuts[j.poly2Idx]; + + if (outRec1.pts == null || outRec2.pts == null) continue; + + //get the polygon fragment with the correct hole state (FirstLeft) + //before calling JoinPoints() ... + OutRec holeStateRec; + if (outRec1 == outRec2) holeStateRec = outRec1; + else if (Param1RightOfParam2(outRec1, outRec2)) holeStateRec = outRec2; + else if (Param1RightOfParam2(outRec2, outRec1)) holeStateRec = outRec1; + else holeStateRec = GetLowermostRec(outRec1, outRec2); + + OutPt p1, p2; + if (!JoinPoints(j, out p1, out p2)) continue; + + if (outRec1 == outRec2) + { + //instead of joining two polygons, we've just created a new one by + //splitting one polygon into two. + outRec1.pts = GetBottomPt(p1); + outRec1.bottomPt = outRec1.pts; + outRec1.bottomPt.idx = outRec1.idx; + outRec2 = CreateOutRec(); + m_PolyOuts.Add(outRec2); + outRec2.idx = m_PolyOuts.Count - 1; + j.poly2Idx = outRec2.idx; + outRec2.pts = GetBottomPt(p2); + outRec2.bottomPt = outRec2.pts; + outRec2.bottomPt.idx = outRec2.idx; + + if (Poly2ContainsPoly1(outRec2.pts, outRec1.pts, m_UseFullRange)) + { + //outRec2 is contained by outRec1 ... + outRec2.isHole = !outRec1.isHole; + outRec2.FirstLeft = outRec1; + + FixupJoinRecs(j, p2, i + 1); + + //fixup FirstLeft pointers that may need reassigning to OutRec1 + if (m_UsingPolyTree) FixupFirstLefts2(outRec2, outRec1); + + FixupOutPolygon(outRec1); //nb: do this BEFORE testing orientation + FixupOutPolygon(outRec2); // but AFTER calling FixupJoinRecs() + + if ((outRec2.isHole ^ m_ReverseOutput) == (Area(outRec2, m_UseFullRange) > 0)) + ReversePolyPtLinks(outRec2.pts); + + } + else if (Poly2ContainsPoly1(outRec1.pts, outRec2.pts, m_UseFullRange)) + { + //outRec1 is contained by outRec2 ... + outRec2.isHole = outRec1.isHole; + outRec1.isHole = !outRec2.isHole; + outRec2.FirstLeft = outRec1.FirstLeft; + outRec1.FirstLeft = outRec2; + + FixupJoinRecs(j, p2, i + 1); + + //fixup FirstLeft pointers that may need reassigning to OutRec1 + if (m_UsingPolyTree) FixupFirstLefts2(outRec1, outRec2); + + FixupOutPolygon(outRec1); //nb: do this BEFORE testing orientation + FixupOutPolygon(outRec2); // but AFTER calling FixupJoinRecs() + + if ((outRec1.isHole ^ m_ReverseOutput) == (Area(outRec1, m_UseFullRange) > 0)) + ReversePolyPtLinks(outRec1.pts); + } + else + { + //the 2 polygons are completely separate ... + outRec2.isHole = outRec1.isHole; + outRec2.FirstLeft = outRec1.FirstLeft; + + FixupJoinRecs(j, p2, i + 1); + + //fixup FirstLeft pointers that may need reassigning to OutRec2 + if (m_UsingPolyTree) FixupFirstLefts1(outRec1, outRec2); + + FixupOutPolygon(outRec1); //nb: do this BEFORE testing orientation + FixupOutPolygon(outRec2); // but AFTER calling FixupJoinRecs() + } + } + else + { + //joined 2 polygons together ... + + //cleanup redundant edges ... + FixupOutPolygon(outRec1); + + //delete the obsolete pointer ... + int OKIdx = outRec1.idx; + int ObsoleteIdx = outRec2.idx; + outRec2.pts = null; + outRec2.bottomPt = null; + + outRec1.isHole = holeStateRec.isHole; + if (holeStateRec == outRec2) + outRec1.FirstLeft = outRec2.FirstLeft; + outRec2.FirstLeft = outRec1; + + //now fixup any subsequent joins that match this polygon + for (int k = i + 1; k < m_Joins.Count; k++) + { + JoinRec j2 = m_Joins[k]; + if (j2.poly1Idx == ObsoleteIdx) j2.poly1Idx = OKIdx; + if (j2.poly2Idx == ObsoleteIdx) j2.poly2Idx = OKIdx; + } + + //fixup FirstLeft pointers that may need reassigning to OutRec1 + if (m_UsingPolyTree) FixupFirstLefts2(outRec2, outRec1); + } + } + } + //------------------------------------------------------------------------------ + + private static bool FullRangeNeeded(Polygon pts) + { + bool result = false; + for (int i = 0; i < pts.Count; i++) + { + if (Math.Abs(pts[i].X) > hiRange || Math.Abs(pts[i].Y) > hiRange) + throw new ClipperException("Coordinate exceeds range bounds."); + else if (Math.Abs(pts[i].X) > loRange || Math.Abs(pts[i].Y) > loRange) + result = true; + } + return result; + } + //------------------------------------------------------------------------------ + + public static double Area(Polygon poly) + { + int highI = poly.Count - 1; + if (highI < 2) return 0; + if (FullRangeNeeded(poly)) + { + Int128 a = new Int128(0); + a = Int128.Int128Mul(poly[highI].X + poly[0].X, poly[0].Y - poly[highI].Y); + for (int i = 1; i <= highI; ++i) + a += Int128.Int128Mul(poly[i - 1].X + poly[i].X, poly[i].Y - poly[i - 1].Y); + return a.ToDouble() / 2; + } + else + { + double area = ((double)poly[highI].X + poly[0].X) * ((double)poly[0].Y - poly[highI].Y); + for (int i = 1; i <= highI; ++i) + area += ((double)poly[i - 1].X + poly[i].X) * ((double)poly[i].Y - poly[i -1].Y); + return area / 2; + } + } + //------------------------------------------------------------------------------ + + double Area(OutRec outRec, bool UseFull64BitRange) + { + OutPt op = outRec.pts; + if (op == null) return 0; + if (UseFull64BitRange) + { + Int128 a = new Int128(0); + do + { + a += Int128.Int128Mul(op.pt.X + op.prev.pt.X, op.prev.pt.Y - op.pt.Y); + op = op.next; + } while (op != outRec.pts); + return a.ToDouble() / 2; + } + else + { + double a = 0; + do { + a = a + (op.pt.X + op.prev.pt.X) * (op.prev.pt.Y - op.pt.Y); + op = op.next; + } while (op != outRec.pts); + return a/2; + } + } + + //------------------------------------------------------------------------------ + // OffsetPolygon functions ... + //------------------------------------------------------------------------------ + + internal static Polygon BuildArc(IntPoint pt, double a1, double a2, double r) + { + Int64 steps = Math.Max(6, (int)(Math.Sqrt(Math.Abs(r)) * Math.Abs(a2 - a1))); + if (steps > 0x100) steps = 0x100; + int n = (int)steps; + Polygon result = new Polygon(n); + double da = (a2 - a1) / (n - 1); + double a = a1; + for (int i = 0; i < n; ++i) + { + result.Add(new IntPoint(pt.X + Round(Math.Cos(a) * r), pt.Y + Round(Math.Sin(a) * r))); + a += da; + } + return result; + } + //------------------------------------------------------------------------------ + + internal static DoublePoint GetUnitNormal(IntPoint pt1, IntPoint pt2) + { + double dx = (pt2.X - pt1.X); + double dy = (pt2.Y - pt1.Y); + if ((dx == 0) && (dy == 0)) return new DoublePoint(); + + double f = 1 * 1.0 / Math.Sqrt(dx * dx + dy * dy); + dx *= f; + dy *= f; + + return new DoublePoint(dy, -dx); + } + //------------------------------------------------------------------------------ + + internal class DoublePoint + { + public double X { get; set; } + public double Y { get; set; } + public DoublePoint(double x = 0, double y = 0) + { + this.X = x; this.Y = y; + } + }; + //------------------------------------------------------------------------------ + + private class PolyOffsetBuilder + { + private Polygons pts; + private Polygon currentPoly; + private List normals; + private double delta, m_R; + private int m_i, m_j, m_k; + private const int buffLength = 128; + + public PolyOffsetBuilder(Polygons pts, Polygons solution, double delta, + JoinType jointype, double MiterLimit = 2, bool AutoFix = true) + { + //precondtion: solution != pts + + if (delta == 0) + { + solution = pts; + return; + } + + this.pts = pts; + this.delta = delta; + + //AutoFix - fixes polygon orientation if necessary and removes + //duplicate vertices. Can be set false when you're sure that polygon + //orientation is correct and that there are no duplicate vertices. + if (AutoFix) + { + int Len = pts.Count, botI = 0; + while (botI < Len && pts[botI].Count == 0) botI++; + if (botI == Len) return; + + //botPt: used to find the lowermost (in inverted Y-axis) & leftmost point + //This point (on pts[botI]) must be on an outer polygon ring and if + //its orientation is false (counterclockwise) then assume all polygons + //need reversing ... + IntPoint botPt = pts[botI][0]; + for (int i = botI; i < Len; ++i) + { + if (pts[i].Count == 0) continue; + if (UpdateBotPt(pts[i][0], ref botPt)) botI = i; + for (int j = pts[i].Count -1; j > 0; j--) + { + if (PointsEqual(pts[i][j], pts[i][j -1])) + pts[i].RemoveAt(j); + else if (UpdateBotPt(pts[i][j], ref botPt)) + botI = i; + } + } + if (!Orientation(pts[botI])) + ReversePolygons(pts); + } + + if (MiterLimit <= 1) MiterLimit = 1; + double RMin = 2.0 / (MiterLimit*MiterLimit); + + normals = new List(); + + double deltaSq = delta*delta; + solution.Clear(); + solution.Capacity = pts.Count; + for (m_i = 0; m_i < pts.Count; m_i++) + { + int len = pts[m_i].Count; + if (len > 1 && pts[m_i][0].X == pts[m_i][len - 1].X && + pts[m_i][0].Y == pts[m_i][len - 1].Y) len--; + + if (len == 0 || (len < 3 && delta <= 0)) + continue; + else if (len == 1) + { + Polygon arc; + arc = BuildArc(pts[m_i][len - 1], 0, 2 * Math.PI, delta); + solution.Add(arc); + continue; + } + + //build normals ... + normals.Clear(); + normals.Capacity = len; + for (int j = 0; j < len -1; ++j) + normals.Add(GetUnitNormal(pts[m_i][j], pts[m_i][j+1])); + normals.Add(GetUnitNormal(pts[m_i][len - 1], pts[m_i][0])); + + currentPoly = new Polygon(); + m_k = len - 1; + for (m_j = 0; m_j < len; ++m_j) + { + switch (jointype) + { + case JoinType.jtMiter: + { + m_R = 1 + (normals[m_j].X*normals[m_k].X + + normals[m_j].Y*normals[m_k].Y); + if (m_R >= RMin) DoMiter(); else DoSquare(MiterLimit); + break; + } + case JoinType.jtRound: + DoRound(); + break; + case JoinType.jtSquare: + DoSquare(1); + break; + } + m_k = m_j; + } + solution.Add(currentPoly); + } + + //finally, clean up untidy corners ... + Clipper clpr = new Clipper(); + clpr.AddPolygons(solution, PolyType.ptSubject); + if (delta > 0) + { + clpr.Execute(ClipType.ctUnion, solution, PolyFillType.pftPositive, PolyFillType.pftPositive); + } + else + { + IntRect r = clpr.GetBounds(); + Polygon outer = new Polygon(4); + + outer.Add(new IntPoint(r.left - 10, r.bottom + 10)); + outer.Add(new IntPoint(r.right + 10, r.bottom + 10)); + outer.Add(new IntPoint(r.right + 10, r.top - 10)); + outer.Add(new IntPoint(r.left - 10, r.top - 10)); + + clpr.AddPolygon(outer, PolyType.ptSubject); + clpr.Execute(ClipType.ctUnion, solution, PolyFillType.pftNegative, PolyFillType.pftNegative); + if (solution.Count > 0) + { + solution.RemoveAt(0); + for (int i = 0; i < solution.Count; i++) + solution[i].Reverse(); + } + } + } + //------------------------------------------------------------------------------ + + internal bool UpdateBotPt(IntPoint pt, ref IntPoint botPt) + { + if (pt.Y > botPt.Y || (pt.Y == botPt.Y && pt.X < botPt.X)) + { + botPt = pt; + return true; + } + else return false; + } + //------------------------------------------------------------------------------ + + internal void AddPoint(IntPoint pt) + { + int len = currentPoly.Count; + if (len == currentPoly.Capacity) + currentPoly.Capacity = len + buffLength; + currentPoly.Add(pt); + } + //------------------------------------------------------------------------------ + + internal void DoSquare(double mul) + { + IntPoint pt1 = new IntPoint((Int64)Round(pts[m_i][m_j].X + normals[m_k].X * delta), + (Int64)Round(pts[m_i][m_j].Y + normals[m_k].Y * delta)); + IntPoint pt2 = new IntPoint((Int64)Round(pts[m_i][m_j].X + normals[m_j].X * delta), + (Int64)Round(pts[m_i][m_j].Y + normals[m_j].Y * delta)); + if ((normals[m_k].X * normals[m_j].Y - normals[m_j].X * normals[m_k].Y) * delta >= 0) + { + double a1 = Math.Atan2(normals[m_k].Y, normals[m_k].X); + double a2 = Math.Atan2(-normals[m_j].Y, -normals[m_j].X); + a1 = Math.Abs(a2 - a1); + if (a1 > Math.PI) a1 = Math.PI * 2 - a1; + double dx = Math.Tan((Math.PI - a1) / 4) * Math.Abs(delta * mul); + pt1 = new IntPoint((Int64)(pt1.X - normals[m_k].Y * dx), + (Int64)(pt1.Y + normals[m_k].X * dx)); + AddPoint(pt1); + pt2 = new IntPoint((Int64)(pt2.X + normals[m_j].Y * dx), + (Int64)(pt2.Y - normals[m_j].X * dx)); + AddPoint(pt2); + } + else + { + AddPoint(pt1); + AddPoint(pts[m_i][m_j]); + AddPoint(pt2); + } + } + //------------------------------------------------------------------------------ + + internal void DoMiter() + { + if ((normals[m_k].X * normals[m_j].Y - normals[m_j].X * normals[m_k].Y) * delta >= 0) + { + double q = delta / m_R; + AddPoint(new IntPoint((Int64)Round(pts[m_i][m_j].X + + (normals[m_k].X + normals[m_j].X) * q), + (Int64)Round(pts[m_i][m_j].Y + (normals[m_k].Y + normals[m_j].Y) * q))); + } + else + { + IntPoint pt1 = new IntPoint((Int64)Round(pts[m_i][m_j].X + normals[m_k].X * delta), + (Int64)Round(pts[m_i][m_j].Y + normals[m_k].Y * delta)); + IntPoint pt2 = new IntPoint((Int64)Round(pts[m_i][m_j].X + normals[m_j].X * delta), + (Int64)Round(pts[m_i][m_j].Y + normals[m_j].Y * delta)); + AddPoint(pt1); + AddPoint(pts[m_i][m_j]); + AddPoint(pt2); + } + } + //------------------------------------------------------------------------------ + + internal void DoRound() + { + IntPoint pt1 = new IntPoint(Round(pts[m_i][m_j].X + normals[m_k].X * delta), + Round(pts[m_i][m_j].Y + normals[m_k].Y * delta)); + IntPoint pt2 = new IntPoint(Round(pts[m_i][m_j].X + normals[m_j].X * delta), + Round(pts[m_i][m_j].Y + normals[m_j].Y * delta)); + AddPoint(pt1); + //round off reflex angles (ie > 180 deg) unless almost flat (ie < 10deg). + //cross product normals < 0 . angle > 180 deg. + //dot product normals == 1 . no angle + if ((normals[m_k].X * normals[m_j].Y - normals[m_j].X * normals[m_k].Y) * delta >= 0) + { + if ((normals[m_j].X * normals[m_k].X + normals[m_j].Y * normals[m_k].Y) < 0.985) + { + double a1 = Math.Atan2(normals[m_k].Y, normals[m_k].X); + double a2 = Math.Atan2(normals[m_j].Y, normals[m_j].X); + if (delta > 0 && a2 < a1) a2 += Math.PI * 2; + else if (delta < 0 && a2 > a1) a2 -= Math.PI * 2; + Polygon arc = BuildArc(pts[m_i][m_j], a1, a2, delta); + for (int m = 0; m < arc.Count; m++) + AddPoint(arc[m]); + } + } + else + AddPoint(pts[m_i][m_j]); + AddPoint(pt2); + } + //------------------------------------------------------------------------------ + + } //end PolyOffsetBuilder + //------------------------------------------------------------------------------ + + public static Polygons OffsetPolygons(Polygons poly, double delta, + JoinType jointype, double MiterLimit, bool AutoFix) + { + Polygons result = new Polygons(poly.Count); + new PolyOffsetBuilder(poly, result, delta, jointype, MiterLimit, AutoFix); + return result; + } + //------------------------------------------------------------------------------ + + public static Polygons OffsetPolygons(Polygons poly, double delta, + JoinType jointype, double MiterLimit) + { + Polygons result = new Polygons(poly.Count); + new PolyOffsetBuilder(poly, result, delta, jointype, MiterLimit, true); + return result; + } + //------------------------------------------------------------------------------ + + public static Polygons OffsetPolygons(Polygons poly, double delta, JoinType jointype) + { + Polygons result = new Polygons(poly.Count); + new PolyOffsetBuilder(poly, result, delta, jointype, 2.0, true); + return result; + } + //------------------------------------------------------------------------------ + + public static Polygons OffsetPolygons(Polygons poly, double delta) + { + Polygons result = new Polygons(poly.Count); + new PolyOffsetBuilder(poly, result, delta, JoinType.jtSquare, 2.0, true); + return result; + } + + //------------------------------------------------------------------------------ + // SimplifyPolygon functions ... + // Convert self-intersecting polygons into simple polygons + //------------------------------------------------------------------------------ + + public static Polygons SimplifyPolygon(Polygon poly, + PolyFillType fillType = PolyFillType.pftEvenOdd) + { + Polygons result = new Polygons(); + Clipper c = new Clipper(); + c.AddPolygon(poly, PolyType.ptSubject); + c.Execute(ClipType.ctUnion, result, fillType, fillType); + return result; + } + //------------------------------------------------------------------------------ + + public static Polygons SimplifyPolygons(Polygons polys, + PolyFillType fillType = PolyFillType.pftEvenOdd) + { + Polygons result = new Polygons(); + Clipper c = new Clipper(); + c.AddPolygons(polys, PolyType.ptSubject); + c.Execute(ClipType.ctUnion, result, fillType, fillType); + return result; + } + //------------------------------------------------------------------------------ + + public static Polygon CleanPolygon(Polygon poly, + double delta = 1.415) + { + //delta = proximity in units/pixels below which vertices + //will be stripped. Default ~= sqrt(2) so when adjacent + //vertices have both x & y coords within 1 unit, then + //the second vertex will be stripped. + int len = poly.Count; + if (len < 3) return null; + Polygon result = new Polygon(poly); + int d = (int)(delta * delta); + IntPoint p = poly[0]; + int j = 1; + for (int i = 1; i < len; i++) + { + if ((poly[i].X - p.X) * (poly[i].X - p.X) + + (poly[i].Y - p.Y) * (poly[i].Y - p.Y) <= d) + continue; + result[j] = poly[i]; + p = poly[i]; + j++; + } + p = poly[j - 1]; + if ((poly[0].X - p.X) * (poly[0].X - p.X) + + (poly[0].Y - p.Y) * (poly[0].Y - p.Y) <= d) + j--; + if (j < len) + result.RemoveRange(j, len - j); + return result; + } + //------------------------------------------------------------------------------ + + public static void PolyTreeToPolygons(PolyTree polytree, Polygons polygons) + { + polygons.Clear(); + polygons.Capacity = polytree.Total; + AddPolyNodeToPolygons(polytree, polygons); + } + //------------------------------------------------------------------------------ + + public static void AddPolyNodeToPolygons(PolyNode polynode, Polygons polygons) + { + if (polynode.Contour.Count > 0) + polygons.Add(polynode.Contour); + foreach (PolyNode pn in polynode.Childs) + AddPolyNodeToPolygons(pn, polygons); + } + //------------------------------------------------------------------------------ + + + } //end ClipperLib namespace + + class ClipperException : Exception + { + public ClipperException(string description) : base(description){} + } + //------------------------------------------------------------------------------ +} diff --git a/clipper/C#/clipper_library/clipper_library.csproj b/clipper/C#/clipper_library/clipper_library.csproj new file mode 100755 index 0000000..7810468 --- /dev/null +++ b/clipper/C#/clipper_library/clipper_library.csproj @@ -0,0 +1,54 @@ + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {9B062971-A88E-4A3D-B3C9-12B78D15FA66} + Library + Properties + ClipperLib + clipper_library + v4.0 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/clipper/Delphi/agg demo/about_agg.txt b/clipper/Delphi/agg demo/about_agg.txt new file mode 100755 index 0000000..1e231cb --- /dev/null +++ b/clipper/Delphi/agg demo/about_agg.txt @@ -0,0 +1 @@ +http://www.antigrain.com/ \ No newline at end of file diff --git a/clipper/Delphi/agg demo/agg_conv_clipper.pas b/clipper/Delphi/agg demo/agg_conv_clipper.pas new file mode 100755 index 0000000..e983339 --- /dev/null +++ b/clipper/Delphi/agg demo/agg_conv_clipper.pas @@ -0,0 +1,343 @@ +(******************************************************************************* +* * +* Author : Angus Johnson * +* Version : 1.2 * +* Date : 29 September 2011 * +* Website : http://www.angusj.com * +* Copyright : Angus Johnson 2010-2011 * +* * +* License: * +* Use, modification & distribution is subject to Boost Software License Ver 1. * +* http://www.boost.org/LICENSE_1_0.txt * +* * +*******************************************************************************) + +unit + agg_conv_clipper ; + +interface + +{$I agg_mode.inc } + +uses + types, + math, + agg_basics , + agg_array , + agg_vertex_source , + clipper; + +type + clipper_op_e = ( + clipper_or , + clipper_and , + clipper_xor , + clipper_a_minus_b , + clipper_b_minus_a + ); + + clipper_polyFillType = ( + clipper_evenOdd, + clipper_nonZero, + clipper_positive, + clipper_negative + ); + + status = (status_move_to, status_line_to, status_stop ); + + conv_clipper_ptr = ^conv_clipper; + conv_clipper = object(vertex_source) + m_src_a , + m_src_b : vertex_source_ptr; + + m_status : status; + m_vertex , + m_contour : int; + m_operation : clipper_op_e; + + m_scaling_factor: int; + + m_subjFillType, + m_clipFillType: clipper_polyFillType; + + m_poly_a , + m_poly_b , + m_result : TPolygons; + + m_vertex_accumulator: pod_deque; + clipper: TClipper; + + constructor Construct(a, b : vertex_source_ptr; + op : clipper_op_e = clipper_or; + subjFillType: clipper_polyFillType = clipper_evenOdd; + clipFillType: clipper_polyFillType = clipper_evenOdd; + scaling_factor: integer = 2); //default scaling == 2 decimal places + + destructor Destruct; virtual; + + procedure set_source1(source : vertex_source_ptr; + subjFillType: clipper_polyFillType = clipper_evenOdd); + procedure set_source2(source : vertex_source_ptr; + clipFillType: clipper_polyFillType = clipper_evenOdd); + + procedure operation(v : clipper_op_e ); + + // Vertex Source Interface + procedure rewind(path_id : unsigned ); virtual; + function vertex(x ,y : double_ptr ) : unsigned; virtual; + + function next_contour : boolean; + function next_vertex(x ,y : double_ptr ) : boolean; + procedure start_extracting; + procedure start_contour; + procedure add_vertex_ (x,y: double ); + procedure end_contour(var p: TPolygons); + procedure add(src : vertex_source_ptr; var p: TPolygons); + end; + +implementation + +function pft(cpft: clipper_polyFillType): TPolyFillType; +begin + case cpft of + clipper_evenOdd: result := pftEvenOdd; + clipper_nonZero: result := pftNonZero; + clipper_positive: result := pftPositive; + else {clipper_negative: } result := pftNegative; + end; +end; + +constructor conv_clipper.Construct(a, b: vertex_source_ptr; + op: clipper_op_e = clipper_or; + subjFillType: clipper_polyFillType = clipper_evenOdd; + clipFillType: clipper_polyFillType = clipper_evenOdd; + scaling_factor: integer = 2); //default scaling == 2 decimal places +begin + m_src_a := a; + m_src_b := b; + m_operation := op; + + m_scaling_factor := max(min(scaling_factor, 6),0); + m_scaling_factor := round(power(10, m_scaling_factor)); + + m_status := status_move_to; + m_vertex := -1; + m_contour := -1; + + m_poly_a := nil; + m_poly_b := nil; + m_result := nil; + m_vertex_accumulator.Construct (sizeof(TIntPoint), 8 ); + + m_subjFillType := subjFillType; + m_clipFillType := clipFillType; + clipper := TClipper.Create; +end; +//------------------------------------------------------------------------------ + +destructor conv_clipper.Destruct; +begin + clipper.Free; + m_vertex_accumulator.Destruct; +end; +//------------------------------------------------------------------------------ + +procedure conv_clipper.set_source1(source : vertex_source_ptr; + subjFillType: clipper_polyFillType = clipper_evenOdd); +begin + m_src_a := source; + m_subjFillType := subjFillType; +end; +//------------------------------------------------------------------------------ + +procedure conv_clipper.set_source2(source : vertex_source_ptr; + clipFillType: clipper_polyFillType = clipper_evenOdd); +begin + m_src_b := source; + m_clipFillType := clipFillType; +end; +//------------------------------------------------------------------------------ + +procedure conv_clipper.operation(v : clipper_op_e ); +begin + m_operation := v; +end; +//------------------------------------------------------------------------------ + +procedure conv_clipper.start_extracting; +begin + m_status := status_move_to; + m_contour := -1; + m_vertex := -1; +end; +//------------------------------------------------------------------------------ + +procedure conv_clipper.rewind(path_id : unsigned ); +begin + m_src_a.rewind(path_id ); + m_src_b.rewind(path_id ); + + add(m_src_a, m_poly_a ); + add(m_src_b, m_poly_b ); + m_result := nil; + + with clipper do + begin + clear; + case m_operation of + clipper_or : + begin + AddPolygons(m_poly_a, ptSubject); + AddPolygons(m_poly_b, ptClip); + Execute(ctUnion, m_result, pft(m_subjFillType), pft(m_clipFillType)); + end; + clipper_and : + begin + AddPolygons(m_poly_a, ptSubject); + AddPolygons(m_poly_b, ptClip); + Execute(ctIntersection, m_result, pft(m_subjFillType), pft(m_clipFillType)); + end; + clipper_xor : + begin + AddPolygons(m_poly_a, ptSubject); + AddPolygons(m_poly_b, ptClip); + Execute(ctXor, m_result, pft(m_subjFillType), pft(m_clipFillType)); + end; + clipper_a_minus_b : + begin + AddPolygons(m_poly_a, ptSubject); + AddPolygons(m_poly_b, ptClip); + Execute(ctDifference, m_result, pft(m_subjFillType), pft(m_clipFillType)); + end; + clipper_b_minus_a : + begin + AddPolygons(m_poly_b, ptSubject); + AddPolygons(m_poly_a, ptClip); + Execute(ctDifference, m_result, pft(m_subjFillType), pft(m_clipFillType)); + end; + end; + end; + start_extracting; +end; +//------------------------------------------------------------------------------ + +procedure conv_clipper.start_contour; +begin + m_vertex_accumulator.remove_all; +end; +//------------------------------------------------------------------------------ + +procedure conv_clipper.end_contour(var p: TPolygons); +var + i, len: integer; +begin + if m_vertex_accumulator.size < 3 then exit; + len := length(p); + setLength(p, len+1); + setLength(p[len], m_vertex_accumulator.size); + for i := 0 to m_vertex_accumulator.size -1 do + p[len][i] := PIntPoint(m_vertex_accumulator.array_operator(i))^; +end; +//------------------------------------------------------------------------------ + +procedure conv_clipper.add_vertex_ (x,y: double); +var + v : TIntPoint; +begin + v.x := round(x * m_scaling_factor); + v.y := round(y * m_scaling_factor); + m_vertex_accumulator.add(@v); +end; +//------------------------------------------------------------------------------ + +function conv_clipper.next_contour; +begin + result:=false; + inc(m_contour ); + if m_contour >= length(m_result) then exit; + m_vertex:=-1; + result:=true; +end; +//------------------------------------------------------------------------------ + +function conv_clipper.next_vertex(x ,y : double_ptr ) : boolean; +begin + result:=false; + inc(m_vertex); + if m_vertex >= length(m_result[m_contour]) then exit; + x^ := m_result[m_contour][m_vertex].X / m_scaling_factor; + y^ := m_result[m_contour][m_vertex].Y / m_scaling_factor; + result := true; +end; +//------------------------------------------------------------------------------ + +function conv_clipper.vertex(x ,y : double_ptr ) : unsigned; +begin + if m_status = status_move_to then + begin + if next_contour then + begin + if next_vertex(x ,y ) then + begin + m_status:=status_line_to; + result := path_cmd_move_to; + end else + begin + m_status := status_stop; + result := path_cmd_end_poly or path_flags_close; + end; + end else + result := path_cmd_stop; + end else + begin + if next_vertex(x ,y ) then + begin + result := path_cmd_line_to; + end else + begin + m_status := status_move_to; + result := path_cmd_end_poly or path_flags_close; + end; + end; +end; +//------------------------------------------------------------------------------ + +procedure conv_clipper.add(src : vertex_source_ptr; var p: TPolygons); +var + cmd: unsigned; + x, y, start_x ,start_y: double; + starting_first_line : boolean; +begin + start_x := 0.0; + start_y := 0.0; + starting_first_line := true; + p := nil; + + cmd := src.vertex(@x, @y ); + while not is_stop(cmd) do + begin + if is_vertex(cmd) then + begin + if is_move_to(cmd ) then + begin + if not starting_first_line then end_contour(p); + start_contour; + start_x := x; + start_y := y; + end; + add_vertex_(x ,y ); + starting_first_line := false; + end + else if is_end_poly(cmd ) then + begin + if not starting_first_line and is_closed(cmd ) then + add_vertex_(start_x ,start_y ); + end; + cmd := src.vertex(@x ,@y ); + end; + end_contour(p); +end; +//------------------------------------------------------------------------------ + +end. + diff --git a/clipper/Delphi/agg demo/clipper_test.dpr b/clipper/Delphi/agg demo/clipper_test.dpr new file mode 100755 index 0000000..ee60a42 --- /dev/null +++ b/clipper/Delphi/agg demo/clipper_test.dpr @@ -0,0 +1,975 @@ +{target:win} +// +// AggPas 2.4 RM3 Demo application +// Note: Press F1 key on run to see more info about this demo +// +// Paths: src;src\ctrl;src\svg;src\util;src\platform\win;expat-wrap +// +program + clipper_test ; + +uses + SysUtils , + + agg_basics , + agg_platform_support , + + agg_color , + agg_pixfmt , + agg_pixfmt_rgb , + + agg_ctrl , + agg_slider_ctrl , + agg_cbox_ctrl , + agg_rbox_ctrl , + + agg_rendering_buffer , + agg_renderer_base , + agg_renderer_scanline , + agg_renderer_primitives , + agg_rasterizer_scanline_aa , + agg_scanline , + agg_scanline_u , + agg_scanline_p , + agg_render_scanlines , + + agg_math_stroke , + agg_path_storage , + agg_span_solid , + agg_conv_curve , + agg_conv_stroke , + agg_conv_transform , + agg_conv_clip_polygon , + agg_gsv_text , + agg_trans_affine , + agg_vertex_source , + + make_gb_poly_ , + make_arrows_, + + agg_conv_clipper, + clipper in '../clipper.pas'; + +{$I agg_mode.inc } + +const + flip_y = true; + +type + spiral = object(vertex_source ) + m_x , + m_y , + m_r1 , + m_r2 , + m_step , + + m_start_angle , + + m_angle , + m_curr_r , + m_da , + m_dr : double; + m_start : boolean; + + constructor Construct(x ,y ,r1 ,r2 ,step : double; start_angle : double = 0 ); + + procedure rewind(path_id : unsigned ); virtual; + function vertex(x ,y : double_ptr ) : unsigned; virtual; + + end; + + conv_poly_counter = object(vertex_source ) + m_src : vertex_source_ptr; + + m_contours , + m_points : unsigned; + + constructor Construct(src : vertex_source_ptr ); + + procedure rewind(path_id : unsigned ); virtual; + function vertex(x ,y : double_ptr ) : unsigned; virtual; + + end; + + the_application = object(platform_support ) + m_polygons , + m_operation : rbox_ctrl; + + m_x , + m_y : double; + + constructor Construct(format_ : pix_format_e; flip_y_ : boolean ); + destructor Destruct; + + procedure perform_rendering( + sl : scanline_ptr; + ras : rasterizer_scanline_ptr; + ren : renderer_scanline_ptr; + clipper : conv_clipper_ptr ); + + function render_clipper(sl : scanline_ptr; ras : rasterizer_scanline_ptr ) : unsigned; + + procedure on_init; virtual; + procedure on_draw; virtual; + + procedure on_mouse_move (x ,y : int; flags : unsigned ); virtual; + procedure on_mouse_button_down(x ,y : int; flags : unsigned ); virtual; + + procedure on_key(x ,y : int; key ,flags : unsigned ); virtual; + + procedure stress_test; + + end; + +{ CONSTRUCT } +constructor spiral.Construct; +begin + m_x :=x; + m_y :=y; + m_r1:=r1; + m_r2:=r2; + + m_step :=step; + m_start_angle:=start_angle; + m_angle :=start_angle; + + m_da:=deg2rad(4.0 ); + m_dr:=m_step / 90.0; + +end; + +{ REWIND } +procedure spiral.rewind; +begin + m_angle :=m_start_angle; + m_curr_r:=m_r1; + m_start :=true; + +end; + +{ VERTEX } +function spiral.vertex; +begin + if m_curr_r > m_r2 then + begin + result:=path_cmd_stop; + + exit; + + end; + + x^:=m_x + Cos(m_angle ) * m_curr_r; + y^:=m_y + Sin(m_angle ) * m_curr_r; + + m_curr_r:=m_curr_r + m_dr; + m_angle :=m_angle + m_da; + + if m_start then + begin + m_start:=false; + + result:=path_cmd_move_to; + + end + else + result:=path_cmd_line_to; + +end; + +{ CONSTRUCT } +constructor conv_poly_counter.Construct; +begin + m_src:=src; + + m_contours:=0; + m_points :=0; + +end; + +{ REWIND } +procedure conv_poly_counter.rewind; +begin + m_contours:=0; + m_points :=0; + + m_src.rewind(path_id ); + +end; + +{ VERTEX } +function conv_poly_counter.vertex; +var + cmd : unsigned; + +begin + cmd:=m_src.vertex(x ,y ); + + if is_vertex(cmd ) then + inc(m_points ); + + if is_move_to(cmd ) then + inc(m_contours ); + + result:=cmd; + +end; + +{ CONSTRUCT } +constructor the_application.Construct; +begin + inherited Construct(format_ ,flip_y_ ); + + m_polygons.Construct (5.0 ,5.0 ,5.0 + 205.0 ,110.0 ,not flip_y_ ); + m_operation.Construct(555.0 ,5.0 ,555.0 + 80.0 ,130.0 ,not flip_y_ ); + + m_operation.add_item ('None' ); + m_operation.add_item ('OR' ); + m_operation.add_item ('AND' ); + m_operation.add_item ('XOR' ); + m_operation.add_item ('A-B' ); + m_operation.add_item ('B-A' ); + m_operation.cur_item_(2 ); + + add_ctrl(@m_operation ); + + m_polygons.add_item ('Two Simple Paths' ); + m_polygons.add_item ('Closed Stroke' ); + m_polygons.add_item ('Great Britain and Arrows' ); + m_polygons.add_item ('Great Britain and Spiral' ); + m_polygons.add_item ('Spiral and Glyph' ); + m_polygons.cur_item_(3 ); + + add_ctrl(@m_polygons ); + +end; + +{ DESTRUCT } +destructor the_application.Destruct; +begin + inherited Destruct; + + m_polygons.Destruct; + m_operation.Destruct; + +end; + +{ PERFORM_RENDERING } +procedure the_application.perform_rendering; +var + counter : conv_poly_counter; + + t1 ,t2 ,x ,y : double; + + cmd : unsigned; + buf : array[0..99 ] of char8; + + rgba : aggclr; + txt : gsv_text; + + txt_stroke : conv_stroke; + +begin + if m_operation._cur_item > 0 then + begin + // Render clipped polygon + ras.reset; + + case m_operation._cur_item of + 1: clipper.operation(clipper_or ); + 2: clipper.operation(clipper_and ); + 3: clipper.operation(clipper_xor ); + 4: clipper.operation(clipper_a_minus_b ); + 5: clipper.operation(clipper_b_minus_a ); + + end; + + counter.Construct(clipper); + + start_timer; + counter.rewind(0); /////////////////////////this is where it all happens! + t1:=elapsed_time; + + ras.reset; + start_timer; + + cmd:=counter.vertex(@x ,@y ); + + while not is_stop(cmd ) do + begin + ras.add_vertex(x ,y ,cmd ); + + cmd:=counter.vertex(@x ,@y ); + + end; + rgba.ConstrDbl (0.5 ,0.75 ,0.5 ,1.0 ); + ren.color_ (@rgba ); + render_scanlines(ras ,sl ,ren ); + + t2:=elapsed_time; + + // Render information text + sprintf(@buf[0 ] ,'Contours: %d ' ,counter.m_contours ); + sprintf(@buf[StrLen(@buf ) ] ,'Points: %d' ,counter.m_points ); + + txt.Construct; + txt_stroke.Construct(@txt ); + + txt_stroke.width_ (1.5 ); + txt_stroke.line_cap_(round_cap ); + txt.size_ (10.0 ); + txt.start_point_ (250 ,5 ); + txt.text_ (@buf[0 ] ); + + ras.add_path (@txt_stroke ); + rgba.ConstrDbl (0.0 ,0.0 ,0.0 ); + ren.color_ (@rgba ); + render_scanlines(ras ,sl ,ren ); + + sprintf(@buf[0 ] ,'Clipper=%.3fms ' ,t1 ); + sprintf(@buf[StrLen(buf ) ] ,'Render=%.3fms' ,t2 ); + + txt.start_point_(250 ,20 ); + txt.text_ (@buf[0 ] ); + + ras.add_path (@txt_stroke ); + rgba.ConstrDbl (0.0 ,0.0 ,0.0 ); + ren.color_ (@rgba ); + render_scanlines(ras ,sl ,ren ); + + // Free + txt.Destruct; + txt_stroke.Destruct; + + end; + +end; + +{ RENDER_CLIPPER } +function the_application.render_clipper; +var + pf : pixel_formats; + rb : renderer_base; + + ren : renderer_scanline_aa_solid; + ps1 , + ps2 , + + gb_poly , + arrows , + glyph : path_storage; + + rgba : aggclr; + x ,y : double; + + mtx1 , + mtx2 , + mtx : trans_affine; + tat : trans_affine_translation; + tas : trans_affine_scaling; + + stroke, + stroke_stroke, + stroke_gb_poly : conv_stroke; + + trans , + trans_gb_poly , + trans_arrows : conv_transform; + + curve : conv_curve; + + sp : spiral; + clipper : conv_clipper; + +begin + pixfmt_bgr24(pf ,rbuf_window ); + + rb.Construct (@pf ); + ren.Construct(@rb ); + + case m_polygons._cur_item of + 0 : // Two simple paths + begin + ps1.Construct; + ps2.Construct; + + clipper.Construct(@ps1, @ps2, clipper_or, + clipper_nonZero, clipper_nonZero); + + x:=m_x - _initial_width / 2 + 100; + y:=m_y - _initial_height / 2 + 100; + + ps1.move_to(x + 140 ,y + 145 ); + ps1.line_to(x + 225 ,y + 44 ); + //ps1.line_to(x + 296 ,y + 219 ); + ps1.line_to(x + 396 ,y + 319 ); + ps1.close_polygon; + + ps1.line_to(x + 226 ,y + 289 ); + ps1.line_to(x + 82 ,y + 292 ); + + ps1.move_to(x + 220 ,y + 222 ); + ps1.line_to(x + 363 ,y + 249 ); + ps1.line_to(x + 265 ,y + 331 ); + + ps1.move_to(x + 242 ,y + 243 ); + ps1.line_to(x + 268 ,y + 309 ); + ps1.line_to(x + 325 ,y + 261 ); + + ps1.move_to(x + 259 ,y + 259 ); + ps1.line_to(x + 273 ,y + 288 ); + ps1.line_to(x + 298 ,y + 266 ); + + ps2.move_to(100 + 32 ,100 + 77 ); + ps2.line_to(100 + 473 ,100 + 263 ); + ps2.line_to(100 + 351 ,100 + 290 ); + ps2.line_to(100 + 354 ,100 + 374 ); + + ras.reset; + ras.add_path (@ps1 ); + rgba.ConstrDbl (0 ,0 ,0 ,0.1 ); + ren.color_ (@rgba ); + render_scanlines(ras ,sl ,@ren ); + + ras.reset; + ras.add_path (@ps2 ); + rgba.ConstrDbl (0.5 ,0.5 ,0 ,0.1 ); + ren.color_ (@rgba ); + render_scanlines(ras ,sl ,@ren ); + + perform_rendering(sl ,ras ,@ren ,@clipper ); + + ps1.Destruct; + ps2.Destruct; + clipper.Destruct; + + end; + + 1 : // Closed stroke + begin + ps1.Construct; + ps2.Construct; + stroke.Construct(@ps2 ); + stroke.width_ (10.0 ); + + clipper.Construct(@ps1 ,@stroke, clipper_or, + clipper_nonZero, clipper_nonZero); + + x:=m_x - _initial_width / 2 + 100; + y:=m_y - _initial_height / 2 + 100; + + ps1.move_to(x + 140 ,y + 145 ); + ps1.line_to(x + 225 ,y + 44 ); + ps1.line_to(x + 296 ,y + 219 ); + ps1.close_polygon; + + ps1.line_to(x + 226 ,y + 289 ); + ps1.line_to(x + 82 ,y + 292 ); + + ps1.move_to(x + 220 - 50 ,y + 222 ); + ps1.line_to(x + 265 - 50 ,y + 331 ); + ps1.line_to(x + 363 - 50 ,y + 249 ); + ps1.close_polygon(path_flags_ccw ); + + ps2.move_to(100 + 32 ,100 + 77 ); + ps2.line_to(100 + 473 ,100 + 263 ); + ps2.line_to(100 + 351 ,100 + 290 ); + ps2.line_to(100 + 354 ,100 + 374 ); + ps2.close_polygon; + + ras.reset; + ras.add_path (@ps1 ); + rgba.ConstrDbl (0 ,0 ,0 ,0.1 ); + ren.color_ (@rgba ); + render_scanlines(ras ,sl ,@ren ); + + ras.reset; + ras.add_path (@stroke ); + rgba.ConstrDbl (0.5 ,0.5 ,0 ,0.1 ); + ren.color_ (@rgba ); + render_scanlines(ras ,sl ,@ren ); + + perform_rendering(sl ,ras ,@ren ,@clipper ); + + ps1.Destruct; + ps2.Destruct; + stroke.Destruct; + clipper.Destruct; + + end; + + 2 : // Great Britain and Arrows + begin + gb_poly.Construct; + arrows.Construct; + + make_gb_poly(@gb_poly ); + make_arrows (@arrows ); + + mtx1.Construct; + mtx2.Construct; + tat.Construct(-1150 ,-1150 ); + tas.Construct(2.0 ); + mtx1.multiply(@tat ); + mtx1.multiply(@tas ); + + mtx2:=mtx1; + + tat.Construct(m_x - _initial_width / 2 ,m_y - _initial_height / 2 ); + + mtx2.multiply(@tat ); + + trans_gb_poly.Construct(@gb_poly ,@mtx1 ); + trans_arrows.Construct (@arrows ,@mtx2 ); + + clipper.Construct(@trans_gb_poly ,@trans_arrows, + clipper_or, clipper_nonZero, clipper_nonZero); + + ras.add_path (@trans_gb_poly ); + rgba.ConstrDbl (0.5 ,0.5 ,0 ,0.1 ); + ren.color_ (@rgba ); + render_scanlines(ras ,sl ,@ren ); + + stroke_gb_poly.Construct(@trans_gb_poly ); + stroke_gb_poly.width_ (0.1); + ras.add_path (@stroke_gb_poly ); + rgba.ConstrDbl (0 ,0 ,0 ); + ren.color_ (@rgba ); + render_scanlines (ras ,sl ,@ren ); + + ras.add_path (@trans_arrows ); + rgba.ConstrDbl (0.0 ,0.5 ,0.5 ,0.1 ); + ren.color_ (@rgba ); + render_scanlines(ras ,sl ,@ren ); + + perform_rendering(sl ,ras ,@ren ,@clipper ); + + gb_poly.Destruct; + arrows.Destruct; + stroke_gb_poly.Destruct; + clipper.Destruct; + + end; + + 3 : // Great Britain and a Spiral + begin + sp.Construct (m_x ,m_y ,10 ,150 ,30 ,0.0 ); + stroke.Construct(@sp ); + stroke.width_ (15.0 ); + + gb_poly.Construct; + make_gb_poly(@gb_poly ); + + mtx.Construct; + tat.Construct(-1150 ,-1150 ); + tas.Construct(2.0 ); + mtx.multiply(@tat ); + mtx.multiply(@tas ); + + trans_gb_poly.Construct(@gb_poly ,@mtx ); + + clipper.Construct(@trans_gb_poly ,@stroke, + clipper_or, clipper_nonZero, clipper_nonZero); + + ras.add_path (@trans_gb_poly ); + rgba.ConstrDbl (0.5 ,0.5 ,0 ,0.1 ); + ren.color_ (@rgba ); + render_scanlines(ras ,sl ,@ren ); + + stroke_gb_poly.Construct(@trans_gb_poly ); + stroke_gb_poly.width_ (0.2 ); + ras.add_path (@stroke_gb_poly ); + rgba.ConstrDbl (0 ,0 ,0 ); + ren.color_ (@rgba ); + render_scanlines (ras ,sl ,@ren ); + + ras.add_path (@stroke ); + rgba.ConstrDbl (0.0 ,0.5 ,0.5 ,0.1 ); + ren.color_ (@rgba ); + render_scanlines(ras ,sl ,@ren ); + + stroke_stroke.Construct(@stroke); + stroke_stroke.width_(0.1); + ras.add_path(@stroke_stroke ); + rgba.ConstrDbl (0 ,0 ,0 ); + ren.color_ (@rgba ); + render_scanlines (ras ,sl ,@ren ); + + perform_rendering(sl ,ras ,@ren ,@clipper ); + + stroke.Destruct; + stroke_stroke.Destruct; + gb_poly.Destruct; + stroke_gb_poly.Destruct; + clipper.Destruct; + + end; + + 4 : // Spiral and glyph + begin + sp.Construct (m_x ,m_y ,10 ,150 ,30 ,0.0 ); + stroke.Construct(@sp ); + stroke.width_ (15.0 ); + + glyph.Construct; + glyph.move_to(28.47 ,6.45 ); + glyph.curve3 (21.58 ,1.12 ,19.82 ,0.29 ); + glyph.curve3 (17.19 ,-0.93 ,14.21 ,-0.93 ); + glyph.curve3 (9.57 ,-0.93 ,6.57 ,2.25 ); + glyph.curve3 (3.56 ,5.42 ,3.56 ,10.60 ); + glyph.curve3 (3.56 ,13.87 ,5.03 ,16.26 ); + glyph.curve3 (7.03 ,19.58 ,11.99 ,22.51 ); + glyph.curve3 (16.94 ,25.44 ,28.47 ,29.64 ); + glyph.line_to(28.47 ,31.40 ); + glyph.curve3 (28.47 ,38.09 ,26.34 ,40.58 ); + glyph.curve3 (24.22 ,43.07 ,20.17 ,43.07 ); + glyph.curve3 (17.09 ,43.07 ,15.28 ,41.41 ); + glyph.curve3 (13.43 ,39.75 ,13.43 ,37.60 ); + glyph.line_to(13.53 ,34.77 ); + glyph.curve3 (13.53 ,32.52 ,12.38 ,31.30 ); + glyph.curve3 (11.23 ,30.08 ,9.38 ,30.08 ); + glyph.curve3 (7.57 ,30.08 ,6.42 ,31.35 ); + glyph.curve3 (5.27 ,32.62 ,5.27 ,34.81 ); + glyph.curve3 (5.27 ,39.01 ,9.57 ,42.53 ); + glyph.curve3 (13.87 ,46.04 ,21.63 ,46.04 ); + glyph.curve3 (27.59 ,46.04 ,31.40 ,44.04 ); + glyph.curve3 (34.28 ,42.53 ,35.64 ,39.31 ); + glyph.curve3 (36.52 ,37.21 ,36.52 ,30.71 ); + glyph.line_to(36.52 ,15.53 ); + glyph.curve3 (36.52 ,9.13 ,36.77 ,7.69 ); + glyph.curve3 (37.01 ,6.25 ,37.57 ,5.76 ); + glyph.curve3 (38.13 ,5.27 ,38.87 ,5.27 ); + glyph.curve3 (39.65 ,5.27 ,40.23 ,5.62 ); + glyph.curve3 (41.26 ,6.25 ,44.19 ,9.18 ); + glyph.line_to(44.19 ,6.45 ); + glyph.curve3 (38.72 ,-0.88 ,33.74 ,-0.88 ); + glyph.curve3 (31.35 ,-0.88 ,29.93 ,0.78 ); + glyph.curve3 (28.52 ,2.44 ,28.47 ,6.45 ); + glyph.close_polygon; + + glyph.move_to(28.47 ,9.62 ); + glyph.line_to(28.47 ,26.66 ); + glyph.curve3 (21.09 ,23.73 ,18.95 ,22.51 ); + glyph.curve3 (15.09 ,20.36 ,13.43 ,18.02 ); + glyph.curve3 (11.77 ,15.67 ,11.77 ,12.89 ); + glyph.curve3 (11.77 ,9.38 ,13.87 ,7.06 ); + glyph.curve3 (15.97 ,4.74 ,18.70 ,4.74 ); + glyph.curve3 (22.41 ,4.74 ,28.47 ,9.62 ); + glyph.close_polygon; + + mtx.Construct; + tas.Construct(4.0 ); + tat.Construct(220 ,200 ); + mtx.multiply(@tas ); + mtx.multiply(@tat ); + + trans.Construct(@glyph ,@mtx ); + curve.Construct(@trans ); + + clipper.Construct(@stroke ,@curve, clipper_or, + clipper_nonZero, clipper_nonZero); + + ras.reset; + ras.add_path (@stroke ); + rgba.ConstrDbl (0 ,0 ,0 ,0.1 ); + ren.color_ (@rgba ); + render_scanlines(ras ,sl ,@ren ); + + ras.reset; + ras.add_path (@curve ); + rgba.ConstrDbl (0.5 ,0.5 ,0 ,0.1 ); + ren.color_ (@rgba ); + render_scanlines(ras ,sl ,@ren ); + + perform_rendering(sl ,ras ,@ren ,@clipper ); + + stroke.Destruct; + glyph.Destruct; + curve.Destruct; + clipper.Destruct; + + end; + + end; + + result:=0; + +end; + +{ ON_INIT } +procedure the_application.on_init; +begin + m_x:=_width / 2.0; + m_y:=_height / 2.0; + +end; + +{ ON_DRAW } +procedure the_application.on_draw; +var + pf : pixel_formats; + + rgba : aggclr; + + ren_base : renderer_base; + ren_solid : renderer_scanline_aa_solid; + + sl : scanline_u8; + ras : rasterizer_scanline_aa; + +begin +// Initialize structures + pixfmt_bgr24(pf ,rbuf_window ); + + ren_base.Construct (@pf ); + ren_solid.Construct(@ren_base ); + + rgba.ConstrDbl(1 ,1 ,1 ); + ren_base.clear(@rgba ); + + sl.Construct; + ras.Construct; + +// Render + render_clipper(@sl ,@ras ); + +// Render the controls + render_ctrl(@ras ,@sl ,@ren_solid ,@m_polygons ); + render_ctrl(@ras ,@sl ,@ren_solid ,@m_operation ); + +// Free AGG resources + sl.Destruct; + ras.Destruct; + +end; + +{ ON_MOUSE_MOVE } +procedure the_application.on_mouse_move; +begin + if flags and mouse_left <> 0 then + begin + m_x:=x; + m_y:=y; + + force_redraw; + + end; + +end; + +{ ON_MOUSE_BUTTON_DOWN } +procedure the_application.on_mouse_button_down; +var + buf : array[0..99 ] of char8; + +begin + if flags and mouse_left <> 0 then + begin + m_x:=x; + m_y:=y; + + force_redraw; + + end; + + if flags and mouse_right <> 0 then + begin + sprintf (@buf[0 ] ,'%d ' ,x ); + sprintf (@buf[StrLen(@buf ) ] ,'%d' ,y ); + message_(@buf[0 ] ); + + end; + +end; + +{ ON_KEY } +procedure the_application.on_key; +begin + case key of + byte('t' ) , + byte('T' ) : + stress_test; + + end; + + if key = key_f1 then + message_( + '''Clipper'' by Angus Johnson is the most reliable implementation of the '#13 + + 'polygon boolean algebra. It implements Bala R. Vatti''s algorithm of arbitrary '#13 + + 'polygon clipping and allows you to calculate the Union, Intersection, Difference, '#13 + + 'and Exclusive OR between two poly-polygons (i.e., polygonal areas consisted of '#13 + + 'several contours). AGG has a simple wrapper class that can be used in the '#13 + + 'coordinate conversion pipeline. Note that all operations are done '#13 + + 'in the vectorial representation of the contours before rendering.'#13#13 + + 'How to play with:'#13#13 + + 'You can drag one polygon with the left mouse button pressed.'#13 + + 'Press the "T" key to perform the random polygon clipping stress testing.'#13 + + '(may take some time)' + + #13#13'Note: F2 key saves current "screenshot" file in this demo''s directory. ' ); + +end; + +{ STRESS_TEST } +// Stress-test. +// Works quite well on random polygons, no crashes, no memory leaks! +// Sometimes takes long to produce the result +procedure the_application.stress_test; + +{ random } +function random(min ,max : double ) : double; +var + r : int; + +begin + r:=(System.Random($7fff ) shl 15 ) or System.Random($7fff ); + + result:=$FFFFFFF + 1; + result:=((r and $FFFFFFF) / result ) * (max - min ) + min; + +end; + +var + sl : scanline_u8; + ras : rasterizer_scanline_aa; + + pf : pixel_formats; + + ren_base : renderer_base; + ren_solid : renderer_scanline_aa_solid; + + ps1 ,ps2 : path_storage; + + clipper : conv_clipper; + rgba : aggclr; + + i ,num_poly1 ,num_poly2 ,j ,k ,np ,op: unsigned; + + buf : array[0..99 ] of char8; + txt : gsv_text; + + txt_stroke : conv_stroke; + +begin + sl.Construct; + ras.Construct; + + pixfmt_bgr24(pf ,rbuf_window ); + + ren_base.Construct (@pf ); + ren_solid.Construct(@ren_base ); + + ps1.Construct; + ps2.Construct; + clipper.Construct(@ps1 ,@ps2, clipper_or, clipper_nonZero, clipper_nonZero); + + txt.Construct; + txt_stroke.Construct(@txt ); + + txt_stroke.width_ (1.5 ); + txt_stroke.line_cap_(round_cap ); + txt.size_ (10.0 ); + txt.start_point_ (5 ,5 ); + + for i:=0 to 999 do + begin + rgba.ConstrDbl(1 ,1 ,1 ); + ren_base.clear(@rgba ); + + num_poly1:=System.Random($7fff ) mod 10 + 1; + num_poly2:=System.Random($7fff ) mod 10 + 1; + + ps1.remove_all; + ps2.remove_all; + + for j:=0 to num_poly1 - 1 do + begin + ps1.move_to(random(0 ,_width ) ,random(0 ,_height ) ); + + np:=System.Random($7fff ) mod 20 + 2; + + for k:=0 to np - 1 do + ps1.line_to(random(0 ,_width ) ,random(0 ,_height ) ); + + end; + + for j:=0 to num_poly2 - 1 do + begin + ps2.move_to(random(0 ,_width ) ,random(0 ,_height ) ); + + np:=System.Random($7fff ) mod 20 + 2; + + for k:=0 to np - 1 do + ps2.line_to(random(0 ,_width ) ,random(0 ,_height ) ); + + end; + + op:=System.Random($7fff ) mod 5; + + case op of + 0 : + clipper.operation(clipper_or ); + + 1 : + clipper.operation(clipper_and ); + + 2 : + clipper.operation(clipper_xor ); + + 3 : + clipper.operation(clipper_a_minus_b ); + + else + clipper.operation(clipper_b_minus_a ); + + end; + + // Clipping result + ras.add_path (@clipper ); + rgba.ConstrDbl (0.5 ,0.0 ,0 ,0.5 ); + ren_solid.color_(@rgba ); + render_scanlines(@ras ,@sl ,@ren_solid ); + + // Counter display + sprintf (@buf[0 ] ,'%d / 1000' ,i + 1 ); + txt.text_(@buf[0 ] ); + + txt.start_point_(5 ,5 ); + + ras.add_path (@txt_stroke ); + rgba.ConstrDbl (0.0 ,0.0 ,0.0 ); + ren_solid.color_(@rgba ); + render_scanlines(@ras ,@sl ,@ren_solid ); + + // Refresh + update_window; + + end; + + message_('Done' ); + + ps1.Destruct; + ps2.Destruct; + clipper.Destruct; + + sl.Destruct; + ras.Destruct; + + txt.Destruct; + txt_stroke.Destruct; + + force_redraw; + +end; + +VAR + app : the_application; + +BEGIN + app.Construct(pix_format_bgr24 ,flip_y ); + app.caption_ ('AGG Example. Polygon Clipping with Clipper (F1-Help)' ); + + if app.init(640 ,520 ,window_resize ) then + app.run; + + app.Destruct; + +END. \ No newline at end of file diff --git a/clipper/Delphi/agg demo/clipper_test.exe b/clipper/Delphi/agg demo/clipper_test.exe new file mode 100755 index 0000000000000000000000000000000000000000..962804d3867b7259a0dc456add20831478570e12 GIT binary patch literal 247296 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 qpA9UJOd%_eAVkd~lx}MgVx|P(Tn^$dWMos4+C! 0 then + ppa := OffsetPolygons(ppa, offsetVal*power(10,scaling), jtRound); + PointArrayToCairo(ppa, cr, scaling); + cairo_set_source_rgba(cr, 1, 1, 0, 1); + cairo_fill_preserve(cr); + cairo_set_source_rgba(cr, 0, 0, 0, 1); + cairo_stroke(cr); + + GetClientRect(GetActiveWindow, rec); + cairo_set_font_size(cr,11); + text := 'Polygon offset = '+ inttostr(offsetVal) + '. (Adjust with arrow keys)'; + cairo_text_extents(cr, pchar(text), @extent); + cairo_move_to(cr, 10, rec.Bottom - extent.height); + cairo_show_text(cr, pchar(text)); + + //clean up ... + cairo_surface_finish(surface); +end; +//------------------------------------------------------------------------------ + +function WndProc(Wnd : HWND; message : UINT; + wParam : Integer; lParam: Integer) : Integer; stdcall; +var + dc: HDC; + ps: PAINTSTRUCT; +begin + case message of + WM_PAINT: + begin + dc := BeginPaint(Wnd, ps); + with bmp do BitBlt(dc,0,0,Width,Height,canvas.Handle,0,0,SRCCOPY); + EndPaint(Wnd, ps); + result := 0; + end; + + WM_CREATE: + begin + bmp := graphics.TBitmap.Create; + result := DefWindowProc(Wnd, message, wParam, lParam); + end; + WM_DESTROY: + begin + bmp.Free; + PostQuitMessage(0); + result := 0; + end; + + WM_SIZE: + begin + bmp.Width := loword(lparam); + bmp.Height := hiword(lparam); + PaintBitmap; + result := DefWindowProc(Wnd, message, wParam, lParam); + end; + + WM_KEYDOWN: + case wParam of + VK_ESCAPE: + begin + PostQuitMessage(0); + result := 0; + end; + VK_RIGHT, VK_UP: + begin + if offsetVal < 20 then inc(offsetVal); + PaintBitmap; + InvalidateRect(0, nil, false); + result := 0; + end; + VK_LEFT, VK_DOWN: + begin + if offsetVal > -20 then dec(offsetVal); + PaintBitmap; + InvalidateRect(0, nil, false); + result := 0; + end; + else + result := DefWindowProc(Wnd, message, wParam, lParam); + end; + + else + result := DefWindowProc(Wnd, message, wParam, lParam); + end; +end; +//------------------------------------------------------------------------------ + +var + hWnd : THandle; + Msg : TMsg; + wndClass : TWndClass; +begin + wndClass.style := CS_HREDRAW or CS_VREDRAW; + wndClass.lpfnWndProc := @WndProc; + wndClass.cbClsExtra := 0; + wndClass.cbWndExtra := 0; + wndClass.hInstance := hInstance; + wndClass.hIcon := LoadIcon(0, IDI_APPLICATION); + wndClass.hCursor := LoadCursor(0, IDC_ARROW); + wndClass.hbrBackground := HBRUSH(GetStockObject(WHITE_BRUSH)); + wndClass.lpszMenuName := nil; + wndClass.lpszClassName := 'CairoClipper'; + + RegisterClass(wndClass); + + hWnd := CreateWindow( + 'CairoClipper', // window class name + 'Cairo-Clipper Demo', // window caption + WS_OVERLAPPEDWINDOW, // window style + Integer(CW_USEDEFAULT), // initial x position + Integer(CW_USEDEFAULT), // initial y position + 400, // initial x size + 300, // initial y size + 0, // parent window handle + 0, // window menu handle + hInstance, // program instance handle + nil); // creation parameters + + ShowWindow(hWnd, SW_SHOW); + UpdateWindow(hWnd); + + while(GetMessage(msg, 0, 0, 0)) do + begin + TranslateMessage(msg); + DispatchMessage(msg); + end; +end. + diff --git a/clipper/Delphi/cairo demo/CairoClipperDemo1.res b/clipper/Delphi/cairo demo/CairoClipperDemo1.res new file mode 100755 index 0000000000000000000000000000000000000000..d8a552809ed6777a882d682ecdbd46969240e34e GIT binary patch literal 876 zcmZuw!D`h&6g_zf7)hzGAhf$aLTTM;$WpKsi^YZZABr?vc}QlbDP0)IqQCM=Hp1Pc zD}O_9WIIp@v{GZ_Gw5vo0y{u4hZqaM-|cx^g;xG|cZFqsiY zM1Y7bgEjw;3gCyT>N~bfi3(lUQLs%|r+vq^-y+-u9EQbN|3@1f#ULJWz-L%%kV7bHd+I z&uzl(1D8Hs44g-@ojSKC1CN__I!RL`gMmEr(rDm>#uFI~wb+3sBJ#oec<3~c1FaqJ zbI-Xh;IAW>Hm6Zo&n(YbXxs`K<|4JUHj&8JhWEi}2EOPi@5uCI+>jBA1*$-GL>Hp}XHFa%_xh_4YA$@r+R2#9O??8@wZ4;gtOt>+ix|Lx9;V@~^^PQGh?X=+Sln literal 0 HcmV?d00001 diff --git a/clipper/Delphi/cairo demo/cairo_clipper.pas b/clipper/Delphi/cairo demo/cairo_clipper.pas new file mode 100755 index 0000000..842e4ef --- /dev/null +++ b/clipper/Delphi/cairo demo/cairo_clipper.pas @@ -0,0 +1,121 @@ +unit cairo_clipper; + +(******************************************************************************* +* * +* Author : Angus Johnson * +* Version : 1.2 * +* Date : 29 September 2011 * +* Website : http://www.angusj.com * +* Copyright : Angus Johnson 2010-2011 * +* * +* License: * +* Use, modification & distribution is subject to Boost Software License Ver 1. * +* http://www.boost.org/LICENSE_1_0.txt * +* * +*******************************************************************************) + +interface + +uses + SysUtils, Classes, Cairo, types, math, clipper; + +//nb: Since Clipper only accepts integer coordinates, fractional values have to +//be scaled up and down when being passed to and from Clipper. This is easily +//accomplished by setting the scaling factor (10^x) in the following functions. +//When scaling, remember that on most platforms, integer is only a 32bit value. +function PointArrayToCairo(const polys: TPolygons; + cairo: Pcairo_t; scaling_factor: integer = 2): boolean; +function CairoToPointArray(cairo: Pcairo_t; + out polys: TPolygons; scaling_factor: integer = 2): boolean; + +implementation + +type + PCairoPathDataArray = ^TCairoPathDataArray; + TCairoPathDataArray = + array [0.. MAXINT div sizeof(cairo_path_data_t) -1] of cairo_path_data_t; + +function PointArrayToCairo(const polys: TPolygons; + cairo: Pcairo_t; scaling_factor: integer = 2): boolean; +var + i,j: integer; + scaling: double; +begin + result := assigned(cairo); + if not result then exit; + if abs(scaling_factor) > 6 then + raise Exception.Create('PointArrayToCairo: invalid scaling factor'); + scaling := power(10, scaling_factor); + for i := 0 to high(polys) do + begin + cairo_new_sub_path(cairo); + for j := 0 to high(polys[i]) do + with polys[i][j] do cairo_line_to(cairo,X/scaling,Y/scaling); + cairo_close_path(cairo); + end; +end; +//------------------------------------------------------------------------------ + +function CairoToPointArray(cairo: Pcairo_t; + out polys: TPolygons; scaling_factor: integer = 2): boolean; +const + buffLen1: integer = 32; + buffLen2: integer = 128; +var + i,currLen1, currLen2: integer; + pdHdr: cairo_path_data_t; + path: Pcairo_path_t; + currPos: TIntPoint; + scaling: double; +begin + if abs(scaling_factor) > 6 then + raise Exception.Create('PointArrayToCairo: invalid scaling factor'); + scaling := power(10, scaling_factor); + result := false; + setlength(polys, buffLen1); + currLen1 := 1; + currLen2 := 0; + currPos := IntPoint(0,0); + i := 0; + path := cairo_copy_path_flat(cairo); + try + while i < path.num_data do + begin + pdHdr := PCairoPathDataArray(path.data)[i]; + case pdHdr.header._type of + CAIRO_PATH_CLOSE_PATH: + begin + if currLen2 > 1 then //ie: ignore if < 3 points (not a polygon) + begin + setlength(polys[currLen1-1], currLen2); + setlength(polys[currLen1], buffLen2); + inc(currLen1); + end; + currLen2 := 0; + currPos := IntPoint(0,0); + result := true; + end; + CAIRO_PATH_MOVE_TO, CAIRO_PATH_LINE_TO: + begin + result := false; + if (pdHdr.header._type = CAIRO_PATH_MOVE_TO) and + (currLen2 > 0) then break; //ie enforce ClosePath for polygons + if (currLen2 mod buffLen2 = 0) then + SetLength(polys[currLen1-1], currLen2 + buffLen2); + with PCairoPathDataArray(path.data)[i+1].point do + currPos := IntPoint(Round(x*scaling),Round(y*scaling)); + polys[currLen1-1][currLen2] := currPos; + inc(currLen2); + end; + end; + inc(i, pdHdr.header.length); + end; + finally + cairo_path_destroy(path); + end; + dec(currLen1); //ie enforces a ClosePath + setlength(polys, currLen1); +end; +//------------------------------------------------------------------------------ + +end. diff --git a/clipper/Delphi/clipper.pas b/clipper/Delphi/clipper.pas new file mode 100755 index 0000000..7575a1e --- /dev/null +++ b/clipper/Delphi/clipper.pas @@ -0,0 +1,3968 @@ +unit clipper; + +(******************************************************************************* +* * +* Author : Angus Johnson * +* Version : 5.1.0 * +* Date : 1 February 2013 * +* Website : http://www.angusj.com * +* Copyright : Angus Johnson 2010-2013 * +* * +* License: * +* Use, modification & distribution is subject to Boost Software License Ver 1. * +* http://www.boost.org/LICENSE_1_0.txt * +* * +* Attributions: * +* The code in this library is an extension of Bala Vatti's clipping algorithm: * +* "A generic solution to polygon clipping" * +* Communications of the ACM, Vol 35, Issue 7 (July 1992) PP 56-63. * +* http://portal.acm.org/citation.cfm?id=129906 * +* * +* Computer graphics and geometric modeling: implementation and algorithms * +* By Max K. Agoston * +* Springer; 1 edition (January 4, 2005) * +* http://books.google.com/books?q=vatti+clipping+agoston * +* * +* See also: * +* "Polygon Offsetting by Computing Winding Numbers" * +* Paper no. DETC2005-85513 PP. 565-575 * +* ASME 2005 International Design Engineering Technical Conferences * +* and Computers and Information in Engineering Conference (IDETC/CIE2005) * +* September 24-28, 2005 , Long Beach, California, USA * +* http://www.me.berkeley.edu/~mcmains/pubs/DAC05OffsetPolygon.pdf * +* * +*******************************************************************************) + +interface + +uses + SysUtils, Types, Classes, Math; + +type + PIntPoint = ^TIntPoint; + TIntPoint = record X, Y: Int64; end; + TIntRect = record Left, Top, Right, Bottom: Int64; end; + + TClipType = (ctIntersection, ctUnion, ctDifference, ctXor); + TPolyType = (ptSubject, ptClip); + //By far the most widely used winding rules for polygon filling are + //EvenOdd & NonZero (GDI, GDI+, XLib, OpenGL, Cairo, AGG, Quartz, SVG, Gr32) + //Others rules include Positive, Negative and ABS_GTR_EQ_TWO (only in OpenGL) + //see http://glprogramming.com/red/chapter11.html + TPolyFillType = (pftEvenOdd, pftNonZero, pftPositive, pftNegative); + + //TJoinType - used by OffsetPolygons() + TJoinType = (jtSquare, jtRound, jtMiter); + + TPolygon = array of TIntPoint; + TPolygons = array of TPolygon; + + TPolyNode = class; + TArrayOfPolyNode = array of TPolyNode; + + TPolyNode = class + private + FPolygon: TPolygon; + FParent : TPolyNode; + FIndex: Integer; + FCount : Integer; + FBuffLen : Integer; + FChilds: TArrayOfPolyNode; + function GetChild(Index: Integer): TPolyNode; + function IsHoleNode: boolean; + procedure AddChild(PolyNode: TPolyNode); + function GetNextSiblingUp: TPolyNode; + public + function GetNext: TPolyNode; + property ChildCount: Integer read FCount; + property Childs[index: Integer]: TPolyNode read GetChild; + property Parent: TPolyNode read FParent; + property IsHole: Boolean read IsHoleNode; + property Contour: TPolygon read FPolygon; + end; + + TPolyTree = class(TPolyNode) //replaces TExPolygons + private + FAllNodes: TArrayOfPolyNode; //container for ALL PolyNodes + function GetTotal: Integer; + public + procedure Clear; + function GetFirst: TPolyNode; + destructor Destroy; override; + property Total: Integer read GetTotal; + end; + + + //definitions below here are used internally ... + TEdgeSide = (esLeft, esRight); + TIntersectProtect = (ipLeft, ipRight); + TIntersectProtects = set of TIntersectProtect; + TDirection = (dRightToLeft, dLeftToRight); + + PEdge = ^TEdge; + TEdge = record + XBot : Int64; //bottom + YBot : Int64; + XCurr: Int64; //current (ie relative to bottom of current scanbeam) + YCurr: Int64; + XTop : Int64; //top + YTop : Int64; + TmpX : Int64; + Dx : Double; //the inverse of slope + DeltaX: Int64; + DeltaY: Int64; + PolyType : TPolyType; + Side : TEdgeSide; + WindDelta: Integer; //1 or -1 depending on winding direction + WindCnt : Integer; + WindCnt2 : Integer; //winding count of the opposite PolyType + OutIdx : Integer; + Next : PEdge; + Prev : PEdge; + NextInLML: PEdge; + PrevInAEL: PEdge; + NextInAEL: PEdge; + PrevInSEL: PEdge; + NextInSEL: PEdge; + end; + + PEdgeArray = ^TEdgeArray; + TEdgeArray = array[0.. MaxInt div sizeof(TEdge) -1] of TEdge; + + PScanbeam = ^TScanbeam; + TScanbeam = record + Y : Int64; + Next: PScanbeam; + end; + + PIntersectNode = ^TIntersectNode; + TIntersectNode = record + Edge1: PEdge; + Edge2: PEdge; + Pt : TIntPoint; + Next : PIntersectNode; + end; + + PLocalMinima = ^TLocalMinima; + TLocalMinima = record + Y : Int64; + LeftBound : PEdge; + RightBound: PEdge; + Next : PLocalMinima; + end; + + POutPt = ^TOutPt; + + POutRec = ^TOutRec; + TOutRec = record + Idx : Integer; + BottomPt : POutPt; + IsHole : Boolean; + //The 'FirstLeft' field points to the OutRec struct containing the + //polygon immediately to the left of the current OutRec's polygon. + //When polygons are contained within other polygons, the polygon + //immediately to the left will either be the outer/owner polygon or a + //sibling contained by the same outer polygon. By storing and later parsing + //this FirstLeft field, it's easy to sort polygons into a tree structure + //that reflects the parent/child relationships of all the polygons. + FirstLeft : POutRec; + Pts : POutPt; + PolyNode : TPolyNode; + end; + TArrayOfOutRec = array of POutRec; + + TOutPt = record + Idx : Integer; + Pt : TIntPoint; + Next : POutPt; + Prev : POutPt; + end; + + PJoinRec = ^TJoinRec; + TJoinRec = record + Pt1a : TIntPoint; + Pt1b : TIntPoint; + Poly1Idx : Integer; + Pt2a : TIntPoint; + Pt2b : TIntPoint; + Poly2Idx : Integer; + end; + + PHorzRec = ^THorzRec; + THorzRec = record + Edge : PEdge; + SavedIdx : Integer; + Next : PHorzRec; + Prev : PHorzRec; + end; + + TClipperBase = class + private + FEdgeList : TList; + FLmList : PLocalMinima; //localMinima list + FCurrLm : PLocalMinima; //current localMinima node + FUse64BitRange : Boolean; //see LoRange and HiRange consts notes below + procedure DisposeLocalMinimaList; + protected + procedure Reset; virtual; + procedure PopLocalMinima; + property CurrentLm: PLocalMinima read FCurrLm; + public + constructor Create; virtual; + destructor Destroy; override; + function AddPolygon(const polygon: TPolygon; PolyType: TPolyType): Boolean; + function AddPolygons(const polygons: TPolygons; PolyType: TPolyType): Boolean; + procedure Clear; virtual; + end; + + TClipper = class(TClipperBase) + private + FPolyOutList : TList; + FJoinList : TList; + FClipType : TClipType; + FScanbeam : PScanbeam; //scanbeam list + FActiveEdges : PEdge; //active Edge list + FSortedEdges : PEdge; //used for temporary sorting + FIntersectNodes : PIntersectNode; + FClipFillType : TPolyFillType; + FSubjFillType : TPolyFillType; + FExecuteLocked : Boolean; + FHorizJoins : PHorzRec; + FReverseOutput : Boolean; + FUsingPolyTree: Boolean; + procedure DisposeScanbeamList; + procedure InsertScanbeam(const Y: Int64); + function PopScanbeam: Int64; + procedure SetWindingCount(Edge: PEdge); + function IsEvenOddFillType(Edge: PEdge): Boolean; + function IsEvenOddAltFillType(Edge: PEdge): Boolean; + procedure AddEdgeToSEL(Edge: PEdge); + procedure CopyAELToSEL; + procedure InsertLocalMinimaIntoAEL(const BotY: Int64); + procedure SwapPositionsInAEL(E1, E2: PEdge); + procedure SwapPositionsInSEL(E1, E2: PEdge); + function IsTopHorz(const XPos: Int64): Boolean; + procedure ProcessHorizontal(HorzEdge: PEdge); + procedure ProcessHorizontals; + procedure AddIntersectNode(E1, E2: PEdge; const Pt: TIntPoint); + function ProcessIntersections(const BotY, TopY: Int64): Boolean; + procedure BuildIntersectList(const BotY, TopY: Int64); + procedure ProcessIntersectList; + procedure DeleteFromAEL(E: PEdge); + procedure DeleteFromSEL(E: PEdge); + procedure IntersectEdges(E1,E2: PEdge; + const Pt: TIntPoint; protects: TIntersectProtects = []); + procedure DoMaxima(E: PEdge; const TopY: Int64); + procedure UpdateEdgeIntoAEL(var E: PEdge); + function FixupIntersections: Boolean; + procedure SwapIntersectNodes(Int1, Int2: PIntersectNode); + procedure ProcessEdgesAtTopOfScanbeam(const TopY: Int64); + function IsContributing(Edge: PEdge): Boolean; + function CreateOutRec: POutRec; + procedure AddOutPt(E: PEdge; const Pt: TIntPoint); + procedure AddLocalMaxPoly(E1, E2: PEdge; const Pt: TIntPoint); + procedure AddLocalMinPoly(E1, E2: PEdge; const Pt: TIntPoint); + procedure AppendPolygon(E1, E2: PEdge); + procedure DisposePolyPts(PP: POutPt); + procedure DisposeAllPolyPts; + procedure DisposeOutRec(Index: Integer); + procedure DisposeIntersectNodes; + function GetResult: TPolygons; + function GetResult2(PolyTree: TPolyTree): Boolean; + procedure FixupOutPolygon(OutRec: POutRec); + procedure SetHoleState(E: PEdge; OutRec: POutRec); + procedure AddJoin(E1, E2: PEdge; + E1OutIdx: Integer = -1; E2OutIdx: Integer = -1); + procedure ClearJoins; + procedure AddHorzJoin(E: PEdge; Idx: Integer); + procedure ClearHorzJoins; + function JoinPoints(JR: PJoinRec; out P1, P2: POutPt): Boolean; + procedure FixupJoinRecs(JR: PJoinRec; Pt: POutPt; StartIdx: Integer); + procedure FixupFirstLefts1(OldOutRec, NewOutRec: POutRec); + procedure FixupFirstLefts2(OldOutRec, NewOutRec: POutRec); + procedure JoinCommonEdges; + procedure FixHoleLinkage(OutRec: POutRec); + protected + procedure Reset; override; + function ExecuteInternal: Boolean; virtual; + public + function Execute(clipType: TClipType; + out solution: TPolygons; + subjFillType: TPolyFillType = pftEvenOdd; + clipFillType: TPolyFillType = pftEvenOdd): Boolean; overload; + function Execute(clipType: TClipType; + var PolyTree: TPolyTree; + subjFillType: TPolyFillType = pftEvenOdd; + clipFillType: TPolyFillType = pftEvenOdd): Boolean; overload; + constructor Create; override; + destructor Destroy; override; + procedure Clear; override; + //ReverseSolution: reverses the default orientation + property ReverseSolution: Boolean read FReverseOutput write FReverseOutput; + end; + +function Orientation(const Pts: TPolygon): Boolean; overload; +function Area(const Pts: TPolygon): Double; +function IntPoint(const X, Y: Int64): TIntPoint; +function ReversePolygon(const Pts: TPolygon): TPolygon; +function ReversePolygons(const Pts: TPolygons): TPolygons; + +//OffsetPolygons precondition: outer polygons MUST be oriented clockwise, +//and inner 'hole' polygons must be oriented counter-clockwise ... +function OffsetPolygons(const Polys: TPolygons; const Delta: Double; + JoinType: TJoinType = jtSquare; MiterLimit: Double = 2; + AutoFix: Boolean = True): TPolygons; + +//SimplifyPolygon converts a self-intersecting polygon into a simple polygon. +function SimplifyPolygon(const poly: TPolygon; FillType: TPolyFillType = pftEvenOdd): TPolygons; +function SimplifyPolygons(const polys: TPolygons; FillType: TPolyFillType = pftEvenOdd): TPolygons; + +//CleanPolygon removes adjacent vertices closer than the specified distance. +function CleanPolygon(Poly: TPolygon; Distance: double = 1.415): TPolygon; +function CleanPolygons(Polys: TPolygons; Distance: double = 1.415): TPolygons; + +function PolyTreeToPolygons(PolyTree: TPolyTree): TPolygons; + +implementation + +type + TDoublePoint = record X, Y: Double; end; + TArrayOfDoublePoint = array of TDoublePoint; + +const + Horizontal: Double = -3.4e+38; + //The Area function places the most limits on coordinate values + //So, to avoid overflow errors, they must not exceed the following values... + LoRange: Int64 = $3FFFFFFF; //1.0e+9 + HiRange: Int64 = $3FFFFFFFFFFFFFFF; //4.6e+18 + //Also, if all coordinates are within +/-LoRange, then calculations will be + //faster. Otherwise using Int128 math will render the library ~10-15% slower. + +resourcestring + rsMissingRightbound = 'InsertLocalMinimaIntoAEL: missing RightBound'; + rsDoMaxima = 'DoMaxima error'; + rsUpdateEdgeIntoAEL = 'UpdateEdgeIntoAEL error'; + rsHorizontal = 'ProcessHorizontal error'; + rsInvalidInt = 'Coordinate exceeds range bounds'; + rsJoinError = 'Join Output polygons error'; + +//------------------------------------------------------------------------------ +// TPolyNode methods ... +//------------------------------------------------------------------------------ + +function TPolyNode.GetChild(Index: Integer): TPolyNode; +begin + if (Index < 0) or (Index >= FCount) then + raise Exception.Create('TPolyNode range error: ' + inttostr(Index)); + Result := FChilds[Index]; +end; +//------------------------------------------------------------------------------ + +procedure TPolyNode.AddChild(PolyNode: TPolyNode); +begin + if FCount = FBuffLen then + begin + Inc(FBuffLen, 16); + SetLength(FChilds, FBuffLen); + end; + PolyNode.FParent := self; + PolyNode.FIndex := FCount; + FChilds[FCount] := PolyNode; + Inc(FCount); +end; +//------------------------------------------------------------------------------ + +function TPolyNode.IsHoleNode: boolean; +var + Node: TPolyNode; +begin + Result := True; + Node := FParent; + while Assigned(Node) do + begin + Result := not Result; + Node := Node.FParent; + end; +end; +//------------------------------------------------------------------------------ + +function TPolyNode.GetNext: TPolyNode; +begin + if FCount > 0 then + Result := FChilds[0] else + Result := GetNextSiblingUp; +end; +//------------------------------------------------------------------------------ + +function TPolyNode.GetNextSiblingUp: TPolyNode; +begin + if not Assigned(FParent) then //protects against TPolyTree.GetNextSiblingUp() + Result := nil + else if FIndex = FParent.FCount -1 then + Result := FParent.GetNextSiblingUp + else + Result := FParent.Childs[FIndex +1]; +end; + +//------------------------------------------------------------------------------ +// TPolyTree methods ... +//------------------------------------------------------------------------------ + +destructor TPolyTree.Destroy; +begin + Clear; + inherited; +end; +//------------------------------------------------------------------------------ + +procedure TPolyTree.Clear; +var + I: Integer; +begin + for I := 0 to high(FAllNodes) do FAllNodes[I].Free; + FAllNodes := nil; + FBuffLen := 16; + SetLength(FChilds, FBuffLen); + FCount := 0; +end; +//------------------------------------------------------------------------------ + +function TPolyTree.GetFirst: TPolyNode; +begin + if FCount > 0 then + Result := FChilds[0] else + Result := nil; +end; +//------------------------------------------------------------------------------ + +function TPolyTree.GetTotal: Integer; +begin + Result := length(FAllNodes); +end; + +//------------------------------------------------------------------------------ +// Int128 Functions ... +//------------------------------------------------------------------------------ + +const + Mask32Bits = $FFFFFFFF; + +type + + //nb: TInt128.Lo is typed Int64 instead of UInt64 to provide Delphi 7 + //compatability. However while UInt64 isn't a recognised type in + //Delphi 7, it can still be used in typecasts. + TInt128 = record + Hi : Int64; + Lo : Int64; + end; + +{$OVERFLOWCHECKS OFF} +procedure Int128Negate(var Val: TInt128); +begin + if Val.Lo = 0 then + begin + Val.Hi := -Val.Hi; + end else + begin + Val.Lo := -Val.Lo; + Val.Hi := not Val.Hi; + end; +end; +//------------------------------------------------------------------------------ + +function Int128(const val: Int64): TInt128; overload; +begin + Result.Lo := val; + if val < 0 then + Result.Hi := -1 else + Result.Hi := 0; +end; +//------------------------------------------------------------------------------ + +function Int128Equal(const Int1, Int2: TInt128): Boolean; +begin + Result := (Int1.Lo = Int2.Lo) and (Int1.Hi = Int2.Hi); +end; +//------------------------------------------------------------------------------ + +function Int128LessThan(const Int1, Int2: TInt128): Boolean; +begin + if (Int1.Hi <> Int2.Hi) then Result := Int1.Hi < Int2.Hi + else Result := UInt64(Int1.Lo) < UInt64(Int2.Lo); +end; +//------------------------------------------------------------------------------ + +function Int128Add(const Int1, Int2: TInt128): TInt128; +begin + Result.Lo := Int1.Lo + Int2.Lo; + Result.Hi := Int1.Hi + Int2.Hi; + if UInt64(Result.Lo) < UInt64(Int1.Lo) then Inc(Result.Hi); +end; +//------------------------------------------------------------------------------ + +function Int128Sub(const Int1, Int2: TInt128): TInt128; +begin + Result.Hi := Int1.Hi - Int2.Hi; + Result.Lo := Int1.Lo - Int2.Lo; + if UInt64(Result.Lo) > UInt64(Int1.Lo) then Dec(Result.Hi); +end; +//------------------------------------------------------------------------------ + +function Int128Mul(Int1, Int2: Int64): TInt128; +var + A, B, C: Int64; + Int1Hi, Int1Lo, Int2Hi, Int2Lo: Int64; + Negate: Boolean; +begin + //save the Result's sign before clearing both sign bits ... + Negate := (Int1 < 0) <> (Int2 < 0); + if Int1 < 0 then Int1 := -Int1; + if Int2 < 0 then Int2 := -Int2; + + Int1Hi := Int1 shr 32; + Int1Lo := Int1 and Mask32Bits; + Int2Hi := Int2 shr 32; + Int2Lo := Int2 and Mask32Bits; + + A := Int1Hi * Int2Hi; + B := Int1Lo * Int2Lo; + //because the high (sign) bits in both int1Hi & int2Hi have been zeroed, + //there's no risk of 64 bit overflow in the following assignment + //(ie: $7FFFFFFF*$FFFFFFFF + $7FFFFFFF*$FFFFFFFF < 64bits) + C := Int1Hi*Int2Lo + Int2Hi*Int1Lo; + //Result = A shl 64 + C shl 32 + B ... + Result.Hi := A + (C shr 32); + A := C shl 32; + + Result.Lo := A + B; + if UInt64(Result.Lo) < UInt64(A) then + Inc(Result.Hi); + + if Negate then Int128Negate(Result); +end; +//------------------------------------------------------------------------------ + +function Int128Div(Dividend, Divisor: TInt128{; out Remainder: TInt128}): TInt128; +var + Cntr: TInt128; + Negate: Boolean; +begin + if (Divisor.Lo = 0) and (Divisor.Hi = 0) then + raise Exception.create('int128Div error: divide by zero'); + + Negate := (Divisor.Hi < 0) <> (Dividend.Hi < 0); + if Dividend.Hi < 0 then Int128Negate(Dividend); + if Divisor.Hi < 0 then Int128Negate(Divisor); + + if Int128LessThan(Divisor, Dividend) then + begin + Result.Hi := 0; + Result.Lo := 0; + Cntr.Lo := 1; + Cntr.Hi := 0; + //while (Dividend >= Divisor) do + while not Int128LessThan(Dividend, Divisor) do + begin + //divisor := divisor shl 1; + Divisor.Hi := Divisor.Hi shl 1; + if Divisor.Lo < 0 then Inc(Divisor.Hi); + Divisor.Lo := Divisor.Lo shl 1; + + //Cntr := Cntr shl 1; + Cntr.Hi := Cntr.Hi shl 1; + if Cntr.Lo < 0 then Inc(Cntr.Hi); + Cntr.Lo := Cntr.Lo shl 1; + end; + //Divisor := Divisor shr 1; + Divisor.Lo := Divisor.Lo shr 1; + if Divisor.Hi and $1 = $1 then + Int64Rec(Divisor.Lo).Hi := Cardinal(Int64Rec(Divisor.Lo).Hi) or $80000000; + Divisor.Hi := Divisor.Hi shr 1; + + //Cntr := Cntr shr 1; + Cntr.Lo := Cntr.Lo shr 1; + if Cntr.Hi and $1 = $1 then + Int64Rec(Cntr.Lo).Hi := Cardinal(Int64Rec(Cntr.Lo).Hi) or $80000000; + Cntr.Hi := Cntr.Hi shr 1; + + //while (Cntr > 0) do + while not ((Cntr.Hi = 0) and (Cntr.Lo = 0)) do + begin + //if ( Dividend >= Divisor) then + if not Int128LessThan(Dividend, Divisor) then + begin + //Dividend := Dividend - Divisor; + Dividend := Int128Sub(Dividend, Divisor); + + //Result := Result or Cntr; + Result.Hi := Result.Hi or Cntr.Hi; + Result.Lo := Result.Lo or Cntr.Lo; + end; + //Divisor := Divisor shr 1; + Divisor.Lo := Divisor.Lo shr 1; + if Divisor.Hi and $1 = $1 then + Int64Rec(Divisor.Lo).Hi := Cardinal(Int64Rec(Divisor.Lo).Hi) or $80000000; + Divisor.Hi := Divisor.Hi shr 1; + + //Cntr := Cntr shr 1; + Cntr.Lo := Cntr.Lo shr 1; + if Cntr.Hi and $1 = $1 then + Int64Rec(Cntr.Lo).Hi := Cardinal(Int64Rec(Cntr.Lo).Hi) or $80000000; + Cntr.Hi := Cntr.Hi shr 1; + end; + if Negate then Int128Negate(Result); + //Remainder := Dividend; + end + else if (Divisor.Hi = Dividend.Hi) and (Divisor.Lo = Dividend.Lo) then + begin + Result := Int128(1); + end else + begin + Result := Int128(0); + end; +end; +//------------------------------------------------------------------------------ + +function Int128AsDouble(val: TInt128): Double; +const + shift64: Double = 18446744073709551616.0; +var + lo: Int64; +begin + if (val.Hi < 0) then + begin + lo := -val.Lo; + if lo = 0 then + Result := val.Hi * shift64 else + Result := -(not val.Hi * shift64 + UInt64(lo)); + end else + Result := val.Hi * shift64 + UInt64(val.Lo); +end; +//------------------------------------------------------------------------------ + +{$OVERFLOWCHECKS ON} + +//------------------------------------------------------------------------------ +// Miscellaneous Functions ... +//------------------------------------------------------------------------------ + +function FullRangeNeeded(const Pts: TPolygon): Boolean; +var + I: Integer; +begin + Result := False; + for I := 0 to high(Pts) do + begin + if (abs(Pts[I].X) > HiRange) or (abs(Pts[I].Y) > HiRange) then + raise exception.Create(rsInvalidInt) + else if (abs(Pts[I].X) > LoRange) or (abs(Pts[I].Y) > LoRange) then + Result := True; + end; +end; +//------------------------------------------------------------------------------ + +function PointCount(Pts: POutPt): Integer; +var + P: POutPt; +begin + Result := 0; + if not Assigned(Pts) then Exit; + P := Pts; + repeat + Inc(Result); + P := P.Next; + until P = Pts; +end; +//------------------------------------------------------------------------------ + +function PointsEqual(const P1, P2: TIntPoint): Boolean; +begin + Result := (P1.X = P2.X) and (P1.Y = P2.Y); +end; +//------------------------------------------------------------------------------ + +function IntPoint(const X, Y: Int64): TIntPoint; +begin + Result.X := X; + Result.Y := Y; +end; +//------------------------------------------------------------------------------ + +function Area(const Pts: TPolygon): Double; overload; +var + I, HighI: Integer; + A: TInt128; + D: Double; +begin + Result := 0; + HighI := high(Pts); + if HighI < 2 then Exit; + if FullRangeNeeded(Pts) then + begin + A := Int128Sub(Int128Mul(Pts[HighI].X, Pts[0].Y), + Int128Mul(Pts[0].X, Pts[HighI].Y)); + for I := 0 to HighI-1 do + A := Int128Add(A, Int128Sub(Int128Mul(Pts[I].X, Pts[I+1].Y), + Int128Mul(Pts[I+1].X, Pts[I].Y))); + Result := Int128AsDouble(A) / 2; + end else + begin + //see http://www.mathopenref.com/coordpolygonarea2.html + D := (Pts[HighI].X + Pts[0].X) * (Pts[0].Y - Pts[HighI].Y); + for I := 1 to HighI do + D := D + (Pts[I-1].X + Pts[I].X) * (Pts[I].Y - Pts[I-1].Y); + Result := D / 2; + end; +end; +//------------------------------------------------------------------------------ + +function Area(OutRec: POutRec; UseFullInt64Range: Boolean): Double; overload; +var + Op: POutPt; + D: Double; + A: TInt128; +begin + Op := OutRec.Pts; + if not Assigned(Op) then + begin + Result := 0; + Exit; + end; + if UseFullInt64Range then + begin + A := Int128(0); + repeat + A := Int128Add(A, + Int128Mul(Op.Pt.X + Op.Prev.Pt.X, Op.Prev.Pt.Y - Op.Pt.Y)); + Op := Op.Next; + until Op = OutRec.Pts; + Result := Int128AsDouble(A) / 2; + end else + begin + D := 0; + repeat + //nb: subtraction reversed since vertices are stored in reverse order ... + D := D + (Op.Pt.X + Op.Prev.Pt.X) * (Op.Prev.Pt.Y - Op.Pt.Y); + Op := Op.Next; + until Op = OutRec.Pts; + Result := D / 2; + end; +end; +//------------------------------------------------------------------------------ + +function Orientation(const Pts: TPolygon): Boolean; overload; +begin + Result := Area(Pts) >= 0; +end; +//------------------------------------------------------------------------------ + +function ReversePolygon(const Pts: TPolygon): TPolygon; +var + I, HighI: Integer; +begin + HighI := high(Pts); + SetLength(Result, HighI +1); + for I := 0 to HighI do + Result[I] := Pts[HighI - I]; +end; +//------------------------------------------------------------------------------ + +function ReversePolygons(const Pts: TPolygons): TPolygons; +var + I, J, highJ: Integer; +begin + I := length(Pts); + SetLength(Result, I); + for I := 0 to I -1 do + begin + highJ := high(Pts[I]); + SetLength(Result[I], highJ+1); + for J := 0 to highJ do + Result[I][J] := Pts[I][highJ - J]; + end; +end; +//------------------------------------------------------------------------------ + +function PointIsVertex(const Pt: TIntPoint; PP: POutPt): Boolean; +var + Pp2: POutPt; +begin + Result := True; + Pp2 := PP; + repeat + if PointsEqual(Pp2.Pt, Pt) then Exit; + Pp2 := Pp2.Next; + until Pp2 = PP; + Result := False; +end; +//------------------------------------------------------------------------------ + +function PointInPolygon(const Pt: TIntPoint; + PP: POutPt; UseFullInt64Range: Boolean): Boolean; +var + Pp2: POutPt; + A, B: TInt128; +begin + Result := False; + Pp2 := PP; + if UseFullInt64Range then + begin + repeat + if (((Pp2.Pt.Y <= Pt.Y) and (Pt.Y < Pp2.Prev.Pt.Y)) or + ((Pp2.Prev.Pt.Y <= Pt.Y) and (Pt.Y < Pp2.Pt.Y))) then + begin + A := Int128(Pt.X - Pp2.Pt.X); + B := Int128Div( Int128Mul(Pp2.Prev.Pt.X - Pp2.Pt.X, + Pt.Y - Pp2.Pt.Y), Int128(Pp2.Prev.Pt.Y - Pp2.Pt.Y) ); + if Int128LessThan(A, B) then Result := not Result; + end; + Pp2 := Pp2.Next; + until Pp2 = PP; + end else + begin + repeat + if ((((Pp2.Pt.Y <= Pt.Y) and (Pt.Y < Pp2.Prev.Pt.Y)) or + ((Pp2.Prev.Pt.Y <= Pt.Y) and (Pt.Y < Pp2.Pt.Y))) and + (Pt.X < (Pp2.Prev.Pt.X - Pp2.Pt.X) * (Pt.Y - Pp2.Pt.Y) / + (Pp2.Prev.Pt.Y - Pp2.Pt.Y) + Pp2.Pt.X)) then Result := not Result; + Pp2 := Pp2.Next; + until Pp2 = PP; + end; +end; +//------------------------------------------------------------------------------ + +function SlopesEqual(E1, E2: PEdge; + UseFullInt64Range: Boolean): Boolean; overload; +begin + if UseFullInt64Range then + Result := Int128Equal(Int128Mul(E1.DeltaY, E2.DeltaX), + Int128Mul(E1.DeltaX, E2.DeltaY)) + else + Result := E1.DeltaY * E2.DeltaX = E1.DeltaX * E2.DeltaY; +end; +//--------------------------------------------------------------------------- + +function SlopesEqual(const Pt1, Pt2, Pt3: TIntPoint; + UseFullInt64Range: Boolean): Boolean; overload; +begin + if UseFullInt64Range then + Result := Int128Equal( + Int128Mul(Pt1.Y-Pt2.Y, Pt2.X-Pt3.X), Int128Mul(Pt1.X-Pt2.X, Pt2.Y-Pt3.Y)) + else + Result := (Pt1.Y-Pt2.Y)*(Pt2.X-Pt3.X) = (Pt1.X-Pt2.X)*(Pt2.Y-Pt3.Y); +end; +//--------------------------------------------------------------------------- + +function SlopesEqual(const Pt1, Pt2, Pt3, Pt4: TIntPoint; + UseFullInt64Range: Boolean): Boolean; overload; +begin + if UseFullInt64Range then + Result := Int128Equal( Int128Mul(Pt1.Y-Pt2.Y, Pt3.X-Pt4.X), + Int128Mul(Pt1.X-Pt2.X, Pt3.Y-Pt4.Y)) + else + Result := (Pt1.Y-Pt2.Y)*(Pt3.X-Pt4.X) = (Pt1.X-Pt2.X)*(Pt3.Y-Pt4.Y); +end; +//--------------------------------------------------------------------------- + +// 0(90º) // +// | // +// +inf (180º) --- o --- -inf (0º) // +function GetDx(const Pt1, Pt2: TIntPoint): Double; +begin + if (Pt1.Y = Pt2.Y) then Result := Horizontal + else Result := (Pt2.X - Pt1.X)/(Pt2.Y - Pt1.Y); +end; +//--------------------------------------------------------------------------- + +procedure SetDx(E: PEdge); +begin + E.DeltaX := (E.XTop - E.XBot); + E.DeltaY := (E.YTop - E.YBot); + if E.DeltaY = 0 then E.Dx := Horizontal + else E.Dx := E.DeltaX/E.DeltaY; +end; +//--------------------------------------------------------------------------- + +procedure SwapSides(Edge1, Edge2: PEdge); +var + Side: TEdgeSide; +begin + Side := Edge1.Side; + Edge1.Side := Edge2.Side; + Edge2.Side := Side; +end; +//------------------------------------------------------------------------------ + +procedure SwapPolyIndexes(Edge1, Edge2: PEdge); +var + OutIdx: Integer; +begin + OutIdx := Edge1.OutIdx; + Edge1.OutIdx := Edge2.OutIdx; + Edge2.OutIdx := OutIdx; +end; +//------------------------------------------------------------------------------ + +function TopX(Edge: PEdge; const currentY: Int64): Int64; overload; +begin + if currentY = Edge.YTop then Result := Edge.XTop + else if Edge.XTop = Edge.XBot then Result := Edge.XBot + else Result := Edge.XBot + round(Edge.Dx*(currentY - Edge.YBot)); +end; +//------------------------------------------------------------------------------ + +function IntersectPoint(Edge1, Edge2: PEdge; + out ip: TIntPoint; UseFullInt64Range: Boolean): Boolean; overload; +var + B1,B2,M: Double; +begin + if SlopesEqual(Edge1, Edge2, UseFullInt64Range) then + begin + Result := False; + Exit; + end; + if Edge1.Dx = 0 then + begin + ip.X := Edge1.XBot; + if Edge2.Dx = Horizontal then + ip.Y := Edge2.YBot + else + begin + with Edge2^ do B2 := YBot - (XBot/Dx); + ip.Y := round(ip.X/Edge2.Dx + B2); + end; + end + else if Edge2.Dx = 0 then + begin + ip.X := Edge2.XBot; + if Edge1.Dx = Horizontal then + ip.Y := Edge1.YBot + else + begin + with Edge1^ do B1 := YBot - (XBot/Dx); + ip.Y := round(ip.X/Edge1.Dx + B1); + end; + end else + begin + with Edge1^ do B1 := XBot - YBot * Dx; + with Edge2^ do B2 := XBot - YBot * Dx; + M := (B2-B1)/(Edge1.Dx - Edge2.Dx); + ip.Y := round(M); + if Abs(Edge1.Dx) < Abs(Edge2.Dx) then + ip.X := round(Edge1.Dx * M + B1) + else + ip.X := round(Edge2.Dx * M + B2); + end; + + //The precondition - E.TmpX > eNext.TmpX - indicates that the two edges do + //intersect below TopY (and hence below the tops of either Edge). However, + //when edges are almost parallel, rounding errors may cause False positives - + //indicating intersections when there really aren't any. Also, floating point + //imprecision can incorrectly place an intersect point beyond/above an Edge. + //Therfore, further validation of the IP is warranted ... + if (ip.Y < Edge1.YTop) or (ip.Y < Edge2.YTop) then + begin + //Find the lower top of the two edges and compare X's at this Y. + //If Edge1's X is greater than Edge2's X then it's fair to assume an + //intersection really has occurred... + if (Edge1.YTop > Edge2.YTop) then + begin + Result := TopX(Edge2, Edge1.YTop) < Edge1.XTop; + ip.X := Edge1.XTop; + ip.Y := Edge1.YTop; + end else + begin + Result := TopX(Edge1, Edge2.YTop) > Edge2.XTop; + ip.X := Edge2.XTop; + ip.Y := Edge2.YTop; + end; + end else + Result := True; +end; +//------------------------------------------------------------------------------ + +procedure ReversePolyPtLinks(PP: POutPt); +var + Pp1,Pp2: POutPt; +begin + if not Assigned(PP) then Exit; + Pp1 := PP; + repeat + Pp2:= Pp1.Next; + Pp1.Next := Pp1.Prev; + Pp1.Prev := Pp2; + Pp1 := Pp2; + until Pp1 = PP; +end; + +//------------------------------------------------------------------------------ +// TClipperBase methods ... +//------------------------------------------------------------------------------ + +constructor TClipperBase.Create; +begin + FEdgeList := TList.Create; + FLmList := nil; + FCurrLm := nil; + FUse64BitRange := False; //ie default is False +end; +//------------------------------------------------------------------------------ + +destructor TClipperBase.Destroy; +begin + Clear; + FEdgeList.Free; + inherited; +end; +//------------------------------------------------------------------------------ + +function TClipperBase.AddPolygon(const polygon: TPolygon; + PolyType: TPolyType): Boolean; + + //---------------------------------------------------------------------- + + procedure InitEdge(E, eNext, ePrev: PEdge; const Pt: TIntPoint); + begin + fillChar(E^, sizeof(TEdge), 0); + E.Next := eNext; + E.Prev := ePrev; + E.XCurr := Pt.X; + E.YCurr := Pt.Y; + if E.YCurr >= E.Next.YCurr then + begin + E.XBot := E.XCurr; + E.YBot := E.YCurr; + E.XTop := E.Next.XCurr; + E.YTop := E.Next.YCurr; + E.WindDelta := 1; + end else + begin + E.XTop := E.XCurr; + E.YTop := E.YCurr; + E.XBot := E.Next.XCurr; + E.YBot := E.Next.YCurr; + E.WindDelta := -1; + end; + SetDx(E); + E.PolyType := PolyType; + E.OutIdx := -1; + end; + //---------------------------------------------------------------------- + + procedure SwapX(E: PEdge); + begin + //swap horizontal edges' top and bottom x's so they follow the natural + //progression of the bounds - ie so their xbots will align with the + //adjoining lower Edge. [Helpful in the ProcessHorizontal() method.] + E.XCurr := E.XTop; + E.XTop := E.XBot; + E.XBot := E.XCurr; + end; + //---------------------------------------------------------------------- + + procedure InsertLocalMinima(lm: PLocalMinima); + var + TmpLm: PLocalMinima; + begin + if not Assigned(fLmList) then + begin + FLmList := lm; + end + else if (lm.Y >= FLmList.Y) then + begin + lm.Next := FLmList; + FLmList := lm; + end else + begin + TmpLm := FLmList; + while Assigned(TmpLm.Next) and (lm.Y < TmpLm.Next.Y) do + TmpLm := TmpLm.Next; + lm.Next := TmpLm.Next; + TmpLm.Next := lm; + end; + end; + //---------------------------------------------------------------------- + + function AddBoundsToLML(E: PEdge): PEdge; + var + NewLm: PLocalMinima; + begin + //Starting at the top of one bound we progress to the bottom where there's + //A local minima. We then go to the top of the Next bound. These two bounds + //form the left and right (or right and left) bounds of the local minima. + E.NextInLML := nil; + E := E.Next; + while True do + begin + if E.Dx = Horizontal then + begin + //nb: proceed through horizontals when approaching from their right, + // but break on horizontal minima if approaching from their left. + // This ensures 'local minima' are always on the left of horizontals. + if (E.Next.YTop < E.YTop) and (E.Next.XBot > E.Prev.XBot) then Break; + if (E.XTop <> E.Prev.XBot) then SwapX(E); + //E.WindDelta := 0; safe option to consider when redesigning + E.NextInLML := E.Prev; + end + else if (E.YBot = E.Prev.YBot) then Break + else E.NextInLML := E.Prev; + E := E.Next; + end; + + //E and E.Prev are now at a local minima ... + new(NewLm); + NewLm.Y := E.Prev.YBot; + NewLm.Next := nil; + if E.Dx = Horizontal then //Horizontal edges never start a left bound + begin + if (E.XBot <> E.Prev.XBot) then SwapX(E); + NewLm.LeftBound := E.Prev; + NewLm.RightBound := E; + end else if (E.Dx < E.Prev.Dx) then + begin + NewLm.LeftBound := E.Prev; + NewLm.RightBound := E; + end else + begin + NewLm.LeftBound := E; + NewLm.RightBound := E.Prev; + end; + NewLm.LeftBound.Side := esLeft; + NewLm.RightBound.Side := esRight; + + InsertLocalMinima(NewLm); + //now process the ascending bound .... + while True do + begin + if (E.Next.YTop = E.YTop) and not (E.Next.Dx = Horizontal) then Break; + E.NextInLML := E.Next; + E := E.Next; + if (E.Dx = Horizontal) and (E.XBot <> E.Prev.XTop) then SwapX(E); + end; + Result := E.Next; + end; + //---------------------------------------------------------------------- + +var + I, J, len: Integer; + Edges: PEdgeArray; + E, EHighest: PEdge; + Pg: TPolygon; + MaxVal: Int64; +begin + {AddPolygon} + Result := False; //ie assume nothing added + len := length(polygon); + if len < 3 then Exit; + SetLength(Pg, len); + Pg[0] := polygon[0]; + J := 0; + //1. check that coordinate values are within the valid range, and + //2. remove duplicate points and co-linear points + if FUse64BitRange then MaxVal := HiRange else MaxVal := LoRange; + for I := 1 to len-1 do + begin + if ((abs(polygon[I].X) > MaxVal) or (abs(polygon[I].Y) > MaxVal)) then + begin + if ((abs(polygon[I].X) > HiRange) or (abs(polygon[I].Y) > HiRange)) then + raise exception.Create(rsInvalidInt); + MaxVal := HiRange; + FUse64BitRange := True; + end; + if PointsEqual(Pg[J], polygon[I]) then Continue + else if (J > 0) and SlopesEqual(Pg[J-1], Pg[J], polygon[I], FUse64BitRange) then + begin + if PointsEqual(Pg[J-1], polygon[I]) then Dec(J); + end else Inc(J); + Pg[J] := polygon[I]; + end; + if (J < 2) then Exit; + + //now remove duplicate points and co-linear edges at the loop around of the + //start and end coordinates ... + len := J+1; + while len > 2 do + begin + //nb: test for point equality before testing slopes ... + if PointsEqual(Pg[J], Pg[0]) then Dec(J) + else if PointsEqual(Pg[0], Pg[1]) or + SlopesEqual(Pg[J], Pg[0], Pg[1], FUse64BitRange) then + begin + Pg[0] := Pg[J]; + Dec(J); + end + else if SlopesEqual(Pg[J-1], Pg[J], Pg[0], FUse64BitRange) then Dec(J) + else if SlopesEqual(Pg[0], Pg[1], Pg[2], FUse64BitRange) then + begin + for I := 2 to J do Pg[I-1] := Pg[I]; + Dec(J); + end + else + Break; + Dec(len); + end; + if len < 3 then Exit; + Result := True; + + GetMem(Edges, sizeof(TEdge)*len); + FEdgeList.Add(Edges); + + //convert vertices to a Double-linked-list of edges and initialize ... + Edges[0].XCurr := Pg[0].X; + Edges[0].YCurr := Pg[0].Y; + InitEdge(@Edges[len-1], @Edges[0], @Edges[len-2], Pg[len-1]); + for I := len-2 downto 1 do + InitEdge(@Edges[I], @Edges[I+1], @Edges[I-1], Pg[I]); + InitEdge(@Edges[0], @Edges[1], @Edges[len-1], Pg[0]); + //reset XCurr & YCurr and find the 'highest' Edge. (nb: since I'm much more + //familiar with positive downwards Y axes, 'highest' here will be the Edge + //with the *smallest* YTop.) + E := @Edges[0]; + EHighest := E; + repeat + E.XCurr := E.XBot; + E.YCurr := E.YBot; + if E.YTop < EHighest.YTop then EHighest := E; + E := E.Next; + until E = @Edges[0]; + + //make sure eHighest is positioned so the following loop works safely ... + if EHighest.WindDelta > 0 then EHighest := EHighest.Next; + if (EHighest.Dx = Horizontal) then EHighest := EHighest.Next; + + //finally insert each local minima ... + E := EHighest; + repeat + E := AddBoundsToLML(E); + until (E = EHighest); +end; +//------------------------------------------------------------------------------ + +function TClipperBase.AddPolygons(const polygons: TPolygons; + PolyType: TPolyType): Boolean; +var + I: Integer; +begin + Result := False; + for I := 0 to high(polygons) do + if AddPolygon(polygons[I], PolyType) then Result := True; +end; +//------------------------------------------------------------------------------ + +procedure TClipperBase.Clear; +var + I: Integer; +begin + DisposeLocalMinimaList; + for I := 0 to FEdgeList.Count -1 do dispose(PEdgeArray(fEdgeList[I])); + FEdgeList.Clear; + FUse64BitRange := False; +end; +//------------------------------------------------------------------------------ + +procedure TClipperBase.Reset; +var + E: PEdge; + Lm: PLocalMinima; +begin + //Reset() allows various clipping operations to be executed + //multiple times on the same polygon sets. + + FCurrLm := FLmList; + //reset all edges ... + Lm := FCurrLm; + while Assigned(Lm) do + begin + E := Lm.LeftBound; + while Assigned(E) do + begin + E.XCurr := E.XBot; + E.YCurr := E.YBot; + E.Side := esLeft; + E.OutIdx := -1; + E := E.NextInLML; + end; + E := Lm.RightBound; + while Assigned(E) do + begin + E.XCurr := E.XBot; + E.YCurr := E.YBot; + E.Side := esRight; + E.OutIdx := -1; + E := E.NextInLML; + end; + Lm := Lm.Next; + end; +end; +//------------------------------------------------------------------------------ + +procedure TClipperBase.DisposeLocalMinimaList; +begin + while Assigned(fLmList) do + begin + FCurrLm := FLmList.Next; + Dispose(fLmList); + FLmList := FCurrLm; + end; + FCurrLm := nil; +end; +//------------------------------------------------------------------------------ + +procedure TClipperBase.PopLocalMinima; +begin + if not Assigned(fCurrLM) then Exit; + FCurrLM := FCurrLM.Next; +end; + +//------------------------------------------------------------------------------ +// TClipper methods ... +//------------------------------------------------------------------------------ + +constructor TClipper.Create; +begin + inherited Create; + FJoinList := TList.Create; + FPolyOutList := TList.Create; +end; +//------------------------------------------------------------------------------ + +destructor TClipper.Destroy; +begin + inherited; //this must be first since inherited Destroy calls Clear. + DisposeScanbeamList; + FJoinList.Free; + FPolyOutList.Free; +end; +//------------------------------------------------------------------------------ + +procedure TClipper.Clear; +begin + DisposeAllPolyPts; + inherited; +end; +//------------------------------------------------------------------------------ + +procedure TClipper.DisposeScanbeamList; +var + SB: PScanbeam; +begin + while Assigned(fScanbeam) do + begin + SB := FScanbeam.Next; + Dispose(fScanbeam); + FScanbeam := SB; + end; +end; +//------------------------------------------------------------------------------ + +procedure TClipper.Reset; +var + Lm: PLocalMinima; +begin + inherited Reset; + FScanbeam := nil; + DisposeAllPolyPts; + Lm := FLmList; + while Assigned(Lm) do + begin + InsertScanbeam(Lm.Y); + InsertScanbeam(Lm.LeftBound.YTop); + Lm := Lm.Next; + end; +end; +//------------------------------------------------------------------------------ + +function TClipper.Execute(clipType: TClipType; + out solution: TPolygons; + subjFillType: TPolyFillType = pftEvenOdd; + clipFillType: TPolyFillType = pftEvenOdd): Boolean; +begin + Result := False; + solution := nil; + if FExecuteLocked then Exit; + try + FExecuteLocked := True; + FSubjFillType := subjFillType; + FClipFillType := clipFillType; + FClipType := clipType; + FUsingPolyTree := False; + Result := ExecuteInternal; + if Result then solution := GetResult; + finally + FExecuteLocked := False; + end; +end; +//------------------------------------------------------------------------------ + +function TClipper.Execute(clipType: TClipType; + var PolyTree: TPolyTree; + subjFillType: TPolyFillType = pftEvenOdd; + clipFillType: TPolyFillType = pftEvenOdd): Boolean; +begin + Result := False; + if FExecuteLocked or not Assigned(PolyTree) then Exit; + try + FExecuteLocked := True; + FSubjFillType := subjFillType; + FClipFillType := clipFillType; + FClipType := clipType; + FUsingPolyTree := True; + Result := ExecuteInternal and GetResult2(PolyTree); + finally + FExecuteLocked := False; + end; +end; +//------------------------------------------------------------------------------ + +procedure TClipper.FixHoleLinkage(OutRec: POutRec); +var + orfl: POutRec; +begin + //skip if an outermost polygon or + //already already points to the correct FirstLeft ... + if not Assigned(OutRec.FirstLeft) or + ((OutRec.IsHole <> OutRec.FirstLeft.IsHole) and + Assigned(OutRec.FirstLeft.Pts)) then Exit; + orfl := OutRec.FirstLeft; + while Assigned(orfl) and + ((orfl.IsHole = OutRec.IsHole) or not Assigned(orfl.Pts)) do + orfl := orfl.FirstLeft; + OutRec.FirstLeft := orfl; +end; +//------------------------------------------------------------------------------ + +function TClipper.ExecuteInternal: Boolean; +var + I: Integer; + OutRec: POutRec; + BotY, TopY: Int64; +begin + Result := False; + try try + Reset; + if not Assigned(fScanbeam) then + begin + Result := True; + Exit; + end; + + BotY := PopScanbeam; + repeat + InsertLocalMinimaIntoAEL(BotY); + ClearHorzJoins; + ProcessHorizontals; + TopY := PopScanbeam; + if not ProcessIntersections(BotY, TopY) then Exit; + ProcessEdgesAtTopOfScanbeam(TopY); + BotY := TopY; + until FScanbeam = nil; + + //tidy up output polygons and fix orientations where necessary ... + for I := 0 to FPolyOutList.Count -1 do + begin + OutRec := FPolyOutList[I]; + if not Assigned(OutRec.Pts) then Continue; + FixupOutPolygon(OutRec); + if not Assigned(OutRec.Pts) then Continue; + if (OutRec.IsHole xor FReverseOutput) = (Area(OutRec, FUse64BitRange) > 0) then + ReversePolyPtLinks(OutRec.Pts); + end; + if FJoinList.count > 0 then JoinCommonEdges; + Result := True; + except + Result := False; + end; + finally + ClearJoins; + ClearHorzJoins; + end; +end; +//------------------------------------------------------------------------------ + +procedure TClipper.InsertScanbeam(const Y: Int64); +var + Sb, Sb2: PScanbeam; +begin + new(Sb); + Sb.Y := Y; + if not Assigned(fScanbeam) then + begin + FScanbeam := Sb; + Sb.Next := nil; + end else if Y > FScanbeam.Y then + begin + Sb.Next := FScanbeam; + FScanbeam := Sb; + end else + begin + Sb2 := FScanbeam; + while Assigned(Sb2.Next) and (Y <= Sb2.Next.Y) do Sb2 := Sb2.Next; + if Y <> Sb2.Y then + begin + Sb.Next := Sb2.Next; + Sb2.Next := Sb; + end + else dispose(Sb); //ie ignores duplicates + end; +end; +//------------------------------------------------------------------------------ + +function TClipper.PopScanbeam: Int64; +var + Sb: PScanbeam; +begin + Result := FScanbeam.Y; + Sb := FScanbeam; + FScanbeam := FScanbeam.Next; + dispose(Sb); +end; +//------------------------------------------------------------------------------ + +procedure TClipper.DisposePolyPts(PP: POutPt); +var + TmpPp: POutPt; +begin + PP.Prev.Next := nil; + while Assigned(PP) do + begin + TmpPp := PP; + PP := PP.Next; + dispose(TmpPp); + end; +end; +//------------------------------------------------------------------------------ + +procedure TClipper.DisposeAllPolyPts; +var + I: Integer; +begin + for I := 0 to FPolyOutList.Count -1 do DisposeOutRec(I); + FPolyOutList.Clear; +end; +//------------------------------------------------------------------------------ + +procedure TClipper.DisposeOutRec(Index: Integer); +var + OutRec: POutRec; +begin + OutRec := FPolyOutList[Index]; + if Assigned(OutRec.Pts) then DisposePolyPts(OutRec.Pts); + Dispose(OutRec); + FPolyOutList[Index] := nil; +end; +//------------------------------------------------------------------------------ + +procedure TClipper.SetWindingCount(Edge: PEdge); +var + E: PEdge; +begin + E := Edge.PrevInAEL; + //find the Edge of the same PolyType that immediately preceeds 'Edge' in AEL + while Assigned(E) and (E.PolyType <> Edge.PolyType) do E := E.PrevInAEL; + if not Assigned(E) then + begin + Edge.WindCnt := Edge.WindDelta; + Edge.WindCnt2 := 0; + E := FActiveEdges; //ie get ready to calc WindCnt2 + end else if IsEvenOddFillType(Edge) then + begin + //even-odd filling ... + Edge.WindCnt := 1; + Edge.WindCnt2 := E.WindCnt2; + E := E.NextInAEL; //ie get ready to calc WindCnt2 + end else + begin + //NonZero, Positive, or Negative filling ... + if E.WindCnt * E.WindDelta < 0 then + begin + if (abs(E.WindCnt) > 1) then + begin + if (E.WindDelta * Edge.WindDelta < 0) then Edge.WindCnt := E.WindCnt + else Edge.WindCnt := E.WindCnt + Edge.WindDelta; + end else + Edge.WindCnt := E.WindCnt + E.WindDelta + Edge.WindDelta; + end else + begin + if (abs(E.WindCnt) > 1) and (E.WindDelta * Edge.WindDelta < 0) then + Edge.WindCnt := E.WindCnt + else if E.WindCnt + Edge.WindDelta = 0 then + Edge.WindCnt := E.WindCnt + else Edge.WindCnt := E.WindCnt + Edge.WindDelta; + end; + Edge.WindCnt2 := E.WindCnt2; + E := E.NextInAEL; //ie get ready to calc WindCnt2 + end; + + //update WindCnt2 ... + if IsEvenOddAltFillType(Edge) then + begin + //even-odd filling ... + while (E <> Edge) do + begin + if Edge.WindCnt2 = 0 then Edge.WindCnt2 := 1 else Edge.WindCnt2 := 0; + E := E.NextInAEL; + end; + end else + begin + //NonZero, Positive, or Negative filling ... + while (E <> Edge) do + begin + Inc(Edge.WindCnt2, E.WindDelta); + E := E.NextInAEL; + end; + end; +end; +//------------------------------------------------------------------------------ + +function TClipper.IsEvenOddFillType(Edge: PEdge): Boolean; +begin + if Edge.PolyType = ptSubject then + Result := FSubjFillType = pftEvenOdd else + Result := FClipFillType = pftEvenOdd; +end; +//------------------------------------------------------------------------------ + +function TClipper.IsEvenOddAltFillType(Edge: PEdge): Boolean; +begin + if Edge.PolyType = ptSubject then + Result := FClipFillType = pftEvenOdd else + Result := FSubjFillType = pftEvenOdd; +end; +//------------------------------------------------------------------------------ + +function TClipper.IsContributing(Edge: PEdge): Boolean; +var + Pft, Pft2: TPolyFillType; +begin + if Edge.PolyType = ptSubject then + begin + Pft := FSubjFillType; + Pft2 := FClipFillType; + end else + begin + Pft := FClipFillType; + Pft2 := FSubjFillType + end; + case Pft of + pftEvenOdd, pftNonZero: Result := abs(Edge.WindCnt) = 1; + pftPositive: Result := (Edge.WindCnt = 1); + else Result := (Edge.WindCnt = -1); + end; + if not Result then Exit; + + case FClipType of + ctIntersection: + case Pft2 of + pftEvenOdd, pftNonZero: Result := (Edge.WindCnt2 <> 0); + pftPositive: Result := (Edge.WindCnt2 > 0); + pftNegative: Result := (Edge.WindCnt2 < 0); + end; + ctUnion: + case Pft2 of + pftEvenOdd, pftNonZero: Result := (Edge.WindCnt2 = 0); + pftPositive: Result := (Edge.WindCnt2 <= 0); + pftNegative: Result := (Edge.WindCnt2 >= 0); + end; + ctDifference: + if Edge.PolyType = ptSubject then + case Pft2 of + pftEvenOdd, pftNonZero: Result := (Edge.WindCnt2 = 0); + pftPositive: Result := (Edge.WindCnt2 <= 0); + pftNegative: Result := (Edge.WindCnt2 >= 0); + end + else + case Pft2 of + pftEvenOdd, pftNonZero: Result := (Edge.WindCnt2 <> 0); + pftPositive: Result := (Edge.WindCnt2 > 0); + pftNegative: Result := (Edge.WindCnt2 < 0); + end; + end; +end; +//------------------------------------------------------------------------------ + +procedure TClipper.AddLocalMinPoly(E1, E2: PEdge; const Pt: TIntPoint); +var + E, prevE: PEdge; +begin + if (E2.Dx = Horizontal) or (E1.Dx > E2.Dx) then + begin + AddOutPt(E1, Pt); + E2.OutIdx := E1.OutIdx; + E1.Side := esLeft; + E2.Side := esRight; + E := E1; + if E.PrevInAEL = E2 then + prevE := E2.PrevInAEL + else + prevE := E.PrevInAEL; + end else + begin + AddOutPt(E2, Pt); + E1.OutIdx := E2.OutIdx; + E1.Side := esRight; + E2.Side := esLeft; + E := E2; + if E.PrevInAEL = E1 then + prevE := E1.PrevInAEL + else + prevE := E.PrevInAEL; + end; + + if Assigned(prevE) and (prevE.OutIdx >= 0) and + (TopX(prevE, Pt.Y) = TopX(E, Pt.Y)) and + SlopesEqual(E, prevE, FUse64BitRange) then + AddJoin(E, prevE); +end; +//------------------------------------------------------------------------------ + +procedure TClipper.AddLocalMaxPoly(E1, E2: PEdge; const Pt: TIntPoint); +begin + AddOutPt(E1, Pt); + if (E1.OutIdx = E2.OutIdx) then + begin + E1.OutIdx := -1; + E2.OutIdx := -1; + end + else if E1.OutIdx < E2.OutIdx then + AppendPolygon(E1, E2) + else + AppendPolygon(E2, E1); +end; +//------------------------------------------------------------------------------ + +procedure TClipper.AddEdgeToSEL(Edge: PEdge); +begin + //SEL pointers in PEdge are reused to build a list of horizontal edges. + //However, we don't need to worry about order with horizontal Edge processing. + if not Assigned(fSortedEdges) then + begin + FSortedEdges := Edge; + Edge.PrevInSEL := nil; + Edge.NextInSEL := nil; + end else + begin + Edge.NextInSEL := FSortedEdges; + Edge.PrevInSEL := nil; + FSortedEdges.PrevInSEL := Edge; + FSortedEdges := Edge; + end; +end; +//------------------------------------------------------------------------------ + +procedure TClipper.CopyAELToSEL; +var + E: PEdge; +begin + E := FActiveEdges; + FSortedEdges := E; + while Assigned(E) do + begin + E.PrevInSEL := E.PrevInAEL; + E.NextInSEL := E.NextInAEL; + E := E.NextInAEL; + end; +end; +//------------------------------------------------------------------------------ + +procedure TClipper.AddJoin(E1, E2: PEdge; + E1OutIdx: Integer = -1; E2OutIdx: Integer = -1); +var + Jr: PJoinRec; +begin + new(Jr); + if E1OutIdx >= 0 then + Jr.Poly1Idx := E1OutIdx else + Jr.Poly1Idx := E1.OutIdx; + with E1^ do + begin + Jr.Pt1a := IntPoint(XCurr, YCurr); + Jr.Pt1b := IntPoint(XTop, YTop); + end; + if E2OutIdx >= 0 then + Jr.Poly2Idx := E2OutIdx else + Jr.Poly2Idx := E2.OutIdx; + with E2^ do + begin + Jr.Pt2a := IntPoint(XCurr, YCurr); + Jr.Pt2b := IntPoint(XTop, YTop); + end; + FJoinList.add(Jr); +end; +//------------------------------------------------------------------------------ + +procedure TClipper.ClearJoins; +var + I: Integer; +begin + for I := 0 to FJoinList.count -1 do + Dispose(PJoinRec(fJoinList[I])); + FJoinList.Clear; +end; +//------------------------------------------------------------------------------ + +procedure TClipper.AddHorzJoin(E: PEdge; Idx: Integer); +var + Hr: PHorzRec; +begin + new(Hr); + Hr.Edge := E; + Hr.SavedIdx := Idx; + if FHorizJoins = nil then + begin + FHorizJoins := Hr; + Hr.Next := Hr; + Hr.Prev := Hr; + end else + begin + Hr.Next := FHorizJoins; + Hr.Prev := FHorizJoins.Prev; + FHorizJoins.Prev.Next := Hr; + FHorizJoins.Prev := Hr; + end; +end; +//------------------------------------------------------------------------------ + +procedure TClipper.ClearHorzJoins; +var + M, M2: PHorzRec; +begin + if not Assigned(fHorizJoins) then Exit; + M := FHorizJoins; + M.Prev.Next := nil; + while Assigned(M) do + begin + M2 := M.Next; + dispose(M); + M := M2; + end; + FHorizJoins := nil; +end; +//------------------------------------------------------------------------------ + +procedure SwapPoints(var Pt1, Pt2: TIntPoint); +var + Tmp: TIntPoint; +begin + Tmp := Pt1; + Pt1 := Pt2; + Pt2 := Tmp; +end; +//------------------------------------------------------------------------------ + +function GetOverlapSegment(Pt1a, Pt1b, Pt2a, Pt2b: TIntPoint; + out Pt1, Pt2: TIntPoint): Boolean; +begin + //precondition: segments are colinear + if abs(Pt1a.X - Pt1b.X) > abs(Pt1a.Y - Pt1b.Y) then + begin + if Pt1a.X > Pt1b.X then SwapPoints(Pt1a, Pt1b); + if Pt2a.X > Pt2b.X then SwapPoints(Pt2a, Pt2b); + if (Pt1a.X > Pt2a.X) then Pt1 := Pt1a else Pt1 := Pt2a; + if (Pt1b.X < Pt2b.X) then Pt2 := Pt1b else Pt2 := Pt2b; + Result := Pt1.X < Pt2.X; + end else + begin + if Pt1a.Y < Pt1b.Y then SwapPoints(Pt1a, Pt1b); + if Pt2a.Y < Pt2b.Y then SwapPoints(Pt2a, Pt2b); + if (Pt1a.Y < Pt2a.Y) then Pt1 := Pt1a else Pt1 := Pt2a; + if (Pt1b.Y > Pt2b.Y) then Pt2 := Pt1b else Pt2 := Pt2b; + Result := Pt1.Y > Pt2.Y; + end; +end; +//------------------------------------------------------------------------------ + +procedure TClipper.InsertLocalMinimaIntoAEL(const BotY: Int64); + + function E2InsertsBeforeE1(E1,E2: PEdge): Boolean; + begin + if E2.XCurr = E1.XCurr then + Result := E2.Dx > E1.Dx else + Result := E2.XCurr < E1.XCurr; + end; + //---------------------------------------------------------------------- + + procedure InsertEdgeIntoAEL(Edge: PEdge); + var + E: PEdge; + begin + Edge.PrevInAEL := nil; + Edge.NextInAEL := nil; + if not Assigned(fActiveEdges) then + begin + FActiveEdges := Edge; + end else if E2InsertsBeforeE1(fActiveEdges, Edge) then + begin + Edge.NextInAEL := FActiveEdges; + FActiveEdges.PrevInAEL := Edge; + FActiveEdges := Edge; + end else + begin + E := FActiveEdges; + while Assigned(E.NextInAEL) and + not E2InsertsBeforeE1(E.NextInAEL, Edge) do + E := E.NextInAEL; + Edge.NextInAEL := E.NextInAEL; + if Assigned(E.NextInAEL) then E.NextInAEL.PrevInAEL := Edge; + Edge.PrevInAEL := E; + E.NextInAEL := Edge; + end; + end; + //---------------------------------------------------------------------- + +var + E: PEdge; + Pt, Pt2: TIntPoint; + Lb, Rb: PEdge; + Hj: PHorzRec; +begin + while Assigned(CurrentLm) and (CurrentLm.Y = BotY) do + begin + Lb := CurrentLm.LeftBound; + Rb := CurrentLm.RightBound; + + InsertEdgeIntoAEL(Lb); + InsertScanbeam(Lb.YTop); + InsertEdgeIntoAEL(Rb); + + //set Edge winding states ... + if IsEvenOddFillType(Lb) then + begin + Lb.WindDelta := 1; + Rb.WindDelta := 1; + end else + begin + Rb.WindDelta := -Lb.WindDelta + end; + SetWindingCount(Lb); + Rb.WindCnt := Lb.WindCnt; + Rb.WindCnt2 := Lb.WindCnt2; + + if Rb.Dx = Horizontal then + begin + AddEdgeToSEL(Rb); + InsertScanbeam(Rb.NextInLML.YTop); + end else + InsertScanbeam(Rb.YTop); + + if IsContributing(Lb) then + AddLocalMinPoly(Lb, Rb, IntPoint(Lb.XCurr, CurrentLm.Y)); + + //if output polygons share an Edge with rb, they'll need joining later ... + if (Rb.OutIdx >= 0) and (Rb.Dx = Horizontal) and Assigned(fHorizJoins) then + begin + Hj := FHorizJoins; + repeat + //if horizontals rb & hj.Edge overlap, flag for joining later ... + if GetOverlapSegment(IntPoint(Hj.Edge.XBot, Hj.Edge.YBot), + IntPoint(Hj.Edge.XTop, Hj.Edge.YTop), IntPoint(Rb.XBot, Rb.YBot), + IntPoint(Rb.XTop, Rb.YTop), Pt, Pt2) then + AddJoin(Hj.Edge, Rb, Hj.SavedIdx); + Hj := Hj.Next; + until Hj = FHorizJoins; + end; + + if (Lb.NextInAEL <> Rb) then + begin + if (Rb.OutIdx >= 0) and (Rb.PrevInAEL.OutIdx >= 0) and + SlopesEqual(Rb.PrevInAEL, Rb, FUse64BitRange) then + AddJoin(Rb, Rb.PrevInAEL); + + E := Lb.NextInAEL; + Pt := IntPoint(Lb.XCurr,Lb.YCurr); + while E <> Rb do + begin + if not Assigned(E) then raise exception.Create(rsMissingRightbound); + //nb: For calculating winding counts etc, IntersectEdges() assumes + //that param1 will be to the right of param2 ABOVE the intersection ... + IntersectEdges(Rb, E, Pt); + E := E.NextInAEL; + end; + end; + PopLocalMinima; + end; +end; +//------------------------------------------------------------------------------ + +procedure TClipper.DeleteFromAEL(E: PEdge); +var + AelPrev, AelNext: PEdge; +begin + AelPrev := E.PrevInAEL; + AelNext := E.NextInAEL; + if not Assigned(AelPrev) and not Assigned(AelNext) and + (E <> FActiveEdges) then Exit; //already deleted + if Assigned(AelPrev) then AelPrev.NextInAEL := AelNext + else FActiveEdges := AelNext; + if Assigned(AelNext) then AelNext.PrevInAEL := AelPrev; + E.NextInAEL := nil; + E.PrevInAEL := nil; +end; +//------------------------------------------------------------------------------ + +procedure TClipper.DeleteFromSEL(E: PEdge); +var + SelPrev, SelNext: PEdge; +begin + SelPrev := E.PrevInSEL; + SelNext := E.NextInSEL; + if not Assigned(SelPrev) and not Assigned(SelNext) and + (E <> FSortedEdges) then Exit; //already deleted + if Assigned(SelPrev) then SelPrev.NextInSEL := SelNext + else FSortedEdges := SelNext; + if Assigned(SelNext) then SelNext.PrevInSEL := SelPrev; + E.NextInSEL := nil; + E.PrevInSEL := nil; +end; +//------------------------------------------------------------------------------ + +procedure TClipper.IntersectEdges(E1,E2: PEdge; + const Pt: TIntPoint; protects: TIntersectProtects = []); + + procedure DoEdge1; + begin + AddOutPt(E1, Pt); + SwapSides(E1, E2); + SwapPolyIndexes(E1, E2); + end; + //---------------------------------------------------------------------- + + procedure DoEdge2; + begin + AddOutPt(E2, Pt); + SwapSides(E1, E2); + SwapPolyIndexes(E1, E2); + end; + //---------------------------------------------------------------------- + + procedure DoBothEdges; + begin + AddOutPt(E1, Pt); + AddOutPt(E2, Pt); + SwapSides(E1, E2); + SwapPolyIndexes(E1, E2); + end; + //---------------------------------------------------------------------- + +var + E1stops, E2stops: Boolean; + E1Contributing, E2contributing: Boolean; + E1FillType, E2FillType, E1FillType2, E2FillType2: TPolyFillType; + E1Wc, E2Wc, E1Wc2, E2Wc2: Integer; +begin + {IntersectEdges} + + //E1 will be to the left of E2 BELOW the intersection. Therefore E1 is before + //E2 in AEL except when E1 is being inserted at the intersection point ... + + E1stops := not (ipLeft in protects) and not Assigned(E1.NextInLML) and + (E1.XTop = Pt.x) and (E1.YTop = Pt.Y); + E2stops := not (ipRight in protects) and not Assigned(E2.NextInLML) and + (E2.XTop = Pt.x) and (E2.YTop = Pt.Y); + E1Contributing := (E1.OutIdx >= 0); + E2contributing := (E2.OutIdx >= 0); + + //update winding counts... + //assumes that E1 will be to the right of E2 ABOVE the intersection + if E1.PolyType = E2.PolyType then + begin + if IsEvenOddFillType(E1) then + begin + E1Wc := E1.WindCnt; + E1.WindCnt := E2.WindCnt; + E2.WindCnt := E1Wc; + end else + begin + if E1.WindCnt + E2.WindDelta = 0 then + E1.WindCnt := -E1.WindCnt else + Inc(E1.WindCnt, E2.WindDelta); + if E2.WindCnt - E1.WindDelta = 0 then + E2.WindCnt := -E2.WindCnt else + Dec(E2.WindCnt, E1.WindDelta); + end; + end else + begin + if not IsEvenOddFillType(E2) then Inc(E1.WindCnt2, E2.WindDelta) + else if E1.WindCnt2 = 0 then E1.WindCnt2 := 1 + else E1.WindCnt2 := 0; + if not IsEvenOddFillType(E1) then Dec(E2.WindCnt2, E1.WindDelta) + else if E2.WindCnt2 = 0 then E2.WindCnt2 := 1 + else E2.WindCnt2 := 0; + end; + + if E1.PolyType = ptSubject then + begin + E1FillType := FSubjFillType; + E1FillType2 := FClipFillType; + end else + begin + E1FillType := FClipFillType; + E1FillType2 := FSubjFillType; + end; + if E2.PolyType = ptSubject then + begin + E2FillType := FSubjFillType; + E2FillType2 := FClipFillType; + end else + begin + E2FillType := FClipFillType; + E2FillType2 := FSubjFillType; + end; + + case E1FillType of + pftPositive: E1Wc := E1.WindCnt; + pftNegative : E1Wc := -E1.WindCnt; + else E1Wc := abs(E1.WindCnt); + end; + case E2FillType of + pftPositive: E2Wc := E2.WindCnt; + pftNegative : E2Wc := -E2.WindCnt; + else E2Wc := abs(E2.WindCnt); + end; + + if E1Contributing and E2contributing then + begin + if E1stops or E2stops or not (E1Wc in [0,1]) or not (E2Wc in [0,1]) or + ((E1.PolyType <> E2.PolyType) and (fClipType <> ctXor)) then + AddLocalMaxPoly(E1, E2, Pt) else + DoBothEdges; + end else if E1Contributing then + begin + if ((E2Wc = 0) or (E2Wc = 1)) and + ((fClipType <> ctIntersection) or (E2.PolyType = ptSubject) or + (E2.WindCnt2 <> 0)) then DoEdge1; + end + else if E2contributing then + begin + if ((E1Wc = 0) or (E1Wc = 1)) and + ((fClipType <> ctIntersection) or (E1.PolyType = ptSubject) or + (E1.WindCnt2 <> 0)) then DoEdge2; + end + else if ((E1Wc = 0) or (E1Wc = 1)) and ((E2Wc = 0) or (E2Wc = 1)) and + not E1stops and not E2stops then + begin + //neither Edge is currently contributing ... + + case E1FillType2 of + pftPositive: E1Wc2 := E1.WindCnt2; + pftNegative : E1Wc2 := -E1.WindCnt2; + else E1Wc2 := abs(E1.WindCnt2); + end; + case E2FillType2 of + pftPositive: E2Wc2 := E2.WindCnt2; + pftNegative : E2Wc2 := -E2.WindCnt2; + else E2Wc2 := abs(E2.WindCnt2); + end; + + if (E1.PolyType <> E2.PolyType) then + AddLocalMinPoly(E1, E2, Pt) + else if (E1Wc = 1) and (E2Wc = 1) then + case FClipType of + ctIntersection: + if (E1Wc2 > 0) and (E2Wc2 > 0) then + AddLocalMinPoly(E1, E2, Pt); + ctUnion: + if (E1Wc2 <= 0) and (E2Wc2 <= 0) then + AddLocalMinPoly(E1, E2, Pt); + ctDifference: + if ((E1.PolyType = ptClip) and (E1Wc2 > 0) and (E2Wc2 > 0)) or + ((E1.PolyType = ptSubject) and (E1Wc2 <= 0) and (E2Wc2 <= 0)) then + AddLocalMinPoly(E1, E2, Pt); + ctXor: + AddLocalMinPoly(E1, E2, Pt); + end + else + swapsides(E1,E2); + end; + + if (E1stops <> E2stops) and + ((E1stops and (E1.OutIdx >= 0)) or (E2stops and (E2.OutIdx >= 0))) then + begin + swapsides(E1,E2); + SwapPolyIndexes(E1, E2); + end; + + //finally, delete any non-contributing maxima edges ... + if E1stops then deleteFromAEL(E1); + if E2stops then deleteFromAEL(E2); +end; +//------------------------------------------------------------------------------ + +function FirstParamIsBottomPt(btmPt1, btmPt2: POutPt): Boolean; +var + Dx1n, Dx1p, Dx2n, Dx2p: Double; + P: POutPt; +begin + //Precondition: bottom-points share the same vertex. + //Use inverse slopes of adjacent edges (ie dx/dy) to determine the outer + //polygon and hence the 'real' bottompoint. + //nb: Slope is vertical when dx == 0. If the greater abs(dx) of param1 + //is greater than or equal both abs(dx) in param2 then param1 is outer. + P := btmPt1.Prev; + while PointsEqual(P.Pt, btmPt1.Pt) and (P <> btmPt1) do P := P.Prev; + Dx1p := abs(GetDx(btmPt1.Pt, P.Pt)); + P := btmPt1.Next; + while PointsEqual(P.Pt, btmPt1.Pt) and (P <> btmPt1) do P := P.Next; + Dx1n := abs(GetDx(btmPt1.Pt, P.Pt)); + + P := btmPt2.Prev; + while PointsEqual(P.Pt, btmPt2.Pt) and (P <> btmPt2) do P := P.Prev; + Dx2p := abs(GetDx(btmPt2.Pt, P.Pt)); + P := btmPt2.Next; + while PointsEqual(P.Pt, btmPt2.Pt) and (P <> btmPt2) do P := P.Next; + Dx2n := abs(GetDx(btmPt2.Pt, P.Pt)); + Result := ((Dx1p >= Dx2p) and (Dx1p >= Dx2n)) or + ((Dx1n >= Dx2p) and (Dx1n >= Dx2n)); +end; +//------------------------------------------------------------------------------ + +function GetBottomPt(PP: POutPt): POutPt; +var + P, Dups: POutPt; +begin + Dups := nil; + P := PP.Next; + while P <> PP do + begin + if P.Pt.Y > PP.Pt.Y then + begin + PP := P; + Dups := nil; + end + else if (P.Pt.Y = PP.Pt.Y) and (P.Pt.X <= PP.Pt.X) then + begin + if (P.Pt.X < PP.Pt.X) then + begin + Dups := nil; + PP := P; + end else + begin + if (P.Next <> PP) and (P.Prev <> PP) then Dups := P; + end; + end; + P := P.Next; + end; + if Assigned(Dups) then + begin + //there appears to be at least 2 vertices at BottomPt so ... + while Dups <> P do + begin + if not FirstParamIsBottomPt(P, Dups) then PP := Dups; + Dups := Dups.Next; + while not PointsEqual(Dups.Pt, PP.Pt) do Dups := Dups.Next; + end; + end; + Result := PP; +end; +//------------------------------------------------------------------------------ + +procedure TClipper.SetHoleState(E: PEdge; OutRec: POutRec); +var + E2: PEdge; + IsHole: Boolean; +begin + IsHole := False; + E2 := E.PrevInAEL; + while Assigned(E2) do + begin + if (E2.OutIdx >= 0) then + begin + IsHole := not IsHole; + if not Assigned(OutRec.FirstLeft) then + OutRec.FirstLeft := POutRec(fPolyOutList[E2.OutIdx]); + end; + E2 := E2.PrevInAEL; + end; + if IsHole then + OutRec.IsHole := True; +end; +//------------------------------------------------------------------------------ + +function GetLowermostRec(OutRec1, OutRec2: POutRec): POutRec; +var + OutPt1, OutPt2: POutPt; +begin + OutPt1 := OutRec1.BottomPt; + OutPt2 := OutRec2.BottomPt; + if (OutPt1.Pt.Y > OutPt2.Pt.Y) then Result := OutRec1 + else if (OutPt1.Pt.Y < OutPt2.Pt.Y) then Result := OutRec2 + else if (OutPt1.Pt.X < OutPt2.Pt.X) then Result := OutRec1 + else if (OutPt1.Pt.X > OutPt2.Pt.X) then Result := OutRec2 + else if (OutPt1.Next = OutPt1) then Result := OutRec2 + else if (OutPt2.Next = OutPt2) then Result := OutRec1 + else if FirstParamIsBottomPt(OutPt1, OutPt2) then Result := OutRec1 + else Result := OutRec2; +end; +//------------------------------------------------------------------------------ + +function Param1RightOfParam2(OutRec1, OutRec2: POutRec): Boolean; +begin + Result := True; + repeat + OutRec1 := OutRec1.FirstLeft; + if OutRec1 = OutRec2 then Exit; + until not Assigned(OutRec1); + Result := False; +end; +//------------------------------------------------------------------------------ + +procedure TClipper.AppendPolygon(E1, E2: PEdge); +var + HoleStateRec, OutRec1, OutRec2: POutRec; + P1_lft, P1_rt, P2_lft, P2_rt: POutPt; + NewSide: TEdgeSide; + I, OKIdx, ObsoleteIdx: Integer; + E: PEdge; + Jr: PJoinRec; + H: PHorzRec; +begin + OutRec1 := FPolyOutList[E1.OutIdx]; + OutRec2 := FPolyOutList[E2.OutIdx]; + + //First work out which polygon fragment has the correct hole state. + //Since we're working from the bottom upward and left to right, the left most + //and lowermost polygon is outermost and must have the correct hole state ... + if Param1RightOfParam2(OutRec1, OutRec2) then HoleStateRec := OutRec2 + else if Param1RightOfParam2(OutRec2, OutRec1) then HoleStateRec := OutRec1 + else HoleStateRec := GetLowermostRec(OutRec1, OutRec2); + + //get the start and ends of both output polygons ... + P1_lft := OutRec1.Pts; + P2_lft := OutRec2.Pts; + P1_rt := P1_lft.Prev; + P2_rt := P2_lft.Prev; + + //join E2 poly onto E1 poly and delete pointers to E2 ... + if E1.Side = esLeft then + begin + if E2.Side = esLeft then + begin + //z y x a b c + ReversePolyPtLinks(P2_lft); + P2_lft.Next := P1_lft; + P1_lft.Prev := P2_lft; + P1_rt.Next := P2_rt; + P2_rt.Prev := P1_rt; + OutRec1.Pts := P2_rt; + end else + begin + //x y z a b c + P2_rt.Next := P1_lft; + P1_lft.Prev := P2_rt; + P2_lft.Prev := P1_rt; + P1_rt.Next := P2_lft; + OutRec1.Pts := P2_lft; + end; + NewSide := esLeft; + end else + begin + if E2.Side = esRight then + begin + //a b c z y x + ReversePolyPtLinks(P2_lft); + P1_rt.Next := P2_rt; + P2_rt.Prev := P1_rt; + P2_lft.Next := P1_lft; + P1_lft.Prev := P2_lft; + end else + begin + //a b c x y z + P1_rt.Next := P2_lft; + P2_lft.Prev := P1_rt; + P1_lft.Prev := P2_rt; + P2_rt.Next := P1_lft; + end; + NewSide := esRight; + end; + + if HoleStateRec = OutRec2 then + begin + OutRec1.BottomPt := OutRec2.BottomPt; + OutRec1.BottomPt.Idx := OutRec1.Idx; + if OutRec2.FirstLeft <> OutRec1 then + OutRec1.FirstLeft := OutRec2.FirstLeft; + OutRec1.IsHole := OutRec2.IsHole; + end; + + OutRec2.Pts := nil; + OutRec2.BottomPt := nil; + OutRec2.FirstLeft := OutRec1; + + OKIdx := OutRec1.Idx; + ObsoleteIdx := OutRec2.Idx; + + E1.OutIdx := -1; //nb: safe because we only get here via AddLocalMaxPoly + E2.OutIdx := -1; + + E := FActiveEdges; + while Assigned(E) do + begin + if (E.OutIdx = ObsoleteIdx) then + begin + E.OutIdx := OKIdx; + E.Side := NewSide; + Break; + end; + E := E.NextInAEL; + end; + + for I := 0 to FJoinList.count -1 do + begin + Jr := FJoinList[I]; + if Jr.Poly1Idx = ObsoleteIdx then Jr.Poly1Idx := OKIdx; + if Jr.Poly2Idx = ObsoleteIdx then Jr.Poly2Idx := OKIdx; + end; + if Assigned(fHorizJoins) then + begin + H := FHorizJoins; + repeat + if H.SavedIdx = ObsoleteIdx then H.SavedIdx := OKIdx; + H := H.Next; + until H = FHorizJoins; + end; +end; +//------------------------------------------------------------------------------ + +function TClipper.CreateOutRec: POutRec; +begin + new(Result); + Result.IsHole := False; + Result.FirstLeft := nil; + Result.Pts := nil; + Result.BottomPt := nil; + Result.PolyNode := nil; +end; +//------------------------------------------------------------------------------ + +procedure TClipper.AddOutPt(E: PEdge; const Pt: TIntPoint); +var + OutRec: POutRec; + Op, op2: POutPt; + ToFront: Boolean; +begin + ToFront := E.Side = esLeft; + if E.OutIdx < 0 then + begin + OutRec := CreateOutRec; + OutRec.Idx := FPolyOutList.Add(OutRec); + E.OutIdx := OutRec.Idx; + new(Op); + OutRec.Pts := Op; + OutRec.BottomPt := Op; + + Op.Pt := Pt; + Op.Next := Op; + Op.Prev := Op; + Op.Idx := OutRec.Idx; + SetHoleState(E, OutRec); + end else + begin + OutRec := FPolyOutList[E.OutIdx]; + Op := OutRec.Pts; + if (ToFront and PointsEqual(Pt, Op.Pt)) or + (not ToFront and PointsEqual(Pt, Op.Prev.Pt)) then Exit; + new(op2); + op2.Pt := Pt; + op2.Idx := OutRec.Idx; + if (op2.Pt.Y = OutRec.BottomPt.Pt.Y) and + (op2.Pt.X < OutRec.BottomPt.Pt.X) then + OutRec.BottomPt := op2; + op2.Next := Op; + op2.Prev := Op.Prev; + Op.Prev.Next := op2; + Op.Prev := op2; + if ToFront then OutRec.Pts := op2; + end; +end; +//------------------------------------------------------------------------------ + +procedure TClipper.ProcessHorizontals; +var + E: PEdge; +begin + while Assigned(fSortedEdges) do + begin + E := FSortedEdges; + DeleteFromSEL(E); + ProcessHorizontal(E); + end; +end; +//------------------------------------------------------------------------------ + +function TClipper.IsTopHorz(const XPos: Int64): Boolean; +var + E: PEdge; +begin + Result := False; + E := FSortedEdges; + while Assigned(E) do + begin + if (XPos >= min(E.XCurr,E.XTop)) and (XPos <= max(E.XCurr,E.XTop)) then Exit; + E := E.NextInSEL; + end; + Result := True; +end; +//------------------------------------------------------------------------------ + +function IsMinima(E: PEdge): Boolean; +begin + Result := Assigned(E) and (E.Prev.NextInLML <> E) and (E.Next.NextInLML <> E); +end; +//------------------------------------------------------------------------------ + +function IsMaxima(E: PEdge; const Y: Int64): Boolean; +begin + Result := Assigned(E) and (E.YTop = Y) and not Assigned(E.NextInLML); +end; +//------------------------------------------------------------------------------ + +function IsIntermediate(E: PEdge; const Y: Int64): Boolean; +begin + Result := (E.YTop = Y) and Assigned(E.NextInLML); +end; +//------------------------------------------------------------------------------ + +function GetMaximaPair(E: PEdge): PEdge; +begin + Result := E.Next; + if not IsMaxima(Result, E.YTop) or (Result.XTop <> E.XTop) then + Result := E.Prev; +end; +//------------------------------------------------------------------------------ + +procedure TClipper.SwapPositionsInAEL(E1, E2: PEdge); +var + Prev,Next: PEdge; +begin + if E1.NextInAEL = E2 then + begin + Next := E2.NextInAEL; + if Assigned(Next) then Next.PrevInAEL := E1; + Prev := E1.PrevInAEL; + if Assigned(Prev) then Prev.NextInAEL := E2; + E2.PrevInAEL := Prev; + E2.NextInAEL := E1; + E1.PrevInAEL := E2; + E1.NextInAEL := Next; + end + else if E2.NextInAEL = E1 then + begin + Next := E1.NextInAEL; + if Assigned(Next) then Next.PrevInAEL := E2; + Prev := E2.PrevInAEL; + if Assigned(Prev) then Prev.NextInAEL := E1; + E1.PrevInAEL := Prev; + E1.NextInAEL := E2; + E2.PrevInAEL := E1; + E2.NextInAEL := Next; + end else + begin + Next := E1.NextInAEL; + Prev := E1.PrevInAEL; + E1.NextInAEL := E2.NextInAEL; + if Assigned(E1.NextInAEL) then E1.NextInAEL.PrevInAEL := E1; + E1.PrevInAEL := E2.PrevInAEL; + if Assigned(E1.PrevInAEL) then E1.PrevInAEL.NextInAEL := E1; + E2.NextInAEL := Next; + if Assigned(E2.NextInAEL) then E2.NextInAEL.PrevInAEL := E2; + E2.PrevInAEL := Prev; + if Assigned(E2.PrevInAEL) then E2.PrevInAEL.NextInAEL := E2; + end; + if not Assigned(E1.PrevInAEL) then FActiveEdges := E1 + else if not Assigned(E2.PrevInAEL) then FActiveEdges := E2; +end; +//------------------------------------------------------------------------------ + +procedure TClipper.SwapPositionsInSEL(E1, E2: PEdge); +var + Prev,Next: PEdge; +begin + if E1.NextInSEL = E2 then + begin + Next := E2.NextInSEL; + if Assigned(Next) then Next.PrevInSEL := E1; + Prev := E1.PrevInSEL; + if Assigned(Prev) then Prev.NextInSEL := E2; + E2.PrevInSEL := Prev; + E2.NextInSEL := E1; + E1.PrevInSEL := E2; + E1.NextInSEL := Next; + end + else if E2.NextInSEL = E1 then + begin + Next := E1.NextInSEL; + if Assigned(Next) then Next.PrevInSEL := E2; + Prev := E2.PrevInSEL; + if Assigned(Prev) then Prev.NextInSEL := E1; + E1.PrevInSEL := Prev; + E1.NextInSEL := E2; + E2.PrevInSEL := E1; + E2.NextInSEL := Next; + end else + begin + Next := E1.NextInSEL; + Prev := E1.PrevInSEL; + E1.NextInSEL := E2.NextInSEL; + if Assigned(E1.NextInSEL) then E1.NextInSEL.PrevInSEL := E1; + E1.PrevInSEL := E2.PrevInSEL; + if Assigned(E1.PrevInSEL) then E1.PrevInSEL.NextInSEL := E1; + E2.NextInSEL := Next; + if Assigned(E2.NextInSEL) then E2.NextInSEL.PrevInSEL := E2; + E2.PrevInSEL := Prev; + if Assigned(E2.PrevInSEL) then E2.PrevInSEL.NextInSEL := E2; + end; + if not Assigned(E1.PrevInSEL) then FSortedEdges := E1 + else if not Assigned(E2.PrevInSEL) then FSortedEdges := E2; +end; +//------------------------------------------------------------------------------ + +procedure TClipper.ProcessHorizontal(HorzEdge: PEdge); + + function GetNextInAEL(E: PEdge; Direction: TDirection): PEdge; + begin + if Direction = dLeftToRight then + Result := E.NextInAEL else + Result := E.PrevInAEL; + end; + //------------------------------------------------------------------------ + +var + E, eNext, eMaxPair: PEdge; + HorzLeft, HorzRight: Int64; + Direction: TDirection; +const + ProtectLeft: array[Boolean] of TIntersectProtects = ([ipRight], [ipLeft,ipRight]); + ProtectRight: array[Boolean] of TIntersectProtects = ([ipLeft], [ipLeft,ipRight]); +begin +(******************************************************************************* +* Notes: Horizontal edges (HEs) at scanline intersections (ie at the top or * +* bottom of a scanbeam) are processed as if layered. The order in which HEs * +* are processed doesn't matter. HEs intersect with other HE xbots only [#], * +* and with other non-horizontal edges [*]. Once these intersections are * +* processed, intermediate HEs then 'promote' the Edge above (NextInLML) into * +* the AEL. These 'promoted' edges may in turn intersect [%] with other HEs. * +*******************************************************************************) + +(******************************************************************************* +* \ nb: HE processing order doesn't matter / / * +* \ / / * +* { -------- \ ------------------- / \ - (3) o==========%==========o - } * +* { o==========o (2) / \ . . } * +* { . / \ . . } * +* { ---- o===============#========*========*=====#==========o (1) ------- } * +* / \ / \ / * +*******************************************************************************) + + if HorzEdge.XCurr < HorzEdge.XTop then + begin + HorzLeft := HorzEdge.XCurr; + HorzRight := HorzEdge.XTop; + Direction := dLeftToRight; + end else + begin + HorzLeft := HorzEdge.XTop; + HorzRight := HorzEdge.XCurr; + Direction := dRightToLeft; + end; + + if Assigned(HorzEdge.NextInLML) then + eMaxPair := nil else + eMaxPair := GetMaximaPair(HorzEdge); + + E := GetNextInAEL(HorzEdge, Direction); + while Assigned(E) do + begin + eNext := GetNextInAEL(E, Direction); + if Assigned(eMaxPair) or + ((Direction = dLeftToRight) and (E.XCurr <= HorzRight)) or + ((Direction = dRightToLeft) and (E.XCurr >= HorzLeft)) then + begin + //ok, so far it looks like we're still in range of the horizontal Edge + + if (E.XCurr = HorzEdge.XTop) and not Assigned(eMaxPair) then + begin + if SlopesEqual(E, HorzEdge.NextInLML, FUse64BitRange) then + begin + //if output polygons share an Edge, they'll need joining later ... + if (HorzEdge.OutIdx >= 0) and (E.OutIdx >= 0) then + AddJoin(HorzEdge.NextInLML, E, HorzEdge.OutIdx); + Break; //we've reached the end of the horizontal line + end + else if (E.Dx < HorzEdge.NextInLML.Dx) then + //we really have got to the end of the intermediate horz Edge so quit. + //nb: More -ve slopes follow more +ve slopes ABOVE the horizontal. + Break; + end; + + if (E = eMaxPair) then + begin + //HorzEdge is evidently a maxima horizontal and we've arrived at its end. + if Direction = dLeftToRight then + IntersectEdges(HorzEdge, E, IntPoint(E.XCurr, HorzEdge.YCurr)) else + IntersectEdges(E, HorzEdge, IntPoint(E.XCurr, HorzEdge.YCurr)); + + if (eMaxPair.OutIdx >= 0) then raise exception.Create(rsHorizontal); + Exit; + end + else if (E.Dx = Horizontal) and not IsMinima(E) and not (E.XCurr > E.XTop) then + begin + //An overlapping horizontal Edge. Overlapping horizontal edges are + //processed as if layered with the current horizontal Edge (horizEdge) + //being infinitesimally lower that the Next (E). Therfore, we + //intersect with E only if E.XCurr is within the bounds of HorzEdge ... + if Direction = dLeftToRight then + IntersectEdges(HorzEdge, E, IntPoint(E.XCurr, HorzEdge.YCurr), + ProtectRight[not IsTopHorz(E.XCurr)]) + else + IntersectEdges(E, HorzEdge, IntPoint(E.XCurr, HorzEdge.YCurr), + ProtectLeft[not IsTopHorz(E.XCurr)]); + end + else if (Direction = dLeftToRight) then + IntersectEdges(HorzEdge, E, IntPoint(E.XCurr, HorzEdge.YCurr), + ProtectRight[not IsTopHorz(E.XCurr)]) + else + IntersectEdges(E, HorzEdge, IntPoint(E.XCurr, HorzEdge.YCurr), + ProtectLeft[not IsTopHorz(E.XCurr)]); + SwapPositionsInAEL(HorzEdge, E); + end + else if ((Direction = dLeftToRight) and + (E.XCurr > HorzRight) and Assigned(fSortedEdges)) or + ((Direction = dRightToLeft) and + (E.XCurr < HorzLeft) and Assigned(fSortedEdges)) then + Break; + E := eNext; + end; + + if Assigned(HorzEdge.NextInLML) then + begin + if (HorzEdge.OutIdx >= 0) then + AddOutPt(HorzEdge, IntPoint(HorzEdge.XTop, HorzEdge.YTop)); + UpdateEdgeIntoAEL(HorzEdge); + end else + begin + if HorzEdge.OutIdx >= 0 then + IntersectEdges(HorzEdge, eMaxPair, + IntPoint(HorzEdge.XTop, HorzEdge.YCurr), [ipLeft,ipRight]); + + if eMaxPair.OutIdx >= 0 then raise exception.Create(rsHorizontal); + DeleteFromAEL(eMaxPair); + DeleteFromAEL(HorzEdge); + end; +end; +//------------------------------------------------------------------------------ + +procedure TClipper.UpdateEdgeIntoAEL(var E: PEdge); +var + AelPrev, AelNext: PEdge; +begin + if not Assigned(E.NextInLML) then raise exception.Create(rsUpdateEdgeIntoAEL); + AelPrev := E.PrevInAEL; + AelNext := E.NextInAEL; + E.NextInLML.OutIdx := E.OutIdx; + if Assigned(AelPrev) then + AelPrev.NextInAEL := E.NextInLML else + FActiveEdges := E.NextInLML; + if Assigned(AelNext) then + AelNext.PrevInAEL := E.NextInLML; + E.NextInLML.Side := E.Side; + E.NextInLML.WindDelta := E.WindDelta; + E.NextInLML.WindCnt := E.WindCnt; + E.NextInLML.WindCnt2 := E.WindCnt2; + E := E.NextInLML; + E.PrevInAEL := AelPrev; + E.NextInAEL := AelNext; + if E.Dx <> Horizontal then + InsertScanbeam(E.YTop); +end; +//------------------------------------------------------------------------------ + +function TClipper.ProcessIntersections(const BotY, TopY: Int64): Boolean; +begin + Result := True; + try + BuildIntersectList(BotY, TopY); + if FIntersectNodes = nil then Exit; + if FixupIntersections then ProcessIntersectList + else Result := False; + finally + //if there's been an error, clean up the mess ... + DisposeIntersectNodes; + end; +end; +//------------------------------------------------------------------------------ + +procedure TClipper.DisposeIntersectNodes; +var + N: PIntersectNode; +begin + while Assigned(fIntersectNodes) do + begin + N := FIntersectNodes.Next; + dispose(fIntersectNodes); + FIntersectNodes := N; + end; +end; +//------------------------------------------------------------------------------ + +procedure TClipper.BuildIntersectList(const BotY, TopY: Int64); +var + E, eNext: PEdge; + Pt: TIntPoint; + IsModified: Boolean; +begin + if not Assigned(fActiveEdges) then Exit; + + //prepare for sorting ... + E := FActiveEdges; + FSortedEdges := E; + while Assigned(E) do + begin + E.PrevInSEL := E.PrevInAEL; + E.NextInSEL := E.NextInAEL; + E.TmpX := TopX(E, TopY); + E := E.NextInAEL; + end; + + try + //bubblesort ... + IsModified := True; + while IsModified and Assigned(fSortedEdges) do + begin + IsModified := False; + E := FSortedEdges; + while Assigned(E.NextInSEL) do + begin + eNext := E.NextInSEL; + if (E.TmpX > eNext.TmpX) and + IntersectPoint(E, eNext, Pt, FUse64BitRange) then + begin + if Pt.Y > BotY then + begin + Pt.Y := BotY; + Pt.X := TopX(E, Pt.Y); + end; + AddIntersectNode(E, eNext, Pt); + SwapPositionsInSEL(E, eNext); + IsModified := True; + end else + E := eNext; + end; + if Assigned(E.PrevInSEL) then E.PrevInSEL.NextInSEL := nil else Break; + end; + finally + FSortedEdges := nil; + end; +end; +//------------------------------------------------------------------------------ + +procedure TClipper.AddIntersectNode(E1, E2: PEdge; const Pt: TIntPoint); + + function ProcessParam1BeforeParam2(node1, node2: PIntersectNode): Boolean; + begin + if node1.Pt.Y = node2.Pt.Y then + begin + if (node1.Edge1 = node2.Edge1) or (node1.Edge2 = node2.Edge1) then + begin + Result := node2.Pt.X > node1.Pt.X; + if node2.Edge1.Dx > 0 then Result := not Result; + end + else if (node1.Edge1 = node2.Edge2) or (node1.Edge2 = node2.Edge2) then + begin + Result := node2.Pt.X > node1.Pt.X; + if node2.Edge2.Dx > 0 then Result := not Result; + end else + Result := node2.Pt.X > node1.Pt.X; + end + else Result := node1.Pt.Y > node2.Pt.Y; + end; + //---------------------------------------------------------------------------- + +var + Node, NewNode: PIntersectNode; +begin + new(NewNode); + NewNode.Edge1 := E1; + NewNode.Edge2 := E2; + NewNode.Pt := Pt; + NewNode.Next := nil; + if not Assigned(fIntersectNodes) then + FIntersectNodes := NewNode + else if ProcessParam1BeforeParam2(NewNode, FIntersectNodes) then + begin + NewNode.Next := FIntersectNodes; + FIntersectNodes := NewNode; + end else + begin + Node := FIntersectNodes; + while Assigned(Node.Next) and + ProcessParam1BeforeParam2(Node.Next, NewNode) do + Node := Node.Next; + NewNode.Next := Node.Next; + Node.Next := NewNode; + end; +end; +//------------------------------------------------------------------------------ + +procedure TClipper.ProcessIntersectList; +var + Node: PIntersectNode; +begin + while Assigned(fIntersectNodes) do + begin + Node := FIntersectNodes.Next; + with FIntersectNodes^ do + begin + IntersectEdges(Edge1, Edge2, Pt, [ipLeft,ipRight]); + SwapPositionsInAEL(Edge1, Edge2); + end; + dispose(fIntersectNodes); + FIntersectNodes := Node; + end; +end; +//------------------------------------------------------------------------------ + +procedure TClipper.DoMaxima(E: PEdge; const TopY: Int64); +var + ENext, EMaxPair: PEdge; + X: Int64; +begin + EMaxPair := GetMaximaPair(E); + X := E.XTop; + ENext := E.NextInAEL; + while ENext <> EMaxPair do + begin + if not Assigned(ENext) then raise exception.Create(rsDoMaxima); + IntersectEdges(E, ENext, IntPoint(X, TopY), [ipLeft, ipRight]); + SwapPositionsInAEL(E, ENext); + ENext := ENext.NextInAEL; + end; + if (E.OutIdx < 0) and (EMaxPair.OutIdx < 0) then + begin + DeleteFromAEL(E); + DeleteFromAEL(EMaxPair); + end + else if (E.OutIdx >= 0) and (EMaxPair.OutIdx >= 0) then + begin + IntersectEdges(E, EMaxPair, IntPoint(X, TopY)); + end + else raise exception.Create(rsDoMaxima); +end; +//------------------------------------------------------------------------------ + +procedure TClipper.ProcessEdgesAtTopOfScanbeam(const TopY: Int64); +var + E, ePrev, eNext: PEdge; + Hj: PHorzRec; + Pt, Pt2: TIntPoint; +begin +(******************************************************************************* +* Notes: Processing edges at scanline intersections (ie at the top or bottom * +* of a scanbeam) needs to be done in multiple stages and in the correct order. * +* Firstly, edges forming a 'maxima' need to be processed and then removed. * +* Next, 'intermediate' and 'maxima' horizontal edges are processed. Then edges * +* that intersect exactly at the top of the scanbeam are processed [%]. * +* Finally, new minima are added and any intersects they create are processed. * +*******************************************************************************) + +(******************************************************************************* +* \ / / \ / * +* \ Horizontal minima / / \ / * +* { -- o======================#====o -------- . ------------------- } * +* { Horizontal maxima . % scanline intersect } * +* { -- o=======================#===================#========o ---------- } * +* | / / \ \ * +* + maxima intersect / / \ \ * +* /|\ / / \ \ * +* / | \ / / \ \ * +*******************************************************************************) + + E := FActiveEdges; + while Assigned(E) do + begin + //1. process maxima, treating them as if they're 'bent' horizontal edges, + // but exclude maxima with Horizontal edges. nb: E can't be a Horizontal. + if IsMaxima(E, TopY) and (GetMaximaPair(E).Dx <> Horizontal) then + begin + //'E' might be removed from AEL, as may any following edges so ... + ePrev := E.PrevInAEL; + DoMaxima(E, TopY); + if not Assigned(ePrev) then + E := FActiveEdges else + E := ePrev.NextInAEL; + end else + begin + //2. promote horizontal edges, otherwise update XCurr and YCurr ... + if IsIntermediate(E, TopY) and (E.NextInLML.Dx = Horizontal) then + begin + if (E.OutIdx >= 0) then + begin + AddOutPt(E, IntPoint(E.XTop, E.YTop)); + + Hj := FHorizJoins; + if Assigned(Hj) then + repeat + if GetOverlapSegment(IntPoint(Hj.Edge.XBot, Hj.Edge.YBot), + IntPoint(Hj.Edge.XTop, Hj.Edge.YTop), + IntPoint(E.NextInLML.XBot, E.NextInLML.YBot), + IntPoint(E.NextInLML.XTop, E.NextInLML.YTop), Pt, Pt2) then + AddJoin(Hj.Edge, E.NextInLML, Hj.SavedIdx, E.OutIdx); + Hj := Hj.Next; + until Hj = FHorizJoins; + + AddHorzJoin(E.NextInLML, E.OutIdx); + end; + UpdateEdgeIntoAEL(E); + AddEdgeToSEL(E); + end else + begin + //this just simplifies horizontal processing ... + E.XCurr := TopX(E, TopY); + E.YCurr := TopY; + end; + E := E.NextInAEL; + end; + end; + + //3. Process horizontals at the top of the scanbeam ... + ProcessHorizontals; + + //4. Promote intermediate vertices ... + E := FActiveEdges; + while Assigned(E) do + begin + if IsIntermediate(E, TopY) then + begin + if (E.OutIdx >= 0) then AddOutPt(E, IntPoint(E.XTop, E.YTop)); + UpdateEdgeIntoAEL(E); + + //if output polygons share an Edge, they'll need joining later ... + ePrev := E.PrevInAEL; + eNext := E.NextInAEL; + if Assigned(ePrev) and (ePrev.XCurr = E.XBot) and + (ePrev.YCurr = E.YBot) and (E.OutIdx >= 0) and + (ePrev.OutIdx >= 0) and (ePrev.YCurr > ePrev.YTop) and + SlopesEqual(E, ePrev, FUse64BitRange) then + begin + AddOutPt(ePrev, IntPoint(E.XBot, E.YBot)); + AddJoin(E, ePrev); + end + else if Assigned(eNext) and (eNext.XCurr = E.XBot) and + (eNext.YCurr = E.YBot) and (E.OutIdx >= 0) and + (eNext.OutIdx >= 0) and (eNext.YCurr > eNext.YTop) and + SlopesEqual(E, eNext, FUse64BitRange) then + begin + AddOutPt(eNext, IntPoint(E.XBot, E.YBot)); + AddJoin(E, eNext); + end; + end; + E := E.NextInAEL; + end; +end; +//------------------------------------------------------------------------------ + +function TClipper.GetResult: TPolygons; +var + I, J, K, Cnt: Integer; + OutRec: POutRec; + Op: POutPt; +begin + J := 0; + SetLength(Result, FPolyOutList.Count); + for I := 0 to FPolyOutList.Count -1 do + if Assigned(fPolyOutList[I]) then + begin + OutRec := FPolyOutList[I]; + Cnt := PointCount(OutRec.Pts); + if (Cnt < 3) then Continue; + SetLength(Result[J], Cnt); + Op := OutRec.Pts; + for K := 0 to Cnt -1 do + begin + Result[J][K].X := Op.Pt.X; + Result[J][K].Y := Op.Pt.Y; + Op := Op.Prev; + end; + Inc(J); + end; + SetLength(Result, J); +end; +//------------------------------------------------------------------------------ + +function TClipper.GetResult2(PolyTree: TPolyTree): Boolean; +var + I, J, Cnt, CntAll: Integer; + Op: POutPt; + OutRec: POutRec; + PolyNode: TPolyNode; +begin + try + PolyTree.Clear; + SetLength(PolyTree.FAllNodes, FPolyOutList.Count); + + //add PolyTree ... + CntAll := 0; + for I := 0 to FPolyOutList.Count -1 do + begin + OutRec := fPolyOutList[I]; + Cnt := PointCount(OutRec.Pts); + if Cnt < 3 then Continue; + FixHoleLinkage(OutRec); + + PolyNode := TPolyNode.Create; + PolyTree.FAllNodes[CntAll] := PolyNode; + OutRec.PolyNode := PolyNode; + Inc(CntAll); + SetLength(PolyNode.FPolygon, Cnt); + Op := OutRec.Pts; + for J := 0 to Cnt -1 do + begin + PolyNode.FPolygon[J].X := Op.Pt.X; + PolyNode.FPolygon[J].Y := Op.Pt.Y; + Op := Op.Prev; + end; + end; + + //fix Poly links ... + SetLength(PolyTree.FAllNodes, CntAll); + SetLength(PolyTree.FChilds, CntAll); + for I := 0 to FPolyOutList.Count -1 do + begin + OutRec := fPolyOutList[I]; + if Assigned(OutRec.PolyNode) then + if Assigned(OutRec.FirstLeft) then + OutRec.FirstLeft.PolyNode.AddChild(OutRec.PolyNode) else + PolyTree.AddChild(OutRec.PolyNode); + end; + SetLength(PolyTree.FChilds, PolyTree.FCount); + Result := True; + except + Result := False; + end; +end; +//------------------------------------------------------------------------------ + +procedure TClipper.FixupOutPolygon(OutRec: POutRec); +var + PP, Tmp, LastOK: POutPt; +begin + //FixupOutPolygon() - removes duplicate points and simplifies consecutive + //parallel edges by removing the middle vertex. + LastOK := nil; + OutRec.Pts := OutRec.BottomPt; + PP := OutRec.Pts; + while True do + begin + if (PP.Prev = PP) or (PP.Next = PP.Prev) then + begin + DisposePolyPts(PP); + OutRec.Pts := nil; + OutRec.BottomPt := nil; + Exit; + end; + + //test for duplicate points and for colinear edges ... + if PointsEqual(PP.Pt, PP.Next.Pt) or + SlopesEqual(PP.Prev.Pt, PP.Pt, PP.Next.Pt, FUse64BitRange) then + begin + //OK, we need to delete a point ... + LastOK := nil; + Tmp := PP; + if PP = OutRec.BottomPt then + OutRec.BottomPt := nil; //flags need for updating + PP.Prev.Next := PP.Next; + PP.Next.Prev := PP.Prev; + PP := PP.Prev; + dispose(Tmp); + end + else if PP = LastOK then Break + else + begin + if not Assigned(LastOK) then LastOK := PP; + PP := PP.Next; + end; + end; + if not Assigned(OutRec.BottomPt) then + begin + OutRec.BottomPt := GetBottomPt(PP); + OutRec.BottomPt.Idx := OutRec.Idx; + OutRec.Pts := OutRec.BottomPt; + end; +end; +//------------------------------------------------------------------------------ + +function TClipper.FixupIntersections: Boolean; +var + E1, E2: PEdge; + Int1, Int2: PIntersectNode; +begin + Result := not Assigned(fIntersectNodes.Next); + if Result then Exit; + //logic: only swap (intersect) adjacent edges ... + try + CopyAELToSEL; + Int1 := FIntersectNodes; + Int2 := FIntersectNodes.Next; + while Assigned(Int2) do + begin + E1 := Int1.Edge1; + if (E1.PrevInSEL = Int1.Edge2) then E2 := E1.PrevInSEL + else if (E1.NextInSEL = Int1.Edge2) then E2 := E1.NextInSEL + else + begin + //The current intersection is out of order, so try and swap it with + //A subsequent intersection ... + while Assigned(Int2) do + begin + if (Int2.Edge1.NextInSEL = Int2.Edge2) or + (Int2.Edge1.PrevInSEL = Int2.Edge2) then Break + else Int2 := Int2.Next; + end; + if not Assigned(Int2) then Exit; //oops!!! + //found an intersect node that can be swapped ... + SwapIntersectNodes(Int1, Int2); + E1 := Int1.Edge1; + E2 := Int1.Edge2; + end; + SwapPositionsInSEL(E1, E2); + Int1 := Int1.Next; + Int2 := Int1.Next; + end; + + //finally, check the last intersection too ... + Result := (Int1.Edge1.PrevInSEL = Int1.Edge2) or + (Int1.Edge1.NextInSEL = Int1.Edge2); + finally + FSortedEdges := nil; + end; +end; +//------------------------------------------------------------------------------ + +procedure TClipper.SwapIntersectNodes(Int1, Int2: PIntersectNode); +var + E1,E2: PEdge; + P: TIntPoint; +begin + with Int1^ do + begin + E1 := Edge1; + Edge1 := Int2.Edge1; + E2 := Edge2; + Edge2 := Int2.Edge2; + P := Pt; + Pt := Int2.Pt; + end; + with Int2^ do + begin + Edge1 := E1; + Edge2 := E2; + Pt := P; + end; +end; +//------------------------------------------------------------------------------ + +function FindSegment(var PP: POutPt; var Pt1, Pt2: TIntPoint): Boolean; +var + Pp2: POutPt; + Pt1a, Pt2a: TIntPoint; +begin + if not Assigned(PP) then begin Result := False; Exit; end; + Result := True; + Pt1a := Pt1; Pt2a := Pt2; + Pp2 := PP; + repeat + //test for co-linearity before testing for overlap ... + if SlopesEqual(Pt1a, Pt2a, PP.Pt, PP.Prev.Pt, True) and + SlopesEqual(Pt1a, Pt2a, PP.Pt, True) and + GetOverlapSegment(Pt1a, Pt2a, PP.Pt, PP.Prev.Pt, Pt1, Pt2) then Exit; + PP := PP.Next; + until PP = Pp2; + Result := False; +end; +//------------------------------------------------------------------------------ + +function Pt3IsBetweenPt1AndPt2(const Pt1, Pt2, Pt3: TIntPoint): Boolean; +begin + if PointsEqual(Pt1, Pt3) or PointsEqual(Pt2, Pt3) then Result := True + else if (Pt1.X <> Pt2.X) then Result := (Pt1.X < Pt3.X) = (Pt3.X < Pt2.X) + else Result := (Pt1.Y < Pt3.Y) = (Pt3.Y < Pt2.Y); +end; +//------------------------------------------------------------------------------ + +function InsertPolyPtBetween(p1, P2: POutPt; const Pt: TIntPoint): POutPt; +begin + if (p1 = P2) then raise exception.Create(rsJoinError); + + new(Result); + Result.Pt := Pt; + Result.Idx := p1.Idx; + if P2 = p1.Next then + begin + p1.Next := Result; + P2.Prev := Result; + Result.Next := P2; + Result.Prev := p1; + end else + begin + P2.Next := Result; + p1.Prev := Result; + Result.Next := p1; + Result.Prev := P2; + end; +end; +//------------------------------------------------------------------------------ + +function TClipper.JoinPoints(JR: PJoinRec; out P1, P2: POutPt): Boolean; +var + OutRec1, OutRec2: POutRec; + Prev, p3, p4, Pp1a, Pp2a: POutPt; + Pt1, Pt2, Pt3, Pt4: TIntPoint; +begin + Result := False; + OutRec1 := FPolyOutList[Jr.Poly1Idx]; + OutRec2 := FPolyOutList[Jr.Poly2Idx]; + if not Assigned(OutRec1) then Exit; + if not Assigned(OutRec2) then Exit; + + Pp1a := OutRec1.Pts; + Pp2a := OutRec2.Pts; + Pt1 := Jr.Pt2a; Pt2 := Jr.Pt2b; + Pt3 := Jr.Pt1a; Pt4 := Jr.Pt1b; + if not FindSegment(Pp1a, Pt1, Pt2) then Exit; + if (OutRec1 = OutRec2) then + begin + //we're searching the same polygon for overlapping segments so + //segment 2 mustn't be the same as segment 1 ... + Pp2a := Pp1a.Next; + if not FindSegment(Pp2a, Pt3, Pt4) or (Pp2a = Pp1a) then Exit; + end else + if not FindSegment(Pp2a, Pt3, Pt4) then Exit; + if not GetOverlapSegment(Pt1, Pt2, Pt3, Pt4, Pt1, Pt2) then Exit; + + Prev := Pp1a.Prev; + if PointsEqual(Pp1a.Pt, Pt1) then P1 := Pp1a + else if PointsEqual(Prev.Pt, Pt1) then P1 := Prev + else P1 := InsertPolyPtBetween(Pp1a, Prev, Pt1); + + if PointsEqual(Pp1a.Pt, Pt2) then P2 := Pp1a + else if PointsEqual(Prev.Pt, Pt2) then P2 := Prev + else if (P1 = Pp1a) or (P1 = Prev) then + P2 := InsertPolyPtBetween(Pp1a, Prev, Pt2) + else if Pt3IsBetweenPt1AndPt2(Pp1a.Pt, P1.Pt, Pt2) then + P2 := InsertPolyPtBetween(Pp1a, P1, Pt2) + else + P2 := InsertPolyPtBetween(P1, Prev, Pt2); + + Prev := Pp2a.Prev; + if PointsEqual(Pp2a.Pt, Pt1) then p3 := Pp2a + else if PointsEqual(Prev.Pt, Pt1) then p3 := Prev + else p3 := InsertPolyPtBetween(Pp2a, Prev, Pt1); + + if PointsEqual(Pp2a.Pt, Pt2) then p4 := Pp2a + else if PointsEqual(Prev.Pt, Pt2) then p4 := Prev + else if (p3 = Pp2a) or (p3 = Prev) then + p4 := InsertPolyPtBetween(Pp2a, Prev, Pt2) + else if Pt3IsBetweenPt1AndPt2(Pp2a.Pt, p3.Pt, Pt2) then + p4 := InsertPolyPtBetween(Pp2a, p3, Pt2) + else + p4 := InsertPolyPtBetween(p3, Prev, Pt2); + + if (P1.Next = P2) and (p3.Prev = p4) then + begin + P1.Next := p3; + p3.Prev := P1; + P2.Prev := p4; + p4.Next := P2; + Result := True; + end + else if (P1.Prev = P2) and (p3.Next = p4) then + begin + P1.Prev := p3; + p3.Next := P1; + P2.Next := p4; + p4.Prev := P2; + Result := True; + end; +end; +//------------------------------------------------------------------------------ + +procedure TClipper.FixupJoinRecs(JR: PJoinRec; Pt: POutPt; StartIdx: Integer); +var + JR2: PJoinRec; +begin + for StartIdx := StartIdx to FJoinList.count -1 do + begin + Jr2 := FJoinList[StartIdx]; + if (Jr2.Poly1Idx = Jr.Poly1Idx) and PointIsVertex(Jr2.Pt1a, Pt) then + Jr2.Poly1Idx := Jr.Poly2Idx; + if (Jr2.Poly2Idx = Jr.Poly1Idx) and PointIsVertex(Jr2.Pt2a, Pt) then + Jr2.Poly2Idx := Jr.Poly2Idx; + end; +end; +//------------------------------------------------------------------------------ + +function Poly2ContainsPoly1(OutPt1, OutPt2: POutPt; + UseFullInt64Range: Boolean): Boolean; +var + OutPt: POutPt; +begin + OutPt := OutPt1; + repeat + if not PointIsVertex(OutPt.Pt, OutPt2) then Break; + OutPt := OutPt.Next; + until OutPt = OutPt1; + //sometimes points can be touching the other polygon so + //to be totally confident OutPt1 is inside OutPt2 repeat ... + repeat + Result := PointInPolygon(OutPt.Pt, OutPt2, UseFullInt64Range); + OutPt := OutPt.Next; + until not Result or (OutPt = OutPt1); +end; +//------------------------------------------------------------------------------ + +procedure TClipper.FixupFirstLefts1(OldOutRec, NewOutRec: POutRec); +var + I: Integer; + OutRec: POutRec; +begin + for I := 0 to FPolyOutList.Count -1 do + begin + OutRec := fPolyOutList[I]; + if Assigned(OutRec.Pts) and (OutRec.FirstLeft = OldOutRec) then + begin + if Poly2ContainsPoly1(OutRec.Pts, NewOutRec.Pts, FUse64BitRange) then + OutRec.FirstLeft := NewOutRec; + end; + end; +end; +//------------------------------------------------------------------------------ + +procedure TClipper.FixupFirstLefts2(OldOutRec, NewOutRec: POutRec); +var + I: Integer; +begin + for I := 0 to FPolyOutList.Count -1 do + with POutRec(fPolyOutList[I])^ do + if (FirstLeft = OldOutRec) then FirstLeft := NewOutRec; +end; +//------------------------------------------------------------------------------ + +procedure TClipper.JoinCommonEdges; +var + I, J, OKIdx, ObsoleteIdx: Integer; + Jr, Jr2: PJoinRec; + OutRec1, OutRec2, HoleStateRec: POutRec; + P1, P2: POutPt; +begin + for I := 0 to FJoinList.count -1 do + begin + Jr := FJoinList[I]; + + OutRec1 := FPolyOutList[Jr.Poly1Idx]; + OutRec2 := FPolyOutList[Jr.Poly2Idx]; + + if not Assigned(OutRec1.Pts) or not Assigned(OutRec2.Pts) then Continue; + + //get the polygon fragment with the correct hole state (FirstLeft) + //before calling JoinPoints() ... + if OutRec1 = OutRec2 then HoleStateRec := OutRec1 + else if Param1RightOfParam2(OutRec1, OutRec2) then HoleStateRec := OutRec2 + else if Param1RightOfParam2(OutRec2, OutRec1) then HoleStateRec := OutRec1 + else HoleStateRec := GetLowermostRec(OutRec1, OutRec2); + + if not JoinPoints(JR, P1, P2) then Continue; + + if (OutRec1 = OutRec2) then + begin + //instead of joining two polygons, we've just created a new one by + //splitting one polygon into two. + OutRec1.Pts := GetBottomPt(P1); + OutRec1.BottomPt := OutRec1.Pts; + OutRec1.BottomPt.Idx := OutRec1.Idx; + OutRec2 := CreateOutRec; + OutRec2.Idx := FPolyOutList.Add(OutRec2); + Jr.Poly2Idx := OutRec2.Idx; + OutRec2.Pts := GetBottomPt(P2); + OutRec2.BottomPt := OutRec2.Pts; + OutRec2.BottomPt.Idx := OutRec2.Idx; + + if Poly2ContainsPoly1(OutRec2.Pts, OutRec1.Pts, FUse64BitRange) then + begin + //OutRec2 is contained by OutRec1 ... + OutRec2.IsHole := not OutRec1.IsHole; + OutRec2.FirstLeft := OutRec1; + + //now fixup any subsequent joins that match the new polygon ... + FixupJoinRecs(Jr, P2, I + 1); + + //fixup FirstLeft pointers that may need reassigning to OutRec1 + if FUsingPolyTree then FixupFirstLefts2(OutRec2, OutRec1); + + FixupOutPolygon(OutRec1); //nb: do this BEFORE testing orientation + FixupOutPolygon(OutRec2); // but AFTER calling FixupJoinRecs() + + if (OutRec2.IsHole xor FReverseOutput) = (Area(OutRec2, FUse64BitRange) > 0) then + ReversePolyPtLinks(OutRec2.Pts); + end else if Poly2ContainsPoly1(OutRec1.Pts, OutRec2.Pts, FUse64BitRange) then + begin + //OutRec1 is contained by OutRec2 ... + OutRec2.IsHole := OutRec1.IsHole; + OutRec1.IsHole := not OutRec2.IsHole; + OutRec2.FirstLeft := OutRec1.FirstLeft; + OutRec1.FirstLeft := OutRec2; + + //now fixup any subsequent joins that match the new polygon ... + FixupJoinRecs(Jr, P2, I + 1); + + //fixup FirstLeft pointers that may need reassigning to OutRec1 + if FUsingPolyTree then FixupFirstLefts2(OutRec1, OutRec2); + + FixupOutPolygon(OutRec1); //nb: do this BEFORE testing orientation + FixupOutPolygon(OutRec2); // but AFTER calling PointIsVertex() + + if (OutRec1.IsHole xor FReverseOutput) = (Area(OutRec1, FUse64BitRange) > 0) then + ReversePolyPtLinks(OutRec1.Pts); + end else + begin + //the 2 polygons are completely separate ... + OutRec2.IsHole := OutRec1.IsHole; + OutRec2.FirstLeft := OutRec1.FirstLeft; + + //now fixup any subsequent joins that match the new polygon ... + FixupJoinRecs(Jr, P2, I + 1); + + //fixup FirstLeft pointers that may need reassigning to OutRec2 + if FUsingPolyTree then FixupFirstLefts1(OutRec1, OutRec2); + + FixupOutPolygon(OutRec1); //nb: do this AFTER calling PointIsVertex() + FixupOutPolygon(OutRec2); // in FixupJoinRecs() + end; + end else + begin + //joined 2 polygons together ... + + //cleanup edges ... + FixupOutPolygon(OutRec1); + + //delete the obsolete pointer ... + OKIdx := OutRec1.Idx; + ObsoleteIdx := OutRec2.Idx; + OutRec2.Pts := nil; + OutRec2.BottomPt := nil; + + OutRec1.IsHole := HoleStateRec.IsHole; + if HoleStateRec = OutRec2 then + OutRec1.FirstLeft := OutRec2.FirstLeft; + OutRec2.FirstLeft := OutRec1; + + //now fixup any subsequent joins ... + for J := I+1 to FJoinList.count -1 do + begin + Jr2 := FJoinList[J]; + if (Jr2.Poly1Idx = ObsoleteIdx) then Jr2.Poly1Idx := OKIdx; + if (Jr2.Poly2Idx = ObsoleteIdx) then Jr2.Poly2Idx := OKIdx; + end; + + //fixup FirstLeft pointers that may need reassigning to OutRec1 + if FUsingPolyTree then FixupFirstLefts2(OutRec2, OutRec1); + end; + end; +end; + +//------------------------------------------------------------------------------ +// OffsetPolygons ... +//------------------------------------------------------------------------------ + +function GetUnitNormal(const Pt1, Pt2: TIntPoint): TDoublePoint; +var + Dx, Dy, F: Single; +begin + if (Pt2.X = Pt1.X) and (Pt2.Y = Pt1.Y) then + begin + Result.X := 0; + Result.Y := 0; + Exit; + end; + + Dx := (Pt2.X - Pt1.X); + Dy := (Pt2.Y - Pt1.Y); + F := 1 / Hypot(Dx, Dy); + Dx := Dx * F; + Dy := Dy * F; + Result.X := Dy; + Result.Y := -Dx +end; +//------------------------------------------------------------------------------ + +function BuildArc(const Pt: TIntPoint; A1, A2, R: Single): TPolygon; +var + I, N: Integer; + A, D: Double; + Steps: Int64; + S, C: Extended; //sin & cos +begin + Steps := Max(6, Round(Sqrt(Abs(R)) * Abs(A2 - A1))); + if Steps > $100 then Steps := $100; + SetLength(Result, Steps); + N := Steps - 1; + D := (A2 - A1) / N; + A := A1; + for I := 0 to N do + begin + SinCos(A, S, C); + Result[I].X := Pt.X + Round(C * R); + Result[I].Y := Pt.Y + Round(S * R); + A := A + D; + end; +end; +//------------------------------------------------------------------------------ + +function GetBounds(const Pts: TPolygons): TIntRect; +var + I,J: Integer; +begin + with Result do + begin + Left := HiRange; Top := HiRange; + Right := -HiRange; Bottom := -HiRange; + end; + for I := 0 to high(Pts) do + for J := 0 to high(Pts[I]) do + begin + if Pts[I][J].X < Result.Left then Result.Left := Pts[I][J].X; + if Pts[I][J].X > Result.Right then Result.Right := Pts[I][J].X; + if Pts[I][J].Y < Result.Top then Result.Top := Pts[I][J].Y; + if Pts[I][J].Y > Result.Bottom then Result.Bottom := Pts[I][J].Y; + end; + if Result.left = HiRange then + with Result do begin Left := 0; Top := 0; Right := 0; Bottom := 0; end; +end; +//------------------------------------------------------------------------------ + +function OffsetPolygons(const Polys: TPolygons; const Delta: Double; + JoinType: TJoinType = jtSquare; MiterLimit: Double = 2; + AutoFix: Boolean = True): TPolygons; +var + I, J, K, Len, OutLen, BotI: Integer; + Normals: TArrayOfDoublePoint; + R, RMin: Double; + Pt1, Pt2: TIntPoint; + Outer: TPolygon; + Bounds: TIntRect; + Pts: TPolygons; + BotPt: TIntPoint; +const + BuffLength: Integer = 128; + + procedure AddPoint(const Pt: TIntPoint); + var + Len: Integer; + begin + Len := length(Result[I]); + if OutLen = Len then + SetLength(Result[I], Len + BuffLength); + Result[I][OutLen] := Pt; + Inc(OutLen); + end; + + procedure DoSquare(mul: Double = 1.0); + var + A1, A2, Dx: Double; + begin + Pt1.X := round(Pts[I][J].X + Normals[K].X * Delta); + Pt1.Y := round(Pts[I][J].Y + Normals[K].Y * Delta); + Pt2.X := round(Pts[I][J].X + Normals[J].X * Delta); + Pt2.Y := round(Pts[I][J].Y + Normals[J].Y * Delta); + if ((Normals[K].X*Normals[J].Y-Normals[J].X*Normals[K].Y) * Delta >= 0) then + begin + A1 := ArcTan2(Normals[K].Y, Normals[K].X); + A2 := ArcTan2(-Normals[J].Y, -Normals[J].X); + A1 := abs(A2 - A1); + if A1 > pi then A1 := pi*2 - A1; + Dx := tan((pi - A1)/4) * abs(Delta*mul); + + Pt1 := IntPoint(round(Pt1.X -Normals[K].Y * Dx), + round(Pt1.Y + Normals[K].X * Dx)); + AddPoint(Pt1); + Pt2 := IntPoint(round(Pt2.X + Normals[J].Y * Dx), + round(Pt2.Y - Normals[J].X * Dx)); + AddPoint(Pt2); + end else + begin + AddPoint(Pt1); + AddPoint(Pts[I][J]); + AddPoint(Pt2); + end; + end; + + procedure DoMiter; + var + Q: Double; + begin + if ((Normals[K].X*Normals[J].Y-Normals[J].X*Normals[K].Y)*Delta >= 0) then + begin + Q := Delta / R; + AddPoint(IntPoint(round(Pts[I][J].X + (Normals[K].X + Normals[J].X) *Q), + round(Pts[I][J].Y + (Normals[K].Y + Normals[J].Y) *Q))); + end else + begin + Pt1.X := round(Pts[I][J].X + Normals[K].X * Delta); + Pt1.Y := round(Pts[I][J].Y + Normals[K].Y * Delta); + Pt2.X := round(Pts[I][J].X + Normals[J].X * Delta); + Pt2.Y := round(Pts[I][J].Y + Normals[J].Y * Delta); + AddPoint(Pt1); + AddPoint(Pts[I][J]); + AddPoint(Pt2); + end; + end; + + procedure DoRound; + var + M: Integer; + Arc: TPolygon; + A1, A2: Double; + begin + Pt1.X := round(Pts[I][J].X + Normals[K].X * Delta); + Pt1.Y := round(Pts[I][J].Y + Normals[K].Y * Delta); + Pt2.X := round(Pts[I][J].X + Normals[J].X * Delta); + Pt2.Y := round(Pts[I][J].Y + Normals[J].Y * Delta); + AddPoint(Pt1); + //round off reflex angles (ie > 180 deg) unless almost flat (ie < 10deg). + //(N1.X * N2.Y - N2.X * N1.Y) == unit normal "cross product" == sin(angle) + //(N1.X * N2.X + N1.Y * N2.Y) == unit normal "dot product" == cos(angle) + //dot product Normals == 1 -> no angle + if ((Normals[K].X*Normals[J].Y - Normals[J].X*Normals[K].Y)*Delta >= 0) then + begin + if ((Normals[J].X*Normals[K].X+Normals[J].Y*Normals[K].Y) < 0.985) then + begin + A1 := ArcTan2(Normals[K].Y, Normals[K].X); + A2 := ArcTan2(Normals[J].Y, Normals[J].X); + if (Delta > 0) and (A2 < A1) then A2 := A2 + pi*2 + else if (Delta < 0) and (A2 > A1) then A2 := A2 - pi*2; + Arc := BuildArc(Pts[I][J], A1, A2, Delta); + for M := 0 to high(Arc) do + AddPoint(Arc[M]); + end; + end else + AddPoint(Pts[I][J]); + AddPoint(Pt2); + end; + + function UpdateBotPt(const Pt: TIntPoint; var BotPt: TIntPoint): Boolean; + begin + if (pt.Y > BotPt.Y) or ((pt.Y = BotPt.Y) and (Pt.X < BotPt.X)) then + begin + BotPt := Pt; + Result := True; + end + else Result := False; + end; + +begin + Result := nil; + + //AutoFix - fixes polygon orientation if necessary and removes + //duplicate vertices. Can be set False when you're sure that polygon + //orientation is correct and that there are no duplicate vertices. + if AutoFix then + begin + Len := Length(Polys); + SetLength(Pts, Len); + BotI := 0; //index of outermost polygon + while (BotI < Len) and (Length(Polys[BotI]) = 0) do Inc(BotI); + if (BotI = Len) then Exit; + BotPt := Polys[BotI][0]; + for I := BotI to Len - 1 do + begin + Len := Length(Polys[I]); + SetLength(Pts[I], Len); + if Len = 0 then Continue; + Pts[I][0] := Polys[I][0]; + if UpdateBotPt(Pts[I][0], BotPt) then BotI := I; + K := 0; + for J := 1 to Len - 1 do + if not PointsEqual(Pts[I][K], Polys[I][J]) then + begin + Inc(K); + Pts[I][K] := Polys[I][J]; + if UpdateBotPt(Pts[I][K], BotPt) then BotI := I; + end; + if K + 1 < Len then + SetLength(Pts[I], K + 1); + end; + if not Orientation(Pts[BotI]) then + Pts := ReversePolygons(Pts); + end else + Pts := Polys; + + //MiterLimit defaults to twice Delta's width ... + if MiterLimit <= 1 then MiterLimit := 1; + RMin := 2/(sqr(MiterLimit)); + + SetLength(Result, length(Pts)); + for I := 0 to high(Pts) do + begin + Result[I] := nil; + Len := length(Pts[I]); + if (Len > 1) and (Pts[I][0].X = Pts[I][Len - 1].X) and + (Pts[I][0].Y = Pts[I][Len - 1].Y) then Dec(Len); + + if (Len = 0) or ((Len < 3) and (Delta <= 0)) then + Continue + else if (Len = 1) then + begin + Result[I] := BuildArc(Pts[I][0], 0, 2*pi, Delta); + Continue; + end; + + //build Normals ... + SetLength(Normals, Len); + for J := 0 to Len-2 do + Normals[J] := GetUnitNormal(Pts[I][J], Pts[I][J+1]); + Normals[Len-1] := GetUnitNormal(Pts[I][Len-1], Pts[I][0]); + + OutLen := 0; + K := Len -1; + for J := 0 to Len-1 do + begin + case JoinType of + jtMiter: + begin + R := 1 + (Normals[J].X*Normals[K].X + Normals[J].Y*Normals[K].Y); + if (R >= RMin) then + DoMiter else + DoSquare(MiterLimit); + end; + jtSquare: DoSquare; + jtRound: DoRound; + end; + K := J; + end; + SetLength(Result[I], OutLen); + end; + + //finally, clean up untidy corners ... + with TClipper.Create do + try + AddPolygons(Result, ptSubject); + if Delta > 0 then + begin + Execute(ctUnion, Result, pftPositive, pftPositive); + end else + begin + Bounds := GetBounds(Result); + SetLength(Outer, 4); + Outer[0] := IntPoint(Bounds.left-10, Bounds.bottom+10); + Outer[1] := IntPoint(Bounds.right+10, Bounds.bottom+10); + Outer[2] := IntPoint(Bounds.right+10, Bounds.top-10); + Outer[3] := IntPoint(Bounds.left-10, Bounds.top-10); + AddPolygon(Outer, ptSubject); + Execute(ctUnion, Result, pftNegative, pftNegative); + //delete the outer rectangle ... + Len := length(Result); + for J := 1 to Len -1 do Result[J-1] := Result[J]; + if Len > 0 then + SetLength(Result, Len -1); + //restore polygon orientation ... + Result := ReversePolygons(Result); + end; + finally + free; + end; +end; +//------------------------------------------------------------------------------ + +function SimplifyPolygon(const poly: TPolygon; FillType: TPolyFillType = pftEvenOdd): TPolygons; +begin + with TClipper.Create do + try + AddPolygon(poly, ptSubject); + Execute(ctUnion, Result, FillType, FillType); + finally + free; + end; +end; +//------------------------------------------------------------------------------ + +function SimplifyPolygons(const polys: TPolygons; FillType: TPolyFillType = pftEvenOdd): TPolygons; +begin + with TClipper.Create do + try + AddPolygons(polys, ptSubject); + Execute(ctUnion, Result, FillType, FillType); + finally + free; + end; +end; +//------------------------------------------------------------------------------ + +function CleanPolygon(Poly: TPolygon; Distance: double = 1.415): TPolygon; +var + D, I, J, Len: Integer; + Ip: TIntPoint; +begin + //Delta = proximity in units/pixels below which vertices + //will be stripped. Default ~= sqrt(2) so when adjacent + //vertices have both x & y coords within 1 unit, then + //the second vertex will be stripped. + Len := Length(Poly); + if (Len < 3) then + begin + Result := nil; + Exit; + end; + SetLength(Result, Len); + D := Round(Distance * Distance); + Ip := Poly[0]; + J := 1; + for I := 1 to Len -1 do + begin + if ((Poly[I].X - Ip.X) * (Poly[I].X - Ip.X) + + (Poly[I].Y - Ip.Y) * (Poly[I].Y - Ip.Y) <= D) then + continue; + Result[J] := Poly[I]; + Ip := Poly[I]; + inc(J); + end; + Ip := Poly[J - 1]; + if ((Poly[0].X - Ip.X) * (Poly[0].X - Ip.X) + + (Poly[0].Y - Ip.Y) * (Poly[0].Y - Ip.Y) <= D) then dec(J); + if (J < Len) then SetLength(Result, J); +end; +//------------------------------------------------------------------------------ + +function CleanPolygons(Polys: TPolygons; Distance: double = 1.415): TPolygons; +var + I, Len: Integer; +begin + Len := Length(Polys); + SetLength(Result, Len); + for I := 0 to Len - 1 do + Result[I] := CleanPolygon(Polys[I], Distance); +end; +//------------------------------------------------------------------------------ + +procedure AddPolyNodeToPolygons(PolyNode: TPolyNode; var Polygons: TPolygons); +var + I: Integer; +begin + if Length(PolyNode.Contour) > 0 then + begin + I := Length(Polygons); + SetLength(Polygons, I +1); + Polygons[I] := PolyNode.Contour; + end; + for I := 0 to PolyNode.ChildCount - 1 do + AddPolyNodeToPolygons(PolyNode.Childs[I], Polygons); +end; +//------------------------------------------------------------------------------ + +function PolyTreeToPolygons(PolyTree: TPolyTree): TPolygons; +begin + Result := nil; + AddPolyNodeToPolygons(PolyTree, Result); +end; + +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ + +end. diff --git a/clipper/Delphi/main demo/GR32_Misc.pas b/clipper/Delphi/main demo/GR32_Misc.pas new file mode 100755 index 0000000..48c4f95 --- /dev/null +++ b/clipper/Delphi/main demo/GR32_Misc.pas @@ -0,0 +1,293 @@ +unit GR32_Misc; + +(******************************************************************************* +* * +* Author : Angus Johnson * +* Website : http://www.angusj.com * +* Copyright : Angus Johnson 2010 * +* * +* License: * +* Use, modification & distribution is subject to Boost Software License Ver 1. * +* http://www.boost.org/LICENSE_1_0.txt * +* * +*******************************************************************************) + +interface + +{$WARN UNSAFE_CODE OFF} + +uses + Windows, Types, + Classes, SysUtils, Math, GR32, GR32_LowLevel, GR32_Blend, GR32_Transforms, + Graphics, GR32_Math, GR32_Polygons, GR32_PolygonsEx, GR32_VPR; + +type + TArrayOfArrayOfArrayOfFixedPoint = array of TArrayOfArrayOfFixedPoint; + +function CreateMaskFromPolygon(bitmap: TBitmap32; + const polygons: TArrayOfArrayOfFloatPoint; + fillMode: TPolyFillMode = pfAlternate): TBitmap32; overload; +procedure ApplyMask(modifiedBmp, originalBmp, maskBmp: TBitmap32; invertMask: boolean = false); +procedure Simple3D(bitmap: TBitmap32; const pts: TArrayOfArrayOfFloatPoint; + dx,dy,fadeRate: integer; topLeftColor, bottomRightColor: TColor32; + fillMode: TPolyFillMode = pfAlternate); +function GetEllipsePoints(const ellipseRect: TFloatRect): TArrayOfFloatPoint; + +const + MAXIMUM_SHADOW_FADE = 0; + MEDIUM_SHADOW_FADE = 5; + MINIMUM_SHADOW_FADE = 10; + NO_SHADOW_FADE = 11; //anything > 10 + +implementation + +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ + +procedure OffsetPoints(var pts: TArrayOfFloatPoint; dx, dy: single); +var + i: integer; +begin + for i := 0 to high(pts) do + with pts[i] do + begin + X := X + dx; + Y := Y + dy; + end; +end; +//------------------------------------------------------------------------------ + +function CreateMaskFromPolygon(bitmap: TBitmap32; + const polygons: TArrayOfArrayOfFloatPoint; + fillMode: TPolyFillMode = pfAlternate): TBitmap32; +var + highI: integer; +begin + result := TBitmap32.create; + with bitmap do result.SetSize(width,height); + highI := high(polygons); + if highI < 0 then exit; + PolyPolygonFS(result, polygons, clWhite32, fillMode); + PolyPolyLineFS(result, polygons, clBlack32, true); +end; +//------------------------------------------------------------------------------ + +procedure ApplyMask(modifiedBmp, originalBmp, maskBmp: TBitmap32; invertMask: boolean = false); +var + i: integer; + origClr, modClr, mskClr: PColor32Entry; +begin + if not assigned(originalBmp) or not assigned(maskBmp) or + (originalBmp.Width <> modifiedBmp.Width) or + (originalBmp.Height <> modifiedBmp.Height) or + (originalBmp.Height <> maskBmp.Height) or + (originalBmp.Height <> maskBmp.Height) then exit; + + origClr := @originalBmp.Bits[0]; + modClr := @modifiedBmp.Bits[0]; + mskClr := @maskBmp.Bits[0]; + for i := 1 to originalBmp.Width * originalBmp.Height do + begin + //black pixel in mask -> replace modified color with original color + //white pixel in mask -> keep modified color + if invertMask then + MergeMemEx(origClr.ARGB, modClr.ARGB, 255- mskClr.B) else + MergeMemEx(origClr.ARGB, modClr.ARGB, mskClr.B); + inc(origClr); + inc(modClr); + inc(mskClr); + end; + EMMS; +end; +//------------------------------------------------------------------------------ + +procedure SimpleShadow(bitmap: TBitmap32; const pts: TArrayOfArrayOfFloatPoint; + dx, dy, fadeRate: integer; shadowColor: TColor32; + closed: boolean = false; NoInteriorBleed: boolean = false; + fillMode: TPolyFillMode = pfAlternate); +var + i, j, maxD: integer; + sx,sy, a, alpha, alphaLinear, alphaExp, dRate: single; + p: TArrayOfFloatPoint; + originalBitmap, maskBitmap: TBitmap32; + sc: TColor32; +begin + if ((dx = 0) and (dy = 0)) or (length(pts) = 0) then exit; + + if abs(dy) > abs(dx) then + begin + maxD := abs(dy); + sy := sign(dy); + sx := dx/maxD; + end else + begin + maxD := abs(dx); + sx := sign(dx); + sy := dy/maxD; + end; + + if fadeRate <= MAXIMUM_SHADOW_FADE then dRate := 0.05 + else if fadeRate >= MINIMUM_SHADOW_FADE then dRate := 0.95 + else dRate := fadeRate/10; + alpha := AlphaComponent(shadowColor); + alphaLinear := alpha*dRate/maxD; + alphaExp := exp(ln(dRate)/maxD); + + NoInteriorBleed := NoInteriorBleed and closed; + if NoInteriorBleed then + begin + originalBitmap := TBitmap32.Create; + originalBitmap.Assign(bitmap); + maskBitmap := CreateMaskFromPolygon(bitmap,pts, fillMode); + end else + begin + originalBitmap := nil; + maskBitmap := nil; + end; + + try + a := alpha; + sc := shadowColor; + for j := 0 to high(pts) do + begin + alpha := a; + shadowColor := sc; + p := copy(pts[j], 0, length(pts[j])); + for i := 1 to maxD do + begin + PolyLineFS(bitmap, p, shadowColor, closed); + alpha := alpha * alphaExp; + if fadeRate < NO_SHADOW_FADE then + shadowColor := SetAlpha(shadowColor, round(alpha - i*alphaLinear)); + OffsetPoints(p, sx, sy); + end; + end; + if assigned(originalBitmap) then + ApplyMask(bitmap, originalBitmap, maskBitmap); + finally + FreeAndNil(originalBitmap); + FreeAndNil(maskBitmap); + end; +end; +//------------------------------------------------------------------------------ + +procedure Simple3D(bitmap: TBitmap32; const pts: TArrayOfArrayOfFloatPoint; + dx,dy,fadeRate: integer; topLeftColor, bottomRightColor: TColor32; + fillMode: TPolyFillMode = pfAlternate); overload; +var + mask, orig: TBitmap32; +begin + orig := TBitmap32.Create; + mask := CreateMaskFromPolygon(bitmap,pts, fillMode); + try + orig.Assign(bitmap); + SimpleShadow(bitmap, pts, -dx, -dy, fadeRate, bottomRightColor, true); + SimpleShadow(bitmap, pts, dx, dy, fadeRate, topLeftColor, true); + ApplyMask(bitmap, orig, mask, true); + finally + orig.Free; + mask.Free; + end; +end; +//------------------------------------------------------------------------------ + +function GetCBezierPoints(const control_points: array of TFloatPoint): TArrayOfFloatPoint; +var + i, j, arrayLen, resultCnt: integer; + ctrlPts: array [ 0..3] of TFloatPoint; +const + cbezier_tolerance = 0.5; + half = 0.5; + + procedure RecursiveCBezier(const p1, p2, p3, p4: TFloatPoint); + var + p12, p23, p34, p123, p234, p1234: TFloatPoint; + begin + //assess flatness of curve ... + //http://groups.google.com/group/comp.graphics.algorithms/tree/browse_frm/thread/d85ca902fdbd746e + if abs(p1.x + p3.x - 2*p2.x) + abs(p2.x + p4.x - 2*p3.x) + + abs(p1.y + p3.y - 2*p2.y) + abs(p2.y + p4.y - 2*p3.y) < cbezier_tolerance then + begin + if resultCnt = length(result) then + setLength(result, length(result) +128); + result[resultCnt] := p4; + inc(resultCnt); + end else + begin + p12.X := (p1.X + p2.X) *half; + p12.Y := (p1.Y + p2.Y) *half; + p23.X := (p2.X + p3.X) *half; + p23.Y := (p2.Y + p3.Y) *half; + p34.X := (p3.X + p4.X) *half; + p34.Y := (p3.Y + p4.Y) *half; + p123.X := (p12.X + p23.X) *half; + p123.Y := (p12.Y + p23.Y) *half; + p234.X := (p23.X + p34.X) *half; + p234.Y := (p23.Y + p34.Y) *half; + p1234.X := (p123.X + p234.X) *half; + p1234.Y := (p123.Y + p234.Y) *half; + RecursiveCBezier(p1, p12, p123, p1234); + RecursiveCBezier(p1234, p234, p34, p4); + end; + end; + +begin + //first check that the 'control_points' count is valid ... + arrayLen := length(control_points); + if (arrayLen < 4) or ((arrayLen -1) mod 3 <> 0) then exit; + + setLength(result, 128); + result[0] := control_points[0]; + resultCnt := 1; + for i := 0 to (arrayLen div 3)-1 do + begin + for j := 0 to 3 do + ctrlPts[j] := control_points[i*3 +j]; + RecursiveCBezier(ctrlPts[0], ctrlPts[1], ctrlPts[2], ctrlPts[3]); + end; + SetLength(result,resultCnt); +end; +//------------------------------------------------------------------------------ + +function GetEllipsePoints(const ellipseRect: TFloatRect): TArrayOfFloatPoint; +const + //Magic constant = + // 2/3*(1-cos(90deg/2))/sin(90deg/2) = 2/3*(sqrt(2)-1) = 0.276142375 ... + offset: single = 0.276142375; +var + midx, midy, offx, offy: single; + pts: array [0..12] of TFloatPoint; +begin + with ellipseRect do + begin + if (abs(Left - Right) <= 0.5) and (abs(Top - Bottom) <= 0.5) then + begin + setlength(result,1); + result[0] := FloatPoint(Left,Top); + exit; + end; + + midx := (right + left)/2; + midy := (bottom + top)/2; + offx := (right - left) * offset; + offy := (bottom - top) * offset; + //draws an ellipse starting at angle 0 and moving anti-clockwise ... + pts[0] := FloatPoint(right, midy); + pts[1] := FloatPoint(right, midy - offy); + pts[2] := FloatPoint(midx + offx, top); + pts[3] := FloatPoint(midx, top); + pts[4] := FloatPoint(midx - offx, top); + pts[5] := FloatPoint(left, midy - offy); + pts[6] := FloatPoint(left, midy); + pts[7] := FloatPoint(left, midy + offy); + pts[8] := FloatPoint(midx - offx, bottom); + pts[9] := FloatPoint(midx, bottom); + pts[10] := FloatPoint(midx + offx, bottom); + pts[11] := FloatPoint(right, midy + offy); + pts[12] := pts[0]; + end; + result := GetCBezierPoints(pts); +end; +//------------------------------------------------------------------------------ + +end. diff --git a/clipper/Delphi/main demo/clipper_demo.dpr b/clipper/Delphi/main demo/clipper_demo.dpr new file mode 100755 index 0000000..54ab066 --- /dev/null +++ b/clipper/Delphi/main demo/clipper_demo.dpr @@ -0,0 +1,16 @@ +program clipper_demo; + +uses + Forms, + main in 'main.pas' {MainForm}, + GR32_Misc in 'GR32_Misc.pas', + GR32_VPR in 'GR32_VPR.pas', + clipper in '..\clipper.pas'; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TMainForm, MainForm); + Application.Run; +end. diff --git a/clipper/Delphi/main demo/clipper_demo.exe b/clipper/Delphi/main demo/clipper_demo.exe new file mode 100755 index 0000000000000000000000000000000000000000..af11a87dc5510247c0825531cf0e508cce5517ae GIT binary patch literal 644096 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 Pgj!=P{@E2M0In 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 e`<4ZlhV9`y7C2Rke8M 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∾6T{;Ghx*vjyf0i=(FMPk#5} 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

HTf6sr>@!xkGx- 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 literal 0 HcmV?d00001 diff --git a/clipper/Delphi/main demo/clipper_demo.res b/clipper/Delphi/main demo/clipper_demo.res new file mode 100755 index 0000000000000000000000000000000000000000..99250a0c8ee8d93b877477d78d9938562d0baea3 GIT binary patch literal 5572 zcmcgw4Nz3q6@L5P+g$-+VG(ozaa}?A3*sNFSrj5D{!BnX2V)wEF`z*^p`cX~6Y&S^ zRFO7LrkyZqG#Ra_qA^ajL=?1=gh{G4$wZ@xNk!tMajIk5rmg1WI~U*1F1wpu+tD}k z&3*6Qd(L<6x#ymH?~^1+vI0bXz^mKyyKt>tK_8uH3l9$(sC7!hixtQPbm9#!58!bq z?JYp$1EBJt0Pi9I9((W)c*kYy+y9-dw%@+r?489*B#;FZF}7t-n3kq*{2Pybvhnzp zd*z3m;!g%VCSYY}iT*v5q~XMDJ*5xKXP=WfbR?x4pZgYVMt}NT+reK7>;Q6H>$P|2 zTMFLm%z1j@klSZ}SxBF}UQHL@+CcLrE*9J)r_Z90sA%!Nr$D`mzGa$xASJlp0%(%q z_+L@3$yD~)A_qvNoh9mF=6$y+;STflUTSk<)2gi`%LYowFQ8RdzM;qW9~S(r^DK8* z2515N`j+hjXC&h1I@`dAm&=8&*w6@Ss+i{F)cB9>-%Cc-Oi_u+wEWUls_Xr`lfV1K zE;_flSj^GMQp3r6uz}}+=49@{xD<+;V0Zd-usMO&)vgtGeB6DA%)z55DBMg{-G33> zZv36EiGJsI*J^RHHIO;rJ`XEx`@-ZD3L6qbHRr#ipMP#D?34!w+c9_7UXOa8{P4krH|n%`@Vh2>eYZc8^q+{(SPC0F zRLp_qUw@_M|5uxKdc^CWeq#PF#=qys<^b)S*XX0)lvCS*?WD>nDU!>kK8{mkr=9W&X=2e=BV6xzI*&p$?&^@>I9iIrn7?*H@f) zho-!^o~)B{Ni`Vz#xmgL_p!zw2Rw3gfBps2R|}aj3l`opcYnLecJC9q#w)u;egpq4 zpxMA)8|D1~O{&7+oIHPWRI4~bX`Wc?+}8-kHp;1`ox<@J-B&{<%i$)sAu13 z{HNNsd#wFH^N&?t+yVbk&dSwJ4vzb24V%c8n@7ss81|O`G=A6Ie=qqL@lb154v|3_ zNHH1XiDN!2W~hi+wkgUSOY=)gC_Oce1`e`#tq^fGSQ0i zS=4p>Ri{sRdhcK_Fr(00=@!{085kQbr~3M*^^1S=#z5{7duP! z-+$av;pAtZu3x=O_{DV|+{TYR@7$KsfX*M_907RbBG|y|F+@9mb=PKm|5;m;u;a>w zqm(i-*=-&){*IQPiL)AHnLpt37xVdgpoh<&H(4j|<$V79!=`dl6$2$dS|Vbf&nS?m zHwwU8s_#W#zk97OK5zBV=W+gCoN92!Cv!7?JxP86eZBhAo8JGW4*EGyI@$`Axzh*d z?nslj5FIfTl@X41Fs3|w+H3(_nXU?esJ^Iz1&y3uX>_e zMD!K#4$*f;I?{}}L(#jYIafvSKX#JL`@9W01R%u@Gv z+0_HR-h`n$+OD)-w5zRixg9dGoyF?5uBV6I{NTkLDo#wJh*%pql++GyN?ExowcjqR@kHbhN`*z$GK%tEn$ zC65|S&sEn@{J3mdarv6Kt5qy45jvrx2X=V;rx`ma_((zHX0f*{eg8wstgND+o;@$V z`L3tQvt5wi>}mtP^{1;6Z)D-#xbR4a+y2CR6w4>>1Ff9*tB^CpVNOBgBf?Puq)>1iQNT>n!E>-=e;6k!u|SEa4v& z^K{Kucf!tddl+(uNs{WZ1J&b{-2re}4 + SimplePanel = True + end + object ImgView321: TImgView32 + Left = 183 + Top = 0 + Width = 540 + Height = 501 + Align = alClient + Bitmap.ResamplerClassName = 'TNearestResampler' + BitmapAlign = baCustom + Scale = 1.000000000000000000 + ScaleMode = smScale + ScrollBars.ShowHandleGrip = True + ScrollBars.Style = rbsDefault + OverSize = 0 + TabOrder = 2 + OnDblClick = bNextClick + OnResize = ImgView321Resize + end + object SaveDialog1: TSaveDialog + DefaultExt = 'svg' + Filter = 'SVG Files (*.svg)|*.svg' + Left = 239 + Top = 32 + end +end diff --git a/clipper/Delphi/main demo/main.pas b/clipper/Delphi/main demo/main.pas new file mode 100755 index 0000000..d59fce0 --- /dev/null +++ b/clipper/Delphi/main demo/main.pas @@ -0,0 +1,789 @@ +unit main; + +(******************************************************************************* +* * +* Author : Angus Johnson * +* Website : http://www.angusj.com * +* Copyright : Angus Johnson 2010-2011 * +* * +* License: * +* Use, modification & distribution is subject to Boost Software License Ver 1. * +* http://www.boost.org/LICENSE_1_0.txt * +* * +*******************************************************************************) + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, StdCtrls, ComCtrls, ExtCtrls, Math, + GR32, GR32_Image, GR32_Polygons, //http://sourceforge.net/projects/graphics32/ + GR32_PolygonsEx, GR32_VPR, //http://sourceforge.net/projects/vpr/ + GR32_Misc, clipper; + +type + + //SVG Builder structures //////////////////////////////////////// + + TStyleInfo = record + pft: TPolyFillType; + brushClr: TColor32; + penClr: TColor32; + dashArray: TArrayOfInteger; + penWidth: double; + showCoords: boolean; + end; + + TPolyInfo = record + polygons: TPolygons; + si: TStyleInfo; + end; + TPolyInfos = array of TPolyInfo; + + TTextInfo = record + text: string; + x,y: integer; + fontName: string; + fontSize: integer; + fontColor: string; + end; + TTextInfos = array of TTextInfo; + + ///////////////////////////////////////////////////////////////// + + TSvgBuilder = class + private + polyList: TPolyInfos; + textList: TTextInfos; + function Color32ToHtml(clr: TColor32): string; + public + fontName: string; + fontSize: integer; + fontColor: TColor32; + style: TStyleInfo; + constructor Create; + procedure Clear; + procedure AddPolygons(const poly: TPolygons); + procedure AddText(const text: string; X,Y: integer); + function SaveToFile(filename: string; + scale: double = 1.0; margin: integer = 10): boolean; + end; + + TMainForm = class(TForm) + Panel1: TPanel; + StatusBar1: TStatusBar; + ImgView321: TImgView32; + GroupBox1: TGroupBox; + rbIntersection: TRadioButton; + rbUnion: TRadioButton; + rbDifference: TRadioButton; + rbXOR: TRadioButton; + rbStatic: TRadioButton; + bExit: TButton; + rbNone: TRadioButton; + gbRandom: TGroupBox; + lblSubjCount: TLabel; + lblClipCount: TLabel; + tbSubj: TTrackBar; + tbClip: TTrackBar; + rbRandom1: TRadioButton; + bNext: TButton; + tbClipOpacity: TTrackBar; + lblClipOpacity: TLabel; + lblSubjOpacity: TLabel; + tbSubjOpacity: TTrackBar; + rbRandom2: TRadioButton; + rbEvenOdd: TRadioButton; + rbNonZero: TRadioButton; + bSaveSvg: TButton; + SaveDialog1: TSaveDialog; + procedure FormCreate(Sender: TObject); + procedure ImgView321Resize(Sender: TObject); + procedure rbIntersectionClick(Sender: TObject); + procedure FormResize(Sender: TObject); + procedure tbSubjChange(Sender: TObject); + procedure bNextClick(Sender: TObject); + procedure bExitClick(Sender: TObject); + procedure tbClipOpacityChange(Sender: TObject); + procedure rbStaticClick(Sender: TObject); + procedure tbSubjOpacityChange(Sender: TObject); + procedure rbEvenOddClick(Sender: TObject); + procedure FormMouseWheel(Sender: TObject; Shift: TShiftState; + WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean); + procedure FormKeyPress(Sender: TObject; var Key: Char); + procedure bSaveSvgClick(Sender: TObject); + private + offsetMul2: integer; + function GetFillTypeI: TPolyFillType; + function GetOpTypeI: TClipType; + procedure ShowStaticPolys; + procedure ShowRandomPolys1(newPoly: boolean); + procedure ShowRandomPolys2(newPoly: boolean); + procedure RePaintBitmapI; + public + { Public declarations } + end; + +var + MainForm: TMainForm; + +implementation + +//------------------------------------------------------------------------------ +// TSvgBuilder +//------------------------------------------------------------------------------ + +constructor TSvgBuilder.Create; +begin + fontName := 'Verdana'; + fontSize := 12; + fontColor := clBlack32; + style.brushClr := clWhite32; + style.penClr := clBlack32; + style.penWidth := 1.5; +end; +//------------------------------------------------------------------------------ + +procedure TSvgBuilder.Clear; +begin + polyList := nil; + textList := nil; +end; +//------------------------------------------------------------------------------ + +function TSvgBuilder.Color32ToHtml(clr: TColor32): string; +begin + with TColor32Entry(clr) do + result := format('#%.2x%.2x%.2x', [R, G, B]) ; +end; +//------------------------------------------------------------------------------ + +function IntArrayToStr(a: TArrayOfInteger; scale: double = 1.0; + dx: integer = 0; dy: integer = 0): string; +var + i: integer; +begin + result := format('%1.1n',[a[0] * scale + dx]); + for i := 1 to high(a) do + if odd(i) then + result := result + format(', %1.1n',[a[i] * scale + dy]) else + result := result + format(', %1.1n',[a[i] * scale + dx]); +end; +//------------------------------------------------------------------------------ + +procedure TSvgBuilder.AddPolygons(const poly: TPolygons); +var + i, len: integer; +begin + i := length(poly); + if i = 0 then Exit; + len := length(polyList); + setlength(polyList, len+1); + setlength(polyList[len].polygons, i); + for i := 0 to i-1 do + polyList[len].polygons[i] := Copy(poly[i], 0, MaxInt); + polyList[len].si.pft := style.pft; + polyList[len].si.brushClr := style.brushClr; + polyList[len].si.penClr := style.penClr; + polyList[len].si.dashArray := copy(style.dashArray, 0, maxint); + polyList[len].si.penWidth := style.penWidth; + polyList[len].si.showCoords := style.showCoords; +end; +//------------------------------------------------------------------------------ + +procedure TSvgBuilder.AddText(const text: string; X,Y: integer); +var + len: integer; +begin + len := length(textList); + setlength(textList, len +1); + textList[len].text := text; + textList[len].x := X; + textList[len].y := Y; + textList[len].fontName := fontName; + textList[len].fontSize := fontSize; + textList[len].fontColor := Color32ToHtml(fontColor); +end; +//------------------------------------------------------------------------------ + +function TSvgBuilder.SaveToFile(filename: string; + scale: double = 1.0; margin: integer = 10): boolean; +const + pft_string: array[TPolyFillType] of string = ('evenodd', 'nonzero', 'positive', 'negative'); + svg_xml_start: array [0..1] of string = + (''+#10+ + ''+#10+#10+''+#10+#10); + poly_start: string = ' 1 then + dashArrayStr := 'stroke-dasharray:'+ IntArrayToStr(dashArray) +';' + else + dashArrayStr := ''; + ss.WriteString(format('"'#10+ + ' style="fill:%s; fill-opacity:%1.2n; fill-rule:%s;'#10+ + ' stroke:%s; stroke-opacity:%1.2n; %s stroke-width:%1.2n;"/>'#10#10, + [Color32ToHtml(brushClr), AlphaComponent(brushClr)/255, + pft_string[pft], Color32ToHtml(penClr), AlphaComponent(penClr)/255, + dashArrayStr, penWidth])); + end; + + if polyList[i].si.showCoords then + begin + ss.WriteString(''#10#10); + for j := 0 to high(polyList[i].polygons) do + begin + if (length(polyList[i].polygons[j]) < 3) then continue; + for k := 0 to high(polyList[i].polygons[j]) do + with polyList[i].polygons[j][k] do + ss.WriteString(format('%1.0n,%1.0n'#10, + [X * scale + offsetX, Y * scale + offsetY, X, Y])); + ss.WriteString(#10); + end; + ss.WriteString(''#10); + end; + end; + + for i := 0 to high(textList) do + with textList[i] do + begin + if fontSize < 7 then fontSize := 7 else if fontSize > 30 then fontSize := 30; + ss.WriteString(format(''#10, + [fontName, fontSize, fontColor])); + ss.WriteString(format('%s'#10''#10#10, + [X * scale + offsetX, Y * scale + offsetY, text])); + end; + + ss.WriteString(svg_xml_end); + //finally write to file ... + with TFileStream.Create(filename, fmCreate) do + try CopyFrom(ss, 0); finally free; end; + finally + ss.Free; + DecimalSeparator := ds; + end; + +end; + +//------------------------------------------------------------------------------ +// Miscellaneous functions ... +//------------------------------------------------------------------------------ + +const + subjPenColor: TColor32 = $60C3C9CF; + subjBrushColor: TColor32 = $00DDDDF0; + clipPenColor: TColor32 = $30F9BEA6; + clipBrushColor: TColor32 = $00FFE0E0; + solPenColor: TColor32 = $7F003300; + solBrushColor: TColor32 = $8066EF7F; + +var + scale: integer = 1; //scale bitmap to 10 decimal places + subj: TArrayOfArrayOfFloatPoint = nil; + clip: TArrayOfArrayOfFloatPoint = nil; + subjI: TPolygons = nil; + clipI: TPolygons = nil; + solution: TArrayOfArrayOfFloatPoint = nil; + solutionI: TPolygons = nil; + subjOpacity: cardinal = $FF000000; + clipOpacity: cardinal = $FF000000; + +{$R *.dfm} +{$R polygons.res} + +//------------------------------------------------------------------------------ + +function AAFloatPoint2AAPoint(const a: TArrayOfArrayOfFloatPoint; + decimals: integer = 0): TPolygons; +var + i,j,decScale: integer; +begin + decScale := round(power(10,decimals)); + setlength(result, length(a)); + for i := 0 to high(a) do + begin + setlength(result[i], length(a[i])); + for j := 0 to high(a[i]) do + begin + result[i][j].X := round(a[i][j].X *decScale); + result[i][j].Y := round(a[i][j].Y *decScale); + end; + end; +end; +//------------------------------------------------------------------------------ + +function AAPoint2AAFloatPoint(const a: TPolygons; + decimals: integer = 0): TArrayOfArrayOfFloatPoint; +var + i,j,decScale: integer; +begin + decScale := round(power(10,decimals)); + setlength(result, length(a)); + for i := 0 to high(a) do + begin + setlength(result[i], length(a[i])); + for j := 0 to high(a[i]) do + begin + result[i][j].X := a[i][j].X /decScale; + result[i][j].Y := a[i][j].Y /decScale; + end; + end; +end; +//------------------------------------------------------------------------------ + +procedure LoadBinaryStreamToArrayOfArrayOfFloatPoint(stream: TStream; + out fpa: TArrayOfArrayOfFloatPoint); +var + i,j: integer; +begin + try + stream.Read(i, sizeof(i)); + setlength(fpa, i); + for i := 0 to i-1 do + begin + stream.Read(j, sizeof(j)); + setlength(fpa[i], j); + for j := 0 to j-1 do + stream.Read(fpa[i][j], sizeof(TFloatPoint)); + end; + except + fpa := nil; + end; +end; + +//------------------------------------------------------------------------------ +// TMainForm methods +//------------------------------------------------------------------------------ + +procedure TMainForm.FormCreate(Sender: TObject); +begin + tbSubjOpacity.Position := 156; + tbClipOpacity.Position := 156; + Randomize; + StatusBar1.SimpleText := + ' Use the mouse wheel (or +,- & 0) to adjust the clipped region''s offset.'; + ImgView321.Bitmap.Font.Style := [fsBold]; +end; +//------------------------------------------------------------------------------ + +procedure TMainForm.bExitClick(Sender: TObject); +begin + close; +end; +//------------------------------------------------------------------------------ + +procedure TMainForm.ImgView321Resize(Sender: TObject); +begin + ImgView321.SetupBitmap(true, clWhite32); +end; +//------------------------------------------------------------------------------ + +procedure TMainForm.RepaintBitmapI; +var + pfm: TPolyFillMode; + sol: TArrayOfArrayOfFloatPoint; + solI: TPolygons; + scaling: single; +begin + ImgView321.Bitmap.Clear(clWhite32); + + if rbEvenOdd.Checked then pfm := pfAlternate else pfm := pfWinding; + PolyPolygonFS(ImgView321.Bitmap, subj, subjBrushColor or subjOpacity, pfm); + PolyPolylineFS(ImgView321.Bitmap, subj, subjPenColor or subjOpacity, true); + PolyPolygonFS(ImgView321.Bitmap, clip, clipBrushColor or clipOpacity, pfm); + PolyPolylineFS(ImgView321.Bitmap, clip, clipPenColor or clipOpacity, true); + if assigned(solutionI) and not rbNone.Checked then + begin + if offsetMul2 = 0 then + begin + sol := AAPoint2AAFloatPoint(solutionI, scale); + end else + begin + sol := AAPoint2AAFloatPoint(solutionI, scale); + PolyPolylineFS(ImgView321.Bitmap, sol, clGray32, true); + scaling := power(10, scale); + solI := OffsetPolygons(solutionI, offsetMul2/2 *scaling, jtRound); + sol := AAPoint2AAFloatPoint(solI, scale); + end; + PolyPolygonFS(ImgView321.Bitmap, sol, solBrushColor); + + //now add a 3D effect to the solution to make it stand out ... + Simple3D(ImgView321.Bitmap, sol, 3, 3, MAXIMUM_SHADOW_FADE, clWhite32, clBlack32); + PolyPolylineFS(ImgView321.Bitmap, sol, solPenColor, true); + end; + with ImgView321.Bitmap do + begin + Textout(10, height-20, format('Offset = %1.1n pixels',[offsetMul2/2])); + end; + ImgView321.Repaint; +end; +//------------------------------------------------------------------------------ + +function TMainForm.GetFillTypeI: TPolyFillType; +begin + if rbEvenOdd.checked then + result := pftEvenOdd else + result := pftNonZero; +end; +//------------------------------------------------------------------------------ + +function TMainForm.GetOpTypeI: TClipType; +begin + if rbIntersection.Checked then result := ctIntersection + else if rbUnion.Checked then result := ctUnion + else if rbDifference.Checked then result := ctDifference + else result := ctXor; +end; +//------------------------------------------------------------------------------ + +procedure TMainForm.tbSubjOpacityChange(Sender: TObject); +begin + lblSubjOpacity.Caption := format('Subj &Opacity (%d):',[tbSubjOpacity.Position]); + subjOpacity := cardinal(tbSubjOpacity.Position) shl 24; + RePaintBitmapI; +end; +//------------------------------------------------------------------------------ + +procedure TMainForm.tbClipOpacityChange(Sender: TObject); +begin + lblClipOpacity.Caption := format('Clip &Opacity (%d):',[tbClipOpacity.Position]); + clipOpacity := cardinal(tbClipOpacity.Position) shl 24; + RePaintBitmapI; +end; +//------------------------------------------------------------------------------ + +procedure TMainForm.rbStaticClick(Sender: TObject); +begin + if rbStatic.Checked then + ShowStaticPolys + else if rbRandom1.Checked then + ShowRandomPolys1(true) + else + ShowRandomPolys2(true); + + rbNonZero.Enabled := not rbStatic.Checked; + rbEvenOdd.Enabled := not rbStatic.Checked; + lblSubjCount.Enabled := rbRandom1.Checked; + tbSubj.Enabled := rbRandom1.Checked; + tbClip.Enabled := not rbStatic.Checked; + lblClipCount.Enabled := not rbStatic.Checked; +end; +//------------------------------------------------------------------------------ + +procedure TMainForm.rbIntersectionClick(Sender: TObject); +begin + if rbStatic.Checked then ShowStaticPolys + else if rbRandom1.Checked then ShowRandomPolys1(false) + else ShowRandomPolys2(false); +end; +//------------------------------------------------------------------------------ + +procedure TMainForm.bNextClick(Sender: TObject); +begin + if not bNext.Enabled then exit; + if rbRandom1.Checked then ShowRandomPolys1(true) + else ShowRandomPolys2(true); +end; +//------------------------------------------------------------------------------ + +procedure TMainForm.FormResize(Sender: TObject); +begin + if visible then rbIntersectionClick(nil); +end; +//------------------------------------------------------------------------------ + +procedure TMainForm.tbSubjChange(Sender: TObject); +begin + lblSubjCount.Caption := format('Random Subj Count (%d):',[tbSubj.Position]); + lblClipCount.Caption := format('Random Clip Count (%d):',[tbClip.Position]); + if not bNext.Enabled then exit; + //only update random polygons once the mouse has been released ... + if (GetAsyncKeyState(VK_LBUTTON) < 0) then exit; + if rbRandom1.Checked then ShowRandomPolys1(true) + else ShowRandomPolys2(true); +end; +//------------------------------------------------------------------------------ + +procedure TMainForm.rbEvenOddClick(Sender: TObject); +begin + if rbRandom1.Checked then ShowRandomPolys1(false) + else ShowRandomPolys2(false); +end; +//------------------------------------------------------------------------------ + +procedure TMainForm.ShowStaticPolys; +var + rs: TResourceStream; +begin + solution := nil; + rs := TResourceStream.Create(HInstance, 'POLYGON', RT_RCDATA); + LoadBinaryStreamToArrayOfArrayOfFloatPoint(rs, subj); + rs.Free; + + rs := TResourceStream.Create(HInstance, 'CLIP', RT_RCDATA); + LoadBinaryStreamToArrayOfArrayOfFloatPoint(rs, clip); + rs.Free; + + subjI := AAFloatPoint2AAPoint(subj, scale); + clipI := AAFloatPoint2AAPoint(clip, scale); + + if not rbNone.Checked then + with TClipper.Create do + try + AddPolygons(subjI, ptSubject); + AddPolygons(clipI, ptClip); + Execute(GetOpTypeI, solutionI, pftNonZero, pftNonZero); + finally + free; + end; + RepaintBitmapI; +end; +//------------------------------------------------------------------------------ + +procedure TMainForm.ShowRandomPolys1(newPoly: boolean); +var + i,highI,w,h: integer; + fillType: TPolyFillType; +begin + w := (ImgView321.ClientWidth -30); + h := (ImgView321.ClientHeight -30); + fillType := GetFillTypeI; + + if newPoly then + begin + solution := nil; + //nb: although for this demo I chose to display just one random subject + //and one random clip polygon, it would be very easy to make multiple + //subject and clip polygons here. Clipper would handle them just as easily + //(as is demonstrated in ShowStaticPolys). + setLength(subj, 1); + highI := tbSubj.Position -1; + setLength(subj[0], highI+1); + for i := 0 to highI do + subj[0][i] := FloatPoint(10+round(random*w), 10+round(random*h)); + setLength(clip, 1); + highI := tbClip.Position - 1; + setLength(clip[0], highI+1); + for i := 0 to highI do + clip[0][i] := FloatPoint(10+round(random*w), 10+round(random*h)); + end; + + subjI := AAFloatPoint2AAPoint(subj, scale); + clipI := AAFloatPoint2AAPoint(clip, scale); + + if not rbNone.Checked then + with TClipper.Create do + try + AddPolygons(subjI, ptSubject); + AddPolygons(clipI, ptClip); + Execute(GetOpTypeI, solutionI, fillType, fillType); + finally + free; + end; + RepaintBitmapI; +end; +//------------------------------------------------------------------------------ + +procedure TMainForm.ShowRandomPolys2(newPoly: boolean); +var + i,j,w,h: integer; + pt: TFloatPoint; + rec: TFloatRect; + fillType: TPolyFillType; + rs: TResourceStream; +begin + + w := (ImgView321.ClientWidth -30); + h := (ImgView321.ClientHeight -30); + fillType := GetFillTypeI; + + if newPoly then + begin + solution := nil; + + rs := TResourceStream.Create(HInstance, 'AUSTRALIA', RT_RCDATA); + LoadBinaryStreamToArrayOfArrayOfFloatPoint(rs, subj); + rs.Free; + + //make bubbles for clip ... + setlength(clip, tbClip.Position); + for i := 0 to high(clip) do + begin + pt := FloatPoint(random*(w-100) +50, random*(h-100) +50); + j := round(random*45) + 5; + rec := FloatRect(pt.X -j, pt.Y - j, pt.X +j, pt.Y + j); + clip[i] := GetEllipsePoints(rec); + end; + end; + + subjI := AAFloatPoint2AAPoint(subj, scale); + clipI := AAFloatPoint2AAPoint(clip, scale); + + if not rbNone.Checked then + with TClipper.Create do + try + AddPolygons(subjI, ptSubject); + AddPolygons(clipI, ptClip); + Execute(GetOpTypeI, solutionI, fillType, fillType); + finally + free; + end; + RepaintBitmapI; +end; +//------------------------------------------------------------------------------ + +procedure TMainForm.FormMouseWheel(Sender: TObject; Shift: TShiftState; + WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean); +begin + if WheelDelta > 0 then + begin + if offsetMul2 = 20 then exit; + inc(offsetMul2); + RePaintBitmapI; + end + else if WheelDelta < 0 then + begin + if offsetMul2 = -20 then exit; + dec(offsetMul2); + RePaintBitmapI; + end; +end; +//------------------------------------------------------------------------------ + +procedure TMainForm.FormKeyPress(Sender: TObject; var Key: Char); +begin + case Key of + '0',')': offsetMul2 := 0; + '=','+': if offsetMul2 = 20 then exit else inc(offsetMul2); + '-','_': if offsetMul2 = -20 then exit else dec(offsetMul2); + else exit; + end; + RePaintBitmapI; +end; +//------------------------------------------------------------------------------ + +function MakeArrayOfIntPoint(const pts: array of integer): TPolygon; +var + i, len: integer; +begin + result := nil; + len := length(pts) div 2; + if len < 1 then exit; + setlength(result, len); + for i := 0 to len -1 do + begin + result[i].X := pts[i*2]; + result[i].Y := pts[i*2 +1]; + end; +end; +//------------------------------------------------------------------------------ + +procedure TMainForm.bSaveSvgClick(Sender: TObject); +var + invScale: single; +begin + if not SaveDialog1.Execute then exit; + invScale := 1/ power(10, scale); + with TSvgBuilder.Create do + try + style.penWidth := 0.8; + + style.brushClr := $0F0000FF; + style.penClr := $800099FF; + AddPolygons(subjI); + + style.brushClr := $0FFFFF00; + style.penClr := $80FF9900; + AddPolygons(clipI); + + style.brushClr := $2000FF00; + style.penClr := $FF006600; + AddPolygons(solutionI); + + SaveToFile(SaveDialog1.FileName, invScale); + finally + free; + end; +end; +//------------------------------------------------------------------------------ + +end. diff --git a/clipper/Delphi/main demo/polygons.res b/clipper/Delphi/main demo/polygons.res new file mode 100755 index 0000000000000000000000000000000000000000..272463a02843325fb0aa004b1ad618baa9952fb5 GIT binary patch literal 19376 zcmZ{rd3=@C)$gBLYki@&g9Y1I3r?-zTpzVgK}`@)0}`AuC{E`%8|qA|9?{4k7*H9` zK?MmSq6Rc-qcUhva5zV6wZ>V&Hug4s@7oF6-uu3vzTfY94&2^9uAk5L_pD*Bz4qGE z+WUkgNs`?t|NLiG`22tVdu*2^IS9@_|Jg4&E;%hZB{?-2$5%sg0{_qcJLud0x5{>W z?)=px>DTjCeLgp&Ufeu+pZa~8epTPpwjaE=>r2J`0|#~-7}(bRlls=ax9j`&r1kC1 z@9=$SV3Hh8-Cx&lMfrnU->o0D>5%%`em(W;w;WdAGT^KeptUFu>D@}d)nU* z{M(QZf-iOrI;vhw)7rq5BaaCj+H_p~z>W{U-Kp(e|h4o`Bz<)wgw@grA%6do+G-Mm7dtKBwKW)cu@xPpO~K_8Zzg4I96u-81m_ zxAiMWo)z>yO=lzP#m0od!L8>8mWt;E4(zxfaCY}awB3sj`KUK))5Srr-*PGbe?cs+ zz^5F2i(_8(v}ZW5<3ap< z7n@50+q&BWE9Is5`Y!D}6!UY`re%SxeGdnJ{g&l{NwR`|y~Fp4nBT+tJ&I4RgGXas zh?Vj$gPz^}X5hH4Hv$KCR04b2%lP&fe!d;}vNC);e(AN&^ zzl^^t@$IGhNwur6zdo?7yL%h19Qj1>`x>8Q4tMkY1a)5IdlfcbVBS1|%@;zyYtXvD zmH}&-Gb?F(ZM4_awubR|oEWZ&c9Udv$k%UqZX2y%gIiaJpUUlra{X`Zdp7u^HgyF` zYfsvG{d;~9b}Hp(qCb;rpAJ9L^r@Zl9f?^{g%fATl*dh z9JT4us{Iv#mGUFOZ|hzj^ti5v!=Hg2%L04a9||lLmxkX>ZS65G!}>WFRxl1rVtm(c zSxn!SQx?;=hXb>D@nFmo`OcfA&5QB79i2t^yM+EeK>O<4Pyf}qkM6u7i`A+ejsTDcEf^N8R5*qR%-e#<>! zzqRk~z)_p#p!)!I?+&?q>!~MNZ!2n7+V(};7u^pAx6Y-n^P*k%3;l8b5ZzDo)BQ!- z{YL)=x6Tff)=%Zy>l$R+_tMvU!;dtb%Xr?y{F@hkibI>`M0j5wz0ENm?#uCt}$L&;xM%7cKSXCo43*T+1Q*C zxN_ta{JjgCx8l!T*enG0HQpT9T>JCDzYUp8OlINV4S`8=U0`e9)q(wbCgJx?_V25R z*-Xad3fj68A1-6g-pLqTLYp%<8}ottG+h+@l_M_*Ow;oMy9S*bSle$x;QB4&14nH- zGq6%VJ#bvtsbRmTeO%y#wy}YmCy$Bt^SOrbr?2tE@NZJ>DB?SdSd9p588AHhl_Yh6 zt$oKt9Qyav2DWt{6*#cth`>_ur-6f84-H(}oCXeU`bpr*kq0uaZNzW?m~UN!_6;1? zZ)n7Q{gxlcIE>n~7csn>80--^u4}g#r=Ipf)%p9wn9ogZyRw#D6T8H?=X2kW`PbLD zbKs=f0fAo**(tDPz_$aF5d5C@?SpP=+papVlHga$ z|5@ie?`i*g;O5DH4eV?DW1V(d2K+wg*1q2cJ-d5T;J}Vg>#}{~<2vVWd-MBs?h`9V z{yMO0&|87)x0LIg=aup+b*_(bT^s6L_f2ixf%)9pI`^YVwa?YLpR^2kCa|^diQu<& zKOR^rJ`%XJ`Jup-BOeUx8gzf)`Yj8>UZs3*o%>o(`|N0U^W>S~M_=Q#@bk+dx7WF^ zB}ri$_BFcS6r!J^`+$0mhxM{?nOWz))6{lXo%@dHzM_5i8PR>mcC-EGF8pZ=J=dA~ zt|!s;qQ2`SpPNCuGol^yu1U3b)R~9bzIj>8fGKt6Y5HZ}CYr~I=5_sgTIlbsL7VqU zn+J;Kg@aqK#?KaV$gA+@2IlK!_;DS1Ql9p&VLZ;E{j16E#?$VkK=V*(^U{3obnIVB zem0KyU5r0t82=n=>IC9)A#?dS;&DFXegy5D7ib^co80dY%el)d>2))gdhgbco3%~jrj}4quJ1p?aAxDS2 zWx$bv-i!3#dy(yXf6^cCQ~Eis>!9$nQa(7)dy{^9ZyL4fe8&Iq7)R?nuGV*)tv|5i z`l#<>S;e9=9%}mY`*Rr^VR#E>&E+@>u6}x-kdG>Ge3UJ_&rFRenfvCVqNS- ze;*0jbt&Ionby`QFVu-h=*ZAilff_iKT*{oV{r)3=HDVEpc(KZBUB z9|pR=$nV$ldC*DnJNmsV`TrjR-Je?fen3C|8tDEtYSS+C<3EW*4g7>L`5x_WM=S>7 z_g5+3rN7(L#&_^%2m17_*e8cJ{SW-=M_>EX|8LNTenEdZWXHgk0XuNk{2Oa*`=DF< zzCyqIWA~r<_D$^m7ruUrJ@6m&={wljLf^kj4F41;?f$KNecId( zUuuFDl@D(HLD=_P7~J}QnA5vNedXG-p7!O7^4D+qL(~(kC*O0Xw%>m+7j_HUb4b4D zlIS_Ll~zx=*w*b>{hnCv8K{0w`)@)%uB$iX6WTTh=5wEfo~YiW+7H5RU*ku_Whj08 zBycN#E4B=HH~2~N4sqL;IrMH|Yu{VJZ|klEJ+R|-;#e$eJ-$)A8z|k{cUIJw zuYcxK#!-FaC~d#Yw~Uke#z7pl=^5sC6Kmut`h5;-=1IdUiY^l z6Y*zhU32aE+b~HM)2|EhcQNCU3p5Yx-?NbZHh1@(- zee+KB%|q2UFWriRTki>aXj5Cr)AY{J7p*U9uWQhB#`{Xv$?f#JIZ(NLQNHbr+B7BX z4C^u=KDp~?exG>aYpca+Rdf!VVq}%J!$Jni_+GUHXhzTjMt=E-)0uGKE1bO zv~uq=*7JTN_V1Y;a_?)}5nKE24}QylC80N|c3Gg~T`8N>bc9{e`_Sgek43vZ?W@8M z=ZpTV-_jL)*O9dI%zKgZ&U=yb(0)2Ev-{9n!FL^~=RCGQt{?m3da*y7Cw~@xxc}(C z`;vaUFL}?blszl%iG9m^pZlTrK+$`m`B7qus9-**eo zhe@@|!!O@6^mFCNN5XH>eu?&1%;NA!#HFv%_mKDS(>ING7_SwK>zl;M_mS5F-5=$< zKgxH#i`l;S2>v`1a@VQ}xr?PMRb~GjU?aenaevcE6n^=b{iNm#l(!LK>$_3WRD&lfG%_BE~x9NP3kU_SR^;L_&qs4uOL(%RiTd42dk zxb>yLrnZ-ZUn*`0>}lV~ym^hf8>7!%gECsVF=!dE0UNKNy8)XULoc7(unh-xyi$#& z@p_3kyc)4iQ{&i83|@uz;x_zp$ScI`g{be?+n#el`_2*la}MdRb4>q5`=eZ1xwL%y z>zp(mnTUCzUqm-5sTUr^>`X!aTwST=HthWZ`Znk%k^BDEf&T6AdBZ4pcVCKJd>}AQ=Lc5Gv$3zT(~qunIA7(M+s4=liMLhokkpFuy&Q%-@t5&l^0UWeXj@M`>O zfZq(i0lmwE&gU+noiX$?2R#tYe#jRtcrTZQ9H)f`I{ufzq5e;FX}1{1?+aw?k(`2L(lpA zeE7%ygdabr-fH-h(UZ0xYml3#uYrGUmA)qAmGaL*-+bTtuKyilFW3(HNQ&s1^W7oC zG(8I5Z?Jh3KK(oVqpTcCPvVM1Lcn8nt{LOloz?(Ad2_LU6GB9_L5{2^!MS9!q(1|QG5>w zc|NyO=%?v-z!Av44QlUOd=IC+Z}MFin6>{+_{W4?|1y33wZ47diQ+wZ0CkQ)zBBX@ zl&t?>k9casJx$vuqo)s|xxmSkAHp9)*#q9_K=lugI39rCv)~;-vChHOx<8G&{@!0I zj)AYw?iY3FolY4}aXon#cioMoUL)lM>W!tG6!nwD_N+e!+R_+yT$|Eq>YA4C8nk`a z;K|qTlEgdkMSNdKxft1n z$S$kWS0R)BS?E{F*GBzP(cfLpr?kL754$( zv+Dgjl6>w2zFd{3k}zS;P@p3Nzo7ozJq`+FAgI&A8n zakhW%^`ir`_3W9zxf*AO=el#wwd$Pa+-I&vzdBpdv%bHJIESZ(owRdW(3SG^kf)t9 zLcdhJ6FG4z%!I~XgL{qk@1mSaeUUyjw1KSW-Zt8GE&01?6Y|;UyXNM=Kc6y(Z_eEY zY1i`{e7USjUlnrKv-+-Q>t|!Bofi1obv@f2bEwz$Z>8Q{v7VE{Ec87;XJV5Wbn3tP zzf(FWyn5{retb<(g+bn~S=h<2PW|bCOJRLq>XGnd)}WBW0lPh_apx<%6_<>we5T|PjF9^K8J7f3FaT?z4OsF zv;EJt!W$uLCgyLf9p*FW{8rETE;|3MpREVcd8Pm4?&K4$AN%HdN(%aA4ln=as=uti z2K&Lf?wkVOHi!#t<#X%?T@V6jd15dO+cSQfh$lXBKv$XLLv;9u_h4>=6p2dmu$NKJ<+B4qLXY;LJ z=92p5dX_#Dzg$DC=U(T9`?mAPHDLc(&(-la&q@BPr^M1=>a za}@GL;L-3FQEKsd5p5n5Xr3W$-l075oY3bSi29rl*o!j<`;q6+o_US!o99%@{%%X& z)9c@-u>U3tLO-9I4~{@S57gc~WS%SYqCGL%2lYpJmWQdYzt%VBTfjGY8}{v=?b+|G z{Ws64l;=Vlv$@FJ)ARxCEWsytXfP)3v5V1hZ(khxY1DlozDvbtwxMGt9b;B_hHu8K z;Tdc&W;N1`S?|;6ySAQ&@7eh@#Xb2c`0iJo!7tTx!gq|HL`FW+`2=$AIWIadge$RzZ7StfJsYgY7V9qFr*TLMOEO zl5c8b(baFysb7GcHw|5UyKg@mc1p$Ps`j1_eyL`4rdM7KpI8>wM2t%{YoR?qeCHTT zzt*AGh+G_pY#sbl;J*NRA2r_2?HBka7wVKY=TPn$C%>tFjbqdBe%MZu58-L^BicNL zIv<1F)jB^38%g0)>Yjz2&)_$~`;2;=qlM4lpBJ=wU!~zQzAvik`FEe6qDP)m^C|pG z(f)*+GckjU#Zx)^JLUX4p{2IA=%{$m- zKdE^;=zQ;6RrxQe!{6-mzJdH|c;Ypb3U;nVU%U=^8NKU~OS_L&uyZ5*kiL<2q$i_S zp|1Pu8}PyM8x-j`1Jlk7D-E_g8GCPK^731uU#ihh?dUi1LJvCHv485@U-KXPFMbsD z()43wEzqApdxn0>_s^;KDc_!@pMf`1Hc{M_xAaJ+f2z)Toyv)8K8QOrxKhkWI%9?G-qWJN3i!`4fu2X?#qbnUs&vH{bY> zIA{5ON2c2+_!DL6i}u=_e~VyEFXzNKG9 ze-^f1iS{bxjo6q8kN3bDej8__d&(2jAZ{d7vS z=h>X5FT>-^uc5uf96*}$6F=hoPBy@29?*W8GB1nTyAIm7RNpjSqg>7R>+mO`BTb%A z^C~>@2K-2pEAWZ9B%Y_*y97P`$wfT8j~SO(zk%mcZv*rM>WODZy-L|Pq>U8!UgBFk z9Y3{yTExM(Alvs%s#NnjeBQun%Ajvnt{?YO*NuDVo6uwUcAbo-eb>oo%CD;Q+tfo| z<2rE zuWNouz4Q2X>@LKP@;q(J=REC|_CDa4UQTf@z7n48IVazScO~umZz--s@12lW%I{$F z3d*mMUxvP8e<^z6#qi``6qu%*G0@&iGP!5budzp-5Oc=!j=iOL8g<=sz312-=W~+v z-&mxbzrtVEFZ;AuD!$409r*MH^+fl7a!mH0d@q=Q+&5fr?u$v`b-t$sU1{K6g53L8 z>{kslqQ3i$_L7ACC+0mEF}f2y+Rw><2OVhk#n`8E&R^y4VS5I0$CG`_acBR{=bQ)b z!yizO{TbSOU^XwNQqS?e13Bl4xiaUB{VCPB@5(18vCn7yKbqeX_9GttmM}IsnO_sm zN=AZX;Q8Ob{+{p+={-~) zVq6EF5$&7v^G1jL@zA5_2X7YmoBhTy8u}dU`J2wU$nBqaCi?6h>Dg60H<0**+&P%( zUmW$xS;JoTn~!_VmC+vW>d3uw{4D%QQ~%!7J@gv%$;J6?NdGyrp`9z&BR{E%oLkWO z-0@YctMZQtedA?)DU`z+soq3Z(+ngO|OFf33``f|3K)=K*x*U$QVE70dmLj z0`y&j6Y<;e&c;8R3kh=9>Gpx8;*QjF{e6S>_N07^;`-W&@+0^IDXy>YVQ(m97s|er zUD4Yg{tx*+2%W)T3U4>Q^?i5h9|6xbTuTu>b8Y+hpj}_eU0>?EzO3*0q`mBSq91~; zuU+At1MUJnG5qnKr+?X7^G?Xfb?`q;U0>gza2KI}=0f(@byO)Qfob{=Vsr`eKM^z6 z-S3H&`k#Y&@MHL{*Z0u75L<5(W7pLipzXhgp6h)h^x4$+ceyjs_jfwpqLUY>?|sd` z5%ugBPsHvT=9Ft;EqdlEVr}SW@#;p;_`O8^H0&E++soqp27LFow?W6_J@oeue;qIV zcl_*6wqO1Uzl`xe&@=Yg_&XO$MZbqo{M(5k)cr4XMgO)!+y9$3_My(-t8M-bo6f5* z>4WoZ3;G8_{}ucR^k3jR2mVa`!{GlJ`f%+12|Nn9=wACr)*NIuVbYD<}mihJ<-8SPoKBQ}kP@?lkdf0L4SKTv)c-`Y36Uq{D%U@n;Wbb~S(cDGix5&%U_1=Cd^!1?U)?_e;j`vz)eKX&V(Jk0Bwgq@iO*?pgmjF-+4%w6PcU9t6#o+ClQC!cx8&)6R#W9qVP-VP9x?7-XO5 zd>Ec{`B0bx?Yy{~!oFM3uJ4BTWZ0QurQzNxe{L1^=SN~LXeOWua(`NG~!|WZ`b{B^{pL3j;Pn}Du_S)fl4m?CTi?R$p zxkIn${BnHQvkJ?x>$~M6)OTJz0-rsmW(7LFv8{mT-XwY-67zxPhZ%i2c2;2Ls;E~g zPD1AqWWJ#-r(BE8nFb4@vgny$JKo0}2hM_;S=8AZ`CZUI z=DUsh=6$X+?{}^%?sX0KAln0;;|<1oHkWgKlUH;)FU&7oKk6-vdTHlEzITJS5ZPe# zm`BAQ21f4KD@`sJ>#PR5_o4TFct~66uxoGkiR1edA6_bj?NNj>fvve z`??N^TaEqL4gTW5d@jRM&Ek+(%8NqZ{#)O5%UzsyK_{V z*;(jZ#jDGQ*9PqF~s5OlKm z8Out;eB_rC@44{ZhwniLWZmTXt%JW)qdnfkdfVV##djN}8U9`9^M=blU``@!PNLj@ z_u>8-f9J({XHJsu^_;tbc3g+%Hnu0~i#dwEv0paW2hqOE_Z%a4iQgA*#Lj(Tr&M$u zY3~7SfaM3EuZLd5x9u;Y?se2#jGb$ddG3?b6r6wf+3EZvmjcakN=5mcJLp%+SHaT` z`*7I55}E7w3i$2^#z{YoTNc0U9<{JJ_i%Ef^mX)@zwsV@5PD_!DZC1@!?07K{tGQSFMplkm72C@@F z9(PjovpZ=8*=b?VJD&FAy`1*4JK$^3p53p4=ZAmZ8TB{rr1h-jP>ApG|umAURRz z~Un=r+OdbdklQ>M06gD{!1GV<;F+-h!^$a{((K?seSLHwwJA^RnYDqPf{F@ zP7340Z=-Q1#ec`o{$zL3XW{Qb9G*wdanHuzxsd%1Is`lNTyv`_AitM-hei4YAoQUiN_}qCLUce9XNqz^8J87>to_1cW`u8Gwr%|NG(T;dB z`l9_)enORY4}US@k;%F1h5k|1`iCP^epuB$YmD}cx9uDM%pdQN`setp<9pxmKgN&# z#2Z6lE&7hPG#I~w52^pDb0PUF{EMmk#lIkJ7QaCE5Olxbo17>21%Q=x+vn*Vv2==g=nVAA)=nGIB3}ALZ|6 z{TWTnN7`Ur wHvB2<=6gkR!9T;Nz4D*Ybv^$D9=T)TFVK$VUy$#QU-F3?<7E8BQZcRnZ$4`#%m4rY literal 0 HcmV?d00001 diff --git a/clipper/Documentation/Docs/Overview/Changes.htm b/clipper/Documentation/Docs/Overview/Changes.htm new file mode 100755 index 0000000..99d3246 --- /dev/null +++ b/clipper/Documentation/Docs/Overview/Changes.htm @@ -0,0 +1,793 @@ + + + + + + + + + + + + + + + + + + + + + Changes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Changes

+ + +
+ + +

See Also

+

Compatibility with Prior Versions, Rounding, Clipper.Execute, PolyNode, PolyTree, Area, CleanPolygon, CleanPolygons, OffsetPolygons, Orientation, SimplifyPolygon, SimplifyPolygons, IntPoint, PolyFillType, Polygons

+ + + + + + + \ No newline at end of file diff --git a/clipper/Documentation/Docs/Overview/Compatibility with Prior Versions.htm b/clipper/Documentation/Docs/Overview/Compatibility with Prior Versions.htm new file mode 100755 index 0000000..acf202a --- /dev/null +++ b/clipper/Documentation/Docs/Overview/Compatibility with Prior Versions.htm @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + + + + Compatibility with Prior Versions + + + + + + + + + + + + + + + + + + + + + +

Compatibility with Prior Versions

+ + +

+

ExPolygons

+ +

In Clipper Ver 5.1, the ExPolygons structure was replaced with the PolyTree class.

The PolyTreeToExPolygons() function below and its accompanying code may be useful if for some reason you are stuck with using ExPolygons.

+ + + + + + + +
Delphi ... +
+ +
+
+  type
+    TExPolygon = record
+      Outer: TPolygon;
+      Holes: TPolygons;
+    end;
+    TExPolygons = array of TExPolygon;
+
+  procedure AddOuterPolyNodeToExPolygons(PolyNode: TPolyNode; 
+    var ExPolygons: TExPolygons);
+  var
+    I, J, Cnt: Integer;
+  begin
+    Cnt := Length(ExPolygons);
+    SetLength(ExPolygons, Cnt + 1);
+    ExPolygons[Cnt].Outer := PolyNode.Contour;
+    SetLength(ExPolygons[Cnt].Holes, PolyNode.ChildCount);
+    for I := 0 to PolyNode.ChildCount - 1 do
+    begin
+      ExPolygons[Cnt].Holes[I] := PolyNode.Childs[I].Contour;
+      //Add outer polygons contained by (nested within) holes ...
+      for J := 0 to PolyNode.Childs[I].ChildCount - 1 do
+        AddOuterPolyNodeToExPolygons(PolyNode.Childs[I].Childs[J], ExPolygons);
+    end;
+  end;
+
+  function PolyTreeToExPolygons(PolyTree: TPolyTree): TExPolygons;
+  var
+    I: Integer;
+  begin
+    Result := nil;
+    for I := 0 to PolyTree.ChildCount - 1 do
+      AddOuterPolyNodeToExPolygons(PolyTree.Childs[I], Result);
+  end;
+          
+ +


+ + + + + + + +
C++ ... +
+ +
+
+   struct ExPolygon {
+    Polygon outer;
+    Polygons holes;
+  };
+
+  typedef std::vector< ExPolygon > ExPolygons;
+
+  void AddOuterPolyNodeToExPolygons(PolyNode& polynode, ExPolygons& expolygons)
+  {  
+    size_t cnt = expolygons.size();
+    expolygons.resize(cnt + 1);
+    expolygons[cnt].outer = polynode.Contour;
+    expolygons[cnt].holes.resize(polynode.ChildCount());
+    for (int i = 0; i < polynode.ChildCount(); ++i)
+    {
+      expolygons[cnt].holes[i] = polynode.Childs[i]->Contour;
+      //Add outer polygons contained by (nested within) holes ...
+      for (int j = 0; j < polynode.Childs[i]->ChildCount(); ++j)
+        AddOuterPolyNodeToExPolygons(*polynode.Childs[i]->Childs[j], expolygons);
+    }
+  }
+
+  void PolyTreeToExPolygons(PolyTree& polytree, ExPolygons& expolygons)
+  {
+    expolygons.clear();
+    for (int i = 0; i < polytree.ChildCount(); ++i)
+      AddOuterPolyNodeToExPolygons(*polytree.Childs[i], expolygons);
+  }
+          
+ +


+ + + + + + + +
C# ... +
+ +
+
+  using ExPolygons = List<ExPolygon>;	
+  using Polygon = List<IntPoint>;
+  using Polygons = List<List<IntPoint>>;
+
+  public struct ExPolygon {
+      public Polygon outer;
+      public Polygons holes;
+  }    
+
+  void AddOuterPolyNodeToExPolygons(PolyNode polynode, ref ExPolygons expolygons)
+  {  
+    ExPolygon ep = new ExPolygon();
+    ep.outer = new Polygon(polynode.Contour);
+    ep.holes = new Polygons(polynode.ChildCount);
+    foreach (PolyNode node in polynode.Childs)
+    {
+      ep.holes.Add(node.Contour);
+      //Add outer polygons contained by (nested within) holes ...
+      foreach (PolyNode n in node.Childs)
+          AddOuterPolyNodeToExPolygons(n, ref expolygons);
+    }
+    expolygons.Add(ep);
+  }
+
+  void PolyTreeToExPolygons(PolyTree polytree, ref ExPolygons expolygons)
+  {
+      expolygons.Clear();
+      foreach (PolyNode node in polytree.Childs)
+        AddOuterPolyNodeToExPolygons(node, ref expolygons);
+  }
+          
+ +


+
 
+ +

See Also

+

PolyTree

+ + + + + + + \ No newline at end of file diff --git a/clipper/Documentation/Docs/Overview/Example.htm b/clipper/Documentation/Docs/Overview/Example.htm new file mode 100755 index 0000000..4f59a2c --- /dev/null +++ b/clipper/Documentation/Docs/Overview/Example.htm @@ -0,0 +1,211 @@ + + + + + + + + + + + + + + + + + + + + Example + + + + + + + + + + + + + + + + + + + + + +

Example

+ + + + + + + + + +
Delphi Code Sample: +
+ +
+  uses
+    graphics32, clipper;
+  
+  ...
+  	
+  var
+    sub, clp, sol: TPolygons;
+  begin
+
+    //set up the subject and clip polygons ...
+    setlength(sub, 3);
+    sub[0] := GetEllipsePoints(IntRect(100,100,300,300));
+    sub[1] := GetEllipsePoints(IntRect(125,130,275,180));
+    sub[2] := GetEllipsePoints(IntRect(125,220,275,270));
+	
+    setlength(clp, 1);
+    clp[0] := GetEllipsePoints(IntRect(140,70,220,320));
+
+    //display the subject and clip polygons ...
+    DrawPolygons(img.Bitmap, sub, 0x8033FFFF);
+    DrawPolygons(img.Bitmap, clp, 0x80FFFF33);
+    
+    //get the intersection of the subject and clip polygons ...
+    with TClipper.Create do
+    try
+      AddPolygons(sub, ptSubject);
+      AddPolygons(clp, ptClip);
+      Execute(ctIntersection, sol, pftEvenOdd, pftEvenOdd);
+    finally
+      free;
+    end;
+    
+    //finally draw the intersection polygons ...
+    DrawPolygons(img.Bitmap, sol, 0x40808080);
+        
+ +
+
 
+ + + + + + + + + + +
C++ Code Sample: +
+ +
+  #include "clipper.hpp"
+  
+  ...
+
+  //from clipper.hpp ...
+  //typedef long long long64;
+  //struct IntPoint {long64 X; long64 Y;};
+  //typedef std::vector<IntPoint> Polygon;
+  //typedef std::vector<Polygon> Polygons;
+
+  using namespace ClipperLib;
+
+
+  //set up the subject and clip polygons ...
+  Polygons sub(3);
+  sub[0] = GetEllipsePoints(IntRect(100,100,300,300));
+  sub[1] = GetEllipsePoints(IntRect(125,130,275,180));
+  sub[2] = GetEllipsePoints(IntRect(125,220,275,270));
+
+  Polygons clp(1);
+  clp[0] = GetEllipsePoints(IntRect(140,70,220,320));
+
+  //display the subject and clip polygons ...
+  DrawPolygons(img->Bitmap, sub, 0x8033FFFF);
+  DrawPolygons(img->Bitmap, clp, 0x80FFFF33);
+  
+  //get the intersection of the subject and clip polygons ...
+  Clipper clpr;
+  clpr.AddPolygons(sub, ptSubject);
+  clpr.AddPolygons(clp, ptClip);
+  Polygons sol;
+  clpr.Execute(ctIntersection, sol, pftEvenOdd, pftEvenOdd);
+
+  //finally draw the intersection polygons ...
+  DrawPolygons(img->Bitmap, sol, 0x40808080);
+        
+ +
+
 
+ + + + + + + + + +
C# Code Sample: +
+ +
+  ...
+  using ClipperLib;
+	
+  ...
+  using Polygon = List<IntPoint>;
+  using Polygons = List<List<IntPoint>>;
+  
+  ...
+  
+  Polygons subjs = new Polygons(3);
+  Polygons clips = new Polygons(1);
+  Polygons solution = new Polygons();
+	
+  subjs.Add(GetEllipsePoints(new IntRect(100,100,300,300)));
+  subjs.Add(GetEllipsePoints(new IntRect(125,130,275,180)));
+  subjs.Add(GetEllipsePoints(new IntRect(125,220,275,270)));
+	  
+  clips.Add(GetEllipsePoints(new IntRect(140,70,220,320)));
+	  
+  DrawPolygons(subjs, 0x8033FFFF);
+  DrawPolygons(clips, 0x80FFFF33);
+	  
+  Clipper c = new Clipper();
+  c.AddPolygons(subjs, PolyType.ptSubject);
+  c.AddPolygons(clips, PolyType.ptClip);
+  c.Execute(ClipType.ctIntersection, solution);
+
+  DrawPolygons(solution, 0x40808080);
+        
+ +
+ +
 
+ + + + + + + + + + \ No newline at end of file diff --git a/clipper/Documentation/Docs/Overview/FAQ.htm b/clipper/Documentation/Docs/Overview/FAQ.htm new file mode 100755 index 0000000..59ec686 --- /dev/null +++ b/clipper/Documentation/Docs/Overview/FAQ.htm @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + + FAQ + + + + + + + + + + + + + + + + + + + + + +

FAQ

+ + +

Why does Clipper use integer coordinates, not floats?

+ +

Initially Clipper did use floating point coordinates but the clipping algorithm wasn't numerically robust. Consequently, very occasionally errors occurred which prevented Clipper from returning a solution. These issues have completely resolved since swapping to integer coordinates.

+ + +

How do I use floating point coordinates with Clipper?

+ +

It's a simple task to multiply your floating point coordinates by a scaling factor (that's typically a power of 10 depending on the desired precision). Then with the solution polygons, divide the returned coordinates by this same scaling factor. Clipper accepts integer coordinates as large as +/-4.6 e18, so it can accommodate very large scaling factors.

+ + +

Does Clipper handle polygons with holes?

+ +

Polygon 'holes' are implied simply by having their orientations opposite that of their container polygons.

+ + +

Why are there separate fill rules for Subject and Clip polygons?

+ +

Because users may want to use different fill rules for these polygons. However it's important to note that these fill rules apply solely within subject and clip polygons to define their respective regions. These rules aren't applied to the clip operation itself where subject and clip polygons are merged into a single solution. If you wish for a fill rule to apply to the merging of subject and clip polygons as well - typically during a UNION operation, then you should UNION all the polygons as subjects without assigning any clip polygons.

+ + +

Which fill rule does the boolean clipping operation use?

+ +

Perhaps the easiest way to explain what happens during clipping is to consider the following. First the subject and clip polygons are filled using their respective fill rules. With the subject polygons, assign a winding count (WC) of +1 to any filled region and a WC of 0 to any unfilled region. Do likewise with the clip polygons. Then the following winding rules apply to the clipping operation ...
  ♦ Intersection: add subject and clip regions and return those regions where WC == +2
  ♦ Union: add subject and clip regions and return those regions where WC > 0
  ♦ Difference: subtract clip from subject regions and return those regions where WC == +1
  ♦ XOR: subtract clip from subject regions and return those regions where WC != 0

+ + +

Some solution polygons share a common edge. Is this a bug?

+ +

No. However Clipper tries very hard to minimize this by merging polygons that share a common edge.

+ + +

I have lots of polygons that I want to 'union'. Can I do this in one operation?

+ +

Yes. Just add all the polygons as subject polygons to the Clipper object and don't assign any clip polygons.

+ + +

The OffsetPolygons function is returning tiny artefacts? Could this be a bug?

+ +

The precision of the input coordinates may be a problem. The Clipper Library only operates on integer coordinates so if you need better precision than integers, scale the coordinates (eg by a factor of 10) before passing them to the OffsetPolygons function. Then it's a simple matter to reverse the scaling on the output polygons.

+ + +

The OffsetPolygons function is returning unexpected results? Could this be a bug?

+ +

Most likely the orientation of the input polygons is wrong.

+ + +

Is there an easy way to reverse polygon orientations?

+ +

Yes, see ReversePolygons.

+ +
+ + +

Is it possible to get the offset of a line or a polyline?

+ +

Yes, just convert the polyline into a 'flat' polygon. Do this by appending to the polyline a reverse copy of the polyline while avoiding duplicate coordinates at each end: c1,c2,...,cn, c(n-1),...,c2. (You don't need to append anything if there are just two vertices forming a single line.)

+ + + + + + +
+ +
+var
+  pts: TPolygon;
+  ppts: TPolygons;
+begin
+  //define the polyline ...
+  setlength(pts, 5);
+  pts[0] := IntPoint(10,10);
+  pts[1] := IntPoint(100,100);
+  pts[2] := IntPoint(150,100);
+  pts[3] := IntPoint(100,10);
+  pts[4] := IntPoint(10,100);
+
+  //convert the line to a 'flat' polygon ...
+  len := length(pts);
+  setLength(pts, len*2 -2);
+  for i := 1 to len -2 do pts[len-1 +i] := pts[len-1 -i];
+
+  //do the offsetting ...
+  setlength(ppts, 1);
+  ppts[0] := pts;
+  ppts := OffsetPolygons(ppts, 6, jtSquare, 0);
+          
+ +


+ +
 
+ + +

My drawings contain lots of ellipses and arcs. How can I perform clipping operations or offsetting on these?

+ +

You'll have to convert then to polygons. Many graphics libraries have 'flatten path' routines.

+ + + +

See Also

+

OffsetPolygons, Orientation, ReversePolygons

+ + + + + + + \ No newline at end of file diff --git a/clipper/Documentation/Docs/Overview/License.htm b/clipper/Documentation/Docs/Overview/License.htm new file mode 100755 index 0000000..0a3dddb --- /dev/null +++ b/clipper/Documentation/Docs/Overview/License.htm @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + License + + + + + + + + + + + + + + + + + + + + + +

License

+ + +

The Clipper code library, the "Software" (that includes Delphi, C++ & C# source code, accompanying samples and documentation), has been released under the following license, terms and conditions:

+ + +

Boost Software License - Version 1.0 - August 17th, 2003
http://www.boost.org/LICENSE_1_0.txt

+ + +

Permission is hereby granted, free of charge, to any person or organization obtaining a copy of the software and accompanying documentation covered by this license (the "Software") to use, reproduce, display, distribute, execute, and transmit the Software, and to prepare derivative works of the Software, and to permit third-parties to whom the Software is furnished to do so, all subject to the following:

+ + +

The copyright notices in the Software and this entire statement, including the above license grant, this restriction and the following disclaimer, must be included in all copies of the Software, in whole or in part, and all derivative works of the Software, unless such copies or derivative works are solely in the form of machine-executable object code generated by a source language processor.

+ + +

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ + + + + + + + + \ No newline at end of file diff --git a/clipper/Documentation/Docs/Overview/Rounding.htm b/clipper/Documentation/Docs/Overview/Rounding.htm new file mode 100755 index 0000000..8390a43 --- /dev/null +++ b/clipper/Documentation/Docs/Overview/Rounding.htm @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + Rounding + + + + + + + + + + + + + + + + + + + + + +

Rounding

+ +

By requiring integer coordinates for all polygon vertices, the Clipper Library has been able to avoid problems of numerical robustness that otherwise plague geometric computations. Nevertheless, rounding coordinates to integers causes other problems, and these are discussed below.
+



It is important to stress at the outset that rounding causes some unavoidable imprecision by moving vertices fractions of a unit away from their 'true' positions. Fortunately rounding imprecision can be managed effectively by appropriate scaling.


Nevertheless inappropriate scaling can deliver undesirable and perhaps unexpected solutons as demonstrated by the first example on the right. The image shows two polygons (triangles) being merged with a 'union' operation. The region shaded green represents the 'merged' polygon returned by Clipper. It's evident that the bottom-left polygon from the input is missing from the result.

This is perhaps best explained by a very simple overview of how the clipping algorithm is implemented. Imaginary horizontal lines (called scanlines) pass through each and every vertex in the supplied set of polygons (ie both subject and clip polygons). The regions between adjacent scanlines are called scanbeams. Scanbeams are processed in order, starting with the bottom-most scanbeam and proceeding to the top-most. For each scanbeam there is a set of 'active' edges, that is those edges that pass through that scanbeam. The relative positions of active edges at both the bottom and top of a given scanbeam are used to determine the locations of intersections within a scanbeam. To preserve numerical robustness it's necessary to use the rounded coordinates of each edge at each scanline. This rounding effectively causes edges to deviate fractions of a unit horizontally where they cross each scanline.

In the image on the right the edge (2,5) -> (1,3) deviates from its true position at (1.5,4) to (2,4) at scanline Y=4. This edge deviation reduces the bottom-left polygon's area to zero and as a consequence it is discarded.

If the polygon coordinates of these 2 triangles had been scaled up by even just a factor of 2, ie {(2,6), (4,8), (4,10)} and {(2,6), (6,6), (4,8)}, the union operation would have returned a polygon that correctly covers both triangles.

Greater precision can always be achieved by scaling (or increased scaling) of polygon coordinates. The Clipper library accepts integer coordinate values up to ±0x3FFFFFFFFFFFFFFF (± 4.6e+18) in order to accommodate very high degrees of precision.



This second clipping example shows another complication of rounding - tiny self-intersection artefacts. Even though polygon vertices passed to Clipper objects have integer coordinates, their edges commonly intesect with other edges at fractional coordinates. These intersection points (that form vertices in the solution polygons) must have their coordinates rounded to integers.

In the unscaled image on the left (where one unit equals one pixel), the area of intersection of 2 polygons has been highlighted in bright green.

+ +



A 30X 'close up' of the lower points of intersection of these same 2 polygons shows the presence of a tiny self-intersecting artefact. The three 'black dots' highlight the actual points of intersection (with their fractional coordinates displayed). The smaller 'red dots' show where these points of intersection are located once rounding is applied. With a little care you can see that rounding reverses the orientation of these vertices and causes a tiny self-intersecting artefact.

+ + +



In this final example, the single polygon on the left also has a tiny self-intersection. However, due to the way Clipper uses rounding (as very briefly outlined above), the vertex (88,50) is seen to simply 'touch' rather than cross over (by a fraction of a unit) the right edge of the polygon. Consequently a union operation by Clipper on this polygon will return this same polygon unchanged (ie without removing the tiny self-intersection).

+ + + + + + + + \ No newline at end of file diff --git a/clipper/Documentation/Docs/Overview/_Body.htm b/clipper/Documentation/Docs/Overview/_Body.htm new file mode 100755 index 0000000..28a4922 --- /dev/null +++ b/clipper/Documentation/Docs/Overview/_Body.htm @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + Overview + + + + + + + + + + + + + + + + + + + + + + +

Overview

+ + +

The Clipper Library is based on but significantly extends Bala Vatti's polygon clipping algorithm as described in "A generic solution to polygon clipping", Communications of the ACM, Vol 35, Issue 7 (July 1992) pp 56-63.

The library can perform each of the four boolean clipping operations - intersection, union, difference and exclusive-or (xor). It can accept any number of, and any type of polygon as input (including polygons with holes and self-intersecting polygons).

+ Clipper's ZIP package contains the core library, a Windows CHM help file, HTML help, and a number of compiled examples. The library's code was initially written in Delphi Pascal (compiling in Delphi ver. 7+) but now contains C++ and C# translations too. The core library's source code in each language is a little over 3500 lines (including extensive comments), with a file size of about 100KB. The examples show how Clipper can be used with the different languages using a number of graphics libraries including - AGG, Cairo, OpenGL, Graphics32 and GDI+.

Several features set Clipper apart from other polygon clipping libraries:

    + +
  1. it's very fast compared to other libraries
  2. + +
  3. the ability to handle self-intersecting polygons
  4. + +
  5. it's free, under its Boost license, to use in both freeware and commercial applications.
  6. + +
  7. support for EvenOdd, NonZero, Positive and Negative polygon filling modes.
  8. + +
  9. ability to perform polygon offsetting.
  10. + +

+
+ + +

+ + + +

See Also

+

Source, License, Clipper

+ + + + + + + \ No newline at end of file diff --git a/clipper/Documentation/Docs/Units/ClipperLib/Classes/Clipper/Methods/Constructor.htm b/clipper/Documentation/Docs/Units/ClipperLib/Classes/Clipper/Methods/Constructor.htm new file mode 100755 index 0000000..fc50981 --- /dev/null +++ b/clipper/Documentation/Docs/Units/ClipperLib/Classes/Clipper/Methods/Constructor.htm @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + Constructor + + + + + + + + + + + + + + + + + + + + + + +

Clipper.Constructor

+ + +

Del.» constructor Create; override;

+ +

C++ » Clipper();

+ +

C#  » Clipper();

+ + + + + +

See Also

+

Example

+ + + + + + \ No newline at end of file diff --git a/clipper/Documentation/Docs/Units/ClipperLib/Classes/Clipper/Methods/Execute.htm b/clipper/Documentation/Docs/Units/ClipperLib/Classes/Clipper/Methods/Execute.htm new file mode 100755 index 0000000..4c96940 --- /dev/null +++ b/clipper/Documentation/Docs/Units/ClipperLib/Classes/Clipper/Methods/Execute.htm @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + Execute + + + + + + + + + + + + + + + + + + + + + + +

Clipper.Execute

+ + +

Del.»
function Execute(clipType: TClipType;
  out solution: TPolygons;
  subjFillType: TPolyFillType = pftEvenOdd;
  clipFillType: TPolyFillType = pftEvenOdd): boolean; overload;

function Execute(clipType: TClipType;
  out solution: TPolyTree;
  subjFillType: TPolyFillType = pftEvenOdd;
  clipFillType: TPolyFillType = pftEvenOdd): boolean; overload;

+ + +

C++ »
bool Execute(ClipType clipType,
  Polygons &solution,
  PolyFillType subjFillType = pftEvenOdd,
  PolyFillType clipFillType = pftEvenOdd);

bool Execute(ClipType clipType,
  PolyTree &solution,
  PolyFillType subjFillType = pftEvenOdd,
  PolyFillType clipFillType = pftEvenOdd);

+ +

C#  »
public bool Execute(ClipType clipType,
  Polygons solution,
  PolyFillType subjFillType,
  PolyFillType clipFillType);

public bool Execute(ClipType clipType,
  PolyTree solution,
  PolyFillType subjFillType,
  PolyFillType clipFillType);

+ +
+ +

The Execute() method performs the specified clipping task (intersection, union, difference or xor) on the previously assigned subject and clip polygons. This method can be called multiple times without reassigning subject and clip polygons (ie when different clipping operations are required on the same polygon sets). The polygon fill methods can be Even-Odd, Non-Zero, Positive and Negative (default: Even-Odd). Also, subject and clip polygons don't have to use the same fill type.

This method is overloaded since the solution parameter can be either a Polygons or PolyTree structure. When the solution parameter is a Polygons structure, the solution will contain a collection of polygons containing both outer and inner polygon contours (where inner contours have an orientation opposite outer contours). On the other hand, the PolyTree structure explicitly associates inner 'hole' polygons with their container 'outer' polygons.

The order that polygons are listed in the solution structure is undefined. The solution will never contain overlapping polygons, nor will it contain polygons with self-intersecting edges. Also, the filling mode for solution polygons is undefined since it can be either EvenOdd or NonZero. (This is because the winding depth of solution polygons will always be in the range of -1 to 1.)

Solution orientation: The Orientation of polygons returned in the 'solution' parameter will always be 'true' for outer polygons and 'false' for inner 'hole' polygons (unless the ReverseSolution property has been enabled).

It's important to note that the fill rules apply solely within subject and clip polygons to define their respective regions. These rules aren't applied when merging these polygons into a single solution during the clip operation. If you wish for a fill rule to apply to the merging of subject and clip polygons as well - typically during a UNION operation, then you should UNION all the polygons as subjects without assigning clip polygons.

+ + +

See Also

+

Example, ReverseSolution, PolyTree, Orientation, ClipType, PolyFillType, Polygons

+ + + + + + \ No newline at end of file diff --git a/clipper/Documentation/Docs/Units/ClipperLib/Classes/Clipper/Properties/ReverseSolution.htm b/clipper/Documentation/Docs/Units/ClipperLib/Classes/Clipper/Properties/ReverseSolution.htm new file mode 100755 index 0000000..0fa988a --- /dev/null +++ b/clipper/Documentation/Docs/Units/ClipperLib/Classes/Clipper/Properties/ReverseSolution.htm @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + ReverseSolution + + + + + + + + + + + + + + + + + + + + + + +

Clipper.ReverseSolution

+ + +

Del.» property ReverseSolution: boolean; override;

+ +

C++ » void ReverseSolution(bool value);

+ +

C#  » public bool ReverseSolution { get {} set {} };

+ + +

When this property is set to true, polygons returned in the solution parameter of the Execute() method will have orientations opposite to their normal orientations.

+ + + + + +

See Also

+

Execute, Orientation

+ + + + + + \ No newline at end of file diff --git a/clipper/Documentation/Docs/Units/ClipperLib/Classes/Clipper/_Body.htm b/clipper/Documentation/Docs/Units/ClipperLib/Classes/Clipper/_Body.htm new file mode 100755 index 0000000..b69f1a3 --- /dev/null +++ b/clipper/Documentation/Docs/Units/ClipperLib/Classes/Clipper/_Body.htm @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + Clipper + + + + + + + + + + + + + + + + + + + + + + + +

Clipper

+

Hierarchy

+

+

   |

+

ClipperBase

+
+ +

The Clipper class encapsulates boolean clipping operations (intersection, union, difference and XOR) on polygons.

Input polygons are passed to a Clipper object by the AddPolygon and AddPolygons methods, and the clipping operation is performed by the Execute method. Multiple boolean operations can be performed on the same input polygon set by repeat calls to Execute. However, if a differenct set of input polygons requires 'clipping', then the Clear method must be called to remove any existing polygons before new polygons are added.

+ +

Reference

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Methods + Properties +
In Clipper: +
Constructor + ReverseSolution +
Execute + +
In ClipperBase: +
AddPolygon + +
AddPolygons + +
Clear + +
GetBounds + +
+ + + + + + \ No newline at end of file diff --git a/clipper/Documentation/Docs/Units/ClipperLib/Classes/ClipperBase/Methods/AddPolygon.htm b/clipper/Documentation/Docs/Units/ClipperLib/Classes/ClipperBase/Methods/AddPolygon.htm new file mode 100755 index 0000000..14a7969 --- /dev/null +++ b/clipper/Documentation/Docs/Units/ClipperLib/Classes/ClipperBase/Methods/AddPolygon.htm @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + AddPolygon + + + + + + + + + + + + + + + + + + + + + + +

ClipperBase.AddPolygon

+ + +

Del.» function AddPolygon(const polygon: TPolygon; polyType: TPolyType): boolean;

+ +

C++ » bool AddPolygon(const Polygon &pg, PolyType polyType);

+ +

C#  » public virtual bool AddPolygon(Polygon pg, PolyType polyType);

+
+ + +

Any number of subject and clip polygons can be added to the clipping task, either individually via the AddPolygon() method, or as groups via the AddPolygons() method, or even using both methods.

Adjacent vertices with identical coordinates will be treated as a single vertex. Whereever 3 adjacent vertices form a single colinear edge, the middle vertex will be ignored.

+
+ + +

Polygon Orientation:
Outer polygons can be either clockwise or counter-clockwise as long as any inner 'hole' polygons have the reverse orientation.

+
+ + +

Polygon Coordinate range:
Polygon coordinates must be between ± 0x3FFFFFFFFFFFFFFF (± 4.6e+18), otherwise a range error will be thrown when attempting to add the polygon to the Clipper object. If coordinates can be kept between ± 0x3FFFFFFF (± 1.0e+9), a modest increase in performance (approx. 15-20%) over the larger range can be achieved by avoiding large integer math.

+ + +

The function will return false if: +

    + +
  • there are less than 3 coordinates defining the polygon (once duplicates have been excluded).
  • + +
  • all polygon coordinates are co-linear.
  • + +

+ +
+ + + + +

See Also

+

Example, AddPolygons, Polygon, PolyType

+ + + + + + \ No newline at end of file diff --git a/clipper/Documentation/Docs/Units/ClipperLib/Classes/ClipperBase/Methods/AddPolygons.htm b/clipper/Documentation/Docs/Units/ClipperLib/Classes/ClipperBase/Methods/AddPolygons.htm new file mode 100755 index 0000000..1d240fa --- /dev/null +++ b/clipper/Documentation/Docs/Units/ClipperLib/Classes/ClipperBase/Methods/AddPolygons.htm @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + + + AddPolygons + + + + + + + + + + + + + + + + + + + + + + +

ClipperBase.AddPolygons

+ + +

Del.» function AddPolygons(const polygons: TPolygons; polyType: TPolyType): boolean;

+ +

C++ » bool AddPolygons(const Polygons &ppg, PolyType polyType);

+ +

C#  » public virtual bool AddPolygons(Polygons ppg, PolyType polyType);

+
+ +

Any number of subject and clip polygons can be added to the clipping task, either individually via the AddPolygon() method, or as groups via the AddPolygons() method, or even using both methods.

Adjacent vertices with identical coordinates will be treated as a single vertex. Whereever 3 adjacent vertices form a single colinear edge, the middle vertex will be ignored.

+
+ + +

Polygon Orientation:
Outer polygons can be either clockwise or counter-clockwise as long as any inner 'hole' polygons have the reverse orientation.

+
+ + +

Polygon Coordinate range:
Polygon coordinates must be between ± 0x3FFFFFFFFFFFFFFF (± 4.6e+18), otherwise a range error will be thrown when attempting to add the polygon to the Clipper object. If coordinates can be kept between ± 0x3FFFFFFF (± 1.0e+9), a modest increase in performance (approx. 15-20%) over the larger range can be achieved by avoiding large integer math.

+ + +

The function will return false if: +

    + +
  • there are less than 3 coordinates defining the polygon (once duplicates have been excluded).
  • + +
  • all polygon coordinates are co-linear.
  • + +

+ +
+ + + + +

See Also

+

Example, AddPolygon, Polygons, PolyType

+ + + + + + \ No newline at end of file diff --git a/clipper/Documentation/Docs/Units/ClipperLib/Classes/ClipperBase/Methods/Clear.htm b/clipper/Documentation/Docs/Units/ClipperLib/Classes/ClipperBase/Methods/Clear.htm new file mode 100755 index 0000000..eb2b817 --- /dev/null +++ b/clipper/Documentation/Docs/Units/ClipperLib/Classes/ClipperBase/Methods/Clear.htm @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + Clear + + + + + + + + + + + + + + + + + + + + + + +

ClipperBase.Clear

+ + +

Del.» procedure Clear;

+ +

C++ » virtual void Clear();

+ +

C#  » public void Clear() {};

+ +

The Clear method allows the Clipper object to be reused when clipping operations are required on different polygon sets. (If different clipping operations are performed on the same polygon sets, then Clipper's Execute method can be safely repeated without clearing and re-adding polygons.)

+ + + +

See Also

+

Clipper.Execute

+ + + + + + \ No newline at end of file diff --git a/clipper/Documentation/Docs/Units/ClipperLib/Classes/ClipperBase/Methods/GetBounds.htm b/clipper/Documentation/Docs/Units/ClipperLib/Classes/ClipperBase/Methods/GetBounds.htm new file mode 100755 index 0000000..183ceaf --- /dev/null +++ b/clipper/Documentation/Docs/Units/ClipperLib/Classes/ClipperBase/Methods/GetBounds.htm @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + GetBounds + + + + + + + + + + + + + + + + + + + + + + +

ClipperBase.GetBounds

+ + +

Del.» function GetBounds: TIntRect;

+ +

C++ » IntRect GetBounds();

+ +

C#  » public IntRect GetBounds() {...};

+
+ +

This method returns the axis-aligned bounding rectangle of all polygons that have been added to the Clipper object.

+ +
+ + + +

See Also

+

Example, IntRect

+ + + + + + \ No newline at end of file diff --git a/clipper/Documentation/Docs/Units/ClipperLib/Classes/ClipperBase/_Body.htm b/clipper/Documentation/Docs/Units/ClipperLib/Classes/ClipperBase/_Body.htm new file mode 100755 index 0000000..e8344b5 --- /dev/null +++ b/clipper/Documentation/Docs/Units/ClipperLib/Classes/ClipperBase/_Body.htm @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + ClipperBase + + + + + + + + + + + + + + + + + + + + + + + +

ClipperBase

+ +

ClipperBase is the ancestor class to Clipper (or TClipper in Delphi). It should not be instantiated directly. This class converts polygon coordinates (passed by the AddPolygon and AddPolygons methods) into edge objects.

+ + +

Reference

+ + + + + + + + + + + + + + + + + + +
Methods +
In ClipperBase: +
AddPolygon +
AddPolygons +
Clear +
GetBounds +
+

See Also

+

Clipper

+ + + + + + \ No newline at end of file diff --git a/clipper/Documentation/Docs/Units/ClipperLib/Classes/PolyNode/Methods/GetNext.htm b/clipper/Documentation/Docs/Units/ClipperLib/Classes/PolyNode/Methods/GetNext.htm new file mode 100755 index 0000000..fab87a7 --- /dev/null +++ b/clipper/Documentation/Docs/Units/ClipperLib/Classes/PolyNode/Methods/GetNext.htm @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + GetNext + + + + + + + + + + + + + + + + + + + + + + +

PolyNode.GetNext

+ + +

Del.» function GetNext: TPolyNode;

+ +

C++ » PolyNode* GetNext();

+ +

C#  » public PolyNode GetNext();

+ + +

The returned Polynode will be the first child if any, otherwise the next sibling, otherwise the next sibling of the Parent etc.

A PolyTree can be traversed very easily by calling GetFirst() followed by GetNext() in a loop until the returned object is a null pointer ...

+ + + + + + +
+ +
+  PolyTree polytree;
+  //call to Clipper.Execute method here which fills 'polytree'
+  
+  PolyNode* polynode = polytree.GetFirst();
+  while (polynode)
+  {
+    //do stuff with polynode here
+	
+    polynode = polynode->GetNext();
+  }
+  
+          
+ +

+ + + + + + + \ No newline at end of file diff --git a/clipper/Documentation/Docs/Units/ClipperLib/Classes/PolyNode/Properties/ChildCount.htm b/clipper/Documentation/Docs/Units/ClipperLib/Classes/PolyNode/Properties/ChildCount.htm new file mode 100755 index 0000000..b915d26 --- /dev/null +++ b/clipper/Documentation/Docs/Units/ClipperLib/Classes/PolyNode/Properties/ChildCount.htm @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + ChildCount + + + + + + + + + + + + + + + + + + + + + + +

PolyNode.ChildCount

+ + +

Del.» property ChildCount: Integer; //read only

+ +

C++ » ChildCount(); //read only

+ +

C#  » public int ChildCount; //read only

+ +
+ +

Returns the number of PolyNode Childs directly owned by the PolyNode object.

+ + +

See Also

+

Childs

+ + + + + + \ No newline at end of file diff --git a/clipper/Documentation/Docs/Units/ClipperLib/Classes/PolyNode/Properties/Childs.htm b/clipper/Documentation/Docs/Units/ClipperLib/Classes/PolyNode/Properties/Childs.htm new file mode 100755 index 0000000..5955de9 --- /dev/null +++ b/clipper/Documentation/Docs/Units/ClipperLib/Classes/PolyNode/Properties/Childs.htm @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + Childs + + + + + + + + + + + + + + + + + + + + + + +

PolyNode.Childs

+ + +

Del.» property Childs[index: Integer]: TPolyNode; //read only

+ +

C++ » std::vector < PolyNode* > Childs;//public field

+ +

C#  » public List < PolyNode > Childs; //read only property

+ + +

A read-only list of PolyNode.
Outer PolyNode childs contain hole PolyNodes, and hole PolyNode childs contain nested outer PolyNodes.

+ + + + +

See Also

+

ChildCount

+ + + + + + \ No newline at end of file diff --git a/clipper/Documentation/Docs/Units/ClipperLib/Classes/PolyNode/Properties/Contour.htm b/clipper/Documentation/Docs/Units/ClipperLib/Classes/PolyNode/Properties/Contour.htm new file mode 100755 index 0000000..76097e8 --- /dev/null +++ b/clipper/Documentation/Docs/Units/ClipperLib/Classes/PolyNode/Properties/Contour.htm @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + Contour + + + + + + + + + + + + + + + + + + + + + + +

PolyNode.Contour

+ +

Del.» property Contour: TPolygon; //read only

+ +

C++ » Polygon Contour; //public field

+ +

C#  » public Polygon Contour; //read only property

+ + +

Returns a list of polygon coordinates.

+ +

See Also

+

Orientation

+ + + + + + \ No newline at end of file diff --git a/clipper/Documentation/Docs/Units/ClipperLib/Classes/PolyNode/Properties/IsHole.htm b/clipper/Documentation/Docs/Units/ClipperLib/Classes/PolyNode/Properties/IsHole.htm new file mode 100755 index 0000000..ab1a21c --- /dev/null +++ b/clipper/Documentation/Docs/Units/ClipperLib/Classes/PolyNode/Properties/IsHole.htm @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + IsHole + + + + + + + + + + + + + + + + + + + + + + +

PolyNode.IsHole

+ + +

Del.» IsHole: Boolean; //read only

+ +

C++ » bool IsHole; //field

+ +

C#  » public bool IsHole; //read only property

+ + +

Returns true when the PolyNode's polygon (Contour) is a hole.

+ +

See Also

+

Contour

+ + + + + + \ No newline at end of file diff --git a/clipper/Documentation/Docs/Units/ClipperLib/Classes/PolyNode/Properties/Parent.htm b/clipper/Documentation/Docs/Units/ClipperLib/Classes/PolyNode/Properties/Parent.htm new file mode 100755 index 0000000..97359b8 --- /dev/null +++ b/clipper/Documentation/Docs/Units/ClipperLib/Classes/PolyNode/Properties/Parent.htm @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + Parent + + + + + + + + + + + + + + + + + + + + + + +

PolyNode.Parent

+ +

Del.» Parent: TPolyNode; //read only

+ +

C++ » PolyNode* Parent; //field

+ +

C#  » public PolyNode Parent; //read only property

+ + +

Returns the parent PolyNode.

The PolyTree object (which is also a PolyNode) does not have a parent and will return a null pointer.

+ + + + + + + \ No newline at end of file diff --git a/clipper/Documentation/Docs/Units/ClipperLib/Classes/PolyNode/_Body.htm b/clipper/Documentation/Docs/Units/ClipperLib/Classes/PolyNode/_Body.htm new file mode 100755 index 0000000..ca9ef2c --- /dev/null +++ b/clipper/Documentation/Docs/Units/ClipperLib/Classes/PolyNode/_Body.htm @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + PolyNode + + + + + + + + + + + + + + + + + + + + + + + +

PolyNode

+
+ +

PolyNodes are encapsulated within a PolyTree container, and together provide a data structure representing the parent-child relationships of polygon contours returned by Clipper's Execute method.

PolyNode objects represent single polygon contours that can be either 'outer' or a 'hole' polygons. PolyNodes may own any number of PolyNode children (Childs), where children of outer polygons are holes, and children of holes are (nested) outer polygons.

+ +

Reference

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Fields + Methods + Properties +
In PolyNode: +
+ GetNext + ChildCount +
+ + Childs +
+ + Contour +
+ + IsHole +
+ + Parent +
+

See Also

+

Clipper.Execute, PolyTree

+ + + + + + \ No newline at end of file diff --git a/clipper/Documentation/Docs/Units/ClipperLib/Classes/PolyTree/Methods/Clear.htm b/clipper/Documentation/Docs/Units/ClipperLib/Classes/PolyTree/Methods/Clear.htm new file mode 100755 index 0000000..89a85fa --- /dev/null +++ b/clipper/Documentation/Docs/Units/ClipperLib/Classes/PolyTree/Methods/Clear.htm @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + Clear + + + + + + + + + + + + + + + + + + + + + + +

PolyTree.Clear

+ + +

Del.» procedure Clear;

+ +

C++ » void Clear();

+ +

C#  » public void Clear();

+
+ + +

This method allows a PolyTree object to be reused in repeat calls to Clipper's Execute method.

Note: This method does not need to be called explicitly between calls to Clipper.Execute() since that method will automatically clear the PolyTree before propogating it with new PolyNodes.

+ +

See Also

+

Clipper.Execute

+ + + + + + \ No newline at end of file diff --git a/clipper/Documentation/Docs/Units/ClipperLib/Classes/PolyTree/Methods/GetFirst.htm b/clipper/Documentation/Docs/Units/ClipperLib/Classes/PolyTree/Methods/GetFirst.htm new file mode 100755 index 0000000..2ea3340 --- /dev/null +++ b/clipper/Documentation/Docs/Units/ClipperLib/Classes/PolyTree/Methods/GetFirst.htm @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + GetFirst + + + + + + + + + + + + + + + + + + + + + + +

PolyTree.GetFirst

+ + +

Del.» function GetFirst: TPolyNode;

+ +

C++ » PolyNode* GetFirst();

+ +

C#  » public PolyNode GetFirst();

+ + +

Ths method returns the first outer polygon contour if any, otherwise a null pointer.

This function is almost equivalent to calling Childs[0] except that when a PolyTree object is empty (has no children), calling Childs[0] would raise an out of range exception.

+ + + + + + +

See Also

+

PolyNode.GetNext, PolyNode.ChildCount, PolyNode.Childs

+ + + + + + \ No newline at end of file diff --git a/clipper/Documentation/Docs/Units/ClipperLib/Classes/PolyTree/Properties/Total.htm b/clipper/Documentation/Docs/Units/ClipperLib/Classes/PolyTree/Properties/Total.htm new file mode 100755 index 0000000..62a4854 --- /dev/null +++ b/clipper/Documentation/Docs/Units/ClipperLib/Classes/PolyTree/Properties/Total.htm @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + Total + + + + + + + + + + + + + + + + + + + + + + +

PolyTree.Total

+ + +

Del.» property Total: Integer; //read only

+ +

C++ » Total(); //read only

+ +

C#  » public int Total; //read only

+ +
+ +

Returns the total number of PolyNodes (polygons) contained within the PolyTree. This value is not to be confused with ChildCount which returns the number of immediate children only (Childs) contained by PolyTree.

+ + +

See Also

+

PolyNode.ChildCount, PolyNode.Childs

+ + + + + + \ No newline at end of file diff --git a/clipper/Documentation/Docs/Units/ClipperLib/Classes/PolyTree/_Body.htm b/clipper/Documentation/Docs/Units/ClipperLib/Classes/PolyTree/_Body.htm new file mode 100755 index 0000000..ad896a8 --- /dev/null +++ b/clipper/Documentation/Docs/Units/ClipperLib/Classes/PolyTree/_Body.htm @@ -0,0 +1,181 @@ + + + + + + + + + + + + + + + + + + + + PolyTree + + + + + + + + + + + + + + + + + + + + + + + +

PolyTree

+

Hierarchy

+

+

   |

+

PolyNode

+
+ +

A PolyTree object can be passed as a parameter to Clipper's Execute method. This class encapsulates a data structure that mirrors the parent-child relationships of the polygons returned by Clipper. (The PolyTree class replaces the obsolete ExPolygons structure that was unable to represent polygons 'nesting' within holes.)

The term 'polygon' is often used by others to refer to a single 'outer' contour together with any number of inner contours or 'holes'. However, in this documentation, polygon is used synonymously with a single polygon contour, irrespective of whether it's an outer or a hole.

The PolyTree object encapsulates any number PolyNode children, where a PolyNode object represents a single polygon (either an outer or hole polygon). PolyTree is a specialized PolyNode that contains all the PolyNodes within the tree. Its Contour property will always be empty. The PolyTree's immediate children represent top-level 'outer' polygons returned by the Clipper object. These top-level PolyNodes may contain their own PolyNode children representing hole polygons that may also contain children representing nested outer polygons etc.

Since the PolyTree data structure is more complex than the alternative Polygons data structure that's passed to Clipper's overloaded Execute method, and because it's more computationally expensive to process (roughly 5-10% slower), it should only be used when parent-child polygon relationships are needed and not just polygon coordinates.

+ + + + + + + + + + +
+ + + + +
+
+    polytree: 
+    Contour = ()
+    ChildCount = 1
+    Childs[0]: 
+        Contour = ((10,10),(100,10),(100,100),(10,100))
+        IsHole = False
+        ChildCount = 1
+        Childs[0]: 
+            Contour = ((20,20),(20,90),(90,90),(90,20))
+            IsHole = True
+            ChildCount = 2
+            Childs[0]: 
+                Contour = ((30,30),(50,30),(50,50),(30,50))
+                IsHole = False
+                ChildCount = 0
+            Childs[1]: 
+                Contour = ((60,60),(80,60),(80,80),(60,80))
+                IsHole = False
+                ChildCount = 0
+
+            
+ +

+ +

Reference

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Fields + Methods + Properties +
In PolyTree: +
+ Clear + Total +
+ GetFirst + +
In PolyNode: +
+ GetNext + ChildCount +
+ + Childs +
+ + Contour +
+ + IsHole +
+ + Parent +
+

See Also

+

Clipper.Execute, PolyNode, ExPolygons, Polygons

+ + + + + + \ No newline at end of file diff --git a/clipper/Documentation/Docs/Units/ClipperLib/Routines/Area.htm b/clipper/Documentation/Docs/Units/ClipperLib/Routines/Area.htm new file mode 100755 index 0000000..1d9de0b --- /dev/null +++ b/clipper/Documentation/Docs/Units/ClipperLib/Routines/Area.htm @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + Area + + + + + + + + + + + + + + + + + + + + + +

Area

+ + +

Del.» function Area(const pts: TPolygon): double;

+ +

C++ » double Area(const Polygon &poly);

+ +

C#  » public static double Area(Polygon poly);

+ + +

This function returns the area of the supplied polygon. Depending on orientation, this value may be positive or negative. If Orientation is true, then the area will be positive and conversely, if Orientation is false, then the area will be negative.

+
+ + +

See Also

+

Orientation, Polygon

+ + + + + + \ No newline at end of file diff --git a/clipper/Documentation/Docs/Units/ClipperLib/Routines/CleanPolygon.htm b/clipper/Documentation/Docs/Units/ClipperLib/Routines/CleanPolygon.htm new file mode 100755 index 0000000..73fa70c --- /dev/null +++ b/clipper/Documentation/Docs/Units/ClipperLib/Routines/CleanPolygon.htm @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + CleanPolygon + + + + + + + + + + + + + + + + + + + + + +

CleanPolygon

+ + +

Del.» function CleanPolygon(const Poly: TPolygon; Distance: double = 1.415): TPolygon;

+ +

C++ » void CleanPolygon(Polygon &in_poly, Polygon &out_poly, double distance = 1.415);

+ +

C#  » public static Polygon CleanPolygon(Polygon poly, double distance = 1.415);

+
+ + +

This function removes vertices that are within the specified 'distance' from their preceeding vertices. The default distance is approx SQRT(2) so that adjacent vertices having their corresponding X and Y coordinates within 1 unit of each other will precipitate the removal of the second vertex.

+
+ + + + + + + + \ No newline at end of file diff --git a/clipper/Documentation/Docs/Units/ClipperLib/Routines/CleanPolygons.htm b/clipper/Documentation/Docs/Units/ClipperLib/Routines/CleanPolygons.htm new file mode 100755 index 0000000..1b18b88 --- /dev/null +++ b/clipper/Documentation/Docs/Units/ClipperLib/Routines/CleanPolygons.htm @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + CleanPolygons + + + + + + + + + + + + + + + + + + + + + +

CleanPolygons

+ + +

Del.» function CleanPolygons(const Polys: TPolygons; Distance: double = 1.415): TPolygons;

+ +

C++ » void CleanPolygons(Polygons &in_polys, Polygon &out_polys, double distance = 1.415);

+ +

C#  » public static Polygons CleanPolygons(Polygons polys, double distance = 1.415);

+
+ + +

This function removes vertices that are within the specified 'distance' from their preceeding vertices. The default distance is approx SQRT(2) so that adjacent vertices having their corresponding X and Y coordinates within 1 unit of each other will precipitate the removal of the second vertex.

+
+ + + + + + + + \ No newline at end of file diff --git a/clipper/Documentation/Docs/Units/ClipperLib/Routines/OffsetPolygons.htm b/clipper/Documentation/Docs/Units/ClipperLib/Routines/OffsetPolygons.htm new file mode 100755 index 0000000..4a4109e --- /dev/null +++ b/clipper/Documentation/Docs/Units/ClipperLib/Routines/OffsetPolygons.htm @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + OffsetPolygons + + + + + + + + + + + + + + + + + + + + + +

OffsetPolygons

+ + +

Del.» function OffsetPolygons(const polys: TPolygons; const delta: double; JoinType: TJoinType = jtSquare; MiterLimit: double = 2.0; AutoFix: boolean = true): TPolygons;

+ +

C++ » void OffsetPolygons(const Polygons &in_polys, Polygons &out_polys, double delta, JoinType jointype = jtSquare, double MiterLimit = 2.0, bool AutoFix = true);

+ +

C#  » public static Polygons OffsetPolygons(Polygons polys, double delta, JoinType jointype = JoinType.jtSquare, double MiterLimit = 2.0, bool AutoFix = true);

+
+ + +

This function offsets the 'polys' polygons parameter by the 'delta' amount. Positive delta values expand outer polygons and contract inner 'hole' polygons. Negative deltas do the reverse.

+
+ + +

Edge joins may be one of three jointypes - jtMiter, jtSquare or jtRound. If the jointype is jtMiter, then the MiterLimit parameter will determine the maximum distance from the original vertex that the new offsetted vertex is allowed (in multiples of delta) before squaring is applied.

+
+ + +

It's important that the polygons passed to this function are oriented such that outer polygons have a 'true' orientation and inner 'hole' polygons have a 'false' orientation. If the orientations of input polygons are incorrect, the function will return unexpected results.

The optional AutoFix parameter will check the orientations of the input polygons and reverse them if needed. (AutoFix is optional because it is time-consuming. If the orientations of the input polygons are known to be correct and duplicate vertices don't need stripping, then set this parameter to false.)

+
+ + +

+
+ + +

See Also

+

Orientation, JoinType

+ + + + + + \ No newline at end of file diff --git a/clipper/Documentation/Docs/Units/ClipperLib/Routines/Orientation.htm b/clipper/Documentation/Docs/Units/ClipperLib/Routines/Orientation.htm new file mode 100755 index 0000000..35b52d4 --- /dev/null +++ b/clipper/Documentation/Docs/Units/ClipperLib/Routines/Orientation.htm @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + Orientation + + + + + + + + + + + + + + + + + + + + + +

Orientation

+ + +

Del.» function Orientation(const poly: TPolygon): boolean;

+ +

C++ » bool Orientation(const Polygon &poly); // Function in the ClipperLib namespace.

+ +

C#  » public static bool Orientation(Polygon poly); // Static method of the Clipper class in the ClipperLib namespace.

+ + +

Orientation returns a boolean value that is based on the polygon's orientation relative to the display's orientation (ie Y-axis positive upward vs Y-axis positive downward). +

    + +
  • On Y-axis positive upward displays, Orientation will return true if the polygon's orientation is counter-clockwise.
  • + +
  • On Y-axis positive downward displays, Orientation will return true if the polygon's orientation is clockwise.
  • + +

+ + +

Notes:
+

    + +
  • Duplicate coordinates in 'poly' must be removed before calling this function (including duplicate start & end nodes).
  • + +
  • The majority of 2D graphic display libraries (eg GDI, GDI+, XLib, Cairo, AGG, Graphics32) and even the SVG file format have their coordinate origins at the top-left corner of their respective viewports with their Y axes increasing downward. However, some display libraries (eg Quartz, OpenGL) have their coordinate origins undefined or in the classic bottom-left position with their Y axes increasing upward.
  • + +
  • It doesn't matter which Orientation is used by the polygons that are passed to Clipper objects - as long as polygon 'holes' are oriented opposite to outer polygons. Also it doesn't matter if Subject and Clip polygons have opposite orientations, as long as all Subject polygons have consistent outer and inner orientations, and all Clip polygons do likewise.
  • + +
  • The Orientations of polygon 'solutions' returned by Clipper's Execute method will always be 'true' for outer polygons and 'false' for inner 'hole' polygons (unless the ReverseSolution property has been enabled).
  • + +
  • For the OffsetPolygons function to work as expected, outer polygons must have a 'true' Orientation and polygon holes must have a 'false' Orientation.
  • + +
  • Self-intersecting polygons have indeterminate orientations, so passing a self-intersecting polygon to this function will deliver unpredictable results.
  • + +

+
+ + +

See Also

+

Clipper.ReverseSolution, OffsetPolygons, Polygon

+ + + + + + \ No newline at end of file diff --git a/clipper/Documentation/Docs/Units/ClipperLib/Routines/ReversePolygon.htm b/clipper/Documentation/Docs/Units/ClipperLib/Routines/ReversePolygon.htm new file mode 100755 index 0000000..638b54a --- /dev/null +++ b/clipper/Documentation/Docs/Units/ClipperLib/Routines/ReversePolygon.htm @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + ReversePolygon + + + + + + + + + + + + + + + + + + + + + +

ReversePolygon

+ + +

Del.» function ReversePolygon(const polys: TPolygon): TPolygon;

+ +

C++ » void ReversePolygon(const Polygon &p);

+ +

C#  » //Call Polygon.Reverse().

+
+ + + + + + + + \ No newline at end of file diff --git a/clipper/Documentation/Docs/Units/ClipperLib/Routines/ReversePolygons.htm b/clipper/Documentation/Docs/Units/ClipperLib/Routines/ReversePolygons.htm new file mode 100755 index 0000000..23c3362 --- /dev/null +++ b/clipper/Documentation/Docs/Units/ClipperLib/Routines/ReversePolygons.htm @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + ReversePolygons + + + + + + + + + + + + + + + + + + + + + +

ReversePolygons

+ + +

Del.» function ReversePolygons(const polys: TPolygons): TPolygons;

+ +

C++ » void ReversePolygons(const Polygons &p);

+ +

C#  » void ReversePolygons( Polygons polys );

+
+ + + + + + + + \ No newline at end of file diff --git a/clipper/Documentation/Docs/Units/ClipperLib/Routines/SimplifyPolygon.htm b/clipper/Documentation/Docs/Units/ClipperLib/Routines/SimplifyPolygon.htm new file mode 100755 index 0000000..15f37d7 --- /dev/null +++ b/clipper/Documentation/Docs/Units/ClipperLib/Routines/SimplifyPolygon.htm @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + SimplifyPolygon + + + + + + + + + + + + + + + + + + + + + +

SimplifyPolygon

+ + +

Del.» function SimplifyPolygon(const poly: TPolygon): TPolygons;

+ +

C++ » void SimplifyPolygon(const Polygon &in_poly, Polygons &out_polys);

+ +

C#  » public static Polygons SimplifyPolygon(Polygon poly);

+
+ + +

This function converts a self-intersecting polygon into simple polygons.

+
+ + + + + + + + \ No newline at end of file diff --git a/clipper/Documentation/Docs/Units/ClipperLib/Routines/SimplifyPolygons.htm b/clipper/Documentation/Docs/Units/ClipperLib/Routines/SimplifyPolygons.htm new file mode 100755 index 0000000..515a68e --- /dev/null +++ b/clipper/Documentation/Docs/Units/ClipperLib/Routines/SimplifyPolygons.htm @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + SimplifyPolygons + + + + + + + + + + + + + + + + + + + + + +

SimplifyPolygons

+ + +

Del.» function SimplifyPolygons(const polys: TPolygons): TPolygons;

+ +

C++ » void SimplifyPolygons(const Polygons &in_polys, Polygons &out_polys);

+ +

C++ » void SimplifyPolygons(const Polygons &polys);

+ +

C#  » public static Polygons SimplifyPolygons(Polygons polys);

+
+ + +

This function converts self-intersecting polygons into simple polygons.

+
+ + + + + + + + \ No newline at end of file diff --git a/clipper/Documentation/Docs/Units/ClipperLib/Types/ClipType.htm b/clipper/Documentation/Docs/Units/ClipperLib/Types/ClipType.htm new file mode 100755 index 0000000..abce7a2 --- /dev/null +++ b/clipper/Documentation/Docs/Units/ClipperLib/Types/ClipType.htm @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + ClipType + + + + + + + + + + + + + + + + + + + + + +

ClipType

+ + +

Del.» type TClipType = (ctIntersection, ctUnion, ctDifference, ctXor);

+ +

C++ » enum ClipType { ctIntersection, ctUnion, ctDifference, ctXor };

+ +

C#  » public enum ClipType { ctIntersection, ctUnion, ctDifference, ctXor };

+
+ + +



     

+ + + + +

See Also

+

Clipper.Execute

+ + + + + + \ No newline at end of file diff --git a/clipper/Documentation/Docs/Units/ClipperLib/Types/ExPolygons.htm b/clipper/Documentation/Docs/Units/ClipperLib/Types/ExPolygons.htm new file mode 100755 index 0000000..659c738 --- /dev/null +++ b/clipper/Documentation/Docs/Units/ClipperLib/Types/ExPolygons.htm @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + ExPolygons + + + + + + + + + + + + + + + + + + + + + +

ExPolygons

+ + + + + + + + \ No newline at end of file diff --git a/clipper/Documentation/Docs/Units/ClipperLib/Types/IntPoint.htm b/clipper/Documentation/Docs/Units/ClipperLib/Types/IntPoint.htm new file mode 100755 index 0000000..a99e355 --- /dev/null +++ b/clipper/Documentation/Docs/Units/ClipperLib/Types/IntPoint.htm @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + IntPoint + + + + + + + + + + + + + + + + + + + + + +

IntPoint

+ +

Del.» TIntPoint = record X, Y: int64; end;

+ +

C++ » struct IntPoint { long64 X; long64 Y; ... };

+ +

C#  » public class IntPoint { public Int64 X; { get; set; } public Int64 Y; { get; set; } ... };

+
+ + + + + +

See Also

+

long64, Polygon, Polygons

+ + + + + + \ No newline at end of file diff --git a/clipper/Documentation/Docs/Units/ClipperLib/Types/IntRect.htm b/clipper/Documentation/Docs/Units/ClipperLib/Types/IntRect.htm new file mode 100755 index 0000000..e4196c4 --- /dev/null +++ b/clipper/Documentation/Docs/Units/ClipperLib/Types/IntRect.htm @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + IntRect + + + + + + + + + + + + + + + + + + + + + +

IntRect

+ +

Del.»
TIntRect = record left, top, right, bottom: Int64; end;

+ +

C++ »
struct IntPoint { long64 left; long64 top; long64 right; long64 bottom; ... };

+ +

C#  »
public class IntPoint {
  public Int64 left; { get; set; }
  public Int64 top; { get; set; }
  public Int64 right; { get; set; }
  public Int64 bottom; { get; set; } ... };

+ +

Structure returned by Clipper's GetBounds method.


+ + +

See Also

+

ClipperBase.GetBounds, Long64

+ + + + + + \ No newline at end of file diff --git a/clipper/Documentation/Docs/Units/ClipperLib/Types/JoinType.htm b/clipper/Documentation/Docs/Units/ClipperLib/Types/JoinType.htm new file mode 100755 index 0000000..861dfea --- /dev/null +++ b/clipper/Documentation/Docs/Units/ClipperLib/Types/JoinType.htm @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + JoinType + + + + + + + + + + + + + + + + + + + + + +

JoinType

+ + +

Del.» type TJoinType = (jtSquare, jtRound, jtMiter);

+ +

C++ » enum JoinType { jtSquare, jtRound, jtMiter };

+ +

C#  » public enum JoinType { jtSquare, jtRound, jtMiter };

+
+ + + + +

See Also

+

OffsetPolygons

+ + + + + + \ No newline at end of file diff --git a/clipper/Documentation/Docs/Units/ClipperLib/Types/PolyFillType.htm b/clipper/Documentation/Docs/Units/ClipperLib/Types/PolyFillType.htm new file mode 100755 index 0000000..db2384e --- /dev/null +++ b/clipper/Documentation/Docs/Units/ClipperLib/Types/PolyFillType.htm @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + PolyFillType + + + + + + + + + + + + + + + + + + + + + +

PolyFillType

+ + +

Del.» type TPolyFillType = (pftEvenOdd, pftNonZero, pftPositive, pftNegative);

+ +

C++ » enum PolyFillType {pftEvenOdd, pftNonZero, pftPositive, pftNegative};

+ +

C#  » public enum PolyFillType {pftEvenOdd, pftNonZero, pftPositive, pftNegative};

+
+ + +

        

+ + +

See Also

+

Clipper.Execute

+ + + + + + \ No newline at end of file diff --git a/clipper/Documentation/Docs/Units/ClipperLib/Types/PolyType.htm b/clipper/Documentation/Docs/Units/ClipperLib/Types/PolyType.htm new file mode 100755 index 0000000..72fb93a --- /dev/null +++ b/clipper/Documentation/Docs/Units/ClipperLib/Types/PolyType.htm @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + PolyType + + + + + + + + + + + + + + + + + + + + + +

PolyType

+ + +

Del.» type TPolyType = (ptSubject, ptClip);

+ +

C++ » enum PolyType { ptSubject, ptClip };

+ +

C#  » public enum PolyType { ptSubject, ptClip };

+
+ + + + +

See Also

+

ClipperBase.AddPolygon, ClipperBase.AddPolygons

+ + + + + + \ No newline at end of file diff --git a/clipper/Documentation/Docs/Units/ClipperLib/Types/Polygon.htm b/clipper/Documentation/Docs/Units/ClipperLib/Types/Polygon.htm new file mode 100755 index 0000000..26c555d --- /dev/null +++ b/clipper/Documentation/Docs/Units/ClipperLib/Types/Polygon.htm @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + Polygon + + + + + + + + + + + + + + + + + + + + + +

Polygon

+ +

Del.» TPolygon = array of TIntPoint;

+ +

C++ » typedef std::vector< IntPoint > Polygon;

+ +

C#  » using Polygon = List<IntPoint>;

+
+ +

This structure contains the coordinates of a single polygon contour.

The term 'polygon' is often used by others to refer to a single 'outer' contour together with any number of inner contours or 'holes'. However, in this documentation, polygon is used synonymously with a single polygon contour, irrespective of whether it's an outer or a hole contour.

Multiple polygons (ie outer contours and hole contours) are encapuslated within a Polygons structure.

A Polygon structure can be passed to Clipper objects via the AddPolygon method.

+ +

See Also

+

Example, ClipperBase.AddPolygon, PolyTree, Orientation, IntPoint, Polygons

+ + + + + + \ No newline at end of file diff --git a/clipper/Documentation/Docs/Units/ClipperLib/Types/Polygons.htm b/clipper/Documentation/Docs/Units/ClipperLib/Types/Polygons.htm new file mode 100755 index 0000000..fa98059 --- /dev/null +++ b/clipper/Documentation/Docs/Units/ClipperLib/Types/Polygons.htm @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + Polygons + + + + + + + + + + + + + + + + + + + + + +

Polygons

+ + +

Del.» TPolygons = array of TPolygon;

+ +

C++ » typedef std::vector< Polygon > Polygons;

+ +

C#  » using Polygons = List<List< IntPoint >>;

+
+ +

This structure encapsulates one or a number of outer and inner 'hole' Polygon contours (where inner polygon contours have an Orientation opposite that of outer contours).

Polygons can be passed to Clipper objects via the AddPolygons method.

The solution parameter in Clipper's overloaded Execute method can return either a Polygons structure or a PolyTree structure.

+
+ + +

See Also

+

Clipper.Execute, ClipperBase.AddPolygons, PolyTree, Orientation, IntPoint, Polygon

+ + + + + + \ No newline at end of file diff --git a/clipper/Documentation/Docs/Units/ClipperLib/Types/long64.htm b/clipper/Documentation/Docs/Units/ClipperLib/Types/long64.htm new file mode 100755 index 0000000..58d45a8 --- /dev/null +++ b/clipper/Documentation/Docs/Units/ClipperLib/Types/long64.htm @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + long64 + + + + + + + + + + + + + + + + + + + + + +

long64

+ + +

Del.» Equivalent to Int64

+ +

C++ » typedef signed long long long64;

+ +

C#  » Equivalent to Int64

+
+ + + + + + + + \ No newline at end of file diff --git a/clipper/Documentation/Docs/Units/ClipperLib/_Body.htm b/clipper/Documentation/Docs/Units/ClipperLib/_Body.htm new file mode 100755 index 0000000..5049841 --- /dev/null +++ b/clipper/Documentation/Docs/Units/ClipperLib/_Body.htm @@ -0,0 +1,145 @@ + + + + + + + + + + + + + + + + + + + + ClipperLib + + + + + + + + + + + + + + + + + + + + +

ClipperLib

+Unit clipper + +

Contents

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Types + Classes + Routines +
ClipType + Clipper + Area +
ExPolygons + ClipperBase + CleanPolygon +
IntPoint + PolyNode + CleanPolygons +
IntRect + PolyTree + OffsetPolygons +
JoinType + + Orientation +
long64 + + ReversePolygon +
PolyFillType + + ReversePolygons +
Polygon + + SimplifyPolygon +
Polygons + + SimplifyPolygons +
PolyType + + +
+ + + + + + \ No newline at end of file diff --git a/clipper/Documentation/Docs/_Body.htm b/clipper/Documentation/Docs/_Body.htm new file mode 100755 index 0000000..9e907c1 --- /dev/null +++ b/clipper/Documentation/Docs/_Body.htm @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + The Clipper Library + + + + + + + + + + + + + + + + + + + + + +

The Clipper Library - Version 5

+ + + + + + + + + + + +
Library Overview + Changes + Examples + FAQ + Rounding + Compatibility with Prior Versions + License +
+ + + + + +
+ +

Classes (Hierarchy)

+

 ClipperBase

+

 Clipper

+

 PolyNode

+

 PolyTree

+
+

Types

+ + + + + + + + + + + + + + + +
ClipType + IntPoint + JoinType + PolyFillType + Polygons +
ExPolygons + IntRect + long64 + Polygon + PolyType +
+

Routines

+ + + + + + + + + + + + + + +
Area + CleanPolygons + Orientation + ReversePolygons + SimplifyPolygons +
CleanPolygon + OffsetPolygons + ReversePolygon + SimplifyPolygon +
+

Units

+ + + + +
ClipperLib +
+ + + + + + \ No newline at end of file diff --git a/clipper/Documentation/Images/_BranchEmpty.gif b/clipper/Documentation/Images/_BranchEmpty.gif new file mode 100755 index 0000000000000000000000000000000000000000..1069e82279c4e33b84d11433ea5082e4c722c9b4 GIT binary patch literal 56 zcmZ?wbhEHb6krfyXkcJCaNs~gLxbW^7Dfgj&;b!383rc)mj0Ee-|{b>v*lLz=6f3$ G7_0%E^AO+w literal 0 HcmV?d00001 diff --git a/clipper/Documentation/Images/_BranchRight.gif b/clipper/Documentation/Images/_BranchRight.gif new file mode 100755 index 0000000000000000000000000000000000000000..e5622df3e94ddeb620098d2185c5637f1844e618 GIT binary patch literal 62 zcmZ?wbhEHb6krfyXkcJCaNs~gLxbW^7Dfgj&;b!383rcN7XHT5Z+|Xo*{qjp95Uw> Mf7>GuJ5~m30RH$A3IG5A literal 0 HcmV?d00001 diff --git a/clipper/Documentation/Images/_BranchVert.gif b/clipper/Documentation/Images/_BranchVert.gif new file mode 100755 index 0000000000000000000000000000000000000000..b922f3392524ed54b28b1733de7bea61e04aa434 GIT binary patch literal 64 zcmZ?wbhEHb6krfyXkcJCaNs~gLxbW^7Dfgj&;b!383rct7XHT5Z+|Xo*{qjpd{y-G O%i2H&`mGW1ptY5sf?Lbl;bu;)rO0*n)Ykx7$`}O_`{?s#$>J&mBhQQ|pc=v*@}oo|+b8 P)p4%fXx7RoVFqge{QxOn literal 0 HcmV?d00001 diff --git a/clipper/Documentation/Images/_Home.gif b/clipper/Documentation/Images/_Home.gif new file mode 100755 index 0000000000000000000000000000000000000000..7ca8ba222f6b197eb60309a4fc9b2c0cd89b168c GIT binary patch literal 125 zcmZ?wbhEHb6krfwSoELa|Ns974jedh=FH5QGZ~P8;!hSv1_nk39grAEtpl@@#I8G5 zDGi?LD!y(S9_f=z1x22*Tr#ie7K@tqGeFVO$YtI8pFd|XpYRlpKA9#M;r?uu#>_1X TcnfN-dMVuEc>P+9fx#L8*Cs0* literal 0 HcmV?d00001 diff --git a/clipper/Documentation/Images/_Project_Logo.gif b/clipper/Documentation/Images/_Project_Logo.gif new file mode 100755 index 0000000000000000000000000000000000000000..7e3baac56c9956f2ebe6b0b64d0f32548d624213 GIT binary patch literal 1589 zcmb```9ISQ0KoBYh~=D4dQx+hG|5%7=c(5Yn^|IthvdaJn$4{?SsOOlFw#Vr&5@%} zA|zKaTYKgzF}W%!iBvB+dOCPKujhYwK7YXbw~wnE7UoO}1acsfaA+LP1&_nJ<8fXDtoIq$GlWwL4kPR(_ZI%y@LF_ z+>;2d%u84n-GzMtAII_yVUkHFsgzUHQ1@_}M^vN-ndna=21bzmqmq1>@m}o9r`fF2 zp;R(8EF^+T3Z~K7VH9R`SOO#3D>~ID{HjlQmUl$v+0Yy3&gTb&6cS>2VU+aq+Te;J5B?g)7=PB|*aKZzU$&?~* zI-eDnmcSGw#@C#~^mzO^Kn!|D3wa)$c%8=>;ig?;6eiNS(UL4iVfLlM{LA7zR#85? zs3b{pHN#h!qtk(=;Oy@oYAXS#)Q`)iSkv&MU$eOanX%2Nr7BcrV!nHQC>DuQ8Cl@V5YrUDxHwYCKZZTO6BXmzBdB{ z(}RQWhK6QFM?XwV%uh{ynx6hVJG(ePzqGKh{N>B);^MdEx%3djbG$04&fRTz#qZ3TT^kfU;go$OoI_CAjQo`T`?|u#|X# zN^uQxOpT_1R`lfPG3)&wYn<(&}nyx?v=+{9#yP+K^ z9=}QPsx~Jd){N3$5MJDGc(nfsfX&9I80~b|->#>9=jO0?Oqx*Ysb$`?dR1~1U*;yp z+QcYrqG!8F!I3#>O%>WC$FFbahYxJtZ-&`T@49r`#+_<0!`F91HBln*R~R9~Ef-G? zdDJBy|0Rrh<7l!WUHKevy=f+*#w1PshJ6T=-D?nogO&X_fiXQv>2;OH&awGmI^pJs z3_9nXvl9ujF3^D&=&oqPRTVpQEP19HN{4N1p)z%!_O2dtNTQMhdip(n-1wvJ~ zG^$cLrqj3QA~n;!grOG_Zi_K#StBUTy+iYQrQQPadz zwIKu_o^v-ZwaM?MZnMGdA@w(rb?Th8V>WEdi$$U7xlFkHovxb1+O=I<&E0Eb!Ak?SY6MGOjwnVdsi9a9cwtBn~`v6PA~d+2WOL}Jt!A#_t)Uo^>34`HR+($ Q<+b&PNqVLp1O)K=zicDP00000 literal 0 HcmV?d00001 diff --git a/clipper/Documentation/Images/_Unit.gif b/clipper/Documentation/Images/_Unit.gif new file mode 100755 index 0000000000000000000000000000000000000000..ef56412b451ab636e4e5d7b3a406aacfcecd8753 GIT binary patch literal 171 zcmZ?wbhEHb6krfw*!-UX2o4-L@axyF&!0c<-@m`9si~o%p{AzB&CSiu&Q4BF4x|DJ zDE?$&WME)q&;f~o%y3`{HaOwA+T_rTAT~vI1`Y>P6^`(zN6&?#_Jp-$1v*cxcu*L? zHeI1vQ7Ub+*qe?ewIb%Tbfr$bwP~KMcKzoMlgSSPm=*fN4_>z@TcTl~6Bweh+=YR` KnuWod!5RRi*f>`J literal 0 HcmV?d00001 diff --git a/clipper/Documentation/Images/_buttons.gif b/clipper/Documentation/Images/_buttons.gif new file mode 100755 index 0000000000000000000000000000000000000000..7daf3cd585eaf8bb41a5d694323076a860b94d10 GIT binary patch literal 311 zcmZ?wbhEHb&H)@-hKG+ z=HrLgZ{I$D^ZMDVmye%3y!rIut;Y{;-oJh6&W-c8ubsJZ`Q-IW$FE&HcInLiOJ@$8 zKe2nmq07hitvkGH)xjOh5A9fSVEeL)8Cw}>1{8m?u!u1HXV3xJ0P+(9TgU<53=bYo z#uF+D7919H+Y=M5VjbEzCWdKCstNJ5DLYBpsZA|$Gd@yaSFmHF#~qHB#i^4lB|3fu iDuyVrg+)Zi#3d*trz)n4Dv4+3<`>ErS4cZDSOWm2ig?Tb literal 0 HcmV?d00001 diff --git a/clipper/Documentation/Images/clipper_rounding.png b/clipper/Documentation/Images/clipper_rounding.png new file mode 100755 index 0000000000000000000000000000000000000000..1fa5ddcd1b26c9deb20ca463134d7ed287729aed GIT binary patch literal 10630 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 W)3Jx*PJ??MAqVVHyE4pa%KrhfJTVUd literal 0 HcmV?d00001 diff --git a/clipper/Documentation/Images/clipper_rounding3.png b/clipper/Documentation/Images/clipper_rounding3.png new file mode 100755 index 0000000000000000000000000000000000000000..40d8314f43a12ffd9ed434d1edd55ef55c2f2cdc GIT binary patch literal 8335 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 literal 0 HcmV?d00001 diff --git a/clipper/Documentation/Images/difference.png b/clipper/Documentation/Images/difference.png new file mode 100755 index 0000000000000000000000000000000000000000..c2bce6c00b506bef2d8e4550a4619fbac8427355 GIT binary patch literal 3873 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 literal 0 HcmV?d00001 diff --git a/clipper/Documentation/Images/int.png b/clipper/Documentation/Images/int.png new file mode 100755 index 0000000000000000000000000000000000000000..7df1cea056c1d9c45f7f13cbdfcb58528e840e98 GIT binary patch literal 69459 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 literal 0 HcmV?d00001 diff --git a/clipper/Documentation/Images/jointypes.png b/clipper/Documentation/Images/jointypes.png new file mode 100755 index 0000000000000000000000000000000000000000..2cd93e91130712f9edb08596ab847380a2a19800 GIT binary patch literal 14436 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 F{2w3ZJw^Zk literal 0 HcmV?d00001 diff --git a/clipper/Documentation/Images/kangaroo_small.png b/clipper/Documentation/Images/kangaroo_small.png new file mode 100755 index 0000000000000000000000000000000000000000..25b2df8d727073c8024d7d93e4316dcf323f400d GIT binary patch literal 44887 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 Rn=b(5M_EA~QYB{`^nXSO!OZ{w literal 0 HcmV?d00001 diff --git a/clipper/Documentation/Images/negative.png b/clipper/Documentation/Images/negative.png new file mode 100755 index 0000000000000000000000000000000000000000..33304591be1c2bd4ba1f0d0b76c59b440303ad4c GIT binary patch literal 4432 zcma)AcQ_l~*Hys`<#34IrpA>Q_V~az|0V48X6if#!%0Ksw=6| z&qzxx*)NEMH>PA)a3JNd<6?KHFIzkyH ztspNiKeD;DL+!^9g1Mp3u)r(`l!CE%piij~Q-Gm;FbxfB*I&8N=UD~g9 z<1G?9wM)=0uO?r~|2Mttz2RRWB_UzAfF@j>=HaqJ92&$1qYCdmTI_i5CQZ*Fuj1=_ z=g@R|`DC$aTQ_FE>f858QQ$+JUQz#~;gk*dsl*=A~)Vu2~0f zi@p7~$=neyIhfuJw0t0+4Ej)S7T_{_CFaIsnj1pO)+)cjaifgd=TmvUC$K}>Q%q#Q zpMk}$MYrfj6yvY%YfjTbcZ zg@|JOI+xhQ5bJ5>$Ng?@)iTTNq6Vk=x@gfLWcGw;b-a_ z)7t?OCAS@!mi(eT9bc_SJi=?vcgI<6J&s8s+YS~!@yzTxB|jWp`25+SvAM2$Q1zdf8UsR_CKJ<_ z3`vfDHm&y2i(I^TO|~%!#6>f%6k@L zGeZ$4N0*c7!2-sv#mF#|eYMof6W;BT--Y7ZW$XDy7Ng(->Y~TB-I-np7MAu}FI$wQ z4X~wUg*6ALSPt~N>$QgC-&o(AP=RYkACX5#Gd3*Oj0>j%_B~^LY1YZ3b8~;jjp3=9 z?yXo`@H2qd`-0mzR(=&e(>7y8BgyHd9lq$ByUJqx5Xilsv%<$Bv)Sf|26`ZNm@ilULhPTO zT>vlKQ4bvw8k*Y5+KaUUdw|AyOrIPNKUKo>$o|;eWRH=Q87P3f;~_rI;y^~venmcm z#Tt&O-nO?&oJy!oP#P(*Y{84go&KH?GtOaQWld`pSHYTtO@fC|i`n`Z43ml6;Ls3- zLMbaNGkvKpc3jPup^uoonPHQLUzt@fl8$(HtC2&Zou&ELptMumDPj#@SXlV!lgZeV zp8LZk9Rmrq7G}7lDRd=6uc6KI%c&DeQ(^?gQSQD`3MA9|K zYChGwFADGTI)-0}tE;Vj&N@5sx-)AQS5^vXL@JBpTcQrrT46a@ zWAHW)QML)L7I${SEp6jzYVu6Eq@sdV$n&)bg389zCgSpBYKvdJ5yKxG986w^3;TGJ zYhmR`ZsXPd!1-D)WX|=84PjkxvKxAS)oPc#iihjml@~r9%*_-=9Fbt}LmBt-LP~Mo zo}QzJ2dq7K=u`VClR{p>exiYjoiJ2^&o>tlBm((aIyKD$fziM zTAH4d5PvlX|2vb!2zQj0LBO$*62jtsda-a4z)K7yxcJm8(G+AcB3PFV8gU)q%3wkq z)xtD_4SqNrPgLSYd5GLvJz1&Zr+;U4+ z>|<`)=3Fm_@ZHR)BL=w-OqRyK26!1u{SPRALq6Z(S)jeWVk6N8-0Vh2R6r3e!NanK z4&$mJhDDHYy9}E}YEzL-D>|(rVZx(JY@ZPmNNdW!@UfyxNi}x{)HK87Shbux>BDz4 z#`Q$_w4efz2XbG1Di;$OTt=XS-6w@REPuAI9;>-si}ts*qOV^PKdye+@jN2nVvbDw zT#bg~X4pEmd0~Fxb+dq!l%CTI-i3PI(9r14o)Vc)PSB|9`|elo>lT}8#y6?wDi2V4 zV*9{+9Q+VNS3kdiv*r!s5L`XLOMl)K)BN#pE3vXQVLfk848W+ICZGZF_K`GbJykh5 zsoC%eg#n)nv#H_50?Cu}M(5Zvn~wK0$EW4(FT-*P3I^MYn8bsKJw2ydz-Owf&JXM4 z`85!PQkFiroJFTO#4{>&b)z|f`ElpTVV~pU&e&r%Z8_q6X$I27+D%%4-ghG-+9xiQ(T$iQ}No8y>&9km+CL1o-DqcI={qc zkX)rJyB@4A!U@eIKtAn&2ZQPA2EQ^h6F%AMLxRu`3ivu2;WXU$Kt-1A@CAI(g?BL%+f*OT@s@wH863KEoClvqL z+SFF1$YZbLq^DgoB^^-!0}eq!<&Ez~-LtPGwVkHK(qKo)49&f=4*mYIWVBpg3ZHlW z-KNwvNRi3d#*+y~=_bHtoIBDK2^MT>@)WmsVyj>NboNC(u%Y42wT{kY<)&^0dBV;y zH5MW>7-Q(yda{sYZ=Xb^JN*ZOS99iE{8C3I;IePM6qp6h<(t^xoSj}(f?|445`em2 zFLXgoX6}3aWvwQ~QDocU zM*RFRL(;eWxN&8UY-2y!2qoG~&-$!iK~h=d<*v)6%;Q%gNyMmq=E>7e{zlCqZ4DG{ z87yX1vxaf(FEUAkjto!Yy&AD;-2W@WNe`Tx^hu1Lvo_m!5N@tWNdea zG%=-5Yi;|AQDH8x8z8Rvoily_s<=jS358%o=x&Ub&mo!80i5I_CvOD(wGR}`+Y zVWNAYfr<_I5&IM&ePQV0mFwUL9_+9NDz71=&G{bXENX0hUB6Q?xg20`1GFqOLrZ@8 zx&Dd!-d#F6@=D6S7~XFv(NRV%qPj|HU(|&}y}8q0r}PPGEx|iy;&w$b-U0Qnh(j`R zrH!IL|5z+E>yhM%mAVVG@wd$&q^E~W?i%J%30UoBimWV^a*}1E?iI?1X)XWt1}EeF z5h+8c2C6P;BbLcZ=8_i1BJo_xa7_ahk+dC~>Fth@PBqtkAZ3WtKzS5|v>8@c6FI3! zgOs88UnH!pA5~+R4k_Tes{eCk%w_ykWKU&rz)W{vs$W6_)!sz4$gd&$HBj6-Ba+S3 z*tiM`U0Z^Wi{r6J;BZr0+Zr{iQ79C;1gGAxtUg4M3#9l6ZsG_OTCoHV+J5_#20`|$ z+yA+;vUDo4uK9tfpX&rd`W+KaK3coFn`}KSS9);iuZn z74&S*HK~2f9oEe%_{~BW2D0dEaT=zdPcbm?B@u6VlXsN+8xM`4XNM~am#ge7ME+)L zZ?6Mymm5@nUH88@abV}VCQ_-*MxRgOzPwpFZ5vBAs!@0A=|Nkw-_n_ znt~MBquRn>VOt4_43*)UXISB6$gqj-==PHk=Y=lLI1(`&kt^FDums<1uS>bI z=8D<%9;MUmrt%pxU7W$y7b}4u6R_i_S*+Bff=}_QOb%Cbu;Qmzj&Uy!cqOG003g?! zu2&?TCl~7psPOccyR&x_v|@)@i%e_&+H{j`x&7^s7^(te>-dwu3t1}%AceZq7g yEO1#F&y+CrDubE(CHMd58UKI0^8brI(#rLdc+ylKSwQ{5puy;y=vC-AC;SJzZ#Vz| literal 0 HcmV?d00001 diff --git a/clipper/Documentation/Images/nonzero.png b/clipper/Documentation/Images/nonzero.png new file mode 100755 index 0000000000000000000000000000000000000000..5cd12147ca5979cb48eba538edbe56dd5cc55d1d GIT binary patch literal 2819 zcmYjTc{CJS93I42Qlb&fSQ08)tl2{LC90?FB4K1OOLml0(NukM@P`{&(re)s$C_xtX-=l;&U=ia3AXKlnq_lrUx5OF(OOD7(_ z`p#hK!5okpN#dCh)idq_)nu;2FhT6J@ zJfg0tp`p>x+ug^T1`W4!w1Tol<%HB^FZgw?@gxz9t$P>*vWxaR_}Z_P`SZjbfo6_o z5Xh@EvA=xAK%;@CCQw%gmX<(nE=WxUSS;Y}^!s(}7pN06Tn06X0f0x?WygF57Y zh^+ff|CiuZ>vs-ZfdFArHAGcBEO3QPzwKdfE-=NT#}`P--VMB5v#6 zM`H0p&$(;DpFKx^LtskCUdG?pR@Nu)r$6Ofh!1f zG9@;iqt2w>l1ap0_smpQ@oqe|ydMDRiusMVHYT&htKXC;WOA zEy|CwYMJX2bFnlksAbS9H7QSI6+Nzda498=o>gYn#F)1$xj~orZZu0>BzGOjRlE53 z)$k?wF@LhGZM3q@P)qd2p`!)l&x0!cjfZ?sBG97>wFTG|Zpahsg40XROk><%sWiS}`+ zD?G#QYMs$|d}k>RUGw;j@m;SF^)@lR48*6cbp_IL$WBNm%+JSS|G31*QM>ug5|osi zO9~vVD*W=cH>bcH%}-0d&MS@(<#4{SN{uGuuzK4rJpngzE&NP>g=1l*j48*#e`F(A z3oZbuxnfIp?-QtwEYnftStZnk@{_N0kn+ic%jK+%0uwR&Q1klnlgoW~XrYyo1Fdhh zZ#mtPDfD_GUJZ+*g_cMv?{g!W<}=%x?hs`p(8DwMj{1_dt0=gD2Elj+9(CHTb&`ril-6r^T6cN|#pRZiT`ZhlfXlFRe zpjG7vs4VQ`nOB01FsVd*>w47Q@+u40DimF}D|zKBCpV>H{rJ8%zvErWhwzmB&RnM| zsouxS-5;uNz24jnhkG!FXQjnEQZSih<@w^hhy$|r^F)u?8>B$= zkYkgGCOpRdF%1AUD`=y2AhNhcPfX`b$dhPw(kA4a_aZxrS zlBO0DeIQmakyKbRG;8a2!)iMxo?@;VDpvmir!r3k4mc#1-#jw0^*x8AYKcbnc*5fi70DIbeJ8&Ca><>BPzrhz z4(%fsmb9JVXQ(#l%ua=voT7{hs`QX{jymu8QE^gn+PvTMFds}A{%4~i1ZATi+bs@gOhwWs1l=7vvKqw2A#mw3fORio@`jl>@*9eOX>HdZEH~-W{yXfYU zYk{-XDhcSW!hEmpcp*qWfFBTu_U8*Y5+~_2ai&Li^(k&jQT}q#ScR=h4})RlU!0z- zlfrn!Fh5>kQ}E<`Swi7HiicL${Upl_8&`VH6Ny!6`@^udQ{``q2;&k$?+|Gp(!0_` zG ztB{jMcN&gj&wZKrbr+$V{4mmhQwGsuSRJL1ayHCDH{O@<=ru5&Kj<}sI^slTJ= z>snwZJ`h7u%BEj>< z_*#j!;0xG&z1i6a9K1P|596+xr_{3teWB`5gvW}wnsehZPDOmszAFZm*=K*h3Rt>B zto}zN-DQXB1nc2eq}uiQ0LD`F7nxm)KK?9>mcH#-!e^k|_E#W2P}Ni6}w&GNSx zXq;!p?r{5Qr?IxC$iY!U^MgOX6!IdyXervRU3_2P>cT~EzZx_l$}GH| mfyMBX$v#HXQvYkPUr^2hJu7SCzANvq1hKO^YguJ}`QAT$lC1>* literal 0 HcmV?d00001 diff --git a/clipper/Documentation/Images/polyline_offset.png b/clipper/Documentation/Images/polyline_offset.png new file mode 100755 index 0000000000000000000000000000000000000000..a2efb18d49d78577beae1b201ea60a58bf80a64e GIT binary patch literal 8016 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 O2I*=VYLq^(d-H!L1NkWc literal 0 HcmV?d00001 diff --git a/clipper/Documentation/Images/polytree.png b/clipper/Documentation/Images/polytree.png new file mode 100755 index 0000000000000000000000000000000000000000..3e0d46045fdc9b55b8bdfae6685d481a4477a01d GIT binary patch literal 6258 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 TxoiQGpUObTRJ&U9(bIneJzey} literal 0 HcmV?d00001 diff --git a/clipper/Documentation/Images/positive.png b/clipper/Documentation/Images/positive.png new file mode 100755 index 0000000000000000000000000000000000000000..eface7fdf49b9497a1f07ece548146052748e022 GIT binary patch literal 4873 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 literal 0 HcmV?d00001 diff --git a/clipper/Documentation/Images/xor.png b/clipper/Documentation/Images/xor.png new file mode 100755 index 0000000000000000000000000000000000000000..94683498b819ba0c13a475d33889c4c86cfe0eed GIT binary patch literal 4151 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 BArJrn literal 0 HcmV?d00001 diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/LGPL-LICENSE b/clipper/Documentation/Scripts/SyntaxHighlighter/LGPL-LICENSE new file mode 100755 index 0000000..3f9959f --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/LGPL-LICENSE @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. \ No newline at end of file diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/MIT-LICENSE b/clipper/Documentation/Scripts/SyntaxHighlighter/MIT-LICENSE new file mode 100755 index 0000000..e7c70ba --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/MIT-LICENSE @@ -0,0 +1,20 @@ +Copyright (c) 2003, 2004 Jim Weirich + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/compass/_theme_template.scss b/clipper/Documentation/Scripts/SyntaxHighlighter/compass/_theme_template.scss new file mode 100755 index 0000000..53f4df5 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/compass/_theme_template.scss @@ -0,0 +1,120 @@ +$background: white !default; + +$line_alt1_background: $background !default; +$line_alt2_background: $background !default; + +$line_highlighted_background: #e0e0e0 !default; +$line_highlighted_number: black !default; + +$gutter_text: #afafaf !default; +$gutter_border_color: #6ce26c !default; +$gutter_border: 3px solid $gutter_border_color !default; + +$toolbar_collapsed_a: #00f !default; +$toolbar_collapsed_a_hover: #f00 !default; +$toolbar_collapsed_background: #fff !default; +$toolbar_collapsed_border: 1px solid $gutter_border_color !default; + +$toolbar_a: #fff !default; +$toolbar_a_hover: #000 !default; +$toolbar_background: $gutter_border_color !default; +$toolbar_border: none !default; + +$code_plain: black !default; +$code_comments: #008200 !default; +$code_string: blue !default; +$code_keyword: #006699 !default; +$code_preprocessor: gray !default; +$code_variable: #aa7700 !default; +$code_value: #009900 !default; +$code_functions: #ff1493 !default; +$code_constants: #0066cc !default; +$code_script: $code_keyword !default; +$code_script_background: none !default; +$code_color1: gray !default; +$code_color2: #ff1493 !default; +$code_color3: red !default; + +$caption_color: $code_plain !default; + +// Interface elements. +.syntaxhighlighter { + background-color: $background !important; + + // Highlighed line number + .line { + &.alt1 { background-color: $line_alt1_background !important; } + &.alt2 { background-color: $line_alt2_background !important; } + + // Highlighed line + &.highlighted { + &.alt1, &.alt2 { background-color: $line_highlighted_background !important; } + &.number { color: $line_highlighted_number !important; } + } + } + + table { + caption { + color: $caption_color !important; + } + } + + // Add border to the lines + .gutter { + color: $gutter_text !important; + .line { + border-right: $gutter_border !important; + + &.highlighted { + background-color: $gutter_border_color !important; + color: $background !important; + } + } + } + + &.printing .line .content { border: none !important; } + + &.collapsed { + overflow: visible !important; + + .toolbar { + color: $toolbar_collapsed_a !important; + background: $toolbar_collapsed_background !important; + border: $toolbar_collapsed_border !important; + + a { + color: $toolbar_collapsed_a !important; + &:hover { color: $toolbar_collapsed_a_hover !important; } + } + } + } + + .toolbar { + color: $toolbar_a !important; + background: $toolbar_background !important; + border: $toolbar_border !important; + a { + color: $toolbar_a !important; + &:hover { color: $toolbar_a_hover !important; } + } + } + + // Actual syntax highlighter colors. + .plain, .plain a { color: $code_plain !important; } + .comments, .comments a { color: $code_comments !important; } + .string, .string a { color: $code_string !important; } + .keyword { color: $code_keyword !important; } + .preprocessor { color: $code_preprocessor !important; } + .variable { color: $code_variable !important; } + .value { color: $code_value !important; } + .functions { color: $code_functions !important; } + .constants { color: $code_constants !important; } + .script { + font-weight: bold !important; + color: $code_script !important; + background-color: $code_script_background !important; + } + .color1, .color1 a { color: $code_color1 !important; } + .color2, .color2 a { color: $code_color2 !important; } + .color3, .color3 a { color: $code_color3 !important; } +} diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/compass/config.rb b/clipper/Documentation/Scripts/SyntaxHighlighter/compass/config.rb new file mode 100755 index 0000000..6f82de1 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/compass/config.rb @@ -0,0 +1,14 @@ +environment = :production +project_type = :stand_alone +http_path = "/" +css_dir = "../styles" +sass_dir = "." +images_dir = "images" +sass_options = { + :line_numbers => false, + :debug_info => false +} + +# output_style = :compressed +# output_style = :compact +output_style = :expanded diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shCore.scss b/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shCore.scss new file mode 100755 index 0000000..a67e4f9 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shCore.scss @@ -0,0 +1,216 @@ +@mixin round_corners_custom($top, $right, $bottom, $left) { + -moz-border-radius: $top $right $bottom $left !important; + -webkit-border-radius: $top $right $bottom $left !important; +} + +@mixin round_corners($radius) { + @include round_corners_custom($radius, $radius, $radius, $radius); +} + +.syntaxhighlighter { + a, + div, + code, + table, + table td, + table tr, + table tbody, + table thead, + table caption, + textarea { + @include round_corners(0); + + background: none !important; + border: 0 !important; + bottom: auto !important; + float: none !important; + height: auto !important; + left: auto !important; + line-height: 1.1em !important; + margin: 0 !important; + outline: 0 !important; + overflow: visible !important; + padding: 0 !important; + position: static !important; + right: auto !important; + text-align: left !important; + top: auto !important; + vertical-align: baseline !important; + width: auto !important; + box-sizing: content-box !important; + font: { + family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; + weight: normal !important; + style: normal !important; + size: 1em !important; + } + min: { + // For IE8, FF & WebKit + height: inherit !important; + // For IE7 + height: auto !important; + } + } +} + +.syntaxhighlighter { + width: 100% !important; + margin: 1em 0 1em 0 !important; + + position: relative !important; + overflow: auto !important; + font-size: 1em !important; + + &.source { overflow: hidden !important; } + + // set up bold and italic + .bold { font-weight: bold !important; } + .italic { font-style: italic !important; } + + .line { white-space: pre !important; } + + // main table and columns + table { + width: 100% !important; + caption { + text-align: left !important; + padding: .5em 0 0.5em 1em !important; + } + + td.code { + width: 100% !important; + + .container { + position: relative !important; + + textarea { + box-sizing: border-box !important; + position: absolute !important; + left: 0 !important; + top: 0 !important; + width: 100% !important; + height: 100% !important; + border: none !important; + background: white !important; + padding-left: 1em !important; + overflow: hidden !important; + white-space: pre !important; + } + } + } + + // middle spacing between line numbers and lines + td.gutter .line { + text-align: right !important; + padding: 0 0.5em 0 1em !important; + } + + td.code .line { + padding: 0 1em !important; + } + } + + &.nogutter { + td.code { + .container textarea, .line { padding-left: 0em !important; } + } + } + + &.show { display: block !important; } + + // Adjust some properties when collapsed + &.collapsed { + table { display: none !important; } + + .toolbar { + padding: 0.1em 0.8em 0em 0.8em !important; + font-size: 1em !important; + position: static !important; + width: auto !important; + height: auto !important; + + span { + display: inline !important; + margin-right: 1em !important; + + a { + padding: 0 !important; + display: none !important; + &.expandSource { display: inline !important; } + } + } + } + } + + // Styles for the toolbar + .toolbar { + position: absolute !important; + right: 1px !important; + top: 1px !important; + width: 11px !important; + height: 11px !important; + font-size: 10px !important; + z-index: 10 !important; + + span.title { display: inline !important; } + + a { + display: block !important; + text-align: center !important; + text-decoration: none !important; + padding-top: 1px !important; + + &.expandSource { display: none !important; } + } + } + + &.ie { + font-size: .9em !important; + padding: 1px 0 1px 0 !important; + + .toolbar { + line-height: 8px !important; + a { + padding-top: 0px !important; + } + } + } + + // Print view. + // Colors are based on the default theme without background. + &.printing { + .line.alt1 .content, + .line.alt2 .content, + .line.highlighted .number, + .line.highlighted.alt1 .content, + .line.highlighted.alt2 .content { background: none !important; } + + // Gutter line numbers + .line { + .number { color: #bbbbbb !important; } + // Add border to the lines + .content { color: black !important; } + } + + // Toolbar when visible + .toolbar { display: none !important; } + a { text-decoration: none !important; } + .plain, .plain a { color: black !important; } + .comments, .comments a { color: #008200 !important; } + .string, .string a { color: blue !important; } + .keyword { + color: #006699 !important; + font-weight: bold !important; + } + .preprocessor { color: gray !important; } + .variable { color: #aa7700 !important; } + .value { color: #009900 !important; } + .functions { color: #ff1493 !important; } + .constants { color: #0066cc !important; } + .script { font-weight: bold !important; } + .color1, .color1 a { color: gray !important; } + .color2, .color2 a { color: #ff1493 !important; } + .color3, .color3 a { color: red !important; } + .break, .break a { color: black !important; } + } +} \ No newline at end of file diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shCoreDefault.scss b/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shCoreDefault.scss new file mode 100755 index 0000000..ff80c7f --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shCoreDefault.scss @@ -0,0 +1,2 @@ +@import "shCore.scss"; +@import "shThemeDefault.scss"; diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shCoreDjango.scss b/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shCoreDjango.scss new file mode 100755 index 0000000..ef572e9 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shCoreDjango.scss @@ -0,0 +1,2 @@ +@import "shCore.scss"; +@import "shThemeDjango.scss"; diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shCoreEclipse.scss b/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shCoreEclipse.scss new file mode 100755 index 0000000..9767f53 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shCoreEclipse.scss @@ -0,0 +1,2 @@ +@import "shCore.scss"; +@import "shThemeEclipse.scss"; diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shCoreEmacs.scss b/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shCoreEmacs.scss new file mode 100755 index 0000000..5e466f3 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shCoreEmacs.scss @@ -0,0 +1,2 @@ +@import "shCore.scss"; +@import "shThemeEmacs.scss"; diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shCoreFadeToGrey.scss b/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shCoreFadeToGrey.scss new file mode 100755 index 0000000..4628595 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shCoreFadeToGrey.scss @@ -0,0 +1,2 @@ +@import "shCore.scss"; +@import "shThemeFadeToGrey.scss"; diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shCoreMDUltra.scss b/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shCoreMDUltra.scss new file mode 100755 index 0000000..10ad4c5 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shCoreMDUltra.scss @@ -0,0 +1,2 @@ +@import "shCore.scss"; +@import "shThemeMDUltra.scss"; diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shCoreMidnight.scss b/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shCoreMidnight.scss new file mode 100755 index 0000000..e357eb2 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shCoreMidnight.scss @@ -0,0 +1,2 @@ +@import "shCore.scss"; +@import "shThemeMidnight.scss"; diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shCoreRDark.scss b/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shCoreRDark.scss new file mode 100755 index 0000000..5c26da3 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shCoreRDark.scss @@ -0,0 +1,2 @@ +@import "shCore.scss"; +@import "shThemeRDark.scss"; diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shThemeDefault.scss b/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shThemeDefault.scss new file mode 100755 index 0000000..1574dae --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shThemeDefault.scss @@ -0,0 +1,7 @@ +// Default Syntax Highlighter theme. + +@import "_theme_template.scss"; + +.syntaxhighlighter { + .keyword { font-weight: bold !important; } +} diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shThemeDjango.scss b/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shThemeDjango.scss new file mode 100755 index 0000000..8e95c56 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shThemeDjango.scss @@ -0,0 +1,36 @@ +// Django SyntaxHighlighter theme + +$background: #0a2b1d !default; + +$line_highlighted_background: #233729 !default; +$line_highlighted_number: white !default; + +$gutter_text: #497958 !default; +$gutter_border_color: #41a83e !default; + +$toolbar_collapsed_a: #96dd3b !default; +$toolbar_collapsed_a_hover: #fff !default; +$toolbar_collapsed_background: #000 !default; + +$toolbar_a: #fff !default; +$toolbar_a_hover: #ffe862 !default; + +$code_plain: #f8f8f8 !default; +$code_comments: #336442 !default; +$code_string: #9df39f !default; +$code_keyword: #96dd3b !default; +$code_preprocessor: #91bb9e !default; +$code_variable: #ffaa3e !default; +$code_value: #f7e741 !default; +$code_functions: #ffaa3e !default; +$code_constants: #e0e8ff !default; +$code_color1: #eb939a !default; +$code_color2: #91bb9e !default; +$code_color3: #edef7d !default; + +@import "_theme_template.scss"; + +.syntaxhighlighter { + .comments { font-style: italic !important; } + .keyword { font-weight: bold !important; } +} diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shThemeEclipse.scss b/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shThemeEclipse.scss new file mode 100755 index 0000000..193fb1d --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shThemeEclipse.scss @@ -0,0 +1,48 @@ +// Eclipse IDE SyntaxHighlighter color theme +// (C) Code-House +// :http//blog.code-house.org/2009/10/xml-i-adnotacje-kod-ogolnego-przeznaczenia-i-jpa/ + +$background: #fff !default; + +$line_highlighted_background: #c3defe !default; +$line_highlighted_number: #fff !default; + +$gutter_text: #787878 !default; +$gutter_border_color: #d4d0c8 !default; + +$toolbar_collapsed_a: #3f5fbf !default; +$toolbar_collapsed_a_hover: #aa7700 !default; +$toolbar_collapsed_background: #fff !default; + +$toolbar_a: #a0a0a0 !default; +$toolbar_a_hover: red !default; + +$code_plain: black !default; +$code_comments: #3f5fbf !default; +$code_string: #2a00ff !default; +$code_keyword: #7f0055 !default; +$code_preprocessor: #646464 !default; +$code_variable: #aa7700 !default; +$code_value: #009900 !default; +$code_functions: #ff1493 !default; +$code_constants: #0066cc !default; +$code_color1: gray !default; +$code_color2: #ff1493 !default; +$code_color3: red !default; + +@import "_theme_template.scss"; + +.syntaxhighlighter { + .keyword { font-weight: bold !important; } + + .xml { + .keyword { + color: #3f7f7f !important; + font-weight: normal !important; } + .color1, .color1 a { color: #7f007f !important; } + .string { + font-style: italic !important; + color: #2a00ff !important; + } + } +} diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shThemeEmacs.scss b/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shThemeEmacs.scss new file mode 100755 index 0000000..11c9deb --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shThemeEmacs.scss @@ -0,0 +1,32 @@ +// Emacs SyntaxHighlighter theme based on theme by Joshua Emmons +// http://www.skia.net/ + +$background: black !default; + +$line_highlighted_background: #2A3133 !default; +$line_highlighted_number: white !default; + +$gutter_text: #d3d3d3 !default; +$gutter_border_color: #990000 !default; + +$toolbar_collapsed_a: #ebdb8d !default; +$toolbar_collapsed_a_hover: #ff7d27 !default; +$toolbar_collapsed_background: black !default; + +$toolbar_a: #fff !default; +$toolbar_a_hover: #9ccff4 !default; + +$code_plain: #d3d3d3 !default; +$code_comments: #ff7d27 !default; +$code_string: #ff9e7b !default; +$code_keyword: aqua !default; +$code_preprocessor: #aec4de !default; +$code_variable: #ffaa3e !default; +$code_value: #009900 !default; +$code_functions: #81cef9 !default; +$code_constants: #ff9e7b !default; +$code_color1: #ebdb8d !default; +$code_color2: #ff7d27 !default; +$code_color3: #aec4de !default; + +@import "_theme_template.scss"; diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shThemeFadeToGrey.scss b/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shThemeFadeToGrey.scss new file mode 100755 index 0000000..7963814 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shThemeFadeToGrey.scss @@ -0,0 +1,36 @@ +// Fade to Grey SyntaxHighlighter theme based on theme by Brasten Sager +// :http//www.ibrasten.com/ + +$background: #121212 !default; + +$line_highlighted_background: #2C2C29 !default; +$line_highlighted_number: white !default; + +$gutter_text: #afafaf !default; +$gutter_border_color: #3185b9 !default; + +$toolbar_collapsed_a: #3185b9 !default; +$toolbar_collapsed_a_hover: #d01d33 !default; +$toolbar_collapsed_background: black !default; + +$toolbar_a: #fff !default; +$toolbar_a_hover: #96daff !default; + +$code_plain: white !default; +$code_comments: #696854 !default; +$code_string: #e3e658 !default; +$code_keyword: #d01d33 !default; +$code_preprocessor: #435a5f !default; +$code_variable: #898989 !default; +$code_value: #009900 !default; +$code_functions: #aaaaaa !default; +$code_constants: #96daff !default; +$code_color1: #ffc074 !default; +$code_color2: #4a8cdb !default; +$code_color3: #96daff !default; + +@import "_theme_template.scss"; + +.syntaxhighlighter { + .functions { font-weight: bold !important; } +} diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shThemeMDUltra.scss b/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shThemeMDUltra.scss new file mode 100755 index 0000000..0356fa6 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shThemeMDUltra.scss @@ -0,0 +1,32 @@ +// MDUltra SyntaxHighlighter theme based on Midnight Theme +// http://www.mddev.co.uk/ + +$background: #222222 !default; + +$line_highlighted_background: #253e5a !default; +$line_highlighted_number: white !default; + +$gutter_text: #38566f !default; +$gutter_border_color: #435a5f !default; + +$toolbar_collapsed_a: #428bdd !default; +$toolbar_collapsed_a_hover: lime !default; +$toolbar_collapsed_background: black !default; + +$toolbar_a: #aaaaff !default; +$toolbar_a_hover: #9ccff4 !default; + +$code_plain: lime !default; +$code_comments: #428bdd !default; +$code_string: lime !default; +$code_keyword: #aaaaff !default; +$code_preprocessor: #8aa6c1 !default; +$code_variable: aqua !default; +$code_value: #f7e741 !default; +$code_functions: #ff8000 !default; +$code_constants: yellow !default; +$code_color1: red !default; +$code_color2: yellow !default; +$code_color3: #ffaa3e !default; + +@import "_theme_template.scss"; diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shThemeMidnight.scss b/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shThemeMidnight.scss new file mode 100755 index 0000000..a4dae02 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shThemeMidnight.scss @@ -0,0 +1,32 @@ +// Midnight SyntaxHighlighter theme based on theme by J.D. Myers +// http://webdesign.lsnjd.com/ + +$background: #0f192a !default; + +$line_highlighted_background: #253e5a !default; +$line_highlighted_number: #38566f !default; + +$gutter_text: #afafaf !default; +$gutter_border_color: #435a5f !default; + +$toolbar_collapsed_a: #428bdd !default; +$toolbar_collapsed_a_hover: #1dc116 !default; +$toolbar_collapsed_background: #000 !default; + +$toolbar_a: #D1EDFF !default; +$toolbar_a_hover: #8aa6c1 !default; + +$code_plain: #d1edff !default; +$code_comments: #428bdd !default; +$code_string: #1dc116 !default; +$code_keyword: #b43d3d !default; +$code_preprocessor: #8aa6c1 !default; +$code_variable: #ffaa3e !default; +$code_value: #f7e741 !default; +$code_functions: #ffaa3e !default; +$code_constants: #e0e8ff !default; +$code_color1: #f8bb00 !default; +$code_color2: white !default; +$code_color3: #ffaa3e !default; + +@import "_theme_template.scss"; diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shThemeRDark.scss b/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shThemeRDark.scss new file mode 100755 index 0000000..3b67b15 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/compass/shThemeRDark.scss @@ -0,0 +1,32 @@ +// RDark SyntaxHighlighter theme based on theme by Radu Dineiu +// http://www.vim.org/scripts/script.php?script_id=1732 + +$background: #1b2426 !default; + +$line_highlighted_background: #323E41 !default; +$line_highlighted_number: #b9bdb6 !default; + +$gutter_text: #afafaf !default; +$gutter_border_color: #435a5f !default; + +$toolbar_collapsed_a: #5ba1cf !default; +$toolbar_collapsed_a_hover: #5ce638 !default; +$toolbar_collapsed_background: #000 !default; + +$toolbar_a: #fff !default; +$toolbar_a_hover: #e0e8ff !default; + +$code_plain: #b9bdb6 !default; +$code_comments: #878a85 !default; +$code_string: #5ce638 !default; +$code_keyword: #5ba1cf !default; +$code_preprocessor: #435a5f !default; +$code_variable: #ffaa3e !default; +$code_value: #009900 !default; +$code_functions: #ffaa3e !default; +$code_constants: #e0e8ff !default; +$code_color1: #e0e8ff !default; +$code_color2: white !default; +$code_color3: #ffaa3e !default; + +@import "_theme_template.scss"; diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/index.html b/clipper/Documentation/Scripts/SyntaxHighlighter/index.html new file mode 100755 index 0000000..60908f4 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/index.html @@ -0,0 +1,22 @@ + + + + + Hello SyntaxHighlighter + + + + + + + + +

Hello SyntaxHighlighter

+
+function helloSyntaxHighlighter()
+{
+	return "hi!";
+}
+
+ + diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shAutoloader.js b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shAutoloader.js new file mode 100755 index 0000000..4e29bdd --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shAutoloader.js @@ -0,0 +1,17 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('(2(){1 h=5;h.I=2(){2 n(c,a){4(1 d=0;d|<|≥|>=|≤|<=|\*|\+|-|\/|÷|\^)/g, + css: 'color2' }, + + { regex: /\b(?:and|as|div|mod|not|or|return(?!\s&)(ing)?|equals|(is(n't| not)? )?equal( to)?|does(n't| not) equal|(is(n't| not)? )?(greater|less) than( or equal( to)?)?|(comes|does(n't| not) come) (after|before)|is(n't| not)?( in)? (back|front) of|is(n't| not)? behind|is(n't| not)?( (in|contained by))?|does(n't| not) contain|contain(s)?|(start|begin|end)(s)? with|((but|end) )?(consider|ignor)ing|prop(erty)?|(a )?ref(erence)?( to)?|repeat (until|while|with)|((end|exit) )?repeat|((else|end) )?if|else|(end )?(script|tell|try)|(on )?error|(put )?into|(of )?(it|me)|its|my|with (timeout( of)?|transaction)|end (timeout|transaction))\b/g, + css: 'keyword' }, + + { regex: /\b\d+(st|nd|rd|th)\b/g, // ordinals + css: 'keyword' }, + + { regex: /\b(?:about|above|against|around|at|below|beneath|beside|between|by|(apart|aside) from|(instead|out) of|into|on(to)?|over|since|thr(ough|u)|under)\b/g, + css: 'color3' }, + + { regex: /\b(?:adding folder items to|after receiving|choose( ((remote )?application|color|folder|from list|URL))?|clipboard info|set the clipboard to|(the )?clipboard|entire contents|display(ing| (alert|dialog|mode))?|document( (edited|file|nib name))?|file( (name|type))?|(info )?for|giving up after|(name )?extension|quoted form|return(ed)?|second(?! item)(s)?|list (disks|folder)|text item(s| delimiters)?|(Unicode )?text|(disk )?item(s)?|((current|list) )?view|((container|key) )?window|with (data|icon( (caution|note|stop))?|parameter(s)?|prompt|properties|seed|title)|case|diacriticals|hyphens|numeric strings|punctuation|white space|folder creation|application(s( folder)?| (processes|scripts position|support))?|((desktop )?(pictures )?|(documents|downloads|favorites|home|keychain|library|movies|music|public|scripts|sites|system|users|utilities|workflows) )folder|desktop|Folder Action scripts|font(s| panel)?|help|internet plugins|modem scripts|(system )?preferences|printer descriptions|scripting (additions|components)|shared (documents|libraries)|startup (disk|items)|temporary items|trash|on server|in AppleTalk zone|((as|long|short) )?user name|user (ID|locale)|(with )?password|in (bundle( with identifier)?|directory)|(close|open for) access|read|write( permission)?|(g|s)et eof|using( delimiters)?|starting at|default (answer|button|color|country code|entr(y|ies)|identifiers|items|name|location|script editor)|hidden( answer)?|open(ed| (location|untitled))?|error (handling|reporting)|(do( shell)?|load|run|store) script|administrator privileges|altering line endings|get volume settings|(alert|boot|input|mount|output|set) volume|output muted|(fax|random )?number|round(ing)?|up|down|toward zero|to nearest|as taught in school|system (attribute|info)|((AppleScript( Studio)?|system) )?version|(home )?directory|(IPv4|primary Ethernet) address|CPU (type|speed)|physical memory|time (stamp|to GMT)|replacing|ASCII (character|number)|localized string|from table|offset|summarize|beep|delay|say|(empty|multiple) selections allowed|(of|preferred) type|invisibles|showing( package contents)?|editable URL|(File|FTP|News|Media|Web) [Ss]ervers|Telnet hosts|Directory services|Remote applications|waiting until completion|saving( (in|to))?|path (for|to( (((current|frontmost) )?application|resource))?)|POSIX (file|path)|(background|RGB) color|(OK|cancel) button name|cancel button|button(s)?|cubic ((centi)?met(re|er)s|yards|feet|inches)|square ((kilo)?met(re|er)s|miles|yards|feet)|(centi|kilo)?met(re|er)s|miles|yards|feet|inches|lit(re|er)s|gallons|quarts|(kilo)?grams|ounces|pounds|degrees (Celsius|Fahrenheit|Kelvin)|print( (dialog|settings))?|clos(e(able)?|ing)|(de)?miniaturized|miniaturizable|zoom(ed|able)|attribute run|action (method|property|title)|phone|email|((start|end)ing|home) page|((birth|creation|current|custom|modification) )?date|((((phonetic )?(first|last|middle))|computer|host|maiden|related) |nick)?name|aim|icq|jabber|msn|yahoo|address(es)?|save addressbook|should enable action|city|country( code)?|formatte(r|d address)|(palette )?label|state|street|zip|AIM [Hh]andle(s)?|my card|select(ion| all)?|unsaved|(alpha )?value|entr(y|ies)|group|(ICQ|Jabber|MSN) handle|person|people|company|department|icon image|job title|note|organization|suffix|vcard|url|copies|collating|pages (across|down)|request print time|target( printer)?|((GUI Scripting|Script menu) )?enabled|show Computer scripts|(de)?activated|awake from nib|became (key|main)|call method|of (class|object)|center|clicked toolbar item|closed|for document|exposed|(can )?hide|idle|keyboard (down|up)|event( (number|type))?|launch(ed)?|load (image|movie|nib|sound)|owner|log|mouse (down|dragged|entered|exited|moved|up)|move|column|localization|resource|script|register|drag (info|types)|resigned (active|key|main)|resiz(e(d)?|able)|right mouse (down|dragged|up)|scroll wheel|(at )?index|should (close|open( untitled)?|quit( after last window closed)?|zoom)|((proposed|screen) )?bounds|show(n)?|behind|in front of|size (mode|to fit)|update(d| toolbar item)?|was (hidden|miniaturized)|will (become active|close|finish launching|hide|miniaturize|move|open|quit|(resign )?active|((maximum|minimum|proposed) )?size|show|zoom)|bundle|data source|movie|pasteboard|sound|tool(bar| tip)|(color|open|save) panel|coordinate system|frontmost|main( (bundle|menu|window))?|((services|(excluded from )?windows) )?menu|((executable|frameworks|resource|scripts|shared (frameworks|support)) )?path|(selected item )?identifier|data|content(s| view)?|character(s)?|click count|(command|control|option|shift) key down|context|delta (x|y|z)|key( code)?|location|pressure|unmodified characters|types|(first )?responder|playing|(allowed|selectable) identifiers|allows customization|(auto saves )?configuration|visible|image( name)?|menu form representation|tag|user(-| )defaults|associated file name|(auto|needs) display|current field editor|floating|has (resize indicator|shadow)|hides when deactivated|level|minimized (image|title)|opaque|position|release when closed|sheet|title(d)?)\b/g, + css: 'color3' }, + + { regex: new RegExp(this.getKeywords(specials), 'gm'), css: 'color3' }, + { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' }, + { regex: new RegExp(this.getKeywords(ordinals), 'gm'), css: 'keyword' } + ]; + }; + + Brush.prototype = new SyntaxHighlighter.Highlighter(); + Brush.aliases = ['applescript']; + + SyntaxHighlighter.brushes.AppleScript = Brush; + + // CommonJS + typeof(exports) != 'undefined' ? exports.Brush = Brush : null; +})(); diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushBash.js b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushBash.js new file mode 100755 index 0000000..8c29696 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushBash.js @@ -0,0 +1,59 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +;(function() +{ + // CommonJS + typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null; + + function Brush() + { + var keywords = 'if fi then elif else for do done until while break continue case function return in eq ne ge le'; + var commands = 'alias apropos awk basename bash bc bg builtin bzip2 cal cat cd cfdisk chgrp chmod chown chroot' + + 'cksum clear cmp comm command cp cron crontab csplit cut date dc dd ddrescue declare df ' + + 'diff diff3 dig dir dircolors dirname dirs du echo egrep eject enable env ethtool eval ' + + 'exec exit expand export expr false fdformat fdisk fg fgrep file find fmt fold format ' + + 'free fsck ftp gawk getopts grep groups gzip hash head history hostname id ifconfig ' + + 'import install join kill less let ln local locate logname logout look lpc lpr lprint ' + + 'lprintd lprintq lprm ls lsof make man mkdir mkfifo mkisofs mknod more mount mtools ' + + 'mv netstat nice nl nohup nslookup open op passwd paste pathchk ping popd pr printcap ' + + 'printenv printf ps pushd pwd quota quotacheck quotactl ram rcp read readonly renice ' + + 'remsync rm rmdir rsync screen scp sdiff sed select seq set sftp shift shopt shutdown ' + + 'sleep sort source split ssh strace su sudo sum symlink sync tail tar tee test time ' + + 'times touch top traceroute trap tr true tsort tty type ulimit umask umount unalias ' + + 'uname unexpand uniq units unset unshar useradd usermod users uuencode uudecode v vdir ' + + 'vi watch wc whereis which who whoami Wget xargs yes' + ; + + this.regexList = [ + { regex: /^#!.*$/gm, css: 'preprocessor bold' }, + { regex: /\/[\w-\/]+/gm, css: 'plain' }, + { regex: SyntaxHighlighter.regexLib.singleLinePerlComments, css: 'comments' }, // one line comments + { regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: 'string' }, // double quoted strings + { regex: SyntaxHighlighter.regexLib.singleQuotedString, css: 'string' }, // single quoted strings + { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' }, // keywords + { regex: new RegExp(this.getKeywords(commands), 'gm'), css: 'functions' } // commands + ]; + } + + Brush.prototype = new SyntaxHighlighter.Highlighter(); + Brush.aliases = ['bash', 'shell']; + + SyntaxHighlighter.brushes.Bash = Brush; + + // CommonJS + typeof(exports) != 'undefined' ? exports.Brush = Brush : null; +})(); diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushCSharp.js b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushCSharp.js new file mode 100755 index 0000000..079214e --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushCSharp.js @@ -0,0 +1,65 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +;(function() +{ + // CommonJS + typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null; + + function Brush() + { + var keywords = 'abstract as base bool break byte case catch char checked class const ' + + 'continue decimal default delegate do double else enum event explicit ' + + 'extern false finally fixed float for foreach get goto if implicit in int ' + + 'interface internal is lock long namespace new null object operator out ' + + 'override params private protected public readonly ref return sbyte sealed set ' + + 'short sizeof stackalloc static string struct switch this throw true try ' + + 'typeof uint ulong unchecked unsafe ushort using virtual void while'; + + function fixComments(match, regexInfo) + { + var css = (match[0].indexOf("///") == 0) + ? 'color1' + : 'comments' + ; + + return [new SyntaxHighlighter.Match(match[0], match.index, css)]; + } + + this.regexList = [ + { regex: SyntaxHighlighter.regexLib.singleLineCComments, func : fixComments }, // one line comments + { regex: SyntaxHighlighter.regexLib.multiLineCComments, css: 'comments' }, // multiline comments + { regex: /@"(?:[^"]|"")*"/g, css: 'string' }, // @-quoted strings + { regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: 'string' }, // strings + { regex: SyntaxHighlighter.regexLib.singleQuotedString, css: 'string' }, // strings + { regex: /^\s*#.*/gm, css: 'preprocessor' }, // preprocessor tags like #region and #endregion + { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' }, // c# keyword + { regex: /\bpartial(?=\s+(?:class|interface|struct)\b)/g, css: 'keyword' }, // contextual keyword: 'partial' + { regex: /\byield(?=\s+(?:return|break)\b)/g, css: 'keyword' } // contextual keyword: 'yield' + ]; + + this.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags); + }; + + Brush.prototype = new SyntaxHighlighter.Highlighter(); + Brush.aliases = ['c#', 'c-sharp', 'csharp']; + + SyntaxHighlighter.brushes.CSharp = Brush; + + // CommonJS + typeof(exports) != 'undefined' ? exports.Brush = Brush : null; +})(); + diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushColdFusion.js b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushColdFusion.js new file mode 100755 index 0000000..627dbb9 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushColdFusion.js @@ -0,0 +1,100 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +;(function() +{ + // CommonJS + typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null; + + function Brush() + { + // Contributed by Jen + // http://www.jensbits.com/2009/05/14/coldfusion-brush-for-syntaxhighlighter-plus + + var funcs = 'Abs ACos AddSOAPRequestHeader AddSOAPResponseHeader AjaxLink AjaxOnLoad ArrayAppend ArrayAvg ArrayClear ArrayDeleteAt ' + + 'ArrayInsertAt ArrayIsDefined ArrayIsEmpty ArrayLen ArrayMax ArrayMin ArraySet ArraySort ArraySum ArraySwap ArrayToList ' + + 'Asc ASin Atn BinaryDecode BinaryEncode BitAnd BitMaskClear BitMaskRead BitMaskSet BitNot BitOr BitSHLN BitSHRN BitXor ' + + 'Ceiling CharsetDecode CharsetEncode Chr CJustify Compare CompareNoCase Cos CreateDate CreateDateTime CreateObject ' + + 'CreateODBCDate CreateODBCDateTime CreateODBCTime CreateTime CreateTimeSpan CreateUUID DateAdd DateCompare DateConvert ' + + 'DateDiff DateFormat DatePart Day DayOfWeek DayOfWeekAsString DayOfYear DaysInMonth DaysInYear DE DecimalFormat DecrementValue ' + + 'Decrypt DecryptBinary DeleteClientVariable DeserializeJSON DirectoryExists DollarFormat DotNetToCFType Duplicate Encrypt ' + + 'EncryptBinary Evaluate Exp ExpandPath FileClose FileCopy FileDelete FileExists FileIsEOF FileMove FileOpen FileRead ' + + 'FileReadBinary FileReadLine FileSetAccessMode FileSetAttribute FileSetLastModified FileWrite Find FindNoCase FindOneOf ' + + 'FirstDayOfMonth Fix FormatBaseN GenerateSecretKey GetAuthUser GetBaseTagData GetBaseTagList GetBaseTemplatePath ' + + 'GetClientVariablesList GetComponentMetaData GetContextRoot GetCurrentTemplatePath GetDirectoryFromPath GetEncoding ' + + 'GetException GetFileFromPath GetFileInfo GetFunctionList GetGatewayHelper GetHttpRequestData GetHttpTimeString ' + + 'GetK2ServerDocCount GetK2ServerDocCountLimit GetLocale GetLocaleDisplayName GetLocalHostIP GetMetaData GetMetricData ' + + 'GetPageContext GetPrinterInfo GetProfileSections GetProfileString GetReadableImageFormats GetSOAPRequest GetSOAPRequestHeader ' + + 'GetSOAPResponse GetSOAPResponseHeader GetTempDirectory GetTempFile GetTemplatePath GetTickCount GetTimeZoneInfo GetToken ' + + 'GetUserRoles GetWriteableImageFormats Hash Hour HTMLCodeFormat HTMLEditFormat IIf ImageAddBorder ImageBlur ImageClearRect ' + + 'ImageCopy ImageCrop ImageDrawArc ImageDrawBeveledRect ImageDrawCubicCurve ImageDrawLine ImageDrawLines ImageDrawOval ' + + 'ImageDrawPoint ImageDrawQuadraticCurve ImageDrawRect ImageDrawRoundRect ImageDrawText ImageFlip ImageGetBlob ImageGetBufferedImage ' + + 'ImageGetEXIFTag ImageGetHeight ImageGetIPTCTag ImageGetWidth ImageGrayscale ImageInfo ImageNegative ImageNew ImageOverlay ImagePaste ' + + 'ImageRead ImageReadBase64 ImageResize ImageRotate ImageRotateDrawingAxis ImageScaleToFit ImageSetAntialiasing ImageSetBackgroundColor ' + + 'ImageSetDrawingColor ImageSetDrawingStroke ImageSetDrawingTransparency ImageSharpen ImageShear ImageShearDrawingAxis ImageTranslate ' + + 'ImageTranslateDrawingAxis ImageWrite ImageWriteBase64 ImageXORDrawingMode IncrementValue InputBaseN Insert Int IsArray IsBinary ' + + 'IsBoolean IsCustomFunction IsDate IsDDX IsDebugMode IsDefined IsImage IsImageFile IsInstanceOf IsJSON IsLeapYear IsLocalHost ' + + 'IsNumeric IsNumericDate IsObject IsPDFFile IsPDFObject IsQuery IsSimpleValue IsSOAPRequest IsStruct IsUserInAnyRole IsUserInRole ' + + 'IsUserLoggedIn IsValid IsWDDX IsXML IsXmlAttribute IsXmlDoc IsXmlElem IsXmlNode IsXmlRoot JavaCast JSStringFormat LCase Left Len ' + + 'ListAppend ListChangeDelims ListContains ListContainsNoCase ListDeleteAt ListFind ListFindNoCase ListFirst ListGetAt ListInsertAt ' + + 'ListLast ListLen ListPrepend ListQualify ListRest ListSetAt ListSort ListToArray ListValueCount ListValueCountNoCase LJustify Log ' + + 'Log10 LSCurrencyFormat LSDateFormat LSEuroCurrencyFormat LSIsCurrency LSIsDate LSIsNumeric LSNumberFormat LSParseCurrency LSParseDateTime ' + + 'LSParseEuroCurrency LSParseNumber LSTimeFormat LTrim Max Mid Min Minute Month MonthAsString Now NumberFormat ParagraphFormat ParseDateTime ' + + 'Pi PrecisionEvaluate PreserveSingleQuotes Quarter QueryAddColumn QueryAddRow QueryConvertForGrid QueryNew QuerySetCell QuotedValueList Rand ' + + 'Randomize RandRange REFind REFindNoCase ReleaseComObject REMatch REMatchNoCase RemoveChars RepeatString Replace ReplaceList ReplaceNoCase ' + + 'REReplace REReplaceNoCase Reverse Right RJustify Round RTrim Second SendGatewayMessage SerializeJSON SetEncoding SetLocale SetProfileString ' + + 'SetVariable Sgn Sin Sleep SpanExcluding SpanIncluding Sqr StripCR StructAppend StructClear StructCopy StructCount StructDelete StructFind ' + + 'StructFindKey StructFindValue StructGet StructInsert StructIsEmpty StructKeyArray StructKeyExists StructKeyList StructKeyList StructNew ' + + 'StructSort StructUpdate Tan TimeFormat ToBase64 ToBinary ToScript ToString Trim UCase URLDecode URLEncodedFormat URLSessionFormat Val ' + + 'ValueList VerifyClient Week Wrap Wrap WriteOutput XmlChildPos XmlElemNew XmlFormat XmlGetNodeType XmlNew XmlParse XmlSearch XmlTransform ' + + 'XmlValidate Year YesNoFormat'; + + var keywords = 'cfabort cfajaximport cfajaxproxy cfapplet cfapplication cfargument cfassociate cfbreak cfcache cfcalendar ' + + 'cfcase cfcatch cfchart cfchartdata cfchartseries cfcol cfcollection cfcomponent cfcontent cfcookie cfdbinfo ' + + 'cfdefaultcase cfdirectory cfdiv cfdocument cfdocumentitem cfdocumentsection cfdump cfelse cfelseif cferror ' + + 'cfexchangecalendar cfexchangeconnection cfexchangecontact cfexchangefilter cfexchangemail cfexchangetask ' + + 'cfexecute cfexit cffeed cffile cfflush cfform cfformgroup cfformitem cfftp cffunction cfgrid cfgridcolumn ' + + 'cfgridrow cfgridupdate cfheader cfhtmlhead cfhttp cfhttpparam cfif cfimage cfimport cfinclude cfindex ' + + 'cfinput cfinsert cfinterface cfinvoke cfinvokeargument cflayout cflayoutarea cfldap cflocation cflock cflog ' + + 'cflogin cfloginuser cflogout cfloop cfmail cfmailparam cfmailpart cfmenu cfmenuitem cfmodule cfNTauthenticate ' + + 'cfobject cfobjectcache cfoutput cfparam cfpdf cfpdfform cfpdfformparam cfpdfparam cfpdfsubform cfpod cfpop ' + + 'cfpresentation cfpresentationslide cfpresenter cfprint cfprocessingdirective cfprocparam cfprocresult ' + + 'cfproperty cfquery cfqueryparam cfregistry cfreport cfreportparam cfrethrow cfreturn cfsavecontent cfschedule ' + + 'cfscript cfsearch cfselect cfset cfsetting cfsilent cfslider cfsprydataset cfstoredproc cfswitch cftable ' + + 'cftextarea cfthread cfthrow cftimer cftooltip cftrace cftransaction cftree cftreeitem cftry cfupdate cfwddx ' + + 'cfwindow cfxml cfzip cfzipparam'; + + var operators = 'all and any between cross in join like not null or outer some'; + + this.regexList = [ + { regex: new RegExp('--(.*)$', 'gm'), css: 'comments' }, // one line and multiline comments + { regex: SyntaxHighlighter.regexLib.xmlComments, css: 'comments' }, // single quoted strings + { regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: 'string' }, // double quoted strings + { regex: SyntaxHighlighter.regexLib.singleQuotedString, css: 'string' }, // single quoted strings + { regex: new RegExp(this.getKeywords(funcs), 'gmi'), css: 'functions' }, // functions + { regex: new RegExp(this.getKeywords(operators), 'gmi'), css: 'color1' }, // operators and such + { regex: new RegExp(this.getKeywords(keywords), 'gmi'), css: 'keyword' } // keyword + ]; + } + + Brush.prototype = new SyntaxHighlighter.Highlighter(); + Brush.aliases = ['coldfusion','cf']; + + SyntaxHighlighter.brushes.ColdFusion = Brush; + + // CommonJS + typeof(exports) != 'undefined' ? exports.Brush = Brush : null; +})(); diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushCpp.js b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushCpp.js new file mode 100755 index 0000000..9f70d3a --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushCpp.js @@ -0,0 +1,97 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +;(function() +{ + // CommonJS + typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null; + + function Brush() + { + // Copyright 2006 Shin, YoungJin + + var datatypes = 'ATOM BOOL BOOLEAN BYTE CHAR COLORREF DWORD DWORDLONG DWORD_PTR ' + + 'DWORD32 DWORD64 FLOAT HACCEL HALF_PTR HANDLE HBITMAP HBRUSH ' + + 'HCOLORSPACE HCONV HCONVLIST HCURSOR HDC HDDEDATA HDESK HDROP HDWP ' + + 'HENHMETAFILE HFILE HFONT HGDIOBJ HGLOBAL HHOOK HICON HINSTANCE HKEY ' + + 'HKL HLOCAL HMENU HMETAFILE HMODULE HMONITOR HPALETTE HPEN HRESULT ' + + 'HRGN HRSRC HSZ HWINSTA HWND INT INT_PTR INT32 INT64 LANGID LCID LCTYPE ' + + 'LGRPID LONG LONGLONG LONG_PTR LONG32 LONG64 LPARAM LPBOOL LPBYTE LPCOLORREF ' + + 'LPCSTR LPCTSTR LPCVOID LPCWSTR LPDWORD LPHANDLE LPINT LPLONG LPSTR LPTSTR ' + + 'LPVOID LPWORD LPWSTR LRESULT PBOOL PBOOLEAN PBYTE PCHAR PCSTR PCTSTR PCWSTR ' + + 'PDWORDLONG PDWORD_PTR PDWORD32 PDWORD64 PFLOAT PHALF_PTR PHANDLE PHKEY PINT ' + + 'PINT_PTR PINT32 PINT64 PLCID PLONG PLONGLONG PLONG_PTR PLONG32 PLONG64 POINTER_32 ' + + 'POINTER_64 PSHORT PSIZE_T PSSIZE_T PSTR PTBYTE PTCHAR PTSTR PUCHAR PUHALF_PTR ' + + 'PUINT PUINT_PTR PUINT32 PUINT64 PULONG PULONGLONG PULONG_PTR PULONG32 PULONG64 ' + + 'PUSHORT PVOID PWCHAR PWORD PWSTR SC_HANDLE SC_LOCK SERVICE_STATUS_HANDLE SHORT ' + + 'SIZE_T SSIZE_T TBYTE TCHAR UCHAR UHALF_PTR UINT UINT_PTR UINT32 UINT64 ULONG ' + + 'ULONGLONG ULONG_PTR ULONG32 ULONG64 USHORT USN VOID WCHAR WORD WPARAM WPARAM WPARAM ' + + 'char bool short int __int32 __int64 __int8 __int16 long float double __wchar_t ' + + 'clock_t _complex _dev_t _diskfree_t div_t ldiv_t _exception _EXCEPTION_POINTERS ' + + 'FILE _finddata_t _finddatai64_t _wfinddata_t _wfinddatai64_t __finddata64_t ' + + '__wfinddata64_t _FPIEEE_RECORD fpos_t _HEAPINFO _HFILE lconv intptr_t ' + + 'jmp_buf mbstate_t _off_t _onexit_t _PNH ptrdiff_t _purecall_handler ' + + 'sig_atomic_t size_t _stat __stat64 _stati64 terminate_function ' + + 'time_t __time64_t _timeb __timeb64 tm uintptr_t _utimbuf ' + + 'va_list wchar_t wctrans_t wctype_t wint_t signed'; + + var keywords = 'break case catch class const __finally __exception __try ' + + 'const_cast continue private public protected __declspec ' + + 'default delete deprecated dllexport dllimport do dynamic_cast ' + + 'else enum explicit extern if for friend goto inline ' + + 'mutable naked namespace new noinline noreturn nothrow ' + + 'register reinterpret_cast return selectany ' + + 'sizeof static static_cast struct switch template this ' + + 'thread throw true false try typedef typeid typename union ' + + 'using uuid virtual void volatile whcar_t while'; + + var functions = 'assert isalnum isalpha iscntrl isdigit isgraph islower isprint' + + 'ispunct isspace isupper isxdigit tolower toupper errno localeconv ' + + 'setlocale acos asin atan atan2 ceil cos cosh exp fabs floor fmod ' + + 'frexp ldexp log log10 modf pow sin sinh sqrt tan tanh jmp_buf ' + + 'longjmp setjmp raise signal sig_atomic_t va_arg va_end va_start ' + + 'clearerr fclose feof ferror fflush fgetc fgetpos fgets fopen ' + + 'fprintf fputc fputs fread freopen fscanf fseek fsetpos ftell ' + + 'fwrite getc getchar gets perror printf putc putchar puts remove ' + + 'rename rewind scanf setbuf setvbuf sprintf sscanf tmpfile tmpnam ' + + 'ungetc vfprintf vprintf vsprintf abort abs atexit atof atoi atol ' + + 'bsearch calloc div exit free getenv labs ldiv malloc mblen mbstowcs ' + + 'mbtowc qsort rand realloc srand strtod strtol strtoul system ' + + 'wcstombs wctomb memchr memcmp memcpy memmove memset strcat strchr ' + + 'strcmp strcoll strcpy strcspn strerror strlen strncat strncmp ' + + 'strncpy strpbrk strrchr strspn strstr strtok strxfrm asctime ' + + 'clock ctime difftime gmtime localtime mktime strftime time'; + + this.regexList = [ + { regex: SyntaxHighlighter.regexLib.singleLineCComments, css: 'comments' }, // one line comments + { regex: SyntaxHighlighter.regexLib.multiLineCComments, css: 'comments' }, // multiline comments + { regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: 'string' }, // strings + { regex: SyntaxHighlighter.regexLib.singleQuotedString, css: 'string' }, // strings + { regex: /^ *#.*/gm, css: 'preprocessor' }, + { regex: new RegExp(this.getKeywords(datatypes), 'gm'), css: 'color1 bold' }, + { regex: new RegExp(this.getKeywords(functions), 'gm'), css: 'functions bold' }, + { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword bold' } + ]; + }; + + Brush.prototype = new SyntaxHighlighter.Highlighter(); + Brush.aliases = ['cpp', 'c']; + + SyntaxHighlighter.brushes.Cpp = Brush; + + // CommonJS + typeof(exports) != 'undefined' ? exports.Brush = Brush : null; +})(); diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushCss.js b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushCss.js new file mode 100755 index 0000000..4297a9a --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushCss.js @@ -0,0 +1,91 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +;(function() +{ + // CommonJS + typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null; + + function Brush() + { + function getKeywordsCSS(str) + { + return '\\b([a-z_]|)' + str.replace(/ /g, '(?=:)\\b|\\b([a-z_\\*]|\\*|)') + '(?=:)\\b'; + }; + + function getValuesCSS(str) + { + return '\\b' + str.replace(/ /g, '(?!-)(?!:)\\b|\\b()') + '\:\\b'; + }; + + var keywords = 'ascent azimuth background-attachment background-color background-image background-position ' + + 'background-repeat background baseline bbox border-collapse border-color border-spacing border-style border-top ' + + 'border-right border-bottom border-left border-top-color border-right-color border-bottom-color border-left-color ' + + 'border-top-style border-right-style border-bottom-style border-left-style border-top-width border-right-width ' + + 'border-bottom-width border-left-width border-width border bottom cap-height caption-side centerline clear clip color ' + + 'content counter-increment counter-reset cue-after cue-before cue cursor definition-src descent direction display ' + + 'elevation empty-cells float font-size-adjust font-family font-size font-stretch font-style font-variant font-weight font ' + + 'height left letter-spacing line-height list-style-image list-style-position list-style-type list-style margin-top ' + + 'margin-right margin-bottom margin-left margin marker-offset marks mathline max-height max-width min-height min-width orphans ' + + 'outline-color outline-style outline-width outline overflow padding-top padding-right padding-bottom padding-left padding page ' + + 'page-break-after page-break-before page-break-inside pause pause-after pause-before pitch pitch-range play-during position ' + + 'quotes right richness size slope src speak-header speak-numeral speak-punctuation speak speech-rate stemh stemv stress ' + + 'table-layout text-align top text-decoration text-indent text-shadow text-transform unicode-bidi unicode-range units-per-em ' + + 'vertical-align visibility voice-family volume white-space widows width widths word-spacing x-height z-index'; + + var values = 'above absolute all always aqua armenian attr aural auto avoid baseline behind below bidi-override black blink block blue bold bolder '+ + 'both bottom braille capitalize caption center center-left center-right circle close-quote code collapse compact condensed '+ + 'continuous counter counters crop cross crosshair cursive dashed decimal decimal-leading-zero default digits disc dotted double '+ + 'embed embossed e-resize expanded extra-condensed extra-expanded fantasy far-left far-right fast faster fixed format fuchsia '+ + 'gray green groove handheld hebrew help hidden hide high higher icon inline-table inline inset inside invert italic '+ + 'justify landscape large larger left-side left leftwards level lighter lime line-through list-item local loud lower-alpha '+ + 'lowercase lower-greek lower-latin lower-roman lower low ltr marker maroon medium message-box middle mix move narrower '+ + 'navy ne-resize no-close-quote none no-open-quote no-repeat normal nowrap n-resize nw-resize oblique olive once open-quote outset '+ + 'outside overline pointer portrait pre print projection purple red relative repeat repeat-x repeat-y rgb ridge right right-side '+ + 'rightwards rtl run-in screen scroll semi-condensed semi-expanded separate se-resize show silent silver slower slow '+ + 'small small-caps small-caption smaller soft solid speech spell-out square s-resize static status-bar sub super sw-resize '+ + 'table-caption table-cell table-column table-column-group table-footer-group table-header-group table-row table-row-group teal '+ + 'text-bottom text-top thick thin top transparent tty tv ultra-condensed ultra-expanded underline upper-alpha uppercase upper-latin '+ + 'upper-roman url visible wait white wider w-resize x-fast x-high x-large x-loud x-low x-slow x-small x-soft xx-large xx-small yellow'; + + var fonts = '[mM]onospace [tT]ahoma [vV]erdana [aA]rial [hH]elvetica [sS]ans-serif [sS]erif [cC]ourier mono sans serif'; + + this.regexList = [ + { regex: SyntaxHighlighter.regexLib.multiLineCComments, css: 'comments' }, // multiline comments + { regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: 'string' }, // double quoted strings + { regex: SyntaxHighlighter.regexLib.singleQuotedString, css: 'string' }, // single quoted strings + { regex: /\#[a-fA-F0-9]{3,6}/g, css: 'value' }, // html colors + { regex: /(-?\d+)(\.\d+)?(px|em|pt|\:|\%|)/g, css: 'value' }, // sizes + { regex: /!important/g, css: 'color3' }, // !important + { regex: new RegExp(getKeywordsCSS(keywords), 'gm'), css: 'keyword' }, // keywords + { regex: new RegExp(getValuesCSS(values), 'g'), css: 'value' }, // values + { regex: new RegExp(this.getKeywords(fonts), 'g'), css: 'color1' } // fonts + ]; + + this.forHtmlScript({ + left: /(<|<)\s*style.*?(>|>)/gi, + right: /(<|<)\/\s*style\s*(>|>)/gi + }); + }; + + Brush.prototype = new SyntaxHighlighter.Highlighter(); + Brush.aliases = ['css']; + + SyntaxHighlighter.brushes.CSS = Brush; + + // CommonJS + typeof(exports) != 'undefined' ? exports.Brush = Brush : null; +})(); diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushDelphi.js b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushDelphi.js new file mode 100755 index 0000000..e1060d4 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushDelphi.js @@ -0,0 +1,55 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +;(function() +{ + // CommonJS + typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null; + + function Brush() + { + var keywords = 'abs addr and ansichar ansistring array as asm begin boolean byte cardinal ' + + 'case char class comp const constructor currency destructor div do double ' + + 'downto else end except exports extended false file finalization finally ' + + 'for function goto if implementation in inherited int64 initialization ' + + 'integer interface is label library longint longword mod nil not object ' + + 'of on or packed pansichar pansistring pchar pcurrency pdatetime pextended ' + + 'pint64 pointer private procedure program property pshortstring pstring ' + + 'pvariant pwidechar pwidestring protected public published raise real real48 ' + + 'record repeat set shl shortint shortstring shr single smallint string then ' + + 'threadvar to true try type unit until uses val var varirnt while widechar ' + + 'widestring with word write writeln xor'; + + this.regexList = [ + { regex: /\(\*[\s\S]*?\*\)/gm, css: 'comments' }, // multiline comments (* *) + { regex: /{(?!\$)[\s\S]*?}/gm, css: 'comments' }, // multiline comments { } + { regex: SyntaxHighlighter.regexLib.singleLineCComments, css: 'comments' }, // one line + { regex: SyntaxHighlighter.regexLib.singleQuotedString, css: 'string' }, // strings + { regex: /\{\$[a-zA-Z]+ .+\}/g, css: 'color1' }, // compiler Directives and Region tags + { regex: /\b[\d\.]+\b/g, css: 'value' }, // numbers 12345 + { regex: /\$[a-zA-Z0-9]+\b/g, css: 'value' }, // numbers $F5D3 + { regex: new RegExp(this.getKeywords(keywords), 'gmi'), css: 'keyword' } // keyword + ]; + }; + + Brush.prototype = new SyntaxHighlighter.Highlighter(); + Brush.aliases = ['delphi', 'pascal', 'pas']; + + SyntaxHighlighter.brushes.Delphi = Brush; + + // CommonJS + typeof(exports) != 'undefined' ? exports.Brush = Brush : null; +})(); diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushDiff.js b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushDiff.js new file mode 100755 index 0000000..e9b14fc --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushDiff.js @@ -0,0 +1,41 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +;(function() +{ + // CommonJS + typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null; + + function Brush() + { + this.regexList = [ + { regex: /^\+\+\+.*$/gm, css: 'color2' }, + { regex: /^\-\-\-.*$/gm, css: 'color2' }, + { regex: /^\s.*$/gm, css: 'color1' }, + { regex: /^@@.*@@$/gm, css: 'variable' }, + { regex: /^\+[^\+]{1}.*$/gm, css: 'string' }, + { regex: /^\-[^\-]{1}.*$/gm, css: 'comments' } + ]; + }; + + Brush.prototype = new SyntaxHighlighter.Highlighter(); + Brush.aliases = ['diff', 'patch']; + + SyntaxHighlighter.brushes.Diff = Brush; + + // CommonJS + typeof(exports) != 'undefined' ? exports.Brush = Brush : null; +})(); diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushErlang.js b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushErlang.js new file mode 100755 index 0000000..6ba7d9d --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushErlang.js @@ -0,0 +1,52 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +;(function() +{ + // CommonJS + typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null; + + function Brush() + { + // Contributed by Jean-Lou Dupont + // http://jldupont.blogspot.com/2009/06/erlang-syntax-highlighter.html + + // According to: http://erlang.org/doc/reference_manual/introduction.html#1.5 + var keywords = 'after and andalso band begin bnot bor bsl bsr bxor '+ + 'case catch cond div end fun if let not of or orelse '+ + 'query receive rem try when xor'+ + // additional + ' module export import define'; + + this.regexList = [ + { regex: new RegExp("[A-Z][A-Za-z0-9_]+", 'g'), css: 'constants' }, + { regex: new RegExp("\\%.+", 'gm'), css: 'comments' }, + { regex: new RegExp("\\?[A-Za-z0-9_]+", 'g'), css: 'preprocessor' }, + { regex: new RegExp("[a-z0-9_]+:[a-z0-9_]+", 'g'), css: 'functions' }, + { regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: 'string' }, + { regex: SyntaxHighlighter.regexLib.singleQuotedString, css: 'string' }, + { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' } + ]; + }; + + Brush.prototype = new SyntaxHighlighter.Highlighter(); + Brush.aliases = ['erl', 'erlang']; + + SyntaxHighlighter.brushes.Erland = Brush; + + // CommonJS + typeof(exports) != 'undefined' ? exports.Brush = Brush : null; +})(); diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushGroovy.js b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushGroovy.js new file mode 100755 index 0000000..6ec5c18 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushGroovy.js @@ -0,0 +1,67 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +;(function() +{ + // CommonJS + typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null; + + function Brush() + { + // Contributed by Andres Almiray + // http://jroller.com/aalmiray/entry/nice_source_code_syntax_highlighter + + var keywords = 'as assert break case catch class continue def default do else extends finally ' + + 'if in implements import instanceof interface new package property return switch ' + + 'throw throws try while public protected private static'; + var types = 'void boolean byte char short int long float double'; + var constants = 'null'; + var methods = 'allProperties count get size '+ + 'collect each eachProperty eachPropertyName eachWithIndex find findAll ' + + 'findIndexOf grep inject max min reverseEach sort ' + + 'asImmutable asSynchronized flatten intersect join pop reverse subMap toList ' + + 'padRight padLeft contains eachMatch toCharacter toLong toUrl tokenize ' + + 'eachFile eachFileRecurse eachB yte eachLine readBytes readLine getText ' + + 'splitEachLine withReader append encodeBase64 decodeBase64 filterLine ' + + 'transformChar transformLine withOutputStream withPrintWriter withStream ' + + 'withStreams withWriter withWriterAppend write writeLine '+ + 'dump inspect invokeMethod print println step times upto use waitForOrKill '+ + 'getText'; + + this.regexList = [ + { regex: SyntaxHighlighter.regexLib.singleLineCComments, css: 'comments' }, // one line comments + { regex: SyntaxHighlighter.regexLib.multiLineCComments, css: 'comments' }, // multiline comments + { regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: 'string' }, // strings + { regex: SyntaxHighlighter.regexLib.singleQuotedString, css: 'string' }, // strings + { regex: /""".*"""/g, css: 'string' }, // GStrings + { regex: new RegExp('\\b([\\d]+(\\.[\\d]+)?|0x[a-f0-9]+)\\b', 'gi'), css: 'value' }, // numbers + { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' }, // goovy keyword + { regex: new RegExp(this.getKeywords(types), 'gm'), css: 'color1' }, // goovy/java type + { regex: new RegExp(this.getKeywords(constants), 'gm'), css: 'constants' }, // constants + { regex: new RegExp(this.getKeywords(methods), 'gm'), css: 'functions' } // methods + ]; + + this.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags); + } + + Brush.prototype = new SyntaxHighlighter.Highlighter(); + Brush.aliases = ['groovy']; + + SyntaxHighlighter.brushes.Groovy = Brush; + + // CommonJS + typeof(exports) != 'undefined' ? exports.Brush = Brush : null; +})(); diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushJScript.js b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushJScript.js new file mode 100755 index 0000000..ff98dab --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushJScript.js @@ -0,0 +1,52 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +;(function() +{ + // CommonJS + typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null; + + function Brush() + { + var keywords = 'break case catch continue ' + + 'default delete do else false ' + + 'for function if in instanceof ' + + 'new null return super switch ' + + 'this throw true try typeof var while with' + ; + + var r = SyntaxHighlighter.regexLib; + + this.regexList = [ + { regex: r.multiLineDoubleQuotedString, css: 'string' }, // double quoted strings + { regex: r.multiLineSingleQuotedString, css: 'string' }, // single quoted strings + { regex: r.singleLineCComments, css: 'comments' }, // one line comments + { regex: r.multiLineCComments, css: 'comments' }, // multiline comments + { regex: /\s*#.*/gm, css: 'preprocessor' }, // preprocessor tags like #region and #endregion + { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' } // keywords + ]; + + this.forHtmlScript(r.scriptScriptTags); + }; + + Brush.prototype = new SyntaxHighlighter.Highlighter(); + Brush.aliases = ['js', 'jscript', 'javascript']; + + SyntaxHighlighter.brushes.JScript = Brush; + + // CommonJS + typeof(exports) != 'undefined' ? exports.Brush = Brush : null; +})(); diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushJava.js b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushJava.js new file mode 100755 index 0000000..d692fd6 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushJava.js @@ -0,0 +1,57 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +;(function() +{ + // CommonJS + typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null; + + function Brush() + { + var keywords = 'abstract assert boolean break byte case catch char class const ' + + 'continue default do double else enum extends ' + + 'false final finally float for goto if implements import ' + + 'instanceof int interface long native new null ' + + 'package private protected public return ' + + 'short static strictfp super switch synchronized this throw throws true ' + + 'transient try void volatile while'; + + this.regexList = [ + { regex: SyntaxHighlighter.regexLib.singleLineCComments, css: 'comments' }, // one line comments + { regex: /\/\*([^\*][\s\S]*)?\*\//gm, css: 'comments' }, // multiline comments + { regex: /\/\*(?!\*\/)\*[\s\S]*?\*\//gm, css: 'preprocessor' }, // documentation comments + { regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: 'string' }, // strings + { regex: SyntaxHighlighter.regexLib.singleQuotedString, css: 'string' }, // strings + { regex: /\b([\d]+(\.[\d]+)?|0x[a-f0-9]+)\b/gi, css: 'value' }, // numbers + { regex: /(?!\@interface\b)\@[\$\w]+\b/g, css: 'color1' }, // annotation @anno + { regex: /\@interface\b/g, css: 'color2' }, // @interface keyword + { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' } // java keyword + ]; + + this.forHtmlScript({ + left : /(<|<)%[@!=]?/g, + right : /%(>|>)/g + }); + }; + + Brush.prototype = new SyntaxHighlighter.Highlighter(); + Brush.aliases = ['java']; + + SyntaxHighlighter.brushes.Java = Brush; + + // CommonJS + typeof(exports) != 'undefined' ? exports.Brush = Brush : null; +})(); diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushJavaFX.js b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushJavaFX.js new file mode 100755 index 0000000..1a150a6 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushJavaFX.js @@ -0,0 +1,58 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +;(function() +{ + // CommonJS + typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null; + + function Brush() + { + // Contributed by Patrick Webster + // http://patrickwebster.blogspot.com/2009/04/javafx-brush-for-syntaxhighlighter.html + var datatypes = 'Boolean Byte Character Double Duration ' + + 'Float Integer Long Number Short String Void' + ; + + var keywords = 'abstract after and as assert at before bind bound break catch class ' + + 'continue def delete else exclusive extends false finally first for from ' + + 'function if import in indexof init insert instanceof into inverse last ' + + 'lazy mixin mod nativearray new not null on or override package postinit ' + + 'protected public public-init public-read replace return reverse sizeof ' + + 'step super then this throw true try tween typeof var where while with ' + + 'attribute let private readonly static trigger' + ; + + this.regexList = [ + { regex: SyntaxHighlighter.regexLib.singleLineCComments, css: 'comments' }, + { regex: SyntaxHighlighter.regexLib.multiLineCComments, css: 'comments' }, + { regex: SyntaxHighlighter.regexLib.singleQuotedString, css: 'string' }, + { regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: 'string' }, + { regex: /(-?\.?)(\b(\d*\.?\d+|\d+\.?\d*)(e[+-]?\d+)?|0x[a-f\d]+)\b\.?/gi, css: 'color2' }, // numbers + { regex: new RegExp(this.getKeywords(datatypes), 'gm'), css: 'variable' }, // datatypes + { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' } + ]; + this.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags); + }; + + Brush.prototype = new SyntaxHighlighter.Highlighter(); + Brush.aliases = ['jfx', 'javafx']; + + SyntaxHighlighter.brushes.JavaFX = Brush; + + // CommonJS + typeof(exports) != 'undefined' ? exports.Brush = Brush : null; +})(); diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushPerl.js b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushPerl.js new file mode 100755 index 0000000..d94a2e0 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushPerl.js @@ -0,0 +1,72 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +;(function() +{ + // CommonJS + typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null; + + function Brush() + { + // Contributed by David Simmons-Duffin and Marty Kube + + var funcs = + 'abs accept alarm atan2 bind binmode chdir chmod chomp chop chown chr ' + + 'chroot close closedir connect cos crypt defined delete each endgrent ' + + 'endhostent endnetent endprotoent endpwent endservent eof exec exists ' + + 'exp fcntl fileno flock fork format formline getc getgrent getgrgid ' + + 'getgrnam gethostbyaddr gethostbyname gethostent getlogin getnetbyaddr ' + + 'getnetbyname getnetent getpeername getpgrp getppid getpriority ' + + 'getprotobyname getprotobynumber getprotoent getpwent getpwnam getpwuid ' + + 'getservbyname getservbyport getservent getsockname getsockopt glob ' + + 'gmtime grep hex index int ioctl join keys kill lc lcfirst length link ' + + 'listen localtime lock log lstat map mkdir msgctl msgget msgrcv msgsnd ' + + 'oct open opendir ord pack pipe pop pos print printf prototype push ' + + 'quotemeta rand read readdir readline readlink readpipe recv rename ' + + 'reset reverse rewinddir rindex rmdir scalar seek seekdir select semctl ' + + 'semget semop send setgrent sethostent setnetent setpgrp setpriority ' + + 'setprotoent setpwent setservent setsockopt shift shmctl shmget shmread ' + + 'shmwrite shutdown sin sleep socket socketpair sort splice split sprintf ' + + 'sqrt srand stat study substr symlink syscall sysopen sysread sysseek ' + + 'system syswrite tell telldir time times tr truncate uc ucfirst umask ' + + 'undef unlink unpack unshift utime values vec wait waitpid warn write'; + + var keywords = + 'bless caller continue dbmclose dbmopen die do dump else elsif eval exit ' + + 'for foreach goto if import last local my next no our package redo ref ' + + 'require return sub tie tied unless untie until use wantarray while'; + + this.regexList = [ + { regex: new RegExp('#[^!].*$', 'gm'), css: 'comments' }, + { regex: new RegExp('^\\s*#!.*$', 'gm'), css: 'preprocessor' }, // shebang + { regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: 'string' }, + { regex: SyntaxHighlighter.regexLib.singleQuotedString, css: 'string' }, + { regex: new RegExp('(\\$|@|%)\\w+', 'g'), css: 'variable' }, + { regex: new RegExp(this.getKeywords(funcs), 'gmi'), css: 'functions' }, + { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' } + ]; + + this.forHtmlScript(SyntaxHighlighter.regexLib.phpScriptTags); + } + + Brush.prototype = new SyntaxHighlighter.Highlighter(); + Brush.aliases = ['perl', 'Perl', 'pl']; + + SyntaxHighlighter.brushes.Perl = Brush; + + // CommonJS + typeof(exports) != 'undefined' ? exports.Brush = Brush : null; +})(); diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushPhp.js b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushPhp.js new file mode 100755 index 0000000..95e6e43 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushPhp.js @@ -0,0 +1,88 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +;(function() +{ + // CommonJS + typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null; + + function Brush() + { + var funcs = 'abs acos acosh addcslashes addslashes ' + + 'array_change_key_case array_chunk array_combine array_count_values array_diff '+ + 'array_diff_assoc array_diff_key array_diff_uassoc array_diff_ukey array_fill '+ + 'array_filter array_flip array_intersect array_intersect_assoc array_intersect_key '+ + 'array_intersect_uassoc array_intersect_ukey array_key_exists array_keys array_map '+ + 'array_merge array_merge_recursive array_multisort array_pad array_pop array_product '+ + 'array_push array_rand array_reduce array_reverse array_search array_shift '+ + 'array_slice array_splice array_sum array_udiff array_udiff_assoc '+ + 'array_udiff_uassoc array_uintersect array_uintersect_assoc '+ + 'array_uintersect_uassoc array_unique array_unshift array_values array_walk '+ + 'array_walk_recursive atan atan2 atanh base64_decode base64_encode base_convert '+ + 'basename bcadd bccomp bcdiv bcmod bcmul bindec bindtextdomain bzclose bzcompress '+ + 'bzdecompress bzerrno bzerror bzerrstr bzflush bzopen bzread bzwrite ceil chdir '+ + 'checkdate checkdnsrr chgrp chmod chop chown chr chroot chunk_split class_exists '+ + 'closedir closelog copy cos cosh count count_chars date decbin dechex decoct '+ + 'deg2rad delete ebcdic2ascii echo empty end ereg ereg_replace eregi eregi_replace error_log '+ + 'error_reporting escapeshellarg escapeshellcmd eval exec exit exp explode extension_loaded '+ + 'feof fflush fgetc fgetcsv fgets fgetss file_exists file_get_contents file_put_contents '+ + 'fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype '+ + 'floatval flock floor flush fmod fnmatch fopen fpassthru fprintf fputcsv fputs fread fscanf '+ + 'fseek fsockopen fstat ftell ftok getallheaders getcwd getdate getenv gethostbyaddr gethostbyname '+ + 'gethostbynamel getimagesize getlastmod getmxrr getmygid getmyinode getmypid getmyuid getopt '+ + 'getprotobyname getprotobynumber getrandmax getrusage getservbyname getservbyport gettext '+ + 'gettimeofday gettype glob gmdate gmmktime ini_alter ini_get ini_get_all ini_restore ini_set '+ + 'interface_exists intval ip2long is_a is_array is_bool is_callable is_dir is_double '+ + 'is_executable is_file is_finite is_float is_infinite is_int is_integer is_link is_long '+ + 'is_nan is_null is_numeric is_object is_readable is_real is_resource is_scalar is_soap_fault '+ + 'is_string is_subclass_of is_uploaded_file is_writable is_writeable mkdir mktime nl2br '+ + 'parse_ini_file parse_str parse_url passthru pathinfo print readlink realpath rewind rewinddir rmdir '+ + 'round str_ireplace str_pad str_repeat str_replace str_rot13 str_shuffle str_split '+ + 'str_word_count strcasecmp strchr strcmp strcoll strcspn strftime strip_tags stripcslashes '+ + 'stripos stripslashes stristr strlen strnatcasecmp strnatcmp strncasecmp strncmp strpbrk '+ + 'strpos strptime strrchr strrev strripos strrpos strspn strstr strtok strtolower strtotime '+ + 'strtoupper strtr strval substr substr_compare'; + + var keywords = 'abstract and array as break case catch cfunction class clone const continue declare default die do ' + + 'else elseif enddeclare endfor endforeach endif endswitch endwhile extends final for foreach ' + + 'function include include_once global goto if implements interface instanceof namespace new ' + + 'old_function or private protected public return require require_once static switch ' + + 'throw try use var while xor '; + + var constants = '__FILE__ __LINE__ __METHOD__ __FUNCTION__ __CLASS__'; + + this.regexList = [ + { regex: SyntaxHighlighter.regexLib.singleLineCComments, css: 'comments' }, // one line comments + { regex: SyntaxHighlighter.regexLib.multiLineCComments, css: 'comments' }, // multiline comments + { regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: 'string' }, // double quoted strings + { regex: SyntaxHighlighter.regexLib.singleQuotedString, css: 'string' }, // single quoted strings + { regex: /\$\w+/g, css: 'variable' }, // variables + { regex: new RegExp(this.getKeywords(funcs), 'gmi'), css: 'functions' }, // common functions + { regex: new RegExp(this.getKeywords(constants), 'gmi'), css: 'constants' }, // constants + { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' } // keyword + ]; + + this.forHtmlScript(SyntaxHighlighter.regexLib.phpScriptTags); + }; + + Brush.prototype = new SyntaxHighlighter.Highlighter(); + Brush.aliases = ['php']; + + SyntaxHighlighter.brushes.Php = Brush; + + // CommonJS + typeof(exports) != 'undefined' ? exports.Brush = Brush : null; +})(); diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushPlain.js b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushPlain.js new file mode 100755 index 0000000..9f7d9e9 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushPlain.js @@ -0,0 +1,33 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +;(function() +{ + // CommonJS + typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null; + + function Brush() + { + }; + + Brush.prototype = new SyntaxHighlighter.Highlighter(); + Brush.aliases = ['text', 'plain']; + + SyntaxHighlighter.brushes.Plain = Brush; + + // CommonJS + typeof(exports) != 'undefined' ? exports.Brush = Brush : null; +})(); diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushPowerShell.js b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushPowerShell.js new file mode 100755 index 0000000..0be1752 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushPowerShell.js @@ -0,0 +1,74 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +;(function() +{ + // CommonJS + typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null; + + function Brush() + { + // Contributes by B.v.Zanten, Getronics + // http://confluence.atlassian.com/display/CONFEXT/New+Code+Macro + + var keywords = 'Add-Content Add-History Add-Member Add-PSSnapin Clear(-Content)? Clear-Item ' + + 'Clear-ItemProperty Clear-Variable Compare-Object ConvertFrom-SecureString Convert-Path ' + + 'ConvertTo-Html ConvertTo-SecureString Copy(-Item)? Copy-ItemProperty Export-Alias ' + + 'Export-Clixml Export-Console Export-Csv ForEach(-Object)? Format-Custom Format-List ' + + 'Format-Table Format-Wide Get-Acl Get-Alias Get-AuthenticodeSignature Get-ChildItem Get-Command ' + + 'Get-Content Get-Credential Get-Culture Get-Date Get-EventLog Get-ExecutionPolicy ' + + 'Get-Help Get-History Get-Host Get-Item Get-ItemProperty Get-Location Get-Member ' + + 'Get-PfxCertificate Get-Process Get-PSDrive Get-PSProvider Get-PSSnapin Get-Service ' + + 'Get-TraceSource Get-UICulture Get-Unique Get-Variable Get-WmiObject Group-Object ' + + 'Import-Alias Import-Clixml Import-Csv Invoke-Expression Invoke-History Invoke-Item ' + + 'Join-Path Measure-Command Measure-Object Move(-Item)? Move-ItemProperty New-Alias ' + + 'New-Item New-ItemProperty New-Object New-PSDrive New-Service New-TimeSpan ' + + 'New-Variable Out-Default Out-File Out-Host Out-Null Out-Printer Out-String Pop-Location ' + + 'Push-Location Read-Host Remove-Item Remove-ItemProperty Remove-PSDrive Remove-PSSnapin ' + + 'Remove-Variable Rename-Item Rename-ItemProperty Resolve-Path Restart-Service Resume-Service ' + + 'Select-Object Select-String Set-Acl Set-Alias Set-AuthenticodeSignature Set-Content ' + + 'Set-Date Set-ExecutionPolicy Set-Item Set-ItemProperty Set-Location Set-PSDebug ' + + 'Set-Service Set-TraceSource Set(-Variable)? Sort-Object Split-Path Start-Service ' + + 'Start-Sleep Start-Transcript Stop-Process Stop-Service Stop-Transcript Suspend-Service ' + + 'Tee-Object Test-Path Trace-Command Update-FormatData Update-TypeData Where(-Object)? ' + + 'Write-Debug Write-Error Write(-Host)? Write-Output Write-Progress Write-Verbose Write-Warning'; + var alias = 'ac asnp clc cli clp clv cpi cpp cvpa diff epal epcsv fc fl ' + + 'ft fw gal gc gci gcm gdr ghy gi gl gm gp gps group gsv ' + + 'gsnp gu gv gwmi iex ihy ii ipal ipcsv mi mp nal ndr ni nv oh rdr ' + + 'ri rni rnp rp rsnp rv rvpa sal sasv sc select si sl sleep sort sp ' + + 'spps spsv sv tee cat cd cp h history kill lp ls ' + + 'mount mv popd ps pushd pwd r rm rmdir echo cls chdir del dir ' + + 'erase rd ren type % \\?'; + + this.regexList = [ + { regex: /#.*$/gm, css: 'comments' }, // one line comments + { regex: /\$[a-zA-Z0-9]+\b/g, css: 'value' }, // variables $Computer1 + { regex: /\-[a-zA-Z]+\b/g, css: 'keyword' }, // Operators -not -and -eq + { regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: 'string' }, // strings + { regex: SyntaxHighlighter.regexLib.singleQuotedString, css: 'string' }, // strings + { regex: new RegExp(this.getKeywords(keywords), 'gmi'), css: 'keyword' }, + { regex: new RegExp(this.getKeywords(alias), 'gmi'), css: 'keyword' } + ]; + }; + + Brush.prototype = new SyntaxHighlighter.Highlighter(); + Brush.aliases = ['powershell', 'ps']; + + SyntaxHighlighter.brushes.PowerShell = Brush; + + // CommonJS + typeof(exports) != 'undefined' ? exports.Brush = Brush : null; +})(); diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushPython.js b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushPython.js new file mode 100755 index 0000000..ce77462 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushPython.js @@ -0,0 +1,64 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +;(function() +{ + // CommonJS + typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null; + + function Brush() + { + // Contributed by Gheorghe Milas and Ahmad Sherif + + var keywords = 'and assert break class continue def del elif else ' + + 'except exec finally for from global if import in is ' + + 'lambda not or pass print raise return try yield while'; + + var funcs = '__import__ abs all any apply basestring bin bool buffer callable ' + + 'chr classmethod cmp coerce compile complex delattr dict dir ' + + 'divmod enumerate eval execfile file filter float format frozenset ' + + 'getattr globals hasattr hash help hex id input int intern ' + + 'isinstance issubclass iter len list locals long map max min next ' + + 'object oct open ord pow print property range raw_input reduce ' + + 'reload repr reversed round set setattr slice sorted staticmethod ' + + 'str sum super tuple type type unichr unicode vars xrange zip'; + + var special = 'None True False self cls class_'; + + this.regexList = [ + { regex: SyntaxHighlighter.regexLib.singleLinePerlComments, css: 'comments' }, + { regex: /^\s*@\w+/gm, css: 'decorator' }, + { regex: /(['\"]{3})([^\1])*?\1/gm, css: 'comments' }, + { regex: /"(?!")(?:\.|\\\"|[^\""\n])*"/gm, css: 'string' }, + { regex: /'(?!')(?:\.|(\\\')|[^\''\n])*'/gm, css: 'string' }, + { regex: /\+|\-|\*|\/|\%|=|==/gm, css: 'keyword' }, + { regex: /\b\d+\.?\w*/g, css: 'value' }, + { regex: new RegExp(this.getKeywords(funcs), 'gmi'), css: 'functions' }, + { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' }, + { regex: new RegExp(this.getKeywords(special), 'gm'), css: 'color1' } + ]; + + this.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags); + }; + + Brush.prototype = new SyntaxHighlighter.Highlighter(); + Brush.aliases = ['py', 'python']; + + SyntaxHighlighter.brushes.Python = Brush; + + // CommonJS + typeof(exports) != 'undefined' ? exports.Brush = Brush : null; +})(); diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushRuby.js b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushRuby.js new file mode 100755 index 0000000..ff82130 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushRuby.js @@ -0,0 +1,55 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +;(function() +{ + // CommonJS + typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null; + + function Brush() + { + // Contributed by Erik Peterson. + + var keywords = 'alias and BEGIN begin break case class def define_method defined do each else elsif ' + + 'END end ensure false for if in module new next nil not or raise redo rescue retry return ' + + 'self super then throw true undef unless until when while yield'; + + var builtins = 'Array Bignum Binding Class Continuation Dir Exception FalseClass File::Stat File Fixnum Fload ' + + 'Hash Integer IO MatchData Method Module NilClass Numeric Object Proc Range Regexp String Struct::TMS Symbol ' + + 'ThreadGroup Thread Time TrueClass'; + + this.regexList = [ + { regex: SyntaxHighlighter.regexLib.singleLinePerlComments, css: 'comments' }, // one line comments + { regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: 'string' }, // double quoted strings + { regex: SyntaxHighlighter.regexLib.singleQuotedString, css: 'string' }, // single quoted strings + { regex: /\b[A-Z0-9_]+\b/g, css: 'constants' }, // constants + { regex: /:[a-z][A-Za-z0-9_]*/g, css: 'color2' }, // symbols + { regex: /(\$|@@|@)\w+/g, css: 'variable bold' }, // $global, @instance, and @@class variables + { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' }, // keywords + { regex: new RegExp(this.getKeywords(builtins), 'gm'), css: 'color1' } // builtins + ]; + + this.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags); + }; + + Brush.prototype = new SyntaxHighlighter.Highlighter(); + Brush.aliases = ['ruby', 'rails', 'ror', 'rb']; + + SyntaxHighlighter.brushes.Ruby = Brush; + + // CommonJS + typeof(exports) != 'undefined' ? exports.Brush = Brush : null; +})(); diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushSass.js b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushSass.js new file mode 100755 index 0000000..aa04da0 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushSass.js @@ -0,0 +1,94 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +;(function() +{ + // CommonJS + typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null; + + function Brush() + { + function getKeywordsCSS(str) + { + return '\\b([a-z_]|)' + str.replace(/ /g, '(?=:)\\b|\\b([a-z_\\*]|\\*|)') + '(?=:)\\b'; + }; + + function getValuesCSS(str) + { + return '\\b' + str.replace(/ /g, '(?!-)(?!:)\\b|\\b()') + '\:\\b'; + }; + + var keywords = 'ascent azimuth background-attachment background-color background-image background-position ' + + 'background-repeat background baseline bbox border-collapse border-color border-spacing border-style border-top ' + + 'border-right border-bottom border-left border-top-color border-right-color border-bottom-color border-left-color ' + + 'border-top-style border-right-style border-bottom-style border-left-style border-top-width border-right-width ' + + 'border-bottom-width border-left-width border-width border bottom cap-height caption-side centerline clear clip color ' + + 'content counter-increment counter-reset cue-after cue-before cue cursor definition-src descent direction display ' + + 'elevation empty-cells float font-size-adjust font-family font-size font-stretch font-style font-variant font-weight font ' + + 'height left letter-spacing line-height list-style-image list-style-position list-style-type list-style margin-top ' + + 'margin-right margin-bottom margin-left margin marker-offset marks mathline max-height max-width min-height min-width orphans ' + + 'outline-color outline-style outline-width outline overflow padding-top padding-right padding-bottom padding-left padding page ' + + 'page-break-after page-break-before page-break-inside pause pause-after pause-before pitch pitch-range play-during position ' + + 'quotes right richness size slope src speak-header speak-numeral speak-punctuation speak speech-rate stemh stemv stress ' + + 'table-layout text-align top text-decoration text-indent text-shadow text-transform unicode-bidi unicode-range units-per-em ' + + 'vertical-align visibility voice-family volume white-space widows width widths word-spacing x-height z-index'; + + var values = 'above absolute all always aqua armenian attr aural auto avoid baseline behind below bidi-override black blink block blue bold bolder '+ + 'both bottom braille capitalize caption center center-left center-right circle close-quote code collapse compact condensed '+ + 'continuous counter counters crop cross crosshair cursive dashed decimal decimal-leading-zero digits disc dotted double '+ + 'embed embossed e-resize expanded extra-condensed extra-expanded fantasy far-left far-right fast faster fixed format fuchsia '+ + 'gray green groove handheld hebrew help hidden hide high higher icon inline-table inline inset inside invert italic '+ + 'justify landscape large larger left-side left leftwards level lighter lime line-through list-item local loud lower-alpha '+ + 'lowercase lower-greek lower-latin lower-roman lower low ltr marker maroon medium message-box middle mix move narrower '+ + 'navy ne-resize no-close-quote none no-open-quote no-repeat normal nowrap n-resize nw-resize oblique olive once open-quote outset '+ + 'outside overline pointer portrait pre print projection purple red relative repeat repeat-x repeat-y rgb ridge right right-side '+ + 'rightwards rtl run-in screen scroll semi-condensed semi-expanded separate se-resize show silent silver slower slow '+ + 'small small-caps small-caption smaller soft solid speech spell-out square s-resize static status-bar sub super sw-resize '+ + 'table-caption table-cell table-column table-column-group table-footer-group table-header-group table-row table-row-group teal '+ + 'text-bottom text-top thick thin top transparent tty tv ultra-condensed ultra-expanded underline upper-alpha uppercase upper-latin '+ + 'upper-roman url visible wait white wider w-resize x-fast x-high x-large x-loud x-low x-slow x-small x-soft xx-large xx-small yellow'; + + var fonts = '[mM]onospace [tT]ahoma [vV]erdana [aA]rial [hH]elvetica [sS]ans-serif [sS]erif [cC]ourier mono sans serif'; + + var statements = '!important !default'; + var preprocessor = '@import @extend @debug @warn @if @for @while @mixin @include'; + + var r = SyntaxHighlighter.regexLib; + + this.regexList = [ + { regex: r.multiLineCComments, css: 'comments' }, // multiline comments + { regex: r.singleLineCComments, css: 'comments' }, // singleline comments + { regex: r.doubleQuotedString, css: 'string' }, // double quoted strings + { regex: r.singleQuotedString, css: 'string' }, // single quoted strings + { regex: /\#[a-fA-F0-9]{3,6}/g, css: 'value' }, // html colors + { regex: /\b(-?\d+)(\.\d+)?(px|em|pt|\:|\%|)\b/g, css: 'value' }, // sizes + { regex: /\$\w+/g, css: 'variable' }, // variables + { regex: new RegExp(this.getKeywords(statements), 'g'), css: 'color3' }, // statements + { regex: new RegExp(this.getKeywords(preprocessor), 'g'), css: 'preprocessor' }, // preprocessor + { regex: new RegExp(getKeywordsCSS(keywords), 'gm'), css: 'keyword' }, // keywords + { regex: new RegExp(getValuesCSS(values), 'g'), css: 'value' }, // values + { regex: new RegExp(this.getKeywords(fonts), 'g'), css: 'color1' } // fonts + ]; + }; + + Brush.prototype = new SyntaxHighlighter.Highlighter(); + Brush.aliases = ['sass', 'scss']; + + SyntaxHighlighter.brushes.Sass = Brush; + + // CommonJS + typeof(exports) != 'undefined' ? exports.Brush = Brush : null; +})(); diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushScala.js b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushScala.js new file mode 100755 index 0000000..4b0b6f0 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushScala.js @@ -0,0 +1,51 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +;(function() +{ + // CommonJS + typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null; + + function Brush() + { + // Contributed by Yegor Jbanov and David Bernard. + + var keywords = 'val sealed case def true trait implicit forSome import match object null finally super ' + + 'override try lazy for var catch throw type extends class while with new final yield abstract ' + + 'else do if return protected private this package false'; + + var keyops = '[_:=><%#@]+'; + + this.regexList = [ + { regex: SyntaxHighlighter.regexLib.singleLineCComments, css: 'comments' }, // one line comments + { regex: SyntaxHighlighter.regexLib.multiLineCComments, css: 'comments' }, // multiline comments + { regex: SyntaxHighlighter.regexLib.multiLineSingleQuotedString, css: 'string' }, // multi-line strings + { regex: SyntaxHighlighter.regexLib.multiLineDoubleQuotedString, css: 'string' }, // double-quoted string + { regex: SyntaxHighlighter.regexLib.singleQuotedString, css: 'string' }, // strings + { regex: /0x[a-f0-9]+|\d+(\.\d+)?/gi, css: 'value' }, // numbers + { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' }, // keywords + { regex: new RegExp(keyops, 'gm'), css: 'keyword' } // scala keyword + ]; + } + + Brush.prototype = new SyntaxHighlighter.Highlighter(); + Brush.aliases = ['scala']; + + SyntaxHighlighter.brushes.Scala = Brush; + + // CommonJS + typeof(exports) != 'undefined' ? exports.Brush = Brush : null; +})(); diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushSql.js b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushSql.js new file mode 100755 index 0000000..5c2cd88 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushSql.js @@ -0,0 +1,66 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +;(function() +{ + // CommonJS + typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null; + + function Brush() + { + var funcs = 'abs avg case cast coalesce convert count current_timestamp ' + + 'current_user day isnull left lower month nullif replace right ' + + 'session_user space substring sum system_user upper user year'; + + var keywords = 'absolute action add after alter as asc at authorization begin bigint ' + + 'binary bit by cascade char character check checkpoint close collate ' + + 'column commit committed connect connection constraint contains continue ' + + 'create cube current current_date current_time cursor database date ' + + 'deallocate dec decimal declare default delete desc distinct double drop ' + + 'dynamic else end end-exec escape except exec execute false fetch first ' + + 'float for force foreign forward free from full function global goto grant ' + + 'group grouping having hour ignore index inner insensitive insert instead ' + + 'int integer intersect into is isolation key last level load local max min ' + + 'minute modify move name national nchar next no numeric of off on only ' + + 'open option order out output partial password precision prepare primary ' + + 'prior privileges procedure public read real references relative repeatable ' + + 'restrict return returns revoke rollback rollup rows rule schema scroll ' + + 'second section select sequence serializable set size smallint static ' + + 'statistics table temp temporary then time timestamp to top transaction ' + + 'translation trigger true truncate uncommitted union unique update values ' + + 'varchar varying view when where with work'; + + var operators = 'all and any between cross in join like not null or outer some'; + + this.regexList = [ + { regex: /--(.*)$/gm, css: 'comments' }, // one line and multiline comments + { regex: SyntaxHighlighter.regexLib.multiLineDoubleQuotedString, css: 'string' }, // double quoted strings + { regex: SyntaxHighlighter.regexLib.multiLineSingleQuotedString, css: 'string' }, // single quoted strings + { regex: new RegExp(this.getKeywords(funcs), 'gmi'), css: 'color2' }, // functions + { regex: new RegExp(this.getKeywords(operators), 'gmi'), css: 'color1' }, // operators and such + { regex: new RegExp(this.getKeywords(keywords), 'gmi'), css: 'keyword' } // keyword + ]; + }; + + Brush.prototype = new SyntaxHighlighter.Highlighter(); + Brush.aliases = ['sql']; + + SyntaxHighlighter.brushes.Sql = Brush; + + // CommonJS + typeof(exports) != 'undefined' ? exports.Brush = Brush : null; +})(); + diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushVb.js b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushVb.js new file mode 100755 index 0000000..be845dc --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushVb.js @@ -0,0 +1,56 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +;(function() +{ + // CommonJS + typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null; + + function Brush() + { + var keywords = 'AddHandler AddressOf AndAlso Alias And Ansi As Assembly Auto ' + + 'Boolean ByRef Byte ByVal Call Case Catch CBool CByte CChar CDate ' + + 'CDec CDbl Char CInt Class CLng CObj Const CShort CSng CStr CType ' + + 'Date Decimal Declare Default Delegate Dim DirectCast Do Double Each ' + + 'Else ElseIf End Enum Erase Error Event Exit False Finally For Friend ' + + 'Function Get GetType GoSub GoTo Handles If Implements Imports In ' + + 'Inherits Integer Interface Is Let Lib Like Long Loop Me Mod Module ' + + 'MustInherit MustOverride MyBase MyClass Namespace New Next Not Nothing ' + + 'NotInheritable NotOverridable Object On Option Optional Or OrElse ' + + 'Overloads Overridable Overrides ParamArray Preserve Private Property ' + + 'Protected Public RaiseEvent ReadOnly ReDim REM RemoveHandler Resume ' + + 'Return Select Set Shadows Shared Short Single Static Step Stop String ' + + 'Structure Sub SyncLock Then Throw To True Try TypeOf Unicode Until ' + + 'Variant When While With WithEvents WriteOnly Xor'; + + this.regexList = [ + { regex: /'.*$/gm, css: 'comments' }, // one line comments + { regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: 'string' }, // strings + { regex: /^\s*#.*$/gm, css: 'preprocessor' }, // preprocessor tags like #region and #endregion + { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' } // vb keyword + ]; + + this.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags); + }; + + Brush.prototype = new SyntaxHighlighter.Highlighter(); + Brush.aliases = ['vb', 'vbnet']; + + SyntaxHighlighter.brushes.Vb = Brush; + + // CommonJS + typeof(exports) != 'undefined' ? exports.Brush = Brush : null; +})(); diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushXml.js b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushXml.js new file mode 100755 index 0000000..69d9fd0 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shBrushXml.js @@ -0,0 +1,69 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +;(function() +{ + // CommonJS + typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null; + + function Brush() + { + function process(match, regexInfo) + { + var constructor = SyntaxHighlighter.Match, + code = match[0], + tag = new XRegExp('(<|<)[\\s\\/\\?]*(?[:\\w-\\.]+)', 'xg').exec(code), + result = [] + ; + + if (match.attributes != null) + { + var attributes, + regex = new XRegExp('(? [\\w:\\-\\.]+)' + + '\\s*=\\s*' + + '(? ".*?"|\'.*?\'|\\w+)', + 'xg'); + + while ((attributes = regex.exec(code)) != null) + { + result.push(new constructor(attributes.name, match.index + attributes.index, 'color1')); + result.push(new constructor(attributes.value, match.index + attributes.index + attributes[0].indexOf(attributes.value), 'string')); + } + } + + if (tag != null) + result.push( + new constructor(tag.name, match.index + tag[0].indexOf(tag.name), 'keyword') + ); + + return result; + } + + this.regexList = [ + { regex: new XRegExp('(\\<|<)\\!\\[[\\w\\s]*?\\[(.|\\s)*?\\]\\](\\>|>)', 'gm'), css: 'color2' }, // + { regex: SyntaxHighlighter.regexLib.xmlComments, css: 'comments' }, // + { regex: new XRegExp('(<|<)[\\s\\/\\?]*(\\w+)(?.*?)[\\s\\/\\?]*(>|>)', 'sg'), func: process } + ]; + }; + + Brush.prototype = new SyntaxHighlighter.Highlighter(); + Brush.aliases = ['xml', 'xhtml', 'xslt', 'html']; + + SyntaxHighlighter.brushes.Xml = Brush; + + // CommonJS + typeof(exports) != 'undefined' ? exports.Brush = Brush : null; +})(); diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shCore.js b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shCore.js new file mode 100755 index 0000000..b47b645 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shCore.js @@ -0,0 +1,17 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('K M;I(M)1S 2U("2a\'t 4k M 4K 2g 3l 4G 4H");(6(){6 r(f,e){I(!M.1R(f))1S 3m("3s 15 4R");K a=f.1w;f=M(f.1m,t(f)+(e||""));I(a)f.1w={1m:a.1m,19:a.19?a.19.1a(0):N};H f}6 t(f){H(f.1J?"g":"")+(f.4s?"i":"")+(f.4p?"m":"")+(f.4v?"x":"")+(f.3n?"y":"")}6 B(f,e,a,b){K c=u.L,d,h,g;v=R;5K{O(;c--;){g=u[c];I(a&g.3r&&(!g.2p||g.2p.W(b))){g.2q.12=e;I((h=g.2q.X(f))&&h.P===e){d={3k:g.2b.W(b,h,a),1C:h};1N}}}}5v(i){1S i}5q{v=11}H d}6 p(f,e,a){I(3b.Z.1i)H f.1i(e,a);O(a=a||0;a-1},3d:6(g){e+=g}};c1&&p(e,"")>-1){a=15(J.1m,n.Q.W(t(J),"g",""));n.Q.W(f.1a(e.P),a,6(){O(K c=1;c<14.L-2;c++)I(14[c]===1d)e[c]=1d})}I(J.1w&&J.1w.19)O(K b=1;be.P&&J.12--}H e};I(!D)15.Z.1A=6(f){(f=n.X.W(J,f))&&J.1J&&!f[0].L&&J.12>f.P&&J.12--;H!!f};1r.Z.1C=6(f){M.1R(f)||(f=15(f));I(f.1J){K e=n.1C.1p(J,14);f.12=0;H e}H f.X(J)};1r.Z.Q=6(f,e){K a=M.1R(f),b,c;I(a&&1j e.58()==="3f"&&e.1i("${")===-1&&y)H n.Q.1p(J,14);I(a){I(f.1w)b=f.1w.19}Y f+="";I(1j e==="6")c=n.Q.W(J,f,6(){I(b){14[0]=1f 1r(14[0]);O(K d=0;dd.L-3;){i=1r.Z.1a.W(g,-1)+i;g=1Q.3i(g/10)}H(g?d[g]||"":"$")+i}Y{g=+i;I(g<=d.L-3)H d[g];g=b?p(b,i):-1;H g>-1?d[g+1]:h}})})}I(a&&f.1J)f.12=0;H c};1r.Z.1e=6(f,e){I(!M.1R(f))H n.1e.1p(J,14);K a=J+"",b=[],c=0,d,h;I(e===1d||+e<0)e=5D;Y{e=1Q.3i(+e);I(!e)H[]}O(f=M.3c(f);d=f.X(a);){I(f.12>c){b.U(a.1a(c,d.P));d.L>1&&d.P=e)1N}f.12===d.P&&f.12++}I(c===a.L){I(!n.1A.W(f,"")||h)b.U("")}Y b.U(a.1a(c));H b.L>e?b.1a(0,e):b};M.1h(/\\(\\?#[^)]*\\)/,6(f){H n.1A.W(A,f.2S.1a(f.P+f[0].L))?"":"(?:)"});M.1h(/\\((?!\\?)/,6(){J.19.U(N);H"("});M.1h(/\\(\\?<([$\\w]+)>/,6(f){J.19.U(f[1]);J.2N=R;H"("});M.1h(/\\\\k<([\\w$]+)>/,6(f){K e=p(J.19,f[1]);H e>-1?"\\\\"+(e+1)+(3R(f.2S.3a(f.P+f[0].L))?"":"(?:)"):f[0]});M.1h(/\\[\\^?]/,6(f){H f[0]==="[]"?"\\\\b\\\\B":"[\\\\s\\\\S]"});M.1h(/^\\(\\?([5A]+)\\)/,6(f){J.3d(f[1]);H""});M.1h(/(?:\\s+|#.*)+/,6(f){H n.1A.W(A,f.2S.1a(f.P+f[0].L))?"":"(?:)"},M.1B,6(){H J.2K("x")});M.1h(/\\./,6(){H"[\\\\s\\\\S]"},M.1B,6(){H J.2K("s")})})();1j 2e!="1d"&&(2e.M=M);K 1v=6(){6 r(a,b){a.1l.1i(b)!=-1||(a.1l+=" "+b)}6 t(a){H a.1i("3e")==0?a:"3e"+a}6 B(a){H e.1Y.2A[t(a)]}6 p(a,b,c){I(a==N)H N;K d=c!=R?a.3G:[a.2G],h={"#":"1c",".":"1l"}[b.1o(0,1)]||"3h",g,i;g=h!="3h"?b.1o(1):b.5u();I((a[h]||"").1i(g)!=-1)H a;O(a=0;d&&a\'+c+""});H a}6 n(a,b){a.1e("\\n");O(K c="",d=0;d<50;d++)c+=" ";H a=v(a,6(h){I(h.1i("\\t")==-1)H h;O(K g=0;(g=h.1i("\\t"))!=-1;)h=h.1o(0,g)+c.1o(0,b-g%b)+h.1o(g+1,h.L);H h})}6 x(a){H a.Q(/^\\s+|\\s+$/g,"")}6 D(a,b){I(a.Pb.P)H 1;Y I(a.Lb.L)H 1;H 0}6 y(a,b){6 c(k){H k[0]}O(K d=N,h=[],g=b.2D?b.2D:c;(d=b.1I.X(a))!=N;){K i=g(d,b);I(1j i=="3f")i=[1f e.2L(i,d.P,b.23)];h=h.1O(i)}H h}6 E(a){K b=/(.*)((&1G;|&1y;).*)/;H a.Q(e.3A.3M,6(c){K d="",h=N;I(h=b.X(c)){c=h[1];d=h[2]}H\'
\'+c+""+d})}6 z(){O(K a=1E.36("1k"),b=[],c=0;c<1z 4I="1Z://2y.3L.3K/4L/5L"><3J><4N 1Z-4M="5G-5M" 6K="2O/1z; 6J=6I-8" /><1t>6L 1v<3B 1L="25-6M:6Q,6P,6O,6N-6F;6y-2f:#6x;2f:#6w;25-22:6v;2O-3D:3C;">1v3v 3.0.76 (72 73 3x)1Z://3u.2w/1v70 17 6U 71.6T 6X-3x 6Y 6D.6t 61 60 J 1k, 5Z 5R 5V <2R/>5U 5T 5S!\'}},1Y:{2j:N,2A:{}},1U:{},3A:{6n:/\\/\\*[\\s\\S]*?\\*\\//2c,6m:/\\/\\/.*$/2c,6l:/#.*$/2c,6k:/"([^\\\\"\\n]|\\\\.)*"/g,6o:/\'([^\\\\\'\\n]|\\\\.)*\'/g,6p:1f M(\'"([^\\\\\\\\"]|\\\\\\\\.)*"\',"3z"),6s:1f M("\'([^\\\\\\\\\']|\\\\\\\\.)*\'","3z"),6q:/(&1y;|<)!--[\\s\\S]*?--(&1G;|>)/2c,3M:/\\w+:\\/\\/[\\w-.\\/?%&=:@;]*/g,6a:{18:/(&1y;|<)\\?=?/g,1b:/\\?(&1G;|>)/g},69:{18:/(&1y;|<)%=?/g,1b:/%(&1G;|>)/g},6d:{18:/(&1y;|<)\\s*1k.*?(&1G;|>)/2T,1b:/(&1y;|<)\\/\\s*1k\\s*(&1G;|>)/2T}},16:{1H:6(a){6 b(i,k){H e.16.2o(i,k,e.13.1x[k])}O(K c=\'\',d=e.16.2x,h=d.2X,g=0;g";H c},2o:6(a,b,c){H\'<2W>\'+c+""},2b:6(a){K b=a.1F,c=b.1l||"";b=B(p(b,".20",R).1c);K d=6(h){H(h=15(h+"6f(\\\\w+)").X(c))?h[1]:N}("6g");b&&d&&e.16.2x[d].2B(b);a.3N()},2x:{2X:["21","2P"],21:{1H:6(a){I(a.V("2l")!=R)H"";K b=a.V("1t");H e.16.2o(a,"21",b?b:e.13.1x.21)},2B:6(a){a=1E.6j(t(a.1c));a.1l=a.1l.Q("47","")}},2P:{2B:6(){K a="68=0";a+=", 18="+(31.30-33)/2+", 32="+(31.2Z-2Y)/2+", 30=33, 2Z=2Y";a=a.Q(/^,/,"");a=1P.6Z("","38",a);a.2C();K b=a.1E;b.6W(e.13.1x.37);b.6V();a.2C()}}}},35:6(a,b){K c;I(b)c=[b];Y{c=1E.36(e.13.34);O(K d=[],h=0;h(.*?))\\\\]$"),s=1f M("(?<27>[\\\\w-]+)\\\\s*:\\\\s*(?<1T>[\\\\w-%#]+|\\\\[.*?\\\\]|\\".*?\\"|\'.*?\')\\\\s*;?","g");(j=s.X(k))!=N;){K o=j.1T.Q(/^[\'"]|[\'"]$/g,"");I(o!=N&&m.1A(o)){o=m.X(o);o=o.2V.L>0?o.2V.1e(/\\s*,\\s*/):[]}l[j.27]=o}g={1F:g,1n:C(i,l)};g.1n.1D!=N&&d.U(g)}H d},1M:6(a,b){K c=J.35(a,b),d=N,h=e.13;I(c.L!==0)O(K g=0;g")==o-3){m=m.4h(0,o-3);s=R}l=s?m:l}I((i.1t||"")!="")k.1t=i.1t;k.1D=j;d.2Q(k);b=d.2F(l);I((i.1c||"")!="")b.1c=i.1c;i.2G.74(b,i)}}},2E:6(a){w(1P,"4k",6(){e.1M(a)})}};e.2E=e.2E;e.1M=e.1M;e.2L=6(a,b,c){J.1T=a;J.P=b;J.L=a.L;J.23=c;J.1V=N};e.2L.Z.1q=6(){H J.1T};e.4l=6(a){6 b(j,l){O(K m=0;md)1N;Y I(g.P==c.P&&g.L>c.L)a[b]=N;Y I(g.P>=c.P&&g.P\'+c+""},3Q:6(a,b){K c="",d=a.1e("\\n").L,h=2u(J.V("2i-1s")),g=J.V("2z-1s-2t");I(g==R)g=(h+d-1).1q().L;Y I(3R(g)==R)g=0;O(K i=0;i\'+j+"":"")+i)}H a},4f:6(a){H a?"<4a>"+a+"":""},4b:6(a,b){6 c(l){H(l=l?l.1V||g:g)?l+" ":""}O(K d=0,h="",g=J.V("1D",""),i=0;i|&1y;2R\\s*\\/?&1G;/2T;I(e.13.46==R)b=b.Q(h,"\\n");I(e.13.44==R)b=b.Q(h,"");b=b.1e("\\n");h=/^\\s*/;g=4Q;O(K i=0;i0;i++){K k=b[i];I(x(k).L!=0){k=h.X(k);I(k==N){a=a;1N a}g=1Q.4q(k[0].L,g)}}I(g>0)O(i=0;i\'+(J.V("16")?e.16.1H(J):"")+\'<3Z 5z="0" 5H="0" 5J="0">\'+J.4f(J.V("1t"))+"<3T><3P>"+(1u?\'<2d 1g="1u">\'+J.3Q(a)+"":"")+\'<2d 1g="17">\'+b+""},2F:6(a){I(a===N)a="";J.17=a;K b=J.3Y("T");b.3X=J.1H(a);J.V("16")&&w(p(b,".16"),"5c",e.16.2b);J.V("3V-17")&&w(p(b,".17"),"56",f);H b},2Q:6(a){J.1c=""+1Q.5d(1Q.5n()*5k).1q();e.1Y.2A[t(J.1c)]=J;J.1n=C(e.2v,a||{});I(J.V("2k")==R)J.1n.16=J.1n.1u=11},5j:6(a){a=a.Q(/^\\s+|\\s+$/g,"").Q(/\\s+/g,"|");H"\\\\b(?:"+a+")\\\\b"},5f:6(a){J.28={18:{1I:a.18,23:"1k"},1b:{1I:a.1b,23:"1k"},17:1f M("(?<18>"+a.18.1m+")(?<17>.*?)(?<1b>"+a.1b.1m+")","5o")}}};H e}();1j 2e!="1d"&&(2e.1v=1v);',62,441,'||||||function|||||||||||||||||||||||||||||||||||||return|if|this|var|length|XRegExp|null|for|index|replace|true||div|push|getParam|call|exec|else|prototype||false|lastIndex|config|arguments|RegExp|toolbar|code|left|captureNames|slice|right|id|undefined|split|new|class|addToken|indexOf|typeof|script|className|source|params|substr|apply|toString|String|line|title|gutter|SyntaxHighlighter|_xregexp|strings|lt|html|test|OUTSIDE_CLASS|match|brush|document|target|gt|getHtml|regex|global|join|style|highlight|break|concat|window|Math|isRegExp|throw|value|brushes|brushName|space|alert|vars|http|syntaxhighlighter|expandSource|size|css|case|font|Fa|name|htmlScript|dA|can|handler|gm|td|exports|color|in|href|first|discoveredBrushes|light|collapse|object|cache|getButtonHtml|trigger|pattern|getLineHtml|nbsp|numbers|parseInt|defaults|com|items|www|pad|highlighters|execute|focus|func|all|getDiv|parentNode|navigator|INSIDE_CLASS|regexList|hasFlag|Match|useScriptTags|hasNamedCapture|text|help|init|br|input|gi|Error|values|span|list|250|height|width|screen|top|500|tagName|findElements|getElementsByTagName|aboutDialog|_blank|appendChild|charAt|Array|copyAsGlobal|setFlag|highlighter_|string|attachEvent|nodeName|floor|backref|output|the|TypeError|sticky|Za|iterate|freezeTokens|scope|type|textarea|alexgorbatchev|version|margin|2010|005896|gs|regexLib|body|center|align|noBrush|require|childNodes|DTD|xhtml1|head|org|w3|url|preventDefault|container|tr|getLineNumbersHtml|isNaN|userAgent|tbody|isLineHighlighted|quick|void|innerHTML|create|table|links|auto|smart|tab|stripBrs|tabs|bloggerMode|collapsed|plain|getCodeLinesHtml|caption|getMatchesHtml|findMatches|figureOutLineNumbers|removeNestedMatches|getTitleHtml|brushNotHtmlScript|substring|createElement|Highlighter|load|HtmlScript|Brush|pre|expand|multiline|min|Can|ignoreCase|find|blur|extended|toLowerCase|aliases|addEventListener|innerText|textContent|wasn|select|createTextNode|removeChild|option|same|frame|xmlns|dtd|twice|1999|equiv|meta|htmlscript|transitional|1E3|expected|PUBLIC|DOCTYPE|on|W3C|XHTML|TR|EN|Transitional||configured|srcElement|Object|after|run|dblclick|matchChain|valueOf|constructor|default|switch|click|round|execAt|forHtmlScript|token|gimy|functions|getKeywords|1E6|escape|within|random|sgi|another|finally|supply|MSIE|ie|toUpperCase|catch|returnValue|definition|event|border|imsx|constructing|one|Infinity|from|when|Content|cellpadding|flags|cellspacing|try|xhtml|Type|spaces|2930402|hosted_button_id|lastIndexOf|donate|active|development|keep|to|xclick|_s|Xml|please|like|you|paypal|cgi|cmd|webscr|bin|highlighted|scrollbars|aspScriptTags|phpScriptTags|sort|max|scriptScriptTags|toolbar_item|_|command|command_|number|getElementById|doubleQuotedString|singleLinePerlComments|singleLineCComments|multiLineCComments|singleQuotedString|multiLineDoubleQuotedString|xmlComments|alt|multiLineSingleQuotedString|If|https|1em|000|fff|background|5em|xx|bottom|75em|Gorbatchev|large|serif|CDATA|continue|utf|charset|content|About|family|sans|Helvetica|Arial|Geneva|3em|nogutter|Copyright|syntax|close|write|2004|Alex|open|JavaScript|highlighter|July|02|replaceChild|offset|83'.split('|'),0,{})) diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shLegacy.js b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shLegacy.js new file mode 100755 index 0000000..6d9fd4d --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shLegacy.js @@ -0,0 +1,17 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('3 u={8:{}};u.8={A:4(c,k,l,m,n,o){4 d(a,b){2 a!=1?a:b}4 f(a){2 a!=1?a.E():1}c=c.I(":");3 g=c[0],e={};t={"r":K};M=1;5=8.5;9(3 j R c)e[c[j]]="r";k=f(d(k,5.C));l=f(d(l,5.D));m=f(d(m,5.s));o=f(d(o,5.Q));n=f(d(n,5["x-y"]));2{P:g,C:d(t[e.O],k),D:d(t[e.N],l),s:d({"r":r}[e.s],m),"x-y":d(4(a,b){9(3 h=T S("^"+b+"\\\\[(?\\\\w+)\\\\]$","U"),i=1,p=0;p tags to the document body + for (i = 0; i < elements.length; i++) + { + var url = brushes[elements[i].params.brush]; + + if (!url) + continue; + + scripts[url] = false; + loadScript(url); + } + + function loadScript(url) + { + var script = document.createElement('script'), + done = false + ; + + script.src = url; + script.type = 'text/javascript'; + script.language = 'javascript'; + script.onload = script.onreadystatechange = function() + { + if (!done && (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete')) + { + done = true; + scripts[url] = true; + checkAll(); + + // Handle memory leak in IE + script.onload = script.onreadystatechange = null; + script.parentNode.removeChild(script); + } + }; + + // sync way of adding script tags to the page + document.body.appendChild(script); + }; + + function checkAll() + { + for(var url in scripts) + if (scripts[url] == false) + return; + + if (allCalled) + SyntaxHighlighter.highlight(allParams); + }; +}; + +})(); diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/src/shCore.js b/clipper/Documentation/Scripts/SyntaxHighlighter/src/shCore.js new file mode 100755 index 0000000..4214763 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/src/shCore.js @@ -0,0 +1,1721 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +// +// Begin anonymous function. This is used to contain local scope variables without polutting global scope. +// +var SyntaxHighlighter = function() { + +// CommonJS +if (typeof(require) != 'undefined' && typeof(XRegExp) == 'undefined') +{ + XRegExp = require('XRegExp').XRegExp; +} + +// Shortcut object which will be assigned to the SyntaxHighlighter variable. +// This is a shorthand for local reference in order to avoid long namespace +// references to SyntaxHighlighter.whatever... +var sh = { + defaults : { + /** Additional CSS class names to be added to highlighter elements. */ + 'class-name' : '', + + /** First line number. */ + 'first-line' : 1, + + /** + * Pads line numbers. Possible values are: + * + * false - don't pad line numbers. + * true - automaticaly pad numbers with minimum required number of leading zeroes. + * [int] - length up to which pad line numbers. + */ + 'pad-line-numbers' : false, + + /** Lines to highlight. */ + 'highlight' : null, + + /** Title to be displayed above the code block. */ + 'title' : null, + + /** Enables or disables smart tabs. */ + 'smart-tabs' : true, + + /** Gets or sets tab size. */ + 'tab-size' : 4, + + /** Enables or disables gutter. */ + 'gutter' : true, + + /** Enables or disables toolbar. */ + 'toolbar' : true, + + /** Enables quick code copy and paste from double click. */ + 'quick-code' : true, + + /** Forces code view to be collapsed. */ + 'collapse' : false, + + /** Enables or disables automatic links. */ + 'auto-links' : true, + + /** Gets or sets light mode. Equavalent to turning off gutter and toolbar. */ + 'light' : false, + + 'html-script' : false + }, + + config : { + space : ' ', + + /** Enables use of tags. */ + scriptScriptTags : { left: /(<|<)\s*script.*?(>|>)/gi, right: /(<|<)\/\s*script\s*(>|>)/gi } + }, + + toolbar: { + /** + * Generates HTML markup for the toolbar. + * @param {Highlighter} highlighter Highlighter instance. + * @return {String} Returns HTML markup. + */ + getHtml: function(highlighter) + { + var html = '
', + items = sh.toolbar.items, + list = items.list + ; + + function defaultGetHtml(highlighter, name) + { + return sh.toolbar.getButtonHtml(highlighter, name, sh.config.strings[name]); + }; + + for (var i = 0; i < list.length; i++) + html += (items[list[i]].getHtml || defaultGetHtml)(highlighter, list[i]); + + html += '
'; + + return html; + }, + + /** + * Generates HTML markup for a regular button in the toolbar. + * @param {Highlighter} highlighter Highlighter instance. + * @param {String} commandName Command name that would be executed. + * @param {String} label Label text to display. + * @return {String} Returns HTML markup. + */ + getButtonHtml: function(highlighter, commandName, label) + { + return '' + label + '' + ; + }, + + /** + * Event handler for a toolbar anchor. + */ + handler: function(e) + { + var target = e.target, + className = target.className || '' + ; + + function getValue(name) + { + var r = new RegExp(name + '_(\\w+)'), + match = r.exec(className) + ; + + return match ? match[1] : null; + }; + + var highlighter = getHighlighterById(findParentElement(target, '.syntaxhighlighter').id), + commandName = getValue('command') + ; + + // execute the toolbar command + if (highlighter && commandName) + sh.toolbar.items[commandName].execute(highlighter); + + // disable default A click behaviour + e.preventDefault(); + }, + + /** Collection of toolbar items. */ + items : { + // Ordered lis of items in the toolbar. Can't expect `for (var n in items)` to be consistent. + list: ['expandSource', 'help'], + + expandSource: { + getHtml: function(highlighter) + { + if (highlighter.getParam('collapse') != true) + return ''; + + var title = highlighter.getParam('title'); + return sh.toolbar.getButtonHtml(highlighter, 'expandSource', title ? title : sh.config.strings.expandSource); + }, + + execute: function(highlighter) + { + var div = getHighlighterDivById(highlighter.id); + removeClass(div, 'collapsed'); + } + }, + + /** Command to display the about dialog window. */ + help: { + execute: function(highlighter) + { + var wnd = popup('', '_blank', 500, 250, 'scrollbars=0'), + doc = wnd.document + ; + + doc.write(sh.config.strings.aboutDialog); + doc.close(); + wnd.focus(); + } + } + } + }, + + /** + * Finds all elements on the page which should be processes by SyntaxHighlighter. + * + * @param {Object} globalParams Optional parameters which override element's + * parameters. Only used if element is specified. + * + * @param {Object} element Optional element to highlight. If none is + * provided, all elements in the current document + * are returned which qualify. + * + * @return {Array} Returns list of { target: DOMElement, params: Object } objects. + */ + findElements: function(globalParams, element) + { + var elements = element ? [element] : toArray(document.getElementsByTagName(sh.config.tagName)), + conf = sh.config, + result = [] + ; + + // support for \ No newline at end of file diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/tests/brushes_tests.html b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/brushes_tests.html new file mode 100755 index 0000000..e1e2068 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/brushes_tests.html @@ -0,0 +1,136 @@ + + + + + SyntaxHighlighter Brushes Tests + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/001_basic.html b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/001_basic.html new file mode 100755 index 0000000..1d57334 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/001_basic.html @@ -0,0 +1,42 @@ +
+	/**
+	 * multiline comment 
+	 */
+	
+	text
+	
+	// single line comment
+	
+	text
+	
+	"string" text 'string' text "string"
+	"string with \" escape" text 'string with \' escape' text "string with \" escape"
+	
+	var code = '\
+		function helloWorld()\
+		{\
+			// this is great!\
+			for(var i = 0; i <= 1; i++)\
+				alert("yay");\
+		}\
+		';
+
+ + diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/002_brushes.html b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/002_brushes.html new file mode 100755 index 0000000..e9c64e2 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/002_brushes.html @@ -0,0 +1,50 @@ +
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
+ + diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/003_script_tag.html b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/003_script_tag.html new file mode 100755 index 0000000..9b44292 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/003_script_tag.html @@ -0,0 +1,42 @@ +
+ +
+ + diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/004_url_parsing.html b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/004_url_parsing.html new file mode 100755 index 0000000..d489a66 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/004_url_parsing.html @@ -0,0 +1,43 @@ +
+/**
+ * Please see <http://www.alexgorbatchev.come/?test=1&y=2>
+ */
+var home = "http://www.alexgorbatchev.come/?test=1&y=2;test/1/2/3;";
+// < http://www.gnu.org/licenses/?test=1&y=2 >.
+
+// Test embedded URLs that terminate at a left angle bracket.
+// See bug #28: http://bitbucket.org/alexg/syntaxhighlighter/issue/28/
+"http://www.example.com/song2.mp3";
+
+ + \ No newline at end of file diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/005_no_gutter.html b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/005_no_gutter.html new file mode 100755 index 0000000..6e6b1be --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/005_no_gutter.html @@ -0,0 +1,33 @@ +
+			public Image getImage(URL url, String name) {
+				try {
+					/*
+					   Regular multiline comment.
+					*/
+				    return getImage(new URL(url, name));
+				} catch (MalformedURLException e) {
+				    return null;
+				}
+			}
+
+ + diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/006_pad_line_numbers.html b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/006_pad_line_numbers.html new file mode 100755 index 0000000..8ebdd55 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/006_pad_line_numbers.html @@ -0,0 +1,39 @@ +
+/**
+ * Returns an Image object that can then be painted on the screen. 
+ * The url argument must specify an absolute {@link URL}. The name
+ * argument is a specifier that is relative to the url argument. 
+ *
+ * @param  url  an absolute URL giving the base location of the image
+ * @param  name the location of the image, relative to the url argument
+ * @return      the image at the specified URL
+ * @see         Image
+ */
+
+ + diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/007_collapse.html b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/007_collapse.html new file mode 100755 index 0000000..2643bb5 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/007_collapse.html @@ -0,0 +1,60 @@ +
+	/**
+	 * Returns an Image object that can then be painted on the screen. 
+	 * The url argument must specify an absolute {@link URL}. The name
+	 * argument is a specifier that is relative to the url argument. 
+	 *
+	 * @param  url  an absolute URL giving the base location of the image
+	 * @param  name the location of the image, relative to the url argument
+	 * @return      the image at the specified URL
+	 * @see         Image
+	 */
+
+ +
+	/**
+	 * Returns an Image object that can then be painted on the screen. 
+	 * The url argument must specify an absolute {@link URL}. The name
+	 * argument is a specifier that is relative to the url argument. 
+	 *
+	 * @param  url  an absolute URL giving the base location of the image
+	 * @param  name the location of the image, relative to the url argument
+	 * @return      the image at the specified URL
+	 * @see         Image
+	 */
+
+ + diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/007_collapse_interaction.html b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/007_collapse_interaction.html new file mode 100755 index 0000000..ea72046 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/007_collapse_interaction.html @@ -0,0 +1,44 @@ + diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/008_first_line.html b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/008_first_line.html new file mode 100755 index 0000000..169dc38 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/008_first_line.html @@ -0,0 +1,29 @@ +
+	partial class Foo
+	{
+		function test()
+		{
+			yield return;
+		}
+	}
+
+ + diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/009_class_name.html b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/009_class_name.html new file mode 100755 index 0000000..f2437d5 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/009_class_name.html @@ -0,0 +1,32 @@ +
+	public Image getImage(URL url, String name) {
+		try {
+			/*
+			   Regular multiline comment.
+			*/
+		    return getImage(new URL(url, name));
+		} catch (MalformedURLException e) {
+		    return null;
+		}
+	}
+
+ + diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/010_highlight.html b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/010_highlight.html new file mode 100755 index 0000000..64b6613 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/010_highlight.html @@ -0,0 +1,70 @@ +
+	public function validateStrongPassword(password:String):Boolean
+	{
+		if (password == null || password.length <= 0)
+		{
+			return false;
+		}
+		
+		return STRONG_PASSWORD_PATTERN.test(password);
+	}
+
+ + + diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/011_smart_tabs.html b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/011_smart_tabs.html new file mode 100755 index 0000000..d6d62fc --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/011_smart_tabs.html @@ -0,0 +1,98 @@ +
+	the		words	in		this	paragraph
+	should	look	like	they	are
+	evenly	spaced	between	columns
+
+ +
+	the	words	in	this	paragraph
+	should	look	like	they	are
+	evenly	spaced	between	columns
+
+ +
+	the		words	in		this	paragraph
+	should	look	out		of		whack
+	because	smart	tabs	are		disabled
+
+ + diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/012_server_side.html b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/012_server_side.html new file mode 100755 index 0000000..1bb4217 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/012_server_side.html @@ -0,0 +1,35 @@ + + +
+
+ + \ No newline at end of file diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/013_html_script.html b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/013_html_script.html new file mode 100755 index 0000000..c0a1201 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/013_html_script.html @@ -0,0 +1,34 @@ +
+<hello>
+	<%
+		package free.cafekiwi.gotapi;
+	%>
+</hello>
+
+
+<%= print(); %>
+
+ + \ No newline at end of file diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/014_legacy.html b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/014_legacy.html new file mode 100755 index 0000000..eb4343e --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/014_legacy.html @@ -0,0 +1,70 @@ +
basic check
+
no toolbar
+
no gutter
+
collapsed
+
first line
+ + diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/tests/commonjs_tests.js b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/commonjs_tests.js new file mode 100755 index 0000000..cda8162 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/commonjs_tests.js @@ -0,0 +1,52 @@ +/** + * This is a CommonJS compatibility test. You can run this file with node. + */ +require.paths.unshift(__dirname + '/../scripts'); + +var sys = require('sys'), + shSyntaxHighlighter = require('shCore').SyntaxHighlighter, + code = 'test', + brushes = [ + 'AS3', + 'AppleScript', + 'Bash', + 'CSharp', + 'ColdFusion', + 'Cpp', + 'Css', + 'Delphi', + 'Diff', + 'Erlang', + 'Groovy', + 'JScript', + 'Java', + 'JavaFX', + 'Perl', + 'Php', + 'Plain', + 'PowerShell', + 'Python', + 'Ruby', + 'Sass', + 'Scala', + 'Sql', + 'Vb', + 'Xml' + ] + ; + +brushes.sort(); + +for (var i = 0; i < brushes.length; i++) +{ + var name = brushes[i], + brush = require('shBrush' + name).Brush + ; + + brush = new brush(); + brush.init({ toolbar: false }); + + var result = brush.getHtml(code); + + sys.puts(name + (result != null ? ': ok' : ': NOT OK')); +} diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/tests/js/jquery-1.4.2.js b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/js/jquery-1.4.2.js new file mode 100755 index 0000000..e414a7e --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/js/jquery-1.4.2.js @@ -0,0 +1,6240 @@ +/*! + * jQuery JavaScript Library v1.4.2 + * http://jquery.com/ + * + * Copyright 2010, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2010, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Sat Feb 13 22:33:48 2010 -0500 + */ +(function( window, undefined ) { + +// Define a local copy of jQuery +var jQuery = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' + return new jQuery.fn.init( selector, context ); + }, + + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, + + // Map over the $ in case of overwrite + _$ = window.$, + + // Use the correct document accordingly with window argument (sandbox) + document = window.document, + + // A central reference to the root jQuery(document) + rootjQuery, + + // A simple way to check for HTML strings or ID strings + // (both of which we optimize for) + quickExpr = /^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/, + + // Is it a simple selector + isSimple = /^.[^:#\[\.,]*$/, + + // Check if a string has a non-whitespace character in it + rnotwhite = /\S/, + + // Used for trimming whitespace + rtrim = /^(\s|\u00A0)+|(\s|\u00A0)+$/g, + + // Match a standalone tag + rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/, + + // Keep a UserAgent string for use with jQuery.browser + userAgent = navigator.userAgent, + + // For matching the engine and version of the browser + browserMatch, + + // Has the ready events already been bound? + readyBound = false, + + // The functions to execute on DOM ready + readyList = [], + + // The ready event handler + DOMContentLoaded, + + // Save a reference to some core methods + toString = Object.prototype.toString, + hasOwnProperty = Object.prototype.hasOwnProperty, + push = Array.prototype.push, + slice = Array.prototype.slice, + indexOf = Array.prototype.indexOf; + +jQuery.fn = jQuery.prototype = { + init: function( selector, context ) { + var match, elem, ret, doc; + + // Handle $(""), $(null), or $(undefined) + if ( !selector ) { + return this; + } + + // Handle $(DOMElement) + if ( selector.nodeType ) { + this.context = this[0] = selector; + this.length = 1; + return this; + } + + // The body element only exists once, optimize finding it + if ( selector === "body" && !context ) { + this.context = document; + this[0] = document.body; + this.selector = "body"; + this.length = 1; + return this; + } + + // Handle HTML strings + if ( typeof selector === "string" ) { + // Are we dealing with HTML string or an ID? + match = quickExpr.exec( selector ); + + // Verify a match, and that no context was specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) { + doc = (context ? context.ownerDocument || context : document); + + // If a single string is passed in and it's a single tag + // just do a createElement and skip the rest + ret = rsingleTag.exec( selector ); + + if ( ret ) { + if ( jQuery.isPlainObject( context ) ) { + selector = [ document.createElement( ret[1] ) ]; + jQuery.fn.attr.call( selector, context, true ); + + } else { + selector = [ doc.createElement( ret[1] ) ]; + } + + } else { + ret = buildFragment( [ match[1] ], [ doc ] ); + selector = (ret.cacheable ? ret.fragment.cloneNode(true) : ret.fragment).childNodes; + } + + return jQuery.merge( this, selector ); + + // HANDLE: $("#id") + } else { + elem = document.getElementById( match[2] ); + + if ( elem ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id !== match[2] ) { + return rootjQuery.find( selector ); + } + + // Otherwise, we inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $("TAG") + } else if ( !context && /^\w+$/.test( selector ) ) { + this.selector = selector; + this.context = document; + selector = document.getElementsByTagName( selector ); + return jQuery.merge( this, selector ); + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return (context || rootjQuery).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return jQuery( context ).find( selector ); + } + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return rootjQuery.ready( selector ); + } + + if (selector.selector !== undefined) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }, + + // Start with an empty selector + selector: "", + + // The current version of jQuery being used + jquery: "1.4.2", + + // The default length of a jQuery object is 0 + length: 0, + + // The number of elements contained in the matched element set + size: function() { + return this.length; + }, + + toArray: function() { + return slice.call( this, 0 ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num == null ? + + // Return a 'clean' array + this.toArray() : + + // Return just the object + ( num < 0 ? this.slice(num)[ 0 ] : this[ num ] ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems, name, selector ) { + // Build a new jQuery matched element set + var ret = jQuery(); + + if ( jQuery.isArray( elems ) ) { + push.apply( ret, elems ); + + } else { + jQuery.merge( ret, elems ); + } + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + ret.context = this.context; + + if ( name === "find" ) { + ret.selector = this.selector + (this.selector ? " " : "") + selector; + } else if ( name ) { + ret.selector = this.selector + "." + name + "(" + selector + ")"; + } + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + return jQuery.each( this, callback, args ); + }, + + ready: function( fn ) { + // Attach the listeners + jQuery.bindReady(); + + // If the DOM is already ready + if ( jQuery.isReady ) { + // Execute the function immediately + fn.call( document, jQuery ); + + // Otherwise, remember the function for later + } else if ( readyList ) { + // Add the function to the wait list + readyList.push( fn ); + } + + return this; + }, + + eq: function( i ) { + return i === -1 ? + this.slice( i ) : + this.slice( i, +i + 1 ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ), + "slice", slice.call(arguments).join(",") ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map(this, function( elem, i ) { + return callback.call( elem, i, elem ); + })); + }, + + end: function() { + return this.prevObject || jQuery(null); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: [].sort, + splice: [].splice +}; + +// Give the init function the jQuery prototype for later instantiation +jQuery.fn.init.prototype = jQuery.fn; + +jQuery.extend = jQuery.fn.extend = function() { + // copy reference to target object + var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options, name, src, copy; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction(target) ) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if ( length === i ) { + target = this; + --i; + } + + for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) { + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging object literal values or arrays + if ( deep && copy && ( jQuery.isPlainObject(copy) || jQuery.isArray(copy) ) ) { + var clone = src && ( jQuery.isPlainObject(src) || jQuery.isArray(src) ) ? src + : jQuery.isArray(copy) ? [] : {}; + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend({ + noConflict: function( deep ) { + window.$ = _$; + + if ( deep ) { + window.jQuery = _jQuery; + } + + return jQuery; + }, + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // Handle when the DOM is ready + ready: function() { + // Make sure that the DOM is not already loaded + if ( !jQuery.isReady ) { + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( !document.body ) { + return setTimeout( jQuery.ready, 13 ); + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If there are functions bound, to execute + if ( readyList ) { + // Execute all of them + var fn, i = 0; + while ( (fn = readyList[ i++ ]) ) { + fn.call( document, jQuery ); + } + + // Reset the list of functions + readyList = null; + } + + // Trigger any bound ready events + if ( jQuery.fn.triggerHandler ) { + jQuery( document ).triggerHandler( "ready" ); + } + } + }, + + bindReady: function() { + if ( readyBound ) { + return; + } + + readyBound = true; + + // Catch cases where $(document).ready() is called after the + // browser event has already occurred. + if ( document.readyState === "complete" ) { + return jQuery.ready(); + } + + // Mozilla, Opera and webkit nightlies currently support this event + if ( document.addEventListener ) { + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", jQuery.ready, false ); + + // If IE event model is used + } else if ( document.attachEvent ) { + // ensure firing before onload, + // maybe late but safe also for iframes + document.attachEvent("onreadystatechange", DOMContentLoaded); + + // A fallback to window.onload, that will always work + window.attachEvent( "onload", jQuery.ready ); + + // If IE and not a frame + // continually check to see if the document is ready + var toplevel = false; + + try { + toplevel = window.frameElement == null; + } catch(e) {} + + if ( document.documentElement.doScroll && toplevel ) { + doScrollCheck(); + } + } + }, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + return toString.call(obj) === "[object Function]"; + }, + + isArray: function( obj ) { + return toString.call(obj) === "[object Array]"; + }, + + isPlainObject: function( obj ) { + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if ( !obj || toString.call(obj) !== "[object Object]" || obj.nodeType || obj.setInterval ) { + return false; + } + + // Not own constructor property must be Object + if ( obj.constructor + && !hasOwnProperty.call(obj, "constructor") + && !hasOwnProperty.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + + var key; + for ( key in obj ) {} + + return key === undefined || hasOwnProperty.call( obj, key ); + }, + + isEmptyObject: function( obj ) { + for ( var name in obj ) { + return false; + } + return true; + }, + + error: function( msg ) { + throw msg; + }, + + parseJSON: function( data ) { + if ( typeof data !== "string" || !data ) { + return null; + } + + // Make sure leading/trailing whitespace is removed (IE can't handle it) + data = jQuery.trim( data ); + + // Make sure the incoming data is actual JSON + // Logic borrowed from http://json.org/json2.js + if ( /^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@") + .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]") + .replace(/(?:^|:|,)(?:\s*\[)+/g, "")) ) { + + // Try to use the native JSON parser first + return window.JSON && window.JSON.parse ? + window.JSON.parse( data ) : + (new Function("return " + data))(); + + } else { + jQuery.error( "Invalid JSON: " + data ); + } + }, + + noop: function() {}, + + // Evalulates a script in a global context + globalEval: function( data ) { + if ( data && rnotwhite.test(data) ) { + // Inspired by code by Andrea Giammarchi + // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html + var head = document.getElementsByTagName("head")[0] || document.documentElement, + script = document.createElement("script"); + + script.type = "text/javascript"; + + if ( jQuery.support.scriptEval ) { + script.appendChild( document.createTextNode( data ) ); + } else { + script.text = data; + } + + // Use insertBefore instead of appendChild to circumvent an IE6 bug. + // This arises when a base node is used (#2709). + head.insertBefore( script, head.firstChild ); + head.removeChild( script ); + } + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase(); + }, + + // args is for internal usage only + each: function( object, callback, args ) { + var name, i = 0, + length = object.length, + isObj = length === undefined || jQuery.isFunction(object); + + if ( args ) { + if ( isObj ) { + for ( name in object ) { + if ( callback.apply( object[ name ], args ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.apply( object[ i++ ], args ) === false ) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if ( isObj ) { + for ( name in object ) { + if ( callback.call( object[ name ], name, object[ name ] ) === false ) { + break; + } + } + } else { + for ( var value = object[0]; + i < length && callback.call( value, i, value ) !== false; value = object[++i] ) {} + } + } + + return object; + }, + + trim: function( text ) { + return (text || "").replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( array, results ) { + var ret = results || []; + + if ( array != null ) { + // The window, strings (and functions) also have 'length' + // The extra typeof function check is to prevent crashes + // in Safari 2 (See: #3039) + if ( array.length == null || typeof array === "string" || jQuery.isFunction(array) || (typeof array !== "function" && array.setInterval) ) { + push.call( ret, array ); + } else { + jQuery.merge( ret, array ); + } + } + + return ret; + }, + + inArray: function( elem, array ) { + if ( array.indexOf ) { + return array.indexOf( elem ); + } + + for ( var i = 0, length = array.length; i < length; i++ ) { + if ( array[ i ] === elem ) { + return i; + } + } + + return -1; + }, + + merge: function( first, second ) { + var i = first.length, j = 0; + + if ( typeof second.length === "number" ) { + for ( var l = second.length; j < l; j++ ) { + first[ i++ ] = second[ j ]; + } + + } else { + while ( second[j] !== undefined ) { + first[ i++ ] = second[ j++ ]; + } + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, inv ) { + var ret = []; + + // Go through the array, only saving the items + // that pass the validator function + for ( var i = 0, length = elems.length; i < length; i++ ) { + if ( !inv !== !callback( elems[ i ], i ) ) { + ret.push( elems[ i ] ); + } + } + + return ret; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var ret = [], value; + + // Go through the array, translating each of the items to their + // new value (or values). + for ( var i = 0, length = elems.length; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + + return ret.concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + proxy: function( fn, proxy, thisObject ) { + if ( arguments.length === 2 ) { + if ( typeof proxy === "string" ) { + thisObject = fn; + fn = thisObject[ proxy ]; + proxy = undefined; + + } else if ( proxy && !jQuery.isFunction( proxy ) ) { + thisObject = proxy; + proxy = undefined; + } + } + + if ( !proxy && fn ) { + proxy = function() { + return fn.apply( thisObject || this, arguments ); + }; + } + + // Set the guid of unique handler to the same of original handler, so it can be removed + if ( fn ) { + proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++; + } + + // So proxy can be declared as an argument + return proxy; + }, + + // Use of jQuery.browser is frowned upon. + // More details: http://docs.jquery.com/Utilities/jQuery.browser + uaMatch: function( ua ) { + ua = ua.toLowerCase(); + + var match = /(webkit)[ \/]([\w.]+)/.exec( ua ) || + /(opera)(?:.*version)?[ \/]([\w.]+)/.exec( ua ) || + /(msie) ([\w.]+)/.exec( ua ) || + !/compatible/.test( ua ) && /(mozilla)(?:.*? rv:([\w.]+))?/.exec( ua ) || + []; + + return { browser: match[1] || "", version: match[2] || "0" }; + }, + + browser: {} +}); + +browserMatch = jQuery.uaMatch( userAgent ); +if ( browserMatch.browser ) { + jQuery.browser[ browserMatch.browser ] = true; + jQuery.browser.version = browserMatch.version; +} + +// Deprecated, use jQuery.browser.webkit instead +if ( jQuery.browser.webkit ) { + jQuery.browser.safari = true; +} + +if ( indexOf ) { + jQuery.inArray = function( elem, array ) { + return indexOf.call( array, elem ); + }; +} + +// All jQuery objects should point back to these +rootjQuery = jQuery(document); + +// Cleanup functions for the document ready method +if ( document.addEventListener ) { + DOMContentLoaded = function() { + document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + jQuery.ready(); + }; + +} else if ( document.attachEvent ) { + DOMContentLoaded = function() { + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( document.readyState === "complete" ) { + document.detachEvent( "onreadystatechange", DOMContentLoaded ); + jQuery.ready(); + } + }; +} + +// The DOM ready check for Internet Explorer +function doScrollCheck() { + if ( jQuery.isReady ) { + return; + } + + try { + // If IE is used, use the trick by Diego Perini + // http://javascript.nwbox.com/IEContentLoaded/ + document.documentElement.doScroll("left"); + } catch( error ) { + setTimeout( doScrollCheck, 1 ); + return; + } + + // and execute any waiting functions + jQuery.ready(); +} + +function evalScript( i, elem ) { + if ( elem.src ) { + jQuery.ajax({ + url: elem.src, + async: false, + dataType: "script" + }); + } else { + jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" ); + } + + if ( elem.parentNode ) { + elem.parentNode.removeChild( elem ); + } +} + +// Mutifunctional method to get and set values to a collection +// The value/s can be optionally by executed if its a function +function access( elems, key, value, exec, fn, pass ) { + var length = elems.length; + + // Setting many attributes + if ( typeof key === "object" ) { + for ( var k in key ) { + access( elems, k, key[k], exec, fn, value ); + } + return elems; + } + + // Setting one attribute + if ( value !== undefined ) { + // Optionally, function values get executed if exec is true + exec = !pass && exec && jQuery.isFunction(value); + + for ( var i = 0; i < length; i++ ) { + fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); + } + + return elems; + } + + // Getting an attribute + return length ? fn( elems[0], key ) : undefined; +} + +function now() { + return (new Date).getTime(); +} +(function() { + + jQuery.support = {}; + + var root = document.documentElement, + script = document.createElement("script"), + div = document.createElement("div"), + id = "script" + now(); + + div.style.display = "none"; + div.innerHTML = "
a"; + + var all = div.getElementsByTagName("*"), + a = div.getElementsByTagName("a")[0]; + + // Can't get basic test support + if ( !all || !all.length || !a ) { + return; + } + + jQuery.support = { + // IE strips leading whitespace when .innerHTML is used + leadingWhitespace: div.firstChild.nodeType === 3, + + // Make sure that tbody elements aren't automatically inserted + // IE will insert them into empty tables + tbody: !div.getElementsByTagName("tbody").length, + + // Make sure that link elements get serialized correctly by innerHTML + // This requires a wrapper element in IE + htmlSerialize: !!div.getElementsByTagName("link").length, + + // Get the style information from getAttribute + // (IE uses .cssText insted) + style: /red/.test( a.getAttribute("style") ), + + // Make sure that URLs aren't manipulated + // (IE normalizes it by default) + hrefNormalized: a.getAttribute("href") === "/a", + + // Make sure that element opacity exists + // (IE uses filter instead) + // Use a regex to work around a WebKit issue. See #5145 + opacity: /^0.55$/.test( a.style.opacity ), + + // Verify style float existence + // (IE uses styleFloat instead of cssFloat) + cssFloat: !!a.style.cssFloat, + + // Make sure that if no value is specified for a checkbox + // that it defaults to "on". + // (WebKit defaults to "" instead) + checkOn: div.getElementsByTagName("input")[0].value === "on", + + // Make sure that a selected-by-default option has a working selected property. + // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) + optSelected: document.createElement("select").appendChild( document.createElement("option") ).selected, + + parentNode: div.removeChild( div.appendChild( document.createElement("div") ) ).parentNode === null, + + // Will be defined later + deleteExpando: true, + checkClone: false, + scriptEval: false, + noCloneEvent: true, + boxModel: null + }; + + script.type = "text/javascript"; + try { + script.appendChild( document.createTextNode( "window." + id + "=1;" ) ); + } catch(e) {} + + root.insertBefore( script, root.firstChild ); + + // Make sure that the execution of code works by injecting a script + // tag with appendChild/createTextNode + // (IE doesn't support this, fails, and uses .text instead) + if ( window[ id ] ) { + jQuery.support.scriptEval = true; + delete window[ id ]; + } + + // Test to see if it's possible to delete an expando from an element + // Fails in Internet Explorer + try { + delete script.test; + + } catch(e) { + jQuery.support.deleteExpando = false; + } + + root.removeChild( script ); + + if ( div.attachEvent && div.fireEvent ) { + div.attachEvent("onclick", function click() { + // Cloning a node shouldn't copy over any + // bound event handlers (IE does this) + jQuery.support.noCloneEvent = false; + div.detachEvent("onclick", click); + }); + div.cloneNode(true).fireEvent("onclick"); + } + + div = document.createElement("div"); + div.innerHTML = ""; + + var fragment = document.createDocumentFragment(); + fragment.appendChild( div.firstChild ); + + // WebKit doesn't clone checked state correctly in fragments + jQuery.support.checkClone = fragment.cloneNode(true).cloneNode(true).lastChild.checked; + + // Figure out if the W3C box model works as expected + // document.body must exist before we can do this + jQuery(function() { + var div = document.createElement("div"); + div.style.width = div.style.paddingLeft = "1px"; + + document.body.appendChild( div ); + jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2; + document.body.removeChild( div ).style.display = 'none'; + + div = null; + }); + + // Technique from Juriy Zaytsev + // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/ + var eventSupported = function( eventName ) { + var el = document.createElement("div"); + eventName = "on" + eventName; + + var isSupported = (eventName in el); + if ( !isSupported ) { + el.setAttribute(eventName, "return;"); + isSupported = typeof el[eventName] === "function"; + } + el = null; + + return isSupported; + }; + + jQuery.support.submitBubbles = eventSupported("submit"); + jQuery.support.changeBubbles = eventSupported("change"); + + // release memory in IE + root = script = div = all = a = null; +})(); + +jQuery.props = { + "for": "htmlFor", + "class": "className", + readonly: "readOnly", + maxlength: "maxLength", + cellspacing: "cellSpacing", + rowspan: "rowSpan", + colspan: "colSpan", + tabindex: "tabIndex", + usemap: "useMap", + frameborder: "frameBorder" +}; +var expando = "jQuery" + now(), uuid = 0, windowData = {}; + +jQuery.extend({ + cache: {}, + + expando:expando, + + // The following elements throw uncatchable exceptions if you + // attempt to add expando properties to them. + noData: { + "embed": true, + "object": true, + "applet": true + }, + + data: function( elem, name, data ) { + if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) { + return; + } + + elem = elem == window ? + windowData : + elem; + + var id = elem[ expando ], cache = jQuery.cache, thisCache; + + if ( !id && typeof name === "string" && data === undefined ) { + return null; + } + + // Compute a unique ID for the element + if ( !id ) { + id = ++uuid; + } + + // Avoid generating a new cache unless none exists and we + // want to manipulate it. + if ( typeof name === "object" ) { + elem[ expando ] = id; + thisCache = cache[ id ] = jQuery.extend(true, {}, name); + + } else if ( !cache[ id ] ) { + elem[ expando ] = id; + cache[ id ] = {}; + } + + thisCache = cache[ id ]; + + // Prevent overriding the named cache with undefined values + if ( data !== undefined ) { + thisCache[ name ] = data; + } + + return typeof name === "string" ? thisCache[ name ] : thisCache; + }, + + removeData: function( elem, name ) { + if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) { + return; + } + + elem = elem == window ? + windowData : + elem; + + var id = elem[ expando ], cache = jQuery.cache, thisCache = cache[ id ]; + + // If we want to remove a specific section of the element's data + if ( name ) { + if ( thisCache ) { + // Remove the section of cache data + delete thisCache[ name ]; + + // If we've removed all the data, remove the element's cache + if ( jQuery.isEmptyObject(thisCache) ) { + jQuery.removeData( elem ); + } + } + + // Otherwise, we want to remove all of the element's data + } else { + if ( jQuery.support.deleteExpando ) { + delete elem[ jQuery.expando ]; + + } else if ( elem.removeAttribute ) { + elem.removeAttribute( jQuery.expando ); + } + + // Completely remove the data cache + delete cache[ id ]; + } + } +}); + +jQuery.fn.extend({ + data: function( key, value ) { + if ( typeof key === "undefined" && this.length ) { + return jQuery.data( this[0] ); + + } else if ( typeof key === "object" ) { + return this.each(function() { + jQuery.data( this, key ); + }); + } + + var parts = key.split("."); + parts[1] = parts[1] ? "." + parts[1] : ""; + + if ( value === undefined ) { + var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]); + + if ( data === undefined && this.length ) { + data = jQuery.data( this[0], key ); + } + return data === undefined && parts[1] ? + this.data( parts[0] ) : + data; + } else { + return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function() { + jQuery.data( this, key, value ); + }); + } + }, + + removeData: function( key ) { + return this.each(function() { + jQuery.removeData( this, key ); + }); + } +}); +jQuery.extend({ + queue: function( elem, type, data ) { + if ( !elem ) { + return; + } + + type = (type || "fx") + "queue"; + var q = jQuery.data( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( !data ) { + return q || []; + } + + if ( !q || jQuery.isArray(data) ) { + q = jQuery.data( elem, type, jQuery.makeArray(data) ); + + } else { + q.push( data ); + } + + return q; + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), fn = queue.shift(); + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + } + + if ( fn ) { + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift("inprogress"); + } + + fn.call(elem, function() { + jQuery.dequeue(elem, type); + }); + } + } +}); + +jQuery.fn.extend({ + queue: function( type, data ) { + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + } + + if ( data === undefined ) { + return jQuery.queue( this[0], type ); + } + return this.each(function( i, elem ) { + var queue = jQuery.queue( this, type, data ); + + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); + }, + dequeue: function( type ) { + return this.each(function() { + jQuery.dequeue( this, type ); + }); + }, + + // Based off of the plugin by Clint Helfers, with permission. + // http://blindsignals.com/index.php/2009/07/jquery-delay/ + delay: function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[time] || time : time; + type = type || "fx"; + + return this.queue( type, function() { + var elem = this; + setTimeout(function() { + jQuery.dequeue( elem, type ); + }, time ); + }); + }, + + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + } +}); +var rclass = /[\n\t]/g, + rspace = /\s+/, + rreturn = /\r/g, + rspecialurl = /href|src|style/, + rtype = /(button|input)/i, + rfocusable = /(button|input|object|select|textarea)/i, + rclickable = /^(a|area)$/i, + rradiocheck = /radio|checkbox/; + +jQuery.fn.extend({ + attr: function( name, value ) { + return access( this, name, value, true, jQuery.attr ); + }, + + removeAttr: function( name, fn ) { + return this.each(function(){ + jQuery.attr( this, name, "" ); + if ( this.nodeType === 1 ) { + this.removeAttribute( name ); + } + }); + }, + + addClass: function( value ) { + if ( jQuery.isFunction(value) ) { + return this.each(function(i) { + var self = jQuery(this); + self.addClass( value.call(this, i, self.attr("class")) ); + }); + } + + if ( value && typeof value === "string" ) { + var classNames = (value || "").split( rspace ); + + for ( var i = 0, l = this.length; i < l; i++ ) { + var elem = this[i]; + + if ( elem.nodeType === 1 ) { + if ( !elem.className ) { + elem.className = value; + + } else { + var className = " " + elem.className + " ", setClass = elem.className; + for ( var c = 0, cl = classNames.length; c < cl; c++ ) { + if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) { + setClass += " " + classNames[c]; + } + } + elem.className = jQuery.trim( setClass ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + if ( jQuery.isFunction(value) ) { + return this.each(function(i) { + var self = jQuery(this); + self.removeClass( value.call(this, i, self.attr("class")) ); + }); + } + + if ( (value && typeof value === "string") || value === undefined ) { + var classNames = (value || "").split(rspace); + + for ( var i = 0, l = this.length; i < l; i++ ) { + var elem = this[i]; + + if ( elem.nodeType === 1 && elem.className ) { + if ( value ) { + var className = (" " + elem.className + " ").replace(rclass, " "); + for ( var c = 0, cl = classNames.length; c < cl; c++ ) { + className = className.replace(" " + classNames[c] + " ", " "); + } + elem.className = jQuery.trim( className ); + + } else { + elem.className = ""; + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, isBool = typeof stateVal === "boolean"; + + if ( jQuery.isFunction( value ) ) { + return this.each(function(i) { + var self = jQuery(this); + self.toggleClass( value.call(this, i, self.attr("class"), stateVal), stateVal ); + }); + } + + return this.each(function() { + if ( type === "string" ) { + // toggle individual class names + var className, i = 0, self = jQuery(this), + state = stateVal, + classNames = value.split( rspace ); + + while ( (className = classNames[ i++ ]) ) { + // check each className given, space seperated list + state = isBool ? state : !self.hasClass( className ); + self[ state ? "addClass" : "removeClass" ]( className ); + } + + } else if ( type === "undefined" || type === "boolean" ) { + if ( this.className ) { + // store className if set + jQuery.data( this, "__className__", this.className ); + } + + // toggle whole className + this.className = this.className || value === false ? "" : jQuery.data( this, "__className__" ) || ""; + } + }); + }, + + hasClass: function( selector ) { + var className = " " + selector + " "; + for ( var i = 0, l = this.length; i < l; i++ ) { + if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) { + return true; + } + } + + return false; + }, + + val: function( value ) { + if ( value === undefined ) { + var elem = this[0]; + + if ( elem ) { + if ( jQuery.nodeName( elem, "option" ) ) { + return (elem.attributes.value || {}).specified ? elem.value : elem.text; + } + + // We need to handle select boxes special + if ( jQuery.nodeName( elem, "select" ) ) { + var index = elem.selectedIndex, + values = [], + options = elem.options, + one = elem.type === "select-one"; + + // Nothing was selected + if ( index < 0 ) { + return null; + } + + // Loop through all the selected options + for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) { + var option = options[ i ]; + + if ( option.selected ) { + // Get the specifc value for the option + value = jQuery(option).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + } + + // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified + if ( rradiocheck.test( elem.type ) && !jQuery.support.checkOn ) { + return elem.getAttribute("value") === null ? "on" : elem.value; + } + + + // Everything else, we just grab the value + return (elem.value || "").replace(rreturn, ""); + + } + + return undefined; + } + + var isFunction = jQuery.isFunction(value); + + return this.each(function(i) { + var self = jQuery(this), val = value; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call(this, i, self.val()); + } + + // Typecast each time if the value is a Function and the appended + // value is therefore different each time. + if ( typeof val === "number" ) { + val += ""; + } + + if ( jQuery.isArray(val) && rradiocheck.test( this.type ) ) { + this.checked = jQuery.inArray( self.val(), val ) >= 0; + + } else if ( jQuery.nodeName( this, "select" ) ) { + var values = jQuery.makeArray(val); + + jQuery( "option", this ).each(function() { + this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; + }); + + if ( !values.length ) { + this.selectedIndex = -1; + } + + } else { + this.value = val; + } + }); + } +}); + +jQuery.extend({ + attrFn: { + val: true, + css: true, + html: true, + text: true, + data: true, + width: true, + height: true, + offset: true + }, + + attr: function( elem, name, value, pass ) { + // don't set attributes on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) { + return undefined; + } + + if ( pass && name in jQuery.attrFn ) { + return jQuery(elem)[name](value); + } + + var notxml = elem.nodeType !== 1 || !jQuery.isXMLDoc( elem ), + // Whether we are setting (or getting) + set = value !== undefined; + + // Try to normalize/fix the name + name = notxml && jQuery.props[ name ] || name; + + // Only do all the following if this is a node (faster for style) + if ( elem.nodeType === 1 ) { + // These attributes require special treatment + var special = rspecialurl.test( name ); + + // Safari mis-reports the default selected property of an option + // Accessing the parent's selectedIndex property fixes it + if ( name === "selected" && !jQuery.support.optSelected ) { + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + // Make sure that it also works with optgroups, see #5701 + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + + // If applicable, access the attribute via the DOM 0 way + if ( name in elem && notxml && !special ) { + if ( set ) { + // We can't allow the type property to be changed (since it causes problems in IE) + if ( name === "type" && rtype.test( elem.nodeName ) && elem.parentNode ) { + jQuery.error( "type property can't be changed" ); + } + + elem[ name ] = value; + } + + // browsers index elements by id/name on forms, give priority to attributes. + if ( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) { + return elem.getAttributeNode( name ).nodeValue; + } + + // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set + // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + if ( name === "tabIndex" ) { + var attributeNode = elem.getAttributeNode( "tabIndex" ); + + return attributeNode && attributeNode.specified ? + attributeNode.value : + rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? + 0 : + undefined; + } + + return elem[ name ]; + } + + if ( !jQuery.support.style && notxml && name === "style" ) { + if ( set ) { + elem.style.cssText = "" + value; + } + + return elem.style.cssText; + } + + if ( set ) { + // convert the value to a string (all browsers do this but IE) see #1070 + elem.setAttribute( name, "" + value ); + } + + var attr = !jQuery.support.hrefNormalized && notxml && special ? + // Some attributes require a special call on IE + elem.getAttribute( name, 2 ) : + elem.getAttribute( name ); + + // Non-existent attributes return null, we normalize to undefined + return attr === null ? undefined : attr; + } + + // elem is actually elem.style ... set the style + // Using attr for specific style information is now deprecated. Use style instead. + return jQuery.style( elem, name, value ); + } +}); +var rnamespaces = /\.(.*)$/, + fcleanup = function( nm ) { + return nm.replace(/[^\w\s\.\|`]/g, function( ch ) { + return "\\" + ch; + }); + }; + +/* + * A number of helper functions used for managing events. + * Many of the ideas behind this code originated from + * Dean Edwards' addEvent library. + */ +jQuery.event = { + + // Bind an event to an element + // Original by Dean Edwards + add: function( elem, types, handler, data ) { + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // For whatever reason, IE has trouble passing the window object + // around, causing it to be cloned in the process + if ( elem.setInterval && ( elem !== window && !elem.frameElement ) ) { + elem = window; + } + + var handleObjIn, handleObj; + + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + } + + // Make sure that the function being executed has a unique ID + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure + var elemData = jQuery.data( elem ); + + // If no elemData is found then we must be trying to bind to one of the + // banned noData elements + if ( !elemData ) { + return; + } + + var events = elemData.events = elemData.events || {}, + eventHandle = elemData.handle, eventHandle; + + if ( !eventHandle ) { + elemData.handle = eventHandle = function() { + // Handle the second event of a trigger and when + // an event is called after a page has unloaded + return typeof jQuery !== "undefined" && !jQuery.event.triggered ? + jQuery.event.handle.apply( eventHandle.elem, arguments ) : + undefined; + }; + } + + // Add elem as a property of the handle function + // This is to prevent a memory leak with non-native events in IE. + eventHandle.elem = elem; + + // Handle multiple events separated by a space + // jQuery(...).bind("mouseover mouseout", fn); + types = types.split(" "); + + var type, i = 0, namespaces; + + while ( (type = types[ i++ ]) ) { + handleObj = handleObjIn ? + jQuery.extend({}, handleObjIn) : + { handler: handler, data: data }; + + // Namespaced event handlers + if ( type.indexOf(".") > -1 ) { + namespaces = type.split("."); + type = namespaces.shift(); + handleObj.namespace = namespaces.slice(0).sort().join("."); + + } else { + namespaces = []; + handleObj.namespace = ""; + } + + handleObj.type = type; + handleObj.guid = handler.guid; + + // Get the current list of functions bound to this event + var handlers = events[ type ], + special = jQuery.event.special[ type ] || {}; + + // Init the event handler queue + if ( !handlers ) { + handlers = events[ type ] = []; + + // Check for a special event handler + // Only use addEventListener/attachEvent if the special + // events handler returns false + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + // Bind the global event handler to the element + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add the function to the element's handler list + handlers.push( handleObj ); + + // Keep track of which events have been used, for global triggering + jQuery.event.global[ type ] = true; + } + + // Nullify elem to prevent memory leaks in IE + elem = null; + }, + + global: {}, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, pos ) { + // don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + var ret, type, fn, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType, + elemData = jQuery.data( elem ), + events = elemData && elemData.events; + + if ( !elemData || !events ) { + return; + } + + // types is actually an event object here + if ( types && types.type ) { + handler = types.handler; + types = types.type; + } + + // Unbind all events for the element + if ( !types || typeof types === "string" && types.charAt(0) === "." ) { + types = types || ""; + + for ( type in events ) { + jQuery.event.remove( elem, type + types ); + } + + return; + } + + // Handle multiple events separated by a space + // jQuery(...).unbind("mouseover mouseout", fn); + types = types.split(" "); + + while ( (type = types[ i++ ]) ) { + origType = type; + handleObj = null; + all = type.indexOf(".") < 0; + namespaces = []; + + if ( !all ) { + // Namespaced event handlers + namespaces = type.split("."); + type = namespaces.shift(); + + namespace = new RegExp("(^|\\.)" + + jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)") + } + + eventType = events[ type ]; + + if ( !eventType ) { + continue; + } + + if ( !handler ) { + for ( var j = 0; j < eventType.length; j++ ) { + handleObj = eventType[ j ]; + + if ( all || namespace.test( handleObj.namespace ) ) { + jQuery.event.remove( elem, origType, handleObj.handler, j ); + eventType.splice( j--, 1 ); + } + } + + continue; + } + + special = jQuery.event.special[ type ] || {}; + + for ( var j = pos || 0; j < eventType.length; j++ ) { + handleObj = eventType[ j ]; + + if ( handler.guid === handleObj.guid ) { + // remove the given handler for the given type + if ( all || namespace.test( handleObj.namespace ) ) { + if ( pos == null ) { + eventType.splice( j--, 1 ); + } + + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + + if ( pos != null ) { + break; + } + } + } + + // remove generic event handler if no more handlers exist + if ( eventType.length === 0 || pos != null && eventType.length === 1 ) { + if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) { + removeEvent( elem, type, elemData.handle ); + } + + ret = null; + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + var handle = elemData.handle; + if ( handle ) { + handle.elem = null; + } + + delete elemData.events; + delete elemData.handle; + + if ( jQuery.isEmptyObject( elemData ) ) { + jQuery.removeData( elem ); + } + } + }, + + // bubbling is internal + trigger: function( event, data, elem /*, bubbling */ ) { + // Event object or event type + var type = event.type || event, + bubbling = arguments[3]; + + if ( !bubbling ) { + event = typeof event === "object" ? + // jQuery.Event object + event[expando] ? event : + // Object literal + jQuery.extend( jQuery.Event(type), event ) : + // Just the event type (string) + jQuery.Event(type); + + if ( type.indexOf("!") >= 0 ) { + event.type = type = type.slice(0, -1); + event.exclusive = true; + } + + // Handle a global trigger + if ( !elem ) { + // Don't bubble custom events when global (to avoid too much overhead) + event.stopPropagation(); + + // Only trigger if we've ever bound an event for it + if ( jQuery.event.global[ type ] ) { + jQuery.each( jQuery.cache, function() { + if ( this.events && this.events[type] ) { + jQuery.event.trigger( event, data, this.handle.elem ); + } + }); + } + } + + // Handle triggering a single element + + // don't do events on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) { + return undefined; + } + + // Clean up in case it is reused + event.result = undefined; + event.target = elem; + + // Clone the incoming data, if any + data = jQuery.makeArray( data ); + data.unshift( event ); + } + + event.currentTarget = elem; + + // Trigger the event, it is assumed that "handle" is a function + var handle = jQuery.data( elem, "handle" ); + if ( handle ) { + handle.apply( elem, data ); + } + + var parent = elem.parentNode || elem.ownerDocument; + + // Trigger an inline bound script + try { + if ( !(elem && elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()]) ) { + if ( elem[ "on" + type ] && elem[ "on" + type ].apply( elem, data ) === false ) { + event.result = false; + } + } + + // prevent IE from throwing an error for some elements with some event types, see #3533 + } catch (e) {} + + if ( !event.isPropagationStopped() && parent ) { + jQuery.event.trigger( event, data, parent, true ); + + } else if ( !event.isDefaultPrevented() ) { + var target = event.target, old, + isClick = jQuery.nodeName(target, "a") && type === "click", + special = jQuery.event.special[ type ] || {}; + + if ( (!special._default || special._default.call( elem, event ) === false) && + !isClick && !(target && target.nodeName && jQuery.noData[target.nodeName.toLowerCase()]) ) { + + try { + if ( target[ type ] ) { + // Make sure that we don't accidentally re-trigger the onFOO events + old = target[ "on" + type ]; + + if ( old ) { + target[ "on" + type ] = null; + } + + jQuery.event.triggered = true; + target[ type ](); + } + + // prevent IE from throwing an error for some elements with some event types, see #3533 + } catch (e) {} + + if ( old ) { + target[ "on" + type ] = old; + } + + jQuery.event.triggered = false; + } + } + }, + + handle: function( event ) { + var all, handlers, namespaces, namespace, events; + + event = arguments[0] = jQuery.event.fix( event || window.event ); + event.currentTarget = this; + + // Namespaced event handlers + all = event.type.indexOf(".") < 0 && !event.exclusive; + + if ( !all ) { + namespaces = event.type.split("."); + event.type = namespaces.shift(); + namespace = new RegExp("(^|\\.)" + namespaces.slice(0).sort().join("\\.(?:.*\\.)?") + "(\\.|$)"); + } + + var events = jQuery.data(this, "events"), handlers = events[ event.type ]; + + if ( events && handlers ) { + // Clone the handlers to prevent manipulation + handlers = handlers.slice(0); + + for ( var j = 0, l = handlers.length; j < l; j++ ) { + var handleObj = handlers[ j ]; + + // Filter the functions by class + if ( all || namespace.test( handleObj.namespace ) ) { + // Pass in a reference to the handler function itself + // So that we can later remove it + event.handler = handleObj.handler; + event.data = handleObj.data; + event.handleObj = handleObj; + + var ret = handleObj.handler.apply( this, arguments ); + + if ( ret !== undefined ) { + event.result = ret; + if ( ret === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + + if ( event.isImmediatePropagationStopped() ) { + break; + } + } + } + } + + return event.result; + }, + + props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "), + + fix: function( event ) { + if ( event[ expando ] ) { + return event; + } + + // store a copy of the original event object + // and "clone" to set read-only properties + var originalEvent = event; + event = jQuery.Event( originalEvent ); + + for ( var i = this.props.length, prop; i; ) { + prop = this.props[ --i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Fix target property, if necessary + if ( !event.target ) { + event.target = event.srcElement || document; // Fixes #1925 where srcElement might not be defined either + } + + // check if target is a textnode (safari) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && event.fromElement ) { + event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement; + } + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && event.clientX != null ) { + var doc = document.documentElement, body = document.body; + event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0); + event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0); + } + + // Add which for key events + if ( !event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) ) { + event.which = event.charCode || event.keyCode; + } + + // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs) + if ( !event.metaKey && event.ctrlKey ) { + event.metaKey = event.ctrlKey; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && event.button !== undefined ) { + event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) )); + } + + return event; + }, + + // Deprecated, use jQuery.guid instead + guid: 1E8, + + // Deprecated, use jQuery.proxy instead + proxy: jQuery.proxy, + + special: { + ready: { + // Make sure the ready event is setup + setup: jQuery.bindReady, + teardown: jQuery.noop + }, + + live: { + add: function( handleObj ) { + jQuery.event.add( this, handleObj.origType, jQuery.extend({}, handleObj, {handler: liveHandler}) ); + }, + + remove: function( handleObj ) { + var remove = true, + type = handleObj.origType.replace(rnamespaces, ""); + + jQuery.each( jQuery.data(this, "events").live || [], function() { + if ( type === this.origType.replace(rnamespaces, "") ) { + remove = false; + return false; + } + }); + + if ( remove ) { + jQuery.event.remove( this, handleObj.origType, liveHandler ); + } + } + + }, + + beforeunload: { + setup: function( data, namespaces, eventHandle ) { + // We only want to do this special case on windows + if ( this.setInterval ) { + this.onbeforeunload = eventHandle; + } + + return false; + }, + teardown: function( namespaces, eventHandle ) { + if ( this.onbeforeunload === eventHandle ) { + this.onbeforeunload = null; + } + } + } + } +}; + +var removeEvent = document.removeEventListener ? + function( elem, type, handle ) { + elem.removeEventListener( type, handle, false ); + } : + function( elem, type, handle ) { + elem.detachEvent( "on" + type, handle ); + }; + +jQuery.Event = function( src ) { + // Allow instantiation without the 'new' keyword + if ( !this.preventDefault ) { + return new jQuery.Event( src ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + // Event type + } else { + this.type = src; + } + + // timeStamp is buggy for some events on Firefox(#3843) + // So we won't rely on the native value + this.timeStamp = now(); + + // Mark it as fixed + this[ expando ] = true; +}; + +function returnFalse() { + return false; +} +function returnTrue() { + return true; +} + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + preventDefault: function() { + this.isDefaultPrevented = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + + // if preventDefault exists run it on the original event + if ( e.preventDefault ) { + e.preventDefault(); + } + // otherwise set the returnValue property of the original event to false (IE) + e.returnValue = false; + }, + stopPropagation: function() { + this.isPropagationStopped = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + // if stopPropagation exists run it on the original event + if ( e.stopPropagation ) { + e.stopPropagation(); + } + // otherwise set the cancelBubble property of the original event to true (IE) + e.cancelBubble = true; + }, + stopImmediatePropagation: function() { + this.isImmediatePropagationStopped = returnTrue; + this.stopPropagation(); + }, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse +}; + +// Checks if an event happened on an element within another element +// Used in jQuery.event.special.mouseenter and mouseleave handlers +var withinElement = function( event ) { + // Check if mouse(over|out) are still within the same parent element + var parent = event.relatedTarget; + + // Firefox sometimes assigns relatedTarget a XUL element + // which we cannot access the parentNode property of + try { + // Traverse up the tree + while ( parent && parent !== this ) { + parent = parent.parentNode; + } + + if ( parent !== this ) { + // set the correct event type + event.type = event.data; + + // handle event if we actually just moused on to a non sub-element + jQuery.event.handle.apply( this, arguments ); + } + + // assuming we've left the element since we most likely mousedover a xul element + } catch(e) { } +}, + +// In case of event delegation, we only need to rename the event.type, +// liveHandler will take care of the rest. +delegate = function( event ) { + event.type = event.data; + jQuery.event.handle.apply( this, arguments ); +}; + +// Create mouseenter and mouseleave events +jQuery.each({ + mouseenter: "mouseover", + mouseleave: "mouseout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + setup: function( data ) { + jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig ); + }, + teardown: function( data ) { + jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement ); + } + }; +}); + +// submit delegation +if ( !jQuery.support.submitBubbles ) { + + jQuery.event.special.submit = { + setup: function( data, namespaces ) { + if ( this.nodeName.toLowerCase() !== "form" ) { + jQuery.event.add(this, "click.specialSubmit", function( e ) { + var elem = e.target, type = elem.type; + + if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) { + return trigger( "submit", this, arguments ); + } + }); + + jQuery.event.add(this, "keypress.specialSubmit", function( e ) { + var elem = e.target, type = elem.type; + + if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) { + return trigger( "submit", this, arguments ); + } + }); + + } else { + return false; + } + }, + + teardown: function( namespaces ) { + jQuery.event.remove( this, ".specialSubmit" ); + } + }; + +} + +// change delegation, happens here so we have bind. +if ( !jQuery.support.changeBubbles ) { + + var formElems = /textarea|input|select/i, + + changeFilters, + + getVal = function( elem ) { + var type = elem.type, val = elem.value; + + if ( type === "radio" || type === "checkbox" ) { + val = elem.checked; + + } else if ( type === "select-multiple" ) { + val = elem.selectedIndex > -1 ? + jQuery.map( elem.options, function( elem ) { + return elem.selected; + }).join("-") : + ""; + + } else if ( elem.nodeName.toLowerCase() === "select" ) { + val = elem.selectedIndex; + } + + return val; + }, + + testChange = function testChange( e ) { + var elem = e.target, data, val; + + if ( !formElems.test( elem.nodeName ) || elem.readOnly ) { + return; + } + + data = jQuery.data( elem, "_change_data" ); + val = getVal(elem); + + // the current data will be also retrieved by beforeactivate + if ( e.type !== "focusout" || elem.type !== "radio" ) { + jQuery.data( elem, "_change_data", val ); + } + + if ( data === undefined || val === data ) { + return; + } + + if ( data != null || val ) { + e.type = "change"; + return jQuery.event.trigger( e, arguments[1], elem ); + } + }; + + jQuery.event.special.change = { + filters: { + focusout: testChange, + + click: function( e ) { + var elem = e.target, type = elem.type; + + if ( type === "radio" || type === "checkbox" || elem.nodeName.toLowerCase() === "select" ) { + return testChange.call( this, e ); + } + }, + + // Change has to be called before submit + // Keydown will be called before keypress, which is used in submit-event delegation + keydown: function( e ) { + var elem = e.target, type = elem.type; + + if ( (e.keyCode === 13 && elem.nodeName.toLowerCase() !== "textarea") || + (e.keyCode === 32 && (type === "checkbox" || type === "radio")) || + type === "select-multiple" ) { + return testChange.call( this, e ); + } + }, + + // Beforeactivate happens also before the previous element is blurred + // with this event you can't trigger a change event, but you can store + // information/focus[in] is not needed anymore + beforeactivate: function( e ) { + var elem = e.target; + jQuery.data( elem, "_change_data", getVal(elem) ); + } + }, + + setup: function( data, namespaces ) { + if ( this.type === "file" ) { + return false; + } + + for ( var type in changeFilters ) { + jQuery.event.add( this, type + ".specialChange", changeFilters[type] ); + } + + return formElems.test( this.nodeName ); + }, + + teardown: function( namespaces ) { + jQuery.event.remove( this, ".specialChange" ); + + return formElems.test( this.nodeName ); + } + }; + + changeFilters = jQuery.event.special.change.filters; +} + +function trigger( type, elem, args ) { + args[0].type = type; + return jQuery.event.handle.apply( elem, args ); +} + +// Create "bubbling" focus and blur events +if ( document.addEventListener ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + jQuery.event.special[ fix ] = { + setup: function() { + this.addEventListener( orig, handler, true ); + }, + teardown: function() { + this.removeEventListener( orig, handler, true ); + } + }; + + function handler( e ) { + e = jQuery.event.fix( e ); + e.type = fix; + return jQuery.event.handle.call( this, e ); + } + }); +} + +jQuery.each(["bind", "one"], function( i, name ) { + jQuery.fn[ name ] = function( type, data, fn ) { + // Handle object literals + if ( typeof type === "object" ) { + for ( var key in type ) { + this[ name ](key, data, type[key], fn); + } + return this; + } + + if ( jQuery.isFunction( data ) ) { + fn = data; + data = undefined; + } + + var handler = name === "one" ? jQuery.proxy( fn, function( event ) { + jQuery( this ).unbind( event, handler ); + return fn.apply( this, arguments ); + }) : fn; + + if ( type === "unload" && name !== "one" ) { + this.one( type, data, fn ); + + } else { + for ( var i = 0, l = this.length; i < l; i++ ) { + jQuery.event.add( this[i], type, handler, data ); + } + } + + return this; + }; +}); + +jQuery.fn.extend({ + unbind: function( type, fn ) { + // Handle object literals + if ( typeof type === "object" && !type.preventDefault ) { + for ( var key in type ) { + this.unbind(key, type[key]); + } + + } else { + for ( var i = 0, l = this.length; i < l; i++ ) { + jQuery.event.remove( this[i], type, fn ); + } + } + + return this; + }, + + delegate: function( selector, types, data, fn ) { + return this.live( types, data, fn, selector ); + }, + + undelegate: function( selector, types, fn ) { + if ( arguments.length === 0 ) { + return this.unbind( "live" ); + + } else { + return this.die( types, null, fn, selector ); + } + }, + + trigger: function( type, data ) { + return this.each(function() { + jQuery.event.trigger( type, data, this ); + }); + }, + + triggerHandler: function( type, data ) { + if ( this[0] ) { + var event = jQuery.Event( type ); + event.preventDefault(); + event.stopPropagation(); + jQuery.event.trigger( event, data, this[0] ); + return event.result; + } + }, + + toggle: function( fn ) { + // Save reference to arguments for access in closure + var args = arguments, i = 1; + + // link all the functions, so any of them can unbind this click handler + while ( i < args.length ) { + jQuery.proxy( fn, args[ i++ ] ); + } + + return this.click( jQuery.proxy( fn, function( event ) { + // Figure out which function to execute + var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i; + jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 ); + + // Make sure that clicks stop + event.preventDefault(); + + // and execute the function + return args[ lastToggle ].apply( this, arguments ) || false; + })); + }, + + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } +}); + +var liveMap = { + focus: "focusin", + blur: "focusout", + mouseenter: "mouseover", + mouseleave: "mouseout" +}; + +jQuery.each(["live", "die"], function( i, name ) { + jQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) { + var type, i = 0, match, namespaces, preType, + selector = origSelector || this.selector, + context = origSelector ? this : jQuery( this.context ); + + if ( jQuery.isFunction( data ) ) { + fn = data; + data = undefined; + } + + types = (types || "").split(" "); + + while ( (type = types[ i++ ]) != null ) { + match = rnamespaces.exec( type ); + namespaces = ""; + + if ( match ) { + namespaces = match[0]; + type = type.replace( rnamespaces, "" ); + } + + if ( type === "hover" ) { + types.push( "mouseenter" + namespaces, "mouseleave" + namespaces ); + continue; + } + + preType = type; + + if ( type === "focus" || type === "blur" ) { + types.push( liveMap[ type ] + namespaces ); + type = type + namespaces; + + } else { + type = (liveMap[ type ] || type) + namespaces; + } + + if ( name === "live" ) { + // bind live handler + context.each(function(){ + jQuery.event.add( this, liveConvert( type, selector ), + { data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } ); + }); + + } else { + // unbind live handler + context.unbind( liveConvert( type, selector ), fn ); + } + } + + return this; + } +}); + +function liveHandler( event ) { + var stop, elems = [], selectors = [], args = arguments, + related, match, handleObj, elem, j, i, l, data, + events = jQuery.data( this, "events" ); + + // Make sure we avoid non-left-click bubbling in Firefox (#3861) + if ( event.liveFired === this || !events || !events.live || event.button && event.type === "click" ) { + return; + } + + event.liveFired = this; + + var live = events.live.slice(0); + + for ( j = 0; j < live.length; j++ ) { + handleObj = live[j]; + + if ( handleObj.origType.replace( rnamespaces, "" ) === event.type ) { + selectors.push( handleObj.selector ); + + } else { + live.splice( j--, 1 ); + } + } + + match = jQuery( event.target ).closest( selectors, event.currentTarget ); + + for ( i = 0, l = match.length; i < l; i++ ) { + for ( j = 0; j < live.length; j++ ) { + handleObj = live[j]; + + if ( match[i].selector === handleObj.selector ) { + elem = match[i].elem; + related = null; + + // Those two events require additional checking + if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) { + related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0]; + } + + if ( !related || related !== elem ) { + elems.push({ elem: elem, handleObj: handleObj }); + } + } + } + } + + for ( i = 0, l = elems.length; i < l; i++ ) { + match = elems[i]; + event.currentTarget = match.elem; + event.data = match.handleObj.data; + event.handleObj = match.handleObj; + + if ( match.handleObj.origHandler.apply( match.elem, args ) === false ) { + stop = false; + break; + } + } + + return stop; +} + +function liveConvert( type, selector ) { + return "live." + (type && type !== "*" ? type + "." : "") + selector.replace(/\./g, "`").replace(/ /g, "&"); +} + +jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup error").split(" "), function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( fn ) { + return fn ? this.bind( name, fn ) : this.trigger( name ); + }; + + if ( jQuery.attrFn ) { + jQuery.attrFn[ name ] = true; + } +}); + +// Prevent memory leaks in IE +// Window isn't included so as not to unbind existing unload events +// More info: +// - http://isaacschlueter.com/2006/10/msie-memory-leaks/ +if ( window.attachEvent && !window.addEventListener ) { + window.attachEvent("onunload", function() { + for ( var id in jQuery.cache ) { + if ( jQuery.cache[ id ].handle ) { + // Try/Catch is to handle iframes being unloaded, see #4280 + try { + jQuery.event.remove( jQuery.cache[ id ].handle.elem ); + } catch(e) {} + } + } + }); +} +/*! + * Sizzle CSS Selector Engine - v1.0 + * Copyright 2009, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){ + +var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, + done = 0, + toString = Object.prototype.toString, + hasDuplicate = false, + baseHasDuplicate = true; + +// Here we check if the JavaScript engine is using some sort of +// optimization where it does not always call our comparision +// function. If that is the case, discard the hasDuplicate value. +// Thus far that includes Google Chrome. +[0, 0].sort(function(){ + baseHasDuplicate = false; + return 0; +}); + +var Sizzle = function(selector, context, results, seed) { + results = results || []; + var origContext = context = context || document; + + if ( context.nodeType !== 1 && context.nodeType !== 9 ) { + return []; + } + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + var parts = [], m, set, checkSet, extra, prune = true, contextXML = isXML(context), + soFar = selector; + + // Reset the position of the chunker regexp (start from head) + while ( (chunker.exec(""), m = chunker.exec(soFar)) !== null ) { + soFar = m[3]; + + parts.push( m[1] ); + + if ( m[2] ) { + extra = m[3]; + break; + } + } + + if ( parts.length > 1 && origPOS.exec( selector ) ) { + if ( parts.length === 2 && Expr.relative[ parts[0] ] ) { + set = posProcess( parts[0] + parts[1], context ); + } else { + set = Expr.relative[ parts[0] ] ? + [ context ] : + Sizzle( parts.shift(), context ); + + while ( parts.length ) { + selector = parts.shift(); + + if ( Expr.relative[ selector ] ) { + selector += parts.shift(); + } + + set = posProcess( selector, set ); + } + } + } else { + // Take a shortcut and set the context if the root selector is an ID + // (but not if it'll be faster if the inner selector is an ID) + if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML && + Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) { + var ret = Sizzle.find( parts.shift(), context, contextXML ); + context = ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : ret.set[0]; + } + + if ( context ) { + var ret = seed ? + { expr: parts.pop(), set: makeArray(seed) } : + Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML ); + set = ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set; + + if ( parts.length > 0 ) { + checkSet = makeArray(set); + } else { + prune = false; + } + + while ( parts.length ) { + var cur = parts.pop(), pop = cur; + + if ( !Expr.relative[ cur ] ) { + cur = ""; + } else { + pop = parts.pop(); + } + + if ( pop == null ) { + pop = context; + } + + Expr.relative[ cur ]( checkSet, pop, contextXML ); + } + } else { + checkSet = parts = []; + } + } + + if ( !checkSet ) { + checkSet = set; + } + + if ( !checkSet ) { + Sizzle.error( cur || selector ); + } + + if ( toString.call(checkSet) === "[object Array]" ) { + if ( !prune ) { + results.push.apply( results, checkSet ); + } else if ( context && context.nodeType === 1 ) { + for ( var i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i])) ) { + results.push( set[i] ); + } + } + } else { + for ( var i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && checkSet[i].nodeType === 1 ) { + results.push( set[i] ); + } + } + } + } else { + makeArray( checkSet, results ); + } + + if ( extra ) { + Sizzle( extra, origContext, results, seed ); + Sizzle.uniqueSort( results ); + } + + return results; +}; + +Sizzle.uniqueSort = function(results){ + if ( sortOrder ) { + hasDuplicate = baseHasDuplicate; + results.sort(sortOrder); + + if ( hasDuplicate ) { + for ( var i = 1; i < results.length; i++ ) { + if ( results[i] === results[i-1] ) { + results.splice(i--, 1); + } + } + } + } + + return results; +}; + +Sizzle.matches = function(expr, set){ + return Sizzle(expr, null, null, set); +}; + +Sizzle.find = function(expr, context, isXML){ + var set, match; + + if ( !expr ) { + return []; + } + + for ( var i = 0, l = Expr.order.length; i < l; i++ ) { + var type = Expr.order[i], match; + + if ( (match = Expr.leftMatch[ type ].exec( expr )) ) { + var left = match[1]; + match.splice(1,1); + + if ( left.substr( left.length - 1 ) !== "\\" ) { + match[1] = (match[1] || "").replace(/\\/g, ""); + set = Expr.find[ type ]( match, context, isXML ); + if ( set != null ) { + expr = expr.replace( Expr.match[ type ], "" ); + break; + } + } + } + } + + if ( !set ) { + set = context.getElementsByTagName("*"); + } + + return {set: set, expr: expr}; +}; + +Sizzle.filter = function(expr, set, inplace, not){ + var old = expr, result = [], curLoop = set, match, anyFound, + isXMLFilter = set && set[0] && isXML(set[0]); + + while ( expr && set.length ) { + for ( var type in Expr.filter ) { + if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) { + var filter = Expr.filter[ type ], found, item, left = match[1]; + anyFound = false; + + match.splice(1,1); + + if ( left.substr( left.length - 1 ) === "\\" ) { + continue; + } + + if ( curLoop === result ) { + result = []; + } + + if ( Expr.preFilter[ type ] ) { + match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter ); + + if ( !match ) { + anyFound = found = true; + } else if ( match === true ) { + continue; + } + } + + if ( match ) { + for ( var i = 0; (item = curLoop[i]) != null; i++ ) { + if ( item ) { + found = filter( item, match, i, curLoop ); + var pass = not ^ !!found; + + if ( inplace && found != null ) { + if ( pass ) { + anyFound = true; + } else { + curLoop[i] = false; + } + } else if ( pass ) { + result.push( item ); + anyFound = true; + } + } + } + } + + if ( found !== undefined ) { + if ( !inplace ) { + curLoop = result; + } + + expr = expr.replace( Expr.match[ type ], "" ); + + if ( !anyFound ) { + return []; + } + + break; + } + } + } + + // Improper expression + if ( expr === old ) { + if ( anyFound == null ) { + Sizzle.error( expr ); + } else { + break; + } + } + + old = expr; + } + + return curLoop; +}; + +Sizzle.error = function( msg ) { + throw "Syntax error, unrecognized expression: " + msg; +}; + +var Expr = Sizzle.selectors = { + order: [ "ID", "NAME", "TAG" ], + match: { + ID: /#((?:[\w\u00c0-\uFFFF-]|\\.)+)/, + CLASS: /\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/, + NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/, + ATTR: /\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/, + TAG: /^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/, + CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/, + POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/, + PSEUDO: /:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/ + }, + leftMatch: {}, + attrMap: { + "class": "className", + "for": "htmlFor" + }, + attrHandle: { + href: function(elem){ + return elem.getAttribute("href"); + } + }, + relative: { + "+": function(checkSet, part){ + var isPartStr = typeof part === "string", + isTag = isPartStr && !/\W/.test(part), + isPartStrNotTag = isPartStr && !isTag; + + if ( isTag ) { + part = part.toLowerCase(); + } + + for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) { + if ( (elem = checkSet[i]) ) { + while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {} + + checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ? + elem || false : + elem === part; + } + } + + if ( isPartStrNotTag ) { + Sizzle.filter( part, checkSet, true ); + } + }, + ">": function(checkSet, part){ + var isPartStr = typeof part === "string"; + + if ( isPartStr && !/\W/.test(part) ) { + part = part.toLowerCase(); + + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + if ( elem ) { + var parent = elem.parentNode; + checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false; + } + } + } else { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + if ( elem ) { + checkSet[i] = isPartStr ? + elem.parentNode : + elem.parentNode === part; + } + } + + if ( isPartStr ) { + Sizzle.filter( part, checkSet, true ); + } + } + }, + "": function(checkSet, part, isXML){ + var doneName = done++, checkFn = dirCheck; + + if ( typeof part === "string" && !/\W/.test(part) ) { + var nodeCheck = part = part.toLowerCase(); + checkFn = dirNodeCheck; + } + + checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML); + }, + "~": function(checkSet, part, isXML){ + var doneName = done++, checkFn = dirCheck; + + if ( typeof part === "string" && !/\W/.test(part) ) { + var nodeCheck = part = part.toLowerCase(); + checkFn = dirNodeCheck; + } + + checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML); + } + }, + find: { + ID: function(match, context, isXML){ + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + return m ? [m] : []; + } + }, + NAME: function(match, context){ + if ( typeof context.getElementsByName !== "undefined" ) { + var ret = [], results = context.getElementsByName(match[1]); + + for ( var i = 0, l = results.length; i < l; i++ ) { + if ( results[i].getAttribute("name") === match[1] ) { + ret.push( results[i] ); + } + } + + return ret.length === 0 ? null : ret; + } + }, + TAG: function(match, context){ + return context.getElementsByTagName(match[1]); + } + }, + preFilter: { + CLASS: function(match, curLoop, inplace, result, not, isXML){ + match = " " + match[1].replace(/\\/g, "") + " "; + + if ( isXML ) { + return match; + } + + for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) { + if ( elem ) { + if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n]/g, " ").indexOf(match) >= 0) ) { + if ( !inplace ) { + result.push( elem ); + } + } else if ( inplace ) { + curLoop[i] = false; + } + } + } + + return false; + }, + ID: function(match){ + return match[1].replace(/\\/g, ""); + }, + TAG: function(match, curLoop){ + return match[1].toLowerCase(); + }, + CHILD: function(match){ + if ( match[1] === "nth" ) { + // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6' + var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec( + match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" || + !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]); + + // calculate the numbers (first)n+(last) including if they are negative + match[2] = (test[1] + (test[2] || 1)) - 0; + match[3] = test[3] - 0; + } + + // TODO: Move to normal caching system + match[0] = done++; + + return match; + }, + ATTR: function(match, curLoop, inplace, result, not, isXML){ + var name = match[1].replace(/\\/g, ""); + + if ( !isXML && Expr.attrMap[name] ) { + match[1] = Expr.attrMap[name]; + } + + if ( match[2] === "~=" ) { + match[4] = " " + match[4] + " "; + } + + return match; + }, + PSEUDO: function(match, curLoop, inplace, result, not){ + if ( match[1] === "not" ) { + // If we're dealing with a complex expression, or a simple one + if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) { + match[3] = Sizzle(match[3], null, null, curLoop); + } else { + var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not); + if ( !inplace ) { + result.push.apply( result, ret ); + } + return false; + } + } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { + return true; + } + + return match; + }, + POS: function(match){ + match.unshift( true ); + return match; + } + }, + filters: { + enabled: function(elem){ + return elem.disabled === false && elem.type !== "hidden"; + }, + disabled: function(elem){ + return elem.disabled === true; + }, + checked: function(elem){ + return elem.checked === true; + }, + selected: function(elem){ + // Accessing this property makes selected-by-default + // options in Safari work properly + elem.parentNode.selectedIndex; + return elem.selected === true; + }, + parent: function(elem){ + return !!elem.firstChild; + }, + empty: function(elem){ + return !elem.firstChild; + }, + has: function(elem, i, match){ + return !!Sizzle( match[3], elem ).length; + }, + header: function(elem){ + return /h\d/i.test( elem.nodeName ); + }, + text: function(elem){ + return "text" === elem.type; + }, + radio: function(elem){ + return "radio" === elem.type; + }, + checkbox: function(elem){ + return "checkbox" === elem.type; + }, + file: function(elem){ + return "file" === elem.type; + }, + password: function(elem){ + return "password" === elem.type; + }, + submit: function(elem){ + return "submit" === elem.type; + }, + image: function(elem){ + return "image" === elem.type; + }, + reset: function(elem){ + return "reset" === elem.type; + }, + button: function(elem){ + return "button" === elem.type || elem.nodeName.toLowerCase() === "button"; + }, + input: function(elem){ + return /input|select|textarea|button/i.test(elem.nodeName); + } + }, + setFilters: { + first: function(elem, i){ + return i === 0; + }, + last: function(elem, i, match, array){ + return i === array.length - 1; + }, + even: function(elem, i){ + return i % 2 === 0; + }, + odd: function(elem, i){ + return i % 2 === 1; + }, + lt: function(elem, i, match){ + return i < match[3] - 0; + }, + gt: function(elem, i, match){ + return i > match[3] - 0; + }, + nth: function(elem, i, match){ + return match[3] - 0 === i; + }, + eq: function(elem, i, match){ + return match[3] - 0 === i; + } + }, + filter: { + PSEUDO: function(elem, match, i, array){ + var name = match[1], filter = Expr.filters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + } else if ( name === "contains" ) { + return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0; + } else if ( name === "not" ) { + var not = match[3]; + + for ( var i = 0, l = not.length; i < l; i++ ) { + if ( not[i] === elem ) { + return false; + } + } + + return true; + } else { + Sizzle.error( "Syntax error, unrecognized expression: " + name ); + } + }, + CHILD: function(elem, match){ + var type = match[1], node = elem; + switch (type) { + case 'only': + case 'first': + while ( (node = node.previousSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + if ( type === "first" ) { + return true; + } + node = elem; + case 'last': + while ( (node = node.nextSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + return true; + case 'nth': + var first = match[2], last = match[3]; + + if ( first === 1 && last === 0 ) { + return true; + } + + var doneName = match[0], + parent = elem.parentNode; + + if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) { + var count = 0; + for ( node = parent.firstChild; node; node = node.nextSibling ) { + if ( node.nodeType === 1 ) { + node.nodeIndex = ++count; + } + } + parent.sizcache = doneName; + } + + var diff = elem.nodeIndex - last; + if ( first === 0 ) { + return diff === 0; + } else { + return ( diff % first === 0 && diff / first >= 0 ); + } + } + }, + ID: function(elem, match){ + return elem.nodeType === 1 && elem.getAttribute("id") === match; + }, + TAG: function(elem, match){ + return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match; + }, + CLASS: function(elem, match){ + return (" " + (elem.className || elem.getAttribute("class")) + " ") + .indexOf( match ) > -1; + }, + ATTR: function(elem, match){ + var name = match[1], + result = Expr.attrHandle[ name ] ? + Expr.attrHandle[ name ]( elem ) : + elem[ name ] != null ? + elem[ name ] : + elem.getAttribute( name ), + value = result + "", + type = match[2], + check = match[4]; + + return result == null ? + type === "!=" : + type === "=" ? + value === check : + type === "*=" ? + value.indexOf(check) >= 0 : + type === "~=" ? + (" " + value + " ").indexOf(check) >= 0 : + !check ? + value && result !== false : + type === "!=" ? + value !== check : + type === "^=" ? + value.indexOf(check) === 0 : + type === "$=" ? + value.substr(value.length - check.length) === check : + type === "|=" ? + value === check || value.substr(0, check.length + 1) === check + "-" : + false; + }, + POS: function(elem, match, i, array){ + var name = match[2], filter = Expr.setFilters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + } + } + } +}; + +var origPOS = Expr.match.POS; + +for ( var type in Expr.match ) { + Expr.match[ type ] = new RegExp( Expr.match[ type ].source + /(?![^\[]*\])(?![^\(]*\))/.source ); + Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, function(all, num){ + return "\\" + (num - 0 + 1); + })); +} + +var makeArray = function(array, results) { + array = Array.prototype.slice.call( array, 0 ); + + if ( results ) { + results.push.apply( results, array ); + return results; + } + + return array; +}; + +// Perform a simple check to determine if the browser is capable of +// converting a NodeList to an array using builtin methods. +// Also verifies that the returned array holds DOM nodes +// (which is not the case in the Blackberry browser) +try { + Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType; + +// Provide a fallback method if it does not work +} catch(e){ + makeArray = function(array, results) { + var ret = results || []; + + if ( toString.call(array) === "[object Array]" ) { + Array.prototype.push.apply( ret, array ); + } else { + if ( typeof array.length === "number" ) { + for ( var i = 0, l = array.length; i < l; i++ ) { + ret.push( array[i] ); + } + } else { + for ( var i = 0; array[i]; i++ ) { + ret.push( array[i] ); + } + } + } + + return ret; + }; +} + +var sortOrder; + +if ( document.documentElement.compareDocumentPosition ) { + sortOrder = function( a, b ) { + if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) { + if ( a == b ) { + hasDuplicate = true; + } + return a.compareDocumentPosition ? -1 : 1; + } + + var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1; + if ( ret === 0 ) { + hasDuplicate = true; + } + return ret; + }; +} else if ( "sourceIndex" in document.documentElement ) { + sortOrder = function( a, b ) { + if ( !a.sourceIndex || !b.sourceIndex ) { + if ( a == b ) { + hasDuplicate = true; + } + return a.sourceIndex ? -1 : 1; + } + + var ret = a.sourceIndex - b.sourceIndex; + if ( ret === 0 ) { + hasDuplicate = true; + } + return ret; + }; +} else if ( document.createRange ) { + sortOrder = function( a, b ) { + if ( !a.ownerDocument || !b.ownerDocument ) { + if ( a == b ) { + hasDuplicate = true; + } + return a.ownerDocument ? -1 : 1; + } + + var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange(); + aRange.setStart(a, 0); + aRange.setEnd(a, 0); + bRange.setStart(b, 0); + bRange.setEnd(b, 0); + var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange); + if ( ret === 0 ) { + hasDuplicate = true; + } + return ret; + }; +} + +// Utility function for retreiving the text value of an array of DOM nodes +function getText( elems ) { + var ret = "", elem; + + for ( var i = 0; elems[i]; i++ ) { + elem = elems[i]; + + // Get the text from text nodes and CDATA nodes + if ( elem.nodeType === 3 || elem.nodeType === 4 ) { + ret += elem.nodeValue; + + // Traverse everything else, except comment nodes + } else if ( elem.nodeType !== 8 ) { + ret += getText( elem.childNodes ); + } + } + + return ret; +} + +// Check to see if the browser returns elements by name when +// querying by getElementById (and provide a workaround) +(function(){ + // We're going to inject a fake input element with a specified name + var form = document.createElement("div"), + id = "script" + (new Date).getTime(); + form.innerHTML = ""; + + // Inject it into the root element, check its status, and remove it quickly + var root = document.documentElement; + root.insertBefore( form, root.firstChild ); + + // The workaround has to do additional checks after a getElementById + // Which slows things down for other browsers (hence the branching) + if ( document.getElementById( id ) ) { + Expr.find.ID = function(match, context, isXML){ + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : []; + } + }; + + Expr.filter.ID = function(elem, match){ + var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); + return elem.nodeType === 1 && node && node.nodeValue === match; + }; + } + + root.removeChild( form ); + root = form = null; // release memory in IE +})(); + +(function(){ + // Check to see if the browser returns only elements + // when doing getElementsByTagName("*") + + // Create a fake element + var div = document.createElement("div"); + div.appendChild( document.createComment("") ); + + // Make sure no comments are found + if ( div.getElementsByTagName("*").length > 0 ) { + Expr.find.TAG = function(match, context){ + var results = context.getElementsByTagName(match[1]); + + // Filter out possible comments + if ( match[1] === "*" ) { + var tmp = []; + + for ( var i = 0; results[i]; i++ ) { + if ( results[i].nodeType === 1 ) { + tmp.push( results[i] ); + } + } + + results = tmp; + } + + return results; + }; + } + + // Check to see if an attribute returns normalized href attributes + div.innerHTML = ""; + if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" && + div.firstChild.getAttribute("href") !== "#" ) { + Expr.attrHandle.href = function(elem){ + return elem.getAttribute("href", 2); + }; + } + + div = null; // release memory in IE +})(); + +if ( document.querySelectorAll ) { + (function(){ + var oldSizzle = Sizzle, div = document.createElement("div"); + div.innerHTML = "

"; + + // Safari can't handle uppercase or unicode characters when + // in quirks mode. + if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) { + return; + } + + Sizzle = function(query, context, extra, seed){ + context = context || document; + + // Only use querySelectorAll on non-XML documents + // (ID selectors don't work in non-HTML documents) + if ( !seed && context.nodeType === 9 && !isXML(context) ) { + try { + return makeArray( context.querySelectorAll(query), extra ); + } catch(e){} + } + + return oldSizzle(query, context, extra, seed); + }; + + for ( var prop in oldSizzle ) { + Sizzle[ prop ] = oldSizzle[ prop ]; + } + + div = null; // release memory in IE + })(); +} + +(function(){ + var div = document.createElement("div"); + + div.innerHTML = "
"; + + // Opera can't find a second classname (in 9.6) + // Also, make sure that getElementsByClassName actually exists + if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) { + return; + } + + // Safari caches class attributes, doesn't catch changes (in 3.2) + div.lastChild.className = "e"; + + if ( div.getElementsByClassName("e").length === 1 ) { + return; + } + + Expr.order.splice(1, 0, "CLASS"); + Expr.find.CLASS = function(match, context, isXML) { + if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) { + return context.getElementsByClassName(match[1]); + } + }; + + div = null; // release memory in IE +})(); + +function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + if ( elem ) { + elem = elem[dir]; + var match = false; + + while ( elem ) { + if ( elem.sizcache === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 && !isXML ){ + elem.sizcache = doneName; + elem.sizset = i; + } + + if ( elem.nodeName.toLowerCase() === cur ) { + match = elem; + break; + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + if ( elem ) { + elem = elem[dir]; + var match = false; + + while ( elem ) { + if ( elem.sizcache === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 ) { + if ( !isXML ) { + elem.sizcache = doneName; + elem.sizset = i; + } + if ( typeof cur !== "string" ) { + if ( elem === cur ) { + match = true; + break; + } + + } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) { + match = elem; + break; + } + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +var contains = document.compareDocumentPosition ? function(a, b){ + return !!(a.compareDocumentPosition(b) & 16); +} : function(a, b){ + return a !== b && (a.contains ? a.contains(b) : true); +}; + +var isXML = function(elem){ + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +var posProcess = function(selector, context){ + var tmpSet = [], later = "", match, + root = context.nodeType ? [context] : context; + + // Position selectors must be done after the filter + // And so must :not(positional) so we move all PSEUDOs to the end + while ( (match = Expr.match.PSEUDO.exec( selector )) ) { + later += match[0]; + selector = selector.replace( Expr.match.PSEUDO, "" ); + } + + selector = Expr.relative[selector] ? selector + "*" : selector; + + for ( var i = 0, l = root.length; i < l; i++ ) { + Sizzle( selector, root[i], tmpSet ); + } + + return Sizzle.filter( later, tmpSet ); +}; + +// EXPOSE +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[":"] = jQuery.expr.filters; +jQuery.unique = Sizzle.uniqueSort; +jQuery.text = getText; +jQuery.isXMLDoc = isXML; +jQuery.contains = contains; + +return; + +window.Sizzle = Sizzle; + +})(); +var runtil = /Until$/, + rparentsprev = /^(?:parents|prevUntil|prevAll)/, + // Note: This RegExp should be improved, or likely pulled from Sizzle + rmultiselector = /,/, + slice = Array.prototype.slice; + +// Implement the identical functionality for filter and not +var winnow = function( elements, qualifier, keep ) { + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep(elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) === keep; + }); + + } else if ( qualifier.nodeType ) { + return jQuery.grep(elements, function( elem, i ) { + return (elem === qualifier) === keep; + }); + + } else if ( typeof qualifier === "string" ) { + var filtered = jQuery.grep(elements, function( elem ) { + return elem.nodeType === 1; + }); + + if ( isSimple.test( qualifier ) ) { + return jQuery.filter(qualifier, filtered, !keep); + } else { + qualifier = jQuery.filter( qualifier, filtered ); + } + } + + return jQuery.grep(elements, function( elem, i ) { + return (jQuery.inArray( elem, qualifier ) >= 0) === keep; + }); +}; + +jQuery.fn.extend({ + find: function( selector ) { + var ret = this.pushStack( "", "find", selector ), length = 0; + + for ( var i = 0, l = this.length; i < l; i++ ) { + length = ret.length; + jQuery.find( selector, this[i], ret ); + + if ( i > 0 ) { + // Make sure that the results are unique + for ( var n = length; n < ret.length; n++ ) { + for ( var r = 0; r < length; r++ ) { + if ( ret[r] === ret[n] ) { + ret.splice(n--, 1); + break; + } + } + } + } + } + + return ret; + }, + + has: function( target ) { + var targets = jQuery( target ); + return this.filter(function() { + for ( var i = 0, l = targets.length; i < l; i++ ) { + if ( jQuery.contains( this, targets[i] ) ) { + return true; + } + } + }); + }, + + not: function( selector ) { + return this.pushStack( winnow(this, selector, false), "not", selector); + }, + + filter: function( selector ) { + return this.pushStack( winnow(this, selector, true), "filter", selector ); + }, + + is: function( selector ) { + return !!selector && jQuery.filter( selector, this ).length > 0; + }, + + closest: function( selectors, context ) { + if ( jQuery.isArray( selectors ) ) { + var ret = [], cur = this[0], match, matches = {}, selector; + + if ( cur && selectors.length ) { + for ( var i = 0, l = selectors.length; i < l; i++ ) { + selector = selectors[i]; + + if ( !matches[selector] ) { + matches[selector] = jQuery.expr.match.POS.test( selector ) ? + jQuery( selector, context || this.context ) : + selector; + } + } + + while ( cur && cur.ownerDocument && cur !== context ) { + for ( selector in matches ) { + match = matches[selector]; + + if ( match.jquery ? match.index(cur) > -1 : jQuery(cur).is(match) ) { + ret.push({ selector: selector, elem: cur }); + delete matches[selector]; + } + } + cur = cur.parentNode; + } + } + + return ret; + } + + var pos = jQuery.expr.match.POS.test( selectors ) ? + jQuery( selectors, context || this.context ) : null; + + return this.map(function( i, cur ) { + while ( cur && cur.ownerDocument && cur !== context ) { + if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selectors) ) { + return cur; + } + cur = cur.parentNode; + } + return null; + }); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + if ( !elem || typeof elem === "string" ) { + return jQuery.inArray( this[0], + // If it receives a string, the selector is used + // If it receives nothing, the siblings are used + elem ? jQuery( elem ) : this.parent().children() ); + } + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this ); + }, + + add: function( selector, context ) { + var set = typeof selector === "string" ? + jQuery( selector, context || this.context ) : + jQuery.makeArray( selector ), + all = jQuery.merge( this.get(), set ); + + return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ? + all : + jQuery.unique( all ) ); + }, + + andSelf: function() { + return this.add( this.prevObject ); + } +}); + +// A painfully simple check to see if an element is disconnected +// from a document (should be improved, where feasible). +function isDisconnected( node ) { + return !node || !node.parentNode || node.parentNode.nodeType === 11; +} + +jQuery.each({ + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return jQuery.dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return jQuery.dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return jQuery.nth( elem, 2, "nextSibling" ); + }, + prev: function( elem ) { + return jQuery.nth( elem, 2, "previousSibling" ); + }, + nextAll: function( elem ) { + return jQuery.dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return jQuery.dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return jQuery.dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return jQuery.dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return jQuery.sibling( elem.parentNode.firstChild, elem ); + }, + children: function( elem ) { + return jQuery.sibling( elem.firstChild ); + }, + contents: function( elem ) { + return jQuery.nodeName( elem, "iframe" ) ? + elem.contentDocument || elem.contentWindow.document : + jQuery.makeArray( elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var ret = jQuery.map( this, fn, until ); + + if ( !runtil.test( name ) ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } + + ret = this.length > 1 ? jQuery.unique( ret ) : ret; + + if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) { + ret = ret.reverse(); + } + + return this.pushStack( ret, name, slice.call(arguments).join(",") ); + }; +}); + +jQuery.extend({ + filter: function( expr, elems, not ) { + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return jQuery.find.matches(expr, elems); + }, + + dir: function( elem, dir, until ) { + var matched = [], cur = elem[dir]; + while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { + if ( cur.nodeType === 1 ) { + matched.push( cur ); + } + cur = cur[dir]; + } + return matched; + }, + + nth: function( cur, result, dir, elem ) { + result = result || 1; + var num = 0; + + for ( ; cur; cur = cur[dir] ) { + if ( cur.nodeType === 1 && ++num === result ) { + break; + } + } + + return cur; + }, + + sibling: function( n, elem ) { + var r = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + r.push( n ); + } + } + + return r; + } +}); +var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g, + rleadingWhitespace = /^\s+/, + rxhtmlTag = /(<([\w:]+)[^>]*?)\/>/g, + rselfClosing = /^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i, + rtagName = /<([\w:]+)/, + rtbody = /"; + }, + wrapMap = { + option: [ 1, "" ], + legend: [ 1, "
", "
" ], + thead: [ 1, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + col: [ 2, "", "
" ], + area: [ 1, "", "" ], + _default: [ 0, "", "" ] + }; + +wrapMap.optgroup = wrapMap.option; +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// IE can't serialize and + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

SyntaxHighlighter Highlight Lines Test

+

+
+

+
    + + + +
    +
    + + + + + + + diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/tests/theme_tests.html b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/theme_tests.html new file mode 100755 index 0000000..da07ecf --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/theme_tests.html @@ -0,0 +1,134 @@ + + + + + SyntaxHighlighter Theme Tests + + + + + +
    + + + + + + + + + diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/tests/webrick.rb b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/webrick.rb new file mode 100755 index 0000000..0b3c93c --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/webrick.rb @@ -0,0 +1,11 @@ +require 'webrick' +include WEBrick + +s = HTTPServer.new( + :Port => 2010, + :DocumentRoot => Dir::pwd +) +s.mount('/sh/scripts', WEBrick::HTTPServlet::FileHandler, '../scripts') +s.mount('/sh/styles', WEBrick::HTTPServlet::FileHandler, '../styles') +trap('INT') { s.stop } +s.start diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/tests/webrick.sh b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/webrick.sh new file mode 100755 index 0000000..7e249f8 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/webrick.sh @@ -0,0 +1,2 @@ +#!/bin/sh +ruby webrick.rb diff --git a/clipper/Documentation/Scripts/bootstrap.js b/clipper/Documentation/Scripts/bootstrap.js new file mode 100755 index 0000000..d779d80 --- /dev/null +++ b/clipper/Documentation/Scripts/bootstrap.js @@ -0,0 +1,2 @@ +// This file may be used to bootstrap the DOM via JavaScript... +SyntaxHighlighter.all(); diff --git a/clipper/Documentation/Scripts/expandable.js b/clipper/Documentation/Scripts/expandable.js new file mode 100755 index 0000000..49b2aec --- /dev/null +++ b/clipper/Documentation/Scripts/expandable.js @@ -0,0 +1,190 @@ +/* + * Expandable list implementation. + * by David Lindquist + * See: + * http://www.gazingus.org/html/DOM-Scripted_Lists_Revisited.html + * Modifies lists so that sublists can be hidden and shown by means of + * a switch. The switch is a node inserted into the DOM tree as the + * first child of the list item containing the sublist. + */ + +// The script will only be applied to lists containing this class name, +// e.g.: . +var CLASS_NAME = "expandable"; + +// This value is the assumed initial display style for a sublist when it cannot +// be determined by other means. See below. +var DEFAULT_DISPLAY = "none"; + +// The namespace to use when using this script in an XML context. +var XMLNS = "http://www.w3.org/1999/xhtml"; + +// The beginning of the title text for the switch when the sublist is collapsed. +var CLOSED_PREFIX = "Expand list: "; + +// The beginning of the title text for the switch when the sublist is expanded. +var OPENED_PREFIX = "Collapse list: "; + +/******************************************************************************/ + +// Returns a copy of a string with leading and trailing whitespace removed. +String.prototype.trim = function() { + return this.replace(/^\s+/, "").replace(/\s+$/, ""); +} + +// Walks the DOM tree starting at a given root element. Returns an +// array of nodes of the specified type and conforming to the criteria +// of the given filter function. The filter should return a boolean. +function getNodesByType(root, type, filter) { + var node = root; + var nodes = []; + var next; + + while (node != null) { + if (node.hasChildNodes()) + node = node.firstChild; + else if (node != root && null != (next = node.nextSibling)) + node = next; + else { + next = null; + for ( ; node != root; node = node.parentNode) { + next = node.nextSibling; + if (next != null) break; + } + node = next; + } + if (node != null && node.nodeType == type && filter(node)) + nodes.push(node); + } + return nodes; +} + +// Simulates the innerText property of IE and other browsers. +// Mozilla/Firefox need this. +function getInnerText(node) { + if (node == null || node.nodeType != 1) + return; + var text = ""; + var textnodes = getNodesByType(node, 3, function() { return true; }); + for (var i = 0; i < textnodes.length; i++) + text += textnodes[i].data; + return text; +} + +function initExpandableLists() { + if (!document.getElementsByTagName) return; + + // Top-level function to accommodate browsers that do not register + // a click event when a link is activated by the keyboard. + switchNode = function(id) { + var node = document.getElementById(id); + if (node && /^switch /.test(node.className)) node.onclick(); + } + + // Top-level function to be assigned as the event handler for the + // switch. This could have been bound to the handler as a closure, + // but closures are associated with memory leak problems in IE. + actuate = function() { + var sublist = this.parentNode.getElementsByTagName("ul")[0] || + this.parentNode.getElementsByTagName("ol")[0]; + if (sublist.style.display == "block") { + sublist.style.display = "none"; + this.firstChild.data = "+"; + this.className = "switch off"; + this.title = this.title.replace(OPENED_PREFIX, CLOSED_PREFIX); + } else { + sublist.style.display = "block"; + this.firstChild.data = "-"; + this.className = "switch on"; + this.title = this.title.replace(CLOSED_PREFIX, OPENED_PREFIX); + } + return false; + } + + // Create switch node from which the others will be cloned. + if (typeof document.createElementNS == "function") + var template = document.createElementNS(XMLNS, "a"); + else + var template = document.createElement("a"); + template.appendChild(document.createTextNode(" ")); + + var list, i = 0, j = 0; + var pattern = new RegExp("(^| )" + CLASS_NAME + "( |$)"); + + while ((list = document.getElementsByTagName("ul")[i++]) || + (list = document.getElementsByTagName("ol")[j++])) + { + // Only lists with the given class name are processed. + if (pattern.test(list.className) == false) continue; + + var item, k = 0; + while ((item = list.getElementsByTagName("li")[k++])) { + var sublist = item.getElementsByTagName("ul")[0] || + item.getElementsByTagName("ol")[0]; + // No sublist under this list item. Skip it. + if (sublist == null) continue; + + // Attempt to determine initial display style of the + // sublist so the proper symbol is used. + var symbol; + switch (sublist.style.display) { + case "none" : symbol = "+"; break; + case "block": symbol = "-"; break; + default: + var display = DEFAULT_DISPLAY; + if (sublist.currentStyle) { + display = sublist.currentStyle.display; + } else if (document.defaultView && + document.defaultView.getComputedStyle && + document.defaultView.getComputedStyle(sublist, "")) + { + var view = document.defaultView; + var computed = view.getComputedStyle(sublist, ""); + display = computed.getPropertyValue("display"); + } + symbol = (display == "none") ? "+" : "-"; + // Explicitly set the display style to make sure it is + // set for the next read. If it is somehow the empty + // string, use the default value from the (X)HTML DTD. + sublist.style.display = display || "block"; + break; + } + + // This bit attempts to extract some text from the first + // child node of the list item to append to the title + // attribute of the switch. + var child = item.firstChild; + var text = ""; + while (child) { + if (child.nodeType == 3 && "" != child.data.trim()) { + text = child.data; + break; + } else if (child.nodeType == 1 && + !/^[ou]l$/i.test(child.tagName)) + { + text = child.innerText || getInnerText(child); + break; + } + child = child.nextSibling; + } + + var actuator = template.cloneNode(true); + // a reasonably unique ID + var uid = "switch" + i + "-" + j + "-" + k; + actuator.id = uid; + actuator.href = "javascript:switchNode('" + uid + "')"; + actuator.className = "switch " + ((symbol == "+") ? "off" : "on"); + actuator.title = ((symbol == "+") + ? CLOSED_PREFIX : OPENED_PREFIX) + text.trim(); + actuator.firstChild.data = symbol; + actuator.onclick = actuate; + item.insertBefore(actuator, item.firstChild); + } + } +} + +// Props to Simon Willison: +// http://simon.incutio.com/archive/2004/05/26/addLoadEvent +var oldhandler = window.onload; +window.onload = (typeof oldhandler == "function") + ? function() { oldhandler(); initExpandableLists(); } : initExpandableLists; diff --git a/clipper/Documentation/Scripts/menu_data.js b/clipper/Documentation/Scripts/menu_data.js new file mode 100755 index 0000000..4382a9e --- /dev/null +++ b/clipper/Documentation/Scripts/menu_data.js @@ -0,0 +1,21 @@ +td_1 = "Overview" +td_1_1 = "Library Overview" +url_1_1 = "Overview/_Body.htm" +td_1_2 = "Changes" +url_1_2 = "Overview/Changes.htm" +td_1_3 = "Examples" +url_1_3 = "Overview/Example.htm" +td_1_4 = "FAQ" +url_1_4 = "Overview/FAQ.htm" +td_1_5 = "Rounding" +url_1_5 = "Overview/Rounding.htm" +td_1_6 = "Compatibility with Prior Versions" +url_1_6 = "Overview/Compatibility with Prior Versions.htm" +td_1_7 = "License" +url_1_7 = "Overview/License.htm" + +td_2 = "Internet" +td_2_1 = "Clipper at SourceForge" +url_2_1 = "%http://sourceforge.net/projects/polyclipping/" +td_2_2 = "Clipper at angusj.com" +url_2_2 = "%http://www.angusj.com/delphi/clipper.php" diff --git a/clipper/Documentation/Scripts/menu_script.js b/clipper/Documentation/Scripts/menu_script.js new file mode 100755 index 0000000..dc9d70d --- /dev/null +++ b/clipper/Documentation/Scripts/menu_script.js @@ -0,0 +1,130 @@ + +////////////////////Please leave this notice//////////////////// +// +// DropDown Menu 1.0 +// By Evgeny Novikov (java@aladin.ru) +// http://java.skyteam.ru +// It works only with IE5.0(++) and Netscape6.0(++) +// Free to use! +// +////////////////////Last modified 2002-03-05//////////////////// + +// Modify following four lines to customize your menu +var tdColor = "#FFFFFF"; // menu item text color +var tdBgColor = "#6060A0"; // menu item background color +var hlColor = "#000000"; // highlight text color +var hlBgColor = "#9595BD"; // highlight background color +// After change, modify same values in your *.css file + +var md = 250; +var ti = -1; +var oTd = new Object; +oTd = null; + +function doMenu(td) { + clearTimeout(ti); + td.style.backgroundColor = hlBgColor; + td.style.color = hlColor; + var i; + var sT = ""; + var tda = new Array(); + tda = td.id.split("_"); + if (oTd != null) { + var tdo = new Array(); + tdo = oTd.id.split("_"); + for (i = 1; i < tdo.length; i++) { + sT += "_" + tdo[i]; + if (tdo[i] != tda[i]) { + document.getElementById("td" + sT).style.backgroundColor = tdBgColor; + document.getElementById("td" + sT).style.color = tdColor; + if (document.getElementById("tbl" + sT) != null) + document.getElementById("tbl" + sT).style.visibility = "hidden"; + } + } + } + oTd = td; + sT = "tbl"; + for (i = 1; i < tda.length; i++) + sT += "_" + tda[i]; + if (document.getElementById(sT) != null) + document.getElementById(sT).style.visibility = "visible"; + +} + +function clearMenu() { + if (oTd != null) { + var tdo = new Array(); + tdo = oTd.id.split("_"); + var sT = ""; + for (var i = 1; i < tdo.length; i++) { + sT += "_" + tdo[i]; + document.getElementById("td" + sT).style.backgroundColor = tdBgColor; + document.getElementById("td" + sT).style.color = tdColor; + if (document.getElementById("tbl" + sT) != null) + document.getElementById("tbl" + sT).style.visibility = "hidden"; + } + oTd = null; + } +} + +function runMenu(strURL) { + if (strURL.charAt(0) == '%') + window.open(strURL.substr(1)); + else + location.href = strURL; +} + +var tt = ""; +var sT = ""; +var pT = new Array(); +var tA = new Array(); + +function getCoord(st) { + tA = st.split("_"); + if (tA.length > 2) { + tA = tA.slice(0,-1); + tt = tA.join("_"); + return (document.getElementById("tbl" + tt).offsetTop + document.getElementById("td" + st).offsetTop - 1) + "px;left:" + + (document.getElementById("tbl" + tt).offsetLeft + document.getElementById("td" + st).offsetWidth - 2) + "px\">"; + } + return (document.getElementById("mainmenu").offsetTop + document.getElementById("td" + st).offsetHeight - 10) + "px;left:" + + (document.getElementById("mainmenu").offsetLeft + document.getElementById("td" + st).offsetLeft + 5) + "px\">"; +} + +function isDefined(varname) { + return eval("typeof(" + varname + ") != \"undefined\""); +} + +var sH = ""; +var p = 0; +var j = 0; + +while (isDefined("td_" + ++j)) { + sH += ""; + if (isDefined("td_" + j + "_1")) + pT[p++] = "_" + j; +} + +sH += ""; +sH += "
    " : ">"; + sH += eval("td_" + j) + "
    "; +document.write(sH); + +for (var q = 0; typeof(pT[q]) != "undefined"; q++) { + sT = pT[q]; + sH = ""; + j = 0; + sH += "" : ">"; + sH += eval("td" + sT + "_" + j) + ""; + if (isDefined("td" + sT + "_" + j + "_1")) + pT[p++] = sT + "_" + j; + } + sH += "
    "; + document.write(sH); +} +document.getElementById("mainmenu").style.visibility = "visible"; + diff --git a/clipper/Documentation/Styles/Default.css b/clipper/Documentation/Styles/Default.css new file mode 100755 index 0000000..74b4d96 --- /dev/null +++ b/clipper/Documentation/Styles/Default.css @@ -0,0 +1,265 @@ +p.Body { + margin-left: 1cm; + margin-right: 0.5cm; +} + +p.Hierarchy { + margin-top: 0; + margin-left : 1cm; + margin-bottom : 0; + font-size : 90%; +} + +.EmptyRef { + font-weight: bold; +} + +.API { + color: #700070; + font-style: italic; +} + +.Code { + margin-left: 1cm; + margin-right: 1cm; + margin-top: 0px; + margin-bottom: 0px; +} + +p.Decl { + font-family: "Courier New", Courier, monospace; + background-color: #E0E0E0; + padding-top: 3pt; + padding-right: 4pt; + padding-left: 6pt; + padding-bottom: 3pt; + margin-left: 1cm; + margin-top: 0px; + margin-right: 0.5cm; + margin-bottom: 0px; +} + +p.Decl2 { + font-family: "Courier New", Courier, monospace; + background-color: #99FF99; + padding-top: 3pt; + padding-right: 4pt; + padding-left: 6pt; + padding-bottom: 3pt; + margin-left: 1cm; + margin-top: 0px; + margin-right: 0.5cm; + margin-bottom: 0px; + font-size : 100%; +} + +p.Decl3 { + font-family: "Courier New", Courier, monospace; + background-color: #FFBBCC; + padding-top: 3pt; + padding-right: 4pt; + padding-left: 6pt; + padding-bottom: 3pt; + margin-left: 1cm; + margin-top: 0px; + margin-right: 0.5cm; + margin-bottom: 0px; + font-size : 100%; +} + +p.Decl4 { + font-family: Arial, Helvetica, sans-serif; + padding-top: 3pt; + padding-right: 4pt; + padding-left: 6pt; + padding-bottom: 3pt; + margin-left: 1cm; + margin-top: 0px; + margin-right: 0.5cm; + margin-bottom: 0px; +} + +body { + font-family: Verdana, Tahoma, serif; + font-size: 80%; + margin-left : 2px; + margin-top: 2px; + margin-right : 2px; + margin-top : 2px; +} + +p { + margin-top: 5pt; + margin-bottom: 5pt; +} + +h1 { + font-size: 150%; + margin-top: 5pt; + margin-bottom: 16pt; + margin-left : 0.25cm; +} + +h2 { + font-size: 100%; + margin-bottom: 4pt; + margin-top: 16px; + margin-left: 0.25cm; + padding-left: 0px; +} + +table { + border: none; + margin-left: 1cm; + border-color: #FFFFFF; + margin-right: 0.5cm; +} + +th { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 80%; + background-color: #99FF99; + padding-right: 6pt; + padding-left: 6pt; +} + +td { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 80%; + background-color: #F0F0F0; + padding-right: 4pt; + padding-left: 4pt; +} + +td.White { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 80%; + background-color: #FFFFFF; + padding-right: 4pt; + padding-left: 4pt; +} + +table.Banner { + color: white; + font-size: 9pt; + background-color: #9595bd; + margin: 1px; + padding: 1px, 10px; + width: 100%; + cellpadding: 0; + cellspacing: 0; +} + +td.Banner { + background-color: #6060A0; + font-size: 9pt; + margin: 1px; + padding: 1px 10px; +} +a:link { color: blue; text-decoration: none } +a:visited { color: blue; text-decoration: none } +a:hover { color: black; text-decoration: none; background-color: #d0d0ff } +table.Home { + background-color: #FFFFFF; + border: #FFFFFF none; + margin: 1px; + padding: 0px; + border-color: #FFFFFF; + /*width: 100%;*/ +} +table.menu { color: white; background-color: #6060a0; visibility: hidden; cursor: pointer; margin: 1px; padding: 1px 10px; position: static; border: 1px solid; border-color: #272758 #656596 #272758 #272758 } +table.menudrop { color: white; background-color: #6060a0; visibility: hidden; cursor: pointer; margin: 10px; padding: 5px 10px; position: absolute; border-left: 1px solid #444475 } +table.menu td { font-size: 8pt; background-color: #6060a0; white-space: nowrap; margin: 1px; padding: 1px 10px; border: #FFFFFF none; } +table.menudrop td { font-size: 8pt; background-color: #6060a0; white-space: nowrap; margin: 1px; padding: 5px 10px; border: #FFFFFF none; } +td.Home { + background-color: #FFFFFF; + padding: 1px 0px; + margin: 1px; +} +a:link.Banner { + text-decoration: none; + color: white; +} + +a:visited.Banner { + text-decoration: none; + color : white; +} + +a:hover.Banner { + background-color: #6060A0; + text-decoration: none; + color: white; +} + +a.Bold { + font-weight: bold; +} + +li { + list-style-position: outside; + list-style-type: square; + margin-top: 3pt; margin-bottom: 3pt; + margin-left: 12pt; +} + +ul { + margin-top: 8pt; + margin-bottom : 8pt; +} + +.Comment { + font-style: italic; + color: #206020; +} + +.CPPNumeric { + color: blue; +} + +.CSharp { + color: #2B91AF; +} + +img { + margin-top: 0px; + margin-right: 0px; + margin-bottom: 0px; + margin-left: 0px; + border-top-width: 0px; + border-right-width: 0px; + border-bottom-width: 0px; + border-left-width: 0px; + padding-top: 0px; + padding-right: 0px; + padding-bottom: 0px; + padding-left: 0px; +} + +span.sub { + font-size: 80%; + vertical-align: sub; +} + +.Tree { + margin-top: 0px; + margin-bottom: 0px; + margin-left: 1cm; + padding-top: 0px; + padding-bottom: 0px; +} + +span.Menu { + font-weight: bold; + color: #402000 +} + +p.Copyright {font-size: 7pt; color: #808090; text-align: center; font-family: Tahoma, Arial, sans-serif} + +.pascalcode { + margin-left: 1cm; + font-family: "Courier New", Courier, mono; +} +#mainmenu { position: static } + +.maroon {color: #990000;} \ No newline at end of file diff --git a/clipper/Documentation/clipper.chm b/clipper/Documentation/clipper.chm new file mode 100755 index 0000000000000000000000000000000000000000..73b64f2eefc9adf60365d4183cc493c583195790 GIT binary patch literal 327688 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%0D%~MX1K^lJ-dVKwL64}{oMra8&Rw*$23k2znIUB2 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

    U_Ex4qX`t^{HYoyUK!g?#iz{vgcR$6V-W{4N7CU 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

    !spPY5P0wSj`F~e<_3n1uK;NLD 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

    4ugC;5e6ULL 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 literal 0 HcmV?d00001 diff --git a/clipper/Documentation/index.htm b/clipper/Documentation/index.htm new file mode 100755 index 0000000..06e4946 --- /dev/null +++ b/clipper/Documentation/index.htm @@ -0,0 +1,12 @@ + + + + + +Redirect + + +If the documentation doesn't open automatically, click here. + + diff --git a/clipper/Flash/AS3_flash_readme.txt b/clipper/Flash/AS3_flash_readme.txt new file mode 100755 index 0000000..da54dfd --- /dev/null +++ b/clipper/Flash/AS3_flash_readme.txt @@ -0,0 +1,2 @@ +An AS3 Flash port written by Chris Denham: +https://github.com/ChrisDenham/PolygonClipper.AS3 diff --git a/clipper/Haskell/Haskell_readme.txt b/clipper/Haskell/Haskell_readme.txt new file mode 100755 index 0000000..a341b6d --- /dev/null +++ b/clipper/Haskell/Haskell_readme.txt @@ -0,0 +1,4 @@ + +An Haskell module written by Chetan Taralekar +that wraps the Clipper library can be downloaded from: +http://hackage.haskell.org/package/clipper diff --git a/clipper/License.txt b/clipper/License.txt new file mode 100755 index 0000000..51acabf --- /dev/null +++ b/clipper/License.txt @@ -0,0 +1,29 @@ +The Clipper code library, the "Software" (that includes Delphi, C++ & C# +source code, accompanying samples and documentation), has been released +under the following license, terms and conditions: + +Boost Software License - Version 1.0 - August 17th, 2003 +http://www.boost.org/LICENSE_1_0.txt + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + diff --git a/clipper/Matlab/matlab_readme.txt b/clipper/Matlab/matlab_readme.txt new file mode 100755 index 0000000..3950354 --- /dev/null +++ b/clipper/Matlab/matlab_readme.txt @@ -0,0 +1,4 @@ + +A Matlab wrapper for Clipper by Emmett (emmettl@u.washington.edu) can be downloaded from: + +http://www.mathworks.com/matlabcentral/fileexchange/36241 \ No newline at end of file diff --git a/clipper/README b/clipper/README new file mode 100755 index 0000000..7f4d513 --- /dev/null +++ b/clipper/README @@ -0,0 +1,288 @@ +============================================================ +Clipper Change Log +============================================================ +v5.1.0 (17 February 2013) +* Update: ExPolygons has been replaced with the PolyTree & + PolyNode classes to more fully represent the parent-child + relationships of the polygons returned by Clipper. +* Added: New CleanPolygon and CleanPolygons functions. +* Bugfix: Another orientation bug fixed. + +v5.0.2 - 30 December 2012 +* Bugfix: Significant fixes in and tidy of the internal + Int128 class (which is used only when polygon coordinate + values are greater than ±0x3FFFFFFF (~1.07e9)). +* Update: The Area algorithm has been updated and is faster. +* Update: Documentation updates. The newish but undocumented + 'CheckInputs' parameter of the OffsetPolygons function has been + renamed 'AutoFix' and documented too. The comments on rounding + have also been improved (ie clearer and expanded). + +v4.10.0 - 25 December 2012 +* Bugfix: Orientation bugs should now be resolved (finally!). +* Bugfix: Bug in Int128 class + +v4.9.8 - 2 December 2012 +* Bugfix: Further fixes to rare Orientation bug. + +v4.9.7 - 29 November 2012 +* Bugfix: Bug that very rarely returned the wrong polygon + orientation. +* Bugfix: Obscure bug affecting OffsetPolygons when using + jtRound for the JoinType parameter and when polygons also + contain very large coordinate values (> +/-100000000000). + +v4.9.6 - 9 November 2012 +* Bugfix: Another obscure bug related to joining polygons. + +v4.9.4 - 2 November 2012 +* Bugfix: Bugs in Int128 class occasionally causing + wrong orientations. +* Bugfix: Further fixes related to joining polygons. + +v4.9.0 - 9 October 2012 +* Bugfix: Obscure bug related to joining polygons. + +v4.8.9 - 25 September 2012 +* Bugfix: Obscure bug related to precision of intersections. + +v4.8.8 - 30 August 2012 +* Bugfix: Fixed bug in OffsetPolygons function introduced in + version 4.8.5. + +v4.8.7 - 24 August 2012 +* Bugfix: ReversePolygon function in C++ translation was broken. +* Bugfix: Two obscure bugs affecting orientation fixed too. + +v4.8.6 - 11 August 2012 +* Bugfix: Potential for memory overflow errors when using + ExPolygons structure. +* Bugfix: The polygon coordinate range has been reduced to + +/- 0x3FFFFFFFFFFFFFFF (4.6e18). +* Update: ReversePolygons function was misnamed ReversePoints in C++. +* Update: SimplifyPolygon function now takes a PolyFillType parameter. + +v4.8.5 - 15 July 2012 +* Bugfix: Potential for memory overflow errors in OffsetPolygons(). + +v4.8.4 - 1 June 2012 +* Bugfix: Another obscure bug affecting ExPolygons structure. + +v4.8.3 - 27 May 2012 +* Bugfix: Obscure bug causing incorrect removal of a vertex. + +v4.8.2 - 21 May 2012 +* Bugfix: Obscure bug could cause an exception when using + ExPolygon structure. + +v4.8.1 - 12 May 2012 +* Update: Cody tidy and minor bug fixes. + +v4.8.0 - 30 April 2012 +* Bugfix: Occasional errors in orientation fixed. +* Update: Added notes on rounding to the documentation. + +v4.7.6 - 11 April 2012 +* Fixed a bug in Orientation function (affecting C# translations only). +* Minor documentation update. + +v4.7.5 - 28 March 2012 +* Bugfix: Fixed a recently introduced bug that occasionally caused an + unhandled exception in C++ and C# translations. + +v4.7.4 - 15 March 2012 +* Bugfix: Another minor bugfix. + +v4.7.2 - 4 March 2012 +* Bugfix: Fixed bug introduced in ver 4.7 which sometimes caused + an exception if ExPolygon structure was passed to Clipper's + Execute method. + +v4.7.1 - 3 March 2012 +* Bugfix: Rare crash when JoinCommonEdges joined polygons that + 'cancelled' each other. +* Bugfix: Clipper's internal Orientation method occasionally + returned wrong result. +* Update: Improved C# code (thanks to numerous excellent suggestions + from David Piepgrass) + +v4.7 - 10 February 2012 +* Improved the joining of output polygons sharing a common edge. + +v4.6.6 - 3 February 2012 +* Bugfix: Another obscure bug occasionally causing incorrect + polygon orientation. + +v4.6.5 - 17 January 2012 +* Bugfix: Obscure bug occasionally causing incorrect hole + assignment in ExPolygon structure. + +v4.6.4 - 8 November 2011 +* Added: SimplifyPolygon and SimplifyPolygons functions. + +v4.6.3 - 11 November 2011 +* Bugfix: Fixed another minor mitering bug in OffsetPolygons. + +v4.6.2 - 10 November 2011 +* Bugfix: Fixed a rare bug in the orientation of polygons + returned by Clipper's Execute() method. +* Bugfix: Previous update introduced a mitering bug in the + OffsetPolygons function. + +v4.6 - 29 October 2011 +* Added: Support for Positive and Negative polygon fill + types (in addition to the EvenOdd and NonZero fill types). +* Bugfix: The OffsetPolygons function was generating the + occasional artefact when 'shrinking' polygons. + +v4.5.5 - 8 October 2011 +* Bugfix: Fixed an obscure bug in Clipper's JoinCommonEdges + method. +* Update: Replaced IsClockwise function with Orientation + function. The orientation issues affecting OffsetPolygons + should now be finally resolved. +* Change: The Area function once again returns a signed value. + +v4.5.1 - 28 September 2011 +* Deleted: The UseFullCoordinateRange property has been + deleted since integer range is now managed implicitly. +* BugFix: Minor bug in OffsetPolygon mitering. +* Change: C# JoinType enum moved from Clipper class to + ClipperLib namespace. +* Change: The Area function now returns the absolute area + (irrespective of orientation). +* Change: The IsClockwise function now requires a second + parameter - YAxisPositiveUpward - to accommodate displays + with Y-axis oriented in either direction + +v4.4.4 - 10 September 2011 +* Change: Deleted jtButt from JoinType (used by the + OffsetPolygons function). +* BugFix: Fixed another minor bug in OffsetPolygons function. +* Update: Further improvements to the help file + +v4.4.3 - 29 August 2011 +* BugFix: fixed a minor rounding issue in OffsetPolygons + function (affected C++ & C# translations). +* BugFix: fixed a minor bug in OffsetPolygons' function + declaration (affected C++ translation only). +* Change: 'clipper' namespace changed to 'ClipperLib' + namespace in both C++ and C# code to remove the ambiguity + between the Clipper class and the namespace. (This also + required numerous updates to the accompanying demos.) + +v4.4.2 - 26 August 2011 +* BugFix: minor bugfixes in Clipper. +* Update: the OffsetPolygons function has been significantly + improved by offering 4 different join styles. + +v4.4.0 - 6 August 2011 +* BugFix: A number of minor bugs have been fixed that mostly + affected the new ExPolygons structure. + +v4.3.0 - 17 June 2011 +* New: ExPolygons structure that explicitly associates 'hole' + polygons with their 'outer' container polygons. +* New: Execute method overloaded so the solution parameter + can now be either Polygons or ExPolygons. +* BugFix: Fixed a rare bug in solution polygons orientation. + +v4.2.8 - 21 May 2011 +* Update: JoinCommonEdges() improved once more. +* BugFix: Several minor bugs fixed. + +v4.2.6 - 1 May 2011 +* Bugfix: minor bug in SlopesEqual function. +* Update: Merging of output polygons sharing common edges + has been significantly inproved + +v4.2.4 - 26 April 2011 + Input polygon coordinates can now contain the full range of + signed 64bit integers (ie +/-9,223,372,036,854,775,807). This + means that floating point values can be converted to and from + Clipper's 64bit integer coordinates structure (IntPoint) and + still retain a precision of up to 18 decimal places. However, + since the large-integer math that supports this expanded range + imposes a small cost on performance (~15%), a new property + UseFullCoordinateRange has been added to the Clipper class to + allow users the choice of whether or not to use this expanded + coordinate range. If this property is disabled, coordinate values + are restricted to +/-1,500,000,000. + +v4.2 - 12 April 2011 + JoinCommonEdges() code significantly improved plus other minor + improvements. + +v4.1.2 - 9 April 2011 +* Update: Minor code tidy. +* Bugfix: Possible endless loop in JoinCommonEdges() in clipper.pas. + +v4.1.1 - 8 April 2011 +* Update: All polygon coordinates are now stored as 64bit integers + (though they're still restricted to range -1.5e9 to +1.5e9 pending + the inclusion of code supporting 64bit math). +* Change: AddPolygon and AddPolygons methods now return boolean + values. +* Bugfix: Bug in JoinCommonEdges() caused potential endless loop. +* Bugfix: Bug in IsClockwise(). (C++ code only) + +v4.0 - 5 April 2011 +* Clipper 4 is a major rewrite of earlier versions. The biggest + change is that floating point values are no longer used, + except for the storing of edge slope values. The main benefit + of this is the issue of numerical robustness has been + addressed. Due to other major code improvements Clipper v4 + is approximately 40% faster than Clipper v3. +* The AddPolyPolygon method has been renamed to AddPolygons. +* The IgnoreOrientation property has been removed. +* The clipper_misc library has been merged back into the + main clipper library. + +v3.1.0 - 17 February 2011 +* Bugfix: Obscure bug in TClipperBase.SetDx method that caused + problems with very small edges ( edges <1/1000th pixel in size). + +v3.0.3 - 9 February 2011 +* Bugfix: Significant bug, but only in C# code. +* Update: Minor refactoring. + +v3.0 - 31 January 2011 +* Update: Major rewrite of the portion of code that calculates + the output polygons' orientation. +* Update: Help file significantly improved. +* Change: Renamed ForceOrientation property to IgnoreOrientation. + If the orientation of output polygons is not important, or can + be managed separately, clipping routines can be sped up by about + 60% by setting IgnoreOrientation to true. Defaults to false. +* Change: The OffsetPolygon and Area functions have been moved to + the new unit - clipper_misc. + +2.99 - 15 January 2011 +* Bugfix: Obscure bug in AddPolygon method could cause an endless loop. + +2.8 - 20 November 2010 +* Updated: Output polygons which previously shared a common + edge are now merged. +* Changed: The orientation of outer polygons is now clockwise + when the display's Y axis is positive downwards (as is + typical for most Windows applications). Inner polygons + (holes) have the opposite orientation. +* Added: Support module for Cairo Graphics Library (with demo). +* Updated: C# and C++ demos. + +2.522 - 15 October 2010 +* Added C# translation (thanks to Olivier Lejeune) and + a link to Ruby bindings (thanks to Mike Owens). + +2.0 - 30 July 2010 +* Clipper now clips using both the Even-Odd (alternate) and + Non-Zero (winding) polygon filling rules. (Previously Clipper + assumed the Even-Odd rule for polygon filling.) + +1.4c - 16 June 2010 +* Added C++ support for AGG graphics library + +1.2s - 2 June 2010 +* Added C++ translation of clipper.pas + +1.0 - 9 May 2010 \ No newline at end of file diff --git a/clipper/clipper.cpp b/clipper/clipper.cpp new file mode 100755 index 0000000..1042052 --- /dev/null +++ b/clipper/clipper.cpp @@ -0,0 +1,3469 @@ +/******************************************************************************* +* * +* Author : Angus Johnson * +* Version : 5.1.0 * +* Date : 1 February 2013 * +* Website : http://www.angusj.com * +* Copyright : Angus Johnson 2010-2013 * +* * +* License: * +* Use, modification & distribution is subject to Boost Software License Ver 1. * +* http://www.boost.org/LICENSE_1_0.txt * +* * +* Attributions: * +* The code in this library is an extension of Bala Vatti's clipping algorithm: * +* "A generic solution to polygon clipping" * +* Communications of the ACM, Vol 35, Issue 7 (July 1992) pp 56-63. * +* http://portal.acm.org/citation.cfm?id=129906 * +* * +* Computer graphics and geometric modeling: implementation and algorithms * +* By Max K. Agoston * +* Springer; 1 edition (January 4, 2005) * +* http://books.google.com/books?q=vatti+clipping+agoston * +* * +* See also: * +* "Polygon Offsetting by Computing Winding Numbers" * +* Paper no. DETC2005-85513 pp. 565-575 * +* ASME 2005 International Design Engineering Technical Conferences * +* and Computers and Information in Engineering Conference (IDETC/CIE2005) * +* September 24-28, 2005 , Long Beach, California, USA * +* http://www.me.berkeley.edu/~mcmains/pubs/DAC05OffsetPolygon.pdf * +* * +*******************************************************************************/ + +/******************************************************************************* +* * +* This is a translation of the Delphi Clipper library and the naming style * +* used has retained a Delphi flavour. * +* * +*******************************************************************************/ + +#include "clipper.hpp" +#include +#include +#include +#include +#include +#include +#include + +namespace ClipperLib { + +static long64 const loRange = 0x3FFFFFFF; +static long64 const hiRange = 0x3FFFFFFFFFFFFFFFLL; +static double const pi = 3.141592653589793238; +enum Direction { dRightToLeft, dLeftToRight }; + +#define HORIZONTAL (-1.0E+40) +#define TOLERANCE (1.0e-20) +#define NEAR_ZERO(val) (((val) > -TOLERANCE) && ((val) < TOLERANCE)) +#define NEAR_EQUAL(a, b) NEAR_ZERO((a) - (b)) + +inline long64 Abs(long64 val) +{ + return val < 0 ? -val : val; +} + +//------------------------------------------------------------------------------ +// PolyTree methods ... +//------------------------------------------------------------------------------ + +void PolyTree::Clear() +{ + for (PolyNodes::size_type i = 0; i < AllNodes.size(); ++i) + delete AllNodes[i]; + AllNodes.resize(0); + Childs.resize(0); +} +//------------------------------------------------------------------------------ + +PolyNode* PolyTree::GetFirst() +{ + if (Childs.size() > 0) + return Childs[0]; + else + return 0; +} +//------------------------------------------------------------------------------ + +int PolyTree::Total() +{ + return AllNodes.size(); +} + +//------------------------------------------------------------------------------ +// PolyNode methods ... +//------------------------------------------------------------------------------ + + +int PolyNode::ChildCount() +{ + return Childs.size(); +} +//------------------------------------------------------------------------------ + +void PolyNode::AddChild(PolyNode& child) +{ + unsigned cnt = Childs.size(); + Childs.push_back(&child); + child.Parent = this; + child.Index = cnt; +} +//------------------------------------------------------------------------------ + +PolyNode* PolyNode::GetNext() +{ + if (Childs.size() > 0) + return Childs[0]; + else + return GetNextSiblingUp(); +} +//------------------------------------------------------------------------------ + +PolyNode* PolyNode::GetNextSiblingUp() +{ + if (!Parent) //protects against PolyTree.GetNextSiblingUp() + return 0; + else if (Index == Parent->Childs.size() - 1) + return Parent->GetNextSiblingUp(); + else + return Parent->Childs[Index + 1]; +} +//------------------------------------------------------------------------------ + +bool PolyNode::IsHole() +{ + bool result = true; + PolyNode* node = Parent; + while (node) + { + result = !result; + node = node->Parent; + } + return result; +} + +//------------------------------------------------------------------------------ +// Int128 class (enables safe math on signed 64bit integers) +// eg Int128 val1((long64)9223372036854775807); //ie 2^63 -1 +// Int128 val2((long64)9223372036854775807); +// Int128 val3 = val1 * val2; +// val3.AsString => "85070591730234615847396907784232501249" (8.5e+37) +//------------------------------------------------------------------------------ + +class Int128 +{ + public: + + ulong64 lo; + long64 hi; + + Int128(long64 _lo = 0) + { + lo = (ulong64)_lo; + if (_lo < 0) hi = -1; else hi = 0; + } + + + Int128(const Int128 &val): lo(val.lo), hi(val.hi){} + + Int128(const long64& _hi, const ulong64& _lo): lo(_lo), hi(_hi){} + + long64 operator = (const long64 &val) + { + lo = (ulong64)val; + if (val < 0) hi = -1; else hi = 0; + return val; + } + + bool operator == (const Int128 &val) const + {return (hi == val.hi && lo == val.lo);} + + bool operator != (const Int128 &val) const + { return !(*this == val);} + + bool operator > (const Int128 &val) const + { + if (hi != val.hi) + return hi > val.hi; + else + return lo > val.lo; + } + + bool operator < (const Int128 &val) const + { + if (hi != val.hi) + return hi < val.hi; + else + return lo < val.lo; + } + + bool operator >= (const Int128 &val) const + { return !(*this < val);} + + bool operator <= (const Int128 &val) const + { return !(*this > val);} + + Int128& operator += (const Int128 &rhs) + { + hi += rhs.hi; + lo += rhs.lo; + if (lo < rhs.lo) hi++; + return *this; + } + + Int128 operator + (const Int128 &rhs) const + { + Int128 result(*this); + result+= rhs; + return result; + } + + Int128& operator -= (const Int128 &rhs) + { + *this += -rhs; + return *this; + } + + Int128 operator - (const Int128 &rhs) const + { + Int128 result(*this); + result -= rhs; + return result; + } + + Int128 operator-() const //unary negation + { + if (lo == 0) + return Int128(-hi,0); + else + return Int128(~hi,~lo +1); + } + + Int128 operator/ (const Int128 &rhs) const + { + if (rhs.lo == 0 && rhs.hi == 0) + throw "Int128 operator/: divide by zero"; + + bool negate = (rhs.hi < 0) != (hi < 0); + Int128 dividend = *this; + Int128 divisor = rhs; + if (dividend.hi < 0) dividend = -dividend; + if (divisor.hi < 0) divisor = -divisor; + + if (divisor < dividend) + { + Int128 result = Int128(0); + Int128 cntr = Int128(1); + while (divisor.hi >= 0 && !(divisor > dividend)) + { + divisor.hi <<= 1; + if ((long64)divisor.lo < 0) divisor.hi++; + divisor.lo <<= 1; + + cntr.hi <<= 1; + if ((long64)cntr.lo < 0) cntr.hi++; + cntr.lo <<= 1; + } + divisor.lo >>= 1; + if ((divisor.hi & 1) == 1) + divisor.lo |= 0x8000000000000000LL; + divisor.hi = (ulong64)divisor.hi >> 1; + + cntr.lo >>= 1; + if ((cntr.hi & 1) == 1) + cntr.lo |= 0x8000000000000000LL; + cntr.hi >>= 1; + + while (cntr.hi != 0 || cntr.lo != 0) + { + if (!(dividend < divisor)) + { + dividend -= divisor; + result.hi |= cntr.hi; + result.lo |= cntr.lo; + } + divisor.lo >>= 1; + if ((divisor.hi & 1) == 1) + divisor.lo |= 0x8000000000000000LL; + divisor.hi >>= 1; + + cntr.lo >>= 1; + if ((cntr.hi & 1) == 1) + cntr.lo |= 0x8000000000000000LL; + cntr.hi >>= 1; + } + if (negate) result = -result; + return result; + } + else if (rhs.hi == this->hi && rhs.lo == this->lo) + return Int128(1); + else + return Int128(0); + } + + double AsDouble() const + { + const double shift64 = 18446744073709551616.0; //2^64 + if (hi < 0) + { + if (lo == 0) return (double)hi * shift64; + else return -(double)(~lo + ~hi * shift64); + } + else + return (double)(lo + hi * shift64); + } +}; + +Int128 Int128Mul (long64 lhs, long64 rhs) +{ + bool negate = (lhs < 0) != (rhs < 0); + + if (lhs < 0) lhs = -lhs; + ulong64 int1Hi = ulong64(lhs) >> 32; + ulong64 int1Lo = ulong64(lhs & 0xFFFFFFFF); + + if (rhs < 0) rhs = -rhs; + ulong64 int2Hi = ulong64(rhs) >> 32; + ulong64 int2Lo = ulong64(rhs & 0xFFFFFFFF); + + //nb: see comments in clipper.pas + ulong64 a = int1Hi * int2Hi; + ulong64 b = int1Lo * int2Lo; + ulong64 c = int1Hi * int2Lo + int1Lo * int2Hi; + + Int128 tmp; + tmp.hi = long64(a + (c >> 32)); + tmp.lo = long64(c << 32); + tmp.lo += long64(b); + if (tmp.lo < b) tmp.hi++; + if (negate) tmp = -tmp; + return tmp; +} + +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ + +bool FullRangeNeeded(const Polygon &pts) +{ + bool result = false; + for (Polygon::size_type i = 0; i < pts.size(); ++i) + { + if (Abs(pts[i].X) > hiRange || Abs(pts[i].Y) > hiRange) + throw "Coordinate exceeds range bounds."; + else if (Abs(pts[i].X) > loRange || Abs(pts[i].Y) > loRange) + result = true; + } + return result; +} +//------------------------------------------------------------------------------ + +bool Orientation(const Polygon &poly) +{ + return Area(poly) >= 0; +} +//------------------------------------------------------------------------------ + +inline bool PointsEqual( const IntPoint &pt1, const IntPoint &pt2) +{ + return ( pt1.X == pt2.X && pt1.Y == pt2.Y ); +} +//------------------------------------------------------------------------------ + +double Area(const Polygon &poly) +{ + int highI = (int)poly.size() -1; + if (highI < 2) return 0; + + if (FullRangeNeeded(poly)) { + Int128 a; + a = Int128Mul(poly[highI].X + poly[0].X, poly[0].Y - poly[highI].Y); + for (int i = 1; i <= highI; ++i) + a += Int128Mul(poly[i - 1].X + poly[i].X, poly[i].Y - poly[i -1].Y); + return a.AsDouble() / 2; + } + else + { + double a; + a = ((double)poly[highI].X + poly[0].X) * ((double)poly[0].Y - poly[highI].Y); + for (int i = 1; i <= highI; ++i) + a += ((double)poly[i - 1].X + poly[i].X) * ((double)poly[i].Y - poly[i - 1].Y); + return a / 2; + } +} +//------------------------------------------------------------------------------ + +double Area(const OutRec &outRec, bool UseFullInt64Range) +{ + OutPt *op = outRec.pts; + if (!op) return 0; + if (UseFullInt64Range) { + Int128 a(0); + do { + a += Int128Mul(op->pt.X + op->prev->pt.X, op->prev->pt.Y - op->pt.Y); + op = op->next; + } while (op != outRec.pts); + return a.AsDouble() / 2; + } + else + { + double a = 0; + do { + a = a + (op->pt.X + op->prev->pt.X) * (op->prev->pt.Y - op->pt.Y); + op = op->next; + } while (op != outRec.pts); + return a / 2; + } +} +//------------------------------------------------------------------------------ + +bool PointIsVertex(const IntPoint &pt, OutPt *pp) +{ + OutPt *pp2 = pp; + do + { + if (PointsEqual(pp2->pt, pt)) return true; + pp2 = pp2->next; + } + while (pp2 != pp); + return false; +} +//------------------------------------------------------------------------------ + +bool PointInPolygon(const IntPoint &pt, OutPt *pp, bool UseFullInt64Range) +{ + OutPt *pp2 = pp; + bool result = false; + if (UseFullInt64Range) { + do + { + if ((((pp2->pt.Y <= pt.Y) && (pt.Y < pp2->prev->pt.Y)) || + ((pp2->prev->pt.Y <= pt.Y) && (pt.Y < pp2->pt.Y))) && + Int128(pt.X - pp2->pt.X) < + Int128Mul(pp2->prev->pt.X - pp2->pt.X, pt.Y - pp2->pt.Y) / + Int128(pp2->prev->pt.Y - pp2->pt.Y)) + result = !result; + pp2 = pp2->next; + } + while (pp2 != pp); + } + else + { + do + { + if ((((pp2->pt.Y <= pt.Y) && (pt.Y < pp2->prev->pt.Y)) || + ((pp2->prev->pt.Y <= pt.Y) && (pt.Y < pp2->pt.Y))) && + (pt.X < (pp2->prev->pt.X - pp2->pt.X) * (pt.Y - pp2->pt.Y) / + (pp2->prev->pt.Y - pp2->pt.Y) + pp2->pt.X )) result = !result; + pp2 = pp2->next; + } + while (pp2 != pp); + } + return result; +} +//------------------------------------------------------------------------------ + +bool SlopesEqual(TEdge &e1, TEdge &e2, bool UseFullInt64Range) +{ + if (UseFullInt64Range) + return Int128Mul(e1.deltaY, e2.deltaX) == Int128Mul(e1.deltaX, e2.deltaY); + else return e1.deltaY * e2.deltaX == e1.deltaX * e2.deltaY; +} +//------------------------------------------------------------------------------ + +bool SlopesEqual(const IntPoint pt1, const IntPoint pt2, + const IntPoint pt3, bool UseFullInt64Range) +{ + if (UseFullInt64Range) + return Int128Mul(pt1.Y-pt2.Y, pt2.X-pt3.X) == Int128Mul(pt1.X-pt2.X, pt2.Y-pt3.Y); + else return (pt1.Y-pt2.Y)*(pt2.X-pt3.X) == (pt1.X-pt2.X)*(pt2.Y-pt3.Y); +} +//------------------------------------------------------------------------------ + +bool SlopesEqual(const IntPoint pt1, const IntPoint pt2, + const IntPoint pt3, const IntPoint pt4, bool UseFullInt64Range) +{ + if (UseFullInt64Range) + return Int128Mul(pt1.Y-pt2.Y, pt3.X-pt4.X) == Int128Mul(pt1.X-pt2.X, pt3.Y-pt4.Y); + else return (pt1.Y-pt2.Y)*(pt3.X-pt4.X) == (pt1.X-pt2.X)*(pt3.Y-pt4.Y); +} +//------------------------------------------------------------------------------ + +double GetDx(const IntPoint pt1, const IntPoint pt2) +{ + return (pt1.Y == pt2.Y) ? + HORIZONTAL : (double)(pt2.X - pt1.X) / (pt2.Y - pt1.Y); +} +//--------------------------------------------------------------------------- + +void SetDx(TEdge &e) +{ + e.deltaX = (e.xtop - e.xbot); + e.deltaY = (e.ytop - e.ybot); + + if (e.deltaY == 0) e.dx = HORIZONTAL; + else e.dx = (double)(e.deltaX) / e.deltaY; +} +//--------------------------------------------------------------------------- + +void SwapSides(TEdge &edge1, TEdge &edge2) +{ + EdgeSide side = edge1.side; + edge1.side = edge2.side; + edge2.side = side; +} +//------------------------------------------------------------------------------ + +void SwapPolyIndexes(TEdge &edge1, TEdge &edge2) +{ + int outIdx = edge1.outIdx; + edge1.outIdx = edge2.outIdx; + edge2.outIdx = outIdx; +} +//------------------------------------------------------------------------------ + +inline long64 Round(double val) +{ + return (val < 0) ? static_cast(val - 0.5) : static_cast(val + 0.5); +} +//------------------------------------------------------------------------------ + +long64 TopX(TEdge &edge, const long64 currentY) +{ + return ( currentY == edge.ytop ) ? + edge.xtop : edge.xbot + Round(edge.dx *(currentY - edge.ybot)); +} +//------------------------------------------------------------------------------ + +bool IntersectPoint(TEdge &edge1, TEdge &edge2, + IntPoint &ip, bool UseFullInt64Range) +{ + double b1, b2; + if (SlopesEqual(edge1, edge2, UseFullInt64Range)) return false; + else if (NEAR_ZERO(edge1.dx)) + { + ip.X = edge1.xbot; + if (NEAR_EQUAL(edge2.dx, HORIZONTAL)) + { + ip.Y = edge2.ybot; + } else + { + b2 = edge2.ybot - (edge2.xbot / edge2.dx); + ip.Y = Round(ip.X / edge2.dx + b2); + } + } + else if (NEAR_ZERO(edge2.dx)) + { + ip.X = edge2.xbot; + if (NEAR_EQUAL(edge1.dx, HORIZONTAL)) + { + ip.Y = edge1.ybot; + } else + { + b1 = edge1.ybot - (edge1.xbot / edge1.dx); + ip.Y = Round(ip.X / edge1.dx + b1); + } + } else + { + b1 = edge1.xbot - edge1.ybot * edge1.dx; + b2 = edge2.xbot - edge2.ybot * edge2.dx; + double q = (b2-b1) / (edge1.dx - edge2.dx); + ip.Y = Round(q); + if (std::fabs(edge1.dx) < std::fabs(edge2.dx)) + ip.X = Round(edge1.dx * q + b1); + else + ip.X = Round(edge2.dx * q + b2); + } + + if (ip.Y < edge1.ytop || ip.Y < edge2.ytop) + { + if (edge1.ytop > edge2.ytop) + { + ip.X = edge1.xtop; + ip.Y = edge1.ytop; + return TopX(edge2, edge1.ytop) < edge1.xtop; + } else + { + ip.X = edge2.xtop; + ip.Y = edge2.ytop; + return TopX(edge1, edge2.ytop) > edge2.xtop; + } + } + else + return true; +} +//------------------------------------------------------------------------------ + +void ReversePolyPtLinks(OutPt *pp) +{ + if (!pp) return; + OutPt *pp1, *pp2; + pp1 = pp; + do { + pp2 = pp1->next; + pp1->next = pp1->prev; + pp1->prev = pp2; + pp1 = pp2; + } while( pp1 != pp ); +} +//------------------------------------------------------------------------------ + +void DisposeOutPts(OutPt*& pp) +{ + if (pp == 0) return; + pp->prev->next = 0; + while( pp ) + { + OutPt *tmpPp = pp; + pp = pp->next; + delete tmpPp ; + } +} +//------------------------------------------------------------------------------ + +void InitEdge(TEdge *e, TEdge *eNext, + TEdge *ePrev, const IntPoint &pt, PolyType polyType) +{ + std::memset( e, 0, sizeof( TEdge )); + + e->next = eNext; + e->prev = ePrev; + e->xcurr = pt.X; + e->ycurr = pt.Y; + if (e->ycurr >= e->next->ycurr) + { + e->xbot = e->xcurr; + e->ybot = e->ycurr; + e->xtop = e->next->xcurr; + e->ytop = e->next->ycurr; + e->windDelta = 1; + } else + { + e->xtop = e->xcurr; + e->ytop = e->ycurr; + e->xbot = e->next->xcurr; + e->ybot = e->next->ycurr; + e->windDelta = -1; + } + SetDx(*e); + e->polyType = polyType; + e->outIdx = -1; +} +//------------------------------------------------------------------------------ + +inline void SwapX(TEdge &e) +{ + //swap horizontal edges' top and bottom x's so they follow the natural + //progression of the bounds - ie so their xbots will align with the + //adjoining lower edge. [Helpful in the ProcessHorizontal() method.] + e.xcurr = e.xtop; + e.xtop = e.xbot; + e.xbot = e.xcurr; +} +//------------------------------------------------------------------------------ + +void SwapPoints(IntPoint &pt1, IntPoint &pt2) +{ + IntPoint tmp = pt1; + pt1 = pt2; + pt2 = tmp; +} +//------------------------------------------------------------------------------ + +bool GetOverlapSegment(IntPoint pt1a, IntPoint pt1b, IntPoint pt2a, + IntPoint pt2b, IntPoint &pt1, IntPoint &pt2) +{ + //precondition: segments are colinear. + if (Abs(pt1a.X - pt1b.X) > Abs(pt1a.Y - pt1b.Y)) + { + if (pt1a.X > pt1b.X) SwapPoints(pt1a, pt1b); + if (pt2a.X > pt2b.X) SwapPoints(pt2a, pt2b); + if (pt1a.X > pt2a.X) pt1 = pt1a; else pt1 = pt2a; + if (pt1b.X < pt2b.X) pt2 = pt1b; else pt2 = pt2b; + return pt1.X < pt2.X; + } else + { + if (pt1a.Y < pt1b.Y) SwapPoints(pt1a, pt1b); + if (pt2a.Y < pt2b.Y) SwapPoints(pt2a, pt2b); + if (pt1a.Y < pt2a.Y) pt1 = pt1a; else pt1 = pt2a; + if (pt1b.Y > pt2b.Y) pt2 = pt1b; else pt2 = pt2b; + return pt1.Y > pt2.Y; + } +} +//------------------------------------------------------------------------------ + +bool FirstIsBottomPt(const OutPt* btmPt1, const OutPt* btmPt2) +{ + OutPt *p = btmPt1->prev; + while (PointsEqual(p->pt, btmPt1->pt) && (p != btmPt1)) p = p->prev; + double dx1p = std::fabs(GetDx(btmPt1->pt, p->pt)); + p = btmPt1->next; + while (PointsEqual(p->pt, btmPt1->pt) && (p != btmPt1)) p = p->next; + double dx1n = std::fabs(GetDx(btmPt1->pt, p->pt)); + + p = btmPt2->prev; + while (PointsEqual(p->pt, btmPt2->pt) && (p != btmPt2)) p = p->prev; + double dx2p = std::fabs(GetDx(btmPt2->pt, p->pt)); + p = btmPt2->next; + while (PointsEqual(p->pt, btmPt2->pt) && (p != btmPt2)) p = p->next; + double dx2n = std::fabs(GetDx(btmPt2->pt, p->pt)); + return (dx1p >= dx2p && dx1p >= dx2n) || (dx1n >= dx2p && dx1n >= dx2n); +} +//------------------------------------------------------------------------------ + +OutPt* GetBottomPt(OutPt *pp) +{ + OutPt* dups = 0; + OutPt* p = pp->next; + while (p != pp) + { + if (p->pt.Y > pp->pt.Y) + { + pp = p; + dups = 0; + } + else if (p->pt.Y == pp->pt.Y && p->pt.X <= pp->pt.X) + { + if (p->pt.X < pp->pt.X) + { + dups = 0; + pp = p; + } else + { + if (p->next != pp && p->prev != pp) dups = p; + } + } + p = p->next; + } + if (dups) + { + //there appears to be at least 2 vertices at bottomPt so ... + while (dups != p) + { + if (!FirstIsBottomPt(p, dups)) pp = dups; + dups = dups->next; + while (!PointsEqual(dups->pt, pp->pt)) dups = dups->next; + } + } + return pp; +} +//------------------------------------------------------------------------------ + +bool FindSegment(OutPt* &pp, IntPoint &pt1, IntPoint &pt2) +{ + //outPt1 & outPt2 => the overlap segment (if the function returns true) + if (!pp) return false; + OutPt* pp2 = pp; + IntPoint pt1a = pt1, pt2a = pt2; + do + { + if (SlopesEqual(pt1a, pt2a, pp->pt, pp->prev->pt, true) && + SlopesEqual(pt1a, pt2a, pp->pt, true) && + GetOverlapSegment(pt1a, pt2a, pp->pt, pp->prev->pt, pt1, pt2)) + return true; + pp = pp->next; + } + while (pp != pp2); + return false; +} +//------------------------------------------------------------------------------ + +bool Pt3IsBetweenPt1AndPt2(const IntPoint pt1, + const IntPoint pt2, const IntPoint pt3) +{ + if (PointsEqual(pt1, pt3) || PointsEqual(pt2, pt3)) return true; + else if (pt1.X != pt2.X) return (pt1.X < pt3.X) == (pt3.X < pt2.X); + else return (pt1.Y < pt3.Y) == (pt3.Y < pt2.Y); +} +//------------------------------------------------------------------------------ + +OutPt* InsertPolyPtBetween(OutPt* p1, OutPt* p2, const IntPoint pt) +{ + if (p1 == p2) throw "JoinError"; + OutPt* result = new OutPt; + result->pt = pt; + if (p2 == p1->next) + { + p1->next = result; + p2->prev = result; + result->next = p2; + result->prev = p1; + } else + { + p2->next = result; + p1->prev = result; + result->next = p1; + result->prev = p2; + } + return result; +} + +//------------------------------------------------------------------------------ +// ClipperBase class methods ... +//------------------------------------------------------------------------------ + +ClipperBase::ClipperBase() //constructor +{ + m_MinimaList = 0; + m_CurrentLM = 0; + m_UseFullRange = true; +} +//------------------------------------------------------------------------------ + +ClipperBase::~ClipperBase() //destructor +{ + Clear(); +} +//------------------------------------------------------------------------------ + +bool ClipperBase::AddPolygon( const Polygon &pg, PolyType polyType) +{ + int len = (int)pg.size(); + if (len < 3) return false; + + Polygon p(len); + p[0] = pg[0]; + int j = 0; + + long64 maxVal; + if (m_UseFullRange) maxVal = hiRange; else maxVal = loRange; + + for (int i = 0; i < len; ++i) + { + if (Abs(pg[i].X) > maxVal || Abs(pg[i].Y) > maxVal) + { + if (Abs(pg[i].X) > hiRange || Abs(pg[i].Y) > hiRange) + throw "Coordinate exceeds range bounds"; + maxVal = hiRange; + m_UseFullRange = true; + } + + if (i == 0 || PointsEqual(p[j], pg[i])) continue; + else if (j > 0 && SlopesEqual(p[j-1], p[j], pg[i], m_UseFullRange)) + { + if (PointsEqual(p[j-1], pg[i])) j--; + } else j++; + p[j] = pg[i]; + } + if (j < 2) return false; + + len = j+1; + while (len > 2) + { + //nb: test for point equality before testing slopes ... + if (PointsEqual(p[j], p[0])) j--; + else if (PointsEqual(p[0], p[1]) || + SlopesEqual(p[j], p[0], p[1], m_UseFullRange)) + p[0] = p[j--]; + else if (SlopesEqual(p[j-1], p[j], p[0], m_UseFullRange)) j--; + else if (SlopesEqual(p[0], p[1], p[2], m_UseFullRange)) + { + for (int i = 2; i <= j; ++i) p[i-1] = p[i]; + j--; + } + else break; + len--; + } + if (len < 3) return false; + + //create a new edge array ... + TEdge *edges = new TEdge [len]; + m_edges.push_back(edges); + + //convert vertices to a double-linked-list of edges and initialize ... + edges[0].xcurr = p[0].X; + edges[0].ycurr = p[0].Y; + InitEdge(&edges[len-1], &edges[0], &edges[len-2], p[len-1], polyType); + for (int i = len-2; i > 0; --i) + InitEdge(&edges[i], &edges[i+1], &edges[i-1], p[i], polyType); + InitEdge(&edges[0], &edges[1], &edges[len-1], p[0], polyType); + + //reset xcurr & ycurr and find 'eHighest' (given the Y axis coordinates + //increase downward so the 'highest' edge will have the smallest ytop) ... + TEdge *e = &edges[0]; + TEdge *eHighest = e; + do + { + e->xcurr = e->xbot; + e->ycurr = e->ybot; + if (e->ytop < eHighest->ytop) eHighest = e; + e = e->next; + } + while ( e != &edges[0]); + + //make sure eHighest is positioned so the following loop works safely ... + if (eHighest->windDelta > 0) eHighest = eHighest->next; + if (NEAR_EQUAL(eHighest->dx, HORIZONTAL)) eHighest = eHighest->next; + + //finally insert each local minima ... + e = eHighest; + do { + e = AddBoundsToLML(e); + } + while( e != eHighest ); + return true; +} +//------------------------------------------------------------------------------ + +void ClipperBase::InsertLocalMinima(LocalMinima *newLm) +{ + if( ! m_MinimaList ) + { + m_MinimaList = newLm; + } + else if( newLm->Y >= m_MinimaList->Y ) + { + newLm->next = m_MinimaList; + m_MinimaList = newLm; + } else + { + LocalMinima* tmpLm = m_MinimaList; + while( tmpLm->next && ( newLm->Y < tmpLm->next->Y ) ) + tmpLm = tmpLm->next; + newLm->next = tmpLm->next; + tmpLm->next = newLm; + } +} +//------------------------------------------------------------------------------ + +TEdge* ClipperBase::AddBoundsToLML(TEdge *e) +{ + //Starting at the top of one bound we progress to the bottom where there's + //a local minima. We then go to the top of the next bound. These two bounds + //form the left and right (or right and left) bounds of the local minima. + e->nextInLML = 0; + e = e->next; + for (;;) + { + if (NEAR_EQUAL(e->dx, HORIZONTAL)) + { + //nb: proceed through horizontals when approaching from their right, + // but break on horizontal minima if approaching from their left. + // This ensures 'local minima' are always on the left of horizontals. + if (e->next->ytop < e->ytop && e->next->xbot > e->prev->xbot) break; + if (e->xtop != e->prev->xbot) SwapX(*e); + e->nextInLML = e->prev; + } + else if (e->ycurr == e->prev->ycurr) break; + else e->nextInLML = e->prev; + e = e->next; + } + + //e and e.prev are now at a local minima ... + LocalMinima* newLm = new LocalMinima; + newLm->next = 0; + newLm->Y = e->prev->ybot; + + if ( NEAR_EQUAL(e->dx, HORIZONTAL) ) //horizontal edges never start a left bound + { + if (e->xbot != e->prev->xbot) SwapX(*e); + newLm->leftBound = e->prev; + newLm->rightBound = e; + } else if (e->dx < e->prev->dx) + { + newLm->leftBound = e->prev; + newLm->rightBound = e; + } else + { + newLm->leftBound = e; + newLm->rightBound = e->prev; + } + newLm->leftBound->side = esLeft; + newLm->rightBound->side = esRight; + InsertLocalMinima( newLm ); + + for (;;) + { + if ( e->next->ytop == e->ytop && !NEAR_EQUAL(e->next->dx, HORIZONTAL) ) break; + e->nextInLML = e->next; + e = e->next; + if ( NEAR_EQUAL(e->dx, HORIZONTAL) && e->xbot != e->prev->xtop) SwapX(*e); + } + return e->next; +} +//------------------------------------------------------------------------------ + +bool ClipperBase::AddPolygons(const Polygons &ppg, PolyType polyType) +{ + bool result = false; + for (Polygons::size_type i = 0; i < ppg.size(); ++i) + if (AddPolygon(ppg[i], polyType)) result = true; + return result; +} +//------------------------------------------------------------------------------ + +void ClipperBase::Clear() +{ + DisposeLocalMinimaList(); + for (EdgeList::size_type i = 0; i < m_edges.size(); ++i) delete [] m_edges[i]; + m_edges.clear(); + m_UseFullRange = false; +} +//------------------------------------------------------------------------------ + +void ClipperBase::Reset() +{ + m_CurrentLM = m_MinimaList; + if( !m_CurrentLM ) return; //ie nothing to process + + //reset all edges ... + LocalMinima* lm = m_MinimaList; + while( lm ) + { + TEdge* e = lm->leftBound; + while( e ) + { + e->xcurr = e->xbot; + e->ycurr = e->ybot; + e->side = esLeft; + e->outIdx = -1; + e = e->nextInLML; + } + e = lm->rightBound; + while( e ) + { + e->xcurr = e->xbot; + e->ycurr = e->ybot; + e->side = esRight; + e->outIdx = -1; + e = e->nextInLML; + } + lm = lm->next; + } +} +//------------------------------------------------------------------------------ + +void ClipperBase::DisposeLocalMinimaList() +{ + while( m_MinimaList ) + { + LocalMinima* tmpLm = m_MinimaList->next; + delete m_MinimaList; + m_MinimaList = tmpLm; + } + m_CurrentLM = 0; +} +//------------------------------------------------------------------------------ + +void ClipperBase::PopLocalMinima() +{ + if( ! m_CurrentLM ) return; + m_CurrentLM = m_CurrentLM->next; +} +//------------------------------------------------------------------------------ + +IntRect ClipperBase::GetBounds() +{ + IntRect result; + LocalMinima* lm = m_MinimaList; + if (!lm) + { + result.left = result.top = result.right = result.bottom = 0; + return result; + } + result.left = lm->leftBound->xbot; + result.top = lm->leftBound->ybot; + result.right = lm->leftBound->xbot; + result.bottom = lm->leftBound->ybot; + while (lm) + { + if (lm->leftBound->ybot > result.bottom) + result.bottom = lm->leftBound->ybot; + TEdge* e = lm->leftBound; + for (;;) { + TEdge* bottomE = e; + while (e->nextInLML) + { + if (e->xbot < result.left) result.left = e->xbot; + if (e->xbot > result.right) result.right = e->xbot; + e = e->nextInLML; + } + if (e->xbot < result.left) result.left = e->xbot; + if (e->xbot > result.right) result.right = e->xbot; + if (e->xtop < result.left) result.left = e->xtop; + if (e->xtop > result.right) result.right = e->xtop; + if (e->ytop < result.top) result.top = e->ytop; + + if (bottomE == lm->leftBound) e = lm->rightBound; + else break; + } + lm = lm->next; + } + return result; +} + + +//------------------------------------------------------------------------------ +// TClipper methods ... +//------------------------------------------------------------------------------ + +Clipper::Clipper() : ClipperBase() //constructor +{ + m_Scanbeam = 0; + m_ActiveEdges = 0; + m_SortedEdges = 0; + m_IntersectNodes = 0; + m_ExecuteLocked = false; + m_UseFullRange = false; + m_ReverseOutput = false; +} +//------------------------------------------------------------------------------ + +Clipper::~Clipper() //destructor +{ + Clear(); + DisposeScanbeamList(); +} +//------------------------------------------------------------------------------ + +void Clipper::Clear() +{ + if (m_edges.size() == 0) return; //avoids problems with ClipperBase destructor + DisposeAllPolyPts(); + ClipperBase::Clear(); +} +//------------------------------------------------------------------------------ + +void Clipper::DisposeScanbeamList() +{ + while ( m_Scanbeam ) { + Scanbeam* sb2 = m_Scanbeam->next; + delete m_Scanbeam; + m_Scanbeam = sb2; + } +} +//------------------------------------------------------------------------------ + +void Clipper::Reset() +{ + ClipperBase::Reset(); + m_Scanbeam = 0; + m_ActiveEdges = 0; + m_SortedEdges = 0; + DisposeAllPolyPts(); + LocalMinima* lm = m_MinimaList; + while (lm) + { + InsertScanbeam(lm->Y); + InsertScanbeam(lm->leftBound->ytop); + lm = lm->next; + } +} +//------------------------------------------------------------------------------ + +bool Clipper::Execute(ClipType clipType, Polygons &solution, + PolyFillType subjFillType, PolyFillType clipFillType) +{ + if( m_ExecuteLocked ) return false; + m_ExecuteLocked = true; + solution.resize(0); + m_SubjFillType = subjFillType; + m_ClipFillType = clipFillType; + m_ClipType = clipType; + m_UsingPolyTree = false; + bool succeeded = ExecuteInternal(); + if (succeeded) BuildResult(solution); + m_ExecuteLocked = false; + return succeeded; +} +//------------------------------------------------------------------------------ + +bool Clipper::Execute(ClipType clipType, PolyTree& polytree, + PolyFillType subjFillType, PolyFillType clipFillType) +{ + if( m_ExecuteLocked ) return false; + m_ExecuteLocked = true; + m_SubjFillType = subjFillType; + m_ClipFillType = clipFillType; + m_ClipType = clipType; + m_UsingPolyTree = true; + bool succeeded = ExecuteInternal(); + if (succeeded) BuildResult2(polytree); + m_ExecuteLocked = false; + return succeeded; +} +//------------------------------------------------------------------------------ + +void Clipper::FixHoleLinkage(OutRec &outRec) +{ + //skip OutRecs that (a) contain outermost polygons or + //(b) already have the correct owner/child linkage ... + if (!outRec.FirstLeft || + (outRec.isHole != outRec.FirstLeft->isHole && + outRec.FirstLeft->pts)) return; + + OutRec* orfl = outRec.FirstLeft; + while (orfl && ((orfl->isHole == outRec.isHole) || !orfl->pts)) + orfl = orfl->FirstLeft; + outRec.FirstLeft = orfl; +} +//------------------------------------------------------------------------------ + +bool Clipper::ExecuteInternal() +{ + bool succeeded; + try { + Reset(); + if (!m_CurrentLM ) return true; + long64 botY = PopScanbeam(); + do { + InsertLocalMinimaIntoAEL(botY); + ClearHorzJoins(); + ProcessHorizontals(); + long64 topY = PopScanbeam(); + succeeded = ProcessIntersections(botY, topY); + if (!succeeded) break; + ProcessEdgesAtTopOfScanbeam(topY); + botY = topY; + } while( m_Scanbeam ); + } + catch(...) { + succeeded = false; + } + + if (succeeded) + { + //tidy up output polygons and fix orientations where necessary ... + for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); ++i) + { + OutRec *outRec = m_PolyOuts[i]; + if (!outRec->pts) continue; + FixupOutPolygon(*outRec); + if (!outRec->pts) continue; + + if ((outRec->isHole ^ m_ReverseOutput) == (Area(*outRec, m_UseFullRange) > 0)) + ReversePolyPtLinks(outRec->pts); + } + + if (m_Joins.size() > 0) JoinCommonEdges(); + } + + ClearJoins(); + ClearHorzJoins(); + return succeeded; +} +//------------------------------------------------------------------------------ + +void Clipper::InsertScanbeam(const long64 Y) +{ + if( !m_Scanbeam ) + { + m_Scanbeam = new Scanbeam; + m_Scanbeam->next = 0; + m_Scanbeam->Y = Y; + } + else if( Y > m_Scanbeam->Y ) + { + Scanbeam* newSb = new Scanbeam; + newSb->Y = Y; + newSb->next = m_Scanbeam; + m_Scanbeam = newSb; + } else + { + Scanbeam* sb2 = m_Scanbeam; + while( sb2->next && ( Y <= sb2->next->Y ) ) sb2 = sb2->next; + if( Y == sb2->Y ) return; //ie ignores duplicates + Scanbeam* newSb = new Scanbeam; + newSb->Y = Y; + newSb->next = sb2->next; + sb2->next = newSb; + } +} +//------------------------------------------------------------------------------ + +long64 Clipper::PopScanbeam() +{ + long64 Y = m_Scanbeam->Y; + Scanbeam* sb2 = m_Scanbeam; + m_Scanbeam = m_Scanbeam->next; + delete sb2; + return Y; +} +//------------------------------------------------------------------------------ + +void Clipper::DisposeAllPolyPts(){ + for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); ++i) + DisposeOutRec(i); + m_PolyOuts.clear(); +} +//------------------------------------------------------------------------------ + +void Clipper::DisposeOutRec(PolyOutList::size_type index) +{ + OutRec *outRec = m_PolyOuts[index]; + if (outRec->pts) DisposeOutPts(outRec->pts); + delete outRec; + m_PolyOuts[index] = 0; +} +//------------------------------------------------------------------------------ + +void Clipper::SetWindingCount(TEdge &edge) +{ + TEdge *e = edge.prevInAEL; + //find the edge of the same polytype that immediately preceeds 'edge' in AEL + while ( e && e->polyType != edge.polyType ) e = e->prevInAEL; + if ( !e ) + { + edge.windCnt = edge.windDelta; + edge.windCnt2 = 0; + e = m_ActiveEdges; //ie get ready to calc windCnt2 + } else if ( IsEvenOddFillType(edge) ) + { + //EvenOdd filling ... + edge.windCnt = 1; + edge.windCnt2 = e->windCnt2; + e = e->nextInAEL; //ie get ready to calc windCnt2 + } else + { + //nonZero, Positive or Negative filling ... + if ( e->windCnt * e->windDelta < 0 ) + { + if (Abs(e->windCnt) > 1) + { + if (e->windDelta * edge.windDelta < 0) edge.windCnt = e->windCnt; + else edge.windCnt = e->windCnt + edge.windDelta; + } else + edge.windCnt = e->windCnt + e->windDelta + edge.windDelta; + } else + { + if ( Abs(e->windCnt) > 1 && e->windDelta * edge.windDelta < 0) + edge.windCnt = e->windCnt; + else if ( e->windCnt + edge.windDelta == 0 ) + edge.windCnt = e->windCnt; + else edge.windCnt = e->windCnt + edge.windDelta; + } + edge.windCnt2 = e->windCnt2; + e = e->nextInAEL; //ie get ready to calc windCnt2 + } + + //update windCnt2 ... + if ( IsEvenOddAltFillType(edge) ) + { + //EvenOdd filling ... + while ( e != &edge ) + { + edge.windCnt2 = (edge.windCnt2 == 0) ? 1 : 0; + e = e->nextInAEL; + } + } else + { + //nonZero, Positive or Negative filling ... + while ( e != &edge ) + { + edge.windCnt2 += e->windDelta; + e = e->nextInAEL; + } + } +} +//------------------------------------------------------------------------------ + +bool Clipper::IsEvenOddFillType(const TEdge& edge) const +{ + if (edge.polyType == ptSubject) + return m_SubjFillType == pftEvenOdd; else + return m_ClipFillType == pftEvenOdd; +} +//------------------------------------------------------------------------------ + +bool Clipper::IsEvenOddAltFillType(const TEdge& edge) const +{ + if (edge.polyType == ptSubject) + return m_ClipFillType == pftEvenOdd; else + return m_SubjFillType == pftEvenOdd; +} +//------------------------------------------------------------------------------ + +bool Clipper::IsContributing(const TEdge& edge) const +{ + PolyFillType pft, pft2; + if (edge.polyType == ptSubject) + { + pft = m_SubjFillType; + pft2 = m_ClipFillType; + } else + { + pft = m_ClipFillType; + pft2 = m_SubjFillType; + } + + switch(pft) + { + case pftEvenOdd: + case pftNonZero: + if (Abs(edge.windCnt) != 1) return false; + break; + case pftPositive: + if (edge.windCnt != 1) return false; + break; + default: //pftNegative + if (edge.windCnt != -1) return false; + } + + switch(m_ClipType) + { + case ctIntersection: + switch(pft2) + { + case pftEvenOdd: + case pftNonZero: + return (edge.windCnt2 != 0); + case pftPositive: + return (edge.windCnt2 > 0); + default: + return (edge.windCnt2 < 0); + } + case ctUnion: + switch(pft2) + { + case pftEvenOdd: + case pftNonZero: + return (edge.windCnt2 == 0); + case pftPositive: + return (edge.windCnt2 <= 0); + default: + return (edge.windCnt2 >= 0); + } + case ctDifference: + if (edge.polyType == ptSubject) + switch(pft2) + { + case pftEvenOdd: + case pftNonZero: + return (edge.windCnt2 == 0); + case pftPositive: + return (edge.windCnt2 <= 0); + default: + return (edge.windCnt2 >= 0); + } + else + switch(pft2) + { + case pftEvenOdd: + case pftNonZero: + return (edge.windCnt2 != 0); + case pftPositive: + return (edge.windCnt2 > 0); + default: + return (edge.windCnt2 < 0); + } + default: + return true; + } +} +//------------------------------------------------------------------------------ + +void Clipper::AddLocalMinPoly(TEdge *e1, TEdge *e2, const IntPoint &pt) +{ + TEdge *e, *prevE; + if( NEAR_EQUAL(e2->dx, HORIZONTAL) || ( e1->dx > e2->dx ) ) + { + AddOutPt( e1, pt ); + e2->outIdx = e1->outIdx; + e1->side = esLeft; + e2->side = esRight; + e = e1; + if (e->prevInAEL == e2) + prevE = e2->prevInAEL; + else + prevE = e->prevInAEL; + } else + { + AddOutPt( e2, pt ); + e1->outIdx = e2->outIdx; + e1->side = esRight; + e2->side = esLeft; + e = e2; + if (e->prevInAEL == e1) + prevE = e1->prevInAEL; + else + prevE = e->prevInAEL; + } + if (prevE && prevE->outIdx >= 0 && + (TopX(*prevE, pt.Y) == TopX(*e, pt.Y)) && + SlopesEqual(*e, *prevE, m_UseFullRange)) + AddJoin(e, prevE, -1, -1); +} +//------------------------------------------------------------------------------ + +void Clipper::AddLocalMaxPoly(TEdge *e1, TEdge *e2, const IntPoint &pt) +{ + AddOutPt( e1, pt ); + if( e1->outIdx == e2->outIdx ) + { + e1->outIdx = -1; + e2->outIdx = -1; + } + else if (e1->outIdx < e2->outIdx) + AppendPolygon(e1, e2); + else + AppendPolygon(e2, e1); +} +//------------------------------------------------------------------------------ + +void Clipper::AddEdgeToSEL(TEdge *edge) +{ + //SEL pointers in PEdge are reused to build a list of horizontal edges. + //However, we don't need to worry about order with horizontal edge processing. + if( !m_SortedEdges ) + { + m_SortedEdges = edge; + edge->prevInSEL = 0; + edge->nextInSEL = 0; + } + else + { + edge->nextInSEL = m_SortedEdges; + edge->prevInSEL = 0; + m_SortedEdges->prevInSEL = edge; + m_SortedEdges = edge; + } +} +//------------------------------------------------------------------------------ + +void Clipper::CopyAELToSEL() +{ + TEdge* e = m_ActiveEdges; + m_SortedEdges = e; + while ( e ) + { + e->prevInSEL = e->prevInAEL; + e->nextInSEL = e->nextInAEL; + e = e->nextInAEL; + } +} +//------------------------------------------------------------------------------ + +void Clipper::AddJoin(TEdge *e1, TEdge *e2, int e1OutIdx, int e2OutIdx) +{ + JoinRec* jr = new JoinRec; + if (e1OutIdx >= 0) + jr->poly1Idx = e1OutIdx; else + jr->poly1Idx = e1->outIdx; + jr->pt1a = IntPoint(e1->xcurr, e1->ycurr); + jr->pt1b = IntPoint(e1->xtop, e1->ytop); + if (e2OutIdx >= 0) + jr->poly2Idx = e2OutIdx; else + jr->poly2Idx = e2->outIdx; + jr->pt2a = IntPoint(e2->xcurr, e2->ycurr); + jr->pt2b = IntPoint(e2->xtop, e2->ytop); + m_Joins.push_back(jr); +} +//------------------------------------------------------------------------------ + +void Clipper::ClearJoins() +{ + for (JoinList::size_type i = 0; i < m_Joins.size(); i++) + delete m_Joins[i]; + m_Joins.resize(0); +} +//------------------------------------------------------------------------------ + +void Clipper::AddHorzJoin(TEdge *e, int idx) +{ + HorzJoinRec* hj = new HorzJoinRec; + hj->edge = e; + hj->savedIdx = idx; + m_HorizJoins.push_back(hj); +} +//------------------------------------------------------------------------------ + +void Clipper::ClearHorzJoins() +{ + for (HorzJoinList::size_type i = 0; i < m_HorizJoins.size(); i++) + delete m_HorizJoins[i]; + m_HorizJoins.resize(0); +} +//------------------------------------------------------------------------------ + +void Clipper::InsertLocalMinimaIntoAEL(const long64 botY) +{ + while( m_CurrentLM && ( m_CurrentLM->Y == botY ) ) + { + TEdge* lb = m_CurrentLM->leftBound; + TEdge* rb = m_CurrentLM->rightBound; + + InsertEdgeIntoAEL( lb ); + InsertScanbeam( lb->ytop ); + InsertEdgeIntoAEL( rb ); + + if (IsEvenOddFillType(*lb)) + { + lb->windDelta = 1; + rb->windDelta = 1; + } + else + { + rb->windDelta = -lb->windDelta; + } + SetWindingCount( *lb ); + rb->windCnt = lb->windCnt; + rb->windCnt2 = lb->windCnt2; + + if( NEAR_EQUAL(rb->dx, HORIZONTAL) ) + { + //nb: only rightbounds can have a horizontal bottom edge + AddEdgeToSEL( rb ); + InsertScanbeam( rb->nextInLML->ytop ); + } + else + InsertScanbeam( rb->ytop ); + + if( IsContributing(*lb) ) + AddLocalMinPoly( lb, rb, IntPoint(lb->xcurr, m_CurrentLM->Y) ); + + //if any output polygons share an edge, they'll need joining later ... + if (rb->outIdx >= 0 && NEAR_EQUAL(rb->dx, HORIZONTAL)) + { + for (HorzJoinList::size_type i = 0; i < m_HorizJoins.size(); ++i) + { + IntPoint pt, pt2; //returned by GetOverlapSegment() but unused here. + HorzJoinRec* hj = m_HorizJoins[i]; + //if horizontals rb and hj.edge overlap, flag for joining later ... + if (GetOverlapSegment(IntPoint(hj->edge->xbot, hj->edge->ybot), + IntPoint(hj->edge->xtop, hj->edge->ytop), + IntPoint(rb->xbot, rb->ybot), + IntPoint(rb->xtop, rb->ytop), pt, pt2)) + AddJoin(hj->edge, rb, hj->savedIdx); + } + } + + if( lb->nextInAEL != rb ) + { + if (rb->outIdx >= 0 && rb->prevInAEL->outIdx >= 0 && + SlopesEqual(*rb->prevInAEL, *rb, m_UseFullRange)) + AddJoin(rb, rb->prevInAEL); + + TEdge* e = lb->nextInAEL; + IntPoint pt = IntPoint(lb->xcurr, lb->ycurr); + while( e != rb ) + { + if(!e) throw clipperException("InsertLocalMinimaIntoAEL: missing rightbound!"); + //nb: For calculating winding counts etc, IntersectEdges() assumes + //that param1 will be to the right of param2 ABOVE the intersection ... + IntersectEdges( rb , e , pt , ipNone); //order important here + e = e->nextInAEL; + } + } + PopLocalMinima(); + } +} +//------------------------------------------------------------------------------ + +void Clipper::DeleteFromAEL(TEdge *e) +{ + TEdge* AelPrev = e->prevInAEL; + TEdge* AelNext = e->nextInAEL; + if( !AelPrev && !AelNext && (e != m_ActiveEdges) ) return; //already deleted + if( AelPrev ) AelPrev->nextInAEL = AelNext; + else m_ActiveEdges = AelNext; + if( AelNext ) AelNext->prevInAEL = AelPrev; + e->nextInAEL = 0; + e->prevInAEL = 0; +} +//------------------------------------------------------------------------------ + +void Clipper::DeleteFromSEL(TEdge *e) +{ + TEdge* SelPrev = e->prevInSEL; + TEdge* SelNext = e->nextInSEL; + if( !SelPrev && !SelNext && (e != m_SortedEdges) ) return; //already deleted + if( SelPrev ) SelPrev->nextInSEL = SelNext; + else m_SortedEdges = SelNext; + if( SelNext ) SelNext->prevInSEL = SelPrev; + e->nextInSEL = 0; + e->prevInSEL = 0; +} +//------------------------------------------------------------------------------ + +void Clipper::IntersectEdges(TEdge *e1, TEdge *e2, + const IntPoint &pt, const IntersectProtects protects) +{ + //e1 will be to the left of e2 BELOW the intersection. Therefore e1 is before + //e2 in AEL except when e1 is being inserted at the intersection point ... + bool e1stops = !(ipLeft & protects) && !e1->nextInLML && + e1->xtop == pt.X && e1->ytop == pt.Y; + bool e2stops = !(ipRight & protects) && !e2->nextInLML && + e2->xtop == pt.X && e2->ytop == pt.Y; + bool e1Contributing = ( e1->outIdx >= 0 ); + bool e2contributing = ( e2->outIdx >= 0 ); + + //update winding counts... + //assumes that e1 will be to the right of e2 ABOVE the intersection + if ( e1->polyType == e2->polyType ) + { + if ( IsEvenOddFillType( *e1) ) + { + int oldE1WindCnt = e1->windCnt; + e1->windCnt = e2->windCnt; + e2->windCnt = oldE1WindCnt; + } else + { + if (e1->windCnt + e2->windDelta == 0 ) e1->windCnt = -e1->windCnt; + else e1->windCnt += e2->windDelta; + if ( e2->windCnt - e1->windDelta == 0 ) e2->windCnt = -e2->windCnt; + else e2->windCnt -= e1->windDelta; + } + } else + { + if (!IsEvenOddFillType(*e2)) e1->windCnt2 += e2->windDelta; + else e1->windCnt2 = ( e1->windCnt2 == 0 ) ? 1 : 0; + if (!IsEvenOddFillType(*e1)) e2->windCnt2 -= e1->windDelta; + else e2->windCnt2 = ( e2->windCnt2 == 0 ) ? 1 : 0; + } + + PolyFillType e1FillType, e2FillType, e1FillType2, e2FillType2; + if (e1->polyType == ptSubject) + { + e1FillType = m_SubjFillType; + e1FillType2 = m_ClipFillType; + } else + { + e1FillType = m_ClipFillType; + e1FillType2 = m_SubjFillType; + } + if (e2->polyType == ptSubject) + { + e2FillType = m_SubjFillType; + e2FillType2 = m_ClipFillType; + } else + { + e2FillType = m_ClipFillType; + e2FillType2 = m_SubjFillType; + } + + long64 e1Wc, e2Wc; + switch (e1FillType) + { + case pftPositive: e1Wc = e1->windCnt; break; + case pftNegative: e1Wc = -e1->windCnt; break; + default: e1Wc = Abs(e1->windCnt); + } + switch(e2FillType) + { + case pftPositive: e2Wc = e2->windCnt; break; + case pftNegative: e2Wc = -e2->windCnt; break; + default: e2Wc = Abs(e2->windCnt); + } + + if ( e1Contributing && e2contributing ) + { + if ( e1stops || e2stops || + (e1Wc != 0 && e1Wc != 1) || (e2Wc != 0 && e2Wc != 1) || + (e1->polyType != e2->polyType && m_ClipType != ctXor) ) + AddLocalMaxPoly(e1, e2, pt); + else + DoBothEdges( e1, e2, pt ); + } + else if ( e1Contributing ) + { + if ((e2Wc == 0 || e2Wc == 1) && + (m_ClipType != ctIntersection || + e2->polyType == ptSubject || (e2->windCnt2 != 0))) + DoEdge1(e1, e2, pt); + } + else if ( e2contributing ) + { + if ((e1Wc == 0 || e1Wc == 1) && + (m_ClipType != ctIntersection || + e1->polyType == ptSubject || (e1->windCnt2 != 0))) + DoEdge2(e1, e2, pt); + } + else if ( (e1Wc == 0 || e1Wc == 1) && + (e2Wc == 0 || e2Wc == 1) && !e1stops && !e2stops ) + { + //neither edge is currently contributing ... + + long64 e1Wc2, e2Wc2; + switch (e1FillType2) + { + case pftPositive: e1Wc2 = e1->windCnt2; break; + case pftNegative : e1Wc2 = -e1->windCnt2; break; + default: e1Wc2 = Abs(e1->windCnt2); + } + switch (e2FillType2) + { + case pftPositive: e2Wc2 = e2->windCnt2; break; + case pftNegative: e2Wc2 = -e2->windCnt2; break; + default: e2Wc2 = Abs(e2->windCnt2); + } + + if (e1->polyType != e2->polyType) + AddLocalMinPoly(e1, e2, pt); + else if (e1Wc == 1 && e2Wc == 1) + switch( m_ClipType ) { + case ctIntersection: + if (e1Wc2 > 0 && e2Wc2 > 0) + AddLocalMinPoly(e1, e2, pt); + break; + case ctUnion: + if ( e1Wc2 <= 0 && e2Wc2 <= 0 ) + AddLocalMinPoly(e1, e2, pt); + break; + case ctDifference: + if (((e1->polyType == ptClip) && (e1Wc2 > 0) && (e2Wc2 > 0)) || + ((e1->polyType == ptSubject) && (e1Wc2 <= 0) && (e2Wc2 <= 0))) + AddLocalMinPoly(e1, e2, pt); + break; + case ctXor: + AddLocalMinPoly(e1, e2, pt); + } + else + SwapSides( *e1, *e2 ); + } + + if( (e1stops != e2stops) && + ( (e1stops && (e1->outIdx >= 0)) || (e2stops && (e2->outIdx >= 0)) ) ) + { + SwapSides( *e1, *e2 ); + SwapPolyIndexes( *e1, *e2 ); + } + + //finally, delete any non-contributing maxima edges ... + if( e1stops ) DeleteFromAEL( e1 ); + if( e2stops ) DeleteFromAEL( e2 ); +} +//------------------------------------------------------------------------------ + +void Clipper::SetHoleState(TEdge *e, OutRec *outRec) +{ + bool isHole = false; + TEdge *e2 = e->prevInAEL; + while (e2) + { + if (e2->outIdx >= 0) + { + isHole = !isHole; + if (! outRec->FirstLeft) + outRec->FirstLeft = m_PolyOuts[e2->outIdx]; + } + e2 = e2->prevInAEL; + } + if (isHole) outRec->isHole = true; +} +//------------------------------------------------------------------------------ + +OutRec* GetLowermostRec(OutRec *outRec1, OutRec *outRec2) +{ + //work out which polygon fragment has the correct hole state ... + OutPt *outPt1 = outRec1->bottomPt; + OutPt *outPt2 = outRec2->bottomPt; + if (outPt1->pt.Y > outPt2->pt.Y) return outRec1; + else if (outPt1->pt.Y < outPt2->pt.Y) return outRec2; + else if (outPt1->pt.X < outPt2->pt.X) return outRec1; + else if (outPt1->pt.X > outPt2->pt.X) return outRec2; + else if (outPt1->next == outPt1) return outRec2; + else if (outPt2->next == outPt2) return outRec1; + else if (FirstIsBottomPt(outPt1, outPt2)) return outRec1; + else return outRec2; +} +//------------------------------------------------------------------------------ + +bool Param1RightOfParam2(OutRec* outRec1, OutRec* outRec2) +{ + do + { + outRec1 = outRec1->FirstLeft; + if (outRec1 == outRec2) return true; + } while (outRec1); + return false; +} +//------------------------------------------------------------------------------ + +void Clipper::AppendPolygon(TEdge *e1, TEdge *e2) +{ + //get the start and ends of both output polygons ... + OutRec *outRec1 = m_PolyOuts[e1->outIdx]; + OutRec *outRec2 = m_PolyOuts[e2->outIdx]; + + OutRec *holeStateRec; + if (Param1RightOfParam2(outRec1, outRec2)) + holeStateRec = outRec2; + else if (Param1RightOfParam2(outRec2, outRec1)) + holeStateRec = outRec1; + else + holeStateRec = GetLowermostRec(outRec1, outRec2); + + OutPt* p1_lft = outRec1->pts; + OutPt* p1_rt = p1_lft->prev; + OutPt* p2_lft = outRec2->pts; + OutPt* p2_rt = p2_lft->prev; + + EdgeSide side; + //join e2 poly onto e1 poly and delete pointers to e2 ... + if( e1->side == esLeft ) + { + if( e2->side == esLeft ) + { + //z y x a b c + ReversePolyPtLinks(p2_lft); + p2_lft->next = p1_lft; + p1_lft->prev = p2_lft; + p1_rt->next = p2_rt; + p2_rt->prev = p1_rt; + outRec1->pts = p2_rt; + } else + { + //x y z a b c + p2_rt->next = p1_lft; + p1_lft->prev = p2_rt; + p2_lft->prev = p1_rt; + p1_rt->next = p2_lft; + outRec1->pts = p2_lft; + } + side = esLeft; + } else + { + if( e2->side == esRight ) + { + //a b c z y x + ReversePolyPtLinks(p2_lft); + p1_rt->next = p2_rt; + p2_rt->prev = p1_rt; + p2_lft->next = p1_lft; + p1_lft->prev = p2_lft; + } else + { + //a b c x y z + p1_rt->next = p2_lft; + p2_lft->prev = p1_rt; + p1_lft->prev = p2_rt; + p2_rt->next = p1_lft; + } + side = esRight; + } + + if (holeStateRec == outRec2) + { + outRec1->bottomPt = outRec2->bottomPt; + outRec1->bottomPt->idx = outRec1->idx; + if (outRec2->FirstLeft != outRec1) + outRec1->FirstLeft = outRec2->FirstLeft; + outRec1->isHole = outRec2->isHole; + } + outRec2->pts = 0; + outRec2->bottomPt = 0; + + outRec2->FirstLeft = outRec1; + + int OKIdx = e1->outIdx; + int ObsoleteIdx = e2->outIdx; + + e1->outIdx = -1; //nb: safe because we only get here via AddLocalMaxPoly + e2->outIdx = -1; + + TEdge* e = m_ActiveEdges; + while( e ) + { + if( e->outIdx == ObsoleteIdx ) + { + e->outIdx = OKIdx; + e->side = side; + break; + } + e = e->nextInAEL; + } + + for (JoinList::size_type i = 0; i < m_Joins.size(); ++i) + { + if (m_Joins[i]->poly1Idx == ObsoleteIdx) m_Joins[i]->poly1Idx = OKIdx; + if (m_Joins[i]->poly2Idx == ObsoleteIdx) m_Joins[i]->poly2Idx = OKIdx; + } + + for (HorzJoinList::size_type i = 0; i < m_HorizJoins.size(); ++i) + { + if (m_HorizJoins[i]->savedIdx == ObsoleteIdx) + m_HorizJoins[i]->savedIdx = OKIdx; + } + +} +//------------------------------------------------------------------------------ + +OutRec* Clipper::CreateOutRec() +{ + OutRec* result = new OutRec; + result->isHole = false; + result->FirstLeft = 0; + result->pts = 0; + result->bottomPt = 0; + result->polyNode = 0; + return result; +} +//------------------------------------------------------------------------------ + +void Clipper::AddOutPt(TEdge *e, const IntPoint &pt) +{ + bool ToFront = (e->side == esLeft); + if( e->outIdx < 0 ) + { + OutRec *outRec = CreateOutRec(); + m_PolyOuts.push_back(outRec); + outRec->idx = (int)m_PolyOuts.size()-1; + e->outIdx = outRec->idx; + OutPt* op = new OutPt; + outRec->pts = op; + outRec->bottomPt = op; + op->pt = pt; + op->idx = outRec->idx; + op->next = op; + op->prev = op; + SetHoleState(e, outRec); + } else + { + OutRec *outRec = m_PolyOuts[e->outIdx]; + OutPt* op = outRec->pts; + if ((ToFront && PointsEqual(pt, op->pt)) || + (!ToFront && PointsEqual(pt, op->prev->pt))) return; + + OutPt* op2 = new OutPt; + op2->pt = pt; + op2->idx = outRec->idx; + if (op2->pt.Y == outRec->bottomPt->pt.Y && + op2->pt.X < outRec->bottomPt->pt.X) + outRec->bottomPt = op2; + op2->next = op; + op2->prev = op->prev; + op2->prev->next = op2; + op->prev = op2; + if (ToFront) outRec->pts = op2; + } +} +//------------------------------------------------------------------------------ + +void Clipper::ProcessHorizontals() +{ + TEdge* horzEdge = m_SortedEdges; + while( horzEdge ) + { + DeleteFromSEL( horzEdge ); + ProcessHorizontal( horzEdge ); + horzEdge = m_SortedEdges; + } +} +//------------------------------------------------------------------------------ + +bool Clipper::IsTopHorz(const long64 XPos) +{ + TEdge* e = m_SortedEdges; + while( e ) + { + if( ( XPos >= std::min(e->xcurr, e->xtop) ) && + ( XPos <= std::max(e->xcurr, e->xtop) ) ) return false; + e = e->nextInSEL; + } + return true; +} +//------------------------------------------------------------------------------ + +bool IsMinima(TEdge *e) +{ + return e && (e->prev->nextInLML != e) && (e->next->nextInLML != e); +} +//------------------------------------------------------------------------------ + +bool IsMaxima(TEdge *e, const long64 Y) +{ + return e && e->ytop == Y && !e->nextInLML; +} +//------------------------------------------------------------------------------ + +bool IsIntermediate(TEdge *e, const long64 Y) +{ + return e->ytop == Y && e->nextInLML; +} +//------------------------------------------------------------------------------ + +TEdge *GetMaximaPair(TEdge *e) +{ + if( !IsMaxima(e->next, e->ytop) || e->next->xtop != e->xtop ) + return e->prev; else + return e->next; +} +//------------------------------------------------------------------------------ + +void Clipper::SwapPositionsInAEL(TEdge *edge1, TEdge *edge2) +{ + if( edge1->nextInAEL == edge2 ) + { + TEdge* next = edge2->nextInAEL; + if( next ) next->prevInAEL = edge1; + TEdge* prev = edge1->prevInAEL; + if( prev ) prev->nextInAEL = edge2; + edge2->prevInAEL = prev; + edge2->nextInAEL = edge1; + edge1->prevInAEL = edge2; + edge1->nextInAEL = next; + } + else if( edge2->nextInAEL == edge1 ) + { + TEdge* next = edge1->nextInAEL; + if( next ) next->prevInAEL = edge2; + TEdge* prev = edge2->prevInAEL; + if( prev ) prev->nextInAEL = edge1; + edge1->prevInAEL = prev; + edge1->nextInAEL = edge2; + edge2->prevInAEL = edge1; + edge2->nextInAEL = next; + } + else + { + TEdge* next = edge1->nextInAEL; + TEdge* prev = edge1->prevInAEL; + edge1->nextInAEL = edge2->nextInAEL; + if( edge1->nextInAEL ) edge1->nextInAEL->prevInAEL = edge1; + edge1->prevInAEL = edge2->prevInAEL; + if( edge1->prevInAEL ) edge1->prevInAEL->nextInAEL = edge1; + edge2->nextInAEL = next; + if( edge2->nextInAEL ) edge2->nextInAEL->prevInAEL = edge2; + edge2->prevInAEL = prev; + if( edge2->prevInAEL ) edge2->prevInAEL->nextInAEL = edge2; + } + + if( !edge1->prevInAEL ) m_ActiveEdges = edge1; + else if( !edge2->prevInAEL ) m_ActiveEdges = edge2; +} +//------------------------------------------------------------------------------ + +void Clipper::SwapPositionsInSEL(TEdge *edge1, TEdge *edge2) +{ + if( !( edge1->nextInSEL ) && !( edge1->prevInSEL ) ) return; + if( !( edge2->nextInSEL ) && !( edge2->prevInSEL ) ) return; + + if( edge1->nextInSEL == edge2 ) + { + TEdge* next = edge2->nextInSEL; + if( next ) next->prevInSEL = edge1; + TEdge* prev = edge1->prevInSEL; + if( prev ) prev->nextInSEL = edge2; + edge2->prevInSEL = prev; + edge2->nextInSEL = edge1; + edge1->prevInSEL = edge2; + edge1->nextInSEL = next; + } + else if( edge2->nextInSEL == edge1 ) + { + TEdge* next = edge1->nextInSEL; + if( next ) next->prevInSEL = edge2; + TEdge* prev = edge2->prevInSEL; + if( prev ) prev->nextInSEL = edge1; + edge1->prevInSEL = prev; + edge1->nextInSEL = edge2; + edge2->prevInSEL = edge1; + edge2->nextInSEL = next; + } + else + { + TEdge* next = edge1->nextInSEL; + TEdge* prev = edge1->prevInSEL; + edge1->nextInSEL = edge2->nextInSEL; + if( edge1->nextInSEL ) edge1->nextInSEL->prevInSEL = edge1; + edge1->prevInSEL = edge2->prevInSEL; + if( edge1->prevInSEL ) edge1->prevInSEL->nextInSEL = edge1; + edge2->nextInSEL = next; + if( edge2->nextInSEL ) edge2->nextInSEL->prevInSEL = edge2; + edge2->prevInSEL = prev; + if( edge2->prevInSEL ) edge2->prevInSEL->nextInSEL = edge2; + } + + if( !edge1->prevInSEL ) m_SortedEdges = edge1; + else if( !edge2->prevInSEL ) m_SortedEdges = edge2; +} +//------------------------------------------------------------------------------ + +TEdge* GetNextInAEL(TEdge *e, Direction dir) +{ + return dir == dLeftToRight ? e->nextInAEL : e->prevInAEL; +} +//------------------------------------------------------------------------------ + +void Clipper::ProcessHorizontal(TEdge *horzEdge) +{ + Direction dir; + long64 horzLeft, horzRight; + + if( horzEdge->xcurr < horzEdge->xtop ) + { + horzLeft = horzEdge->xcurr; + horzRight = horzEdge->xtop; + dir = dLeftToRight; + } else + { + horzLeft = horzEdge->xtop; + horzRight = horzEdge->xcurr; + dir = dRightToLeft; + } + + TEdge* eMaxPair; + if( horzEdge->nextInLML ) eMaxPair = 0; + else eMaxPair = GetMaximaPair(horzEdge); + + TEdge* e = GetNextInAEL( horzEdge , dir ); + while( e ) + { + TEdge* eNext = GetNextInAEL( e, dir ); + + if (eMaxPair || + ((dir == dLeftToRight) && (e->xcurr <= horzRight)) || + ((dir == dRightToLeft) && (e->xcurr >= horzLeft))) + { + //ok, so far it looks like we're still in range of the horizontal edge + if ( e->xcurr == horzEdge->xtop && !eMaxPair ) + { + if (SlopesEqual(*e, *horzEdge->nextInLML, m_UseFullRange)) + { + //if output polygons share an edge, they'll need joining later ... + if (horzEdge->outIdx >= 0 && e->outIdx >= 0) + AddJoin(horzEdge->nextInLML, e, horzEdge->outIdx); + break; //we've reached the end of the horizontal line + } + else if (e->dx < horzEdge->nextInLML->dx) + //we really have got to the end of the intermediate horz edge so quit. + //nb: More -ve slopes follow more +ve slopes ABOVE the horizontal. + break; + } + + if( e == eMaxPair ) + { + //horzEdge is evidently a maxima horizontal and we've arrived at its end. + if (dir == dLeftToRight) + IntersectEdges(horzEdge, e, IntPoint(e->xcurr, horzEdge->ycurr), ipNone); + else + IntersectEdges(e, horzEdge, IntPoint(e->xcurr, horzEdge->ycurr), ipNone); + if (eMaxPair->outIdx >= 0) throw clipperException("ProcessHorizontal error"); + return; + } + else if( NEAR_EQUAL(e->dx, HORIZONTAL) && !IsMinima(e) && !(e->xcurr > e->xtop) ) + { + //An overlapping horizontal edge. Overlapping horizontal edges are + //processed as if layered with the current horizontal edge (horizEdge) + //being infinitesimally lower that the next (e). Therfore, we + //intersect with e only if e.xcurr is within the bounds of horzEdge ... + if( dir == dLeftToRight ) + IntersectEdges( horzEdge , e, IntPoint(e->xcurr, horzEdge->ycurr), + (IsTopHorz( e->xcurr ))? ipLeft : ipBoth ); + else + IntersectEdges( e, horzEdge, IntPoint(e->xcurr, horzEdge->ycurr), + (IsTopHorz( e->xcurr ))? ipRight : ipBoth ); + } + else if( dir == dLeftToRight ) + { + IntersectEdges( horzEdge, e, IntPoint(e->xcurr, horzEdge->ycurr), + (IsTopHorz( e->xcurr ))? ipLeft : ipBoth ); + } + else + { + IntersectEdges( e, horzEdge, IntPoint(e->xcurr, horzEdge->ycurr), + (IsTopHorz( e->xcurr ))? ipRight : ipBoth ); + } + SwapPositionsInAEL( horzEdge, e ); + } + else if( (dir == dLeftToRight && e->xcurr > horzRight && m_SortedEdges) || + (dir == dRightToLeft && e->xcurr < horzLeft && m_SortedEdges) ) break; + e = eNext; + } //end while + + if( horzEdge->nextInLML ) + { + if( horzEdge->outIdx >= 0 ) + AddOutPt( horzEdge, IntPoint(horzEdge->xtop, horzEdge->ytop)); + UpdateEdgeIntoAEL( horzEdge ); + } + else + { + if ( horzEdge->outIdx >= 0 ) + IntersectEdges( horzEdge, eMaxPair, + IntPoint(horzEdge->xtop, horzEdge->ycurr), ipBoth); + if (eMaxPair->outIdx >= 0) throw clipperException("ProcessHorizontal error"); + DeleteFromAEL(eMaxPair); + DeleteFromAEL(horzEdge); + } +} +//------------------------------------------------------------------------------ + +void Clipper::UpdateEdgeIntoAEL(TEdge *&e) +{ + if( !e->nextInLML ) throw + clipperException("UpdateEdgeIntoAEL: invalid call"); + TEdge* AelPrev = e->prevInAEL; + TEdge* AelNext = e->nextInAEL; + e->nextInLML->outIdx = e->outIdx; + if( AelPrev ) AelPrev->nextInAEL = e->nextInLML; + else m_ActiveEdges = e->nextInLML; + if( AelNext ) AelNext->prevInAEL = e->nextInLML; + e->nextInLML->side = e->side; + e->nextInLML->windDelta = e->windDelta; + e->nextInLML->windCnt = e->windCnt; + e->nextInLML->windCnt2 = e->windCnt2; + e = e->nextInLML; + e->prevInAEL = AelPrev; + e->nextInAEL = AelNext; + if( !NEAR_EQUAL(e->dx, HORIZONTAL) ) InsertScanbeam( e->ytop ); +} +//------------------------------------------------------------------------------ + +bool Clipper::ProcessIntersections(const long64 botY, const long64 topY) +{ + if( !m_ActiveEdges ) return true; + try { + BuildIntersectList(botY, topY); + if ( !m_IntersectNodes) return true; + if ( FixupIntersections() ) ProcessIntersectList(); + else return false; + } + catch(...) { + m_SortedEdges = 0; + DisposeIntersectNodes(); + throw clipperException("ProcessIntersections error"); + } + return true; +} +//------------------------------------------------------------------------------ + +void Clipper::DisposeIntersectNodes() +{ + while ( m_IntersectNodes ) + { + IntersectNode* iNode = m_IntersectNodes->next; + delete m_IntersectNodes; + m_IntersectNodes = iNode; + } +} +//------------------------------------------------------------------------------ + +void Clipper::BuildIntersectList(const long64 botY, const long64 topY) +{ + if ( !m_ActiveEdges ) return; + + //prepare for sorting ... + TEdge* e = m_ActiveEdges; + m_SortedEdges = e; + while( e ) + { + e->prevInSEL = e->prevInAEL; + e->nextInSEL = e->nextInAEL; + e->tmpX = TopX( *e, topY ); + e = e->nextInAEL; + } + + //bubblesort ... + bool isModified = true; + while( isModified && m_SortedEdges ) + { + isModified = false; + e = m_SortedEdges; + while( e->nextInSEL ) + { + TEdge *eNext = e->nextInSEL; + IntPoint pt; + if(e->tmpX > eNext->tmpX && + IntersectPoint(*e, *eNext, pt, m_UseFullRange)) + { + if (pt.Y > botY) + { + pt.Y = botY; + pt.X = TopX(*e, pt.Y); + } + AddIntersectNode( e, eNext, pt ); + SwapPositionsInSEL(e, eNext); + isModified = true; + } + else + e = eNext; + } + if( e->prevInSEL ) e->prevInSEL->nextInSEL = 0; + else break; + } + m_SortedEdges = 0; +} +//------------------------------------------------------------------------------ + +bool ProcessParam1BeforeParam2(const IntersectNode &node1, const IntersectNode &node2) +{ + bool result; + if (node1.pt.Y == node2.pt.Y) + { + if (node1.edge1 == node2.edge1 || node1.edge2 == node2.edge1) + { + result = node2.pt.X > node1.pt.X; + return node2.edge1->dx > 0 ? !result : result; + } + else if (node1.edge1 == node2.edge2 || node1.edge2 == node2.edge2) + { + result = node2.pt.X > node1.pt.X; + return node2.edge2->dx > 0 ? !result : result; + } + else return node2.pt.X > node1.pt.X; + } + else return node1.pt.Y > node2.pt.Y; +} +//------------------------------------------------------------------------------ + +void Clipper::AddIntersectNode(TEdge *e1, TEdge *e2, const IntPoint &pt) +{ + IntersectNode* newNode = new IntersectNode; + newNode->edge1 = e1; + newNode->edge2 = e2; + newNode->pt = pt; + newNode->next = 0; + if( !m_IntersectNodes ) m_IntersectNodes = newNode; + else if( ProcessParam1BeforeParam2(*newNode, *m_IntersectNodes) ) + { + newNode->next = m_IntersectNodes; + m_IntersectNodes = newNode; + } + else + { + IntersectNode* iNode = m_IntersectNodes; + while( iNode->next && ProcessParam1BeforeParam2(*iNode->next, *newNode) ) + iNode = iNode->next; + newNode->next = iNode->next; + iNode->next = newNode; + } +} +//------------------------------------------------------------------------------ + +void Clipper::ProcessIntersectList() +{ + while( m_IntersectNodes ) + { + IntersectNode* iNode = m_IntersectNodes->next; + { + IntersectEdges( m_IntersectNodes->edge1 , + m_IntersectNodes->edge2 , m_IntersectNodes->pt, ipBoth ); + SwapPositionsInAEL( m_IntersectNodes->edge1 , m_IntersectNodes->edge2 ); + } + delete m_IntersectNodes; + m_IntersectNodes = iNode; + } +} +//------------------------------------------------------------------------------ + +void Clipper::DoMaxima(TEdge *e, long64 topY) +{ + TEdge* eMaxPair = GetMaximaPair(e); + long64 X = e->xtop; + TEdge* eNext = e->nextInAEL; + while( eNext != eMaxPair ) + { + if (!eNext) throw clipperException("DoMaxima error"); + IntersectEdges( e, eNext, IntPoint(X, topY), ipBoth ); + SwapPositionsInAEL(e, eNext); + eNext = eNext->nextInAEL; + } + if( e->outIdx < 0 && eMaxPair->outIdx < 0 ) + { + DeleteFromAEL( e ); + DeleteFromAEL( eMaxPair ); + } + else if( e->outIdx >= 0 && eMaxPair->outIdx >= 0 ) + { + IntersectEdges( e, eMaxPair, IntPoint(X, topY), ipNone ); + } + else throw clipperException("DoMaxima error"); +} +//------------------------------------------------------------------------------ + +void Clipper::ProcessEdgesAtTopOfScanbeam(const long64 topY) +{ + TEdge* e = m_ActiveEdges; + while( e ) + { + //1. process maxima, treating them as if they're 'bent' horizontal edges, + // but exclude maxima with horizontal edges. nb: e can't be a horizontal. + if( IsMaxima(e, topY) && !NEAR_EQUAL(GetMaximaPair(e)->dx, HORIZONTAL) ) + { + //'e' might be removed from AEL, as may any following edges so ... + TEdge* ePrev = e->prevInAEL; + DoMaxima(e, topY); + if( !ePrev ) e = m_ActiveEdges; + else e = ePrev->nextInAEL; + } + else + { + //2. promote horizontal edges, otherwise update xcurr and ycurr ... + if( IsIntermediate(e, topY) && NEAR_EQUAL(e->nextInLML->dx, HORIZONTAL) ) + { + if (e->outIdx >= 0) + { + AddOutPt(e, IntPoint(e->xtop, e->ytop)); + + for (HorzJoinList::size_type i = 0; i < m_HorizJoins.size(); ++i) + { + IntPoint pt, pt2; + HorzJoinRec* hj = m_HorizJoins[i]; + if (GetOverlapSegment(IntPoint(hj->edge->xbot, hj->edge->ybot), + IntPoint(hj->edge->xtop, hj->edge->ytop), + IntPoint(e->nextInLML->xbot, e->nextInLML->ybot), + IntPoint(e->nextInLML->xtop, e->nextInLML->ytop), pt, pt2)) + AddJoin(hj->edge, e->nextInLML, hj->savedIdx, e->outIdx); + } + + AddHorzJoin(e->nextInLML, e->outIdx); + } + UpdateEdgeIntoAEL(e); + AddEdgeToSEL(e); + } else + { + //this just simplifies horizontal processing ... + e->xcurr = TopX( *e, topY ); + e->ycurr = topY; + } + e = e->nextInAEL; + } + } + + //3. Process horizontals at the top of the scanbeam ... + ProcessHorizontals(); + + //4. Promote intermediate vertices ... + e = m_ActiveEdges; + while( e ) + { + if( IsIntermediate( e, topY ) ) + { + if( e->outIdx >= 0 ) AddOutPt(e, IntPoint(e->xtop,e->ytop)); + UpdateEdgeIntoAEL(e); + + //if output polygons share an edge, they'll need joining later ... + TEdge* ePrev = e->prevInAEL; + TEdge* eNext = e->nextInAEL; + if (ePrev && ePrev->xcurr == e->xbot && + ePrev->ycurr == e->ybot && e->outIdx >= 0 && + ePrev->outIdx >= 0 && ePrev->ycurr > ePrev->ytop && + SlopesEqual(*e, *ePrev, m_UseFullRange)) + { + AddOutPt(ePrev, IntPoint(e->xbot, e->ybot)); + AddJoin(e, ePrev); + } + else if (eNext && eNext->xcurr == e->xbot && + eNext->ycurr == e->ybot && e->outIdx >= 0 && + eNext->outIdx >= 0 && eNext->ycurr > eNext->ytop && + SlopesEqual(*e, *eNext, m_UseFullRange)) + { + AddOutPt(eNext, IntPoint(e->xbot, e->ybot)); + AddJoin(e, eNext); + } + } + e = e->nextInAEL; + } +} +//------------------------------------------------------------------------------ + +void Clipper::FixupOutPolygon(OutRec &outRec) +{ + //FixupOutPolygon() - removes duplicate points and simplifies consecutive + //parallel edges by removing the middle vertex. + OutPt *lastOK = 0; + outRec.pts = outRec.bottomPt; + OutPt *pp = outRec.bottomPt; + + for (;;) + { + if (pp->prev == pp || pp->prev == pp->next ) + { + DisposeOutPts(pp); + outRec.pts = 0; + outRec.bottomPt = 0; + return; + } + //test for duplicate points and for same slope (cross-product) ... + if ( PointsEqual(pp->pt, pp->next->pt) || + SlopesEqual(pp->prev->pt, pp->pt, pp->next->pt, m_UseFullRange) ) + { + lastOK = 0; + OutPt *tmp = pp; + if (pp == outRec.bottomPt) + outRec.bottomPt = 0; //flags need for updating + pp->prev->next = pp->next; + pp->next->prev = pp->prev; + pp = pp->prev; + delete tmp; + } + else if (pp == lastOK) break; + else + { + if (!lastOK) lastOK = pp; + pp = pp->next; + } + } + if (!outRec.bottomPt) { + outRec.bottomPt = GetBottomPt(pp); + outRec.bottomPt->idx = outRec.idx; + outRec.pts = outRec.bottomPt; + } +} +//------------------------------------------------------------------------------ + +void Clipper::BuildResult(Polygons &polys) +{ + int k = 0; + polys.resize(m_PolyOuts.size()); + for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); ++i) + { + if (m_PolyOuts[i]->pts) + { + Polygon* pg = &polys[k]; + pg->clear(); + OutPt* p = m_PolyOuts[i]->pts; + do + { + pg->push_back(p->pt); + p = p->prev; + } while (p != m_PolyOuts[i]->pts); + //make sure each polygon has at least 3 vertices ... + if (pg->size() < 3) pg->clear(); else k++; + } + } + polys.resize(k); +} +//------------------------------------------------------------------------------ + +int PointCount(OutPt *pts) +{ + if (!pts) return 0; + int result = 0; + OutPt* p = pts; + do + { + result++; + p = p->next; + } + while (p != pts); + return result; +} +//------------------------------------------------------------------------------ + +void Clipper::BuildResult2(PolyTree& polytree) +{ + polytree.Clear(); + polytree.AllNodes.reserve(m_PolyOuts.size()); + //add each output polygon/contour to polytree ... + for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); i++) + { + OutRec* outRec = m_PolyOuts[i]; + int cnt = PointCount(outRec->pts); + if (cnt < 3) continue; + FixHoleLinkage(*outRec); + PolyNode* pn = new PolyNode(); + //nb: polytree takes ownership of all the PolyNodes + polytree.AllNodes.push_back(pn); + outRec->polyNode = pn; + pn->Parent = 0; + pn->Index = 0; + pn->Contour.reserve(cnt); + OutPt *op = outRec->pts; + for (int j = 0; j < cnt; j++) + { + pn->Contour.push_back(op->pt); + op = op->prev; + } + } + + //fixup PolyNode links etc ... + polytree.Childs.reserve(m_PolyOuts.size()); + for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); i++) + { + OutRec* outRec = m_PolyOuts[i]; + if (!outRec->polyNode) continue; + if (outRec->FirstLeft) + outRec->FirstLeft->polyNode->AddChild(*outRec->polyNode); + else + polytree.AddChild(*outRec->polyNode); + } +} +//------------------------------------------------------------------------------ + +void SwapIntersectNodes(IntersectNode &int1, IntersectNode &int2) +{ + TEdge *e1 = int1.edge1; + TEdge *e2 = int1.edge2; + IntPoint p = int1.pt; + + int1.edge1 = int2.edge1; + int1.edge2 = int2.edge2; + int1.pt = int2.pt; + + int2.edge1 = e1; + int2.edge2 = e2; + int2.pt = p; +} +//------------------------------------------------------------------------------ + +bool Clipper::FixupIntersections() +{ + if ( !m_IntersectNodes->next ) return true; + + CopyAELToSEL(); + IntersectNode *int1 = m_IntersectNodes; + IntersectNode *int2 = m_IntersectNodes->next; + while (int2) + { + TEdge *e1 = int1->edge1; + TEdge *e2; + if (e1->prevInSEL == int1->edge2) e2 = e1->prevInSEL; + else if (e1->nextInSEL == int1->edge2) e2 = e1->nextInSEL; + else + { + //The current intersection is out of order, so try and swap it with + //a subsequent intersection ... + while (int2) + { + if (int2->edge1->nextInSEL == int2->edge2 || + int2->edge1->prevInSEL == int2->edge2) break; + else int2 = int2->next; + } + if ( !int2 ) return false; //oops!!! + + //found an intersect node that can be swapped ... + SwapIntersectNodes(*int1, *int2); + e1 = int1->edge1; + e2 = int1->edge2; + } + SwapPositionsInSEL(e1, e2); + int1 = int1->next; + int2 = int1->next; + } + + m_SortedEdges = 0; + + //finally, check the last intersection too ... + return (int1->edge1->prevInSEL == int1->edge2 || + int1->edge1->nextInSEL == int1->edge2); +} +//------------------------------------------------------------------------------ + +bool E2InsertsBeforeE1(TEdge &e1, TEdge &e2) +{ + return e2.xcurr == e1.xcurr ? e2.dx > e1.dx : e2.xcurr < e1.xcurr; +} +//------------------------------------------------------------------------------ + +void Clipper::InsertEdgeIntoAEL(TEdge *edge) +{ + edge->prevInAEL = 0; + edge->nextInAEL = 0; + if( !m_ActiveEdges ) + { + m_ActiveEdges = edge; + } + else if( E2InsertsBeforeE1(*m_ActiveEdges, *edge) ) + { + edge->nextInAEL = m_ActiveEdges; + m_ActiveEdges->prevInAEL = edge; + m_ActiveEdges = edge; + } else + { + TEdge* e = m_ActiveEdges; + while( e->nextInAEL && !E2InsertsBeforeE1(*e->nextInAEL , *edge) ) + e = e->nextInAEL; + edge->nextInAEL = e->nextInAEL; + if( e->nextInAEL ) e->nextInAEL->prevInAEL = edge; + edge->prevInAEL = e; + e->nextInAEL = edge; + } +} +//---------------------------------------------------------------------- + +void Clipper::DoEdge1(TEdge *edge1, TEdge *edge2, const IntPoint &pt) +{ + AddOutPt(edge1, pt); + SwapSides(*edge1, *edge2); + SwapPolyIndexes(*edge1, *edge2); +} +//---------------------------------------------------------------------- + +void Clipper::DoEdge2(TEdge *edge1, TEdge *edge2, const IntPoint &pt) +{ + AddOutPt(edge2, pt); + SwapSides(*edge1, *edge2); + SwapPolyIndexes(*edge1, *edge2); +} +//---------------------------------------------------------------------- + +void Clipper::DoBothEdges(TEdge *edge1, TEdge *edge2, const IntPoint &pt) +{ + AddOutPt(edge1, pt); + AddOutPt(edge2, pt); + SwapSides( *edge1 , *edge2 ); + SwapPolyIndexes( *edge1 , *edge2 ); +} +//---------------------------------------------------------------------- + +bool Clipper::JoinPoints(const JoinRec *j, OutPt *&p1, OutPt *&p2) +{ + OutRec *outRec1 = m_PolyOuts[j->poly1Idx]; + OutRec *outRec2 = m_PolyOuts[j->poly2Idx]; + if (!outRec1 || !outRec2) return false; + OutPt *pp1a = outRec1->pts; + OutPt *pp2a = outRec2->pts; + IntPoint pt1 = j->pt2a, pt2 = j->pt2b; + IntPoint pt3 = j->pt1a, pt4 = j->pt1b; + if (!FindSegment(pp1a, pt1, pt2)) return false; + if (outRec1 == outRec2) + { + //we're searching the same polygon for overlapping segments so + //segment 2 mustn't be the same as segment 1 ... + pp2a = pp1a->next; + if (!FindSegment(pp2a, pt3, pt4) || (pp2a == pp1a)) return false; + } + else if (!FindSegment(pp2a, pt3, pt4)) return false; + + if (!GetOverlapSegment(pt1, pt2, pt3, pt4, pt1, pt2)) return false; + + OutPt *p3, *p4, *prev = pp1a->prev; + //get p1 & p2 polypts - the overlap start & endpoints on poly1 + if (PointsEqual(pp1a->pt, pt1)) p1 = pp1a; + else if (PointsEqual(prev->pt, pt1)) p1 = prev; + else p1 = InsertPolyPtBetween(pp1a, prev, pt1); + + if (PointsEqual(pp1a->pt, pt2)) p2 = pp1a; + else if (PointsEqual(prev->pt, pt2)) p2 = prev; + else if ((p1 == pp1a) || (p1 == prev)) + p2 = InsertPolyPtBetween(pp1a, prev, pt2); + else if (Pt3IsBetweenPt1AndPt2(pp1a->pt, p1->pt, pt2)) + p2 = InsertPolyPtBetween(pp1a, p1, pt2); else + p2 = InsertPolyPtBetween(p1, prev, pt2); + + //get p3 & p4 polypts - the overlap start & endpoints on poly2 + prev = pp2a->prev; + if (PointsEqual(pp2a->pt, pt1)) p3 = pp2a; + else if (PointsEqual(prev->pt, pt1)) p3 = prev; + else p3 = InsertPolyPtBetween(pp2a, prev, pt1); + + if (PointsEqual(pp2a->pt, pt2)) p4 = pp2a; + else if (PointsEqual(prev->pt, pt2)) p4 = prev; + else if ((p3 == pp2a) || (p3 == prev)) + p4 = InsertPolyPtBetween(pp2a, prev, pt2); + else if (Pt3IsBetweenPt1AndPt2(pp2a->pt, p3->pt, pt2)) + p4 = InsertPolyPtBetween(pp2a, p3, pt2); else + p4 = InsertPolyPtBetween(p3, prev, pt2); + + //p1.pt == p3.pt and p2.pt == p4.pt so join p1 to p3 and p2 to p4 ... + if (p1->next == p2 && p3->prev == p4) + { + p1->next = p3; + p3->prev = p1; + p2->prev = p4; + p4->next = p2; + return true; + } + else if (p1->prev == p2 && p3->next == p4) + { + p1->prev = p3; + p3->next = p1; + p2->next = p4; + p4->prev = p2; + return true; + } + else + return false; //an orientation is probably wrong +} +//---------------------------------------------------------------------- + +void Clipper::FixupJoinRecs(JoinRec *j, OutPt *pt, unsigned startIdx) +{ + for (JoinList::size_type k = startIdx; k < m_Joins.size(); k++) + { + JoinRec* j2 = m_Joins[k]; + if (j2->poly1Idx == j->poly1Idx && PointIsVertex(j2->pt1a, pt)) + j2->poly1Idx = j->poly2Idx; + if (j2->poly2Idx == j->poly1Idx && PointIsVertex(j2->pt2a, pt)) + j2->poly2Idx = j->poly2Idx; + } +} +//---------------------------------------------------------------------- + +bool Poly2ContainsPoly1(OutPt* outPt1, OutPt* outPt2, bool UseFullInt64Range) +{ + //find the first pt in outPt1 that isn't also a vertex of outPt2 ... + OutPt* outPt = outPt1; + do + { + if (!PointIsVertex(outPt->pt, outPt2)) break; + outPt = outPt->next; + } + while (outPt != outPt1); + bool result; + //sometimes a point on one polygon can be touching the other polygon + //so to be totally confident outPt1 is inside outPt2 repeat ... + do + { + result = PointInPolygon(outPt->pt, outPt2, UseFullInt64Range); + outPt = outPt->next; + } + while (result && outPt != outPt1); + return result; +} +//---------------------------------------------------------------------- + +void Clipper::FixupFirstLefts1(OutRec* OldOutRec, OutRec* NewOutRec) +{ + + for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); ++i) + { + OutRec* outRec = m_PolyOuts[i]; + if (outRec->pts && outRec->FirstLeft == OldOutRec) + { + if (Poly2ContainsPoly1(outRec->pts, NewOutRec->pts, m_UseFullRange)) + outRec->FirstLeft = NewOutRec; + } + } +} +//---------------------------------------------------------------------- + +void Clipper::FixupFirstLefts2(OutRec* OldOutRec, OutRec* NewOutRec) +{ + for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); ++i) + { + OutRec* outRec = m_PolyOuts[i]; + if (outRec->FirstLeft == OldOutRec) outRec->FirstLeft = NewOutRec; + } +} +//---------------------------------------------------------------------- + +void Clipper::JoinCommonEdges() +{ + for (JoinList::size_type i = 0; i < m_Joins.size(); i++) + { + JoinRec* j = m_Joins[i]; + + OutRec *outRec1 = m_PolyOuts[j->poly1Idx]; + OutRec *outRec2 = m_PolyOuts[j->poly2Idx]; + + if (!outRec1->pts || !outRec2->pts) continue; + + //get the polygon fragment with the correct hole state (FirstLeft) + //before calling JoinPoints() ... + OutRec *holeStateRec; + if (outRec1 == outRec2) holeStateRec = outRec1; + else if (Param1RightOfParam2(outRec1, outRec2)) holeStateRec = outRec2; + else if (Param1RightOfParam2(outRec2, outRec1)) holeStateRec = outRec1; + else holeStateRec = GetLowermostRec(outRec1, outRec2); + + OutPt *p1, *p2; + if (!JoinPoints(j, p1, p2)) continue; + + if (outRec1 == outRec2) + { + //instead of joining two polygons, we've just created a new one by + //splitting one polygon into two. + outRec1->pts = GetBottomPt(p1); + outRec1->bottomPt = outRec1->pts; + outRec1->bottomPt->idx = outRec1->idx; + outRec2 = CreateOutRec(); + m_PolyOuts.push_back(outRec2); + outRec2->idx = (int)m_PolyOuts.size()-1; + j->poly2Idx = outRec2->idx; + outRec2->pts = GetBottomPt(p2); + outRec2->bottomPt = outRec2->pts; + outRec2->bottomPt->idx = outRec2->idx; + + if (Poly2ContainsPoly1(outRec2->pts, outRec1->pts, m_UseFullRange)) + { + //outRec2 is contained by outRec1 ... + outRec2->isHole = !outRec1->isHole; + outRec2->FirstLeft = outRec1; + + FixupJoinRecs(j, p2, i+1); + + //fixup FirstLeft pointers that may need reassigning to OutRec1 + if (m_UsingPolyTree) FixupFirstLefts2(outRec2, outRec1); + + FixupOutPolygon(*outRec1); //nb: do this BEFORE testing orientation + FixupOutPolygon(*outRec2); // but AFTER calling FixupJoinRecs() + + + if ((outRec2->isHole ^ m_ReverseOutput) == (Area(*outRec2, m_UseFullRange) > 0)) + ReversePolyPtLinks(outRec2->pts); + + } else if (Poly2ContainsPoly1(outRec1->pts, outRec2->pts, m_UseFullRange)) + { + //outRec1 is contained by outRec2 ... + outRec2->isHole = outRec1->isHole; + outRec1->isHole = !outRec2->isHole; + outRec2->FirstLeft = outRec1->FirstLeft; + outRec1->FirstLeft = outRec2; + + FixupJoinRecs(j, p2, i+1); + + //fixup FirstLeft pointers that may need reassigning to OutRec1 + if (m_UsingPolyTree) FixupFirstLefts2(outRec1, outRec2); + + FixupOutPolygon(*outRec1); //nb: do this BEFORE testing orientation + FixupOutPolygon(*outRec2); // but AFTER calling FixupJoinRecs() + + if ((outRec1->isHole ^ m_ReverseOutput) == (Area(*outRec1, m_UseFullRange) > 0)) + ReversePolyPtLinks(outRec1->pts); + } + else + { + //the 2 polygons are completely separate ... + outRec2->isHole = outRec1->isHole; + outRec2->FirstLeft = outRec1->FirstLeft; + + FixupJoinRecs(j, p2, i+1); + + //fixup FirstLeft pointers that may need reassigning to OutRec2 + if (m_UsingPolyTree) FixupFirstLefts1(outRec1, outRec2); + + FixupOutPolygon(*outRec1); //nb: do this BEFORE testing orientation + FixupOutPolygon(*outRec2); // but AFTER calling FixupJoinRecs() + } + + } else + { + //joined 2 polygons together ... + + //cleanup redundant edges ... + FixupOutPolygon(*outRec1); + + //delete the obsolete pointer ... + int OKIdx = outRec1->idx; + int ObsoleteIdx = outRec2->idx; + outRec2->pts = 0; + outRec2->bottomPt = 0; + + outRec1->isHole = holeStateRec->isHole; + if (holeStateRec == outRec2) + outRec1->FirstLeft = outRec2->FirstLeft; + outRec2->FirstLeft = outRec1; + + //now fixup any subsequent Joins that match this polygon + for (JoinList::size_type k = i+1; k < m_Joins.size(); k++) + { + JoinRec* j2 = m_Joins[k]; + if (j2->poly1Idx == ObsoleteIdx) j2->poly1Idx = OKIdx; + if (j2->poly2Idx == ObsoleteIdx) j2->poly2Idx = OKIdx; + } + + //fixup FirstLeft pointers that may need reassigning to OutRec1 + if (m_UsingPolyTree) FixupFirstLefts2(outRec2, outRec1); + } + } +} +//------------------------------------------------------------------------------ + +void ReversePolygon(Polygon& p) +{ + std::reverse(p.begin(), p.end()); +} +//------------------------------------------------------------------------------ + +void ReversePolygons(Polygons& p) +{ + for (Polygons::size_type i = 0; i < p.size(); ++i) + ReversePolygon(p[i]); +} + +//------------------------------------------------------------------------------ +// OffsetPolygon functions ... +//------------------------------------------------------------------------------ + +struct DoublePoint +{ + double X; + double Y; + DoublePoint(double x = 0, double y = 0) : X(x), Y(y) {} +}; +//------------------------------------------------------------------------------ + +Polygon BuildArc(const IntPoint &pt, + const double a1, const double a2, const double r) +{ + long64 steps = std::max(6, int(std::sqrt(std::fabs(r)) * std::fabs(a2 - a1))); + if (steps > 0x100) steps = 0x100; + int n = (unsigned)steps; + Polygon result(n); + double da = (a2 - a1) / (n -1); + double a = a1; + for (int i = 0; i < n; ++i) + { + result[i].X = pt.X + Round(std::cos(a)*r); + result[i].Y = pt.Y + Round(std::sin(a)*r); + a += da; + } + return result; +} +//------------------------------------------------------------------------------ + +DoublePoint GetUnitNormal(const IntPoint &pt1, const IntPoint &pt2) +{ + if(pt2.X == pt1.X && pt2.Y == pt1.Y) + return DoublePoint(0, 0); + + double dx = (double)(pt2.X - pt1.X); + double dy = (double)(pt2.Y - pt1.Y); + double f = 1 *1.0/ std::sqrt( dx*dx + dy*dy ); + dx *= f; + dy *= f; + return DoublePoint(dy, -dx); +} + +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ + +class PolyOffsetBuilder +{ +private: + Polygons m_p; + Polygon* m_curr_poly; + std::vector normals; + double m_delta, m_RMin, m_R; + size_t m_i, m_j, m_k; + static const int buffLength = 128; + JoinType m_jointype; + +public: + +PolyOffsetBuilder(const Polygons& in_polys, Polygons& out_polys, + double delta, JoinType jointype, double MiterLimit, bool AutoFix) +{ + //nb precondition - out_polys != ptsin_polys + if (NEAR_ZERO(delta)) + { + out_polys = in_polys; + return; + } + + this->m_p = in_polys; + this->m_delta = delta; + this->m_jointype = jointype; + + //ChecksInput - fixes polygon orientation if necessary and removes + //duplicate vertices. Can be set false when you're sure that polygon + //orientation is correct and that there are no duplicate vertices. + if (AutoFix) + { + size_t Len = m_p.size(), botI = 0; + while (botI < Len && m_p[botI].size() == 0) botI++; + if (botI == Len) return; + + //botPt: used to find the lowermost (in inverted Y-axis) & leftmost point + //This point (on m_p[botI]) must be on an outer polygon ring and if + //its orientation is false (counterclockwise) then assume all polygons + //need reversing ... + IntPoint botPt = m_p[botI][0]; + for (size_t i = botI; i < Len; ++i) + { + if (m_p[i].size() < 3) continue; + if (UpdateBotPt(m_p[i][0], botPt)) botI = i; + Polygon::iterator it = m_p[i].begin() +1; + while (it != m_p[i].end()) + { + if (PointsEqual(*it, *(it -1))) + it = m_p[i].erase(it); + else + { + if (UpdateBotPt(*it, botPt)) botI = i; + ++it; + } + } + } + if (!Orientation(m_p[botI])) + ReversePolygons(m_p); + } + + if (MiterLimit <= 1) MiterLimit = 1; + m_RMin = 2.0/(MiterLimit*MiterLimit); + + double deltaSq = delta*delta; + out_polys.clear(); + out_polys.resize(m_p.size()); + for (m_i = 0; m_i < m_p.size(); m_i++) + { + m_curr_poly = &out_polys[m_i]; + size_t len = m_p[m_i].size(); + if (len > 1 && m_p[m_i][0].X == m_p[m_i][len - 1].X && + m_p[m_i][0].Y == m_p[m_i][len-1].Y) len--; + + //when 'shrinking' polygons - to minimize artefacts + //strip those polygons that have an area < pi * delta^2 ... + double a1 = Area(m_p[m_i]); + if (delta < 0) { if (a1 > 0 && a1 < deltaSq *pi) len = 0; } + else if (a1 < 0 && -a1 < deltaSq *pi) len = 0; //holes have neg. area + + if (len == 0 || (len < 3 && delta <= 0)) + continue; + else if (len == 1) + { + Polygon arc; + arc = BuildArc(m_p[m_i][len-1], 0, 2 * pi, delta); + out_polys[m_i] = arc; + continue; + } + + //build normals ... + normals.clear(); + normals.resize(len); + normals[len-1] = GetUnitNormal(m_p[m_i][len-1], m_p[m_i][0]); + for (m_j = 0; m_j < len -1; ++m_j) + normals[m_j] = GetUnitNormal(m_p[m_i][m_j], m_p[m_i][m_j+1]); + + m_k = len -1; + for (m_j = 0; m_j < len; ++m_j) + { + switch (jointype) + { + case jtMiter: + { + m_R = 1 + (normals[m_j].X*normals[m_k].X + + normals[m_j].Y*normals[m_k].Y); + if (m_R >= m_RMin) DoMiter(); else DoSquare(MiterLimit); + break; + } + case jtSquare: DoSquare(); break; + case jtRound: DoRound(); break; + } + m_k = m_j; + } + } + + //finally, clean up untidy corners using Clipper ... + Clipper clpr; + clpr.AddPolygons(out_polys, ptSubject); + if (delta > 0) + { + if (!clpr.Execute(ctUnion, out_polys, pftPositive, pftPositive)) + out_polys.clear(); + } + else + { + IntRect r = clpr.GetBounds(); + Polygon outer(4); + outer[0] = IntPoint(r.left - 10, r.bottom + 10); + outer[1] = IntPoint(r.right + 10, r.bottom + 10); + outer[2] = IntPoint(r.right + 10, r.top - 10); + outer[3] = IntPoint(r.left - 10, r.top - 10); + + clpr.AddPolygon(outer, ptSubject); + if (clpr.Execute(ctUnion, out_polys, pftNegative, pftNegative)) + { + out_polys.erase(out_polys.begin()); + ReversePolygons(out_polys); + + } else + out_polys.clear(); + } +} +//------------------------------------------------------------------------------ + +private: + +void AddPoint(const IntPoint& pt) +{ + Polygon::size_type len = m_curr_poly->size(); + if (len == m_curr_poly->capacity()) + m_curr_poly->reserve(len + buffLength); + m_curr_poly->push_back(pt); +} +//------------------------------------------------------------------------------ + +void DoSquare(double mul = 1.0) +{ + IntPoint pt1 = IntPoint((long64)Round(m_p[m_i][m_j].X + normals[m_k].X * m_delta), + (long64)Round(m_p[m_i][m_j].Y + normals[m_k].Y * m_delta)); + IntPoint pt2 = IntPoint((long64)Round(m_p[m_i][m_j].X + normals[m_j].X * m_delta), + (long64)Round(m_p[m_i][m_j].Y + normals[m_j].Y * m_delta)); + if ((normals[m_k].X * normals[m_j].Y - normals[m_j].X * normals[m_k].Y) * m_delta >= 0) + { + double a1 = std::atan2(normals[m_k].Y, normals[m_k].X); + double a2 = std::atan2(-normals[m_j].Y, -normals[m_j].X); + a1 = std::fabs(a2 - a1); + if (a1 > pi) a1 = pi * 2 - a1; + double dx = std::tan((pi - a1) / 4) * std::fabs(m_delta * mul); + pt1 = IntPoint((long64)(pt1.X -normals[m_k].Y * dx), + (long64)(pt1.Y + normals[m_k].X * dx)); + AddPoint(pt1); + pt2 = IntPoint((long64)(pt2.X + normals[m_j].Y * dx), + (long64)(pt2.Y -normals[m_j].X * dx)); + AddPoint(pt2); + } + else + { + AddPoint(pt1); + AddPoint(m_p[m_i][m_j]); + AddPoint(pt2); + } +} +//------------------------------------------------------------------------------ + +void DoMiter() +{ + if ((normals[m_k].X * normals[m_j].Y - normals[m_j].X * normals[m_k].Y) * m_delta >= 0) + { + double q = m_delta / m_R; + AddPoint(IntPoint((long64)Round(m_p[m_i][m_j].X + + (normals[m_k].X + normals[m_j].X) * q), + (long64)Round(m_p[m_i][m_j].Y + (normals[m_k].Y + normals[m_j].Y) * q))); + } + else + { + IntPoint pt1 = IntPoint((long64)Round(m_p[m_i][m_j].X + normals[m_k].X * + m_delta), (long64)Round(m_p[m_i][m_j].Y + normals[m_k].Y * m_delta)); + IntPoint pt2 = IntPoint((long64)Round(m_p[m_i][m_j].X + normals[m_j].X * + m_delta), (long64)Round(m_p[m_i][m_j].Y + normals[m_j].Y * m_delta)); + AddPoint(pt1); + AddPoint(m_p[m_i][m_j]); + AddPoint(pt2); + } +} +//------------------------------------------------------------------------------ + +void DoRound() +{ + IntPoint pt1 = IntPoint((long64)Round(m_p[m_i][m_j].X + normals[m_k].X * m_delta), + (long64)Round(m_p[m_i][m_j].Y + normals[m_k].Y * m_delta)); + IntPoint pt2 = IntPoint((long64)Round(m_p[m_i][m_j].X + normals[m_j].X * m_delta), + (long64)Round(m_p[m_i][m_j].Y + normals[m_j].Y * m_delta)); + AddPoint(pt1); + //round off reflex angles (ie > 180 deg) unless almost flat (ie < ~10deg). + if ((normals[m_k].X*normals[m_j].Y - normals[m_j].X*normals[m_k].Y) * m_delta >= 0) + { + if (normals[m_j].X * normals[m_k].X + normals[m_j].Y * normals[m_k].Y < 0.985) + { + double a1 = std::atan2(normals[m_k].Y, normals[m_k].X); + double a2 = std::atan2(normals[m_j].Y, normals[m_j].X); + if (m_delta > 0 && a2 < a1) a2 += pi *2; + else if (m_delta < 0 && a2 > a1) a2 -= pi *2; + Polygon arc = BuildArc(m_p[m_i][m_j], a1, a2, m_delta); + for (Polygon::size_type m = 0; m < arc.size(); m++) + AddPoint(arc[m]); + } + } + else + AddPoint(m_p[m_i][m_j]); + AddPoint(pt2); +} +//-------------------------------------------------------------------------- + +bool UpdateBotPt(const IntPoint &pt, IntPoint &botPt) +{ + if (pt.Y > botPt.Y || (pt.Y == botPt.Y && pt.X < botPt.X)) + { + botPt = pt; + return true; + } + else return false; +} +//-------------------------------------------------------------------------- + +}; //end PolyOffsetBuilder + +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ + +void OffsetPolygons(const Polygons &in_polys, Polygons &out_polys, + double delta, JoinType jointype, double MiterLimit, bool AutoFix) +{ + if (&out_polys == &in_polys) + { + Polygons poly2(in_polys); + PolyOffsetBuilder(poly2, out_polys, delta, jointype, MiterLimit, AutoFix); + } + else PolyOffsetBuilder(in_polys, out_polys, delta, jointype, MiterLimit, AutoFix); +} +//------------------------------------------------------------------------------ + +void SimplifyPolygon(const Polygon &in_poly, Polygons &out_polys, PolyFillType fillType) +{ + Clipper c; + c.AddPolygon(in_poly, ptSubject); + c.Execute(ctUnion, out_polys, fillType, fillType); +} +//------------------------------------------------------------------------------ + +void SimplifyPolygons(const Polygons &in_polys, Polygons &out_polys, PolyFillType fillType) +{ + Clipper c; + c.AddPolygons(in_polys, ptSubject); + c.Execute(ctUnion, out_polys, fillType, fillType); +} +//------------------------------------------------------------------------------ + +void SimplifyPolygons(Polygons &polys, PolyFillType fillType) +{ + SimplifyPolygons(polys, polys, fillType); +} +//------------------------------------------------------------------------------ + +void CleanPolygon(Polygon& in_poly, Polygon& out_poly, double distance) +{ + //delta = proximity in units/pixels below which vertices + //will be stripped. Default ~= sqrt(2) so when adjacent + //vertices have both x & y coords within 1 unit, then + //the second vertex will be stripped. + int len = in_poly.size(); + if (len < 3) + out_poly.resize(0); + else + out_poly.resize(in_poly.size()); + + int d = (int)(distance * distance); + IntPoint p = in_poly[0]; + int j = 1; + for (int i = 1; i < len; i++) + { + if ((in_poly[i].X - p.X) * (in_poly[i].X - p.X) + + (in_poly[i].Y - p.Y) * (in_poly[i].Y - p.Y) <= d) + continue; + out_poly[j] = in_poly[i]; + p = in_poly[i]; + j++; + } + p = in_poly[j - 1]; + if ((in_poly[0].X - p.X) * (in_poly[0].X - p.X) + + (in_poly[0].Y - p.Y) * (in_poly[0].Y - p.Y) <= d) + j--; + if (j < len) + out_poly.resize(j); +} +//------------------------------------------------------------------------------ +void CleanPolygons(Polygons& in_polys, Polygons& out_polys, double distance) +{ + for (Polygons::size_type i = 0; i < in_polys.size(); ++i) + CleanPolygon(in_polys[i], out_polys[i], distance); +} +//------------------------------------------------------------------------------ + +void AddPolyNodeToPolygons(PolyNode& polynode, Polygons& polygons) +{ + if (polynode.Contour.size() > 0) + polygons.push_back(polynode.Contour); + for (int i = 0; i < polynode.ChildCount(); ++i) + AddPolyNodeToPolygons(*polynode.Childs[i], polygons); +} +//------------------------------------------------------------------------------ + +void PolyTreeToPolygons(PolyTree& polytree, Polygons& polygons) +{ + polygons.resize(0); + polygons.reserve(polytree.Total()); + AddPolyNodeToPolygons(polytree, polygons); +} +//------------------------------------------------------------------------------ + +std::ostream& operator <<(std::ostream &s, IntPoint& p) +{ + s << p.X << ' ' << p.Y << "\n"; + return s; +} +//------------------------------------------------------------------------------ + +std::ostream& operator <<(std::ostream &s, Polygon &p) +{ + for (Polygon::size_type i = 0; i < p.size(); i++) + s << p[i]; + s << "\n"; + return s; +} +//------------------------------------------------------------------------------ + +std::ostream& operator <<(std::ostream &s, Polygons &p) +{ + for (Polygons::size_type i = 0; i < p.size(); i++) + s << p[i]; + s << "\n"; + return s; +} +//------------------------------------------------------------------------------ + +} //ClipperLib namespace diff --git a/clipper/clipper.hpp b/clipper/clipper.hpp new file mode 100755 index 0000000..c807efa --- /dev/null +++ b/clipper/clipper.hpp @@ -0,0 +1,340 @@ +/******************************************************************************* +* * +* Author : Angus Johnson * +* Version : 5.1.0 * +* Date : 1 February 2013 * +* Website : http://www.angusj.com * +* Copyright : Angus Johnson 2010-2013 * +* * +* License: * +* Use, modification & distribution is subject to Boost Software License Ver 1. * +* http://www.boost.org/LICENSE_1_0.txt * +* * +* Attributions: * +* The code in this library is an extension of Bala Vatti's clipping algorithm: * +* "A generic solution to polygon clipping" * +* Communications of the ACM, Vol 35, Issue 7 (July 1992) pp 56-63. * +* http://portal.acm.org/citation.cfm?id=129906 * +* * +* Computer graphics and geometric modeling: implementation and algorithms * +* By Max K. Agoston * +* Springer; 1 edition (January 4, 2005) * +* http://books.google.com/books?q=vatti+clipping+agoston * +* * +* See also: * +* "Polygon Offsetting by Computing Winding Numbers" * +* Paper no. DETC2005-85513 pp. 565-575 * +* ASME 2005 International Design Engineering Technical Conferences * +* and Computers and Information in Engineering Conference (IDETC/CIE2005) * +* September 24-28, 2005 , Long Beach, California, USA * +* http://www.me.berkeley.edu/~mcmains/pubs/DAC05OffsetPolygon.pdf * +* * +*******************************************************************************/ + +#ifndef clipper_hpp +#define clipper_hpp + +#include +#include +#include +#include +#include + +namespace ClipperLib { + +enum ClipType { ctIntersection, ctUnion, ctDifference, ctXor }; +enum PolyType { ptSubject, ptClip }; +//By far the most widely used winding rules for polygon filling are +//EvenOdd & NonZero (GDI, GDI+, XLib, OpenGL, Cairo, AGG, Quartz, SVG, Gr32) +//Others rules include Positive, Negative and ABS_GTR_EQ_TWO (only in OpenGL) +//see http://glprogramming.com/red/chapter11.html +enum PolyFillType { pftEvenOdd, pftNonZero, pftPositive, pftNegative }; + +typedef signed long long long64; +typedef unsigned long long ulong64; + +struct IntPoint { +public: + long64 X; + long64 Y; + IntPoint(long64 x = 0, long64 y = 0): X(x), Y(y) {}; + friend std::ostream& operator <<(std::ostream &s, IntPoint &p); +}; + +typedef std::vector< IntPoint > Polygon; +typedef std::vector< Polygon > Polygons; + + +std::ostream& operator <<(std::ostream &s, Polygon &p); +std::ostream& operator <<(std::ostream &s, Polygons &p); + +class PolyNode; +typedef std::vector< PolyNode* > PolyNodes; + +class PolyNode +{ +public: + Polygon Contour; + PolyNodes Childs; + PolyNode* Parent; + PolyNode* GetNext(); + bool IsHole(); + int ChildCount(); +private: + PolyNode* GetNextSiblingUp(); + unsigned Index; //node index in Parent.Childs + void AddChild(PolyNode& child); + friend class Clipper; //to access Index +}; + +class PolyTree: public PolyNode +{ +public: + ~PolyTree(){Clear();}; + PolyNode* GetFirst(); + void Clear(); + int Total(); +private: + PolyNodes AllNodes; + friend class Clipper; //to access AllNodes +}; + +enum JoinType { jtSquare, jtRound, jtMiter }; + +bool Orientation(const Polygon &poly); +double Area(const Polygon &poly); +void OffsetPolygons(const Polygons &in_polys, Polygons &out_polys, + double delta, JoinType jointype = jtSquare, double MiterLimit = 2, bool AutoFix = true); + +void SimplifyPolygon(const Polygon &in_poly, Polygons &out_polys, PolyFillType fillType = pftEvenOdd); +void SimplifyPolygons(const Polygons &in_polys, Polygons &out_polys, PolyFillType fillType = pftEvenOdd); +void SimplifyPolygons(Polygons &polys, PolyFillType fillType = pftEvenOdd); + +void CleanPolygon(Polygon& in_poly, Polygon& out_poly, double distance = 1.415); +void CleanPolygons(Polygons& in_polys, Polygons& out_polys, double distance = 1.415); + +void PolyTreeToPolygons(PolyTree& polytree, Polygons& polygons); + +void ReversePolygon(Polygon& p); +void ReversePolygons(Polygons& p); + +//used internally ... +enum EdgeSide { esLeft = 1, esRight = 2}; +enum IntersectProtects { ipNone = 0, ipLeft = 1, ipRight = 2, ipBoth = 3 }; + +struct TEdge { + long64 xbot; + long64 ybot; + long64 xcurr; + long64 ycurr; + long64 xtop; + long64 ytop; + double dx; + long64 deltaX; + long64 deltaY; + long64 tmpX; + PolyType polyType; + EdgeSide side; + int windDelta; //1 or -1 depending on winding direction + int windCnt; + int windCnt2; //winding count of the opposite polytype + int outIdx; + TEdge *next; + TEdge *prev; + TEdge *nextInLML; + TEdge *nextInAEL; + TEdge *prevInAEL; + TEdge *nextInSEL; + TEdge *prevInSEL; +}; + +struct IntersectNode { + TEdge *edge1; + TEdge *edge2; + IntPoint pt; + IntersectNode *next; +}; + +struct LocalMinima { + long64 Y; + TEdge *leftBound; + TEdge *rightBound; + LocalMinima *next; +}; + +struct Scanbeam { + long64 Y; + Scanbeam *next; +}; + +struct OutPt; //forward declaration + +struct OutRec { + int idx; + bool isHole; + OutRec *FirstLeft; //see comments in clipper.pas + PolyNode *polyNode; + OutPt *pts; + OutPt *bottomPt; +}; + +struct OutPt { + int idx; + IntPoint pt; + OutPt *next; + OutPt *prev; +}; + +struct JoinRec { + IntPoint pt1a; + IntPoint pt1b; + int poly1Idx; + IntPoint pt2a; + IntPoint pt2b; + int poly2Idx; +}; + +struct HorzJoinRec { + TEdge *edge; + int savedIdx; +}; + +struct IntRect { long64 left; long64 top; long64 right; long64 bottom; }; + +typedef std::vector < OutRec* > PolyOutList; +typedef std::vector < TEdge* > EdgeList; +typedef std::vector < JoinRec* > JoinList; +typedef std::vector < HorzJoinRec* > HorzJoinList; + +//ClipperBase is the ancestor to the Clipper class. It should not be +//instantiated directly. This class simply abstracts the conversion of sets of +//polygon coordinates into edge objects that are stored in a LocalMinima list. +class ClipperBase +{ +public: + ClipperBase(); + virtual ~ClipperBase(); + bool AddPolygon(const Polygon &pg, PolyType polyType); + bool AddPolygons( const Polygons &ppg, PolyType polyType); + virtual void Clear(); + IntRect GetBounds(); +protected: + void DisposeLocalMinimaList(); + TEdge* AddBoundsToLML(TEdge *e); + void PopLocalMinima(); + virtual void Reset(); + void InsertLocalMinima(LocalMinima *newLm); + LocalMinima *m_CurrentLM; + LocalMinima *m_MinimaList; + bool m_UseFullRange; + EdgeList m_edges; +}; + +class Clipper : public virtual ClipperBase +{ +public: + Clipper(); + ~Clipper(); + bool Execute(ClipType clipType, + Polygons &solution, + PolyFillType subjFillType = pftEvenOdd, + PolyFillType clipFillType = pftEvenOdd); + bool Execute(ClipType clipType, + PolyTree &polytree, + PolyFillType subjFillType = pftEvenOdd, + PolyFillType clipFillType = pftEvenOdd); + void Clear(); + bool ReverseSolution() {return m_ReverseOutput;}; + void ReverseSolution(bool value) {m_ReverseOutput = value;}; +protected: + void Reset(); + virtual bool ExecuteInternal(); +private: + PolyOutList m_PolyOuts; + JoinList m_Joins; + HorzJoinList m_HorizJoins; + ClipType m_ClipType; + Scanbeam *m_Scanbeam; + TEdge *m_ActiveEdges; + TEdge *m_SortedEdges; + IntersectNode *m_IntersectNodes; + bool m_ExecuteLocked; + PolyFillType m_ClipFillType; + PolyFillType m_SubjFillType; + bool m_ReverseOutput; + bool m_UsingPolyTree; + void DisposeScanbeamList(); + void SetWindingCount(TEdge& edge); + bool IsEvenOddFillType(const TEdge& edge) const; + bool IsEvenOddAltFillType(const TEdge& edge) const; + void InsertScanbeam(const long64 Y); + long64 PopScanbeam(); + void InsertLocalMinimaIntoAEL(const long64 botY); + void InsertEdgeIntoAEL(TEdge *edge); + void AddEdgeToSEL(TEdge *edge); + void CopyAELToSEL(); + void DeleteFromSEL(TEdge *e); + void DeleteFromAEL(TEdge *e); + void UpdateEdgeIntoAEL(TEdge *&e); + void SwapPositionsInSEL(TEdge *edge1, TEdge *edge2); + bool IsContributing(const TEdge& edge) const; + bool IsTopHorz(const long64 XPos); + void SwapPositionsInAEL(TEdge *edge1, TEdge *edge2); + void DoMaxima(TEdge *e, long64 topY); + void ProcessHorizontals(); + void ProcessHorizontal(TEdge *horzEdge); + void AddLocalMaxPoly(TEdge *e1, TEdge *e2, const IntPoint &pt); + void AddLocalMinPoly(TEdge *e1, TEdge *e2, const IntPoint &pt); + void AppendPolygon(TEdge *e1, TEdge *e2); + void DoEdge1(TEdge *edge1, TEdge *edge2, const IntPoint &pt); + void DoEdge2(TEdge *edge1, TEdge *edge2, const IntPoint &pt); + void DoBothEdges(TEdge *edge1, TEdge *edge2, const IntPoint &pt); + void IntersectEdges(TEdge *e1, TEdge *e2, + const IntPoint &pt, const IntersectProtects protects); + OutRec* CreateOutRec(); + void AddOutPt(TEdge *e, const IntPoint &pt); + void DisposeAllPolyPts(); + void DisposeOutRec(PolyOutList::size_type index); + bool ProcessIntersections(const long64 botY, const long64 topY); + void AddIntersectNode(TEdge *e1, TEdge *e2, const IntPoint &pt); + void BuildIntersectList(const long64 botY, const long64 topY); + void ProcessIntersectList(); + void ProcessEdgesAtTopOfScanbeam(const long64 topY); + void BuildResult(Polygons& polys); + void BuildResult2(PolyTree& polytree); + void SetHoleState(TEdge *e, OutRec *OutRec); + void DisposeIntersectNodes(); + bool FixupIntersections(); + void FixupOutPolygon(OutRec &outRec); + bool IsHole(TEdge *e); + void FixHoleLinkage(OutRec &outRec); + void AddJoin(TEdge *e1, TEdge *e2, int e1OutIdx = -1, int e2OutIdx = -1); + void ClearJoins(); + void AddHorzJoin(TEdge *e, int idx); + void ClearHorzJoins(); + bool JoinPoints(const JoinRec *j, OutPt *&p1, OutPt *&p2); + void FixupJoinRecs(JoinRec *j, OutPt *pt, unsigned startIdx); + void JoinCommonEdges(); + void FixupFirstLefts1(OutRec* OldOutRec, OutRec* NewOutRec); + void FixupFirstLefts2(OutRec* OldOutRec, OutRec* NewOutRec); +}; + +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ + +class clipperException : public std::exception +{ + public: + clipperException(const char* description): m_descr(description) {} + virtual ~clipperException() throw() {} + virtual const char* what() const throw() {return m_descr.c_str();} + private: + std::string m_descr; +}; +//------------------------------------------------------------------------------ + +} //ClipperLib namespace + +#endif //clipper_hpp + + diff --git a/clipper/clipper_ver5.1.0.zip b/clipper/clipper_ver5.1.0.zip new file mode 100755 index 0000000000000000000000000000000000000000..3cef614f0262e66f9f05688146ad90ba5113c2dd GIT binary patch literal 1714315 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 aBy9lAnvRV2Fw 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 z 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̎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 z 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 z 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

  1. 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%0DF=)rW% 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 z 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

    =odDUhnq;DreqCyDiyI&BJ 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

    !spPY5P0wSj`F~e<_3n1uK;NLDfDiTm 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

    CR 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�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 Q=;o1+w|r`EK^wsQKdDg~$N&HU literal 0 HcmV?d00001 diff --git a/clipper/cpp/CMakeLists.txt b/clipper/cpp/CMakeLists.txt new file mode 100755 index 0000000..6dacef1 --- /dev/null +++ b/clipper/cpp/CMakeLists.txt @@ -0,0 +1,15 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 2.6.0) +PROJECT(polyclipping) + +SET(CMAKE_BUILD_TYPE "Release" CACHE STRING "Release type") +SET(CMAKE_INSTALL_LIBDIR lib${LIB_SUFFIX}) + +SET(BUILD_SHARED_LIBS ON CACHE BOOL + "Build shared libraries (.dll/.so) instead of static ones (.lib/.a)") +ADD_LIBRARY(polyclipping clipper.cpp) + +# The header name clipper.hpp is too generic, so install in a subdirectory +INSTALL (FILES clipper.hpp DESTINATION include/polyclipping) +INSTALL (TARGETS polyclipping LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) + +SET_TARGET_PROPERTIES(polyclipping PROPERTIES VERSION 7.0.0 SOVERSION 7 ) \ No newline at end of file diff --git a/clipper/cpp/clipper.cpp b/clipper/cpp/clipper.cpp new file mode 100755 index 0000000..1042052 --- /dev/null +++ b/clipper/cpp/clipper.cpp @@ -0,0 +1,3469 @@ +/******************************************************************************* +* * +* Author : Angus Johnson * +* Version : 5.1.0 * +* Date : 1 February 2013 * +* Website : http://www.angusj.com * +* Copyright : Angus Johnson 2010-2013 * +* * +* License: * +* Use, modification & distribution is subject to Boost Software License Ver 1. * +* http://www.boost.org/LICENSE_1_0.txt * +* * +* Attributions: * +* The code in this library is an extension of Bala Vatti's clipping algorithm: * +* "A generic solution to polygon clipping" * +* Communications of the ACM, Vol 35, Issue 7 (July 1992) pp 56-63. * +* http://portal.acm.org/citation.cfm?id=129906 * +* * +* Computer graphics and geometric modeling: implementation and algorithms * +* By Max K. Agoston * +* Springer; 1 edition (January 4, 2005) * +* http://books.google.com/books?q=vatti+clipping+agoston * +* * +* See also: * +* "Polygon Offsetting by Computing Winding Numbers" * +* Paper no. DETC2005-85513 pp. 565-575 * +* ASME 2005 International Design Engineering Technical Conferences * +* and Computers and Information in Engineering Conference (IDETC/CIE2005) * +* September 24-28, 2005 , Long Beach, California, USA * +* http://www.me.berkeley.edu/~mcmains/pubs/DAC05OffsetPolygon.pdf * +* * +*******************************************************************************/ + +/******************************************************************************* +* * +* This is a translation of the Delphi Clipper library and the naming style * +* used has retained a Delphi flavour. * +* * +*******************************************************************************/ + +#include "clipper.hpp" +#include +#include +#include +#include +#include +#include +#include + +namespace ClipperLib { + +static long64 const loRange = 0x3FFFFFFF; +static long64 const hiRange = 0x3FFFFFFFFFFFFFFFLL; +static double const pi = 3.141592653589793238; +enum Direction { dRightToLeft, dLeftToRight }; + +#define HORIZONTAL (-1.0E+40) +#define TOLERANCE (1.0e-20) +#define NEAR_ZERO(val) (((val) > -TOLERANCE) && ((val) < TOLERANCE)) +#define NEAR_EQUAL(a, b) NEAR_ZERO((a) - (b)) + +inline long64 Abs(long64 val) +{ + return val < 0 ? -val : val; +} + +//------------------------------------------------------------------------------ +// PolyTree methods ... +//------------------------------------------------------------------------------ + +void PolyTree::Clear() +{ + for (PolyNodes::size_type i = 0; i < AllNodes.size(); ++i) + delete AllNodes[i]; + AllNodes.resize(0); + Childs.resize(0); +} +//------------------------------------------------------------------------------ + +PolyNode* PolyTree::GetFirst() +{ + if (Childs.size() > 0) + return Childs[0]; + else + return 0; +} +//------------------------------------------------------------------------------ + +int PolyTree::Total() +{ + return AllNodes.size(); +} + +//------------------------------------------------------------------------------ +// PolyNode methods ... +//------------------------------------------------------------------------------ + + +int PolyNode::ChildCount() +{ + return Childs.size(); +} +//------------------------------------------------------------------------------ + +void PolyNode::AddChild(PolyNode& child) +{ + unsigned cnt = Childs.size(); + Childs.push_back(&child); + child.Parent = this; + child.Index = cnt; +} +//------------------------------------------------------------------------------ + +PolyNode* PolyNode::GetNext() +{ + if (Childs.size() > 0) + return Childs[0]; + else + return GetNextSiblingUp(); +} +//------------------------------------------------------------------------------ + +PolyNode* PolyNode::GetNextSiblingUp() +{ + if (!Parent) //protects against PolyTree.GetNextSiblingUp() + return 0; + else if (Index == Parent->Childs.size() - 1) + return Parent->GetNextSiblingUp(); + else + return Parent->Childs[Index + 1]; +} +//------------------------------------------------------------------------------ + +bool PolyNode::IsHole() +{ + bool result = true; + PolyNode* node = Parent; + while (node) + { + result = !result; + node = node->Parent; + } + return result; +} + +//------------------------------------------------------------------------------ +// Int128 class (enables safe math on signed 64bit integers) +// eg Int128 val1((long64)9223372036854775807); //ie 2^63 -1 +// Int128 val2((long64)9223372036854775807); +// Int128 val3 = val1 * val2; +// val3.AsString => "85070591730234615847396907784232501249" (8.5e+37) +//------------------------------------------------------------------------------ + +class Int128 +{ + public: + + ulong64 lo; + long64 hi; + + Int128(long64 _lo = 0) + { + lo = (ulong64)_lo; + if (_lo < 0) hi = -1; else hi = 0; + } + + + Int128(const Int128 &val): lo(val.lo), hi(val.hi){} + + Int128(const long64& _hi, const ulong64& _lo): lo(_lo), hi(_hi){} + + long64 operator = (const long64 &val) + { + lo = (ulong64)val; + if (val < 0) hi = -1; else hi = 0; + return val; + } + + bool operator == (const Int128 &val) const + {return (hi == val.hi && lo == val.lo);} + + bool operator != (const Int128 &val) const + { return !(*this == val);} + + bool operator > (const Int128 &val) const + { + if (hi != val.hi) + return hi > val.hi; + else + return lo > val.lo; + } + + bool operator < (const Int128 &val) const + { + if (hi != val.hi) + return hi < val.hi; + else + return lo < val.lo; + } + + bool operator >= (const Int128 &val) const + { return !(*this < val);} + + bool operator <= (const Int128 &val) const + { return !(*this > val);} + + Int128& operator += (const Int128 &rhs) + { + hi += rhs.hi; + lo += rhs.lo; + if (lo < rhs.lo) hi++; + return *this; + } + + Int128 operator + (const Int128 &rhs) const + { + Int128 result(*this); + result+= rhs; + return result; + } + + Int128& operator -= (const Int128 &rhs) + { + *this += -rhs; + return *this; + } + + Int128 operator - (const Int128 &rhs) const + { + Int128 result(*this); + result -= rhs; + return result; + } + + Int128 operator-() const //unary negation + { + if (lo == 0) + return Int128(-hi,0); + else + return Int128(~hi,~lo +1); + } + + Int128 operator/ (const Int128 &rhs) const + { + if (rhs.lo == 0 && rhs.hi == 0) + throw "Int128 operator/: divide by zero"; + + bool negate = (rhs.hi < 0) != (hi < 0); + Int128 dividend = *this; + Int128 divisor = rhs; + if (dividend.hi < 0) dividend = -dividend; + if (divisor.hi < 0) divisor = -divisor; + + if (divisor < dividend) + { + Int128 result = Int128(0); + Int128 cntr = Int128(1); + while (divisor.hi >= 0 && !(divisor > dividend)) + { + divisor.hi <<= 1; + if ((long64)divisor.lo < 0) divisor.hi++; + divisor.lo <<= 1; + + cntr.hi <<= 1; + if ((long64)cntr.lo < 0) cntr.hi++; + cntr.lo <<= 1; + } + divisor.lo >>= 1; + if ((divisor.hi & 1) == 1) + divisor.lo |= 0x8000000000000000LL; + divisor.hi = (ulong64)divisor.hi >> 1; + + cntr.lo >>= 1; + if ((cntr.hi & 1) == 1) + cntr.lo |= 0x8000000000000000LL; + cntr.hi >>= 1; + + while (cntr.hi != 0 || cntr.lo != 0) + { + if (!(dividend < divisor)) + { + dividend -= divisor; + result.hi |= cntr.hi; + result.lo |= cntr.lo; + } + divisor.lo >>= 1; + if ((divisor.hi & 1) == 1) + divisor.lo |= 0x8000000000000000LL; + divisor.hi >>= 1; + + cntr.lo >>= 1; + if ((cntr.hi & 1) == 1) + cntr.lo |= 0x8000000000000000LL; + cntr.hi >>= 1; + } + if (negate) result = -result; + return result; + } + else if (rhs.hi == this->hi && rhs.lo == this->lo) + return Int128(1); + else + return Int128(0); + } + + double AsDouble() const + { + const double shift64 = 18446744073709551616.0; //2^64 + if (hi < 0) + { + if (lo == 0) return (double)hi * shift64; + else return -(double)(~lo + ~hi * shift64); + } + else + return (double)(lo + hi * shift64); + } +}; + +Int128 Int128Mul (long64 lhs, long64 rhs) +{ + bool negate = (lhs < 0) != (rhs < 0); + + if (lhs < 0) lhs = -lhs; + ulong64 int1Hi = ulong64(lhs) >> 32; + ulong64 int1Lo = ulong64(lhs & 0xFFFFFFFF); + + if (rhs < 0) rhs = -rhs; + ulong64 int2Hi = ulong64(rhs) >> 32; + ulong64 int2Lo = ulong64(rhs & 0xFFFFFFFF); + + //nb: see comments in clipper.pas + ulong64 a = int1Hi * int2Hi; + ulong64 b = int1Lo * int2Lo; + ulong64 c = int1Hi * int2Lo + int1Lo * int2Hi; + + Int128 tmp; + tmp.hi = long64(a + (c >> 32)); + tmp.lo = long64(c << 32); + tmp.lo += long64(b); + if (tmp.lo < b) tmp.hi++; + if (negate) tmp = -tmp; + return tmp; +} + +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ + +bool FullRangeNeeded(const Polygon &pts) +{ + bool result = false; + for (Polygon::size_type i = 0; i < pts.size(); ++i) + { + if (Abs(pts[i].X) > hiRange || Abs(pts[i].Y) > hiRange) + throw "Coordinate exceeds range bounds."; + else if (Abs(pts[i].X) > loRange || Abs(pts[i].Y) > loRange) + result = true; + } + return result; +} +//------------------------------------------------------------------------------ + +bool Orientation(const Polygon &poly) +{ + return Area(poly) >= 0; +} +//------------------------------------------------------------------------------ + +inline bool PointsEqual( const IntPoint &pt1, const IntPoint &pt2) +{ + return ( pt1.X == pt2.X && pt1.Y == pt2.Y ); +} +//------------------------------------------------------------------------------ + +double Area(const Polygon &poly) +{ + int highI = (int)poly.size() -1; + if (highI < 2) return 0; + + if (FullRangeNeeded(poly)) { + Int128 a; + a = Int128Mul(poly[highI].X + poly[0].X, poly[0].Y - poly[highI].Y); + for (int i = 1; i <= highI; ++i) + a += Int128Mul(poly[i - 1].X + poly[i].X, poly[i].Y - poly[i -1].Y); + return a.AsDouble() / 2; + } + else + { + double a; + a = ((double)poly[highI].X + poly[0].X) * ((double)poly[0].Y - poly[highI].Y); + for (int i = 1; i <= highI; ++i) + a += ((double)poly[i - 1].X + poly[i].X) * ((double)poly[i].Y - poly[i - 1].Y); + return a / 2; + } +} +//------------------------------------------------------------------------------ + +double Area(const OutRec &outRec, bool UseFullInt64Range) +{ + OutPt *op = outRec.pts; + if (!op) return 0; + if (UseFullInt64Range) { + Int128 a(0); + do { + a += Int128Mul(op->pt.X + op->prev->pt.X, op->prev->pt.Y - op->pt.Y); + op = op->next; + } while (op != outRec.pts); + return a.AsDouble() / 2; + } + else + { + double a = 0; + do { + a = a + (op->pt.X + op->prev->pt.X) * (op->prev->pt.Y - op->pt.Y); + op = op->next; + } while (op != outRec.pts); + return a / 2; + } +} +//------------------------------------------------------------------------------ + +bool PointIsVertex(const IntPoint &pt, OutPt *pp) +{ + OutPt *pp2 = pp; + do + { + if (PointsEqual(pp2->pt, pt)) return true; + pp2 = pp2->next; + } + while (pp2 != pp); + return false; +} +//------------------------------------------------------------------------------ + +bool PointInPolygon(const IntPoint &pt, OutPt *pp, bool UseFullInt64Range) +{ + OutPt *pp2 = pp; + bool result = false; + if (UseFullInt64Range) { + do + { + if ((((pp2->pt.Y <= pt.Y) && (pt.Y < pp2->prev->pt.Y)) || + ((pp2->prev->pt.Y <= pt.Y) && (pt.Y < pp2->pt.Y))) && + Int128(pt.X - pp2->pt.X) < + Int128Mul(pp2->prev->pt.X - pp2->pt.X, pt.Y - pp2->pt.Y) / + Int128(pp2->prev->pt.Y - pp2->pt.Y)) + result = !result; + pp2 = pp2->next; + } + while (pp2 != pp); + } + else + { + do + { + if ((((pp2->pt.Y <= pt.Y) && (pt.Y < pp2->prev->pt.Y)) || + ((pp2->prev->pt.Y <= pt.Y) && (pt.Y < pp2->pt.Y))) && + (pt.X < (pp2->prev->pt.X - pp2->pt.X) * (pt.Y - pp2->pt.Y) / + (pp2->prev->pt.Y - pp2->pt.Y) + pp2->pt.X )) result = !result; + pp2 = pp2->next; + } + while (pp2 != pp); + } + return result; +} +//------------------------------------------------------------------------------ + +bool SlopesEqual(TEdge &e1, TEdge &e2, bool UseFullInt64Range) +{ + if (UseFullInt64Range) + return Int128Mul(e1.deltaY, e2.deltaX) == Int128Mul(e1.deltaX, e2.deltaY); + else return e1.deltaY * e2.deltaX == e1.deltaX * e2.deltaY; +} +//------------------------------------------------------------------------------ + +bool SlopesEqual(const IntPoint pt1, const IntPoint pt2, + const IntPoint pt3, bool UseFullInt64Range) +{ + if (UseFullInt64Range) + return Int128Mul(pt1.Y-pt2.Y, pt2.X-pt3.X) == Int128Mul(pt1.X-pt2.X, pt2.Y-pt3.Y); + else return (pt1.Y-pt2.Y)*(pt2.X-pt3.X) == (pt1.X-pt2.X)*(pt2.Y-pt3.Y); +} +//------------------------------------------------------------------------------ + +bool SlopesEqual(const IntPoint pt1, const IntPoint pt2, + const IntPoint pt3, const IntPoint pt4, bool UseFullInt64Range) +{ + if (UseFullInt64Range) + return Int128Mul(pt1.Y-pt2.Y, pt3.X-pt4.X) == Int128Mul(pt1.X-pt2.X, pt3.Y-pt4.Y); + else return (pt1.Y-pt2.Y)*(pt3.X-pt4.X) == (pt1.X-pt2.X)*(pt3.Y-pt4.Y); +} +//------------------------------------------------------------------------------ + +double GetDx(const IntPoint pt1, const IntPoint pt2) +{ + return (pt1.Y == pt2.Y) ? + HORIZONTAL : (double)(pt2.X - pt1.X) / (pt2.Y - pt1.Y); +} +//--------------------------------------------------------------------------- + +void SetDx(TEdge &e) +{ + e.deltaX = (e.xtop - e.xbot); + e.deltaY = (e.ytop - e.ybot); + + if (e.deltaY == 0) e.dx = HORIZONTAL; + else e.dx = (double)(e.deltaX) / e.deltaY; +} +//--------------------------------------------------------------------------- + +void SwapSides(TEdge &edge1, TEdge &edge2) +{ + EdgeSide side = edge1.side; + edge1.side = edge2.side; + edge2.side = side; +} +//------------------------------------------------------------------------------ + +void SwapPolyIndexes(TEdge &edge1, TEdge &edge2) +{ + int outIdx = edge1.outIdx; + edge1.outIdx = edge2.outIdx; + edge2.outIdx = outIdx; +} +//------------------------------------------------------------------------------ + +inline long64 Round(double val) +{ + return (val < 0) ? static_cast(val - 0.5) : static_cast(val + 0.5); +} +//------------------------------------------------------------------------------ + +long64 TopX(TEdge &edge, const long64 currentY) +{ + return ( currentY == edge.ytop ) ? + edge.xtop : edge.xbot + Round(edge.dx *(currentY - edge.ybot)); +} +//------------------------------------------------------------------------------ + +bool IntersectPoint(TEdge &edge1, TEdge &edge2, + IntPoint &ip, bool UseFullInt64Range) +{ + double b1, b2; + if (SlopesEqual(edge1, edge2, UseFullInt64Range)) return false; + else if (NEAR_ZERO(edge1.dx)) + { + ip.X = edge1.xbot; + if (NEAR_EQUAL(edge2.dx, HORIZONTAL)) + { + ip.Y = edge2.ybot; + } else + { + b2 = edge2.ybot - (edge2.xbot / edge2.dx); + ip.Y = Round(ip.X / edge2.dx + b2); + } + } + else if (NEAR_ZERO(edge2.dx)) + { + ip.X = edge2.xbot; + if (NEAR_EQUAL(edge1.dx, HORIZONTAL)) + { + ip.Y = edge1.ybot; + } else + { + b1 = edge1.ybot - (edge1.xbot / edge1.dx); + ip.Y = Round(ip.X / edge1.dx + b1); + } + } else + { + b1 = edge1.xbot - edge1.ybot * edge1.dx; + b2 = edge2.xbot - edge2.ybot * edge2.dx; + double q = (b2-b1) / (edge1.dx - edge2.dx); + ip.Y = Round(q); + if (std::fabs(edge1.dx) < std::fabs(edge2.dx)) + ip.X = Round(edge1.dx * q + b1); + else + ip.X = Round(edge2.dx * q + b2); + } + + if (ip.Y < edge1.ytop || ip.Y < edge2.ytop) + { + if (edge1.ytop > edge2.ytop) + { + ip.X = edge1.xtop; + ip.Y = edge1.ytop; + return TopX(edge2, edge1.ytop) < edge1.xtop; + } else + { + ip.X = edge2.xtop; + ip.Y = edge2.ytop; + return TopX(edge1, edge2.ytop) > edge2.xtop; + } + } + else + return true; +} +//------------------------------------------------------------------------------ + +void ReversePolyPtLinks(OutPt *pp) +{ + if (!pp) return; + OutPt *pp1, *pp2; + pp1 = pp; + do { + pp2 = pp1->next; + pp1->next = pp1->prev; + pp1->prev = pp2; + pp1 = pp2; + } while( pp1 != pp ); +} +//------------------------------------------------------------------------------ + +void DisposeOutPts(OutPt*& pp) +{ + if (pp == 0) return; + pp->prev->next = 0; + while( pp ) + { + OutPt *tmpPp = pp; + pp = pp->next; + delete tmpPp ; + } +} +//------------------------------------------------------------------------------ + +void InitEdge(TEdge *e, TEdge *eNext, + TEdge *ePrev, const IntPoint &pt, PolyType polyType) +{ + std::memset( e, 0, sizeof( TEdge )); + + e->next = eNext; + e->prev = ePrev; + e->xcurr = pt.X; + e->ycurr = pt.Y; + if (e->ycurr >= e->next->ycurr) + { + e->xbot = e->xcurr; + e->ybot = e->ycurr; + e->xtop = e->next->xcurr; + e->ytop = e->next->ycurr; + e->windDelta = 1; + } else + { + e->xtop = e->xcurr; + e->ytop = e->ycurr; + e->xbot = e->next->xcurr; + e->ybot = e->next->ycurr; + e->windDelta = -1; + } + SetDx(*e); + e->polyType = polyType; + e->outIdx = -1; +} +//------------------------------------------------------------------------------ + +inline void SwapX(TEdge &e) +{ + //swap horizontal edges' top and bottom x's so they follow the natural + //progression of the bounds - ie so their xbots will align with the + //adjoining lower edge. [Helpful in the ProcessHorizontal() method.] + e.xcurr = e.xtop; + e.xtop = e.xbot; + e.xbot = e.xcurr; +} +//------------------------------------------------------------------------------ + +void SwapPoints(IntPoint &pt1, IntPoint &pt2) +{ + IntPoint tmp = pt1; + pt1 = pt2; + pt2 = tmp; +} +//------------------------------------------------------------------------------ + +bool GetOverlapSegment(IntPoint pt1a, IntPoint pt1b, IntPoint pt2a, + IntPoint pt2b, IntPoint &pt1, IntPoint &pt2) +{ + //precondition: segments are colinear. + if (Abs(pt1a.X - pt1b.X) > Abs(pt1a.Y - pt1b.Y)) + { + if (pt1a.X > pt1b.X) SwapPoints(pt1a, pt1b); + if (pt2a.X > pt2b.X) SwapPoints(pt2a, pt2b); + if (pt1a.X > pt2a.X) pt1 = pt1a; else pt1 = pt2a; + if (pt1b.X < pt2b.X) pt2 = pt1b; else pt2 = pt2b; + return pt1.X < pt2.X; + } else + { + if (pt1a.Y < pt1b.Y) SwapPoints(pt1a, pt1b); + if (pt2a.Y < pt2b.Y) SwapPoints(pt2a, pt2b); + if (pt1a.Y < pt2a.Y) pt1 = pt1a; else pt1 = pt2a; + if (pt1b.Y > pt2b.Y) pt2 = pt1b; else pt2 = pt2b; + return pt1.Y > pt2.Y; + } +} +//------------------------------------------------------------------------------ + +bool FirstIsBottomPt(const OutPt* btmPt1, const OutPt* btmPt2) +{ + OutPt *p = btmPt1->prev; + while (PointsEqual(p->pt, btmPt1->pt) && (p != btmPt1)) p = p->prev; + double dx1p = std::fabs(GetDx(btmPt1->pt, p->pt)); + p = btmPt1->next; + while (PointsEqual(p->pt, btmPt1->pt) && (p != btmPt1)) p = p->next; + double dx1n = std::fabs(GetDx(btmPt1->pt, p->pt)); + + p = btmPt2->prev; + while (PointsEqual(p->pt, btmPt2->pt) && (p != btmPt2)) p = p->prev; + double dx2p = std::fabs(GetDx(btmPt2->pt, p->pt)); + p = btmPt2->next; + while (PointsEqual(p->pt, btmPt2->pt) && (p != btmPt2)) p = p->next; + double dx2n = std::fabs(GetDx(btmPt2->pt, p->pt)); + return (dx1p >= dx2p && dx1p >= dx2n) || (dx1n >= dx2p && dx1n >= dx2n); +} +//------------------------------------------------------------------------------ + +OutPt* GetBottomPt(OutPt *pp) +{ + OutPt* dups = 0; + OutPt* p = pp->next; + while (p != pp) + { + if (p->pt.Y > pp->pt.Y) + { + pp = p; + dups = 0; + } + else if (p->pt.Y == pp->pt.Y && p->pt.X <= pp->pt.X) + { + if (p->pt.X < pp->pt.X) + { + dups = 0; + pp = p; + } else + { + if (p->next != pp && p->prev != pp) dups = p; + } + } + p = p->next; + } + if (dups) + { + //there appears to be at least 2 vertices at bottomPt so ... + while (dups != p) + { + if (!FirstIsBottomPt(p, dups)) pp = dups; + dups = dups->next; + while (!PointsEqual(dups->pt, pp->pt)) dups = dups->next; + } + } + return pp; +} +//------------------------------------------------------------------------------ + +bool FindSegment(OutPt* &pp, IntPoint &pt1, IntPoint &pt2) +{ + //outPt1 & outPt2 => the overlap segment (if the function returns true) + if (!pp) return false; + OutPt* pp2 = pp; + IntPoint pt1a = pt1, pt2a = pt2; + do + { + if (SlopesEqual(pt1a, pt2a, pp->pt, pp->prev->pt, true) && + SlopesEqual(pt1a, pt2a, pp->pt, true) && + GetOverlapSegment(pt1a, pt2a, pp->pt, pp->prev->pt, pt1, pt2)) + return true; + pp = pp->next; + } + while (pp != pp2); + return false; +} +//------------------------------------------------------------------------------ + +bool Pt3IsBetweenPt1AndPt2(const IntPoint pt1, + const IntPoint pt2, const IntPoint pt3) +{ + if (PointsEqual(pt1, pt3) || PointsEqual(pt2, pt3)) return true; + else if (pt1.X != pt2.X) return (pt1.X < pt3.X) == (pt3.X < pt2.X); + else return (pt1.Y < pt3.Y) == (pt3.Y < pt2.Y); +} +//------------------------------------------------------------------------------ + +OutPt* InsertPolyPtBetween(OutPt* p1, OutPt* p2, const IntPoint pt) +{ + if (p1 == p2) throw "JoinError"; + OutPt* result = new OutPt; + result->pt = pt; + if (p2 == p1->next) + { + p1->next = result; + p2->prev = result; + result->next = p2; + result->prev = p1; + } else + { + p2->next = result; + p1->prev = result; + result->next = p1; + result->prev = p2; + } + return result; +} + +//------------------------------------------------------------------------------ +// ClipperBase class methods ... +//------------------------------------------------------------------------------ + +ClipperBase::ClipperBase() //constructor +{ + m_MinimaList = 0; + m_CurrentLM = 0; + m_UseFullRange = true; +} +//------------------------------------------------------------------------------ + +ClipperBase::~ClipperBase() //destructor +{ + Clear(); +} +//------------------------------------------------------------------------------ + +bool ClipperBase::AddPolygon( const Polygon &pg, PolyType polyType) +{ + int len = (int)pg.size(); + if (len < 3) return false; + + Polygon p(len); + p[0] = pg[0]; + int j = 0; + + long64 maxVal; + if (m_UseFullRange) maxVal = hiRange; else maxVal = loRange; + + for (int i = 0; i < len; ++i) + { + if (Abs(pg[i].X) > maxVal || Abs(pg[i].Y) > maxVal) + { + if (Abs(pg[i].X) > hiRange || Abs(pg[i].Y) > hiRange) + throw "Coordinate exceeds range bounds"; + maxVal = hiRange; + m_UseFullRange = true; + } + + if (i == 0 || PointsEqual(p[j], pg[i])) continue; + else if (j > 0 && SlopesEqual(p[j-1], p[j], pg[i], m_UseFullRange)) + { + if (PointsEqual(p[j-1], pg[i])) j--; + } else j++; + p[j] = pg[i]; + } + if (j < 2) return false; + + len = j+1; + while (len > 2) + { + //nb: test for point equality before testing slopes ... + if (PointsEqual(p[j], p[0])) j--; + else if (PointsEqual(p[0], p[1]) || + SlopesEqual(p[j], p[0], p[1], m_UseFullRange)) + p[0] = p[j--]; + else if (SlopesEqual(p[j-1], p[j], p[0], m_UseFullRange)) j--; + else if (SlopesEqual(p[0], p[1], p[2], m_UseFullRange)) + { + for (int i = 2; i <= j; ++i) p[i-1] = p[i]; + j--; + } + else break; + len--; + } + if (len < 3) return false; + + //create a new edge array ... + TEdge *edges = new TEdge [len]; + m_edges.push_back(edges); + + //convert vertices to a double-linked-list of edges and initialize ... + edges[0].xcurr = p[0].X; + edges[0].ycurr = p[0].Y; + InitEdge(&edges[len-1], &edges[0], &edges[len-2], p[len-1], polyType); + for (int i = len-2; i > 0; --i) + InitEdge(&edges[i], &edges[i+1], &edges[i-1], p[i], polyType); + InitEdge(&edges[0], &edges[1], &edges[len-1], p[0], polyType); + + //reset xcurr & ycurr and find 'eHighest' (given the Y axis coordinates + //increase downward so the 'highest' edge will have the smallest ytop) ... + TEdge *e = &edges[0]; + TEdge *eHighest = e; + do + { + e->xcurr = e->xbot; + e->ycurr = e->ybot; + if (e->ytop < eHighest->ytop) eHighest = e; + e = e->next; + } + while ( e != &edges[0]); + + //make sure eHighest is positioned so the following loop works safely ... + if (eHighest->windDelta > 0) eHighest = eHighest->next; + if (NEAR_EQUAL(eHighest->dx, HORIZONTAL)) eHighest = eHighest->next; + + //finally insert each local minima ... + e = eHighest; + do { + e = AddBoundsToLML(e); + } + while( e != eHighest ); + return true; +} +//------------------------------------------------------------------------------ + +void ClipperBase::InsertLocalMinima(LocalMinima *newLm) +{ + if( ! m_MinimaList ) + { + m_MinimaList = newLm; + } + else if( newLm->Y >= m_MinimaList->Y ) + { + newLm->next = m_MinimaList; + m_MinimaList = newLm; + } else + { + LocalMinima* tmpLm = m_MinimaList; + while( tmpLm->next && ( newLm->Y < tmpLm->next->Y ) ) + tmpLm = tmpLm->next; + newLm->next = tmpLm->next; + tmpLm->next = newLm; + } +} +//------------------------------------------------------------------------------ + +TEdge* ClipperBase::AddBoundsToLML(TEdge *e) +{ + //Starting at the top of one bound we progress to the bottom where there's + //a local minima. We then go to the top of the next bound. These two bounds + //form the left and right (or right and left) bounds of the local minima. + e->nextInLML = 0; + e = e->next; + for (;;) + { + if (NEAR_EQUAL(e->dx, HORIZONTAL)) + { + //nb: proceed through horizontals when approaching from their right, + // but break on horizontal minima if approaching from their left. + // This ensures 'local minima' are always on the left of horizontals. + if (e->next->ytop < e->ytop && e->next->xbot > e->prev->xbot) break; + if (e->xtop != e->prev->xbot) SwapX(*e); + e->nextInLML = e->prev; + } + else if (e->ycurr == e->prev->ycurr) break; + else e->nextInLML = e->prev; + e = e->next; + } + + //e and e.prev are now at a local minima ... + LocalMinima* newLm = new LocalMinima; + newLm->next = 0; + newLm->Y = e->prev->ybot; + + if ( NEAR_EQUAL(e->dx, HORIZONTAL) ) //horizontal edges never start a left bound + { + if (e->xbot != e->prev->xbot) SwapX(*e); + newLm->leftBound = e->prev; + newLm->rightBound = e; + } else if (e->dx < e->prev->dx) + { + newLm->leftBound = e->prev; + newLm->rightBound = e; + } else + { + newLm->leftBound = e; + newLm->rightBound = e->prev; + } + newLm->leftBound->side = esLeft; + newLm->rightBound->side = esRight; + InsertLocalMinima( newLm ); + + for (;;) + { + if ( e->next->ytop == e->ytop && !NEAR_EQUAL(e->next->dx, HORIZONTAL) ) break; + e->nextInLML = e->next; + e = e->next; + if ( NEAR_EQUAL(e->dx, HORIZONTAL) && e->xbot != e->prev->xtop) SwapX(*e); + } + return e->next; +} +//------------------------------------------------------------------------------ + +bool ClipperBase::AddPolygons(const Polygons &ppg, PolyType polyType) +{ + bool result = false; + for (Polygons::size_type i = 0; i < ppg.size(); ++i) + if (AddPolygon(ppg[i], polyType)) result = true; + return result; +} +//------------------------------------------------------------------------------ + +void ClipperBase::Clear() +{ + DisposeLocalMinimaList(); + for (EdgeList::size_type i = 0; i < m_edges.size(); ++i) delete [] m_edges[i]; + m_edges.clear(); + m_UseFullRange = false; +} +//------------------------------------------------------------------------------ + +void ClipperBase::Reset() +{ + m_CurrentLM = m_MinimaList; + if( !m_CurrentLM ) return; //ie nothing to process + + //reset all edges ... + LocalMinima* lm = m_MinimaList; + while( lm ) + { + TEdge* e = lm->leftBound; + while( e ) + { + e->xcurr = e->xbot; + e->ycurr = e->ybot; + e->side = esLeft; + e->outIdx = -1; + e = e->nextInLML; + } + e = lm->rightBound; + while( e ) + { + e->xcurr = e->xbot; + e->ycurr = e->ybot; + e->side = esRight; + e->outIdx = -1; + e = e->nextInLML; + } + lm = lm->next; + } +} +//------------------------------------------------------------------------------ + +void ClipperBase::DisposeLocalMinimaList() +{ + while( m_MinimaList ) + { + LocalMinima* tmpLm = m_MinimaList->next; + delete m_MinimaList; + m_MinimaList = tmpLm; + } + m_CurrentLM = 0; +} +//------------------------------------------------------------------------------ + +void ClipperBase::PopLocalMinima() +{ + if( ! m_CurrentLM ) return; + m_CurrentLM = m_CurrentLM->next; +} +//------------------------------------------------------------------------------ + +IntRect ClipperBase::GetBounds() +{ + IntRect result; + LocalMinima* lm = m_MinimaList; + if (!lm) + { + result.left = result.top = result.right = result.bottom = 0; + return result; + } + result.left = lm->leftBound->xbot; + result.top = lm->leftBound->ybot; + result.right = lm->leftBound->xbot; + result.bottom = lm->leftBound->ybot; + while (lm) + { + if (lm->leftBound->ybot > result.bottom) + result.bottom = lm->leftBound->ybot; + TEdge* e = lm->leftBound; + for (;;) { + TEdge* bottomE = e; + while (e->nextInLML) + { + if (e->xbot < result.left) result.left = e->xbot; + if (e->xbot > result.right) result.right = e->xbot; + e = e->nextInLML; + } + if (e->xbot < result.left) result.left = e->xbot; + if (e->xbot > result.right) result.right = e->xbot; + if (e->xtop < result.left) result.left = e->xtop; + if (e->xtop > result.right) result.right = e->xtop; + if (e->ytop < result.top) result.top = e->ytop; + + if (bottomE == lm->leftBound) e = lm->rightBound; + else break; + } + lm = lm->next; + } + return result; +} + + +//------------------------------------------------------------------------------ +// TClipper methods ... +//------------------------------------------------------------------------------ + +Clipper::Clipper() : ClipperBase() //constructor +{ + m_Scanbeam = 0; + m_ActiveEdges = 0; + m_SortedEdges = 0; + m_IntersectNodes = 0; + m_ExecuteLocked = false; + m_UseFullRange = false; + m_ReverseOutput = false; +} +//------------------------------------------------------------------------------ + +Clipper::~Clipper() //destructor +{ + Clear(); + DisposeScanbeamList(); +} +//------------------------------------------------------------------------------ + +void Clipper::Clear() +{ + if (m_edges.size() == 0) return; //avoids problems with ClipperBase destructor + DisposeAllPolyPts(); + ClipperBase::Clear(); +} +//------------------------------------------------------------------------------ + +void Clipper::DisposeScanbeamList() +{ + while ( m_Scanbeam ) { + Scanbeam* sb2 = m_Scanbeam->next; + delete m_Scanbeam; + m_Scanbeam = sb2; + } +} +//------------------------------------------------------------------------------ + +void Clipper::Reset() +{ + ClipperBase::Reset(); + m_Scanbeam = 0; + m_ActiveEdges = 0; + m_SortedEdges = 0; + DisposeAllPolyPts(); + LocalMinima* lm = m_MinimaList; + while (lm) + { + InsertScanbeam(lm->Y); + InsertScanbeam(lm->leftBound->ytop); + lm = lm->next; + } +} +//------------------------------------------------------------------------------ + +bool Clipper::Execute(ClipType clipType, Polygons &solution, + PolyFillType subjFillType, PolyFillType clipFillType) +{ + if( m_ExecuteLocked ) return false; + m_ExecuteLocked = true; + solution.resize(0); + m_SubjFillType = subjFillType; + m_ClipFillType = clipFillType; + m_ClipType = clipType; + m_UsingPolyTree = false; + bool succeeded = ExecuteInternal(); + if (succeeded) BuildResult(solution); + m_ExecuteLocked = false; + return succeeded; +} +//------------------------------------------------------------------------------ + +bool Clipper::Execute(ClipType clipType, PolyTree& polytree, + PolyFillType subjFillType, PolyFillType clipFillType) +{ + if( m_ExecuteLocked ) return false; + m_ExecuteLocked = true; + m_SubjFillType = subjFillType; + m_ClipFillType = clipFillType; + m_ClipType = clipType; + m_UsingPolyTree = true; + bool succeeded = ExecuteInternal(); + if (succeeded) BuildResult2(polytree); + m_ExecuteLocked = false; + return succeeded; +} +//------------------------------------------------------------------------------ + +void Clipper::FixHoleLinkage(OutRec &outRec) +{ + //skip OutRecs that (a) contain outermost polygons or + //(b) already have the correct owner/child linkage ... + if (!outRec.FirstLeft || + (outRec.isHole != outRec.FirstLeft->isHole && + outRec.FirstLeft->pts)) return; + + OutRec* orfl = outRec.FirstLeft; + while (orfl && ((orfl->isHole == outRec.isHole) || !orfl->pts)) + orfl = orfl->FirstLeft; + outRec.FirstLeft = orfl; +} +//------------------------------------------------------------------------------ + +bool Clipper::ExecuteInternal() +{ + bool succeeded; + try { + Reset(); + if (!m_CurrentLM ) return true; + long64 botY = PopScanbeam(); + do { + InsertLocalMinimaIntoAEL(botY); + ClearHorzJoins(); + ProcessHorizontals(); + long64 topY = PopScanbeam(); + succeeded = ProcessIntersections(botY, topY); + if (!succeeded) break; + ProcessEdgesAtTopOfScanbeam(topY); + botY = topY; + } while( m_Scanbeam ); + } + catch(...) { + succeeded = false; + } + + if (succeeded) + { + //tidy up output polygons and fix orientations where necessary ... + for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); ++i) + { + OutRec *outRec = m_PolyOuts[i]; + if (!outRec->pts) continue; + FixupOutPolygon(*outRec); + if (!outRec->pts) continue; + + if ((outRec->isHole ^ m_ReverseOutput) == (Area(*outRec, m_UseFullRange) > 0)) + ReversePolyPtLinks(outRec->pts); + } + + if (m_Joins.size() > 0) JoinCommonEdges(); + } + + ClearJoins(); + ClearHorzJoins(); + return succeeded; +} +//------------------------------------------------------------------------------ + +void Clipper::InsertScanbeam(const long64 Y) +{ + if( !m_Scanbeam ) + { + m_Scanbeam = new Scanbeam; + m_Scanbeam->next = 0; + m_Scanbeam->Y = Y; + } + else if( Y > m_Scanbeam->Y ) + { + Scanbeam* newSb = new Scanbeam; + newSb->Y = Y; + newSb->next = m_Scanbeam; + m_Scanbeam = newSb; + } else + { + Scanbeam* sb2 = m_Scanbeam; + while( sb2->next && ( Y <= sb2->next->Y ) ) sb2 = sb2->next; + if( Y == sb2->Y ) return; //ie ignores duplicates + Scanbeam* newSb = new Scanbeam; + newSb->Y = Y; + newSb->next = sb2->next; + sb2->next = newSb; + } +} +//------------------------------------------------------------------------------ + +long64 Clipper::PopScanbeam() +{ + long64 Y = m_Scanbeam->Y; + Scanbeam* sb2 = m_Scanbeam; + m_Scanbeam = m_Scanbeam->next; + delete sb2; + return Y; +} +//------------------------------------------------------------------------------ + +void Clipper::DisposeAllPolyPts(){ + for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); ++i) + DisposeOutRec(i); + m_PolyOuts.clear(); +} +//------------------------------------------------------------------------------ + +void Clipper::DisposeOutRec(PolyOutList::size_type index) +{ + OutRec *outRec = m_PolyOuts[index]; + if (outRec->pts) DisposeOutPts(outRec->pts); + delete outRec; + m_PolyOuts[index] = 0; +} +//------------------------------------------------------------------------------ + +void Clipper::SetWindingCount(TEdge &edge) +{ + TEdge *e = edge.prevInAEL; + //find the edge of the same polytype that immediately preceeds 'edge' in AEL + while ( e && e->polyType != edge.polyType ) e = e->prevInAEL; + if ( !e ) + { + edge.windCnt = edge.windDelta; + edge.windCnt2 = 0; + e = m_ActiveEdges; //ie get ready to calc windCnt2 + } else if ( IsEvenOddFillType(edge) ) + { + //EvenOdd filling ... + edge.windCnt = 1; + edge.windCnt2 = e->windCnt2; + e = e->nextInAEL; //ie get ready to calc windCnt2 + } else + { + //nonZero, Positive or Negative filling ... + if ( e->windCnt * e->windDelta < 0 ) + { + if (Abs(e->windCnt) > 1) + { + if (e->windDelta * edge.windDelta < 0) edge.windCnt = e->windCnt; + else edge.windCnt = e->windCnt + edge.windDelta; + } else + edge.windCnt = e->windCnt + e->windDelta + edge.windDelta; + } else + { + if ( Abs(e->windCnt) > 1 && e->windDelta * edge.windDelta < 0) + edge.windCnt = e->windCnt; + else if ( e->windCnt + edge.windDelta == 0 ) + edge.windCnt = e->windCnt; + else edge.windCnt = e->windCnt + edge.windDelta; + } + edge.windCnt2 = e->windCnt2; + e = e->nextInAEL; //ie get ready to calc windCnt2 + } + + //update windCnt2 ... + if ( IsEvenOddAltFillType(edge) ) + { + //EvenOdd filling ... + while ( e != &edge ) + { + edge.windCnt2 = (edge.windCnt2 == 0) ? 1 : 0; + e = e->nextInAEL; + } + } else + { + //nonZero, Positive or Negative filling ... + while ( e != &edge ) + { + edge.windCnt2 += e->windDelta; + e = e->nextInAEL; + } + } +} +//------------------------------------------------------------------------------ + +bool Clipper::IsEvenOddFillType(const TEdge& edge) const +{ + if (edge.polyType == ptSubject) + return m_SubjFillType == pftEvenOdd; else + return m_ClipFillType == pftEvenOdd; +} +//------------------------------------------------------------------------------ + +bool Clipper::IsEvenOddAltFillType(const TEdge& edge) const +{ + if (edge.polyType == ptSubject) + return m_ClipFillType == pftEvenOdd; else + return m_SubjFillType == pftEvenOdd; +} +//------------------------------------------------------------------------------ + +bool Clipper::IsContributing(const TEdge& edge) const +{ + PolyFillType pft, pft2; + if (edge.polyType == ptSubject) + { + pft = m_SubjFillType; + pft2 = m_ClipFillType; + } else + { + pft = m_ClipFillType; + pft2 = m_SubjFillType; + } + + switch(pft) + { + case pftEvenOdd: + case pftNonZero: + if (Abs(edge.windCnt) != 1) return false; + break; + case pftPositive: + if (edge.windCnt != 1) return false; + break; + default: //pftNegative + if (edge.windCnt != -1) return false; + } + + switch(m_ClipType) + { + case ctIntersection: + switch(pft2) + { + case pftEvenOdd: + case pftNonZero: + return (edge.windCnt2 != 0); + case pftPositive: + return (edge.windCnt2 > 0); + default: + return (edge.windCnt2 < 0); + } + case ctUnion: + switch(pft2) + { + case pftEvenOdd: + case pftNonZero: + return (edge.windCnt2 == 0); + case pftPositive: + return (edge.windCnt2 <= 0); + default: + return (edge.windCnt2 >= 0); + } + case ctDifference: + if (edge.polyType == ptSubject) + switch(pft2) + { + case pftEvenOdd: + case pftNonZero: + return (edge.windCnt2 == 0); + case pftPositive: + return (edge.windCnt2 <= 0); + default: + return (edge.windCnt2 >= 0); + } + else + switch(pft2) + { + case pftEvenOdd: + case pftNonZero: + return (edge.windCnt2 != 0); + case pftPositive: + return (edge.windCnt2 > 0); + default: + return (edge.windCnt2 < 0); + } + default: + return true; + } +} +//------------------------------------------------------------------------------ + +void Clipper::AddLocalMinPoly(TEdge *e1, TEdge *e2, const IntPoint &pt) +{ + TEdge *e, *prevE; + if( NEAR_EQUAL(e2->dx, HORIZONTAL) || ( e1->dx > e2->dx ) ) + { + AddOutPt( e1, pt ); + e2->outIdx = e1->outIdx; + e1->side = esLeft; + e2->side = esRight; + e = e1; + if (e->prevInAEL == e2) + prevE = e2->prevInAEL; + else + prevE = e->prevInAEL; + } else + { + AddOutPt( e2, pt ); + e1->outIdx = e2->outIdx; + e1->side = esRight; + e2->side = esLeft; + e = e2; + if (e->prevInAEL == e1) + prevE = e1->prevInAEL; + else + prevE = e->prevInAEL; + } + if (prevE && prevE->outIdx >= 0 && + (TopX(*prevE, pt.Y) == TopX(*e, pt.Y)) && + SlopesEqual(*e, *prevE, m_UseFullRange)) + AddJoin(e, prevE, -1, -1); +} +//------------------------------------------------------------------------------ + +void Clipper::AddLocalMaxPoly(TEdge *e1, TEdge *e2, const IntPoint &pt) +{ + AddOutPt( e1, pt ); + if( e1->outIdx == e2->outIdx ) + { + e1->outIdx = -1; + e2->outIdx = -1; + } + else if (e1->outIdx < e2->outIdx) + AppendPolygon(e1, e2); + else + AppendPolygon(e2, e1); +} +//------------------------------------------------------------------------------ + +void Clipper::AddEdgeToSEL(TEdge *edge) +{ + //SEL pointers in PEdge are reused to build a list of horizontal edges. + //However, we don't need to worry about order with horizontal edge processing. + if( !m_SortedEdges ) + { + m_SortedEdges = edge; + edge->prevInSEL = 0; + edge->nextInSEL = 0; + } + else + { + edge->nextInSEL = m_SortedEdges; + edge->prevInSEL = 0; + m_SortedEdges->prevInSEL = edge; + m_SortedEdges = edge; + } +} +//------------------------------------------------------------------------------ + +void Clipper::CopyAELToSEL() +{ + TEdge* e = m_ActiveEdges; + m_SortedEdges = e; + while ( e ) + { + e->prevInSEL = e->prevInAEL; + e->nextInSEL = e->nextInAEL; + e = e->nextInAEL; + } +} +//------------------------------------------------------------------------------ + +void Clipper::AddJoin(TEdge *e1, TEdge *e2, int e1OutIdx, int e2OutIdx) +{ + JoinRec* jr = new JoinRec; + if (e1OutIdx >= 0) + jr->poly1Idx = e1OutIdx; else + jr->poly1Idx = e1->outIdx; + jr->pt1a = IntPoint(e1->xcurr, e1->ycurr); + jr->pt1b = IntPoint(e1->xtop, e1->ytop); + if (e2OutIdx >= 0) + jr->poly2Idx = e2OutIdx; else + jr->poly2Idx = e2->outIdx; + jr->pt2a = IntPoint(e2->xcurr, e2->ycurr); + jr->pt2b = IntPoint(e2->xtop, e2->ytop); + m_Joins.push_back(jr); +} +//------------------------------------------------------------------------------ + +void Clipper::ClearJoins() +{ + for (JoinList::size_type i = 0; i < m_Joins.size(); i++) + delete m_Joins[i]; + m_Joins.resize(0); +} +//------------------------------------------------------------------------------ + +void Clipper::AddHorzJoin(TEdge *e, int idx) +{ + HorzJoinRec* hj = new HorzJoinRec; + hj->edge = e; + hj->savedIdx = idx; + m_HorizJoins.push_back(hj); +} +//------------------------------------------------------------------------------ + +void Clipper::ClearHorzJoins() +{ + for (HorzJoinList::size_type i = 0; i < m_HorizJoins.size(); i++) + delete m_HorizJoins[i]; + m_HorizJoins.resize(0); +} +//------------------------------------------------------------------------------ + +void Clipper::InsertLocalMinimaIntoAEL(const long64 botY) +{ + while( m_CurrentLM && ( m_CurrentLM->Y == botY ) ) + { + TEdge* lb = m_CurrentLM->leftBound; + TEdge* rb = m_CurrentLM->rightBound; + + InsertEdgeIntoAEL( lb ); + InsertScanbeam( lb->ytop ); + InsertEdgeIntoAEL( rb ); + + if (IsEvenOddFillType(*lb)) + { + lb->windDelta = 1; + rb->windDelta = 1; + } + else + { + rb->windDelta = -lb->windDelta; + } + SetWindingCount( *lb ); + rb->windCnt = lb->windCnt; + rb->windCnt2 = lb->windCnt2; + + if( NEAR_EQUAL(rb->dx, HORIZONTAL) ) + { + //nb: only rightbounds can have a horizontal bottom edge + AddEdgeToSEL( rb ); + InsertScanbeam( rb->nextInLML->ytop ); + } + else + InsertScanbeam( rb->ytop ); + + if( IsContributing(*lb) ) + AddLocalMinPoly( lb, rb, IntPoint(lb->xcurr, m_CurrentLM->Y) ); + + //if any output polygons share an edge, they'll need joining later ... + if (rb->outIdx >= 0 && NEAR_EQUAL(rb->dx, HORIZONTAL)) + { + for (HorzJoinList::size_type i = 0; i < m_HorizJoins.size(); ++i) + { + IntPoint pt, pt2; //returned by GetOverlapSegment() but unused here. + HorzJoinRec* hj = m_HorizJoins[i]; + //if horizontals rb and hj.edge overlap, flag for joining later ... + if (GetOverlapSegment(IntPoint(hj->edge->xbot, hj->edge->ybot), + IntPoint(hj->edge->xtop, hj->edge->ytop), + IntPoint(rb->xbot, rb->ybot), + IntPoint(rb->xtop, rb->ytop), pt, pt2)) + AddJoin(hj->edge, rb, hj->savedIdx); + } + } + + if( lb->nextInAEL != rb ) + { + if (rb->outIdx >= 0 && rb->prevInAEL->outIdx >= 0 && + SlopesEqual(*rb->prevInAEL, *rb, m_UseFullRange)) + AddJoin(rb, rb->prevInAEL); + + TEdge* e = lb->nextInAEL; + IntPoint pt = IntPoint(lb->xcurr, lb->ycurr); + while( e != rb ) + { + if(!e) throw clipperException("InsertLocalMinimaIntoAEL: missing rightbound!"); + //nb: For calculating winding counts etc, IntersectEdges() assumes + //that param1 will be to the right of param2 ABOVE the intersection ... + IntersectEdges( rb , e , pt , ipNone); //order important here + e = e->nextInAEL; + } + } + PopLocalMinima(); + } +} +//------------------------------------------------------------------------------ + +void Clipper::DeleteFromAEL(TEdge *e) +{ + TEdge* AelPrev = e->prevInAEL; + TEdge* AelNext = e->nextInAEL; + if( !AelPrev && !AelNext && (e != m_ActiveEdges) ) return; //already deleted + if( AelPrev ) AelPrev->nextInAEL = AelNext; + else m_ActiveEdges = AelNext; + if( AelNext ) AelNext->prevInAEL = AelPrev; + e->nextInAEL = 0; + e->prevInAEL = 0; +} +//------------------------------------------------------------------------------ + +void Clipper::DeleteFromSEL(TEdge *e) +{ + TEdge* SelPrev = e->prevInSEL; + TEdge* SelNext = e->nextInSEL; + if( !SelPrev && !SelNext && (e != m_SortedEdges) ) return; //already deleted + if( SelPrev ) SelPrev->nextInSEL = SelNext; + else m_SortedEdges = SelNext; + if( SelNext ) SelNext->prevInSEL = SelPrev; + e->nextInSEL = 0; + e->prevInSEL = 0; +} +//------------------------------------------------------------------------------ + +void Clipper::IntersectEdges(TEdge *e1, TEdge *e2, + const IntPoint &pt, const IntersectProtects protects) +{ + //e1 will be to the left of e2 BELOW the intersection. Therefore e1 is before + //e2 in AEL except when e1 is being inserted at the intersection point ... + bool e1stops = !(ipLeft & protects) && !e1->nextInLML && + e1->xtop == pt.X && e1->ytop == pt.Y; + bool e2stops = !(ipRight & protects) && !e2->nextInLML && + e2->xtop == pt.X && e2->ytop == pt.Y; + bool e1Contributing = ( e1->outIdx >= 0 ); + bool e2contributing = ( e2->outIdx >= 0 ); + + //update winding counts... + //assumes that e1 will be to the right of e2 ABOVE the intersection + if ( e1->polyType == e2->polyType ) + { + if ( IsEvenOddFillType( *e1) ) + { + int oldE1WindCnt = e1->windCnt; + e1->windCnt = e2->windCnt; + e2->windCnt = oldE1WindCnt; + } else + { + if (e1->windCnt + e2->windDelta == 0 ) e1->windCnt = -e1->windCnt; + else e1->windCnt += e2->windDelta; + if ( e2->windCnt - e1->windDelta == 0 ) e2->windCnt = -e2->windCnt; + else e2->windCnt -= e1->windDelta; + } + } else + { + if (!IsEvenOddFillType(*e2)) e1->windCnt2 += e2->windDelta; + else e1->windCnt2 = ( e1->windCnt2 == 0 ) ? 1 : 0; + if (!IsEvenOddFillType(*e1)) e2->windCnt2 -= e1->windDelta; + else e2->windCnt2 = ( e2->windCnt2 == 0 ) ? 1 : 0; + } + + PolyFillType e1FillType, e2FillType, e1FillType2, e2FillType2; + if (e1->polyType == ptSubject) + { + e1FillType = m_SubjFillType; + e1FillType2 = m_ClipFillType; + } else + { + e1FillType = m_ClipFillType; + e1FillType2 = m_SubjFillType; + } + if (e2->polyType == ptSubject) + { + e2FillType = m_SubjFillType; + e2FillType2 = m_ClipFillType; + } else + { + e2FillType = m_ClipFillType; + e2FillType2 = m_SubjFillType; + } + + long64 e1Wc, e2Wc; + switch (e1FillType) + { + case pftPositive: e1Wc = e1->windCnt; break; + case pftNegative: e1Wc = -e1->windCnt; break; + default: e1Wc = Abs(e1->windCnt); + } + switch(e2FillType) + { + case pftPositive: e2Wc = e2->windCnt; break; + case pftNegative: e2Wc = -e2->windCnt; break; + default: e2Wc = Abs(e2->windCnt); + } + + if ( e1Contributing && e2contributing ) + { + if ( e1stops || e2stops || + (e1Wc != 0 && e1Wc != 1) || (e2Wc != 0 && e2Wc != 1) || + (e1->polyType != e2->polyType && m_ClipType != ctXor) ) + AddLocalMaxPoly(e1, e2, pt); + else + DoBothEdges( e1, e2, pt ); + } + else if ( e1Contributing ) + { + if ((e2Wc == 0 || e2Wc == 1) && + (m_ClipType != ctIntersection || + e2->polyType == ptSubject || (e2->windCnt2 != 0))) + DoEdge1(e1, e2, pt); + } + else if ( e2contributing ) + { + if ((e1Wc == 0 || e1Wc == 1) && + (m_ClipType != ctIntersection || + e1->polyType == ptSubject || (e1->windCnt2 != 0))) + DoEdge2(e1, e2, pt); + } + else if ( (e1Wc == 0 || e1Wc == 1) && + (e2Wc == 0 || e2Wc == 1) && !e1stops && !e2stops ) + { + //neither edge is currently contributing ... + + long64 e1Wc2, e2Wc2; + switch (e1FillType2) + { + case pftPositive: e1Wc2 = e1->windCnt2; break; + case pftNegative : e1Wc2 = -e1->windCnt2; break; + default: e1Wc2 = Abs(e1->windCnt2); + } + switch (e2FillType2) + { + case pftPositive: e2Wc2 = e2->windCnt2; break; + case pftNegative: e2Wc2 = -e2->windCnt2; break; + default: e2Wc2 = Abs(e2->windCnt2); + } + + if (e1->polyType != e2->polyType) + AddLocalMinPoly(e1, e2, pt); + else if (e1Wc == 1 && e2Wc == 1) + switch( m_ClipType ) { + case ctIntersection: + if (e1Wc2 > 0 && e2Wc2 > 0) + AddLocalMinPoly(e1, e2, pt); + break; + case ctUnion: + if ( e1Wc2 <= 0 && e2Wc2 <= 0 ) + AddLocalMinPoly(e1, e2, pt); + break; + case ctDifference: + if (((e1->polyType == ptClip) && (e1Wc2 > 0) && (e2Wc2 > 0)) || + ((e1->polyType == ptSubject) && (e1Wc2 <= 0) && (e2Wc2 <= 0))) + AddLocalMinPoly(e1, e2, pt); + break; + case ctXor: + AddLocalMinPoly(e1, e2, pt); + } + else + SwapSides( *e1, *e2 ); + } + + if( (e1stops != e2stops) && + ( (e1stops && (e1->outIdx >= 0)) || (e2stops && (e2->outIdx >= 0)) ) ) + { + SwapSides( *e1, *e2 ); + SwapPolyIndexes( *e1, *e2 ); + } + + //finally, delete any non-contributing maxima edges ... + if( e1stops ) DeleteFromAEL( e1 ); + if( e2stops ) DeleteFromAEL( e2 ); +} +//------------------------------------------------------------------------------ + +void Clipper::SetHoleState(TEdge *e, OutRec *outRec) +{ + bool isHole = false; + TEdge *e2 = e->prevInAEL; + while (e2) + { + if (e2->outIdx >= 0) + { + isHole = !isHole; + if (! outRec->FirstLeft) + outRec->FirstLeft = m_PolyOuts[e2->outIdx]; + } + e2 = e2->prevInAEL; + } + if (isHole) outRec->isHole = true; +} +//------------------------------------------------------------------------------ + +OutRec* GetLowermostRec(OutRec *outRec1, OutRec *outRec2) +{ + //work out which polygon fragment has the correct hole state ... + OutPt *outPt1 = outRec1->bottomPt; + OutPt *outPt2 = outRec2->bottomPt; + if (outPt1->pt.Y > outPt2->pt.Y) return outRec1; + else if (outPt1->pt.Y < outPt2->pt.Y) return outRec2; + else if (outPt1->pt.X < outPt2->pt.X) return outRec1; + else if (outPt1->pt.X > outPt2->pt.X) return outRec2; + else if (outPt1->next == outPt1) return outRec2; + else if (outPt2->next == outPt2) return outRec1; + else if (FirstIsBottomPt(outPt1, outPt2)) return outRec1; + else return outRec2; +} +//------------------------------------------------------------------------------ + +bool Param1RightOfParam2(OutRec* outRec1, OutRec* outRec2) +{ + do + { + outRec1 = outRec1->FirstLeft; + if (outRec1 == outRec2) return true; + } while (outRec1); + return false; +} +//------------------------------------------------------------------------------ + +void Clipper::AppendPolygon(TEdge *e1, TEdge *e2) +{ + //get the start and ends of both output polygons ... + OutRec *outRec1 = m_PolyOuts[e1->outIdx]; + OutRec *outRec2 = m_PolyOuts[e2->outIdx]; + + OutRec *holeStateRec; + if (Param1RightOfParam2(outRec1, outRec2)) + holeStateRec = outRec2; + else if (Param1RightOfParam2(outRec2, outRec1)) + holeStateRec = outRec1; + else + holeStateRec = GetLowermostRec(outRec1, outRec2); + + OutPt* p1_lft = outRec1->pts; + OutPt* p1_rt = p1_lft->prev; + OutPt* p2_lft = outRec2->pts; + OutPt* p2_rt = p2_lft->prev; + + EdgeSide side; + //join e2 poly onto e1 poly and delete pointers to e2 ... + if( e1->side == esLeft ) + { + if( e2->side == esLeft ) + { + //z y x a b c + ReversePolyPtLinks(p2_lft); + p2_lft->next = p1_lft; + p1_lft->prev = p2_lft; + p1_rt->next = p2_rt; + p2_rt->prev = p1_rt; + outRec1->pts = p2_rt; + } else + { + //x y z a b c + p2_rt->next = p1_lft; + p1_lft->prev = p2_rt; + p2_lft->prev = p1_rt; + p1_rt->next = p2_lft; + outRec1->pts = p2_lft; + } + side = esLeft; + } else + { + if( e2->side == esRight ) + { + //a b c z y x + ReversePolyPtLinks(p2_lft); + p1_rt->next = p2_rt; + p2_rt->prev = p1_rt; + p2_lft->next = p1_lft; + p1_lft->prev = p2_lft; + } else + { + //a b c x y z + p1_rt->next = p2_lft; + p2_lft->prev = p1_rt; + p1_lft->prev = p2_rt; + p2_rt->next = p1_lft; + } + side = esRight; + } + + if (holeStateRec == outRec2) + { + outRec1->bottomPt = outRec2->bottomPt; + outRec1->bottomPt->idx = outRec1->idx; + if (outRec2->FirstLeft != outRec1) + outRec1->FirstLeft = outRec2->FirstLeft; + outRec1->isHole = outRec2->isHole; + } + outRec2->pts = 0; + outRec2->bottomPt = 0; + + outRec2->FirstLeft = outRec1; + + int OKIdx = e1->outIdx; + int ObsoleteIdx = e2->outIdx; + + e1->outIdx = -1; //nb: safe because we only get here via AddLocalMaxPoly + e2->outIdx = -1; + + TEdge* e = m_ActiveEdges; + while( e ) + { + if( e->outIdx == ObsoleteIdx ) + { + e->outIdx = OKIdx; + e->side = side; + break; + } + e = e->nextInAEL; + } + + for (JoinList::size_type i = 0; i < m_Joins.size(); ++i) + { + if (m_Joins[i]->poly1Idx == ObsoleteIdx) m_Joins[i]->poly1Idx = OKIdx; + if (m_Joins[i]->poly2Idx == ObsoleteIdx) m_Joins[i]->poly2Idx = OKIdx; + } + + for (HorzJoinList::size_type i = 0; i < m_HorizJoins.size(); ++i) + { + if (m_HorizJoins[i]->savedIdx == ObsoleteIdx) + m_HorizJoins[i]->savedIdx = OKIdx; + } + +} +//------------------------------------------------------------------------------ + +OutRec* Clipper::CreateOutRec() +{ + OutRec* result = new OutRec; + result->isHole = false; + result->FirstLeft = 0; + result->pts = 0; + result->bottomPt = 0; + result->polyNode = 0; + return result; +} +//------------------------------------------------------------------------------ + +void Clipper::AddOutPt(TEdge *e, const IntPoint &pt) +{ + bool ToFront = (e->side == esLeft); + if( e->outIdx < 0 ) + { + OutRec *outRec = CreateOutRec(); + m_PolyOuts.push_back(outRec); + outRec->idx = (int)m_PolyOuts.size()-1; + e->outIdx = outRec->idx; + OutPt* op = new OutPt; + outRec->pts = op; + outRec->bottomPt = op; + op->pt = pt; + op->idx = outRec->idx; + op->next = op; + op->prev = op; + SetHoleState(e, outRec); + } else + { + OutRec *outRec = m_PolyOuts[e->outIdx]; + OutPt* op = outRec->pts; + if ((ToFront && PointsEqual(pt, op->pt)) || + (!ToFront && PointsEqual(pt, op->prev->pt))) return; + + OutPt* op2 = new OutPt; + op2->pt = pt; + op2->idx = outRec->idx; + if (op2->pt.Y == outRec->bottomPt->pt.Y && + op2->pt.X < outRec->bottomPt->pt.X) + outRec->bottomPt = op2; + op2->next = op; + op2->prev = op->prev; + op2->prev->next = op2; + op->prev = op2; + if (ToFront) outRec->pts = op2; + } +} +//------------------------------------------------------------------------------ + +void Clipper::ProcessHorizontals() +{ + TEdge* horzEdge = m_SortedEdges; + while( horzEdge ) + { + DeleteFromSEL( horzEdge ); + ProcessHorizontal( horzEdge ); + horzEdge = m_SortedEdges; + } +} +//------------------------------------------------------------------------------ + +bool Clipper::IsTopHorz(const long64 XPos) +{ + TEdge* e = m_SortedEdges; + while( e ) + { + if( ( XPos >= std::min(e->xcurr, e->xtop) ) && + ( XPos <= std::max(e->xcurr, e->xtop) ) ) return false; + e = e->nextInSEL; + } + return true; +} +//------------------------------------------------------------------------------ + +bool IsMinima(TEdge *e) +{ + return e && (e->prev->nextInLML != e) && (e->next->nextInLML != e); +} +//------------------------------------------------------------------------------ + +bool IsMaxima(TEdge *e, const long64 Y) +{ + return e && e->ytop == Y && !e->nextInLML; +} +//------------------------------------------------------------------------------ + +bool IsIntermediate(TEdge *e, const long64 Y) +{ + return e->ytop == Y && e->nextInLML; +} +//------------------------------------------------------------------------------ + +TEdge *GetMaximaPair(TEdge *e) +{ + if( !IsMaxima(e->next, e->ytop) || e->next->xtop != e->xtop ) + return e->prev; else + return e->next; +} +//------------------------------------------------------------------------------ + +void Clipper::SwapPositionsInAEL(TEdge *edge1, TEdge *edge2) +{ + if( edge1->nextInAEL == edge2 ) + { + TEdge* next = edge2->nextInAEL; + if( next ) next->prevInAEL = edge1; + TEdge* prev = edge1->prevInAEL; + if( prev ) prev->nextInAEL = edge2; + edge2->prevInAEL = prev; + edge2->nextInAEL = edge1; + edge1->prevInAEL = edge2; + edge1->nextInAEL = next; + } + else if( edge2->nextInAEL == edge1 ) + { + TEdge* next = edge1->nextInAEL; + if( next ) next->prevInAEL = edge2; + TEdge* prev = edge2->prevInAEL; + if( prev ) prev->nextInAEL = edge1; + edge1->prevInAEL = prev; + edge1->nextInAEL = edge2; + edge2->prevInAEL = edge1; + edge2->nextInAEL = next; + } + else + { + TEdge* next = edge1->nextInAEL; + TEdge* prev = edge1->prevInAEL; + edge1->nextInAEL = edge2->nextInAEL; + if( edge1->nextInAEL ) edge1->nextInAEL->prevInAEL = edge1; + edge1->prevInAEL = edge2->prevInAEL; + if( edge1->prevInAEL ) edge1->prevInAEL->nextInAEL = edge1; + edge2->nextInAEL = next; + if( edge2->nextInAEL ) edge2->nextInAEL->prevInAEL = edge2; + edge2->prevInAEL = prev; + if( edge2->prevInAEL ) edge2->prevInAEL->nextInAEL = edge2; + } + + if( !edge1->prevInAEL ) m_ActiveEdges = edge1; + else if( !edge2->prevInAEL ) m_ActiveEdges = edge2; +} +//------------------------------------------------------------------------------ + +void Clipper::SwapPositionsInSEL(TEdge *edge1, TEdge *edge2) +{ + if( !( edge1->nextInSEL ) && !( edge1->prevInSEL ) ) return; + if( !( edge2->nextInSEL ) && !( edge2->prevInSEL ) ) return; + + if( edge1->nextInSEL == edge2 ) + { + TEdge* next = edge2->nextInSEL; + if( next ) next->prevInSEL = edge1; + TEdge* prev = edge1->prevInSEL; + if( prev ) prev->nextInSEL = edge2; + edge2->prevInSEL = prev; + edge2->nextInSEL = edge1; + edge1->prevInSEL = edge2; + edge1->nextInSEL = next; + } + else if( edge2->nextInSEL == edge1 ) + { + TEdge* next = edge1->nextInSEL; + if( next ) next->prevInSEL = edge2; + TEdge* prev = edge2->prevInSEL; + if( prev ) prev->nextInSEL = edge1; + edge1->prevInSEL = prev; + edge1->nextInSEL = edge2; + edge2->prevInSEL = edge1; + edge2->nextInSEL = next; + } + else + { + TEdge* next = edge1->nextInSEL; + TEdge* prev = edge1->prevInSEL; + edge1->nextInSEL = edge2->nextInSEL; + if( edge1->nextInSEL ) edge1->nextInSEL->prevInSEL = edge1; + edge1->prevInSEL = edge2->prevInSEL; + if( edge1->prevInSEL ) edge1->prevInSEL->nextInSEL = edge1; + edge2->nextInSEL = next; + if( edge2->nextInSEL ) edge2->nextInSEL->prevInSEL = edge2; + edge2->prevInSEL = prev; + if( edge2->prevInSEL ) edge2->prevInSEL->nextInSEL = edge2; + } + + if( !edge1->prevInSEL ) m_SortedEdges = edge1; + else if( !edge2->prevInSEL ) m_SortedEdges = edge2; +} +//------------------------------------------------------------------------------ + +TEdge* GetNextInAEL(TEdge *e, Direction dir) +{ + return dir == dLeftToRight ? e->nextInAEL : e->prevInAEL; +} +//------------------------------------------------------------------------------ + +void Clipper::ProcessHorizontal(TEdge *horzEdge) +{ + Direction dir; + long64 horzLeft, horzRight; + + if( horzEdge->xcurr < horzEdge->xtop ) + { + horzLeft = horzEdge->xcurr; + horzRight = horzEdge->xtop; + dir = dLeftToRight; + } else + { + horzLeft = horzEdge->xtop; + horzRight = horzEdge->xcurr; + dir = dRightToLeft; + } + + TEdge* eMaxPair; + if( horzEdge->nextInLML ) eMaxPair = 0; + else eMaxPair = GetMaximaPair(horzEdge); + + TEdge* e = GetNextInAEL( horzEdge , dir ); + while( e ) + { + TEdge* eNext = GetNextInAEL( e, dir ); + + if (eMaxPair || + ((dir == dLeftToRight) && (e->xcurr <= horzRight)) || + ((dir == dRightToLeft) && (e->xcurr >= horzLeft))) + { + //ok, so far it looks like we're still in range of the horizontal edge + if ( e->xcurr == horzEdge->xtop && !eMaxPair ) + { + if (SlopesEqual(*e, *horzEdge->nextInLML, m_UseFullRange)) + { + //if output polygons share an edge, they'll need joining later ... + if (horzEdge->outIdx >= 0 && e->outIdx >= 0) + AddJoin(horzEdge->nextInLML, e, horzEdge->outIdx); + break; //we've reached the end of the horizontal line + } + else if (e->dx < horzEdge->nextInLML->dx) + //we really have got to the end of the intermediate horz edge so quit. + //nb: More -ve slopes follow more +ve slopes ABOVE the horizontal. + break; + } + + if( e == eMaxPair ) + { + //horzEdge is evidently a maxima horizontal and we've arrived at its end. + if (dir == dLeftToRight) + IntersectEdges(horzEdge, e, IntPoint(e->xcurr, horzEdge->ycurr), ipNone); + else + IntersectEdges(e, horzEdge, IntPoint(e->xcurr, horzEdge->ycurr), ipNone); + if (eMaxPair->outIdx >= 0) throw clipperException("ProcessHorizontal error"); + return; + } + else if( NEAR_EQUAL(e->dx, HORIZONTAL) && !IsMinima(e) && !(e->xcurr > e->xtop) ) + { + //An overlapping horizontal edge. Overlapping horizontal edges are + //processed as if layered with the current horizontal edge (horizEdge) + //being infinitesimally lower that the next (e). Therfore, we + //intersect with e only if e.xcurr is within the bounds of horzEdge ... + if( dir == dLeftToRight ) + IntersectEdges( horzEdge , e, IntPoint(e->xcurr, horzEdge->ycurr), + (IsTopHorz( e->xcurr ))? ipLeft : ipBoth ); + else + IntersectEdges( e, horzEdge, IntPoint(e->xcurr, horzEdge->ycurr), + (IsTopHorz( e->xcurr ))? ipRight : ipBoth ); + } + else if( dir == dLeftToRight ) + { + IntersectEdges( horzEdge, e, IntPoint(e->xcurr, horzEdge->ycurr), + (IsTopHorz( e->xcurr ))? ipLeft : ipBoth ); + } + else + { + IntersectEdges( e, horzEdge, IntPoint(e->xcurr, horzEdge->ycurr), + (IsTopHorz( e->xcurr ))? ipRight : ipBoth ); + } + SwapPositionsInAEL( horzEdge, e ); + } + else if( (dir == dLeftToRight && e->xcurr > horzRight && m_SortedEdges) || + (dir == dRightToLeft && e->xcurr < horzLeft && m_SortedEdges) ) break; + e = eNext; + } //end while + + if( horzEdge->nextInLML ) + { + if( horzEdge->outIdx >= 0 ) + AddOutPt( horzEdge, IntPoint(horzEdge->xtop, horzEdge->ytop)); + UpdateEdgeIntoAEL( horzEdge ); + } + else + { + if ( horzEdge->outIdx >= 0 ) + IntersectEdges( horzEdge, eMaxPair, + IntPoint(horzEdge->xtop, horzEdge->ycurr), ipBoth); + if (eMaxPair->outIdx >= 0) throw clipperException("ProcessHorizontal error"); + DeleteFromAEL(eMaxPair); + DeleteFromAEL(horzEdge); + } +} +//------------------------------------------------------------------------------ + +void Clipper::UpdateEdgeIntoAEL(TEdge *&e) +{ + if( !e->nextInLML ) throw + clipperException("UpdateEdgeIntoAEL: invalid call"); + TEdge* AelPrev = e->prevInAEL; + TEdge* AelNext = e->nextInAEL; + e->nextInLML->outIdx = e->outIdx; + if( AelPrev ) AelPrev->nextInAEL = e->nextInLML; + else m_ActiveEdges = e->nextInLML; + if( AelNext ) AelNext->prevInAEL = e->nextInLML; + e->nextInLML->side = e->side; + e->nextInLML->windDelta = e->windDelta; + e->nextInLML->windCnt = e->windCnt; + e->nextInLML->windCnt2 = e->windCnt2; + e = e->nextInLML; + e->prevInAEL = AelPrev; + e->nextInAEL = AelNext; + if( !NEAR_EQUAL(e->dx, HORIZONTAL) ) InsertScanbeam( e->ytop ); +} +//------------------------------------------------------------------------------ + +bool Clipper::ProcessIntersections(const long64 botY, const long64 topY) +{ + if( !m_ActiveEdges ) return true; + try { + BuildIntersectList(botY, topY); + if ( !m_IntersectNodes) return true; + if ( FixupIntersections() ) ProcessIntersectList(); + else return false; + } + catch(...) { + m_SortedEdges = 0; + DisposeIntersectNodes(); + throw clipperException("ProcessIntersections error"); + } + return true; +} +//------------------------------------------------------------------------------ + +void Clipper::DisposeIntersectNodes() +{ + while ( m_IntersectNodes ) + { + IntersectNode* iNode = m_IntersectNodes->next; + delete m_IntersectNodes; + m_IntersectNodes = iNode; + } +} +//------------------------------------------------------------------------------ + +void Clipper::BuildIntersectList(const long64 botY, const long64 topY) +{ + if ( !m_ActiveEdges ) return; + + //prepare for sorting ... + TEdge* e = m_ActiveEdges; + m_SortedEdges = e; + while( e ) + { + e->prevInSEL = e->prevInAEL; + e->nextInSEL = e->nextInAEL; + e->tmpX = TopX( *e, topY ); + e = e->nextInAEL; + } + + //bubblesort ... + bool isModified = true; + while( isModified && m_SortedEdges ) + { + isModified = false; + e = m_SortedEdges; + while( e->nextInSEL ) + { + TEdge *eNext = e->nextInSEL; + IntPoint pt; + if(e->tmpX > eNext->tmpX && + IntersectPoint(*e, *eNext, pt, m_UseFullRange)) + { + if (pt.Y > botY) + { + pt.Y = botY; + pt.X = TopX(*e, pt.Y); + } + AddIntersectNode( e, eNext, pt ); + SwapPositionsInSEL(e, eNext); + isModified = true; + } + else + e = eNext; + } + if( e->prevInSEL ) e->prevInSEL->nextInSEL = 0; + else break; + } + m_SortedEdges = 0; +} +//------------------------------------------------------------------------------ + +bool ProcessParam1BeforeParam2(const IntersectNode &node1, const IntersectNode &node2) +{ + bool result; + if (node1.pt.Y == node2.pt.Y) + { + if (node1.edge1 == node2.edge1 || node1.edge2 == node2.edge1) + { + result = node2.pt.X > node1.pt.X; + return node2.edge1->dx > 0 ? !result : result; + } + else if (node1.edge1 == node2.edge2 || node1.edge2 == node2.edge2) + { + result = node2.pt.X > node1.pt.X; + return node2.edge2->dx > 0 ? !result : result; + } + else return node2.pt.X > node1.pt.X; + } + else return node1.pt.Y > node2.pt.Y; +} +//------------------------------------------------------------------------------ + +void Clipper::AddIntersectNode(TEdge *e1, TEdge *e2, const IntPoint &pt) +{ + IntersectNode* newNode = new IntersectNode; + newNode->edge1 = e1; + newNode->edge2 = e2; + newNode->pt = pt; + newNode->next = 0; + if( !m_IntersectNodes ) m_IntersectNodes = newNode; + else if( ProcessParam1BeforeParam2(*newNode, *m_IntersectNodes) ) + { + newNode->next = m_IntersectNodes; + m_IntersectNodes = newNode; + } + else + { + IntersectNode* iNode = m_IntersectNodes; + while( iNode->next && ProcessParam1BeforeParam2(*iNode->next, *newNode) ) + iNode = iNode->next; + newNode->next = iNode->next; + iNode->next = newNode; + } +} +//------------------------------------------------------------------------------ + +void Clipper::ProcessIntersectList() +{ + while( m_IntersectNodes ) + { + IntersectNode* iNode = m_IntersectNodes->next; + { + IntersectEdges( m_IntersectNodes->edge1 , + m_IntersectNodes->edge2 , m_IntersectNodes->pt, ipBoth ); + SwapPositionsInAEL( m_IntersectNodes->edge1 , m_IntersectNodes->edge2 ); + } + delete m_IntersectNodes; + m_IntersectNodes = iNode; + } +} +//------------------------------------------------------------------------------ + +void Clipper::DoMaxima(TEdge *e, long64 topY) +{ + TEdge* eMaxPair = GetMaximaPair(e); + long64 X = e->xtop; + TEdge* eNext = e->nextInAEL; + while( eNext != eMaxPair ) + { + if (!eNext) throw clipperException("DoMaxima error"); + IntersectEdges( e, eNext, IntPoint(X, topY), ipBoth ); + SwapPositionsInAEL(e, eNext); + eNext = eNext->nextInAEL; + } + if( e->outIdx < 0 && eMaxPair->outIdx < 0 ) + { + DeleteFromAEL( e ); + DeleteFromAEL( eMaxPair ); + } + else if( e->outIdx >= 0 && eMaxPair->outIdx >= 0 ) + { + IntersectEdges( e, eMaxPair, IntPoint(X, topY), ipNone ); + } + else throw clipperException("DoMaxima error"); +} +//------------------------------------------------------------------------------ + +void Clipper::ProcessEdgesAtTopOfScanbeam(const long64 topY) +{ + TEdge* e = m_ActiveEdges; + while( e ) + { + //1. process maxima, treating them as if they're 'bent' horizontal edges, + // but exclude maxima with horizontal edges. nb: e can't be a horizontal. + if( IsMaxima(e, topY) && !NEAR_EQUAL(GetMaximaPair(e)->dx, HORIZONTAL) ) + { + //'e' might be removed from AEL, as may any following edges so ... + TEdge* ePrev = e->prevInAEL; + DoMaxima(e, topY); + if( !ePrev ) e = m_ActiveEdges; + else e = ePrev->nextInAEL; + } + else + { + //2. promote horizontal edges, otherwise update xcurr and ycurr ... + if( IsIntermediate(e, topY) && NEAR_EQUAL(e->nextInLML->dx, HORIZONTAL) ) + { + if (e->outIdx >= 0) + { + AddOutPt(e, IntPoint(e->xtop, e->ytop)); + + for (HorzJoinList::size_type i = 0; i < m_HorizJoins.size(); ++i) + { + IntPoint pt, pt2; + HorzJoinRec* hj = m_HorizJoins[i]; + if (GetOverlapSegment(IntPoint(hj->edge->xbot, hj->edge->ybot), + IntPoint(hj->edge->xtop, hj->edge->ytop), + IntPoint(e->nextInLML->xbot, e->nextInLML->ybot), + IntPoint(e->nextInLML->xtop, e->nextInLML->ytop), pt, pt2)) + AddJoin(hj->edge, e->nextInLML, hj->savedIdx, e->outIdx); + } + + AddHorzJoin(e->nextInLML, e->outIdx); + } + UpdateEdgeIntoAEL(e); + AddEdgeToSEL(e); + } else + { + //this just simplifies horizontal processing ... + e->xcurr = TopX( *e, topY ); + e->ycurr = topY; + } + e = e->nextInAEL; + } + } + + //3. Process horizontals at the top of the scanbeam ... + ProcessHorizontals(); + + //4. Promote intermediate vertices ... + e = m_ActiveEdges; + while( e ) + { + if( IsIntermediate( e, topY ) ) + { + if( e->outIdx >= 0 ) AddOutPt(e, IntPoint(e->xtop,e->ytop)); + UpdateEdgeIntoAEL(e); + + //if output polygons share an edge, they'll need joining later ... + TEdge* ePrev = e->prevInAEL; + TEdge* eNext = e->nextInAEL; + if (ePrev && ePrev->xcurr == e->xbot && + ePrev->ycurr == e->ybot && e->outIdx >= 0 && + ePrev->outIdx >= 0 && ePrev->ycurr > ePrev->ytop && + SlopesEqual(*e, *ePrev, m_UseFullRange)) + { + AddOutPt(ePrev, IntPoint(e->xbot, e->ybot)); + AddJoin(e, ePrev); + } + else if (eNext && eNext->xcurr == e->xbot && + eNext->ycurr == e->ybot && e->outIdx >= 0 && + eNext->outIdx >= 0 && eNext->ycurr > eNext->ytop && + SlopesEqual(*e, *eNext, m_UseFullRange)) + { + AddOutPt(eNext, IntPoint(e->xbot, e->ybot)); + AddJoin(e, eNext); + } + } + e = e->nextInAEL; + } +} +//------------------------------------------------------------------------------ + +void Clipper::FixupOutPolygon(OutRec &outRec) +{ + //FixupOutPolygon() - removes duplicate points and simplifies consecutive + //parallel edges by removing the middle vertex. + OutPt *lastOK = 0; + outRec.pts = outRec.bottomPt; + OutPt *pp = outRec.bottomPt; + + for (;;) + { + if (pp->prev == pp || pp->prev == pp->next ) + { + DisposeOutPts(pp); + outRec.pts = 0; + outRec.bottomPt = 0; + return; + } + //test for duplicate points and for same slope (cross-product) ... + if ( PointsEqual(pp->pt, pp->next->pt) || + SlopesEqual(pp->prev->pt, pp->pt, pp->next->pt, m_UseFullRange) ) + { + lastOK = 0; + OutPt *tmp = pp; + if (pp == outRec.bottomPt) + outRec.bottomPt = 0; //flags need for updating + pp->prev->next = pp->next; + pp->next->prev = pp->prev; + pp = pp->prev; + delete tmp; + } + else if (pp == lastOK) break; + else + { + if (!lastOK) lastOK = pp; + pp = pp->next; + } + } + if (!outRec.bottomPt) { + outRec.bottomPt = GetBottomPt(pp); + outRec.bottomPt->idx = outRec.idx; + outRec.pts = outRec.bottomPt; + } +} +//------------------------------------------------------------------------------ + +void Clipper::BuildResult(Polygons &polys) +{ + int k = 0; + polys.resize(m_PolyOuts.size()); + for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); ++i) + { + if (m_PolyOuts[i]->pts) + { + Polygon* pg = &polys[k]; + pg->clear(); + OutPt* p = m_PolyOuts[i]->pts; + do + { + pg->push_back(p->pt); + p = p->prev; + } while (p != m_PolyOuts[i]->pts); + //make sure each polygon has at least 3 vertices ... + if (pg->size() < 3) pg->clear(); else k++; + } + } + polys.resize(k); +} +//------------------------------------------------------------------------------ + +int PointCount(OutPt *pts) +{ + if (!pts) return 0; + int result = 0; + OutPt* p = pts; + do + { + result++; + p = p->next; + } + while (p != pts); + return result; +} +//------------------------------------------------------------------------------ + +void Clipper::BuildResult2(PolyTree& polytree) +{ + polytree.Clear(); + polytree.AllNodes.reserve(m_PolyOuts.size()); + //add each output polygon/contour to polytree ... + for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); i++) + { + OutRec* outRec = m_PolyOuts[i]; + int cnt = PointCount(outRec->pts); + if (cnt < 3) continue; + FixHoleLinkage(*outRec); + PolyNode* pn = new PolyNode(); + //nb: polytree takes ownership of all the PolyNodes + polytree.AllNodes.push_back(pn); + outRec->polyNode = pn; + pn->Parent = 0; + pn->Index = 0; + pn->Contour.reserve(cnt); + OutPt *op = outRec->pts; + for (int j = 0; j < cnt; j++) + { + pn->Contour.push_back(op->pt); + op = op->prev; + } + } + + //fixup PolyNode links etc ... + polytree.Childs.reserve(m_PolyOuts.size()); + for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); i++) + { + OutRec* outRec = m_PolyOuts[i]; + if (!outRec->polyNode) continue; + if (outRec->FirstLeft) + outRec->FirstLeft->polyNode->AddChild(*outRec->polyNode); + else + polytree.AddChild(*outRec->polyNode); + } +} +//------------------------------------------------------------------------------ + +void SwapIntersectNodes(IntersectNode &int1, IntersectNode &int2) +{ + TEdge *e1 = int1.edge1; + TEdge *e2 = int1.edge2; + IntPoint p = int1.pt; + + int1.edge1 = int2.edge1; + int1.edge2 = int2.edge2; + int1.pt = int2.pt; + + int2.edge1 = e1; + int2.edge2 = e2; + int2.pt = p; +} +//------------------------------------------------------------------------------ + +bool Clipper::FixupIntersections() +{ + if ( !m_IntersectNodes->next ) return true; + + CopyAELToSEL(); + IntersectNode *int1 = m_IntersectNodes; + IntersectNode *int2 = m_IntersectNodes->next; + while (int2) + { + TEdge *e1 = int1->edge1; + TEdge *e2; + if (e1->prevInSEL == int1->edge2) e2 = e1->prevInSEL; + else if (e1->nextInSEL == int1->edge2) e2 = e1->nextInSEL; + else + { + //The current intersection is out of order, so try and swap it with + //a subsequent intersection ... + while (int2) + { + if (int2->edge1->nextInSEL == int2->edge2 || + int2->edge1->prevInSEL == int2->edge2) break; + else int2 = int2->next; + } + if ( !int2 ) return false; //oops!!! + + //found an intersect node that can be swapped ... + SwapIntersectNodes(*int1, *int2); + e1 = int1->edge1; + e2 = int1->edge2; + } + SwapPositionsInSEL(e1, e2); + int1 = int1->next; + int2 = int1->next; + } + + m_SortedEdges = 0; + + //finally, check the last intersection too ... + return (int1->edge1->prevInSEL == int1->edge2 || + int1->edge1->nextInSEL == int1->edge2); +} +//------------------------------------------------------------------------------ + +bool E2InsertsBeforeE1(TEdge &e1, TEdge &e2) +{ + return e2.xcurr == e1.xcurr ? e2.dx > e1.dx : e2.xcurr < e1.xcurr; +} +//------------------------------------------------------------------------------ + +void Clipper::InsertEdgeIntoAEL(TEdge *edge) +{ + edge->prevInAEL = 0; + edge->nextInAEL = 0; + if( !m_ActiveEdges ) + { + m_ActiveEdges = edge; + } + else if( E2InsertsBeforeE1(*m_ActiveEdges, *edge) ) + { + edge->nextInAEL = m_ActiveEdges; + m_ActiveEdges->prevInAEL = edge; + m_ActiveEdges = edge; + } else + { + TEdge* e = m_ActiveEdges; + while( e->nextInAEL && !E2InsertsBeforeE1(*e->nextInAEL , *edge) ) + e = e->nextInAEL; + edge->nextInAEL = e->nextInAEL; + if( e->nextInAEL ) e->nextInAEL->prevInAEL = edge; + edge->prevInAEL = e; + e->nextInAEL = edge; + } +} +//---------------------------------------------------------------------- + +void Clipper::DoEdge1(TEdge *edge1, TEdge *edge2, const IntPoint &pt) +{ + AddOutPt(edge1, pt); + SwapSides(*edge1, *edge2); + SwapPolyIndexes(*edge1, *edge2); +} +//---------------------------------------------------------------------- + +void Clipper::DoEdge2(TEdge *edge1, TEdge *edge2, const IntPoint &pt) +{ + AddOutPt(edge2, pt); + SwapSides(*edge1, *edge2); + SwapPolyIndexes(*edge1, *edge2); +} +//---------------------------------------------------------------------- + +void Clipper::DoBothEdges(TEdge *edge1, TEdge *edge2, const IntPoint &pt) +{ + AddOutPt(edge1, pt); + AddOutPt(edge2, pt); + SwapSides( *edge1 , *edge2 ); + SwapPolyIndexes( *edge1 , *edge2 ); +} +//---------------------------------------------------------------------- + +bool Clipper::JoinPoints(const JoinRec *j, OutPt *&p1, OutPt *&p2) +{ + OutRec *outRec1 = m_PolyOuts[j->poly1Idx]; + OutRec *outRec2 = m_PolyOuts[j->poly2Idx]; + if (!outRec1 || !outRec2) return false; + OutPt *pp1a = outRec1->pts; + OutPt *pp2a = outRec2->pts; + IntPoint pt1 = j->pt2a, pt2 = j->pt2b; + IntPoint pt3 = j->pt1a, pt4 = j->pt1b; + if (!FindSegment(pp1a, pt1, pt2)) return false; + if (outRec1 == outRec2) + { + //we're searching the same polygon for overlapping segments so + //segment 2 mustn't be the same as segment 1 ... + pp2a = pp1a->next; + if (!FindSegment(pp2a, pt3, pt4) || (pp2a == pp1a)) return false; + } + else if (!FindSegment(pp2a, pt3, pt4)) return false; + + if (!GetOverlapSegment(pt1, pt2, pt3, pt4, pt1, pt2)) return false; + + OutPt *p3, *p4, *prev = pp1a->prev; + //get p1 & p2 polypts - the overlap start & endpoints on poly1 + if (PointsEqual(pp1a->pt, pt1)) p1 = pp1a; + else if (PointsEqual(prev->pt, pt1)) p1 = prev; + else p1 = InsertPolyPtBetween(pp1a, prev, pt1); + + if (PointsEqual(pp1a->pt, pt2)) p2 = pp1a; + else if (PointsEqual(prev->pt, pt2)) p2 = prev; + else if ((p1 == pp1a) || (p1 == prev)) + p2 = InsertPolyPtBetween(pp1a, prev, pt2); + else if (Pt3IsBetweenPt1AndPt2(pp1a->pt, p1->pt, pt2)) + p2 = InsertPolyPtBetween(pp1a, p1, pt2); else + p2 = InsertPolyPtBetween(p1, prev, pt2); + + //get p3 & p4 polypts - the overlap start & endpoints on poly2 + prev = pp2a->prev; + if (PointsEqual(pp2a->pt, pt1)) p3 = pp2a; + else if (PointsEqual(prev->pt, pt1)) p3 = prev; + else p3 = InsertPolyPtBetween(pp2a, prev, pt1); + + if (PointsEqual(pp2a->pt, pt2)) p4 = pp2a; + else if (PointsEqual(prev->pt, pt2)) p4 = prev; + else if ((p3 == pp2a) || (p3 == prev)) + p4 = InsertPolyPtBetween(pp2a, prev, pt2); + else if (Pt3IsBetweenPt1AndPt2(pp2a->pt, p3->pt, pt2)) + p4 = InsertPolyPtBetween(pp2a, p3, pt2); else + p4 = InsertPolyPtBetween(p3, prev, pt2); + + //p1.pt == p3.pt and p2.pt == p4.pt so join p1 to p3 and p2 to p4 ... + if (p1->next == p2 && p3->prev == p4) + { + p1->next = p3; + p3->prev = p1; + p2->prev = p4; + p4->next = p2; + return true; + } + else if (p1->prev == p2 && p3->next == p4) + { + p1->prev = p3; + p3->next = p1; + p2->next = p4; + p4->prev = p2; + return true; + } + else + return false; //an orientation is probably wrong +} +//---------------------------------------------------------------------- + +void Clipper::FixupJoinRecs(JoinRec *j, OutPt *pt, unsigned startIdx) +{ + for (JoinList::size_type k = startIdx; k < m_Joins.size(); k++) + { + JoinRec* j2 = m_Joins[k]; + if (j2->poly1Idx == j->poly1Idx && PointIsVertex(j2->pt1a, pt)) + j2->poly1Idx = j->poly2Idx; + if (j2->poly2Idx == j->poly1Idx && PointIsVertex(j2->pt2a, pt)) + j2->poly2Idx = j->poly2Idx; + } +} +//---------------------------------------------------------------------- + +bool Poly2ContainsPoly1(OutPt* outPt1, OutPt* outPt2, bool UseFullInt64Range) +{ + //find the first pt in outPt1 that isn't also a vertex of outPt2 ... + OutPt* outPt = outPt1; + do + { + if (!PointIsVertex(outPt->pt, outPt2)) break; + outPt = outPt->next; + } + while (outPt != outPt1); + bool result; + //sometimes a point on one polygon can be touching the other polygon + //so to be totally confident outPt1 is inside outPt2 repeat ... + do + { + result = PointInPolygon(outPt->pt, outPt2, UseFullInt64Range); + outPt = outPt->next; + } + while (result && outPt != outPt1); + return result; +} +//---------------------------------------------------------------------- + +void Clipper::FixupFirstLefts1(OutRec* OldOutRec, OutRec* NewOutRec) +{ + + for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); ++i) + { + OutRec* outRec = m_PolyOuts[i]; + if (outRec->pts && outRec->FirstLeft == OldOutRec) + { + if (Poly2ContainsPoly1(outRec->pts, NewOutRec->pts, m_UseFullRange)) + outRec->FirstLeft = NewOutRec; + } + } +} +//---------------------------------------------------------------------- + +void Clipper::FixupFirstLefts2(OutRec* OldOutRec, OutRec* NewOutRec) +{ + for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); ++i) + { + OutRec* outRec = m_PolyOuts[i]; + if (outRec->FirstLeft == OldOutRec) outRec->FirstLeft = NewOutRec; + } +} +//---------------------------------------------------------------------- + +void Clipper::JoinCommonEdges() +{ + for (JoinList::size_type i = 0; i < m_Joins.size(); i++) + { + JoinRec* j = m_Joins[i]; + + OutRec *outRec1 = m_PolyOuts[j->poly1Idx]; + OutRec *outRec2 = m_PolyOuts[j->poly2Idx]; + + if (!outRec1->pts || !outRec2->pts) continue; + + //get the polygon fragment with the correct hole state (FirstLeft) + //before calling JoinPoints() ... + OutRec *holeStateRec; + if (outRec1 == outRec2) holeStateRec = outRec1; + else if (Param1RightOfParam2(outRec1, outRec2)) holeStateRec = outRec2; + else if (Param1RightOfParam2(outRec2, outRec1)) holeStateRec = outRec1; + else holeStateRec = GetLowermostRec(outRec1, outRec2); + + OutPt *p1, *p2; + if (!JoinPoints(j, p1, p2)) continue; + + if (outRec1 == outRec2) + { + //instead of joining two polygons, we've just created a new one by + //splitting one polygon into two. + outRec1->pts = GetBottomPt(p1); + outRec1->bottomPt = outRec1->pts; + outRec1->bottomPt->idx = outRec1->idx; + outRec2 = CreateOutRec(); + m_PolyOuts.push_back(outRec2); + outRec2->idx = (int)m_PolyOuts.size()-1; + j->poly2Idx = outRec2->idx; + outRec2->pts = GetBottomPt(p2); + outRec2->bottomPt = outRec2->pts; + outRec2->bottomPt->idx = outRec2->idx; + + if (Poly2ContainsPoly1(outRec2->pts, outRec1->pts, m_UseFullRange)) + { + //outRec2 is contained by outRec1 ... + outRec2->isHole = !outRec1->isHole; + outRec2->FirstLeft = outRec1; + + FixupJoinRecs(j, p2, i+1); + + //fixup FirstLeft pointers that may need reassigning to OutRec1 + if (m_UsingPolyTree) FixupFirstLefts2(outRec2, outRec1); + + FixupOutPolygon(*outRec1); //nb: do this BEFORE testing orientation + FixupOutPolygon(*outRec2); // but AFTER calling FixupJoinRecs() + + + if ((outRec2->isHole ^ m_ReverseOutput) == (Area(*outRec2, m_UseFullRange) > 0)) + ReversePolyPtLinks(outRec2->pts); + + } else if (Poly2ContainsPoly1(outRec1->pts, outRec2->pts, m_UseFullRange)) + { + //outRec1 is contained by outRec2 ... + outRec2->isHole = outRec1->isHole; + outRec1->isHole = !outRec2->isHole; + outRec2->FirstLeft = outRec1->FirstLeft; + outRec1->FirstLeft = outRec2; + + FixupJoinRecs(j, p2, i+1); + + //fixup FirstLeft pointers that may need reassigning to OutRec1 + if (m_UsingPolyTree) FixupFirstLefts2(outRec1, outRec2); + + FixupOutPolygon(*outRec1); //nb: do this BEFORE testing orientation + FixupOutPolygon(*outRec2); // but AFTER calling FixupJoinRecs() + + if ((outRec1->isHole ^ m_ReverseOutput) == (Area(*outRec1, m_UseFullRange) > 0)) + ReversePolyPtLinks(outRec1->pts); + } + else + { + //the 2 polygons are completely separate ... + outRec2->isHole = outRec1->isHole; + outRec2->FirstLeft = outRec1->FirstLeft; + + FixupJoinRecs(j, p2, i+1); + + //fixup FirstLeft pointers that may need reassigning to OutRec2 + if (m_UsingPolyTree) FixupFirstLefts1(outRec1, outRec2); + + FixupOutPolygon(*outRec1); //nb: do this BEFORE testing orientation + FixupOutPolygon(*outRec2); // but AFTER calling FixupJoinRecs() + } + + } else + { + //joined 2 polygons together ... + + //cleanup redundant edges ... + FixupOutPolygon(*outRec1); + + //delete the obsolete pointer ... + int OKIdx = outRec1->idx; + int ObsoleteIdx = outRec2->idx; + outRec2->pts = 0; + outRec2->bottomPt = 0; + + outRec1->isHole = holeStateRec->isHole; + if (holeStateRec == outRec2) + outRec1->FirstLeft = outRec2->FirstLeft; + outRec2->FirstLeft = outRec1; + + //now fixup any subsequent Joins that match this polygon + for (JoinList::size_type k = i+1; k < m_Joins.size(); k++) + { + JoinRec* j2 = m_Joins[k]; + if (j2->poly1Idx == ObsoleteIdx) j2->poly1Idx = OKIdx; + if (j2->poly2Idx == ObsoleteIdx) j2->poly2Idx = OKIdx; + } + + //fixup FirstLeft pointers that may need reassigning to OutRec1 + if (m_UsingPolyTree) FixupFirstLefts2(outRec2, outRec1); + } + } +} +//------------------------------------------------------------------------------ + +void ReversePolygon(Polygon& p) +{ + std::reverse(p.begin(), p.end()); +} +//------------------------------------------------------------------------------ + +void ReversePolygons(Polygons& p) +{ + for (Polygons::size_type i = 0; i < p.size(); ++i) + ReversePolygon(p[i]); +} + +//------------------------------------------------------------------------------ +// OffsetPolygon functions ... +//------------------------------------------------------------------------------ + +struct DoublePoint +{ + double X; + double Y; + DoublePoint(double x = 0, double y = 0) : X(x), Y(y) {} +}; +//------------------------------------------------------------------------------ + +Polygon BuildArc(const IntPoint &pt, + const double a1, const double a2, const double r) +{ + long64 steps = std::max(6, int(std::sqrt(std::fabs(r)) * std::fabs(a2 - a1))); + if (steps > 0x100) steps = 0x100; + int n = (unsigned)steps; + Polygon result(n); + double da = (a2 - a1) / (n -1); + double a = a1; + for (int i = 0; i < n; ++i) + { + result[i].X = pt.X + Round(std::cos(a)*r); + result[i].Y = pt.Y + Round(std::sin(a)*r); + a += da; + } + return result; +} +//------------------------------------------------------------------------------ + +DoublePoint GetUnitNormal(const IntPoint &pt1, const IntPoint &pt2) +{ + if(pt2.X == pt1.X && pt2.Y == pt1.Y) + return DoublePoint(0, 0); + + double dx = (double)(pt2.X - pt1.X); + double dy = (double)(pt2.Y - pt1.Y); + double f = 1 *1.0/ std::sqrt( dx*dx + dy*dy ); + dx *= f; + dy *= f; + return DoublePoint(dy, -dx); +} + +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ + +class PolyOffsetBuilder +{ +private: + Polygons m_p; + Polygon* m_curr_poly; + std::vector normals; + double m_delta, m_RMin, m_R; + size_t m_i, m_j, m_k; + static const int buffLength = 128; + JoinType m_jointype; + +public: + +PolyOffsetBuilder(const Polygons& in_polys, Polygons& out_polys, + double delta, JoinType jointype, double MiterLimit, bool AutoFix) +{ + //nb precondition - out_polys != ptsin_polys + if (NEAR_ZERO(delta)) + { + out_polys = in_polys; + return; + } + + this->m_p = in_polys; + this->m_delta = delta; + this->m_jointype = jointype; + + //ChecksInput - fixes polygon orientation if necessary and removes + //duplicate vertices. Can be set false when you're sure that polygon + //orientation is correct and that there are no duplicate vertices. + if (AutoFix) + { + size_t Len = m_p.size(), botI = 0; + while (botI < Len && m_p[botI].size() == 0) botI++; + if (botI == Len) return; + + //botPt: used to find the lowermost (in inverted Y-axis) & leftmost point + //This point (on m_p[botI]) must be on an outer polygon ring and if + //its orientation is false (counterclockwise) then assume all polygons + //need reversing ... + IntPoint botPt = m_p[botI][0]; + for (size_t i = botI; i < Len; ++i) + { + if (m_p[i].size() < 3) continue; + if (UpdateBotPt(m_p[i][0], botPt)) botI = i; + Polygon::iterator it = m_p[i].begin() +1; + while (it != m_p[i].end()) + { + if (PointsEqual(*it, *(it -1))) + it = m_p[i].erase(it); + else + { + if (UpdateBotPt(*it, botPt)) botI = i; + ++it; + } + } + } + if (!Orientation(m_p[botI])) + ReversePolygons(m_p); + } + + if (MiterLimit <= 1) MiterLimit = 1; + m_RMin = 2.0/(MiterLimit*MiterLimit); + + double deltaSq = delta*delta; + out_polys.clear(); + out_polys.resize(m_p.size()); + for (m_i = 0; m_i < m_p.size(); m_i++) + { + m_curr_poly = &out_polys[m_i]; + size_t len = m_p[m_i].size(); + if (len > 1 && m_p[m_i][0].X == m_p[m_i][len - 1].X && + m_p[m_i][0].Y == m_p[m_i][len-1].Y) len--; + + //when 'shrinking' polygons - to minimize artefacts + //strip those polygons that have an area < pi * delta^2 ... + double a1 = Area(m_p[m_i]); + if (delta < 0) { if (a1 > 0 && a1 < deltaSq *pi) len = 0; } + else if (a1 < 0 && -a1 < deltaSq *pi) len = 0; //holes have neg. area + + if (len == 0 || (len < 3 && delta <= 0)) + continue; + else if (len == 1) + { + Polygon arc; + arc = BuildArc(m_p[m_i][len-1], 0, 2 * pi, delta); + out_polys[m_i] = arc; + continue; + } + + //build normals ... + normals.clear(); + normals.resize(len); + normals[len-1] = GetUnitNormal(m_p[m_i][len-1], m_p[m_i][0]); + for (m_j = 0; m_j < len -1; ++m_j) + normals[m_j] = GetUnitNormal(m_p[m_i][m_j], m_p[m_i][m_j+1]); + + m_k = len -1; + for (m_j = 0; m_j < len; ++m_j) + { + switch (jointype) + { + case jtMiter: + { + m_R = 1 + (normals[m_j].X*normals[m_k].X + + normals[m_j].Y*normals[m_k].Y); + if (m_R >= m_RMin) DoMiter(); else DoSquare(MiterLimit); + break; + } + case jtSquare: DoSquare(); break; + case jtRound: DoRound(); break; + } + m_k = m_j; + } + } + + //finally, clean up untidy corners using Clipper ... + Clipper clpr; + clpr.AddPolygons(out_polys, ptSubject); + if (delta > 0) + { + if (!clpr.Execute(ctUnion, out_polys, pftPositive, pftPositive)) + out_polys.clear(); + } + else + { + IntRect r = clpr.GetBounds(); + Polygon outer(4); + outer[0] = IntPoint(r.left - 10, r.bottom + 10); + outer[1] = IntPoint(r.right + 10, r.bottom + 10); + outer[2] = IntPoint(r.right + 10, r.top - 10); + outer[3] = IntPoint(r.left - 10, r.top - 10); + + clpr.AddPolygon(outer, ptSubject); + if (clpr.Execute(ctUnion, out_polys, pftNegative, pftNegative)) + { + out_polys.erase(out_polys.begin()); + ReversePolygons(out_polys); + + } else + out_polys.clear(); + } +} +//------------------------------------------------------------------------------ + +private: + +void AddPoint(const IntPoint& pt) +{ + Polygon::size_type len = m_curr_poly->size(); + if (len == m_curr_poly->capacity()) + m_curr_poly->reserve(len + buffLength); + m_curr_poly->push_back(pt); +} +//------------------------------------------------------------------------------ + +void DoSquare(double mul = 1.0) +{ + IntPoint pt1 = IntPoint((long64)Round(m_p[m_i][m_j].X + normals[m_k].X * m_delta), + (long64)Round(m_p[m_i][m_j].Y + normals[m_k].Y * m_delta)); + IntPoint pt2 = IntPoint((long64)Round(m_p[m_i][m_j].X + normals[m_j].X * m_delta), + (long64)Round(m_p[m_i][m_j].Y + normals[m_j].Y * m_delta)); + if ((normals[m_k].X * normals[m_j].Y - normals[m_j].X * normals[m_k].Y) * m_delta >= 0) + { + double a1 = std::atan2(normals[m_k].Y, normals[m_k].X); + double a2 = std::atan2(-normals[m_j].Y, -normals[m_j].X); + a1 = std::fabs(a2 - a1); + if (a1 > pi) a1 = pi * 2 - a1; + double dx = std::tan((pi - a1) / 4) * std::fabs(m_delta * mul); + pt1 = IntPoint((long64)(pt1.X -normals[m_k].Y * dx), + (long64)(pt1.Y + normals[m_k].X * dx)); + AddPoint(pt1); + pt2 = IntPoint((long64)(pt2.X + normals[m_j].Y * dx), + (long64)(pt2.Y -normals[m_j].X * dx)); + AddPoint(pt2); + } + else + { + AddPoint(pt1); + AddPoint(m_p[m_i][m_j]); + AddPoint(pt2); + } +} +//------------------------------------------------------------------------------ + +void DoMiter() +{ + if ((normals[m_k].X * normals[m_j].Y - normals[m_j].X * normals[m_k].Y) * m_delta >= 0) + { + double q = m_delta / m_R; + AddPoint(IntPoint((long64)Round(m_p[m_i][m_j].X + + (normals[m_k].X + normals[m_j].X) * q), + (long64)Round(m_p[m_i][m_j].Y + (normals[m_k].Y + normals[m_j].Y) * q))); + } + else + { + IntPoint pt1 = IntPoint((long64)Round(m_p[m_i][m_j].X + normals[m_k].X * + m_delta), (long64)Round(m_p[m_i][m_j].Y + normals[m_k].Y * m_delta)); + IntPoint pt2 = IntPoint((long64)Round(m_p[m_i][m_j].X + normals[m_j].X * + m_delta), (long64)Round(m_p[m_i][m_j].Y + normals[m_j].Y * m_delta)); + AddPoint(pt1); + AddPoint(m_p[m_i][m_j]); + AddPoint(pt2); + } +} +//------------------------------------------------------------------------------ + +void DoRound() +{ + IntPoint pt1 = IntPoint((long64)Round(m_p[m_i][m_j].X + normals[m_k].X * m_delta), + (long64)Round(m_p[m_i][m_j].Y + normals[m_k].Y * m_delta)); + IntPoint pt2 = IntPoint((long64)Round(m_p[m_i][m_j].X + normals[m_j].X * m_delta), + (long64)Round(m_p[m_i][m_j].Y + normals[m_j].Y * m_delta)); + AddPoint(pt1); + //round off reflex angles (ie > 180 deg) unless almost flat (ie < ~10deg). + if ((normals[m_k].X*normals[m_j].Y - normals[m_j].X*normals[m_k].Y) * m_delta >= 0) + { + if (normals[m_j].X * normals[m_k].X + normals[m_j].Y * normals[m_k].Y < 0.985) + { + double a1 = std::atan2(normals[m_k].Y, normals[m_k].X); + double a2 = std::atan2(normals[m_j].Y, normals[m_j].X); + if (m_delta > 0 && a2 < a1) a2 += pi *2; + else if (m_delta < 0 && a2 > a1) a2 -= pi *2; + Polygon arc = BuildArc(m_p[m_i][m_j], a1, a2, m_delta); + for (Polygon::size_type m = 0; m < arc.size(); m++) + AddPoint(arc[m]); + } + } + else + AddPoint(m_p[m_i][m_j]); + AddPoint(pt2); +} +//-------------------------------------------------------------------------- + +bool UpdateBotPt(const IntPoint &pt, IntPoint &botPt) +{ + if (pt.Y > botPt.Y || (pt.Y == botPt.Y && pt.X < botPt.X)) + { + botPt = pt; + return true; + } + else return false; +} +//-------------------------------------------------------------------------- + +}; //end PolyOffsetBuilder + +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ + +void OffsetPolygons(const Polygons &in_polys, Polygons &out_polys, + double delta, JoinType jointype, double MiterLimit, bool AutoFix) +{ + if (&out_polys == &in_polys) + { + Polygons poly2(in_polys); + PolyOffsetBuilder(poly2, out_polys, delta, jointype, MiterLimit, AutoFix); + } + else PolyOffsetBuilder(in_polys, out_polys, delta, jointype, MiterLimit, AutoFix); +} +//------------------------------------------------------------------------------ + +void SimplifyPolygon(const Polygon &in_poly, Polygons &out_polys, PolyFillType fillType) +{ + Clipper c; + c.AddPolygon(in_poly, ptSubject); + c.Execute(ctUnion, out_polys, fillType, fillType); +} +//------------------------------------------------------------------------------ + +void SimplifyPolygons(const Polygons &in_polys, Polygons &out_polys, PolyFillType fillType) +{ + Clipper c; + c.AddPolygons(in_polys, ptSubject); + c.Execute(ctUnion, out_polys, fillType, fillType); +} +//------------------------------------------------------------------------------ + +void SimplifyPolygons(Polygons &polys, PolyFillType fillType) +{ + SimplifyPolygons(polys, polys, fillType); +} +//------------------------------------------------------------------------------ + +void CleanPolygon(Polygon& in_poly, Polygon& out_poly, double distance) +{ + //delta = proximity in units/pixels below which vertices + //will be stripped. Default ~= sqrt(2) so when adjacent + //vertices have both x & y coords within 1 unit, then + //the second vertex will be stripped. + int len = in_poly.size(); + if (len < 3) + out_poly.resize(0); + else + out_poly.resize(in_poly.size()); + + int d = (int)(distance * distance); + IntPoint p = in_poly[0]; + int j = 1; + for (int i = 1; i < len; i++) + { + if ((in_poly[i].X - p.X) * (in_poly[i].X - p.X) + + (in_poly[i].Y - p.Y) * (in_poly[i].Y - p.Y) <= d) + continue; + out_poly[j] = in_poly[i]; + p = in_poly[i]; + j++; + } + p = in_poly[j - 1]; + if ((in_poly[0].X - p.X) * (in_poly[0].X - p.X) + + (in_poly[0].Y - p.Y) * (in_poly[0].Y - p.Y) <= d) + j--; + if (j < len) + out_poly.resize(j); +} +//------------------------------------------------------------------------------ +void CleanPolygons(Polygons& in_polys, Polygons& out_polys, double distance) +{ + for (Polygons::size_type i = 0; i < in_polys.size(); ++i) + CleanPolygon(in_polys[i], out_polys[i], distance); +} +//------------------------------------------------------------------------------ + +void AddPolyNodeToPolygons(PolyNode& polynode, Polygons& polygons) +{ + if (polynode.Contour.size() > 0) + polygons.push_back(polynode.Contour); + for (int i = 0; i < polynode.ChildCount(); ++i) + AddPolyNodeToPolygons(*polynode.Childs[i], polygons); +} +//------------------------------------------------------------------------------ + +void PolyTreeToPolygons(PolyTree& polytree, Polygons& polygons) +{ + polygons.resize(0); + polygons.reserve(polytree.Total()); + AddPolyNodeToPolygons(polytree, polygons); +} +//------------------------------------------------------------------------------ + +std::ostream& operator <<(std::ostream &s, IntPoint& p) +{ + s << p.X << ' ' << p.Y << "\n"; + return s; +} +//------------------------------------------------------------------------------ + +std::ostream& operator <<(std::ostream &s, Polygon &p) +{ + for (Polygon::size_type i = 0; i < p.size(); i++) + s << p[i]; + s << "\n"; + return s; +} +//------------------------------------------------------------------------------ + +std::ostream& operator <<(std::ostream &s, Polygons &p) +{ + for (Polygons::size_type i = 0; i < p.size(); i++) + s << p[i]; + s << "\n"; + return s; +} +//------------------------------------------------------------------------------ + +} //ClipperLib namespace diff --git a/clipper/cpp/clipper.hpp b/clipper/cpp/clipper.hpp new file mode 100755 index 0000000..c807efa --- /dev/null +++ b/clipper/cpp/clipper.hpp @@ -0,0 +1,340 @@ +/******************************************************************************* +* * +* Author : Angus Johnson * +* Version : 5.1.0 * +* Date : 1 February 2013 * +* Website : http://www.angusj.com * +* Copyright : Angus Johnson 2010-2013 * +* * +* License: * +* Use, modification & distribution is subject to Boost Software License Ver 1. * +* http://www.boost.org/LICENSE_1_0.txt * +* * +* Attributions: * +* The code in this library is an extension of Bala Vatti's clipping algorithm: * +* "A generic solution to polygon clipping" * +* Communications of the ACM, Vol 35, Issue 7 (July 1992) pp 56-63. * +* http://portal.acm.org/citation.cfm?id=129906 * +* * +* Computer graphics and geometric modeling: implementation and algorithms * +* By Max K. Agoston * +* Springer; 1 edition (January 4, 2005) * +* http://books.google.com/books?q=vatti+clipping+agoston * +* * +* See also: * +* "Polygon Offsetting by Computing Winding Numbers" * +* Paper no. DETC2005-85513 pp. 565-575 * +* ASME 2005 International Design Engineering Technical Conferences * +* and Computers and Information in Engineering Conference (IDETC/CIE2005) * +* September 24-28, 2005 , Long Beach, California, USA * +* http://www.me.berkeley.edu/~mcmains/pubs/DAC05OffsetPolygon.pdf * +* * +*******************************************************************************/ + +#ifndef clipper_hpp +#define clipper_hpp + +#include +#include +#include +#include +#include + +namespace ClipperLib { + +enum ClipType { ctIntersection, ctUnion, ctDifference, ctXor }; +enum PolyType { ptSubject, ptClip }; +//By far the most widely used winding rules for polygon filling are +//EvenOdd & NonZero (GDI, GDI+, XLib, OpenGL, Cairo, AGG, Quartz, SVG, Gr32) +//Others rules include Positive, Negative and ABS_GTR_EQ_TWO (only in OpenGL) +//see http://glprogramming.com/red/chapter11.html +enum PolyFillType { pftEvenOdd, pftNonZero, pftPositive, pftNegative }; + +typedef signed long long long64; +typedef unsigned long long ulong64; + +struct IntPoint { +public: + long64 X; + long64 Y; + IntPoint(long64 x = 0, long64 y = 0): X(x), Y(y) {}; + friend std::ostream& operator <<(std::ostream &s, IntPoint &p); +}; + +typedef std::vector< IntPoint > Polygon; +typedef std::vector< Polygon > Polygons; + + +std::ostream& operator <<(std::ostream &s, Polygon &p); +std::ostream& operator <<(std::ostream &s, Polygons &p); + +class PolyNode; +typedef std::vector< PolyNode* > PolyNodes; + +class PolyNode +{ +public: + Polygon Contour; + PolyNodes Childs; + PolyNode* Parent; + PolyNode* GetNext(); + bool IsHole(); + int ChildCount(); +private: + PolyNode* GetNextSiblingUp(); + unsigned Index; //node index in Parent.Childs + void AddChild(PolyNode& child); + friend class Clipper; //to access Index +}; + +class PolyTree: public PolyNode +{ +public: + ~PolyTree(){Clear();}; + PolyNode* GetFirst(); + void Clear(); + int Total(); +private: + PolyNodes AllNodes; + friend class Clipper; //to access AllNodes +}; + +enum JoinType { jtSquare, jtRound, jtMiter }; + +bool Orientation(const Polygon &poly); +double Area(const Polygon &poly); +void OffsetPolygons(const Polygons &in_polys, Polygons &out_polys, + double delta, JoinType jointype = jtSquare, double MiterLimit = 2, bool AutoFix = true); + +void SimplifyPolygon(const Polygon &in_poly, Polygons &out_polys, PolyFillType fillType = pftEvenOdd); +void SimplifyPolygons(const Polygons &in_polys, Polygons &out_polys, PolyFillType fillType = pftEvenOdd); +void SimplifyPolygons(Polygons &polys, PolyFillType fillType = pftEvenOdd); + +void CleanPolygon(Polygon& in_poly, Polygon& out_poly, double distance = 1.415); +void CleanPolygons(Polygons& in_polys, Polygons& out_polys, double distance = 1.415); + +void PolyTreeToPolygons(PolyTree& polytree, Polygons& polygons); + +void ReversePolygon(Polygon& p); +void ReversePolygons(Polygons& p); + +//used internally ... +enum EdgeSide { esLeft = 1, esRight = 2}; +enum IntersectProtects { ipNone = 0, ipLeft = 1, ipRight = 2, ipBoth = 3 }; + +struct TEdge { + long64 xbot; + long64 ybot; + long64 xcurr; + long64 ycurr; + long64 xtop; + long64 ytop; + double dx; + long64 deltaX; + long64 deltaY; + long64 tmpX; + PolyType polyType; + EdgeSide side; + int windDelta; //1 or -1 depending on winding direction + int windCnt; + int windCnt2; //winding count of the opposite polytype + int outIdx; + TEdge *next; + TEdge *prev; + TEdge *nextInLML; + TEdge *nextInAEL; + TEdge *prevInAEL; + TEdge *nextInSEL; + TEdge *prevInSEL; +}; + +struct IntersectNode { + TEdge *edge1; + TEdge *edge2; + IntPoint pt; + IntersectNode *next; +}; + +struct LocalMinima { + long64 Y; + TEdge *leftBound; + TEdge *rightBound; + LocalMinima *next; +}; + +struct Scanbeam { + long64 Y; + Scanbeam *next; +}; + +struct OutPt; //forward declaration + +struct OutRec { + int idx; + bool isHole; + OutRec *FirstLeft; //see comments in clipper.pas + PolyNode *polyNode; + OutPt *pts; + OutPt *bottomPt; +}; + +struct OutPt { + int idx; + IntPoint pt; + OutPt *next; + OutPt *prev; +}; + +struct JoinRec { + IntPoint pt1a; + IntPoint pt1b; + int poly1Idx; + IntPoint pt2a; + IntPoint pt2b; + int poly2Idx; +}; + +struct HorzJoinRec { + TEdge *edge; + int savedIdx; +}; + +struct IntRect { long64 left; long64 top; long64 right; long64 bottom; }; + +typedef std::vector < OutRec* > PolyOutList; +typedef std::vector < TEdge* > EdgeList; +typedef std::vector < JoinRec* > JoinList; +typedef std::vector < HorzJoinRec* > HorzJoinList; + +//ClipperBase is the ancestor to the Clipper class. It should not be +//instantiated directly. This class simply abstracts the conversion of sets of +//polygon coordinates into edge objects that are stored in a LocalMinima list. +class ClipperBase +{ +public: + ClipperBase(); + virtual ~ClipperBase(); + bool AddPolygon(const Polygon &pg, PolyType polyType); + bool AddPolygons( const Polygons &ppg, PolyType polyType); + virtual void Clear(); + IntRect GetBounds(); +protected: + void DisposeLocalMinimaList(); + TEdge* AddBoundsToLML(TEdge *e); + void PopLocalMinima(); + virtual void Reset(); + void InsertLocalMinima(LocalMinima *newLm); + LocalMinima *m_CurrentLM; + LocalMinima *m_MinimaList; + bool m_UseFullRange; + EdgeList m_edges; +}; + +class Clipper : public virtual ClipperBase +{ +public: + Clipper(); + ~Clipper(); + bool Execute(ClipType clipType, + Polygons &solution, + PolyFillType subjFillType = pftEvenOdd, + PolyFillType clipFillType = pftEvenOdd); + bool Execute(ClipType clipType, + PolyTree &polytree, + PolyFillType subjFillType = pftEvenOdd, + PolyFillType clipFillType = pftEvenOdd); + void Clear(); + bool ReverseSolution() {return m_ReverseOutput;}; + void ReverseSolution(bool value) {m_ReverseOutput = value;}; +protected: + void Reset(); + virtual bool ExecuteInternal(); +private: + PolyOutList m_PolyOuts; + JoinList m_Joins; + HorzJoinList m_HorizJoins; + ClipType m_ClipType; + Scanbeam *m_Scanbeam; + TEdge *m_ActiveEdges; + TEdge *m_SortedEdges; + IntersectNode *m_IntersectNodes; + bool m_ExecuteLocked; + PolyFillType m_ClipFillType; + PolyFillType m_SubjFillType; + bool m_ReverseOutput; + bool m_UsingPolyTree; + void DisposeScanbeamList(); + void SetWindingCount(TEdge& edge); + bool IsEvenOddFillType(const TEdge& edge) const; + bool IsEvenOddAltFillType(const TEdge& edge) const; + void InsertScanbeam(const long64 Y); + long64 PopScanbeam(); + void InsertLocalMinimaIntoAEL(const long64 botY); + void InsertEdgeIntoAEL(TEdge *edge); + void AddEdgeToSEL(TEdge *edge); + void CopyAELToSEL(); + void DeleteFromSEL(TEdge *e); + void DeleteFromAEL(TEdge *e); + void UpdateEdgeIntoAEL(TEdge *&e); + void SwapPositionsInSEL(TEdge *edge1, TEdge *edge2); + bool IsContributing(const TEdge& edge) const; + bool IsTopHorz(const long64 XPos); + void SwapPositionsInAEL(TEdge *edge1, TEdge *edge2); + void DoMaxima(TEdge *e, long64 topY); + void ProcessHorizontals(); + void ProcessHorizontal(TEdge *horzEdge); + void AddLocalMaxPoly(TEdge *e1, TEdge *e2, const IntPoint &pt); + void AddLocalMinPoly(TEdge *e1, TEdge *e2, const IntPoint &pt); + void AppendPolygon(TEdge *e1, TEdge *e2); + void DoEdge1(TEdge *edge1, TEdge *edge2, const IntPoint &pt); + void DoEdge2(TEdge *edge1, TEdge *edge2, const IntPoint &pt); + void DoBothEdges(TEdge *edge1, TEdge *edge2, const IntPoint &pt); + void IntersectEdges(TEdge *e1, TEdge *e2, + const IntPoint &pt, const IntersectProtects protects); + OutRec* CreateOutRec(); + void AddOutPt(TEdge *e, const IntPoint &pt); + void DisposeAllPolyPts(); + void DisposeOutRec(PolyOutList::size_type index); + bool ProcessIntersections(const long64 botY, const long64 topY); + void AddIntersectNode(TEdge *e1, TEdge *e2, const IntPoint &pt); + void BuildIntersectList(const long64 botY, const long64 topY); + void ProcessIntersectList(); + void ProcessEdgesAtTopOfScanbeam(const long64 topY); + void BuildResult(Polygons& polys); + void BuildResult2(PolyTree& polytree); + void SetHoleState(TEdge *e, OutRec *OutRec); + void DisposeIntersectNodes(); + bool FixupIntersections(); + void FixupOutPolygon(OutRec &outRec); + bool IsHole(TEdge *e); + void FixHoleLinkage(OutRec &outRec); + void AddJoin(TEdge *e1, TEdge *e2, int e1OutIdx = -1, int e2OutIdx = -1); + void ClearJoins(); + void AddHorzJoin(TEdge *e, int idx); + void ClearHorzJoins(); + bool JoinPoints(const JoinRec *j, OutPt *&p1, OutPt *&p2); + void FixupJoinRecs(JoinRec *j, OutPt *pt, unsigned startIdx); + void JoinCommonEdges(); + void FixupFirstLefts1(OutRec* OldOutRec, OutRec* NewOutRec); + void FixupFirstLefts2(OutRec* OldOutRec, OutRec* NewOutRec); +}; + +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ + +class clipperException : public std::exception +{ + public: + clipperException(const char* description): m_descr(description) {} + virtual ~clipperException() throw() {} + virtual const char* what() const throw() {return m_descr.c_str();} + private: + std::string m_descr; +}; +//------------------------------------------------------------------------------ + +} //ClipperLib namespace + +#endif //clipper_hpp + + diff --git a/clipper/cpp/cpp_agg/agg_conv_clipper.h b/clipper/cpp/cpp_agg/agg_conv_clipper.h new file mode 100755 index 0000000..55532ce --- /dev/null +++ b/clipper/cpp/cpp_agg/agg_conv_clipper.h @@ -0,0 +1,295 @@ +/******************************************************************************* +* * +* Author : Angus Johnson * +* Version : 1.1 * +* Date : 4 April 2011 * +* Website : http://www.angusj.com * +* Copyright : Angus Johnson 2010-2011 * +* * +* License: * +* Use, modification & distribution is subject to Boost Software License Ver 1. * +* http://www.boost.org/LICENSE_1_0.txt * +* * +*******************************************************************************/ + +#ifndef AGG_CONV_CLIPPER_INCLUDED +#define AGG_CONV_CLIPPER_INCLUDED + +#include +#include "agg_basics.h" +#include "agg_array.h" +#include "../clipper.hpp" + +namespace agg +{ + enum clipper_op_e { clipper_or, + clipper_and, clipper_xor, clipper_a_minus_b, clipper_b_minus_a }; + enum clipper_PolyFillType {clipper_even_odd, clipper_non_zero, clipper_positive, clipper_negative}; + + template class conv_clipper + { + enum status { status_move_to, status_line_to, status_stop }; + typedef VSA source_a_type; + typedef VSB source_b_type; + typedef conv_clipper self_type; + + private: + source_a_type* m_src_a; + source_b_type* m_src_b; + status m_status; + int m_vertex; + int m_contour; + int m_scaling_factor; + clipper_op_e m_operation; + pod_bvector m_vertex_accumulator; + ClipperLib::Polygons m_poly_a; + ClipperLib::Polygons m_poly_b; + ClipperLib::Polygons m_result; + ClipperLib::Clipper m_clipper; + clipper_PolyFillType m_subjFillType; + clipper_PolyFillType m_clipFillType; + + int Round(double val) + { + if ((val < 0)) return (int)(val - 0.5); else return (int)(val + 0.5); + } + + public: + conv_clipper(source_a_type &a, source_b_type &b, + clipper_op_e op = clipper_or, + clipper_PolyFillType subjFillType = clipper_even_odd, + clipper_PolyFillType clipFillType = clipper_even_odd, + int scaling_factor = 2) : + m_src_a(&a), + m_src_b(&b), + m_status(status_move_to), + m_vertex(-1), + m_contour(-1), + m_operation(op), + m_subjFillType(subjFillType), + m_clipFillType(clipFillType) + { + m_scaling_factor = std::max(std::min(scaling_factor, 6),0); + m_scaling_factor = Round(std::pow((double)10, m_scaling_factor)); + } + + ~conv_clipper() + { + } + + void attach1(VSA &source, clipper_PolyFillType subjFillType = clipper_even_odd) + { m_src_a = &source; m_subjFillType = subjFillType; } + void attach2(VSB &source, clipper_PolyFillType clipFillType = clipper_even_odd) + { m_src_b = &source; m_clipFillType = clipFillType; } + + void operation(clipper_op_e v) { m_operation = v; } + + void rewind(unsigned path_id); + unsigned vertex(double* x, double* y); + + bool next_contour(); + bool next_vertex(double* x, double* y); + void start_extracting(); + void add_vertex_(double &x, double &y); + void end_contour(ClipperLib::Polygons &p); + + template void add(VS &src, ClipperLib::Polygons &p){ + unsigned cmd; + double x; double y; double start_x; double start_y; + bool starting_first_line; + + start_x = 0.0; + start_y = 0.0; + starting_first_line = true; + p.resize(0); + + cmd = src->vertex( &x , &y ); + while(!is_stop(cmd)) + { + if(is_vertex(cmd)) + { + if(is_move_to(cmd)) + { + if(!starting_first_line ) end_contour(p); + start_x = x; + start_y = y; + } + add_vertex_( x, y ); + starting_first_line = false; + } + else if(is_end_poly(cmd)) + { + if(!starting_first_line && is_closed(cmd)) + add_vertex_( start_x, start_y ); + } + cmd = src->vertex( &x, &y ); + } + end_contour(p); + } + }; + + //------------------------------------------------------------------------ + + template + void conv_clipper::start_extracting() + { + m_status = status_move_to; + m_contour = -1; + m_vertex = -1; + } + //------------------------------------------------------------------------------ + + template + void conv_clipper::rewind(unsigned path_id) + { + m_src_a->rewind( path_id ); + m_src_b->rewind( path_id ); + + add( m_src_a , m_poly_a ); + add( m_src_b , m_poly_b ); + m_result.resize(0); + + ClipperLib::PolyFillType pftSubj, pftClip; + switch (m_subjFillType) + { + case clipper_even_odd: pftSubj = ClipperLib::pftEvenOdd; break; + case clipper_non_zero: pftSubj = ClipperLib::pftNonZero; break; + case clipper_positive: pftSubj = ClipperLib::pftPositive; break; + default: pftSubj = ClipperLib::pftNegative; + } + switch (m_clipFillType) + { + case clipper_even_odd: pftClip = ClipperLib::pftEvenOdd; break; + case clipper_non_zero: pftClip = ClipperLib::pftNonZero; break; + case clipper_positive: pftClip = ClipperLib::pftPositive; break; + default: pftClip = ClipperLib::pftNegative; + } + + m_clipper.Clear(); + switch( m_operation ) { + case clipper_or: + { + m_clipper.AddPolygons( m_poly_a , ClipperLib::ptSubject ); + m_clipper.AddPolygons( m_poly_b , ClipperLib::ptClip ); + m_clipper.Execute( ClipperLib::ctUnion , m_result , pftSubj, pftClip); + break; + } + case clipper_and: + { + m_clipper.AddPolygons( m_poly_a , ClipperLib::ptSubject ); + m_clipper.AddPolygons( m_poly_b , ClipperLib::ptClip ); + m_clipper.Execute( ClipperLib::ctIntersection , m_result, pftSubj, pftClip ); + break; + } + case clipper_xor: + { + m_clipper.AddPolygons( m_poly_a , ClipperLib::ptSubject ); + m_clipper.AddPolygons( m_poly_b , ClipperLib::ptClip ); + m_clipper.Execute( ClipperLib::ctXor , m_result, pftSubj, pftClip ); + break; + } + case clipper_a_minus_b: + { + m_clipper.AddPolygons( m_poly_a , ClipperLib::ptSubject ); + m_clipper.AddPolygons( m_poly_b , ClipperLib::ptClip ); + m_clipper.Execute( ClipperLib::ctDifference , m_result, pftSubj, pftClip ); + break; + } + case clipper_b_minus_a: + { + m_clipper.AddPolygons( m_poly_b , ClipperLib::ptSubject ); + m_clipper.AddPolygons( m_poly_a , ClipperLib::ptClip ); + m_clipper.Execute( ClipperLib::ctDifference , m_result, pftSubj, pftClip ); + break; + } + } + start_extracting(); + } + //------------------------------------------------------------------------------ + + template + void conv_clipper::end_contour( ClipperLib::Polygons &p) + { + unsigned i, len; + + if( m_vertex_accumulator.size() < 3 ) return; + len = p.size(); + p.resize(len+1); + p[len].resize(m_vertex_accumulator.size()); + for( i = 0 ; i < m_vertex_accumulator.size() ; i++ ) + p[len][i] = m_vertex_accumulator[i]; + m_vertex_accumulator.remove_all(); + } + //------------------------------------------------------------------------------ + + template + void conv_clipper::add_vertex_(double &x, double &y) + { + ClipperLib::IntPoint v; + + v.X = Round(x * m_scaling_factor); + v.Y = Round(y * m_scaling_factor); + m_vertex_accumulator.add( v ); + } + //------------------------------------------------------------------------------ + + template + bool conv_clipper::next_contour() + { + m_contour++; + if(m_contour >= (int)m_result.size()) return false; + m_vertex =-1; + return true; +} +//------------------------------------------------------------------------------ + + template + bool conv_clipper::next_vertex(double *x, double *y) + { + m_vertex++; + if(m_vertex >= (int)m_result[m_contour].size()) return false; + *x = (double)m_result[ m_contour ][ m_vertex ].X / m_scaling_factor; + *y = (double)m_result[ m_contour ][ m_vertex ].Y / m_scaling_factor; + return true; + } + //------------------------------------------------------------------------------ + + template + unsigned conv_clipper::vertex(double *x, double *y) +{ + if( m_status == status_move_to ) + { + if( next_contour() ) + { + if( next_vertex( x, y ) ) + { + m_status =status_line_to; + return path_cmd_move_to; + } + else + { + m_status = status_stop; + return path_cmd_end_poly | path_flags_close; + } + } + else + return path_cmd_stop; + } + else + { + if( next_vertex( x, y ) ) + { + return path_cmd_line_to; + } + else + { + m_status = status_move_to; + return path_cmd_end_poly | path_flags_close; + } + } +} +//------------------------------------------------------------------------------ + + +} //namespace agg +#endif //AGG_CONV_CLIPPER_INCLUDED diff --git a/clipper/cpp/cpp_agg/clipper_test.cpp b/clipper/cpp/cpp_agg/clipper_test.cpp new file mode 100755 index 0000000..ffbaa64 --- /dev/null +++ b/clipper/cpp/cpp_agg/clipper_test.cpp @@ -0,0 +1,574 @@ +#include +#include "agg_basics.h" +#include "agg_rendering_buffer.h" +#include "agg_rasterizer_scanline_aa.h" +#include "agg_scanline_u.h" +#include "agg_scanline_p.h" +#include "agg_renderer_scanline.h" +#include "agg_renderer_primitives.h" +#include "agg_conv_curve.h" +#include "agg_conv_stroke.h" +#include "agg_conv_clip_polygon.h" +#include "agg_gsv_text.h" +#include "agg_pixfmt_rgb.h" +#include "agg_platform_support.h" + +#include "agg_slider_ctrl.h" +#include "agg_cbox_ctrl.h" +#include "agg_rbox_ctrl.h" + +#include "agg_conv_clipper.h" +#include "windows.h" + +enum flip_y_e { flip_y = true }; + + +class spiral +{ +public: + spiral(double x, double y, double r1, double r2, double step, double start_angle=0) : + m_x(x), + m_y(y), + m_r1(r1), + m_r2(r2), + m_step(step), + m_start_angle(start_angle), + m_angle(start_angle), + m_da(agg::deg2rad(4.0)), + m_dr(m_step / 90.0) + { + } + + void rewind(unsigned) + { + m_angle = m_start_angle; + m_curr_r = m_r1; + m_start = true; + } + + unsigned vertex(double* x, double* y) + { + if(m_curr_r > m_r2) return agg::path_cmd_stop; + + *x = m_x + cos(m_angle) * m_curr_r; + *y = m_y + sin(m_angle) * m_curr_r; + m_curr_r += m_dr; + m_angle += m_da; + if(m_start) + { + m_start = false; + return agg::path_cmd_move_to; + } + return agg::path_cmd_line_to; + } + +private: + double m_x; + double m_y; + double m_r1; + double m_r2; + double m_step; + double m_start_angle; + + double m_angle; + double m_curr_r; + double m_da; + double m_dr; + bool m_start; +}; + + + +namespace agg +{ + // A simple counter of points and contours + template struct conv_poly_counter + { + unsigned m_contours; + unsigned m_points; + + conv_poly_counter(Src& src) : m_src(&src), m_contours(0), m_points(0) {} + + void rewind(unsigned path_id) + { + m_contours = 0; + m_points = 0; + m_src->rewind(path_id); + } + + unsigned vertex(double* x, double* y) + { + unsigned cmd = m_src->vertex(x, y); + if(is_vertex(cmd)) ++m_points; + if(is_move_to(cmd)) ++m_contours; + return cmd; + } + + private: + Src* m_src; + }; +} + + +void make_gb_poly(agg::path_storage& ps); +void make_arrows(agg::path_storage& ps); + + +class the_application : public agg::platform_support +{ + agg::rbox_ctrl m_polygons; + agg::rbox_ctrl m_operation; + double m_x; + double m_y; + + virtual void on_key(int x, int y, unsigned key, unsigned flags) + { + if(key == agg::key_escape) exit(0); + + } + +public: + the_application(agg::pix_format_e format, bool flip_y) : + agg::platform_support(format, flip_y), + m_polygons (5.0, 5.0, 5.0+205.0, 110.0, !flip_y), + m_operation(555.0, 5.0, 555.0+80.0, 130.0, !flip_y) + { + m_operation.add_item("None"); + m_operation.add_item("OR"); + m_operation.add_item("AND"); + m_operation.add_item("XOR"); + m_operation.add_item("A-B"); + m_operation.add_item("B-A"); + m_operation.cur_item(2); + add_ctrl(m_operation); + + m_polygons.add_item("Two Simple Paths"); + m_polygons.add_item("Closed Stroke"); + m_polygons.add_item("Great Britain and Arrows"); + m_polygons.add_item("Great Britain and Spiral"); + m_polygons.add_item("Spiral and Glyph"); + m_polygons.cur_item(3); + add_ctrl(m_polygons); + } + + + template + void perform_rendering(Scanline &sl, Ras &ras, Ren &ren, Clp &clp) + { + if(m_operation.cur_item() > 0) + { + ras.reset(); + switch(m_operation.cur_item()) + { + case 1: clp.operation(agg::clipper_or); break; + case 2: clp.operation(agg::clipper_and); break; + case 3: clp.operation(agg::clipper_xor); break; + case 4: clp.operation(agg::clipper_a_minus_b); break; + case 5: clp.operation(agg::clipper_b_minus_a); break; + } + agg::conv_poly_counter counter(clp); + + + start_timer(); + counter.rewind(0); + double t1 = elapsed_time(); + + agg::path_storage ps; + double x; + double y; + unsigned cmd; + start_timer(); + while(!agg::is_stop(cmd = counter.vertex(&x, &y))) + { + if(agg::is_move_to(cmd)) + ps.move_to(x, y); + else if(agg::is_line_to(cmd)) + ps.line_to(x, y); + else if(agg::is_close(cmd)) + ps.close_polygon(); + } + ras.add_path(ps); + ren.color(agg::rgba(0.25, 0.9, 0.25, 0.65)); + agg::render_scanlines(ras, sl, ren); + double t2 = elapsed_time(); + + agg::conv_stroke stroke(ps); + stroke.width(0.4); + ras.add_path(stroke); + ren.color(agg::rgba(0, 0, 0)); + agg::render_scanlines(ras, sl, ren); + + char buf[100]; + sprintf_s(buf, "Contours: %d Points: %d", counter.m_contours, counter.m_points); + agg::gsv_text txt; + agg::conv_stroke txt_stroke(txt); + txt_stroke.width(1.5); + txt_stroke.line_cap(agg::round_cap); + txt.size(10.0); + txt.start_point(250, 5); + txt.text(buf); + ras.add_path(txt_stroke); + ren.color(agg::rgba(0.0, 0.0, 0.0)); + agg::render_scanlines(ras, sl, ren); + + sprintf_s(buf, "Clipper=%.3fms Render=%.3fms", t1, t2); + txt.start_point(250, 20); + txt.text(buf); + ras.add_path(txt_stroke); + ren.color(agg::rgba(0.0, 0.0, 0.0)); + agg::render_scanlines(ras, sl, ren); + } + } + + + template + unsigned render_clipper(Scanline& sl, Ras& ras) + { + agg::pixfmt_bgr24 pf(rbuf_window()); + agg::renderer_base rb(pf); + agg::renderer_scanline_aa_solid > ren(rb); + + + switch(m_polygons.cur_item()) + { + case 0: + { + //------------------------------------ + // Two simple paths + // + agg::path_storage ps1; + agg::path_storage ps2; + + agg::conv_clipper clp(ps1, ps2, agg::clipper_or, agg::clipper_non_zero, agg::clipper_non_zero); + + double x = m_x - initial_width()/2 + 100; + double y = m_y - initial_height()/2 + 100; + ps1.move_to(x+140, y+145); + ps1.line_to(x+225, y+44); + ps1.line_to(x+296, y+219); + ps1.close_polygon(); + + ps1.line_to(x+226, y+289); + ps1.line_to(x+82, y+292); + + ps1.move_to(x+220, y+222); + ps1.line_to(x+363, y+249); + ps1.line_to(x+265, y+331); + + ps1.move_to(x+242, y+243); + ps1.line_to(x+268, y+309); + ps1.line_to(x+325, y+261); + + ps1.move_to(x+259, y+259); + ps1.line_to(x+273, y+288); + ps1.line_to(x+298, y+266); + + ps2.move_to(100+32, 100+77); + ps2.line_to(100+473, 100+263); + ps2.line_to(100+351, 100+290); + ps2.line_to(100+354, 100+374); + + ras.reset(); + ras.add_path(ps1); + ren.color(agg::rgba(0, 0, 0, 0.1)); + agg::render_scanlines(ras, sl, ren); + + ras.reset(); + ras.add_path(ps2); + ren.color(agg::rgba(0, 0.6, 0, 0.1)); + agg::render_scanlines(ras, sl, ren); + + perform_rendering(sl, ras, ren, clp); + } + break; + + case 1: + { + //------------------------------------ + // Closed stroke + // + agg::path_storage ps1; + agg::path_storage ps2; + agg::conv_stroke stroke(ps2); + stroke.width(10.0); + + agg::conv_clipper > clp(ps1, stroke, agg::clipper_or, agg::clipper_non_zero, agg::clipper_non_zero); + + + double x = m_x - initial_width()/2 + 100; + double y = m_y - initial_height()/2 + 100; + ps1.move_to(x+140, y+145); + ps1.line_to(x+225, y+44); + ps1.line_to(x+296, y+219); + ps1.close_polygon(); + + ps1.line_to(x+226, y+289); + ps1.line_to(x+82, y+292); + + ps1.move_to(x+220-50, y+222); + ps1.line_to(x+265-50, y+331); + ps1.line_to(x+363-50, y+249); + ps1.close_polygon(agg::path_flags_ccw); + + ps2.move_to(100+32, 100+77); + ps2.line_to(100+473, 100+263); + ps2.line_to(100+351, 100+290); + ps2.line_to(100+354, 100+374); + ps2.close_polygon(); + + ras.reset(); + ras.add_path(ps1); + ren.color(agg::rgba(0, 0, 0, 0.1)); + agg::render_scanlines(ras, sl, ren); + + ras.reset(); + ras.add_path(stroke); + ren.color(agg::rgba(0, 0.6, 0, 0.1)); + agg::render_scanlines(ras, sl, ren); + + perform_rendering(sl, ras, ren, clp); + } + break; + + + case 2: + { + //------------------------------------ + // Great Britain and Arrows + // + agg::path_storage gb_poly; + agg::path_storage arrows; + make_gb_poly(gb_poly); + make_arrows(arrows); + + agg::trans_affine mtx1; + agg::trans_affine mtx2; + mtx1 *= agg::trans_affine_translation(-1150, -1150); + mtx1 *= agg::trans_affine_scaling(2.0); + + mtx2 = mtx1; + mtx2 *= agg::trans_affine_translation(m_x - initial_width()/2, + m_y - initial_height()/2); + + agg::conv_transform trans_gb_poly(gb_poly, mtx1); + agg::conv_transform trans_arrows(arrows, mtx2); + + agg::conv_clipper, + agg::conv_transform > clp(trans_gb_poly, trans_arrows, agg::clipper_or, agg::clipper_non_zero, agg::clipper_non_zero); + + ras.add_path(trans_gb_poly); + ren.color(agg::rgba(0.5, 0.5, 0, 0.1)); + agg::render_scanlines(ras, sl, ren); + + agg::conv_stroke > stroke_gb_poly(trans_gb_poly); + stroke_gb_poly.width(0.1); + ras.add_path(stroke_gb_poly); + ren.color(agg::rgba(0, 0, 0)); + agg::render_scanlines(ras, sl, ren); + + ras.add_path(trans_arrows); + ren.color(agg::rgba(0.0, 0.5, 0.5, 0.1)); + agg::render_scanlines(ras, sl, ren); + + perform_rendering(sl, ras, ren, clp); + } + break; + + + case 3: + { + //------------------------------------ + // Great Britain and a Spiral + // + spiral sp(m_x, m_y, 10, 150, 30, 0.0); + agg::conv_stroke stroke(sp); + stroke.width(15.0); + + agg::path_storage gb_poly; + make_gb_poly(gb_poly); + + agg::trans_affine mtx; + mtx *= agg::trans_affine_translation(-1150, -1150); + mtx *= agg::trans_affine_scaling(2.0); + + agg::conv_transform trans_gb_poly(gb_poly, mtx); + + agg::conv_clipper, + agg::conv_stroke > clp(trans_gb_poly, stroke, agg::clipper_or, agg::clipper_non_zero, agg::clipper_non_zero); + + ras.add_path(trans_gb_poly); + ren.color(agg::rgba(0.5, 0.5, 0, 0.1)); + agg::render_scanlines(ras, sl, ren); + + agg::conv_stroke > stroke_gb_poly(trans_gb_poly); + stroke_gb_poly.width(0.1); + ras.add_path(stroke_gb_poly); + ren.color(agg::rgba(0, 0, 0)); + agg::render_scanlines(ras, sl, ren); + + ras.add_path(stroke); + ren.color(agg::rgba(0.0, 0.5, 0.5, 0.1)); + agg::render_scanlines(ras, sl, ren); + + perform_rendering(sl, ras, ren, clp); + } + break; + + + case 4: + { + //------------------------------------ + // Spiral and glyph + // + spiral sp(m_x, m_y, 10, 150, 30, 0.0); + agg::conv_stroke stroke(sp); + stroke.width(15.0); + + agg::path_storage glyph; + glyph.move_to(28.47, 6.45); + glyph.curve3(21.58, 1.12, 19.82, 0.29); + glyph.curve3(17.19, -0.93, 14.21, -0.93); + glyph.curve3(9.57, -0.93, 6.57, 2.25); + glyph.curve3(3.56, 5.42, 3.56, 10.60); + glyph.curve3(3.56, 13.87, 5.03, 16.26); + glyph.curve3(7.03, 19.58, 11.99, 22.51); + glyph.curve3(16.94, 25.44, 28.47, 29.64); + glyph.line_to(28.47, 31.40); + glyph.curve3(28.47, 38.09, 26.34, 40.58); + glyph.curve3(24.22, 43.07, 20.17, 43.07); + glyph.curve3(17.09, 43.07, 15.28, 41.41); + glyph.curve3(13.43, 39.75, 13.43, 37.60); + glyph.line_to(13.53, 34.77); + glyph.curve3(13.53, 32.52, 12.38, 31.30); + glyph.curve3(11.23, 30.08, 9.38, 30.08); + glyph.curve3(7.57, 30.08, 6.42, 31.35); + glyph.curve3(5.27, 32.62, 5.27, 34.81); + glyph.curve3(5.27, 39.01, 9.57, 42.53); + glyph.curve3(13.87, 46.04, 21.63, 46.04); + glyph.curve3(27.59, 46.04, 31.40, 44.04); + glyph.curve3(34.28, 42.53, 35.64, 39.31); + glyph.curve3(36.52, 37.21, 36.52, 30.71); + glyph.line_to(36.52, 15.53); + glyph.curve3(36.52, 9.13, 36.77, 7.69); + glyph.curve3(37.01, 6.25, 37.57, 5.76); + glyph.curve3(38.13, 5.27, 38.87, 5.27); + glyph.curve3(39.65, 5.27, 40.23, 5.62); + glyph.curve3(41.26, 6.25, 44.19, 9.18); + glyph.line_to(44.19, 6.45); + glyph.curve3(38.72, -0.88, 33.74, -0.88); + glyph.curve3(31.35, -0.88, 29.93, 0.78); + glyph.curve3(28.52, 2.44, 28.47, 6.45); + glyph.close_polygon(); + + glyph.move_to(28.47, 9.62); + glyph.line_to(28.47, 26.66); + glyph.curve3(21.09, 23.73, 18.95, 22.51); + glyph.curve3(15.09, 20.36, 13.43, 18.02); + glyph.curve3(11.77, 15.67, 11.77, 12.89); + glyph.curve3(11.77, 9.38, 13.87, 7.06); + glyph.curve3(15.97, 4.74, 18.70, 4.74); + glyph.curve3(22.41, 4.74, 28.47, 9.62); + glyph.close_polygon(); + + agg::trans_affine mtx; + mtx *= agg::trans_affine_scaling(4.0); + mtx *= agg::trans_affine_translation(220, 200); + agg::conv_transform trans(glyph, mtx); + agg::conv_curve > curve(trans); + + agg::conv_clipper, + agg::conv_curve< + agg::conv_transform< + agg::path_storage> > > clp(stroke, curve, agg::clipper_or, agg::clipper_non_zero, agg::clipper_non_zero); + + ras.reset(); + ras.add_path(stroke); + ren.color(agg::rgba(0, 0, 0, 0.1)); + agg::render_scanlines(ras, sl, ren); + + ras.reset(); + ras.add_path(curve); + ren.color(agg::rgba(0, 0.6, 0, 0.1)); + agg::render_scanlines(ras, sl, ren); + + perform_rendering(sl, ras, ren, clp); + } + break; + } + + return 0; + } + + + virtual void on_init() + { + m_x = width() / 2.0; + m_y = height() / 2.0; + } + + virtual void on_draw() + { + typedef agg::renderer_base base_ren_type; + + agg::pixfmt_bgr24 pf(rbuf_window()); + base_ren_type ren_base(pf); + ren_base.clear(agg::rgba(1,1,1)); + + agg::scanline_u8 sl; + agg::rasterizer_scanline_aa<> ras; + + render_clipper(sl, ras); + + agg::render_ctrl(ras, sl, ren_base, m_polygons); + agg::render_ctrl(ras, sl, ren_base, m_operation); + } + + virtual void on_mouse_button_down(int x, int y, unsigned flags) + { + if(flags & agg::mouse_left) + { + m_x = x; + m_y = y; + force_redraw(); + } + } + + + virtual void on_mouse_move(int x, int y, unsigned flags) + { + if(flags & agg::mouse_left) + { + m_x = x; + m_y = y; + force_redraw(); + } + } + + + +}; + + +int agg_main(int argc, char* argv[]) +{ + the_application app(agg::pix_format_bgr24, flip_y); + app.caption("AGG Example. Clipper"); + + if(app.init(640, 520, agg::window_resize)) + { + //replace the main window icon with Resource Icon #1 ... + HWND w = GetActiveWindow(); + HMODULE m = GetModuleHandle(0); //hInstance + HANDLE small_ico = LoadImage(m, MAKEINTRESOURCE(1), IMAGE_ICON, 16, 16, 0); + HANDLE big_ico = LoadImage(m, MAKEINTRESOURCE(1), IMAGE_ICON, 32, 32, 0); + SendMessage(w, WM_SETICON, ICON_SMALL, (LPARAM)small_ico); + SendMessage(w, WM_SETICON, ICON_BIG, (LPARAM)big_ico); + + //main message loop ... + return app.run(); + } + return 0; +} + + diff --git a/clipper/cpp/cpp_agg/clipper_test.exe b/clipper/cpp/cpp_agg/clipper_test.exe new file mode 100755 index 0000000000000000000000000000000000000000..2311a437c9a6f2e4c73cb7758b127d4f87f0eb44 GIT binary patch literal 240640 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 literal 0 HcmV?d00001 diff --git a/clipper/cpp/cpp_agg/clipper_test.sln b/clipper/cpp/cpp_agg/clipper_test.sln new file mode 100755 index 0000000..2c46499 --- /dev/null +++ b/clipper/cpp/cpp_agg/clipper_test.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual C++ Express 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "clipper_test", "clipper_test.vcxproj", "{4DF13A7A-6137-E76C-8C62-F591D0E4B69F}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {4DF13A7A-6137-E76C-8C62-F591D0E4B69F}.Debug|Win32.ActiveCfg = Debug|Win32 + {4DF13A7A-6137-E76C-8C62-F591D0E4B69F}.Debug|Win32.Build.0 = Debug|Win32 + {4DF13A7A-6137-E76C-8C62-F591D0E4B69F}.Release|Win32.ActiveCfg = Release|Win32 + {4DF13A7A-6137-E76C-8C62-F591D0E4B69F}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/clipper/cpp/cpp_agg/clipper_test.vcxproj b/clipper/cpp/cpp_agg/clipper_test.vcxproj new file mode 100755 index 0000000..9f4aaf2 --- /dev/null +++ b/clipper/cpp/cpp_agg/clipper_test.vcxproj @@ -0,0 +1,114 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + Win32Proj + clipper_test + + + + Application + true + + + Application + false + + + + + + + + + + + + + true + C:\Program Files (x86)\Borland\agg-2.5\include;C:\Program Files (x86)\Borland\agg-2.5\include\platform;C:\Program Files (x86)\Borland\agg-2.5\include\platform\win32;C:\Program Files (x86)\Borland\agg-2.5\include\ctrl;C:\Program Files (x86)\Borland\agg-2.5\include\util;$(IncludePath) + + + true + C:\Program Files (x86)\Borland\agg-2.5\include;C:\Program Files (x86)\Borland\agg-2.5\include\platform;C:\Program Files (x86)\Borland\agg-2.5\include\platform\win32;C:\Program Files (x86)\Borland\agg-2.5\include\ctrl;C:\Program Files (x86)\Borland\agg-2.5\include\util;$(IncludePath) + + + + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + Level3 + ProgramDatabase + Disabled + + + MachineX86 + true + Windows + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + ProgramDatabase + + + MachineX86 + true + Windows + true + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/clipper/cpp/cpp_agg/clipper_test.vcxproj.filters b/clipper/cpp/cpp_agg/clipper_test.vcxproj.filters new file mode 100755 index 0000000..6a12557 --- /dev/null +++ b/clipper/cpp/cpp_agg/clipper_test.vcxproj.filters @@ -0,0 +1,118 @@ + + + + + + ClipperLib + + + agg_src + + + agg_src + + + agg_src + + + agg_src + + + agg_src + + + agg_src + + + agg_src + + + agg_src + + + agg_src + + + agg_src + + + agg_src + + + agg_src + + + agg_src + + + agg_src + + + agg_src + + + agg_src + + + agg_src + + + agg_src + + + agg_src + + + agg_src + + + agg_src + + + agg_src + + + agg_src + + + agg_src + + + agg_src + + + agg_src + + + agg_src + + + agg_src + + + agg_src + + + agg_src + + + + + {31703eea-b46a-4b7c-93fe-7b3889404c6f} + + + {0d7823fd-c31f-4f5d-b1f5-3f3c91751bf3} + + + {0ea31d0f-7e25-4f22-964b-8c74b5ced2fd} + + + + + ClipperLib + + + agg_clipper + + + \ No newline at end of file diff --git a/clipper/cpp/cpp_agg/icon.res b/clipper/cpp/cpp_agg/icon.res new file mode 100755 index 0000000000000000000000000000000000000000..a4fc1a701c1e02251b98d56d49031b54cf400cf3 GIT binary patch literal 5556 zcmcgw4Nz3q6@L5P+g$-+VG(ozaa}?A3*sNFT@<1yMkgwugE5W78qlJh5YQ-ziTDF% zsz@6r(@YpOnvBLo(HN&%A_`hb!z5LkWUAHFq#|*WIMFd_lU8&3ovZK7F1wpu+tD}k z?R|UiJ?A_3oOA!4BuSDTAi52_dOUALYV8X87(`oEWQeMDO2LaA$OjDK4KMfMaVc%h zK=gf}@}dCm0stPn{||Ua?5$W_~J-fQ-bA|)Eg0cJ3^~Tc*kxDv>)q~9Yr^=*T%-3_FRmX-En@N^UlvGeiD=vLakM2Dv_*>@KZm|r| z3yR$~ilg+`zfcyMRY26bcr%}X!II2GTIX(T^6)IS>UbiDMB$?tZ*(58f7%%f` z(EQ(Zho60=`2jwd7K{yXeQXuzN3N=+x?a}b+m5M?FM7258o!9u-wspfg7}-rqqD)p z;m8c7Ha#kejOI{UaO8v+2iq}w$8N8Bzx?pQxi@RII0T#%Jipt1ney+b@OX;oKTyO# z^KYP1^Z%=j+r9Gjk3YBm2jk!MQ!zk0uWR)2@5-ok-&RuP5E`62LCmc{-0tI7)leD` zHkL~As_5Ox$`L87AIsm zmmE_{+lP?sKh_5bhFsDo%9yjJZEsxW4?@doCQbu*Jx#@Sl_^Z188#h z1^9LU*H>*OMF|nM^V-^5U!ecICNk&PB~=tRVzgKw$tJ2APS3)rA3{84tm_$ z+%teLzF!*6oH&P?f73u0J~|+BDVX_}Dz6KTF=qag*Vf10KJ3NKV=O!Pu2((#M&m!x zy47p$2fO~*<%R9=59KXisdI4NPp;oUj{J$F+{s~I>z~H&zV_eE`ip$1aViJMr1Yh@ ztkJ|d9}zcD8cQy!nm6haTodPMh;yZ_zCAI$y>&SAh8z#(99s=Ou(<1KwW#SnXZmg#&)iSfrz zn#*;5_UYP{ON3wC~ME0Ot_EYb}BeJRiff^H*0*){mdIHVQi~ojXiv zLsLECpz*giKPAp;kY)a$&tJ^v?|~jZe_m&uyqEL&^Y=L!a0Adttgs&rjxN{C1rD9Qyk7r!T$#OC9v{I_YYiuFRg&KYv?> zyone|a`iUoyQkc~>_z_Y-GTR&RleHqbscyun7`d9pS{;y{`7;J&+cXZ+WplN-5{bb zfcJ>LH`B3pg_`ON)GkS@fV|IuYmzhwuxLP?1uz2!K)O?!xgGBU?U1R1tOSgQE`m;i zZss6rx`R`+2wyDh=tRWdF=V_+Qt$5=k*Ko+|L=DU_{Zi{_H{#5&=2z52sri^#wF*d zdpn)#z8+t~&>ibkTFyJwmf746nfQ((bxY?H1FwJhd>$1gXHZnUgC^P14x=sBmk#K@ z=2Z9p%PMDWX(+ILed)D&Vl=K^Lm9=TRQdiHnm2hk?!dMl-0Md6)&U!0#zbxUGG*#? zv45ow8&1zuRa4@qTv~SVinyzl&o34_p`#miczvfC*)Q}^VZ%nTw=DkPBg(F*q+gvr zEB^CcPm^c6AivSw2K+aktW3U^gL~urL+u{>6Yo(hpPH0Tn^vzEHefCF@FnDvPBlCv z+F}P~(9%zPJanwMe3c&Ce@NWT5=J^{ge``g>Yj@jw@4gKzNTUsjeLB8hphYg?a7ZX zP|+*fDK;$w@-1hyoM8LwA56V5Bp>(r?yFw%eCJDeU^Kb1$5L%|1-)1h!}c3AAK2wZ zqhjspx2n&5PK!={NR!sSK+~FD()DDP&J|Tt?#2e_<*kN_gZ|0M?cTti=$A*@mkRM`Qd2%q0m aIn1(TM;Bg&`0J}diWI+giPtb5)PDh&WBnok literal 0 HcmV?d00001 diff --git a/clipper/cpp/cpp_cairo/Cairo Resources.txt b/clipper/cpp/cpp_cairo/Cairo Resources.txt new file mode 100755 index 0000000..e868eec --- /dev/null +++ b/clipper/cpp/cpp_cairo/Cairo Resources.txt @@ -0,0 +1,6 @@ +http://cairographics.org/ + +The Windows dynamic linked libraries necessary to run Cairo can be downloaded from +http://www.gtk.org/download/win32.php +All the dlls listed under the heading "Required third party dependencies" are +required except gettext-runtime.dll. diff --git a/clipper/cpp/cpp_cairo/cairo_clipper.cbproj b/clipper/cpp/cpp_cairo/cairo_clipper.cbproj new file mode 100755 index 0000000..e781217 --- /dev/null +++ b/clipper/cpp/cpp_cairo/cairo_clipper.cbproj @@ -0,0 +1,155 @@ + + + {EA7CCDE7-B2DF-458D-BEFC-CBA442BF2E3A} + 12.0 + Release + + + true + + + true + Base + true + + + true + Base + true + + + exe + vcl.bpi;rtl.bpi;vclx.bpi;vclactnband.bpi;dbrtl.bpi;vcldb.bpi;vcldbx.bpi;bdertl.bpi;dsnap.bpi;dsnapcon.bpi;TeeUI.bpi;TeeDB.bpi;Tee.bpi;adortl.bpi;IndyCore.bpi;IndySystem.bpi;IndyProtocols.bpi;VclSmp.bpi;dbexpress.bpi;DbxCommonDriver.bpi;DataSnapIndy10ServerTransport.bpi;DataSnapProviderClient.bpi;DataSnapServer.bpi;DbxClientDriver.bpi;DBXInterBaseDriver.bpi;DBXMySQLDriver.bpi;dbxcds.bpi;DBXSybaseASEDriver.bpi;DBXSybaseASADriver.bpi;DBXOracleDriver.bpi;DBXMSSQLDriver.bpi;DBXInformixDriver.bpi;DBXDb2Driver.bpi;bcbie.bpi;xmlrtl.bpi;bcbsmp.bpi;GR32_CB6.bpi;GR32_DSGN_CB6.bpi + rtl.lib + true + rtl.lib + CppGuiApplication + ..\cairo_src;..\cairo_dlls;$(BCC_IncludePath) + JPHNE + NO_STRICT + true + ..\src;..\..\cpp;$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\cairo_dlls;$(IncludePath) + ..\..\cpp;$(BDS)\lib\obj;$(BDS)\lib\psdk;..\cairo_src;$(ILINK_LibraryPath) + false + true + + + false + true + false + true + _DEBUG;$(Defines) + false + Debug + true + None + DEBUG + true + true + true + $(BDS)\lib\debug;$(ILINK_LibraryPath) + true + Full + true + + + NDEBUG;$(Defines) + Release + $(BDS)\lib\release;$(ILINK_LibraryPath) + None + + + + 7 + + + 6 + + + 7 + + + 6 + + + 0 + + + true + 1 + + + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + + + + + CPlusPlusBuilder.Personality.12 + CppGuiApplication + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 3081 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + + + + + + False + + + + + + + False + + False + + True + False + + + False + True + True + + + + 12 + + diff --git a/clipper/cpp/cpp_cairo/cairo_clipper.cpp b/clipper/cpp/cpp_cairo/cairo_clipper.cpp new file mode 100755 index 0000000..d373b1b --- /dev/null +++ b/clipper/cpp/cpp_cairo/cairo_clipper.cpp @@ -0,0 +1,134 @@ +/******************************************************************************* +* * +* Author : Angus Johnson * +* Version : 1.1 * +* Date : 4 April 2011 * +* Copyright : Angus Johnson 2010-2011 * +* * +* License: * +* Use, modification & distribution is subject to Boost Software License Ver 1. * +* http://www.boost.org/LICENSE_1_0.txt * +* * +* Modified by Mike Owens to support coordinate transformation * +*******************************************************************************/ + +#include +#include +#include +#include "clipper.hpp" +#include "cairo_clipper.hpp" + +namespace ClipperLib { + namespace cairo { + + namespace { + + inline long64 Round(double val) + { + if ((val < 0)) return (long64)(val - 0.5); else return (long64)(val + 0.5); + } + + void transform_point(cairo_t* pen, Transform transform, long64* x, long64* y) + { + double _x = (double)*x, _y = (double)*y; + switch (transform) + { + case tDeviceToUser: + cairo_device_to_user(pen, &_x, &_y); + break; + case tUserToDevice: + cairo_user_to_device(pen, &_x, &_y); + break; + default: + ; + } + *x = Round(_x); *y = Round(_y); + } + } + + void cairo_to_clipper(cairo_t* cr, + Polygons &pg, + int scaling_factor, + Transform transform) + { + if (scaling_factor > 8 || scaling_factor < 0) + throw clipperCairoException("cairo_to_clipper: invalid scaling factor"); + double scaling = std::pow((double)10, scaling_factor); + + pg.clear(); + cairo_path_t *path = cairo_copy_path_flat(cr); + + int poly_count = 0; + for (int i = 0; i < path->num_data; i += path->data[i].header.length) { + if( path->data[i].header.type == CAIRO_PATH_CLOSE_PATH) poly_count++; + } + + pg.resize(poly_count); + int i = 0, pc = 0; + while (pc < poly_count) + { + int vert_count = 1; + int j = i; + while(j < path->num_data && + path->data[j].header.type != CAIRO_PATH_CLOSE_PATH) + { + if (path->data[j].header.type == CAIRO_PATH_LINE_TO) + vert_count++; + j += path->data[j].header.length; + } + pg[pc].resize(vert_count); + if (path->data[i].header.type != CAIRO_PATH_MOVE_TO) { + pg.resize(pc); + break; + } + pg[pc][0].X = Round(path->data[i+1].point.x *scaling); + pg[pc][0].Y = Round(path->data[i+1].point.y *scaling); + if (transform != tNone) + transform_point(cr, transform, &pg[pc][0].X, &pg[pc][0].Y); + + i += path->data[i].header.length; + + j = 1; + while (j < vert_count && i < path->num_data && + path->data[i].header.type == CAIRO_PATH_LINE_TO) { + pg[pc][j].X = Round(path->data[i+1].point.x *scaling); + pg[pc][j].Y = Round(path->data[i+1].point.y *scaling); + if (transform != tNone) + transform_point(cr, transform, &pg[pc][j].X, &pg[pc][j].Y); + j++; + i += path->data[i].header.length; + } + pc++; + i += path->data[i].header.length; + } + cairo_path_destroy(path); + } + //-------------------------------------------------------------------------- + + void clipper_to_cairo(const Polygons &pg, + cairo_t* cr, + int scaling_factor, + Transform transform) + { + if (scaling_factor > 8 || scaling_factor < 0) + throw clipperCairoException("clipper_to_cairo: invalid scaling factor"); + double scaling = std::pow((double)10, scaling_factor); + for (size_t i = 0; i < pg.size(); ++i) + { + size_t sz = pg[i].size(); + if (sz < 3) + continue; + cairo_new_sub_path(cr); + for (size_t j = 0; j < sz; ++j) { + long64 x = pg[i][j].X, y = pg[i][j].Y; + if (transform != tNone) + transform_point(cr, transform, &x, &y); + cairo_line_to(cr, (double)x / scaling, (double)y / scaling); + } + cairo_close_path(cr); + } + } + //-------------------------------------------------------------------------- + + } +} diff --git a/clipper/cpp/cpp_cairo/cairo_clipper.hpp b/clipper/cpp/cpp_cairo/cairo_clipper.hpp new file mode 100755 index 0000000..d767da2 --- /dev/null +++ b/clipper/cpp/cpp_cairo/cairo_clipper.hpp @@ -0,0 +1,59 @@ +/******************************************************************************* +* * +* Author : Angus Johnson * +* Version : 1.1 * +* Date : 4 April 2011 * +* Copyright : Angus Johnson 2010-2011 * +* * +* License: * +* Use, modification & distribution is subject to Boost Software License Ver 1. * +* http://www.boost.org/LICENSE_1_0.txt * +* * +* Modified by Mike Owens to support coordinate transformation * +*******************************************************************************/ + +#ifndef CLIPPER_CAIRO_CLIPPER_HPP +#define CLIPPER_CAIRO_CLIPPER_HPP + +#include "clipper.hpp" + +typedef struct _cairo cairo_t; + +namespace ClipperLib { + namespace cairo { + + enum Transform { + tNone, + tUserToDevice, + tDeviceToUser + }; + +//nb: Since Clipper only accepts integer coordinates, fractional values have to +//be scaled up and down when being passed to and from Clipper. This is easily +//accomplished by setting the scaling factor (10^x) in the following functions. +//When scaling, remember that on most platforms, integer is only a 32bit value. + void cairo_to_clipper(cairo_t* cr, + ClipperLib::Polygons &pg, + int scaling_factor = 0, + Transform transform = tNone); + + void clipper_to_cairo(const ClipperLib::Polygons &pg, + cairo_t* cr, + int scaling_factor = 0, + Transform transform = tNone); + } + + class clipperCairoException : public std::exception + { + public: + clipperCairoException(const char* description) + throw(): std::exception(), m_description (description) {} + virtual ~clipperCairoException() throw() {} + virtual const char* what() const throw() {return m_description.c_str();} + private: + std::string m_description; + }; +} + +#endif + diff --git a/clipper/cpp/cpp_cairo/libcairo-2.lib (cppbuilder) b/clipper/cpp/cpp_cairo/libcairo-2.lib (cppbuilder) new file mode 100755 index 0000000000000000000000000000000000000000..205f8751fcdf906ac26819b6c7bc090e8827291e GIT binary patch literal 52224 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 literal 0 HcmV?d00001 diff --git a/clipper/cpp/cpp_cairo/libcairo-2.lib (msvc) b/clipper/cpp/cpp_cairo/libcairo-2.lib (msvc) new file mode 100755 index 0000000000000000000000000000000000000000..9be9bc1d23810eb0d710710ca982ce4f3c626239 GIT binary patch literal 83700 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 literal 0 HcmV?d00001 diff --git a/clipper/cpp/cpp_cairo/main.cpp b/clipper/cpp/cpp_cairo/main.cpp new file mode 100755 index 0000000..13a6012 --- /dev/null +++ b/clipper/cpp/cpp_cairo/main.cpp @@ -0,0 +1,180 @@ +//--------------------------------------------------------------------------- + +#include +#include +#include +#include +#pragma hdrstop + +#include "clipper.hpp" +#include "cairo.h" +#include "cairo-win32.h" +#include "cairo_clipper.hpp" +//--------------------------------------------------------------------------- + +LPCTSTR ClsName = "CairoApp"; +LPCTSTR WndName = "A Simple Cairo Clipper Demo"; +int offsetVal = 0; + +LRESULT CALLBACK WndProcedure(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); + +int CALLBACK WinMain(HINSTANCE hInstance, + HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) +{ + MSG Msg; + HWND hWnd; + WNDCLASSEX WndClsEx; + + // Create the application window + WndClsEx.cbSize = sizeof(WNDCLASSEX); + WndClsEx.style = CS_HREDRAW | CS_VREDRAW; + WndClsEx.lpfnWndProc = WndProcedure; + WndClsEx.cbClsExtra = 0; + WndClsEx.cbWndExtra = 0; + WndClsEx.hIcon = LoadIcon(NULL, IDI_APPLICATION); + WndClsEx.hCursor = LoadCursor(NULL, IDC_ARROW); + WndClsEx.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); + WndClsEx.lpszMenuName = NULL; + WndClsEx.lpszClassName = ClsName; + WndClsEx.hInstance = hInstance; + WndClsEx.hIconSm = LoadIcon(NULL, IDI_APPLICATION); + + // Register the application + RegisterClassEx(&WndClsEx); + + // Create the window object + hWnd = CreateWindow(ClsName, WndName, WS_OVERLAPPEDWINDOW, + CW_USEDEFAULT, CW_USEDEFAULT, 400, 300, + NULL, NULL, hInstance, NULL); + if( !hWnd ) return 0; + + ShowWindow(hWnd, SW_SHOWNORMAL); + UpdateWindow(hWnd); + + while( GetMessage(&Msg, NULL, 0, 0) ) + { + TranslateMessage(&Msg); + DispatchMessage(&Msg); + } + return Msg.wParam; +} +//------------------------------------------------------------------------------ + + +void OnPaint(HWND hWnd, HDC dc) +{ + RECT rec; + GetClientRect(hWnd, &rec); + cairo_surface_t* surface = cairo_win32_surface_create(dc); + cairo_t* cr = cairo_create(surface); + + cairo_set_fill_rule(cr, CAIRO_FILL_RULE_WINDING); + cairo_set_line_width (cr, 2.0); + + //fill background with white ... + cairo_rectangle(cr, 0, 0, rec.right, rec.bottom); + cairo_set_source_rgba(cr, 1, 1, 1, 1); + cairo_fill(cr); + + using namespace ClipperLib; + + const int scaling = 2; + + Clipper clpr; //clipper class + Polygons pg; //std::vector for polygon(s) storage + + //create a circular pattern, add the path to clipper and then draw it ... + cairo_arc(cr, 170,110,70,0,2*3.1415926); + cairo_close_path(cr); + cairo::cairo_to_clipper(cr, pg, scaling); + clpr.AddPolygons(pg, ptSubject); + cairo_set_source_rgba(cr, 0, 0, 1, 0.25); + cairo_fill_preserve (cr); + cairo_set_source_rgba(cr, 0, 0, 0, 0.5); + cairo_stroke (cr); + + //draw a star and another circle, add them to clipper and draw ... + cairo_move_to(cr, 60,110); + cairo_line_to (cr, 240,70); + cairo_line_to (cr, 110,210); + cairo_line_to (cr, 140,25); + cairo_line_to (cr, 230,200); + cairo_close_path(cr); + cairo_new_sub_path(cr); + cairo_arc(cr, 190,50,20,0,2*3.1415926); + cairo_close_path(cr); + cairo::cairo_to_clipper(cr, pg, scaling); + clpr.AddPolygons(pg, ptClip); + cairo_set_source_rgba(cr, 1, 0, 0, 0.25); + cairo_fill_preserve (cr); + cairo_set_source_rgba(cr, 0, 0, 0, 0.5); + cairo_stroke (cr); + + clpr.Execute(ctIntersection, pg, pftNonZero, pftNonZero); + //now do something fancy with the returned polygons ... + OffsetPolygons(pg, pg, offsetVal * std::pow((double)10,scaling), jtMiter); + + //finally copy the clipped path back to the cairo context and draw it ... + cairo::clipper_to_cairo(pg, cr, scaling); + cairo_set_source_rgba(cr, 1, 1, 0, 1); + cairo_fill_preserve (cr); + cairo_set_source_rgba(cr, 0, 0, 0, 1); + cairo_stroke (cr); + + cairo_text_extents_t extent; + cairo_set_font_size(cr,11); + std::stringstream ss; + ss << "Polygon offset = " << offsetVal << ". (Adjust with arrow keys)"; + std::string s = ss.str(); + cairo_text_extents(cr, s.c_str(), &extent); + cairo_move_to(cr, 10, rec.bottom - extent.height); + cairo_show_text(cr, s.c_str()); + + cairo_destroy (cr); + cairo_surface_destroy (surface); +} +//------------------------------------------------------------------------------ + +LRESULT CALLBACK WndProcedure(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) +{ + PAINTSTRUCT ps; + HDC Handle; + + switch(Msg) + { + case WM_DESTROY: + PostQuitMessage(WM_QUIT); + return 0; + + case WM_PAINT: + Handle = BeginPaint(hWnd, &ps); + OnPaint(hWnd, Handle); + EndPaint(hWnd, &ps); + return 0; + + case WM_KEYDOWN: + switch(wParam) + { + case VK_ESCAPE: + PostQuitMessage(0); + return 0; + case VK_RIGHT: + case VK_UP: + if (offsetVal < 20) offsetVal++; + InvalidateRect(hWnd, 0, false); + return 0; + case VK_LEFT: + case VK_DOWN: + if (offsetVal > -20) offsetVal--; + InvalidateRect(hWnd, 0, false); + return 0; + default: + return DefWindowProc(hWnd, Msg, wParam, lParam); + } + + default: + return DefWindowProc(hWnd, Msg, wParam, lParam); + } +} +//--------------------------------------------------------------------------- + diff --git a/clipper/cpp/cpp_console/Debug/clip.txt b/clipper/cpp/cpp_console/Debug/clip.txt new file mode 100755 index 0000000..9a4a413 --- /dev/null +++ b/clipper/cpp/cpp_console/Debug/clip.txt @@ -0,0 +1,6 @@ +1 +4 +90, 10, +240, 10, +240, 90, +90, 90 \ No newline at end of file diff --git a/clipper/cpp/cpp_console/Debug/subj.txt b/clipper/cpp/cpp_console/Debug/subj.txt new file mode 100755 index 0000000..7033a4c --- /dev/null +++ b/clipper/cpp/cpp_console/Debug/subj.txt @@ -0,0 +1,13 @@ +1 +11 +0, 0, +200, 0, +200, 100, +50, 100, +50, 50, +75, 75, +100, 50, +75, 25, +50, 50, +50, 100, +0, 100, diff --git a/clipper/cpp/cpp_console/File1.cpp b/clipper/cpp/cpp_console/File1.cpp new file mode 100755 index 0000000..5c57651 --- /dev/null +++ b/clipper/cpp/cpp_console/File1.cpp @@ -0,0 +1,458 @@ +//--------------------------------------------------------------------------- + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "clipper.hpp" + +//--------------------------------------------------------------------------- + +using namespace std; +using namespace ClipperLib; + +static string ColorToHtml(unsigned clr) +{ + stringstream ss; + ss << '#' << hex << std::setfill('0') << setw(6) << (clr & 0xFFFFFF); + return ss.str(); +} +//------------------------------------------------------------------------------ + +static float GetAlphaAsFrac(unsigned clr) +{ + return ((float)(clr >> 24) / 255); +} +//------------------------------------------------------------------------------ + +//a simple class that builds an SVG file with any number of polygons +class SVGBuilder +{ + + class StyleInfo + { + public: + PolyFillType pft; + unsigned brushClr; + unsigned penClr; + double penWidth; + bool showCoords; + + StyleInfo() + { + pft = pftNonZero; + brushClr = 0xFFFFFFCC; + penClr = 0xFF000000; + penWidth = 0.8; + showCoords = false; + } + }; + + class PolyInfo + { + public: + Polygons polygons; + StyleInfo si; + + PolyInfo(Polygons polygons, StyleInfo style) + { + this->polygons = polygons; + this->si = style; + } + }; + + typedef std::vector PolyInfoList; + +private: + PolyInfoList polyInfos; + static const std::string svg_xml_start[]; + static const std::string poly_end[]; + +public: + StyleInfo style; + + void AddPolygons(Polygons& poly) + { + if (poly.size() == 0) return; + polyInfos.push_back(PolyInfo(poly, style)); + } + + bool SaveToFile(char * filename, double scale = 1.0, int margin = 10) + { + //calculate the bounding rect ... + PolyInfoList::size_type i = 0; + Polygons::size_type j; + while (i < polyInfos.size()) + { + j = 0; + while (j < polyInfos[i].polygons.size() && + polyInfos[i].polygons[j].size() == 0) j++; + if (j < polyInfos[i].polygons.size()) break; + i++; + } + if (i == polyInfos.size()) return false; + + IntRect rec; + rec.left = polyInfos[i].polygons[j][0].X; + rec.right = rec.left; + rec.top = polyInfos[i].polygons[j][0].Y; + rec.bottom = rec.top; + for ( ; i < polyInfos.size(); ++i) + for (Polygons::size_type j = 0; j < polyInfos[i].polygons.size(); ++j) + for (Polygon::size_type k = 0; k < polyInfos[i].polygons[j].size(); ++k) + { + IntPoint ip = polyInfos[i].polygons[j][k]; + if (ip.X < rec.left) rec.left = ip.X; + else if (ip.X > rec.right) rec.right = ip.X; + if (ip.Y < rec.top) rec.top = ip.Y; + else if (ip.Y > rec.bottom) rec.bottom = ip.Y; + } + + if (scale == 0) scale = 1.0; + if (margin < 0) margin = 0; + rec.left = (long64)((double)rec.left * scale); + rec.top = (long64)((double)rec.top * scale); + rec.right = (long64)((double)rec.right * scale); + rec.bottom = (long64)((double)rec.bottom * scale); + long64 offsetX = -rec.left + margin; + long64 offsetY = -rec.top + margin; + + ofstream file; + file.open(filename); + if (!file.is_open()) return false; + file.setf(ios::fixed); + file.precision(0); + file << svg_xml_start[0] << + ((rec.right - rec.left) + margin*2) << "px" << svg_xml_start[1] << + ((rec.bottom - rec.top) + margin*2) << "px" << svg_xml_start[2] << + ((rec.right - rec.left) + margin*2) << " " << + ((rec.bottom - rec.top) + margin*2) << svg_xml_start[3]; + setlocale(LC_NUMERIC, "C"); + file.precision(2); + + for (PolyInfoList::size_type i = 0; i < polyInfos.size(); ++i) + { + file << " \n\n"; + for (Polygons::size_type j = 0; j < polyInfos[i].polygons.size(); ++j) + { + if (polyInfos[i].polygons[j].size() < 3) continue; + for (Polygon::size_type k = 0; k < polyInfos[i].polygons[j].size(); ++k) + { + IntPoint ip = polyInfos[i].polygons[j][k]; + file << "" << + ip.X << "," << ip.Y << "\n"; + file << "\n"; + } + } + file << "\n"; + } + } + file << "\n"; + file.close(); + setlocale(LC_NUMERIC, ""); + return true; + } +}; +//------------------------------------------------------------------------------ + +const std::string SVGBuilder::svg_xml_start [] = + {"\n" + "\n\n" + "\n\n" + }; +const std::string SVGBuilder::poly_end [] = + {"\"\n style=\"fill:", + "; fill-opacity:", + "; fill-rule:", + "; stroke:", + "; stroke-opacity:", + "; stroke-width:", + ";\"/>\n\n" + }; + +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ + +inline long64 Round(double val) +{ + if ((val < 0)) return (long64)(val - 0.5); else return (long64)(val + 0.5); +} +//------------------------------------------------------------------------------ + +bool LoadFromFile(Polygons &ppg, char * filename, double scale= 1, + int xOffset = 0, int yOffset = 0) +{ + ppg.clear(); + + FILE *f = fopen(filename, "r"); + if (!f) return false; + int polyCnt, vertCnt; + char junk [80]; + double X, Y; + if (fscanf(f, "%d", &polyCnt) == 1 && polyCnt > 0) + { + ppg.resize(polyCnt); + for (int i = 0; i < polyCnt; i++) { + if (fscanf(f, "%d", &vertCnt) != 1 || vertCnt <= 0) break; + ppg[i].resize(vertCnt); + for (int j = 0; j < vertCnt; j++) { + if (fscanf(f, "%lf%*[, ]%lf", &X, &Y) != 2) break; + ppg[i][j].X = Round((X + xOffset) * scale); + ppg[i][j].Y = Round((Y + yOffset) * scale); + fgets(junk, 80, f); + } + } + } + fclose(f); + return true; +} +//------------------------------------------------------------------------------ + +void SaveToConsole(const string name, const Polygons &pp, double scale = 1.0) +{ + cout << '\n' << name << ":\n" + << pp.size() << '\n'; + for (unsigned i = 0; i < pp.size(); ++i) + { + cout << pp[i].size() << '\n'; + for (unsigned j = 0; j < pp[i].size(); ++j) + cout << pp[i][j].X /scale << ", " << pp[i][j].Y /scale << ",\n"; + } + cout << "\n"; +} +//--------------------------------------------------------------------------- + +void SaveToFile(char *filename, Polygons &pp, double scale = 1) +{ + FILE *f = fopen(filename, "w"); + if (!f) return; + fprintf(f, "%d\n", pp.size()); + for (unsigned i = 0; i < pp.size(); ++i) + { + fprintf(f, "%d\n", pp[i].size()); + if (scale > 1.01 || scale < 0.99) { + for (unsigned j = 0; j < pp[i].size(); ++j) + fprintf(f, "%.6lf, %.6lf,\n", + (double)pp[i][j].X /scale, (double)pp[i][j].Y /scale); + } + else + { + for (unsigned j = 0; j < pp[i].size(); ++j) + fprintf(f, "%lld, %lld,\n", pp[i][j].X, pp[i][j].Y ); + } + } + fclose(f); +} +//--------------------------------------------------------------------------- + +void MakeRandomPoly(int edgeCount, int width, int height, Polygons & poly) +{ + poly.resize(1); + poly[0].resize(edgeCount); + for (int i = 0; i < edgeCount; i++){ + poly[0][i].X = rand() % width; + poly[0][i].Y = rand() % height; + } +} +//------------------------------------------------------------------------------ + +#pragma argsused +int _tmain(int argc, _TCHAR* argv[]) +{ + if (argc > 1 && + (strcmp(argv[1], "-b") == 0 || strcmp(argv[1], "--benchmark") == 0)) + { + //do a benchmark test that creates a subject and a clip polygon both with + //100 vertices randomly placed in a 400 * 400 space. Then perform an + //intersection operation based on even-odd filling. Repeat all this X times. + int loop_cnt = 100; + char * dummy; + if (argc > 2) loop_cnt = strtol(argv[2], &dummy, 10); + if (loop_cnt == 0) loop_cnt = 100; + cout << "\nPerforming " << loop_cnt << " random intersection operations ... "; + srand(time(0)); + int error_cnt = 0; + Polygons subject, clip, solution; + Clipper clpr; + time_t time_start = clock(); + for (int i = 0; i < loop_cnt; i++) { + MakeRandomPoly(100, 400, 400, subject); + MakeRandomPoly(100, 400, 400, clip); + clpr.Clear(); + clpr.AddPolygons(subject, ptSubject); + clpr.AddPolygons(clip, ptClip); + if (!clpr.Execute(ctIntersection, solution, pftEvenOdd, pftEvenOdd)) + error_cnt++; + } + double time_elapsed = double(clock() - time_start)/CLOCKS_PER_SEC; + cout << "\nFinished in " << time_elapsed << " secs with "; + cout << error_cnt << " errors.\n\n"; + //let's save the very last result ... + SaveToFile("Subject.txt", subject); + SaveToFile("Clip.txt", clip); + SaveToFile("Solution.txt", solution); + //and see it as an image too ... + SVGBuilder svg; + svg.style.penWidth = 0.8; + svg.style.pft = pftEvenOdd; + svg.style.brushClr = 0x1200009C; + svg.style.penClr = 0xCCD3D3DA; + svg.AddPolygons(subject); + svg.style.brushClr = 0x129C0000; + svg.style.penClr = 0xCCFFA07A; + svg.AddPolygons(clip); + svg.style.brushClr = 0x6080ff9C; + svg.style.penClr = 0xFF003300; + svg.style.pft = pftNonZero; + svg.AddPolygons(solution); + svg.SaveToFile("solution.svg"); + return 0; + } + + if (argc < 3) + { + cout << "\nUSAGE:\n" + << "clipper --benchmark [LOOP_COUNT (default = 100)]\n" + << "or\n" + << "clipper sub_file clp_file CLIPTYPE [SUB_FILL CLP_FILL] [PRECISION] [SVG_SCALE]\n" + << "where ...\n" + << " CLIPTYPE = INTERSECTION or UNION or DIFFERENCE or XOR, and\n" + << " ???_FILL = EVENODD or NONZERO (default = NONZERO)\n" + << " PRECISION = in decimal places (default = 0)\n" + << " SVG_SCALE = SVG output scale (default = 1.0)\n\n"; + cout << "\nINPUT AND OUTPUT FILE FORMAT ([optional] {comments}):\n" + << "Polygon Count\n" + << "Vertex Count {first polygon}\n" + << "X, Y[,] {first vertex}\n" + << "X, Y[,] {next vertex}\n" + << "{etc.}\n" + << "Vertex Count {second polygon, if there is one}\n" + << "X, Y[,] {first vertex of second polygon}\n" + << "{etc.}\n\n"; + return 1; + } + + int scale_log10 = 0; + char * dummy; + if (argc > 6) scale_log10 = strtol(argv[6], &dummy, 10); + double scale = std::pow(double(10), scale_log10); + + double svg_scale = 1.0; + if (argc > 7) svg_scale = strtod(argv[7], &dummy); + svg_scale /= scale; + + Polygons subject, clip; + + if (!LoadFromFile(subject, argv[1], scale)) + { + cerr << "\nCan't open the file " << argv[1] + << " or the file format is invalid.\n"; + return 1; + } + if (!LoadFromFile(clip, argv[2], scale)) + { + cerr << "\nCan't open the file " << argv[2] + << " or the file format is invalid.\n"; + return 1; + } + + ClipType clipType = ctIntersection; + const string sClipType[] = {"INTERSECTION", "UNION", "DIFFERENCE", "XOR"}; + + if (argc > 3) + { + if (stricmp(argv[3], "XOR") == 0) clipType = ctXor; + else if (stricmp(argv[3], "UNION") == 0) clipType = ctUnion; + else if (stricmp(argv[3], "DIFFERENCE") == 0) clipType = ctDifference; + else clipType = ctIntersection; + } + + PolyFillType subj_pft = pftNonZero, clip_pft = pftNonZero; + if (argc > 5) + { + if (stricmp(argv[4], "EVENODD") == 0) subj_pft = pftEvenOdd; + if (stricmp(argv[5], "EVENODD") == 0) clip_pft = pftEvenOdd; + } + + Clipper c; + c.AddPolygons(subject, ptSubject); + c.AddPolygons(clip, ptClip); + Polygons solution; + + bool succeeded = c.Execute(clipType, solution, subj_pft, clip_pft); + string s = "Subjects ("; + s += (subj_pft == pftEvenOdd ? "EVENODD)" : "NONZERO)"); + + //ie don't change the polygons back to the original size if we've + //just down-sized them to a manageable (all-in-one-screen) size ... + //if (scale < 1) scale = 1; + + SaveToConsole(s, subject, scale); + s = "Clips ("; + s += (clip_pft == pftEvenOdd ? "EVENODD)" : "NONZERO)"); + SaveToConsole(s, clip, scale); + if (succeeded) { + s = "Solution (using " + sClipType[clipType] + ")"; + //SaveToConsole(s, solution, scale); + SaveToFile("solution.txt", solution, scale); + + //OffsetPolygons(solution, solution, -5.0 *scale, jtRound, 4); + + //let's see the result too ... + SVGBuilder svg; + svg.style.penWidth = 0.8; + svg.style.brushClr = 0x1200009C; + svg.style.penClr = 0xCCD3D3DA; + svg.style.pft = subj_pft; + svg.AddPolygons(subject); + svg.style.brushClr = 0x129C0000; + svg.style.penClr = 0xCCFFA07A; + svg.style.pft = clip_pft; + svg.AddPolygons(clip); + svg.style.brushClr = 0x6080ff9C; + svg.style.penClr = 0xFF003300; + svg.style.pft = pftNonZero; + svg.AddPolygons(solution); + svg.SaveToFile("solution.svg", svg_scale); + } else + cout << (sClipType[clipType] + " failed!\n\n"); + + return 0; +} +//--------------------------------------------------------------------------- diff --git a/clipper/cpp/cpp_console/clipper.cbproj b/clipper/cpp/cpp_console/clipper.cbproj new file mode 100755 index 0000000..18a198d --- /dev/null +++ b/clipper/cpp/cpp_console/clipper.cbproj @@ -0,0 +1,147 @@ + + + {13421A08-E1A3-411C-B53C-144521F7116E} + 12.0 + Debug + + + true + + + true + Base + true + + + true + Base + true + + + false + true + rtl.lib + rtl.lib + vcl.bpi;rtl.bpi;vclx.bpi;vclactnband.bpi;dbrtl.bpi;vcldb.bpi;bdertl.bpi;vcldbx.bpi;dsnap.bpi;dsnapcon.bpi;TeeUI.bpi;Tee.bpi;TeeDB.bpi;adortl.bpi;IndyCore.bpi;IndySystem.bpi;IndyProtocols.bpi;VclSmp.bpi;dbexpress.bpi;DbxCommonDriver.bpi;DataSnapIndy10ServerTransport.bpi;DataSnapProviderClient.bpi;DataSnapServer.bpi;DbxClientDriver.bpi;DBXInterBaseDriver.bpi;DBXMySQLDriver.bpi;dbxcds.bpi;DBXSybaseASEDriver.bpi;DBXSybaseASADriver.bpi;DBXOracleDriver.bpi;DBXMSSQLDriver.bpi;DBXInformixDriver.bpi;DBXDb2Driver.bpi;bcbie.bpi;xmlrtl.bpi;bcbsmp.bpi;GR32_CB6.bpi;GR32_DSGN_CB6.bpi + true + exe + CppConsoleApplication + JPHNE + NO_STRICT + true + ..\..\cpp;C:\Program Files (x86)\Borland\graphics32-1-9-0-r1336\Examples\Vcl\Drawing\Clipper\cpp\test_console;$(CG_BOOST_ROOT)\boost\tr1\tr1;$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;$(CG_BOOST_ROOT) + ..\..\cpp;C:\Program Files (x86)\Borland\graphics32-1-9-0-r1336\Examples\Vcl\Drawing\Clipper\cpp\test_console;$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk + false + true + + + false + false + true + false + true + _DEBUG;$(Defines) + false + Debug + true + None + DEBUG + true + true + true + $(BDS)\lib\debug;$(ILINK_LibraryPath) + true + Full + true + + + NDEBUG;$(Defines) + Release + $(BDS)\lib\release;$(ILINK_LibraryPath) + None + + + + 2 + + + 1 + + + 1 + + + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + + + + + CPlusPlusBuilder.Personality.12 + CppConsoleApplication + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 3081 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + + + + subj.txt clip.txt intersection NONZERO NONZERO 0 1.0 + + False + + + + + + + False + + False + + True + False + + + False + True + True + + + + 12 + + diff --git a/clipper/cpp/cpp_opengl/clipper_demo.exe b/clipper/cpp/cpp_opengl/clipper_demo.exe new file mode 100755 index 0000000000000000000000000000000000000000..9eba464a484bee06906318147bddd7bc866ddf11 GIT binary patch literal 208384 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

    nx?IMdPr7JzL-c9o5!kt$^;3N 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 literal 0 HcmV?d00001 diff --git a/clipper/cpp/cpp_opengl/clipper_demo.sln b/clipper/cpp/cpp_opengl/clipper_demo.sln new file mode 100755 index 0000000..56899d2 --- /dev/null +++ b/clipper/cpp/cpp_opengl/clipper_demo.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual C++ Express 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "clipper_demo", "clipper_demo.vcxproj", "{4D48A928-F288-40F9-9FA0-4AC650602636}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {4D48A928-F288-40F9-9FA0-4AC650602636}.Debug|Win32.ActiveCfg = Debug|Win32 + {4D48A928-F288-40F9-9FA0-4AC650602636}.Debug|Win32.Build.0 = Debug|Win32 + {4D48A928-F288-40F9-9FA0-4AC650602636}.Release|Win32.ActiveCfg = Release|Win32 + {4D48A928-F288-40F9-9FA0-4AC650602636}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/clipper/cpp/cpp_opengl/clipper_demo.vcxproj b/clipper/cpp/cpp_opengl/clipper_demo.vcxproj new file mode 100755 index 0000000..dfadf98 --- /dev/null +++ b/clipper/cpp/cpp_opengl/clipper_demo.vcxproj @@ -0,0 +1,95 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {4D48A928-F288-40F9-9FA0-4AC650602636} + Win32Proj + opengl_app + clipper_demo + + + + Application + true + Unicode + + + Application + false + true + Unicode + + + + + + + + + + + + + true + $(SourcePath) + $(IncludePath) + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + + + Windows + true + opengl32.lib;glu32.lib;comctl32.lib;%(AdditionalDependencies) + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + + + Windows + true + true + true + opengl32.lib;glu32.lib;comctl32.lib;%(AdditionalDependencies) + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/clipper/cpp/cpp_opengl/icon.res b/clipper/cpp/cpp_opengl/icon.res new file mode 100755 index 0000000000000000000000000000000000000000..a4fc1a701c1e02251b98d56d49031b54cf400cf3 GIT binary patch literal 5556 zcmcgw4Nz3q6@L5P+g$-+VG(ozaa}?A3*sNFT@<1yMkgwugE5W78qlJh5YQ-ziTDF% zsz@6r(@YpOnvBLo(HN&%A_`hb!z5LkWUAHFq#|*WIMFd_lU8&3ovZK7F1wpu+tD}k z?R|UiJ?A_3oOA!4BuSDTAi52_dOUALYV8X87(`oEWQeMDO2LaA$OjDK4KMfMaVc%h zK=gf}@}dCm0stPn{||Ua?5$W_~J-fQ-bA|)Eg0cJ3^~Tc*kxDv>)q~9Yr^=*T%-3_FRmX-En@N^UlvGeiD=vLakM2Dv_*>@KZm|r| z3yR$~ilg+`zfcyMRY26bcr%}X!II2GTIX(T^6)IS>UbiDMB$?tZ*(58f7%%f` z(EQ(Zho60=`2jwd7K{yXeQXuzN3N=+x?a}b+m5M?FM7258o!9u-wspfg7}-rqqD)p z;m8c7Ha#kejOI{UaO8v+2iq}w$8N8Bzx?pQxi@RII0T#%Jipt1ney+b@OX;oKTyO# z^KYP1^Z%=j+r9Gjk3YBm2jk!MQ!zk0uWR)2@5-ok-&RuP5E`62LCmc{-0tI7)leD` zHkL~As_5Ox$`L87AIsm zmmE_{+lP?sKh_5bhFsDo%9yjJZEsxW4?@doCQbu*Jx#@Sl_^Z188#h z1^9LU*H>*OMF|nM^V-^5U!ecICNk&PB~=tRVzgKw$tJ2APS3)rA3{84tm_$ z+%teLzF!*6oH&P?f73u0J~|+BDVX_}Dz6KTF=qag*Vf10KJ3NKV=O!Pu2((#M&m!x zy47p$2fO~*<%R9=59KXisdI4NPp;oUj{J$F+{s~I>z~H&zV_eE`ip$1aViJMr1Yh@ ztkJ|d9}zcD8cQy!nm6haTodPMh;yZ_zCAI$y>&SAh8z#(99s=Ou(<1KwW#SnXZmg#&)iSfrz zn#*;5_UYP{ON3wC~ME0Ot_EYb}BeJRiff^H*0*){mdIHVQi~ojXiv zLsLECpz*giKPAp;kY)a$&tJ^v?|~jZe_m&uyqEL&^Y=L!a0Adttgs&rjxN{C1rD9Qyk7r!T$#OC9v{I_YYiuFRg&KYv?> zyone|a`iUoyQkc~>_z_Y-GTR&RleHqbscyun7`d9pS{;y{`7;J&+cXZ+WplN-5{bb zfcJ>LH`B3pg_`ON)GkS@fV|IuYmzhwuxLP?1uz2!K)O?!xgGBU?U1R1tOSgQE`m;i zZss6rx`R`+2wyDh=tRWdF=V_+Qt$5=k*Ko+|L=DU_{Zi{_H{#5&=2z52sri^#wF*d zdpn)#z8+t~&>ibkTFyJwmf746nfQ((bxY?H1FwJhd>$1gXHZnUgC^P14x=sBmk#K@ z=2Z9p%PMDWX(+ILed)D&Vl=K^Lm9=TRQdiHnm2hk?!dMl-0Md6)&U!0#zbxUGG*#? zv45ow8&1zuRa4@qTv~SVinyzl&o34_p`#miczvfC*)Q}^VZ%nTw=DkPBg(F*q+gvr zEB^CcPm^c6AivSw2K+aktW3U^gL~urL+u{>6Yo(hpPH0Tn^vzEHefCF@FnDvPBlCv z+F}P~(9%zPJanwMe3c&Ce@NWT5=J^{ge``g>Yj@jw@4gKzNTUsjeLB8hphYg?a7ZX zP|+*fDK;$w@-1hyoM8LwA56V5Bp>(r?yFw%eCJDeU^Kb1$5L%|1-)1h!}c3AAK2wZ zqhjspx2n&5PK!={NR!sSK+~FD()DDP&J|Tt?#2e_<*kN_gZ|0M?cTti=$A*@mkRM`Qd2%q0m aIn1(TM;Bg&`0J}diWI+giPtb5)PDh&WBnok literal 0 HcmV?d00001 diff --git a/clipper/cpp/cpp_opengl/main.cpp b/clipper/cpp/cpp_opengl/main.cpp new file mode 100755 index 0000000..bc80630 --- /dev/null +++ b/clipper/cpp/cpp_opengl/main.cpp @@ -0,0 +1,645 @@ +#include +#include +#include +#include +//#include +#include +#include +#include +#include +#include +#include "../clipper.hpp" + +using namespace std; +using namespace ClipperLib; + +enum poly_color_type { pctSubject, pctClip, pctSolution }; + +//global vars ... +HWND hWnd; +HWND hStatus; +HDC hDC; +HGLRC hRC; +ClipType ct = ctIntersection; +PolyFillType pft = pftEvenOdd; +JoinType jt = jtRound; +bool show_clipping = true; +Polygons sub, clp, sol; +int VertCount = 5; +int scale = 10; +double delta = 0.0; + +typedef std::vector< GLdouble* > Vectors; +Vectors vectors; + +//------------------------------------------------------------------------------ +// heap memory management for GLUtesselator ... +//------------------------------------------------------------------------------ + +GLdouble* NewVector(GLdouble x, GLdouble y) +{ + GLdouble *vert = new GLdouble[3]; + vert[0] = x; + vert[1] = y; + vert[2] = 0; + vectors.push_back(vert); + return vert; +} +//------------------------------------------------------------------------------ + +void ClearVectors() +{ + for (Vectors::size_type i = 0; i < vectors.size(); ++i) + delete[] vectors[i]; + vectors.clear(); +} + +//------------------------------------------------------------------------------ +// GLUtesselator callback functions ... +//------------------------------------------------------------------------------ + +void CALLBACK BeginCallback(GLenum type) +{ + glBegin(type); +} +//------------------------------------------------------------------------------ + +void CALLBACK EndCallback() +{ + glEnd(); +} +//------------------------------------------------------------------------------ + +void CALLBACK VertexCallback(GLvoid *vertex) +{ + glVertex3dv( (const double *)vertex ); +} +//------------------------------------------------------------------------------ + +void CALLBACK CombineCallback(GLdouble coords[3], + GLdouble *data[4], GLfloat weight[4], GLdouble **dataOut ) +{ + GLdouble *vert = NewVector(coords[0], coords[1]); + *dataOut = vert; +} +//------------------------------------------------------------------------------ + +wstring str2wstr(const std::string &s) { + int slength = (int)s.length() + 1; + int len = MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, 0, 0); + wchar_t* buf = new wchar_t[len]; + MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, buf, len); + std::wstring r(buf); + delete[] buf; + return r; +} +//------------------------------------------------------------------------------ + +void CALLBACK ErrorCallback(GLenum errorCode) +{ + std::wstring s = str2wstr( (char *)gluErrorString(errorCode) ); + SetWindowText(hWnd, s.c_str()); +} + +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ + +// Set up pixel format for graphics initialization +void SetupPixelFormat() +{ + PIXELFORMATDESCRIPTOR pfd; + ZeroMemory( &pfd, sizeof(pfd)); + pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR); + pfd.nVersion = 1; + pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER; + pfd.iPixelType = PFD_TYPE_RGBA; + pfd.cColorBits = 32; + int pfIdx = ChoosePixelFormat(hDC, &pfd); + if (pfIdx != 0) SetPixelFormat(hDC, pfIdx, &pfd); +} +//------------------------------------------------------------------------------ + +// Initialize OpenGL graphics +void InitGraphics() +{ + hDC = GetDC(hWnd); + SetupPixelFormat(); + hRC = wglCreateContext(hDC); + wglMakeCurrent(hDC, hRC); + glDisable(GL_DEPTH_TEST); + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glTranslatef (0.375, 0.375, 0); +} +//------------------------------------------------------------------------------ + +void MakeRandomPoly(ClipperLib::Polygon &p, int width, int height, int edgeCount) +{ + p.resize(edgeCount); + for (int i = 0; i < edgeCount; i++) + { + p[i].X = (rand()%(width -20) +10)*scale; + p[i].Y = (rand()%(height -20) +10)*scale; + } +} +//------------------------------------------------------------------------------ + +void ResizeGraphics(int width, int height) +{ + //setup 2D projection with origin at top-left corner ... + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glOrtho(0, width, height, 0, 0, 1); + glViewport(0, 0, width, height); + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); +} +//------------------------------------------------------------------------------ + +void DrawPolygon(Polygons &pgs, poly_color_type pct) +{ + switch (pct) + { + case pctSubject: glColor4f(0.0f, 0.0f, 1.0f, 0.062f); break; + case pctClip: glColor4f(1.0f, 1.0f, 0.0f, 0.062f); break; + default: glColor4f(0.0f, 1.0f, 0.0f, 0.25f); + } + + GLUtesselator* tess = gluNewTess(); + gluTessCallback(tess, GLU_TESS_BEGIN, (void (CALLBACK*)())&BeginCallback); + gluTessCallback(tess, GLU_TESS_VERTEX, (void (CALLBACK*)())&VertexCallback); + gluTessCallback(tess, GLU_TESS_END, (void (CALLBACK*)())&EndCallback); + gluTessCallback(tess, GLU_TESS_COMBINE, (void (CALLBACK*)())&CombineCallback); + gluTessCallback(tess, GLU_TESS_ERROR, (void (CALLBACK*)())&ErrorCallback); + gluTessNormal(tess, 0.0, 0.0, 1.0); + + switch (pft) + { + case pftEvenOdd: + gluTessProperty(tess, GLU_TESS_WINDING_RULE, GLU_TESS_WINDING_ODD); + break; + case pftNonZero: + gluTessProperty(tess, GLU_TESS_WINDING_RULE, GLU_TESS_WINDING_NONZERO); + break; + case pftPositive: + gluTessProperty(tess, GLU_TESS_WINDING_RULE, GLU_TESS_WINDING_POSITIVE); + break; + default: //case pftNegative + if (pct == pctSolution) + gluTessProperty(tess, GLU_TESS_WINDING_RULE, GLU_TESS_WINDING_NONZERO); + else + gluTessProperty(tess, GLU_TESS_WINDING_RULE, GLU_TESS_WINDING_NEGATIVE); + } + + gluTessProperty(tess, GLU_TESS_BOUNDARY_ONLY, GL_FALSE); //GL_FALSE + gluTessBeginPolygon(tess, NULL); + for (Polygons::size_type i = 0; i < pgs.size(); ++i) + { + gluTessBeginContour(tess); + for (ClipperLib::Polygon::size_type j = 0; j < pgs[i].size(); ++j) + { + GLdouble *vert = + NewVector((GLdouble)pgs[i][j].X/scale, (GLdouble)pgs[i][j].Y/scale); + gluTessVertex(tess, vert, vert); + } + gluTessEndContour(tess); + } + gluTessEndPolygon(tess); + ClearVectors(); + + switch (pct) + { + case pctSubject: + glColor4f(0.0f, 0.6f, 1.0f, 0.5f); + break; + case pctClip: + glColor4f(1.0f, 0.6f, 0.0f, 0.5f); + break; + default: + glColor4f(0.0f, 0.4f, 0.0f, 1.0f); + } + if (pct == pctSolution) glLineWidth(1.0f); else glLineWidth(0.8f); + + gluTessProperty(tess, GLU_TESS_WINDING_RULE, GLU_TESS_WINDING_ODD); + gluTessProperty(tess, GLU_TESS_BOUNDARY_ONLY, GL_TRUE); + for (Polygons::size_type i = 0; i < pgs.size(); ++i) + { + gluTessBeginPolygon(tess, NULL); + gluTessBeginContour(tess); + for (ClipperLib::Polygon::size_type j = 0; j < pgs[i].size(); ++j) + { + GLdouble *vert = + NewVector((GLdouble)pgs[i][j].X/scale, (GLdouble)pgs[i][j].Y/scale); + gluTessVertex(tess, vert, vert); + } + + switch (pct) + { + case pctSubject: + glColor4f(0.0f, 0.0f, 0.8f, 0.5f); + break; + case pctClip: + glColor4f(0.6f, 0.0f, 0.0f, 0.5f); + } + gluTessEndContour(tess); + gluTessEndPolygon(tess); + } + + //final cleanup ... + gluDeleteTess(tess); + ClearVectors(); +} +//------------------------------------------------------------------------------ + +void DrawGraphics() +{ + //this can take a few moments ... + HCURSOR hWaitCursor = LoadCursor(NULL, IDC_WAIT); + SetCursor(hWaitCursor); + SetClassLong(hWnd, GCL_HCURSOR, (DWORD)hWaitCursor); + + //fill background with a light off-gray color ... + glClearColor(1,1,1,1); + glClear(GL_COLOR_BUFFER_BIT); + + //glRasterPos2f(110, 340); + //glColor4f(0.0f, 1.0f, 0.0f, 1.0f); + //char * text = "Positive Fills"; + //for (int i = 0; i < strlen(text); ++i) + // glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12, text[i]); + + DrawPolygon(sub, pctSubject); + DrawPolygon(clp, pctClip); + if (show_clipping) DrawPolygon(sol, pctSolution); + + wstringstream ss; + if (!show_clipping) + ss << L"Clipper Demo - NO CLIPPING"; + else + switch (ct) + { + case ctUnion: + ss << L"Clipper Demo - UNION"; + break; + case ctDifference: + ss << L"Clipper Demo - DIFFERENCE"; + break; + case ctXor: + ss << L"Clipper Demo - XOR"; + break; + default: + ss << L"Clipper Demo - INTERSECTION"; + } + + switch(pft) + { + case pftEvenOdd: + ss << L" (EvenOdd filled polygons with "; + break; + case pftNonZero: + ss << L" (NonZero filled polygons with "; + break; + case pftPositive: + ss << L" (Positive filled polygons with "; + break; + default: + ss << L" (Negative filled polygons with "; + } + ss << VertCount << " vertices each.)"; + SetWindowText(hWnd, ss.str().c_str()); + + HCURSOR hArrowCursor = LoadCursor(NULL, IDC_ARROW); + SetCursor(hArrowCursor); + SetClassLong(hWnd, GCL_HCURSOR, (DWORD)hArrowCursor); +} +//------------------------------------------------------------------------------ + +inline long64 Round(double val) +{ + if ((val < 0)) return (long64)(val - 0.5); else return (long64)(val + 0.5); +} +//------------------------------------------------------------------------------ + +//bool LoadFromFile(Polygons &ppg, char * filename, double scale= 1, +// int xOffset = 0, int yOffset = 0) +//{ +// ppg.clear(); +// ifstream infile(filename); +// if (!infile.is_open()) return false; +// int polyCnt, vertCnt; +// double X, Y; +// +// infile >> polyCnt; +// infile.ignore(80, '\n'); +// if (infile.good() && polyCnt > 0) +// { +// ppg.resize(polyCnt); +// for (int i = 0; i < polyCnt; i++) +// { +// infile >> vertCnt; +// infile.ignore(80, '\n'); +// if (!infile.good() || vertCnt < 0) break; +// ppg[i].resize(vertCnt); +// for (int j = 0; infile.good() && j < vertCnt; j++) +// { +// infile >> X; +// while (infile.peek() == ' ') infile.ignore(); +// if (infile.peek() == ',') infile.ignore(); +// while (infile.peek() == ' ') infile.ignore(); +// infile >> Y; +// ppg[i][j].X = Round((X + xOffset) * scale); +// ppg[i][j].Y = Round((Y + yOffset) * scale); +// infile.ignore(80, '\n'); +// } +// } +// } +// infile.close(); +// return true; +//} +//------------------------------------------------------------------------------ + +//void SaveToFile(const char *filename, Polygons &pp, double scale = 1) +//{ +// ofstream of(filename); +// if (!of.is_open()) return; +// of << pp.size() << "\n"; +// for (Polygons::size_type i = 0; i < pp.size(); ++i) +// { +// of << pp[i].size() << "\n"; +// if (scale > 1.01 || scale < 0.99) +// of << fixed << setprecision(6); +// for (Polygon::size_type j = 0; j < pp[i].size(); ++j) +// of << (double)pp[i][j].X /scale << ", " << (double)pp[i][j].Y /scale << ",\n"; +// } +// of.close(); +//} +//--------------------------------------------------------------------------- + +void MakePolygonFromInts(int *ints, int size, ClipperLib::Polygon &p) +{ + p.clear(); + p.reserve(size / 2); + for (int i = 0; i < size; i +=2) + p.push_back(IntPoint(ints[i], ints[i+1])); +} +//--------------------------------------------------------------------------- + +void TranslatePolygon(ClipperLib::Polygon &p, int dx, int dy) +{ + for (size_t i = 0; i < p.size(); ++i) + { + p[i].X += dx; + p[i].Y += dy; + } +} +//--------------------------------------------------------------------------- + +//void MakePolygonFromIntArray(const int ints[][2], int size, ClipperLib::Polygon &p) +//{ +// p.clear(); +// p.reserve(size / 2); +// for (int i = 0; i < size; ++i) +// p.push_back(IntPoint(ints[i][0], ints[i][1])); +//} +//--------------------------------------------------------------------------- + +void UpdatePolygons(bool updateSolutionOnly) +{ + if (VertCount < 0) VertCount = -VertCount; + if (VertCount > 50) VertCount = 50; + if (VertCount < 3) VertCount = 3; + + Clipper c; + if (!updateSolutionOnly) + { + delta = 0.0; + + RECT r; + GetWindowRect(hStatus, &r); + int statusHeight = r.bottom - r.top; + GetClientRect(hWnd, &r); + + sub.resize(1); + clp.resize(1); + + //int ints[] = {0,0,0, -100,100, -100,100, 0}; + //int ints2[] = {0, 100, 100, -200,0, -200,100, 100}; + //MakePolygonFromInts(ints, 8, sub[0]); + //TranslatePolygon(sub[0], 100,220); + //MakePolygonFromInts(ints2, 8, clp[0]); + //TranslatePolygon(sub[1], 100,220); + MakeRandomPoly(sub[0], r.right, r.bottom - statusHeight, VertCount); + MakeRandomPoly(clp[0], r.right, r.bottom - statusHeight, VertCount); + + //SaveToFile("subj.txt", sub); + //SaveToFile("clip.txt", clp); + } + + c.AddPolygons(sub, ptSubject); + c.AddPolygons(clp, ptClip); + c.Execute(ct, sol, pft, pft); + if (delta != 0.0) + OffsetPolygons(sol,sol,delta,jt); + + InvalidateRect(hWnd, NULL, false); +} +//------------------------------------------------------------------------------ + +void DoNumericKeyPress(int num) +{ + if (VertCount >= 0) VertCount = -num; + else if (VertCount > -10) VertCount = VertCount*10 - num; + else Beep(1000, 100); +} +//------------------------------------------------------------------------------ + +LONG WINAPI MainWndProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + int clientwidth, clientheight; + switch (uMsg) + { + + case WM_SIZE: + clientwidth = LOWORD(lParam); + clientheight = HIWORD(lParam); + ResizeGraphics(clientwidth, clientheight); + SetWindowPos(hStatus, NULL, 0, + clientheight, clientwidth, 0, SWP_NOACTIVATE | SWP_NOZORDER); + return 0; + + case WM_PAINT: + HDC hdc; + PAINTSTRUCT ps; + hdc = BeginPaint(hWnd, &ps); + //do the drawing ... + DrawGraphics(); + SwapBuffers(hdc); + EndPaint(hWnd, &ps); + return 0; + + case WM_CLOSE: + DestroyWindow(hWnd); + return 0; + + case WM_DESTROY: + PostQuitMessage(0); + return 0; + + case WM_HELP: + MessageBox(hWnd, + L"Clipper Demo tips...\n\n" + L"I - for Intersection operations.\n" + L"U - for Union operations.\n" + L"D - for Difference operations.\n" + L"X - for XOR operations.\n" + L"------------------------------\n" + L"Q - Toggle clipping on/off.\n" + L"------------------------------\n" + L"E - for EvenOdd fills.\n" + L"Z - for NonZero fills.\n" + L"P - for Positive fills.\n" + L"N - for Negative fills.\n" + L"------------------------------\n" + L"nn - number of vertices (3..50).\n" + L"------------------------------\n" + L"UP arrow - Expand Solution.\n" + L"DN arrow - Contract Solution.\n" + L"LT or RT arrow - Reset Solution.\n" + L"------------------------------\n" + L"M - Miter OffsetPolygons.\n" + L"S - Square OffsetPolygons.\n" + L"R - Round OffsetPolygons.\n" + L"------------------------------\n" + L"SPACE, ENTER or click to refresh.\n" + L"F1 - to see this help dialog again.\n" + L"Esc - to quit.\n", + L"Clipper Demo - Help", 0); + return 0; + + case WM_COMMAND: + switch(LOWORD(wParam)) + { + case 1: PostQuitMessage(0); break; //escape + case 98: SendMessage(hWnd, WM_HELP, 0, 0); break; + case 99: MessageBox(hWnd, L"After closing this dialog,\ntype the required number of vertices (3-50) then ...", L"Clipper Demo", 0); + case 101: show_clipping = true; ct = ctIntersection; UpdatePolygons(true); break; + case 102: show_clipping = true; ct = ctUnion; UpdatePolygons(true); break; + case 103: show_clipping = true; ct = ctDifference; UpdatePolygons(true); break; + case 104: show_clipping = true; ct = ctXor; UpdatePolygons(true); break; + case 105: pft = pftEvenOdd; UpdatePolygons(true); break; + case 106: pft = pftNonZero; UpdatePolygons(true); break; + case 107: pft = pftPositive; UpdatePolygons(true); break; + case 108: pft = pftNegative; UpdatePolygons(true); break; + case 109: show_clipping = !show_clipping; UpdatePolygons(true); break; + case 110: case 111: case 112: case 113: case 114: + case 115: case 116: case 117: case 118: case 119: + DoNumericKeyPress(LOWORD(wParam) - 110); + break; + case 120: UpdatePolygons(false); break; //space, return + case 131: if (delta < 20*scale) {delta += scale; UpdatePolygons(true);} break; + case 132: if (delta > -20*scale) {delta -= scale; UpdatePolygons(true);} break; + case 133: if (delta != 0.0) {delta = 0.0; UpdatePolygons(true);} break; + case 141: {jt = jtMiter; if (delta != 0.0) UpdatePolygons(true);} break; + case 142: {jt = jtSquare; if (delta != 0.0) UpdatePolygons(true);} break; + case 143: {jt = jtRound; if (delta != 0.0) UpdatePolygons(true);} break; + default: return DefWindowProc (hWnd, uMsg, wParam, lParam); + } + return 0; + + case WM_LBUTTONUP: + UpdatePolygons(false); + return 0; + + // Default event handler + default: return DefWindowProc (hWnd, uMsg, wParam, lParam); + } +} +//------------------------------------------------------------------------------ + +int WINAPI WinMain (HINSTANCE hInstance, + HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) +{ + + const LPCWSTR appname = TEXT("Clipper Demo"); + + WNDCLASS wndclass; + MSG msg; + + // Define the window class + wndclass.style = 0; + wndclass.lpfnWndProc = (WNDPROC)MainWndProc; + wndclass.cbClsExtra = 0; + wndclass.cbWndExtra = 0; + wndclass.hInstance = hInstance; + wndclass.hIcon = LoadIcon(hInstance, appname); + wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); + wndclass.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); + wndclass.lpszMenuName = appname; + wndclass.lpszClassName = appname; + + // Register the window class + if (!RegisterClass(&wndclass)) return FALSE; + + HMENU menu = LoadMenu(hInstance, MAKEINTRESOURCE(1)); + HACCEL accel = LoadAccelerators(hInstance, MAKEINTRESOURCE(1)); + + int windowSizeX = 540, windowSizeY = 400; + + int dx = GetSystemMetrics(SM_XVIRTUALSCREEN); + int dy = GetSystemMetrics(SM_YVIRTUALSCREEN); + dx += ((GetSystemMetrics(SM_CXSCREEN) -windowSizeX) /2); + dy += ((GetSystemMetrics(SM_CYSCREEN) -windowSizeY) /2); + + // Create the window + hWnd = CreateWindow( + appname, + appname, + WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, + dx, dy, windowSizeX, windowSizeY, + NULL, + menu, + hInstance, + NULL); + + if (!hWnd) return FALSE; + + //replace the main window icon with Resource Icon #1 ... + HANDLE small_ico = LoadImage(hInstance, MAKEINTRESOURCE(1), IMAGE_ICON, 16, 16, 0); + HANDLE big_ico = LoadImage(hInstance, MAKEINTRESOURCE(1), IMAGE_ICON, 32, 32, 0); + SendMessage(hWnd, WM_SETICON, ICON_SMALL, (LPARAM)small_ico); + SendMessage(hWnd, WM_SETICON, ICON_BIG, (LPARAM)big_ico); + + InitCommonControls(); + hStatus = CreateWindowEx(0, L"msctls_statusbar32", NULL, WS_CHILD | WS_VISIBLE, + 0, 0, 0, 0, hWnd, (HMENU)0, hInstance, NULL); + SetWindowText(hStatus, L" Copyright © Angus Johnson 2011"); + + // Initialize OpenGL + InitGraphics(); + + srand((unsigned)time(0)); + UpdatePolygons(false); + + // Display the window + ShowWindow(hWnd, nCmdShow); + UpdateWindow(hWnd); + + // Event loop + while (true) + { + if (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE) == TRUE) + { + if (!GetMessage(&msg, NULL, 0, 0)) return TRUE; + + if (!TranslateAccelerator(hWnd, accel, &msg)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + } + } + wglMakeCurrent(NULL, NULL); + wglDeleteContext(hRC); + ReleaseDC(hWnd, hDC); +} +//------------------------------------------------------------------------------ diff --git a/clipper/cpp/cpp_opengl/menu.res b/clipper/cpp/cpp_opengl/menu.res new file mode 100755 index 0000000000000000000000000000000000000000..b639bb8e6656095214a8f9e6ff49d4efdac6fc34 GIT binary patch literal 1352 zcmai!%}*Lp6vfXZF6yF*`)+1aN*6ZT@2-WWCKdURgs@XY934SHE8W?sOSOMy{|oxN zcb5aI{hrEpsz}ls>|VpB9%EA zb8^bwtYz(no$x7XK+b~J)yJc&p+}hYpXKfAj7U4Y z8*9Mb#oqhSyRnEPPTu(9hC-Z6;*ULN-|wXXGbNHKFrAJn%x&ThIXe%!U6J2BPC2!T zZPMnkOLY4``TzN4%4VcpdI{hta#2RA6OLABY`$4r>bZ5G+)Ak|M4vP!N0 zBEH#g;nvkZp;wD*3O>bbIP*exFzZA-Bc{#rQ@pzKe#81ko)oq17rmnz5fYR;B*qq2 zo0<`}KRhwdWU@H-{~^)~{tv{nPCUaV9UGSD)Ud^57?z1?*w%q#m0Y&3P=#TQi7{NE z6T?-yGJNYbMtY|c-@iv8JOAMIMf!-^w*N#2hM$=resize(1); + (*rect)[0].resize(4); + //mexPrintf("4\n"); + (*rect)[0][0].X=(long64)rects[i]; + (*rect)[0][0].Y=(long64)rects[i+1*len]; + (*rect)[0][1].X=(long64)rects[i]; + (*rect)[0][1].Y=(long64)rects[i+3*len]; + (*rect)[0][2].X=(long64)rects[i+2*len]; + (*rect)[0][2].Y=(long64)rects[i+3*len]; + (*rect)[0][3].X=(long64)rects[i+2*len]; + (*rect)[0][3].Y=(long64)rects[i+1*len]; + //mexPrintf("3\n"); + if(i==starti){ + solution_old=rect; + }else{ + Clipper c; + c.AddPolygons(*solution_old,ptSubject); + c.AddPolygons(*rect,ptClip); + solution = new Polygons(); + c.Execute(ctUnion,*solution,pftNonZero,pftNonZero); + //mexPrintf("arean %f\n",total); + delete solution_old; + delete rect; + solution_old=solution; + } + } + return solution_old; +} + +void mexFunction(int nlhs, mxArray *plhs[], + int nrhs, const mxArray *prhs[]) +{ + mexPrintf("entered mexfn\n"); + mexEvalString("drawnow;"); + long64* rects=((long64*)mxGetPr(prhs[0])); + int len = *(mxGetDimensions(prhs[0])); + long64* ntofind=((long64*)mxGetPr(prhs[1])); + //mexPrintf("len %d\n",len); + int out[1]; + out[0] = (int) (*ntofind); + mexPrintf("outsize:%d\n",out[0]); + mexEvalString("drawnow;"); + plhs[0]=mxCreateNumericArray(1, out, mxDOUBLE_CLASS, mxREAL); + plhs[1]=mxCreateNumericArray(1, out, mxDOUBLE_CLASS, mxREAL); + double* outdata=((double*)mxGetPr(plhs[0])); + double* outscores=((double*)mxGetPr(plhs[1])); + int maximg=0; + int maxdetr=0; + for(int i=0; imaxdetr) maxdetr=(long64)rects[i+4*len]; + if(rects[i+5*len]>maximg) maximg=(long64)rects[i+5*len]; + } + vector*> allpolys(maxdetr+1); + for(int i = 0; i<=maxdetr; i++){ + allpolys[i] = new vector(maximg+1); + } + int i = 0; + mexPrintf("generating polys_new\n"); + mexEvalString("drawnow;"); + while(i totalpolys(maximg+1); + vector tprequiresdelete(maximg+1,false); + vector prevcontribution(maxdetr+1,1.0/0.0); + mexPrintf("computing unions\n"); + mexEvalString("drawnow;"); + double totalcoverage=0; + for(int i = 0; i<*ntofind; ++i){ + int bestdetr=0; + double bestarea=0; + vector bestunionpolys(maximg+1); + vector buprequiresdelete(maximg+1,false); + vector bupcamefromtp(maximg+1,false); + for(int curdetr=1; curdetr<=maxdetr; curdetr++){ + if(prevcontribution[curdetr] tmpunionpolys(maximg+1); + vector tuprequiresdelete(maximg+1,false); + vector tupcamefromtp(maximg+1,false); + for(int curimg=1; curimg<=maximg; curimg++){ + Clipper c; + vector* curdetrpolys; + curdetrpolys=(allpolys[curdetr]); + if(totalpolys[curimg]==NULL && (*curdetrpolys)[curimg]==NULL){ + }else if(totalpolys[curimg]==NULL && (*curdetrpolys)[curimg]!=NULL){ + //if(i>0){ + //mexPrintf("from new\n"); + //mexEvalString("drawnow;"); + //} + tmpunionpolys[curimg]=(*curdetrpolys)[curimg]; + totalarea+=PsArea(*(*curdetrpolys)[curimg]); + }else if(totalpolys[curimg]!=NULL && (*curdetrpolys)[curimg]==NULL){ + //mexPrintf("from prev\n"); + //mexEvalString("drawnow;"); + tmpunionpolys[curimg]=totalpolys[curimg]; + totalarea+=PsArea(*(totalpolys[curimg])); + tuprequiresdelete[curimg]=tprequiresdelete[curimg]; + tupcamefromtp[curimg]=true; + }else{ + //mexPrintf("unioning\n"); + //mexEvalString("drawnow;"); + c.AddPolygons(*(totalpolys[curimg]),ptSubject); + c.AddPolygons(*((*curdetrpolys)[curimg]),ptClip); + tmpunionpolys[curimg]=new Polygons(); + c.Execute(ctUnion,*(tmpunionpolys[curimg]),pftNonZero,pftNonZero); + tuprequiresdelete[curimg]=true; + totalarea+=PsArea(*tmpunionpolys[curimg]); + //mexPrintf("doneunion\n"); + //mexEvalString("drawnow;"); + } + } + prevcontribution[curdetr]=totalarea-totalcoverage; + if(totalarea>bestarea){ + bestarea=totalarea; + for(int curimg=1; curimg<=maximg; curimg++){ + if(buprequiresdelete[curimg] && !bupcamefromtp[curimg]) delete bestunionpolys[curimg]; + } + bestunionpolys=tmpunionpolys; + buprequiresdelete=tuprequiresdelete; + bupcamefromtp=tupcamefromtp; + bestdetr=curdetr; + //mexPrintf("new best: %d, area %f\n", bestdetr,bestarea); + //mexEvalString("drawnow;"); + }else{ + for(int curimg=1; curimg<=maximg; curimg++){ + if(tuprequiresdelete[curimg] && !tupcamefromtp[curimg]) delete tmpunionpolys[curimg]; + } + } + } + outdata[i]=bestdetr; + mexPrintf("selected: %d, area %f; completed %d / %d\n", bestdetr, bestarea, i+1,*ntofind); + mexEvalString("drawnow;"); + outscores[i]=bestarea-totalcoverage; + totalcoverage=bestarea; + for(int curimg=1; curimg<=maximg; curimg++){ + if(tprequiresdelete[curimg] && !bupcamefromtp[curimg]) delete totalpolys[curimg]; + } + totalpolys=bestunionpolys; + tprequiresdelete=buprequiresdelete; + } + for(int curimg=1; curimg<=maximg; curimg++){ + if(tprequiresdelete[curimg]) delete totalpolys[curimg]; + for(int curdetr=1; curdetr<=maxdetr; curdetr++){ + //mexPrintf("allpolydelete:\n"); + //mexEvalString("drawnow;"); + if((*allpolys[curdetr])[curimg]!=NULL) delete (*allpolys[curdetr])[curimg]; + } + // mexPrintf("allpolyfinaldelete:\n"); + // mexEvalString("drawnow;"); + } + for(int curdetr=1;curdetr<=maxdetr;curdetr++){ + delete allpolys[curdetr]; + } + +} + diff --git a/clipper/greedySelectDetrsCoveragemex.mexa64 b/clipper/greedySelectDetrsCoveragemex.mexa64 new file mode 100755 index 0000000000000000000000000000000000000000..6bcb5450898669f79233ddec2a8bcc9a360ad227 GIT binary patch literal 99102 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∈vZmS}kaVT;V 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 z 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 +that wraps the Clipper library can be downloaded from: + +https://metacpan.org/module/Math::Clipper \ No newline at end of file diff --git a/clipper/python/clipper.py b/clipper/python/clipper.py new file mode 100755 index 0000000..7b19c29 --- /dev/null +++ b/clipper/python/clipper.py @@ -0,0 +1,2107 @@ +#=============================================================================== +# # +# Author : Angus Johnson # +# Version : 5.1.0 # +# Date : 1 February 2013 # +# Website : http://www.angusj.com # +# Copyright : Angus Johnson 2010-2013 # +# # +# License: # +# Use, modification & distribution is subject to Boost Software License Ver 1. # +# http://www.boost.org/LICENSE_1_0.txt # +# # +# Attributions: # +# The code in this library is an extension of Bala Vatti's clipping algorithm: # +# "A generic solution to polygon clipping" # +# Communications of the ACM, Vol 35, Issue 7 (July 1992) PP 56-63. # +# http://portal.acm.org/citation.cfm?id=129906 # +# # +# Computer graphics and geometric modeling: implementation and algorithms # +# By Max K. Agoston # +# Springer; 1 edition (January 4, 2005) # +# http://books.google.com/books?q=vatti+clipping+agoston # +# # +# See also: # +# "Polygon Offsetting by Computing Winding Numbers" # +# Paper no. DETC2005-85513 PP. 565-575 # +# ASME 2005 International Design Engineering Technical Conferences # +# and Computers and Information in Engineering Conference (IDETC/CIE2005) # +# September 24-28, 2005 , Long Beach, California, USA # +# http://www.me.berkeley.edu/~mcmains/pubs/DAC05OffsetPolygon.pdf # +# # +#=============================================================================== + +import math +from collections import namedtuple +from decimal import Decimal, getcontext + +getcontext().prec = 8 +horizontal = Decimal('-Infinity') + +class ClipType: (Intersection, Union, Difference, Xor) = range(4) +class PolyType: (Subject, Clip) = range(2) +class PolyFillType: (EvenOdd, NonZero, Positive, Negative) = range(4) +class JoinType: (Square, Round, Miter) = range(3) +class EdgeSide: (Left, Right) = range(2) +class Protects: (Neither, Left, Right, Both) = range(4) +class Direction: (LeftToRight, RightToLeft) = range(2) + +Point = namedtuple('Point', 'x y') + +class LocalMinima(object): + leftBound = rightBound = nextLm = None + def __init__(self, y, leftBound, rightBound): + self.y = y + self.leftBound = leftBound + self.rightBound = rightBound + +class Scanbeam(object): + __slots__ = ('y','nextSb') + def __init__(self, y, nextSb = None): + self.y = y + self.nextSb = nextSb + def __repr__(self): + s = 'None' + if self.nextSb is not None: s = '' + return "(y:%i, nextSb:%s)" % (self.y, s) + +class IntersectNode(object): + __slots__ = ('e1','e2','pt','nextIn') + def __init__(self, e1, e2, pt): + self.e1 = e1 + self.e2 = e2 + self.pt = pt + self.nextIn = None + +class OutPt(object): + __slots__ = ('idx','pt','prevOp','nextOp') + def __init__(self, idx, pt): + self.idx = idx + self.pt = pt + self.prevOp = None + self.nextOp = None + +class OutRec(object): + __slots__ = ('idx','bottomPt','isHole','FirstLeft', 'pts','PolyNode') + def __init__(self, idx): + self.idx = idx + self.bottomPt = None + self.isHole = False + self.FirstLeft = None + self.pts = None + self.PolyNode = None + +class JoinRec(object): + __slots__ = ('pt1a','pt1b','poly1Idx','pt2a', 'pt2b','poly2Idx') + +class HorzJoin(object): + edge = None + savedIdx = 0 + prevHj = None + nextHj = None + def __init__(self, edge, idx): + self.edge = edge + self.savedIdx = idx + +#=============================================================================== +# Unit global functions ... +#=============================================================================== +def IntsToPoints(ints): + result = [] + for i in range(0, len(ints), 2): + result.append(Point(ints[i], ints[i+1])) + return result + +def Area(polygon): + # see http://www.mathopenref.com/coordpolygonarea2.html + highI = len(polygon) - 1 + A = (polygon[highI].x + polygon[0].x) * (polygon[0].y - polygon[highI].y) + for i in range(highI): + A += (polygon[i].x + polygon[i+1].x) * (polygon[i+1].y - polygon[i].y) + return float(A) / 2 + +def Orientation(polygon): + return Area(polygon) > 0.0 + +#=============================================================================== +# PolyNode & PolyTree classes (+ ancilliary functions) +#=============================================================================== +class PolyNode(object): + """Node of PolyTree""" + + def __init__(self): + self.Contour = [] + self.Childs = [] + self.Parent = None + self.Index = 0 + self.ChildCount = 0 + + def IsHole(self): + result = True + while (self.Parent is not None): + result = not result + self.Parent = self.Parent.Parent + return result + + def GetNext(self): + if (self.ChildCount > 0): + return self.Childs[0] + else: + return self._GetNextSiblingUp() + + def _AddChild(self, node): + self.Childs.append(node) + node.Index = self.ChildCount + node.Parent = self + self.ChildCount += 1 + + def _GetNextSiblingUp(self): + if (self.Parent is None): + return None + elif (self.Index == self.Parent.ChildCount - 1): + return self.Parent._GetNextSiblingUp() + else: + return self.Parent.Childs[self.Index +1] + +class PolyTree(PolyNode): + """Container for PolyNodes""" + + def __init__(self): + PolyNode.__init__(self) + self._AllNodes = [] + + def Clear(self): + self._AllNodes = [] + self.Childs = [] + self.ChildCount = 0 + + def GetFirst(self): + if (self.ChildCount > 0): + return self.Childs[0] + else: + return None + + def Total(self): + return len(self._AllNodes) + +def _AddPolyNodeToPolygons(polynode, polygons): + """Internal function for PolyTreeToPolygons()""" + if (len(polynode.Contour) > 0): + polygons.append(polynode.Contour) + for i in range(polynode.ChildCount): + _AddPolyNodeToPolygons(polynode.Childs[i], polygons) + +def PolyTreeToPolygons(polyTree): + result = [] + _AddPolyNodeToPolygons(polyTree, result) + return result + +#=============================================================================== +# Edge class +#=============================================================================== + +class Edge(object): + + def __init__(self): + self.xBot, self.yBot, self.xCurr, self.yCurr, = 0, 0, 0, 0 + self.xTop, self.yTop, self.tmpX = 0, 0, 0 + self.dx, self.deltaX , self.deltaY = Decimal(0), Decimal(0), Decimal(0) + self.polyType = PolyType.Subject + self.side = EdgeSide.Left + self.windDelta, self.windCnt, self.windCnt2 = 0, 0, 0 + self.outIdx = -1 + self.nextE, self.prevE, self.nextInLML = None, None, None + self.prevInAEL, self.nextInAEL, self.prevInSEL, self.nextInSEL = None, None, None, None + + def __repr__(self): + return "(%i,%i -> %i,%i {dx:%0.2f} %i {%x})" % \ + (self.xBot, self.yBot, self.xTop, self.yTop, self.dx, self.outIdx, id(self)) + +#=============================================================================== +# ClipperBase class (+ data structs & ancilliary functions) +#=============================================================================== + +def _PointsEqual(pt1, pt2): + return (pt1.x == pt2.x) and (pt1.y == pt2.y) + +def _SlopesEqual(pt1, pt2, pt3, pt4 = None): + if pt4 is None: + return (pt1.y-pt2.y)*(pt2.x-pt3.x) == (pt1.x-pt2.x)*(pt2.y-pt3.y) + else: + return (pt1.y-pt2.y)*(pt3.x-pt4.x) == (pt1.x-pt2.x)*(pt3.y-pt4.y) + +def _SlopesEqual2(e1, e2): + return e1.deltaY * e2.deltaX == e1.deltaX * e2.deltaY + +def _SetDx(e): + e.deltaX = Decimal(e.xTop - e.xBot) + e.deltaY = Decimal(e.yTop - e.yBot) + if e.deltaY == 0: e.dx = horizontal + else: e.dx = e.deltaX/e.deltaY + +def _SwapSides(e1, e2): + side = e1.side + e1.side = e2.side + e2.side = side + +def _SwapPolyIndexes(e1, e2): + idx = e1.outIdx + e1.outIdx = e2.outIdx + e2.outIdx = idx + +def _InitEdge(e, eNext, ePrev, pt, polyType): + e.nextE = eNext + e.prevE = ePrev + e.xCurr = pt.x + e.yCurr = pt.y + if e.yCurr >= e.nextE.yCurr: + e.xBot = e.xCurr + e.yBot = e.yCurr + e.xTop = e.nextE.xCurr + e.yTop = e.nextE.yCurr + e.windDelta = 1 + else: + e.xTop = e.xCurr + e.yTop = e.yCurr + e.xBot = e.nextE.xCurr + e.yBot = e.nextE.yCurr + e.windDelta = -1 + _SetDx(e) + e.outIdx = -1 + e.PolyType = polyType + +def _SwapX(e): + e.xCurr = e.xTop + e.xTop = e.xBot + e.xBot = e.xCurr + +class ClipperBase(object): + + def __init__(self): + self._EdgeList = [] # 2D array + self._LocalMinList = None # single-linked list of LocalMinima + self._CurrentLocMin = None + + def _InsertLocalMinima(self, lm): + if self._LocalMinList is None: + self._LocalMinList = lm + elif lm.y >= self._LocalMinList.y: + lm.nextLm = self._LocalMinList + self._LocalMinList = lm + else: + tmp = self._LocalMinList + while tmp.nextLm is not None and lm.y < tmp.nextLm.y: + tmp = tmp.nextLm + lm.nextLm = tmp.nextLm + tmp.nextLm = lm + + def _AddBoundsToLML(self, e): + e.nextInLML = None + e = e.nextE + while True: + if e.dx == horizontal: + if (e.nextE.yTop < e.yTop) and (e.nextE.xBot > e.prevE.xBot): break + if (e.xTop != e.prevE.xBot): _SwapX(e) + e.nextInLML = e.prevE + elif e.yBot == e.prevE.yBot: break + else: e.nextInLML = e.prevE + e = e.nextE + + if e.dx == horizontal: + if (e.xBot != e.prevE.xBot): _SwapX(e) + lm = LocalMinima(e.prevE.yBot, e.prevE, e) + elif (e.dx < e.prevE.dx): + lm = LocalMinima(e.prevE.yBot, e.prevE, e) + else: + lm = LocalMinima(e.prevE.yBot, e, e.prevE) + lm.leftBound.side = EdgeSide.Left + lm.rightBound.side = EdgeSide.Right + self._InsertLocalMinima(lm) + while True: + if e.nextE.yTop == e.yTop and e.nextE.dx != horizontal: break + e.nextInLML = e.nextE + e = e.nextE + if e.dx == horizontal and e.xBot != e.prevE.xTop: _SwapX(e) + return e.nextE + + def _Reset(self): + lm = self._LocalMinList + if lm is not None: self._CurrentLocMin = lm + while lm is not None: + e = lm.leftBound + while e is not None: + e.xCurr = e.xBot + e.yCurr = e.yBot + e.side = EdgeSide.Left + e.outIdx = -1 + e = e.nextInLML + e = lm.rightBound + while e is not None: + e.xCurr = e.xBot + e.yCurr = e.yBot + e.side = EdgeSide.Right + e.outIdx = -1 + e = e.nextInLML + lm = lm.nextLm + + def AddPolygon(self, polygon, polyType): + ln = len(polygon) + if ln < 3: return False + pg = polygon[:] + j = 0 + # remove duplicate points and co-linear points + for i in range(1, len(polygon)): + if _PointsEqual(pg[j], polygon[i]): + continue + elif (j > 0) and _SlopesEqual(pg[j-1], pg[j], polygon[i]): + if _PointsEqual(pg[j-1], polygon[i]): j -= 1 + else: j += 1 + pg[j] = polygon[i] + if (j < 2): return False + # remove duplicate points and co-linear edges at the loop around + # of the start and end coordinates ... + ln = j +1 + while (ln > 2): + if _PointsEqual(pg[j], pg[0]): j -= 1 + elif _PointsEqual(pg[0], pg[1]) or _SlopesEqual(pg[j], pg[0], pg[1]): + pg[0] = pg[j] + j -= 1 + elif _SlopesEqual(pg[j-1], pg[j], pg[0]): j -= 1 + elif _SlopesEqual(pg[0], pg[1], pg[2]): + for i in range(2, j +1): pg[i-1] = pg[i] + j -= 1 + else: break + ln -= 1 + if ln < 3: return False + edges = [] + for i in range(ln): + edges.append(Edge()) + edges[0].xCurr = pg[0].x + edges[0].yCurr = pg[0].y + _InitEdge(edges[ln-1], edges[0], edges[ln-2], pg[ln-1], polyType) + for i in range(ln-2, 0, -1): + _InitEdge(edges[i], edges[i+1], edges[i-1], pg[i], polyType) + _InitEdge(edges[0], edges[1], edges[ln-1], pg[0], polyType) + e = edges[0] + eHighest = e + while True: + e.xCurr = e.xBot + e.yCurr = e.yBot + if e.yTop < eHighest.yTop: eHighest = e + e = e.nextE + if e == edges[0]: break + # make sure eHighest is positioned so the following loop works safely ... + if eHighest.windDelta > 0: eHighest = eHighest.nextE + if eHighest.dx == horizontal: eHighest = eHighest.nextE + # finally insert each local minima ... + e = eHighest + while True: + e = self._AddBoundsToLML(e) + if e == eHighest: break + self._EdgeList.append(edges) + + def AddPolygons(self, polygons, polyType): + result = False + for p in polygons: + if self.AddPolygon(p, polyType): result = True + return result + + def Clear(self): + self._EdgeList = [] + self._LocalMinList = None + self._CurrentLocMin = None + + def _PopLocalMinima(self): + if self._CurrentLocMin is not None: + self._CurrentLocMin = self._CurrentLocMin.nextLm + +#=============================================================================== +# Clipper class (+ data structs & ancilliary functions) +#=============================================================================== +def _IntersectPoint(edge1, edge2): + if _SlopesEqual2(edge1, edge2): return Point(0,0), False + if edge1.dx == 0: + x = edge1.xBot + if edge2.dx == horizontal: + y = edge2.yBot + else: + b2 = edge2.yBot - Decimal(edge2.xBot)/edge2.dx + y = round(Decimal(x)/edge2.dx + b2) + elif edge2.dx == 0: + x = edge2.xBot + if edge1.dx == horizontal: + y = edge1.yBot + else: + b1 = edge1.yBot - Decimal(edge1.xBot)/edge1.dx + y = round(Decimal(x)/edge1.dx + b1) + else: + b1 = edge1.xBot - edge1.yBot * edge1.dx + b2 = edge2.xBot - edge2.yBot * edge2.dx + m = Decimal(b2-b1)/(edge1.dx - edge2.dx) + y = round(m) + if math.fabs(edge1.dx) < math.fabs(edge2.dx): + x = round(edge1.dx * m + b1) + else: + x = round(edge2.dx * m + b2) + if (y < edge1.yTop) or (y < edge2.yTop): + if (edge1.yTop > edge2.yTop): + return Point(edge1.xTop,edge1.yTop), _TopX(edge2, edge1.yTop) < edge1.xTop + else: + return Point(edge2.xTop,edge2.yTop), _TopX(edge1, edge2.yTop) > edge2.xTop + else: + return Point(x,y), True + +def _TopX(e, currentY): + if currentY == e.yTop: return e.xTop + elif e.xTop == e.xBot: return e.xBot + else: return e.xBot + round(e.dx * Decimal(currentY - e.yBot)) + +def _E2InsertsBeforeE1(e1,e2): + if e2.xCurr == e1.xCurr: + return e2.dx > e1.dx + else: + return e2.xCurr < e1.xCurr + +def _IsMinima(e): + return e is not None and e.prevE.nextInLML != e and e.nextE.nextInLML != e + +def _IsMaxima(e, y): + return e is not None and e.yTop == y and e.nextInLML is None + +def _IsIntermediate(e, y): + return e.yTop == y and e.nextInLML is not None + +def _GetMaximaPair(e): + if not _IsMaxima(e.nextE, e.yTop) or e.nextE.xTop != e.xTop: + return e.prevE + else: + return e.nextE + +def _GetnextInAEL(e, direction): + if direction == Direction.LeftToRight: return e.nextInAEL + else: return e.prevInAEL + +def _ProtectLeft(val): + if val: return Protects.Both + else: return Protects.Right + +def _ProtectRight(val): + if val: return Protects.Both + else: return Protects.Left + +def _SwapIntersectNodes(int1, int2): + e1 = int1.e1 + e2 = int1.e2 + p = int1.pt + int1.e1 = int2.e1 + int1.e2 = int2.e2 + int1.pt = int2.pt + int2.e1 = e1 + int2.e2 = e2 + int2.pt = p + +def _GetDx(pt1, pt2): + if (pt1.y == pt2.y): return horizontal + else: return Decimal(pt2.x - pt1.x)/(pt2.y - pt1.y) + +def _ProcessParam1BeforeParam2(node1, node2): + if node1.pt.y != node2.pt.y: + return node1.pt.y > node2.pt.y + if node1.e1 == node2.e1 or node1.e2 == node2.e1: + result = node2.pt.x > node1.pt.x + if node2.e1.dx > 0: result = not result + return result + elif node1.e1 == node2.e2 or node1.e2 == node2.e2: + result = node2.pt.x > node1.pt.x + if node2.e2.dx > 0: result = not result + return result + else: + return node2.pt.x > node1.pt.x + +def _Param1RightOfParam2(outRec1, outRec2): + while outRec1 is not None: + outRec1 = outRec1.FirstLeft + if outRec1 == outRec2: return True + return False + +def _FirstParamIsbottomPt(btmPt1, btmPt2): + p = btmPt1.prevOp + while _PointsEqual(p.pt, btmPt1.pt) and (p != btmPt1): p = p.prevOp + dx1p = abs(_GetDx(btmPt1.pt, p.pt)) + p = btmPt1.nextOp + while _PointsEqual(p.pt, btmPt1.pt) and (p != btmPt1): p = p.nextOp + dx1n = abs(_GetDx(btmPt1.pt, p.pt)) + + p = btmPt2.prevOp + while _PointsEqual(p.pt, btmPt2.pt) and (p != btmPt2): p = p.prevOp + dx2p = abs(_GetDx(btmPt2.pt, p.pt)) + p = btmPt2.nextOp + while _PointsEqual(p.pt, btmPt2.pt) and (p != btmPt2): p = p.nextOp + dx2n = abs(_GetDx(btmPt2.pt, p.pt)) + return (dx1p >= dx2p and dx1p >= dx2n) or (dx1n >= dx2p and dx1n >= dx2n) + +def _GetBottomPt(pp): + dups = None + p = pp.nextOp + while p != pp: + if p.pt.y > pp.pt.y: + pp = p + dups = None + elif p.pt.y == pp.pt.y and p.pt.x <= pp.pt.x: + if p.pt.x < pp.pt.x: + dups = None + pp = p + else: + if p.nextOp != pp and p.prevOp != pp: dups = p + p = p.nextOp + if dups is not None: + while dups != p: + if not _FirstParamIsbottomPt(p, dups): pp = dups + dups = dups.nextOp + while not _PointsEqual(dups.pt, pp.pt): dups = dups.nextOp + return pp + +def _GetLowermostRec(outRec1, outRec2): + outPt1 = outRec1.bottomPt + outPt2 = outRec2.bottomPt + if (outPt1.pt.y > outPt2.pt.y): return outRec1 + elif (outPt1.pt.y < outPt2.pt.y): return outRec2 + elif (outPt1.pt.x < outPt2.pt.x): return outRec1 + elif (outPt1.pt.x > outPt2.pt.x): return outRec2 + elif (outPt1.nextOp == outPt1): return outRec2 + elif (outPt2.nextOp == outPt2): return outRec1 + elif _FirstParamIsbottomPt(outPt1, outPt2): return outRec1 + else: return outRec2 + +def _SetHoleState(e, outRec, polyOutList): + isHole = False + e2 = e.prevInAEL + while e2 is not None: + if e2.outIdx >= 0: + isHole = not isHole + if outRec.FirstLeft is None: + outRec.FirstLeft = polyOutList[e2.outIdx] + e2 = e2.prevInAEL + outRec.isHole = isHole + +def _AddOutPt(e, pt, polyOutList): + toFront = e.side == EdgeSide.Left + if e.outIdx < 0: + outRec = OutRec(len(polyOutList)) + e.outIdx = outRec.idx + polyOutList.append(outRec) + op = OutPt(outRec.idx, pt) + op.nextOp = op + op.prevOp = op + outRec.pts = op + outRec.bottomPt = op + _SetHoleState(e, outRec, polyOutList) + else: + outRec = polyOutList[e.outIdx] + op = outRec.pts + if (toFront and _PointsEqual(pt, op.pt)) or \ + (not toFront and _PointsEqual(pt, op.prevOp.pt)): return + op2 = OutPt(outRec.idx, pt) + if (op2.pt.y == outRec.bottomPt.pt.y) and \ + (op2.pt.x < outRec.bottomPt.pt.x): + outRec.bottomPt = op2 + op2.nextOp = op + op2.prevOp = op.prevOp + op.prevOp.nextOp = op2 + op.prevOp = op2 + if toFront: outRec.pts = op2 + +def _PointCount(pts): + if pts is None: return 0 + p = pts + result = 0 + while True: + result += 1 + p = p.nextOp + if p == pts: break + return result + +def _PointIsVertex(pt, outPts): + op = outPts + while True: + if _PointsEqual(op.pt, pt): return True + op = op.nextOp + if op == outPts: break + return False + +def _ReversePolyPtLinks(pp): + if pp is None: return + pp1 = pp + while True: + pp2 = pp1.nextOp + pp1.nextOp = pp1.prevOp + pp1.prevOp = pp2; + pp1 = pp2 + if pp1 == pp: break + +def _DoEdge1(e1, e2, pt, polyOutList): + _AddOutPt(e1, pt, polyOutList) + _SwapSides(e1, e2) + _SwapPolyIndexes(e1, e2) + +def _DoEdge2(e1, e2, pt, polyOutList): + _AddOutPt(e2, pt, polyOutList) + _SwapSides(e1, e2) + _SwapPolyIndexes(e1, e2) + +def _DoBothEdges(e1, e2, pt, polyOutList): + _AddOutPt(e1, pt, polyOutList) + _AddOutPt(e2, pt, polyOutList) + _SwapSides(e1, e2) + _SwapPolyIndexes(e1, e2) + +def _FixupOutPolygon(outRec): + lastOK = None + outRec.pts = outRec.bottomPt + pp = outRec.pts + while True: + if pp.prevOp == pp or pp.nextOp == pp.prevOp: + outRec.pts = None + outRec.bottomPt = None + return + if _PointsEqual(pp.pt, pp.nextOp.pt) or \ + _SlopesEqual(pp.prevOp.pt, pp.pt, pp.nextOp.pt): + lastOK = None + if pp == outRec.bottomPt: + outRec.bottomPt = None + pp.prevOp.nextOp = pp.nextOp + pp.nextOp.prevOp = pp.prevOp + pp = pp.prevOp + elif pp == lastOK: break + else: + if lastOK is None: lastOK = pp + pp = pp.nextOp + if outRec.bottomPt is None: + outRec.bottomPt = _GetBottomPt(pp) + outRec.bottomPt.idx = outRec.idx + outRec.pts = outRec.bottomPt + +def _FixHoleLinkage(outRec): + if outRec.FirstLeft is None or \ + (outRec.isHole != outRec.FirstLeft.isHole and \ + outRec.FirstLeft.pts is not None): return + orfl = outRec.FirstLeft + while orfl is not None and \ + (orfl.isHole == outRec.isHole or orfl.pts is None): + orfl = orfl.FirstLeft + outRec.FirstLeft = orfl + +def _GetOverlapSegment(pt1a, pt1b, pt2a, pt2b): + # precondition: segments are co-linear + if abs(pt1a.x - pt1b.x) > abs(pt1a.y - pt1b.y): + if pt1a.x > pt1b.x: tmp = pt1a; pt1a = pt1b; pt1b = tmp + if pt2a.x > pt2b.x: tmp = pt2a; pt2a = pt2b; pt2b = tmp + if (pt1a.x > pt2a.x): pt1 = pt1a + else: pt1 = pt2a + if (pt1b.x < pt2b.x): pt2 = pt1b + else: pt2 = pt2b + return pt1, pt2, pt1.x < pt2.x + else: + if pt1a.y < pt1b.y: tmp = pt1a; pt1a = pt1b; pt1b = tmp + if pt2a.y < pt2b.y: tmp = pt2a; pt2a = pt2b; pt2b = tmp + if (pt1a.y < pt2a.y): pt1 = pt1a + else: pt1 = pt2a + if (pt1b.y > pt2b.y): pt2 = pt1b + else: pt2 = pt2b + return pt1, pt2, pt1.y > pt2.y + + +def _FindSegment(outPt, pt1, pt2): + if outPt is None: return outPt, pt1, pt2, False + pt1a = pt1; pt2a = pt2 + outPt2 = outPt + while True: + if _SlopesEqual(pt1a, pt2a, outPt.pt, outPt.prevOp.pt) and _SlopesEqual(pt1a, pt2a, outPt.pt): + pt1, pt2, overlap = _GetOverlapSegment(pt1a, pt2a, outPt.pt, outPt.prevOp.pt) + if overlap: return outPt, pt1, pt2, True + outPt = outPt.nextOp + if outPt == outPt2: return outPt, pt1, pt2, False + +def _Pt3IsBetweenPt1AndPt2(pt1, pt2, pt3): + if _PointsEqual(pt1, pt3) or _PointsEqual(pt2, pt3): return True + elif pt1.x != pt2.x: return (pt1.x < pt3.x) == (pt3.x < pt2.x) + else: return (pt1.y < pt3.y) == (pt3.y < pt2.y) + +def _InsertPolyPtBetween(outPt1, outPt2, pt): + if outPt1 == outPt2: raise Exception("JoinError") + result = OutPt(outPt1.idx, pt) + if outPt2 == outPt1.nextOp: + outPt1.nextOp = result + outPt2.prevOp = result + result.nextOp = outPt2 + result.prevOp = outPt1 + else: + outPt2.nextOp = result + outPt1.prevOp = result + result.nextOp = outPt1 + result.prevOp = outPt2 + return result + +def _PointInPolygon(pt, outPt): + result = False + outPt2 = outPt + while True: + if ((((outPt2.pt.y <= pt.y) and (pt.y < outPt2.prevOp.pt.y)) or \ + ((outPt2.prevOp.pt.y <= pt.y) and (pt.y < outPt2.pt.y))) and \ + (pt.x < (outPt2.prevOp.pt.x - outPt2.pt.x) * (pt.y - outPt2.pt.y) / \ + (outPt2.prevOp.pt.y - outPt2.pt.y) + outPt2.pt.x)): result = not result + outPt2 = outPt2.nextOp + if outPt2 == outPt: break + +def _Poly2ContainsPoly1(outPt1, outPt2): + outPt = outPt1 + while True: + if not _PointIsVertex(outPt.pt, outPt2): break + outPt = outPt.nextOp + if outPt == outPt1: break + while True: + result = _PointInPolygon(outPt.pt, outPt2) + outPt = outPt.nextOp + if not result or outPt == outPt1: break + return result + +class Clipper(ClipperBase): + + def __init__(self): + ClipperBase.__init__(self) + self._PolyOutList = [] + self._ClipType = ClipType.Intersection + self._Scanbeam = None + self._ActiveEdges = None + self._SortedEdges = None + self._IntersectNodes = None + self._ClipFillType = PolyFillType.EvenOdd + self._SubjFillType = PolyFillType.EvenOdd + self._ExecuteLocked = False + self._ReverseOutput = False + self._UsingPolyTree = False + self._JoinList = None + self._HorzJoins = None + + def _Reset(self): + ClipperBase._Reset(self) + self._Scanbeam = None + self._PolyOutList = [] + lm = self._LocalMinList + while lm is not None: + self._InsertScanbeam(lm.y) + self._InsertScanbeam(lm.leftBound.yTop) + lm = lm.nextLm + + def Clear(self): + self._PolyOutList = [] + ClipperBase.Clear(self) + + def _InsertScanbeam(self, y): + if self._Scanbeam is None: + self._Scanbeam = Scanbeam(y) + elif y > self._Scanbeam.y: + self._Scanbeam = Scanbeam(y, self._Scanbeam) + else: + sb = self._Scanbeam + while sb.nextSb is not None and y <= sb.nextSb.y: + sb = sb.nextSb + if y == sb.y: return + newSb = Scanbeam(y, sb.nextSb) + sb.nextSb = newSb + + def _PopScanbeam(self): + result = self._Scanbeam.y + self._Scanbeam = self._Scanbeam.nextSb + return result + + def _SetWindingCount(self, edge): + e = edge.prevInAEL + while e is not None and e.PolyType != edge.PolyType: + e = e.prevInAEL + if e is None: + edge.windCnt = edge.windDelta + edge.windCnt2 = 0 + e = self._ActiveEdges + elif self._IsEvenOddFillType(edge): + edge.windCnt = 1 + edge.windCnt2 = e.windCnt2 + e = e.nextInAEL + else: + if e.windCnt * e.windDelta < 0: + if (abs(e.windCnt) > 1): + if (e.windDelta * edge.windDelta < 0): edge.windCnt = e.windCnt + else: edge.windCnt = e.windCnt + edge.windDelta + else: + edge.windCnt = e.windCnt + e.windDelta + edge.windDelta + elif (abs(e.windCnt) > 1) and (e.windDelta * edge.windDelta < 0): + edge.windCnt = e.windCnt + elif e.windCnt + edge.windDelta == 0: + edge.windCnt = e.windCnt + else: + edge.windCnt = e.windCnt + edge.windDelta + edge.windCnt2 = e.windCnt2 + e = e.nextInAEL + # update windCnt2 ... + if self._IsEvenOddAltFillType(edge): + while (e != edge): + if edge.windCnt2 == 0: edge.windCnt2 = 1 + else: edge.windCnt2 = 0 + e = e.nextInAEL + else: + while (e != edge): + edge.windCnt2 += e.windDelta + e = e.nextInAEL + + def _IsEvenOddFillType(self, edge): + if edge.PolyType == PolyType.Subject: + return self._SubjFillType == PolyFillType.EvenOdd + else: + return self._ClipFillType == PolyFillType.EvenOdd + + def _IsEvenOddAltFillType(self, edge): + if edge.PolyType == PolyType.Subject: + return self._ClipFillType == PolyFillType.EvenOdd + else: + return self._SubjFillType == PolyFillType.EvenOdd + + def _IsContributing(self, edge): + result = True + if edge.PolyType == PolyType.Subject: + pft = self._SubjFillType + pft2 = self._ClipFillType + else: + pft = self._ClipFillType + pft2 = self._SubjFillType + if pft == PolyFillType.EvenOdd or pft == PolyFillType.NonZero: + result = abs(edge.windCnt) == 1 + elif pft == PolyFillType.Positive: + result = edge.windCnt == 1 + else: result = edge.windCnt == -1 + if not result: return False + + if self._ClipType == ClipType.Intersection: ########### + if pft2 == PolyFillType.EvenOdd or pft2 == PolyFillType.NonZero: + return edge.windCnt2 != 0 + elif pft2 == PolyFillType.Positive: + return edge.windCnt2 > 0 + else: + return edge.windCnt2 < 0 # Negative + elif self._ClipType == ClipType.Union: ########### + if pft2 == PolyFillType.EvenOdd or pft2 == PolyFillType.NonZero: + return edge.windCnt2 == 0 + elif pft2 == PolyFillType.Positive: + return edge.windCnt2 <= 0 + else: return edge.windCnt2 >= 0 # Negative + elif self._ClipType == ClipType.Difference: ########### + if edge.PolyType == PolyType.Subject: + if pft2 == PolyFillType.EvenOdd or pft2 == PolyFillType.NonZero: + return edge.windCnt2 == 0 + elif edge.PolyType == PolyFillType.Positive: + return edge.windCnt2 <= 0 + else: + return edge.windCnt2 >= 0 + else: + if pft2 == PolyFillType.EvenOdd or pft2 == PolyFillType.NonZero: + return edge.windCnt2 != 0 + elif pft2 == PolyFillType.Positive: + return edge.windCnt2 > 0 + else: + return edge.windCnt2 < 0 + else: # self._ClipType == ClipType.XOR: ########### + if pft2 == PolyFillType.EvenOdd or pft2 == PolyFillType.NonZero: + return edge.windCnt2 != 0 + elif pft2 == PolyFillType.Positive: + return edge.windCnt2 > 0 + else: + return edge.windCnt2 < 0 + + def _AddEdgeToSEL(self, edge): + if self._SortedEdges is None: + self._SortedEdges = edge + edge.prevInSEL = None + edge.nextInSEL = None + else: + # add edge to front of list ... + edge.nextInSEL = self._SortedEdges + edge.prevInSEL = None + self._SortedEdges.prevInSEL = edge + self._SortedEdges = edge + + def _CopyAELToSEL(self): + e = self._ActiveEdges + self._SortedEdges = e + while e is not None: + e.prevInSEL = e.prevInAEL + e.nextInSEL = e.nextInAEL + e = e.nextInAEL + + def _InsertEdgeIntoAEL(self, edge): + edge.prevInAEL = None + edge.nextInAEL = None + if self._ActiveEdges is None: + self._ActiveEdges = edge + elif _E2InsertsBeforeE1(self._ActiveEdges, edge): + edge.nextInAEL = self._ActiveEdges + self._ActiveEdges.prevInAEL = edge + self._ActiveEdges = edge + else: + e = self._ActiveEdges + while e.nextInAEL is not None and \ + not _E2InsertsBeforeE1(e.nextInAEL, edge): + e = e.nextInAEL + edge.nextInAEL = e.nextInAEL + if e.nextInAEL is not None: e.nextInAEL.prevInAEL = edge + edge.prevInAEL = e + e.nextInAEL = edge + + def _InsertLocalMinimaIntoAEL(self, botY): + while self._CurrentLocMin is not None and \ + self._CurrentLocMin.y == botY: + lb = self._CurrentLocMin.leftBound + rb = self._CurrentLocMin.rightBound + self._InsertEdgeIntoAEL(lb) + self._InsertScanbeam(lb.yTop) + self._InsertEdgeIntoAEL(rb) + if self._IsEvenOddFillType(lb): + lb.windDelta = 1 + rb.windDelta = 1 + else: + rb.windDelta = -lb.windDelta + self._SetWindingCount(lb) + rb.windCnt = lb.windCnt + rb.windCnt2 = lb.windCnt2 + if rb.dx == horizontal: + self._AddEdgeToSEL(rb) + self._InsertScanbeam(rb.nextInLML.yTop) + else: + self._InsertScanbeam(rb.yTop) + if self._IsContributing(lb): + self._AddLocalMinPoly(lb, rb, Point(lb.xCurr, self._CurrentLocMin.y)) + + if rb.outIdx >= 0 and rb.dx == horizontal and self._HorzJoins is not None: + hj = self._HorzJoins + while True: + dummy1, dummy2, overlap = _GetOverlapSegment(Point(hj.edge.xBot, hj.edge.yBot), + Point(hj.edge.xTop, hj.edge.yTop), + Point(rb.xBot, rb.yBot), + Point(rb.xTop, rb.yTop)) + if overlap: + self._AddJoin(hj.edge, rb, hj.savedIdx) + hj = hj.nextHj + if hj == self._HorzJoins: break + + if (lb.nextInAEL != rb): + + if rb.outIdx >= 0 and rb.prevInAEL.outIdx >= 0 and _SlopesEqual2(rb.prevInAEL, rb): + self._AddJoin(rb, rb.prevInAEL) + + e = lb.nextInAEL + pt = Point(lb.xCurr, lb.yCurr) + while e != rb: + self._IntersectEdges(rb, e, pt) + e = e.nextInAEL + self._PopLocalMinima() + + def _SwapPositionsInAEL(self, e1, e2): + if e1.nextInAEL == e2: + nextE = e2.nextInAEL + if nextE is not None: nextE.prevInAEL = e1 + prevE = e1.prevInAEL + if prevE is not None: prevE.nextInAEL = e2 + e2.prevInAEL = prevE + e2.nextInAEL = e1 + e1.prevInAEL = e2 + e1.nextInAEL = nextE + elif e2.nextInAEL == e1: + nextE = e1.nextInAEL + if nextE is not None: nextE.prevInAEL = e2 + prevE = e2.prevInAEL + if prevE is not None: prevE.nextInAEL = e1 + e1.prevInAEL = prevE + e1.nextInAEL = e2 + e2.prevInAEL = e1 + e2.nextInAEL = nextE + else: + nextE = e1.nextInAEL + prevE = e1.prevInAEL + e1.nextInAEL = e2.nextInAEL + if e1.nextInAEL is not None: e1.nextInAEL.prevInAEL = e1 + e1.prevInAEL = e2.prevInAEL + if e1.prevInAEL is not None: e1.prevInAEL.nextInAEL = e1 + e2.nextInAEL = nextE + if e2.nextInAEL is not None: e2.nextInAEL.prevInAEL = e2 + e2.prevInAEL = prevE + if e2.prevInAEL is not None: e2.prevInAEL.nextInAEL = e2 + if e1.prevInAEL is None: self._ActiveEdges = e1 + elif e2.prevInAEL is None: self._ActiveEdges = e2 + + def _SwapPositionsInSEL(self, e1, e2): + if e1.nextInSEL == e2: + nextE = e2.nextInSEL + if nextE is not None: nextE.prevInSEL = e1 + prevE = e1.prevInSEL + if prevE is not None: prevE.nextInSEL = e2 + e2.prevInSEL = prevE + e2.nextInSEL = e1 + e1.prevInSEL = e2 + e1.nextInSEL = nextE + elif e2.nextInSEL == e1: + nextE = e1.nextInSEL + if nextE is not None: nextE.prevInSEL = e2 + prevE = e2.prevInSEL + if prevE is not None: prevE.nextInSEL = e1 + e1.prevInSEL = prevE + e1.nextInSEL = e2 + e2.prevInSEL = e1 + e2.nextInSEL = nextE + else: + nextE = e1.nextInSEL + prevE = e1.prevInSEL + e1.nextInSEL = e2.nextInSEL + e1.nextInSEL = e2.nextInSEL + if e1.nextInSEL is not None: e1.nextInSEL.prevInSEL = e1 + e1.prevInSEL = e2.prevInSEL + if e1.prevInSEL is not None: e1.prevInSEL.nextInSEL = e1 + e2.nextInSEL = nextE + if e2.nextInSEL is not None: e2.nextInSEL.prevInSEL = e2 + e2.prevInSEL = prevE + if e2.prevInSEL is not None: e2.prevInSEL.nextInSEL = e2 + if e1.prevInSEL is None: self._SortedEdges = e1 + elif e2.prevInSEL is None: self._SortedEdges = e2 + + def _IsTopHorz(self, xPos): + e = self._SortedEdges + while e is not None: + if (xPos >= min(e.xCurr,e.xTop)) and (xPos <= max(e.xCurr,e.xTop)): + return False + e = e.nextInSEL + return True + + def _ProcessHorizontal(self, horzEdge): + if horzEdge.xCurr < horzEdge.xTop: + horzLeft = horzEdge.xCurr + horzRight = horzEdge.xTop + direction = Direction.LeftToRight + else: + horzLeft = horzEdge.xTop + horzRight = horzEdge.xCurr + direction = Direction.RightToLeft + eMaxPair = None + if horzEdge.nextInLML is None: + eMaxPair = _GetMaximaPair(horzEdge) + e = _GetnextInAEL(horzEdge, direction) + while e is not None: + eNext = _GetnextInAEL(e, direction) + if eMaxPair is not None or \ + ((direction == Direction.LeftToRight) and (e.xCurr <= horzRight)) or \ + ((direction == Direction.RightToLeft) and (e.xCurr >= horzLeft)): + if (e.xCurr == horzEdge.xTop) and eMaxPair is None: + if _SlopesEqual2(e, horzEdge.nextInLML): + if horzEdge.outIdx >= 0 and e.outIdx >= 0: + self._AddJoin(horzEdge.nextInLML, e, horzEdge.outIdx) + break + elif e.dx < horzEdge.nextInLML.dx: break + if e == eMaxPair: + if direction == Direction.LeftToRight: + self._IntersectEdges(horzEdge, e, Point(e.xCurr, horzEdge.yCurr)) + else: + self._IntersectEdges(e, horzEdge, Point(e.xCurr, horzEdge.yCurr)) + return + elif e.dx == horizontal and not _IsMinima(e) and e.xCurr <= e.xTop: + if direction == Direction.LeftToRight: + self._IntersectEdges(horzEdge, e, Point(e.xCurr, horzEdge.yCurr), + _ProtectRight(not self._IsTopHorz(e.xCurr))) + else: + self._IntersectEdges(e, horzEdge, Point(e.xCurr, horzEdge.yCurr), + _ProtectLeft(not self._IsTopHorz(e.xCurr))) + elif (direction == Direction.LeftToRight): + self._IntersectEdges(horzEdge, e, Point(e.xCurr, horzEdge.yCurr), + _ProtectRight(not self._IsTopHorz(e.xCurr))) + else: + self._IntersectEdges(e, horzEdge, Point(e.xCurr, horzEdge.yCurr), + _ProtectLeft(not self._IsTopHorz(e.xCurr))) + self._SwapPositionsInAEL(horzEdge, e) + elif (self._SortedEdges is not None) and \ + ((direction == Direction.LeftToRight and e.xCurr > horzRight) or \ + (direction == Direction.RightToLeft and e.xCurr < horzLeft)): break + e = eNext + if horzEdge.nextInLML is not None: + if horzEdge.outIdx >= 0: + _AddOutPt(horzEdge, Point(horzEdge.xTop, horzEdge.yTop), self._PolyOutList) + self._UpdateEdgeIntoAEL(horzEdge) + else: + if horzEdge.outIdx >= 0: + self._IntersectEdges(horzEdge, eMaxPair, \ + Point(horzEdge.xTop, horzEdge.yCurr), Protects.Both) + if eMaxPair.outIdx >= 0: raise Exception("Clipper: Horizontal Error") + self._DeleteFromAEL(eMaxPair) + self._DeleteFromAEL(horzEdge) + + def _ProcessHorizontals(self): + while self._SortedEdges is not None: + e = self._SortedEdges + self._DeleteFromSEL(e) + self._ProcessHorizontal(e) + + def _AddJoin(self, e1, e2, e1OutIdx = -1, e2OutIdx = -1): + jr = JoinRec() + if e1OutIdx >= 0: jr.poly1Idx = e1OutIdx + else: jr.poly1Idx = e1.outIdx + jr.pt1a = Point(e1.xCurr, e1.yCurr) + jr.pt1b = Point(e1.xTop, e1.yTop) + if e2OutIdx >= 0: jr.poly2Idx = e2OutIdx + else: jr.poly2Idx = e2.outIdx + jr.pt2a = Point(e2.xCurr, e2.yCurr) + jr.pt2b = Point(e2.xTop, e2.yTop) + if self._JoinList is None: + self._JoinList = [] + self._JoinList.append(jr) + + def _FixupJoinRecs(self, jr, outPt, startIdx): + for i in range(startIdx, len(self._JoinList)): + jr2 = self._JoinList[i] + if jr2.poly1Idx == jr.poly1Idx and _PointIsVertex(jr2.pt1a, outPt): + jr2.poly1Idx = jr.poly2Idx + if jr2.poly2Idx == jr.poly1Idx and _PointIsVertex(jr2.pt2a, outPt): + jr2.poly2Idx = jr.poly2Idx + + def _AddHorzJoin(self, e, idx): + hj = HorzJoin(e, idx) + if self._HorzJoins == None: + self._HorzJoins = hj + hj.nextHj = hj + hj.prevHj = hj + else: + hj.nextHj = self._HorzJoins + hj.prevHj = self._HorzJoins.prevHj + self._HorzJoins.prevHj.nextHj = hj + self._HorzJoins.prevHj = hj + + def _AddIntersectNode(self, e1, e2, pt): + newNode = IntersectNode(e1, e2, pt) + if self._IntersectNodes is None: + self._IntersectNodes = newNode + elif _ProcessParam1BeforeParam2(newNode, self._IntersectNodes): + newNode.nextIn = self._IntersectNodes + self._IntersectNodes = newNode + else: + node = self._IntersectNodes + while node.nextIn is not None and \ + _ProcessParam1BeforeParam2(node.nextIn, newNode): + node = node.nextIn + newNode.nextIn = node.nextIn + node.nextIn = newNode + + def _ProcessIntersections(self, botY, topY): + self._BuildIntersectList(botY, topY) + if self._IntersectNodes is None: return True + elif not self._FixupIntersections(): return False + self._ProcessIntersectList() + self._IntersectNodes = None + return True + + def _BuildIntersectList(self, botY, topY): + if self._ActiveEdges is None: return + + e = self._ActiveEdges + self._SortedEdges = e + while e is not None: + e.prevInSEL = e.prevInAEL + e.nextInSEL = e.nextInAEL + e.tmpX = _TopX(e, topY) + e = e.nextInAEL + try: + isModified = True + while isModified and self._SortedEdges is not None: + isModified = False + e = self._SortedEdges + while e.nextInSEL is not None: + eNext = e.nextInSEL + if e.tmpX <= eNext.tmpX: + e = eNext + continue + pt, intersected = _IntersectPoint(e, eNext) + if not intersected: + e = eNext + continue + if pt.y > botY: + pt = Point(_TopX(e, botY), botY) + self._AddIntersectNode(e, eNext, pt) + self._SwapPositionsInSEL(e, eNext) + isModified = True + if e.prevInSEL is not None: + e.prevInSEL.nextInSEL = None + else: + break + finally: + self._SortedEdges = None + + def _ProcessIntersectList(self): + while self._IntersectNodes is not None: + node = self._IntersectNodes + self._IntersectEdges(node.e1, node.e2, node.pt, Protects.Both) + self._SwapPositionsInAEL(node.e1, node.e2) + self._IntersectNodes = node.nextIn + + def _DeleteFromAEL(self, e): + aelPrev = e.prevInAEL + aelNext = e.nextInAEL + if aelPrev is None and aelNext is None and e != self._ActiveEdges: + return + if aelPrev is not None: + aelPrev.nextInAEL = aelNext + else: + self._ActiveEdges = aelNext + if aelNext is not None: + aelNext.prevInAEL = aelPrev + e.nextInAEL = None + e.prevInAEL = None + + def _DeleteFromSEL(self, e): + SELPrev = e.prevInSEL + SELNext = e.nextInSEL + if SELPrev is None and SELNext is None and e != self._SortedEdges: + return + if SELPrev is not None: + SELPrev.nextInSEL = SELNext + else: + self._SortedEdges = SELNext + if SELNext is not None: + SELNext.prevInSEL = SELPrev + e.nextInSEL = None + e.prevInSEL = None + + def _IntersectEdges(self, e1, e2, pt, protects = Protects.Neither): + e1stops = protects & Protects.Left == 0 and \ + e1.nextInLML is None and \ + e1.xTop == pt.x and e1.yTop == pt.y + e2stops = protects & Protects.Right == 0 and \ + e2.nextInLML is None and \ + e2.xTop == pt.x and e2.yTop == pt.y + e1Contributing = e1.outIdx >= 0 + e2contributing = e2.outIdx >= 0 + + if e1.PolyType == e2.PolyType: + if self._IsEvenOddFillType(e1): + e1Wc = e1.windCnt + e1.windCnt = e2.windCnt + e2.windCnt = e1Wc + else: + if e1.windCnt + e2.windDelta == 0: e1.windCnt = -e1.windCnt + else: e1.windCnt += e2.windDelta + if e2.windCnt - e1.windDelta == 0: e2.windCnt = -e2.windCnt + else: e2.windCnt -= e1.windDelta + else: + if not self._IsEvenOddFillType(e2): e1.windCnt2 += e2.windDelta + elif e1.windCnt2 == 0: e1.windCnt2 = 1 + else: e1.windCnt2 = 0 + if not self._IsEvenOddFillType(e1): e2.windCnt2 -= e1.windDelta + elif e2.windCnt2 == 0: e2.windCnt2 = 1 + else: e2.windCnt2 = 0 + + if e1.PolyType == PolyType.Subject: + e1FillType = self._SubjFillType + e1FillType2 = self._ClipFillType + else: + e1FillType = self._ClipFillType + e1FillType2 = self._SubjFillType + + if e2.PolyType == PolyType.Subject: + e2FillType = self._SubjFillType + e2FillType2 = self._ClipFillType + else: + e2FillType = self._ClipFillType + e2FillType2 = self._SubjFillType + + if e1FillType == PolyFillType.Positive: e1Wc = e1.windCnt + elif e1FillType == PolyFillType.Negative: e1Wc = -e1.windCnt + else: e1Wc = abs(e1.windCnt) + + if e2FillType == PolyFillType.Positive: e2Wc = e2.windCnt + elif e2FillType == PolyFillType.Negative: e2Wc = -e2.windCnt + else: e2Wc = abs(e2.windCnt) + + if e1Contributing and e2contributing: + if e1stops or e2stops or \ + not (e1Wc == 0 or e1Wc == 1) or not (e2Wc == 0 or e2Wc == 1) or \ + (e1.PolyType != e2.PolyType and self._ClipType != ClipType.Xor): + self._AddLocalMaxPoly(e1, e2, pt) + else: + _DoBothEdges(e1, e2, pt, self._PolyOutList) + elif e1Contributing: + if (e2Wc == 0 or e2Wc == 1) and \ + (self._ClipType != ClipType.Intersection or \ + e2.PolyType == PolyType.Subject or \ + e2.windCnt2 != 0): _DoEdge1(e1, e2, pt, self._PolyOutList) + elif e2contributing: + if (e1Wc == 0 or e1Wc == 1) and \ + (self._ClipType != ClipType.Intersection or \ + e1.PolyType == PolyType.Subject or \ + e1.windCnt2 != 0): _DoEdge2(e1, e2, pt, self._PolyOutList) + + elif (e1Wc == 0 or e1Wc == 1) and (e2Wc == 0 or e2Wc == 1) and \ + not e1stops and not e2stops: + + e1FillType2 = e2FillType2 = PolyFillType.EvenOdd + if e1FillType2 == PolyFillType.Positive: e1Wc2 = e1.windCnt2 + elif e1FillType2 == PolyFillType.Negative: e1Wc2 = -e1.windCnt2 + else: e1Wc2 = abs(e1.windCnt2) + if e2FillType2 == PolyFillType.Positive: e2Wc2 = e2.windCnt2 + elif e2FillType2 == PolyFillType.Negative: e2Wc2 = -e2.windCnt2 + else: e2Wc2 = abs(e2.windCnt2) + + if e1.PolyType != e2.PolyType: + self._AddLocalMinPoly(e1, e2, pt) + elif e1Wc == 1 and e2Wc == 1: + if self._ClipType == ClipType.Intersection: + if e1Wc2 > 0 and e2Wc2 > 0: + self._AddLocalMinPoly(e1, e2, pt) + elif self._ClipType == ClipType.Union: + if e1Wc2 <= 0 and e2Wc2 <= 0: + self._AddLocalMinPoly(e1, e2, pt) + elif self._ClipType == ClipType.Difference: + if (e1.PolyType == PolyType.Clip and e1Wc2 > 0 and e2Wc2 > 0) or \ + (e1.PolyType == PolyType.Subject and e1Wc2 <= 0 and e2Wc2 <= 0): + self._AddLocalMinPoly(e1, e2, pt) + else: + self._AddLocalMinPoly(e1, e2, pt) + else: + _SwapSides(e1, e2, self._PolyOutList) + + if e1stops != e2stops and \ + ((e1stops and e1.outIdx >= 0) or (e2stops and e2.outIdx >= 0)): + _SwapSides(e1, e2, self._PolyOutList) + _SwapPolyIndexes(e1, e2) + if e1stops: self._DeleteFromAEL(e1) + if e2stops: self._DeleteFromAEL(e2) + + def _DoMaxima(self, e, topY): + eMaxPair = _GetMaximaPair(e) + x = e.xTop + eNext = e.nextInAEL + while eNext != eMaxPair: + if eNext is None: raise Exception("DoMaxima error") + self._IntersectEdges(e, eNext, Point(x, topY), Protects.Both) + self._SwapPositionsInAEL(e, eNext) + eNext = eNext.nextInAEL + if e.outIdx < 0 and eMaxPair.outIdx < 0: + self._DeleteFromAEL(e) + self._DeleteFromAEL(eMaxPair) + elif e.outIdx >= 0 and eMaxPair.outIdx >= 0: + self._IntersectEdges(e, eMaxPair, Point(x, topY)) + else: + raise Exception("DoMaxima error") + + def _UpdateEdgeIntoAEL(self, e): + if e.nextInLML is None: + raise Exception("UpdateEdgeIntoAEL error") + aelPrev = e.prevInAEL + aelNext = e.nextInAEL + e.nextInLML.outIdx = e.outIdx + if aelPrev is not None: + aelPrev.nextInAEL = e.nextInLML + else: + self._ActiveEdges = e.nextInLML + if aelNext is not None: + aelNext.prevInAEL = e.nextInLML + e.nextInLML.side = e.side + e.nextInLML.windDelta = e.windDelta + e.nextInLML.windCnt = e.windCnt + e.nextInLML.windCnt2 = e.windCnt2 + e = e.nextInLML + e.prevInAEL = aelPrev + e.nextInAEL = aelNext + if e.dx != horizontal: + self._InsertScanbeam(e.yTop) + return e + + def _AddLocalMinPoly(self, e1, e2, pt): + if e2.dx == horizontal or e1.dx > e2.dx: + _AddOutPt(e1, pt, self._PolyOutList) + e2.outIdx = e1.outIdx + e1.side = EdgeSide.Left + e2.side = EdgeSide.Right + e = e1 + if e.prevInAEL == e2: prevE = e2.prevInAEL + else: prevE = e1.prevInAEL + else: + _AddOutPt(e2, pt, self._PolyOutList) + e1.outIdx = e2.outIdx + e1.side = EdgeSide.Right + e2.side = EdgeSide.Left + e = e2 + if e.prevInAEL == e1: prevE = e1.prevInAEL + else: prevE = e.prevInAEL + + if prevE is not None and prevE.outIdx >= 0 and \ + _TopX(prevE, pt.y) == _TopX(e, pt.y) and \ + _SlopesEqual2(e, prevE): + self._AddJoin(e, prevE) + + + def _AddLocalMaxPoly(self, e1, e2, pt): + _AddOutPt(e1, pt, self._PolyOutList) + if e1.outIdx == e2.outIdx: + e1.outIdx = -1 + e2.outIdx = -1 + elif e1.outIdx < e2.outIdx: + self._AppendPolygon(e1, e2) + else: + self._AppendPolygon(e2, e1) + + def _AppendPolygon(self, e1, e2): + outRec1 = self._PolyOutList[e1.outIdx] + outRec2 = self._PolyOutList[e2.outIdx] + holeStateRec = None + if _Param1RightOfParam2(outRec1, outRec2): holeStateRec = outRec2 + elif _Param1RightOfParam2(outRec2, outRec1): holeStateRec = outRec1 + else: holeStateRec = _GetLowermostRec(outRec1, outRec2) + + p1_lft = outRec1.pts + p2_lft = outRec2.pts + p1_rt = p1_lft.prevOp + p2_rt = p2_lft.prevOp + newSide = EdgeSide.Left + + if e1.side == EdgeSide.Left: + if e2.side == EdgeSide.Left: + # z y x a b c + _ReversePolyPtLinks(p2_lft) + p2_lft.nextOp = p1_lft + p1_lft.prevOp = p2_lft + p1_rt.nextOp = p2_rt + p2_rt.prevOp = p1_rt + outRec1.pts = p2_rt + else: + # x y z a b c + p2_rt.nextOp = p1_lft + p1_lft.prevOp = p2_rt + p2_lft.prevOp = p1_rt + p1_rt.nextOp = p2_lft + outRec1.pts = p2_lft + else: + newSide = EdgeSide.Right + if e2.side == EdgeSide.Right: + # a b c z y x + _ReversePolyPtLinks(p2_lft) + p1_rt.nextOp = p2_rt + p2_rt.prevOp = p1_rt + p2_lft.nextOp = p1_lft + p1_lft.prevOp = p2_lft + else: + # a b c x y z + p1_rt.nextOp = p2_lft + p2_lft.prevOp = p1_rt + p1_lft.prevOp = p2_rt + p2_rt.nextOp = p1_lft + + if holeStateRec == outRec2: + outRec1.bottomPt = outRec2.bottomPt + outRec1.bottomPt.idx = outRec1.idx + if outRec2.FirstLeft != outRec1: + outRec1.FirstLeft = outRec2.FirstLeft + outRec1.isHole = outRec2.isHole + outRec2.pts = None + outRec2.bottomPt = None + outRec2.FirstLeft = outRec1 + OKIdx = outRec1.idx + ObsoleteIdx = outRec2.idx + + e1.outIdx = -1 + e2.outIdx = -1 + + e = self._ActiveEdges + while e is not None: + if e.outIdx == ObsoleteIdx: + e.outIdx = OKIdx + e.side = newSide + break + e = e.nextInAEL + + if self._JoinList is not None: + for jr in self._JoinList: + if jr.poly1Idx == ObsoleteIdx: jr.poly1Idx = OKIdx + if jr.poly2Idx == ObsoleteIdx: jr.poly2Idx = OKIdx + + if self._HorzJoins is not None: + hj = self._HorzJoins + while True: + if hj.savedIdx == ObsoleteIdx: + hj.savedIdx = OKIdx + hj = hj.nextHj + if hj == self._HorzJoins: + break + + def _FixupIntersections(self): + if self._IntersectNodes.nextIn is None: return True + try: + self._CopyAELToSEL() + int1 = self._IntersectNodes + int2 = self._IntersectNodes.nextIn + e1 = e2 = None + while int2 is not None: + e1 = int1.e1 + if e1.prevInSEL == int1.e2: e2 = e1.prevInSEL + elif (e1.nextInSEL == int1.e2): e2 = e1.nextInSEL + else: + while int2 is not None: + if int2.e1.nextInSEL == int2.e2 or \ + int2.e1.prevInSEL == int2.e2: break + int2 = int2.nextIn + if int2 is None: + self._SortedEdges = None + return False + _SwapIntersectNodes(int1, int2) + e1 = int1.e1 + e2 = int1.e2 + self._SwapPositionsInSEL(e1, e2) + int1 = int1.nextIn + int2 = int1.nextIn + finally: + self._SortedEdges = None + return int1.e1.prevInSEL == int1.e2 or int1.e1.nextInSEL == int1.e2 + + def _ProcessEdgesAtTopOfScanbeam(self, topY): + e = self._ActiveEdges + while e is not None: + if _IsMaxima(e, topY) and _GetMaximaPair(e).dx != horizontal: + ePrev = e.prevInAEL + self._DoMaxima(e, topY) + if ePrev is None: e = self._ActiveEdges + else: e = ePrev.nextInAEL + else: + if _IsIntermediate(e, topY) and e.nextInLML.dx == horizontal: + if e.outIdx >= 0: + _AddOutPt(e, Point(e.xTop, e.yTop), self._PolyOutList) + + hj = self._HorzJoins + if hj is not None: + while True: + _1, _2, overlap = _GetOverlapSegment( + Point(hj.edge.xBot, hj.edge.yBot), + Point(hj.edge.xTop, hj.edge.yTop), + Point(e.nextInLML.XBot, e.nextInLML.yBot), + Point(e.nextInLML.xTop, e.nextInLML.yTop)) + if overlap: self._AddJoin(hj.edge, e.nextInLML, hj.savedIdx, e.outIdx) + hj = hj.nextHj + if hj == self._HorzJoins: break + self._AddHorzJoin(e.nextInLML, e.outIdx) + + e = self._UpdateEdgeIntoAEL(e) + self._AddEdgeToSEL(e) + else: + e.xCurr = _TopX(e, topY) + e.yCurr = topY + e = e.nextInAEL + + self._ProcessHorizontals() + + e = self._ActiveEdges + while e is not None: + if _IsIntermediate(e, topY): + if (e.outIdx >= 0) : + _AddOutPt(e, Point(e.xTop, e.yTop), self._PolyOutList) + e = self._UpdateEdgeIntoAEL(e) + + ePrev = e.prevInAEL + eNext = e.nextInAEL + if ePrev is not None and ePrev.xCurr == e.xBot and \ + (ePrev.yCurr == e.yBot) and (e.outIdx >= 0) and \ + (ePrev.outIdx >= 0) and (ePrev.yCurr > ePrev.yTop) and \ + _SlopesEqual2(e, ePrev): + _AddOutPt(ePrev, Point(e.xBot, e.yBot), self._PolyOutList) + self._AddJoin(e, ePrev) + elif eNext is not None and (eNext.xCurr == e.xBot) and \ + (eNext.yCurr == e.yBot) and (e.outIdx >= 0) and \ + (eNext.outIdx >= 0) and (eNext.yCurr > eNext.yTop) and \ + _SlopesEqual2(e, eNext): + _AddOutPt(eNext, Point(e.xBot, e.yBot), self._PolyOutList) + self._AddJoin(e, eNext) + + e = e.nextInAEL + + def _Area(self, pts): + # see http://www.mathopenref.com/coordpolygonarea2.html + result = 0.0 + p = pts + while True: + result += (p.pt.x + p.prevOp.pt.x) * (p.prevOp.pt.y - p.pt.y) + p = p.nextOp + if p == pts: break + return result / 2 + + def _JoinPoints(self, jr): + p1, p2 = None, None + outRec1 = self._PolyOutList[jr.poly1Idx] + outRec2 = self._PolyOutList[jr.poly2Idx] + if outRec1 is None or outRec2 is None: return p1, p2, False + pp1a = outRec1.pts; pp2a = outRec2.pts + pt1 = jr.pt2a; pt2 = jr.pt2b + pt3 = jr.pt1a; pt4 = jr.pt1b + pp1a, pt1, pt2, result = _FindSegment(pp1a, pt1, pt2) + if not result: return p1, p2, False + if (outRec1 == outRec2): + pp2a = pp1a.nextOp + pp2a, pt3, pt4, result = _FindSegment(pp2a, pt3, pt4) + if not result or pp2a == pp1a: return p1, p2, False + else: + pp2a, pt3, pt4, result = _FindSegment(pp2a, pt3, pt4) + if not result: return p1, p2, False + pt1, pt2, result = _GetOverlapSegment(pt1, pt2, pt3, pt4) + if not result: return p1, p2, False + + prevOp = pp1a.prevOp + if _PointsEqual(pp1a.pt, pt1): p1 = pp1a + elif _PointsEqual(prevOp.pt, pt1): p1 = prevOp + else: p1 = _InsertPolyPtBetween(pp1a, prevOp, pt1) + + if _PointsEqual(pp1a.pt, pt2): p2 = pp1a + elif _PointsEqual(prevOp.pt, pt2): p2 = prevOp + elif (p1 == pp1a) or (p1 == prevOp): + p2 = _InsertPolyPtBetween(pp1a, prevOp, pt2) + elif _Pt3IsBetweenPt1AndPt2(pp1a.pt, p1.pt, pt2): + p2 = _InsertPolyPtBetween(pp1a, p1, pt2) + else: p2 = _InsertPolyPtBetween(p1, prevOp, pt2) + + prevOp = pp2a.prevOp + if _PointsEqual(pp2a.pt, pt1): p3 = pp2a + elif _PointsEqual(prevOp.pt, pt1): p3 = prevOp + else: p3 = _InsertPolyPtBetween(pp2a, prevOp, pt1) + if _PointsEqual(pp2a.pt, pt2): p4 = pp2a + elif _PointsEqual(prevOp.pt, pt2): p4 = prevOp + elif (p3 == pp2a) or (p3 == prevOp): + p4 = _InsertPolyPtBetween(pp2a, prevOp, pt2) + elif _Pt3IsBetweenPt1AndPt2(pp2a.pt, p3.pt, pt2): + p4 = _InsertPolyPtBetween(pp2a, p3, pt2) + else: p4 = _InsertPolyPtBetween(p3, prevOp, pt2) + + if p1.nextOp == p2 and p3.prevOp == p4: + p1.nextOp = p3 + p3.prevOp = p1 + p2.prevOp = p4 + p4.nextOp = p2 + return p1, p2, True + elif p1.prevOp == p2 and p3.nextOp == p4: + p1.prevOp = p3 + p3.nextOp = p1 + p2.nextOp = p4 + p4.prevOp = p2 + return p1, p2, True + return p1, p2, False + + def _FixupFirstLefts1(self, oldOutRec, newOutRec): + for outRec in self._PolyOutList: + if outRec.pts is not None and outRec.FirstLeft == oldOutRec: + if _Poly2ContainsPoly1(outRec.pts, newOutRec.pts): + outRec.FirstLeft = newOutRec + + def _FixupFirstLefts2(self, oldOutRec, newOutRec): + for outRec in self._PolyOutList: + if outRec.FirstLeft == oldOutRec: outRec.FirstLeft = newOutRec + + def _JoinCommonEdges(self): + for i in range(len(self._JoinList)): + jr = self._JoinList[i] + outRec1 = self._PolyOutList[jr.poly1Idx] + outRec2 = self._PolyOutList[jr.poly2Idx] + if outRec1.pts is None or outRec2.pts is None: continue + + if outRec1 == outRec2: holeStateRec = outRec1 + elif _Param1RightOfParam2(outRec1, outRec2): holeStateRec = outRec2 + elif _Param1RightOfParam2(outRec2, outRec1): holeStateRec = outRec1 + else: holeStateRec = _GetLowermostRec(outRec1, outRec2) + + p1, p2, result = self._JoinPoints(jr) + if not result: continue + + if outRec1 == outRec2: + outRec1.pts = _GetBottomPt(p1) + outRec1.bottomPt = outRec1.pts + outRec1.bottomPt.idx = outRec1.idx + outRec2 = OutRec(len(self._PolyOutList)) + self._PolyOutList.append(outRec2) + jr.poly2Idx = outRec2.idx + outRec2.pts = _GetBottomPt(p2) + outRec2.bottomPt = outRec2.pts + outRec2.bottomPt.idx = outRec2.idx + + if _Poly2ContainsPoly1(outRec2.pts, outRec1.pts): + outRec2.isHole = not outRec1.isHole + outRec2.FirstLeft = outRec1 + + self._FixupJoinRecs(jr, p2, i + 1) + + if self._UsingPolyTree: self._FixupFirstLefts2(outRec2, outRec1) + + _FixupOutPolygon(outRec1) + _FixupOutPolygon(outRec2) + + if outRec2.isHole == self._Area(outRec2) > 0.0: + _ReversePolyPtLinks(outRec2.pts) + + elif _Poly2ContainsPoly1(outRec1.pts, outRec2.pts): + outRec2.isHole = outRec1.isHole + outRec1.isHole = not outRec2.isHole + outRec2.FirstLeft = outRec1.FirstLeft + outRec1.FirstLeft = outRec2 + + self._FixupJoinRecs(jr, p2, i + 1) + + if self._UsingPolyTree: self._FixupFirstLefts2(outRec1, outRec2) + + _FixupOutPolygon(outRec1) + _FixupOutPolygon(outRec2) + + if outRec1.isHole == self._Area(outRec1) > 0.0: + _ReversePolyPtLinks(outRec1.pts) + else: + outRec2.isHole = outRec1.isHole + outRec2.FirstLeft = outRec1.FirstLeft + + self._FixupJoinRecs(jr, p2, i + 1) + if self._UsingPolyTree: self._FixupFirstLefts1(outRec1, outRec2) + + _FixupOutPolygon(outRec1) + _FixupOutPolygon(outRec2) + else: + _FixupOutPolygon(outRec1) + OKIdx = outRec1.idx + ObsoleteIdx = outRec2.idx + outRec2.pts = None + outRec2.bottomPt = None + + outRec1.isHole = holeStateRec.isHole + if holeStateRec == outRec2: + outRec1.FirstLeft = outRec2.FirstLeft + outRec2.FirstLeft = outRec1 + + for j in range(i +1, len(self._JoinList)): + jr2 = self._JoinList[j] + if (jr2.poly1Idx == ObsoleteIdx): jr2.poly1Idx = OKIdx + if (jr2.poly2Idx == ObsoleteIdx): jr2.poly2Idx = OKIdx + if self._UsingPolyTree: self._FixupFirstLefts2(outRec2, outRec1) + + def _ExecuteInternal(self): + try: + try: + self._Reset() + if self._Scanbeam is None: return True + botY = self._PopScanbeam() + while self._Scanbeam is not None: + self._InsertLocalMinimaIntoAEL(botY) + self._HorzJoins = None + self._ProcessHorizontals() + topY = self._PopScanbeam() + if not self._ProcessIntersections(botY, topY): return False + self._ProcessEdgesAtTopOfScanbeam(topY) + botY = topY + + for outRec in self._PolyOutList: + if outRec.pts is None: continue + _FixupOutPolygon(outRec) + if outRec.pts is None: continue + if outRec.isHole == (self._Area(outRec.pts) > 0.0): + _ReversePolyPtLinks(outRec.pts) + + if self._JoinList is not None: self._JoinCommonEdges() + return True + finally: + self._JoinList = None + self._HorzJoins = None + except: + return False + + def Execute( + self, + clipType, + solution, + subjFillType = PolyFillType.EvenOdd, + clipFillType = PolyFillType.EvenOdd): + if self._ExecuteLocked: return False + try: + self._ExecuteLocked = True + self._UsingPolyTree = True + del solution[:] + self._SubjFillType = subjFillType + self._ClipFillType = clipFillType + self._ClipType = clipType + result = self._ExecuteInternal() + if result: self._BuildResult(solution) + finally: + self._ExecuteLocked = False + self._UsingPolyTree = False + return result + + def Execute2( + self, + clipType, + solutionTree, + subjFillType = PolyFillType.EvenOdd, + clipFillType = PolyFillType.EvenOdd): + if self._ExecuteLocked: return False + try: + self._ExecuteLocked = True + self._UsingPolyTree = True + solutionTree.Clear() + self._SubjFillType = subjFillType + self._ClipFillType = clipFillType + self._ClipType = clipType + result = self._ExecuteInternal() + if result: self._BuildResult2(solutionTree) + finally: + self._ExecuteLocked = False + self._UsingPolyTree = False + return result + + def _BuildResult(self, polygons): + for outRec in self._PolyOutList: + if outRec is None: continue + cnt = _PointCount(outRec.pts) + if (cnt < 3): continue + poly = [] + op = outRec.pts + for _ in range(cnt): + poly.append(Point(op.pt.x, op.pt.y)) + op = op.prevOp + polygons.append(poly) + return + + def _BuildResult2(self, polyTree): + for outRec in self._PolyOutList: + if outRec is None: continue + cnt = _PointCount(outRec.pts) + if (cnt < 3): continue + _FixHoleLinkage(outRec) + + # add nodes to _AllNodes list ... + polyNode = PolyNode() + polyTree._AllNodes.append(polyNode) + outRec.PolyNode = polyNode + op = outRec.pts + while True: + polyNode.Contour.append(op.pt) + op = op.prevOp + if op == outRec.pts: break + + # build the tree ... + for outRec in self._PolyOutList: + if outRec.PolyNode is None: continue + if outRec.FirstLeft is None: + polyTree._AddChild(outRec.PolyNode) + else: + outRec.FirstLeft.PolyNode._AddChild(outRec.PolyNode) + + return + +#=============================================================================== +# OffsetPolygons (+ ancilliary functions) +#=============================================================================== + +FloatPoint = namedtuple('FloatPoint', 'x y') +Rect = namedtuple('FloatPoint', 'left top right bottom') + +def _GetUnitNormal(pt1, pt2): + if pt2.x == pt1.x and pt2.y == pt1.y: + return FloatPoint(0.0, 0.0) + dx = pt2.x - pt1.x + dy = pt2.y - pt1.y + f = 1.0 / math.hypot(dx, dy) + dx = float(dx) * f + dy = float(dy) * f + return FloatPoint(dy, -dx) + +def _BuildArc(pt, a1, a2, r): + steps = max(6, round(math.sqrt(abs(r)) * abs(a2 - a1))) + if steps > 0x100: steps = 0x100 + result = [] + n = steps - 1 + d = (a2 - a1) / n + a = a1 + for _ in range(n): + s = math.sin(a) + c = math.cos(a) + result.append(FloatPoint(pt.x + round(c * r), pt.y + round(s * r))) + a += d + return result + +def _GetBounds(pts): + left = None + for poly in pts: + for pt in poly: + left = pt.x + top = pt.y + right = pt.x + bottom = pt.y + break + break + + for poly in pts: + for pt in poly: + if pt.x < left: left = pt.x + if pt.x > right: right = pt.x + if pt.y < top: top = pt.y + if pt.y > bottom: bottom = pt.y + if left is None: return Rect(0, 0, 0, 0) + else: return Rect(left, top, right, bottom) + +def _GetLowestPt(poly): + # precondition: poly must not be empty + result = poly[0] + for pt in poly: + if pt.y > result.y or (pt.y == result.y and pt.x < result.x): + result = pt + return result + +def _StripDupPts(poly): + if poly == []: return poly + for i in range(1, len(poly)): + if _PointsEqual(poly[i-1], poly[i]): poly.pop(i) + i = len(poly) -1 + while i > 0 and _PointsEqual(poly[i], poly[0]): + poly.pop(i) + i -= 1 + return poly + +def OffsetPolygons(polys, delta, jointype = JoinType.Square, miterLimit= 2.0, autoFix = True): + + def DoSquare(pt, mul = 1.0): + pt1 = Point(round(pt.x + Normals[k].x * delta), round(pt.y + Normals[k].y * delta)) + pt2 = Point(round(pt.x + Normals[j].x * delta), round(pt.y + Normals[j].y * delta)) + if (Normals[k].x*Normals[j].y-Normals[j].x*Normals[k].y) * delta >= 0: + a1 = math.atan2(Normals[k].y, Normals[k].x) + a2 = math.atan2(-Normals[j].y, -Normals[j].x) + a1 = abs(a2 - a1); + if a1 > math.pi: a1 = math.pi * 2 - a1 + dx = math.tan((math.pi - a1)/4) * abs(delta*mul) + + pt1 = Point(round(pt1.x -Normals[k].y * dx), round(pt1.y + Normals[k].x * dx)) + result.append(pt1) + pt2 = Point(round(pt2.x + Normals[j].y * dx), round(pt2.y - Normals[j].x * dx)) + result.append(pt2) + else: + result.append(pt1) + result.append(pt) + result.append(pt2) + + def DoMiter(pt): + if ((Normals[k].x* Normals[j].y - Normals[j].x * Normals[k].y) * delta >= 0): + q = delta / r; + result.append(Point(round(pt.x + (Normals[k].x + Normals[j].x) *q), + round(pt.y + (Normals[k].y + Normals[j].y) *q))) + else: + pt1 = Point(round(pt.x + Normals[k].x * delta), \ + round(pt.y + Normals[k].y * delta)) + pt2 = Point(round(pt.x + Normals[j].x * delta), \ + round(pt.y + Normals[j].y * delta)) + result.append(pt1) + result.append(pt) + result.append(pt2) + + def DoRound(pt): + pt1 = Point(round(pt.x + Normals[k].x * delta), \ + round(pt.y + Normals[k].y * delta)) + pt2 = Point(round(pt.x + Normals[j].x * delta), \ + round(pt.y + Normals[j].y * delta)) + result.append(pt1) + if (Normals[k].x*Normals[j].y - Normals[j].x*Normals[k].y)*delta >= 0: + if (Normals[j].x * Normals[k].x + Normals[j].y * Normals[k].y) < 0.985: + a1 = math.atan2(Normals[k].y, Normals[k].x) + a2 = math.atan2(Normals[j].y, Normals[j].x) + if (delta > 0) and (a2 < a1): a2 = a2 + math.pi * 2 + elif (delta < 0) and (a2 > a1): a2 = a2 - math.pi * 2 + arc = _BuildArc(pt, a1, a2, delta) + result.extend(arc) + else: + result.append(pt) + result.append(pt2) + + ppts = polys[:] + + if autoFix: + botPoly = None + botPt = None + for poly in ppts: + poly = _StripDupPts(poly) + if len(poly) < 3: continue + bot = _GetLowestPt(poly) + if botPt is None or (bot.y > botPt.y) or \ + (bot.y == botPt.y and bot.x < botPt.x): + botPt = bot + botPoly = poly + if botPt is None: return ppts + # if the outermost polygon has the wrong orientation, + # reverse the orientation of all the polygons ... + if Area(botPoly) < 0.0: + for poly in ppts: + poly = poly[::-1] + else: + # make sure that polygon's start & end pts don't match ... + for poly in ppts: + i = len(poly) -1 + while i > 0 and _PointsEqual(poly[i], poly[0]): + poly.pop(i) + i -= 1 + if len(poly) < 3: poly = [] + + + if miterLimit <= 1: miterLimit = 1.0 + rmin = 2.0/(miterLimit * miterLimit) + + res = [] + for pts in ppts: + Normals = [] + result = [] + cnt = len(pts) + for j in range(cnt -1): + Normals.append(_GetUnitNormal(pts[j], pts[j+1])) + Normals.append(_GetUnitNormal(pts[cnt-1], pts[0])) + + k = cnt -1 + for j in range(cnt): + if jointype == JoinType.Miter: + r = 1.0 + (Normals[j].x * Normals[k].x + Normals[j].y * Normals[k].y) + if (r >= rmin): DoMiter(pts[j]) + else: DoSquare(pts[j], miterLimit) + elif jointype == JoinType.Square: DoSquare(pts[j]) + else: DoRound(pts[j]) + k = j + res.append(result) + + c = Clipper() + c.AddPolygons(res, PolyType.Subject) + if delta > 0: + c.Execute(ClipType.Union, res, PolyFillType.Positive, PolyFillType.Positive) + else: + bounds = _GetBounds(res) + outer = [] + outer.append(Point(bounds.left-10, bounds.bottom+10)) + outer.append(Point(bounds.right+10, bounds.bottom+10)) + outer.append(Point(bounds.right+10, bounds.top-10)) + outer.append(Point(bounds.left-10, bounds.top-10)) + c.AddPolygon(outer, PolyType.Subject) + c.Execute(ClipType.Union, res, PolyFillType.Negative, PolyFillType.Negative) + res.pop(0) + for poly in res: + poly = poly[::-1] + return res + +def CleanPolygon(poly, distance = 1.415): + cnt = len(poly) + if (cnt < 3): return [] + result = [] + d = round(distance * distance) + ip = poly[cnt -1] + for i in range(cnt): + if ((poly[i].x - ip.x) * (poly[i].x - ip.x) + \ + (poly[i].y - ip.y) * (poly[i].y - ip.y) <= d): + continue + result.append(poly[i]) + ip = poly[i] + return result + +def CleanPolygons(polys, distance = 1.415): + result = [] + for poly in polys: + result.append(CleanPolygon(poly, distance = 1.415)) + return result diff --git a/clipper/python/clipper_demo.py b/clipper/python/clipper_demo.py new file mode 100755 index 0000000..14696aa --- /dev/null +++ b/clipper/python/clipper_demo.py @@ -0,0 +1,267 @@ +# from clipper import Area, Clipper, Point, ClipType, PolyType, PolyFillType +from clipper import * +import math +import re +from random import randint +# from subprocess import call +import os + +#=============================================================================== +#=============================================================================== + +def LoadFile1(lines): + # File type 1: first line is total polygons count and subsequent lines + # contain the polygon vertex count followed by its coords + try: + polygons = [] + poly = [] + for l in lines: + vals = re.split(' |, |,', l.strip()) + if len(vals) < 2: + if (len(poly) > 2): + polygons.append(poly) + poly = [] + else: + poly.append(Point(int(vals[0]), int(vals[1]))) + if (len(poly) > 2): + polygons.append(poly) + return polygons + except: + return None +#=============================================================================== + +def LoadFile2(lines): + # File type 2: vertex coords on consecutive lines for each polygon + # where each polygon is separated by an empty line + try: + polygons = [] + poly = [] + for l in lines: + l = l.strip() + if (l == ''): + if (len(poly) > 2): + polygons.append(poly) + poly = [] + else: + vals = re.split(' |, |,', l) + poly.append(Point(int(vals[0]), int(vals[1]))) + if (len(poly) > 2): + polygons.append(poly) + return polygons + except: + return None +#=============================================================================== + +def LoadFile(filename): + try: + f = open(filename, 'r') + try: + lines = f.readlines() + finally: + f.close() + # pick file type from format of first line ... + if len(lines) == 0: return [] + elif not ',' in lines[0]: return LoadFile1(lines) + else: return LoadFile2(lines) + except: + return None +#=============================================================================== + +def SaveToFile(filename, polys, scale = 1.0): + invScale = 1.0 / scale + try: + f = open(filename, 'w') + try: + if invScale == 1: + for poly in polys: + for pt in poly: + f.write("{0}, {1}\n".format(pt.x, pt.y)) + f.write("\n") + else: + for poly in polys: + for pt in poly: + f.write("{0:.4f}, {1:.4f}\n".format(pt.x * invScale, pt.y * invScale)) + f.write("\n") + finally: + f.close() + except: + return +#=============================================================================== + +def RandomPoly(maxWidth, maxHeight, vertCnt): + result = [] + for _ in range(vertCnt): + result.append(Point(randint(0, maxWidth), randint(0, maxHeight))) + return result + +#=============================================================================== +# SVGBuilder +#=============================================================================== +class SVGBuilder(object): + + def HtmlColor(self, val): + return "#{0:06x}".format(val & 0xFFFFFF) + + def AlphaClr(self, val): + return "{0:.2f}".format(float(val >> 24)/255) + + class StyleInfo(object): + def __init__(self): + self.fillType = PolyFillType.EvenOdd + self.brushClr = 0 + self.penClr = 0 + self.penWidth = 0.8 + self.showCoords = False + + class StyleInfoPlus(StyleInfo): + + def __init__(self): + SVGBuilder.StyleInfo.__init__(self) + self.polygons = [] + self.textlines = [] + + def __init__(self): + self.GlobalStyle = SVGBuilder.StyleInfo() + self.PolyInfoList = [] + self.PathHeader = " \n\n" + self.Header = """ + +\n + + + + + + + + + \n\n""" + + def AddPolygon(self, poly, brushColor, penColor): + if poly is None or len(poly) == 0: return + pi = self.StyleInfoPlus() + pi.penWidth = self.GlobalStyle.penWidth + pi.fillType = self.GlobalStyle.fillType + pi.showCoords = self.GlobalStyle.showCoords + pi.brushClr = brushColor + pi.penClr = penColor + pi.polygons.append(poly) + self.PolyInfoList.append(pi) + + def AddPolygons(self, polys, brushColor, penColor): + if polys is None or len(polys) == 0: return + pi = self.StyleInfoPlus() + pi.penWidth = self.GlobalStyle.penWidth + pi.fillType = self.GlobalStyle.fillType + pi.showCoords = self.GlobalStyle.showCoords + pi.brushClr = brushColor + pi.penClr = penColor + pi.polygons = polys + self.PolyInfoList.append(pi) + + def SaveToFile(self, filename, invScale = 1.0, margin = 10): + if len(self.PolyInfoList) == 0: return False + if invScale == 0: invScale = 1.0 + if margin < 0: margin = 0 + pi = self.PolyInfoList[0] + # get bounding rect ... + left = right = pi.polygons[0][0].x + top = bottom = pi.polygons[0][0].y + for pi in self.PolyInfoList: + for p in pi.polygons: + for ip in p: + if ip.x < left: left = ip.x + if ip.x > right: right = ip.x + if ip.y < top: top = ip.y + if ip.y > bottom: bottom = ip.y + left *= invScale + top *= invScale + right *= invScale + bottom *= invScale + offsetX = -left + margin + offsetY = -top + margin + + f = open(filename, 'w') + m2 = margin * 2 + f.write(self.Header.format(right - left + m2, bottom - top + m2)) + for pi in self.PolyInfoList: + f.write(self.PathHeader) + for p in pi.polygons: + cnt = len(p) + if cnt < 3: continue + f.write(" M {0:.2f} {1:.2f}".format(p[0].x * invScale + offsetX, p[0].y * invScale + offsetY)) + for i in range(1,cnt): + f.write(" L {0:.2f} {1:.2f}".format(p[i].x * invScale + offsetX, p[i].y * invScale + offsetY)) + f.write(" z") + fillRule = "evenodd" + if pi.fillType != PolyFillType.EvenOdd: fillRule = "nonzero" + f.write(self.PathFooter.format(self.HtmlColor(pi.brushClr), + self.AlphaClr(pi.brushClr), fillRule, + self.HtmlColor(pi.penClr), self.AlphaClr(pi.penClr), pi.penWidth)) + + if (pi.showCoords): + f.write("\n\n") + for p in pi.polygons: + cnt = len(p) + if cnt < 3: continue + for pt in p: + x = pt.x * invScale + offsetX + y = pt.y * invScale + offsetY + f.write("{2},{3}\n".format(x, y, pt.x, pt.y)) + f.write("\n") + f.write("\n") + + f.write("\n") + f.close() + return True + +#=============================================================================== +# Main entry ... +#=============================================================================== + +scaleExp = 0 +scale = math.pow(10, scaleExp) +invScale = 1.0 / scale + +subj, clip = [], [] +#load saved subject and clip polygons ... +#subj = LoadFile('./subj.txt') +#clip = LoadFile('./clip.txt') + +# Generate random subject and clip polygons ... +subj.append(RandomPoly(640 * scale, 480 * scale, 100)) +clip.append(RandomPoly(640 * scale, 480 * scale, 100)) +#SaveToFile('./subj2.txt', subj, scale) +#SaveToFile('./clip2.txt', clip, scale) + +# Load the polygons into Clipper and execute the boolean clip op ... +c = Clipper() +solution = [] +pft = PolyFillType.EvenOdd + +c.AddPolygons(subj, PolyType.Subject) +c.AddPolygons(clip, PolyType.Clip) +result = c.Execute(ClipType.Intersection, solution, pft, pft) + +SaveToFile('./solution2.txt', solution, scale) + +# Create an SVG file to display what's happened ... +svgBuilder = SVGBuilder() +#svgBuilder.GlobalStyle.showCoords = True +svgBuilder.GlobalStyle.fillType = pft +svgBuilder.AddPolygons(subj, 0x402020FF, 0x802020FF) +#svgBuilder.GlobalStyle.showCoords = False +svgBuilder.AddPolygons(clip, 0x40FFFF20, 0x80FF2020) +svgBuilder.GlobalStyle.penWidth = 0.6 +svgBuilder.AddPolygons(solution, 0x60138013, 0xFF003300) + +holes = [] +for poly in solution: + if Area(poly) < 0: holes.append(poly) +svgBuilder.AddPolygons(holes, 0x0, 0xFFFF0000) +svgBuilder.SaveToFile('./test.svg', invScale, 100) + +if result: os.startfile('test.svg') # call(('open', 'test.svg')) # print("finished") # +else: print("failed") \ No newline at end of file diff --git a/clipper/python/python_readme.txt b/clipper/python/python_readme.txt new file mode 100755 index 0000000..8d33adc --- /dev/null +++ b/clipper/python/python_readme.txt @@ -0,0 +1,9 @@ + +The clipper.py file included in this distribution is a Python translation of the Clipper Library. +Because the Python code is interpreted (ie not compiled) it is about 100 times slower than compiled versions of Clipper. +(Even when using the PyPy Just-In-Time compiler the code is still about 50 times slower.) + +Alternatively, Maxime Chalon has written a Python extension module for Clipper: +https://sites.google.com/site/maxelsbackyard/home/pyclipper +This module provides a Python interface to the C++ compiled Clipper Library (and runs about 100 times faster than clipper.py). + diff --git a/clipper/ruby/ruby_readme.txt b/clipper/ruby/ruby_readme.txt new file mode 100755 index 0000000..c71c1d8 --- /dev/null +++ b/clipper/ruby/ruby_readme.txt @@ -0,0 +1,4 @@ +A Ruby module written by Mike Owens +that wraps the Clipper library can be downloaded from: + +http://github.com/mieko/rbclipper \ No newline at end of file diff --git a/computeOverlap.m b/computeOverlap.m new file mode 100755 index 0000000..f3cff65 --- /dev/null +++ b/computeOverlap.m @@ -0,0 +1,119 @@ +function overlaps = computeOverlap(boxes1, boxes2, mode) +% Computes the overlap between two sets of boxes +% overlaps is n x m where n is the number of boxes in boxes1 +% +% mode: Three possible modes +% pascal: intersection / union +% pedro : intersection / first box area +% wrtmin: intersection / min of two areas +% +% Author: saurabh.me@gmail.com (Saurabh Singh). + +switch mode + case 'pascal' + overlaps = computePascalOverlap(boxes1, boxes2); + case 'pedro' + overlaps = computePedroOverlap(boxes1, boxes2); + case 'wrtmin' + overlaps = computeWrtMinOverlap(boxes1, boxes2); + otherwise + error('Unrecognized mode'); +end +end + +function overlaps = computePascalOverlap(boxes1, boxes2) +overlaps = zeros(size(boxes1, 1), size(boxes2, 1)); +if isempty(boxes1) + overlaps = []; +else + x11 = boxes1(:,1); + y11 = boxes1(:,2); + x12 = boxes1(:,3); + y12 = boxes1(:,4); + areab1 = (x12-x11+1) .* (y12-y11+1); + x21 = boxes2(:,1); + y21 = boxes2(:,2); + x22 = boxes2(:,3); + y22 = boxes2(:,4); + areab2 = (x22-x21+1) .* (y22-y21+1); + + for i = 1 : size(boxes1, 1) + for j = 1 : size(boxes2, 1) + xx1 = max(x11(i), x21(j)); + yy1 = max(y11(i), y21(j)); + xx2 = min(x12(i), x22(j)); + yy2 = min(y12(i), y22(j)); + w = xx2-xx1+1; + h = yy2-yy1+1; + if w > 0 && h > 0 + overlaps(i, j) = w * h / (areab1(i) + areab2(j) - w * h); + end + end + end +end +end + +function overlaps = computePedroOverlap(boxes1, boxes2) +overlaps = zeros(size(boxes1, 1), size(boxes2, 1)); +if isempty(boxes1) + overlaps = []; +else + x1 = boxes1(:,1); + y1 = boxes1(:,2); + x2 = boxes1(:,3); + y2 = boxes1(:,4); + area = (x2-x1+1) .* (y2-y1+1); + + for i = 1 : size(boxes1, 1) + for j = 1 : size(boxes2, 1) + x21 = boxes2(j,1); + y21 = boxes2(j,2); + x22 = boxes2(j,3); + y22 = boxes2(j,4); + + xx1 = max(x1(i), x21); + yy1 = max(y1(i), y21); + xx2 = min(x2(i), x22); + yy2 = min(y2(i), y22); + w = xx2-xx1+1; + h = yy2-yy1+1; + if w > 0 && h > 0 + overlaps(i, j) = w * h / area(i); + end + end + end +end +end + +function overlaps = computeWrtMinOverlap(boxes1, boxes2) +% Overlap is intersection/min-area +overlaps = zeros(size(boxes1, 1), size(boxes2, 1)); +if isempty(boxes1) + overlaps = []; +else + x11 = boxes1(:,1); + y11 = boxes1(:,2); + x12 = boxes1(:,3); + y12 = boxes1(:,4); + areab1 = (x12-x11+1) .* (y12-y11+1); + x21 = boxes2(:,1); + y21 = boxes2(:,2); + x22 = boxes2(:,3); + y22 = boxes2(:,4); + areab2 = (x22-x21+1) .* (y22-y21+1); + + for i = 1 : size(boxes1, 1) + for j = 1 : size(boxes2, 1) + xx1 = max(x11(i), x21(j)); + yy1 = max(y11(i), y21(j)); + xx2 = min(x12(i), x22(j)); + yy2 = min(y12(i), y22(j)); + w = xx2-xx1+1; + h = yy2-yy1+1; + if w > 0 && h > 0 + overlaps(i, j) = w * h / min(areab1(i), areab2(j)); + end + end + end +end +end diff --git a/constructFeaturePyramid.m b/constructFeaturePyramid.m new file mode 100755 index 0000000..fde470a --- /dev/null +++ b/constructFeaturePyramid.m @@ -0,0 +1,11 @@ +function pyramid = constructFeaturePyramid(data, params, levels) +% levels: What level of pyramid to compute the features for. +% +% Author: saurabh.me@gmail.com (Saurabh Singh). + +if nargin < 3 + levels = []; +end +%imPaths = getImagePaths(data, imgsHome); +pyramid = constructFeaturePyramidForImg(data, params, levels); +end diff --git a/constructFeaturePyramidForImg.m b/constructFeaturePyramidForImg.m new file mode 100755 index 0000000..e5db08c --- /dev/null +++ b/constructFeaturePyramidForImg.m @@ -0,0 +1,105 @@ +function pyramid = constructFeaturePyramidForImg(im, params, levels) +% levels: What level of pyramid to compute the features for. +% +% Author: saurabh.me@gmail.com (Saurabh Singh). +sBins = params.sBins; +'constructfeatpyr' +size(im) +I = im; +if(dsfield(params,'imageCanonicalSize')) + canonicalSize = params.imageCanonicalSize; + [IS, canoScale] = convertToCanonicalSize(I, canonicalSize); +else + canonicalSize=min(size(I(:,:,1))); + canoScale=1; + IS=I; +end +size(IS) +[rows, cols, chans] = size(IS); +if chans < 3 + I = repmat(I, [1 1 3]); + fprintf('WARNING: Image has < 3 channels, replicating channels\n'); +end + +numLevels = getNumPyramidLevels(rows, cols, params.scaleIntervals, ... + params.patchCanonicalSize) +scales = getLevelScales(numLevels, params.scaleIntervals); +if nargin < 3 || isempty(levels) + levels = 1 : numLevels; +end +if(dsbool(params,'useColor')) + im2=RGB2Lab(im).*.0025; + if(dsbool(params,'extraColor')) + im2=im2.*25; + end +end +if(dsbool(params,'useColorHists')) + im2=RGB2Lab(im); +end +if(dsbool(params,'patchOnly')) + im2=rgb2gray(im); +end +pyramidLevs = cell(1, numLevels); +histbin=-100:20:100; +histbin(end)=histbin(end)+1; +gradientLevs={}; +for i = 1 : length(levels) + lev = levels(i); + I1 = imresize(I, canoScale / scales(lev),'bilinear'); + [nrows, ncols, unused_dims] = size(I1); + rowRem = rem(nrows, sBins); + colRem = rem(ncols, sBins); + if rowRem > 0 || colRem > 0 + I1 = I1(1:nrows-rowRem, 1:ncols-colRem, :); + end + if(~dsbool(params,'patchOnly')) + if(dsbool(params,'overallnorm')) + feat=features_nonorm(I1,sBins)*.02; + else + feat = features(I1, sBins); + end + [rows,cols,~]=size(feat); + else + rows=round(size(im2,1)/sBins); + cols=round(size(im2,2)/sBins); + end + if(dsbool(params,'patchOnly')) + feat=imresize(im2,[rows cols],'bilinear'); + else + feat=feat(:,:,1:31); + if(dsbool(params,'maxmin')) + feat=cat(3,feat(:,:,1:18),max(feat(:,:,1:9),feat(:,:,10:18)),... + min(feat(:,:,1:9),feat(:,:,10:18)),feat(:,:,28:end)); + end + if(dsbool(params,'medrat')) + f=features_medrat(I1,sBins)+.000001; + feat=cat(3,feat,f(2:end-1,2:end-1,:)); + end + if(dsbool(params,'useColor')) + feat=cat(3,feat,imresize(im2(:,:,2),[rows cols],'bilinear'),imresize(im2(:,:,3),[rows cols],'bilinear')); + elseif(dsbool(params,'useColorHists')) + for(k=2:3) + tohist=im2col(imresize(im2(:,:,k),[rows*sBins, cols*sBins]),[sBins,sBins],'distinct'); + fhist{k-1}=reshape(permute(histc(tohist,histbin,1),[2,1]),rows,cols,[]); + fhist{k-1}=fhist{k-1}(:,:,1:end-1).*.0006; + end + feat=cat(3,feat,fhist{1},fhist{2}); + end + end + [GX, GY] = gradient(I1); + GI = mean((GX*255).^2, 3) + mean((GY*255).^2, 3); + GI=imresize(GI,[rows,cols],'bilinear'); + pyramidLevs{lev} = feat;%(:, :, 1:31); + gradientLevs{lev} = GI; +end +canoSize.nrows = size(im,1); +canoSize.ncols = size(im,2); +pyramid = struct('features', {pyramidLevs}, 'scales', scales, ... + 'canonicalScale', canoScale, 'sbins', sBins, 'canonicalSize', canoSize, 'gradimg', {gradientLevs}); +end + +function numLev = getNumPyramidLevels(rows, cols, intervals, basePatSize) +lev1 = floor(intervals * log2(rows / basePatSize(1))); +lev2 = floor(intervals * log2(cols / basePatSize(2))); +numLev = min(lev1, lev2) + 1; +end diff --git a/det2mat.m b/det2mat.m new file mode 100755 index 0000000..862cde7 --- /dev/null +++ b/det2mat.m @@ -0,0 +1,26 @@ +function res=det2mat(dets); + if(isempty(dets)) + res=[]; + return; + end + dets=dets(:); + dim=7; + if(isfield(dets,'flip')) + dim=8; + end + if(isfield(dets,'boxid')) + dim=9; + end + + res=zeros(numel(dets),dim); + res(:,6)=[dets.detector]; + res(:,7)=[dets.imidx]; + if(isfield(dets,'flip')) + res(:,8)=[dets.flip]; + end + if(isfield(dets,'boxid')) + res(:,9)=[dets.boxid]; + end + pos=[dets.pos]; + res(:,1:5)=getBoxesForPedro(pos,[dets.decision]); +end diff --git a/detectInIm.m b/detectInIm.m new file mode 100755 index 0000000..4b42cd9 --- /dev/null +++ b/detectInIm.m @@ -0,0 +1,32 @@ +% Run detection on an image. model is the standard detector format-- +% i.e. it has a 'w' field where each row is a detector weight vector, +% a 'b' field with a bias that's subtracted from the score for each patch, +% and the 'id' field is an id for the detector. the image is the image +% at index imid in .ds.imgs{ds.conf.currimset}. conf can include: +% - 'flipall': flip the images to get more detections. Default false +% - 'thresh': detection threshold. Default -Inf +% - 'multperim': allow multiple detections per detector per image. Default false. +% If any of these fields aren't specified, they will be read from ds.conf.params +% before using the defaults. +% +% Output is a set of detections in the standard format: one per row, +% each row is [x1 y1 x2 y2 score detector_id image_id flip boxid]. Note +% that in this distribution, flip and boxid are not read. +function [dets,feats]=detectInIm(model,imid,conf) + if(~exist('conf','var')) + conf=struct(); + end + if(~dsfield(conf,'thresh')) + conf.thresh=-Inf; + end + conf2=conf; + conf2.thresh=model.b+conf.thresh; + boxid=[]; + [pos,dist,clustid,feats,flip,boxid]=bestInImbb(model.w,imid,conf2); + dist=dist-model.b(clustid); + if(isempty(dist)) + dets=zeros(0,9); + else + dets=[pos.x1,pos.y1,pos.x2,pos.y2,dist,model.id(clustid),repmat(imid,numel(dist),1),flip,boxid]; + end +end diff --git a/dispClassifier.m b/dispClassifier.m new file mode 100755 index 0000000..d83d8eb --- /dev/null +++ b/dispClassifier.m @@ -0,0 +1,118 @@ +% Generate a heatmap display of the classifier, which shows the pixels in +% the image that were most influential. Basically finds which dimensions +% of the image descriptor were most influential and back-projects them to +% the max firing within each region of the spatial pyramid. Note that this +% tends to generate a sparse representation of textured regions; I could +% probably do better, but there was no time. +% +% detr: element detectors +% im: image +% svm: final SVM +% feattransf: a function which converts max-pooled responses into a feature +% vector suitable for svm classification. +% dets: topn detections for each detector in detr +% dispimset: index of the image set where dets came from (note: in general, +% im was loaded from the test images, dets are from training images. +% displayname: prefix for saving the displays +function [posheatmap, negheatmap] = dispClassifier(detr, im, svm, feattransf,dets,displayname,dispimset) +try + +global ds; + % first, re-generate the image descriptor. As we find detections, add them to + % the heat map. + pyramid = constructFeaturePyramid(im, ds.conf.params); + [features, levels, indexes,gradsums] = unentanglePyramid(pyramid, ... + ds.conf.params.patchCanonicalSize/ds.conf.params.sBins-2); + invalid=(gradsums<9); + size(features) + features(invalid,:)=[]; + levels(invalid)=[]; + indexes(invalid,:)=[]; + gradsums(invalid)=[]; + disp(['threw out ' num2str(sum(invalid)) ' patches']); + patsz=ds.conf.params.patchCanonicalSize; + fsz=(patsz-2*ds.conf.params.sBins)/ds.conf.params.sBins; + pos=pyridx2pos(indexes,reshape(levels,[],1),fsz,pyramid); + posy=(pos.y1 + pos.y2)/2+.000001; + posx=(pos.x1 + pos.x2)/2+.000001; + posheatmap=zeros(size(im(:,:,1))); + negheatmap=zeros(size(posheatmap)); + idx=1; + feature=zeros(5,size(detr.w,1)); + wmat=reshape(svm.w,5,[]); + for(i=[-1 1]) + for(j=[-1 1]); + posidx=find(i*(posy-size(im,1)/2) > 0 & j*(posx-size(im,2)/2) > 0); + [assignedidx,dist]=assigntoclosest(detr.w,features(i*(posy-size(im,1)/2) > 0 & j*(posx-size(im,2)/2) > 0,:),1); + dist=dist(:)-detr.b; + posidx2=posidx(assignedidx); + posmat=[pos.x1 pos.y1 pos.x2 pos.y2]; + posmat2=posmat(i*(posy-size(im,1)/2) > 0 & j*(posx-size(im,2)/2) > 0,:); + if(exist('feattransf','var')) + dist=feattransf(dist')'; + end + feature(idx,:)=dist(:)'; + assignedidxall{idx}=assignedidx; + posall{idx}=posmat2(assignedidx,:); + wt=dist(:)'.*wmat(idx,:); + posheatmap=posheatmap+genheatmap(wt(wt>0)',posmat2(assignedidx(wt>0),:),size(posheatmap)); + negheatmap=negheatmap+genheatmap(-wt(wt<0)',posmat2(assignedidx(wt<0),:),size(posheatmap)); + idx=idx+1; + end + end + [feature(end,:),maxpos]=max(feature(1:end-1,:),[],1); + wt=feature(end,:).*wmat(end,:); + for(i=1:4) + posheatmap=posheatmap+genheatmap(wt(wt>0&maxpos==i)',posall{i}(wt>0&maxpos==i,:),size(posheatmap)); + negheatmap=negheatmap+genheatmap(-wt(wt<0&maxpos==i)',posall{i}(wt<0&maxpos==i,:),size(posheatmap)); + end + hm=posheatmap-negheatmap-svm.rho/numel(posheatmap); + posheatmap=hm.*(hm>0); + negheatmap=-hm.*(hm<0); + % if we got detections as an argument, generate two displays to show the ones + % that contributed most to this detection: one for negative contributions, + % one for positive. + if(nargin>4) + currimset=ds.conf.currimset; + if(exist('dispimset','var')) + ds.conf.currimset=dispimset;%assume imgs is loaded; don't want to run dsup. + end + contrib=sum(feature.*wmat,1); + [wt,todisp]=maxk(contrib,25); + todisp(wt<0)=[]; + wt(wt<0)=[]; + todisp=detr.id(todisp); + dsup([displayname '_pos.patchimg'],extractpatches(dets(ismember(dets(:,6),todisp),:))); + conf=struct('dets',dets(ismember(dets(:,6),todisp),:),'detrord',todisp,... + 'message',{cellfun(@(x) ['contribution:' num2str(x)],num2cell(wt),'UniformOutput',false)}); + mhprender('patchdisplay.mhp',[displayname '_pos.displayhtml'],conf); + [wt,todisp]=mink(contrib,50); + todisp(wt>0)=[]; + wt(wt>0)=[]; + todisp=detr.id(todisp); + dsup([displayname '_neg.patchimg'],extractpatches(dets(ismember(dets(:,6),todisp),:))); + conf=struct('dets',dets(ismember(dets(:,6),todisp),:),'detrord',todisp,... + 'message',{cellfun(@(x) ['contribution:' num2str(x)],num2cell(wt),'UniformOutput',false)}); + mhprender('patchdisplay.mhp',[displayname '_neg.displayhtml'],conf); + if(exist('dispimset','var')) + ds.conf.currimset=currimset; + end + end + + feature=feature(:); + im=repmat(rgb2gray(im),[1,1,3]); + posheatmap=heatmap2jet(posheatmap*40000)*.5+im*.5; + negheatmap=heatmap2jet(negheatmap*40000)*.5+im*.5; +catch ex,dsprinterr;end +end + +function res=heatmap2jet(heatmap) + cmp=colormap('jet'); + res=zeros([size(heatmap) 3]); + heatmap=round(heatmap*size(cmp,1)); + heatmap(heatmap<1)=1; + heatmap(heatmap>size(cmp,1))=size(cmp,1); + for(chan=1:3) + res(:,:,chan)=reshape(cmp(heatmap,chan),size(heatmap)); + end +end diff --git a/display_indoor67.m b/display_indoor67.m new file mode 100644 index 0000000..17220a3 --- /dev/null +++ b/display_indoor67.m @@ -0,0 +1,29 @@ +ds_html{end+1}=sprintf('\n'); +ds_html{end+1}=sprintf(''); +for(i=1:67) +ds_html{end+1}=sprintf(' \n'); +ds_html{end+1}=sprintf(' \n'); +ds_html{end+1}=sprintf(' '); +for(j=1:10) +ds_html{end+1}=sprintf(''); +end +ds_html{end+1}=sprintf(' \n'); +ds_html{end+1}=sprintf(' \n'); +ds_html{end+1}=sprintf(' '); +for(j=11:20) +ds_html{end+1}=sprintf(''); +end +ds_html{end+1}=sprintf(' \n'); +ds_html{end+1}=sprintf('\n'); +ds_html{end+1}=sprintf(''); +end +ds_reshtml=cell2mat(ds_html); +ds_html=[]; diff --git a/display_indoor67.mhp b/display_indoor67.mhp new file mode 100644 index 0000000..7a6cd82 --- /dev/null +++ b/display_indoor67.mhp @@ -0,0 +1,11 @@ +

    '); +ds_html{end+1}=num2str([argv.classnames{i}]); +ds_html{end+1}=sprintf('

    +<%for(i=1:67)%> + + + <%for(j=1:10)%><%end%> + + + <%for(j=11:20)%><%end%> + + +<%end%> diff --git a/distGenPooledFeats.m b/distGenPooledFeats.m new file mode 100755 index 0000000..9d940bb --- /dev/null +++ b/distGenPooledFeats.m @@ -0,0 +1,13 @@ +% given a set of element detectors, generate a feature vector +% for an image that's suitable for classification in an SVM. +% Just performs genPoolFeats2 on the both flips of the image +% and averages the resulting feature vectors. +function feats=distGenPoolFeats(detrs,imidx); + global ds; + i=imidx; + im=im2double(getimg(ds,i)); + feats=genPoolFeats2(detrs,im); + im=im(:,end:-1:1,:); + feats=(feats+genPoolFeats2(detrs,im))/2; + feats=feats(:)'; +end diff --git a/doGradDescentproj.m b/doGradDescentproj.m new file mode 100755 index 0000000..656c892 --- /dev/null +++ b/doGradDescentproj.m @@ -0,0 +1,388 @@ +% The core optimizer. It performs gradient ascent on +% sum_{i where Y(i)>0} max(w(:)'*X(:,i)*weights(i),0) + nrmlambda*norm(w(1:end-1)) ['the objective'] +% subject to sum_{i where Y(i)<=0} max(w(:)'*X(:,i)*weights(i),0)=beta. ['the constraint'] +% Note that this is not a convex optimization, and this function does not +% do anything special to correct for bad initial points. If you give it +% a random initialization, don't expect it to produce sane results! +function [ wOut outLabels miscstate ] = doGradDescentproj( X, Y, wIn ,weights,roundid) +global ds; +disp([num2str(size(X,2)) ' points, ' num2str(sum(Y>0)) ' pos']) +try +Y = Y(:); + +% read the parameters from dswork. +dsload('ds.round.lambda'); +if(dsfield(ds,'round','lambda')) + nrmlambda=ds.round.lambda; +elseif(dsfield(ds,'conf','params','lambda')) + nrmlambda=ds.conf.params.lambda; +else + nrmlambda=.002; +end +if(dsfield(ds,'conf','params','stepsize')) + stepsize=ds.conf.params.stepsize; +else + stepsize=.1; +end +if(dsfield(ds,'conf','params','optimizationComputeLimit')) + optimizationComputeLimit=ds.conf.params.optimizationComputeLimit; +end +dsload('ds.round.beta'); +if(dsfield(ds,'round','beta')) + beta=ds.round.beta; +elseif(dsfield(ds,'conf','params','beta')) + beta=ds.conf.params.beta; +else + beta=1; +end + +% In the current implementation, the feature vectors don't have the +% row of -1's appended +if (~all(X(end,:) == 1)) + fprintf('Appending row of -ones to feature vector\n'); + X = [X; -ones(1, size(X,2))]; +end + +if(sum(Y<=0)==0) + error('no negative points!'); +end + +% If this is one of the initialization rounds, we only update the bias term b. +% TODO: don't hardcode the 3. +if(roundid>-1 && roundid<=3) + wOut=wIn(:); + if(isempty(X)) + scores=[]; + return; + end + scores=(wOut(:)')*X; + negs=scores(Y<=0); + % fminsearch on the squared amount that the constraint is violated. However, + % fminsearch can miss the zero point if x gets too large and the gradient vanishes. + % Hence give a huge penalty for x in the region with zero gradient. + toadd=fminsearch(@(x) (sum(x+negs((x+negs)>0))-beta)^2 +1e10*(sum((x+negs)>0)==0),0,optimset('tolX',eps)) + wOut(end)=wOut(end)-toadd; + scores=scores+toadd; + toadd=.0001-min(max(scores(Y<=0)),max(scores(Y>0))); + toadd=max(0,toadd); + wOut(end)=wOut(end)-toadd; + outLabels=scores+toadd; + return; +end + +% If X has more rows than columns (more features per patch than patches) +% use a qr decomposition to rotate the space such that the last size(X,1)-size(X,2) +% dimensions are all zero. Then we can discard those dimensions. This can provide +% a big speed up for only marginal loss in numeric precision. +if(size(X,1)>size(X,2)) + X=X(1:end-1,:); + [B,~]=qr(X); + B=B(:,1:size(X,2)); + X=(B')*X; + X(end+1,:)=-1; + b=wIn(end); + wIn=((wIn(1:end-1)')*B)'; + wIn(end+1)=b; + ranqr=1; +else + ranqr=0; +end + +% If the weights (alphas) aren't set, then set them to all ones. +% Note that even in the version of the algorithm without cross-talk, we still +% use the weights to handle redundant detections in an image. +if(~exist('weights','var')) + weights=ones(size(Y)); + if(dsbool(ds.conf.params,'posweight')) + weights(Y==1)=ds.conf.params.posweight; + end +end +weights=weights(:)'; + +w = wIn; + +w_orig=w; + +% Keep track of the number of vector-matrix multiplies, approximately +% tracking the compute time. +nprods=0; +i=0; +% This should never be needed in the current implementation, but this counts +% the number of times we've 'fixed' a bad bias (see below). +nfails=0; +% The norm of the update to w. +nrmstep=Inf; +% The number of times we've taken a step without crossing any hinges (i.e. +% a point where w'*X(:,i) changes sign). +nquadmins=0; +while(nprods 1e-8 && nquadmins<10) + i=i+1; + wX = w'*X; + nprods=nprods+1; + + % If we received a bad initialization, it might be the case that none + % of the negative points have a score above zero, and so the gradient + % of the constraint will be zero and everything explodes. Hence we 'fix' + % the bias by increasing it until at least something is above zero. + while(sum(weights((wX)'>0 & Y<=0).*(wX((wX)'>0 & Y<=0)))==0) + disp('too few members, fixing bias...'); + nfails=nfails+1; + if(nfails>100000) + save([dsload('.ds.conf.dispoutpath') '/biasfail' num2str(floor(rand*1000))]); + error('too many bias fails'); + end + toadd=.01; + wX=wX+toadd; + w(end)=w(end)-toadd; + end + + % On the first round only, we use fminsearch to set the bias directly + % in a way that satisfies the constraint. + if(i==1) + negs=wX(Y<=0); + negweights=weights(Y<=0); + toadd=fminsearch(@(x) ((x+negs((x+negs)>0))*negweights((x+negs)>0)'-beta)^2 +1e10*(sum((x+negs)>0)==0),0,optimset('tolX',eps)) + w(end)=w(end)-toadd; + wX=wX+toadd; + end + + % compute the gradient of the objective sum_{i where Y(i)>0} max(w(:)'*X(:,i)*weights(i),0) + % which is just the weighted sum of the positive datapoints whose score is above zero. + lfull = wX.*weights; + lfull(wX<0)=0; + ldashfull = (wX>=0).*weights; + onSet = lfull' > 0; + contribIdx = Y>0; + lminus = sum(lfull((~contribIdx) & onSet)); + ldashplus = X(:,contribIdx& onSet) * ldashfull(contribIdx & onSet)'; + + % compute the gradient of norm(w) + ldashnrm=2*w*nrmlambda; + ldashnrm(end)=0; + + % project the gradient onto the tangent space of the constraint at the point w. + projspace=X(:,(~contribIdx) & onSet)*weights((~contribIdx) & onSet)'; + nprods=nprods+1; + projspace=projspace/norm(projspace); + nabla=ldashplus-ldashnrm; + nabla = nabla-projspace*(nabla'*projspace); + + % Take the affine approximation of the current constraint set--i.e. assume we can + % take as large a step as we want in the curent direction nabla without violating + % the constraint. It's a simple quadratic equation. Compute the best step we can take. + normquad=-[sum(nabla(1:end-1).^2),sum(2.*w(1:end-1).*nabla(1:end-1)),sum(w(1:end-1).^2)]*nrmlambda; + ldashplusquad=ldashplus'*nabla; + quadmin=(normquad(2)+ldashplusquad)/(-2*normquad(1)); + % numerical inaccuracy may cause quadmin to be slightly negative, in which case we + % should simply correct it to zero. If it's too negative (<-1e-8), something is broken + % in the optimizer. + if(quadmin<-1e-8) + error('quadmin was negative!'); + end + if(quadmin<0) + quadmin=0; + end + if(isnan(quadmin)) + error('quadmin was nan'); + end + % TODO: get rid of this section + % next, compute how big a step we can take without causing the sign of the score any patch + % to change. + % dall contains the gradient of the score of each patch with respect to the step size + %dall=nabla'*X; + % now dall contains the step which causes a sign change for a particular point + %dall=-wX./dall; + % any negative points are actually getting farther from the hinge as we take a larger + % step; ignore them. + %dall(dall<0)=Inf; + % now get the smallest step. + %[dall,dallidx]=sort(dall,'ascend'); + + % The alternative is a fixed step size. In practice the optimization is + % slightly faster if the step size is smaller when the weights are + % larger, but altering the fixed step size using this heuristic + % probably destroys all convergence guarantees. Note the optimization + % still works without this heuristic. + step=stepsize/sum(weights(contribIdx&onSet)); + wold=w; + + if(step100000) + save([dsload('.ds.conf.dispoutpath') '/biasfail' num2str(floor(rand*1000))]); + error('too many bias fails'); + end + toadd=.01; + negwX=negwX+toadd; + w(end)=w(end)-toadd; + end + + % Now that we have taken a step with respect to the objective function, + % the constraint is probably violated. Hence, we perform gradient descent + % on f(w)=|sum_{i where Y(i)<=0} max(w(:)'*X(:,i)*weights(i),0)-beta| + negweight=weights(~contribIdx); + totneg=negWx(negWx>0)*negweight(negWx>0)'; + neggt0=~contribIdx; + + % We need to do careful bookkeeping on the set of patches whose score + % is greater than zero--i.e. those patches that contribute to the gradient + % of f. The gradient is constant except when we hit a hinge, at which + % point a patch will either begin or stop contributing to the gradient + % of f. Hence, whenever we take a step, we step all the way to one + % of these hinges. However, once we've taken the step, we can't just + % test whether w'*X(:,i)>0 for all i, because one patch will + % score close to 0, but not exactly zero due to precision issues. + % We hence need to *force* that particular patch to either start or stop + % contributing to the gradient of f. neggt0 does that bookkeeping. + % + % I am actually not entirely sure that this does the bookkeeping correctly-- + % i.e. I think that if two patches have their scores hit 0 at the same time, + % one of them might not have their corresponding entry in neggt0 flipped + % properly. In practice, however, I have not noticed this becoming a problem, + % and any errors will get corrected on the next iteration anyway when neggt0 + % gets recomputed from scratch. + neggt0(~contribIdx)=negWx>0; + nprojs=0; + while(1) + % negWx contains the score of each negative point, and projdir contains + % the gradient of f. Note, however, that both of these quantities + % can be computed incrementally, since we know the gradient of the + % score of each point at every step of the optimization, and we know that + % this gradient stays constant, and we know the contribution of each point + % to the gradient. Error accumulates, however, so we + % re-compute negWx every 20 iterations. The constant 20 has not been tuned. + if(mod(nprojs,20)==0) + projdir=X(:,neggt0)*weights(neggt0)'; + nprods=nprods+1; + if(nprojs>0) + negWx=w'*X(:,(~contribIdx)); + nprods=nprods+1; + end + end + % compute the gradient of the score of each of the positives with respect to the + % current projection direction. + % Note that this could be computed incrementally if we pre-computed the kernel + % matrix X'*X, and this would probably lead to a big speedup. Haven't tried it + % though. + dnegs=projdir'*X(:,(~contribIdx)); + nprods=nprods+1; + % compute how far we have to step before the constraint is satisfied, assuming + % we don't hit any hinges. + zer=(beta-totneg)./(dnegs(neggt0(~contribIdx))*weights(neggt0)'); + % If it turns out we're stepping in the wrong direction, step in the right direction. + % Necessary because of the absolute value. + if(zer<0) + projdir=-projdir; + zer=-zer; + dnegs=-dnegs; + end + + % Figure out how far we can step before each of the datapoints hits their hinge. + signchg=-negWx./dnegs; + % If the sign change is negative, it means the current gradient direction is going + % away from that point's hinge. + signchg(signchg<=1e-8)=Inf; + % If we hit a hinge before we satisfy the constraint, step to that hinge. Otherwise, + % step to the point which satisfies the constraint. + if(min(signchg)1e-10) + nprojs=nprojs+1; + [msc,idx]=min(signchg); + fContribIdx=find(~contribIdx); + % wXidx is the index (i.e. column of X) of the point that hit its hinge + wXidx=fContribIdx(idx); + w=w+projdir*msc; + negWx=negWx+dnegs*msc; + newwx=zeros(size(wX)); + newwx(~contribIdx)=negWx; + if(neggt0(wXidx)) + projdir=projdir-X(:,wXidx)*weights(wXidx); + else + projdir=projdir+X(:,wXidx)*weights(wXidx); + end + neggt0(wXidx)=~neggt0(wXidx); + totneg=newwx(neggt0)*weights(neggt0)'; + else + w=w+projdir*zer; + break; + end + end + else + w=w+nabla*quadmin; + nrmstep=norm(nabla*quadmin); + disp('quadminned'); + end + nrmw=(norm(w(1:end-1))); + + % In general, we're running this optimization on a tiny subset of the total + % patch space. Hence, if w changes too much, we're computing ratios in a + % part of patch space where we have few or no samples, and so our estimate + % of the gradient is going to be bad. This is an ugly hack to terminate + % if it seems like we've drifted too far, which we ran out of space + % in the paper to explain. Let p be a point on the intersection of the decision + % boundary defined by w_orig and the unit hypersphere. Let theta be the angle + % between w_orig(1:end-1) and p. Let Q be the set of all points q on the unit + % hypershpere such that the angle between w_orig(1:end-1) and q is theta/2. + % Make sure that Q lies entirely on the positive side of the hyperplane + % defined by w. Perform the same test with the roles of w and w_orig reversed. + % If both tests pass, we keep going; otherwise we return for more patches. + anglechange=getangle(w(end),w(1:end-1))*.5>getangle(w_orig(end),w_orig(1:end-1))-acos(dot(w_orig(1:end-1),w(1:end-1))/(norm(w(1:end-1))*norm(w_orig(1:end-1)))); + anglechange=anglechange || getangle(w_orig(end),w_orig(1:end-1))*.5>getangle(w(end),w(1:end-1))-acos(dot(w_orig(1:end-1),w(1:end-1))/(norm(w(1:end-1))*norm(w_orig(1:end-1)))); + angorig=getangle(w_orig(end),w_orig(1:end-1)); + angnew=getangle(w(end),w(1:end-1)); + angdiffval=acos(dot(w_orig(1:end-1),w(1:end-1))/(norm(w(1:end-1))*norm(w_orig(1:end-1)))); + if(anglechange&&~dsbool(ds.conf.params,'nocheck')) + w=wold; + if(anglechange) + disp('optimization wants to leave safe zone. returning to get more patches.'); + break; + end + end + % print out a bunch of debug info. + if(mod(i,10)==0||nprods>=optimizationComputeLimit) + disp(['done: ' num2str(i) ' ' num2str(toc) ' seconds']); + disp(['lminus:' num2str(lminus)]); + disp(['w_end:' num2str(w(end))]); + disp(['ang_orig:' num2str(angorig)]); + disp(['ang_new:' num2str(angnew)]); + disp(['ang_dot:' num2str(angdiffval)]); + disp(['nabla_end:' num2str(nabla(end))]); + disp(['nrmstep:' num2str(nrmstep)]); + disp(['step:' num2str(step)]); + disp(['quadmin:' num2str(quadmin)]); + disp(['norm w:' num2str(nrmw)]); + disp(['active wX (pos neg): (' num2str(sum(wX(:)>0 & Y(:)>0)) ' ' num2str(sum(wX(:)>0 & Y(:)<=0)) ')']); + end +end +disp(['made it through ' num2str(i) ' rounds']); +wX = w'*X; +outLabels=wX; +if(sum(outLabels>0)<2) + error('too few patches in cluster...'); +end + +wOut = w; + +if(ranqr); + b=wOut(end); + wOut(end)=[]; + wOut=B*wOut; + wOut(end+1)=b; +end +wOut(end)=(wOut(end)); +catch ex;dsprinterr;end +end + +function res=getangle(bias,vec) + res=acos(-bias/norm(vec)); +end diff --git a/errdisp.m b/errdisp.m new file mode 100755 index 0000000..af13e3a --- /dev/null +++ b/errdisp.m @@ -0,0 +1,79 @@ +ds_html{end+1}=sprintf('\n'); +ds_html{end+1}=sprintf('

    <%=argv.classnames{i}%>

    \n'); +ds_html{end+1}=sprintf(' '); +for(i=1:numel(ds.todisp)) +ds_html{end+1}=sprintf(' \n'); +ds_html{end+1}=sprintf(' \n'); +ds_html{end+1}=sprintf(' \n'); +ds_html{end+1}=sprintf(' \n'); +ds_html{end+1}=sprintf(' \n'); +ds_html{end+1}=sprintf(' \n'); +ds_html{end+1}=sprintf(' \n'); +ds_html{end+1}=sprintf(' '); +end +ds_html{end+1}=sprintf('

    '); +if(~argv.iserror) +ds_html{end+1}=sprintf('top guess'); +else +ds_html{end+1}=sprintf('ground truth'); +end +ds_html{end+1}=sprintf(' (pos) (confindence '); +ds_html{end+1}=num2str([argv.confidence(i)]); +ds_html{end+1}=sprintf('):'); +ds_html{end+1}=num2str([argv.trueclasses{i}]); +ds_html{end+1}=sprintf('

    '); +if(~argv.iserror) +ds_html{end+1}=sprintf('top guess'); +else +ds_html{end+1}=sprintf('ground truth'); +end +ds_html{end+1}=sprintf(' (neg):'); +ds_html{end+1}=num2str([argv.trueclasses{i}]); +ds_html{end+1}=sprintf('

    '); +if(~argv.iserror) +ds_html{end+1}=sprintf('second guess'); +else +ds_html{end+1}=sprintf('guess'); +end +ds_html{end+1}=sprintf(' (pos):'); +ds_html{end+1}=num2str([argv.guessclasses{i}]); +ds_html{end+1}=sprintf('

    '); +if(~argv.iserror) +ds_html{end+1}=sprintf('second guess'); +else +ds_html{end+1}=sprintf('guess'); +end +ds_html{end+1}=sprintf(' (neg):'); +ds_html{end+1}=num2str([argv.guessclasses{i}]); +ds_html{end+1}=sprintf('
    \n'); +ds_html{end+1}=sprintf('\n'); +ds_reshtml=cell2mat(ds_html); +ds_html=[]; diff --git a/errdisp.mhp b/errdisp.mhp new file mode 100755 index 0000000..5fcb8a3 --- /dev/null +++ b/errdisp.mhp @@ -0,0 +1,13 @@ + + + <%for(i=1:numel(ds.todisp)) %> + + + + + + + + <%end %> +

    <%if(~argv.iserror)%>top guess<%else%>ground truth<%end%> (pos) (confindence <%=argv.confidence(i)%>):<%=argv.trueclasses{i}%>

    <%if(~argv.iserror)%>top guess<%else%>ground truth<%end%> (neg):<%=argv.trueclasses{i}%>

    <%if(~argv.iserror)%>second guess<%else%>guess<%end%> (pos):<%=argv.guessclasses{i}%>

    <%if(~argv.iserror)%>second guess<%else%>guess<%end%> (neg):<%=argv.guessclasses{i}%>
    + diff --git a/extractpatches.m b/extractpatches.m new file mode 100755 index 0000000..bea80df --- /dev/null +++ b/extractpatches.m @@ -0,0 +1,104 @@ +% Author: Carl Doersch (cdoersch at cs dot cmu dot edu) +% +% Extract patches corresponding to detections in images. +% detsimple is the set of detections, with a 'pos' field +% specifying positions, and a 'imidx' field, specifying +% an index into the current image set. imgs_all us unused. +function res=extractpatches(detsimple,imgs_all,conf) +global ds; +if(~isstruct(detsimple)) + detsimple=mat2det(detsimple); +end +if(~exist('conf','var')) + conf=struct(); +end +try +% dsload('ds.imgs'); +% global imgs; +% if(isempty(imgs)) + tmpimgs=dsload('.ds.imgs{ds.conf.currimset}'); + imgs=cell(numel(tmpimgs.fullname),1); +% end +numel(detsimple) +loaded=[]; +ct=1; +if(~dsbool(conf,'featurize')) + res=cell(1,numel(detsimple)); +end +[~,ord]=sort([detsimple.imidx]); + for(dsidx=ord(:)') + pos=detsimple(dsidx).pos; + i=detsimple(dsidx).imidx; + if(i==0) + if(isfield(conf,'explicitpatch')&&~isempty(conf.explicitpatch{dsidx})) + res{dsidx}=conf.explicitpatch{dsidx}; + else + res{dsidx}=cat(3,1,1,1); + end + if(~dsbool(conf,'noresize')) + pat=imresize(res{dsidx},[reszy reszx]); + end + continue; + end + if(numel(imgs)0||pady>0) + imgs{i}=padarray(imgs{i},[pady padx 0],'replicate'); + end + loaded(loaded==i)=[]; + loaded=[loaded i]; + if(numel(loaded)>1) + imgs{loaded(1)}=[]; + loaded(1)=[]; + end + end + %if(padsize>0) + %toaddy=round((pos.y2-pos.y1+1)*padsize); + %toaddx=round((pos.x2-pos.x1+1)*padsize); + pos.y1=pos.y1+pady; + pos.y2=pos.y2+pady; + pos.x1=pos.x1+padx; + pos.x2=pos.x2+padx; + %end + if(dsbool(conf,'noresize')) + pat=imgs{i}(pos.y1:pos.y2,pos.x1:pos.x2,:); + else + maxsz=max(pos.y2-pos.y1,pos.x2-pos.x1); + if(dsbool(conf,'explicitsize')) + reszx=conf.explicitsize(2); + reszy=conf.explicitsize(1); + else + reszx=80;%*(pos.x2-pos.x1)/maxsz; + reszy=80;%*(pos.y2-pos.y1)/maxsz; + end + pat=imresize(imgs{i}(pos.y1:pos.y2,pos.x1:pos.x2,:),[reszy reszx]); + end + if(dsbool(detsimple(dsidx),'flip')) + pat=pat(:,end:-1:1,:); + end + if(dsbool(conf,'featurize')) + conf.imid=i; + feat=patch2feat({pat},conf); + if(~exist('res','var')) + res=zeros(numel(detsimple),numel(feat),'single'); + res(dsidx,:)=single(feat); + else + res(dsidx,:)=single(feat); + end + else + res{dsidx}=pat; + end + if(mod(ct,10)==0) + disp(ct) + end + ct=ct+1; + + end + dsclear('.ds.overalldets'); +catch ex + dsprinterr +end diff --git a/findOverlapping3.m b/findOverlapping3.m new file mode 100755 index 0000000..a2ebd3e --- /dev/null +++ b/findOverlapping3.m @@ -0,0 +1,211 @@ +% datasource: a matrix of detections, or a path in dswork containing +% detections, in which case the detections will be read one column at +% a time, and it is assumed that all detections for one detector will +% be contained in a single cell of datasource. in this case, inds will +% contain the indices to read. +% classfordetr: a two-column matrix where the first column is a detector id, +% and the second is the class that the detector was sampled from. +% conf can contain: +% 'overlapthresh': the threshold for two patches in the same image to be considered +% overlapping +% 'ndetsforoverlap': maximum number of detections in common before two detectors are +% clustered together +% 'clusterer': 'greedy' implies the greedy de-duplication procedure described on +% the SIGGRAPH '12 paper. 'agglomerative' is the agglomerative clustering +% algorithm used to cluster patches in the NIPS '13 paper. +%detids: ids of nonoverlapping detectors, sorted by score +%scores: scores of detectors in detids, synchronized with detids +%component: the component of overlapping detectors; first column is all detids sorted by scores, +% second is the root detid that a given detector overlaps with, +% third is score corresponding to detector +function [detids,scores,component]=findOverlapping3(datasource,inds,classfordetr,conf) + if(~exist('conf','var')) + conf=struct(); + end + if(~dsfield(conf,'overlapthresh')) + conf.overlapthresh=.3; + end + if(~dsfield(conf,'maxoverlaps')) + conf.maxoverlaps=5; + end + if(~dsfield(conf,'ndetsforoverlap')) + conf.ndetsforoverlap=Inf; + end + if(~dsfield(conf,'clusterer')) + conf.clusterer='greedy'; + end + imgs=dsload('.ds.imgs{ds.conf.currimset}'); + try + global ds; + alldata={}; + scores=[]; + detids=[]; + if(ischar(datasource)) % Always false in current implementation + disp('loading...') + for(i=inds(:)') + dat=structcell2mat(dsload([datasource '{1:' num2str(dssavestatesize(datasource,1)) '}{' num2str(i) '}'],'clear')); + if(isstruct(dat)) + dat=det2mat(dat); + end + if(isempty(dat)) + dat=zeros(0,7); + end + [~,posinclassfordetr]=ismember(dat(:,6),classfordetr(:,1)); + positivedets=dat(classfordetr(posinclassfordetr,2)==imgs.label(dat(:,7)),:); + positivedets=distributeby(positivedets,positivedets(:,6)); + for(k=1:numel(positivedets)) + ndfo=conf.ndetsforoverlap; + if(ndfo>0&ndfo<1) + ndfo=round(sum(positivedets{k}(:,5)>0)*ndfo); + end + [~,tmpinds]=maxk(positivedets{k}(:,5),ndfo); + alldata{end+1,1}=positivedets{k}(tmpinds,[1:4,6:7]); + end + clear positivedets; + mydetids=unique(dat(:,6)); + for(j=1:numel(mydetids)) + if(~isfield(conf,'sortscores')) + %if(sortcount) + %ispos=classfordetr(posinclassfordetr,2)==imgs.label(dat(:,7)); + %ip=ispos(dat(dat(:,6)==mydetids(j),7)); + %scrtmp=dat(dat(:,6)==mydetids(j),5); + %[~,ord]=sort(scrtmp,'descend'); + %if(dsfield(conf,'sortn')) + % sortn=conf.sortn; + %else + % sortn=30; + %end + scores(end+1)=0;%sum(ip(ord(1:conf.sortn))); + %else + % scores(end+1)=scoreFromDots(dat(dat(:,6)==mydetids(j),5),ispos(dat(dat(:,6)==mydetids(j),7)+1),ds.conf.params); + %end + end + detids(end+1)=mydetids(j); + end + disp(i); + end + if(dsfield(conf,'sortscores')) + [~,ord]=ismember(detids,conf.sortscores(:,1)); + scores=conf.sortscores(ord,2); + end + alldata=cell2mat(alldata); + else + if(~(dsfield(conf,'sortn') || dsfield(conf,'sortscores')))% always false in current implementation + detids=sort(unique(datasource(:,6))); + for(i=numel(detids):-1:1) + inds=find(datasource(:,6)==detids(i)); + [~,~,counter]=unique(imgs.city(datasource(inds,7))); + [scores(i),maxid]=max(histc(counter,1:max(counter))); + scores(i)=scores(i)/numel(counter); + alldata{i}=datasource(inds(counter==maxid),[1:4,6:7]); + end + else + [datasource,detids]=distributeby(datasource,datasource(:,6)); + if(dsfield(conf,'sortscores')) % always false in current implementation + [~,ord]=ismember(detids,conf.sortscores(:,1)); + scores=conf.sortscores(ord,2); + for(i=numel(datasource):-1:1) + [~,tmpinds]=maxk(datasource{i}(:,5),conf.ndetsforoverlap); + alldata{i}=datasource{i}(tmpinds,[1:4,6:7]); + end + else + for(i=numel(datasource):-1:1) + % select the top detections for each detector. Get rid of the 'score' column + % for each patch because I wrote this before I'd standardized how I stored the detections. + [~,posinclassfordetr]=ismember(datasource{i}(:,6),classfordetr(:,1)); + isdetpos=classfordetr(posinclassfordetr(:,2))'==imgs.label(datasource{i}(:,7)); + [~,detord]=maxk(datasource{i}(:,5),conf.sortn); + scores(i)=sum(isdetpos(detord))/conf.sortn; + posdets=datasource{i}(isdetpos,:); + [~,tmpinds]=maxk(posdets(:,5),conf.ndetsforoverlap); + alldata{i}=posdets(tmpinds,[1:4,6:7]); + end + end + end + %alldata=datasource(:,[1:4,6:7]); + alldata=cell2mat(alldata'); + clear datasource; + end + disp('sort by image'); + [~,ord]=sort(scores,'descend'); + [~,alldata(:,5)]=ismember(alldata(:,5),detids(ord));%relabel detector id's such that highest scoring detectors get lowest id's + [~,imgord]=sort(alldata(:,6)); + alldata=alldata(imgord,:); + alldata=mat2cell(alldata,diff([0;find(diff(alldata(:,6))); size(alldata,1)]),size(alldata,2));%break up alldata into a cell array by image + disp('compute overlaps'); + overlapping={}; + % compute the overlapping patches for each image. + for(i=1:numel(alldata)) + overl = computeOverlap(alldata{i}(:,1:4), alldata{i}(:,1:4), 'pascal'); + overl(1:(size(overl,1)+1):end)=0; + [r,col]=find(overl>conf.overlapthresh); + ovldets=[alldata{i}(r,5) alldata{i}(col,5)]; + ovldets=ovldets(ovldets(:,1)conf.maxoverlaps),:); + links=sparse(links(:,2),links(:,1),ones(size(links(:,1))),numel(detids),numel(detids)); + hasoverlap=zeros(numel(detids),1); + hasoverlap(unique(overlapping(ends(hists>10),2)))=1; + old=ones(size(hasoverlap(:))); + while(~all(hasoverlap==old)) + old=hasoverlap; + hasoverlap=links*(~hasoverlap)>0; + end + + eliminate=find(hasoverlap); + + if(nargout>=3) + component=zeros(numel(hasoverlap),2); + component(:,1)=detids(ord); + for(i=1:size(component,1)) + if(hasoverlap(i)) + mylinks=links(i,(1:(i-1))).*(~hasoverlap(1:(i-1)))'; + mylinks=find(mylinks); + component(i,2)=component(mylinks(1),2); + else + component(i,2)=component(i,1); + end + end + end + elseif(strcmp(conf.clusterer,'agglomerative')) + % compute the 'distance' between two elements as the negative number of + % overlapping patches across all images plus a constant. + links=overlapping(ends(hists>0),:); + links=sparse(links(:,2),links(:,1),hists(hists>0),numel(detids),numel(detids)); + links=max(links,links'); + minval=max(links(:)); + % linkage2 is a copy of matlab's linkage function. linkage has a bug + % a bug that makes it crash on the sorts of inputs I give it. + cluststr=linkage2((1:numel(detids))','average',{@(x,y) -links(x,y)+minval}); + component=cluster(cluststr,'cutoff',minval-conf.maxoverlaps+.001,'criterion','distance'); + component2=component; + %detrrank(ord)=1:numel(ord); + for(j=unique(component(:)')) + mindetrrank=min(find(component==j)); + component2(component==j)=detids(ord(mindetrrank)); + end + component=[c(detids(ord)) component2(:)]; + eliminate=component(:,1)~=component(:,2); + else + error('unrecognized clusterer'); + end + scores=scores(:); + if(nargout>=3) + component=[component scores(ord)]; + end + detids=detids(ord);%(ord(eliminate))=[]; + detids(eliminate)=[]; + scores=scores(ord);%(ord(eliminate))=[]; + scores(eliminate)=[]; + catch ex,dsprinterr;end +end diff --git a/findmatches.m b/findmatches.m new file mode 100755 index 0000000..e8bdd80 --- /dev/null +++ b/findmatches.m @@ -0,0 +1,30 @@ +%generally, targets are the detectors and toassign is patches from current image +function [assignedidx, dist, clustid]=findmatches(targets,toassign,thresh,conf); + global ds; + thresh=thresh(:); + if(~exist('conf','var')) + conf=struct(); + end + if(dsfield(conf,'rho')) + pertargrho=conf.rho(:); + else + pertargrho=0; + end + closest=zeros(size(toassign,1),1); + outdist=zeros(size(toassign,1),1); + assignedidx={};clustid={};dist={}; + for(i=1:800:size(toassign,1)) + inds=i:min(i+800-1,size(toassign,1)); + batch=toassign(inds,:); + inprod=targets*(batch'); + inprod=bsxfun(@plus,inprod,pertargrho); + [x,y]=find(bsxfun(@gt,inprod,thresh)); + clustid{end+1}=reshape(x,[],1); + assignedidx{end+1}=reshape(inds(y),[],1); + dist{end+1}=reshape(inprod(sub2ind(size(inprod),x(:),y(:))),[],1); + %[outdist(inds),closest(inds)]=max(dist,[],1); + end + assignedidx=structcell2mat(assignedidx'); + clustid=structcell2mat(clustid'); + dist=structcell2mat(dist'); +end diff --git a/genPoolFeats2.m b/genPoolFeats2.m new file mode 100755 index 0000000..22e0c94 --- /dev/null +++ b/genPoolFeats2.m @@ -0,0 +1,41 @@ +% Given a set of element detectors and an image, generate +% a feature vector suitable for use in an SVM. Specifically, +% run the detectors on the image, and find the max detection +% in each cell of a 2-level spatial pyramid (2x2 and 1x1). Hence +% the final representation has length numel(detr.id)*5. All features +% for one detector are stored consecutively. +function [feature] = genPoolFeats(detr, im) +global ds; + pyramid = constructFeaturePyramid(im, ds.conf.params); + [features, levels, indexes,gradsums] = unentanglePyramid(pyramid, ... + ds.conf.params.patchCanonicalSize/ds.conf.params.sBins-2); + invalid=(gradsums<9); + size(features) + features(invalid,:)=[]; + levels(invalid)=[]; + indexes(invalid,:)=[]; + gradsums(invalid)=[]; + disp(['threw out ' num2str(sum(invalid)) ' patches']); + patsz=ds.conf.params.patchCanonicalSize; + fsz=(patsz-2*ds.conf.params.sBins)/ds.conf.params.sBins; + pos=pyridx2pos(indexes,reshape(levels,[],1),fsz,pyramid); + posy=(pos.y1 + pos.y2)/2+.000001; + posx=(pos.x1 + pos.x2)/2+.000001; + idx=1; + feature=zeros(5,size(detr.w,1)); + % find the maximum match in each of the 4 grid cells separately + % (note assigntoclosest finds the best score in a set of feature vectors + % for each detector). + for(i=[-1 1]) + for(j=[-1 1]); + [~,dist]=assigntoclosest(detr.w,features(i*(posy-size(im,1)/2) > 0 & j*(posx-size(im,2)/2) > 0,:),1); + dist=dist(:)-detr.b; + feature(idx,:)=dist(:)'; + idx=idx+1; + end + end + % compute the 1x1 layer of the spatial pyramid as the max + % of the 2x2 layer. + feature(end,:)=max(feature(1:end-1,:),[],1); + feature=feature(:)'; +end diff --git a/genheatmap.m b/genheatmap.m new file mode 100755 index 0000000..ff80253 --- /dev/null +++ b/genheatmap.m @@ -0,0 +1,7 @@ +function res=genheatmap(wt,pos,sz) + res=zeros(sz(1),sz(2)); + pos=round(pos); + for(i=1:numel(wt)) + res(pos(i,2):pos(i,4),pos(i,1):pos(i,3))=res(pos(i,2):pos(i,4),pos(i,1):pos(i,3))+wt(i)/((pos(i,3)-pos(i,1)+1)*(pos(i,4)-pos(i,2)+1)); + end +end diff --git a/getFeaturesForLevel.m b/getFeaturesForLevel.m new file mode 100755 index 0000000..6e88749 --- /dev/null +++ b/getFeaturesForLevel.m @@ -0,0 +1,59 @@ +function [features, indexes, gradsums] = getFeaturesForLevel(level, params,prSize, pcSize,pzSize,nExtra,gradimg) +% Author: saurabh.me@gmail.com (Saurabh Singh) +%edited by carl +[rows, cols, dims] = size(level); +%level=cat(3,level,imresize(im(:,:,2),[rows cols],'bilinear'),imresize(im(:,:,3),[rows cols],'bilinear')); +%dims=dims+2; +rLim = rows - prSize + 1; +cLim = cols - pcSize + 1; +%keyboard; +featDim = prSize * pcSize * pzSize + nExtra +if(dsbool(params,'appendbias')) + features = ones(rLim * cLim, featDim+1); +else + features = ones(rLim * cLim, featDim); +end +if(exist('gradimg','var')) + gradsums=zeros(rLim * cLim,1); + creategrad=true; +else + creategrad=false; +end +%if(dsfield(params,'useColorHists')) +% useColorHists=true; +%else +% useColorHists=false; +%end +indexes = zeros(rLim * cLim, 2); +featInd = 0; +size(level) +for j = 1 : cLim + for i = 1 : rLim + feat = level(i:i+prSize-1, j:j+pcSize-1, :); +% featlab = im2(i:i+prSize-1, j:j+pcSize-1, :)*.03; + featInd = featInd + 1; + %if(useColorHists) + % endhist=sum(sum(feat(:,:,32:end))); + % features(featInd,:)=[reshape(feat(:,:,1:31),1,[]) endhist(:)']; + %else + feat=reshape(feat, 1, []); + %if(dsbool(params,'normalizefeats')) + % feat=(feat-mean(feat)); + % feat=feat./max(.0000001,norm(feat)); + %end + features(featInd, 1:size(feat,2)) = feat; + + %end + if(creategrad) + gradsums(featInd)=mean(mean(gradimg(i:i+prSize-1, j:j+pcSize-1))); + end + +% features(featInd, :) = reshape(feat, 1, featDim); + indexes(featInd, :) = [i, j]; + + end +end +%if(dsbool(params,'normalizefeats')) +% features=normrows(features,1,.000001); +%end +end diff --git a/getLevelScales.m b/getLevelScales.m new file mode 100755 index 0000000..c519b35 --- /dev/null +++ b/getLevelScales.m @@ -0,0 +1,5 @@ +function scales = getLevelScales(numLevels, interval) +% Author: saurabh.me@gmail.com (Saurabh Singh). +sc = 2^(1 / interval); +scales = sc.^(0 : numLevels - 1); +end diff --git a/getMinimalModel2.m b/getMinimalModel2.m new file mode 100755 index 0000000..6098d77 --- /dev/null +++ b/getMinimalModel2.m @@ -0,0 +1,23 @@ +function minModel = getMinimalModel(model,suppVec) +% precomputes the weight vectors. +if(~exist('suppVec','var')) + suppVec = model.SVs; +else + suppVec=suppVec(model.SVs,:); +end +coeff = model.sv_coef; +coeff = repmat(coeff, 1, size(suppVec, 2)); +minModel.rho = model.rho; +size(coeff) +size(suppVec) +minModel.w = sum(coeff .* suppVec); +firstLabel = model.Label(1); +minModel.w=minModel.w*firstLabel; +minModel.rho=minModel.rho*firstLabel; +if isfield(model, 'threshold') + minModel.threshold = model.threshold; +end +if isfield(model, 'info') + minModel.info = model.info; +end +end diff --git a/getRandForPdf.m b/getRandForPdf.m new file mode 100755 index 0000000..0b5f7d1 --- /dev/null +++ b/getRandForPdf.m @@ -0,0 +1,18 @@ +function numbers = getRandForPdf(dist, n) +cumul = cumsum(dist); +steps = 0:1/(length(dist)-1):1; +cumulInv = zeros(1, length(cumul)); +cumulInd = 1; +for i = 1 : length(steps) + if steps(i) < cumul(cumulInd) + cumulInv(i) = cumulInd; + else + while cumulInd < length(steps) && steps(i) > cumul(cumulInd) + eps + cumulInd = cumulInd + 1; + end + cumulInv(i) = cumulInd; + end +end +numbers = round(rand(1, n) * (length(dist) - 1)) + 1; +numbers = cumulInv(numbers); +end \ No newline at end of file diff --git a/getimg.m b/getimg.m new file mode 100755 index 0000000..6e5f0f6 --- /dev/null +++ b/getimg.m @@ -0,0 +1,41 @@ +% Author: Carl Doersch (cdoersch at cs dot cmu dot edu) +% +% Load an image at the position specified by idx. Optionally, +% the first parameter can be the ds structure, avoiding +% a call to global. +function res=getimg(ds,idx) + if(nargin<2) + idx=ds; + clear ds; + global ds; + end + imgs=dsload('.ds.imgs{ds.conf.currimset}'); + if(ds.conf.currimset==10&&idx==15842) + error('bad image!!'); + end + if(numel(imgs.fullname)ds.conf.params.maxpixels) + ressz=round([size(res,1),size(res,2)]*sqrt(ds.conf.params.maxpixels/(size(res,1)*size(res,2)))) + res=imresize(res,ressz); + end + end + if(dsfield(ds,'conf','params','minpixels')) + if(size(res,1)*size(res,2).5). Hence it's a 'softened' +% version of the greedy deduplication used in the SIGGRAPH 12 paper. +% This is the ranking used for the indoor67 experiments, and to be +% honest it doesn't work very well. +function [res,coverageinc]=greedySelectDetrsCoverage(indata,ispos,thresh,ntosel,conf) +try + if(~iscell(indata)) + indata={indata}; + end + if(~exist('conf','var')) + conf=struct(); + end + % first select the detections above the given level of purity. + % Do it separately for each cell of indata. + for(m=1:numel(indata)) + [data,elid]=distributeby(indata{m},indata{m}(:,6)); + ispos=ispos(:)'>0; + for(i=1:numel(data)) + dat=data{i}; + [~,ord]=sort(dat(:,5),'descend'); + dat=dat(ord,:); + isposdat=ispos(dat(:,7)); + % compute purity at each point in the ranking. + purity=cumsum(isposdat)./(1:numel(isposdat)); + tokeep=max(find(purity>=thresh)); + if(purity(end)>thresh) + disp(['warning: min purity for ' num2str(elid(i)) ' was ' num2str(purity(end))]); + end + if(~dsbool(conf,'useoverlap')) + data{i}=dat(1:tokeep,[1:4 6:7]); + imind=6; + else + data{i}=dat(1:tokeep,:); + imind=7; + end + data{i}=data{i}(ispos(data{i}(:,imind)),:); + [~,ord]=sort(data{i}(:,imind)); + data{i}=data{i}(ord,:); + if(mod(i,100)==0) + disp(i); + end + if(dsbool(conf,'legaldetrs')) + data{i}(~ismember(data{i}(:,imind-1),conf.legaldetrs),:)=[]; + end + end + data=cell2mat(data); + indata{m}=data; + end + if(~dsbool(conf,'useoverlap')) + % compute based on pixels + indata=cell2mat(indata(:)); + [~,indata(:,imind)]=ismember(indata(:,imind),unique(indata(:,imind))); + [res,coverageinc]=greedySelectDetrsCoveragemex(int64(indata),int64(ntosel)); + else + % compute based on detection counts. + indata=cell2mat(indata(:)); + maxdetr=max(indata(:,6)); + indata=distributeby(indata,indata(:,7)); + selected=[]; + % For each image, compute a matrix specifying which bounding boxes overlap with + % which other bounding boxes. + for(i=1:numel(indata)) + indata{i}=indata{i}(myNmsClass(indata{i},.5),:); + ovlp{i}=computeOverlap(indata{i}(:,1:4),indata{i}(:,1:4),'pedro')>.5; + end + for(j=1:ntosel) + % cts accumulates, for each detector, the total number of detections by that + % detector, weighted by the number of overlaps. + cts=zeros(maxdetr,1); + for(i=1:numel(ovlp)) + % for each detection d in a given image, sovl(d) is the inverse of the number + % of other detections (from other previously-selected detectors) that d overlaps with. + sovl=1./(1+sum(ovlp{i}(ismember(indata{i}(:,6),selected),:),1)); + % Add the values in sovl to the per-detector counts in cts. Note this + % can't be vectorized because one image may have repeated detectors. + for(t=1:numel(sovl)) + cts(indata{i}(t,6))=cts(indata{i}(t,6))+sovl(t); + end + end + cts(selected)=-Inf; + [coverageinc(j),selected(j)]=max(cts); + disp(['selected ' num2str(selected(j)) ' count ' num2str(coverageinc(j))]); + end + res=selected(:); + end + %keyboard +catch ex,dsprinterr;end +end diff --git a/hog/COPYING b/hog/COPYING new file mode 100755 index 0000000..8089dad --- /dev/null +++ b/hog/COPYING @@ -0,0 +1,21 @@ +Copyright (C) 2008, 2009, 2010 Pedro Felzenszwalb, Ross Girshick +Copyright (C) 2007 Pedro Felzenszwalb, Deva Ramanan + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/hog/features.cc b/hog/features.cc new file mode 100755 index 0000000..7587a76 --- /dev/null +++ b/hog/features.cc @@ -0,0 +1,234 @@ +#include +#include "mex.h" + +// small value, used to avoid division by zero +#define eps 0.0001 + +// unit vectors used to compute gradient orientation +double uu[9] = {1.0000, + 0.9397, + 0.7660, + 0.500, + 0.1736, + -0.1736, + -0.5000, + -0.7660, + -0.9397}; +double vv[9] = {0.0000, + 0.3420, + 0.6428, + 0.8660, + 0.9848, + 0.9848, + 0.8660, + 0.6428, + 0.3420}; + +static inline double min(double x, double y) { return (x <= y ? x : y); } +static inline double max(double x, double y) { return (x <= y ? y : x); } + +static inline int min(int x, int y) { return (x <= y ? x : y); } +static inline int max(int x, int y) { return (x <= y ? y : x); } + +// main function: +// takes a double color image and a bin size +// returns HOG features +mxArray *process(const mxArray *mximage, const mxArray *mxsbin) { + double *im = (double *)mxGetPr(mximage); + const int *dims = mxGetDimensions(mximage); + if (mxGetNumberOfDimensions(mximage) != 3 || + dims[2] != 3 || + mxGetClassID(mximage) != mxDOUBLE_CLASS) + mexErrMsgTxt("Invalid input"); + + int sbin = (int)mxGetScalar(mxsbin); + + // memory for caching orientation histograms & their norms + int blocks[2]; + blocks[0] = (int)round((double)dims[0]/(double)sbin); + blocks[1] = (int)round((double)dims[1]/(double)sbin); + double *hist = (double *)mxCalloc(blocks[0]*blocks[1]*18, sizeof(double)); + double *norm = (double *)mxCalloc(blocks[0]*blocks[1], sizeof(double)); + + // memory for HOG features + int out[3]; + out[0] = max(blocks[0]-2, 0); + out[1] = max(blocks[1]-2, 0); + out[2] = 27+4; + mxArray *mxfeat = mxCreateNumericArray(3, out, mxDOUBLE_CLASS, mxREAL); + double *feat = (double *)mxGetPr(mxfeat); + + int visible[2]; + visible[0] = blocks[0]*sbin; + visible[1] = blocks[1]*sbin; + + for (int x = 1; x < visible[1]-1; x++) { + for (int y = 1; y < visible[0]-1; y++) { + // first color channel + double *s = im + min(x, dims[1]-2)*dims[0] + min(y, dims[0]-2); + double dy = *(s+1) - *(s-1); + double dx = *(s+dims[0]) - *(s-dims[0]); + double v = dx*dx + dy*dy; + + // second color channel + s += dims[0]*dims[1]; + double dy2 = *(s+1) - *(s-1); + double dx2 = *(s+dims[0]) - *(s-dims[0]); + double v2 = dx2*dx2 + dy2*dy2; + + // third color channel + s += dims[0]*dims[1]; + double dy3 = *(s+1) - *(s-1); + double dx3 = *(s+dims[0]) - *(s-dims[0]); + double v3 = dx3*dx3 + dy3*dy3; + + // pick channel with strongest gradient + if (v2 > v) { + v = v2; + dx = dx2; + dy = dy2; + } + if (v3 > v) { + v = v3; + dx = dx3; + dy = dy3; + } + + // snap to one of 18 orientations + double best_dot = 0; + int best_o = 0; + for (int o = 0; o < 9; o++) { + double dot = uu[o]*dx + vv[o]*dy; + if (dot > best_dot) { + best_dot = dot; + best_o = o; + } else if (-dot > best_dot) { + best_dot = -dot; + best_o = o+9; + } + } + + // add to 4 histograms around pixel using linear interpolation + double xp = ((double)x+0.5)/(double)sbin - 0.5; + double yp = ((double)y+0.5)/(double)sbin - 0.5; + int ixp = (int)floor(xp); + int iyp = (int)floor(yp); + double vx0 = xp-ixp; + double vy0 = yp-iyp; + double vx1 = 1.0-vx0; + double vy1 = 1.0-vy0; + v = sqrt(v); + + if (ixp >= 0 && iyp >= 0) { + *(hist + ixp*blocks[0] + iyp + best_o*blocks[0]*blocks[1]) += + vx1*vy1*v; + } + + if (ixp+1 < blocks[1] && iyp >= 0) { + *(hist + (ixp+1)*blocks[0] + iyp + best_o*blocks[0]*blocks[1]) += + vx0*vy1*v; + } + + if (ixp >= 0 && iyp+1 < blocks[0]) { + *(hist + ixp*blocks[0] + (iyp+1) + best_o*blocks[0]*blocks[1]) += + vx1*vy0*v; + } + + if (ixp+1 < blocks[1] && iyp+1 < blocks[0]) { + *(hist + (ixp+1)*blocks[0] + (iyp+1) + best_o*blocks[0]*blocks[1]) += + vx0*vy0*v; + } + } + } + + // compute energy in each block by summing over orientations + for (int o = 0; o < 9; o++) { + double *src1 = hist + o*blocks[0]*blocks[1]; + double *src2 = hist + (o+9)*blocks[0]*blocks[1]; + double *dst = norm; + double *end = norm + blocks[1]*blocks[0]; + while (dst < end) { + *(dst++) += (*src1 + *src2) * (*src1 + *src2); + src1++; + src2++; + } + } + + // compute features + for (int x = 0; x < out[1]; x++) { + for (int y = 0; y < out[0]; y++) { + double *dst = feat + x*out[0] + y; + double *src, *p, n1, n2, n3, n4; + + p = norm + (x+1)*blocks[0] + y+1; + n1 = 1.0 / sqrt(*p + *(p+1) + *(p+blocks[0]) + *(p+blocks[0]+1) + eps); + p = norm + (x+1)*blocks[0] + y; + n2 = 1.0 / sqrt(*p + *(p+1) + *(p+blocks[0]) + *(p+blocks[0]+1) + eps); + p = norm + x*blocks[0] + y+1; + n3 = 1.0 / sqrt(*p + *(p+1) + *(p+blocks[0]) + *(p+blocks[0]+1) + eps); + p = norm + x*blocks[0] + y; + n4 = 1.0 / sqrt(*p + *(p+1) + *(p+blocks[0]) + *(p+blocks[0]+1) + eps); + + double t1 = 0; + double t2 = 0; + double t3 = 0; + double t4 = 0; + + // contrast-sensitive features + src = hist + (x+1)*blocks[0] + (y+1); + for (int o = 0; o < 18; o++) { + double h1 = min(*src * n1, 0.2); + double h2 = min(*src * n2, 0.2); + double h3 = min(*src * n3, 0.2); + double h4 = min(*src * n4, 0.2); + *dst = 0.5 * (h1 + h2 + h3 + h4); + t1 += h1; + t2 += h2; + t3 += h3; + t4 += h4; + dst += out[0]*out[1]; + src += blocks[0]*blocks[1]; + } + + // contrast-insensitive features + src = hist + (x+1)*blocks[0] + (y+1); + for (int o = 0; o < 9; o++) { + double sum = *src + *(src + 9*blocks[0]*blocks[1]); + double h1 = min(sum * n1, 0.2); + double h2 = min(sum * n2, 0.2); + double h3 = min(sum * n3, 0.2); + double h4 = min(sum * n4, 0.2); + *dst = 0.5 * (h1 + h2 + h3 + h4); + dst += out[0]*out[1]; + src += blocks[0]*blocks[1]; + } + + // texture features + *dst = 0.2357 * t1; + dst += out[0]*out[1]; + *dst = 0.2357 * t2; + dst += out[0]*out[1]; + *dst = 0.2357 * t3; + dst += out[0]*out[1]; + *dst = 0.2357 * t4; + } + } + + mxFree(hist); + mxFree(norm); + return mxfeat; +} + +// matlab entry point +// F = features(image, bin) +// image should be color with double values +void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { + if (nrhs != 2) + mexErrMsgTxt("Wrong number of inputs"); + if (nlhs != 1) + mexErrMsgTxt("Wrong number of outputs"); + plhs[0] = process(prhs[0], prhs[1]); +} + + + diff --git a/hog/features.mexa64 b/hog/features.mexa64 new file mode 100755 index 0000000000000000000000000000000000000000..e064e4849391f5e3686e5d0d3539640bdf4977d8 GIT binary patch literal 11488 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 literal 0 HcmV?d00001 diff --git a/indoor67_main.m b/indoor67_main.m new file mode 100755 index 0000000..7683afd --- /dev/null +++ b/indoor67_main.m @@ -0,0 +1,671 @@ +global ds; +myaddpath; +finishedinit=false; +try,finishedinit=dsload('.ds.finishedinit');catch,end +if(~finishedinit) + dscd('.ds'); + dsdelete('ds.*'); + % Edit the following with your path to the indoor67 data. This + % directory should contain directories for airport_inside, artstudio, + % etc. + indoor67path='/code/data/indoor67/'; + % optionally, set the web-accessible path for the same directory-- + % i.e. the path such that [weburl '/airport_inside/{imagename}'] can + % be used to download the image. This is only used in displays; + % if you just set it to the empty string, the code will still work, + % but some links in the displays will be broken. + weburl=''; + + % Set the number of parallel workers: + njobs=12; + % Set the amount of memory on each machine; dswork will estimate + % how many jobs can be run simultaneously on each machine + % based on this value. Note that if you're running jobs alongside + % the master, leave about 4GB for the master process + ds.conf.mempermachine=59; + % The machine where qsub can be run, or 'local' if you want to run on + % a single machine: + targmachine='local'; + + % Any additional configuration to pass to dsmapredopen(); + distprocconf=struct(); + + ds.masterscriptname=mfilename; + + % set an output directory (on a filesystem that's accessible to all matlab's) + dssetout('/PATH/TO/OUTPUT'); + % If you're running distributed and want to use SSH to send data between + % nodes, use the following to set a directory where dswork can cache + % files locally. On Starcluster, /mnt/sgeadmin is a good place (assuming + % you run your jobs as the user sgeadmin). + %dssetlocaldir('/mnt/sgeadmin/'); + + + if(~exist('dataset_indoor67_jpg.mat','file')) + disp(['WARNING: you are about to create jpeg versions of the gifs in the indoor67 data directory. '... + 'type ''return'' to continue or ''dbquit'' to cancel.']); + keyboard + preprocessindoor67(indoor67path,{'dataset_indoor67_test.mat','dataset_indoor67_jpg.mat'}); + end + testdata=load('dataset_indoor67_test.mat'); + setdataset(20,testdata.imgs,indoor67path,testdata.labelnames,weburl); + traindata=load('dataset_indoor67_jpg.mat'); + setdataset(19,traindata.imgs,indoor67path,traindata.labelnames,weburl); + + + if(isfield(ds.conf.gbz{ds.conf.currimset},'imgsurl')) + ds.imgsurl=ds.conf.gbz{ds.conf.currimset}.imgsurl; + end + rand('seed',1234) + ds.conf.params= struct( ... + 'ovlweight', 1, ... % use the inter-element communication scheme to set the weights. + 'negsperpos', 8, ... % during element training, the number of images we hard-mine + ... % negatives from during for each positive training image. + 'maxpixels',300000,... % large images will be downsampled to this many pixels. + 'minpixels',300000,... % small images will be upsampled to this many pixels. + 'patchCanonicalSize', {[64 64]}, ... % resolution for each detected patch. + 'scaleIntervals', 8, ... % number of pyramid levels per scale. + 'sBins', 8, ... % pixel width/height for HOG cells + 'useColor', 1, ... % include Lab tiny images in the descriptor for a patch. + 'whitening', 1, ... % whiten the patch features + 'normbeforewhit', 1, ... % mean-subtract and normalize features before applying whitening + 'normalizefeats', 1, ... % mean-subtract and normalize features after applying whitening + 'graddescfun', @doGradDescentproj, ... % function ptr for the optimization function. It gets called + ... % on each round of the optimization, including during + ... % initialization. See doGradDescentproj.m + 'stepsize', .05, ... % step size used by the optimizer + 'beta', 1, ... % beta value for the optimization + 'optimizationComputeLimit',1500,... % maximum number of vector-matrix multiplies that the + ... % optimizer may perform on each training iteration + 'samplingOverlapThreshold', 0.6, ... % patches sampled initially can't have overlap larger + ... % than this value. + 'samplingNumPerIm',20,... % sample this many patches per image. + 'multperim', 1, ... % allow multiple detections per image + 'nmsOverlapThreshold', 0.4 ... % overlap threshold for NMS during detection. + ) + if(~dsbool(ds.conf.params,'ovlweight')) + ds.conf.params.lambdainit=.002;% lambda value for the optimization used during the first + % training round (gets increased proportional to the number + % of samples at later training rounds) + else + ds.conf.params.lambdainit=.02; % without the inter-element communication, everything + % has a higher weight, and so we need to increase the + % regularization. + end + + + %pick which images to use out of the dataset + imgs=ds.imgs{ds.conf.currimset}; + ds.myiminds=1:numel(imgs.label); + + % ds.roundinds stores the indices of the images to use at each iteration of training + [~,cls]=ismember(ds.imgs{ds.conf.currimset}.label(ds.myiminds),unique(ds.imgs{ds.conf.currimset}.label)); + imgsbyclass=distributeby(ds.myiminds(:),cls); + rp=randperm(numel(ds.myiminds)); + % the first 3 rounds of training are just used to set the initial bandwidth, so we + % use a very small subset of them. + % actually it's pretty stupid that this takes 3 rounds; it could be done in 1 except + % that doing so would generate tons of useless feature vectors in the current pipeline. + ds.roundinds{1}=ds.myiminds(rp(1:20)); + ds.roundinds{2}=ds.myiminds(rp(21:60)); + ds.roundinds{3}=ds.myiminds(rp(61:120)); + % evenly divide the rest of the images. Note that the classes aren't quite balanced, + % so the last round deals with extra/missing images. + for(i=4:8) + ds.roundinds{i}=[]; + for(j=1:numel(imgsbyclass)) + if(i==8) + ul=numel(imgsbyclass{j}); + else + ul=16; + end + ds.roundinds{i}=[ds.roundinds{i};imgsbyclass{j}(1:ul)]; + imgsbyclass{j}(1:ul)=[]; + end + ds.roundinds{i}=ds.roundinds{i}(randperm(numel(ds.roundinds{i}))); + end + if(~dsmapredisopen()) + dsmapredopen(njobs,targmachine,distprocconf); + disp('waiting 10 sec for mapreducers to start...') + pause(10) + end + + % Generate the whitening matrix based on 1500 randomly sampled images. + ds.aggcov.myiminds=ds.myiminds(rp(1:min(numel(rp),1500)));; + dssave; + dscd('ds.aggcov'); + dsrundistributed('aggregate_covariance',{'ds.myiminds'},struct('allatonce',1,'noloadresults',1,'maxperhost',max(1,floor(ds.mempermachine/4)))); + total=0; + clear featsum dotsum; + dsload('ds.n'); + for(i=1:numel(ds.n)) + if(isempty(ds.n{i})),continue;end + total=total+dsload(['ds.n{' num2str(i) '}'],'clear'); + if(~exist('dotsum','var')) + dotsum=dsload(['ds.dotsum{' num2str(i) '}'],'clear'); + else + dotsum=dotsum+dsload(['ds.dotsum{' num2str(i) '}'],'clear'); + end + if(~exist('featsum','var')) + featsum=dsload(['ds.featsum{' num2str(i) '}'],'clear'); + else + featsum=featsum+dsload(['ds.featsum{' num2str(i) '}'],'clear'); + end + if(any(isnan(dotsum(:)))||any(isnan(featsum(:)))) + keyboard; + end + disp(i); + end + covmat=(dotsum./total-(featsum'./total)*(featsum./total)); + covmat=covmat+.01*eye(size(covmat,1)); + dscd('.ds'); + ds.datamean=featsum./total; + disp('performing matrix square root...'); + ds.invcovmat=inv(covmat); + ds.whitenmat=sqrtm(ds.invcovmat); + clear featsum dotsum total; + clear covmat; + dsdelete('ds.aggcov'); +end +ds.finishedinit=true; +dssave; + +initmodes=false; +try,initmodes=dsload('.ds.initmodes');catch,end +if(~initmodes) + disp('sampling positive patches'); + dscd('.ds'); + setdataset(19); + dsdelete('ds.round*'); + dsdelete('ds.sample'); + dsdelete('ds.classperbatch'); + dsdelete('ds.detectors'); + dsdelete('ds.initFeats'); + dsdelete('ds.initPatches'); + dsdelete('ds.batchfordetr'); + dsdelete('ds.trainingrounds'); + extrparams=ds.conf.params; + initFeatsExtra=[]; + initPatsExtra=[]; + ds.sample=struct(); + ds.sample.initInds=ds.myiminds; + dsrundistributed('[ds.sample.patches{dsidx}, ds.sample.feats{dsidx}]=sampleRandomPatchesbb(ds.sample.initInds(dsidx),20);',{'ds.sample.initInds'},struct('maxperhost',max(1,floor(ds.mempermachine/4)))); + + % divide the sampled patches into batches (two images' worth of sampled + % patches per batch). The batches are purely for efficiency, specifically + % to limit the number of files that get written. Note that each + % batch needs to have a single class label. + batchsz=cellfun(@(x) size(x,1),ds.sample.patches)'; + ds.classperbatch=ds.imgs{ds.conf.currimset}.label(ds.sample.initInds); + [batchsz,cpb]=distributeby(batchsz,ds.classperbatch); + for(i=1:numel(batchsz)) + if(mod(numel(batchsz{i}),2)==0) + batchsz{i}=batchsz{i}(1:2:end)+batchsz{i}(2:2:end); + else + batchsz{i}=[batchsz{i}(1:2:end-1)+batchsz{i}(2:2:end-1); batchsz{i}(end)]; + end + cpb2{i,1}=repmat(cpb(i),numel(batchsz{i}),1); + end + batchsz=cell2mat(batchsz)'; + % store the class label for each batch. + ds.classperbatch=cell2mat(cpb2); + ds.classperbatch(batchsz==0)=[]; + batchsz(batchsz==0)=[]; + initPatches=[structcell2mat(ds.sample.patches(:))]; + initPatches=[initPatsExtra(:); initPatches]; + disp(['sampled ' num2str(size(initPatches,1)) ' patches']); + ds.initFeats=cell2mat(ds.sample.feats'); + ds.initFeats=[initFeatsExtra; ds.initFeats]; + + % convert the patch features for each batch into a detector structure. + ds.detectors=cellfun(@(x,y,z) struct('w',x,'b',y,'id',z),... + mat2cell([ds.initFeats],batchsz,size(ds.initFeats,2)),... + mat2cell(repmat(1,size(ds.initFeats,1),1),batchsz,1),... + mat2cell((1:size(ds.initFeats,1))',batchsz,1),'UniformOutput',false)'; + initPatches(1:sum(batchsz),6)=1:size(ds.initFeats,1); + ds.initPatches=initPatches; + % batchfordetr is an n-by-2 detector for the n detectors: column 1 is + % a detector id, column 2 is the index of the batch containing it. + marks=zeros(1:size(ds.initFeats,1),1); + marks(cumsum(batchsz)+1)=1; + marks(end)=[]; + marks(1)=1; + ds.batchfordetr=[(1:size(ds.initFeats,1))' cumsum(marks)]; + dssave(); + dsdelete('ds.sample') + + if(exist([ds.masterscriptname '_wait'],'file')) + keyboard; + end + + % initialize the set of detectors: this will only update the b value. + ds.initFeats=[]; + runset=ds.sys.distproc.availslaves; + dsrundistributed('autoclust_opt_init',{'ds.detectors'},struct('noloadresults',1,'maxperhost',max(1,floor(ds.mempermachine/4)),'forcerunset',runset)); +end +ds.initmodes=true; +dssave; + +trainingrounds=false; +try,trainingrounds=dsload('.ds.trainingrounds');catch,end +if(~trainingrounds) + dscd('.ds'); + setdataset(19); + dsdelete('ds.gendpoolfeats'); + roundid=1; + while(isfield(ds,['round' num2str(roundid)])) + roundid=roundid+1; + end + uniquelabels=1:numel(ds.conf.gbz{ds.conf.currimset}.labelnames); + ds.uniquelabels=uniquelabels(:)'; + while(roundid<=(numel(ds.roundinds))) + thisroundmapreduce=false; + try,thisroundmapreduce=dsload('.ds.round.thisroundmapreduce');catch,end + if(~thisroundmapreduce) + dsdelete('ds.round.myiminds'); + dsdelete('ds.round.roundid'); + dsdelete('ds.round.ndetrounds'); + dsdelete('ds.round.lambda'); + dsdelete('ds.round.beta'); + dsdelete('ds.round.newfeat'); + try + dsdelete(['ds.round.newdets{' num2str(roundid) '}{1:' num2str(dssavestatesize('ds.round.newdets',2)) '}']); + catch,end + dsdelete('ds.nextround'); + thistraininground=false; + try,trainingrounds=dsload('.ds.trainingrounds');catch,end + ds.round.myiminds=ds.roundinds{roundid}; % images to run training on + ds.round.ndetrounds=max(roundid-3,1); % the number of real detection rounds we've completed + ds.round.roundid=roundid; + if(~isfield(ds.round,'detrgroup')) + % make a fake clustering for the first few rounds, where every patch gets its own cluster. + ds.round.detrgroup=[ds.batchfordetr(:,1), (1:size(ds.batchfordetr,1))']; + end + if(roundid<=3) + mph=max(1,floor(ds.mempermachine/4)); + elseif(roundid<=4) + mph=max(1,floor(ds.mempermachine/2)); + else + mph=max(1,floor(ds.mempermachine/1.5)); + end + if(mod(roundid,1)==0) + % matlab's memory footprint grows even if it's not using the memory; restarting frees it. + dsmapredrestart; + end + if(roundid>=4) + % increase lambda (the bandwidth) proportional to the number of images we've run detection on. + ds.round.lambda=(roundid-3)*ds.conf.params.lambdainit; + else + % if we're initializing, beta determines how large rho is. Since we initialize on a small + % set, we want to make beta artificially small so that the detector will fire less + % when it starts doing detection for real. This reduces the number of useless patch features + % get generated. + ds.round.beta=ds.conf.params.beta/3; + end + %end + + % the main mapreduce that runs detectors on images and sends the detected feature vectors + % to reducers, each of which optimizes one batch of detectors. We use forcerunset to + % make sure each detector is always optimized on the same machine, since these machines + % cache features locally. + dsmapreduce(['detectors=dsload(''ds.round.detectors'')'';'... + 'imgs=dsload(''ds.imgs{ds.conf.currimset}'');'... + 'dsload(''ds.classperbatch'');'... + 'posbats=find(imgs.label(ds.round.myiminds(dsidx))==ds.classperbatch);'... % run all detectors whose class matches the class of this image + 'negbats=find(imgs.label(ds.round.myiminds(dsidx))~=ds.classperbatch);'... + 'rp=randperm(numel(negbats));'... + 'negbats=negbats(rp(1:min(numel(negbats),numel(posbats)*ds.conf.params.negsperpos)));'... % run a random subset of the detectors for other classes + '[dets,feats]=detectInIm(effstrcell2mat(detectors([posbats(:); negbats(:)])),'... + 'ds.round.myiminds(dsidx),'... + 'struct(''thresh'',-.02/dsload(''ds.round.ndetrounds''),'... + '''multperim'',dsload(''ds.round.roundid'')>2,'... + '''flipall'',true));' ... + 'ctridx=dsload(''ds.batchfordetr'');'... + 'dsload(''ds.round.detrgroup'');'... + '[~,detrgroupord]=ismember(ds.round.detrgroup(:,1),ctridx(:,1));'... + 'ovlweight=overlapReweightForImg(dets,[ctridx(:,1) ds.classperbatch(ctridx(:,2)) ds.round.detrgroup(detrgroupord,2)]);'...% ovlweights are the alpha_i,j from the paper + 'ds.round.newfeat(1:numel(unique(ctridx(:,2))),dsidx)={struct(''assignedidx'',[],''feat'',[])};'... + 'if(~isempty(dets)),'... + '[~,ctrpos]=ismember(dets(:,6),ctridx(:,1));'... + '[dets,feats,ovlweight,outpos]=distributeby(dets,single(feats),ovlweight,ctridx(ctrpos,2));'... + 'ds.round.newfeat(outpos,dsidx)=cellfun(@(x,y,z) struct(''assignedidx'',x,''feat'',y,''ovlweights'',z),dets,feats,ovlweight,''UniformOutput'',false);'... + 'end']... + ,'autoclust_optimize',{'ds.round.myiminds'},'ds.round.newfeat',struct('noloadresults',1,'forcerunset',runset),struct('maxperhost',mph),struct('maxperhost',max(1,floor(ds.mempermachine/4)))); + end + dsdelete('ds.round.component'); + dsdelete('ds.nextround.detrgroup'); + dsdelete('ds.nextround.reweights'); + dsdelete('ds.nextround.detsbyim'); + dsdelete('ds.nextround.prevweights'); + + % Now that we've trained the detectors, we need to re-compute the + % alpha values for each patch. + if(roundid>=4 && dsbool(ds.conf.params,'ovlweight')) + + % findOverlapping3 finds overlapping clusters--i.e. it performs + % the agglomerative element clustering step described in the paper. + dsrundistributed(['dsload(''ds.classperbatch'');dsload(''ds.batchfordetr'');'... + '[~,~,ds.round.component{dsidx}]='... + 'findOverlapping3(''ds.nextround.prevdets'',find(ds.classperbatch==ds.uniquelabels(dsidx)),'... + '[ds.batchfordetr(:,1),ds.classperbatch(ds.batchfordetr(:,2))],'... + 'struct(''ndetsforoverlap'',.5,''maxoverlaps'',3,''clusterer'',''agglomerative''))'],'ds.uniquelabels',struct('maxperhost',max(1,floor(ds.mempermachine/3)))); + + % Construct the detrgroup matrix, which is an two-column matrix, The left column + % is the detector id, the right column specifies which cluster that element + % belongs to. + component=[]; + toadd=0; + for(i=1:numel(ds.round.component)) + tmpcomponent=ds.round.component{i}; + tmpcomponent(:,2)=tmpcomponent(:,2)+toadd; + component=[component;tmpcomponent]; + toadd=max(component(:,2)); + end + [~,cord]=ismember(ds.batchfordetr(:,1),component(:,1)); + component=component(cord,:); + ds.nextround.detrgroup=component(:,1:2); + + % Collect the detections for each image and compute the alpha values. Note + % that if ds.conf.params.ovlweight is false or doesn't exist, then the + % clustering generated above is ignored and weights are simply assigned + % based on the number of detections for a given element in the image. + detsbyim=cell2mat(dsload('ds.nextround.prevdets','clear')'); + [detsbyim,~,ord]=distributeby(detsbyim,detsbyim(:,7)); + ds.nextround.detsbyim=detsbyim'; + clear detsbyim; + dsrundistributed(['ctridx=dsload(''ds.batchfordetr'');'... + 'dsload(''ds.classperbatch'');'... + 'dsload(''ds.nextround.detrgroup'');'... + '[~,detrgroupord]=ismember(ds.nextround.detrgroup(:,1),ctridx(:,1));'... + 'ds.nextround.reweights{dsidx}=overlapReweightForImg(ds.nextround.detsbyim{dsidx},[ctridx(:,1) ds.classperbatch(ctridx(:,2)) ds.nextround.detrgroup(detrgroupord,2)]);'],'ds.nextround.detsbyim'); + ds.nextround.detsbyim={}; + dsload('ds.nextround.prevdets'); + reweights=mat2cell(invertdistributeby(ds.nextround.reweights(:),ord),cellfun(@(x) size(x,1),ds.nextround.prevdets),1); + classfordetr(ds.batchfordetr(:,1))=ds.classperbatch(ds.batchfordetr(:,2)); + + % The alpha value for the patch that initialized each cluster doesn't + % follow the same rules as everything else, since we don't know when + % the image it was sampled from will actually have detectors run + % on it. Hence, we instead start with a value of 1 and decay + % exponentially toward the mean of the other weights. I don't believe + % this is important in the current implementation, but I haven't really + % tried other approaches to setting this weight. + for(i=1:numel(reweights)) + [currdets,currweights,detid,ord]=distributeby(ds.nextround.prevdets{i},reweights{i},ds.nextround.prevdets{i}(:,6)); + for(j=1:numel(currdets)) + ispos=find(ds.imgs{ds.conf.currimset}.label(currdets{j}(:,7))==c(classfordetr(currdets{j}(:,6)))); + if(ispos(1)~=1) + error('detections got out of order'); + end + if(numel(ispos)>1) + currweights{j}(1)=.5^(roundid-4)+(1-.5^(roundid-4))*mean(currweights{j}(ispos(2:end))); + end + end + reweights{i}=invertdistributeby(currweights,ord); + end + ds.nextround.prevweights=reweights(:)'; + end + dsdelete(['ds.progressdisplay' num2str(roundid)]); + + % Generate a visualization of the progress. + if(roundid>=4) + % select a subset of the batches to display, since there's too many + % detectors overall. + batchestodisp=1:40:numel(unique(ds.batchfordetr(:,2))); + batchestodisp=batchestodisp(1:min(10,numel(batchestodisp))); + dets=cell2mat(dsload(['ds.nextround.prevdets{' num2str(batchestodisp) '}'])'); + ovlweights=cell2mat(dsload(['ds.nextround.prevweights{' num2str(batchestodisp) '}'])'); + [dets,ovlweights]=distributeby(dets,ovlweights,dets(:,6)); + for(i=1:numel(dets)) + [~,ord]=sort(dets{i}(:,5),'descend'); + ovlweights{i}=ovlweights{i}(ord(1:min(20,size(dets{i},1)))); + dets{i}=dets{i}(ord(1:min(20,size(dets{i},1))),:); + end + dets=cell2mat(dets); + ovlweights=cell2mat(ovlweights); + dsup(['ds.progressdisplay' num2str(roundid) '.patchimg'],extractpatches(dets)); + conf=struct('dets',dets,'detrord',ds.batchfordetr(ismember(ds.batchfordetr(:,2),batchestodisp),1)); + if(dsbool(ds.conf.params,'ovlweight')) + conf.ovlweights=ovlweights; + end + mhprender('patchdisplay.mhp',['ds.progressdisplay' num2str(roundid) '.displayhtml'],conf); + fail=1;while(fail),try + dssave; + fail=0;catch ex,if(fail>5),rethrow(ex);end,fail=fail+1;end,end + dsclear(['ds.progressdisplay' num2str(roundid)]); + end + ds.round=struct(); + dsmv('ds.round',['ds.round' num2str(roundid)]); + if(roundid>4) + dsdelete(['ds.round' num2str(roundid)]); + end + dsmv('ds.nextround','ds.round');%keep the stub--it's how we measure progress! + roundid=roundid+1; + end + ds.trainingrounds=true; + dssave; +end + +gendpoolfeats=false; +try,gendpoolfeats=dsload('.ds.gendpoolfeats');catch,end +if(~gendpoolfeats) + dscd('.ds'); + dsdelete('ds.scores'); + dsdelete('ds.finids'); + dsdelete('ds.finmodel'); + dsdelete('ds.testpoolfeats'); + dsdelete('ds.poolfeats'); + dsdelete('ds.display_*'); + setdataset(19); + % The element training is done. Now we need to select the top elements + % for each class. Note that we perform the selection based on + % ds.newdets, which we obtained by firing the detectors on images they + % hadn't (yet) been trained on, so it's a roughly unbiased estimate + % of their held out accuracy, but the scores from different rounds + % of detections are not comparable. + uniquelabels=1:numel(ds.conf.gbz{ds.conf.currimset}.labelnames); + ds.uniquelabels=uniquelabels(:)'; + dsrundistributed(['dsload(''ds.batchfordetr'');dsload(''ds.classperbatch'');dsload(''ds.imgs'');dsload(''ds.roundinds'');'... + 'if(sum(ds.classperbatch==ds.uniquelabels(dsidx))==0),return;end,'... + 'dsload([''ds.newdets{'' num2str(numel(ds.roundinds)-2:numel(ds.roundinds)) ''}{'' num2str(find(ds.classperbatch(:)''==ds.uniquelabels(dsidx))) ''}'']);'... + 'detsbyround={};'... + 'for(i=numel(ds.roundinds)-1:numel(ds.roundinds)),'... + 'detsbyround{end+1,1}=structcell2mat(ds.newdets(i,:)'');'... + 'end,'... + '[ds.finids{dsidx},ds.scores{dsidx}]=greedySelectDetrsCoverage(detsbyround,ds.imgs{ds.conf.currimset}.label==ds.uniquelabels(dsidx),.7,200,struct(''useoverlap'',1));'... + 'ds.newdets={}'... + ],'ds.uniquelabels',struct('maxperhost',max(1,floor(ds.mempermachine/4)))); + + % Collect detections from the held out detectors and generate + % a display for each class. Note that this display isn't the same + % as the one on the webpage. This one displays held out detections + % using the greedy ranking, whereas the one on the webpage displays + % detections after training, only includes detections from the + % positive class, and ranks based on the SVM weight vectors that we haven't + % even generated yet. + heldoutdets={}; + for(i=numel(ds.roundinds)-2:numel(ds.roundinds)) + newdets=cell2mat(dsload(['ds.newdets{' num2str(i) '}{1:' num2str(dssavestatesize('ds.newdets',2)) '}'])'); + ds.newdets={}; + newdets(~ismember(newdets(:,6),cell2mat(ds.finids(:))),:)=[]; + heldoutdets{end+1,1}=newdets; + end + heldoutdets=cell2mat(heldoutdets(:)); + + [heldoutdets,detid]=distributeby(heldoutdets,heldoutdets(:,6)); + for(i=1:numel(ds.finids)) + heldoutdetsbyclass=heldoutdets(ismember(detid,ds.finids{i})); + ds.topk{i}=cell2mat(maxkall(heldoutdetsbyclass,5,20)); + end + ds.classes=ds.conf.gbz{ds.conf.currimset}.labelnames(:)'; + dsrundistributed(['if(isempty(ds.finids{dsidx})),return;end,'... + 'dsup([''ds.display_'' ds.classes{dsidx} ''.patchimg''],extractpatches(ds.topk{dsidx}));'... + 'conf=struct(''dets'',ds.topk{dsidx},'... + '''detrord'',ds.finids{dsidx},'... + '''message'',{cellfun(@(x) [''score:'' num2str(x)],num2cell(ds.scores{dsidx}),''UniformOutput'',false)});'... + 'mhprender(''patchdisplay.mhp'',[''ds.display_'' ds.classes{dsidx} ''.displayhtml''],conf);']... + ,{'ds.finids','ds.scores','ds.topk','ds.classes'},struct('noloadresults',true)); + + % save out the final selected element detectors for easy access. + model=effstrcell2mat(dsload('ds.round.detectors','clear')'); + model=selectdetrs2(model,cell2mat(ds.finids(:))); + ds.finmodel=model; + dssave; + + % generate a feature vector for each training image + dsrundistributed('dsload(''ds.finmodel'');ds.poolfeats{dsidx}=distGenPooledFeats(ds.finmodel,ds.myiminds(dsidx))',{'ds.myiminds'},struct('noloadresults',true)); + trainlab=ds.imgs{ds.conf.currimset}.label; + % switch to the testing set and + setdataset(20); + ds.mytestinds=1:numel(ds.imgs{ds.conf.currimset}.fullname); + dsrundistributed('dsload(''ds.finmodel'');ds.testpoolfeats{dsidx}=distGenPooledFeats(ds.finmodel,ds.mytestinds(dsidx))',{'ds.mytestinds'},struct('noloadresults',true)); +end +setdataset(19); +dscd('.ds'); + +% optionally load the ifv features generated by Junega, Vedaldi, Jawahar & +% Zisserman 2013's implementation of ifv. Note that that this takes about +% 5GB of extra memory, since we blindly load a 100,000-dimensional feature +% vector for every image. +if(0) + % Note also we're assuming here that the ifv IMDB order is the same as + % our order (since the ifv output doesn't actually include the IMDB :-/) + % This will be true if the order of directory listings is deterministic, + % since the IMDB gets their file listing in the same way we do. However, + % the madlab docs say that the order returned by dir actually depends on + % the OS. + ifvpermutation=1:10000; + ifvpath='/PATH/TO/IFV'; + fils=cleandir([ifvpath '/data/codes/FKtest_comb_train_chunk*']); + for(i=1:numel(fils)) + load([ifvpath '/data/codes/' fils(i).name]); + [~,idx]=ismember(index,ifvpermutation); + for(j=1:numel(idx)) + trainifvfeats(idx(j),:)=chunk(:,j)'; + end + disp(i) + end + ifvkern=trainifvfeats*trainifvfeats'; + + fils=cleandir([ifvpath '/data/codes/FKtest_comb_test_chunk*']); + for(i=1:numel(fils)) + load([ifvpath '/data/codes/' fils(i).name]); + [~,idx]=ismember(index,ifvpermutation); + for(j=1:numel(idx)) + testifvFeats(idx(j),:)=chunk(:,j)'; + end + disp(i) + end + ifvtestkern=trainifvfeats*testifvFeats'; + pfwt=.01; + thresh=.6; + ifvwt=18; +else + ifvkern=0; + ifvtestkern=0; + ifvkern=0; + ifvtestkern=0; + if(dsbool(ds.conf.params,'ovlweight')) + pfwt=.012; + thresh=.7; + ifvwt=0; + else + pfwt=.2; + thresh=.3; + ifvwt=0; + end +end + + + +trainpf2=cell2mat(dsload('ds.poolfeats','clear')'); +testpf2=cell2mat(dsload('ds.testpoolfeats','clear')'); +% the kernel function for the SVM. It's actually a linear kernel after +% a rectified-linear feature transform. +kernfun=@(x,y) ((max(x+thresh,0))*(max(y+thresh,0))'); +% the transformation that happens before the dot product in the kernel. +transfun=@(x) max(x+thresh,0); + +% Everything is much more efficient if we work directly with the kernel matrix. +pfkern=kernfun(trainpf2,trainpf2); +kernmat=ifvkern*ifvwt+pfkern*pfwt; +classes=unique(trainlab) + +% optionally you can open a matlabpool here, but if your'e using +% dswork your probably already have a lot of matlabs running on this machine. +% This honestly doesn't take that long, though. +% matlabpool open 12 +parfor(i=1:numel(classes)) + inds=find(trainlab==classes(i)); + label=-ones(size(kernmat,1),1); + label(inds)=1; + trainedsvm{i}=svmtrain(label,double([(1:numel(label))' kernmat]),'-s 0 -t 4 -c .1 -h 0'); + disp(i) +end + +% compute the scores for the testing images. +pftestkern=kernfun(trainpf2,testpf2); +traintestkern=ifvtestkern*ifvwt+pftestkern*pfwt; +testscr=[]; +for(i=1:numel(trainedsvm)) + testscr(i,:)=(trainedsvm{i}.sv_coef'*traintestkern(trainedsvm{i}.SVs,:)-trainedsvm{i}.rho)*trainedsvm{i}.Label(1); +end + +[~,label]=max(testscr,[],1); +truth=ds.imgs{ds.conf.currimset}.label'; +% here we print the final performance. +perf=sum(truth==label)./numel(label) +dsdelete('ds.svm'); +% Finally we generate heatmaps. +for(i=1:numel(classes)) + ds.svm{i}=getMinimalModel2(trainedsvm{i},transfun(trainpf2)); +end +allscores=testscr'; + +dsdelete('ds.dispdets'); +dsdelete('ds.easyimages'); +dsdelete('ds.errorimages'); +prevdets=cell2mat(dsload('ds.round.prevdets','clear')'); +prevdets=distributeby(prevdets,prevdets(:,6)); +ds.dispdets=cell2mat(maxkall(prevdets(:),5,5)); +clear prevdets; +ds.dispdets=ds.dispdets(ismember(ds.dispdets(:,6),ds.finmodel.id),:); +dssave; +% there are two versions of the heatmap: first, we generate heatmaps for +% the most confident correctly-classified images, and then for the most confident +% errors. Note that the code below generates heatmaps for the detections +% that *lowered* the SVM score as well as those that raised it. However, we +% omitted the ones that lowered the detection score from the website since +% they are harder to interpret. +for(disperror=[0 1]) + if(disperror) + dscd('.ds.errorimages'); + errorval=allscores(sub2ind(size(allscores),(1:size(allscores,1))',label(:)))-allscores(sub2ind(size(allscores),(1:size(allscores,1))',truth(:))); + ds.cls=[truth(:) label(:)] + else + dscd('.ds.easyimages'); + for(i=1:size(allscores,1)) + [scr,ds.cls(i,:)]=maxk(allscores(i,:),2); + errorval(i)=scr(1)-scr(2); + end + end + + [confidence,ds.todisp]=maxk(errorval,100); + ds.transfun=transfun; + setdataset(20); + + dsrundistributed(['detrs=dsload(''.ds.finmodel'');svm=dsload(''.ds.svm'');transfun=dsload(''ds.transfun'');'... + 'cls=dsload(''ds.cls'');dispdets=dsload(''.ds.dispdets'');dsload(''.ds.imgs'');'... + 'im=im2double(getimg(ds.todisp(dsidx)));'... + 'ds.origimg{dsidx}=im;'... + '[ds.leftposimg{dsidx},ds.leftnegimg{dsidx}]=dispClassifier('... + 'detrs,im,svm{cls(ds.todisp(dsidx),1)},transfun,dispdets,[''ds.display_left_'' num2str(dsidx)],19);'... + '[ds.rightposimg{dsidx},ds.rightnegimg{dsidx}]=dispClassifier('... + 'detrs,im,svm{cls(ds.todisp(dsidx),2)},transfun,dispdets,[''ds.display_right_'' num2str(dsidx)],19);'],'ds.todisp',struct('noloadresults',1)); + + mhprender('errdisp.mhp','ds.errhtml',struct('trueclasses',{ds.conf.gbz{ds.conf.currimset}.labelnames(ds.cls(ds.todisp,1))},'guessclasses',{ds.conf.gbz{ds.conf.currimset}.labelnames(ds.cls(ds.todisp,2))},'confidence',confidence,'iserror',disperror)); + dssave; +end + +dscd('.ds'); +perf=sum(truth==label)./numel(label) diff --git a/linkage2.m b/linkage2.m new file mode 100755 index 0000000..2bec2ca --- /dev/null +++ b/linkage2.m @@ -0,0 +1,456 @@ +function Z = linkage(Y, method, pdistArg, varargin) +%LINKAGE Create hierarchical cluster tree. +% Z = LINKAGE(X), where X is a matrix with two or more rows, creates a +% matrix Z defining a tree of hierarchical clusters of the rows of X. +% Clusters are based on the single linkage algorithm using Euclidean +% distances between the rows of X. Rows of X correspond to observations +% and columns to variables. +% +% Z = LINKAGE(X,METHOD) creates a hierarchical cluster tree using the +% the specified algorithm. The available methods are: +% +% 'single' --- nearest distance (default) +% 'complete' --- furthest distance +% 'average' --- unweighted average distance (UPGMA) (also known as +% group average) +% 'weighted' --- weighted average distance (WPGMA) +% 'centroid' --- unweighted center of mass distance (UPGMC) +% 'median' --- weighted center of mass distance (WPGMC) +% 'ward' --- inner squared distance (min variance algorithm) +% +% Z = LINKAGE(X,METHOD,METRIC) performs clustering based on the distance +% metric METRIC between the rows of X. METRIC can be any of the distance +% measures accepted by the PDIST function. The default is 'euclidean'. +% For more information on PDIST and available distances, type HELP PDIST. +% The 'centroid', 'median', and 'ward' methods are intended only for the +% Euclidean distance metric. +% +% Z = LINKAGE(X,METHOD,PDIST_INPUTS) enables you to pass extra input +% arguments to PDIST. PDIST_INPUTS should be a cell array containing +% input arguments to be passed to PDIST. +% +% Z = LINKAGE(X,METHOD,METRIC,'savememory',VALUE) specifies the value for +% the optional argument 'savememory'. VALUE is a string 'on' or 'off'. +% When VALUE is 'on', LINKAGE performs clustering without computing the +% distance matrix internally, so it usually requires less memory for data +% with large number of observations. VALUE 'on' requires both of the +% following two conditions to be satisfied: +% * METHOD is 'ward', 'centroid', or 'median'. +% * METRIC is 'euclidean'. +% When the above two conditions are satisfied, the default is 'on' when +% the number of columns in X is not greater than 20, or the machine +% doesn't have enough memory to save the distance matrix. +% +% Z = LINKAGE(Y) and Z = LINKAGE(Y,METHOD) are alternative syntaxes that +% accept a vector representation Y of a distance matrix. Y may be a +% distance matrix as computed by PDIST, or a more general dissimilarity +% matrix conforming to the output format of PDIST. +% +% The output matrix Z contains cluster information. Z has size m-1 by 3, +% where m is the number of observations in the original data. Column 1 +% and 2 of Z contain cluster indices linked in pairs to form a binary +% tree. The leaf nodes are numbered from 1 to m. They are the singleton +% clusters from which all higher clusters are built. Each newly-formed +% cluster, corresponding to Z(i,:), is assigned the index m+i, where m is +% the total number of initial leaves. Z(i,1:2) contains the indices of +% the two component clusters which form cluster m+i. There are m-1 higher +% clusters which correspond to the interior nodes of the output +% clustering tree. Z(i,3) contains the corresponding linkage distances +% between the two clusters which are merged in Z(i,:), e.g. if there are +% total of 30 initial nodes, and at step 12, cluster 5 and cluster 7 are +% combined and their distance at this time is 1.5, then row 12 of Z will +% be (5,7,1.5). The newly formed cluster will have an index 12+30=42. If +% cluster 42 shows up in a latter row, that means this newly formed +% cluster is being combined again into some bigger cluster. +% +% The 'centroid' and 'median' methods can produce a cluster tree that is +% not monotonic. This occurs when the distance from the union of two +% clusters, r and s, to a third cluster is less than the distance between +% r and s. In such a case, in a dendrogram drawn with the default +% orientation, the path from a leaf to the root node takes some downward +% steps. You may want to use another method when that happens. +% +% You can provide the output Z to other functions including DENDROGRAM to +% display the tree, CLUSTER to assign points to clusters, INCONSISTENT to +% compute inconsistent measures, and COPHENET to compute the cophenetic +% correlation coefficient. +% +% Examples: +% % Compute four clusters of the Fisher iris data using Ward linkage +% % and ignoring species information, and see how the cluster +% % assignments correspond to the three species. +% load fisheriris +% Z = linkage(meas,'ward','euclidean'); +% c = cluster(Z,'maxclust',4); +% crosstab(c,species) +% dendrogram(Z) +% +% % Create a hierarchical cluster tree for a data with 20000 +% % observations using Ward linkage. If you set the value of +% % 'savememory' to 'off', you may get an out-of-memory error if your +% % machine doesn't have enough memory to hold the distance matrix. +% X = rand(20000,3); +% Z = linkage(X,'ward','euclidean','savememory', 'on') +% +% See also PDIST, INCONSISTENT, COPHENET, DENDROGRAM, CLUSTER, +% CLUSTERDATA, KMEANS, SILHOUETTE. + +% Copyright 1993-2011 The MathWorks, Inc. +% $Revision: 1.1.8.10 $ + +% Check for size and type of input +[k, n] = size(Y); +m = ceil(sqrt(2*n)); % m = (1+sqrt(1+8*n))/2, but works for large n +if k>1 % data matrix input + if nargin<2 + method = 'single'; + end + if nargin<3 + pdistArg = 'euclidean'; + end + nargs = 3; +else % distance matrix input or bad input + nargs = nargin; +end + +if nargs>=3 % should be data input + if k == 1 && m*(m-1)/2 == n + warning(message('stats:linkage:CallingPDIST')); + end + if k < 2 + error(message('stats:linkage:TooFewDistances')); + end + passX = true; % the input is the data matrix. + + if ischar(pdistArg) + pdistArg = {pdistArg}; + elseif ~iscell(pdistArg) + error(message('stats:linkage:BadPdistArgs')); + end + +else % should be distance input + passX = false; + if n < 1 + error(message('stats:linkage:TooFewDistances')); + end + if k ~= 1 || m*(m-1)/2 ~= n + error(message('stats:linkage:BadSize')); + end + +end + +% Selects appropriate method +if nargs == 1 % set default switch to be 'si' + methodStr = 'single'; +else + % Preferred Synonym + methods = {'single', 'nearest'; ... + 'complete', 'farthest'; ... + 'average', 'upgma'; ... + 'weighted', 'wpgma'; ... + 'centroid', 'upgmc'; ... + 'median', 'wpgmc'; ... + 'ward''s', 'incremental'}; + [methodStr,s] = internal.stats.getParamVal(method,methods(:),'METHOD'); + + if s>size(methods,1) + methodStr = methods{s-size(methods,1), 1}; + end +end +method = methodStr(1:2); + +% The recursive distance updates for the three methods 'cetroid','median' +% and 'ward' only make sense when the distance matrix contains Euclidean +% distances (which will be squared) or the distance metric is Euclidean +nonEuc = false; +isCeMeWa = false; +if any(strcmp(method,{'ce' 'me' 'wa'})) + isCeMeWa = true; + if ~passX % The distance matrix is passed + if (any(~isfinite(Y)) || ~iseuclidean(Y)) + warning(message('stats:linkage:NotEuclideanMatrix', methodStr)); + end + else % the data matrix is passed + + if (~isempty(pdistArg)) + if (~ischar (pdistArg{1})) + nonEuc = true; + else + % method may be a known name or the name of a user function + distMethods = {'euclidean'; 'minkowski';'mahalanobis'}; + i = find(strncmpi(pdistArg{1}, distMethods, length(pdistArg{1}))); + if length(i) > 1 + error(message('stats:linkage:BadDistance', pdistArg{ 1 })); + elseif (isempty(i) || i == 3 || ... + (i == 2 && length(pdistArg) ~= 1 && isscalar(pdistArg{2}) && pdistArg{2} ~= 2) ) + nonEuc = true; + end + end + + end + if (nonEuc) + warning(message('stats:linkage:NotEuclideanMethod', methodStr)); + end + end +end + +%Parse the memory efficient option 'Savememory' +pnames ={'savememory'}; +dflts = {[]}; + +[memEff] = internal.stats.parseArgs(pnames, dflts, varargin{:}); + +if ~isempty(memEff) + memEff = internal.stats.getParamVal(memEff,{'on'; 'off'},'SaveMemory'); + memEff = strcmp(memEff,'on'); +end + +% The memeory efficient option can be valid only when the following three +% conditions are satisfied: +% * The first input argument is data matrix +% * The linkage is either 'centroid, 'median' or 'ward'. +% * The distance metric is euclidean +if passX && isCeMeWa && ~nonEuc + if isempty(memEff) %Set the default choice for memEff + if n<=20 + memEff = true; + else + memEff = false; + end + + try + tempDistMat=zeros(1,k*(k-1)/2,class(Y)); + catch ME + if (strcmp(ME.identifier,'MATLAB:nomem') || ... + strcmp(ME.identifier,'MATLAB:pmaxsize')); + memEff = true; + else % Otherwise, just let the error propagate. + throw(ME); + end + end + clear tempDistMat; + end +else + if ~isempty(memEff) && memEff + warning(message('stats:linkage:IgnoringMemEff')); + end + memEff = false; +end + +if exist('linkagemex','file')==3 + % call mex file + if passX + if (memEff) + %call the memory efficient algorithm + Z = linkagemex(Y',method,{'euc'},memEff); %note that Y is transposed here + else + Z = linkagemex(Y,method,pdistArg, memEff); + end + else + Z = linkagemex(Y,method); + end + + if any(strcmp(method,{'av' 'wa' 'co' 'we'})) + % if 'ave','ward', 'com' or 'weighted average' is used, we need to + % re-arrange the rows in Z matrix by sorting the third rows of Z matrix. + Z = rearrange(Z); + end +else + warning(message('stats:linkage:NoMexFilePresent')); + if passX + Y = pdist(Y,pdistArg{:}); + end + % optional old linkage function (use if mex file is not present) + Z = linkageold(Y,method); +end + +% Check if the tree is monotonic and warn if not. Z is built so that the rows +% are in non-decreasing height order, thus we can look at the heights in order +% to determine monotonicity, rather than having to explicitly compare each parent +% with its children. +zdiff = diff(Z(:,3)); +if any(zdiff<0) + % With distances that are computed recursively (average, weighted, median, + % centroid, ward's), errors can accumulate. Two nodes that are really + % at the same height in the tree may have had their heights calculated in + % different ways, making them differ by +/- small amounts. Make sure that + % doesn't produce false non-monotonicity warnings. + negLocs = find(zdiff<0); + if any(abs(zdiff(negLocs)) > eps(Z(negLocs,3))) % eps(the larger of the two values) + warning(message('stats:linkage:NonMonotonicTree', methodStr)); + end +end + +% %re-arrange the Z matrix by sorting the third rows of Z matrix. +% function Z2 = rearrange(Z) +% %Get indices to sort Z +% [~,idx] = sort(Z(:,3)); +% +% % Get indices in the reverse direction +% revidx(idx) = 1:length(idx); +% +% % Get vector of desired cluster numbers for Z2 +% nrows=size(Z,1); +% v2 = [1:nrows+1,nrows+1+revidx]; +% +% % Put Z2 into sorted order, without renumbering the clusters +% Z0 = Z(idx,:); +% Z2 = Z0; +% % Renumber the clusters +% Z2(:,1:2) = v2(Z2(:,1:2)); +% +% % Make sure the lower-numbered cluster is in column 1 +% t = Z2(:,1)>Z2(:,2); +% Z2(t,1:2) = Z2(t,[2 1]); + + +%%%%%%%%%%%%%%%%%%%%%%%%% OLD LINKAGE FUNCTION %%%%%%%%%%%%%%%%%%%%%%%%%%%% + +function Z = linkageold(Y, method) +%LINKAGEOLD Create hierarchical cluster tree using only MATLAB code. + +n = size(Y,2); +m = ceil(sqrt(2*n)); % (1+sqrt(1+8*n))/2, but works for large n +if isa(Y,'single') + Z = zeros(m-1,3,'single'); % allocate the output matrix. +else + Z = zeros(m-1,3); % allocate the output matrix. +end + +% during updating clusters, cluster index is constantly changing, R is +% a index vector mapping the original index to the current (row, column) +% index in Y. N denotes how many points are contained in each cluster. +N = zeros(1,2*m-1); +N(1:m) = 1; +n = m; % since m is changing, we need to save m in n. +R = 1:n; + +% Square the distances so updates are easier. The cluster heights will be +% square-rooted back to the original scale after everything is done. +if any(strcmp(method,{'ce' 'me' 'wa'})) + Y = Y .* Y; +end + +for s = 1:(n-1) + if strcmp(method,'av') + p = (m-1):-1:2; + I = zeros(m*(m-1)/2,1); + I(cumsum([1 p])) = 1; + I = cumsum(I); + J = ones(m*(m-1)/2,1); + J(cumsum(p)+1) = 2-p; + J(1)=2; + J = cumsum(J); + W = N(R(I)).*N(R(J)); + [v, k] = min(Y./W); + else + [v, k] = min(Y); + end + + i = floor(m+1/2-sqrt(m^2-m+1/4-2*(k-1))); + j = k - (i-1)*(m-i/2)+i; + + Z(s,:) = [R(i) R(j) v]; % update one more row to the output matrix A + + % Update Y. In order to vectorize the computation, we need to compute + % all the indices corresponding to cluster i and j in Y, denoted by I + % and J. + I1 = 1:(i-1); I2 = (i+1):(j-1); I3 = (j+1):m; % these are temp variables + U = [I1 I2 I3]; + I = [I1.*(m-(I1+1)/2)-m+i i*(m-(i+1)/2)-m+I2 i*(m-(i+1)/2)-m+I3]; + J = [I1.*(m-(I1+1)/2)-m+j I2.*(m-(I2+1)/2)-m+j j*(m-(j+1)/2)-m+I3]; + + switch method + case 'si' % single linkage + Y(I) = min(Y(I),Y(J)); + case 'co' % complete linkage + Y(I) = max(Y(I),Y(J)); + case 'av' % average linkage + Y(I) = Y(I) + Y(J); + case 'we' % weighted average linkage + Y(I) = (Y(I) + Y(J))/2; + case 'ce' % centroid linkage + K = N(R(i))+N(R(j)); + Y(I) = (N(R(i)).*Y(I)+N(R(j)).*Y(J)-(N(R(i)).*N(R(j))*v)./K)./K; + case 'me' % median linkage + Y(I) = (Y(I) + Y(J))/2 - v /4; + case 'wa' % Ward's linkage + Y(I) = ((N(R(U))+N(R(i))).*Y(I) + (N(R(U))+N(R(j))).*Y(J) - ... + N(R(U))*v)./(N(R(i))+N(R(j))+N(R(U))); + end + J = [J i*(m-(i+1)/2)-m+j]; + Y(J) = []; % no need for the cluster information about j. + + % update m, N, R + m = m-1; + N(n+s) = N(R(i)) + N(R(j)); + R(i) = n+s; + R(j:(n-1))=R((j+1):n); +end + +if any(strcmp(method,{'ce' 'me' 'wa'})) + Z(:,3) = sqrt(Z(:,3)); +end + +Z(:,[1 2])=sort(Z(:,[1 2]),2); + + + +function Z = rearrange(Z) + %Get indices to sort Z + [~,idx] = sort(Z(:,3)); + + % Get indices in the reverse direction + revidx(idx) = 1:length(idx); + + % Get vector of desired cluster numbers for Z2 + nrows=size(Z,1); + v2 = [1:nrows+1,nrows+1+revidx]; + + % Put Z2 into sorted order, without renumbering the clusters + Z = Z(idx,:); + + % Renumber the clusters + Z(:,1:2) = v2(Z(:,1:2)); + + % Make sure the lower-numbered cluster is in column 1 + t = Z(:,1)>Z(:,2); + Z(t,1:2) = Z(t,[2 1]); + + % is Z in chronological order? + if any((Z(:,2) >= (1:nrows)'+nrows+1)) + Z = fixnonchronologicalZ(Z); + t = Z(:,1)>Z(:,2); + Z(t,1:2) = Z(t,[2 1]); + end + +function Z = fixnonchronologicalZ(Z) +% Fixes a binary tree that has branches defined in a non-chronological order + +nl = size(Z,1)+1; % number of leaves +nb = size(Z,1); % number of branches +last = nl; % last defined node, we start only with leaves +for i = 1:nb + tn = nl+i; %this node + if any(Z(i,[1,2])>last) + % this node (tn) uses nodes not defined yet, find a node (h) that + % does use nodes already defined so we can interchange them: + h = find(all(Z(i+1:end,[1 2])<=last,2),1)+i; + % change nodes: + Z([i h],:) = Z([h i],:); + nn = nl+h; % new node + % change references to such nodes + %Z([find(Z(1:2*nb) == nn,1) find(Z(1:2*nb) == tn,1)]) = [tn nn]; + %try + tonn=find(Z(1:2*nb) == tn,1); + Z([find(Z(1:2*nb) == nn,1)]) = [tn]; + %catch,keyboard;end + if(~isempty(tonn)) + Z(tonn) = [nn]; + end + end + last = tn; +end + + + diff --git a/linkagemex.mexa64 b/linkagemex.mexa64 new file mode 100755 index 0000000000000000000000000000000000000000..4275b8bb2083c10ad2e3562f7ab1ae75766e2374 GIT binary patch literal 48472 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 literal 0 HcmV?d00001 diff --git a/mat2det.m b/mat2det.m new file mode 100755 index 0000000..a8432e3 --- /dev/null +++ b/mat2det.m @@ -0,0 +1,16 @@ +function res=mat2det(dets); + res.decision=dets(:,5); + res.pos.x1=dets(:,1); + res.pos.x2=dets(:,3); + res.pos.y1=dets(:,2); + res.pos.y2=dets(:,4); + res.imidx=dets(:,7); + res.detector=dets(:,6); + if(size(dets,2)>=8) + res.flip=dets(:,8); + end + if(size(dets,2)>=9) + res.boxid=dets(:,9); + end + res=effstr2str(res); +end diff --git a/myNms.m b/myNms.m new file mode 100755 index 0000000..5bbf86a --- /dev/null +++ b/myNms.m @@ -0,0 +1,56 @@ +function [pick,suppressclust] = myNms(boxes, overlap) +% top = nms_fast(boxes, overlap) +% Non-maximum suppression. (FAST VERSION) +% Greedily select high-scoring detections and skip detections +% that are significantly covered by a previously selected +% detection. +% NOTE: This is adapted from Pedro Felzenszwalb's version (nms.m), +% but an inner loop has been eliminated to significantly speed it +% up in the case of a large number of boxes +% Tomasz Maliseiwicz (tomasz@cmu.edu) + +if isempty(boxes) + pick = []; + return; +end + +x1 = boxes(:,1); +y1 = boxes(:,2); +x2 = boxes(:,3); +y2 = boxes(:,4); +s = boxes(:,end); + +area = (x2-x1+1) .* (y2-y1+1); +[~, I] = sort(s); +if(nargout>=2) + suppressclust=zeros(size(I)); +end + +pick = s*0; +counter = 1; +while ~isempty(I) + + last = length(I); + i = I(last); + pick(counter) = i; + counter = counter + 1; + + xx1 = max(x1(i), x1(I(1:last-1))); + yy1 = max(y1(i), y1(I(1:last-1))); + xx2 = min(x2(i), x2(I(1:last-1))); + yy2 = min(y2(i), y2(I(1:last-1))); + + w = max(0.0, xx2-xx1+1); + h = max(0.0, yy2-yy1+1); + + o = w.*h ./ area(I(1:last-1)); + f=[last; find(o>overlap)]; + if(nargout>=2) + suppressclust(I(f))=counter-1; + end + + I(f) = []; +end + +pick = pick(1:(counter-1)); +% top = boxes(pick,:); diff --git a/myNmsClass.m b/myNmsClass.m new file mode 100755 index 0000000..81506fa --- /dev/null +++ b/myNmsClass.m @@ -0,0 +1,7 @@ +function pick=myNmsClass(dets,overlap) + [dets,~,ord]=distributeby(dets(:,1:5),dets(:,6)); + for(i=1:numel(dets)) + pick{i,1}=ord{i}(myNms(dets{i},overlap)); + end + pick=cell2mat(pick); +end diff --git a/myaddpath.m b/myaddpath.m new file mode 100755 index 0000000..e33b04d --- /dev/null +++ b/myaddpath.m @@ -0,0 +1,5 @@ +addpath('dswork'); +addpath('clipper'); +addpath('hog'); +addpath('util'); +addpath('../libsvm-mat-3.0-1'); diff --git a/overlapReweight.m b/overlapReweight.m new file mode 100755 index 0000000..8774621 --- /dev/null +++ b/overlapReweight.m @@ -0,0 +1,133 @@ +% Re-weight the detections specified by pos such that detections +% overlapping with many other detections receive low weight, and +% detections overlapping with few others receive high weight. +% The output weight for each patch (res2) is computed by (1) breaking +% the image into scale-space voxels, (2) assigning 'ownership' of each +% voxel like in the E-M algorithm, proportional to the weight of every +% patch covering the voxel (in the comments below, we call the +% un-normalized ownership value for a patch the patch's 'claim' to a voxel), +% and (3) summing the ownership values across +% each patch. +function resw=overlapReweight(pos,origw,gridsize,minsize,conf) + try + if(size(pos,1)==0) + resw=[]; + return; + end + pos=(pos-.5)/gridsize+1; + minsize=prod(minsize/gridsize); + imsize=ceil([max(pos(:,4)),max(pos(:,3))]); + % group the detections such that detections with the same label do not + % compete with each other. Hence, in practice ownership for each + % voxel is distributed among different detector groups rather than + % among different detectors. + if(isfield(conf,'groups')) + [pos,origw,ord]=distributeby(pos,origw,(1:numel(origw))',conf.groups); + ord=cell2mat(ord); + else + [pos,origw]=distributeby(pos,origw,(1:numel(origw))'); + ord=(1:numel(origw))'; + end + imsize + dim=[imsize ceil(log2(min(imsize))*5)]; + % field computes the sum of the weights the patches claiming each voxel. + field=zeros(dim); + field2=field; + linidx=1; + addvec={}; + for(j=1:numel(pos)) + allinds={}; + for(i=1:size(pos{j},1)) + p=pos{j}(i,:); + patsize=(p(4)-p(2)+1)*(p(3)-p(1)+1); + lvl=log2(sqrt(patsize/minsize))+1; + p=[p([2 1]) lvl p([4 3]) lvl+5]; + f=floor(p); + b=p-[f(1) f(2) f(3) f(1) f(2) f(3)]; + toadd=getaddvec(b).*origw{j}(i); + if(size(pos{j},1)>1) + % field2 is a temporary set of voxels used to compute one particular group's + % claim to each voxel. + field2(f(1):f(1)+size(toadd,1)-1,f(2):f(2)+size(toadd,2)-1,f(3):f(3)+size(toadd,3)-1)=max(field2(f(1):f(1)+size(toadd,1)-1,f(2):f(2)+size(toadd,2)-1,f(3):f(3)+size(toadd,3)-1),toadd); + allinds{i}=[f(1),f(1)+size(toadd,1)-1,f(2),f(2)+size(toadd,2)-1,f(3), f(3)+size(toadd,3)-1];%inds; + else + try + field(f(1):f(1)+size(toadd,1)-1,f(2):f(2)+size(toadd,2)-1,f(3):f(3)+size(toadd,3)-1)=field(f(1):f(1)+size(toadd,1)-1,f(2):f(2)+size(toadd,2)-1,f(3):f(3)+size(toadd,3)-1)+toadd; + catch ex,dsprinterr;end + linidx=linidx+1; + end + end + if(size(pos{j},1)>1) + field=field+field2; + for(i=1:size(pos{j},1)) + f=allinds{i}; + % For each patch, keep track of the group's claim within the area of that patch. + addvec{linidx}=c(field2(f(1):f(2),f(3):f(4),f(5):f(6)))./max(origw{j}(i),eps);%(fieldtmp(allinds{i})./max(origw{j}(i),eps)); + linidx=linidx+1; + end + field2(:)=0; + end + end + % compute the inverse of the claims, since we compute the weight of a given patch as the sum over voxels + % of a patch's claim to that voxel divided by the total claim to that voxel. + field=1./max(field,eps);%bsxfun(@max,field,reshape(1/(prod(minsize)*2.^(0:size(field,3)-1),1,1,[]))); + + pos=cell2mat(pos); + origw=cell2mat(origw); + resw=zeros(size(origw)); + % for each patch, re-compute its claim to each patch and multiply by + % the values in field. + for(i=1:size(pos,1)) + p=pos(i,:); + patsize=(p(4)-p(2)+1)*(p(3)-p(1)+1); + lvl=log2(sqrt(patsize/minsize))+1; + p=[p([2 1]) lvl p([4 3]) lvl+5]; + f=floor(p); + b=p-[f(1) f(2) f(3) f(1) f(2) f(3)]; + toadd=getaddvec(b); + sta=sum(toadd(:)); + if(numel(addvec)>=i && ~isempty(addvec{i})) + toadd=reshape(addvec{i},size(toadd)); + end + if(sta>0) + toadd=toadd./sta; + end + try + resw(i)=resw(i)+(reshape(field(f(1):f(1)+size(toadd,1)-1,f(2):f(2)+size(toadd,2)-1,f(3):f(3)+size(toadd,3)-1),1,[])*toadd(:))*origw(i); + catch ex,dsprinterr;end + %end + end + if(any(resw>1.000001)),try,error('weightincrease');catch ex, dsprinterr;end,end + if(any(isnan(resw))),try,error('nan');catch ex, dsprinterr;end,end + resw=(min(resw,1).*origw);% + resw(ord)=resw; + if(any(resw<0)),try,error('less than zero');catch ex, dsprinterr;end,end + catch ex,dsprinterr;end +end +%get the list of scale-space voxels for a particular detection, after it's been +%re-scaled into voxel coordinates. +function toadd=getaddvec(b) + toadd=zeros(ceil(b(3:4))); + dim=ceil(b(4:6)); + permvec=[]; + for(i=1:3) + interpv=ones(dim(i),1); + %interpv(1)=1-b(i); + %interpv(end)=b(i+3)-numel(interpv)+1; + permvec=[i permvec]; + if(i>1) + interpv=permute(interpv,permvec); + end + mult{i}=interpv; + end + toadd=bsxfun(@times,bsxfun(@times,mult{1},mult{3}),mult{2}); + %toadd(2:end-1,2:end-1)=1; + %toadd(1,2:end-1)=1-b(1); + %toadd(end,2:end-1)=b(3)-size(toadd,2)+1; + %toadd(2:end-1,1)=1-b(2); + %toadd(2:end-1,end)=b(4)-size(toadd,2)+1; + %toadd(1,1)=toadd(1,2)*toadd(2,1); + %toadd(1,end)=toadd(2,end)*toadd(1,end-1); + %toadd(end,1)=toadd(end,2)*toadd(end-1,1); + %toadd(end,end)=toadd(end-1,end)*toadd(end,end-1); +end diff --git a/overlapReweightForImg.m b/overlapReweightForImg.m new file mode 100755 index 0000000..ff83c66 --- /dev/null +++ b/overlapReweightForImg.m @@ -0,0 +1,45 @@ +% compute the alpha values for a single image. dets is just a list +% of detections in standard form [x1 y1 x2 y2 score detrid imageid flip] +function reweights=overlapReweightForImg(dets,detridclassgroup) +global ds; +[~,idx]=ismember(dets(:,6),detridclassgroup(:,1)); +imgs=dsload('ds.imgs{ds.conf.currimset}'); +toovlweight1=detridclassgroup(idx,2)==imgs.label(dets(:,7)); +if(~dsbool(ds.conf.params,'ovlweight')) + reweights=ones(size(dets(:,1))); +else + toovlweightf=find(toovlweight1); + % break the detections up into flipped and un-flipped. + if(size(dets,2)>=8) + toovlweightall{1}=toovlweightf(dets(toovlweightf,8)==0); + toovlweightall{2}=toovlweightf(dets(toovlweightf,8)==1); + else + toovlweightall={toovlweightf}; + end + reweights=ones(size(idx)); + + for(i=1:numel(toovlweightall)) + toovlweight=toovlweightall{i}; + if(numel(toovlweight)>0) + conf.groups=detridclassgroup(idx,3); + conf.groups=conf.groups(toovlweight); + % we set the initial weights of each detection to the detection score; + % these weights in effect determine how strongly each detection "competes" + % for pixels. + % Detections with a negative score get a small epsilon value, + % because we're computing the re-weigting based on the inverses of + % these scores. Hence negative values make no sense. + % The output of overlapReweight is scaled by the input weight (overlapReqeight RE-weights + % it doesn't know that we made up the input weights). + reweights(toovlweight)=overlapReweight(dets(toovlweight,1:4),max(0,dets(toovlweight,5))+.000001,ds.conf.params.sBins,ds.conf.params.patchCanonicalSize,conf)./(max(0,dets(toovlweight,5))+.000001); + if(any(reweights>1e10)),error('fail');end + end + end +end +% finally, scale the weights by the number of detections for each +% detector. +udetr=unique(idx); +idx(~toovlweight1)=0; +for(i=1:numel(udetr)) + reweights(idx==udetr(i))=reweights(idx==udetr(i))./sum(idx==udetr(i)); +end diff --git a/patch2feat.m b/patch2feat.m new file mode 100755 index 0000000..bf1b196 --- /dev/null +++ b/patch2feat.m @@ -0,0 +1,18 @@ +function res=patch2feat(trpatches,conf) + global ds; + extrparams=ds.conf.params; + extrparams.imageCanonicalSize=[max(min(size(trpatches{1}(:,:,1))),min(extrparams.patchCanonicalSize))]; + extrparams.basePatchSize=size(trpatches{1}(:,:,1)); + tmp=constructFeaturePyramidForImg(im2double(trpatches{1}),extrparams,1); + %res(1,:)=tmp.features{1}(:)'; + pcs=round(ds.conf.params.patchCanonicalSize/ds.conf.params.sBins)-2; + [res(1,:), levels, indexes,gradsums] = unentanglePyramid(tmp, ... + pcs,conf); + res(2:numel(trpatches),:)=0;%=zeros(numel(trpatches),numel(tmp.features{1})); + for(i=2:numel(trpatches)) + tmp=constructFeaturePyramidForImg(im2double(trpatches{i}),extrparams,1); + %res(i,:)=tmp.features{1}(:)'; + [res(i,:), levels, indexes,gradsums] = unentanglePyramid(tmp, ... + pcs,conf); + end +end diff --git a/patchdisplay.m b/patchdisplay.m new file mode 100755 index 0000000..e47b88f --- /dev/null +++ b/patchdisplay.m @@ -0,0 +1,82 @@ +ds_html{end+1}=sprintf('\n'); +ds_html{end+1}=sprintf(''); +if(isfield(argv,'mainimgs')) +ds_html{end+1}=sprintf(' \n'); +ds_html{end+1}=sprintf(' '); +for(i=1:numel(argv.mainimgs)) +ds_html{end+1}=sprintf(' \n'); +ds_html{end+1}=sprintf(' '); +end +ds_html{end+1}=sprintf('
    \n'); +ds_html{end+1}=sprintf(''); +end +ds_html{end+1}=sprintf('\n'); +ds_html{end+1}=sprintf(''); + +if(~isfield(argv,'ovlweights')) + argv.ovlweights=zeros(size(argv.dets(:,[]))); +end +[dets,posinpatchimg,ovlweights,detid]=distributeby(argv.dets,(1:size(argv.dets,1))',argv.ovlweights,argv.dets(:,6)); +if(isfield(argv,'detrord')) + [~,idxord]=ismember(argv.detrord,detid); +else + idxord=1:numel(detid); + argv.detrord=detid; +end +if(~isfield(argv,'message')) + argv.message=repmat({''},numel(argv.detrord),1); +end +gbz=dsload('ds.conf.gbz{ds.conf.currimset}'); +imgs=dsload('.ds.imgs{ds.conf.currimset}'); +if(~isfield(gbz,'imgsurl')) + gbz.imgsurl=''; +end +for(i=1:numel(idxord)) +ds_html{end+1}=sprintf(' \n'); +ds_html{end+1}=sprintf(' '); +if(idxord(i) ~= 0) + curdets=dets{idxord(i)}; + curpos=posinpatchimg{idxord(i)}; + curwt=ovlweights{idxord(i)}; + [~,ord]=sort(curdets(:,5),'descend'); + for(j=1:size(curdets,1)) +ds_html{end+1}=sprintf(' \n'); +ds_html{end+1}=sprintf(' '); +end + end +ds_html{end+1}=sprintf(' \n'); +ds_html{end+1}=sprintf(''); +end +ds_html{end+1}=sprintf(' \n'); +ds_html{end+1}=sprintf('
    detector no. '); +ds_html{end+1}=num2str([argv.detrord(i)]); +ds_html{end+1}=sprintf('
    '); +ds_html{end+1}=num2str([argv.message{i}]); +ds_html{end+1}=sprintf('
    \n'); +ds_html{end+1}=sprintf(' \n'); +ds_html{end+1}=sprintf(' \n'); +ds_html{end+1}=sprintf(' \n'); +ds_html{end+1}=sprintf('
    \n'); +ds_html{end+1}=sprintf('\n'); +ds_reshtml=cell2mat(ds_html); +ds_html=[]; diff --git a/patchdisplay.mhp b/patchdisplay.mhp new file mode 100755 index 0000000..3312f25 --- /dev/null +++ b/patchdisplay.mhp @@ -0,0 +1,48 @@ + +<%if(isfield(argv,'mainimgs'))%> + + <%for(i=1:numel(argv.mainimgs))%> + + <%end%> +
    +<%end%> + +<% +if(~isfield(argv,'ovlweights')) + argv.ovlweights=zeros(size(argv.dets(:,[]))); +end +[dets,posinpatchimg,ovlweights,detid]=distributeby(argv.dets,(1:size(argv.dets,1))',argv.ovlweights,argv.dets(:,6)); +if(isfield(argv,'detrord')) + [~,idxord]=ismember(argv.detrord,detid); +else + idxord=1:numel(detid); + argv.detrord=detid; +end +if(~isfield(argv,'message')) + argv.message=repmat({''},numel(argv.detrord),1); +end +gbz=dsload('ds.conf.gbz{ds.conf.currimset}'); +imgs=dsload('.ds.imgs{ds.conf.currimset}'); +if(~isfield(gbz,'imgsurl')) + gbz.imgsurl=''; +end +for(i=1:numel(idxord)) %> + + <%if(idxord(i) ~= 0) + curdets=dets{idxord(i)}; + curpos=posinpatchimg{idxord(i)}; + curwt=ovlweights{idxord(i)}; + [~,ord]=sort(curdets(:,5),'descend'); + for(j=1:size(curdets,1)) %> + + <%end + end%> + +<%end%> + +
    detector no. <%=argv.detrord(i)%>
    <%=argv.message{i}%>
    + + + +
    + diff --git a/preprocessindoor67.m b/preprocessindoor67.m new file mode 100755 index 0000000..7b26e8f --- /dev/null +++ b/preprocessindoor67.m @@ -0,0 +1,67 @@ +% Author: Carl Doersch (cdoersch at cs dot cmu dot edu) +% +% Generate an imgs structure and save it to gbz.datasetname. +% It reads all directories contained in gbz.cutoutdir and +% collects all of the images. +function preprocessindoor67(cutoutdir,datasetfiles) +for(imset=1:2) + imdirs=dir(cutoutdir); + [~,inds]=sort({imdirs.name}) + imdirs=imdirs(inds); + imgs=[]; + imdata=[]; + smdata=[]; + if(imset==1) + mitimgs=textread('TrainImages.txt','%s','delimiter','\n'); + else + mitimgs=textread('TestImages.txt','%s','delimiter','\n'); + end + for(fn=1:numel(imdirs)) + if(strcmp(imdirs(fn).name,'.')||strcmp(imdirs(fn).name,'..')) + continue; + end + imdirs(fn).name + imgs1=cleandir([cutoutdir '/' imdirs(fn).name]); + [~,inds]=sort({imgs1.name}); + imgs1=imgs1(inds); + rand('seed',fn); + s=randperm(numel(imgs1)); + imgs2={}; + for(m=1:numel(imgs1)) + if(~ismember(lower([imdirs(fn).name filesep imgs1(m).name]),lower(mitimgs))) + continue; + end + [~,pos]=ismember(lower([imdirs(fn).name filesep imgs1(m).name]),lower(mitimgs)); + mitimgs(pos)=[]; + if(dshassuffix(imgs1(m).name,'_gif.jpg')) + fnm=[cutoutdir '/' imdirs(fn).name filesep imgs1(m).name]; + [im,map]=imread(fnm); + if(size(map,2)>0) + for(i=1:size(map,2)) + channel=map(:,i); + data{i}=channel(im+1); + end + im=cat(3,data{:}); + end + clear data + fnm(end-6:end)='jpg.jpg'; + imgs1(m).name(end-6:end)='jpg.jpg'; + imwrite(im,fnm,'Quality',85); + imgs1(m)=dir(fnm); + end + + imgs2{end+1}.fullname=[imdirs(fn).name filesep imgs1(m).name]; + imtmp=imread([cutoutdir imgs2{end}.fullname]); + sz=size(imtmp); + imgs2{end}.imsize=sz(1:2); + imgs2{end}.label=imdirs(fn).name; + end + imgs=[imgs;cell2mat(imgs2')]; + %imdata=[imdata; imdata1]; + %smdata=[smdata;smdata1]; + end + imgs=str2effstr(imgs); + labelnames=sort(unique(imgs.label)); + [~,imgs.label]=ismember(imgs.label,labelnames); + save(datasetname{i},'imgs','labelnames'); +end diff --git a/pyridx2pos.m b/pyridx2pos.m new file mode 100755 index 0000000..ef03153 --- /dev/null +++ b/pyridx2pos.m @@ -0,0 +1,35 @@ +% Author: Carl Doersch (cdoersch at cs dot cmu dot edu) +% a relatively efficient function to convert a HOG pyramid index +% (i.e. pyramid level and grid cell) into a position +% in pixel space. +function metadata=pyridx2pos(idx,pyrsc,patchcellsize,pyramid)%pyrcanosz,pyrsc,prSize,pcSize,sBins,imsize); +pyrcanosz=pyramid.canonicalScale; +sBins=pyramid.sbins; +imsize=[pyramid.canonicalSize.nrows pyramid.canonicalSize.ncols]; +prSize=patchcellsize(1); +pcSize=patchcellsize(2); +levSc = pyramid.scales(pyrsc); +levSc=levSc(:); +canoSc = pyrcanosz; +% [x1 x2 y1 y2] +levelPatch = [ ... + zeros(size(levSc)), ... + round((prSize + 2) .* sBins .* levSc ./ canoSc) - 1, ... + zeros(size(levSc)), ... + round((pcSize + 2) .* sBins .* levSc ./ canoSc) - 1, ... +]; +x1=idx(:,2); +y1=idx(:,1); +xoffset = floor((x1 - 1) .* sBins .* levSc / canoSc) + 1; + yoffset = floor((y1 - 1) .* sBins .* levSc / canoSc) + 1; + thisPatch = bsxfun(@plus,levelPatch, [xoffset xoffset yoffset yoffset]); + + metadata.x1 = max(1,thisPatch(:,1)); + metadata.x2 = min(thisPatch(:,2),imsize(2)); + metadata.y1 = max(1,thisPatch(:,3)); + metadata.y2 = min(thisPatch(:,4),imsize(1)); +%if(metadata.x2>936) +%keyboard +%end +end + diff --git a/sampleRandomPatchesbb.m b/sampleRandomPatchesbb.m new file mode 100755 index 0000000..a385ee2 --- /dev/null +++ b/sampleRandomPatchesbb.m @@ -0,0 +1,171 @@ +%v1 by Saurabh Singh +%Edit: Carl Doersch (cdoersch at cs dot cmu dot edu). +function [patches, patFeats, probabilities] = sampleRandomPatches(pos,samplelimit,conf) +if(~exist('conf','var')) + conf=struct(); +end +global ds; +params=ds.conf.params; +%data = pos; +%pos = pos.annotation; +rand('seed',1000*pos); +I2 = im2double(getimg(ds,pos));%imread([ds.conf.gbz{ds.conf.currimset}.cutoutdir ds.imgs(pos).fullpath])); +if(dsfield(conf,'detsforclass')) + annot=getannot(pos); + bbs=[annot.x1 annot.y1 annot.x2 annot.y2]; + classes=[annot.label]; + occl=annot.occluded; + difficult=annot.difficult; + boxid=annot.boxid; + bbminsize=[bbs(:,4)-bbs(:,2)+1,bbs(:,3)-bbs(:,1)+1]; + valid=(~occl & c(ismember(classes,conf.detsforclass)) & ~difficult & all(bsxfun(@ge,bbminsize,ds.conf.params.patchCanonicalSize*1.5),2)); + bbs(~valid,:)=[]; + boxid(~valid)=[]; + bbs=[bbs,repmat([-Inf,-Inf,pos,0],size(bbs,1),1),boxid]; +else + bbs=[1,1,size(I2,2),size(I2,1),-Inf,-Inf,pos,0,1]; +end +patchesall={}; +patFeatsall={} +probabilitiesall={} +for(bbidx=1:size(bbs,1)) + I=I2(bbs(bbidx,2):bbs(bbidx,4),bbs(bbidx,1):bbs(bbidx,3),:); + if(dsfield(params,'imageCanonicalSize')) + [IS, scale] = convertToCanonicalSize(I, params.imageCanonicalSize); + else + IS=I; + scale=1; + end + [rows, cols, unused] = size(IS); + IG = getGradientImage(IS); + pyramid = constructFeaturePyramidForImg(I, params); + conf.imid=pos; + pcs=round(ds.conf.params.patchCanonicalSize/ds.conf.params.sBins)-2; + [features, levels, indexes] = unentanglePyramid(pyramid, ... + pcs,conf); + %params.patchCanonicalSize); + selLevels = 1 : params.scaleIntervals/2 : length(pyramid.scales); + levelScales = pyramid.scales(selLevels); + numLevels = length(selLevels); + + patches = []; + patFeats = []; + probabilities = []; + basenperlev=pyramid.features{selLevels(end)}; + basenperlev=(basenperlev(1)-pcs(1)+1)*(basenperlev(2)-pcs(2)+1); + for i = 1 : numLevels + levPatSize = floor(params.patchCanonicalSize .* levelScales(i)); + if(dsbool(params,'sampleBig')) + numLevPat=floor(basenperlev/2); + else + numLevPat = floor((rows / levPatSize(1)) * ... + (cols / levPatSize(2))*8); + end + %disp([num2str(levelScales(i)) '->' num2str(numLevPat)]); + + levelPatInds = find(levels == selLevels(i)); + if numLevPat <= 0 + continue; + end + + IGS = IG; + pDist = getProbDistribution(IGS, levPatSize); + pDist1d = pDist(:); + randNums = getRandForPdf(pDist1d, numLevPat); + probs = pDist1d(randNums); + [IY, IX] = ind2sub(size(IGS), randNums); + IY = ceil(IY ./ (levelScales(i) * params.sBins)); + IX = ceil(IX ./ (levelScales(i) * params.sBins)); + + [nrows, ncols, unused] = size(pyramid.features{selLevels(i)}); + IY = IY - floor(pcs(1) / 2); + IX = IX - floor(pcs(2) / 2); + xyToSel = IY>0 & IY<=nrows-pcs(1)+1 & IX>0 & IX<=ncols-pcs(2)+1; + IY = IY(xyToSel); + IX = IX(xyToSel); + probs = probs(xyToSel); + inds = sub2ind([nrows-pcs(1)+1 ncols-pcs(2)+1], IY, IX); + [inds, m, unused] = unique(inds); + probs = probs(m); + selectedPatInds = levelPatInds(inds,:); + fsz=(ds.conf.params.patchCanonicalSize-2*ds.conf.params.sBins)/ds.conf.params.sBins; + metadata = pyridx2pos(indexes(selectedPatInds,:),levels(selectedPatInds),fsz,pyramid) + %getMetadataForPositives(selectedPatInds, levels,... + % indexes, pcs(1), pcs(2), pyramid, pos); + feats = features(selectedPatInds, :); + if ~isempty(metadata) + patInds = cleanUpOverlappingPatches(metadata, ... + params.samplingOverlapThreshold); + metadata.x1=metadata.x1+bbs(bbidx,1)-1; + metadata.x2=metadata.x2+bbs(bbidx,1)-1; + metadata.y1=metadata.y1+bbs(bbidx,2)-1; + metadata.y2=metadata.y2+bbs(bbidx,2)-1; + if(any(metadata.y21) + if(~exist('weburl','var')) + weburl=''; + end + gbz=struct('labelnames',{labelnames},'imgsurl',weburl,'cutoutdir',datadir); + mydir=dspwd; + dscd('.ds'); + dsup(['ds.imgs{' num2str(idx) '}'],imgs); + dsup(['ds.conf.gbz{' num2str(idx) '}'],gbz); + dscd(mydir); + dsup(['ds.conf.gbz{' num2str(idx) '}'],gbz);% TODO: this should really only be kept in + % the root .ds.conf; relying on the + % non-root ds.conf creates + % unintuitive behavior. + end +end diff --git a/unentanglePyramid.m b/unentanglePyramid.m new file mode 100755 index 0000000..68a176b --- /dev/null +++ b/unentanglePyramid.m @@ -0,0 +1,112 @@ +function [features, levels, indexes, gradsums] = unentanglePyramid(pyramid, ... + pcsz,conf) + if(~exist('conf','var')) + conf=struct(); + end + global ds; + conf=overrideConf(ds.conf.params,conf); +% Converts a pyramid of hog features for an image to a single matrix. +% +% Author: saurabh.me@gmail.com (Saurabh Singh). + + %prSize = round(patchCanonicalSize(1) / pyramid.sbins) - 2; + %pcSize = round(patchCanonicalSize(2) / pyramid.sbins) - 2; + %[prSize, pcSize, pzSize, nExtra]=getCanonicalPatchHOGSize(ds.conf.params); + %prSize=pc + selFeatures = cell(length(pyramid.features), 1); + selGradsums = cell(length(pyramid.features), 1); + selFeaturesInds = cell(length(pyramid.features), 1); + + selLevel = cell(length(pyramid.features), 1); + totalProcessed = 0; + if(numel(pyramid.features)==0) + features=[]; + levels=[]; + indexes=[]; + gradsums=[]; + return + end + %im=RGB2Lab(im); + if(numel(pcsz)<3) + pcsz(3)=size(pyramid.features{1},3); + end + if(numel(pcsz)<4) + pcsz(4)=0; + end + + for i = 1 : length(pyramid.features) + [feats, indexes, selGradsums{i,1}] = getFeaturesForLevel(pyramid.features{i}, conf, pcsz(1), ... + pcsz(2),pcsz(3),pcsz(4),pyramid.gradimg{i}); + selFeatures{i} = feats; + selFeaturesInds{i} = indexes; + numFeats = size(feats, 1); + selLevel{i} = ones(numFeats, 1) * i; + totalProcessed = totalProcessed + numFeats; + end + gradsums=cell2mat(selGradsums); + + [features, levels, indexes] = appendAllTogether(totalProcessed, ... + selFeatures, selLevel, selFeaturesInds); + 'featsize' + size(feats) + clear selFeatures; + if(dsbool(conf,'normbeforewhit')) + features=bsxfun(@rdivide,bsxfun(@minus,features,mean(features,2)),max(sqrt(var(features,1,2).*size(features,2)),.0000001)); + end + if(dsbool(conf,'whitening')) + try + whit=dsload('.ds.whitenmat'); + whiten=1; + catch + whiten=0; + end + if(whiten) + features=bsxfun(@minus,features,(dsload('.ds.datamean')))*(dsload('.ds.whitenmat')'); + end + end + if(dsbool(conf,'normalizefeats')) + features=bsxfun(@rdivide,bsxfun(@minus,features,mean(features,2)),sqrt(var(features,1,2).*size(features,2))); + end + if(dsfield(conf,'contextfeats')) + disp('contextfeats'); + dets=getImgDetections(conf.imid); + if(~isempty(dets)) + dets=dets(ismember(dets(:,6),conf.contextfeats),:); + end + patsz=ds.conf.params.patchCanonicalSize;%allsz(resinds(k),:); + fsz=(patsz-2*ds.conf.params.sBins)/ds.conf.params.sBins; + %sz=size(ds.centers{c}); + %sz=sz(1:2); + %idxpad=floor((sz-fsz)./2); + imgs=getimgs(); + %pos=pyridx2pos(indexes,pyramid.canonicalScale,reshape(levels,[],1),... + % fsz(1),fsz(2),pyramid.sbins,[pyramid.canonicalSize.nrows pyramid.canonicalSize.ncols]); + pos=pyridx2pos(indexes,reshape(levels,[],1),fsz,pyramid); + pos=[pos.x1 pos.y1 pos.x2 pos.y2]; + features=[features contextfeats(pos,dets,conf.contextfeats)]; + end + +end + +function [newFeat, newLev, newInds] = appendAllTogether(totalProcessed, ... + features, levels, indexes) +newFeat = zeros(totalProcessed, size(features{1}, 2)); +newLev = zeros(totalProcessed, 1); +newInds = zeros(totalProcessed, 2); + +featInd = 1; +for i = 1 : length(features) + if isempty(features{i}) + continue; + end + startInd = featInd; + endInd = startInd + size(features{i}, 1) - 1; + newFeat(startInd:endInd, :) = features{i}; + features{i} = []; + newLev(startInd:endInd) = levels{i}; + levels{i} = []; + newInds(startInd:endInd, :) = indexes{i}; + indexes{i} = []; + featInd = endInd + 1; +end +end diff --git a/util/c.m b/util/c.m new file mode 100755 index 0000000..201bc90 --- /dev/null +++ b/util/c.m @@ -0,0 +1,3 @@ +function a=c(a) +a=a(:); +end diff --git a/util/distributeby.m b/util/distributeby.m new file mode 100755 index 0000000..781a82d --- /dev/null +++ b/util/distributeby.m @@ -0,0 +1,61 @@ +% [Aout, ..., uniquebins, inverse]=distributeby(A, ..., bins) will +% distribute A into a cell array, where rows of A that have the same +% values in the rows of bins will be mapped to the same cell of A. +% +% Specifically, uniquebins is the output of unique(bins,'rows'), where the +% rows are sorted, first by the first column, then by the second column, +% and so forth. For any index i, Aout{i} will be the (order-preserving) +% concatenation of all A(j,:) where all(bins(j,:)==uniquebins(i,:)). If A is +% a struct, it is assumed to be a set of parallel arrays (i.e. an effstr); each +% A{i} will be a struct with the same fields as the input, but with each +% field containing only the values matching a particular value in bins. +% Finally, inverse is a cell array the same size as Aout, where inverse{i}(j) +% specifies which row of A corresponds to Aout{i}(j,:). Note that +% invertdistributeby(Aout,inverse)=A. +% +% Additional arguments after A will have the exact same operation performed +% on them as A. +% +% [...]=distributeby(...,'descend') will invert the ordering of the +% uniquebins output, and all the other variables as well. +function [varargout]=distributeby(varargin) + %order='ascend'; + order=1; + if(ischar(varargin{end})&&strcmp('descend',varargin{end})) + %order='descend'; + order=-1; + varargin(end)=[]; + end + if(ischar(varargin{end})&&strcmp('ascend',varargin{end})) + varargin(end)=[]; + end + bins=varargin{end}; + mat=varargin(1:end-1); + binid=sortrows(unique(bins,'rows'),(1:size(bins,2))*order); + [~,idx]=ismember(bins,binid,'rows'); + [~,ord]=sort(idx); + counts=histc(idx,1:size(binid,1)); + for(i=1:numel(mat)) + if(isstruct(mat{i})) + fns=fieldnames(mat{i}); + restmp=cell(numel(counts),numel(fns)); + for(j=1:numel(fns)) + field=mat{i}.(fns{j}); + field=field(ord,:); + restmp(:,j)=mat2cell(field,counts,size(field,2)); + end + restmp=cell2struct(restmp,fns,2); + varargout{i}=num2cell(restmp); + %restmp=mat2cell(restmp,ones(numel(counts),1),size(restmp,2)); + %fn=fieldnames(mat{i}); + %restmp=cellfun(@(x) cell2struct( + else + res=mat{i}(ord,:); + varargout{i}=mat2cell(res,counts,size(res,2)); + end + end + varargout{end+1}=binid; + if(nargout>numel(varargout)) + varargout{end+1}=mat2cell(ord(:),counts,1); + end +end diff --git a/util/effstr2str.m b/util/effstr2str.m new file mode 100755 index 0000000..1eb4cae --- /dev/null +++ b/util/effstr2str.m @@ -0,0 +1,53 @@ +function res=effstr2str(str,ressize) + if(nargin<2) + ressize=getressize(str) + end + if(~isstruct(str)) + if(size(str,1)==1) + res=repmat(str,ressize,1); + elseif(size(str,1)==0) + res=zeros(ressize,0); + else + res=str; + end + else + res=struct(); + fnms=fieldnames(str); + for(i=1:numel(fnms)) + f=getfield(str,fnms{i}); + if(size(f,1)>1) + ressize=size(f,1); + break; + end + end + for(i=1:numel(fnms)) + f=effstr2str(getfield(str,fnms{i}),ressize); + try + t=mat2cell(f,ones(1,ressize),size(f,2)); + catch,keyboard;end + if(~exist('fval','var')) + fval=cell(numel(t),numel(fnms)); + end + fval(:,i)=t; + end + res=cell2struct(fval,fnms,2); + end +end +function ressize=getressize(str) + if(~isstruct(str)) + if(size(str,1)~=1) + ressize=size(str,1); + else + ressize=1; + end + return; + end + fnms=fieldnames(str); + for(i=1:numel(fnms)) + f=getfield(str,fnms{i}); + ressize=getressize(f); + if(ressize~=1) + return; + end + end +end diff --git a/util/effstrcell2mat.m b/util/effstrcell2mat.m new file mode 100755 index 0000000..6b01055 --- /dev/null +++ b/util/effstrcell2mat.m @@ -0,0 +1,4 @@ +function res=effstrcell2mat(data) + data=cell2mat(data); + res=str2effstr(data); +end diff --git a/util/effstridx.m b/util/effstridx.m new file mode 100755 index 0000000..fa0c7ee --- /dev/null +++ b/util/effstridx.m @@ -0,0 +1,22 @@ +function res=effstridx(str,idx,expand) + if(nargin<3) + expand=false; + end + if(~isstruct(str)) + if(numel(str)==1) + if(expand) + res=repmat(str,numel(idx),1); + else + res=str; + end + else + res=str(idx,:); + end + else + res=struct(); + fnms=fieldnames(str); + for(i=1:numel(fnms)) + res=setfield(res,fnms{i},effstridx(getfield(str,fnms{i}),idx,expand)); + end + end +end diff --git a/util/idxof.m b/util/idxof.m new file mode 100644 index 0000000..deecd28 --- /dev/null +++ b/util/idxof.m @@ -0,0 +1,3 @@ +function res=idxof(varargin) + [~,res]=ismember(varargin{:}); +end diff --git a/util/idxwithdefault.m b/util/idxwithdefault.m new file mode 100755 index 0000000..a624eb3 --- /dev/null +++ b/util/idxwithdefault.m @@ -0,0 +1,10 @@ +function res=idxwithdefault(data,inds,default) + iscols=size(data,1)==0; + data=[default;data(:)]; + inds(inds<=0)=0; + inds=inds+1; + res=data(inds); + if(iscols) + res=data'; + end +end diff --git a/util/invertdistributeby.m b/util/invertdistributeby.m new file mode 100755 index 0000000..7d4da9a --- /dev/null +++ b/util/invertdistributeby.m @@ -0,0 +1,9 @@ +% invert a distributeby operation, i.e. if you compute +% [Aout,~,inverse]=distributeby(A,bins) +% You can compute B as some function on each value in each cell of Aout +% and then call invertedistributeby(B,inverse) to get an array +% that's parallel with A again. +function val=invertdistributeby(val,ord) + val=cell2mat(val); + val(cell2mat(ord),:)=val; +end diff --git a/util/maxk.m b/util/maxk.m new file mode 100755 index 0000000..e17f091 --- /dev/null +++ b/util/maxk.m @@ -0,0 +1,5 @@ +function [val,pos]=maxk(x,k) + [val,pos]=sort(x,'descend'); + val=val(1:min(numel(x),k)); + pos=pos(1:min(numel(x),k)); +end diff --git a/util/maxkall.m b/util/maxkall.m new file mode 100755 index 0000000..e073268 --- /dev/null +++ b/util/maxkall.m @@ -0,0 +1,8 @@ +function data=maxkall(data,idx,nmax) +try + for(i=1:numel(data)) + [~,ord]=maxk(data{i}(:,idx),nmax); + data{i}=data{i}(ord,:); + end +catch ex,dsprinterr;end +end diff --git a/util/mink.m b/util/mink.m new file mode 100755 index 0000000..d238a71 --- /dev/null +++ b/util/mink.m @@ -0,0 +1,5 @@ +function [val,pos]=maxk(x,k) + [val,pos]=sort(x); + val=val(1:min(numel(x),k)); + pos=pos(1:min(numel(x),k)); +end diff --git a/util/minkall.m b/util/minkall.m new file mode 100755 index 0000000..d349541 --- /dev/null +++ b/util/minkall.m @@ -0,0 +1,8 @@ +function data=maxkall(data,idx,nmax) +try + for(i=1:numel(data)) + [~,ord]=mink(data{i}(:,idx),nmax); + data{i}=data{i}(ord,:); + end +catch ex,dsprinterr;end +end diff --git a/util/mymemory.m b/util/mymemory.m new file mode 100755 index 0000000..e7b8d84 --- /dev/null +++ b/util/mymemory.m @@ -0,0 +1,11 @@ +% Author: Carl Doersch (cdoersch at cs dot cmu dot edu) +% +% Print an estimate of memory usage for the current workspace. +%function res=mymemory +%ans=[]; +memory_a=whos; +%if(nargout==1) +%else + disp(['workspace memory usage: ' num2str(sum([memory_a.bytes])) ' bytes']); + mem_total=num2str(sum([memory_a.bytes])); +%end diff --git a/util/normrows.m b/util/normrows.m new file mode 100755 index 0000000..ccd178c --- /dev/null +++ b/util/normrows.m @@ -0,0 +1,14 @@ +function res=normrows(X,meansubtract,thresh) + if(nargin>1&&meansubtract) + X=bsxfun(@minus,X,mean(X,2)); + end + if(nargin<3) + thresh=0; + end + nrm=sqrt(sum(X.^2,2)); + badinds=nrm<=thresh; + res=bsxfun(@rdivide,X,nrm); + if(nargin>2) + res(badinds,:)=0; + end +end diff --git a/util/overrideConf.m b/util/overrideConf.m new file mode 100755 index 0000000..a1bc832 --- /dev/null +++ b/util/overrideConf.m @@ -0,0 +1,10 @@ +function baseconf=overrideconf(baseconf,newconf) + fnms=fieldnames(newconf) + for(i=1:numel(fnms)) + if(isfield(baseconf,fnms{i})&&isstruct(getfield(baseconf,fnms{i}))&&isstruct(getfield(newconf,fnms{i}))) + baseconf=setfield(baseconf,fnms{i},overrideConf(getfield(baseconf,fnms{i}),getfield(newconf,fnms{i}))); + else + baseconf=setfield(baseconf,fnms{i},getfield(newconf,fnms{i})); + end + end +end diff --git a/util/str2effstr.m b/util/str2effstr.m new file mode 100755 index 0000000..987d715 --- /dev/null +++ b/util/str2effstr.m @@ -0,0 +1,15 @@ +function res=str2effstr(str) + nams=fieldnames(str); + res=struct(); + for(i=1:numel(nams)) + if(numel(str)>0&&ischar(getfield(str(1),nams{i}))) + restruct={str.(nams{i})}'; + else + restruct=cat(1,str.(nams{i})); + if(isstruct(restruct)) + restruct=str2effstr(str); + end + end + res=setfield(res,nams{i},restruct); + end +end diff --git a/util/structcell2mat.m b/util/structcell2mat.m new file mode 100755 index 0000000..bcc909f --- /dev/null +++ b/util/structcell2mat.m @@ -0,0 +1,14 @@ +% Author: Carl Doersch (cdoersch at cs dot cmu dot edu) +% +% if you have a cell array where some cells contain structs of the +% same type and some cells are empty, matlab will crash. This funciton +% gets rid of the empties so that cell2mat can function. +function res=structcell2mat(in) + if(~iscell(in)) + res=in; + return; + end + remove=cellfun(@(x) isempty(x),in); + in(remove)=[]; + res=cell2mat(in); +end

    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