Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/supermerill/SuperSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbubnikv <bubnikv@gmail.com>2018-09-19 12:02:24 +0300
committerbubnikv <bubnikv@gmail.com>2018-09-19 12:02:24 +0300
commit0558b53493a77bae44831cf87bb0f59359828ef5 (patch)
treec3e8dbdf7d91a051c12d9ebbf7606d41047fea96
parent3ddaccb6410478ad02d8c0e02d6d8e6eb1785b9f (diff)
WIP: Moved sources int src/, separated most of the source code from Perl.mass_rename
The XS was left only for the unit / integration tests, and it links libslic3r only. No wxWidgets are allowed to be used from Perl starting from now.
-rw-r--r--CMakeLists.txt198
-rw-r--r--resources/localization/CMakeLists.txt8
-rw-r--r--src/CMakeLists.txt65
-rw-r--r--src/Shiny/CMakeLists.txt25
-rw-r--r--src/Shiny/Shiny.h (renamed from xs/src/Shiny/Shiny.h)0
-rw-r--r--src/Shiny/ShinyConfig.h (renamed from xs/src/Shiny/ShinyConfig.h)0
-rw-r--r--src/Shiny/ShinyData.h (renamed from xs/src/Shiny/ShinyData.h)0
-rw-r--r--src/Shiny/ShinyMacros.h (renamed from xs/src/Shiny/ShinyMacros.h)0
-rw-r--r--src/Shiny/ShinyManager.c (renamed from xs/src/Shiny/ShinyManager.c)0
-rw-r--r--src/Shiny/ShinyManager.h (renamed from xs/src/Shiny/ShinyManager.h)0
-rw-r--r--src/Shiny/ShinyNode.c (renamed from xs/src/Shiny/ShinyNode.c)0
-rw-r--r--src/Shiny/ShinyNode.h (renamed from xs/src/Shiny/ShinyNode.h)0
-rw-r--r--src/Shiny/ShinyNodePool.c (renamed from xs/src/Shiny/ShinyNodePool.c)0
-rw-r--r--src/Shiny/ShinyNodePool.h (renamed from xs/src/Shiny/ShinyNodePool.h)0
-rw-r--r--src/Shiny/ShinyNodeState.c (renamed from xs/src/Shiny/ShinyNodeState.c)0
-rw-r--r--src/Shiny/ShinyNodeState.h (renamed from xs/src/Shiny/ShinyNodeState.h)0
-rw-r--r--src/Shiny/ShinyOutput.c (renamed from xs/src/Shiny/ShinyOutput.c)0
-rw-r--r--src/Shiny/ShinyOutput.h (renamed from xs/src/Shiny/ShinyOutput.h)0
-rw-r--r--src/Shiny/ShinyPrereqs.h (renamed from xs/src/Shiny/ShinyPrereqs.h)0
-rw-r--r--src/Shiny/ShinyTools.c (renamed from xs/src/Shiny/ShinyTools.c)0
-rw-r--r--src/Shiny/ShinyTools.h (renamed from xs/src/Shiny/ShinyTools.h)0
-rw-r--r--src/Shiny/ShinyVersion.h (renamed from xs/src/Shiny/ShinyVersion.h)0
-rw-r--r--src/Shiny/ShinyZone.c (renamed from xs/src/Shiny/ShinyZone.c)0
-rw-r--r--src/Shiny/ShinyZone.h (renamed from xs/src/Shiny/ShinyZone.h)0
-rw-r--r--src/admesh/CMakeLists.txt12
-rw-r--r--src/admesh/connect.cpp (renamed from xs/src/admesh/connect.cpp)0
-rw-r--r--src/admesh/normals.cpp (renamed from xs/src/admesh/normals.cpp)0
-rw-r--r--src/admesh/shared.cpp (renamed from xs/src/admesh/shared.cpp)0
-rw-r--r--src/admesh/stl.h (renamed from xs/src/admesh/stl.h)0
-rw-r--r--src/admesh/stl_io.cpp (renamed from xs/src/admesh/stl_io.cpp)0
-rw-r--r--src/admesh/stlinit.cpp (renamed from xs/src/admesh/stlinit.cpp)0
-rw-r--r--src/admesh/util.cpp (renamed from xs/src/admesh/util.cpp)0
-rw-r--r--src/agg/AUTHORS (renamed from xs/src/agg/AUTHORS)0
-rw-r--r--src/agg/VERSION (renamed from xs/src/agg/VERSION)0
-rw-r--r--src/agg/agg_array.h (renamed from xs/src/agg/agg_array.h)0
-rw-r--r--src/agg/agg_basics.h (renamed from xs/src/agg/agg_basics.h)0
-rw-r--r--src/agg/agg_bezier_arc.h (renamed from xs/src/agg/agg_bezier_arc.h)0
-rw-r--r--src/agg/agg_clip_liang_barsky.h (renamed from xs/src/agg/agg_clip_liang_barsky.h)0
-rw-r--r--src/agg/agg_color_gray.h (renamed from xs/src/agg/agg_color_gray.h)0
-rw-r--r--src/agg/agg_color_rgba.h (renamed from xs/src/agg/agg_color_rgba.h)0
-rw-r--r--src/agg/agg_config.h (renamed from xs/src/agg/agg_config.h)0
-rw-r--r--src/agg/agg_conv_transform.h (renamed from xs/src/agg/agg_conv_transform.h)0
-rw-r--r--src/agg/agg_gamma_functions.h (renamed from xs/src/agg/agg_gamma_functions.h)0
-rw-r--r--src/agg/agg_gamma_lut.h (renamed from xs/src/agg/agg_gamma_lut.h)0
-rw-r--r--src/agg/agg_math.h (renamed from xs/src/agg/agg_math.h)0
-rw-r--r--src/agg/agg_path_storage.h (renamed from xs/src/agg/agg_path_storage.h)0
-rw-r--r--src/agg/agg_pixfmt_base.h (renamed from xs/src/agg/agg_pixfmt_base.h)0
-rw-r--r--src/agg/agg_pixfmt_gray.h (renamed from xs/src/agg/agg_pixfmt_gray.h)0
-rw-r--r--src/agg/agg_pixfmt_rgb.h (renamed from xs/src/agg/agg_pixfmt_rgb.h)0
-rw-r--r--src/agg/agg_rasterizer_cells_aa.h (renamed from xs/src/agg/agg_rasterizer_cells_aa.h)0
-rw-r--r--src/agg/agg_rasterizer_scanline_aa.h (renamed from xs/src/agg/agg_rasterizer_scanline_aa.h)0
-rw-r--r--src/agg/agg_rasterizer_scanline_aa_nogamma.h (renamed from xs/src/agg/agg_rasterizer_scanline_aa_nogamma.h)0
-rw-r--r--src/agg/agg_rasterizer_sl_clip.h (renamed from xs/src/agg/agg_rasterizer_sl_clip.h)0
-rw-r--r--src/agg/agg_renderer_base.h (renamed from xs/src/agg/agg_renderer_base.h)0
-rw-r--r--src/agg/agg_renderer_scanline.h (renamed from xs/src/agg/agg_renderer_scanline.h)0
-rw-r--r--src/agg/agg_rendering_buffer.h (renamed from xs/src/agg/agg_rendering_buffer.h)0
-rw-r--r--src/agg/agg_scanline_p.h (renamed from xs/src/agg/agg_scanline_p.h)0
-rw-r--r--src/agg/agg_trans_affine.h (renamed from xs/src/agg/agg_trans_affine.h)0
-rw-r--r--src/agg/copying (renamed from xs/src/agg/copying)0
-rw-r--r--src/avrdude/AUTHORS (renamed from xs/src/avrdude/AUTHORS)0
-rw-r--r--src/avrdude/BUILD-FROM-SVN (renamed from xs/src/avrdude/BUILD-FROM-SVN)0
-rw-r--r--src/avrdude/CMakeLists.txt (renamed from xs/src/avrdude/CMakeLists.txt)0
-rw-r--r--src/avrdude/COPYING (renamed from xs/src/avrdude/COPYING)0
-rw-r--r--src/avrdude/ChangeLog (renamed from xs/src/avrdude/ChangeLog)0
-rw-r--r--src/avrdude/ChangeLog-2001 (renamed from xs/src/avrdude/ChangeLog-2001)0
-rw-r--r--src/avrdude/ChangeLog-2002 (renamed from xs/src/avrdude/ChangeLog-2002)0
-rw-r--r--src/avrdude/ChangeLog-2003 (renamed from xs/src/avrdude/ChangeLog-2003)0
-rw-r--r--src/avrdude/ChangeLog-2004-2006 (renamed from xs/src/avrdude/ChangeLog-2004-2006)0
-rw-r--r--src/avrdude/ChangeLog-2007 (renamed from xs/src/avrdude/ChangeLog-2007)0
-rw-r--r--src/avrdude/ChangeLog-2008 (renamed from xs/src/avrdude/ChangeLog-2008)0
-rw-r--r--src/avrdude/ChangeLog-2009 (renamed from xs/src/avrdude/ChangeLog-2009)0
-rw-r--r--src/avrdude/ChangeLog-2010 (renamed from xs/src/avrdude/ChangeLog-2010)0
-rw-r--r--src/avrdude/ChangeLog-2011 (renamed from xs/src/avrdude/ChangeLog-2011)0
-rw-r--r--src/avrdude/ChangeLog-2012 (renamed from xs/src/avrdude/ChangeLog-2012)0
-rw-r--r--src/avrdude/ChangeLog-2013 (renamed from xs/src/avrdude/ChangeLog-2013)0
-rw-r--r--src/avrdude/ChangeLog-2014 (renamed from xs/src/avrdude/ChangeLog-2014)0
-rw-r--r--src/avrdude/ChangeLog-2015 (renamed from xs/src/avrdude/ChangeLog-2015)0
-rw-r--r--src/avrdude/Makefile.am (renamed from xs/src/avrdude/Makefile.am)0
-rw-r--r--src/avrdude/Makefile.standalone (renamed from xs/src/avrdude/Makefile.standalone)0
-rw-r--r--src/avrdude/NEWS (renamed from xs/src/avrdude/NEWS)0
-rw-r--r--src/avrdude/README (renamed from xs/src/avrdude/README)0
-rw-r--r--src/avrdude/ac_cfg.h (renamed from xs/src/avrdude/ac_cfg.h)0
-rw-r--r--src/avrdude/ac_cfg.h.in (renamed from xs/src/avrdude/ac_cfg.h.in)0
-rw-r--r--src/avrdude/arduino.c (renamed from xs/src/avrdude/arduino.c)0
-rw-r--r--src/avrdude/arduino.h (renamed from xs/src/avrdude/arduino.h)0
-rw-r--r--src/avrdude/atmel-docs/AVR109.pdf (renamed from xs/src/avrdude/atmel-docs/AVR109.pdf)bin94446 -> 94446 bytes
-rw-r--r--src/avrdude/atmel-docs/AVR910.pdf (renamed from xs/src/avrdude/atmel-docs/AVR910.pdf)bin224606 -> 224606 bytes
-rw-r--r--src/avrdude/atmel-docs/AVRISPmkII-AVR069.pdf (renamed from xs/src/avrdude/atmel-docs/AVRISPmkII-AVR069.pdf)bin326430 -> 326430 bytes
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/browserDetect.js (renamed from xs/src/avrdude/atmel-docs/EDBG/common/browserDetect.js)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/css/960.css (renamed from xs/src/avrdude/atmel-docs/EDBG/common/css/960.css)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/css/docbook.css (renamed from xs/src/avrdude/atmel-docs/EDBG/common/css/docbook.css)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/css/fluid_grid.css (renamed from xs/src/avrdude/atmel-docs/EDBG/common/css/fluid_grid.css)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/css/index.css (renamed from xs/src/avrdude/atmel-docs/EDBG/common/css/index.css)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/css/positioning.css (renamed from xs/src/avrdude/atmel-docs/EDBG/common/css/positioning.css)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/css/print.css (renamed from xs/src/avrdude/atmel-docs/EDBG/common/css/print.css)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/css/reset.css (renamed from xs/src/avrdude/atmel-docs/EDBG/common/css/reset.css)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/css/text.css (renamed from xs/src/avrdude/atmel-docs/EDBG/common/css/text.css)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/fonts/DroidSansMono.eot (renamed from xs/src/avrdude/atmel-docs/EDBG/common/fonts/DroidSansMono.eot)bin78514 -> 78514 bytes
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/fonts/DroidSansMono.ttf (renamed from xs/src/avrdude/atmel-docs/EDBG/common/fonts/DroidSansMono.ttf)bin78296 -> 78296 bytes
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/images/Book_Closed.png (renamed from xs/src/avrdude/atmel-docs/EDBG/common/images/Book_Closed.png)bin3245 -> 3245 bytes
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/images/Book_Open.png (renamed from xs/src/avrdude/atmel-docs/EDBG/common/images/Book_Open.png)bin703 -> 703 bytes
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/images/Document_Text.png (renamed from xs/src/avrdude/atmel-docs/EDBG/common/images/Document_Text.png)bin583 -> 583 bytes
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/images/Library.png (renamed from xs/src/avrdude/atmel-docs/EDBG/common/images/Library.png)bin798 -> 798 bytes
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/images/external_link.gif (renamed from xs/src/avrdude/atmel-docs/EDBG/common/images/external_link.gif)bin98 -> 98 bytes
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/images/loading.gif (renamed from xs/src/avrdude/atmel-docs/EDBG/common/images/loading.gif)bin1553 -> 1553 bytes
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/images/logo.png (renamed from xs/src/avrdude/atmel-docs/EDBG/common/images/logo.png)bin4305 -> 4305 bytes
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/images/minus.png (renamed from xs/src/avrdude/atmel-docs/EDBG/common/images/minus.png)bin156 -> 156 bytes
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/images/next-arrow.png (renamed from xs/src/avrdude/atmel-docs/EDBG/common/images/next-arrow.png)bin199 -> 199 bytes
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/images/plus.png (renamed from xs/src/avrdude/atmel-docs/EDBG/common/images/plus.png)bin164 -> 164 bytes
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/images/previous-arrow.png (renamed from xs/src/avrdude/atmel-docs/EDBG/common/images/previous-arrow.png)bin198 -> 198 bytes
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/images/search-icon.png (renamed from xs/src/avrdude/atmel-docs/EDBG/common/images/search-icon.png)bin340 -> 340 bytes
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/images/sidebar.png (renamed from xs/src/avrdude/atmel-docs/EDBG/common/images/sidebar.png)bin177 -> 177 bytes
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/images/starsSmall.png (renamed from xs/src/avrdude/atmel-docs/EDBG/common/images/starsSmall.png)bin1032 -> 1032 bytes
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/images/toc-icon.png (renamed from xs/src/avrdude/atmel-docs/EDBG/common/images/toc-icon.png)bin3447 -> 3447 bytes
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/images/ui-icons_217bc0_256x240.png (renamed from xs/src/avrdude/atmel-docs/EDBG/common/images/ui-icons_217bc0_256x240.png)bin4369 -> 4369 bytes
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/jquery/jquery-1.7.2.min.js (renamed from xs/src/avrdude/atmel-docs/EDBG/common/jquery/jquery-1.7.2.min.js)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/jquery/jquery.cookie.js (renamed from xs/src/avrdude/atmel-docs/EDBG/common/jquery/jquery.cookie.js)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/jquery/jquery.ui.all.js (renamed from xs/src/avrdude/atmel-docs/EDBG/common/jquery/jquery.ui.all.js)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/jquery/layout/jquery.layout.js (renamed from xs/src/avrdude/atmel-docs/EDBG/common/jquery/layout/jquery.layout.js)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-anim_basic_16x16.gif (renamed from xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-anim_basic_16x16.gif)bin1553 -> 1553 bytes
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_flat_0_aaaaaa_40x100.png (renamed from xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_flat_0_aaaaaa_40x100.png)bin180 -> 180 bytes
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_flat_55_fbec88_40x100.png (renamed from xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_flat_55_fbec88_40x100.png)bin182 -> 182 bytes
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_glass_75_d0e5f5_1x400.png (renamed from xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_glass_75_d0e5f5_1x400.png)bin162 -> 162 bytes
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_glass_85_dfeffc_1x400.png (renamed from xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_glass_85_dfeffc_1x400.png)bin123 -> 123 bytes
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_glass_95_fef1ec_1x400.png (renamed from xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_glass_95_fef1ec_1x400.png)bin119 -> 119 bytes
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png (renamed from xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png)bin3457 -> 3457 bytes
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_inset-hard_100_f5f8f9_1x100.png (renamed from xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_inset-hard_100_f5f8f9_1x100.png)bin104 -> 104 bytes
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_inset-hard_100_fcfdfd_1x100.png (renamed from xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_inset-hard_100_fcfdfd_1x100.png)bin88 -> 88 bytes
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_217bc0_256x240.png (renamed from xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_217bc0_256x240.png)bin4369 -> 4369 bytes
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_2e83ff_256x240.png (renamed from xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_2e83ff_256x240.png)bin4369 -> 4369 bytes
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_469bdd_256x240.png (renamed from xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_469bdd_256x240.png)bin4369 -> 4369 bytes
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_6da8d5_256x240.png (renamed from xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_6da8d5_256x240.png)bin5355 -> 5355 bytes
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_cd0a0a_256x240.png (renamed from xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_cd0a0a_256x240.png)bin4369 -> 4369 bytes
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_d8e7f3_256x240.png (renamed from xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_d8e7f3_256x240.png)bin4369 -> 4369 bytes
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_f9bd01_256x240.png (renamed from xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_f9bd01_256x240.png)bin5355 -> 5355 bytes
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/jquery-ui-1.8.2.custom.css (renamed from xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/jquery-ui-1.8.2.custom.css)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/file.gif (renamed from xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/file.gif)bin1008 -> 1008 bytes
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/folder-closed.gif (renamed from xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/folder-closed.gif)bin631 -> 631 bytes
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/folder.gif (renamed from xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/folder.gif)bin631 -> 631 bytes
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-black-line.gif (renamed from xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-black-line.gif)bin1877 -> 1877 bytes
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-black.gif (renamed from xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-black.gif)bin1216 -> 1216 bytes
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-default-line.gif (renamed from xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-default-line.gif)bin1993 -> 1993 bytes
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-default.gif (renamed from xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-default.gif)bin1222 -> 1222 bytes
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-famfamfam-line.gif (renamed from xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-famfamfam-line.gif)bin807 -> 807 bytes
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-famfamfam.gif (renamed from xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-famfamfam.gif)bin1280 -> 1280 bytes
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-gray-line.gif (renamed from xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-gray-line.gif)bin1877 -> 1877 bytes
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-gray.gif (renamed from xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-gray.gif)bin1230 -> 1230 bytes
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-red-line.gif (renamed from xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-red-line.gif)bin1877 -> 1877 bytes
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-red.gif (renamed from xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-red.gif)bin1230 -> 1230 bytes
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/jquery/treeview/jquery.treeview.css (renamed from xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/jquery.treeview.css)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/jquery/treeview/jquery.treeview.min.js (renamed from xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/jquery.treeview.min.js)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/main.js (renamed from xs/src/avrdude/atmel-docs/EDBG/common/main.js)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/common/splitterInit.js (renamed from xs/src/avrdude/atmel-docs/EDBG/common/splitterInit.js)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch01s01.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch01s01.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch01s02.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch01s02.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s01.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s01.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s01.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s01.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s02.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s02.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s02s01.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s02s01.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s02s02.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s02s02.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s03.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s03.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s03s01.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s03s01.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s03s02.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s03s02.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s03s03.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s03s03.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s03s04.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s03s04.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s01.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s01.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s02.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s02.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s03.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s03.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s04.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s04.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s05.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s05.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s06.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s06.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s07.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s07.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s08.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s08.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s09.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s09.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s04.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s04.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s04s01.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s04s01.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s04s02.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s04s02.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s04s03.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s04s03.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s01.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s01.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s01s01.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s01s01.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s01s02.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s01s02.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s01s03.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s01s03.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s01s03s01.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s01s03s01.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s02.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s02.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s02s01.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s02s01.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s02s02.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s02s02.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s02s03.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s02s03.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s02s04.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s02s04.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s01.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s01.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s02.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s02.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s03.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s03.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s04.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s04.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s04s01.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s04s01.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s04s03.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s04s03.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s04s04.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s04s04.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s04s05.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s04s05.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s01.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s01.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s03.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s03.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s04.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s04.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s06.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s06.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s06s02.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s06s02.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s06s03.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s06s03.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s06s04.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s06s04.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s06s05.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s06s05.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s07.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s07.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s07s01.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s07s01.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s07s02.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s07s02.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s07s03.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s07s03.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s07s04.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s07s04.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s08.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s08.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s08s01.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s08s01.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s08s02.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s08s02.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s08s03.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s08s03.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s09.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s09.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s10.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s10.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s01.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s01.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s02.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s02.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s03.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s03.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s04.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s04.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s05.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s05.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s06.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s06.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s07.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s07.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s08.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s08.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s09.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s09.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s10.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s10.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s11.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s11.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s12.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s12.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s13.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s13.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s14.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s14.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s15.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s15.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s02.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s02.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s02s01.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s02s01.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s02s02.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s02s02.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s02s03.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s02s03.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s02s04.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s02s04.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s02s05.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s02s05.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s02s06.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s02s06.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s03.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s03.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s03s01.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s03s01.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s03s02.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s03s02.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s03s03.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s03s03.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s04.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s04.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s01.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s01.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s02.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s02.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s03.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s03.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s04.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s04.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s05.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s05.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s06.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s06.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s07.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s07.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s08.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s08.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s09.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s09.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s10.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s10.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s11.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s11.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s12.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s12.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s13.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s13.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s14.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s14.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s15.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s15.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s16.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s16.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s17.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s17.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s18.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s18.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s19.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s19.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s20.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s20.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s21.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s21.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s22.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s22.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s23.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s23.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s24.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s24.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s25.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s25.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s26.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s26.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s27.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s27.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s28.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s28.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s29.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s29.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s02.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s02.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s02s01.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s02s01.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s02s02.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s02s02.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s02s03.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s02s03.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s02s04.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s02s04.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s02s05.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s02s05.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s03.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s03.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s03s01.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s03s01.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s03s02.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s03s02.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s04s01.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s04s01.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s04s02.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s04s02.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s04s03.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s04s03.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s05.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s05.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s05s01.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s05s01.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s05s02.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s05s02.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s05s03.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s05s03.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s05s04.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s05s04.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s05s05.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s05s05.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s06.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s06.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s01.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s01.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s02.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s02.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s03.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s03.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s04.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s04.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s05.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s05.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s06.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s06.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s07.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s07.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s08.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s08.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s09.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s09.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s10.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s10.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s11.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s11.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s12.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s12.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s13.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s13.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s14.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s14.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s15.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s15.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s16.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s16.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s17.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s17.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s02.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s02.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s03.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s03.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s01.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s01.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s01s01.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s01s01.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s01s02.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s01s02.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s01s03.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s01s03.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s01s04.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s01s04.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s01s05.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s01s05.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s01s06.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s01s06.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s02.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s02.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s03.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s03.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/document.revisions.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/document.revisions.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/index.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/index.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/pr01.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/pr01.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.Introduction.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.Introduction.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.avr32protocol.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.avr32protocol.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.avr8protocol.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.avr8protocol.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.avrispprotocol.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.avrispprotocol.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.avrprotocol.Overview.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.avrprotocol.Overview.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.cmsis_dap.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.cmsis_dap.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.edbg_ctrl_protocol.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.edbg_ctrl_protocol.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.tpiprotocol.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.tpiprotocol.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/search/htmlFileInfoList.js (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/search/htmlFileInfoList.js)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/search/index-1.js (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/search/index-1.js)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/search/index-2.js (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/search/index-2.js)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/search/index-3.js (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/search/index-3.js)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/search/l10n.js (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/search/l10n.js)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/search/nwSearchFnt.js (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/search/nwSearchFnt.js)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/search/stemmers/en_stemmer.js (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/search/stemmers/en_stemmer.js)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/section_avr32_memtypes.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_avr32_memtypes.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/section_avr32_setget_params.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_avr32_setget_params.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/section_avr8_memtypes.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_avr8_memtypes.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/section_avr8_query_contexts.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_avr8_query_contexts.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/section_avr8_setget_params.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_avr8_setget_params.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/section_edbg_ctrl_setget_params.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_edbg_ctrl_setget_params.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/section_edbg_query_contexts.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_edbg_query_contexts.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/section_housekeeping_start_session.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_housekeeping_start_session.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/section_i5v_3yz_rl.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_i5v_3yz_rl.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/section_jdx_m11_sl.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_jdx_m11_sl.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/section_qhb_x1c_sl.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_qhb_x1c_sl.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/section_serial_trace.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_serial_trace.html)0
-rw-r--r--src/avrdude/atmel-docs/EDBG/protocoldocs/section_t1f_hb1_sl.html (renamed from xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_t1f_hb1_sl.html)0
-rw-r--r--src/avrdude/atmel-docs/JTAGICE-AVR060.pdf (renamed from xs/src/avrdude/atmel-docs/JTAGICE-AVR060.pdf)bin139206 -> 139206 bytes
-rw-r--r--src/avrdude/atmel-docs/JTAGICEmkII-AVR067.pdf (renamed from xs/src/avrdude/atmel-docs/JTAGICEmkII-AVR067.pdf)bin327125 -> 327125 bytes
-rw-r--r--src/avrdude/atmel-docs/STK500-AVR061.pdf (renamed from xs/src/avrdude/atmel-docs/STK500-AVR061.pdf)bin814798 -> 814798 bytes
-rw-r--r--src/avrdude/atmel-docs/STK500v2-AVR068.pdf (renamed from xs/src/avrdude/atmel-docs/STK500v2-AVR068.pdf)bin161607 -> 161607 bytes
-rw-r--r--src/avrdude/avr.c (renamed from xs/src/avrdude/avr.c)0
-rw-r--r--src/avrdude/avr910.c (renamed from xs/src/avrdude/avr910.c)0
-rw-r--r--src/avrdude/avr910.h (renamed from xs/src/avrdude/avr910.h)0
-rw-r--r--src/avrdude/avrdude-slic3r.cpp (renamed from xs/src/avrdude/avrdude-slic3r.cpp)0
-rw-r--r--src/avrdude/avrdude-slic3r.hpp (renamed from xs/src/avrdude/avrdude-slic3r.hpp)0
-rw-r--r--src/avrdude/avrdude.1 (renamed from xs/src/avrdude/avrdude.1)0
-rw-r--r--src/avrdude/avrdude.conf (renamed from xs/src/avrdude/avrdude.conf)0
-rw-r--r--src/avrdude/avrdude.conf.in (renamed from xs/src/avrdude/avrdude.conf.in)0
-rw-r--r--src/avrdude/avrdude.conf.tmp (renamed from xs/src/avrdude/avrdude.conf.tmp)0
-rw-r--r--src/avrdude/avrdude.h (renamed from xs/src/avrdude/avrdude.h)0
-rw-r--r--src/avrdude/avrdude.spec.in (renamed from xs/src/avrdude/avrdude.spec.in)0
-rw-r--r--src/avrdude/avrftdi.c (renamed from xs/src/avrdude/avrftdi.c)0
-rw-r--r--src/avrdude/avrftdi.h (renamed from xs/src/avrdude/avrftdi.h)0
-rw-r--r--src/avrdude/avrftdi_private.h (renamed from xs/src/avrdude/avrftdi_private.h)0
-rw-r--r--src/avrdude/avrftdi_tpi.c (renamed from xs/src/avrdude/avrftdi_tpi.c)0
-rw-r--r--src/avrdude/avrftdi_tpi.h (renamed from xs/src/avrdude/avrftdi_tpi.h)0
-rw-r--r--src/avrdude/avrpart.c (renamed from xs/src/avrdude/avrpart.c)0
-rw-r--r--src/avrdude/bitbang.c (renamed from xs/src/avrdude/bitbang.c)0
-rw-r--r--src/avrdude/bitbang.h (renamed from xs/src/avrdude/bitbang.h)0
-rw-r--r--[-rwxr-xr-x]src/avrdude/bootstrap (renamed from xs/src/avrdude/bootstrap)0
-rw-r--r--src/avrdude/buspirate.c (renamed from xs/src/avrdude/buspirate.c)0
-rw-r--r--src/avrdude/buspirate.h (renamed from xs/src/avrdude/buspirate.h)0
-rw-r--r--src/avrdude/butterfly.c (renamed from xs/src/avrdude/butterfly.c)0
-rw-r--r--src/avrdude/butterfly.h (renamed from xs/src/avrdude/butterfly.h)0
-rw-r--r--src/avrdude/config.c (renamed from xs/src/avrdude/config.c)0
-rw-r--r--src/avrdude/config.h (renamed from xs/src/avrdude/config.h)0
-rw-r--r--src/avrdude/config_gram.c (renamed from xs/src/avrdude/config_gram.c)0
-rw-r--r--src/avrdude/config_gram.h (renamed from xs/src/avrdude/config_gram.h)0
-rw-r--r--src/avrdude/config_gram.y (renamed from xs/src/avrdude/config_gram.y)0
-rw-r--r--src/avrdude/configure.ac (renamed from xs/src/avrdude/configure.ac)0
-rw-r--r--src/avrdude/confwin.c (renamed from xs/src/avrdude/confwin.c)0
-rw-r--r--src/avrdude/crc16.c (renamed from xs/src/avrdude/crc16.c)0
-rw-r--r--src/avrdude/crc16.h (renamed from xs/src/avrdude/crc16.h)0
-rw-r--r--src/avrdude/dfu.c (renamed from xs/src/avrdude/dfu.c)0
-rw-r--r--src/avrdude/dfu.h (renamed from xs/src/avrdude/dfu.h)0
-rw-r--r--src/avrdude/doc/.cvsignore (renamed from xs/src/avrdude/doc/.cvsignore)0
-rw-r--r--src/avrdude/doc/Makefile.am (renamed from xs/src/avrdude/doc/Makefile.am)0
-rw-r--r--src/avrdude/doc/TODO (renamed from xs/src/avrdude/doc/TODO)0
-rw-r--r--src/avrdude/doc/avrdude.texi (renamed from xs/src/avrdude/doc/avrdude.texi)0
-rw-r--r--src/avrdude/doc/parts_comments.txt (renamed from xs/src/avrdude/doc/parts_comments.txt)0
-rw-r--r--src/avrdude/fileio.c (renamed from xs/src/avrdude/fileio.c)0
-rw-r--r--src/avrdude/flip1.c (renamed from xs/src/avrdude/flip1.c)0
-rw-r--r--src/avrdude/flip1.h (renamed from xs/src/avrdude/flip1.h)0
-rw-r--r--src/avrdude/flip2.c (renamed from xs/src/avrdude/flip2.c)0
-rw-r--r--src/avrdude/flip2.h (renamed from xs/src/avrdude/flip2.h)0
-rw-r--r--src/avrdude/freebsd_ppi.h (renamed from xs/src/avrdude/freebsd_ppi.h)0
-rw-r--r--src/avrdude/ft245r.c (renamed from xs/src/avrdude/ft245r.c)0
-rw-r--r--src/avrdude/ft245r.h (renamed from xs/src/avrdude/ft245r.h)0
-rw-r--r--src/avrdude/jtag3.c (renamed from xs/src/avrdude/jtag3.c)0
-rw-r--r--src/avrdude/jtag3.h (renamed from xs/src/avrdude/jtag3.h)0
-rw-r--r--src/avrdude/jtag3_private.h (renamed from xs/src/avrdude/jtag3_private.h)0
-rw-r--r--src/avrdude/jtagmkI.c (renamed from xs/src/avrdude/jtagmkI.c)0
-rw-r--r--src/avrdude/jtagmkI.h (renamed from xs/src/avrdude/jtagmkI.h)0
-rw-r--r--src/avrdude/jtagmkII.c (renamed from xs/src/avrdude/jtagmkII.c)0
-rw-r--r--src/avrdude/jtagmkII.h (renamed from xs/src/avrdude/jtagmkII.h)0
-rw-r--r--src/avrdude/jtagmkII_private.h (renamed from xs/src/avrdude/jtagmkII_private.h)0
-rw-r--r--src/avrdude/jtagmkI_private.h (renamed from xs/src/avrdude/jtagmkI_private.h)0
-rw-r--r--src/avrdude/lexer.c (renamed from xs/src/avrdude/lexer.c)0
-rw-r--r--src/avrdude/lexer.l (renamed from xs/src/avrdude/lexer.l)0
-rw-r--r--src/avrdude/libavrdude.h (renamed from xs/src/avrdude/libavrdude.h)0
-rw-r--r--src/avrdude/linux_ppdev.h (renamed from xs/src/avrdude/linux_ppdev.h)0
-rw-r--r--src/avrdude/linuxgpio.c (renamed from xs/src/avrdude/linuxgpio.c)0
-rw-r--r--src/avrdude/linuxgpio.h (renamed from xs/src/avrdude/linuxgpio.h)0
-rw-r--r--src/avrdude/lists.c (renamed from xs/src/avrdude/lists.c)0
-rw-r--r--src/avrdude/main-standalone.c (renamed from xs/src/avrdude/main-standalone.c)0
-rw-r--r--src/avrdude/main.c (renamed from xs/src/avrdude/main.c)0
-rw-r--r--src/avrdude/my_ddk_hidsdi.h (renamed from xs/src/avrdude/my_ddk_hidsdi.h)0
-rw-r--r--src/avrdude/par.c (renamed from xs/src/avrdude/par.c)0
-rw-r--r--src/avrdude/par.h (renamed from xs/src/avrdude/par.h)0
-rw-r--r--src/avrdude/pgm.c (renamed from xs/src/avrdude/pgm.c)0
-rw-r--r--src/avrdude/pgm_type.c (renamed from xs/src/avrdude/pgm_type.c)0
-rw-r--r--src/avrdude/pickit2.c (renamed from xs/src/avrdude/pickit2.c)0
-rw-r--r--src/avrdude/pickit2.h (renamed from xs/src/avrdude/pickit2.h)0
-rw-r--r--src/avrdude/pindefs.c (renamed from xs/src/avrdude/pindefs.c)0
-rw-r--r--src/avrdude/ppi.c (renamed from xs/src/avrdude/ppi.c)0
-rw-r--r--src/avrdude/ppi.h (renamed from xs/src/avrdude/ppi.h)0
-rw-r--r--src/avrdude/ppiwin.c (renamed from xs/src/avrdude/ppiwin.c)0
-rw-r--r--src/avrdude/safemode.c (renamed from xs/src/avrdude/safemode.c)0
-rw-r--r--src/avrdude/ser_avrdoper.c (renamed from xs/src/avrdude/ser_avrdoper.c)0
-rw-r--r--src/avrdude/ser_posix.c (renamed from xs/src/avrdude/ser_posix.c)0
-rw-r--r--src/avrdude/ser_win32.c (renamed from xs/src/avrdude/ser_win32.c)0
-rw-r--r--src/avrdude/serbb.h (renamed from xs/src/avrdude/serbb.h)0
-rw-r--r--src/avrdude/serbb_posix.c (renamed from xs/src/avrdude/serbb_posix.c)0
-rw-r--r--src/avrdude/serbb_win32.c (renamed from xs/src/avrdude/serbb_win32.c)0
-rw-r--r--src/avrdude/solaris_ecpp.h (renamed from xs/src/avrdude/solaris_ecpp.h)0
-rw-r--r--src/avrdude/stk500.c (renamed from xs/src/avrdude/stk500.c)0
-rw-r--r--src/avrdude/stk500.h (renamed from xs/src/avrdude/stk500.h)0
-rw-r--r--src/avrdude/stk500_private.h (renamed from xs/src/avrdude/stk500_private.h)0
-rw-r--r--src/avrdude/stk500generic.c (renamed from xs/src/avrdude/stk500generic.c)0
-rw-r--r--src/avrdude/stk500generic.h (renamed from xs/src/avrdude/stk500generic.h)0
-rw-r--r--src/avrdude/stk500v2.c (renamed from xs/src/avrdude/stk500v2.c)0
-rw-r--r--src/avrdude/stk500v2.h (renamed from xs/src/avrdude/stk500v2.h)0
-rw-r--r--src/avrdude/stk500v2_private.h (renamed from xs/src/avrdude/stk500v2_private.h)0
-rw-r--r--src/avrdude/term.c (renamed from xs/src/avrdude/term.c)0
-rw-r--r--src/avrdude/term.h (renamed from xs/src/avrdude/term.h)0
-rw-r--r--[-rwxr-xr-x]src/avrdude/tools/build-mingw32.sh (renamed from xs/src/avrdude/tools/build-mingw32.sh)0
-rw-r--r--src/avrdude/tools/get-dw-params.xsl (renamed from xs/src/avrdude/tools/get-dw-params.xsl)0
-rw-r--r--src/avrdude/tools/get-hv-params.xsl (renamed from xs/src/avrdude/tools/get-hv-params.xsl)0
-rw-r--r--src/avrdude/tools/get-stk600-cards.xsl (renamed from xs/src/avrdude/tools/get-stk600-cards.xsl)0
-rw-r--r--src/avrdude/tools/get-stk600-devices.xsl (renamed from xs/src/avrdude/tools/get-stk600-devices.xsl)0
-rw-r--r--src/avrdude/tpi.h (renamed from xs/src/avrdude/tpi.h)0
-rw-r--r--src/avrdude/update.c (renamed from xs/src/avrdude/update.c)0
-rw-r--r--src/avrdude/usb_hidapi.c (renamed from xs/src/avrdude/usb_hidapi.c)0
-rw-r--r--src/avrdude/usb_libusb.c (renamed from xs/src/avrdude/usb_libusb.c)0
-rw-r--r--src/avrdude/usbasp.c (renamed from xs/src/avrdude/usbasp.c)0
-rw-r--r--src/avrdude/usbasp.h (renamed from xs/src/avrdude/usbasp.h)0
-rw-r--r--src/avrdude/usbdevs.h (renamed from xs/src/avrdude/usbdevs.h)0
-rw-r--r--src/avrdude/usbtiny.c (renamed from xs/src/avrdude/usbtiny.c)0
-rw-r--r--src/avrdude/usbtiny.h (renamed from xs/src/avrdude/usbtiny.h)0
-rw-r--r--src/avrdude/windows/.cvsignore (renamed from xs/src/avrdude/windows/.cvsignore)0
-rw-r--r--src/avrdude/windows/Makefile.am (renamed from xs/src/avrdude/windows/Makefile.am)0
-rw-r--r--src/avrdude/windows/getopt.c (renamed from xs/src/avrdude/windows/getopt.c)0
-rw-r--r--src/avrdude/windows/getopt.h (renamed from xs/src/avrdude/windows/getopt.h)0
-rw-r--r--src/avrdude/windows/giveio.c (renamed from xs/src/avrdude/windows/giveio.c)0
-rw-r--r--src/avrdude/windows/giveio.sys (renamed from xs/src/avrdude/windows/giveio.sys)bin5248 -> 5248 bytes
-rw-r--r--[-rwxr-xr-x]src/avrdude/windows/install_giveio.bat (renamed from xs/src/avrdude/windows/install_giveio.bat)0
-rw-r--r--src/avrdude/windows/loaddrv.c (renamed from xs/src/avrdude/windows/loaddrv.c)0
-rw-r--r--src/avrdude/windows/loaddrv.h (renamed from xs/src/avrdude/windows/loaddrv.h)0
-rw-r--r--[-rwxr-xr-x]src/avrdude/windows/remove_giveio.bat (renamed from xs/src/avrdude/windows/remove_giveio.bat)0
-rw-r--r--[-rwxr-xr-x]src/avrdude/windows/status_giveio.bat (renamed from xs/src/avrdude/windows/status_giveio.bat)0
-rw-r--r--src/avrdude/windows/unistd.cpp (renamed from xs/src/avrdude/windows/unistd.cpp)0
-rw-r--r--src/avrdude/windows/unistd.h (renamed from xs/src/avrdude/windows/unistd.h)0
-rw-r--r--src/avrdude/wiring.c (renamed from xs/src/avrdude/wiring.c)0
-rw-r--r--src/avrdude/wiring.h (renamed from xs/src/avrdude/wiring.h)0
-rw-r--r--src/boost/CMakeLists.txt20
-rw-r--r--src/boost/nowide/args.hpp (renamed from xs/src/boost/nowide/args.hpp)0
-rw-r--r--src/boost/nowide/cenv.hpp (renamed from xs/src/boost/nowide/cenv.hpp)0
-rw-r--r--src/boost/nowide/config.hpp (renamed from xs/src/boost/nowide/config.hpp)0
-rw-r--r--src/boost/nowide/convert.hpp (renamed from xs/src/boost/nowide/convert.hpp)0
-rw-r--r--src/boost/nowide/cstdio.hpp (renamed from xs/src/boost/nowide/cstdio.hpp)0
-rw-r--r--src/boost/nowide/cstdlib.hpp (renamed from xs/src/boost/nowide/cstdlib.hpp)0
-rw-r--r--src/boost/nowide/filebuf.hpp (renamed from xs/src/boost/nowide/filebuf.hpp)0
-rw-r--r--src/boost/nowide/fstream.hpp (renamed from xs/src/boost/nowide/fstream.hpp)0
-rw-r--r--src/boost/nowide/integration/filesystem.hpp (renamed from xs/src/boost/nowide/integration/filesystem.hpp)0
-rw-r--r--src/boost/nowide/iostream.cpp (renamed from xs/src/boost/nowide/iostream.cpp)0
-rw-r--r--src/boost/nowide/iostream.hpp (renamed from xs/src/boost/nowide/iostream.hpp)0
-rw-r--r--src/boost/nowide/stackstring.hpp (renamed from xs/src/boost/nowide/stackstring.hpp)0
-rw-r--r--src/boost/nowide/system.hpp (renamed from xs/src/boost/nowide/system.hpp)0
-rw-r--r--src/boost/nowide/utf8_codecvt.hpp (renamed from xs/src/boost/nowide/utf8_codecvt.hpp)0
-rw-r--r--src/boost/nowide/windows.hpp (renamed from xs/src/boost/nowide/windows.hpp)0
-rw-r--r--src/clipper/CMakeLists.txt7
-rw-r--r--src/clipper/clipper.cpp (renamed from xs/src/clipper.cpp)8360
-rw-r--r--src/clipper/clipper.hpp (renamed from xs/src/clipper.hpp)974
-rw-r--r--src/eigen/COPYING.README (renamed from xs/src/eigen/COPYING.README)0
-rw-r--r--src/eigen/Eigen/CMakeLists.txt (renamed from xs/src/eigen/Eigen/CMakeLists.txt)0
-rw-r--r--src/eigen/Eigen/Cholesky (renamed from xs/src/eigen/Eigen/Cholesky)0
-rw-r--r--src/eigen/Eigen/CholmodSupport (renamed from xs/src/eigen/Eigen/CholmodSupport)0
-rw-r--r--src/eigen/Eigen/Core (renamed from xs/src/eigen/Eigen/Core)0
-rw-r--r--src/eigen/Eigen/Dense (renamed from xs/src/eigen/Eigen/Dense)0
-rw-r--r--src/eigen/Eigen/Eigen (renamed from xs/src/eigen/Eigen/Eigen)0
-rw-r--r--src/eigen/Eigen/Eigenvalues (renamed from xs/src/eigen/Eigen/Eigenvalues)0
-rw-r--r--src/eigen/Eigen/Geometry (renamed from xs/src/eigen/Eigen/Geometry)0
-rw-r--r--src/eigen/Eigen/Householder (renamed from xs/src/eigen/Eigen/Householder)0
-rw-r--r--src/eigen/Eigen/IterativeLinearSolvers (renamed from xs/src/eigen/Eigen/IterativeLinearSolvers)0
-rw-r--r--src/eigen/Eigen/Jacobi (renamed from xs/src/eigen/Eigen/Jacobi)0
-rw-r--r--src/eigen/Eigen/LU (renamed from xs/src/eigen/Eigen/LU)0
-rw-r--r--src/eigen/Eigen/MetisSupport (renamed from xs/src/eigen/Eigen/MetisSupport)0
-rw-r--r--src/eigen/Eigen/OrderingMethods (renamed from xs/src/eigen/Eigen/OrderingMethods)0
-rw-r--r--src/eigen/Eigen/PaStiXSupport (renamed from xs/src/eigen/Eigen/PaStiXSupport)0
-rw-r--r--src/eigen/Eigen/PardisoSupport (renamed from xs/src/eigen/Eigen/PardisoSupport)0
-rw-r--r--src/eigen/Eigen/QR (renamed from xs/src/eigen/Eigen/QR)0
-rw-r--r--src/eigen/Eigen/QtAlignedMalloc (renamed from xs/src/eigen/Eigen/QtAlignedMalloc)0
-rw-r--r--src/eigen/Eigen/SPQRSupport (renamed from xs/src/eigen/Eigen/SPQRSupport)0
-rw-r--r--src/eigen/Eigen/SVD (renamed from xs/src/eigen/Eigen/SVD)0
-rw-r--r--src/eigen/Eigen/Sparse (renamed from xs/src/eigen/Eigen/Sparse)0
-rw-r--r--src/eigen/Eigen/SparseCholesky (renamed from xs/src/eigen/Eigen/SparseCholesky)0
-rw-r--r--src/eigen/Eigen/SparseCore (renamed from xs/src/eigen/Eigen/SparseCore)0
-rw-r--r--src/eigen/Eigen/SparseLU (renamed from xs/src/eigen/Eigen/SparseLU)0
-rw-r--r--src/eigen/Eigen/SparseQR (renamed from xs/src/eigen/Eigen/SparseQR)0
-rw-r--r--src/eigen/Eigen/StdDeque (renamed from xs/src/eigen/Eigen/StdDeque)0
-rw-r--r--src/eigen/Eigen/StdList (renamed from xs/src/eigen/Eigen/StdList)0
-rw-r--r--src/eigen/Eigen/StdVector (renamed from xs/src/eigen/Eigen/StdVector)0
-rw-r--r--src/eigen/Eigen/SuperLUSupport (renamed from xs/src/eigen/Eigen/SuperLUSupport)0
-rw-r--r--src/eigen/Eigen/UmfPackSupport (renamed from xs/src/eigen/Eigen/UmfPackSupport)0
-rw-r--r--src/eigen/Eigen/src/Cholesky/LDLT.h (renamed from xs/src/eigen/Eigen/src/Cholesky/LDLT.h)0
-rw-r--r--src/eigen/Eigen/src/Cholesky/LLT.h (renamed from xs/src/eigen/Eigen/src/Cholesky/LLT.h)0
-rw-r--r--src/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h (renamed from xs/src/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h)0
-rw-r--r--src/eigen/Eigen/src/CholmodSupport/CholmodSupport.h (renamed from xs/src/eigen/Eigen/src/CholmodSupport/CholmodSupport.h)0
-rw-r--r--src/eigen/Eigen/src/Core/Array.h (renamed from xs/src/eigen/Eigen/src/Core/Array.h)0
-rw-r--r--src/eigen/Eigen/src/Core/ArrayBase.h (renamed from xs/src/eigen/Eigen/src/Core/ArrayBase.h)0
-rw-r--r--src/eigen/Eigen/src/Core/ArrayWrapper.h (renamed from xs/src/eigen/Eigen/src/Core/ArrayWrapper.h)0
-rw-r--r--src/eigen/Eigen/src/Core/Assign.h (renamed from xs/src/eigen/Eigen/src/Core/Assign.h)0
-rw-r--r--src/eigen/Eigen/src/Core/AssignEvaluator.h (renamed from xs/src/eigen/Eigen/src/Core/AssignEvaluator.h)0
-rw-r--r--src/eigen/Eigen/src/Core/Assign_MKL.h (renamed from xs/src/eigen/Eigen/src/Core/Assign_MKL.h)0
-rw-r--r--src/eigen/Eigen/src/Core/BandMatrix.h (renamed from xs/src/eigen/Eigen/src/Core/BandMatrix.h)0
-rw-r--r--src/eigen/Eigen/src/Core/Block.h (renamed from xs/src/eigen/Eigen/src/Core/Block.h)0
-rw-r--r--src/eigen/Eigen/src/Core/BooleanRedux.h (renamed from xs/src/eigen/Eigen/src/Core/BooleanRedux.h)0
-rw-r--r--src/eigen/Eigen/src/Core/CommaInitializer.h (renamed from xs/src/eigen/Eigen/src/Core/CommaInitializer.h)0
-rw-r--r--src/eigen/Eigen/src/Core/ConditionEstimator.h (renamed from xs/src/eigen/Eigen/src/Core/ConditionEstimator.h)0
-rw-r--r--src/eigen/Eigen/src/Core/CoreEvaluators.h (renamed from xs/src/eigen/Eigen/src/Core/CoreEvaluators.h)0
-rw-r--r--src/eigen/Eigen/src/Core/CoreIterators.h (renamed from xs/src/eigen/Eigen/src/Core/CoreIterators.h)0
-rw-r--r--src/eigen/Eigen/src/Core/CwiseBinaryOp.h (renamed from xs/src/eigen/Eigen/src/Core/CwiseBinaryOp.h)0
-rw-r--r--src/eigen/Eigen/src/Core/CwiseNullaryOp.h (renamed from xs/src/eigen/Eigen/src/Core/CwiseNullaryOp.h)0
-rw-r--r--src/eigen/Eigen/src/Core/CwiseTernaryOp.h (renamed from xs/src/eigen/Eigen/src/Core/CwiseTernaryOp.h)0
-rw-r--r--src/eigen/Eigen/src/Core/CwiseUnaryOp.h (renamed from xs/src/eigen/Eigen/src/Core/CwiseUnaryOp.h)0
-rw-r--r--src/eigen/Eigen/src/Core/CwiseUnaryView.h (renamed from xs/src/eigen/Eigen/src/Core/CwiseUnaryView.h)0
-rw-r--r--src/eigen/Eigen/src/Core/DenseBase.h (renamed from xs/src/eigen/Eigen/src/Core/DenseBase.h)0
-rw-r--r--src/eigen/Eigen/src/Core/DenseCoeffsBase.h (renamed from xs/src/eigen/Eigen/src/Core/DenseCoeffsBase.h)0
-rw-r--r--src/eigen/Eigen/src/Core/DenseStorage.h (renamed from xs/src/eigen/Eigen/src/Core/DenseStorage.h)0
-rw-r--r--src/eigen/Eigen/src/Core/Diagonal.h (renamed from xs/src/eigen/Eigen/src/Core/Diagonal.h)0
-rw-r--r--src/eigen/Eigen/src/Core/DiagonalMatrix.h (renamed from xs/src/eigen/Eigen/src/Core/DiagonalMatrix.h)0
-rw-r--r--src/eigen/Eigen/src/Core/DiagonalProduct.h (renamed from xs/src/eigen/Eigen/src/Core/DiagonalProduct.h)0
-rw-r--r--src/eigen/Eigen/src/Core/Dot.h (renamed from xs/src/eigen/Eigen/src/Core/Dot.h)0
-rw-r--r--src/eigen/Eigen/src/Core/EigenBase.h (renamed from xs/src/eigen/Eigen/src/Core/EigenBase.h)0
-rw-r--r--src/eigen/Eigen/src/Core/ForceAlignedAccess.h (renamed from xs/src/eigen/Eigen/src/Core/ForceAlignedAccess.h)0
-rw-r--r--src/eigen/Eigen/src/Core/Fuzzy.h (renamed from xs/src/eigen/Eigen/src/Core/Fuzzy.h)0
-rw-r--r--src/eigen/Eigen/src/Core/GeneralProduct.h (renamed from xs/src/eigen/Eigen/src/Core/GeneralProduct.h)0
-rw-r--r--src/eigen/Eigen/src/Core/GenericPacketMath.h (renamed from xs/src/eigen/Eigen/src/Core/GenericPacketMath.h)0
-rw-r--r--src/eigen/Eigen/src/Core/GlobalFunctions.h (renamed from xs/src/eigen/Eigen/src/Core/GlobalFunctions.h)0
-rw-r--r--src/eigen/Eigen/src/Core/IO.h (renamed from xs/src/eigen/Eigen/src/Core/IO.h)0
-rw-r--r--src/eigen/Eigen/src/Core/Inverse.h (renamed from xs/src/eigen/Eigen/src/Core/Inverse.h)0
-rw-r--r--src/eigen/Eigen/src/Core/Map.h (renamed from xs/src/eigen/Eigen/src/Core/Map.h)0
-rw-r--r--src/eigen/Eigen/src/Core/MapBase.h (renamed from xs/src/eigen/Eigen/src/Core/MapBase.h)0
-rw-r--r--src/eigen/Eigen/src/Core/MathFunctions.h (renamed from xs/src/eigen/Eigen/src/Core/MathFunctions.h)0
-rw-r--r--src/eigen/Eigen/src/Core/MathFunctionsImpl.h (renamed from xs/src/eigen/Eigen/src/Core/MathFunctionsImpl.h)0
-rw-r--r--src/eigen/Eigen/src/Core/Matrix.h (renamed from xs/src/eigen/Eigen/src/Core/Matrix.h)0
-rw-r--r--src/eigen/Eigen/src/Core/MatrixBase.h (renamed from xs/src/eigen/Eigen/src/Core/MatrixBase.h)0
-rw-r--r--src/eigen/Eigen/src/Core/NestByValue.h (renamed from xs/src/eigen/Eigen/src/Core/NestByValue.h)0
-rw-r--r--src/eigen/Eigen/src/Core/NoAlias.h (renamed from xs/src/eigen/Eigen/src/Core/NoAlias.h)0
-rw-r--r--src/eigen/Eigen/src/Core/NumTraits.h (renamed from xs/src/eigen/Eigen/src/Core/NumTraits.h)0
-rw-r--r--src/eigen/Eigen/src/Core/PermutationMatrix.h (renamed from xs/src/eigen/Eigen/src/Core/PermutationMatrix.h)0
-rw-r--r--src/eigen/Eigen/src/Core/PlainObjectBase.h (renamed from xs/src/eigen/Eigen/src/Core/PlainObjectBase.h)0
-rw-r--r--src/eigen/Eigen/src/Core/Product.h (renamed from xs/src/eigen/Eigen/src/Core/Product.h)0
-rw-r--r--src/eigen/Eigen/src/Core/ProductEvaluators.h (renamed from xs/src/eigen/Eigen/src/Core/ProductEvaluators.h)0
-rw-r--r--src/eigen/Eigen/src/Core/Random.h (renamed from xs/src/eigen/Eigen/src/Core/Random.h)0
-rw-r--r--src/eigen/Eigen/src/Core/Redux.h (renamed from xs/src/eigen/Eigen/src/Core/Redux.h)0
-rw-r--r--src/eigen/Eigen/src/Core/Ref.h (renamed from xs/src/eigen/Eigen/src/Core/Ref.h)0
-rw-r--r--src/eigen/Eigen/src/Core/Replicate.h (renamed from xs/src/eigen/Eigen/src/Core/Replicate.h)0
-rw-r--r--src/eigen/Eigen/src/Core/ReturnByValue.h (renamed from xs/src/eigen/Eigen/src/Core/ReturnByValue.h)0
-rw-r--r--src/eigen/Eigen/src/Core/Reverse.h (renamed from xs/src/eigen/Eigen/src/Core/Reverse.h)0
-rw-r--r--src/eigen/Eigen/src/Core/Select.h (renamed from xs/src/eigen/Eigen/src/Core/Select.h)0
-rw-r--r--src/eigen/Eigen/src/Core/SelfAdjointView.h (renamed from xs/src/eigen/Eigen/src/Core/SelfAdjointView.h)0
-rw-r--r--src/eigen/Eigen/src/Core/SelfCwiseBinaryOp.h (renamed from xs/src/eigen/Eigen/src/Core/SelfCwiseBinaryOp.h)0
-rw-r--r--src/eigen/Eigen/src/Core/Solve.h (renamed from xs/src/eigen/Eigen/src/Core/Solve.h)0
-rw-r--r--src/eigen/Eigen/src/Core/SolveTriangular.h (renamed from xs/src/eigen/Eigen/src/Core/SolveTriangular.h)0
-rw-r--r--src/eigen/Eigen/src/Core/SolverBase.h (renamed from xs/src/eigen/Eigen/src/Core/SolverBase.h)0
-rw-r--r--src/eigen/Eigen/src/Core/StableNorm.h (renamed from xs/src/eigen/Eigen/src/Core/StableNorm.h)0
-rw-r--r--src/eigen/Eigen/src/Core/Stride.h (renamed from xs/src/eigen/Eigen/src/Core/Stride.h)0
-rw-r--r--src/eigen/Eigen/src/Core/Swap.h (renamed from xs/src/eigen/Eigen/src/Core/Swap.h)0
-rw-r--r--src/eigen/Eigen/src/Core/Transpose.h (renamed from xs/src/eigen/Eigen/src/Core/Transpose.h)0
-rw-r--r--src/eigen/Eigen/src/Core/Transpositions.h (renamed from xs/src/eigen/Eigen/src/Core/Transpositions.h)0
-rw-r--r--src/eigen/Eigen/src/Core/TriangularMatrix.h (renamed from xs/src/eigen/Eigen/src/Core/TriangularMatrix.h)0
-rw-r--r--src/eigen/Eigen/src/Core/VectorBlock.h (renamed from xs/src/eigen/Eigen/src/Core/VectorBlock.h)0
-rw-r--r--src/eigen/Eigen/src/Core/VectorwiseOp.h (renamed from xs/src/eigen/Eigen/src/Core/VectorwiseOp.h)0
-rw-r--r--src/eigen/Eigen/src/Core/Visitor.h (renamed from xs/src/eigen/Eigen/src/Core/Visitor.h)0
-rw-r--r--src/eigen/Eigen/src/Core/arch/AVX/Complex.h (renamed from xs/src/eigen/Eigen/src/Core/arch/AVX/Complex.h)0
-rw-r--r--src/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h (renamed from xs/src/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h)0
-rw-r--r--src/eigen/Eigen/src/Core/arch/AVX/PacketMath.h (renamed from xs/src/eigen/Eigen/src/Core/arch/AVX/PacketMath.h)0
-rw-r--r--src/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h (renamed from xs/src/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h)0
-rw-r--r--src/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h (renamed from xs/src/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h)0
-rw-r--r--src/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h (renamed from xs/src/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h)0
-rw-r--r--src/eigen/Eigen/src/Core/arch/AltiVec/Complex.h (renamed from xs/src/eigen/Eigen/src/Core/arch/AltiVec/Complex.h)0
-rw-r--r--src/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h (renamed from xs/src/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h)0
-rw-r--r--src/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h (renamed from xs/src/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h)0
-rw-r--r--src/eigen/Eigen/src/Core/arch/CUDA/Complex.h (renamed from xs/src/eigen/Eigen/src/Core/arch/CUDA/Complex.h)0
-rw-r--r--src/eigen/Eigen/src/Core/arch/CUDA/Half.h (renamed from xs/src/eigen/Eigen/src/Core/arch/CUDA/Half.h)0
-rw-r--r--src/eigen/Eigen/src/Core/arch/CUDA/MathFunctions.h (renamed from xs/src/eigen/Eigen/src/Core/arch/CUDA/MathFunctions.h)0
-rw-r--r--src/eigen/Eigen/src/Core/arch/CUDA/PacketMath.h (renamed from xs/src/eigen/Eigen/src/Core/arch/CUDA/PacketMath.h)0
-rw-r--r--src/eigen/Eigen/src/Core/arch/CUDA/PacketMathHalf.h (renamed from xs/src/eigen/Eigen/src/Core/arch/CUDA/PacketMathHalf.h)0
-rw-r--r--src/eigen/Eigen/src/Core/arch/CUDA/TypeCasting.h (renamed from xs/src/eigen/Eigen/src/Core/arch/CUDA/TypeCasting.h)0
-rw-r--r--src/eigen/Eigen/src/Core/arch/Default/ConjHelper.h (renamed from xs/src/eigen/Eigen/src/Core/arch/Default/ConjHelper.h)0
-rw-r--r--src/eigen/Eigen/src/Core/arch/Default/Settings.h (renamed from xs/src/eigen/Eigen/src/Core/arch/Default/Settings.h)0
-rw-r--r--src/eigen/Eigen/src/Core/arch/NEON/Complex.h (renamed from xs/src/eigen/Eigen/src/Core/arch/NEON/Complex.h)0
-rw-r--r--src/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h (renamed from xs/src/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h)0
-rw-r--r--src/eigen/Eigen/src/Core/arch/NEON/PacketMath.h (renamed from xs/src/eigen/Eigen/src/Core/arch/NEON/PacketMath.h)0
-rw-r--r--src/eigen/Eigen/src/Core/arch/SSE/Complex.h (renamed from xs/src/eigen/Eigen/src/Core/arch/SSE/Complex.h)0
-rw-r--r--src/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h (renamed from xs/src/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h)0
-rw-r--r--src/eigen/Eigen/src/Core/arch/SSE/PacketMath.h (renamed from xs/src/eigen/Eigen/src/Core/arch/SSE/PacketMath.h)0
-rw-r--r--src/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h (renamed from xs/src/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h)0
-rw-r--r--src/eigen/Eigen/src/Core/arch/ZVector/Complex.h (renamed from xs/src/eigen/Eigen/src/Core/arch/ZVector/Complex.h)0
-rw-r--r--src/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h (renamed from xs/src/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h)0
-rw-r--r--src/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h (renamed from xs/src/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h)0
-rw-r--r--src/eigen/Eigen/src/Core/functors/AssignmentFunctors.h (renamed from xs/src/eigen/Eigen/src/Core/functors/AssignmentFunctors.h)0
-rw-r--r--src/eigen/Eigen/src/Core/functors/BinaryFunctors.h (renamed from xs/src/eigen/Eigen/src/Core/functors/BinaryFunctors.h)0
-rw-r--r--src/eigen/Eigen/src/Core/functors/NullaryFunctors.h (renamed from xs/src/eigen/Eigen/src/Core/functors/NullaryFunctors.h)0
-rw-r--r--src/eigen/Eigen/src/Core/functors/StlFunctors.h (renamed from xs/src/eigen/Eigen/src/Core/functors/StlFunctors.h)0
-rw-r--r--src/eigen/Eigen/src/Core/functors/TernaryFunctors.h (renamed from xs/src/eigen/Eigen/src/Core/functors/TernaryFunctors.h)0
-rw-r--r--src/eigen/Eigen/src/Core/functors/UnaryFunctors.h (renamed from xs/src/eigen/Eigen/src/Core/functors/UnaryFunctors.h)0
-rw-r--r--src/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h (renamed from xs/src/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h)0
-rw-r--r--src/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h (renamed from xs/src/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h)0
-rw-r--r--src/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h (renamed from xs/src/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h)0
-rw-r--r--src/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h (renamed from xs/src/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h)0
-rw-r--r--src/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h (renamed from xs/src/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h)0
-rw-r--r--src/eigen/Eigen/src/Core/products/GeneralMatrixVector.h (renamed from xs/src/eigen/Eigen/src/Core/products/GeneralMatrixVector.h)0
-rw-r--r--src/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h (renamed from xs/src/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h)0
-rw-r--r--src/eigen/Eigen/src/Core/products/Parallelizer.h (renamed from xs/src/eigen/Eigen/src/Core/products/Parallelizer.h)0
-rw-r--r--src/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h (renamed from xs/src/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h)0
-rw-r--r--src/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h (renamed from xs/src/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h)0
-rw-r--r--src/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h (renamed from xs/src/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h)0
-rw-r--r--src/eigen/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h (renamed from xs/src/eigen/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h)0
-rw-r--r--src/eigen/Eigen/src/Core/products/SelfadjointProduct.h (renamed from xs/src/eigen/Eigen/src/Core/products/SelfadjointProduct.h)0
-rw-r--r--src/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h (renamed from xs/src/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h)0
-rw-r--r--src/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h (renamed from xs/src/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h)0
-rw-r--r--src/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h (renamed from xs/src/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h)0
-rw-r--r--src/eigen/Eigen/src/Core/products/TriangularMatrixVector.h (renamed from xs/src/eigen/Eigen/src/Core/products/TriangularMatrixVector.h)0
-rw-r--r--src/eigen/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h (renamed from xs/src/eigen/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h)0
-rw-r--r--src/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h (renamed from xs/src/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h)0
-rw-r--r--src/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h (renamed from xs/src/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h)0
-rw-r--r--src/eigen/Eigen/src/Core/products/TriangularSolverVector.h (renamed from xs/src/eigen/Eigen/src/Core/products/TriangularSolverVector.h)0
-rw-r--r--src/eigen/Eigen/src/Core/util/BlasUtil.h (renamed from xs/src/eigen/Eigen/src/Core/util/BlasUtil.h)0
-rw-r--r--src/eigen/Eigen/src/Core/util/Constants.h (renamed from xs/src/eigen/Eigen/src/Core/util/Constants.h)0
-rw-r--r--src/eigen/Eigen/src/Core/util/DisableStupidWarnings.h (renamed from xs/src/eigen/Eigen/src/Core/util/DisableStupidWarnings.h)0
-rw-r--r--src/eigen/Eigen/src/Core/util/ForwardDeclarations.h (renamed from xs/src/eigen/Eigen/src/Core/util/ForwardDeclarations.h)0
-rw-r--r--src/eigen/Eigen/src/Core/util/MKL_support.h (renamed from xs/src/eigen/Eigen/src/Core/util/MKL_support.h)0
-rw-r--r--src/eigen/Eigen/src/Core/util/Macros.h (renamed from xs/src/eigen/Eigen/src/Core/util/Macros.h)0
-rw-r--r--src/eigen/Eigen/src/Core/util/Memory.h (renamed from xs/src/eigen/Eigen/src/Core/util/Memory.h)0
-rw-r--r--src/eigen/Eigen/src/Core/util/Meta.h (renamed from xs/src/eigen/Eigen/src/Core/util/Meta.h)0
-rw-r--r--src/eigen/Eigen/src/Core/util/NonMPL2.h (renamed from xs/src/eigen/Eigen/src/Core/util/NonMPL2.h)0
-rw-r--r--src/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h (renamed from xs/src/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h)0
-rw-r--r--src/eigen/Eigen/src/Core/util/StaticAssert.h (renamed from xs/src/eigen/Eigen/src/Core/util/StaticAssert.h)0
-rw-r--r--src/eigen/Eigen/src/Core/util/XprHelper.h (renamed from xs/src/eigen/Eigen/src/Core/util/XprHelper.h)0
-rw-r--r--src/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h (renamed from xs/src/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h)0
-rw-r--r--src/eigen/Eigen/src/Eigenvalues/ComplexSchur.h (renamed from xs/src/eigen/Eigen/src/Eigenvalues/ComplexSchur.h)0
-rw-r--r--src/eigen/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h (renamed from xs/src/eigen/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h)0
-rw-r--r--src/eigen/Eigen/src/Eigenvalues/EigenSolver.h (renamed from xs/src/eigen/Eigen/src/Eigenvalues/EigenSolver.h)0
-rw-r--r--src/eigen/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h (renamed from xs/src/eigen/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h)0
-rw-r--r--src/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h (renamed from xs/src/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h)0
-rw-r--r--src/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h (renamed from xs/src/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h)0
-rw-r--r--src/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h (renamed from xs/src/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h)0
-rw-r--r--src/eigen/Eigen/src/Eigenvalues/RealQZ.h (renamed from xs/src/eigen/Eigen/src/Eigenvalues/RealQZ.h)0
-rw-r--r--src/eigen/Eigen/src/Eigenvalues/RealSchur.h (renamed from xs/src/eigen/Eigen/src/Eigenvalues/RealSchur.h)0
-rw-r--r--src/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h (renamed from xs/src/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h)0
-rw-r--r--src/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h (renamed from xs/src/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h)0
-rw-r--r--src/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h (renamed from xs/src/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h)0
-rw-r--r--src/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h (renamed from xs/src/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h)0
-rw-r--r--src/eigen/Eigen/src/Geometry/AlignedBox.h (renamed from xs/src/eigen/Eigen/src/Geometry/AlignedBox.h)0
-rw-r--r--src/eigen/Eigen/src/Geometry/AngleAxis.h (renamed from xs/src/eigen/Eigen/src/Geometry/AngleAxis.h)0
-rw-r--r--src/eigen/Eigen/src/Geometry/EulerAngles.h (renamed from xs/src/eigen/Eigen/src/Geometry/EulerAngles.h)0
-rw-r--r--src/eigen/Eigen/src/Geometry/Homogeneous.h (renamed from xs/src/eigen/Eigen/src/Geometry/Homogeneous.h)0
-rw-r--r--src/eigen/Eigen/src/Geometry/Hyperplane.h (renamed from xs/src/eigen/Eigen/src/Geometry/Hyperplane.h)0
-rw-r--r--src/eigen/Eigen/src/Geometry/OrthoMethods.h (renamed from xs/src/eigen/Eigen/src/Geometry/OrthoMethods.h)0
-rw-r--r--src/eigen/Eigen/src/Geometry/ParametrizedLine.h (renamed from xs/src/eigen/Eigen/src/Geometry/ParametrizedLine.h)0
-rw-r--r--src/eigen/Eigen/src/Geometry/Quaternion.h (renamed from xs/src/eigen/Eigen/src/Geometry/Quaternion.h)0
-rw-r--r--src/eigen/Eigen/src/Geometry/Rotation2D.h (renamed from xs/src/eigen/Eigen/src/Geometry/Rotation2D.h)0
-rw-r--r--src/eigen/Eigen/src/Geometry/RotationBase.h (renamed from xs/src/eigen/Eigen/src/Geometry/RotationBase.h)0
-rw-r--r--src/eigen/Eigen/src/Geometry/Scaling.h (renamed from xs/src/eigen/Eigen/src/Geometry/Scaling.h)0
-rw-r--r--src/eigen/Eigen/src/Geometry/Transform.h (renamed from xs/src/eigen/Eigen/src/Geometry/Transform.h)0
-rw-r--r--src/eigen/Eigen/src/Geometry/Translation.h (renamed from xs/src/eigen/Eigen/src/Geometry/Translation.h)0
-rw-r--r--src/eigen/Eigen/src/Geometry/Umeyama.h (renamed from xs/src/eigen/Eigen/src/Geometry/Umeyama.h)0
-rw-r--r--src/eigen/Eigen/src/Geometry/arch/Geometry_SSE.h (renamed from xs/src/eigen/Eigen/src/Geometry/arch/Geometry_SSE.h)0
-rw-r--r--src/eigen/Eigen/src/Householder/BlockHouseholder.h (renamed from xs/src/eigen/Eigen/src/Householder/BlockHouseholder.h)0
-rw-r--r--src/eigen/Eigen/src/Householder/Householder.h (renamed from xs/src/eigen/Eigen/src/Householder/Householder.h)0
-rw-r--r--src/eigen/Eigen/src/Householder/HouseholderSequence.h (renamed from xs/src/eigen/Eigen/src/Householder/HouseholderSequence.h)0
-rw-r--r--src/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h (renamed from xs/src/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h)0
-rw-r--r--src/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h (renamed from xs/src/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h)0
-rw-r--r--src/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h (renamed from xs/src/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h)0
-rw-r--r--src/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h (renamed from xs/src/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h)0
-rw-r--r--src/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h (renamed from xs/src/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h)0
-rw-r--r--src/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h (renamed from xs/src/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h)0
-rw-r--r--src/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h (renamed from xs/src/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h)0
-rw-r--r--src/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h (renamed from xs/src/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h)0
-rw-r--r--src/eigen/Eigen/src/Jacobi/Jacobi.h (renamed from xs/src/eigen/Eigen/src/Jacobi/Jacobi.h)0
-rw-r--r--src/eigen/Eigen/src/LU/Determinant.h (renamed from xs/src/eigen/Eigen/src/LU/Determinant.h)0
-rw-r--r--src/eigen/Eigen/src/LU/FullPivLU.h (renamed from xs/src/eigen/Eigen/src/LU/FullPivLU.h)0
-rw-r--r--src/eigen/Eigen/src/LU/InverseImpl.h (renamed from xs/src/eigen/Eigen/src/LU/InverseImpl.h)0
-rw-r--r--src/eigen/Eigen/src/LU/PartialPivLU.h (renamed from xs/src/eigen/Eigen/src/LU/PartialPivLU.h)0
-rw-r--r--src/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h (renamed from xs/src/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h)0
-rw-r--r--src/eigen/Eigen/src/LU/arch/Inverse_SSE.h (renamed from xs/src/eigen/Eigen/src/LU/arch/Inverse_SSE.h)0
-rw-r--r--src/eigen/Eigen/src/MetisSupport/MetisSupport.h (renamed from xs/src/eigen/Eigen/src/MetisSupport/MetisSupport.h)0
-rw-r--r--src/eigen/Eigen/src/OrderingMethods/Amd.h (renamed from xs/src/eigen/Eigen/src/OrderingMethods/Amd.h)0
-rw-r--r--src/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h (renamed from xs/src/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h)0
-rw-r--r--src/eigen/Eigen/src/OrderingMethods/Ordering.h (renamed from xs/src/eigen/Eigen/src/OrderingMethods/Ordering.h)0
-rw-r--r--src/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h (renamed from xs/src/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h)0
-rw-r--r--src/eigen/Eigen/src/PardisoSupport/PardisoSupport.h (renamed from xs/src/eigen/Eigen/src/PardisoSupport/PardisoSupport.h)0
-rw-r--r--src/eigen/Eigen/src/QR/ColPivHouseholderQR.h (renamed from xs/src/eigen/Eigen/src/QR/ColPivHouseholderQR.h)0
-rw-r--r--src/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h (renamed from xs/src/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h)0
-rw-r--r--src/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h (renamed from xs/src/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h)0
-rw-r--r--src/eigen/Eigen/src/QR/FullPivHouseholderQR.h (renamed from xs/src/eigen/Eigen/src/QR/FullPivHouseholderQR.h)0
-rw-r--r--src/eigen/Eigen/src/QR/HouseholderQR.h (renamed from xs/src/eigen/Eigen/src/QR/HouseholderQR.h)0
-rw-r--r--src/eigen/Eigen/src/QR/HouseholderQR_LAPACKE.h (renamed from xs/src/eigen/Eigen/src/QR/HouseholderQR_LAPACKE.h)0
-rw-r--r--src/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h (renamed from xs/src/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h)0
-rw-r--r--src/eigen/Eigen/src/SVD/BDCSVD.h (renamed from xs/src/eigen/Eigen/src/SVD/BDCSVD.h)0
-rw-r--r--src/eigen/Eigen/src/SVD/JacobiSVD.h (renamed from xs/src/eigen/Eigen/src/SVD/JacobiSVD.h)0
-rw-r--r--src/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h (renamed from xs/src/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h)0
-rw-r--r--src/eigen/Eigen/src/SVD/SVDBase.h (renamed from xs/src/eigen/Eigen/src/SVD/SVDBase.h)0
-rw-r--r--src/eigen/Eigen/src/SVD/UpperBidiagonalization.h (renamed from xs/src/eigen/Eigen/src/SVD/UpperBidiagonalization.h)0
-rw-r--r--src/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h (renamed from xs/src/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h)0
-rw-r--r--src/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h (renamed from xs/src/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h)0
-rw-r--r--src/eigen/Eigen/src/SparseCore/AmbiVector.h (renamed from xs/src/eigen/Eigen/src/SparseCore/AmbiVector.h)0
-rw-r--r--src/eigen/Eigen/src/SparseCore/CompressedStorage.h (renamed from xs/src/eigen/Eigen/src/SparseCore/CompressedStorage.h)0
-rw-r--r--src/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h (renamed from xs/src/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h)0
-rw-r--r--src/eigen/Eigen/src/SparseCore/MappedSparseMatrix.h (renamed from xs/src/eigen/Eigen/src/SparseCore/MappedSparseMatrix.h)0
-rw-r--r--src/eigen/Eigen/src/SparseCore/SparseAssign.h (renamed from xs/src/eigen/Eigen/src/SparseCore/SparseAssign.h)0
-rw-r--r--src/eigen/Eigen/src/SparseCore/SparseBlock.h (renamed from xs/src/eigen/Eigen/src/SparseCore/SparseBlock.h)0
-rw-r--r--src/eigen/Eigen/src/SparseCore/SparseColEtree.h (renamed from xs/src/eigen/Eigen/src/SparseCore/SparseColEtree.h)0
-rw-r--r--src/eigen/Eigen/src/SparseCore/SparseCompressedBase.h (renamed from xs/src/eigen/Eigen/src/SparseCore/SparseCompressedBase.h)0
-rw-r--r--src/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h (renamed from xs/src/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h)0
-rw-r--r--src/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h (renamed from xs/src/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h)0
-rw-r--r--src/eigen/Eigen/src/SparseCore/SparseDenseProduct.h (renamed from xs/src/eigen/Eigen/src/SparseCore/SparseDenseProduct.h)0
-rw-r--r--src/eigen/Eigen/src/SparseCore/SparseDiagonalProduct.h (renamed from xs/src/eigen/Eigen/src/SparseCore/SparseDiagonalProduct.h)0
-rw-r--r--src/eigen/Eigen/src/SparseCore/SparseDot.h (renamed from xs/src/eigen/Eigen/src/SparseCore/SparseDot.h)0
-rw-r--r--src/eigen/Eigen/src/SparseCore/SparseFuzzy.h (renamed from xs/src/eigen/Eigen/src/SparseCore/SparseFuzzy.h)0
-rw-r--r--src/eigen/Eigen/src/SparseCore/SparseMap.h (renamed from xs/src/eigen/Eigen/src/SparseCore/SparseMap.h)0
-rw-r--r--src/eigen/Eigen/src/SparseCore/SparseMatrix.h (renamed from xs/src/eigen/Eigen/src/SparseCore/SparseMatrix.h)0
-rw-r--r--src/eigen/Eigen/src/SparseCore/SparseMatrixBase.h (renamed from xs/src/eigen/Eigen/src/SparseCore/SparseMatrixBase.h)0
-rw-r--r--src/eigen/Eigen/src/SparseCore/SparsePermutation.h (renamed from xs/src/eigen/Eigen/src/SparseCore/SparsePermutation.h)0
-rw-r--r--src/eigen/Eigen/src/SparseCore/SparseProduct.h (renamed from xs/src/eigen/Eigen/src/SparseCore/SparseProduct.h)0
-rw-r--r--src/eigen/Eigen/src/SparseCore/SparseRedux.h (renamed from xs/src/eigen/Eigen/src/SparseCore/SparseRedux.h)0
-rw-r--r--src/eigen/Eigen/src/SparseCore/SparseRef.h (renamed from xs/src/eigen/Eigen/src/SparseCore/SparseRef.h)0
-rw-r--r--src/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h (renamed from xs/src/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h)0
-rw-r--r--src/eigen/Eigen/src/SparseCore/SparseSolverBase.h (renamed from xs/src/eigen/Eigen/src/SparseCore/SparseSolverBase.h)0
-rw-r--r--src/eigen/Eigen/src/SparseCore/SparseSparseProductWithPruning.h (renamed from xs/src/eigen/Eigen/src/SparseCore/SparseSparseProductWithPruning.h)0
-rw-r--r--src/eigen/Eigen/src/SparseCore/SparseTranspose.h (renamed from xs/src/eigen/Eigen/src/SparseCore/SparseTranspose.h)0
-rw-r--r--src/eigen/Eigen/src/SparseCore/SparseTriangularView.h (renamed from xs/src/eigen/Eigen/src/SparseCore/SparseTriangularView.h)0
-rw-r--r--src/eigen/Eigen/src/SparseCore/SparseUtil.h (renamed from xs/src/eigen/Eigen/src/SparseCore/SparseUtil.h)0
-rw-r--r--src/eigen/Eigen/src/SparseCore/SparseVector.h (renamed from xs/src/eigen/Eigen/src/SparseCore/SparseVector.h)0
-rw-r--r--src/eigen/Eigen/src/SparseCore/SparseView.h (renamed from xs/src/eigen/Eigen/src/SparseCore/SparseView.h)0
-rw-r--r--src/eigen/Eigen/src/SparseCore/TriangularSolver.h (renamed from xs/src/eigen/Eigen/src/SparseCore/TriangularSolver.h)0
-rw-r--r--src/eigen/Eigen/src/SparseLU/SparseLU.h (renamed from xs/src/eigen/Eigen/src/SparseLU/SparseLU.h)0
-rw-r--r--src/eigen/Eigen/src/SparseLU/SparseLUImpl.h (renamed from xs/src/eigen/Eigen/src/SparseLU/SparseLUImpl.h)0
-rw-r--r--src/eigen/Eigen/src/SparseLU/SparseLU_Memory.h (renamed from xs/src/eigen/Eigen/src/SparseLU/SparseLU_Memory.h)0
-rw-r--r--src/eigen/Eigen/src/SparseLU/SparseLU_Structs.h (renamed from xs/src/eigen/Eigen/src/SparseLU/SparseLU_Structs.h)0
-rw-r--r--src/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h (renamed from xs/src/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h)0
-rw-r--r--src/eigen/Eigen/src/SparseLU/SparseLU_Utils.h (renamed from xs/src/eigen/Eigen/src/SparseLU/SparseLU_Utils.h)0
-rw-r--r--src/eigen/Eigen/src/SparseLU/SparseLU_column_bmod.h (renamed from xs/src/eigen/Eigen/src/SparseLU/SparseLU_column_bmod.h)0
-rw-r--r--src/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h (renamed from xs/src/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h)0
-rw-r--r--src/eigen/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h (renamed from xs/src/eigen/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h)0
-rw-r--r--src/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h (renamed from xs/src/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h)0
-rw-r--r--src/eigen/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h (renamed from xs/src/eigen/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h)0
-rw-r--r--src/eigen/Eigen/src/SparseLU/SparseLU_kernel_bmod.h (renamed from xs/src/eigen/Eigen/src/SparseLU/SparseLU_kernel_bmod.h)0
-rw-r--r--src/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h (renamed from xs/src/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h)0
-rw-r--r--src/eigen/Eigen/src/SparseLU/SparseLU_panel_dfs.h (renamed from xs/src/eigen/Eigen/src/SparseLU/SparseLU_panel_dfs.h)0
-rw-r--r--src/eigen/Eigen/src/SparseLU/SparseLU_pivotL.h (renamed from xs/src/eigen/Eigen/src/SparseLU/SparseLU_pivotL.h)0
-rw-r--r--src/eigen/Eigen/src/SparseLU/SparseLU_pruneL.h (renamed from xs/src/eigen/Eigen/src/SparseLU/SparseLU_pruneL.h)0
-rw-r--r--src/eigen/Eigen/src/SparseLU/SparseLU_relax_snode.h (renamed from xs/src/eigen/Eigen/src/SparseLU/SparseLU_relax_snode.h)0
-rw-r--r--src/eigen/Eigen/src/SparseQR/SparseQR.h (renamed from xs/src/eigen/Eigen/src/SparseQR/SparseQR.h)0
-rw-r--r--src/eigen/Eigen/src/StlSupport/StdDeque.h (renamed from xs/src/eigen/Eigen/src/StlSupport/StdDeque.h)0
-rw-r--r--src/eigen/Eigen/src/StlSupport/StdList.h (renamed from xs/src/eigen/Eigen/src/StlSupport/StdList.h)0
-rw-r--r--src/eigen/Eigen/src/StlSupport/StdVector.h (renamed from xs/src/eigen/Eigen/src/StlSupport/StdVector.h)0
-rw-r--r--src/eigen/Eigen/src/StlSupport/details.h (renamed from xs/src/eigen/Eigen/src/StlSupport/details.h)0
-rw-r--r--src/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h (renamed from xs/src/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h)0
-rw-r--r--src/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h (renamed from xs/src/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h)0
-rw-r--r--src/eigen/Eigen/src/misc/Image.h (renamed from xs/src/eigen/Eigen/src/misc/Image.h)0
-rw-r--r--src/eigen/Eigen/src/misc/Kernel.h (renamed from xs/src/eigen/Eigen/src/misc/Kernel.h)0
-rw-r--r--src/eigen/Eigen/src/misc/RealSvd2x2.h (renamed from xs/src/eigen/Eigen/src/misc/RealSvd2x2.h)0
-rw-r--r--src/eigen/Eigen/src/misc/blas.h (renamed from xs/src/eigen/Eigen/src/misc/blas.h)0
-rw-r--r--src/eigen/Eigen/src/misc/lapack.h (renamed from xs/src/eigen/Eigen/src/misc/lapack.h)0
-rw-r--r--src/eigen/Eigen/src/misc/lapacke.h (renamed from xs/src/eigen/Eigen/src/misc/lapacke.h)0
-rw-r--r--src/eigen/Eigen/src/misc/lapacke_mangling.h (renamed from xs/src/eigen/Eigen/src/misc/lapacke_mangling.h)0
-rw-r--r--src/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h (renamed from xs/src/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h)0
-rw-r--r--src/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h (renamed from xs/src/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h)0
-rw-r--r--src/eigen/Eigen/src/plugins/BlockMethods.h (renamed from xs/src/eigen/Eigen/src/plugins/BlockMethods.h)0
-rw-r--r--src/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h (renamed from xs/src/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h)0
-rw-r--r--src/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.h (renamed from xs/src/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.h)0
-rw-r--r--src/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h (renamed from xs/src/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h)0
-rw-r--r--src/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h (renamed from xs/src/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h)0
-rw-r--r--src/eigen/README.md (renamed from xs/src/eigen/README.md)0
-rw-r--r--src/expat/COPYING (renamed from xs/src/expat/COPYING)0
-rw-r--r--src/expat/README (renamed from xs/src/expat/README)0
-rw-r--r--src/expat/ascii.h (renamed from xs/src/expat/ascii.h)0
-rw-r--r--src/expat/asciitab.h (renamed from xs/src/expat/asciitab.h)0
-rw-r--r--src/expat/expat.h (renamed from xs/src/expat/expat.h)0
-rw-r--r--src/expat/expat_config.h (renamed from xs/src/expat/expat_config.h)0
-rw-r--r--src/expat/expat_external.h (renamed from xs/src/expat/expat_external.h)0
-rw-r--r--src/expat/iasciitab.h (renamed from xs/src/expat/iasciitab.h)0
-rw-r--r--src/expat/internal.h (renamed from xs/src/expat/internal.h)0
-rw-r--r--src/expat/latin1tab.h (renamed from xs/src/expat/latin1tab.h)0
-rw-r--r--src/expat/nametab.h (renamed from xs/src/expat/nametab.h)0
-rw-r--r--src/expat/utf8tab.h (renamed from xs/src/expat/utf8tab.h)0
-rw-r--r--src/expat/xmlparse.c (renamed from xs/src/expat/xmlparse.c)0
-rw-r--r--src/expat/xmlrole.c (renamed from xs/src/expat/xmlrole.c)0
-rw-r--r--src/expat/xmlrole.h (renamed from xs/src/expat/xmlrole.h)0
-rw-r--r--src/expat/xmltok.c (renamed from xs/src/expat/xmltok.c)0
-rw-r--r--src/expat/xmltok.h (renamed from xs/src/expat/xmltok.h)0
-rw-r--r--src/expat/xmltok_impl.h (renamed from xs/src/expat/xmltok_impl.h)0
-rw-r--r--src/expat/xmltok_impl.inc (renamed from xs/src/expat/xmltok_impl.inc)0
-rw-r--r--src/expat/xmltok_ns.inc (renamed from xs/src/expat/xmltok_ns.inc)0
-rw-r--r--src/glew/LICENSE.txt (renamed from xs/src/glew/LICENSE.txt)0
-rw-r--r--src/glew/README.md (renamed from xs/src/glew/README.md)0
-rw-r--r--src/glew/include/GL/glew.h (renamed from xs/src/glew/include/GL/glew.h)0
-rw-r--r--src/glew/include/GL/glxew.h (renamed from xs/src/glew/include/GL/glxew.h)0
-rw-r--r--src/glew/include/GL/wglew.h (renamed from xs/src/glew/include/GL/wglew.h)0
-rw-r--r--src/glew/src/glew.c (renamed from xs/src/glew/src/glew.c)0
-rw-r--r--src/libnest2d/CMakeLists.txt (renamed from xs/src/libnest2d/CMakeLists.txt)0
-rw-r--r--src/libnest2d/LICENSE.txt (renamed from xs/src/libnest2d/LICENSE.txt)0
-rw-r--r--src/libnest2d/README.md (renamed from xs/src/libnest2d/README.md)0
-rw-r--r--src/libnest2d/cmake_modules/DownloadNLopt.cmake (renamed from xs/src/libnest2d/cmake_modules/DownloadNLopt.cmake)0
-rw-r--r--src/libnest2d/cmake_modules/DownloadProject.CMakeLists.cmake.in (renamed from xs/src/libnest2d/cmake_modules/DownloadProject.CMakeLists.cmake.in)0
-rw-r--r--src/libnest2d/cmake_modules/DownloadProject.cmake (renamed from xs/src/libnest2d/cmake_modules/DownloadProject.cmake)0
-rw-r--r--src/libnest2d/cmake_modules/FindClipper.cmake (renamed from xs/src/libnest2d/cmake_modules/FindClipper.cmake)0
-rw-r--r--src/libnest2d/cmake_modules/FindNLopt.cmake (renamed from xs/src/libnest2d/cmake_modules/FindNLopt.cmake)0
-rw-r--r--src/libnest2d/cmake_modules/FindTBB.cmake (renamed from xs/src/libnest2d/cmake_modules/FindTBB.cmake)0
-rw-r--r--src/libnest2d/examples/main.cpp (renamed from xs/src/libnest2d/examples/main.cpp)0
-rw-r--r--src/libnest2d/libnest2d.h (renamed from xs/src/libnest2d/libnest2d.h)0
-rw-r--r--src/libnest2d/libnest2d/boost_alg.hpp (renamed from xs/src/libnest2d/libnest2d/boost_alg.hpp)0
-rw-r--r--src/libnest2d/libnest2d/clipper_backend/CMakeLists.txt (renamed from xs/src/libnest2d/libnest2d/clipper_backend/CMakeLists.txt)0
-rw-r--r--src/libnest2d/libnest2d/clipper_backend/clipper_backend.hpp (renamed from xs/src/libnest2d/libnest2d/clipper_backend/clipper_backend.hpp)0
-rw-r--r--src/libnest2d/libnest2d/common.hpp (renamed from xs/src/libnest2d/libnest2d/common.hpp)0
-rw-r--r--src/libnest2d/libnest2d/geometry_traits.hpp (renamed from xs/src/libnest2d/libnest2d/geometry_traits.hpp)0
-rw-r--r--src/libnest2d/libnest2d/geometry_traits_nfp.hpp (renamed from xs/src/libnest2d/libnest2d/geometry_traits_nfp.hpp)0
-rw-r--r--src/libnest2d/libnest2d/libnest2d.hpp (renamed from xs/src/libnest2d/libnest2d/libnest2d.hpp)0
-rw-r--r--src/libnest2d/libnest2d/metaloop.hpp (renamed from xs/src/libnest2d/libnest2d/metaloop.hpp)0
-rw-r--r--src/libnest2d/libnest2d/optimizer.hpp (renamed from xs/src/libnest2d/libnest2d/optimizer.hpp)0
-rw-r--r--src/libnest2d/libnest2d/optimizers/genetic.hpp (renamed from xs/src/libnest2d/libnest2d/optimizers/genetic.hpp)0
-rw-r--r--src/libnest2d/libnest2d/optimizers/nlopt_boilerplate.hpp (renamed from xs/src/libnest2d/libnest2d/optimizers/nlopt_boilerplate.hpp)0
-rw-r--r--src/libnest2d/libnest2d/optimizers/simplex.hpp (renamed from xs/src/libnest2d/libnest2d/optimizers/simplex.hpp)0
-rw-r--r--src/libnest2d/libnest2d/optimizers/subplex.hpp (renamed from xs/src/libnest2d/libnest2d/optimizers/subplex.hpp)0
-rw-r--r--src/libnest2d/libnest2d/placers/bottomleftplacer.hpp (renamed from xs/src/libnest2d/libnest2d/placers/bottomleftplacer.hpp)0
-rw-r--r--src/libnest2d/libnest2d/placers/nfpplacer.hpp (renamed from xs/src/libnest2d/libnest2d/placers/nfpplacer.hpp)0
-rw-r--r--src/libnest2d/libnest2d/placers/placer_boilerplate.hpp (renamed from xs/src/libnest2d/libnest2d/placers/placer_boilerplate.hpp)0
-rw-r--r--src/libnest2d/libnest2d/rotfinder.hpp (renamed from xs/src/libnest2d/libnest2d/rotfinder.hpp)0
-rw-r--r--src/libnest2d/libnest2d/selections/djd_heuristic.hpp (renamed from xs/src/libnest2d/libnest2d/selections/djd_heuristic.hpp)0
-rw-r--r--src/libnest2d/libnest2d/selections/filler.hpp (renamed from xs/src/libnest2d/libnest2d/selections/filler.hpp)0
-rw-r--r--src/libnest2d/libnest2d/selections/firstfit.hpp (renamed from xs/src/libnest2d/libnest2d/selections/firstfit.hpp)0
-rw-r--r--src/libnest2d/libnest2d/selections/selection_boilerplate.hpp (renamed from xs/src/libnest2d/libnest2d/selections/selection_boilerplate.hpp)0
-rw-r--r--src/libnest2d/tests/CMakeLists.txt (renamed from xs/src/libnest2d/tests/CMakeLists.txt)0
-rw-r--r--src/libnest2d/tests/printer_parts.cpp (renamed from xs/src/libnest2d/tests/printer_parts.cpp)0
-rw-r--r--src/libnest2d/tests/printer_parts.h (renamed from xs/src/libnest2d/tests/printer_parts.h)0
-rw-r--r--src/libnest2d/tests/test.cpp (renamed from xs/src/libnest2d/tests/test.cpp)0
-rw-r--r--src/libnest2d/tools/benchmark.h (renamed from xs/src/benchmark.h)0
-rw-r--r--src/libnest2d/tools/libnfpglue.cpp (renamed from xs/src/libnest2d/tools/libnfpglue.cpp)0
-rw-r--r--src/libnest2d/tools/libnfpglue.hpp (renamed from xs/src/libnest2d/tools/libnfpglue.hpp)0
-rw-r--r--src/libnest2d/tools/libnfporb/LICENSE (renamed from xs/src/libnest2d/tools/libnfporb/LICENSE)0
-rw-r--r--src/libnest2d/tools/libnfporb/ORIGIN (renamed from xs/src/libnest2d/tools/libnfporb/ORIGIN)0
-rw-r--r--src/libnest2d/tools/libnfporb/README.md (renamed from xs/src/libnest2d/tools/libnfporb/README.md)0
-rw-r--r--src/libnest2d/tools/libnfporb/libnfporb.hpp (renamed from xs/src/libnest2d/tools/libnfporb/libnfporb.hpp)0
-rw-r--r--src/libnest2d/tools/nfp_svgnest.hpp (renamed from xs/src/libnest2d/tools/nfp_svgnest.hpp)0
-rw-r--r--src/libnest2d/tools/nfp_svgnest_glue.hpp (renamed from xs/src/libnest2d/tools/nfp_svgnest_glue.hpp)0
-rw-r--r--src/libnest2d/tools/svgtools.hpp (renamed from xs/src/libnest2d/tools/svgtools.hpp)0
-rw-r--r--src/libslic3r/BoundingBox.cpp (renamed from xs/src/libslic3r/BoundingBox.cpp)0
-rw-r--r--src/libslic3r/BoundingBox.hpp (renamed from xs/src/libslic3r/BoundingBox.hpp)0
-rw-r--r--src/libslic3r/BridgeDetector.cpp (renamed from xs/src/libslic3r/BridgeDetector.cpp)0
-rw-r--r--src/libslic3r/BridgeDetector.hpp (renamed from xs/src/libslic3r/BridgeDetector.hpp)0
-rw-r--r--src/libslic3r/CMakeLists.txt173
-rw-r--r--src/libslic3r/ClipperUtils.cpp (renamed from xs/src/libslic3r/ClipperUtils.cpp)0
-rw-r--r--src/libslic3r/ClipperUtils.hpp (renamed from xs/src/libslic3r/ClipperUtils.hpp)0
-rw-r--r--src/libslic3r/Config.cpp (renamed from xs/src/libslic3r/Config.cpp)0
-rw-r--r--src/libslic3r/Config.hpp (renamed from xs/src/libslic3r/Config.hpp)0
-rw-r--r--src/libslic3r/EdgeGrid.cpp (renamed from xs/src/libslic3r/EdgeGrid.cpp)0
-rw-r--r--src/libslic3r/EdgeGrid.hpp (renamed from xs/src/libslic3r/EdgeGrid.hpp)0
-rw-r--r--src/libslic3r/ExPolygon.cpp (renamed from xs/src/libslic3r/ExPolygon.cpp)0
-rw-r--r--src/libslic3r/ExPolygon.hpp (renamed from xs/src/libslic3r/ExPolygon.hpp)0
-rw-r--r--src/libslic3r/ExPolygonCollection.cpp (renamed from xs/src/libslic3r/ExPolygonCollection.cpp)0
-rw-r--r--src/libslic3r/ExPolygonCollection.hpp (renamed from xs/src/libslic3r/ExPolygonCollection.hpp)0
-rw-r--r--src/libslic3r/Extruder.cpp (renamed from xs/src/libslic3r/Extruder.cpp)0
-rw-r--r--src/libslic3r/Extruder.hpp (renamed from xs/src/libslic3r/Extruder.hpp)0
-rw-r--r--src/libslic3r/ExtrusionEntity.cpp (renamed from xs/src/libslic3r/ExtrusionEntity.cpp)0
-rw-r--r--src/libslic3r/ExtrusionEntity.hpp (renamed from xs/src/libslic3r/ExtrusionEntity.hpp)0
-rw-r--r--src/libslic3r/ExtrusionEntityCollection.cpp (renamed from xs/src/libslic3r/ExtrusionEntityCollection.cpp)0
-rw-r--r--src/libslic3r/ExtrusionEntityCollection.hpp (renamed from xs/src/libslic3r/ExtrusionEntityCollection.hpp)0
-rw-r--r--src/libslic3r/ExtrusionSimulator.cpp (renamed from xs/src/libslic3r/ExtrusionSimulator.cpp)0
-rw-r--r--src/libslic3r/ExtrusionSimulator.hpp (renamed from xs/src/libslic3r/ExtrusionSimulator.hpp)0
-rw-r--r--src/libslic3r/FileParserError.hpp (renamed from xs/src/libslic3r/FileParserError.hpp)0
-rw-r--r--src/libslic3r/Fill/Fill.cpp (renamed from xs/src/libslic3r/Fill/Fill.cpp)0
-rw-r--r--src/libslic3r/Fill/Fill.hpp (renamed from xs/src/libslic3r/Fill/Fill.hpp)0
-rw-r--r--src/libslic3r/Fill/Fill3DHoneycomb.cpp (renamed from xs/src/libslic3r/Fill/Fill3DHoneycomb.cpp)0
-rw-r--r--src/libslic3r/Fill/Fill3DHoneycomb.hpp (renamed from xs/src/libslic3r/Fill/Fill3DHoneycomb.hpp)0
-rw-r--r--src/libslic3r/Fill/FillBase.cpp (renamed from xs/src/libslic3r/Fill/FillBase.cpp)0
-rw-r--r--src/libslic3r/Fill/FillBase.hpp (renamed from xs/src/libslic3r/Fill/FillBase.hpp)0
-rw-r--r--src/libslic3r/Fill/FillConcentric.cpp (renamed from xs/src/libslic3r/Fill/FillConcentric.cpp)0
-rw-r--r--src/libslic3r/Fill/FillConcentric.hpp (renamed from xs/src/libslic3r/Fill/FillConcentric.hpp)0
-rw-r--r--src/libslic3r/Fill/FillGyroid.cpp (renamed from xs/src/libslic3r/Fill/FillGyroid.cpp)0
-rw-r--r--src/libslic3r/Fill/FillGyroid.hpp (renamed from xs/src/libslic3r/Fill/FillGyroid.hpp)0
-rw-r--r--src/libslic3r/Fill/FillHoneycomb.cpp (renamed from xs/src/libslic3r/Fill/FillHoneycomb.cpp)0
-rw-r--r--src/libslic3r/Fill/FillHoneycomb.hpp (renamed from xs/src/libslic3r/Fill/FillHoneycomb.hpp)0
-rw-r--r--src/libslic3r/Fill/FillPlanePath.cpp (renamed from xs/src/libslic3r/Fill/FillPlanePath.cpp)0
-rw-r--r--src/libslic3r/Fill/FillPlanePath.hpp (renamed from xs/src/libslic3r/Fill/FillPlanePath.hpp)0
-rw-r--r--src/libslic3r/Fill/FillRectilinear.cpp (renamed from xs/src/libslic3r/Fill/FillRectilinear.cpp)0
-rw-r--r--src/libslic3r/Fill/FillRectilinear.hpp (renamed from xs/src/libslic3r/Fill/FillRectilinear.hpp)0
-rw-r--r--src/libslic3r/Fill/FillRectilinear2.cpp (renamed from xs/src/libslic3r/Fill/FillRectilinear2.cpp)0
-rw-r--r--src/libslic3r/Fill/FillRectilinear2.hpp (renamed from xs/src/libslic3r/Fill/FillRectilinear2.hpp)0
-rw-r--r--src/libslic3r/Fill/FillRectilinear3.cpp (renamed from xs/src/libslic3r/Fill/FillRectilinear3.cpp)0
-rw-r--r--src/libslic3r/Fill/FillRectilinear3.hpp (renamed from xs/src/libslic3r/Fill/FillRectilinear3.hpp)0
-rw-r--r--src/libslic3r/Flow.cpp (renamed from xs/src/libslic3r/Flow.cpp)0
-rw-r--r--src/libslic3r/Flow.hpp (renamed from xs/src/libslic3r/Flow.hpp)0
-rw-r--r--src/libslic3r/Format/3mf.cpp (renamed from xs/src/libslic3r/Format/3mf.cpp)0
-rw-r--r--src/libslic3r/Format/3mf.hpp (renamed from xs/src/libslic3r/Format/3mf.hpp)0
-rw-r--r--src/libslic3r/Format/AMF.cpp (renamed from xs/src/libslic3r/Format/AMF.cpp)0
-rw-r--r--src/libslic3r/Format/AMF.hpp (renamed from xs/src/libslic3r/Format/AMF.hpp)0
-rw-r--r--src/libslic3r/Format/OBJ.cpp (renamed from xs/src/libslic3r/Format/OBJ.cpp)0
-rw-r--r--src/libslic3r/Format/OBJ.hpp (renamed from xs/src/libslic3r/Format/OBJ.hpp)0
-rw-r--r--src/libslic3r/Format/PRUS.cpp (renamed from xs/src/libslic3r/Format/PRUS.cpp)0
-rw-r--r--src/libslic3r/Format/PRUS.hpp (renamed from xs/src/libslic3r/Format/PRUS.hpp)0
-rw-r--r--src/libslic3r/Format/STL.cpp (renamed from xs/src/libslic3r/Format/STL.cpp)0
-rw-r--r--src/libslic3r/Format/STL.hpp (renamed from xs/src/libslic3r/Format/STL.hpp)0
-rw-r--r--src/libslic3r/Format/objparser.cpp (renamed from xs/src/libslic3r/Format/objparser.cpp)0
-rw-r--r--src/libslic3r/Format/objparser.hpp (renamed from xs/src/libslic3r/Format/objparser.hpp)0
-rw-r--r--src/libslic3r/GCode.cpp (renamed from xs/src/libslic3r/GCode.cpp)0
-rw-r--r--src/libslic3r/GCode.hpp (renamed from xs/src/libslic3r/GCode.hpp)0
-rw-r--r--src/libslic3r/GCode/Analyzer.cpp (renamed from xs/src/libslic3r/GCode/Analyzer.cpp)0
-rw-r--r--src/libslic3r/GCode/Analyzer.hpp (renamed from xs/src/libslic3r/GCode/Analyzer.hpp)0
-rw-r--r--src/libslic3r/GCode/CoolingBuffer.cpp (renamed from xs/src/libslic3r/GCode/CoolingBuffer.cpp)0
-rw-r--r--src/libslic3r/GCode/CoolingBuffer.hpp (renamed from xs/src/libslic3r/GCode/CoolingBuffer.hpp)0
-rw-r--r--src/libslic3r/GCode/PostProcessor.cpp (renamed from xs/src/libslic3r/GCode/PostProcessor.cpp)0
-rw-r--r--src/libslic3r/GCode/PostProcessor.hpp (renamed from xs/src/libslic3r/GCode/PostProcessor.hpp)0
-rw-r--r--src/libslic3r/GCode/PressureEqualizer.cpp (renamed from xs/src/libslic3r/GCode/PressureEqualizer.cpp)0
-rw-r--r--src/libslic3r/GCode/PressureEqualizer.hpp (renamed from xs/src/libslic3r/GCode/PressureEqualizer.hpp)0
-rw-r--r--src/libslic3r/GCode/PreviewData.cpp (renamed from xs/src/libslic3r/GCode/PreviewData.cpp)0
-rw-r--r--src/libslic3r/GCode/PreviewData.hpp (renamed from xs/src/libslic3r/GCode/PreviewData.hpp)0
-rw-r--r--src/libslic3r/GCode/PrintExtents.cpp (renamed from xs/src/libslic3r/GCode/PrintExtents.cpp)0
-rw-r--r--src/libslic3r/GCode/PrintExtents.hpp (renamed from xs/src/libslic3r/GCode/PrintExtents.hpp)0
-rw-r--r--src/libslic3r/GCode/SpiralVase.cpp (renamed from xs/src/libslic3r/GCode/SpiralVase.cpp)0
-rw-r--r--src/libslic3r/GCode/SpiralVase.hpp (renamed from xs/src/libslic3r/GCode/SpiralVase.hpp)0
-rw-r--r--src/libslic3r/GCode/ToolOrdering.cpp (renamed from xs/src/libslic3r/GCode/ToolOrdering.cpp)0
-rw-r--r--src/libslic3r/GCode/ToolOrdering.hpp (renamed from xs/src/libslic3r/GCode/ToolOrdering.hpp)0
-rw-r--r--src/libslic3r/GCode/WipeTower.hpp (renamed from xs/src/libslic3r/GCode/WipeTower.hpp)0
-rw-r--r--src/libslic3r/GCode/WipeTowerPrusaMM.cpp (renamed from xs/src/libslic3r/GCode/WipeTowerPrusaMM.cpp)0
-rw-r--r--src/libslic3r/GCode/WipeTowerPrusaMM.hpp (renamed from xs/src/libslic3r/GCode/WipeTowerPrusaMM.hpp)0
-rw-r--r--src/libslic3r/GCodeReader.cpp (renamed from xs/src/libslic3r/GCodeReader.cpp)0
-rw-r--r--src/libslic3r/GCodeReader.hpp (renamed from xs/src/libslic3r/GCodeReader.hpp)0
-rw-r--r--src/libslic3r/GCodeSender.cpp (renamed from xs/src/libslic3r/GCodeSender.cpp)0
-rw-r--r--src/libslic3r/GCodeSender.hpp (renamed from xs/src/libslic3r/GCodeSender.hpp)0
-rw-r--r--src/libslic3r/GCodeTimeEstimator.cpp (renamed from xs/src/libslic3r/GCodeTimeEstimator.cpp)0
-rw-r--r--src/libslic3r/GCodeTimeEstimator.hpp (renamed from xs/src/libslic3r/GCodeTimeEstimator.hpp)0
-rw-r--r--src/libslic3r/GCodeWriter.cpp (renamed from xs/src/libslic3r/GCodeWriter.cpp)0
-rw-r--r--src/libslic3r/GCodeWriter.hpp (renamed from xs/src/libslic3r/GCodeWriter.hpp)0
-rw-r--r--src/libslic3r/Geometry.cpp (renamed from xs/src/libslic3r/Geometry.cpp)0
-rw-r--r--src/libslic3r/Geometry.hpp (renamed from xs/src/libslic3r/Geometry.hpp)0
-rw-r--r--src/libslic3r/I18N.hpp (renamed from xs/src/libslic3r/I18N.hpp)0
-rw-r--r--src/libslic3r/Int128.hpp (renamed from xs/src/libslic3r/Int128.hpp)0
-rw-r--r--src/libslic3r/Layer.cpp (renamed from xs/src/libslic3r/Layer.cpp)0
-rw-r--r--src/libslic3r/Layer.hpp (renamed from xs/src/libslic3r/Layer.hpp)0
-rw-r--r--src/libslic3r/LayerRegion.cpp (renamed from xs/src/libslic3r/LayerRegion.cpp)0
-rw-r--r--src/libslic3r/Line.cpp (renamed from xs/src/libslic3r/Line.cpp)0
-rw-r--r--src/libslic3r/Line.hpp (renamed from xs/src/libslic3r/Line.hpp)0
-rw-r--r--src/libslic3r/Model.cpp (renamed from xs/src/libslic3r/Model.cpp)0
-rw-r--r--src/libslic3r/Model.hpp (renamed from xs/src/libslic3r/Model.hpp)0
-rw-r--r--src/libslic3r/ModelArrange.hpp (renamed from xs/src/libslic3r/ModelArrange.hpp)0
-rw-r--r--src/libslic3r/MotionPlanner.cpp (renamed from xs/src/libslic3r/MotionPlanner.cpp)0
-rw-r--r--src/libslic3r/MotionPlanner.hpp (renamed from xs/src/libslic3r/MotionPlanner.hpp)0
-rw-r--r--src/libslic3r/MultiPoint.cpp (renamed from xs/src/libslic3r/MultiPoint.cpp)0
-rw-r--r--src/libslic3r/MultiPoint.hpp (renamed from xs/src/libslic3r/MultiPoint.hpp)0
-rw-r--r--src/libslic3r/MutablePriorityQueue.hpp (renamed from xs/src/libslic3r/MutablePriorityQueue.hpp)0
-rw-r--r--src/libslic3r/PerimeterGenerator.cpp (renamed from xs/src/libslic3r/PerimeterGenerator.cpp)0
-rw-r--r--src/libslic3r/PerimeterGenerator.hpp (renamed from xs/src/libslic3r/PerimeterGenerator.hpp)0
-rw-r--r--src/libslic3r/PlaceholderParser.cpp (renamed from xs/src/libslic3r/PlaceholderParser.cpp)0
-rw-r--r--src/libslic3r/PlaceholderParser.hpp (renamed from xs/src/libslic3r/PlaceholderParser.hpp)0
-rw-r--r--src/libslic3r/Point.cpp (renamed from xs/src/libslic3r/Point.cpp)0
-rw-r--r--src/libslic3r/Point.hpp (renamed from xs/src/libslic3r/Point.hpp)0
-rw-r--r--src/libslic3r/Polygon.cpp (renamed from xs/src/libslic3r/Polygon.cpp)0
-rw-r--r--src/libslic3r/Polygon.hpp (renamed from xs/src/libslic3r/Polygon.hpp)0
-rw-r--r--src/libslic3r/Polyline.cpp (renamed from xs/src/libslic3r/Polyline.cpp)0
-rw-r--r--src/libslic3r/Polyline.hpp (renamed from xs/src/libslic3r/Polyline.hpp)0
-rw-r--r--src/libslic3r/PolylineCollection.cpp (renamed from xs/src/libslic3r/PolylineCollection.cpp)0
-rw-r--r--src/libslic3r/PolylineCollection.hpp (renamed from xs/src/libslic3r/PolylineCollection.hpp)0
-rw-r--r--src/libslic3r/Print.cpp (renamed from xs/src/libslic3r/Print.cpp)32
-rw-r--r--src/libslic3r/Print.hpp (renamed from xs/src/libslic3r/Print.hpp)0
-rw-r--r--src/libslic3r/PrintConfig.cpp (renamed from xs/src/libslic3r/PrintConfig.cpp)0
-rw-r--r--src/libslic3r/PrintConfig.hpp (renamed from xs/src/libslic3r/PrintConfig.hpp)0
-rw-r--r--src/libslic3r/PrintExport.hpp (renamed from xs/src/libslic3r/PrintExport.hpp)0
-rw-r--r--src/libslic3r/PrintObject.cpp (renamed from xs/src/libslic3r/PrintObject.cpp)0
-rw-r--r--src/libslic3r/PrintRegion.cpp (renamed from xs/src/libslic3r/PrintRegion.cpp)0
-rw-r--r--src/libslic3r/Rasterizer/Rasterizer.cpp (renamed from xs/src/libslic3r/Rasterizer/Rasterizer.cpp)0
-rw-r--r--src/libslic3r/Rasterizer/Rasterizer.hpp (renamed from xs/src/libslic3r/Rasterizer/Rasterizer.hpp)0
-rw-r--r--src/libslic3r/SLABasePool.cpp (renamed from xs/src/libslic3r/SLABasePool.cpp)0
-rw-r--r--src/libslic3r/SLABasePool.hpp (renamed from xs/src/libslic3r/SLABasePool.hpp)0
-rw-r--r--src/libslic3r/SVG.cpp (renamed from xs/src/libslic3r/SVG.cpp)0
-rw-r--r--src/libslic3r/SVG.hpp (renamed from xs/src/libslic3r/SVG.hpp)0
-rw-r--r--src/libslic3r/Slicing.cpp (renamed from xs/src/libslic3r/Slicing.cpp)0
-rw-r--r--src/libslic3r/Slicing.hpp (renamed from xs/src/libslic3r/Slicing.hpp)0
-rw-r--r--src/libslic3r/SlicingAdaptive.cpp (renamed from xs/src/libslic3r/SlicingAdaptive.cpp)0
-rw-r--r--src/libslic3r/SlicingAdaptive.hpp (renamed from xs/src/libslic3r/SlicingAdaptive.hpp)0
-rw-r--r--src/libslic3r/SupportMaterial.cpp (renamed from xs/src/libslic3r/SupportMaterial.cpp)0
-rw-r--r--src/libslic3r/SupportMaterial.hpp (renamed from xs/src/libslic3r/SupportMaterial.hpp)0
-rw-r--r--src/libslic3r/Surface.cpp (renamed from xs/src/libslic3r/Surface.cpp)0
-rw-r--r--src/libslic3r/Surface.hpp (renamed from xs/src/libslic3r/Surface.hpp)0
-rw-r--r--src/libslic3r/SurfaceCollection.cpp (renamed from xs/src/libslic3r/SurfaceCollection.cpp)0
-rw-r--r--src/libslic3r/SurfaceCollection.hpp (renamed from xs/src/libslic3r/SurfaceCollection.hpp)0
-rw-r--r--src/libslic3r/Technologies.hpp (renamed from xs/src/libslic3r/Technologies.hpp)0
-rw-r--r--src/libslic3r/TriangleMesh.cpp (renamed from xs/src/libslic3r/TriangleMesh.cpp)0
-rw-r--r--src/libslic3r/TriangleMesh.hpp (renamed from xs/src/libslic3r/TriangleMesh.hpp)0
-rw-r--r--src/libslic3r/Utils.hpp (renamed from xs/src/libslic3r/Utils.hpp)0
-rw-r--r--src/libslic3r/libslic3r.h (renamed from xs/src/libslic3r/libslic3r.h)0
-rw-r--r--src/libslic3r/utils.cpp (renamed from xs/src/libslic3r/utils.cpp)0
-rw-r--r--src/miniz/CMakeLists.txt14
-rw-r--r--src/miniz/miniz.cpp (renamed from xs/src/miniz/miniz.cpp)0
-rw-r--r--src/miniz/miniz.h (renamed from xs/src/miniz/miniz.h)0
-rw-r--r--src/miniz/miniz_common.h (renamed from xs/src/miniz/miniz_common.h)0
-rw-r--r--src/miniz/miniz_tdef.cpp (renamed from xs/src/miniz/miniz_tdef.cpp)0
-rw-r--r--src/miniz/miniz_tdef.h (renamed from xs/src/miniz/miniz_tdef.h)0
-rw-r--r--src/miniz/miniz_tinfl.cpp (renamed from xs/src/miniz/miniz_tinfl.cpp)0
-rw-r--r--src/miniz/miniz_tinfl.h (renamed from xs/src/miniz/miniz_tinfl.h)0
-rw-r--r--src/miniz/miniz_zip.cpp (renamed from xs/src/miniz/miniz_zip.cpp)0
-rw-r--r--src/miniz/miniz_zip.h (renamed from xs/src/miniz/miniz_zip.h)0
-rw-r--r--src/png/AUTHORS (renamed from xs/src/png/AUTHORS)0
-rw-r--r--src/png/COPYING (renamed from xs/src/png/COPYING)0
-rw-r--r--src/png/NEWS (renamed from xs/src/png/NEWS)0
-rw-r--r--src/png/color.hpp (renamed from xs/src/png/color.hpp)0
-rw-r--r--src/png/end_info.hpp (renamed from xs/src/png/end_info.hpp)0
-rw-r--r--src/png/error.hpp (renamed from xs/src/png/error.hpp)0
-rw-r--r--src/png/image_info.hpp (renamed from xs/src/png/image_info.hpp)0
-rw-r--r--src/png/info.hpp (renamed from xs/src/png/info.hpp)0
-rw-r--r--src/png/info_base.hpp (renamed from xs/src/png/info_base.hpp)0
-rw-r--r--src/png/io_base.hpp (renamed from xs/src/png/io_base.hpp)0
-rw-r--r--src/png/libpng/ANNOUNCE (renamed from xs/src/png/libpng/ANNOUNCE)0
-rw-r--r--src/png/libpng/CMakeLists.txt (renamed from xs/src/png/libpng/CMakeLists.txt)26
-rw-r--r--src/png/libpng/LICENSE (renamed from xs/src/png/libpng/LICENSE)0
-rw-r--r--src/png/libpng/arm/arm_init.c (renamed from xs/src/png/libpng/arm/arm_init.c)0
-rw-r--r--src/png/libpng/arm/filter_neon.S (renamed from xs/src/png/libpng/arm/filter_neon.S)0
-rw-r--r--src/png/libpng/arm/filter_neon_intrinsics.c (renamed from xs/src/png/libpng/arm/filter_neon_intrinsics.c)0
-rw-r--r--src/png/libpng/intel/filter_sse2_intrinsics.c (renamed from xs/src/png/libpng/intel/filter_sse2_intrinsics.c)0
-rw-r--r--src/png/libpng/intel/intel_init.c (renamed from xs/src/png/libpng/intel/intel_init.c)0
-rw-r--r--src/png/libpng/libpng-config.in (renamed from xs/src/png/libpng/libpng-config.in)0
-rw-r--r--src/png/libpng/libpng.pc.in (renamed from xs/src/png/libpng/libpng.pc.in)0
-rw-r--r--src/png/libpng/mips/filter_msa_intrinsics.c (renamed from xs/src/png/libpng/mips/filter_msa_intrinsics.c)0
-rw-r--r--src/png/libpng/mips/mips_init.c (renamed from xs/src/png/libpng/mips/mips_init.c)0
-rw-r--r--src/png/libpng/png.c (renamed from xs/src/png/libpng/png.c)0
-rw-r--r--src/png/libpng/png.h (renamed from xs/src/png/libpng/png.h)0
-rw-r--r--src/png/libpng/pngconf.h (renamed from xs/src/png/libpng/pngconf.h)0
-rw-r--r--src/png/libpng/pngdebug.h (renamed from xs/src/png/libpng/pngdebug.h)0
-rw-r--r--src/png/libpng/pngerror.c (renamed from xs/src/png/libpng/pngerror.c)0
-rw-r--r--src/png/libpng/pngget.c (renamed from xs/src/png/libpng/pngget.c)0
-rw-r--r--src/png/libpng/pnginfo.h (renamed from xs/src/png/libpng/pnginfo.h)0
-rw-r--r--src/png/libpng/pngmem.c (renamed from xs/src/png/libpng/pngmem.c)0
-rw-r--r--src/png/libpng/pngpread.c (renamed from xs/src/png/libpng/pngpread.c)0
-rw-r--r--src/png/libpng/pngpriv.h (renamed from xs/src/png/libpng/pngpriv.h)0
-rw-r--r--src/png/libpng/pngread.c (renamed from xs/src/png/libpng/pngread.c)0
-rw-r--r--src/png/libpng/pngrio.c (renamed from xs/src/png/libpng/pngrio.c)0
-rw-r--r--src/png/libpng/pngrtran.c (renamed from xs/src/png/libpng/pngrtran.c)0
-rw-r--r--src/png/libpng/pngrutil.c (renamed from xs/src/png/libpng/pngrutil.c)0
-rw-r--r--src/png/libpng/pngset.c (renamed from xs/src/png/libpng/pngset.c)0
-rw-r--r--src/png/libpng/pngstruct.h (renamed from xs/src/png/libpng/pngstruct.h)0
-rw-r--r--src/png/libpng/pngtest.c (renamed from xs/src/png/libpng/pngtest.c)0
-rw-r--r--src/png/libpng/pngtrans.c (renamed from xs/src/png/libpng/pngtrans.c)0
-rw-r--r--src/png/libpng/pngusr.dfa (renamed from xs/src/png/libpng/pngusr.dfa)0
-rw-r--r--src/png/libpng/pngwio.c (renamed from xs/src/png/libpng/pngwio.c)0
-rw-r--r--src/png/libpng/pngwrite.c (renamed from xs/src/png/libpng/pngwrite.c)0
-rw-r--r--src/png/libpng/pngwtran.c (renamed from xs/src/png/libpng/pngwtran.c)0
-rw-r--r--src/png/libpng/pngwutil.c (renamed from xs/src/png/libpng/pngwutil.c)0
-rw-r--r--src/png/libpng/powerpc/filter_vsx_intrinsics.c (renamed from xs/src/png/libpng/powerpc/filter_vsx_intrinsics.c)0
-rw-r--r--src/png/libpng/powerpc/powerpc_init.c (renamed from xs/src/png/libpng/powerpc/powerpc_init.c)0
-rw-r--r--[-rwxr-xr-x]src/png/libpng/scripts/checksym.awk (renamed from xs/src/png/libpng/scripts/checksym.awk)0
-rw-r--r--src/png/libpng/scripts/def.c (renamed from xs/src/png/libpng/scripts/def.c)0
-rw-r--r--[-rwxr-xr-x]src/png/libpng/scripts/dfn.awk (renamed from xs/src/png/libpng/scripts/dfn.awk)0
-rw-r--r--src/png/libpng/scripts/genchk.cmake.in (renamed from xs/src/png/libpng/scripts/genchk.cmake.in)0
-rw-r--r--src/png/libpng/scripts/genout.cmake.in (renamed from xs/src/png/libpng/scripts/genout.cmake.in)0
-rw-r--r--src/png/libpng/scripts/gensrc.cmake.in (renamed from xs/src/png/libpng/scripts/gensrc.cmake.in)0
-rw-r--r--src/png/libpng/scripts/intprefix.c (renamed from xs/src/png/libpng/scripts/intprefix.c)0
-rw-r--r--src/png/libpng/scripts/libpng-config-body.in (renamed from xs/src/png/libpng/scripts/libpng-config-body.in)0
-rw-r--r--src/png/libpng/scripts/libpng-config-head.in (renamed from xs/src/png/libpng/scripts/libpng-config-head.in)0
-rw-r--r--src/png/libpng/scripts/libpng.pc.in (renamed from xs/src/png/libpng/scripts/libpng.pc.in)0
-rw-r--r--[-rwxr-xr-x]src/png/libpng/scripts/options.awk (renamed from xs/src/png/libpng/scripts/options.awk)0
-rw-r--r--src/png/libpng/scripts/pnglibconf.dfa (renamed from xs/src/png/libpng/scripts/pnglibconf.dfa)0
-rw-r--r--src/png/libpng/scripts/pnglibconf.h.prebuilt (renamed from xs/src/png/libpng/scripts/pnglibconf.h.prebuilt)0
-rw-r--r--src/png/libpng/scripts/prefix.c (renamed from xs/src/png/libpng/scripts/prefix.c)0
-rw-r--r--src/png/libpng/scripts/sym.c (renamed from xs/src/png/libpng/scripts/sym.c)0
-rw-r--r--src/png/libpng/scripts/symbols.c (renamed from xs/src/png/libpng/scripts/symbols.c)0
-rw-r--r--src/png/libpng/scripts/symbols.def (renamed from xs/src/png/libpng/scripts/symbols.def)0
-rw-r--r--src/png/libpng/scripts/test.cmake.in (renamed from xs/src/png/libpng/scripts/test.cmake.in)0
-rw-r--r--src/png/libpng/scripts/vers.c (renamed from xs/src/png/libpng/scripts/vers.c)0
-rw-r--r--src/png/palette.hpp (renamed from xs/src/png/palette.hpp)0
-rw-r--r--src/png/pixel_traits.hpp (renamed from xs/src/png/pixel_traits.hpp)0
-rw-r--r--src/png/tRNS.hpp (renamed from xs/src/png/tRNS.hpp)0
-rw-r--r--src/png/types.hpp (renamed from xs/src/png/types.hpp)0
-rw-r--r--src/png/writer.hpp (renamed from xs/src/png/writer.hpp)0
-rw-r--r--src/png/zlib/CMakeLists.txt (renamed from xs/src/png/zlib/CMakeLists.txt)0
-rw-r--r--src/png/zlib/ChangeLog (renamed from xs/src/png/zlib/ChangeLog)0
-rw-r--r--src/png/zlib/FAQ (renamed from xs/src/png/zlib/FAQ)0
-rw-r--r--src/png/zlib/INDEX (renamed from xs/src/png/zlib/INDEX)0
-rw-r--r--src/png/zlib/Makefile (renamed from xs/src/png/zlib/Makefile)0
-rw-r--r--src/png/zlib/Makefile.in (renamed from xs/src/png/zlib/Makefile.in)0
-rw-r--r--src/png/zlib/README (renamed from xs/src/png/zlib/README)0
-rw-r--r--src/png/zlib/adler32.c (renamed from xs/src/png/zlib/adler32.c)0
-rw-r--r--src/png/zlib/amiga/Makefile.pup (renamed from xs/src/png/zlib/amiga/Makefile.pup)0
-rw-r--r--src/png/zlib/amiga/Makefile.sas (renamed from xs/src/png/zlib/amiga/Makefile.sas)0
-rw-r--r--src/png/zlib/compress.c (renamed from xs/src/png/zlib/compress.c)0
-rw-r--r--src/png/zlib/configure (renamed from xs/src/png/zlib/configure)0
-rw-r--r--src/png/zlib/contrib/README.contrib (renamed from xs/src/png/zlib/contrib/README.contrib)0
-rw-r--r--src/png/zlib/contrib/ada/buffer_demo.adb (renamed from xs/src/png/zlib/contrib/ada/buffer_demo.adb)0
-rw-r--r--src/png/zlib/contrib/ada/mtest.adb (renamed from xs/src/png/zlib/contrib/ada/mtest.adb)0
-rw-r--r--src/png/zlib/contrib/ada/read.adb (renamed from xs/src/png/zlib/contrib/ada/read.adb)0
-rw-r--r--src/png/zlib/contrib/ada/readme.txt (renamed from xs/src/png/zlib/contrib/ada/readme.txt)0
-rw-r--r--src/png/zlib/contrib/ada/test.adb (renamed from xs/src/png/zlib/contrib/ada/test.adb)0
-rw-r--r--src/png/zlib/contrib/ada/zlib-streams.adb (renamed from xs/src/png/zlib/contrib/ada/zlib-streams.adb)0
-rw-r--r--src/png/zlib/contrib/ada/zlib-streams.ads (renamed from xs/src/png/zlib/contrib/ada/zlib-streams.ads)0
-rw-r--r--src/png/zlib/contrib/ada/zlib-thin.adb (renamed from xs/src/png/zlib/contrib/ada/zlib-thin.adb)0
-rw-r--r--src/png/zlib/contrib/ada/zlib-thin.ads (renamed from xs/src/png/zlib/contrib/ada/zlib-thin.ads)0
-rw-r--r--src/png/zlib/contrib/ada/zlib.adb (renamed from xs/src/png/zlib/contrib/ada/zlib.adb)0
-rw-r--r--src/png/zlib/contrib/ada/zlib.ads (renamed from xs/src/png/zlib/contrib/ada/zlib.ads)0
-rw-r--r--src/png/zlib/contrib/ada/zlib.gpr (renamed from xs/src/png/zlib/contrib/ada/zlib.gpr)0
-rw-r--r--src/png/zlib/contrib/amd64/amd64-match.S (renamed from xs/src/png/zlib/contrib/amd64/amd64-match.S)0
-rw-r--r--src/png/zlib/contrib/asm686/README.686 (renamed from xs/src/png/zlib/contrib/asm686/README.686)0
-rw-r--r--src/png/zlib/contrib/asm686/match.S (renamed from xs/src/png/zlib/contrib/asm686/match.S)0
-rw-r--r--src/png/zlib/contrib/blast/Makefile (renamed from xs/src/png/zlib/contrib/blast/Makefile)0
-rw-r--r--src/png/zlib/contrib/blast/README (renamed from xs/src/png/zlib/contrib/blast/README)0
-rw-r--r--src/png/zlib/contrib/blast/blast.c (renamed from xs/src/png/zlib/contrib/blast/blast.c)0
-rw-r--r--src/png/zlib/contrib/blast/blast.h (renamed from xs/src/png/zlib/contrib/blast/blast.h)0
-rw-r--r--src/png/zlib/contrib/blast/test.pk (renamed from xs/src/png/zlib/contrib/blast/test.pk)bin8 -> 8 bytes
-rw-r--r--src/png/zlib/contrib/blast/test.txt (renamed from xs/src/png/zlib/contrib/blast/test.txt)0
-rw-r--r--src/png/zlib/contrib/delphi/ZLib.pas (renamed from xs/src/png/zlib/contrib/delphi/ZLib.pas)0
-rw-r--r--src/png/zlib/contrib/delphi/ZLibConst.pas (renamed from xs/src/png/zlib/contrib/delphi/ZLibConst.pas)0
-rw-r--r--src/png/zlib/contrib/delphi/readme.txt (renamed from xs/src/png/zlib/contrib/delphi/readme.txt)0
-rw-r--r--src/png/zlib/contrib/delphi/zlibd32.mak (renamed from xs/src/png/zlib/contrib/delphi/zlibd32.mak)0
-rw-r--r--src/png/zlib/contrib/dotzlib/DotZLib.build (renamed from xs/src/png/zlib/contrib/dotzlib/DotZLib.build)0
-rw-r--r--src/png/zlib/contrib/dotzlib/DotZLib.chm (renamed from xs/src/png/zlib/contrib/dotzlib/DotZLib.chm)bin72726 -> 72726 bytes
-rw-r--r--src/png/zlib/contrib/dotzlib/DotZLib.sln (renamed from xs/src/png/zlib/contrib/dotzlib/DotZLib.sln)0
-rw-r--r--src/png/zlib/contrib/dotzlib/DotZLib/AssemblyInfo.cs (renamed from xs/src/png/zlib/contrib/dotzlib/DotZLib/AssemblyInfo.cs)0
-rw-r--r--src/png/zlib/contrib/dotzlib/DotZLib/ChecksumImpl.cs (renamed from xs/src/png/zlib/contrib/dotzlib/DotZLib/ChecksumImpl.cs)0
-rw-r--r--src/png/zlib/contrib/dotzlib/DotZLib/CircularBuffer.cs (renamed from xs/src/png/zlib/contrib/dotzlib/DotZLib/CircularBuffer.cs)0
-rw-r--r--src/png/zlib/contrib/dotzlib/DotZLib/CodecBase.cs (renamed from xs/src/png/zlib/contrib/dotzlib/DotZLib/CodecBase.cs)0
-rw-r--r--src/png/zlib/contrib/dotzlib/DotZLib/Deflater.cs (renamed from xs/src/png/zlib/contrib/dotzlib/DotZLib/Deflater.cs)0
-rw-r--r--src/png/zlib/contrib/dotzlib/DotZLib/DotZLib.cs (renamed from xs/src/png/zlib/contrib/dotzlib/DotZLib/DotZLib.cs)0
-rw-r--r--src/png/zlib/contrib/dotzlib/DotZLib/DotZLib.csproj (renamed from xs/src/png/zlib/contrib/dotzlib/DotZLib/DotZLib.csproj)0
-rw-r--r--src/png/zlib/contrib/dotzlib/DotZLib/GZipStream.cs (renamed from xs/src/png/zlib/contrib/dotzlib/DotZLib/GZipStream.cs)0
-rw-r--r--src/png/zlib/contrib/dotzlib/DotZLib/Inflater.cs (renamed from xs/src/png/zlib/contrib/dotzlib/DotZLib/Inflater.cs)0
-rw-r--r--src/png/zlib/contrib/dotzlib/DotZLib/UnitTests.cs (renamed from xs/src/png/zlib/contrib/dotzlib/DotZLib/UnitTests.cs)0
-rw-r--r--src/png/zlib/contrib/dotzlib/LICENSE_1_0.txt (renamed from xs/src/png/zlib/contrib/dotzlib/LICENSE_1_0.txt)0
-rw-r--r--src/png/zlib/contrib/dotzlib/readme.txt (renamed from xs/src/png/zlib/contrib/dotzlib/readme.txt)0
-rw-r--r--src/png/zlib/contrib/gcc_gvmat64/gvmat64.S (renamed from xs/src/png/zlib/contrib/gcc_gvmat64/gvmat64.S)0
-rw-r--r--src/png/zlib/contrib/infback9/README (renamed from xs/src/png/zlib/contrib/infback9/README)0
-rw-r--r--src/png/zlib/contrib/infback9/infback9.c (renamed from xs/src/png/zlib/contrib/infback9/infback9.c)0
-rw-r--r--src/png/zlib/contrib/infback9/infback9.h (renamed from xs/src/png/zlib/contrib/infback9/infback9.h)0
-rw-r--r--src/png/zlib/contrib/infback9/inffix9.h (renamed from xs/src/png/zlib/contrib/infback9/inffix9.h)0
-rw-r--r--src/png/zlib/contrib/infback9/inflate9.h (renamed from xs/src/png/zlib/contrib/infback9/inflate9.h)0
-rw-r--r--src/png/zlib/contrib/infback9/inftree9.c (renamed from xs/src/png/zlib/contrib/infback9/inftree9.c)0
-rw-r--r--src/png/zlib/contrib/infback9/inftree9.h (renamed from xs/src/png/zlib/contrib/infback9/inftree9.h)0
-rw-r--r--src/png/zlib/contrib/inflate86/inffas86.c (renamed from xs/src/png/zlib/contrib/inflate86/inffas86.c)0
-rw-r--r--src/png/zlib/contrib/inflate86/inffast.S (renamed from xs/src/png/zlib/contrib/inflate86/inffast.S)0
-rw-r--r--src/png/zlib/contrib/iostream/test.cpp (renamed from xs/src/png/zlib/contrib/iostream/test.cpp)0
-rw-r--r--src/png/zlib/contrib/iostream/zfstream.cpp (renamed from xs/src/png/zlib/contrib/iostream/zfstream.cpp)0
-rw-r--r--src/png/zlib/contrib/iostream/zfstream.h (renamed from xs/src/png/zlib/contrib/iostream/zfstream.h)0
-rw-r--r--src/png/zlib/contrib/iostream2/zstream.h (renamed from xs/src/png/zlib/contrib/iostream2/zstream.h)0
-rw-r--r--src/png/zlib/contrib/iostream2/zstream_test.cpp (renamed from xs/src/png/zlib/contrib/iostream2/zstream_test.cpp)0
-rw-r--r--src/png/zlib/contrib/iostream3/README (renamed from xs/src/png/zlib/contrib/iostream3/README)0
-rw-r--r--src/png/zlib/contrib/iostream3/TODO (renamed from xs/src/png/zlib/contrib/iostream3/TODO)0
-rw-r--r--src/png/zlib/contrib/iostream3/test.cc (renamed from xs/src/png/zlib/contrib/iostream3/test.cc)0
-rw-r--r--src/png/zlib/contrib/iostream3/zfstream.cc (renamed from xs/src/png/zlib/contrib/iostream3/zfstream.cc)0
-rw-r--r--src/png/zlib/contrib/iostream3/zfstream.h (renamed from xs/src/png/zlib/contrib/iostream3/zfstream.h)0
-rw-r--r--src/png/zlib/contrib/masmx64/bld_ml64.bat (renamed from xs/src/png/zlib/contrib/masmx64/bld_ml64.bat)0
-rw-r--r--src/png/zlib/contrib/masmx64/gvmat64.asm (renamed from xs/src/png/zlib/contrib/masmx64/gvmat64.asm)0
-rw-r--r--src/png/zlib/contrib/masmx64/inffas8664.c (renamed from xs/src/png/zlib/contrib/masmx64/inffas8664.c)0
-rw-r--r--src/png/zlib/contrib/masmx64/inffasx64.asm (renamed from xs/src/png/zlib/contrib/masmx64/inffasx64.asm)0
-rw-r--r--src/png/zlib/contrib/masmx64/readme.txt (renamed from xs/src/png/zlib/contrib/masmx64/readme.txt)0
-rw-r--r--src/png/zlib/contrib/masmx86/bld_ml32.bat (renamed from xs/src/png/zlib/contrib/masmx86/bld_ml32.bat)0
-rw-r--r--src/png/zlib/contrib/masmx86/inffas32.asm (renamed from xs/src/png/zlib/contrib/masmx86/inffas32.asm)0
-rw-r--r--src/png/zlib/contrib/masmx86/match686.asm (renamed from xs/src/png/zlib/contrib/masmx86/match686.asm)0
-rw-r--r--src/png/zlib/contrib/masmx86/readme.txt (renamed from xs/src/png/zlib/contrib/masmx86/readme.txt)0
-rw-r--r--src/png/zlib/contrib/minizip/Makefile (renamed from xs/src/png/zlib/contrib/minizip/Makefile)0
-rw-r--r--src/png/zlib/contrib/minizip/Makefile.am (renamed from xs/src/png/zlib/contrib/minizip/Makefile.am)0
-rw-r--r--src/png/zlib/contrib/minizip/MiniZip64_Changes.txt (renamed from xs/src/png/zlib/contrib/minizip/MiniZip64_Changes.txt)0
-rw-r--r--src/png/zlib/contrib/minizip/MiniZip64_info.txt (renamed from xs/src/png/zlib/contrib/minizip/MiniZip64_info.txt)0
-rw-r--r--src/png/zlib/contrib/minizip/configure.ac (renamed from xs/src/png/zlib/contrib/minizip/configure.ac)0
-rw-r--r--src/png/zlib/contrib/minizip/crypt.h (renamed from xs/src/png/zlib/contrib/minizip/crypt.h)0
-rw-r--r--src/png/zlib/contrib/minizip/ioapi.c (renamed from xs/src/png/zlib/contrib/minizip/ioapi.c)0
-rw-r--r--src/png/zlib/contrib/minizip/ioapi.h (renamed from xs/src/png/zlib/contrib/minizip/ioapi.h)0
-rw-r--r--src/png/zlib/contrib/minizip/iowin32.c (renamed from xs/src/png/zlib/contrib/minizip/iowin32.c)0
-rw-r--r--src/png/zlib/contrib/minizip/iowin32.h (renamed from xs/src/png/zlib/contrib/minizip/iowin32.h)0
-rw-r--r--src/png/zlib/contrib/minizip/make_vms.com (renamed from xs/src/png/zlib/contrib/minizip/make_vms.com)0
-rw-r--r--src/png/zlib/contrib/minizip/miniunz.c (renamed from xs/src/png/zlib/contrib/minizip/miniunz.c)0
-rw-r--r--src/png/zlib/contrib/minizip/miniunzip.1 (renamed from xs/src/png/zlib/contrib/minizip/miniunzip.1)0
-rw-r--r--src/png/zlib/contrib/minizip/minizip.1 (renamed from xs/src/png/zlib/contrib/minizip/minizip.1)0
-rw-r--r--src/png/zlib/contrib/minizip/minizip.c (renamed from xs/src/png/zlib/contrib/minizip/minizip.c)0
-rw-r--r--src/png/zlib/contrib/minizip/minizip.pc.in (renamed from xs/src/png/zlib/contrib/minizip/minizip.pc.in)0
-rw-r--r--src/png/zlib/contrib/minizip/mztools.c (renamed from xs/src/png/zlib/contrib/minizip/mztools.c)0
-rw-r--r--src/png/zlib/contrib/minizip/mztools.h (renamed from xs/src/png/zlib/contrib/minizip/mztools.h)0
-rw-r--r--src/png/zlib/contrib/minizip/unzip.c (renamed from xs/src/png/zlib/contrib/minizip/unzip.c)0
-rw-r--r--src/png/zlib/contrib/minizip/unzip.h (renamed from xs/src/png/zlib/contrib/minizip/unzip.h)0
-rw-r--r--src/png/zlib/contrib/minizip/zip.c (renamed from xs/src/png/zlib/contrib/minizip/zip.c)0
-rw-r--r--src/png/zlib/contrib/minizip/zip.h (renamed from xs/src/png/zlib/contrib/minizip/zip.h)0
-rw-r--r--src/png/zlib/contrib/pascal/example.pas (renamed from xs/src/png/zlib/contrib/pascal/example.pas)0
-rw-r--r--src/png/zlib/contrib/pascal/readme.txt (renamed from xs/src/png/zlib/contrib/pascal/readme.txt)0
-rw-r--r--src/png/zlib/contrib/pascal/zlibd32.mak (renamed from xs/src/png/zlib/contrib/pascal/zlibd32.mak)0
-rw-r--r--src/png/zlib/contrib/pascal/zlibpas.pas (renamed from xs/src/png/zlib/contrib/pascal/zlibpas.pas)0
-rw-r--r--src/png/zlib/contrib/puff/Makefile (renamed from xs/src/png/zlib/contrib/puff/Makefile)0
-rw-r--r--src/png/zlib/contrib/puff/README (renamed from xs/src/png/zlib/contrib/puff/README)0
-rw-r--r--src/png/zlib/contrib/puff/puff.c (renamed from xs/src/png/zlib/contrib/puff/puff.c)0
-rw-r--r--src/png/zlib/contrib/puff/puff.h (renamed from xs/src/png/zlib/contrib/puff/puff.h)0
-rw-r--r--src/png/zlib/contrib/puff/pufftest.c (renamed from xs/src/png/zlib/contrib/puff/pufftest.c)0
-rw-r--r--src/png/zlib/contrib/puff/zeros.raw (renamed from xs/src/png/zlib/contrib/puff/zeros.raw)bin2517 -> 2517 bytes
-rw-r--r--src/png/zlib/contrib/testzlib/testzlib.c (renamed from xs/src/png/zlib/contrib/testzlib/testzlib.c)0
-rw-r--r--src/png/zlib/contrib/testzlib/testzlib.txt (renamed from xs/src/png/zlib/contrib/testzlib/testzlib.txt)0
-rw-r--r--src/png/zlib/contrib/untgz/Makefile (renamed from xs/src/png/zlib/contrib/untgz/Makefile)0
-rw-r--r--src/png/zlib/contrib/untgz/Makefile.msc (renamed from xs/src/png/zlib/contrib/untgz/Makefile.msc)0
-rw-r--r--src/png/zlib/contrib/untgz/untgz.c (renamed from xs/src/png/zlib/contrib/untgz/untgz.c)0
-rw-r--r--src/png/zlib/contrib/vstudio/readme.txt (renamed from xs/src/png/zlib/contrib/vstudio/readme.txt)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc10/miniunz.vcxproj (renamed from xs/src/png/zlib/contrib/vstudio/vc10/miniunz.vcxproj)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc10/miniunz.vcxproj.filters (renamed from xs/src/png/zlib/contrib/vstudio/vc10/miniunz.vcxproj.filters)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc10/minizip.vcxproj (renamed from xs/src/png/zlib/contrib/vstudio/vc10/minizip.vcxproj)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc10/minizip.vcxproj.filters (renamed from xs/src/png/zlib/contrib/vstudio/vc10/minizip.vcxproj.filters)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc10/testzlib.vcxproj (renamed from xs/src/png/zlib/contrib/vstudio/vc10/testzlib.vcxproj)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc10/testzlib.vcxproj.filters (renamed from xs/src/png/zlib/contrib/vstudio/vc10/testzlib.vcxproj.filters)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj (renamed from xs/src/png/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj.filters (renamed from xs/src/png/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj.filters)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc10/zlib.rc (renamed from xs/src/png/zlib/contrib/vstudio/vc10/zlib.rc)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc10/zlibstat.vcxproj (renamed from xs/src/png/zlib/contrib/vstudio/vc10/zlibstat.vcxproj)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc10/zlibstat.vcxproj.filters (renamed from xs/src/png/zlib/contrib/vstudio/vc10/zlibstat.vcxproj.filters)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc10/zlibvc.def (renamed from xs/src/png/zlib/contrib/vstudio/vc10/zlibvc.def)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc10/zlibvc.sln (renamed from xs/src/png/zlib/contrib/vstudio/vc10/zlibvc.sln)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc10/zlibvc.vcxproj (renamed from xs/src/png/zlib/contrib/vstudio/vc10/zlibvc.vcxproj)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc10/zlibvc.vcxproj.filters (renamed from xs/src/png/zlib/contrib/vstudio/vc10/zlibvc.vcxproj.filters)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc11/miniunz.vcxproj (renamed from xs/src/png/zlib/contrib/vstudio/vc11/miniunz.vcxproj)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc11/minizip.vcxproj (renamed from xs/src/png/zlib/contrib/vstudio/vc11/minizip.vcxproj)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc11/testzlib.vcxproj (renamed from xs/src/png/zlib/contrib/vstudio/vc11/testzlib.vcxproj)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc11/testzlibdll.vcxproj (renamed from xs/src/png/zlib/contrib/vstudio/vc11/testzlibdll.vcxproj)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc11/zlib.rc (renamed from xs/src/png/zlib/contrib/vstudio/vc11/zlib.rc)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc11/zlibstat.vcxproj (renamed from xs/src/png/zlib/contrib/vstudio/vc11/zlibstat.vcxproj)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc11/zlibvc.def (renamed from xs/src/png/zlib/contrib/vstudio/vc11/zlibvc.def)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc11/zlibvc.sln (renamed from xs/src/png/zlib/contrib/vstudio/vc11/zlibvc.sln)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc11/zlibvc.vcxproj (renamed from xs/src/png/zlib/contrib/vstudio/vc11/zlibvc.vcxproj)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc12/miniunz.vcxproj (renamed from xs/src/png/zlib/contrib/vstudio/vc12/miniunz.vcxproj)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc12/minizip.vcxproj (renamed from xs/src/png/zlib/contrib/vstudio/vc12/minizip.vcxproj)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc12/testzlib.vcxproj (renamed from xs/src/png/zlib/contrib/vstudio/vc12/testzlib.vcxproj)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc12/testzlibdll.vcxproj (renamed from xs/src/png/zlib/contrib/vstudio/vc12/testzlibdll.vcxproj)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc12/zlib.rc (renamed from xs/src/png/zlib/contrib/vstudio/vc12/zlib.rc)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc12/zlibstat.vcxproj (renamed from xs/src/png/zlib/contrib/vstudio/vc12/zlibstat.vcxproj)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc12/zlibvc.def (renamed from xs/src/png/zlib/contrib/vstudio/vc12/zlibvc.def)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc12/zlibvc.sln (renamed from xs/src/png/zlib/contrib/vstudio/vc12/zlibvc.sln)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc12/zlibvc.vcxproj (renamed from xs/src/png/zlib/contrib/vstudio/vc12/zlibvc.vcxproj)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc14/miniunz.vcxproj (renamed from xs/src/png/zlib/contrib/vstudio/vc14/miniunz.vcxproj)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc14/minizip.vcxproj (renamed from xs/src/png/zlib/contrib/vstudio/vc14/minizip.vcxproj)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc14/testzlib.vcxproj (renamed from xs/src/png/zlib/contrib/vstudio/vc14/testzlib.vcxproj)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc14/testzlibdll.vcxproj (renamed from xs/src/png/zlib/contrib/vstudio/vc14/testzlibdll.vcxproj)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc14/zlib.rc (renamed from xs/src/png/zlib/contrib/vstudio/vc14/zlib.rc)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc14/zlibstat.vcxproj (renamed from xs/src/png/zlib/contrib/vstudio/vc14/zlibstat.vcxproj)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc14/zlibvc.def (renamed from xs/src/png/zlib/contrib/vstudio/vc14/zlibvc.def)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc14/zlibvc.sln (renamed from xs/src/png/zlib/contrib/vstudio/vc14/zlibvc.sln)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc14/zlibvc.vcxproj (renamed from xs/src/png/zlib/contrib/vstudio/vc14/zlibvc.vcxproj)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc9/miniunz.vcproj (renamed from xs/src/png/zlib/contrib/vstudio/vc9/miniunz.vcproj)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc9/minizip.vcproj (renamed from xs/src/png/zlib/contrib/vstudio/vc9/minizip.vcproj)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc9/testzlib.vcproj (renamed from xs/src/png/zlib/contrib/vstudio/vc9/testzlib.vcproj)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc9/testzlibdll.vcproj (renamed from xs/src/png/zlib/contrib/vstudio/vc9/testzlibdll.vcproj)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc9/zlib.rc (renamed from xs/src/png/zlib/contrib/vstudio/vc9/zlib.rc)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc9/zlibstat.vcproj (renamed from xs/src/png/zlib/contrib/vstudio/vc9/zlibstat.vcproj)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc9/zlibvc.def (renamed from xs/src/png/zlib/contrib/vstudio/vc9/zlibvc.def)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc9/zlibvc.sln (renamed from xs/src/png/zlib/contrib/vstudio/vc9/zlibvc.sln)0
-rw-r--r--src/png/zlib/contrib/vstudio/vc9/zlibvc.vcproj (renamed from xs/src/png/zlib/contrib/vstudio/vc9/zlibvc.vcproj)0
-rw-r--r--src/png/zlib/crc32.c (renamed from xs/src/png/zlib/crc32.c)0
-rw-r--r--src/png/zlib/crc32.h (renamed from xs/src/png/zlib/crc32.h)0
-rw-r--r--src/png/zlib/deflate.c (renamed from xs/src/png/zlib/deflate.c)0
-rw-r--r--src/png/zlib/deflate.h (renamed from xs/src/png/zlib/deflate.h)0
-rw-r--r--src/png/zlib/gzclose.c (renamed from xs/src/png/zlib/gzclose.c)0
-rw-r--r--src/png/zlib/gzguts.h (renamed from xs/src/png/zlib/gzguts.h)0
-rw-r--r--src/png/zlib/gzlib.c (renamed from xs/src/png/zlib/gzlib.c)0
-rw-r--r--src/png/zlib/gzread.c (renamed from xs/src/png/zlib/gzread.c)0
-rw-r--r--src/png/zlib/gzwrite.c (renamed from xs/src/png/zlib/gzwrite.c)0
-rw-r--r--src/png/zlib/infback.c (renamed from xs/src/png/zlib/infback.c)0
-rw-r--r--src/png/zlib/inffast.c (renamed from xs/src/png/zlib/inffast.c)0
-rw-r--r--src/png/zlib/inffast.h (renamed from xs/src/png/zlib/inffast.h)0
-rw-r--r--src/png/zlib/inffixed.h (renamed from xs/src/png/zlib/inffixed.h)0
-rw-r--r--src/png/zlib/inflate.c (renamed from xs/src/png/zlib/inflate.c)0
-rw-r--r--src/png/zlib/inflate.h (renamed from xs/src/png/zlib/inflate.h)0
-rw-r--r--src/png/zlib/inftrees.c (renamed from xs/src/png/zlib/inftrees.c)0
-rw-r--r--src/png/zlib/inftrees.h (renamed from xs/src/png/zlib/inftrees.h)0
-rw-r--r--src/png/zlib/make_vms.com (renamed from xs/src/png/zlib/make_vms.com)0
-rw-r--r--src/png/zlib/msdos/Makefile.bor (renamed from xs/src/png/zlib/msdos/Makefile.bor)0
-rw-r--r--src/png/zlib/msdos/Makefile.dj2 (renamed from xs/src/png/zlib/msdos/Makefile.dj2)0
-rw-r--r--src/png/zlib/msdos/Makefile.emx (renamed from xs/src/png/zlib/msdos/Makefile.emx)0
-rw-r--r--src/png/zlib/msdos/Makefile.msc (renamed from xs/src/png/zlib/msdos/Makefile.msc)0
-rw-r--r--src/png/zlib/msdos/Makefile.tc (renamed from xs/src/png/zlib/msdos/Makefile.tc)0
-rw-r--r--src/png/zlib/nintendods/Makefile (renamed from xs/src/png/zlib/nintendods/Makefile)0
-rw-r--r--src/png/zlib/nintendods/README (renamed from xs/src/png/zlib/nintendods/README)0
-rw-r--r--src/png/zlib/old/Makefile.emx (renamed from xs/src/png/zlib/old/Makefile.emx)0
-rw-r--r--src/png/zlib/old/Makefile.riscos (renamed from xs/src/png/zlib/old/Makefile.riscos)0
-rw-r--r--src/png/zlib/old/README (renamed from xs/src/png/zlib/old/README)0
-rw-r--r--src/png/zlib/old/descrip.mms (renamed from xs/src/png/zlib/old/descrip.mms)0
-rw-r--r--src/png/zlib/old/os2/Makefile.os2 (renamed from xs/src/png/zlib/old/os2/Makefile.os2)0
-rw-r--r--src/png/zlib/old/os2/zlib.def (renamed from xs/src/png/zlib/old/os2/zlib.def)0
-rw-r--r--src/png/zlib/old/visual-basic.txt (renamed from xs/src/png/zlib/old/visual-basic.txt)0
-rw-r--r--src/png/zlib/os400/README400 (renamed from xs/src/png/zlib/os400/README400)0
-rw-r--r--src/png/zlib/os400/bndsrc (renamed from xs/src/png/zlib/os400/bndsrc)0
-rw-r--r--src/png/zlib/os400/make.sh (renamed from xs/src/png/zlib/os400/make.sh)0
-rw-r--r--src/png/zlib/os400/zlib.inc (renamed from xs/src/png/zlib/os400/zlib.inc)0
-rw-r--r--src/png/zlib/qnx/package.qpg (renamed from xs/src/png/zlib/qnx/package.qpg)0
-rw-r--r--src/png/zlib/treebuild.xml (renamed from xs/src/png/zlib/treebuild.xml)0
-rw-r--r--src/png/zlib/trees.c (renamed from xs/src/png/zlib/trees.c)0
-rw-r--r--src/png/zlib/trees.h (renamed from xs/src/png/zlib/trees.h)0
-rw-r--r--src/png/zlib/uncompr.c (renamed from xs/src/png/zlib/uncompr.c)0
-rw-r--r--src/png/zlib/watcom/watcom_f.mak (renamed from xs/src/png/zlib/watcom/watcom_f.mak)0
-rw-r--r--src/png/zlib/watcom/watcom_l.mak (renamed from xs/src/png/zlib/watcom/watcom_l.mak)0
-rw-r--r--src/png/zlib/win32/DLL_FAQ.txt (renamed from xs/src/png/zlib/win32/DLL_FAQ.txt)0
-rw-r--r--src/png/zlib/win32/Makefile.bor (renamed from xs/src/png/zlib/win32/Makefile.bor)0
-rw-r--r--src/png/zlib/win32/Makefile.gcc (renamed from xs/src/png/zlib/win32/Makefile.gcc)0
-rw-r--r--src/png/zlib/win32/Makefile.msc (renamed from xs/src/png/zlib/win32/Makefile.msc)0
-rw-r--r--src/png/zlib/win32/README-WIN32.txt (renamed from xs/src/png/zlib/win32/README-WIN32.txt)0
-rw-r--r--src/png/zlib/win32/VisualC.txt (renamed from xs/src/png/zlib/win32/VisualC.txt)0
-rw-r--r--src/png/zlib/win32/zlib.def (renamed from xs/src/png/zlib/win32/zlib.def)0
-rw-r--r--src/png/zlib/win32/zlib1.rc (renamed from xs/src/png/zlib/win32/zlib1.rc)0
-rw-r--r--src/png/zlib/zconf.h.cmakein (renamed from xs/src/png/zlib/zconf.h.cmakein)0
-rw-r--r--src/png/zlib/zconf.h.in (renamed from xs/src/png/zlib/zconf.h.in)0
-rw-r--r--src/png/zlib/zconf.h.included (renamed from xs/src/png/zlib/zconf.h.included)0
-rw-r--r--src/png/zlib/zlib.3 (renamed from xs/src/png/zlib/zlib.3)0
-rw-r--r--src/png/zlib/zlib.3.pdf (renamed from xs/src/png/zlib/zlib.3.pdf)bin19318 -> 19318 bytes
-rw-r--r--src/png/zlib/zlib.h (renamed from xs/src/png/zlib/zlib.h)0
-rw-r--r--src/png/zlib/zlib.map (renamed from xs/src/png/zlib/zlib.map)0
-rw-r--r--src/png/zlib/zlib.pc.cmakein (renamed from xs/src/png/zlib/zlib.pc.cmakein)0
-rw-r--r--src/png/zlib/zlib.pc.in (renamed from xs/src/png/zlib/zlib.pc.in)0
-rw-r--r--src/png/zlib/zlib2ansi (renamed from xs/src/png/zlib/zlib2ansi)0
-rw-r--r--src/png/zlib/zutil.c (renamed from xs/src/png/zlib/zutil.c)0
-rw-r--r--src/png/zlib/zutil.h (renamed from xs/src/png/zlib/zutil.h)0
-rw-r--r--src/poly2tri/CMakeLists.txt17
-rw-r--r--src/poly2tri/common/shapes.cc (renamed from xs/src/poly2tri/common/shapes.cc)0
-rw-r--r--src/poly2tri/common/shapes.h (renamed from xs/src/poly2tri/common/shapes.h)0
-rw-r--r--src/poly2tri/common/utils.h (renamed from xs/src/poly2tri/common/utils.h)0
-rw-r--r--src/poly2tri/poly2tri.h (renamed from xs/src/poly2tri/poly2tri.h)0
-rw-r--r--src/poly2tri/sweep/advancing_front.cc (renamed from xs/src/poly2tri/sweep/advancing_front.cc)0
-rw-r--r--src/poly2tri/sweep/advancing_front.h (renamed from xs/src/poly2tri/sweep/advancing_front.h)0
-rw-r--r--src/poly2tri/sweep/cdt.cc (renamed from xs/src/poly2tri/sweep/cdt.cc)0
-rw-r--r--src/poly2tri/sweep/cdt.h (renamed from xs/src/poly2tri/sweep/cdt.h)0
-rw-r--r--src/poly2tri/sweep/sweep.cc (renamed from xs/src/poly2tri/sweep/sweep.cc)0
-rw-r--r--src/poly2tri/sweep/sweep.h (renamed from xs/src/poly2tri/sweep/sweep.h)0
-rw-r--r--src/poly2tri/sweep/sweep_context.cc (renamed from xs/src/poly2tri/sweep/sweep_context.cc)0
-rw-r--r--src/poly2tri/sweep/sweep_context.h (renamed from xs/src/poly2tri/sweep/sweep_context.h)0
-rw-r--r--src/polypartition/CMakeLists.txt7
-rw-r--r--src/polypartition/polypartition.cpp (renamed from xs/src/polypartition.cpp)3126
-rw-r--r--src/polypartition/polypartition.h (renamed from xs/src/polypartition.h)686
-rw-r--r--src/qhull/Announce.txt (renamed from xs/src/qhull/Announce.txt)0
-rw-r--r--src/qhull/CMakeLists.txt (renamed from xs/src/qhull/CMakeLists.txt)0
-rw-r--r--src/qhull/COPYING.txt (renamed from xs/src/qhull/COPYING.txt)0
-rw-r--r--src/qhull/README.txt (renamed from xs/src/qhull/README.txt)0
-rw-r--r--src/qhull/REGISTER.txt (renamed from xs/src/qhull/REGISTER.txt)0
-rw-r--r--src/qhull/html/index.htm (renamed from xs/src/qhull/html/index.htm)0
-rw-r--r--src/qhull/html/normal_voronoi_knauss_oesterle.jpg (renamed from xs/src/qhull/html/normal_voronoi_knauss_oesterle.jpg)bin23924 -> 23924 bytes
-rw-r--r--src/qhull/html/qconvex.htm (renamed from xs/src/qhull/html/qconvex.htm)0
-rw-r--r--src/qhull/html/qdelau_f.htm (renamed from xs/src/qhull/html/qdelau_f.htm)0
-rw-r--r--src/qhull/html/qdelaun.htm (renamed from xs/src/qhull/html/qdelaun.htm)0
-rw-r--r--src/qhull/html/qh--4d.gif (renamed from xs/src/qhull/html/qh--4d.gif)bin4372 -> 4372 bytes
-rw-r--r--src/qhull/html/qh--cone.gif (renamed from xs/src/qhull/html/qh--cone.gif)bin2946 -> 2946 bytes
-rw-r--r--src/qhull/html/qh--dt.gif (renamed from xs/src/qhull/html/qh--dt.gif)bin3772 -> 3772 bytes
-rw-r--r--src/qhull/html/qh--geom.gif (renamed from xs/src/qhull/html/qh--geom.gif)bin318 -> 318 bytes
-rw-r--r--src/qhull/html/qh--half.gif (renamed from xs/src/qhull/html/qh--half.gif)bin2537 -> 2537 bytes
-rw-r--r--src/qhull/html/qh--rand.gif (renamed from xs/src/qhull/html/qh--rand.gif)bin3875 -> 3875 bytes
-rw-r--r--src/qhull/html/qh-code.htm (renamed from xs/src/qhull/html/qh-code.htm)0
-rw-r--r--src/qhull/html/qh-eg.htm (renamed from xs/src/qhull/html/qh-eg.htm)0
-rw-r--r--src/qhull/html/qh-faq.htm (renamed from xs/src/qhull/html/qh-faq.htm)0
-rw-r--r--src/qhull/html/qh-get.htm (renamed from xs/src/qhull/html/qh-get.htm)0
-rw-r--r--src/qhull/html/qh-impre.htm (renamed from xs/src/qhull/html/qh-impre.htm)0
-rw-r--r--src/qhull/html/qh-optc.htm (renamed from xs/src/qhull/html/qh-optc.htm)0
-rw-r--r--src/qhull/html/qh-optf.htm (renamed from xs/src/qhull/html/qh-optf.htm)0
-rw-r--r--src/qhull/html/qh-optg.htm (renamed from xs/src/qhull/html/qh-optg.htm)0
-rw-r--r--src/qhull/html/qh-opto.htm (renamed from xs/src/qhull/html/qh-opto.htm)0
-rw-r--r--src/qhull/html/qh-optp.htm (renamed from xs/src/qhull/html/qh-optp.htm)0
-rw-r--r--src/qhull/html/qh-optq.htm (renamed from xs/src/qhull/html/qh-optq.htm)0
-rw-r--r--src/qhull/html/qh-optt.htm (renamed from xs/src/qhull/html/qh-optt.htm)0
-rw-r--r--src/qhull/html/qh-quick.htm (renamed from xs/src/qhull/html/qh-quick.htm)0
-rw-r--r--src/qhull/html/qhalf.htm (renamed from xs/src/qhull/html/qhalf.htm)0
-rw-r--r--src/qhull/html/qhull-cpp.xml (renamed from xs/src/qhull/html/qhull-cpp.xml)0
-rw-r--r--src/qhull/html/qhull.htm (renamed from xs/src/qhull/html/qhull.htm)0
-rw-r--r--src/qhull/html/qhull.man (renamed from xs/src/qhull/html/qhull.man)0
-rw-r--r--src/qhull/html/qhull.txt (renamed from xs/src/qhull/html/qhull.txt)0
-rw-r--r--src/qhull/html/qvoron_f.htm (renamed from xs/src/qhull/html/qvoron_f.htm)0
-rw-r--r--src/qhull/html/qvoronoi.htm (renamed from xs/src/qhull/html/qvoronoi.htm)0
-rw-r--r--src/qhull/html/rbox.htm (renamed from xs/src/qhull/html/rbox.htm)0
-rw-r--r--src/qhull/html/rbox.man (renamed from xs/src/qhull/html/rbox.man)0
-rw-r--r--src/qhull/html/rbox.txt (renamed from xs/src/qhull/html/rbox.txt)0
-rw-r--r--src/qhull/index.htm (renamed from xs/src/qhull/index.htm)0
-rw-r--r--src/qhull/origCMakeLists.txt (renamed from xs/src/qhull/origCMakeLists.txt)0
-rw-r--r--src/qhull/src/Changes.txt (renamed from xs/src/qhull/src/Changes.txt)0
-rw-r--r--src/qhull/src/libqhull/DEPRECATED.txt (renamed from xs/src/qhull/src/libqhull/DEPRECATED.txt)0
-rw-r--r--src/qhull/src/libqhull/Makefile (renamed from xs/src/qhull/src/libqhull/Makefile)0
-rw-r--r--src/qhull/src/libqhull/Mborland (renamed from xs/src/qhull/src/libqhull/Mborland)0
-rw-r--r--src/qhull/src/libqhull/geom.c (renamed from xs/src/qhull/src/libqhull/geom.c)0
-rw-r--r--src/qhull/src/libqhull/geom.h (renamed from xs/src/qhull/src/libqhull/geom.h)0
-rw-r--r--src/qhull/src/libqhull/geom2.c (renamed from xs/src/qhull/src/libqhull/geom2.c)0
-rw-r--r--src/qhull/src/libqhull/global.c (renamed from xs/src/qhull/src/libqhull/global.c)0
-rw-r--r--src/qhull/src/libqhull/index.htm (renamed from xs/src/qhull/src/libqhull/index.htm)0
-rw-r--r--src/qhull/src/libqhull/io.c (renamed from xs/src/qhull/src/libqhull/io.c)0
-rw-r--r--src/qhull/src/libqhull/io.h (renamed from xs/src/qhull/src/libqhull/io.h)0
-rw-r--r--src/qhull/src/libqhull/libqhull.c (renamed from xs/src/qhull/src/libqhull/libqhull.c)0
-rw-r--r--src/qhull/src/libqhull/libqhull.h (renamed from xs/src/qhull/src/libqhull/libqhull.h)0
-rw-r--r--src/qhull/src/libqhull/libqhull.pro (renamed from xs/src/qhull/src/libqhull/libqhull.pro)0
-rw-r--r--src/qhull/src/libqhull/mem.c (renamed from xs/src/qhull/src/libqhull/mem.c)0
-rw-r--r--src/qhull/src/libqhull/mem.h (renamed from xs/src/qhull/src/libqhull/mem.h)0
-rw-r--r--src/qhull/src/libqhull/merge.c (renamed from xs/src/qhull/src/libqhull/merge.c)0
-rw-r--r--src/qhull/src/libqhull/merge.h (renamed from xs/src/qhull/src/libqhull/merge.h)0
-rw-r--r--src/qhull/src/libqhull/poly.c (renamed from xs/src/qhull/src/libqhull/poly.c)0
-rw-r--r--src/qhull/src/libqhull/poly.h (renamed from xs/src/qhull/src/libqhull/poly.h)0
-rw-r--r--src/qhull/src/libqhull/poly2.c (renamed from xs/src/qhull/src/libqhull/poly2.c)0
-rw-r--r--src/qhull/src/libqhull/qh-geom.htm (renamed from xs/src/qhull/src/libqhull/qh-geom.htm)0
-rw-r--r--src/qhull/src/libqhull/qh-globa.htm (renamed from xs/src/qhull/src/libqhull/qh-globa.htm)0
-rw-r--r--src/qhull/src/libqhull/qh-io.htm (renamed from xs/src/qhull/src/libqhull/qh-io.htm)0
-rw-r--r--src/qhull/src/libqhull/qh-mem.htm (renamed from xs/src/qhull/src/libqhull/qh-mem.htm)0
-rw-r--r--src/qhull/src/libqhull/qh-merge.htm (renamed from xs/src/qhull/src/libqhull/qh-merge.htm)0
-rw-r--r--src/qhull/src/libqhull/qh-poly.htm (renamed from xs/src/qhull/src/libqhull/qh-poly.htm)0
-rw-r--r--src/qhull/src/libqhull/qh-qhull.htm (renamed from xs/src/qhull/src/libqhull/qh-qhull.htm)0
-rw-r--r--src/qhull/src/libqhull/qh-set.htm (renamed from xs/src/qhull/src/libqhull/qh-set.htm)0
-rw-r--r--src/qhull/src/libqhull/qh-stat.htm (renamed from xs/src/qhull/src/libqhull/qh-stat.htm)0
-rw-r--r--src/qhull/src/libqhull/qh-user.htm (renamed from xs/src/qhull/src/libqhull/qh-user.htm)0
-rw-r--r--src/qhull/src/libqhull/qhull-exports.def (renamed from xs/src/qhull/src/libqhull/qhull-exports.def)0
-rw-r--r--src/qhull/src/libqhull/qhull_a.h (renamed from xs/src/qhull/src/libqhull/qhull_a.h)0
-rw-r--r--src/qhull/src/libqhull/qhull_p-exports.def (renamed from xs/src/qhull/src/libqhull/qhull_p-exports.def)0
-rw-r--r--src/qhull/src/libqhull/qset.c (renamed from xs/src/qhull/src/libqhull/qset.c)0
-rw-r--r--src/qhull/src/libqhull/qset.h (renamed from xs/src/qhull/src/libqhull/qset.h)0
-rw-r--r--src/qhull/src/libqhull/random.c (renamed from xs/src/qhull/src/libqhull/random.c)0
-rw-r--r--src/qhull/src/libqhull/random.h (renamed from xs/src/qhull/src/libqhull/random.h)0
-rw-r--r--src/qhull/src/libqhull/rboxlib.c (renamed from xs/src/qhull/src/libqhull/rboxlib.c)0
-rw-r--r--src/qhull/src/libqhull/stat.c (renamed from xs/src/qhull/src/libqhull/stat.c)0
-rw-r--r--src/qhull/src/libqhull/stat.h (renamed from xs/src/qhull/src/libqhull/stat.h)0
-rw-r--r--src/qhull/src/libqhull/user.c (renamed from xs/src/qhull/src/libqhull/user.c)0
-rw-r--r--src/qhull/src/libqhull/user.h (renamed from xs/src/qhull/src/libqhull/user.h)0
-rw-r--r--src/qhull/src/libqhull/usermem.c (renamed from xs/src/qhull/src/libqhull/usermem.c)0
-rw-r--r--src/qhull/src/libqhull/userprintf.c (renamed from xs/src/qhull/src/libqhull/userprintf.c)0
-rw-r--r--src/qhull/src/libqhull/userprintf_rbox.c (renamed from xs/src/qhull/src/libqhull/userprintf_rbox.c)0
-rw-r--r--src/qhull/src/libqhull_r/Makefile (renamed from xs/src/qhull/src/libqhull_r/Makefile)0
-rw-r--r--src/qhull/src/libqhull_r/geom2_r.c (renamed from xs/src/qhull/src/libqhull_r/geom2_r.c)0
-rw-r--r--src/qhull/src/libqhull_r/geom_r.c (renamed from xs/src/qhull/src/libqhull_r/geom_r.c)0
-rw-r--r--src/qhull/src/libqhull_r/geom_r.h (renamed from xs/src/qhull/src/libqhull_r/geom_r.h)0
-rw-r--r--src/qhull/src/libqhull_r/global_r.c (renamed from xs/src/qhull/src/libqhull_r/global_r.c)0
-rw-r--r--src/qhull/src/libqhull_r/index.htm (renamed from xs/src/qhull/src/libqhull_r/index.htm)0
-rw-r--r--src/qhull/src/libqhull_r/io_r.c (renamed from xs/src/qhull/src/libqhull_r/io_r.c)0
-rw-r--r--src/qhull/src/libqhull_r/io_r.h (renamed from xs/src/qhull/src/libqhull_r/io_r.h)0
-rw-r--r--src/qhull/src/libqhull_r/libqhull_r.c (renamed from xs/src/qhull/src/libqhull_r/libqhull_r.c)0
-rw-r--r--src/qhull/src/libqhull_r/libqhull_r.h (renamed from xs/src/qhull/src/libqhull_r/libqhull_r.h)0
-rw-r--r--src/qhull/src/libqhull_r/libqhull_r.pro (renamed from xs/src/qhull/src/libqhull_r/libqhull_r.pro)0
-rw-r--r--src/qhull/src/libqhull_r/mem_r.c (renamed from xs/src/qhull/src/libqhull_r/mem_r.c)0
-rw-r--r--src/qhull/src/libqhull_r/mem_r.h (renamed from xs/src/qhull/src/libqhull_r/mem_r.h)0
-rw-r--r--src/qhull/src/libqhull_r/merge_r.c (renamed from xs/src/qhull/src/libqhull_r/merge_r.c)0
-rw-r--r--src/qhull/src/libqhull_r/merge_r.h (renamed from xs/src/qhull/src/libqhull_r/merge_r.h)0
-rw-r--r--src/qhull/src/libqhull_r/poly2_r.c (renamed from xs/src/qhull/src/libqhull_r/poly2_r.c)0
-rw-r--r--src/qhull/src/libqhull_r/poly_r.c (renamed from xs/src/qhull/src/libqhull_r/poly_r.c)0
-rw-r--r--src/qhull/src/libqhull_r/poly_r.h (renamed from xs/src/qhull/src/libqhull_r/poly_r.h)0
-rw-r--r--src/qhull/src/libqhull_r/qh-geom_r.htm (renamed from xs/src/qhull/src/libqhull_r/qh-geom_r.htm)0
-rw-r--r--src/qhull/src/libqhull_r/qh-globa_r.htm (renamed from xs/src/qhull/src/libqhull_r/qh-globa_r.htm)0
-rw-r--r--src/qhull/src/libqhull_r/qh-io_r.htm (renamed from xs/src/qhull/src/libqhull_r/qh-io_r.htm)0
-rw-r--r--src/qhull/src/libqhull_r/qh-mem_r.htm (renamed from xs/src/qhull/src/libqhull_r/qh-mem_r.htm)0
-rw-r--r--src/qhull/src/libqhull_r/qh-merge_r.htm (renamed from xs/src/qhull/src/libqhull_r/qh-merge_r.htm)0
-rw-r--r--src/qhull/src/libqhull_r/qh-poly_r.htm (renamed from xs/src/qhull/src/libqhull_r/qh-poly_r.htm)0
-rw-r--r--src/qhull/src/libqhull_r/qh-qhull_r.htm (renamed from xs/src/qhull/src/libqhull_r/qh-qhull_r.htm)0
-rw-r--r--src/qhull/src/libqhull_r/qh-set_r.htm (renamed from xs/src/qhull/src/libqhull_r/qh-set_r.htm)0
-rw-r--r--src/qhull/src/libqhull_r/qh-stat_r.htm (renamed from xs/src/qhull/src/libqhull_r/qh-stat_r.htm)0
-rw-r--r--src/qhull/src/libqhull_r/qh-user_r.htm (renamed from xs/src/qhull/src/libqhull_r/qh-user_r.htm)0
-rw-r--r--src/qhull/src/libqhull_r/qhull_r-exports.def (renamed from xs/src/qhull/src/libqhull_r/qhull_r-exports.def)0
-rw-r--r--src/qhull/src/libqhull_r/qhull_ra.h (renamed from xs/src/qhull/src/libqhull_r/qhull_ra.h)0
-rw-r--r--src/qhull/src/libqhull_r/qset_r.c (renamed from xs/src/qhull/src/libqhull_r/qset_r.c)0
-rw-r--r--src/qhull/src/libqhull_r/qset_r.h (renamed from xs/src/qhull/src/libqhull_r/qset_r.h)0
-rw-r--r--src/qhull/src/libqhull_r/random_r.c (renamed from xs/src/qhull/src/libqhull_r/random_r.c)0
-rw-r--r--src/qhull/src/libqhull_r/random_r.h (renamed from xs/src/qhull/src/libqhull_r/random_r.h)0
-rw-r--r--src/qhull/src/libqhull_r/rboxlib_r.c (renamed from xs/src/qhull/src/libqhull_r/rboxlib_r.c)0
-rw-r--r--src/qhull/src/libqhull_r/stat_r.c (renamed from xs/src/qhull/src/libqhull_r/stat_r.c)0
-rw-r--r--src/qhull/src/libqhull_r/stat_r.h (renamed from xs/src/qhull/src/libqhull_r/stat_r.h)0
-rw-r--r--src/qhull/src/libqhull_r/user_r.c (renamed from xs/src/qhull/src/libqhull_r/user_r.c)0
-rw-r--r--src/qhull/src/libqhull_r/user_r.h (renamed from xs/src/qhull/src/libqhull_r/user_r.h)0
-rw-r--r--src/qhull/src/libqhull_r/usermem_r.c (renamed from xs/src/qhull/src/libqhull_r/usermem_r.c)0
-rw-r--r--src/qhull/src/libqhull_r/userprintf_r.c (renamed from xs/src/qhull/src/libqhull_r/userprintf_r.c)0
-rw-r--r--src/qhull/src/libqhull_r/userprintf_rbox_r.c (renamed from xs/src/qhull/src/libqhull_r/userprintf_rbox_r.c)0
-rw-r--r--src/qhull/src/libqhullcpp/Coordinates.cpp (renamed from xs/src/qhull/src/libqhullcpp/Coordinates.cpp)0
-rw-r--r--src/qhull/src/libqhullcpp/Coordinates.h (renamed from xs/src/qhull/src/libqhullcpp/Coordinates.h)0
-rw-r--r--src/qhull/src/libqhullcpp/PointCoordinates.cpp (renamed from xs/src/qhull/src/libqhullcpp/PointCoordinates.cpp)0
-rw-r--r--src/qhull/src/libqhullcpp/PointCoordinates.h (renamed from xs/src/qhull/src/libqhullcpp/PointCoordinates.h)0
-rw-r--r--src/qhull/src/libqhullcpp/Qhull.cpp (renamed from xs/src/qhull/src/libqhullcpp/Qhull.cpp)0
-rw-r--r--src/qhull/src/libqhullcpp/Qhull.h (renamed from xs/src/qhull/src/libqhullcpp/Qhull.h)0
-rw-r--r--src/qhull/src/libqhullcpp/QhullError.h (renamed from xs/src/qhull/src/libqhullcpp/QhullError.h)0
-rw-r--r--src/qhull/src/libqhullcpp/QhullFacet.cpp (renamed from xs/src/qhull/src/libqhullcpp/QhullFacet.cpp)0
-rw-r--r--src/qhull/src/libqhullcpp/QhullFacet.h (renamed from xs/src/qhull/src/libqhullcpp/QhullFacet.h)0
-rw-r--r--src/qhull/src/libqhullcpp/QhullFacetList.cpp (renamed from xs/src/qhull/src/libqhullcpp/QhullFacetList.cpp)0
-rw-r--r--src/qhull/src/libqhullcpp/QhullFacetList.h (renamed from xs/src/qhull/src/libqhullcpp/QhullFacetList.h)0
-rw-r--r--src/qhull/src/libqhullcpp/QhullFacetSet.cpp (renamed from xs/src/qhull/src/libqhullcpp/QhullFacetSet.cpp)0
-rw-r--r--src/qhull/src/libqhullcpp/QhullFacetSet.h (renamed from xs/src/qhull/src/libqhullcpp/QhullFacetSet.h)0
-rw-r--r--src/qhull/src/libqhullcpp/QhullHyperplane.cpp (renamed from xs/src/qhull/src/libqhullcpp/QhullHyperplane.cpp)0
-rw-r--r--src/qhull/src/libqhullcpp/QhullHyperplane.h (renamed from xs/src/qhull/src/libqhullcpp/QhullHyperplane.h)0
-rw-r--r--src/qhull/src/libqhullcpp/QhullIterator.h (renamed from xs/src/qhull/src/libqhullcpp/QhullIterator.h)0
-rw-r--r--src/qhull/src/libqhullcpp/QhullLinkedList.h (renamed from xs/src/qhull/src/libqhullcpp/QhullLinkedList.h)0
-rw-r--r--src/qhull/src/libqhullcpp/QhullPoint.cpp (renamed from xs/src/qhull/src/libqhullcpp/QhullPoint.cpp)0
-rw-r--r--src/qhull/src/libqhullcpp/QhullPoint.h (renamed from xs/src/qhull/src/libqhullcpp/QhullPoint.h)0
-rw-r--r--src/qhull/src/libqhullcpp/QhullPointSet.cpp (renamed from xs/src/qhull/src/libqhullcpp/QhullPointSet.cpp)0
-rw-r--r--src/qhull/src/libqhullcpp/QhullPointSet.h (renamed from xs/src/qhull/src/libqhullcpp/QhullPointSet.h)0
-rw-r--r--src/qhull/src/libqhullcpp/QhullPoints.cpp (renamed from xs/src/qhull/src/libqhullcpp/QhullPoints.cpp)0
-rw-r--r--src/qhull/src/libqhullcpp/QhullPoints.h (renamed from xs/src/qhull/src/libqhullcpp/QhullPoints.h)0
-rw-r--r--src/qhull/src/libqhullcpp/QhullQh.cpp (renamed from xs/src/qhull/src/libqhullcpp/QhullQh.cpp)0
-rw-r--r--src/qhull/src/libqhullcpp/QhullQh.h (renamed from xs/src/qhull/src/libqhullcpp/QhullQh.h)0
-rw-r--r--src/qhull/src/libqhullcpp/QhullRidge.cpp (renamed from xs/src/qhull/src/libqhullcpp/QhullRidge.cpp)0
-rw-r--r--src/qhull/src/libqhullcpp/QhullRidge.h (renamed from xs/src/qhull/src/libqhullcpp/QhullRidge.h)0
-rw-r--r--src/qhull/src/libqhullcpp/QhullSet.cpp (renamed from xs/src/qhull/src/libqhullcpp/QhullSet.cpp)0
-rw-r--r--src/qhull/src/libqhullcpp/QhullSet.h (renamed from xs/src/qhull/src/libqhullcpp/QhullSet.h)0
-rw-r--r--src/qhull/src/libqhullcpp/QhullSets.h (renamed from xs/src/qhull/src/libqhullcpp/QhullSets.h)0
-rw-r--r--src/qhull/src/libqhullcpp/QhullStat.cpp (renamed from xs/src/qhull/src/libqhullcpp/QhullStat.cpp)0
-rw-r--r--src/qhull/src/libqhullcpp/QhullStat.h (renamed from xs/src/qhull/src/libqhullcpp/QhullStat.h)0
-rw-r--r--src/qhull/src/libqhullcpp/QhullVertex.cpp (renamed from xs/src/qhull/src/libqhullcpp/QhullVertex.cpp)0
-rw-r--r--src/qhull/src/libqhullcpp/QhullVertex.h (renamed from xs/src/qhull/src/libqhullcpp/QhullVertex.h)0
-rw-r--r--src/qhull/src/libqhullcpp/QhullVertexSet.cpp (renamed from xs/src/qhull/src/libqhullcpp/QhullVertexSet.cpp)0
-rw-r--r--src/qhull/src/libqhullcpp/QhullVertexSet.h (renamed from xs/src/qhull/src/libqhullcpp/QhullVertexSet.h)0
-rw-r--r--src/qhull/src/libqhullcpp/RboxPoints.cpp (renamed from xs/src/qhull/src/libqhullcpp/RboxPoints.cpp)0
-rw-r--r--src/qhull/src/libqhullcpp/RboxPoints.h (renamed from xs/src/qhull/src/libqhullcpp/RboxPoints.h)0
-rw-r--r--src/qhull/src/libqhullcpp/RoadError.cpp (renamed from xs/src/qhull/src/libqhullcpp/RoadError.cpp)0
-rw-r--r--src/qhull/src/libqhullcpp/RoadError.h (renamed from xs/src/qhull/src/libqhullcpp/RoadError.h)0
-rw-r--r--src/qhull/src/libqhullcpp/RoadLogEvent.cpp (renamed from xs/src/qhull/src/libqhullcpp/RoadLogEvent.cpp)0
-rw-r--r--src/qhull/src/libqhullcpp/RoadLogEvent.h (renamed from xs/src/qhull/src/libqhullcpp/RoadLogEvent.h)0
-rw-r--r--src/qhull/src/libqhullcpp/functionObjects.h (renamed from xs/src/qhull/src/libqhullcpp/functionObjects.h)0
-rw-r--r--src/qhull/src/libqhullcpp/libqhullcpp.pro (renamed from xs/src/qhull/src/libqhullcpp/libqhullcpp.pro)0
-rw-r--r--src/qhull/src/libqhullcpp/qt-qhull.cpp (renamed from xs/src/qhull/src/libqhullcpp/qt-qhull.cpp)0
-rw-r--r--src/qhull/src/libqhullcpp/usermem_r-cpp.cpp (renamed from xs/src/qhull/src/libqhullcpp/usermem_r-cpp.cpp)0
-rw-r--r--src/qhull/src/libqhullstatic/libqhullstatic.pro (renamed from xs/src/qhull/src/libqhullstatic/libqhullstatic.pro)0
-rw-r--r--src/qhull/src/libqhullstatic_r/libqhullstatic_r.pro (renamed from xs/src/qhull/src/libqhullstatic_r/libqhullstatic_r.pro)0
-rw-r--r--src/qhull/src/qconvex/qconvex.c (renamed from xs/src/qhull/src/qconvex/qconvex.c)0
-rw-r--r--src/qhull/src/qconvex/qconvex.pro (renamed from xs/src/qhull/src/qconvex/qconvex.pro)0
-rw-r--r--src/qhull/src/qconvex/qconvex_r.c (renamed from xs/src/qhull/src/qconvex/qconvex_r.c)0
-rw-r--r--src/qhull/src/qdelaunay/qdelaun.c (renamed from xs/src/qhull/src/qdelaunay/qdelaun.c)0
-rw-r--r--src/qhull/src/qdelaunay/qdelaun_r.c (renamed from xs/src/qhull/src/qdelaunay/qdelaun_r.c)0
-rw-r--r--src/qhull/src/qdelaunay/qdelaunay.pro (renamed from xs/src/qhull/src/qdelaunay/qdelaunay.pro)0
-rw-r--r--src/qhull/src/qhalf/qhalf.c (renamed from xs/src/qhull/src/qhalf/qhalf.c)0
-rw-r--r--src/qhull/src/qhalf/qhalf.pro (renamed from xs/src/qhull/src/qhalf/qhalf.pro)0
-rw-r--r--src/qhull/src/qhalf/qhalf_r.c (renamed from xs/src/qhull/src/qhalf/qhalf_r.c)0
-rw-r--r--src/qhull/src/qhull-all.pro (renamed from xs/src/qhull/src/qhull-all.pro)0
-rw-r--r--src/qhull/src/qhull-app-c.pri (renamed from xs/src/qhull/src/qhull-app-c.pri)0
-rw-r--r--src/qhull/src/qhull-app-c_r.pri (renamed from xs/src/qhull/src/qhull-app-c_r.pri)0
-rw-r--r--src/qhull/src/qhull-app-cpp.pri (renamed from xs/src/qhull/src/qhull-app-cpp.pri)0
-rw-r--r--src/qhull/src/qhull-app-shared.pri (renamed from xs/src/qhull/src/qhull-app-shared.pri)0
-rw-r--r--src/qhull/src/qhull-app-shared_r.pri (renamed from xs/src/qhull/src/qhull-app-shared_r.pri)0
-rw-r--r--src/qhull/src/qhull-libqhull-src.pri (renamed from xs/src/qhull/src/qhull-libqhull-src.pri)0
-rw-r--r--src/qhull/src/qhull-libqhull-src_r.pri (renamed from xs/src/qhull/src/qhull-libqhull-src_r.pri)0
-rw-r--r--src/qhull/src/qhull-warn.pri (renamed from xs/src/qhull/src/qhull-warn.pri)0
-rw-r--r--src/qhull/src/qhull/qhull.pro (renamed from xs/src/qhull/src/qhull/qhull.pro)0
-rw-r--r--src/qhull/src/qhull/unix.c (renamed from xs/src/qhull/src/qhull/unix.c)0
-rw-r--r--src/qhull/src/qhull/unix_r.c (renamed from xs/src/qhull/src/qhull/unix_r.c)0
-rw-r--r--src/qhull/src/qhulltest/Coordinates_test.cpp (renamed from xs/src/qhull/src/qhulltest/Coordinates_test.cpp)0
-rw-r--r--src/qhull/src/qhulltest/PointCoordinates_test.cpp (renamed from xs/src/qhull/src/qhulltest/PointCoordinates_test.cpp)0
-rw-r--r--src/qhull/src/qhulltest/QhullFacetList_test.cpp (renamed from xs/src/qhull/src/qhulltest/QhullFacetList_test.cpp)0
-rw-r--r--src/qhull/src/qhulltest/QhullFacetSet_test.cpp (renamed from xs/src/qhull/src/qhulltest/QhullFacetSet_test.cpp)0
-rw-r--r--src/qhull/src/qhulltest/QhullFacet_test.cpp (renamed from xs/src/qhull/src/qhulltest/QhullFacet_test.cpp)0
-rw-r--r--src/qhull/src/qhulltest/QhullHyperplane_test.cpp (renamed from xs/src/qhull/src/qhulltest/QhullHyperplane_test.cpp)0
-rw-r--r--src/qhull/src/qhulltest/QhullLinkedList_test.cpp (renamed from xs/src/qhull/src/qhulltest/QhullLinkedList_test.cpp)0
-rw-r--r--src/qhull/src/qhulltest/QhullPointSet_test.cpp (renamed from xs/src/qhull/src/qhulltest/QhullPointSet_test.cpp)0
-rw-r--r--src/qhull/src/qhulltest/QhullPoint_test.cpp (renamed from xs/src/qhull/src/qhulltest/QhullPoint_test.cpp)0
-rw-r--r--src/qhull/src/qhulltest/QhullPoints_test.cpp (renamed from xs/src/qhull/src/qhulltest/QhullPoints_test.cpp)0
-rw-r--r--src/qhull/src/qhulltest/QhullRidge_test.cpp (renamed from xs/src/qhull/src/qhulltest/QhullRidge_test.cpp)0
-rw-r--r--src/qhull/src/qhulltest/QhullSet_test.cpp (renamed from xs/src/qhull/src/qhulltest/QhullSet_test.cpp)0
-rw-r--r--src/qhull/src/qhulltest/QhullVertexSet_test.cpp (renamed from xs/src/qhull/src/qhulltest/QhullVertexSet_test.cpp)0
-rw-r--r--src/qhull/src/qhulltest/QhullVertex_test.cpp (renamed from xs/src/qhull/src/qhulltest/QhullVertex_test.cpp)0
-rw-r--r--src/qhull/src/qhulltest/Qhull_test.cpp (renamed from xs/src/qhull/src/qhulltest/Qhull_test.cpp)0
-rw-r--r--src/qhull/src/qhulltest/RboxPoints_test.cpp (renamed from xs/src/qhull/src/qhulltest/RboxPoints_test.cpp)0
-rw-r--r--src/qhull/src/qhulltest/RoadTest.cpp (renamed from xs/src/qhull/src/qhulltest/RoadTest.cpp)0
-rw-r--r--src/qhull/src/qhulltest/RoadTest.h (renamed from xs/src/qhull/src/qhulltest/RoadTest.h)0
-rw-r--r--src/qhull/src/qhulltest/qhulltest.cpp (renamed from xs/src/qhull/src/qhulltest/qhulltest.cpp)0
-rw-r--r--src/qhull/src/qhulltest/qhulltest.pro (renamed from xs/src/qhull/src/qhulltest/qhulltest.pro)0
-rw-r--r--src/qhull/src/qvoronoi/qvoronoi.c (renamed from xs/src/qhull/src/qvoronoi/qvoronoi.c)0
-rw-r--r--src/qhull/src/qvoronoi/qvoronoi.pro (renamed from xs/src/qhull/src/qvoronoi/qvoronoi.pro)0
-rw-r--r--src/qhull/src/qvoronoi/qvoronoi_r.c (renamed from xs/src/qhull/src/qvoronoi/qvoronoi_r.c)0
-rw-r--r--src/qhull/src/rbox/rbox.c (renamed from xs/src/qhull/src/rbox/rbox.c)0
-rw-r--r--src/qhull/src/rbox/rbox.pro (renamed from xs/src/qhull/src/rbox/rbox.pro)0
-rw-r--r--src/qhull/src/rbox/rbox_r.c (renamed from xs/src/qhull/src/rbox/rbox_r.c)0
-rw-r--r--src/qhull/src/testqset/testqset.c (renamed from xs/src/qhull/src/testqset/testqset.c)0
-rw-r--r--src/qhull/src/testqset/testqset.pro (renamed from xs/src/qhull/src/testqset/testqset.pro)0
-rw-r--r--src/qhull/src/testqset_r/testqset_r.c (renamed from xs/src/qhull/src/testqset_r/testqset_r.c)0
-rw-r--r--src/qhull/src/testqset_r/testqset_r.pro (renamed from xs/src/qhull/src/testqset_r/testqset_r.pro)0
-rw-r--r--src/qhull/src/user_eg/user_eg.c (renamed from xs/src/qhull/src/user_eg/user_eg.c)0
-rw-r--r--src/qhull/src/user_eg/user_eg.pro (renamed from xs/src/qhull/src/user_eg/user_eg.pro)0
-rw-r--r--src/qhull/src/user_eg/user_eg_r.c (renamed from xs/src/qhull/src/user_eg/user_eg_r.c)0
-rw-r--r--src/qhull/src/user_eg2/user_eg2.c (renamed from xs/src/qhull/src/user_eg2/user_eg2.c)0
-rw-r--r--src/qhull/src/user_eg2/user_eg2.pro (renamed from xs/src/qhull/src/user_eg2/user_eg2.pro)0
-rw-r--r--src/qhull/src/user_eg2/user_eg2_r.c (renamed from xs/src/qhull/src/user_eg2/user_eg2_r.c)0
-rw-r--r--src/qhull/src/user_eg3/user_eg3.pro (renamed from xs/src/qhull/src/user_eg3/user_eg3.pro)0
-rw-r--r--src/qhull/src/user_eg3/user_eg3_r.cpp (renamed from xs/src/qhull/src/user_eg3/user_eg3_r.cpp)0
-rw-r--r--src/semver/CMakeLists.txt7
-rw-r--r--src/semver/semver.c (renamed from xs/src/semver/semver.c)0
-rw-r--r--src/semver/semver.h (renamed from xs/src/semver/semver.h)0
-rw-r--r--src/slic3r.cpp81
-rw-r--r--src/slic3r/AppController.cpp (renamed from xs/src/slic3r/AppController.cpp)0
-rw-r--r--src/slic3r/AppController.hpp (renamed from xs/src/slic3r/AppController.hpp)0
-rw-r--r--src/slic3r/AppControllerWx.cpp (renamed from xs/src/slic3r/AppControllerWx.cpp)0
-rw-r--r--src/slic3r/CMakeLists.txt106
-rw-r--r--src/slic3r/Config/Snapshot.cpp (renamed from xs/src/slic3r/Config/Snapshot.cpp)0
-rw-r--r--src/slic3r/Config/Snapshot.hpp (renamed from xs/src/slic3r/Config/Snapshot.hpp)0
-rw-r--r--src/slic3r/Config/Version.cpp (renamed from xs/src/slic3r/Config/Version.cpp)0
-rw-r--r--src/slic3r/Config/Version.hpp (renamed from xs/src/slic3r/Config/Version.hpp)0
-rw-r--r--src/slic3r/GUI/2DBed.cpp (renamed from xs/src/slic3r/GUI/2DBed.cpp)0
-rw-r--r--src/slic3r/GUI/2DBed.hpp (renamed from xs/src/slic3r/GUI/2DBed.hpp)0
-rw-r--r--src/slic3r/GUI/3DScene.cpp (renamed from xs/src/slic3r/GUI/3DScene.cpp)0
-rw-r--r--src/slic3r/GUI/3DScene.hpp (renamed from xs/src/slic3r/GUI/3DScene.hpp)0
-rw-r--r--src/slic3r/GUI/AboutDialog.cpp (renamed from xs/src/slic3r/GUI/AboutDialog.cpp)0
-rw-r--r--src/slic3r/GUI/AboutDialog.hpp (renamed from xs/src/slic3r/GUI/AboutDialog.hpp)0
-rw-r--r--src/slic3r/GUI/AppConfig.cpp (renamed from xs/src/slic3r/GUI/AppConfig.cpp)0
-rw-r--r--src/slic3r/GUI/AppConfig.hpp (renamed from xs/src/slic3r/GUI/AppConfig.hpp)0
-rw-r--r--src/slic3r/GUI/BackgroundSlicingProcess.cpp (renamed from xs/src/slic3r/GUI/BackgroundSlicingProcess.cpp)0
-rw-r--r--src/slic3r/GUI/BackgroundSlicingProcess.hpp (renamed from xs/src/slic3r/GUI/BackgroundSlicingProcess.hpp)0
-rw-r--r--src/slic3r/GUI/BedShapeDialog.cpp (renamed from xs/src/slic3r/GUI/BedShapeDialog.cpp)0
-rw-r--r--src/slic3r/GUI/BedShapeDialog.hpp (renamed from xs/src/slic3r/GUI/BedShapeDialog.hpp)0
-rw-r--r--src/slic3r/GUI/BitmapCache.cpp (renamed from xs/src/slic3r/GUI/BitmapCache.cpp)0
-rw-r--r--src/slic3r/GUI/BitmapCache.hpp (renamed from xs/src/slic3r/GUI/BitmapCache.hpp)0
-rw-r--r--src/slic3r/GUI/BonjourDialog.cpp (renamed from xs/src/slic3r/GUI/BonjourDialog.cpp)0
-rw-r--r--src/slic3r/GUI/BonjourDialog.hpp (renamed from xs/src/slic3r/GUI/BonjourDialog.hpp)0
-rw-r--r--src/slic3r/GUI/ButtonsDescription.cpp (renamed from xs/src/slic3r/GUI/ButtonsDescription.cpp)0
-rw-r--r--src/slic3r/GUI/ButtonsDescription.hpp (renamed from xs/src/slic3r/GUI/ButtonsDescription.hpp)0
-rw-r--r--src/slic3r/GUI/ConfigExceptions.hpp (renamed from xs/src/slic3r/GUI/ConfigExceptions.hpp)0
-rw-r--r--src/slic3r/GUI/ConfigSnapshotDialog.cpp (renamed from xs/src/slic3r/GUI/ConfigSnapshotDialog.cpp)0
-rw-r--r--src/slic3r/GUI/ConfigSnapshotDialog.hpp (renamed from xs/src/slic3r/GUI/ConfigSnapshotDialog.hpp)0
-rw-r--r--src/slic3r/GUI/ConfigWizard.cpp (renamed from xs/src/slic3r/GUI/ConfigWizard.cpp)0
-rw-r--r--src/slic3r/GUI/ConfigWizard.hpp (renamed from xs/src/slic3r/GUI/ConfigWizard.hpp)0
-rw-r--r--src/slic3r/GUI/ConfigWizard_private.hpp (renamed from xs/src/slic3r/GUI/ConfigWizard_private.hpp)0
-rw-r--r--src/slic3r/GUI/Field.cpp (renamed from xs/src/slic3r/GUI/Field.cpp)0
-rw-r--r--src/slic3r/GUI/Field.hpp (renamed from xs/src/slic3r/GUI/Field.hpp)0
-rw-r--r--src/slic3r/GUI/FirmwareDialog.cpp (renamed from xs/src/slic3r/GUI/FirmwareDialog.cpp)0
-rw-r--r--src/slic3r/GUI/FirmwareDialog.hpp (renamed from xs/src/slic3r/GUI/FirmwareDialog.hpp)0
-rw-r--r--src/slic3r/GUI/GLCanvas3D.cpp (renamed from xs/src/slic3r/GUI/GLCanvas3D.cpp)0
-rw-r--r--src/slic3r/GUI/GLCanvas3D.hpp (renamed from xs/src/slic3r/GUI/GLCanvas3D.hpp)0
-rw-r--r--src/slic3r/GUI/GLCanvas3DManager.cpp (renamed from xs/src/slic3r/GUI/GLCanvas3DManager.cpp)0
-rw-r--r--src/slic3r/GUI/GLCanvas3DManager.hpp (renamed from xs/src/slic3r/GUI/GLCanvas3DManager.hpp)0
-rw-r--r--src/slic3r/GUI/GLGizmo.cpp (renamed from xs/src/slic3r/GUI/GLGizmo.cpp)0
-rw-r--r--src/slic3r/GUI/GLGizmo.hpp (renamed from xs/src/slic3r/GUI/GLGizmo.hpp)0
-rw-r--r--src/slic3r/GUI/GLShader.cpp (renamed from xs/src/slic3r/GUI/GLShader.cpp)0
-rw-r--r--src/slic3r/GUI/GLShader.hpp (renamed from xs/src/slic3r/GUI/GLShader.hpp)0
-rw-r--r--src/slic3r/GUI/GLTexture.cpp (renamed from xs/src/slic3r/GUI/GLTexture.cpp)0
-rw-r--r--src/slic3r/GUI/GLTexture.hpp (renamed from xs/src/slic3r/GUI/GLTexture.hpp)0
-rw-r--r--src/slic3r/GUI/GLToolbar.cpp (renamed from xs/src/slic3r/GUI/GLToolbar.cpp)0
-rw-r--r--src/slic3r/GUI/GLToolbar.hpp (renamed from xs/src/slic3r/GUI/GLToolbar.hpp)0
-rw-r--r--src/slic3r/GUI/GUI.cpp (renamed from xs/src/slic3r/GUI/GUI.cpp)15
-rw-r--r--src/slic3r/GUI/GUI.hpp (renamed from xs/src/slic3r/GUI/GUI.hpp)5
-rw-r--r--src/slic3r/GUI/GUI_ObjectParts.cpp (renamed from xs/src/slic3r/GUI/GUI_ObjectParts.cpp)0
-rw-r--r--src/slic3r/GUI/GUI_ObjectParts.hpp (renamed from xs/src/slic3r/GUI/GUI_ObjectParts.hpp)0
-rw-r--r--src/slic3r/GUI/LambdaObjectDialog.cpp (renamed from xs/src/slic3r/GUI/LambdaObjectDialog.cpp)0
-rw-r--r--src/slic3r/GUI/LambdaObjectDialog.hpp (renamed from xs/src/slic3r/GUI/LambdaObjectDialog.hpp)0
-rw-r--r--src/slic3r/GUI/MsgDialog.cpp (renamed from xs/src/slic3r/GUI/MsgDialog.cpp)0
-rw-r--r--src/slic3r/GUI/MsgDialog.hpp (renamed from xs/src/slic3r/GUI/MsgDialog.hpp)0
-rw-r--r--src/slic3r/GUI/OptionsGroup.cpp (renamed from xs/src/slic3r/GUI/OptionsGroup.cpp)0
-rw-r--r--src/slic3r/GUI/OptionsGroup.hpp (renamed from xs/src/slic3r/GUI/OptionsGroup.hpp)0
-rw-r--r--src/slic3r/GUI/Preferences.cpp (renamed from xs/src/slic3r/GUI/Preferences.cpp)0
-rw-r--r--src/slic3r/GUI/Preferences.hpp (renamed from xs/src/slic3r/GUI/Preferences.hpp)0
-rw-r--r--src/slic3r/GUI/Preset.cpp (renamed from xs/src/slic3r/GUI/Preset.cpp)0
-rw-r--r--src/slic3r/GUI/Preset.hpp (renamed from xs/src/slic3r/GUI/Preset.hpp)0
-rw-r--r--src/slic3r/GUI/PresetBundle.cpp (renamed from xs/src/slic3r/GUI/PresetBundle.cpp)0
-rw-r--r--src/slic3r/GUI/PresetBundle.hpp (renamed from xs/src/slic3r/GUI/PresetBundle.hpp)0
-rw-r--r--src/slic3r/GUI/PresetHints.cpp (renamed from xs/src/slic3r/GUI/PresetHints.cpp)0
-rw-r--r--src/slic3r/GUI/PresetHints.hpp (renamed from xs/src/slic3r/GUI/PresetHints.hpp)0
-rw-r--r--src/slic3r/GUI/ProgressIndicator.hpp (renamed from xs/src/slic3r/GUI/ProgressIndicator.hpp)0
-rw-r--r--src/slic3r/GUI/ProgressStatusBar.cpp (renamed from xs/src/slic3r/GUI/ProgressStatusBar.cpp)0
-rw-r--r--src/slic3r/GUI/ProgressStatusBar.hpp (renamed from xs/src/slic3r/GUI/ProgressStatusBar.hpp)2
-rw-r--r--src/slic3r/GUI/RammingChart.cpp (renamed from xs/src/slic3r/GUI/RammingChart.cpp)0
-rw-r--r--src/slic3r/GUI/RammingChart.hpp (renamed from xs/src/slic3r/GUI/RammingChart.hpp)0
-rw-r--r--src/slic3r/GUI/Tab.cpp (renamed from xs/src/slic3r/GUI/Tab.cpp)0
-rw-r--r--src/slic3r/GUI/Tab.hpp (renamed from xs/src/slic3r/GUI/Tab.hpp)0
-rw-r--r--src/slic3r/GUI/TabIface.cpp (renamed from xs/src/slic3r/GUI/TabIface.cpp)0
-rw-r--r--src/slic3r/GUI/TabIface.hpp (renamed from xs/src/slic3r/GUI/TabIface.hpp)0
-rw-r--r--src/slic3r/GUI/UpdateDialogs.cpp (renamed from xs/src/slic3r/GUI/UpdateDialogs.cpp)0
-rw-r--r--src/slic3r/GUI/UpdateDialogs.hpp (renamed from xs/src/slic3r/GUI/UpdateDialogs.hpp)0
-rw-r--r--src/slic3r/GUI/Widget.hpp (renamed from xs/src/slic3r/GUI/Widget.hpp)0
-rw-r--r--src/slic3r/GUI/WipeTowerDialog.cpp (renamed from xs/src/slic3r/GUI/WipeTowerDialog.cpp)0
-rw-r--r--src/slic3r/GUI/WipeTowerDialog.hpp (renamed from xs/src/slic3r/GUI/WipeTowerDialog.hpp)0
-rw-r--r--src/slic3r/GUI/callback.hpp30
-rw-r--r--src/slic3r/GUI/wxExtensions.cpp (renamed from xs/src/slic3r/GUI/wxExtensions.cpp)0
-rw-r--r--src/slic3r/GUI/wxExtensions.hpp (renamed from xs/src/slic3r/GUI/wxExtensions.hpp)0
-rw-r--r--src/slic3r/GUI/wxinit.h (renamed from xs/src/slic3r/GUI/wxinit.h)0
-rw-r--r--src/slic3r/Utils/ASCIIFolding.cpp (renamed from xs/src/slic3r/Utils/ASCIIFolding.cpp)0
-rw-r--r--src/slic3r/Utils/ASCIIFolding.hpp (renamed from xs/src/slic3r/Utils/ASCIIFolding.hpp)0
-rw-r--r--src/slic3r/Utils/Bonjour.cpp (renamed from xs/src/slic3r/Utils/Bonjour.cpp)0
-rw-r--r--src/slic3r/Utils/Bonjour.hpp (renamed from xs/src/slic3r/Utils/Bonjour.hpp)0
-rw-r--r--src/slic3r/Utils/Duet.cpp (renamed from xs/src/slic3r/Utils/Duet.cpp)0
-rw-r--r--src/slic3r/Utils/Duet.hpp (renamed from xs/src/slic3r/Utils/Duet.hpp)0
-rw-r--r--src/slic3r/Utils/FixModelByWin10.cpp (renamed from xs/src/slic3r/Utils/FixModelByWin10.cpp)0
-rw-r--r--src/slic3r/Utils/FixModelByWin10.hpp (renamed from xs/src/slic3r/Utils/FixModelByWin10.hpp)0
-rw-r--r--src/slic3r/Utils/HexFile.cpp (renamed from xs/src/slic3r/Utils/HexFile.cpp)0
-rw-r--r--src/slic3r/Utils/HexFile.hpp (renamed from xs/src/slic3r/Utils/HexFile.hpp)0
-rw-r--r--src/slic3r/Utils/Http.cpp (renamed from xs/src/slic3r/Utils/Http.cpp)0
-rw-r--r--src/slic3r/Utils/Http.hpp (renamed from xs/src/slic3r/Utils/Http.hpp)0
-rw-r--r--src/slic3r/Utils/OctoPrint.cpp (renamed from xs/src/slic3r/Utils/OctoPrint.cpp)0
-rw-r--r--src/slic3r/Utils/OctoPrint.hpp (renamed from xs/src/slic3r/Utils/OctoPrint.hpp)0
-rw-r--r--src/slic3r/Utils/PresetUpdater.cpp (renamed from xs/src/slic3r/Utils/PresetUpdater.cpp)0
-rw-r--r--src/slic3r/Utils/PresetUpdater.hpp (renamed from xs/src/slic3r/Utils/PresetUpdater.hpp)0
-rw-r--r--src/slic3r/Utils/PrintHost.cpp (renamed from xs/src/slic3r/Utils/PrintHost.cpp)0
-rw-r--r--src/slic3r/Utils/PrintHost.hpp (renamed from xs/src/slic3r/Utils/PrintHost.hpp)0
-rw-r--r--src/slic3r/Utils/PrintHostSendDialog.cpp (renamed from xs/src/slic3r/Utils/PrintHostSendDialog.cpp)0
-rw-r--r--src/slic3r/Utils/PrintHostSendDialog.hpp (renamed from xs/src/slic3r/Utils/PrintHostSendDialog.hpp)0
-rw-r--r--src/slic3r/Utils/Semver.hpp (renamed from xs/src/slic3r/Utils/Semver.hpp)0
-rw-r--r--src/slic3r/Utils/Serial.cpp (renamed from xs/src/slic3r/Utils/Serial.cpp)0
-rw-r--r--src/slic3r/Utils/Serial.hpp (renamed from xs/src/slic3r/Utils/Serial.hpp)0
-rw-r--r--src/slic3r/Utils/Time.cpp (renamed from xs/src/slic3r/Utils/Time.cpp)0
-rw-r--r--src/slic3r/Utils/Time.hpp (renamed from xs/src/slic3r/Utils/Time.hpp)0
-rw-r--r--xs/CMakeLists.txt685
-rw-r--r--xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s01s01.html~215
-rw-r--r--xs/src/libnest2d/tools/benchmark.h58
-rw-r--r--xs/src/slic3r/GUI/wxPerlIface.cpp97
1706 files changed, 7413 insertions, 7638 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8e3d8ad4d..1e1817f54 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,6 +1,5 @@
-cmake_minimum_required(VERSION 3.2)
-
project(Slic3r)
+cmake_minimum_required(VERSION 3.2)
if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
message(STATUS "No build type selected, default to Release")
@@ -48,7 +47,6 @@ else()
set(PERL5LIB_ENV_CMD ${CMAKE_COMMAND} -E env PERL5LIB=${PERL_INCLUDE})
endif()
-
# CMAKE_PREFIX_PATH is used to point CMake to the remaining dependencies (Boost, TBB, ...)
# We pick it from environment if it is not defined in another way
if(NOT DEFINED CMAKE_PREFIX_PATH)
@@ -57,8 +55,19 @@ if(NOT DEFINED CMAKE_PREFIX_PATH)
endif()
endif()
+# Add our own cmake module path.
+list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/modules/)
+
enable_testing ()
+# Enable C++11 language standard.
+set(CMAKE_CXX_STANDARD 11)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+
+# Enable C11 language standard.
+set(CMAKE_C_STANDARD 11)
+set(CMAKE_C_STANDARD_REQUIRED ON)
+
# WIN10SDK_PATH is used to point CMake to the WIN10 SDK installation directory.
# We pick it from environment if it is not defined in another way
if(WIN32)
@@ -75,6 +84,187 @@ if(WIN32)
endif()
endif()
+if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
+ # Workaround for an old CMake, which does not understand CMAKE_CXX_STANDARD.
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wno-reorder" )
+ find_package(PkgConfig REQUIRED)
+endif()
+
+if (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUXX)
+ # Adding -fext-numeric-literals to enable GCC extensions on definitions of quad float literals, which are required by Boost.
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fext-numeric-literals" )
+endif()
+
+# Where all the bundled libraries reside?
+set(LIBDIR ${CMAKE_CURRENT_SOURCE_DIR}/src/)
+# For the bundled boost libraries (boost::nowide)
+include_directories(${LIBDIR})
+# For libslic3r.h
+include_directories(${LIBDIR}/libslic3r ${LIBDIR}/clipper ${LIBDIR}/polypartition)
+#set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+if(WIN32)
+ # BOOST_ALL_NO_LIB: Avoid the automatic linking of Boost libraries on Windows. Rather rely on explicit linking.
+ add_definitions(-D_USE_MATH_DEFINES -D_WIN32 -DBOOST_ALL_NO_LIB -DBOOST_USE_WINAPI_VERSION=0x601)
+endif()
+
+add_definitions(-DwxUSE_UNICODE -D_UNICODE -DUNICODE -DWXINTL_NO_GETTEXT_MACRO)
+
+if (SLIC3R_PROFILE)
+ message("Slic3r will be built with a Shiny invasive profiler")
+ add_definitions(-DSLIC3R_PROFILE)
+endif ()
+
+# Perl specific stuff
+find_package(PerlLibs REQUIRED)
+set(PerlEmbed_DEBUG 1)
+find_package(PerlEmbed REQUIRED)
+# If the Perl is compiled with optimization off, disable optimization over the whole project.
+if (WIN32 AND ";${PerlEmbed_CCFLAGS};" MATCHES ";[-/]Od;")
+ message(STATUS "Perl compiled without optimization. Disabling optimization for the Slic3r build.")
+ message("Old CMAKE_CXX_FLAGS_RELEASE: ${CMAKE_CXX_FLAGS_RELEASE}")
+ message("Old CMAKE_CXX_FLAGS_RELWITHDEBINFO: ${CMAKE_CXX_FLAGS_RELEASE}")
+ message("Old CMAKE_CXX_FLAGS: ${CMAKE_CXX_FLAGS_RELEASE}")
+ set(CMAKE_CXX_FLAGS_RELEASE "/MD /Od /Zi /EHsc /DNDEBUG /DWIN32 /DTBB_USE_ASSERT")
+ set(CMAKE_C_FLAGS_RELEASE "/MD /Od /Zi /DNDEBUG /DWIN32 /DTBB_USE_ASSERT")
+ set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "/MD /Od /Zi /EHsc /DNDEBUG /DWIN32 /DTBB_USE_ASSERT")
+ set(CMAKE_C_FLAGS_RELWITHDEBINFO "/MD /Od /Zi /DNDEBUG /DWIN32 /DTBB_USE_ASSERT")
+ set(CMAKE_CXX_FLAGS "/MD /Od /Zi /EHsc /DNDEBUG /DWIN32 /DTBB_USE_ASSERT")
+ set(CMAKE_C_FLAGS "/MD /Od /Zi /DNDEBUG /DWIN32 /DTBB_USE_ASSERT")
+endif()
+# The following line will add -fPIC on Linux to make the XS.so rellocable.
+add_definitions(${PerlEmbed_CCCDLFLAGS})
+
+# Find and configure boost
+if(SLIC3R_STATIC)
+ # Use static boost libraries.
+ set(Boost_USE_STATIC_LIBS ON)
+ # Use boost libraries linked statically to the C++ runtime.
+ # set(Boost_USE_STATIC_RUNTIME ON)
+endif()
+#set(Boost_DEBUG ON)
+find_package(Boost REQUIRED COMPONENTS system filesystem thread log locale regex)
+if(Boost_FOUND)
+ include_directories(${Boost_INCLUDE_DIRS})
+ if (APPLE)
+ # BOOST_ASIO_DISABLE_KQUEUE : prevents a Boost ASIO bug on OS X: https://svn.boost.org/trac/boost/ticket/5339
+ add_definitions(-DBOOST_ASIO_DISABLE_KQUEUE)
+ endif()
+ if(NOT SLIC3R_STATIC)
+ add_definitions(-DBOOST_LOG_DYN_LINK)
+ endif()
+endif()
+
+# Find and configure intel-tbb
+if(SLIC3R_STATIC)
+ set(TBB_STATIC 1)
+endif()
+set(TBB_DEBUG 1)
+find_package(TBB REQUIRED)
+include_directories(${TBB_INCLUDE_DIRS})
+add_definitions(${TBB_DEFINITIONS})
+if(MSVC)
+ # Suppress implicit linking of the TBB libraries by the Visual Studio compiler.
+ add_definitions(-D__TBB_NO_IMPLICIT_LINKAGE)
+endif()
+# The Intel TBB library will use the std::exception_ptr feature of C++11.
+add_definitions(-DTBB_USE_CAPTURED_EXCEPTION=0)
+
+# Find and configure wxWidgets
+if (SLIC3R_PRUSACONTROL)
+ set(wxWidgets_UseAlienWx 1)
+ if (wxWidgets_UseAlienWx)
+ set(AlienWx_DEBUG 1)
+ find_package(AlienWx REQUIRED COMPONENTS base core adv html gl)
+ include_directories(${AlienWx_INCLUDE_DIRS})
+ #add_compile_options(${AlienWx_CXX_FLAGS})
+ add_definitions(${AlienWx_DEFINITIONS})
+ set(wxWidgets_LIBRARIES ${AlienWx_LIBRARIES})
+ # On Linux / gtk, we need to have a direct access to gtk+ for some workarounds.
+ if (AlienWx_GUI_TOOLKIT STREQUAL "gtk2")
+ pkg_check_modules(GTK2 gtk+-2.0)
+ include_directories(${GTK2_INCLUDE_DIRS})
+ endif()
+ if (AlienWx_GUI_TOOLKIT STREQUAL "gtk3")
+ pkg_check_modules(GTK3 gtk+-3.0)
+ include_directories(${GTK3_INCLUDE_DIRS})
+ endif()
+ else ()
+ find_package(wxWidgets REQUIRED COMPONENTS base core adv html gl)
+ include(${wxWidgets_USE_FILE})
+ endif ()
+#FIXME rewrite the PRUS format to miniz!
+# add_definitions(-DSLIC3R_GUI -DSLIC3R_PRUS)
+endif()
+
+find_package(CURL REQUIRED)
+include_directories(${CURL_INCLUDE_DIRS})
+
+if (SLIC3R_STATIC)
+ if (NOT APPLE)
+ # libcurl is always linked dynamically to the system libcurl on OSX.
+ # On other systems, libcurl is linked statically if SLIC3R_STATIC is set.
+ add_definitions(-DCURL_STATICLIB)
+ endif()
+ if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
+ # As of now, our build system produces a statically linked libcurl,
+ # which links the OpenSSL library dynamically.
+ find_package(OpenSSL REQUIRED)
+ message("OpenSSL include dir: ${OPENSSL_INCLUDE_DIR}")
+ message("OpenSSL libraries: ${OPENSSL_LIBRARIES}")
+ include_directories(${OPENSSL_INCLUDE_DIR})
+ endif()
+endif()
+
+## OPTIONAL packages
+
+# Find eigen3 or use bundled version
+if (NOT SLIC3R_STATIC)
+ find_package(Eigen3)
+endif ()
+if (NOT Eigen3_FOUND)
+ set(Eigen3_FOUND 1)
+ set(EIGEN3_INCLUDE_DIR ${LIBDIR}/eigen/)
+endif ()
+include_directories(${EIGEN3_INCLUDE_DIR})
+
+# Find expat or use bundled version
+# Always use the system libexpat on Linux.
+if (NOT SLIC3R_STATIC OR CMAKE_SYSTEM_NAME STREQUAL "Linux")
+ find_package(EXPAT)
+endif ()
+if (NOT EXPAT_FOUND)
+ add_library(expat STATIC
+ ${LIBDIR}/expat/xmlparse.c
+ ${LIBDIR}/expat/xmlrole.c
+ ${LIBDIR}/expat/xmltok.c
+ )
+ set(EXPAT_FOUND 1)
+ set(EXPAT_INCLUDE_DIRS ${LIBDIR}/expat/)
+ set(EXPAT_LIBRARIES expat)
+endif ()
+include_directories(${EXPAT_INCLUDE_DIRS})
+
+# Find glew or use bundled version
+if (NOT SLIC3R_STATIC)
+ find_package(GLEW)
+endif ()
+if (NOT GLEW_FOUND)
+ add_library(glew STATIC ${LIBDIR}/glew/src/glew.c)
+ set(GLEW_FOUND 1)
+ set(GLEW_INCLUDE_DIRS ${LIBDIR}/glew/include/)
+ set(GLEW_LIBRARIES glew)
+ add_definitions(-DGLEW_STATIC)
+endif ()
+include_directories(${GLEW_INCLUDE_DIRS})
+
+# l10n
+add_subdirectory(resources/localization)
+
+# libslic3r, Slic3r GUI and the slic3r executable.
+add_subdirectory(src)
+
+# Perl bindings, currently only used for the unit / integration tests of libslic3r.
add_subdirectory(xs)
get_filename_component(PERL_BIN_PATH "${PERL_EXECUTABLE}" DIRECTORY)
@@ -92,7 +282,7 @@ endif ()
add_test (NAME xs COMMAND "${PERL_EXECUTABLE}" ${PERL_PROVE} -I ${PROJECT_SOURCE_DIR}/local-lib/lib/perl5 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/xs)
add_test (NAME integration COMMAND "${PERL_EXECUTABLE}" ${PERL_PROVE} WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})
-install(PROGRAMS slic3r.pl DESTINATION bin RENAME slic3r-prusa3d)
+#install(PROGRAMS slic3r.pl DESTINATION bin RENAME slic3r-prusa3d)
file(GLOB MyVar var/*.png)
install(FILES ${MyVar} DESTINATION share/slic3r-prusa3d)
diff --git a/resources/localization/CMakeLists.txt b/resources/localization/CMakeLists.txt
new file mode 100644
index 000000000..8a7fba068
--- /dev/null
+++ b/resources/localization/CMakeLists.txt
@@ -0,0 +1,8 @@
+set(L10N_DIR "${PROJECT_SOURCE_DIR}/resources/localization")
+add_custom_target(pot
+ COMMAND xgettext --keyword=L --from-code=UTF-8 --debug
+ -f "${L10N_DIR}/list.txt"
+ -o "${L10N_DIR}/Slic3rPE.pot"
+ WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
+ COMMENT "Generate pot file from strings in the source tree"
+)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
new file mode 100644
index 000000000..d0c008293
--- /dev/null
+++ b/src/CMakeLists.txt
@@ -0,0 +1,65 @@
+project(Slic3r-native)
+
+add_subdirectory(admesh)
+add_subdirectory(avrdude)
+# boost/nowide
+add_subdirectory(boost)
+add_subdirectory(clipper)
+add_subdirectory(miniz)
+add_subdirectory(polypartition)
+add_subdirectory(poly2tri)
+add_subdirectory(qhull)
+add_subdirectory(Shiny)
+add_subdirectory(semver)
+
+# Adding libnest2d project for bin packing...
+set(LIBNEST2D_UNITTESTS ON CACHE BOOL "Force generating unittests for libnest2d")
+add_subdirectory(libnest2d)
+
+include_directories(${LIBDIR}/qhull/src)
+#message(STATUS ${LIBDIR}/qhull/src)
+
+
+# ##############################################################################
+# Configure rasterizer target
+# ##############################################################################
+
+find_package(PNG QUIET)
+
+option(RASTERIZER_FORCE_BUILTIN_LIBPNG "Force the usage of builting libpng instead of the system version." OFF)
+
+if(PNG_FOUND AND NOT RASTERIZER_FORCE_BUILTIN_LIBPNG)
+ message(STATUS "Using system libpng.")
+else()
+ set(ZLIB_LIBRARY "")
+ message(WARNING "Using builtin libpng. This can cause crashes on some platforms.")
+ add_subdirectory(png/zlib)
+ set(ZLIB_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/png/zlib ${CMAKE_CURRENT_BINARY_DIR}/png/zlib)
+ include_directories(${ZLIB_INCLUDE_DIR})
+ message(STATUS "ZLIB_INCLUDE_DIR ${ZLIB_INCLUDE_DIR}")
+ add_subdirectory(png/libpng)
+ set_target_properties(zlibstatic PROPERTIES POSITION_INDEPENDENT_CODE ON)
+ set_target_properties(png_static PROPERTIES POSITION_INDEPENDENT_CODE ON)
+# target_include_directories(png_static PRIVATE ${ZLIB_INCLUDE_DIR})
+ set(PNG_LIBRARIES png_static zlibstatic)
+ set(PNG_INCLUDE_DIRS ${ZLIB_INCLUDE_DIR} ${PROJECT_SOURCE_DIR}/png/libpng ${CMAKE_CURRENT_BINARY_DIR}/png/libpng)
+endif()
+
+add_subdirectory(libslic3r)
+add_subdirectory(slic3r)
+
+# Create a slic3r executable
+add_executable(slic3r slic3r.cpp)
+target_link_libraries(slic3r libslic3r libslic3r_gui ${wxWidgets_LIBRARIES} ${CURL_LIBRARIES})
+# Add the OpenGL and GLU libraries.
+if (SLIC3R_GUI)
+ if (MSVC)
+ target_link_libraries(slic3r user32.lib Setupapi.lib OpenGL32.Lib GlU32.Lib)
+ elseif (MINGW)
+ target_link_libraries(slic3r -lopengl32)
+ elseif (APPLE)
+ target_link_libraries(slic3r "-framework OpenGL")
+ else ()
+ target_link_libraries(slic3r -lGL -lGLU)
+ endif ()
+endif ()
diff --git a/src/Shiny/CMakeLists.txt b/src/Shiny/CMakeLists.txt
new file mode 100644
index 000000000..8be7592ae
--- /dev/null
+++ b/src/Shiny/CMakeLists.txt
@@ -0,0 +1,25 @@
+project(Shiny)
+cmake_minimum_required(VERSION 2.6)
+
+add_library(Shiny STATIC
+ Shiny.h
+ ShinyConfig.h
+ ShinyData.h
+ ShinyMacros.h
+ ShinyManager.c
+ ShinyManager.h
+ ShinyNode.c
+ ShinyNode.h
+ ShinyNodePool.c
+ ShinyNodePool.h
+ ShinyNodeState.c
+ ShinyNodeState.h
+ ShinyOutput.c
+ ShinyOutput.h
+ ShinyPrereqs.h
+ ShinyTools.c
+ ShinyTools.h
+ ShinyVersion.h
+ ShinyZone.c
+ ShinyZone.h
+)
diff --git a/xs/src/Shiny/Shiny.h b/src/Shiny/Shiny.h
index a2905aef0..a2905aef0 100644
--- a/xs/src/Shiny/Shiny.h
+++ b/src/Shiny/Shiny.h
diff --git a/xs/src/Shiny/ShinyConfig.h b/src/Shiny/ShinyConfig.h
index 54c632151..54c632151 100644
--- a/xs/src/Shiny/ShinyConfig.h
+++ b/src/Shiny/ShinyConfig.h
diff --git a/xs/src/Shiny/ShinyData.h b/src/Shiny/ShinyData.h
index d75d4f5bf..d75d4f5bf 100644
--- a/xs/src/Shiny/ShinyData.h
+++ b/src/Shiny/ShinyData.h
diff --git a/xs/src/Shiny/ShinyMacros.h b/src/Shiny/ShinyMacros.h
index 79dfa4381..79dfa4381 100644
--- a/xs/src/Shiny/ShinyMacros.h
+++ b/src/Shiny/ShinyMacros.h
diff --git a/xs/src/Shiny/ShinyManager.c b/src/Shiny/ShinyManager.c
index 6b2811851..6b2811851 100644
--- a/xs/src/Shiny/ShinyManager.c
+++ b/src/Shiny/ShinyManager.c
diff --git a/xs/src/Shiny/ShinyManager.h b/src/Shiny/ShinyManager.h
index 403e0e878..403e0e878 100644
--- a/xs/src/Shiny/ShinyManager.h
+++ b/src/Shiny/ShinyManager.h
diff --git a/xs/src/Shiny/ShinyNode.c b/src/Shiny/ShinyNode.c
index 9d777073b..9d777073b 100644
--- a/xs/src/Shiny/ShinyNode.c
+++ b/src/Shiny/ShinyNode.c
diff --git a/xs/src/Shiny/ShinyNode.h b/src/Shiny/ShinyNode.h
index ee5fdb0de..ee5fdb0de 100644
--- a/xs/src/Shiny/ShinyNode.h
+++ b/src/Shiny/ShinyNode.h
diff --git a/xs/src/Shiny/ShinyNodePool.c b/src/Shiny/ShinyNodePool.c
index f00293252..f00293252 100644
--- a/xs/src/Shiny/ShinyNodePool.c
+++ b/src/Shiny/ShinyNodePool.c
diff --git a/xs/src/Shiny/ShinyNodePool.h b/src/Shiny/ShinyNodePool.h
index 5e30a3306..5e30a3306 100644
--- a/xs/src/Shiny/ShinyNodePool.h
+++ b/src/Shiny/ShinyNodePool.h
diff --git a/xs/src/Shiny/ShinyNodeState.c b/src/Shiny/ShinyNodeState.c
index fbf6dc870..fbf6dc870 100644
--- a/xs/src/Shiny/ShinyNodeState.c
+++ b/src/Shiny/ShinyNodeState.c
diff --git a/xs/src/Shiny/ShinyNodeState.h b/src/Shiny/ShinyNodeState.h
index 62fdd4ba8..62fdd4ba8 100644
--- a/xs/src/Shiny/ShinyNodeState.h
+++ b/src/Shiny/ShinyNodeState.h
diff --git a/xs/src/Shiny/ShinyOutput.c b/src/Shiny/ShinyOutput.c
index ad02ea003..ad02ea003 100644
--- a/xs/src/Shiny/ShinyOutput.c
+++ b/src/Shiny/ShinyOutput.c
diff --git a/xs/src/Shiny/ShinyOutput.h b/src/Shiny/ShinyOutput.h
index 81c1783db..81c1783db 100644
--- a/xs/src/Shiny/ShinyOutput.h
+++ b/src/Shiny/ShinyOutput.h
diff --git a/xs/src/Shiny/ShinyPrereqs.h b/src/Shiny/ShinyPrereqs.h
index 5a3044dbc..5a3044dbc 100644
--- a/xs/src/Shiny/ShinyPrereqs.h
+++ b/src/Shiny/ShinyPrereqs.h
diff --git a/xs/src/Shiny/ShinyTools.c b/src/Shiny/ShinyTools.c
index 4058e2285..4058e2285 100644
--- a/xs/src/Shiny/ShinyTools.c
+++ b/src/Shiny/ShinyTools.c
diff --git a/xs/src/Shiny/ShinyTools.h b/src/Shiny/ShinyTools.h
index 379703ee6..379703ee6 100644
--- a/xs/src/Shiny/ShinyTools.h
+++ b/src/Shiny/ShinyTools.h
diff --git a/xs/src/Shiny/ShinyVersion.h b/src/Shiny/ShinyVersion.h
index fe6cd4a33..fe6cd4a33 100644
--- a/xs/src/Shiny/ShinyVersion.h
+++ b/src/Shiny/ShinyVersion.h
diff --git a/xs/src/Shiny/ShinyZone.c b/src/Shiny/ShinyZone.c
index 99d90d927..99d90d927 100644
--- a/xs/src/Shiny/ShinyZone.c
+++ b/src/Shiny/ShinyZone.c
diff --git a/xs/src/Shiny/ShinyZone.h b/src/Shiny/ShinyZone.h
index dde0d3624..dde0d3624 100644
--- a/xs/src/Shiny/ShinyZone.h
+++ b/src/Shiny/ShinyZone.h
diff --git a/src/admesh/CMakeLists.txt b/src/admesh/CMakeLists.txt
new file mode 100644
index 000000000..44c97c3f1
--- /dev/null
+++ b/src/admesh/CMakeLists.txt
@@ -0,0 +1,12 @@
+project(admesh)
+cmake_minimum_required(VERSION 2.6)
+
+add_library(admesh STATIC
+ connect.cpp
+ normals.cpp
+ shared.cpp
+ stl.h
+ stl_io.cpp
+ stlinit.cpp
+ util.cpp
+)
diff --git a/xs/src/admesh/connect.cpp b/src/admesh/connect.cpp
index da5b66720..da5b66720 100644
--- a/xs/src/admesh/connect.cpp
+++ b/src/admesh/connect.cpp
diff --git a/xs/src/admesh/normals.cpp b/src/admesh/normals.cpp
index a8faa44bd..a8faa44bd 100644
--- a/xs/src/admesh/normals.cpp
+++ b/src/admesh/normals.cpp
diff --git a/xs/src/admesh/shared.cpp b/src/admesh/shared.cpp
index 91bb82e00..91bb82e00 100644
--- a/xs/src/admesh/shared.cpp
+++ b/src/admesh/shared.cpp
diff --git a/xs/src/admesh/stl.h b/src/admesh/stl.h
index 096430d15..096430d15 100644
--- a/xs/src/admesh/stl.h
+++ b/src/admesh/stl.h
diff --git a/xs/src/admesh/stl_io.cpp b/src/admesh/stl_io.cpp
index 81e29d286..81e29d286 100644
--- a/xs/src/admesh/stl_io.cpp
+++ b/src/admesh/stl_io.cpp
diff --git a/xs/src/admesh/stlinit.cpp b/src/admesh/stlinit.cpp
index e2939b8af..e2939b8af 100644
--- a/xs/src/admesh/stlinit.cpp
+++ b/src/admesh/stlinit.cpp
diff --git a/xs/src/admesh/util.cpp b/src/admesh/util.cpp
index cc104fdd1..cc104fdd1 100644
--- a/xs/src/admesh/util.cpp
+++ b/src/admesh/util.cpp
diff --git a/xs/src/agg/AUTHORS b/src/agg/AUTHORS
index 2bb6518ec..2bb6518ec 100644
--- a/xs/src/agg/AUTHORS
+++ b/src/agg/AUTHORS
diff --git a/xs/src/agg/VERSION b/src/agg/VERSION
index c5de3e3b0..c5de3e3b0 100644
--- a/xs/src/agg/VERSION
+++ b/src/agg/VERSION
diff --git a/xs/src/agg/agg_array.h b/src/agg/agg_array.h
index 8d5668384..8d5668384 100644
--- a/xs/src/agg/agg_array.h
+++ b/src/agg/agg_array.h
diff --git a/xs/src/agg/agg_basics.h b/src/agg/agg_basics.h
index 273850ba1..273850ba1 100644
--- a/xs/src/agg/agg_basics.h
+++ b/src/agg/agg_basics.h
diff --git a/xs/src/agg/agg_bezier_arc.h b/src/agg/agg_bezier_arc.h
index cfd9308ea..cfd9308ea 100644
--- a/xs/src/agg/agg_bezier_arc.h
+++ b/src/agg/agg_bezier_arc.h
diff --git a/xs/src/agg/agg_clip_liang_barsky.h b/src/agg/agg_clip_liang_barsky.h
index 4b5fedbab..4b5fedbab 100644
--- a/xs/src/agg/agg_clip_liang_barsky.h
+++ b/src/agg/agg_clip_liang_barsky.h
diff --git a/xs/src/agg/agg_color_gray.h b/src/agg/agg_color_gray.h
index f66588c11..f66588c11 100644
--- a/xs/src/agg/agg_color_gray.h
+++ b/src/agg/agg_color_gray.h
diff --git a/xs/src/agg/agg_color_rgba.h b/src/agg/agg_color_rgba.h
index ff33a1179..ff33a1179 100644
--- a/xs/src/agg/agg_color_rgba.h
+++ b/src/agg/agg_color_rgba.h
diff --git a/xs/src/agg/agg_config.h b/src/agg/agg_config.h
index fa1dae2ba..fa1dae2ba 100644
--- a/xs/src/agg/agg_config.h
+++ b/src/agg/agg_config.h
diff --git a/xs/src/agg/agg_conv_transform.h b/src/agg/agg_conv_transform.h
index 0c88a245b..0c88a245b 100644
--- a/xs/src/agg/agg_conv_transform.h
+++ b/src/agg/agg_conv_transform.h
diff --git a/xs/src/agg/agg_gamma_functions.h b/src/agg/agg_gamma_functions.h
index 5d720daa9..5d720daa9 100644
--- a/xs/src/agg/agg_gamma_functions.h
+++ b/src/agg/agg_gamma_functions.h
diff --git a/xs/src/agg/agg_gamma_lut.h b/src/agg/agg_gamma_lut.h
index e30873632..e30873632 100644
--- a/xs/src/agg/agg_gamma_lut.h
+++ b/src/agg/agg_gamma_lut.h
diff --git a/xs/src/agg/agg_math.h b/src/agg/agg_math.h
index 2ec49cf3f..2ec49cf3f 100644
--- a/xs/src/agg/agg_math.h
+++ b/src/agg/agg_math.h
diff --git a/xs/src/agg/agg_path_storage.h b/src/agg/agg_path_storage.h
index f55c89957..f55c89957 100644
--- a/xs/src/agg/agg_path_storage.h
+++ b/src/agg/agg_path_storage.h
diff --git a/xs/src/agg/agg_pixfmt_base.h b/src/agg/agg_pixfmt_base.h
index 57ae19cfe..57ae19cfe 100644
--- a/xs/src/agg/agg_pixfmt_base.h
+++ b/src/agg/agg_pixfmt_base.h
diff --git a/xs/src/agg/agg_pixfmt_gray.h b/src/agg/agg_pixfmt_gray.h
index d03dc8650..d03dc8650 100644
--- a/xs/src/agg/agg_pixfmt_gray.h
+++ b/src/agg/agg_pixfmt_gray.h
diff --git a/xs/src/agg/agg_pixfmt_rgb.h b/src/agg/agg_pixfmt_rgb.h
index 6fa8772ce..6fa8772ce 100644
--- a/xs/src/agg/agg_pixfmt_rgb.h
+++ b/src/agg/agg_pixfmt_rgb.h
diff --git a/xs/src/agg/agg_rasterizer_cells_aa.h b/src/agg/agg_rasterizer_cells_aa.h
index 1147148fa..1147148fa 100644
--- a/xs/src/agg/agg_rasterizer_cells_aa.h
+++ b/src/agg/agg_rasterizer_cells_aa.h
diff --git a/xs/src/agg/agg_rasterizer_scanline_aa.h b/src/agg/agg_rasterizer_scanline_aa.h
index ffc2ddf94..ffc2ddf94 100644
--- a/xs/src/agg/agg_rasterizer_scanline_aa.h
+++ b/src/agg/agg_rasterizer_scanline_aa.h
diff --git a/xs/src/agg/agg_rasterizer_scanline_aa_nogamma.h b/src/agg/agg_rasterizer_scanline_aa_nogamma.h
index 9a809aa5a..9a809aa5a 100644
--- a/xs/src/agg/agg_rasterizer_scanline_aa_nogamma.h
+++ b/src/agg/agg_rasterizer_scanline_aa_nogamma.h
diff --git a/xs/src/agg/agg_rasterizer_sl_clip.h b/src/agg/agg_rasterizer_sl_clip.h
index 3a7f3a103..3a7f3a103 100644
--- a/xs/src/agg/agg_rasterizer_sl_clip.h
+++ b/src/agg/agg_rasterizer_sl_clip.h
diff --git a/xs/src/agg/agg_renderer_base.h b/src/agg/agg_renderer_base.h
index 527c62f78..527c62f78 100644
--- a/xs/src/agg/agg_renderer_base.h
+++ b/src/agg/agg_renderer_base.h
diff --git a/xs/src/agg/agg_renderer_scanline.h b/src/agg/agg_renderer_scanline.h
index 311e9f739..311e9f739 100644
--- a/xs/src/agg/agg_renderer_scanline.h
+++ b/src/agg/agg_renderer_scanline.h
diff --git a/xs/src/agg/agg_rendering_buffer.h b/src/agg/agg_rendering_buffer.h
index 0eff6ff27..0eff6ff27 100644
--- a/xs/src/agg/agg_rendering_buffer.h
+++ b/src/agg/agg_rendering_buffer.h
diff --git a/xs/src/agg/agg_scanline_p.h b/src/agg/agg_scanline_p.h
index 1d1cbe72f..1d1cbe72f 100644
--- a/xs/src/agg/agg_scanline_p.h
+++ b/src/agg/agg_scanline_p.h
diff --git a/xs/src/agg/agg_trans_affine.h b/src/agg/agg_trans_affine.h
index 1a6116388..1a6116388 100644
--- a/xs/src/agg/agg_trans_affine.h
+++ b/src/agg/agg_trans_affine.h
diff --git a/xs/src/agg/copying b/src/agg/copying
index b6028e519..b6028e519 100644
--- a/xs/src/agg/copying
+++ b/src/agg/copying
diff --git a/xs/src/avrdude/AUTHORS b/src/avrdude/AUTHORS
index 6abbec066..6abbec066 100644
--- a/xs/src/avrdude/AUTHORS
+++ b/src/avrdude/AUTHORS
diff --git a/xs/src/avrdude/BUILD-FROM-SVN b/src/avrdude/BUILD-FROM-SVN
index 3a218f2d1..3a218f2d1 100644
--- a/xs/src/avrdude/BUILD-FROM-SVN
+++ b/src/avrdude/BUILD-FROM-SVN
diff --git a/xs/src/avrdude/CMakeLists.txt b/src/avrdude/CMakeLists.txt
index d88563368..d88563368 100644
--- a/xs/src/avrdude/CMakeLists.txt
+++ b/src/avrdude/CMakeLists.txt
diff --git a/xs/src/avrdude/COPYING b/src/avrdude/COPYING
index e69cf7e6c..e69cf7e6c 100644
--- a/xs/src/avrdude/COPYING
+++ b/src/avrdude/COPYING
diff --git a/xs/src/avrdude/ChangeLog b/src/avrdude/ChangeLog
index 975f52317..975f52317 100644
--- a/xs/src/avrdude/ChangeLog
+++ b/src/avrdude/ChangeLog
diff --git a/xs/src/avrdude/ChangeLog-2001 b/src/avrdude/ChangeLog-2001
index 048dcf1c2..048dcf1c2 100644
--- a/xs/src/avrdude/ChangeLog-2001
+++ b/src/avrdude/ChangeLog-2001
diff --git a/xs/src/avrdude/ChangeLog-2002 b/src/avrdude/ChangeLog-2002
index 9bfa030a9..9bfa030a9 100644
--- a/xs/src/avrdude/ChangeLog-2002
+++ b/src/avrdude/ChangeLog-2002
diff --git a/xs/src/avrdude/ChangeLog-2003 b/src/avrdude/ChangeLog-2003
index 1115bdfbc..1115bdfbc 100644
--- a/xs/src/avrdude/ChangeLog-2003
+++ b/src/avrdude/ChangeLog-2003
diff --git a/xs/src/avrdude/ChangeLog-2004-2006 b/src/avrdude/ChangeLog-2004-2006
index 20e5b2e8b..20e5b2e8b 100644
--- a/xs/src/avrdude/ChangeLog-2004-2006
+++ b/src/avrdude/ChangeLog-2004-2006
diff --git a/xs/src/avrdude/ChangeLog-2007 b/src/avrdude/ChangeLog-2007
index 3514da7e0..3514da7e0 100644
--- a/xs/src/avrdude/ChangeLog-2007
+++ b/src/avrdude/ChangeLog-2007
diff --git a/xs/src/avrdude/ChangeLog-2008 b/src/avrdude/ChangeLog-2008
index f43a10abb..f43a10abb 100644
--- a/xs/src/avrdude/ChangeLog-2008
+++ b/src/avrdude/ChangeLog-2008
diff --git a/xs/src/avrdude/ChangeLog-2009 b/src/avrdude/ChangeLog-2009
index 1f993cbcf..1f993cbcf 100644
--- a/xs/src/avrdude/ChangeLog-2009
+++ b/src/avrdude/ChangeLog-2009
diff --git a/xs/src/avrdude/ChangeLog-2010 b/src/avrdude/ChangeLog-2010
index 45effefa4..45effefa4 100644
--- a/xs/src/avrdude/ChangeLog-2010
+++ b/src/avrdude/ChangeLog-2010
diff --git a/xs/src/avrdude/ChangeLog-2011 b/src/avrdude/ChangeLog-2011
index d8fffba01..d8fffba01 100644
--- a/xs/src/avrdude/ChangeLog-2011
+++ b/src/avrdude/ChangeLog-2011
diff --git a/xs/src/avrdude/ChangeLog-2012 b/src/avrdude/ChangeLog-2012
index bb5751a6d..bb5751a6d 100644
--- a/xs/src/avrdude/ChangeLog-2012
+++ b/src/avrdude/ChangeLog-2012
diff --git a/xs/src/avrdude/ChangeLog-2013 b/src/avrdude/ChangeLog-2013
index 8e975ef6e..8e975ef6e 100644
--- a/xs/src/avrdude/ChangeLog-2013
+++ b/src/avrdude/ChangeLog-2013
diff --git a/xs/src/avrdude/ChangeLog-2014 b/src/avrdude/ChangeLog-2014
index 3fe7a53aa..3fe7a53aa 100644
--- a/xs/src/avrdude/ChangeLog-2014
+++ b/src/avrdude/ChangeLog-2014
diff --git a/xs/src/avrdude/ChangeLog-2015 b/src/avrdude/ChangeLog-2015
index edc274188..edc274188 100644
--- a/xs/src/avrdude/ChangeLog-2015
+++ b/src/avrdude/ChangeLog-2015
diff --git a/xs/src/avrdude/Makefile.am b/src/avrdude/Makefile.am
index d1ed47845..d1ed47845 100644
--- a/xs/src/avrdude/Makefile.am
+++ b/src/avrdude/Makefile.am
diff --git a/xs/src/avrdude/Makefile.standalone b/src/avrdude/Makefile.standalone
index d9a773771..d9a773771 100644
--- a/xs/src/avrdude/Makefile.standalone
+++ b/src/avrdude/Makefile.standalone
diff --git a/xs/src/avrdude/NEWS b/src/avrdude/NEWS
index ced93cd35..ced93cd35 100644
--- a/xs/src/avrdude/NEWS
+++ b/src/avrdude/NEWS
diff --git a/xs/src/avrdude/README b/src/avrdude/README
index 2ca0009a3..2ca0009a3 100644
--- a/xs/src/avrdude/README
+++ b/src/avrdude/README
diff --git a/xs/src/avrdude/ac_cfg.h b/src/avrdude/ac_cfg.h
index 2461bf307..2461bf307 100644
--- a/xs/src/avrdude/ac_cfg.h
+++ b/src/avrdude/ac_cfg.h
diff --git a/xs/src/avrdude/ac_cfg.h.in b/src/avrdude/ac_cfg.h.in
index 9dda33a53..9dda33a53 100644
--- a/xs/src/avrdude/ac_cfg.h.in
+++ b/src/avrdude/ac_cfg.h.in
diff --git a/xs/src/avrdude/arduino.c b/src/avrdude/arduino.c
index 5a9cb465e..5a9cb465e 100644
--- a/xs/src/avrdude/arduino.c
+++ b/src/avrdude/arduino.c
diff --git a/xs/src/avrdude/arduino.h b/src/avrdude/arduino.h
index 024d711b9..024d711b9 100644
--- a/xs/src/avrdude/arduino.h
+++ b/src/avrdude/arduino.h
diff --git a/xs/src/avrdude/atmel-docs/AVR109.pdf b/src/avrdude/atmel-docs/AVR109.pdf
index 0942f44bc..0942f44bc 100644
--- a/xs/src/avrdude/atmel-docs/AVR109.pdf
+++ b/src/avrdude/atmel-docs/AVR109.pdf
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/AVR910.pdf b/src/avrdude/atmel-docs/AVR910.pdf
index 585703aac..585703aac 100644
--- a/xs/src/avrdude/atmel-docs/AVR910.pdf
+++ b/src/avrdude/atmel-docs/AVR910.pdf
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/AVRISPmkII-AVR069.pdf b/src/avrdude/atmel-docs/AVRISPmkII-AVR069.pdf
index dc4254954..dc4254954 100644
--- a/xs/src/avrdude/atmel-docs/AVRISPmkII-AVR069.pdf
+++ b/src/avrdude/atmel-docs/AVRISPmkII-AVR069.pdf
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/browserDetect.js b/src/avrdude/atmel-docs/EDBG/common/browserDetect.js
index 2a7aa08a4..2a7aa08a4 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/browserDetect.js
+++ b/src/avrdude/atmel-docs/EDBG/common/browserDetect.js
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/css/960.css b/src/avrdude/atmel-docs/EDBG/common/css/960.css
index 635d7ba5f..635d7ba5f 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/css/960.css
+++ b/src/avrdude/atmel-docs/EDBG/common/css/960.css
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/css/docbook.css b/src/avrdude/atmel-docs/EDBG/common/css/docbook.css
index 9a9c8f2b8..9a9c8f2b8 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/css/docbook.css
+++ b/src/avrdude/atmel-docs/EDBG/common/css/docbook.css
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/css/fluid_grid.css b/src/avrdude/atmel-docs/EDBG/common/css/fluid_grid.css
index a1983655d..a1983655d 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/css/fluid_grid.css
+++ b/src/avrdude/atmel-docs/EDBG/common/css/fluid_grid.css
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/css/index.css b/src/avrdude/atmel-docs/EDBG/common/css/index.css
index eb1b8c24f..eb1b8c24f 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/css/index.css
+++ b/src/avrdude/atmel-docs/EDBG/common/css/index.css
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/css/positioning.css b/src/avrdude/atmel-docs/EDBG/common/css/positioning.css
index 7c9658c41..7c9658c41 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/css/positioning.css
+++ b/src/avrdude/atmel-docs/EDBG/common/css/positioning.css
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/css/print.css b/src/avrdude/atmel-docs/EDBG/common/css/print.css
index a52a074e7..a52a074e7 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/css/print.css
+++ b/src/avrdude/atmel-docs/EDBG/common/css/print.css
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/css/reset.css b/src/avrdude/atmel-docs/EDBG/common/css/reset.css
index 27802c681..27802c681 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/css/reset.css
+++ b/src/avrdude/atmel-docs/EDBG/common/css/reset.css
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/css/text.css b/src/avrdude/atmel-docs/EDBG/common/css/text.css
index 0ef67296a..0ef67296a 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/css/text.css
+++ b/src/avrdude/atmel-docs/EDBG/common/css/text.css
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/fonts/DroidSansMono.eot b/src/avrdude/atmel-docs/EDBG/common/fonts/DroidSansMono.eot
index e4e3d1701..e4e3d1701 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/fonts/DroidSansMono.eot
+++ b/src/avrdude/atmel-docs/EDBG/common/fonts/DroidSansMono.eot
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/fonts/DroidSansMono.ttf b/src/avrdude/atmel-docs/EDBG/common/fonts/DroidSansMono.ttf
index 4546611d4..4546611d4 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/fonts/DroidSansMono.ttf
+++ b/src/avrdude/atmel-docs/EDBG/common/fonts/DroidSansMono.ttf
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/images/Book_Closed.png b/src/avrdude/atmel-docs/EDBG/common/images/Book_Closed.png
index 294fbf6b0..294fbf6b0 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/images/Book_Closed.png
+++ b/src/avrdude/atmel-docs/EDBG/common/images/Book_Closed.png
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/images/Book_Open.png b/src/avrdude/atmel-docs/EDBG/common/images/Book_Open.png
index d78710e77..d78710e77 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/images/Book_Open.png
+++ b/src/avrdude/atmel-docs/EDBG/common/images/Book_Open.png
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/images/Document_Text.png b/src/avrdude/atmel-docs/EDBG/common/images/Document_Text.png
index 416b5380d..416b5380d 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/images/Document_Text.png
+++ b/src/avrdude/atmel-docs/EDBG/common/images/Document_Text.png
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/images/Library.png b/src/avrdude/atmel-docs/EDBG/common/images/Library.png
index a2fa8fce4..a2fa8fce4 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/images/Library.png
+++ b/src/avrdude/atmel-docs/EDBG/common/images/Library.png
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/images/external_link.gif b/src/avrdude/atmel-docs/EDBG/common/images/external_link.gif
index 177cbbc72..177cbbc72 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/images/external_link.gif
+++ b/src/avrdude/atmel-docs/EDBG/common/images/external_link.gif
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/images/loading.gif b/src/avrdude/atmel-docs/EDBG/common/images/loading.gif
index 085ccaeca..085ccaeca 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/images/loading.gif
+++ b/src/avrdude/atmel-docs/EDBG/common/images/loading.gif
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/images/logo.png b/src/avrdude/atmel-docs/EDBG/common/images/logo.png
index df85ffbeb..df85ffbeb 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/images/logo.png
+++ b/src/avrdude/atmel-docs/EDBG/common/images/logo.png
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/images/minus.png b/src/avrdude/atmel-docs/EDBG/common/images/minus.png
index 9b5244afb..9b5244afb 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/images/minus.png
+++ b/src/avrdude/atmel-docs/EDBG/common/images/minus.png
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/images/next-arrow.png b/src/avrdude/atmel-docs/EDBG/common/images/next-arrow.png
index db595f465..db595f465 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/images/next-arrow.png
+++ b/src/avrdude/atmel-docs/EDBG/common/images/next-arrow.png
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/images/plus.png b/src/avrdude/atmel-docs/EDBG/common/images/plus.png
index 31010fe96..31010fe96 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/images/plus.png
+++ b/src/avrdude/atmel-docs/EDBG/common/images/plus.png
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/images/previous-arrow.png b/src/avrdude/atmel-docs/EDBG/common/images/previous-arrow.png
index 347bc5347..347bc5347 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/images/previous-arrow.png
+++ b/src/avrdude/atmel-docs/EDBG/common/images/previous-arrow.png
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/images/search-icon.png b/src/avrdude/atmel-docs/EDBG/common/images/search-icon.png
index 715f62d08..715f62d08 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/images/search-icon.png
+++ b/src/avrdude/atmel-docs/EDBG/common/images/search-icon.png
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/images/sidebar.png b/src/avrdude/atmel-docs/EDBG/common/images/sidebar.png
index 549267187..549267187 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/images/sidebar.png
+++ b/src/avrdude/atmel-docs/EDBG/common/images/sidebar.png
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/images/starsSmall.png b/src/avrdude/atmel-docs/EDBG/common/images/starsSmall.png
index 490a27b92..490a27b92 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/images/starsSmall.png
+++ b/src/avrdude/atmel-docs/EDBG/common/images/starsSmall.png
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/images/toc-icon.png b/src/avrdude/atmel-docs/EDBG/common/images/toc-icon.png
index 40b34bce5..40b34bce5 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/images/toc-icon.png
+++ b/src/avrdude/atmel-docs/EDBG/common/images/toc-icon.png
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/images/ui-icons_217bc0_256x240.png b/src/avrdude/atmel-docs/EDBG/common/images/ui-icons_217bc0_256x240.png
index 6f4bd87c0..6f4bd87c0 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/images/ui-icons_217bc0_256x240.png
+++ b/src/avrdude/atmel-docs/EDBG/common/images/ui-icons_217bc0_256x240.png
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/jquery-1.7.2.min.js b/src/avrdude/atmel-docs/EDBG/common/jquery/jquery-1.7.2.min.js
index 93adea19f..93adea19f 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/jquery-1.7.2.min.js
+++ b/src/avrdude/atmel-docs/EDBG/common/jquery/jquery-1.7.2.min.js
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/jquery.cookie.js b/src/avrdude/atmel-docs/EDBG/common/jquery/jquery.cookie.js
index bada7bff7..bada7bff7 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/jquery.cookie.js
+++ b/src/avrdude/atmel-docs/EDBG/common/jquery/jquery.cookie.js
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/jquery.ui.all.js b/src/avrdude/atmel-docs/EDBG/common/jquery/jquery.ui.all.js
index 943d3b357..943d3b357 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/jquery.ui.all.js
+++ b/src/avrdude/atmel-docs/EDBG/common/jquery/jquery.ui.all.js
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/layout/jquery.layout.js b/src/avrdude/atmel-docs/EDBG/common/jquery/layout/jquery.layout.js
index 0b6d9d292..0b6d9d292 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/layout/jquery.layout.js
+++ b/src/avrdude/atmel-docs/EDBG/common/jquery/layout/jquery.layout.js
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-anim_basic_16x16.gif b/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-anim_basic_16x16.gif
index 085ccaeca..085ccaeca 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-anim_basic_16x16.gif
+++ b/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-anim_basic_16x16.gif
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_flat_0_aaaaaa_40x100.png b/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_flat_0_aaaaaa_40x100.png
index 5b5dab2ab..5b5dab2ab 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_flat_0_aaaaaa_40x100.png
+++ b/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_flat_0_aaaaaa_40x100.png
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_flat_55_fbec88_40x100.png b/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_flat_55_fbec88_40x100.png
index 47acaadd7..47acaadd7 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_flat_55_fbec88_40x100.png
+++ b/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_flat_55_fbec88_40x100.png
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_glass_75_d0e5f5_1x400.png b/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_glass_75_d0e5f5_1x400.png
index 9d149b1c6..9d149b1c6 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_glass_75_d0e5f5_1x400.png
+++ b/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_glass_75_d0e5f5_1x400.png
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_glass_85_dfeffc_1x400.png b/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_glass_85_dfeffc_1x400.png
index 014951529..014951529 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_glass_85_dfeffc_1x400.png
+++ b/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_glass_85_dfeffc_1x400.png
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_glass_95_fef1ec_1x400.png b/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_glass_95_fef1ec_1x400.png
index 4443fdc1a..4443fdc1a 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_glass_95_fef1ec_1x400.png
+++ b/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_glass_95_fef1ec_1x400.png
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png b/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png
index 81ecc362d..81ecc362d 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png
+++ b/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_inset-hard_100_f5f8f9_1x100.png b/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_inset-hard_100_f5f8f9_1x100.png
index 4f3faf8aa..4f3faf8aa 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_inset-hard_100_f5f8f9_1x100.png
+++ b/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_inset-hard_100_f5f8f9_1x100.png
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_inset-hard_100_fcfdfd_1x100.png b/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_inset-hard_100_fcfdfd_1x100.png
index 38c38335d..38c38335d 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_inset-hard_100_fcfdfd_1x100.png
+++ b/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_inset-hard_100_fcfdfd_1x100.png
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_217bc0_256x240.png b/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_217bc0_256x240.png
index 6f4bd87c0..6f4bd87c0 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_217bc0_256x240.png
+++ b/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_217bc0_256x240.png
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_2e83ff_256x240.png b/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_2e83ff_256x240.png
index 09d1cdc85..09d1cdc85 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_2e83ff_256x240.png
+++ b/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_2e83ff_256x240.png
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_469bdd_256x240.png b/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_469bdd_256x240.png
index bd2cf079a..bd2cf079a 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_469bdd_256x240.png
+++ b/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_469bdd_256x240.png
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_6da8d5_256x240.png b/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_6da8d5_256x240.png
index 3d6f567f4..3d6f567f4 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_6da8d5_256x240.png
+++ b/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_6da8d5_256x240.png
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_cd0a0a_256x240.png b/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_cd0a0a_256x240.png
index 2ab019b73..2ab019b73 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_cd0a0a_256x240.png
+++ b/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_cd0a0a_256x240.png
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_d8e7f3_256x240.png b/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_d8e7f3_256x240.png
index ad2dc6f9d..ad2dc6f9d 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_d8e7f3_256x240.png
+++ b/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_d8e7f3_256x240.png
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_f9bd01_256x240.png b/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_f9bd01_256x240.png
index c7c53cb11..c7c53cb11 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_f9bd01_256x240.png
+++ b/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_f9bd01_256x240.png
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/jquery-ui-1.8.2.custom.css b/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/jquery-ui-1.8.2.custom.css
index 0b1736320..0b1736320 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/jquery-ui-1.8.2.custom.css
+++ b/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/jquery-ui-1.8.2.custom.css
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/file.gif b/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/file.gif
index bd4f96549..bd4f96549 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/file.gif
+++ b/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/file.gif
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/folder-closed.gif b/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/folder-closed.gif
index be6b59c2b..be6b59c2b 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/folder-closed.gif
+++ b/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/folder-closed.gif
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/folder.gif b/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/folder.gif
index be6b59c2b..be6b59c2b 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/folder.gif
+++ b/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/folder.gif
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-black-line.gif b/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-black-line.gif
index e5496877a..e5496877a 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-black-line.gif
+++ b/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-black-line.gif
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-black.gif b/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-black.gif
index d549b9fc5..d549b9fc5 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-black.gif
+++ b/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-black.gif
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-default-line.gif b/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-default-line.gif
index 37114d306..37114d306 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-default-line.gif
+++ b/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-default-line.gif
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-default.gif b/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-default.gif
index a12ac52ff..a12ac52ff 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-default.gif
+++ b/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-default.gif
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-famfamfam-line.gif b/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-famfamfam-line.gif
index 6e289cecc..6e289cecc 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-famfamfam-line.gif
+++ b/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-famfamfam-line.gif
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-famfamfam.gif b/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-famfamfam.gif
index 0cb178e89..0cb178e89 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-famfamfam.gif
+++ b/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-famfamfam.gif
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-gray-line.gif b/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-gray-line.gif
index 37600447d..37600447d 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-gray-line.gif
+++ b/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-gray-line.gif
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-gray.gif b/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-gray.gif
index cfb8a2f09..cfb8a2f09 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-gray.gif
+++ b/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-gray.gif
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-red-line.gif b/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-red-line.gif
index df9e749a8..df9e749a8 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-red-line.gif
+++ b/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-red-line.gif
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-red.gif b/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-red.gif
index 3bbb3a157..3bbb3a157 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-red.gif
+++ b/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-red.gif
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/jquery.treeview.css b/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/jquery.treeview.css
index d7e2c002a..d7e2c002a 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/jquery.treeview.css
+++ b/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/jquery.treeview.css
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/jquery.treeview.min.js b/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/jquery.treeview.min.js
index f9b490d3e..f9b490d3e 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/jquery.treeview.min.js
+++ b/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/jquery.treeview.min.js
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/main.js b/src/avrdude/atmel-docs/EDBG/common/main.js
index 96b6a86c6..96b6a86c6 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/main.js
+++ b/src/avrdude/atmel-docs/EDBG/common/main.js
diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/splitterInit.js b/src/avrdude/atmel-docs/EDBG/common/splitterInit.js
index 090b81485..090b81485 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/common/splitterInit.js
+++ b/src/avrdude/atmel-docs/EDBG/common/splitterInit.js
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch01s01.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch01s01.html
index 470b46f0e..470b46f0e 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch01s01.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch01s01.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch01s02.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch01s02.html
index d59bf2d5e..d59bf2d5e 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch01s02.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch01s02.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s01.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s01.html
index 234c40886..234c40886 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s01.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s01.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02.html
index 1ae5aac6a..1ae5aac6a 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s01.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s01.html
index ab2191d46..ab2191d46 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s01.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s01.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s02.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s02.html
index 0396afd8b..0396afd8b 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s02.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s02.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s02s01.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s02s01.html
index 94e442177..94e442177 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s02s01.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s02s01.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s02s02.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s02s02.html
index 443f008f0..443f008f0 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s02s02.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s02s02.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s03.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s03.html
index ce86f07b8..ce86f07b8 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s03.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s03.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s03s01.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s03s01.html
index 666fa6f3b..666fa6f3b 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s03s01.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s03s01.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s03s02.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s03s02.html
index f513f9656..f513f9656 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s03s02.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s03s02.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s03s03.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s03s03.html
index feb2e2aff..feb2e2aff 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s03s03.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s03s03.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s03s04.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s03s04.html
index 0ad83b637..0ad83b637 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s03s04.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s03s04.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s01.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s01.html
index 69c34b0a0..69c34b0a0 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s01.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s01.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s02.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s02.html
index df5f82436..df5f82436 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s02.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s02.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s03.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s03.html
index 60e231822..60e231822 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s03.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s03.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s04.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s04.html
index ca57b115e..ca57b115e 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s04.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s04.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s05.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s05.html
index 8fdf2a10a..8fdf2a10a 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s05.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s05.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s06.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s06.html
index b18020202..b18020202 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s06.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s06.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s07.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s07.html
index 3f894396e..3f894396e 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s07.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s07.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s08.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s08.html
index 01fda3281..01fda3281 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s08.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s08.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s09.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s09.html
index 7508ace3f..7508ace3f 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s09.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s09.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s04.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s04.html
index 7f0e6c37a..7f0e6c37a 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s04.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s04.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s04s01.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s04s01.html
index 410b1cd2d..410b1cd2d 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s04s01.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s04s01.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s04s02.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s04s02.html
index 16c752df3..16c752df3 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s04s02.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s04s02.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s04s03.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s04s03.html
index 012c91dcb..012c91dcb 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s04s03.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s04s03.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s01.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s01.html
index 6bd694495..6bd694495 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s01.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s01.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s01s01.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s01s01.html
index 1a5e37f0a..1a5e37f0a 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s01s01.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s01s01.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s01s02.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s01s02.html
index dbb58ccee..dbb58ccee 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s01s02.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s01s02.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s01s03.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s01s03.html
index 04fb2403d..04fb2403d 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s01s03.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s01s03.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s01s03s01.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s01s03s01.html
index 37174b6cc..37174b6cc 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s01s03s01.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s01s03s01.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s02.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s02.html
index 2716e63a4..2716e63a4 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s02.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s02.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s02s01.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s02s01.html
index 11e766ec2..11e766ec2 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s02s01.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s02s01.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s02s02.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s02s02.html
index fee95a4d4..fee95a4d4 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s02s02.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s02s02.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s02s03.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s02s03.html
index a5f5ea0ae..a5f5ea0ae 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s02s03.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s02s03.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s02s04.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s02s04.html
index be4e8e65a..be4e8e65a 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s02s04.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s02s04.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s01.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s01.html
index 661b07998..661b07998 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s01.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s01.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s02.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s02.html
index 928910efc..928910efc 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s02.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s02.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s03.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s03.html
index 4fd01391c..4fd01391c 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s03.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s03.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s04.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s04.html
index 0a5ee21bf..0a5ee21bf 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s04.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s04.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s04s01.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s04s01.html
index 5604043c7..5604043c7 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s04s01.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s04s01.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s04s03.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s04s03.html
index c2eb3844f..c2eb3844f 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s04s03.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s04s03.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s04s04.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s04s04.html
index 0dc44a78d..0dc44a78d 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s04s04.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s04s04.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s04s05.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s04s05.html
index 6b10f7ebe..6b10f7ebe 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s04s05.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s04s05.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05.html
index 70efa405c..70efa405c 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s01.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s01.html
index 3f46ac85c..3f46ac85c 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s01.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s01.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s03.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s03.html
index 713c57c0c..713c57c0c 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s03.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s03.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s04.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s04.html
index adb176dd9..adb176dd9 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s04.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s04.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s06.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s06.html
index 254c04931..254c04931 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s06.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s06.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s06s02.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s06s02.html
index 9a01e3c48..9a01e3c48 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s06s02.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s06s02.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s06s03.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s06s03.html
index 8278b2627..8278b2627 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s06s03.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s06s03.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s06s04.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s06s04.html
index 75f289697..75f289697 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s06s04.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s06s04.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s06s05.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s06s05.html
index 3bf798fb6..3bf798fb6 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s06s05.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s06s05.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s07.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s07.html
index df1d7fef4..df1d7fef4 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s07.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s07.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s07s01.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s07s01.html
index ddd7e13ed..ddd7e13ed 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s07s01.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s07s01.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s07s02.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s07s02.html
index 1f18a73d0..1f18a73d0 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s07s02.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s07s02.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s07s03.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s07s03.html
index 92b8b3f50..92b8b3f50 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s07s03.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s07s03.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s07s04.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s07s04.html
index 19fc5eb04..19fc5eb04 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s07s04.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s07s04.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s08.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s08.html
index f0efdf9b8..f0efdf9b8 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s08.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s08.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s08s01.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s08s01.html
index 91fbfb8ed..91fbfb8ed 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s08s01.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s08s01.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s08s02.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s08s02.html
index 395e3a4ae..395e3a4ae 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s08s02.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s08s02.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s08s03.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s08s03.html
index 128c2b8c8..128c2b8c8 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s08s03.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s08s03.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s09.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s09.html
index 3588ca655..3588ca655 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s09.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s09.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s10.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s10.html
index 80f23e797..80f23e797 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s10.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s10.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01.html
index 3cb080a26..3cb080a26 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s01.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s01.html
index 4e07d5716..4e07d5716 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s01.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s01.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s02.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s02.html
index 51d7f260d..51d7f260d 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s02.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s02.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s03.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s03.html
index 0a8ae1f5a..0a8ae1f5a 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s03.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s03.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s04.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s04.html
index aa8419adc..aa8419adc 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s04.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s04.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s05.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s05.html
index 53c5b4661..53c5b4661 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s05.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s05.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s06.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s06.html
index 7cd708933..7cd708933 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s06.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s06.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s07.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s07.html
index 0c8fd69cf..0c8fd69cf 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s07.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s07.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s08.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s08.html
index 33458079f..33458079f 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s08.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s08.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s09.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s09.html
index 5b1a92485..5b1a92485 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s09.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s09.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s10.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s10.html
index c34fdc8f9..c34fdc8f9 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s10.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s10.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s11.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s11.html
index d0e20a1f4..d0e20a1f4 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s11.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s11.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s12.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s12.html
index 9a083c7fc..9a083c7fc 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s12.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s12.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s13.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s13.html
index d7f9e2899..d7f9e2899 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s13.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s13.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s14.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s14.html
index 07d724a3b..07d724a3b 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s14.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s14.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s15.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s15.html
index 75d4fc8ea..75d4fc8ea 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s15.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s15.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s02.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s02.html
index d7ecd1244..d7ecd1244 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s02.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s02.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s02s01.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s02s01.html
index ca3957a18..ca3957a18 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s02s01.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s02s01.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s02s02.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s02s02.html
index 53534183b..53534183b 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s02s02.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s02s02.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s02s03.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s02s03.html
index cc729e727..cc729e727 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s02s03.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s02s03.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s02s04.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s02s04.html
index be920ef5d..be920ef5d 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s02s04.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s02s04.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s02s05.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s02s05.html
index a08bf7070..a08bf7070 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s02s05.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s02s05.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s02s06.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s02s06.html
index 6f64eee57..6f64eee57 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s02s06.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s02s06.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s03.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s03.html
index 7d02558fa..7d02558fa 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s03.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s03.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s03s01.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s03s01.html
index 0097735a7..0097735a7 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s03s01.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s03s01.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s03s02.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s03s02.html
index 635e4d02c..635e4d02c 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s03s02.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s03s02.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s03s03.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s03s03.html
index 88856f5b8..88856f5b8 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s03s03.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s03s03.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s04.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s04.html
index 4294de672..4294de672 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s04.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s04.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01.html
index e1c6693ce..e1c6693ce 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s01.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s01.html
index 160dad9d2..160dad9d2 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s01.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s01.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s02.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s02.html
index 566a0e63f..566a0e63f 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s02.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s02.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s03.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s03.html
index b93f1df0d..b93f1df0d 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s03.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s03.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s04.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s04.html
index 4bb7f0dec..4bb7f0dec 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s04.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s04.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s05.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s05.html
index 91c248e1a..91c248e1a 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s05.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s05.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s06.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s06.html
index f6d33e77b..f6d33e77b 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s06.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s06.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s07.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s07.html
index a315297c1..a315297c1 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s07.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s07.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s08.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s08.html
index e72779d9b..e72779d9b 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s08.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s08.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s09.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s09.html
index d2fc1967d..d2fc1967d 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s09.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s09.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s10.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s10.html
index d3f4e9525..d3f4e9525 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s10.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s10.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s11.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s11.html
index 9838850fb..9838850fb 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s11.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s11.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s12.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s12.html
index 3c82c435c..3c82c435c 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s12.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s12.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s13.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s13.html
index 361df065f..361df065f 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s13.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s13.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s14.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s14.html
index ea3525247..ea3525247 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s14.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s14.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s15.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s15.html
index c9c76a1f0..c9c76a1f0 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s15.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s15.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s16.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s16.html
index fe394e6ba..fe394e6ba 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s16.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s16.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s17.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s17.html
index 939388d18..939388d18 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s17.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s17.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s18.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s18.html
index 64ff30f74..64ff30f74 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s18.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s18.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s19.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s19.html
index 48853cb9b..48853cb9b 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s19.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s19.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s20.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s20.html
index 0be622a45..0be622a45 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s20.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s20.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s21.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s21.html
index a7d6b7d95..a7d6b7d95 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s21.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s21.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s22.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s22.html
index 857cfaeb8..857cfaeb8 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s22.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s22.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s23.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s23.html
index 66ef8e9e8..66ef8e9e8 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s23.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s23.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s24.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s24.html
index 08ac0851d..08ac0851d 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s24.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s24.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s25.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s25.html
index ffcd1f490..ffcd1f490 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s25.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s25.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s26.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s26.html
index 568f099f5..568f099f5 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s26.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s26.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s27.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s27.html
index 3567113c7..3567113c7 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s27.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s27.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s28.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s28.html
index 90793d9e6..90793d9e6 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s28.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s28.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s29.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s29.html
index 05c04de12..05c04de12 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s29.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s29.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s02.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s02.html
index 762bf9846..762bf9846 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s02.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s02.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s02s01.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s02s01.html
index 25b97f941..25b97f941 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s02s01.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s02s01.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s02s02.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s02s02.html
index 0004271e5..0004271e5 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s02s02.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s02s02.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s02s03.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s02s03.html
index bac30cb2f..bac30cb2f 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s02s03.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s02s03.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s02s04.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s02s04.html
index 8ac473d49..8ac473d49 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s02s04.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s02s04.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s02s05.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s02s05.html
index 0d39d303b..0d39d303b 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s02s05.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s02s05.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s03.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s03.html
index 1dd6d123a..1dd6d123a 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s03.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s03.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s03s01.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s03s01.html
index 0381d127f..0381d127f 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s03s01.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s03s01.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s03s02.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s03s02.html
index fbd7f8852..fbd7f8852 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s03s02.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s03s02.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s04s01.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s04s01.html
index 6be4d4417..6be4d4417 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s04s01.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s04s01.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s04s02.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s04s02.html
index 9437fc24a..9437fc24a 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s04s02.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s04s02.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s04s03.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s04s03.html
index 908842f76..908842f76 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s04s03.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s04s03.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s05.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s05.html
index 698298a23..698298a23 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s05.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s05.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s05s01.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s05s01.html
index a44f60f4b..a44f60f4b 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s05s01.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s05s01.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s05s02.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s05s02.html
index f6077325d..f6077325d 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s05s02.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s05s02.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s05s03.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s05s03.html
index 3ac632e84..3ac632e84 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s05s03.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s05s03.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s05s04.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s05s04.html
index a68ec01e3..a68ec01e3 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s05s04.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s05s04.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s05s05.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s05s05.html
index cbbca98bd..cbbca98bd 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s05s05.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s05s05.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s06.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s06.html
index 237404283..237404283 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s06.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s06.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01.html
index 979b8fb37..979b8fb37 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s01.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s01.html
index 70756cf66..70756cf66 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s01.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s01.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s02.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s02.html
index 3f9e3a398..3f9e3a398 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s02.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s02.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s03.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s03.html
index 64b8e2452..64b8e2452 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s03.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s03.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s04.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s04.html
index be105b8c2..be105b8c2 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s04.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s04.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s05.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s05.html
index 5355bee9f..5355bee9f 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s05.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s05.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s06.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s06.html
index 9fef3f72b..9fef3f72b 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s06.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s06.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s07.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s07.html
index ad752fcee..ad752fcee 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s07.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s07.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s08.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s08.html
index 4f76886e8..4f76886e8 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s08.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s08.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s09.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s09.html
index 8baeae716..8baeae716 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s09.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s09.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s10.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s10.html
index 38bf91143..38bf91143 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s10.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s10.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s11.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s11.html
index 5044b87fc..5044b87fc 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s11.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s11.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s12.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s12.html
index d36aeaf66..d36aeaf66 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s12.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s12.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s13.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s13.html
index 5d314e462..5d314e462 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s13.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s13.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s14.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s14.html
index 98dc07000..98dc07000 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s14.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s14.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s15.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s15.html
index b116fcda6..b116fcda6 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s15.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s15.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s16.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s16.html
index fdc2d8ece..fdc2d8ece 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s16.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s16.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s17.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s17.html
index e0a212842..e0a212842 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s17.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s17.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s02.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s02.html
index 6dc0922fd..6dc0922fd 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s02.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s02.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s03.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s03.html
index 080363476..080363476 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s03.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s03.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s01.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s01.html
index cffed6d67..cffed6d67 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s01.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s01.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s01s01.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s01s01.html
index 896cd5abd..896cd5abd 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s01s01.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s01s01.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s01s02.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s01s02.html
index b3aaba663..b3aaba663 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s01s02.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s01s02.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s01s03.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s01s03.html
index 48757b5d2..48757b5d2 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s01s03.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s01s03.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s01s04.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s01s04.html
index fc6f8a8ae..fc6f8a8ae 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s01s04.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s01s04.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s01s05.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s01s05.html
index fe082b12c..fe082b12c 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s01s05.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s01s05.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s01s06.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s01s06.html
index dbcda2ca7..dbcda2ca7 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s01s06.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s01s06.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s02.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s02.html
index 0b1a19b5f..0b1a19b5f 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s02.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s02.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s03.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s03.html
index fb6afa569..fb6afa569 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s03.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s03.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/document.revisions.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/document.revisions.html
index 5e2418811..5e2418811 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/document.revisions.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/document.revisions.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/index.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/index.html
index 7d4c0901c..7d4c0901c 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/index.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/index.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/pr01.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/pr01.html
index 53f993d3f..53f993d3f 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/pr01.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/pr01.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.Introduction.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.Introduction.html
index c0ff81420..c0ff81420 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.Introduction.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.Introduction.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.avr32protocol.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.avr32protocol.html
index e5f43a972..e5f43a972 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.avr32protocol.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.avr32protocol.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.avr8protocol.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.avr8protocol.html
index a93a23c7f..a93a23c7f 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.avr8protocol.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.avr8protocol.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.avrispprotocol.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.avrispprotocol.html
index 660b1e669..660b1e669 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.avrispprotocol.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.avrispprotocol.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.avrprotocol.Overview.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.avrprotocol.Overview.html
index 599ac4895..599ac4895 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.avrprotocol.Overview.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.avrprotocol.Overview.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.cmsis_dap.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.cmsis_dap.html
index 828c6d2e7..828c6d2e7 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.cmsis_dap.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.cmsis_dap.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.edbg_ctrl_protocol.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.edbg_ctrl_protocol.html
index 5d8211df7..5d8211df7 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.edbg_ctrl_protocol.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.edbg_ctrl_protocol.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.tpiprotocol.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.tpiprotocol.html
index 442c2b337..442c2b337 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.tpiprotocol.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.tpiprotocol.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/search/htmlFileInfoList.js b/src/avrdude/atmel-docs/EDBG/protocoldocs/search/htmlFileInfoList.js
index d1d8fbc2c..d1d8fbc2c 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/search/htmlFileInfoList.js
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/search/htmlFileInfoList.js
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/search/index-1.js b/src/avrdude/atmel-docs/EDBG/protocoldocs/search/index-1.js
index c708ea8c9..c708ea8c9 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/search/index-1.js
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/search/index-1.js
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/search/index-2.js b/src/avrdude/atmel-docs/EDBG/protocoldocs/search/index-2.js
index b929f20ac..b929f20ac 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/search/index-2.js
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/search/index-2.js
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/search/index-3.js b/src/avrdude/atmel-docs/EDBG/protocoldocs/search/index-3.js
index 88d71a25a..88d71a25a 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/search/index-3.js
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/search/index-3.js
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/search/l10n.js b/src/avrdude/atmel-docs/EDBG/protocoldocs/search/l10n.js
index 3147f961f..3147f961f 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/search/l10n.js
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/search/l10n.js
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/search/nwSearchFnt.js b/src/avrdude/atmel-docs/EDBG/protocoldocs/search/nwSearchFnt.js
index bf4aa3fd2..bf4aa3fd2 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/search/nwSearchFnt.js
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/search/nwSearchFnt.js
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/search/stemmers/en_stemmer.js b/src/avrdude/atmel-docs/EDBG/protocoldocs/search/stemmers/en_stemmer.js
index 2117c1bfb..2117c1bfb 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/search/stemmers/en_stemmer.js
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/search/stemmers/en_stemmer.js
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_avr32_memtypes.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/section_avr32_memtypes.html
index 2020681c5..2020681c5 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_avr32_memtypes.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/section_avr32_memtypes.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_avr32_setget_params.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/section_avr32_setget_params.html
index ba0618af9..ba0618af9 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_avr32_setget_params.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/section_avr32_setget_params.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_avr8_memtypes.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/section_avr8_memtypes.html
index e2c655212..e2c655212 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_avr8_memtypes.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/section_avr8_memtypes.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_avr8_query_contexts.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/section_avr8_query_contexts.html
index cd053c49e..cd053c49e 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_avr8_query_contexts.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/section_avr8_query_contexts.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_avr8_setget_params.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/section_avr8_setget_params.html
index 50639ee46..50639ee46 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_avr8_setget_params.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/section_avr8_setget_params.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_edbg_ctrl_setget_params.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/section_edbg_ctrl_setget_params.html
index 26e6e639e..26e6e639e 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_edbg_ctrl_setget_params.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/section_edbg_ctrl_setget_params.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_edbg_query_contexts.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/section_edbg_query_contexts.html
index e533d16ad..e533d16ad 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_edbg_query_contexts.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/section_edbg_query_contexts.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_housekeeping_start_session.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/section_housekeeping_start_session.html
index 0bafe24d8..0bafe24d8 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_housekeeping_start_session.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/section_housekeeping_start_session.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_i5v_3yz_rl.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/section_i5v_3yz_rl.html
index 370df774d..370df774d 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_i5v_3yz_rl.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/section_i5v_3yz_rl.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_jdx_m11_sl.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/section_jdx_m11_sl.html
index 0f51f8c43..0f51f8c43 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_jdx_m11_sl.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/section_jdx_m11_sl.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_qhb_x1c_sl.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/section_qhb_x1c_sl.html
index 02f90b827..02f90b827 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_qhb_x1c_sl.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/section_qhb_x1c_sl.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_serial_trace.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/section_serial_trace.html
index 9067bd286..9067bd286 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_serial_trace.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/section_serial_trace.html
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_t1f_hb1_sl.html b/src/avrdude/atmel-docs/EDBG/protocoldocs/section_t1f_hb1_sl.html
index a5a163146..a5a163146 100644
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_t1f_hb1_sl.html
+++ b/src/avrdude/atmel-docs/EDBG/protocoldocs/section_t1f_hb1_sl.html
diff --git a/xs/src/avrdude/atmel-docs/JTAGICE-AVR060.pdf b/src/avrdude/atmel-docs/JTAGICE-AVR060.pdf
index 1b4cac8a9..1b4cac8a9 100644
--- a/xs/src/avrdude/atmel-docs/JTAGICE-AVR060.pdf
+++ b/src/avrdude/atmel-docs/JTAGICE-AVR060.pdf
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/JTAGICEmkII-AVR067.pdf b/src/avrdude/atmel-docs/JTAGICEmkII-AVR067.pdf
index c72ccde8a..c72ccde8a 100644
--- a/xs/src/avrdude/atmel-docs/JTAGICEmkII-AVR067.pdf
+++ b/src/avrdude/atmel-docs/JTAGICEmkII-AVR067.pdf
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/STK500-AVR061.pdf b/src/avrdude/atmel-docs/STK500-AVR061.pdf
index 03e0ddf6b..03e0ddf6b 100644
--- a/xs/src/avrdude/atmel-docs/STK500-AVR061.pdf
+++ b/src/avrdude/atmel-docs/STK500-AVR061.pdf
Binary files differ
diff --git a/xs/src/avrdude/atmel-docs/STK500v2-AVR068.pdf b/src/avrdude/atmel-docs/STK500v2-AVR068.pdf
index 1a8485655..1a8485655 100644
--- a/xs/src/avrdude/atmel-docs/STK500v2-AVR068.pdf
+++ b/src/avrdude/atmel-docs/STK500v2-AVR068.pdf
Binary files differ
diff --git a/xs/src/avrdude/avr.c b/src/avrdude/avr.c
index 73dcaf4ff..73dcaf4ff 100644
--- a/xs/src/avrdude/avr.c
+++ b/src/avrdude/avr.c
diff --git a/xs/src/avrdude/avr910.c b/src/avrdude/avr910.c
index aa5cc07a9..aa5cc07a9 100644
--- a/xs/src/avrdude/avr910.c
+++ b/src/avrdude/avr910.c
diff --git a/xs/src/avrdude/avr910.h b/src/avrdude/avr910.h
index 808f7e68f..808f7e68f 100644
--- a/xs/src/avrdude/avr910.h
+++ b/src/avrdude/avr910.h
diff --git a/xs/src/avrdude/avrdude-slic3r.cpp b/src/avrdude/avrdude-slic3r.cpp
index 3037f5284..3037f5284 100644
--- a/xs/src/avrdude/avrdude-slic3r.cpp
+++ b/src/avrdude/avrdude-slic3r.cpp
diff --git a/xs/src/avrdude/avrdude-slic3r.hpp b/src/avrdude/avrdude-slic3r.hpp
index 754e1e345..754e1e345 100644
--- a/xs/src/avrdude/avrdude-slic3r.hpp
+++ b/src/avrdude/avrdude-slic3r.hpp
diff --git a/xs/src/avrdude/avrdude.1 b/src/avrdude/avrdude.1
index 65fc7b1d6..65fc7b1d6 100644
--- a/xs/src/avrdude/avrdude.1
+++ b/src/avrdude/avrdude.1
diff --git a/xs/src/avrdude/avrdude.conf b/src/avrdude/avrdude.conf
index 991a1dcee..991a1dcee 100644
--- a/xs/src/avrdude/avrdude.conf
+++ b/src/avrdude/avrdude.conf
diff --git a/xs/src/avrdude/avrdude.conf.in b/src/avrdude/avrdude.conf.in
index b247e5225..b247e5225 100644
--- a/xs/src/avrdude/avrdude.conf.in
+++ b/src/avrdude/avrdude.conf.in
diff --git a/xs/src/avrdude/avrdude.conf.tmp b/src/avrdude/avrdude.conf.tmp
index 82c73afa2..82c73afa2 100644
--- a/xs/src/avrdude/avrdude.conf.tmp
+++ b/src/avrdude/avrdude.conf.tmp
diff --git a/xs/src/avrdude/avrdude.h b/src/avrdude/avrdude.h
index f4c92a75d..f4c92a75d 100644
--- a/xs/src/avrdude/avrdude.h
+++ b/src/avrdude/avrdude.h
diff --git a/xs/src/avrdude/avrdude.spec.in b/src/avrdude/avrdude.spec.in
index ff9879f6f..ff9879f6f 100644
--- a/xs/src/avrdude/avrdude.spec.in
+++ b/src/avrdude/avrdude.spec.in
diff --git a/xs/src/avrdude/avrftdi.c b/src/avrdude/avrftdi.c
index 29d10332a..29d10332a 100644
--- a/xs/src/avrdude/avrftdi.c
+++ b/src/avrdude/avrftdi.c
diff --git a/xs/src/avrdude/avrftdi.h b/src/avrdude/avrftdi.h
index af3233528..af3233528 100644
--- a/xs/src/avrdude/avrftdi.h
+++ b/src/avrdude/avrftdi.h
diff --git a/xs/src/avrdude/avrftdi_private.h b/src/avrdude/avrftdi_private.h
index e89d250e7..e89d250e7 100644
--- a/xs/src/avrdude/avrftdi_private.h
+++ b/src/avrdude/avrftdi_private.h
diff --git a/xs/src/avrdude/avrftdi_tpi.c b/src/avrdude/avrftdi_tpi.c
index d82444e89..d82444e89 100644
--- a/xs/src/avrdude/avrftdi_tpi.c
+++ b/src/avrdude/avrftdi_tpi.c
diff --git a/xs/src/avrdude/avrftdi_tpi.h b/src/avrdude/avrftdi_tpi.h
index 6082a379d..6082a379d 100644
--- a/xs/src/avrdude/avrftdi_tpi.h
+++ b/src/avrdude/avrftdi_tpi.h
diff --git a/xs/src/avrdude/avrpart.c b/src/avrdude/avrpart.c
index d0bb951ee..d0bb951ee 100644
--- a/xs/src/avrdude/avrpart.c
+++ b/src/avrdude/avrpart.c
diff --git a/xs/src/avrdude/bitbang.c b/src/avrdude/bitbang.c
index b943c3cea..b943c3cea 100644
--- a/xs/src/avrdude/bitbang.c
+++ b/src/avrdude/bitbang.c
diff --git a/xs/src/avrdude/bitbang.h b/src/avrdude/bitbang.h
index 300f52fd5..300f52fd5 100644
--- a/xs/src/avrdude/bitbang.h
+++ b/src/avrdude/bitbang.h
diff --git a/xs/src/avrdude/bootstrap b/src/avrdude/bootstrap
index 0c1f84cc7..0c1f84cc7 100755..100644
--- a/xs/src/avrdude/bootstrap
+++ b/src/avrdude/bootstrap
diff --git a/xs/src/avrdude/buspirate.c b/src/avrdude/buspirate.c
index 5875d4283..5875d4283 100644
--- a/xs/src/avrdude/buspirate.c
+++ b/src/avrdude/buspirate.c
diff --git a/xs/src/avrdude/buspirate.h b/src/avrdude/buspirate.h
index 835334a20..835334a20 100644
--- a/xs/src/avrdude/buspirate.h
+++ b/src/avrdude/buspirate.h
diff --git a/xs/src/avrdude/butterfly.c b/src/avrdude/butterfly.c
index beb5e04de..beb5e04de 100644
--- a/xs/src/avrdude/butterfly.c
+++ b/src/avrdude/butterfly.c
diff --git a/xs/src/avrdude/butterfly.h b/src/avrdude/butterfly.h
index 6f6a54c84..6f6a54c84 100644
--- a/xs/src/avrdude/butterfly.h
+++ b/src/avrdude/butterfly.h
diff --git a/xs/src/avrdude/config.c b/src/avrdude/config.c
index 08193cfc5..08193cfc5 100644
--- a/xs/src/avrdude/config.c
+++ b/src/avrdude/config.c
diff --git a/xs/src/avrdude/config.h b/src/avrdude/config.h
index d0d65ae20..d0d65ae20 100644
--- a/xs/src/avrdude/config.h
+++ b/src/avrdude/config.h
diff --git a/xs/src/avrdude/config_gram.c b/src/avrdude/config_gram.c
index c1a65b13e..c1a65b13e 100644
--- a/xs/src/avrdude/config_gram.c
+++ b/src/avrdude/config_gram.c
diff --git a/xs/src/avrdude/config_gram.h b/src/avrdude/config_gram.h
index 036d67ebe..036d67ebe 100644
--- a/xs/src/avrdude/config_gram.h
+++ b/src/avrdude/config_gram.h
diff --git a/xs/src/avrdude/config_gram.y b/src/avrdude/config_gram.y
index 0aa95a8e8..0aa95a8e8 100644
--- a/xs/src/avrdude/config_gram.y
+++ b/src/avrdude/config_gram.y
diff --git a/xs/src/avrdude/configure.ac b/src/avrdude/configure.ac
index a23a959f2..a23a959f2 100644
--- a/xs/src/avrdude/configure.ac
+++ b/src/avrdude/configure.ac
diff --git a/xs/src/avrdude/confwin.c b/src/avrdude/confwin.c
index 95446156d..95446156d 100644
--- a/xs/src/avrdude/confwin.c
+++ b/src/avrdude/confwin.c
diff --git a/xs/src/avrdude/crc16.c b/src/avrdude/crc16.c
index 0177c9dab..0177c9dab 100644
--- a/xs/src/avrdude/crc16.c
+++ b/src/avrdude/crc16.c
diff --git a/xs/src/avrdude/crc16.h b/src/avrdude/crc16.h
index db10131de..db10131de 100644
--- a/xs/src/avrdude/crc16.h
+++ b/src/avrdude/crc16.h
diff --git a/xs/src/avrdude/dfu.c b/src/avrdude/dfu.c
index 8e014e3c0..8e014e3c0 100644
--- a/xs/src/avrdude/dfu.c
+++ b/src/avrdude/dfu.c
diff --git a/xs/src/avrdude/dfu.h b/src/avrdude/dfu.h
index 020a75f2e..020a75f2e 100644
--- a/xs/src/avrdude/dfu.h
+++ b/src/avrdude/dfu.h
diff --git a/xs/src/avrdude/doc/.cvsignore b/src/avrdude/doc/.cvsignore
index afe95fe92..afe95fe92 100644
--- a/xs/src/avrdude/doc/.cvsignore
+++ b/src/avrdude/doc/.cvsignore
diff --git a/xs/src/avrdude/doc/Makefile.am b/src/avrdude/doc/Makefile.am
index bee799f74..bee799f74 100644
--- a/xs/src/avrdude/doc/Makefile.am
+++ b/src/avrdude/doc/Makefile.am
diff --git a/xs/src/avrdude/doc/TODO b/src/avrdude/doc/TODO
index 6c57c5ade..6c57c5ade 100644
--- a/xs/src/avrdude/doc/TODO
+++ b/src/avrdude/doc/TODO
diff --git a/xs/src/avrdude/doc/avrdude.texi b/src/avrdude/doc/avrdude.texi
index 6941389df..6941389df 100644
--- a/xs/src/avrdude/doc/avrdude.texi
+++ b/src/avrdude/doc/avrdude.texi
diff --git a/xs/src/avrdude/doc/parts_comments.txt b/src/avrdude/doc/parts_comments.txt
index d83bb4312..d83bb4312 100644
--- a/xs/src/avrdude/doc/parts_comments.txt
+++ b/src/avrdude/doc/parts_comments.txt
diff --git a/xs/src/avrdude/fileio.c b/src/avrdude/fileio.c
index 708159295..708159295 100644
--- a/xs/src/avrdude/fileio.c
+++ b/src/avrdude/fileio.c
diff --git a/xs/src/avrdude/flip1.c b/src/avrdude/flip1.c
index 220a94266..220a94266 100644
--- a/xs/src/avrdude/flip1.c
+++ b/src/avrdude/flip1.c
diff --git a/xs/src/avrdude/flip1.h b/src/avrdude/flip1.h
index c5f4986b6..c5f4986b6 100644
--- a/xs/src/avrdude/flip1.h
+++ b/src/avrdude/flip1.h
diff --git a/xs/src/avrdude/flip2.c b/src/avrdude/flip2.c
index ba90086a3..ba90086a3 100644
--- a/xs/src/avrdude/flip2.c
+++ b/src/avrdude/flip2.c
diff --git a/xs/src/avrdude/flip2.h b/src/avrdude/flip2.h
index 4b1e576d5..4b1e576d5 100644
--- a/xs/src/avrdude/flip2.h
+++ b/src/avrdude/flip2.h
diff --git a/xs/src/avrdude/freebsd_ppi.h b/src/avrdude/freebsd_ppi.h
index 016bf1826..016bf1826 100644
--- a/xs/src/avrdude/freebsd_ppi.h
+++ b/src/avrdude/freebsd_ppi.h
diff --git a/xs/src/avrdude/ft245r.c b/src/avrdude/ft245r.c
index cc1061df4..cc1061df4 100644
--- a/xs/src/avrdude/ft245r.c
+++ b/src/avrdude/ft245r.c
diff --git a/xs/src/avrdude/ft245r.h b/src/avrdude/ft245r.h
index 40602e220..40602e220 100644
--- a/xs/src/avrdude/ft245r.h
+++ b/src/avrdude/ft245r.h
diff --git a/xs/src/avrdude/jtag3.c b/src/avrdude/jtag3.c
index 3084c3201..3084c3201 100644
--- a/xs/src/avrdude/jtag3.c
+++ b/src/avrdude/jtag3.c
diff --git a/xs/src/avrdude/jtag3.h b/src/avrdude/jtag3.h
index fef3be011..fef3be011 100644
--- a/xs/src/avrdude/jtag3.h
+++ b/src/avrdude/jtag3.h
diff --git a/xs/src/avrdude/jtag3_private.h b/src/avrdude/jtag3_private.h
index 8ee37505d..8ee37505d 100644
--- a/xs/src/avrdude/jtag3_private.h
+++ b/src/avrdude/jtag3_private.h
diff --git a/xs/src/avrdude/jtagmkI.c b/src/avrdude/jtagmkI.c
index 2a5f27e4a..2a5f27e4a 100644
--- a/xs/src/avrdude/jtagmkI.c
+++ b/src/avrdude/jtagmkI.c
diff --git a/xs/src/avrdude/jtagmkI.h b/src/avrdude/jtagmkI.h
index fbc0d161d..fbc0d161d 100644
--- a/xs/src/avrdude/jtagmkI.h
+++ b/src/avrdude/jtagmkI.h
diff --git a/xs/src/avrdude/jtagmkII.c b/src/avrdude/jtagmkII.c
index 78c412ce6..78c412ce6 100644
--- a/xs/src/avrdude/jtagmkII.c
+++ b/src/avrdude/jtagmkII.c
diff --git a/xs/src/avrdude/jtagmkII.h b/src/avrdude/jtagmkII.h
index aa79c18d2..aa79c18d2 100644
--- a/xs/src/avrdude/jtagmkII.h
+++ b/src/avrdude/jtagmkII.h
diff --git a/xs/src/avrdude/jtagmkII_private.h b/src/avrdude/jtagmkII_private.h
index 6df8f6f23..6df8f6f23 100644
--- a/xs/src/avrdude/jtagmkII_private.h
+++ b/src/avrdude/jtagmkII_private.h
diff --git a/xs/src/avrdude/jtagmkI_private.h b/src/avrdude/jtagmkI_private.h
index 7d5e247a9..7d5e247a9 100644
--- a/xs/src/avrdude/jtagmkI_private.h
+++ b/src/avrdude/jtagmkI_private.h
diff --git a/xs/src/avrdude/lexer.c b/src/avrdude/lexer.c
index f2d8adb4b..f2d8adb4b 100644
--- a/xs/src/avrdude/lexer.c
+++ b/src/avrdude/lexer.c
diff --git a/xs/src/avrdude/lexer.l b/src/avrdude/lexer.l
index 34af33d64..34af33d64 100644
--- a/xs/src/avrdude/lexer.l
+++ b/src/avrdude/lexer.l
diff --git a/xs/src/avrdude/libavrdude.h b/src/avrdude/libavrdude.h
index aef792476..aef792476 100644
--- a/xs/src/avrdude/libavrdude.h
+++ b/src/avrdude/libavrdude.h
diff --git a/xs/src/avrdude/linux_ppdev.h b/src/avrdude/linux_ppdev.h
index 1d2e6e2ec..1d2e6e2ec 100644
--- a/xs/src/avrdude/linux_ppdev.h
+++ b/src/avrdude/linux_ppdev.h
diff --git a/xs/src/avrdude/linuxgpio.c b/src/avrdude/linuxgpio.c
index b61631174..b61631174 100644
--- a/xs/src/avrdude/linuxgpio.c
+++ b/src/avrdude/linuxgpio.c
diff --git a/xs/src/avrdude/linuxgpio.h b/src/avrdude/linuxgpio.h
index dc477982a..dc477982a 100644
--- a/xs/src/avrdude/linuxgpio.h
+++ b/src/avrdude/linuxgpio.h
diff --git a/xs/src/avrdude/lists.c b/src/avrdude/lists.c
index cab88364e..cab88364e 100644
--- a/xs/src/avrdude/lists.c
+++ b/src/avrdude/lists.c
diff --git a/xs/src/avrdude/main-standalone.c b/src/avrdude/main-standalone.c
index 359a055ca..359a055ca 100644
--- a/xs/src/avrdude/main-standalone.c
+++ b/src/avrdude/main-standalone.c
diff --git a/xs/src/avrdude/main.c b/src/avrdude/main.c
index ebda0ba19..ebda0ba19 100644
--- a/xs/src/avrdude/main.c
+++ b/src/avrdude/main.c
diff --git a/xs/src/avrdude/my_ddk_hidsdi.h b/src/avrdude/my_ddk_hidsdi.h
index 46c17d675..46c17d675 100644
--- a/xs/src/avrdude/my_ddk_hidsdi.h
+++ b/src/avrdude/my_ddk_hidsdi.h
diff --git a/xs/src/avrdude/par.c b/src/avrdude/par.c
index 9dcb8db84..9dcb8db84 100644
--- a/xs/src/avrdude/par.c
+++ b/src/avrdude/par.c
diff --git a/xs/src/avrdude/par.h b/src/avrdude/par.h
index 708997037..708997037 100644
--- a/xs/src/avrdude/par.h
+++ b/src/avrdude/par.h
diff --git a/xs/src/avrdude/pgm.c b/src/avrdude/pgm.c
index b8a93f104..b8a93f104 100644
--- a/xs/src/avrdude/pgm.c
+++ b/src/avrdude/pgm.c
diff --git a/xs/src/avrdude/pgm_type.c b/src/avrdude/pgm_type.c
index ef27cf900..ef27cf900 100644
--- a/xs/src/avrdude/pgm_type.c
+++ b/src/avrdude/pgm_type.c
diff --git a/xs/src/avrdude/pickit2.c b/src/avrdude/pickit2.c
index bbf8b9ad7..bbf8b9ad7 100644
--- a/xs/src/avrdude/pickit2.c
+++ b/src/avrdude/pickit2.c
diff --git a/xs/src/avrdude/pickit2.h b/src/avrdude/pickit2.h
index cdd58d96d..cdd58d96d 100644
--- a/xs/src/avrdude/pickit2.h
+++ b/src/avrdude/pickit2.h
diff --git a/xs/src/avrdude/pindefs.c b/src/avrdude/pindefs.c
index 5753fc67b..5753fc67b 100644
--- a/xs/src/avrdude/pindefs.c
+++ b/src/avrdude/pindefs.c
diff --git a/xs/src/avrdude/ppi.c b/src/avrdude/ppi.c
index 2706b850e..2706b850e 100644
--- a/xs/src/avrdude/ppi.c
+++ b/src/avrdude/ppi.c
diff --git a/xs/src/avrdude/ppi.h b/src/avrdude/ppi.h
index 38fc1e8b5..38fc1e8b5 100644
--- a/xs/src/avrdude/ppi.h
+++ b/src/avrdude/ppi.h
diff --git a/xs/src/avrdude/ppiwin.c b/src/avrdude/ppiwin.c
index 7811288c0..7811288c0 100644
--- a/xs/src/avrdude/ppiwin.c
+++ b/src/avrdude/ppiwin.c
diff --git a/xs/src/avrdude/safemode.c b/src/avrdude/safemode.c
index b530a5fcb..b530a5fcb 100644
--- a/xs/src/avrdude/safemode.c
+++ b/src/avrdude/safemode.c
diff --git a/xs/src/avrdude/ser_avrdoper.c b/src/avrdude/ser_avrdoper.c
index 71080b7c7..71080b7c7 100644
--- a/xs/src/avrdude/ser_avrdoper.c
+++ b/src/avrdude/ser_avrdoper.c
diff --git a/xs/src/avrdude/ser_posix.c b/src/avrdude/ser_posix.c
index cb0fc0385..cb0fc0385 100644
--- a/xs/src/avrdude/ser_posix.c
+++ b/src/avrdude/ser_posix.c
diff --git a/xs/src/avrdude/ser_win32.c b/src/avrdude/ser_win32.c
index 4e1713128..4e1713128 100644
--- a/xs/src/avrdude/ser_win32.c
+++ b/src/avrdude/ser_win32.c
diff --git a/xs/src/avrdude/serbb.h b/src/avrdude/serbb.h
index cdb89a366..cdb89a366 100644
--- a/xs/src/avrdude/serbb.h
+++ b/src/avrdude/serbb.h
diff --git a/xs/src/avrdude/serbb_posix.c b/src/avrdude/serbb_posix.c
index 319cfc9e4..319cfc9e4 100644
--- a/xs/src/avrdude/serbb_posix.c
+++ b/src/avrdude/serbb_posix.c
diff --git a/xs/src/avrdude/serbb_win32.c b/src/avrdude/serbb_win32.c
index 4f1069c85..4f1069c85 100644
--- a/xs/src/avrdude/serbb_win32.c
+++ b/src/avrdude/serbb_win32.c
diff --git a/xs/src/avrdude/solaris_ecpp.h b/src/avrdude/solaris_ecpp.h
index 7db040d14..7db040d14 100644
--- a/xs/src/avrdude/solaris_ecpp.h
+++ b/src/avrdude/solaris_ecpp.h
diff --git a/xs/src/avrdude/stk500.c b/src/avrdude/stk500.c
index 63deb228f..63deb228f 100644
--- a/xs/src/avrdude/stk500.c
+++ b/src/avrdude/stk500.c
diff --git a/xs/src/avrdude/stk500.h b/src/avrdude/stk500.h
index d0bce452d..d0bce452d 100644
--- a/xs/src/avrdude/stk500.h
+++ b/src/avrdude/stk500.h
diff --git a/xs/src/avrdude/stk500_private.h b/src/avrdude/stk500_private.h
index 7efe866c4..7efe866c4 100644
--- a/xs/src/avrdude/stk500_private.h
+++ b/src/avrdude/stk500_private.h
diff --git a/xs/src/avrdude/stk500generic.c b/src/avrdude/stk500generic.c
index 9c1ea4036..9c1ea4036 100644
--- a/xs/src/avrdude/stk500generic.c
+++ b/src/avrdude/stk500generic.c
diff --git a/xs/src/avrdude/stk500generic.h b/src/avrdude/stk500generic.h
index 0c0590129..0c0590129 100644
--- a/xs/src/avrdude/stk500generic.h
+++ b/src/avrdude/stk500generic.h
diff --git a/xs/src/avrdude/stk500v2.c b/src/avrdude/stk500v2.c
index 691152b46..691152b46 100644
--- a/xs/src/avrdude/stk500v2.c
+++ b/src/avrdude/stk500v2.c
diff --git a/xs/src/avrdude/stk500v2.h b/src/avrdude/stk500v2.h
index 5c182c59c..5c182c59c 100644
--- a/xs/src/avrdude/stk500v2.h
+++ b/src/avrdude/stk500v2.h
diff --git a/xs/src/avrdude/stk500v2_private.h b/src/avrdude/stk500v2_private.h
index 31c1bb23d..31c1bb23d 100644
--- a/xs/src/avrdude/stk500v2_private.h
+++ b/src/avrdude/stk500v2_private.h
diff --git a/xs/src/avrdude/term.c b/src/avrdude/term.c
index 012f6f1a5..012f6f1a5 100644
--- a/xs/src/avrdude/term.c
+++ b/src/avrdude/term.c
diff --git a/xs/src/avrdude/term.h b/src/avrdude/term.h
index fca3aac84..fca3aac84 100644
--- a/xs/src/avrdude/term.h
+++ b/src/avrdude/term.h
diff --git a/xs/src/avrdude/tools/build-mingw32.sh b/src/avrdude/tools/build-mingw32.sh
index 2d9e11261..2d9e11261 100755..100644
--- a/xs/src/avrdude/tools/build-mingw32.sh
+++ b/src/avrdude/tools/build-mingw32.sh
diff --git a/xs/src/avrdude/tools/get-dw-params.xsl b/src/avrdude/tools/get-dw-params.xsl
index a3f083e96..a3f083e96 100644
--- a/xs/src/avrdude/tools/get-dw-params.xsl
+++ b/src/avrdude/tools/get-dw-params.xsl
diff --git a/xs/src/avrdude/tools/get-hv-params.xsl b/src/avrdude/tools/get-hv-params.xsl
index b4a595f13..b4a595f13 100644
--- a/xs/src/avrdude/tools/get-hv-params.xsl
+++ b/src/avrdude/tools/get-hv-params.xsl
diff --git a/xs/src/avrdude/tools/get-stk600-cards.xsl b/src/avrdude/tools/get-stk600-cards.xsl
index 6165b526e..6165b526e 100644
--- a/xs/src/avrdude/tools/get-stk600-cards.xsl
+++ b/src/avrdude/tools/get-stk600-cards.xsl
diff --git a/xs/src/avrdude/tools/get-stk600-devices.xsl b/src/avrdude/tools/get-stk600-devices.xsl
index efba1628a..efba1628a 100644
--- a/xs/src/avrdude/tools/get-stk600-devices.xsl
+++ b/src/avrdude/tools/get-stk600-devices.xsl
diff --git a/xs/src/avrdude/tpi.h b/src/avrdude/tpi.h
index 89d438d8b..89d438d8b 100644
--- a/xs/src/avrdude/tpi.h
+++ b/src/avrdude/tpi.h
diff --git a/xs/src/avrdude/update.c b/src/avrdude/update.c
index a255ab4f9..a255ab4f9 100644
--- a/xs/src/avrdude/update.c
+++ b/src/avrdude/update.c
diff --git a/xs/src/avrdude/usb_hidapi.c b/src/avrdude/usb_hidapi.c
index 81e9c4abe..81e9c4abe 100644
--- a/xs/src/avrdude/usb_hidapi.c
+++ b/src/avrdude/usb_hidapi.c
diff --git a/xs/src/avrdude/usb_libusb.c b/src/avrdude/usb_libusb.c
index 235e330a8..235e330a8 100644
--- a/xs/src/avrdude/usb_libusb.c
+++ b/src/avrdude/usb_libusb.c
diff --git a/xs/src/avrdude/usbasp.c b/src/avrdude/usbasp.c
index e75eed1d7..e75eed1d7 100644
--- a/xs/src/avrdude/usbasp.c
+++ b/src/avrdude/usbasp.c
diff --git a/xs/src/avrdude/usbasp.h b/src/avrdude/usbasp.h
index 573d2b853..573d2b853 100644
--- a/xs/src/avrdude/usbasp.h
+++ b/src/avrdude/usbasp.h
diff --git a/xs/src/avrdude/usbdevs.h b/src/avrdude/usbdevs.h
index a3bc413ca..a3bc413ca 100644
--- a/xs/src/avrdude/usbdevs.h
+++ b/src/avrdude/usbdevs.h
diff --git a/xs/src/avrdude/usbtiny.c b/src/avrdude/usbtiny.c
index b6bc7cc07..b6bc7cc07 100644
--- a/xs/src/avrdude/usbtiny.c
+++ b/src/avrdude/usbtiny.c
diff --git a/xs/src/avrdude/usbtiny.h b/src/avrdude/usbtiny.h
index 3a258b9f1..3a258b9f1 100644
--- a/xs/src/avrdude/usbtiny.h
+++ b/src/avrdude/usbtiny.h
diff --git a/xs/src/avrdude/windows/.cvsignore b/src/avrdude/windows/.cvsignore
index 601c4fbff..601c4fbff 100644
--- a/xs/src/avrdude/windows/.cvsignore
+++ b/src/avrdude/windows/.cvsignore
diff --git a/xs/src/avrdude/windows/Makefile.am b/src/avrdude/windows/Makefile.am
index 9890fd05f..9890fd05f 100644
--- a/xs/src/avrdude/windows/Makefile.am
+++ b/src/avrdude/windows/Makefile.am
diff --git a/xs/src/avrdude/windows/getopt.c b/src/avrdude/windows/getopt.c
index cfa302335..cfa302335 100644
--- a/xs/src/avrdude/windows/getopt.c
+++ b/src/avrdude/windows/getopt.c
diff --git a/xs/src/avrdude/windows/getopt.h b/src/avrdude/windows/getopt.h
index 8a45c8b13..8a45c8b13 100644
--- a/xs/src/avrdude/windows/getopt.h
+++ b/src/avrdude/windows/getopt.h
diff --git a/xs/src/avrdude/windows/giveio.c b/src/avrdude/windows/giveio.c
index f752a2937..f752a2937 100644
--- a/xs/src/avrdude/windows/giveio.c
+++ b/src/avrdude/windows/giveio.c
diff --git a/xs/src/avrdude/windows/giveio.sys b/src/avrdude/windows/giveio.sys
index 62a0cb66f..62a0cb66f 100644
--- a/xs/src/avrdude/windows/giveio.sys
+++ b/src/avrdude/windows/giveio.sys
Binary files differ
diff --git a/xs/src/avrdude/windows/install_giveio.bat b/src/avrdude/windows/install_giveio.bat
index 4a02b093b..4a02b093b 100755..100644
--- a/xs/src/avrdude/windows/install_giveio.bat
+++ b/src/avrdude/windows/install_giveio.bat
diff --git a/xs/src/avrdude/windows/loaddrv.c b/src/avrdude/windows/loaddrv.c
index ca92a2a1a..ca92a2a1a 100644
--- a/xs/src/avrdude/windows/loaddrv.c
+++ b/src/avrdude/windows/loaddrv.c
diff --git a/xs/src/avrdude/windows/loaddrv.h b/src/avrdude/windows/loaddrv.h
index d7d102b97..d7d102b97 100644
--- a/xs/src/avrdude/windows/loaddrv.h
+++ b/src/avrdude/windows/loaddrv.h
diff --git a/xs/src/avrdude/windows/remove_giveio.bat b/src/avrdude/windows/remove_giveio.bat
index 024427db8..024427db8 100755..100644
--- a/xs/src/avrdude/windows/remove_giveio.bat
+++ b/src/avrdude/windows/remove_giveio.bat
diff --git a/xs/src/avrdude/windows/status_giveio.bat b/src/avrdude/windows/status_giveio.bat
index bc8214749..bc8214749 100755..100644
--- a/xs/src/avrdude/windows/status_giveio.bat
+++ b/src/avrdude/windows/status_giveio.bat
diff --git a/xs/src/avrdude/windows/unistd.cpp b/src/avrdude/windows/unistd.cpp
index e47c0b659..e47c0b659 100644
--- a/xs/src/avrdude/windows/unistd.cpp
+++ b/src/avrdude/windows/unistd.cpp
diff --git a/xs/src/avrdude/windows/unistd.h b/src/avrdude/windows/unistd.h
index b1bc6bf7f..b1bc6bf7f 100644
--- a/xs/src/avrdude/windows/unistd.h
+++ b/src/avrdude/windows/unistd.h
diff --git a/xs/src/avrdude/wiring.c b/src/avrdude/wiring.c
index 562a3f17c..562a3f17c 100644
--- a/xs/src/avrdude/wiring.c
+++ b/src/avrdude/wiring.c
diff --git a/xs/src/avrdude/wiring.h b/src/avrdude/wiring.h
index ed1362de7..ed1362de7 100644
--- a/xs/src/avrdude/wiring.h
+++ b/src/avrdude/wiring.h
diff --git a/src/boost/CMakeLists.txt b/src/boost/CMakeLists.txt
new file mode 100644
index 000000000..2b23ec3b2
--- /dev/null
+++ b/src/boost/CMakeLists.txt
@@ -0,0 +1,20 @@
+project(nowide)
+cmake_minimum_required(VERSION 2.6)
+
+add_library(nowide STATIC
+ nowide/args.hpp
+ nowide/cenv.hpp
+ nowide/config.hpp
+ nowide/convert.hpp
+ nowide/cstdio.hpp
+ nowide/cstdlib.hpp
+ nowide/filebuf.hpp
+ nowide/fstream.hpp
+ nowide/integration/filesystem.hpp
+ nowide/iostream.cpp
+ nowide/iostream.hpp
+ nowide/stackstring.hpp
+ nowide/system.hpp
+ nowide/utf8_codecvt.hpp
+ nowide/windows.hpp
+)
diff --git a/xs/src/boost/nowide/args.hpp b/src/boost/nowide/args.hpp
index bb806d02e..bb806d02e 100644
--- a/xs/src/boost/nowide/args.hpp
+++ b/src/boost/nowide/args.hpp
diff --git a/xs/src/boost/nowide/cenv.hpp b/src/boost/nowide/cenv.hpp
index a38a24b97..a38a24b97 100644
--- a/xs/src/boost/nowide/cenv.hpp
+++ b/src/boost/nowide/cenv.hpp
diff --git a/xs/src/boost/nowide/config.hpp b/src/boost/nowide/config.hpp
index d983109f3..d983109f3 100644
--- a/xs/src/boost/nowide/config.hpp
+++ b/src/boost/nowide/config.hpp
diff --git a/xs/src/boost/nowide/convert.hpp b/src/boost/nowide/convert.hpp
index 89b8871d0..89b8871d0 100644
--- a/xs/src/boost/nowide/convert.hpp
+++ b/src/boost/nowide/convert.hpp
diff --git a/xs/src/boost/nowide/cstdio.hpp b/src/boost/nowide/cstdio.hpp
index d0bda97a0..d0bda97a0 100644
--- a/xs/src/boost/nowide/cstdio.hpp
+++ b/src/boost/nowide/cstdio.hpp
diff --git a/xs/src/boost/nowide/cstdlib.hpp b/src/boost/nowide/cstdlib.hpp
index 27e20610a..27e20610a 100644
--- a/xs/src/boost/nowide/cstdlib.hpp
+++ b/src/boost/nowide/cstdlib.hpp
diff --git a/xs/src/boost/nowide/filebuf.hpp b/src/boost/nowide/filebuf.hpp
index 2d6f4a443..2d6f4a443 100644
--- a/xs/src/boost/nowide/filebuf.hpp
+++ b/src/boost/nowide/filebuf.hpp
diff --git a/xs/src/boost/nowide/fstream.hpp b/src/boost/nowide/fstream.hpp
index b0824a51b..b0824a51b 100644
--- a/xs/src/boost/nowide/fstream.hpp
+++ b/src/boost/nowide/fstream.hpp
diff --git a/xs/src/boost/nowide/integration/filesystem.hpp b/src/boost/nowide/integration/filesystem.hpp
index c2a44b4ee..c2a44b4ee 100644
--- a/xs/src/boost/nowide/integration/filesystem.hpp
+++ b/src/boost/nowide/integration/filesystem.hpp
diff --git a/xs/src/boost/nowide/iostream.cpp b/src/boost/nowide/iostream.cpp
index 6b9099110..6b9099110 100644
--- a/xs/src/boost/nowide/iostream.cpp
+++ b/src/boost/nowide/iostream.cpp
diff --git a/xs/src/boost/nowide/iostream.hpp b/src/boost/nowide/iostream.hpp
index 6ab004a25..6ab004a25 100644
--- a/xs/src/boost/nowide/iostream.hpp
+++ b/src/boost/nowide/iostream.hpp
diff --git a/xs/src/boost/nowide/stackstring.hpp b/src/boost/nowide/stackstring.hpp
index 948a22f7f..948a22f7f 100644
--- a/xs/src/boost/nowide/stackstring.hpp
+++ b/src/boost/nowide/stackstring.hpp
diff --git a/xs/src/boost/nowide/system.hpp b/src/boost/nowide/system.hpp
index a1fc97505..a1fc97505 100644
--- a/xs/src/boost/nowide/system.hpp
+++ b/src/boost/nowide/system.hpp
diff --git a/xs/src/boost/nowide/utf8_codecvt.hpp b/src/boost/nowide/utf8_codecvt.hpp
index cc5046fc8..cc5046fc8 100644
--- a/xs/src/boost/nowide/utf8_codecvt.hpp
+++ b/src/boost/nowide/utf8_codecvt.hpp
diff --git a/xs/src/boost/nowide/windows.hpp b/src/boost/nowide/windows.hpp
index 164ed5531..164ed5531 100644
--- a/xs/src/boost/nowide/windows.hpp
+++ b/src/boost/nowide/windows.hpp
diff --git a/src/clipper/CMakeLists.txt b/src/clipper/CMakeLists.txt
new file mode 100644
index 000000000..d6f3861dc
--- /dev/null
+++ b/src/clipper/CMakeLists.txt
@@ -0,0 +1,7 @@
+project(clipper)
+cmake_minimum_required(VERSION 2.6)
+
+add_library(clipper STATIC
+ clipper.cpp
+ clipper.hpp
+)
diff --git a/xs/src/clipper.cpp b/src/clipper/clipper.cpp
index e865288fb..228e0c6ef 100644
--- a/xs/src/clipper.cpp
+++ b/src/clipper/clipper.cpp
@@ -1,4180 +1,4180 @@
-/*******************************************************************************
-* *
-* Author : Angus Johnson *
-* Version : 6.2.9 *
-* Date : 16 February 2015 *
-* Website : http://www.angusj.com *
-* Copyright : Angus Johnson 2010-2015 *
-* *
-* 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 <cmath>
-#include <vector>
-#include <algorithm>
-#include <stdexcept>
-#include <cstring>
-#include <cstdlib>
-#include <ostream>
-#include <functional>
-#include <assert.h>
-#include <Shiny/Shiny.h>
-#include <libslic3r/Int128.hpp>
-
-namespace ClipperLib {
-
-static double const pi = 3.141592653589793238;
-static double const two_pi = pi *2;
-static double const def_arc_tolerance = 0.25;
-
-enum Direction { dRightToLeft, dLeftToRight };
-
-static int const Unassigned = -1; //edge not currently 'owning' a solution
-static int const Skip = -2; //edge that would otherwise close a path
-
-#define HORIZONTAL (-1.0E+40)
-#define TOLERANCE (1.0e-20)
-#define NEAR_ZERO(val) (((val) > -TOLERANCE) && ((val) < TOLERANCE))
-
-// Output polygon.
-struct OutRec {
- int Idx;
- bool IsHole;
- bool IsOpen;
- //The 'FirstLeft' field points to another OutRec that contains or is the
- //'parent' of OutRec. It is 'first left' because the ActiveEdgeList (AEL) is
- //parsed left from the current edge (owning OutRec) until the owner OutRec
- //is found. This field simplifies sorting the polygons into a tree structure
- //which reflects the parent/child relationships of all polygons.
- //This field should be renamed Parent, and will be later.
- OutRec *FirstLeft;
- // Used only by void Clipper::BuildResult2(PolyTree& polytree)
- PolyNode *PolyNd;
- // Linked list of output points, dynamically allocated.
- OutPt *Pts;
- OutPt *BottomPt;
-};
-
-//------------------------------------------------------------------------------
-
-inline cInt Round(double val)
-{
- return static_cast<cInt>((val < 0) ? (val - 0.5) : (val + 0.5));
-}
-
-//------------------------------------------------------------------------------
-// PolyTree methods ...
-//------------------------------------------------------------------------------
-
-int PolyTree::Total() const
-{
- int result = (int)AllNodes.size();
- //with negative offsets, ignore the hidden outer polygon ...
- if (result > 0 && Childs.front() != &AllNodes.front()) result--;
- return result;
-}
-
-//------------------------------------------------------------------------------
-// PolyNode methods ...
-//------------------------------------------------------------------------------
-
-void PolyNode::AddChild(PolyNode& child)
-{
- unsigned cnt = (unsigned)Childs.size();
- Childs.push_back(&child);
- child.Parent = this;
- child.Index = cnt;
-}
-//------------------------------------------------------------------------------
-
-// Edge delimits a hole if it has an odd number of parent loops.
-bool PolyNode::IsHole() const
-{
- bool result = true;
- PolyNode* node = Parent;
- while (node)
- {
- result = !result;
- node = node->Parent;
- }
- return result;
-}
-
-//------------------------------------------------------------------------------
-// Miscellaneous global functions
-//------------------------------------------------------------------------------
-
-double Area(const Path &poly)
-{
- int size = (int)poly.size();
- if (size < 3) return 0;
-
- double a = 0;
- for (int i = 0, j = size -1; i < size; ++i)
- {
- a += ((double)poly[j].X + poly[i].X) * ((double)poly[j].Y - poly[i].Y);
- j = i;
- }
- return -a * 0.5;
-}
-//------------------------------------------------------------------------------
-
-double Area(const OutRec &outRec)
-{
- OutPt *op = outRec.Pts;
- if (!op) return 0;
- double a = 0;
- do {
- a += (double)(op->Prev->Pt.X + op->Pt.X) * (double)(op->Prev->Pt.Y - op->Pt.Y);
- op = op->Next;
- } while (op != outRec.Pts);
- return a * 0.5;
-}
-//------------------------------------------------------------------------------
-
-bool PointIsVertex(const IntPoint &Pt, OutPt *pp)
-{
- OutPt *pp2 = pp;
- do
- {
- if (pp2->Pt == Pt) return true;
- pp2 = pp2->Next;
- }
- while (pp2 != pp);
- return false;
-}
-//------------------------------------------------------------------------------
-
-//See "The Point in Polygon Problem for Arbitrary Polygons" by Hormann & Agathos
-//http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.88.5498&rep=rep1&type=pdf
-int PointInPolygon(const IntPoint &pt, const Path &path)
-{
- //returns 0 if false, +1 if true, -1 if pt ON polygon boundary
- int result = 0;
- size_t cnt = path.size();
- if (cnt < 3) return 0;
- IntPoint ip = path[0];
- for(size_t i = 1; i <= cnt; ++i)
- {
- IntPoint ipNext = (i == cnt ? path[0] : path[i]);
- if (ipNext.Y == pt.Y && ((ipNext.X == pt.X) || (ip.Y == pt.Y && ((ipNext.X > pt.X) == (ip.X < pt.X)))))
- return -1;
- if ((ip.Y < pt.Y) != (ipNext.Y < pt.Y))
- {
- if (ip.X >= pt.X)
- {
- if (ipNext.X > pt.X) result = 1 - result;
- else
- {
- double d = (double)(ip.X - pt.X) * (ipNext.Y - pt.Y) - (double)(ipNext.X - pt.X) * (ip.Y - pt.Y);
- if (!d) return -1;
- if ((d > 0) == (ipNext.Y > ip.Y)) result = 1 - result;
- }
- } else
- {
- if (ipNext.X > pt.X)
- {
- double d = (double)(ip.X - pt.X) * (ipNext.Y - pt.Y) - (double)(ipNext.X - pt.X) * (ip.Y - pt.Y);
- if (!d) return -1;
- if ((d > 0) == (ipNext.Y > ip.Y)) result = 1 - result;
- }
- }
- }
- ip = ipNext;
- }
- return result;
-}
-//------------------------------------------------------------------------------
-
-// Called by Poly2ContainsPoly1()
-int PointInPolygon (const IntPoint &pt, OutPt *op)
-{
- //returns 0 if false, +1 if true, -1 if pt ON polygon boundary
- int result = 0;
- OutPt* startOp = op;
- do
- {
- if (op->Next->Pt.Y == pt.Y)
- {
- if ((op->Next->Pt.X == pt.X) || (op->Pt.Y == pt.Y &&
- ((op->Next->Pt.X > pt.X) == (op->Pt.X < pt.X)))) return -1;
- }
- if ((op->Pt.Y < pt.Y) != (op->Next->Pt.Y < pt.Y))
- {
- if (op->Pt.X >= pt.X)
- {
- if (op->Next->Pt.X > pt.X) result = 1 - result;
- else
- {
- double d = (double)(op->Pt.X - pt.X) * (op->Next->Pt.Y - pt.Y) - (double)(op->Next->Pt.X - pt.X) * (op->Pt.Y - pt.Y);
- if (!d) return -1;
- if ((d > 0) == (op->Next->Pt.Y > op->Pt.Y)) result = 1 - result;
- }
- } else
- {
- if (op->Next->Pt.X > pt.X)
- {
- double d = (double)(op->Pt.X - pt.X) * (op->Next->Pt.Y - pt.Y) - (double)(op->Next->Pt.X - pt.X) * (op->Pt.Y - pt.Y);
- if (!d) return -1;
- if ((d > 0) == (op->Next->Pt.Y > op->Pt.Y)) result = 1 - result;
- }
- }
- }
- op = op->Next;
- } while (startOp != op);
- return result;
-}
-//------------------------------------------------------------------------------
-
-// This is potentially very expensive! O(n^2)!
-bool Poly2ContainsPoly1(OutPt *OutPt1, OutPt *OutPt2)
-{
- PROFILE_FUNC();
- OutPt* op = OutPt1;
- do
- {
- //nb: PointInPolygon returns 0 if false, +1 if true, -1 if pt on polygon
- int res = PointInPolygon(op->Pt, OutPt2);
- if (res >= 0) return res > 0;
- op = op->Next;
- }
- while (op != OutPt1);
- return true;
-}
-//----------------------------------------------------------------------
-
-inline bool SlopesEqual(const cInt dx1, const cInt dy1, const cInt dx2, const cInt dy2, bool UseFullInt64Range) {
- return (UseFullInt64Range) ?
- // |dx1| < 2^63, |dx2| < 2^63 etc,
- Int128::sign_determinant_2x2_filtered(dx1, dy1, dx2, dy2) == 0 :
-// Int128::sign_determinant_2x2(dx1, dy1, dx2, dy2) == 0 :
- // |dx1| < 2^31, |dx2| < 2^31 etc,
- // therefore the following computation could be done with 64bit arithmetics.
- dy1 * dx2 == dx1 * dy2;
-}
-inline bool SlopesEqual(const TEdge &e1, const TEdge &e2, bool UseFullInt64Range)
- { return SlopesEqual(e1.Delta.X, e1.Delta.Y, e2.Delta.X, e2.Delta.Y, UseFullInt64Range); }
-inline bool SlopesEqual(const IntPoint &pt1, const IntPoint &pt2, const IntPoint &pt3, bool UseFullInt64Range)
- { return SlopesEqual(pt1.X-pt2.X, pt1.Y-pt2.Y, pt2.X-pt3.X, pt2.Y-pt3.Y, UseFullInt64Range); }
-inline bool SlopesEqual(const IntPoint &pt1, const IntPoint &pt2, const IntPoint &pt3, const IntPoint &pt4, bool UseFullInt64Range)
- { return SlopesEqual(pt1.X-pt2.X, pt1.Y-pt2.Y, pt3.X-pt4.X, pt3.Y-pt4.Y, UseFullInt64Range); }
-
-//------------------------------------------------------------------------------
-
-inline bool IsHorizontal(TEdge &e)
-{
- return e.Delta.Y == 0;
-}
-//------------------------------------------------------------------------------
-
-inline double GetDx(const IntPoint &pt1, const IntPoint &pt2)
-{
- return (pt1.Y == pt2.Y) ?
- HORIZONTAL : (double)(pt2.X - pt1.X) / (pt2.Y - pt1.Y);
-}
-//---------------------------------------------------------------------------
-
-inline cInt TopX(TEdge &edge, const cInt currentY)
-{
- return (currentY == edge.Top.Y) ?
- edge.Top.X :
- edge.Bot.X + Round(edge.Dx *(currentY - edge.Bot.Y));
-}
-//------------------------------------------------------------------------------
-
-void IntersectPoint(TEdge &Edge1, TEdge &Edge2, IntPoint &ip)
-{
-#ifdef use_xyz
- ip.Z = 0;
-#endif
-
- double b1, b2;
- if (Edge1.Dx == Edge2.Dx)
- {
- ip.Y = Edge1.Curr.Y;
- ip.X = TopX(Edge1, ip.Y);
- return;
- }
- else if (Edge1.Delta.X == 0)
- {
- ip.X = Edge1.Bot.X;
- if (IsHorizontal(Edge2))
- ip.Y = Edge2.Bot.Y;
- else
- {
- b2 = Edge2.Bot.Y - (Edge2.Bot.X / Edge2.Dx);
- ip.Y = Round(ip.X / Edge2.Dx + b2);
- }
- }
- else if (Edge2.Delta.X == 0)
- {
- ip.X = Edge2.Bot.X;
- if (IsHorizontal(Edge1))
- ip.Y = Edge1.Bot.Y;
- else
- {
- b1 = Edge1.Bot.Y - (Edge1.Bot.X / Edge1.Dx);
- ip.Y = Round(ip.X / Edge1.Dx + b1);
- }
- }
- else
- {
- b1 = Edge1.Bot.X - Edge1.Bot.Y * Edge1.Dx;
- b2 = Edge2.Bot.X - Edge2.Bot.Y * Edge2.Dx;
- double q = (b2-b1) / (Edge1.Dx - Edge2.Dx);
- ip.Y = Round(q);
- ip.X = (std::fabs(Edge1.Dx) < std::fabs(Edge2.Dx)) ?
- Round(Edge1.Dx * q + b1) :
- Round(Edge2.Dx * q + b2);
- }
-
- if (ip.Y < Edge1.Top.Y || ip.Y < Edge2.Top.Y)
- {
- if (Edge1.Top.Y > Edge2.Top.Y)
- ip.Y = Edge1.Top.Y;
- else
- ip.Y = Edge2.Top.Y;
- if (std::fabs(Edge1.Dx) < std::fabs(Edge2.Dx))
- ip.X = TopX(Edge1, ip.Y);
- else
- ip.X = TopX(Edge2, ip.Y);
- }
- //finally, don't allow 'ip' to be BELOW curr.Y (ie bottom of scanbeam) ...
- if (ip.Y > Edge1.Curr.Y)
- {
- ip.Y = Edge1.Curr.Y;
- //use the more vertical edge to derive X ...
- if (std::fabs(Edge1.Dx) > std::fabs(Edge2.Dx))
- ip.X = TopX(Edge2, ip.Y); else
- ip.X = TopX(Edge1, ip.Y);
- }
-}
-//------------------------------------------------------------------------------
-
-// Reverse a linked loop of points representing a closed polygon.
-// This has a time complexity of O(n)
-void ReversePolyPtLinks(OutPt *pp)
-{
- if (!pp) return;
- OutPt *pp1 = pp;
- do {
- OutPt *pp2 = pp1->Next;
- pp1->Next = pp1->Prev;
- pp1->Prev = pp2;
- pp1 = pp2;
- } while( pp1 != pp );
-}
-//------------------------------------------------------------------------------
-
-inline void InitEdge(TEdge* e, TEdge* eNext, TEdge* ePrev, const IntPoint& Pt)
-{
- std::memset(e, 0, sizeof(TEdge));
- e->Next = eNext;
- e->Prev = ePrev;
- e->Curr = Pt;
- e->OutIdx = Unassigned;
-}
-//------------------------------------------------------------------------------
-
-void InitEdge2(TEdge& e, PolyType Pt)
-{
- if (e.Curr.Y >= e.Next->Curr.Y)
- {
- e.Bot = e.Curr;
- e.Top = e.Next->Curr;
- } else
- {
- e.Top = e.Curr;
- e.Bot = e.Next->Curr;
- }
-
- e.Delta.X = (e.Top.X - e.Bot.X);
- e.Delta.Y = (e.Top.Y - e.Bot.Y);
-
- if (e.Delta.Y == 0) e.Dx = HORIZONTAL;
- else e.Dx = (double)(e.Delta.X) / e.Delta.Y;
-
- e.PolyTyp = Pt;
-}
-//------------------------------------------------------------------------------
-
-// Called from ClipperBase::AddPathInternal() to remove collinear and duplicate points.
-inline TEdge* RemoveEdge(TEdge* e)
-{
- //removes e from double_linked_list (but without removing from memory)
- e->Prev->Next = e->Next;
- e->Next->Prev = e->Prev;
- TEdge* result = e->Next;
- e->Prev = 0; //flag as removed (see ClipperBase.Clear)
- return result;
-}
-//------------------------------------------------------------------------------
-
-inline void ReverseHorizontal(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.]
- std::swap(e.Top.X, e.Bot.X);
-#ifdef use_xyz
- std::swap(e.Top.Z, e.Bot.Z);
-#endif
-}
-//------------------------------------------------------------------------------
-
-bool GetOverlapSegment(IntPoint pt1a, IntPoint pt1b, IntPoint pt2a,
- IntPoint pt2b, IntPoint &pt1, IntPoint &pt2)
-{
- //precondition: segments are Collinear.
- if (std::abs(pt1a.X - pt1b.X) > std::abs(pt1a.Y - pt1b.Y))
- {
- if (pt1a.X > pt1b.X) std::swap(pt1a, pt1b);
- if (pt2a.X > pt2b.X) std::swap(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) std::swap(pt1a, pt1b);
- if (pt2a.Y < pt2b.Y) std::swap(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 ((p->Pt == btmPt1->Pt) && (p != btmPt1)) p = p->Prev;
- double dx1p = std::fabs(GetDx(btmPt1->Pt, p->Pt));
- p = btmPt1->Next;
- while ((p->Pt == btmPt1->Pt) && (p != btmPt1)) p = p->Next;
- double dx1n = std::fabs(GetDx(btmPt1->Pt, p->Pt));
-
- p = btmPt2->Prev;
- while ((p->Pt == btmPt2->Pt) && (p != btmPt2)) p = p->Prev;
- double dx2p = std::fabs(GetDx(btmPt2->Pt, p->Pt));
- p = btmPt2->Next;
- while ((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);
-}
-//------------------------------------------------------------------------------
-
-// Called by GetLowermostRec()
-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 (dups->Pt != pp->Pt) dups = dups->Next;
- }
- }
- return pp;
-}
-//------------------------------------------------------------------------------
-
-bool Pt2IsBetweenPt1AndPt3(const IntPoint &pt1,
- const IntPoint &pt2, const IntPoint &pt3)
-{
- if ((pt1 == pt3) || (pt1 == pt2) || (pt3 == pt2))
- return false;
- else if (pt1.X != pt3.X)
- return (pt2.X > pt1.X) == (pt2.X < pt3.X);
- else
- return (pt2.Y > pt1.Y) == (pt2.Y < pt3.Y);
-}
-//------------------------------------------------------------------------------
-
-bool HorzSegmentsOverlap(cInt seg1a, cInt seg1b, cInt seg2a, cInt seg2b)
-{
- if (seg1a > seg1b) std::swap(seg1a, seg1b);
- if (seg2a > seg2b) std::swap(seg2a, seg2b);
- return (seg1a < seg2b) && (seg2a < seg1b);
-}
-
-//------------------------------------------------------------------------------
-// ClipperBase class methods ...
-//------------------------------------------------------------------------------
-
-// Called from ClipperBase::AddPath() to verify the scale of the input polygon coordinates.
-inline void RangeTest(const IntPoint& Pt, bool& useFullRange)
-{
- if (useFullRange)
- {
- if (Pt.X > hiRange || Pt.Y > hiRange || -Pt.X > hiRange || -Pt.Y > hiRange)
- throw clipperException("Coordinate outside allowed range");
- }
- else if (Pt.X > loRange|| Pt.Y > loRange || -Pt.X > loRange || -Pt.Y > loRange)
- {
- useFullRange = true;
- RangeTest(Pt, useFullRange);
- }
-}
-//------------------------------------------------------------------------------
-
-// Called from ClipperBase::AddPath() to construct the Local Minima List.
-// Find a local minimum edge on the path starting with E.
-inline TEdge* FindNextLocMin(TEdge* E)
-{
- for (;;)
- {
- while (E->Bot != E->Prev->Bot || E->Curr == E->Top) E = E->Next;
- if (!IsHorizontal(*E) && !IsHorizontal(*E->Prev)) break;
- while (IsHorizontal(*E->Prev)) E = E->Prev;
- TEdge* E2 = E;
- while (IsHorizontal(*E)) E = E->Next;
- if (E->Top.Y == E->Prev->Bot.Y) continue; //ie just an intermediate horz.
- if (E2->Prev->Bot.X < E->Bot.X) E = E2;
- break;
- }
- return E;
-}
-//------------------------------------------------------------------------------
-
-// Called from ClipperBase::AddPath().
-TEdge* ClipperBase::ProcessBound(TEdge* E, bool NextIsForward)
-{
- TEdge *Result = E;
- TEdge *Horz = 0;
-
- if (E->OutIdx == Skip)
- {
- //if edges still remain in the current bound beyond the skip edge then
- //create another LocMin and call ProcessBound once more
- if (NextIsForward)
- {
- while (E->Top.Y == E->Next->Bot.Y) E = E->Next;
- //don't include top horizontals when parsing a bound a second time,
- //they will be contained in the opposite bound ...
- while (E != Result && IsHorizontal(*E)) E = E->Prev;
- }
- else
- {
- while (E->Top.Y == E->Prev->Bot.Y) E = E->Prev;
- while (E != Result && IsHorizontal(*E)) E = E->Next;
- }
-
- if (E == Result)
- {
- if (NextIsForward) Result = E->Next;
- else Result = E->Prev;
- }
- else
- {
- //there are more edges in the bound beyond result starting with E
- if (NextIsForward)
- E = Result->Next;
- else
- E = Result->Prev;
- LocalMinimum locMin;
- locMin.Y = E->Bot.Y;
- locMin.LeftBound = 0;
- locMin.RightBound = E;
- E->WindDelta = 0;
- Result = ProcessBound(E, NextIsForward);
- m_MinimaList.push_back(locMin);
- }
- return Result;
- }
-
- TEdge *EStart;
-
- if (IsHorizontal(*E))
- {
- //We need to be careful with open paths because this may not be a
- //true local minima (ie E may be following a skip edge).
- //Also, consecutive horz. edges may start heading left before going right.
- if (NextIsForward)
- EStart = E->Prev;
- else
- EStart = E->Next;
- if (IsHorizontal(*EStart)) //ie an adjoining horizontal skip edge
- {
- if (EStart->Bot.X != E->Bot.X && EStart->Top.X != E->Bot.X)
- ReverseHorizontal(*E);
- }
- else if (EStart->Bot.X != E->Bot.X)
- ReverseHorizontal(*E);
- }
-
- EStart = E;
- if (NextIsForward)
- {
- while (Result->Top.Y == Result->Next->Bot.Y && Result->Next->OutIdx != Skip)
- Result = Result->Next;
- if (IsHorizontal(*Result) && Result->Next->OutIdx != Skip)
- {
- //nb: at the top of a bound, horizontals are added to the bound
- //only when the preceding edge attaches to the horizontal's left vertex
- //unless a Skip edge is encountered when that becomes the top divide
- Horz = Result;
- while (IsHorizontal(*Horz->Prev)) Horz = Horz->Prev;
- if (Horz->Prev->Top.X > Result->Next->Top.X) Result = Horz->Prev;
- }
- while (E != Result)
- {
- E->NextInLML = E->Next;
- if (IsHorizontal(*E) && E != EStart &&
- E->Bot.X != E->Prev->Top.X) ReverseHorizontal(*E);
- E = E->Next;
- }
- if (IsHorizontal(*E) && E != EStart && E->Bot.X != E->Prev->Top.X)
- ReverseHorizontal(*E);
- Result = Result->Next; //move to the edge just beyond current bound
- } else
- {
- while (Result->Top.Y == Result->Prev->Bot.Y && Result->Prev->OutIdx != Skip)
- Result = Result->Prev;
- if (IsHorizontal(*Result) && Result->Prev->OutIdx != Skip)
- {
- Horz = Result;
- while (IsHorizontal(*Horz->Next)) Horz = Horz->Next;
- if (Horz->Next->Top.X == Result->Prev->Top.X ||
- Horz->Next->Top.X > Result->Prev->Top.X) Result = Horz->Next;
- }
-
- while (E != Result)
- {
- E->NextInLML = E->Prev;
- if (IsHorizontal(*E) && E != EStart && E->Bot.X != E->Next->Top.X)
- ReverseHorizontal(*E);
- E = E->Prev;
- }
- if (IsHorizontal(*E) && E != EStart && E->Bot.X != E->Next->Top.X)
- ReverseHorizontal(*E);
- Result = Result->Prev; //move to the edge just beyond current bound
- }
-
- return Result;
-}
-//------------------------------------------------------------------------------
-
-bool ClipperBase::AddPath(const Path &pg, PolyType PolyTyp, bool Closed)
-{
- PROFILE_FUNC();
- // Remove duplicate end point from a closed input path.
- // Remove duplicate points from the end of the input path.
- int highI = (int)pg.size() -1;
- if (Closed)
- while (highI > 0 && (pg[highI] == pg[0]))
- --highI;
- while (highI > 0 && (pg[highI] == pg[highI -1]))
- --highI;
- if ((Closed && highI < 2) || (!Closed && highI < 1))
- return false;
-
- // Allocate a new edge array.
- std::vector<TEdge> edges(highI + 1);
- // Fill in the edge array.
- bool result = AddPathInternal(pg, highI, PolyTyp, Closed, edges.data());
- if (result)
- // Success, remember the edge array.
- m_edges.emplace_back(std::move(edges));
- return result;
-}
-
-bool ClipperBase::AddPaths(const Paths &ppg, PolyType PolyTyp, bool Closed)
-{
- PROFILE_FUNC();
- std::vector<int> num_edges(ppg.size(), 0);
- int num_edges_total = 0;
- for (size_t i = 0; i < ppg.size(); ++ i) {
- const Path &pg = ppg[i];
- // Remove duplicate end point from a closed input path.
- // Remove duplicate points from the end of the input path.
- int highI = (int)pg.size() -1;
- if (Closed)
- while (highI > 0 && (pg[highI] == pg[0]))
- --highI;
- while (highI > 0 && (pg[highI] == pg[highI -1]))
- --highI;
- if ((Closed && highI < 2) || (!Closed && highI < 1))
- highI = -1;
- num_edges[i] = highI + 1;
- num_edges_total += highI + 1;
- }
- if (num_edges_total == 0)
- return false;
-
- // Allocate a new edge array.
- std::vector<TEdge> edges(num_edges_total);
- // Fill in the edge array.
- bool result = false;
- TEdge *p_edge = edges.data();
- for (Paths::size_type i = 0; i < ppg.size(); ++i)
- if (num_edges[i]) {
- bool res = AddPathInternal(ppg[i], num_edges[i] - 1, PolyTyp, Closed, p_edge);
- if (res) {
- p_edge += num_edges[i];
- result = true;
- }
- }
- if (result)
- // At least some edges were generated. Remember the edge array.
- m_edges.emplace_back(std::move(edges));
- return result;
-}
-
-bool ClipperBase::AddPathInternal(const Path &pg, int highI, PolyType PolyTyp, bool Closed, TEdge* edges)
-{
- PROFILE_FUNC();
-#ifdef use_lines
- if (!Closed && PolyTyp == ptClip)
- throw clipperException("AddPath: Open paths must be subject.");
-#else
- if (!Closed)
- throw clipperException("AddPath: Open paths have been disabled.");
-#endif
-
- assert(highI >= 0 && highI < pg.size());
-
- //1. Basic (first) edge initialization ...
- try
- {
- edges[1].Curr = pg[1];
- RangeTest(pg[0], m_UseFullRange);
- RangeTest(pg[highI], m_UseFullRange);
- InitEdge(&edges[0], &edges[1], &edges[highI], pg[0]);
- InitEdge(&edges[highI], &edges[0], &edges[highI-1], pg[highI]);
- for (int i = highI - 1; i >= 1; --i)
- {
- RangeTest(pg[i], m_UseFullRange);
- InitEdge(&edges[i], &edges[i+1], &edges[i-1], pg[i]);
- }
- }
- catch(...)
- {
- throw; //range test fails
- }
- TEdge *eStart = &edges[0];
-
- //2. Remove duplicate vertices, and (when closed) collinear edges ...
- TEdge *E = eStart, *eLoopStop = eStart;
- for (;;)
- {
- //nb: allows matching start and end points when not Closed ...
- if (E->Curr == E->Next->Curr && (Closed || E->Next != eStart))
- {
- if (E == E->Next) break;
- if (E == eStart) eStart = E->Next;
- E = RemoveEdge(E);
- eLoopStop = E;
- continue;
- }
- if (E->Prev == E->Next)
- break; //only two vertices
- else if (Closed &&
- SlopesEqual(E->Prev->Curr, E->Curr, E->Next->Curr, m_UseFullRange) &&
- (!m_PreserveCollinear ||
- !Pt2IsBetweenPt1AndPt3(E->Prev->Curr, E->Curr, E->Next->Curr)))
- {
- //Collinear edges are allowed for open paths but in closed paths
- //the default is to merge adjacent collinear edges into a single edge.
- //However, if the PreserveCollinear property is enabled, only overlapping
- //collinear edges (ie spikes) will be removed from closed paths.
- if (E == eStart) eStart = E->Next;
- E = RemoveEdge(E);
- E = E->Prev;
- eLoopStop = E;
- continue;
- }
- E = E->Next;
- if ((E == eLoopStop) || (!Closed && E->Next == eStart)) break;
- }
-
- if ((!Closed && (E == E->Next)) || (Closed && (E->Prev == E->Next)))
- {
- return false;
- }
-
- if (!Closed)
- {
- m_HasOpenPaths = true;
- eStart->Prev->OutIdx = Skip;
- }
-
- //3. Do second stage of edge initialization ...
- // IsFlat means all vertices have the same Y coordinate.
- bool IsFlat = true;
- E = eStart;
- do
- {
- InitEdge2(*E, PolyTyp);
- E = E->Next;
- if (IsFlat && E->Curr.Y != eStart->Curr.Y) IsFlat = false;
- }
- while (E != eStart);
-
- //4. Finally, add edge bounds to LocalMinima list ...
-
- //Totally flat paths must be handled differently when adding them
- //to LocalMinima list to avoid endless loops etc ...
- if (IsFlat)
- {
- if (Closed)
- {
- return false;
- }
- E->Prev->OutIdx = Skip;
- LocalMinimum locMin;
- locMin.Y = E->Bot.Y;
- locMin.LeftBound = 0;
- locMin.RightBound = E;
- locMin.RightBound->Side = esRight;
- locMin.RightBound->WindDelta = 0;
- for (;;)
- {
- if (E->Bot.X != E->Prev->Top.X) ReverseHorizontal(*E);
- if (E->Next->OutIdx == Skip) break;
- E->NextInLML = E->Next;
- E = E->Next;
- }
- m_MinimaList.push_back(locMin);
- return true;
- }
-
- bool leftBoundIsForward;
- TEdge* EMin = 0;
-
- //workaround to avoid an endless loop in the while loop below when
- //open paths have matching start and end points ...
- if (E->Prev->Bot == E->Prev->Top) E = E->Next;
-
- // Find local minima and store them into a Local Minima List.
- // Multiple Local Minima could be created for a single path.
- for (;;)
- {
- E = FindNextLocMin(E);
- if (E == EMin) break;
- else if (!EMin) EMin = E;
-
- //E and E.Prev now share a local minima (left aligned if horizontal).
- //Compare their slopes to find which starts which bound ...
- LocalMinimum locMin;
- locMin.Y = E->Bot.Y;
- if (E->Dx < E->Prev->Dx)
- {
- locMin.LeftBound = E->Prev;
- locMin.RightBound = E;
- leftBoundIsForward = false; //Q.nextInLML = Q.prev
- } else
- {
- locMin.LeftBound = E;
- locMin.RightBound = E->Prev;
- leftBoundIsForward = true; //Q.nextInLML = Q.next
- }
- locMin.LeftBound->Side = esLeft;
- locMin.RightBound->Side = esRight;
-
- if (!Closed) locMin.LeftBound->WindDelta = 0;
- else if (locMin.LeftBound->Next == locMin.RightBound)
- locMin.LeftBound->WindDelta = -1;
- else locMin.LeftBound->WindDelta = 1;
- locMin.RightBound->WindDelta = -locMin.LeftBound->WindDelta;
-
- E = ProcessBound(locMin.LeftBound, leftBoundIsForward);
- if (E->OutIdx == Skip) E = ProcessBound(E, leftBoundIsForward);
-
- TEdge* E2 = ProcessBound(locMin.RightBound, !leftBoundIsForward);
- if (E2->OutIdx == Skip) E2 = ProcessBound(E2, !leftBoundIsForward);
-
- if (locMin.LeftBound->OutIdx == Skip)
- locMin.LeftBound = 0;
- else if (locMin.RightBound->OutIdx == Skip)
- locMin.RightBound = 0;
- m_MinimaList.push_back(locMin);
- if (!leftBoundIsForward) E = E2;
- }
- return true;
-}
-//------------------------------------------------------------------------------
-
-void ClipperBase::Clear()
-{
- PROFILE_FUNC();
- m_MinimaList.clear();
- m_edges.clear();
- m_UseFullRange = false;
- m_HasOpenPaths = false;
-}
-//------------------------------------------------------------------------------
-
-// Initialize the Local Minima List:
-// Sort the LML entries, initialize the left / right bound edges of each Local Minima.
-void ClipperBase::Reset()
-{
- PROFILE_FUNC();
- if (m_MinimaList.empty()) return; //ie nothing to process
- std::sort(m_MinimaList.begin(), m_MinimaList.end(), [](const LocalMinimum& lm1, const LocalMinimum& lm2){ return lm1.Y < lm2.Y; });
-
- //reset all edges ...
- for (LocalMinimum &lm : m_MinimaList) {
- TEdge* e = lm.LeftBound;
- if (e)
- {
- e->Curr = e->Bot;
- e->Side = esLeft;
- e->OutIdx = Unassigned;
- }
-
- e = lm.RightBound;
- if (e)
- {
- e->Curr = e->Bot;
- e->Side = esRight;
- e->OutIdx = Unassigned;
- }
- }
-}
-//------------------------------------------------------------------------------
-
-// Get bounds of the edges referenced by the Local Minima List.
-// Returns (0,0,0,0) for an empty rectangle.
-IntRect ClipperBase::GetBounds()
-{
- PROFILE_FUNC();
- IntRect result;
- auto lm = m_MinimaList.begin();
- if (lm == m_MinimaList.end())
- {
- result.left = result.top = result.right = result.bottom = 0;
- return result;
- }
- result.left = lm->LeftBound->Bot.X;
- result.top = lm->LeftBound->Bot.Y;
- result.right = lm->LeftBound->Bot.X;
- result.bottom = lm->LeftBound->Bot.Y;
- while (lm != m_MinimaList.end())
- {
- result.bottom = std::max(result.bottom, lm->LeftBound->Bot.Y);
- TEdge* e = lm->LeftBound;
- for (;;) {
- TEdge* bottomE = e;
- while (e->NextInLML)
- {
- if (e->Bot.X < result.left) result.left = e->Bot.X;
- if (e->Bot.X > result.right) result.right = e->Bot.X;
- e = e->NextInLML;
- }
- result.left = std::min(result.left, e->Bot.X);
- result.right = std::max(result.right, e->Bot.X);
- result.left = std::min(result.left, e->Top.X);
- result.right = std::max(result.right, e->Top.X);
- result.top = std::min(result.top, e->Top.Y);
- if (bottomE == lm->LeftBound) e = lm->RightBound;
- else break;
- }
- ++lm;
- }
- return result;
-}
-
-//------------------------------------------------------------------------------
-// TClipper methods ...
-//------------------------------------------------------------------------------
-
-Clipper::Clipper(int initOptions) :
- ClipperBase(),
- m_OutPtsFree(nullptr),
- m_OutPtsChunkSize(32),
- m_OutPtsChunkLast(32),
- m_ActiveEdges(nullptr),
- m_SortedEdges(nullptr)
-{
- m_ReverseOutput = ((initOptions & ioReverseSolution) != 0);
- m_StrictSimple = ((initOptions & ioStrictlySimple) != 0);
- m_PreserveCollinear = ((initOptions & ioPreserveCollinear) != 0);
- m_HasOpenPaths = false;
-#ifdef use_xyz
- m_ZFill = 0;
-#endif
-}
-//------------------------------------------------------------------------------
-
-void Clipper::Reset()
-{
- PROFILE_FUNC();
- ClipperBase::Reset();
- m_Scanbeam = std::priority_queue<cInt>();
- m_Maxima.clear();
- m_ActiveEdges = 0;
- m_SortedEdges = 0;
- for (auto lm = m_MinimaList.rbegin(); lm != m_MinimaList.rend(); ++lm)
- m_Scanbeam.push(lm->Y);
-}
-
-//------------------------------------------------------------------------------
-
-bool Clipper::Execute(ClipType clipType, Paths &solution,
- PolyFillType subjFillType, PolyFillType clipFillType)
-{
- PROFILE_FUNC();
- if (m_HasOpenPaths)
- throw clipperException("Error: PolyTree struct is needed for open path clipping.");
- solution.resize(0);
- m_SubjFillType = subjFillType;
- m_ClipFillType = clipFillType;
- m_ClipType = clipType;
- m_UsingPolyTree = false;
- bool succeeded = ExecuteInternal();
- if (succeeded) BuildResult(solution);
- DisposeAllOutRecs();
- return succeeded;
-}
-//------------------------------------------------------------------------------
-
-bool Clipper::Execute(ClipType clipType, PolyTree& polytree,
- PolyFillType subjFillType, PolyFillType clipFillType)
-{
- PROFILE_FUNC();
- m_SubjFillType = subjFillType;
- m_ClipFillType = clipFillType;
- m_ClipType = clipType;
- m_UsingPolyTree = true;
- bool succeeded = ExecuteInternal();
- if (succeeded) BuildResult2(polytree);
- DisposeAllOutRecs();
- return succeeded;
-}
-//------------------------------------------------------------------------------
-
-bool Clipper::ExecuteInternal()
-{
- PROFILE_FUNC();
- bool succeeded = true;
- try {
- PROFILE_BLOCK(Clipper_ExecuteInternal_Process);
- Reset();
- if (m_MinimaList.empty()) return true;
- cInt botY = m_Scanbeam.top();
- do { m_Scanbeam.pop(); } while (! m_Scanbeam.empty() && botY == m_Scanbeam.top());
- do {
- InsertLocalMinimaIntoAEL(botY);
- ProcessHorizontals();
- m_GhostJoins.clear();
- if (m_Scanbeam.empty()) break;
- cInt topY = m_Scanbeam.top();
- do { m_Scanbeam.pop(); } while (! m_Scanbeam.empty() && topY == m_Scanbeam.top());
- succeeded = ProcessIntersections(topY);
- if (!succeeded) break;
- ProcessEdgesAtTopOfScanbeam(topY);
- botY = topY;
- } while (!m_Scanbeam.empty() || !m_MinimaList.empty());
- }
- catch(...)
- {
- succeeded = false;
- }
-
- if (succeeded)
- {
- PROFILE_BLOCK(Clipper_ExecuteInternal_Fix);
-
- //fix orientations ...
- //FIXME Vojtech: Does it not invalidate the loop hierarchy maintained as OutRec::FirstLeft pointers?
- //FIXME Vojtech: The area is calculated with floats, it may not be numerically stable!
- {
- PROFILE_BLOCK(Clipper_ExecuteInternal_Fix_orientations);
- for (OutRec *outRec : m_PolyOuts)
- if (outRec->Pts && !outRec->IsOpen && (outRec->IsHole ^ m_ReverseOutput) == (Area(*outRec) > 0))
- ReversePolyPtLinks(outRec->Pts);
- }
-
- JoinCommonEdges();
-
- //unfortunately FixupOutPolygon() must be done after JoinCommonEdges()
- {
- PROFILE_BLOCK(Clipper_ExecuteInternal_Fix_fixup);
- for (OutRec *outRec : m_PolyOuts)
- if (outRec->Pts) {
- if (outRec->IsOpen)
- // Removes duplicate points.
- FixupOutPolyline(*outRec);
- else
- // Removes duplicate points and simplifies consecutive parallel edges by removing the middle vertex.
- FixupOutPolygon(*outRec);
- }
- }
- // For each polygon, search for exactly duplicate non-successive points.
- // If such a point is found, the loop is split into two pieces.
- // Search for the duplicate points is O(n^2)!
- // http://www.angusj.com/delphi/clipper/documentation/Docs/Units/ClipperLib/Classes/Clipper/Properties/StrictlySimple.htm
- if (m_StrictSimple) DoSimplePolygons();
- }
-
- m_Joins.clear();
- m_GhostJoins.clear();
- return succeeded;
-}
-//------------------------------------------------------------------------------
-
-OutPt* Clipper::AllocateOutPt()
-{
- OutPt *pt;
- if (m_OutPtsFree) {
- // Recycle some of the already released points.
- pt = m_OutPtsFree;
- m_OutPtsFree = pt->Next;
- } else if (m_OutPtsChunkLast < m_OutPtsChunkSize) {
- // Get a point from the last chunk.
- pt = m_OutPts.back() + (m_OutPtsChunkLast ++);
- } else {
- // The last chunk is full. Allocate a new one.
- m_OutPts.push_back(new OutPt[m_OutPtsChunkSize]);
- m_OutPtsChunkLast = 1;
- pt = m_OutPts.back();
- }
- return pt;
-}
-
-void Clipper::DisposeAllOutRecs()
-{
- for (OutPt *pts : m_OutPts)
- delete[] pts;
- for (OutRec *rec : m_PolyOuts)
- delete rec;
- m_OutPts.clear();
- m_OutPtsFree = nullptr;
- m_OutPtsChunkLast = m_OutPtsChunkSize;
- m_PolyOuts.clear();
-}
-//------------------------------------------------------------------------------
-
-void Clipper::SetWindingCount(TEdge &edge) const
-{
- TEdge *e = edge.PrevInAEL;
- //find the edge of the same polytype that immediately preceeds 'edge' in AEL
- while (e && ((e->PolyTyp != edge.PolyTyp) || (e->WindDelta == 0))) e = e->PrevInAEL;
- if (!e)
- {
- edge.WindCnt = (edge.WindDelta == 0 ? 1 : edge.WindDelta);
- edge.WindCnt2 = 0;
- e = m_ActiveEdges; //ie get ready to calc WindCnt2
- }
- else if (edge.WindDelta == 0 && m_ClipType != ctUnion)
- {
- edge.WindCnt = 1;
- edge.WindCnt2 = e->WindCnt2;
- e = e->NextInAEL; //ie get ready to calc WindCnt2
- }
- else if (IsEvenOddFillType(edge))
- {
- //EvenOdd filling ...
- if (edge.WindDelta == 0)
- {
- //are we inside a subj polygon ...
- bool Inside = true;
- TEdge *e2 = e->PrevInAEL;
- while (e2)
- {
- if (e2->PolyTyp == e->PolyTyp && e2->WindDelta != 0)
- Inside = !Inside;
- e2 = e2->PrevInAEL;
- }
- edge.WindCnt = (Inside ? 0 : 1);
- }
- else
- {
- edge.WindCnt = edge.WindDelta;
- }
- 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)
- {
- //prev edge is 'decreasing' WindCount (WC) toward zero
- //so we're outside the previous polygon ...
- if (std::abs(e->WindCnt) > 1)
- {
- //outside prev poly but still inside another.
- //when reversing direction of prev poly use the same WC
- if (e->WindDelta * edge.WindDelta < 0) edge.WindCnt = e->WindCnt;
- //otherwise continue to 'decrease' WC ...
- else edge.WindCnt = e->WindCnt + edge.WindDelta;
- }
- else
- //now outside all polys of same polytype so set own WC ...
- edge.WindCnt = (edge.WindDelta == 0 ? 1 : edge.WindDelta);
- } else
- {
- //prev edge is 'increasing' WindCount (WC) away from zero
- //so we're inside the previous polygon ...
- if (edge.WindDelta == 0)
- edge.WindCnt = (e->WindCnt < 0 ? e->WindCnt - 1 : e->WindCnt + 1);
- //if wind direction is reversing prev then use same WC
- else if (e->WindDelta * edge.WindDelta < 0) edge.WindCnt = e->WindCnt;
- //otherwise add to WC ...
- 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)
- {
- if (e->WindDelta != 0)
- 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::IsContributing(const TEdge& edge) const
-{
- PolyFillType pft, pft2;
- if (edge.PolyTyp == ptSubject)
- {
- pft = m_SubjFillType;
- pft2 = m_ClipFillType;
- } else
- {
- pft = m_ClipFillType;
- pft2 = m_SubjFillType;
- }
-
- switch(pft)
- {
- case pftEvenOdd:
- //return false if a subj line has been flagged as inside a subj polygon
- if (edge.WindDelta == 0 && edge.WindCnt != 1) return false;
- break;
- case pftNonZero:
- if (std::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);
- }
- break;
- case ctUnion:
- switch(pft2)
- {
- case pftEvenOdd:
- case pftNonZero:
- return (edge.WindCnt2 == 0);
- case pftPositive:
- return (edge.WindCnt2 <= 0);
- default:
- return (edge.WindCnt2 >= 0);
- }
- break;
- case ctDifference:
- if (edge.PolyTyp == 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);
- }
- break;
- case ctXor:
- if (edge.WindDelta == 0) //XOr always contributing unless open
- switch(pft2)
- {
- case pftEvenOdd:
- case pftNonZero:
- return (edge.WindCnt2 == 0);
- case pftPositive:
- return (edge.WindCnt2 <= 0);
- default:
- return (edge.WindCnt2 >= 0);
- }
- else
- return true;
- break;
- default:
- return true;
- }
-}
-//------------------------------------------------------------------------------
-
-// Called from Clipper::InsertLocalMinimaIntoAEL() and Clipper::IntersectEdges().
-OutPt* Clipper::AddLocalMinPoly(TEdge *e1, TEdge *e2, const IntPoint &Pt)
-{
- PROFILE_FUNC();
- OutPt* result;
- TEdge *e, *prevE;
- if (IsHorizontal(*e2) || ( e1->Dx > e2->Dx ))
- {
- result = 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
- {
- result = 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) &&
- (e->WindDelta != 0) && (prevE->WindDelta != 0))
- {
- OutPt* outPt = AddOutPt(prevE, Pt);
- m_Joins.emplace_back(Join(result, outPt, e->Top));
- }
- return result;
-}
-//------------------------------------------------------------------------------
-
-void Clipper::AddLocalMaxPoly(TEdge *e1, TEdge *e2, const IntPoint &Pt)
-{
- AddOutPt( e1, Pt );
- if (e2->WindDelta == 0) AddOutPt(e2, Pt);
- if( e1->OutIdx == e2->OutIdx )
- {
- e1->OutIdx = Unassigned;
- e2->OutIdx = Unassigned;
- }
- 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;
- }
-}
-
-//------------------------------------------------------------------------------
-
-// Called from Clipper::ExecuteInternal()
-void Clipper::InsertLocalMinimaIntoAEL(const cInt botY)
-{
- PROFILE_FUNC();
- while (!m_MinimaList.empty() && m_MinimaList.back().Y == botY)
- {
- TEdge* lb = m_MinimaList.back().LeftBound;
- TEdge* rb = m_MinimaList.back().RightBound;
- m_MinimaList.pop_back();
-
- OutPt *Op1 = 0;
- if (!lb)
- {
- //nb: don't insert LB into either AEL or SEL
- InsertEdgeIntoAEL(rb, 0);
- SetWindingCount(*rb);
- if (IsContributing(*rb))
- Op1 = AddOutPt(rb, rb->Bot);
- }
- else if (!rb)
- {
- InsertEdgeIntoAEL(lb, 0);
- SetWindingCount(*lb);
- if (IsContributing(*lb))
- Op1 = AddOutPt(lb, lb->Bot);
- m_Scanbeam.push(lb->Top.Y);
- }
- else
- {
- InsertEdgeIntoAEL(lb, 0);
- InsertEdgeIntoAEL(rb, lb);
- SetWindingCount( *lb );
- rb->WindCnt = lb->WindCnt;
- rb->WindCnt2 = lb->WindCnt2;
- if (IsContributing(*lb))
- Op1 = AddLocalMinPoly(lb, rb, lb->Bot);
- m_Scanbeam.push(lb->Top.Y);
- }
-
- if (rb)
- {
- if(IsHorizontal(*rb)) AddEdgeToSEL(rb);
- else m_Scanbeam.push(rb->Top.Y);
- }
-
- if (!lb || !rb) continue;
-
- //if any output polygons share an edge, they'll need joining later ...
- if (Op1 && IsHorizontal(*rb) &&
- m_GhostJoins.size() > 0 && (rb->WindDelta != 0))
- {
- for (Join &jr : m_GhostJoins)
- //if the horizontal Rb and a 'ghost' horizontal overlap, then convert
- //the 'ghost' join to a real join ready for later ...
- if (HorzSegmentsOverlap(jr.OutPt1->Pt.X, jr.OffPt.X, rb->Bot.X, rb->Top.X))
- m_Joins.emplace_back(Join(jr.OutPt1, Op1, jr.OffPt));
- }
-
- if (lb->OutIdx >= 0 && lb->PrevInAEL &&
- lb->PrevInAEL->Curr.X == lb->Bot.X &&
- lb->PrevInAEL->OutIdx >= 0 &&
- SlopesEqual(*lb->PrevInAEL, *lb, m_UseFullRange) &&
- (lb->WindDelta != 0) && (lb->PrevInAEL->WindDelta != 0))
- {
- OutPt *Op2 = AddOutPt(lb->PrevInAEL, lb->Bot);
- m_Joins.emplace_back(Join(Op1, Op2, lb->Top));
- }
-
- if(lb->NextInAEL != rb)
- {
-
- if (rb->OutIdx >= 0 && rb->PrevInAEL->OutIdx >= 0 &&
- SlopesEqual(*rb->PrevInAEL, *rb, m_UseFullRange) &&
- (rb->WindDelta != 0) && (rb->PrevInAEL->WindDelta != 0))
- {
- OutPt *Op2 = AddOutPt(rb->PrevInAEL, rb->Bot);
- m_Joins.emplace_back(Join(Op1, Op2, rb->Top));
- }
-
- TEdge* e = lb->NextInAEL;
- if (e)
- {
- while( e != rb )
- {
- //nb: For calculating winding counts etc, IntersectEdges() assumes
- //that param1 will be to the Right of param2 ABOVE the intersection ...
- IntersectEdges(rb , e , lb->Curr); //order important here
- e = e->NextInAEL;
- }
- }
- }
-
- }
-}
-//------------------------------------------------------------------------------
-
-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;
-}
-//------------------------------------------------------------------------------
-
-#ifdef use_xyz
-void Clipper::SetZ(IntPoint& pt, TEdge& e1, TEdge& e2)
-{
- if (pt.Z != 0 || !m_ZFill) return;
- else if (pt == e1.Bot) pt.Z = e1.Bot.Z;
- else if (pt == e1.Top) pt.Z = e1.Top.Z;
- else if (pt == e2.Bot) pt.Z = e2.Bot.Z;
- else if (pt == e2.Top) pt.Z = e2.Top.Z;
- else (*m_ZFill)(e1.Bot, e1.Top, e2.Bot, e2.Top, pt);
-}
-//------------------------------------------------------------------------------
-#endif
-
-void Clipper::IntersectEdges(TEdge *e1, TEdge *e2, IntPoint &Pt)
-{
- bool e1Contributing = ( e1->OutIdx >= 0 );
- bool e2Contributing = ( e2->OutIdx >= 0 );
-
-#ifdef use_xyz
- SetZ(Pt, *e1, *e2);
-#endif
-
-#ifdef use_lines
- //if either edge is on an OPEN path ...
- if (e1->WindDelta == 0 || e2->WindDelta == 0)
- {
- //ignore subject-subject open path intersections UNLESS they
- //are both open paths, AND they are both 'contributing maximas' ...
- if (e1->WindDelta == 0 && e2->WindDelta == 0) return;
-
- //if intersecting a subj line with a subj poly ...
- else if (e1->PolyTyp == e2->PolyTyp &&
- e1->WindDelta != e2->WindDelta && m_ClipType == ctUnion)
- {
- if (e1->WindDelta == 0)
- {
- if (e2Contributing)
- {
- AddOutPt(e1, Pt);
- if (e1Contributing) e1->OutIdx = Unassigned;
- }
- }
- else
- {
- if (e1Contributing)
- {
- AddOutPt(e2, Pt);
- if (e2Contributing) e2->OutIdx = Unassigned;
- }
- }
- }
- else if (e1->PolyTyp != e2->PolyTyp)
- {
- //toggle subj open path OutIdx on/off when Abs(clip.WndCnt) == 1 ...
- if ((e1->WindDelta == 0) && std::abs(e2->WindCnt) == 1 &&
- (m_ClipType != ctUnion || e2->WindCnt2 == 0))
- {
- AddOutPt(e1, Pt);
- if (e1Contributing) e1->OutIdx = Unassigned;
- }
- else if ((e2->WindDelta == 0) && (std::abs(e1->WindCnt) == 1) &&
- (m_ClipType != ctUnion || e1->WindCnt2 == 0))
- {
- AddOutPt(e2, Pt);
- if (e2Contributing) e2->OutIdx = Unassigned;
- }
- }
- return;
- }
-#endif
-
- //update winding counts...
- //assumes that e1 will be to the Right of e2 ABOVE the intersection
- if ( e1->PolyTyp == e2->PolyTyp )
- {
- 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->PolyTyp == ptSubject)
- {
- e1FillType = m_SubjFillType;
- e1FillType2 = m_ClipFillType;
- } else
- {
- e1FillType = m_ClipFillType;
- e1FillType2 = m_SubjFillType;
- }
- if (e2->PolyTyp == ptSubject)
- {
- e2FillType = m_SubjFillType;
- e2FillType2 = m_ClipFillType;
- } else
- {
- e2FillType = m_ClipFillType;
- e2FillType2 = m_SubjFillType;
- }
-
- cInt e1Wc, e2Wc;
- switch (e1FillType)
- {
- case pftPositive: e1Wc = e1->WindCnt; break;
- case pftNegative: e1Wc = -e1->WindCnt; break;
- default: e1Wc = std::abs(e1->WindCnt);
- }
- switch(e2FillType)
- {
- case pftPositive: e2Wc = e2->WindCnt; break;
- case pftNegative: e2Wc = -e2->WindCnt; break;
- default: e2Wc = std::abs(e2->WindCnt);
- }
-
- if ( e1Contributing && e2Contributing )
- {
- if ((e1Wc != 0 && e1Wc != 1) || (e2Wc != 0 && e2Wc != 1) ||
- (e1->PolyTyp != e2->PolyTyp && m_ClipType != ctXor) )
- {
- AddLocalMaxPoly(e1, e2, Pt);
- }
- else
- {
- AddOutPt(e1, Pt);
- AddOutPt(e2, Pt);
- std::swap(e1->Side, e2->Side);
- std::swap(e1->OutIdx, e2->OutIdx);
- }
- }
- else if ( e1Contributing )
- {
- if (e2Wc == 0 || e2Wc == 1)
- {
- AddOutPt(e1, Pt);
- std::swap(e1->Side, e2->Side);
- std::swap(e1->OutIdx, e2->OutIdx);
- }
- }
- else if ( e2Contributing )
- {
- if (e1Wc == 0 || e1Wc == 1)
- {
- AddOutPt(e2, Pt);
- std::swap(e1->Side, e2->Side);
- std::swap(e1->OutIdx, e2->OutIdx);
- }
- }
- else if ( (e1Wc == 0 || e1Wc == 1) && (e2Wc == 0 || e2Wc == 1))
- {
- //neither edge is currently contributing ...
-
- cInt e1Wc2, e2Wc2;
- switch (e1FillType2)
- {
- case pftPositive: e1Wc2 = e1->WindCnt2; break;
- case pftNegative : e1Wc2 = -e1->WindCnt2; break;
- default: e1Wc2 = std::abs(e1->WindCnt2);
- }
- switch (e2FillType2)
- {
- case pftPositive: e2Wc2 = e2->WindCnt2; break;
- case pftNegative: e2Wc2 = -e2->WindCnt2; break;
- default: e2Wc2 = std::abs(e2->WindCnt2);
- }
-
- if (e1->PolyTyp != e2->PolyTyp)
- {
- 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->PolyTyp == ptClip) && (e1Wc2 > 0) && (e2Wc2 > 0)) ||
- ((e1->PolyTyp == ptSubject) && (e1Wc2 <= 0) && (e2Wc2 <= 0)))
- AddLocalMinPoly(e1, e2, Pt);
- break;
- case ctXor:
- AddLocalMinPoly(e1, e2, Pt);
- }
- else
- std::swap(e1->Side, e2->Side);
- }
-}
-//------------------------------------------------------------------------------
-
-void Clipper::SetHoleState(TEdge *e, OutRec *outrec) const
-{
- bool IsHole = false;
- TEdge *e2 = e->PrevInAEL;
- while (e2)
- {
- if (e2->OutIdx >= 0 && e2->WindDelta != 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 ...
- if (!outRec1->BottomPt)
- outRec1->BottomPt = GetBottomPt(outRec1->Pts);
- if (!outRec2->BottomPt)
- outRec2->BottomPt = GetBottomPt(outRec2->Pts);
- 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;
-}
-//------------------------------------------------------------------------------
-
-OutRec* Clipper::GetOutRec(int Idx)
-{
- OutRec* outrec = m_PolyOuts[Idx];
- while (outrec != m_PolyOuts[outrec->Idx])
- outrec = m_PolyOuts[outrec->Idx];
- return outrec;
-}
-//------------------------------------------------------------------------------
-
-void Clipper::AppendPolygon(TEdge *e1, TEdge *e2) const
-{
- //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);
-
- //get the start and ends of both output polygons and
- //join e2 poly onto e1 poly and delete pointers to e2 ...
-
- 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;
- }
-
- outRec1->BottomPt = 0;
- if (holeStateRec == outRec2)
- {
- 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 = Unassigned; //nb: safe because we only get here via AddLocalMaxPoly
- e2->OutIdx = Unassigned;
-
- TEdge* e = m_ActiveEdges;
- while( e )
- {
- if( e->OutIdx == ObsoleteIdx )
- {
- e->OutIdx = OKIdx;
- e->Side = Side;
- break;
- }
- e = e->NextInAEL;
- }
-
- outRec2->Idx = outRec1->Idx;
-}
-//------------------------------------------------------------------------------
-
-OutRec* Clipper::CreateOutRec()
-{
- OutRec* result = new OutRec;
- result->IsHole = false;
- result->IsOpen = false;
- result->FirstLeft = 0;
- result->Pts = 0;
- result->BottomPt = 0;
- result->PolyNd = 0;
- m_PolyOuts.push_back(result);
- result->Idx = (int)m_PolyOuts.size()-1;
- return result;
-}
-//------------------------------------------------------------------------------
-
-OutPt* Clipper::AddOutPt(TEdge *e, const IntPoint &pt)
-{
- if( e->OutIdx < 0 )
- {
- OutRec *outRec = CreateOutRec();
- outRec->IsOpen = (e->WindDelta == 0);
- OutPt* newOp = this->AllocateOutPt();
- outRec->Pts = newOp;
- newOp->Idx = outRec->Idx;
- newOp->Pt = pt;
- newOp->Next = newOp;
- newOp->Prev = newOp;
- if (!outRec->IsOpen)
- SetHoleState(e, outRec);
- e->OutIdx = outRec->Idx;
- return newOp;
- } else
- {
- OutRec *outRec = m_PolyOuts[e->OutIdx];
- //OutRec.Pts is the 'Left-most' point & OutRec.Pts.Prev is the 'Right-most'
- OutPt* op = outRec->Pts;
-
- bool ToFront = (e->Side == esLeft);
- if (ToFront && (pt == op->Pt)) return op;
- else if (!ToFront && (pt == op->Prev->Pt)) return op->Prev;
-
- OutPt* newOp = this->AllocateOutPt();
- newOp->Idx = outRec->Idx;
- newOp->Pt = pt;
- newOp->Next = op;
- newOp->Prev = op->Prev;
- newOp->Prev->Next = newOp;
- op->Prev = newOp;
- if (ToFront) outRec->Pts = newOp;
- return newOp;
- }
-}
-//------------------------------------------------------------------------------
-
-OutPt* Clipper::GetLastOutPt(TEdge *e)
-{
- OutRec *outRec = m_PolyOuts[e->OutIdx];
- if (e->Side == esLeft)
- return outRec->Pts;
- else
- return outRec->Pts->Prev;
-}
-//------------------------------------------------------------------------------
-
-void Clipper::ProcessHorizontals()
-{
- PROFILE_FUNC();
- TEdge* horzEdge = m_SortedEdges;
- while(horzEdge)
- {
- DeleteFromSEL(horzEdge);
- ProcessHorizontal(horzEdge);
- horzEdge = m_SortedEdges;
- }
-}
-//------------------------------------------------------------------------------
-
-inline bool IsMaxima(TEdge *e, const cInt Y)
-{
- return e && e->Top.Y == Y && !e->NextInLML;
-}
-//------------------------------------------------------------------------------
-
-inline bool IsIntermediate(TEdge *e, const cInt Y)
-{
- return e->Top.Y == Y && e->NextInLML;
-}
-//------------------------------------------------------------------------------
-
-inline TEdge *GetMaximaPair(TEdge *e)
-{
- TEdge* result = 0;
- if ((e->Next->Top == e->Top) && !e->Next->NextInLML)
- result = e->Next;
- else if ((e->Prev->Top == e->Top) && !e->Prev->NextInLML)
- result = e->Prev;
-
- if (result && (result->OutIdx == Skip ||
- //result is false if both NextInAEL & PrevInAEL are nil & not horizontal ...
- (result->NextInAEL == result->PrevInAEL && !IsHorizontal(*result))))
- return 0;
- return result;
-}
-//------------------------------------------------------------------------------
-
-void Clipper::SwapPositionsInAEL(TEdge *Edge1, TEdge *Edge2)
-{
- //check that one or other edge hasn't already been removed from AEL ...
- if (Edge1->NextInAEL == Edge1->PrevInAEL ||
- Edge2->NextInAEL == Edge2->PrevInAEL) return;
-
- 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;
-}
-//------------------------------------------------------------------------------
-
-inline void GetHorzDirection(TEdge& HorzEdge, Direction& Dir, cInt& Left, cInt& Right)
-{
- if (HorzEdge.Bot.X < HorzEdge.Top.X)
- {
- Left = HorzEdge.Bot.X;
- Right = HorzEdge.Top.X;
- Dir = dLeftToRight;
- } else
- {
- Left = HorzEdge.Top.X;
- Right = HorzEdge.Bot.X;
- Dir = dRightToLeft;
- }
-}
-//------------------------------------------------------------------------
-
-/*******************************************************************************
-* 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 Bot.Xs only [#] *
-* (or they could intersect with Top.Xs only, ie EITHER Bot.Xs OR Top.Xs), *
-* 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. *
-*******************************************************************************/
-
-void Clipper::ProcessHorizontal(TEdge *horzEdge)
-{
- Direction dir;
- cInt horzLeft, horzRight;
- bool IsOpen = (horzEdge->OutIdx >= 0 && m_PolyOuts[horzEdge->OutIdx]->IsOpen);
-
- GetHorzDirection(*horzEdge, dir, horzLeft, horzRight);
-
- TEdge* eLastHorz = horzEdge, *eMaxPair = 0;
- while (eLastHorz->NextInLML && IsHorizontal(*eLastHorz->NextInLML))
- eLastHorz = eLastHorz->NextInLML;
- if (!eLastHorz->NextInLML)
- eMaxPair = GetMaximaPair(eLastHorz);
-
- std::vector<cInt>::const_iterator maxIt;
- std::vector<cInt>::const_reverse_iterator maxRit;
- if (!m_Maxima.empty())
- {
- //get the first maxima in range (X) ...
- if (dir == dLeftToRight)
- {
- maxIt = m_Maxima.begin();
- while (maxIt != m_Maxima.end() && *maxIt <= horzEdge->Bot.X) ++maxIt;
- if (maxIt != m_Maxima.end() && *maxIt >= eLastHorz->Top.X)
- maxIt = m_Maxima.end();
- }
- else
- {
- maxRit = m_Maxima.rbegin();
- while (maxRit != m_Maxima.rend() && *maxRit > horzEdge->Bot.X) ++maxRit;
- if (maxRit != m_Maxima.rend() && *maxRit <= eLastHorz->Top.X)
- maxRit = m_Maxima.rend();
- }
- }
-
- OutPt* op1 = 0;
-
- for (;;) //loop through consec. horizontal edges
- {
-
- bool IsLastHorz = (horzEdge == eLastHorz);
- TEdge* e = (dir == dLeftToRight) ? horzEdge->NextInAEL : horzEdge->PrevInAEL;
- while(e)
- {
-
- //this code block inserts extra coords into horizontal edges (in output
- //polygons) whereever maxima touch these horizontal edges. This helps
- //'simplifying' polygons (ie if the Simplify property is set).
- if (!m_Maxima.empty())
- {
- if (dir == dLeftToRight)
- {
- while (maxIt != m_Maxima.end() && *maxIt < e->Curr.X)
- {
- if (horzEdge->OutIdx >= 0 && !IsOpen)
- AddOutPt(horzEdge, IntPoint(*maxIt, horzEdge->Bot.Y));
- ++maxIt;
- }
- }
- else
- {
- while (maxRit != m_Maxima.rend() && *maxRit > e->Curr.X)
- {
- if (horzEdge->OutIdx >= 0 && !IsOpen)
- AddOutPt(horzEdge, IntPoint(*maxRit, horzEdge->Bot.Y));
- ++maxRit;
- }
- }
- };
-
- if ((dir == dLeftToRight && e->Curr.X > horzRight) ||
- (dir == dRightToLeft && e->Curr.X < horzLeft)) break;
-
- //Also break if we've got to the end of an intermediate horizontal edge ...
- //nb: Smaller Dx's are to the right of larger Dx's ABOVE the horizontal.
- if (e->Curr.X == horzEdge->Top.X && horzEdge->NextInLML &&
- e->Dx < horzEdge->NextInLML->Dx) break;
-
- if (horzEdge->OutIdx >= 0 && !IsOpen) //note: may be done multiple times
- {
- op1 = AddOutPt(horzEdge, e->Curr);
- TEdge* eNextHorz = m_SortedEdges;
- while (eNextHorz)
- {
- if (eNextHorz->OutIdx >= 0 &&
- HorzSegmentsOverlap(horzEdge->Bot.X,
- horzEdge->Top.X, eNextHorz->Bot.X, eNextHorz->Top.X))
- {
- OutPt* op2 = GetLastOutPt(eNextHorz);
- m_Joins.emplace_back(Join(op2, op1, eNextHorz->Top));
- }
- eNextHorz = eNextHorz->NextInSEL;
- }
- m_GhostJoins.emplace_back(Join(op1, 0, horzEdge->Bot));
- }
-
- //OK, so far we're still in range of the horizontal Edge but make sure
- //we're at the last of consec. horizontals when matching with eMaxPair
- if(e == eMaxPair && IsLastHorz)
- {
- if (horzEdge->OutIdx >= 0)
- AddLocalMaxPoly(horzEdge, eMaxPair, horzEdge->Top);
- DeleteFromAEL(horzEdge);
- DeleteFromAEL(eMaxPair);
- return;
- }
-
- if(dir == dLeftToRight)
- {
- IntPoint Pt = IntPoint(e->Curr.X, horzEdge->Curr.Y);
- IntersectEdges(horzEdge, e, Pt);
- }
- else
- {
- IntPoint Pt = IntPoint(e->Curr.X, horzEdge->Curr.Y);
- IntersectEdges( e, horzEdge, Pt);
- }
- TEdge* eNext = (dir == dLeftToRight) ? e->NextInAEL : e->PrevInAEL;
- SwapPositionsInAEL( horzEdge, e );
- e = eNext;
- } //end while(e)
-
- //Break out of loop if HorzEdge.NextInLML is not also horizontal ...
- if (!horzEdge->NextInLML || !IsHorizontal(*horzEdge->NextInLML)) break;
-
- UpdateEdgeIntoAEL(horzEdge);
- if (horzEdge->OutIdx >= 0) AddOutPt(horzEdge, horzEdge->Bot);
- GetHorzDirection(*horzEdge, dir, horzLeft, horzRight);
-
- } //end for (;;)
-
- if (horzEdge->OutIdx >= 0 && !op1)
- {
- op1 = GetLastOutPt(horzEdge);
- TEdge* eNextHorz = m_SortedEdges;
- while (eNextHorz)
- {
- if (eNextHorz->OutIdx >= 0 &&
- HorzSegmentsOverlap(horzEdge->Bot.X,
- horzEdge->Top.X, eNextHorz->Bot.X, eNextHorz->Top.X))
- {
- OutPt* op2 = GetLastOutPt(eNextHorz);
- m_Joins.emplace_back(Join(op2, op1, eNextHorz->Top));
- }
- eNextHorz = eNextHorz->NextInSEL;
- }
- m_GhostJoins.emplace_back(Join(op1, 0, horzEdge->Top));
- }
-
- if (horzEdge->NextInLML)
- {
- if(horzEdge->OutIdx >= 0)
- {
- op1 = AddOutPt( horzEdge, horzEdge->Top);
- UpdateEdgeIntoAEL(horzEdge);
- if (horzEdge->WindDelta == 0) return;
- //nb: HorzEdge is no longer horizontal here
- TEdge* ePrev = horzEdge->PrevInAEL;
- TEdge* eNext = horzEdge->NextInAEL;
- if (ePrev && ePrev->Curr.X == horzEdge->Bot.X &&
- ePrev->Curr.Y == horzEdge->Bot.Y && ePrev->WindDelta != 0 &&
- (ePrev->OutIdx >= 0 && ePrev->Curr.Y > ePrev->Top.Y &&
- SlopesEqual(*horzEdge, *ePrev, m_UseFullRange)))
- {
- OutPt* op2 = AddOutPt(ePrev, horzEdge->Bot);
- m_Joins.emplace_back(Join(op1, op2, horzEdge->Top));
- }
- else if (eNext && eNext->Curr.X == horzEdge->Bot.X &&
- eNext->Curr.Y == horzEdge->Bot.Y && eNext->WindDelta != 0 &&
- eNext->OutIdx >= 0 && eNext->Curr.Y > eNext->Top.Y &&
- SlopesEqual(*horzEdge, *eNext, m_UseFullRange))
- {
- OutPt* op2 = AddOutPt(eNext, horzEdge->Bot);
- m_Joins.emplace_back(Join(op1, op2, horzEdge->Top));
- }
- }
- else
- UpdateEdgeIntoAEL(horzEdge);
- }
- else
- {
- if (horzEdge->OutIdx >= 0) AddOutPt(horzEdge, horzEdge->Top);
- DeleteFromAEL(horzEdge);
- }
-}
-//------------------------------------------------------------------------------
-
-void Clipper::UpdateEdgeIntoAEL(TEdge *&e)
-{
- if( !e->NextInLML )
- throw clipperException("UpdateEdgeIntoAEL: invalid call");
-
- e->NextInLML->OutIdx = e->OutIdx;
- TEdge* AelPrev = e->PrevInAEL;
- TEdge* AelNext = e->NextInAEL;
- 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->Curr = e->Bot;
- e->PrevInAEL = AelPrev;
- e->NextInAEL = AelNext;
- if (!IsHorizontal(*e))
- m_Scanbeam.push(e->Top.Y);
-}
-//------------------------------------------------------------------------------
-
-bool Clipper::ProcessIntersections(const cInt topY)
-{
- PROFILE_FUNC();
- if( !m_ActiveEdges ) return true;
- try {
- BuildIntersectList(topY);
- size_t IlSize = m_IntersectList.size();
- if (IlSize == 0) return true;
- if (IlSize == 1 || FixupIntersectionOrder()) {
- for (IntersectNode &iNode : m_IntersectList) {
- IntersectEdges( iNode.Edge1, iNode.Edge2, iNode.Pt);
- SwapPositionsInAEL( iNode.Edge1 , iNode.Edge2 );
- }
- m_IntersectList.clear();
- }
- else return false;
- }
- catch(...)
- {
- m_SortedEdges = 0;
- m_IntersectList.clear();
- throw clipperException("ProcessIntersections error");
- }
- m_SortedEdges = 0;
- return true;
-}
-//------------------------------------------------------------------------------
-
-void Clipper::BuildIntersectList(const cInt 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->Curr.X = TopX( *e, topY );
- e = e->NextInAEL;
- }
-
- //bubblesort ...
- bool isModified;
- do
- {
- isModified = false;
- e = m_SortedEdges;
- while( e->NextInSEL )
- {
- TEdge *eNext = e->NextInSEL;
- IntPoint Pt;
- if(e->Curr.X > eNext->Curr.X)
- {
- IntersectPoint(*e, *eNext, Pt);
- m_IntersectList.emplace_back(IntersectNode(e, eNext, Pt));
- SwapPositionsInSEL(e, eNext);
- isModified = true;
- }
- else
- e = eNext;
- }
- if( e->PrevInSEL ) e->PrevInSEL->NextInSEL = 0;
- else break;
- }
- while ( isModified );
- m_SortedEdges = 0; //important
-}
-//------------------------------------------------------------------------------
-
-
-inline bool EdgesAdjacent(const IntersectNode &inode)
-{
- return (inode.Edge1->NextInSEL == inode.Edge2) ||
- (inode.Edge1->PrevInSEL == inode.Edge2);
-}
-//------------------------------------------------------------------------------
-
-bool Clipper::FixupIntersectionOrder()
-{
- //pre-condition: intersections are sorted Bottom-most first.
- //Now it's crucial that intersections are made only between adjacent edges,
- //so to ensure this the order of intersections may need adjusting ...
- CopyAELToSEL();
- std::sort(m_IntersectList.begin(), m_IntersectList.end(), [](const IntersectNode &node1, const IntersectNode &node2) { return node2.Pt.Y < node1.Pt.Y; });
-
- size_t cnt = m_IntersectList.size();
- for (size_t i = 0; i < cnt; ++i)
- {
- if (!EdgesAdjacent(m_IntersectList[i]))
- {
- size_t j = i + 1;
- while (j < cnt && !EdgesAdjacent(m_IntersectList[j])) j++;
- if (j == cnt) return false;
- std::swap(m_IntersectList[i], m_IntersectList[j]);
- }
- SwapPositionsInSEL(m_IntersectList[i].Edge1, m_IntersectList[i].Edge2);
- }
- return true;
-}
-//------------------------------------------------------------------------------
-
-void Clipper::DoMaxima(TEdge *e)
-{
- TEdge* eMaxPair = GetMaximaPair(e);
- if (!eMaxPair)
- {
- if (e->OutIdx >= 0)
- AddOutPt(e, e->Top);
- DeleteFromAEL(e);
- return;
- }
-
- TEdge* eNext = e->NextInAEL;
- while(eNext && eNext != eMaxPair)
- {
- IntersectEdges(e, eNext, e->Top);
- SwapPositionsInAEL(e, eNext);
- eNext = e->NextInAEL;
- }
-
- if(e->OutIdx == Unassigned && eMaxPair->OutIdx == Unassigned)
- {
- DeleteFromAEL(e);
- DeleteFromAEL(eMaxPair);
- }
- else if( e->OutIdx >= 0 && eMaxPair->OutIdx >= 0 )
- {
- if (e->OutIdx >= 0) AddLocalMaxPoly(e, eMaxPair, e->Top);
- DeleteFromAEL(e);
- DeleteFromAEL(eMaxPair);
- }
-#ifdef use_lines
- else if (e->WindDelta == 0)
- {
- if (e->OutIdx >= 0)
- {
- AddOutPt(e, e->Top);
- e->OutIdx = Unassigned;
- }
- DeleteFromAEL(e);
-
- if (eMaxPair->OutIdx >= 0)
- {
- AddOutPt(eMaxPair, e->Top);
- eMaxPair->OutIdx = Unassigned;
- }
- DeleteFromAEL(eMaxPair);
- }
-#endif
- else throw clipperException("DoMaxima error");
-}
-//------------------------------------------------------------------------------
-
-void Clipper::ProcessEdgesAtTopOfScanbeam(const cInt topY)
-{
- PROFILE_FUNC();
- 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.
- bool IsMaximaEdge = IsMaxima(e, topY);
-
- if(IsMaximaEdge)
- {
- TEdge* eMaxPair = GetMaximaPair(e);
- IsMaximaEdge = (!eMaxPair || !IsHorizontal(*eMaxPair));
- }
-
- if(IsMaximaEdge)
- {
- if (m_StrictSimple) m_Maxima.push_back(e->Top.X);
- TEdge* ePrev = e->PrevInAEL;
- DoMaxima(e);
- if( !ePrev ) e = m_ActiveEdges;
- else e = ePrev->NextInAEL;
- }
- else
- {
- //2. promote horizontal edges, otherwise update Curr.X and Curr.Y ...
- if (IsIntermediate(e, topY) && IsHorizontal(*e->NextInLML))
- {
- UpdateEdgeIntoAEL(e);
- if (e->OutIdx >= 0)
- AddOutPt(e, e->Bot);
- AddEdgeToSEL(e);
- }
- else
- {
- e->Curr.X = TopX( *e, topY );
- e->Curr.Y = topY;
- }
-
- //When StrictlySimple and 'e' is being touched by another edge, then
- //make sure both edges have a vertex here ...
- if (m_StrictSimple)
- {
- TEdge* ePrev = e->PrevInAEL;
- if ((e->OutIdx >= 0) && (e->WindDelta != 0) && ePrev && (ePrev->OutIdx >= 0) &&
- (ePrev->Curr.X == e->Curr.X) && (ePrev->WindDelta != 0))
- {
- IntPoint pt = e->Curr;
-#ifdef use_xyz
- SetZ(pt, *ePrev, *e);
-#endif
- OutPt* op = AddOutPt(ePrev, pt);
- OutPt* op2 = AddOutPt(e, pt);
- m_Joins.emplace_back(Join(op, op2, pt)); //StrictlySimple (type-3) join
- }
- }
-
- e = e->NextInAEL;
- }
- }
-
- //3. Process horizontals at the Top of the scanbeam ...
- std::sort(m_Maxima.begin(), m_Maxima.end());
- ProcessHorizontals();
- m_Maxima.clear();
-
- //4. Promote intermediate vertices ...
- e = m_ActiveEdges;
- while(e)
- {
- if(IsIntermediate(e, topY))
- {
- OutPt* op = 0;
- if( e->OutIdx >= 0 )
- op = AddOutPt(e, e->Top);
- UpdateEdgeIntoAEL(e);
-
- //if output polygons share an edge, they'll need joining later ...
- TEdge* ePrev = e->PrevInAEL;
- TEdge* eNext = e->NextInAEL;
- if (ePrev && ePrev->Curr.X == e->Bot.X &&
- ePrev->Curr.Y == e->Bot.Y && op &&
- ePrev->OutIdx >= 0 && ePrev->Curr.Y > ePrev->Top.Y &&
- SlopesEqual(*e, *ePrev, m_UseFullRange) &&
- (e->WindDelta != 0) && (ePrev->WindDelta != 0))
- {
- OutPt* op2 = AddOutPt(ePrev, e->Bot);
- m_Joins.emplace_back(Join(op, op2, e->Top));
- }
- else if (eNext && eNext->Curr.X == e->Bot.X &&
- eNext->Curr.Y == e->Bot.Y && op &&
- eNext->OutIdx >= 0 && eNext->Curr.Y > eNext->Top.Y &&
- SlopesEqual(*e, *eNext, m_UseFullRange) &&
- (e->WindDelta != 0) && (eNext->WindDelta != 0))
- {
- OutPt* op2 = AddOutPt(eNext, e->Bot);
- m_Joins.emplace_back(Join(op, op2, e->Top));
- }
- }
- e = e->NextInAEL;
- }
-}
-//------------------------------------------------------------------------------
-
-void Clipper::FixupOutPolyline(OutRec &outrec)
-{
- OutPt *pp = outrec.Pts;
- OutPt *lastPP = pp->Prev;
- while (pp != lastPP)
- {
- pp = pp->Next;
- if (pp->Pt == pp->Prev->Pt)
- {
- if (pp == lastPP) lastPP = pp->Prev;
- OutPt *tmpPP = pp->Prev;
- tmpPP->Next = pp->Next;
- pp->Next->Prev = tmpPP;
- this->DisposeOutPt(pp);
- pp = tmpPP;
- }
- }
-
- if (pp == pp->Prev)
- {
- this->DisposeOutPts(pp);
- outrec.Pts = 0;
- return;
- }
-}
-//------------------------------------------------------------------------------
-
-void Clipper::FixupOutPolygon(OutRec &outrec)
-{
- //FixupOutPolygon() - removes duplicate points and simplifies consecutive
- //parallel edges by removing the middle vertex.
- OutPt *lastOK = nullptr;
- outrec.BottomPt = nullptr;
- OutPt *pp = outrec.Pts;
- bool preserveCol = m_PreserveCollinear || m_StrictSimple;
-
- for (;;)
- {
- if (pp->Prev == pp || pp->Prev == pp->Next)
- {
- // Empty loop or a stick. Release the polygon.
- this->DisposeOutPts(pp);
- outrec.Pts = nullptr;
- return;
- }
-
- //test for duplicate points and collinear edges ...
- if ((pp->Pt == pp->Next->Pt) || (pp->Pt == pp->Prev->Pt) ||
- (SlopesEqual(pp->Prev->Pt, pp->Pt, pp->Next->Pt, m_UseFullRange) &&
- (!preserveCol || !Pt2IsBetweenPt1AndPt3(pp->Prev->Pt, pp->Pt, pp->Next->Pt))))
- {
- lastOK = nullptr;
- OutPt *tmp = pp;
- pp->Prev->Next = pp->Next;
- pp->Next->Prev = pp->Prev;
- pp = pp->Prev;
- this->DisposeOutPt(tmp);
- }
- else if (pp == lastOK) break;
- else
- {
- if (!lastOK) lastOK = pp;
- pp = pp->Next;
- }
- }
- outrec.Pts = pp;
-}
-//------------------------------------------------------------------------------
-
-// Count the number of points in a closed linked loop starting with Pts.
-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::BuildResult(Paths &polys)
-{
- polys.reserve(m_PolyOuts.size());
- for (OutRec* outRec : m_PolyOuts)
- {
- assert(! outRec->IsOpen);
- if (!outRec->Pts) continue;
- Path pg;
- OutPt* p = outRec->Pts->Prev;
- int cnt = PointCount(p);
- if (cnt < 2) continue;
- pg.reserve(cnt);
- for (int i = 0; i < cnt; ++i)
- {
- pg.emplace_back(p->Pt);
- p = p->Prev;
- }
- polys.emplace_back(std::move(pg));
- }
-}
-//------------------------------------------------------------------------------
-
-void Clipper::BuildResult2(PolyTree& polytree)
-{
- polytree.Clear();
- polytree.AllNodes.reserve(m_PolyOuts.size());
- //add each output polygon/contour to polytree ...
- for (OutRec* outRec : m_PolyOuts)
- {
- int cnt = PointCount(outRec->Pts);
- if ((outRec->IsOpen && cnt < 2) || (!outRec->IsOpen && cnt < 3))
- // Ignore an invalid output loop or a polyline.
- continue;
-
- //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)) {
- OutRec* orfl = outRec->FirstLeft;
- while (orfl && ((orfl->IsHole == outRec->IsHole) || !orfl->Pts))
- orfl = orfl->FirstLeft;
- outRec->FirstLeft = orfl;
- }
-
- //nb: polytree takes ownership of all the PolyNodes
- polytree.AllNodes.emplace_back(PolyNode());
- PolyNode* pn = &polytree.AllNodes.back();
- outRec->PolyNd = pn;
- pn->Parent = 0;
- pn->Index = 0;
- pn->Contour.reserve(cnt);
- OutPt *op = outRec->Pts->Prev;
- for (int j = 0; j < cnt; j++)
- {
- pn->Contour.emplace_back(op->Pt);
- op = op->Prev;
- }
- }
-
- //fixup PolyNode links etc ...
- polytree.Childs.reserve(m_PolyOuts.size());
- for (OutRec* outRec : m_PolyOuts)
- {
- if (!outRec->PolyNd) continue;
- if (outRec->IsOpen)
- {
- outRec->PolyNd->m_IsOpen = true;
- polytree.AddChild(*outRec->PolyNd);
- }
- else if (outRec->FirstLeft && outRec->FirstLeft->PolyNd)
- outRec->FirstLeft->PolyNd->AddChild(*outRec->PolyNd);
- else
- polytree.AddChild(*outRec->PolyNd);
- }
-}
-//------------------------------------------------------------------------------
-
-inline bool E2InsertsBeforeE1(TEdge &e1, TEdge &e2)
-{
- if (e2.Curr.X == e1.Curr.X)
- {
- if (e2.Top.Y > e1.Top.Y)
- return e2.Top.X < TopX(e1, e2.Top.Y);
- else return e1.Top.X > TopX(e2, e1.Top.Y);
- }
- else return e2.Curr.X < e1.Curr.X;
-}
-//------------------------------------------------------------------------------
-
-bool GetOverlap(const cInt a1, const cInt a2, const cInt b1, const cInt b2,
- cInt& Left, cInt& Right)
-{
- if (a1 < a2)
- {
- if (b1 < b2) {Left = std::max(a1,b1); Right = std::min(a2,b2);}
- else {Left = std::max(a1,b2); Right = std::min(a2,b1);}
- }
- else
- {
- if (b1 < b2) {Left = std::max(a2,b1); Right = std::min(a1,b2);}
- else {Left = std::max(a2,b2); Right = std::min(a1,b1);}
- }
- return Left < Right;
-}
-//------------------------------------------------------------------------------
-
-// Make all points of outrec point to outrec.Idx
-inline void UpdateOutPtIdxs(OutRec& outrec)
-{
- OutPt* op = outrec.Pts;
- do
- {
- op->Idx = outrec.Idx;
- op = op->Prev;
- }
- while(op != outrec.Pts);
-}
-//------------------------------------------------------------------------------
-
-void Clipper::InsertEdgeIntoAEL(TEdge *edge, TEdge* startEdge)
-{
- if(!m_ActiveEdges)
- {
- edge->PrevInAEL = 0;
- edge->NextInAEL = 0;
- m_ActiveEdges = edge;
- }
- else if(!startEdge && E2InsertsBeforeE1(*m_ActiveEdges, *edge))
- {
- edge->PrevInAEL = 0;
- edge->NextInAEL = m_ActiveEdges;
- m_ActiveEdges->PrevInAEL = edge;
- m_ActiveEdges = edge;
- }
- else
- {
- if(!startEdge) startEdge = m_ActiveEdges;
- while(startEdge->NextInAEL &&
- !E2InsertsBeforeE1(*startEdge->NextInAEL , *edge))
- startEdge = startEdge->NextInAEL;
- edge->NextInAEL = startEdge->NextInAEL;
- if(startEdge->NextInAEL) startEdge->NextInAEL->PrevInAEL = edge;
- edge->PrevInAEL = startEdge;
- startEdge->NextInAEL = edge;
- }
-}
-//----------------------------------------------------------------------
-
-OutPt* Clipper::DupOutPt(OutPt* outPt, bool InsertAfter)
-{
- OutPt* result = this->AllocateOutPt();
- result->Pt = outPt->Pt;
- result->Idx = outPt->Idx;
- if (InsertAfter)
- {
- result->Next = outPt->Next;
- result->Prev = outPt;
- outPt->Next->Prev = result;
- outPt->Next = result;
- }
- else
- {
- result->Prev = outPt->Prev;
- result->Next = outPt;
- outPt->Prev->Next = result;
- outPt->Prev = result;
- }
- return result;
-}
-//------------------------------------------------------------------------------
-
-bool Clipper::JoinHorz(OutPt* op1, OutPt* op1b, OutPt* op2, OutPt* op2b,
- const IntPoint &Pt, bool DiscardLeft)
-{
- Direction Dir1 = (op1->Pt.X > op1b->Pt.X ? dRightToLeft : dLeftToRight);
- Direction Dir2 = (op2->Pt.X > op2b->Pt.X ? dRightToLeft : dLeftToRight);
- if (Dir1 == Dir2) return false;
-
- //When DiscardLeft, we want Op1b to be on the Left of Op1, otherwise we
- //want Op1b to be on the Right. (And likewise with Op2 and Op2b.)
- //So, to facilitate this while inserting Op1b and Op2b ...
- //when DiscardLeft, make sure we're AT or RIGHT of Pt before adding Op1b,
- //otherwise make sure we're AT or LEFT of Pt. (Likewise with Op2b.)
- if (Dir1 == dLeftToRight)
- {
- while (op1->Next->Pt.X <= Pt.X &&
- op1->Next->Pt.X >= op1->Pt.X && op1->Next->Pt.Y == Pt.Y)
- op1 = op1->Next;
- if (DiscardLeft && (op1->Pt.X != Pt.X)) op1 = op1->Next;
- op1b = this->DupOutPt(op1, !DiscardLeft);
- if (op1b->Pt != Pt)
- {
- op1 = op1b;
- op1->Pt = Pt;
- op1b = this->DupOutPt(op1, !DiscardLeft);
- }
- }
- else
- {
- while (op1->Next->Pt.X >= Pt.X &&
- op1->Next->Pt.X <= op1->Pt.X && op1->Next->Pt.Y == Pt.Y)
- op1 = op1->Next;
- if (!DiscardLeft && (op1->Pt.X != Pt.X)) op1 = op1->Next;
- op1b = this->DupOutPt(op1, DiscardLeft);
- if (op1b->Pt != Pt)
- {
- op1 = op1b;
- op1->Pt = Pt;
- op1b = this->DupOutPt(op1, DiscardLeft);
- }
- }
-
- if (Dir2 == dLeftToRight)
- {
- while (op2->Next->Pt.X <= Pt.X &&
- op2->Next->Pt.X >= op2->Pt.X && op2->Next->Pt.Y == Pt.Y)
- op2 = op2->Next;
- if (DiscardLeft && (op2->Pt.X != Pt.X)) op2 = op2->Next;
- op2b = this->DupOutPt(op2, !DiscardLeft);
- if (op2b->Pt != Pt)
- {
- op2 = op2b;
- op2->Pt = Pt;
- op2b = this->DupOutPt(op2, !DiscardLeft);
- };
- } else
- {
- while (op2->Next->Pt.X >= Pt.X &&
- op2->Next->Pt.X <= op2->Pt.X && op2->Next->Pt.Y == Pt.Y)
- op2 = op2->Next;
- if (!DiscardLeft && (op2->Pt.X != Pt.X)) op2 = op2->Next;
- op2b = this->DupOutPt(op2, DiscardLeft);
- if (op2b->Pt != Pt)
- {
- op2 = op2b;
- op2->Pt = Pt;
- op2b = this->DupOutPt(op2, DiscardLeft);
- };
- };
-
- if ((Dir1 == dLeftToRight) == DiscardLeft)
- {
- op1->Prev = op2;
- op2->Next = op1;
- op1b->Next = op2b;
- op2b->Prev = op1b;
- }
- else
- {
- op1->Next = op2;
- op2->Prev = op1;
- op1b->Prev = op2b;
- op2b->Next = op1b;
- }
- return true;
-}
-//------------------------------------------------------------------------------
-
-bool Clipper::JoinPoints(Join *j, OutRec* outRec1, OutRec* outRec2)
-{
- OutPt *op1 = j->OutPt1, *op1b;
- OutPt *op2 = j->OutPt2, *op2b;
-
- //There are 3 kinds of joins for output polygons ...
- //1. Horizontal joins where Join.OutPt1 & Join.OutPt2 are vertices anywhere
- //along (horizontal) collinear edges (& Join.OffPt is on the same horizontal).
- //2. Non-horizontal joins where Join.OutPt1 & Join.OutPt2 are at the same
- //location at the Bottom of the overlapping segment (& Join.OffPt is above).
- //3. StrictSimple joins where edges touch but are not collinear and where
- //Join.OutPt1, Join.OutPt2 & Join.OffPt all share the same point.
- bool isHorizontal = (j->OutPt1->Pt.Y == j->OffPt.Y);
-
- if (isHorizontal && (j->OffPt == j->OutPt1->Pt) &&
- (j->OffPt == j->OutPt2->Pt))
- {
- //Strictly Simple join ...
- if (outRec1 != outRec2) return false;
- op1b = j->OutPt1->Next;
- while (op1b != op1 && (op1b->Pt == j->OffPt))
- op1b = op1b->Next;
- bool reverse1 = (op1b->Pt.Y > j->OffPt.Y);
- op2b = j->OutPt2->Next;
- while (op2b != op2 && (op2b->Pt == j->OffPt))
- op2b = op2b->Next;
- bool reverse2 = (op2b->Pt.Y > j->OffPt.Y);
- if (reverse1 == reverse2) return false;
- if (reverse1)
- {
- op1b = this->DupOutPt(op1, false);
- op2b = this->DupOutPt(op2, true);
- op1->Prev = op2;
- op2->Next = op1;
- op1b->Next = op2b;
- op2b->Prev = op1b;
- j->OutPt1 = op1;
- j->OutPt2 = op1b;
- return true;
- } else
- {
- op1b = this->DupOutPt(op1, true);
- op2b = this->DupOutPt(op2, false);
- op1->Next = op2;
- op2->Prev = op1;
- op1b->Prev = op2b;
- op2b->Next = op1b;
- j->OutPt1 = op1;
- j->OutPt2 = op1b;
- return true;
- }
- }
- else if (isHorizontal)
- {
- //treat horizontal joins differently to non-horizontal joins since with
- //them we're not yet sure where the overlapping is. OutPt1.Pt & OutPt2.Pt
- //may be anywhere along the horizontal edge.
- op1b = op1;
- while (op1->Prev->Pt.Y == op1->Pt.Y && op1->Prev != op1b && op1->Prev != op2)
- op1 = op1->Prev;
- while (op1b->Next->Pt.Y == op1b->Pt.Y && op1b->Next != op1 && op1b->Next != op2)
- op1b = op1b->Next;
- if (op1b->Next == op1 || op1b->Next == op2) return false; //a flat 'polygon'
-
- op2b = op2;
- while (op2->Prev->Pt.Y == op2->Pt.Y && op2->Prev != op2b && op2->Prev != op1b)
- op2 = op2->Prev;
- while (op2b->Next->Pt.Y == op2b->Pt.Y && op2b->Next != op2 && op2b->Next != op1)
- op2b = op2b->Next;
- if (op2b->Next == op2 || op2b->Next == op1) return false; //a flat 'polygon'
-
- cInt Left, Right;
- //Op1 --> Op1b & Op2 --> Op2b are the extremites of the horizontal edges
- if (!GetOverlap(op1->Pt.X, op1b->Pt.X, op2->Pt.X, op2b->Pt.X, Left, Right))
- return false;
-
- //DiscardLeftSide: when overlapping edges are joined, a spike will created
- //which needs to be cleaned up. However, we don't want Op1 or Op2 caught up
- //on the discard Side as either may still be needed for other joins ...
- IntPoint Pt;
- bool DiscardLeftSide;
- if (op1->Pt.X >= Left && op1->Pt.X <= Right)
- {
- Pt = op1->Pt; DiscardLeftSide = (op1->Pt.X > op1b->Pt.X);
- }
- else if (op2->Pt.X >= Left&& op2->Pt.X <= Right)
- {
- Pt = op2->Pt; DiscardLeftSide = (op2->Pt.X > op2b->Pt.X);
- }
- else if (op1b->Pt.X >= Left && op1b->Pt.X <= Right)
- {
- Pt = op1b->Pt; DiscardLeftSide = op1b->Pt.X > op1->Pt.X;
- }
- else
- {
- Pt = op2b->Pt; DiscardLeftSide = (op2b->Pt.X > op2->Pt.X);
- }
- j->OutPt1 = op1; j->OutPt2 = op2;
- return JoinHorz(op1, op1b, op2, op2b, Pt, DiscardLeftSide);
- } else
- {
- //nb: For non-horizontal joins ...
- // 1. Jr.OutPt1.Pt.Y == Jr.OutPt2.Pt.Y
- // 2. Jr.OutPt1.Pt > Jr.OffPt.Y
-
- //make sure the polygons are correctly oriented ...
- op1b = op1->Next;
- while ((op1b->Pt == op1->Pt) && (op1b != op1)) op1b = op1b->Next;
- bool Reverse1 = ((op1b->Pt.Y > op1->Pt.Y) ||
- !SlopesEqual(op1->Pt, op1b->Pt, j->OffPt, m_UseFullRange));
- if (Reverse1)
- {
- op1b = op1->Prev;
- while ((op1b->Pt == op1->Pt) && (op1b != op1)) op1b = op1b->Prev;
- if ((op1b->Pt.Y > op1->Pt.Y) ||
- !SlopesEqual(op1->Pt, op1b->Pt, j->OffPt, m_UseFullRange)) return false;
- };
- op2b = op2->Next;
- while ((op2b->Pt == op2->Pt) && (op2b != op2))op2b = op2b->Next;
- bool Reverse2 = ((op2b->Pt.Y > op2->Pt.Y) ||
- !SlopesEqual(op2->Pt, op2b->Pt, j->OffPt, m_UseFullRange));
- if (Reverse2)
- {
- op2b = op2->Prev;
- while ((op2b->Pt == op2->Pt) && (op2b != op2)) op2b = op2b->Prev;
- if ((op2b->Pt.Y > op2->Pt.Y) ||
- !SlopesEqual(op2->Pt, op2b->Pt, j->OffPt, m_UseFullRange)) return false;
- }
-
- if ((op1b == op1) || (op2b == op2) || (op1b == op2b) ||
- ((outRec1 == outRec2) && (Reverse1 == Reverse2))) return false;
-
- if (Reverse1)
- {
- op1b = this->DupOutPt(op1, false);
- op2b = this->DupOutPt(op2, true);
- op1->Prev = op2;
- op2->Next = op1;
- op1b->Next = op2b;
- op2b->Prev = op1b;
- j->OutPt1 = op1;
- j->OutPt2 = op1b;
- return true;
- } else
- {
- op1b = this->DupOutPt(op1, true);
- op2b = this->DupOutPt(op2, false);
- op1->Next = op2;
- op2->Prev = op1;
- op1b->Prev = op2b;
- op2b->Next = op1b;
- j->OutPt1 = op1;
- j->OutPt2 = op1b;
- return true;
- }
- }
-}
-//----------------------------------------------------------------------
-
-// This is potentially very expensive! O(n^3)!
-void Clipper::FixupFirstLefts1(OutRec* OldOutRec, OutRec* NewOutRec) const
-{
- PROFILE_FUNC();
- //tests if NewOutRec contains the polygon before reassigning FirstLeft
- for (OutRec *outRec : m_PolyOuts)
- {
- if (!outRec->Pts || !outRec->FirstLeft) continue;
- OutRec* firstLeft = outRec->FirstLeft;
- // Skip empty polygons.
- while (firstLeft && !firstLeft->Pts) firstLeft = firstLeft->FirstLeft;
- if (firstLeft == OldOutRec && Poly2ContainsPoly1(outRec->Pts, NewOutRec->Pts))
- outRec->FirstLeft = NewOutRec;
- }
-}
-//----------------------------------------------------------------------
-
-void Clipper::FixupFirstLefts2(OutRec* OldOutRec, OutRec* NewOutRec) const
-{
- //reassigns FirstLeft WITHOUT testing if NewOutRec contains the polygon
- for (OutRec *outRec : m_PolyOuts)
- if (outRec->FirstLeft == OldOutRec) outRec->FirstLeft = NewOutRec;
-}
-//----------------------------------------------------------------------
-
-void Clipper::JoinCommonEdges()
-{
- PROFILE_FUNC();
- for (Join &join : m_Joins)
- {
- OutRec *outRec1 = GetOutRec(join.OutPt1->Idx);
- OutRec *outRec2 = GetOutRec(join.OutPt2->Idx);
-
- if (!outRec1->Pts || !outRec2->Pts) continue;
- if (outRec1->IsOpen || outRec2->IsOpen) 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);
-
- if (!JoinPoints(&join, outRec1, outRec2)) continue;
-
- if (outRec1 == outRec2)
- {
- //instead of joining two polygons, we've just created a new one by
- //splitting one polygon into two.
- outRec1->Pts = join.OutPt1;
- outRec1->BottomPt = 0;
- outRec2 = CreateOutRec();
- outRec2->Pts = join.OutPt2;
-
- //update all OutRec2.Pts Idx's ...
- UpdateOutPtIdxs(*outRec2);
-
- //We now need to check every OutRec.FirstLeft pointer. If it points
- //to OutRec1 it may need to point to OutRec2 instead ...
- if (m_UsingPolyTree)
- for (size_t j = 0; j < m_PolyOuts.size() - 1; j++)
- {
- OutRec* oRec = m_PolyOuts[j];
- OutRec* firstLeft = oRec->FirstLeft;
- while (firstLeft && !firstLeft->Pts) firstLeft = firstLeft->FirstLeft;
- if (!oRec->Pts || firstLeft != outRec1 ||
- oRec->IsHole == outRec1->IsHole) continue;
- if (Poly2ContainsPoly1(oRec->Pts, join.OutPt2))
- oRec->FirstLeft = outRec2;
- }
-
- if (Poly2ContainsPoly1(outRec2->Pts, outRec1->Pts))
- {
- //outRec2 is contained by outRec1 ...
- outRec2->IsHole = !outRec1->IsHole;
- outRec2->FirstLeft = outRec1;
-
- // For each m_PolyOuts, replace FirstLeft from outRec2 to outRec1.
- if (m_UsingPolyTree) FixupFirstLefts2(outRec2, outRec1);
-
- if ((outRec2->IsHole ^ m_ReverseOutput) == (Area(*outRec2) > 0))
- ReversePolyPtLinks(outRec2->Pts);
-
- } else if (Poly2ContainsPoly1(outRec1->Pts, outRec2->Pts))
- {
- //outRec1 is contained by outRec2 ...
- outRec2->IsHole = outRec1->IsHole;
- outRec1->IsHole = !outRec2->IsHole;
- outRec2->FirstLeft = outRec1->FirstLeft;
- outRec1->FirstLeft = outRec2;
-
- // For each m_PolyOuts, replace FirstLeft from outRec1 to outRec2.
- if (m_UsingPolyTree) FixupFirstLefts2(outRec1, outRec2);
-
- if ((outRec1->IsHole ^ m_ReverseOutput) == (Area(*outRec1) > 0))
- ReversePolyPtLinks(outRec1->Pts);
- }
- else
- {
- //the 2 polygons are completely separate ...
- outRec2->IsHole = outRec1->IsHole;
- outRec2->FirstLeft = outRec1->FirstLeft;
-
- //fixup FirstLeft pointers that may need reassigning to OutRec2
- // For each polygon of m_PolyOuts, replace FirstLeft from outRec1 to outRec2 if the polygon is inside outRec2.
- //FIXME This is potentially very expensive! O(n^3)!
- if (m_UsingPolyTree) FixupFirstLefts1(outRec1, outRec2);
- }
-
- } else
- {
- //joined 2 polygons together ...
-
- outRec2->Pts = 0;
- outRec2->BottomPt = 0;
- outRec2->Idx = outRec1->Idx;
-
- outRec1->IsHole = holeStateRec->IsHole;
- if (holeStateRec == outRec2)
- outRec1->FirstLeft = outRec2->FirstLeft;
- outRec2->FirstLeft = outRec1;
-
- // For each m_PolyOuts, replace FirstLeft from outRec2 to outRec1.
- if (m_UsingPolyTree) FixupFirstLefts2(outRec2, outRec1);
- }
- }
-}
-
-//------------------------------------------------------------------------------
-// ClipperOffset support functions ...
-//------------------------------------------------------------------------------
-
-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);
-}
-
-//------------------------------------------------------------------------------
-// ClipperOffset class
-//------------------------------------------------------------------------------
-
-void ClipperOffset::Clear()
-{
- for (int i = 0; i < m_polyNodes.ChildCount(); ++i)
- delete m_polyNodes.Childs[i];
- m_polyNodes.Childs.clear();
- m_lowest.X = -1;
-}
-//------------------------------------------------------------------------------
-
-void ClipperOffset::AddPath(const Path& path, JoinType joinType, EndType endType)
-{
- int highI = (int)path.size() - 1;
- if (highI < 0) return;
- PolyNode* newNode = new PolyNode();
- newNode->m_jointype = joinType;
- newNode->m_endtype = endType;
-
- //strip duplicate points from path and also get index to the lowest point ...
- bool has_shortest_edge_length = ShortestEdgeLength > 0.;
- double shortest_edge_length2 = has_shortest_edge_length ? ShortestEdgeLength * ShortestEdgeLength : 0.;
- if (endType == etClosedLine || endType == etClosedPolygon)
- for (; highI > 0; -- highI) {
- bool same = false;
- if (has_shortest_edge_length) {
- double dx = double(path[highI].X - path[0].X);
- double dy = double(path[highI].Y - path[0].Y);
- same = dx*dx + dy*dy < shortest_edge_length2;
- } else
- same = path[0] == path[highI];
- if (! same)
- break;
- }
- newNode->Contour.reserve(highI + 1);
- newNode->Contour.push_back(path[0]);
- int j = 0, k = 0;
- for (int i = 1; i <= highI; i++) {
- bool same = false;
- if (has_shortest_edge_length) {
- double dx = double(path[i].X - newNode->Contour[j].X);
- double dy = double(path[i].Y - newNode->Contour[j].Y);
- same = dx*dx + dy*dy < shortest_edge_length2;
- } else
- same = newNode->Contour[j] == path[i];
- if (same)
- continue;
- j++;
- newNode->Contour.push_back(path[i]);
- if (path[i].Y > newNode->Contour[k].Y ||
- (path[i].Y == newNode->Contour[k].Y &&
- path[i].X < newNode->Contour[k].X)) k = j;
- }
- if (endType == etClosedPolygon && j < 2)
- {
- delete newNode;
- return;
- }
- m_polyNodes.AddChild(*newNode);
-
- //if this path's lowest pt is lower than all the others then update m_lowest
- if (endType != etClosedPolygon) return;
- if (m_lowest.X < 0)
- m_lowest = IntPoint(m_polyNodes.ChildCount() - 1, k);
- else
- {
- IntPoint ip = m_polyNodes.Childs[(int)m_lowest.X]->Contour[(int)m_lowest.Y];
- if (newNode->Contour[k].Y > ip.Y ||
- (newNode->Contour[k].Y == ip.Y &&
- newNode->Contour[k].X < ip.X))
- m_lowest = IntPoint(m_polyNodes.ChildCount() - 1, k);
- }
-}
-//------------------------------------------------------------------------------
-
-void ClipperOffset::AddPaths(const Paths& paths, JoinType joinType, EndType endType)
-{
- for (const Path &path : paths)
- AddPath(path, joinType, endType);
-}
-//------------------------------------------------------------------------------
-
-void ClipperOffset::FixOrientations()
-{
- //fixup orientations of all closed paths if the orientation of the
- //closed path with the lowermost vertex is wrong ...
- if (m_lowest.X >= 0 &&
- !Orientation(m_polyNodes.Childs[(int)m_lowest.X]->Contour))
- {
- for (int i = 0; i < m_polyNodes.ChildCount(); ++i)
- {
- PolyNode& node = *m_polyNodes.Childs[i];
- if (node.m_endtype == etClosedPolygon ||
- (node.m_endtype == etClosedLine && Orientation(node.Contour)))
- ReversePath(node.Contour);
- }
- } else
- {
- for (int i = 0; i < m_polyNodes.ChildCount(); ++i)
- {
- PolyNode& node = *m_polyNodes.Childs[i];
- if (node.m_endtype == etClosedLine && !Orientation(node.Contour))
- ReversePath(node.Contour);
- }
- }
-}
-//------------------------------------------------------------------------------
-
-void ClipperOffset::Execute(Paths& solution, double delta)
-{
- solution.clear();
- FixOrientations();
- DoOffset(delta);
-
- //now clean up 'corners' ...
- Clipper clpr;
- clpr.AddPaths(m_destPolys, ptSubject, true);
- if (delta > 0)
- {
- clpr.Execute(ctUnion, solution, pftPositive, pftPositive);
- }
- else
- {
- IntRect r = clpr.GetBounds();
- Path 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.AddPath(outer, ptSubject, true);
- clpr.ReverseSolution(true);
- clpr.Execute(ctUnion, solution, pftNegative, pftNegative);
- if (solution.size() > 0) solution.erase(solution.begin());
- }
-}
-//------------------------------------------------------------------------------
-
-void ClipperOffset::Execute(PolyTree& solution, double delta)
-{
- solution.Clear();
- FixOrientations();
- DoOffset(delta);
-
- //now clean up 'corners' ...
- Clipper clpr;
- clpr.AddPaths(m_destPolys, ptSubject, true);
- if (delta > 0)
- {
- clpr.Execute(ctUnion, solution, pftPositive, pftPositive);
- }
- else
- {
- IntRect r = clpr.GetBounds();
- Path 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.AddPath(outer, ptSubject, true);
- clpr.ReverseSolution(true);
- clpr.Execute(ctUnion, solution, pftNegative, pftNegative);
- //remove the outer PolyNode rectangle ...
- if (solution.ChildCount() == 1 && solution.Childs[0]->ChildCount() > 0)
- {
- PolyNode* outerNode = solution.Childs[0];
- solution.Childs.reserve(outerNode->ChildCount());
- solution.Childs[0] = outerNode->Childs[0];
- solution.Childs[0]->Parent = outerNode->Parent;
- for (int i = 1; i < outerNode->ChildCount(); ++i)
- solution.AddChild(*outerNode->Childs[i]);
- }
- else
- solution.Clear();
- }
-}
-//------------------------------------------------------------------------------
-
-void ClipperOffset::DoOffset(double delta)
-{
- m_destPolys.clear();
- m_delta = delta;
-
- //if Zero offset, just copy any CLOSED polygons to m_p and return ...
- if (NEAR_ZERO(delta))
- {
- m_destPolys.reserve(m_polyNodes.ChildCount());
- for (int i = 0; i < m_polyNodes.ChildCount(); i++)
- {
- PolyNode& node = *m_polyNodes.Childs[i];
- if (node.m_endtype == etClosedPolygon)
- m_destPolys.push_back(node.Contour);
- }
- return;
- }
-
- //see offset_triginometry3.svg in the documentation folder ...
- if (MiterLimit > 2) m_miterLim = 2/(MiterLimit * MiterLimit);
- else m_miterLim = 0.5;
-
- double y;
- if (ArcTolerance <= 0.0) y = def_arc_tolerance;
- else if (ArcTolerance > std::fabs(delta) * def_arc_tolerance)
- y = std::fabs(delta) * def_arc_tolerance;
- else y = ArcTolerance;
- //see offset_triginometry2.svg in the documentation folder ...
- double steps = pi / std::acos(1 - y / std::fabs(delta));
- if (steps > std::fabs(delta) * pi)
- steps = std::fabs(delta) * pi; //ie excessive precision check
- m_sin = std::sin(two_pi / steps);
- m_cos = std::cos(two_pi / steps);
- m_StepsPerRad = steps / two_pi;
- if (delta < 0.0) m_sin = -m_sin;
-
- m_destPolys.reserve(m_polyNodes.ChildCount() * 2);
- for (int i = 0; i < m_polyNodes.ChildCount(); i++)
- {
- PolyNode& node = *m_polyNodes.Childs[i];
- m_srcPoly = node.Contour;
-
- int len = (int)m_srcPoly.size();
- if (len == 0 || (delta <= 0 && (len < 3 || node.m_endtype != etClosedPolygon)))
- continue;
-
- m_destPoly.clear();
- if (len == 1)
- {
- if (node.m_jointype == jtRound)
- {
- double X = 1.0, Y = 0.0;
- for (cInt j = 1; j <= steps; j++)
- {
- m_destPoly.push_back(IntPoint(
- Round(m_srcPoly[0].X + X * delta),
- Round(m_srcPoly[0].Y + Y * delta)));
- double X2 = X;
- X = X * m_cos - m_sin * Y;
- Y = X2 * m_sin + Y * m_cos;
- }
- }
- else
- {
- double X = -1.0, Y = -1.0;
- for (int j = 0; j < 4; ++j)
- {
- m_destPoly.push_back(IntPoint(
- Round(m_srcPoly[0].X + X * delta),
- Round(m_srcPoly[0].Y + Y * delta)));
- if (X < 0) X = 1;
- else if (Y < 0) Y = 1;
- else X = -1;
- }
- }
- m_destPolys.push_back(m_destPoly);
- continue;
- }
- //build m_normals ...
- m_normals.clear();
- m_normals.reserve(len);
- for (int j = 0; j < len - 1; ++j)
- m_normals.push_back(GetUnitNormal(m_srcPoly[j], m_srcPoly[j + 1]));
- if (node.m_endtype == etClosedLine || node.m_endtype == etClosedPolygon)
- m_normals.push_back(GetUnitNormal(m_srcPoly[len - 1], m_srcPoly[0]));
- else
- m_normals.push_back(DoublePoint(m_normals[len - 2]));
-
- if (node.m_endtype == etClosedPolygon)
- {
- int k = len - 1;
- for (int j = 0; j < len; ++j)
- OffsetPoint(j, k, node.m_jointype);
- m_destPolys.push_back(m_destPoly);
- }
- else if (node.m_endtype == etClosedLine)
- {
- int k = len - 1;
- for (int j = 0; j < len; ++j)
- OffsetPoint(j, k, node.m_jointype);
- m_destPolys.push_back(m_destPoly);
- m_destPoly.clear();
- //re-build m_normals ...
- DoublePoint n = m_normals[len -1];
- for (int j = len - 1; j > 0; j--)
- m_normals[j] = DoublePoint(-m_normals[j - 1].X, -m_normals[j - 1].Y);
- m_normals[0] = DoublePoint(-n.X, -n.Y);
- k = 0;
- for (int j = len - 1; j >= 0; j--)
- OffsetPoint(j, k, node.m_jointype);
- m_destPolys.push_back(m_destPoly);
- }
- else
- {
- int k = 0;
- for (int j = 1; j < len - 1; ++j)
- OffsetPoint(j, k, node.m_jointype);
-
- IntPoint pt1;
- if (node.m_endtype == etOpenButt)
- {
- int j = len - 1;
- pt1 = IntPoint(Round(m_srcPoly[j].X + m_normals[j].X *
- delta), Round(m_srcPoly[j].Y + m_normals[j].Y * delta));
- m_destPoly.push_back(pt1);
- pt1 = IntPoint(Round(m_srcPoly[j].X - m_normals[j].X *
- delta), Round(m_srcPoly[j].Y - m_normals[j].Y * delta));
- m_destPoly.push_back(pt1);
- }
- else
- {
- int j = len - 1;
- k = len - 2;
- m_sinA = 0;
- m_normals[j] = DoublePoint(-m_normals[j].X, -m_normals[j].Y);
- if (node.m_endtype == etOpenSquare)
- DoSquare(j, k);
- else
- DoRound(j, k);
- }
-
- //re-build m_normals ...
- for (int j = len - 1; j > 0; j--)
- m_normals[j] = DoublePoint(-m_normals[j - 1].X, -m_normals[j - 1].Y);
- m_normals[0] = DoublePoint(-m_normals[1].X, -m_normals[1].Y);
-
- k = len - 1;
- for (int j = k - 1; j > 0; --j) OffsetPoint(j, k, node.m_jointype);
-
- if (node.m_endtype == etOpenButt)
- {
- pt1 = IntPoint(Round(m_srcPoly[0].X - m_normals[0].X * delta),
- Round(m_srcPoly[0].Y - m_normals[0].Y * delta));
- m_destPoly.push_back(pt1);
- pt1 = IntPoint(Round(m_srcPoly[0].X + m_normals[0].X * delta),
- Round(m_srcPoly[0].Y + m_normals[0].Y * delta));
- m_destPoly.push_back(pt1);
- }
- else
- {
- k = 1;
- m_sinA = 0;
- if (node.m_endtype == etOpenSquare)
- DoSquare(0, 1);
- else
- DoRound(0, 1);
- }
- m_destPolys.push_back(m_destPoly);
- }
- }
-}
-//------------------------------------------------------------------------------
-
-void ClipperOffset::OffsetPoint(int j, int& k, JoinType jointype)
-{
- //cross product ...
- m_sinA = (m_normals[k].X * m_normals[j].Y - m_normals[j].X * m_normals[k].Y);
- if (std::fabs(m_sinA * m_delta) < 1.0)
- {
- //dot product ...
- double cosA = (m_normals[k].X * m_normals[j].X + m_normals[j].Y * m_normals[k].Y );
- if (cosA > 0) // angle => 0 degrees
- {
- m_destPoly.push_back(IntPoint(Round(m_srcPoly[j].X + m_normals[k].X * m_delta),
- Round(m_srcPoly[j].Y + m_normals[k].Y * m_delta)));
- return;
- }
- //else angle => 180 degrees
- }
- else if (m_sinA > 1.0) m_sinA = 1.0;
- else if (m_sinA < -1.0) m_sinA = -1.0;
-
- if (m_sinA * m_delta < 0)
- {
- m_destPoly.push_back(IntPoint(Round(m_srcPoly[j].X + m_normals[k].X * m_delta),
- Round(m_srcPoly[j].Y + m_normals[k].Y * m_delta)));
- m_destPoly.push_back(m_srcPoly[j]);
- m_destPoly.push_back(IntPoint(Round(m_srcPoly[j].X + m_normals[j].X * m_delta),
- Round(m_srcPoly[j].Y + m_normals[j].Y * m_delta)));
- }
- else
- switch (jointype)
- {
- case jtMiter:
- {
- double r = 1 + (m_normals[j].X * m_normals[k].X +
- m_normals[j].Y * m_normals[k].Y);
- if (r >= m_miterLim) DoMiter(j, k, r); else DoSquare(j, k);
- break;
- }
- case jtSquare: DoSquare(j, k); break;
- case jtRound: DoRound(j, k); break;
- }
- k = j;
-}
-//------------------------------------------------------------------------------
-
-void ClipperOffset::DoSquare(int j, int k)
-{
- double dx = std::tan(std::atan2(m_sinA,
- m_normals[k].X * m_normals[j].X + m_normals[k].Y * m_normals[j].Y) / 4);
- m_destPoly.push_back(IntPoint(
- Round(m_srcPoly[j].X + m_delta * (m_normals[k].X - m_normals[k].Y * dx)),
- Round(m_srcPoly[j].Y + m_delta * (m_normals[k].Y + m_normals[k].X * dx))));
- m_destPoly.push_back(IntPoint(
- Round(m_srcPoly[j].X + m_delta * (m_normals[j].X + m_normals[j].Y * dx)),
- Round(m_srcPoly[j].Y + m_delta * (m_normals[j].Y - m_normals[j].X * dx))));
-}
-//------------------------------------------------------------------------------
-
-void ClipperOffset::DoMiter(int j, int k, double r)
-{
- double q = m_delta / r;
- m_destPoly.push_back(IntPoint(Round(m_srcPoly[j].X + (m_normals[k].X + m_normals[j].X) * q),
- Round(m_srcPoly[j].Y + (m_normals[k].Y + m_normals[j].Y) * q)));
-}
-//------------------------------------------------------------------------------
-
-void ClipperOffset::DoRound(int j, int k)
-{
- double a = std::atan2(m_sinA,
- m_normals[k].X * m_normals[j].X + m_normals[k].Y * m_normals[j].Y);
- int steps = std::max((int)Round(m_StepsPerRad * std::fabs(a)), 1);
-
- double X = m_normals[k].X, Y = m_normals[k].Y, X2;
- for (int i = 0; i < steps; ++i)
- {
- m_destPoly.push_back(IntPoint(
- Round(m_srcPoly[j].X + X * m_delta),
- Round(m_srcPoly[j].Y + Y * m_delta)));
- X2 = X;
- X = X * m_cos - m_sin * Y;
- Y = X2 * m_sin + Y * m_cos;
- }
- m_destPoly.push_back(IntPoint(
- Round(m_srcPoly[j].X + m_normals[j].X * m_delta),
- Round(m_srcPoly[j].Y + m_normals[j].Y * m_delta)));
-}
-
-//------------------------------------------------------------------------------
-// Miscellaneous public functions
-//------------------------------------------------------------------------------
-
-// Called by Clipper::ExecuteInternal()
-// For each polygon, search for exactly duplicate non-successive points.
-// If such a point is found, the loop is split into two pieces.
-// Search for the duplicate points is O(n^2)!
-// http://www.angusj.com/delphi/clipper/documentation/Docs/Units/ClipperLib/Classes/Clipper/Properties/StrictlySimple.htm
-void Clipper::DoSimplePolygons()
-{
- PROFILE_FUNC();
- size_t i = 0;
- while (i < m_PolyOuts.size())
- {
- OutRec* outrec = m_PolyOuts[i++];
- OutPt* op = outrec->Pts;
- if (!op || outrec->IsOpen) continue;
- do //for each Pt in Polygon until duplicate found do ...
- {
- OutPt* op2 = op->Next;
- while (op2 != outrec->Pts)
- {
- if ((op->Pt == op2->Pt) && op2->Next != op && op2->Prev != op)
- {
- //split the polygon into two ...
- OutPt* op3 = op->Prev;
- OutPt* op4 = op2->Prev;
- op->Prev = op4;
- op4->Next = op;
- op2->Prev = op3;
- op3->Next = op2;
-
- outrec->Pts = op;
- OutRec* outrec2 = CreateOutRec();
- outrec2->Pts = op2;
- UpdateOutPtIdxs(*outrec2);
- if (Poly2ContainsPoly1(outrec2->Pts, outrec->Pts))
- {
- //OutRec2 is contained by OutRec1 ...
- outrec2->IsHole = !outrec->IsHole;
- outrec2->FirstLeft = outrec;
- // For each m_PolyOuts, replace FirstLeft from outRec2 to outrec.
- if (m_UsingPolyTree) FixupFirstLefts2(outrec2, outrec);
- }
- else
- if (Poly2ContainsPoly1(outrec->Pts, outrec2->Pts))
- {
- //OutRec1 is contained by OutRec2 ...
- outrec2->IsHole = outrec->IsHole;
- outrec->IsHole = !outrec2->IsHole;
- outrec2->FirstLeft = outrec->FirstLeft;
- outrec->FirstLeft = outrec2;
- // For each m_PolyOuts, replace FirstLeft from outrec to outrec2.
- if (m_UsingPolyTree) FixupFirstLefts2(outrec, outrec2);
- }
- else
- {
- //the 2 polygons are separate ...
- outrec2->IsHole = outrec->IsHole;
- outrec2->FirstLeft = outrec->FirstLeft;
- // For each polygon of m_PolyOuts, replace FirstLeft from outrec to outrec2 if the polygon is inside outRec2.
- //FIXME This is potentially very expensive! O(n^3)!
- if (m_UsingPolyTree) FixupFirstLefts1(outrec, outrec2);
- }
- op2 = op; //ie get ready for the Next iteration
- }
- op2 = op2->Next;
- }
- op = op->Next;
- }
- while (op != outrec->Pts);
- }
-}
-//------------------------------------------------------------------------------
-
-void ReversePath(Path& p)
-{
- std::reverse(p.begin(), p.end());
-}
-//------------------------------------------------------------------------------
-
-void ReversePaths(Paths& p)
-{
- for (Paths::size_type i = 0; i < p.size(); ++i)
- ReversePath(p[i]);
-}
-//------------------------------------------------------------------------------
-
-void SimplifyPolygon(const Path &in_poly, Paths &out_polys, PolyFillType fillType)
-{
- Clipper c;
- c.StrictlySimple(true);
- c.AddPath(in_poly, ptSubject, true);
- c.Execute(ctUnion, out_polys, fillType, fillType);
-}
-//------------------------------------------------------------------------------
-
-void SimplifyPolygons(const Paths &in_polys, Paths &out_polys, PolyFillType fillType)
-{
- Clipper c;
- c.StrictlySimple(true);
- c.AddPaths(in_polys, ptSubject, true);
- c.Execute(ctUnion, out_polys, fillType, fillType);
-}
-//------------------------------------------------------------------------------
-
-void SimplifyPolygons(Paths &polys, PolyFillType fillType)
-{
- SimplifyPolygons(polys, polys, fillType);
-}
-//------------------------------------------------------------------------------
-
-inline double DistanceSqrd(const IntPoint& pt1, const IntPoint& pt2)
-{
- double Dx = ((double)pt1.X - pt2.X);
- double dy = ((double)pt1.Y - pt2.Y);
- return (Dx*Dx + dy*dy);
-}
-//------------------------------------------------------------------------------
-
-double DistanceFromLineSqrd(
- const IntPoint& pt, const IntPoint& ln1, const IntPoint& ln2)
-{
- //The equation of a line in general form (Ax + By + C = 0)
- //given 2 points (x¹,y¹) & (x²,y²) is ...
- //(y¹ - y²)x + (x² - x¹)y + (y² - y¹)x¹ - (x² - x¹)y¹ = 0
- //A = (y¹ - y²); B = (x² - x¹); C = (y² - y¹)x¹ - (x² - x¹)y¹
- //perpendicular distance of point (x³,y³) = (Ax³ + By³ + C)/Sqrt(A² + B²)
- //see http://en.wikipedia.org/wiki/Perpendicular_distance
- double A = double(ln1.Y - ln2.Y);
- double B = double(ln2.X - ln1.X);
- double C = A * ln1.X + B * ln1.Y;
- C = A * pt.X + B * pt.Y - C;
- return (C * C) / (A * A + B * B);
-}
-//---------------------------------------------------------------------------
-
-bool SlopesNearCollinear(const IntPoint& pt1,
- const IntPoint& pt2, const IntPoint& pt3, double distSqrd)
-{
- //this function is more accurate when the point that's geometrically
- //between the other 2 points is the one that's tested for distance.
- //ie makes it more likely to pick up 'spikes' ...
- if (std::abs(pt1.X - pt2.X) > std::abs(pt1.Y - pt2.Y))
- {
- if ((pt1.X > pt2.X) == (pt1.X < pt3.X))
- return DistanceFromLineSqrd(pt1, pt2, pt3) < distSqrd;
- else if ((pt2.X > pt1.X) == (pt2.X < pt3.X))
- return DistanceFromLineSqrd(pt2, pt1, pt3) < distSqrd;
- else
- return DistanceFromLineSqrd(pt3, pt1, pt2) < distSqrd;
- }
- else
- {
- if ((pt1.Y > pt2.Y) == (pt1.Y < pt3.Y))
- return DistanceFromLineSqrd(pt1, pt2, pt3) < distSqrd;
- else if ((pt2.Y > pt1.Y) == (pt2.Y < pt3.Y))
- return DistanceFromLineSqrd(pt2, pt1, pt3) < distSqrd;
- else
- return DistanceFromLineSqrd(pt3, pt1, pt2) < distSqrd;
- }
-}
-//------------------------------------------------------------------------------
-
-bool PointsAreClose(IntPoint pt1, IntPoint pt2, double distSqrd)
-{
- double Dx = (double)pt1.X - pt2.X;
- double dy = (double)pt1.Y - pt2.Y;
- return ((Dx * Dx) + (dy * dy) <= distSqrd);
-}
-//------------------------------------------------------------------------------
-
-OutPt* ExcludeOp(OutPt* op)
-{
- OutPt* result = op->Prev;
- result->Next = op->Next;
- op->Next->Prev = result;
- result->Idx = 0;
- return result;
-}
-//------------------------------------------------------------------------------
-
-// Simplify a polygon using a linked list of points.
-void CleanPolygon(const Path& in_poly, Path& out_poly, double distance)
-{
- //distance = proximity in units/pixels below which vertices
- //will be stripped. Default ~= sqrt(2).
-
- size_t size = in_poly.size();
-
- if (size == 0)
- {
- out_poly.clear();
- return;
- }
-
- std::vector<OutPt> outPts(size);
- for (size_t i = 0; i < size; ++i)
- {
- outPts[i].Pt = in_poly[i];
- outPts[i].Next = &outPts[(i + 1) % size];
- outPts[i].Next->Prev = &outPts[i];
- outPts[i].Idx = 0;
- }
-
- double distSqrd = distance * distance;
- OutPt* op = &outPts[0];
- while (op->Idx == 0 && op->Next != op->Prev)
- {
- if (PointsAreClose(op->Pt, op->Prev->Pt, distSqrd))
- {
- op = ExcludeOp(op);
- size--;
- }
- else if (PointsAreClose(op->Prev->Pt, op->Next->Pt, distSqrd))
- {
- ExcludeOp(op->Next);
- op = ExcludeOp(op);
- size -= 2;
- }
- else if (SlopesNearCollinear(op->Prev->Pt, op->Pt, op->Next->Pt, distSqrd))
- {
- op = ExcludeOp(op);
- size--;
- }
- else
- {
- op->Idx = 1;
- op = op->Next;
- }
- }
-
- if (size < 3) size = 0;
- out_poly.resize(size);
- for (size_t i = 0; i < size; ++i)
- {
- out_poly[i] = op->Pt;
- op = op->Next;
- }
-}
-//------------------------------------------------------------------------------
-
-void CleanPolygon(Path& poly, double distance)
-{
- CleanPolygon(poly, poly, distance);
-}
-//------------------------------------------------------------------------------
-
-void CleanPolygons(const Paths& in_polys, Paths& out_polys, double distance)
-{
- for (Paths::size_type i = 0; i < in_polys.size(); ++i)
- CleanPolygon(in_polys[i], out_polys[i], distance);
-}
-//------------------------------------------------------------------------------
-
-void CleanPolygons(Paths& polys, double distance)
-{
- CleanPolygons(polys, polys, distance);
-}
-//------------------------------------------------------------------------------
-
-void Minkowski(const Path& poly, const Path& path,
- Paths& solution, bool isSum, bool isClosed)
-{
- int delta = (isClosed ? 1 : 0);
- size_t polyCnt = poly.size();
- size_t pathCnt = path.size();
- Paths pp;
- pp.reserve(pathCnt);
- if (isSum)
- for (size_t i = 0; i < pathCnt; ++i)
- {
- Path p;
- p.reserve(polyCnt);
- for (size_t j = 0; j < poly.size(); ++j)
- p.push_back(IntPoint(path[i].X + poly[j].X, path[i].Y + poly[j].Y));
- pp.push_back(p);
- }
- else
- for (size_t i = 0; i < pathCnt; ++i)
- {
- Path p;
- p.reserve(polyCnt);
- for (size_t j = 0; j < poly.size(); ++j)
- p.push_back(IntPoint(path[i].X - poly[j].X, path[i].Y - poly[j].Y));
- pp.push_back(p);
- }
-
- solution.clear();
- solution.reserve((pathCnt + delta) * (polyCnt + 1));
- for (size_t i = 0; i < pathCnt - 1 + delta; ++i)
- for (size_t j = 0; j < polyCnt; ++j)
- {
- Path quad;
- quad.reserve(4);
- quad.push_back(pp[i % pathCnt][j % polyCnt]);
- quad.push_back(pp[(i + 1) % pathCnt][j % polyCnt]);
- quad.push_back(pp[(i + 1) % pathCnt][(j + 1) % polyCnt]);
- quad.push_back(pp[i % pathCnt][(j + 1) % polyCnt]);
- if (!Orientation(quad)) ReversePath(quad);
- solution.push_back(quad);
- }
-}
-//------------------------------------------------------------------------------
-
-void MinkowskiSum(const Path& pattern, const Path& path, Paths& solution, bool pathIsClosed)
-{
- Minkowski(pattern, path, solution, true, pathIsClosed);
- Clipper c;
- c.AddPaths(solution, ptSubject, true);
- c.Execute(ctUnion, solution, pftNonZero, pftNonZero);
-}
-//------------------------------------------------------------------------------
-
-void TranslatePath(const Path& input, Path& output, const IntPoint& delta)
-{
- //precondition: input != output
- output.resize(input.size());
- for (size_t i = 0; i < input.size(); ++i)
- output[i] = IntPoint(input[i].X + delta.X, input[i].Y + delta.Y);
-}
-//------------------------------------------------------------------------------
-
-void MinkowskiSum(const Path& pattern, const Paths& paths, Paths& solution, bool pathIsClosed)
-{
- Clipper c;
- for (size_t i = 0; i < paths.size(); ++i)
- {
- Paths tmp;
- Minkowski(pattern, paths[i], tmp, true, pathIsClosed);
- c.AddPaths(tmp, ptSubject, true);
- if (pathIsClosed)
- {
- Path tmp2;
- TranslatePath(paths[i], tmp2, pattern[0]);
- c.AddPath(tmp2, ptClip, true);
- }
- }
- c.Execute(ctUnion, solution, pftNonZero, pftNonZero);
-}
-//------------------------------------------------------------------------------
-
-void MinkowskiDiff(const Path& poly1, const Path& poly2, Paths& solution)
-{
- Minkowski(poly1, poly2, solution, false, true);
- Clipper c;
- c.AddPaths(solution, ptSubject, true);
- c.Execute(ctUnion, solution, pftNonZero, pftNonZero);
-}
-//------------------------------------------------------------------------------
-
-enum NodeType {ntAny, ntOpen, ntClosed};
-
-void AddPolyNodeToPaths(const PolyNode& polynode, NodeType nodetype, Paths& paths)
-{
- bool match = true;
- if (nodetype == ntClosed) match = !polynode.IsOpen();
- else if (nodetype == ntOpen) return;
-
- if (!polynode.Contour.empty() && match)
- paths.push_back(polynode.Contour);
- for (int i = 0; i < polynode.ChildCount(); ++i)
- AddPolyNodeToPaths(*polynode.Childs[i], nodetype, paths);
-}
-//------------------------------------------------------------------------------
-
-void PolyTreeToPaths(const PolyTree& polytree, Paths& paths)
-{
- paths.resize(0);
- paths.reserve(polytree.Total());
- AddPolyNodeToPaths(polytree, ntAny, paths);
-}
-//------------------------------------------------------------------------------
-
-void ClosedPathsFromPolyTree(const PolyTree& polytree, Paths& paths)
-{
- paths.resize(0);
- paths.reserve(polytree.Total());
- AddPolyNodeToPaths(polytree, ntClosed, paths);
-}
-//------------------------------------------------------------------------------
-
-void OpenPathsFromPolyTree(PolyTree& polytree, Paths& paths)
-{
- paths.resize(0);
- paths.reserve(polytree.Total());
- //Open paths are top level only, so ...
- for (int i = 0; i < polytree.ChildCount(); ++i)
- if (polytree.Childs[i]->IsOpen())
- paths.push_back(polytree.Childs[i]->Contour);
-}
-//------------------------------------------------------------------------------
-
-std::ostream& operator <<(std::ostream &s, const IntPoint &p)
-{
- s << "(" << p.X << "," << p.Y << ")";
- return s;
-}
-//------------------------------------------------------------------------------
-
-std::ostream& operator <<(std::ostream &s, const Path &p)
-{
- if (p.empty()) return s;
- Path::size_type last = p.size() -1;
- for (Path::size_type i = 0; i < last; i++)
- s << "(" << p[i].X << "," << p[i].Y << "), ";
- s << "(" << p[last].X << "," << p[last].Y << ")\n";
- return s;
-}
-//------------------------------------------------------------------------------
-
-std::ostream& operator <<(std::ostream &s, const Paths &p)
-{
- for (Paths::size_type i = 0; i < p.size(); i++)
- s << p[i];
- s << "\n";
- return s;
-}
-//------------------------------------------------------------------------------
-
-} //ClipperLib namespace
+/*******************************************************************************
+* *
+* Author : Angus Johnson *
+* Version : 6.2.9 *
+* Date : 16 February 2015 *
+* Website : http://www.angusj.com *
+* Copyright : Angus Johnson 2010-2015 *
+* *
+* 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 <cmath>
+#include <vector>
+#include <algorithm>
+#include <stdexcept>
+#include <cstring>
+#include <cstdlib>
+#include <ostream>
+#include <functional>
+#include <assert.h>
+#include <Shiny/Shiny.h>
+#include <libslic3r/Int128.hpp>
+
+namespace ClipperLib {
+
+static double const pi = 3.141592653589793238;
+static double const two_pi = pi *2;
+static double const def_arc_tolerance = 0.25;
+
+enum Direction { dRightToLeft, dLeftToRight };
+
+static int const Unassigned = -1; //edge not currently 'owning' a solution
+static int const Skip = -2; //edge that would otherwise close a path
+
+#define HORIZONTAL (-1.0E+40)
+#define TOLERANCE (1.0e-20)
+#define NEAR_ZERO(val) (((val) > -TOLERANCE) && ((val) < TOLERANCE))
+
+// Output polygon.
+struct OutRec {
+ int Idx;
+ bool IsHole;
+ bool IsOpen;
+ //The 'FirstLeft' field points to another OutRec that contains or is the
+ //'parent' of OutRec. It is 'first left' because the ActiveEdgeList (AEL) is
+ //parsed left from the current edge (owning OutRec) until the owner OutRec
+ //is found. This field simplifies sorting the polygons into a tree structure
+ //which reflects the parent/child relationships of all polygons.
+ //This field should be renamed Parent, and will be later.
+ OutRec *FirstLeft;
+ // Used only by void Clipper::BuildResult2(PolyTree& polytree)
+ PolyNode *PolyNd;
+ // Linked list of output points, dynamically allocated.
+ OutPt *Pts;
+ OutPt *BottomPt;
+};
+
+//------------------------------------------------------------------------------
+
+inline cInt Round(double val)
+{
+ return static_cast<cInt>((val < 0) ? (val - 0.5) : (val + 0.5));
+}
+
+//------------------------------------------------------------------------------
+// PolyTree methods ...
+//------------------------------------------------------------------------------
+
+int PolyTree::Total() const
+{
+ int result = (int)AllNodes.size();
+ //with negative offsets, ignore the hidden outer polygon ...
+ if (result > 0 && Childs.front() != &AllNodes.front()) result--;
+ return result;
+}
+
+//------------------------------------------------------------------------------
+// PolyNode methods ...
+//------------------------------------------------------------------------------
+
+void PolyNode::AddChild(PolyNode& child)
+{
+ unsigned cnt = (unsigned)Childs.size();
+ Childs.push_back(&child);
+ child.Parent = this;
+ child.Index = cnt;
+}
+//------------------------------------------------------------------------------
+
+// Edge delimits a hole if it has an odd number of parent loops.
+bool PolyNode::IsHole() const
+{
+ bool result = true;
+ PolyNode* node = Parent;
+ while (node)
+ {
+ result = !result;
+ node = node->Parent;
+ }
+ return result;
+}
+
+//------------------------------------------------------------------------------
+// Miscellaneous global functions
+//------------------------------------------------------------------------------
+
+double Area(const Path &poly)
+{
+ int size = (int)poly.size();
+ if (size < 3) return 0;
+
+ double a = 0;
+ for (int i = 0, j = size -1; i < size; ++i)
+ {
+ a += ((double)poly[j].X + poly[i].X) * ((double)poly[j].Y - poly[i].Y);
+ j = i;
+ }
+ return -a * 0.5;
+}
+//------------------------------------------------------------------------------
+
+double Area(const OutRec &outRec)
+{
+ OutPt *op = outRec.Pts;
+ if (!op) return 0;
+ double a = 0;
+ do {
+ a += (double)(op->Prev->Pt.X + op->Pt.X) * (double)(op->Prev->Pt.Y - op->Pt.Y);
+ op = op->Next;
+ } while (op != outRec.Pts);
+ return a * 0.5;
+}
+//------------------------------------------------------------------------------
+
+bool PointIsVertex(const IntPoint &Pt, OutPt *pp)
+{
+ OutPt *pp2 = pp;
+ do
+ {
+ if (pp2->Pt == Pt) return true;
+ pp2 = pp2->Next;
+ }
+ while (pp2 != pp);
+ return false;
+}
+//------------------------------------------------------------------------------
+
+//See "The Point in Polygon Problem for Arbitrary Polygons" by Hormann & Agathos
+//http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.88.5498&rep=rep1&type=pdf
+int PointInPolygon(const IntPoint &pt, const Path &path)
+{
+ //returns 0 if false, +1 if true, -1 if pt ON polygon boundary
+ int result = 0;
+ size_t cnt = path.size();
+ if (cnt < 3) return 0;
+ IntPoint ip = path[0];
+ for(size_t i = 1; i <= cnt; ++i)
+ {
+ IntPoint ipNext = (i == cnt ? path[0] : path[i]);
+ if (ipNext.Y == pt.Y && ((ipNext.X == pt.X) || (ip.Y == pt.Y && ((ipNext.X > pt.X) == (ip.X < pt.X)))))
+ return -1;
+ if ((ip.Y < pt.Y) != (ipNext.Y < pt.Y))
+ {
+ if (ip.X >= pt.X)
+ {
+ if (ipNext.X > pt.X) result = 1 - result;
+ else
+ {
+ double d = (double)(ip.X - pt.X) * (ipNext.Y - pt.Y) - (double)(ipNext.X - pt.X) * (ip.Y - pt.Y);
+ if (!d) return -1;
+ if ((d > 0) == (ipNext.Y > ip.Y)) result = 1 - result;
+ }
+ } else
+ {
+ if (ipNext.X > pt.X)
+ {
+ double d = (double)(ip.X - pt.X) * (ipNext.Y - pt.Y) - (double)(ipNext.X - pt.X) * (ip.Y - pt.Y);
+ if (!d) return -1;
+ if ((d > 0) == (ipNext.Y > ip.Y)) result = 1 - result;
+ }
+ }
+ }
+ ip = ipNext;
+ }
+ return result;
+}
+//------------------------------------------------------------------------------
+
+// Called by Poly2ContainsPoly1()
+int PointInPolygon (const IntPoint &pt, OutPt *op)
+{
+ //returns 0 if false, +1 if true, -1 if pt ON polygon boundary
+ int result = 0;
+ OutPt* startOp = op;
+ do
+ {
+ if (op->Next->Pt.Y == pt.Y)
+ {
+ if ((op->Next->Pt.X == pt.X) || (op->Pt.Y == pt.Y &&
+ ((op->Next->Pt.X > pt.X) == (op->Pt.X < pt.X)))) return -1;
+ }
+ if ((op->Pt.Y < pt.Y) != (op->Next->Pt.Y < pt.Y))
+ {
+ if (op->Pt.X >= pt.X)
+ {
+ if (op->Next->Pt.X > pt.X) result = 1 - result;
+ else
+ {
+ double d = (double)(op->Pt.X - pt.X) * (op->Next->Pt.Y - pt.Y) - (double)(op->Next->Pt.X - pt.X) * (op->Pt.Y - pt.Y);
+ if (!d) return -1;
+ if ((d > 0) == (op->Next->Pt.Y > op->Pt.Y)) result = 1 - result;
+ }
+ } else
+ {
+ if (op->Next->Pt.X > pt.X)
+ {
+ double d = (double)(op->Pt.X - pt.X) * (op->Next->Pt.Y - pt.Y) - (double)(op->Next->Pt.X - pt.X) * (op->Pt.Y - pt.Y);
+ if (!d) return -1;
+ if ((d > 0) == (op->Next->Pt.Y > op->Pt.Y)) result = 1 - result;
+ }
+ }
+ }
+ op = op->Next;
+ } while (startOp != op);
+ return result;
+}
+//------------------------------------------------------------------------------
+
+// This is potentially very expensive! O(n^2)!
+bool Poly2ContainsPoly1(OutPt *OutPt1, OutPt *OutPt2)
+{
+ PROFILE_FUNC();
+ OutPt* op = OutPt1;
+ do
+ {
+ //nb: PointInPolygon returns 0 if false, +1 if true, -1 if pt on polygon
+ int res = PointInPolygon(op->Pt, OutPt2);
+ if (res >= 0) return res > 0;
+ op = op->Next;
+ }
+ while (op != OutPt1);
+ return true;
+}
+//----------------------------------------------------------------------
+
+inline bool SlopesEqual(const cInt dx1, const cInt dy1, const cInt dx2, const cInt dy2, bool UseFullInt64Range) {
+ return (UseFullInt64Range) ?
+ // |dx1| < 2^63, |dx2| < 2^63 etc,
+ Int128::sign_determinant_2x2_filtered(dx1, dy1, dx2, dy2) == 0 :
+// Int128::sign_determinant_2x2(dx1, dy1, dx2, dy2) == 0 :
+ // |dx1| < 2^31, |dx2| < 2^31 etc,
+ // therefore the following computation could be done with 64bit arithmetics.
+ dy1 * dx2 == dx1 * dy2;
+}
+inline bool SlopesEqual(const TEdge &e1, const TEdge &e2, bool UseFullInt64Range)
+ { return SlopesEqual(e1.Delta.X, e1.Delta.Y, e2.Delta.X, e2.Delta.Y, UseFullInt64Range); }
+inline bool SlopesEqual(const IntPoint &pt1, const IntPoint &pt2, const IntPoint &pt3, bool UseFullInt64Range)
+ { return SlopesEqual(pt1.X-pt2.X, pt1.Y-pt2.Y, pt2.X-pt3.X, pt2.Y-pt3.Y, UseFullInt64Range); }
+inline bool SlopesEqual(const IntPoint &pt1, const IntPoint &pt2, const IntPoint &pt3, const IntPoint &pt4, bool UseFullInt64Range)
+ { return SlopesEqual(pt1.X-pt2.X, pt1.Y-pt2.Y, pt3.X-pt4.X, pt3.Y-pt4.Y, UseFullInt64Range); }
+
+//------------------------------------------------------------------------------
+
+inline bool IsHorizontal(TEdge &e)
+{
+ return e.Delta.Y == 0;
+}
+//------------------------------------------------------------------------------
+
+inline double GetDx(const IntPoint &pt1, const IntPoint &pt2)
+{
+ return (pt1.Y == pt2.Y) ?
+ HORIZONTAL : (double)(pt2.X - pt1.X) / (pt2.Y - pt1.Y);
+}
+//---------------------------------------------------------------------------
+
+inline cInt TopX(TEdge &edge, const cInt currentY)
+{
+ return (currentY == edge.Top.Y) ?
+ edge.Top.X :
+ edge.Bot.X + Round(edge.Dx *(currentY - edge.Bot.Y));
+}
+//------------------------------------------------------------------------------
+
+void IntersectPoint(TEdge &Edge1, TEdge &Edge2, IntPoint &ip)
+{
+#ifdef use_xyz
+ ip.Z = 0;
+#endif
+
+ double b1, b2;
+ if (Edge1.Dx == Edge2.Dx)
+ {
+ ip.Y = Edge1.Curr.Y;
+ ip.X = TopX(Edge1, ip.Y);
+ return;
+ }
+ else if (Edge1.Delta.X == 0)
+ {
+ ip.X = Edge1.Bot.X;
+ if (IsHorizontal(Edge2))
+ ip.Y = Edge2.Bot.Y;
+ else
+ {
+ b2 = Edge2.Bot.Y - (Edge2.Bot.X / Edge2.Dx);
+ ip.Y = Round(ip.X / Edge2.Dx + b2);
+ }
+ }
+ else if (Edge2.Delta.X == 0)
+ {
+ ip.X = Edge2.Bot.X;
+ if (IsHorizontal(Edge1))
+ ip.Y = Edge1.Bot.Y;
+ else
+ {
+ b1 = Edge1.Bot.Y - (Edge1.Bot.X / Edge1.Dx);
+ ip.Y = Round(ip.X / Edge1.Dx + b1);
+ }
+ }
+ else
+ {
+ b1 = Edge1.Bot.X - Edge1.Bot.Y * Edge1.Dx;
+ b2 = Edge2.Bot.X - Edge2.Bot.Y * Edge2.Dx;
+ double q = (b2-b1) / (Edge1.Dx - Edge2.Dx);
+ ip.Y = Round(q);
+ ip.X = (std::fabs(Edge1.Dx) < std::fabs(Edge2.Dx)) ?
+ Round(Edge1.Dx * q + b1) :
+ Round(Edge2.Dx * q + b2);
+ }
+
+ if (ip.Y < Edge1.Top.Y || ip.Y < Edge2.Top.Y)
+ {
+ if (Edge1.Top.Y > Edge2.Top.Y)
+ ip.Y = Edge1.Top.Y;
+ else
+ ip.Y = Edge2.Top.Y;
+ if (std::fabs(Edge1.Dx) < std::fabs(Edge2.Dx))
+ ip.X = TopX(Edge1, ip.Y);
+ else
+ ip.X = TopX(Edge2, ip.Y);
+ }
+ //finally, don't allow 'ip' to be BELOW curr.Y (ie bottom of scanbeam) ...
+ if (ip.Y > Edge1.Curr.Y)
+ {
+ ip.Y = Edge1.Curr.Y;
+ //use the more vertical edge to derive X ...
+ if (std::fabs(Edge1.Dx) > std::fabs(Edge2.Dx))
+ ip.X = TopX(Edge2, ip.Y); else
+ ip.X = TopX(Edge1, ip.Y);
+ }
+}
+//------------------------------------------------------------------------------
+
+// Reverse a linked loop of points representing a closed polygon.
+// This has a time complexity of O(n)
+void ReversePolyPtLinks(OutPt *pp)
+{
+ if (!pp) return;
+ OutPt *pp1 = pp;
+ do {
+ OutPt *pp2 = pp1->Next;
+ pp1->Next = pp1->Prev;
+ pp1->Prev = pp2;
+ pp1 = pp2;
+ } while( pp1 != pp );
+}
+//------------------------------------------------------------------------------
+
+inline void InitEdge(TEdge* e, TEdge* eNext, TEdge* ePrev, const IntPoint& Pt)
+{
+ std::memset(e, 0, sizeof(TEdge));
+ e->Next = eNext;
+ e->Prev = ePrev;
+ e->Curr = Pt;
+ e->OutIdx = Unassigned;
+}
+//------------------------------------------------------------------------------
+
+void InitEdge2(TEdge& e, PolyType Pt)
+{
+ if (e.Curr.Y >= e.Next->Curr.Y)
+ {
+ e.Bot = e.Curr;
+ e.Top = e.Next->Curr;
+ } else
+ {
+ e.Top = e.Curr;
+ e.Bot = e.Next->Curr;
+ }
+
+ e.Delta.X = (e.Top.X - e.Bot.X);
+ e.Delta.Y = (e.Top.Y - e.Bot.Y);
+
+ if (e.Delta.Y == 0) e.Dx = HORIZONTAL;
+ else e.Dx = (double)(e.Delta.X) / e.Delta.Y;
+
+ e.PolyTyp = Pt;
+}
+//------------------------------------------------------------------------------
+
+// Called from ClipperBase::AddPathInternal() to remove collinear and duplicate points.
+inline TEdge* RemoveEdge(TEdge* e)
+{
+ //removes e from double_linked_list (but without removing from memory)
+ e->Prev->Next = e->Next;
+ e->Next->Prev = e->Prev;
+ TEdge* result = e->Next;
+ e->Prev = 0; //flag as removed (see ClipperBase.Clear)
+ return result;
+}
+//------------------------------------------------------------------------------
+
+inline void ReverseHorizontal(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.]
+ std::swap(e.Top.X, e.Bot.X);
+#ifdef use_xyz
+ std::swap(e.Top.Z, e.Bot.Z);
+#endif
+}
+//------------------------------------------------------------------------------
+
+bool GetOverlapSegment(IntPoint pt1a, IntPoint pt1b, IntPoint pt2a,
+ IntPoint pt2b, IntPoint &pt1, IntPoint &pt2)
+{
+ //precondition: segments are Collinear.
+ if (std::abs(pt1a.X - pt1b.X) > std::abs(pt1a.Y - pt1b.Y))
+ {
+ if (pt1a.X > pt1b.X) std::swap(pt1a, pt1b);
+ if (pt2a.X > pt2b.X) std::swap(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) std::swap(pt1a, pt1b);
+ if (pt2a.Y < pt2b.Y) std::swap(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 ((p->Pt == btmPt1->Pt) && (p != btmPt1)) p = p->Prev;
+ double dx1p = std::fabs(GetDx(btmPt1->Pt, p->Pt));
+ p = btmPt1->Next;
+ while ((p->Pt == btmPt1->Pt) && (p != btmPt1)) p = p->Next;
+ double dx1n = std::fabs(GetDx(btmPt1->Pt, p->Pt));
+
+ p = btmPt2->Prev;
+ while ((p->Pt == btmPt2->Pt) && (p != btmPt2)) p = p->Prev;
+ double dx2p = std::fabs(GetDx(btmPt2->Pt, p->Pt));
+ p = btmPt2->Next;
+ while ((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);
+}
+//------------------------------------------------------------------------------
+
+// Called by GetLowermostRec()
+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 (dups->Pt != pp->Pt) dups = dups->Next;
+ }
+ }
+ return pp;
+}
+//------------------------------------------------------------------------------
+
+bool Pt2IsBetweenPt1AndPt3(const IntPoint &pt1,
+ const IntPoint &pt2, const IntPoint &pt3)
+{
+ if ((pt1 == pt3) || (pt1 == pt2) || (pt3 == pt2))
+ return false;
+ else if (pt1.X != pt3.X)
+ return (pt2.X > pt1.X) == (pt2.X < pt3.X);
+ else
+ return (pt2.Y > pt1.Y) == (pt2.Y < pt3.Y);
+}
+//------------------------------------------------------------------------------
+
+bool HorzSegmentsOverlap(cInt seg1a, cInt seg1b, cInt seg2a, cInt seg2b)
+{
+ if (seg1a > seg1b) std::swap(seg1a, seg1b);
+ if (seg2a > seg2b) std::swap(seg2a, seg2b);
+ return (seg1a < seg2b) && (seg2a < seg1b);
+}
+
+//------------------------------------------------------------------------------
+// ClipperBase class methods ...
+//------------------------------------------------------------------------------
+
+// Called from ClipperBase::AddPath() to verify the scale of the input polygon coordinates.
+inline void RangeTest(const IntPoint& Pt, bool& useFullRange)
+{
+ if (useFullRange)
+ {
+ if (Pt.X > hiRange || Pt.Y > hiRange || -Pt.X > hiRange || -Pt.Y > hiRange)
+ throw clipperException("Coordinate outside allowed range");
+ }
+ else if (Pt.X > loRange|| Pt.Y > loRange || -Pt.X > loRange || -Pt.Y > loRange)
+ {
+ useFullRange = true;
+ RangeTest(Pt, useFullRange);
+ }
+}
+//------------------------------------------------------------------------------
+
+// Called from ClipperBase::AddPath() to construct the Local Minima List.
+// Find a local minimum edge on the path starting with E.
+inline TEdge* FindNextLocMin(TEdge* E)
+{
+ for (;;)
+ {
+ while (E->Bot != E->Prev->Bot || E->Curr == E->Top) E = E->Next;
+ if (!IsHorizontal(*E) && !IsHorizontal(*E->Prev)) break;
+ while (IsHorizontal(*E->Prev)) E = E->Prev;
+ TEdge* E2 = E;
+ while (IsHorizontal(*E)) E = E->Next;
+ if (E->Top.Y == E->Prev->Bot.Y) continue; //ie just an intermediate horz.
+ if (E2->Prev->Bot.X < E->Bot.X) E = E2;
+ break;
+ }
+ return E;
+}
+//------------------------------------------------------------------------------
+
+// Called from ClipperBase::AddPath().
+TEdge* ClipperBase::ProcessBound(TEdge* E, bool NextIsForward)
+{
+ TEdge *Result = E;
+ TEdge *Horz = 0;
+
+ if (E->OutIdx == Skip)
+ {
+ //if edges still remain in the current bound beyond the skip edge then
+ //create another LocMin and call ProcessBound once more
+ if (NextIsForward)
+ {
+ while (E->Top.Y == E->Next->Bot.Y) E = E->Next;
+ //don't include top horizontals when parsing a bound a second time,
+ //they will be contained in the opposite bound ...
+ while (E != Result && IsHorizontal(*E)) E = E->Prev;
+ }
+ else
+ {
+ while (E->Top.Y == E->Prev->Bot.Y) E = E->Prev;
+ while (E != Result && IsHorizontal(*E)) E = E->Next;
+ }
+
+ if (E == Result)
+ {
+ if (NextIsForward) Result = E->Next;
+ else Result = E->Prev;
+ }
+ else
+ {
+ //there are more edges in the bound beyond result starting with E
+ if (NextIsForward)
+ E = Result->Next;
+ else
+ E = Result->Prev;
+ LocalMinimum locMin;
+ locMin.Y = E->Bot.Y;
+ locMin.LeftBound = 0;
+ locMin.RightBound = E;
+ E->WindDelta = 0;
+ Result = ProcessBound(E, NextIsForward);
+ m_MinimaList.push_back(locMin);
+ }
+ return Result;
+ }
+
+ TEdge *EStart;
+
+ if (IsHorizontal(*E))
+ {
+ //We need to be careful with open paths because this may not be a
+ //true local minima (ie E may be following a skip edge).
+ //Also, consecutive horz. edges may start heading left before going right.
+ if (NextIsForward)
+ EStart = E->Prev;
+ else
+ EStart = E->Next;
+ if (IsHorizontal(*EStart)) //ie an adjoining horizontal skip edge
+ {
+ if (EStart->Bot.X != E->Bot.X && EStart->Top.X != E->Bot.X)
+ ReverseHorizontal(*E);
+ }
+ else if (EStart->Bot.X != E->Bot.X)
+ ReverseHorizontal(*E);
+ }
+
+ EStart = E;
+ if (NextIsForward)
+ {
+ while (Result->Top.Y == Result->Next->Bot.Y && Result->Next->OutIdx != Skip)
+ Result = Result->Next;
+ if (IsHorizontal(*Result) && Result->Next->OutIdx != Skip)
+ {
+ //nb: at the top of a bound, horizontals are added to the bound
+ //only when the preceding edge attaches to the horizontal's left vertex
+ //unless a Skip edge is encountered when that becomes the top divide
+ Horz = Result;
+ while (IsHorizontal(*Horz->Prev)) Horz = Horz->Prev;
+ if (Horz->Prev->Top.X > Result->Next->Top.X) Result = Horz->Prev;
+ }
+ while (E != Result)
+ {
+ E->NextInLML = E->Next;
+ if (IsHorizontal(*E) && E != EStart &&
+ E->Bot.X != E->Prev->Top.X) ReverseHorizontal(*E);
+ E = E->Next;
+ }
+ if (IsHorizontal(*E) && E != EStart && E->Bot.X != E->Prev->Top.X)
+ ReverseHorizontal(*E);
+ Result = Result->Next; //move to the edge just beyond current bound
+ } else
+ {
+ while (Result->Top.Y == Result->Prev->Bot.Y && Result->Prev->OutIdx != Skip)
+ Result = Result->Prev;
+ if (IsHorizontal(*Result) && Result->Prev->OutIdx != Skip)
+ {
+ Horz = Result;
+ while (IsHorizontal(*Horz->Next)) Horz = Horz->Next;
+ if (Horz->Next->Top.X == Result->Prev->Top.X ||
+ Horz->Next->Top.X > Result->Prev->Top.X) Result = Horz->Next;
+ }
+
+ while (E != Result)
+ {
+ E->NextInLML = E->Prev;
+ if (IsHorizontal(*E) && E != EStart && E->Bot.X != E->Next->Top.X)
+ ReverseHorizontal(*E);
+ E = E->Prev;
+ }
+ if (IsHorizontal(*E) && E != EStart && E->Bot.X != E->Next->Top.X)
+ ReverseHorizontal(*E);
+ Result = Result->Prev; //move to the edge just beyond current bound
+ }
+
+ return Result;
+}
+//------------------------------------------------------------------------------
+
+bool ClipperBase::AddPath(const Path &pg, PolyType PolyTyp, bool Closed)
+{
+ PROFILE_FUNC();
+ // Remove duplicate end point from a closed input path.
+ // Remove duplicate points from the end of the input path.
+ int highI = (int)pg.size() -1;
+ if (Closed)
+ while (highI > 0 && (pg[highI] == pg[0]))
+ --highI;
+ while (highI > 0 && (pg[highI] == pg[highI -1]))
+ --highI;
+ if ((Closed && highI < 2) || (!Closed && highI < 1))
+ return false;
+
+ // Allocate a new edge array.
+ std::vector<TEdge> edges(highI + 1);
+ // Fill in the edge array.
+ bool result = AddPathInternal(pg, highI, PolyTyp, Closed, edges.data());
+ if (result)
+ // Success, remember the edge array.
+ m_edges.emplace_back(std::move(edges));
+ return result;
+}
+
+bool ClipperBase::AddPaths(const Paths &ppg, PolyType PolyTyp, bool Closed)
+{
+ PROFILE_FUNC();
+ std::vector<int> num_edges(ppg.size(), 0);
+ int num_edges_total = 0;
+ for (size_t i = 0; i < ppg.size(); ++ i) {
+ const Path &pg = ppg[i];
+ // Remove duplicate end point from a closed input path.
+ // Remove duplicate points from the end of the input path.
+ int highI = (int)pg.size() -1;
+ if (Closed)
+ while (highI > 0 && (pg[highI] == pg[0]))
+ --highI;
+ while (highI > 0 && (pg[highI] == pg[highI -1]))
+ --highI;
+ if ((Closed && highI < 2) || (!Closed && highI < 1))
+ highI = -1;
+ num_edges[i] = highI + 1;
+ num_edges_total += highI + 1;
+ }
+ if (num_edges_total == 0)
+ return false;
+
+ // Allocate a new edge array.
+ std::vector<TEdge> edges(num_edges_total);
+ // Fill in the edge array.
+ bool result = false;
+ TEdge *p_edge = edges.data();
+ for (Paths::size_type i = 0; i < ppg.size(); ++i)
+ if (num_edges[i]) {
+ bool res = AddPathInternal(ppg[i], num_edges[i] - 1, PolyTyp, Closed, p_edge);
+ if (res) {
+ p_edge += num_edges[i];
+ result = true;
+ }
+ }
+ if (result)
+ // At least some edges were generated. Remember the edge array.
+ m_edges.emplace_back(std::move(edges));
+ return result;
+}
+
+bool ClipperBase::AddPathInternal(const Path &pg, int highI, PolyType PolyTyp, bool Closed, TEdge* edges)
+{
+ PROFILE_FUNC();
+#ifdef use_lines
+ if (!Closed && PolyTyp == ptClip)
+ throw clipperException("AddPath: Open paths must be subject.");
+#else
+ if (!Closed)
+ throw clipperException("AddPath: Open paths have been disabled.");
+#endif
+
+ assert(highI >= 0 && highI < pg.size());
+
+ //1. Basic (first) edge initialization ...
+ try
+ {
+ edges[1].Curr = pg[1];
+ RangeTest(pg[0], m_UseFullRange);
+ RangeTest(pg[highI], m_UseFullRange);
+ InitEdge(&edges[0], &edges[1], &edges[highI], pg[0]);
+ InitEdge(&edges[highI], &edges[0], &edges[highI-1], pg[highI]);
+ for (int i = highI - 1; i >= 1; --i)
+ {
+ RangeTest(pg[i], m_UseFullRange);
+ InitEdge(&edges[i], &edges[i+1], &edges[i-1], pg[i]);
+ }
+ }
+ catch(...)
+ {
+ throw; //range test fails
+ }
+ TEdge *eStart = &edges[0];
+
+ //2. Remove duplicate vertices, and (when closed) collinear edges ...
+ TEdge *E = eStart, *eLoopStop = eStart;
+ for (;;)
+ {
+ //nb: allows matching start and end points when not Closed ...
+ if (E->Curr == E->Next->Curr && (Closed || E->Next != eStart))
+ {
+ if (E == E->Next) break;
+ if (E == eStart) eStart = E->Next;
+ E = RemoveEdge(E);
+ eLoopStop = E;
+ continue;
+ }
+ if (E->Prev == E->Next)
+ break; //only two vertices
+ else if (Closed &&
+ SlopesEqual(E->Prev->Curr, E->Curr, E->Next->Curr, m_UseFullRange) &&
+ (!m_PreserveCollinear ||
+ !Pt2IsBetweenPt1AndPt3(E->Prev->Curr, E->Curr, E->Next->Curr)))
+ {
+ //Collinear edges are allowed for open paths but in closed paths
+ //the default is to merge adjacent collinear edges into a single edge.
+ //However, if the PreserveCollinear property is enabled, only overlapping
+ //collinear edges (ie spikes) will be removed from closed paths.
+ if (E == eStart) eStart = E->Next;
+ E = RemoveEdge(E);
+ E = E->Prev;
+ eLoopStop = E;
+ continue;
+ }
+ E = E->Next;
+ if ((E == eLoopStop) || (!Closed && E->Next == eStart)) break;
+ }
+
+ if ((!Closed && (E == E->Next)) || (Closed && (E->Prev == E->Next)))
+ {
+ return false;
+ }
+
+ if (!Closed)
+ {
+ m_HasOpenPaths = true;
+ eStart->Prev->OutIdx = Skip;
+ }
+
+ //3. Do second stage of edge initialization ...
+ // IsFlat means all vertices have the same Y coordinate.
+ bool IsFlat = true;
+ E = eStart;
+ do
+ {
+ InitEdge2(*E, PolyTyp);
+ E = E->Next;
+ if (IsFlat && E->Curr.Y != eStart->Curr.Y) IsFlat = false;
+ }
+ while (E != eStart);
+
+ //4. Finally, add edge bounds to LocalMinima list ...
+
+ //Totally flat paths must be handled differently when adding them
+ //to LocalMinima list to avoid endless loops etc ...
+ if (IsFlat)
+ {
+ if (Closed)
+ {
+ return false;
+ }
+ E->Prev->OutIdx = Skip;
+ LocalMinimum locMin;
+ locMin.Y = E->Bot.Y;
+ locMin.LeftBound = 0;
+ locMin.RightBound = E;
+ locMin.RightBound->Side = esRight;
+ locMin.RightBound->WindDelta = 0;
+ for (;;)
+ {
+ if (E->Bot.X != E->Prev->Top.X) ReverseHorizontal(*E);
+ if (E->Next->OutIdx == Skip) break;
+ E->NextInLML = E->Next;
+ E = E->Next;
+ }
+ m_MinimaList.push_back(locMin);
+ return true;
+ }
+
+ bool leftBoundIsForward;
+ TEdge* EMin = 0;
+
+ //workaround to avoid an endless loop in the while loop below when
+ //open paths have matching start and end points ...
+ if (E->Prev->Bot == E->Prev->Top) E = E->Next;
+
+ // Find local minima and store them into a Local Minima List.
+ // Multiple Local Minima could be created for a single path.
+ for (;;)
+ {
+ E = FindNextLocMin(E);
+ if (E == EMin) break;
+ else if (!EMin) EMin = E;
+
+ //E and E.Prev now share a local minima (left aligned if horizontal).
+ //Compare their slopes to find which starts which bound ...
+ LocalMinimum locMin;
+ locMin.Y = E->Bot.Y;
+ if (E->Dx < E->Prev->Dx)
+ {
+ locMin.LeftBound = E->Prev;
+ locMin.RightBound = E;
+ leftBoundIsForward = false; //Q.nextInLML = Q.prev
+ } else
+ {
+ locMin.LeftBound = E;
+ locMin.RightBound = E->Prev;
+ leftBoundIsForward = true; //Q.nextInLML = Q.next
+ }
+ locMin.LeftBound->Side = esLeft;
+ locMin.RightBound->Side = esRight;
+
+ if (!Closed) locMin.LeftBound->WindDelta = 0;
+ else if (locMin.LeftBound->Next == locMin.RightBound)
+ locMin.LeftBound->WindDelta = -1;
+ else locMin.LeftBound->WindDelta = 1;
+ locMin.RightBound->WindDelta = -locMin.LeftBound->WindDelta;
+
+ E = ProcessBound(locMin.LeftBound, leftBoundIsForward);
+ if (E->OutIdx == Skip) E = ProcessBound(E, leftBoundIsForward);
+
+ TEdge* E2 = ProcessBound(locMin.RightBound, !leftBoundIsForward);
+ if (E2->OutIdx == Skip) E2 = ProcessBound(E2, !leftBoundIsForward);
+
+ if (locMin.LeftBound->OutIdx == Skip)
+ locMin.LeftBound = 0;
+ else if (locMin.RightBound->OutIdx == Skip)
+ locMin.RightBound = 0;
+ m_MinimaList.push_back(locMin);
+ if (!leftBoundIsForward) E = E2;
+ }
+ return true;
+}
+//------------------------------------------------------------------------------
+
+void ClipperBase::Clear()
+{
+ PROFILE_FUNC();
+ m_MinimaList.clear();
+ m_edges.clear();
+ m_UseFullRange = false;
+ m_HasOpenPaths = false;
+}
+//------------------------------------------------------------------------------
+
+// Initialize the Local Minima List:
+// Sort the LML entries, initialize the left / right bound edges of each Local Minima.
+void ClipperBase::Reset()
+{
+ PROFILE_FUNC();
+ if (m_MinimaList.empty()) return; //ie nothing to process
+ std::sort(m_MinimaList.begin(), m_MinimaList.end(), [](const LocalMinimum& lm1, const LocalMinimum& lm2){ return lm1.Y < lm2.Y; });
+
+ //reset all edges ...
+ for (LocalMinimum &lm : m_MinimaList) {
+ TEdge* e = lm.LeftBound;
+ if (e)
+ {
+ e->Curr = e->Bot;
+ e->Side = esLeft;
+ e->OutIdx = Unassigned;
+ }
+
+ e = lm.RightBound;
+ if (e)
+ {
+ e->Curr = e->Bot;
+ e->Side = esRight;
+ e->OutIdx = Unassigned;
+ }
+ }
+}
+//------------------------------------------------------------------------------
+
+// Get bounds of the edges referenced by the Local Minima List.
+// Returns (0,0,0,0) for an empty rectangle.
+IntRect ClipperBase::GetBounds()
+{
+ PROFILE_FUNC();
+ IntRect result;
+ auto lm = m_MinimaList.begin();
+ if (lm == m_MinimaList.end())
+ {
+ result.left = result.top = result.right = result.bottom = 0;
+ return result;
+ }
+ result.left = lm->LeftBound->Bot.X;
+ result.top = lm->LeftBound->Bot.Y;
+ result.right = lm->LeftBound->Bot.X;
+ result.bottom = lm->LeftBound->Bot.Y;
+ while (lm != m_MinimaList.end())
+ {
+ result.bottom = std::max(result.bottom, lm->LeftBound->Bot.Y);
+ TEdge* e = lm->LeftBound;
+ for (;;) {
+ TEdge* bottomE = e;
+ while (e->NextInLML)
+ {
+ if (e->Bot.X < result.left) result.left = e->Bot.X;
+ if (e->Bot.X > result.right) result.right = e->Bot.X;
+ e = e->NextInLML;
+ }
+ result.left = std::min(result.left, e->Bot.X);
+ result.right = std::max(result.right, e->Bot.X);
+ result.left = std::min(result.left, e->Top.X);
+ result.right = std::max(result.right, e->Top.X);
+ result.top = std::min(result.top, e->Top.Y);
+ if (bottomE == lm->LeftBound) e = lm->RightBound;
+ else break;
+ }
+ ++lm;
+ }
+ return result;
+}
+
+//------------------------------------------------------------------------------
+// TClipper methods ...
+//------------------------------------------------------------------------------
+
+Clipper::Clipper(int initOptions) :
+ ClipperBase(),
+ m_OutPtsFree(nullptr),
+ m_OutPtsChunkSize(32),
+ m_OutPtsChunkLast(32),
+ m_ActiveEdges(nullptr),
+ m_SortedEdges(nullptr)
+{
+ m_ReverseOutput = ((initOptions & ioReverseSolution) != 0);
+ m_StrictSimple = ((initOptions & ioStrictlySimple) != 0);
+ m_PreserveCollinear = ((initOptions & ioPreserveCollinear) != 0);
+ m_HasOpenPaths = false;
+#ifdef use_xyz
+ m_ZFill = 0;
+#endif
+}
+//------------------------------------------------------------------------------
+
+void Clipper::Reset()
+{
+ PROFILE_FUNC();
+ ClipperBase::Reset();
+ m_Scanbeam = std::priority_queue<cInt>();
+ m_Maxima.clear();
+ m_ActiveEdges = 0;
+ m_SortedEdges = 0;
+ for (auto lm = m_MinimaList.rbegin(); lm != m_MinimaList.rend(); ++lm)
+ m_Scanbeam.push(lm->Y);
+}
+
+//------------------------------------------------------------------------------
+
+bool Clipper::Execute(ClipType clipType, Paths &solution,
+ PolyFillType subjFillType, PolyFillType clipFillType)
+{
+ PROFILE_FUNC();
+ if (m_HasOpenPaths)
+ throw clipperException("Error: PolyTree struct is needed for open path clipping.");
+ solution.resize(0);
+ m_SubjFillType = subjFillType;
+ m_ClipFillType = clipFillType;
+ m_ClipType = clipType;
+ m_UsingPolyTree = false;
+ bool succeeded = ExecuteInternal();
+ if (succeeded) BuildResult(solution);
+ DisposeAllOutRecs();
+ return succeeded;
+}
+//------------------------------------------------------------------------------
+
+bool Clipper::Execute(ClipType clipType, PolyTree& polytree,
+ PolyFillType subjFillType, PolyFillType clipFillType)
+{
+ PROFILE_FUNC();
+ m_SubjFillType = subjFillType;
+ m_ClipFillType = clipFillType;
+ m_ClipType = clipType;
+ m_UsingPolyTree = true;
+ bool succeeded = ExecuteInternal();
+ if (succeeded) BuildResult2(polytree);
+ DisposeAllOutRecs();
+ return succeeded;
+}
+//------------------------------------------------------------------------------
+
+bool Clipper::ExecuteInternal()
+{
+ PROFILE_FUNC();
+ bool succeeded = true;
+ try {
+ PROFILE_BLOCK(Clipper_ExecuteInternal_Process);
+ Reset();
+ if (m_MinimaList.empty()) return true;
+ cInt botY = m_Scanbeam.top();
+ do { m_Scanbeam.pop(); } while (! m_Scanbeam.empty() && botY == m_Scanbeam.top());
+ do {
+ InsertLocalMinimaIntoAEL(botY);
+ ProcessHorizontals();
+ m_GhostJoins.clear();
+ if (m_Scanbeam.empty()) break;
+ cInt topY = m_Scanbeam.top();
+ do { m_Scanbeam.pop(); } while (! m_Scanbeam.empty() && topY == m_Scanbeam.top());
+ succeeded = ProcessIntersections(topY);
+ if (!succeeded) break;
+ ProcessEdgesAtTopOfScanbeam(topY);
+ botY = topY;
+ } while (!m_Scanbeam.empty() || !m_MinimaList.empty());
+ }
+ catch(...)
+ {
+ succeeded = false;
+ }
+
+ if (succeeded)
+ {
+ PROFILE_BLOCK(Clipper_ExecuteInternal_Fix);
+
+ //fix orientations ...
+ //FIXME Vojtech: Does it not invalidate the loop hierarchy maintained as OutRec::FirstLeft pointers?
+ //FIXME Vojtech: The area is calculated with floats, it may not be numerically stable!
+ {
+ PROFILE_BLOCK(Clipper_ExecuteInternal_Fix_orientations);
+ for (OutRec *outRec : m_PolyOuts)
+ if (outRec->Pts && !outRec->IsOpen && (outRec->IsHole ^ m_ReverseOutput) == (Area(*outRec) > 0))
+ ReversePolyPtLinks(outRec->Pts);
+ }
+
+ JoinCommonEdges();
+
+ //unfortunately FixupOutPolygon() must be done after JoinCommonEdges()
+ {
+ PROFILE_BLOCK(Clipper_ExecuteInternal_Fix_fixup);
+ for (OutRec *outRec : m_PolyOuts)
+ if (outRec->Pts) {
+ if (outRec->IsOpen)
+ // Removes duplicate points.
+ FixupOutPolyline(*outRec);
+ else
+ // Removes duplicate points and simplifies consecutive parallel edges by removing the middle vertex.
+ FixupOutPolygon(*outRec);
+ }
+ }
+ // For each polygon, search for exactly duplicate non-successive points.
+ // If such a point is found, the loop is split into two pieces.
+ // Search for the duplicate points is O(n^2)!
+ // http://www.angusj.com/delphi/clipper/documentation/Docs/Units/ClipperLib/Classes/Clipper/Properties/StrictlySimple.htm
+ if (m_StrictSimple) DoSimplePolygons();
+ }
+
+ m_Joins.clear();
+ m_GhostJoins.clear();
+ return succeeded;
+}
+//------------------------------------------------------------------------------
+
+OutPt* Clipper::AllocateOutPt()
+{
+ OutPt *pt;
+ if (m_OutPtsFree) {
+ // Recycle some of the already released points.
+ pt = m_OutPtsFree;
+ m_OutPtsFree = pt->Next;
+ } else if (m_OutPtsChunkLast < m_OutPtsChunkSize) {
+ // Get a point from the last chunk.
+ pt = m_OutPts.back() + (m_OutPtsChunkLast ++);
+ } else {
+ // The last chunk is full. Allocate a new one.
+ m_OutPts.push_back(new OutPt[m_OutPtsChunkSize]);
+ m_OutPtsChunkLast = 1;
+ pt = m_OutPts.back();
+ }
+ return pt;
+}
+
+void Clipper::DisposeAllOutRecs()
+{
+ for (OutPt *pts : m_OutPts)
+ delete[] pts;
+ for (OutRec *rec : m_PolyOuts)
+ delete rec;
+ m_OutPts.clear();
+ m_OutPtsFree = nullptr;
+ m_OutPtsChunkLast = m_OutPtsChunkSize;
+ m_PolyOuts.clear();
+}
+//------------------------------------------------------------------------------
+
+void Clipper::SetWindingCount(TEdge &edge) const
+{
+ TEdge *e = edge.PrevInAEL;
+ //find the edge of the same polytype that immediately preceeds 'edge' in AEL
+ while (e && ((e->PolyTyp != edge.PolyTyp) || (e->WindDelta == 0))) e = e->PrevInAEL;
+ if (!e)
+ {
+ edge.WindCnt = (edge.WindDelta == 0 ? 1 : edge.WindDelta);
+ edge.WindCnt2 = 0;
+ e = m_ActiveEdges; //ie get ready to calc WindCnt2
+ }
+ else if (edge.WindDelta == 0 && m_ClipType != ctUnion)
+ {
+ edge.WindCnt = 1;
+ edge.WindCnt2 = e->WindCnt2;
+ e = e->NextInAEL; //ie get ready to calc WindCnt2
+ }
+ else if (IsEvenOddFillType(edge))
+ {
+ //EvenOdd filling ...
+ if (edge.WindDelta == 0)
+ {
+ //are we inside a subj polygon ...
+ bool Inside = true;
+ TEdge *e2 = e->PrevInAEL;
+ while (e2)
+ {
+ if (e2->PolyTyp == e->PolyTyp && e2->WindDelta != 0)
+ Inside = !Inside;
+ e2 = e2->PrevInAEL;
+ }
+ edge.WindCnt = (Inside ? 0 : 1);
+ }
+ else
+ {
+ edge.WindCnt = edge.WindDelta;
+ }
+ 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)
+ {
+ //prev edge is 'decreasing' WindCount (WC) toward zero
+ //so we're outside the previous polygon ...
+ if (std::abs(e->WindCnt) > 1)
+ {
+ //outside prev poly but still inside another.
+ //when reversing direction of prev poly use the same WC
+ if (e->WindDelta * edge.WindDelta < 0) edge.WindCnt = e->WindCnt;
+ //otherwise continue to 'decrease' WC ...
+ else edge.WindCnt = e->WindCnt + edge.WindDelta;
+ }
+ else
+ //now outside all polys of same polytype so set own WC ...
+ edge.WindCnt = (edge.WindDelta == 0 ? 1 : edge.WindDelta);
+ } else
+ {
+ //prev edge is 'increasing' WindCount (WC) away from zero
+ //so we're inside the previous polygon ...
+ if (edge.WindDelta == 0)
+ edge.WindCnt = (e->WindCnt < 0 ? e->WindCnt - 1 : e->WindCnt + 1);
+ //if wind direction is reversing prev then use same WC
+ else if (e->WindDelta * edge.WindDelta < 0) edge.WindCnt = e->WindCnt;
+ //otherwise add to WC ...
+ 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)
+ {
+ if (e->WindDelta != 0)
+ 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::IsContributing(const TEdge& edge) const
+{
+ PolyFillType pft, pft2;
+ if (edge.PolyTyp == ptSubject)
+ {
+ pft = m_SubjFillType;
+ pft2 = m_ClipFillType;
+ } else
+ {
+ pft = m_ClipFillType;
+ pft2 = m_SubjFillType;
+ }
+
+ switch(pft)
+ {
+ case pftEvenOdd:
+ //return false if a subj line has been flagged as inside a subj polygon
+ if (edge.WindDelta == 0 && edge.WindCnt != 1) return false;
+ break;
+ case pftNonZero:
+ if (std::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);
+ }
+ break;
+ case ctUnion:
+ switch(pft2)
+ {
+ case pftEvenOdd:
+ case pftNonZero:
+ return (edge.WindCnt2 == 0);
+ case pftPositive:
+ return (edge.WindCnt2 <= 0);
+ default:
+ return (edge.WindCnt2 >= 0);
+ }
+ break;
+ case ctDifference:
+ if (edge.PolyTyp == 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);
+ }
+ break;
+ case ctXor:
+ if (edge.WindDelta == 0) //XOr always contributing unless open
+ switch(pft2)
+ {
+ case pftEvenOdd:
+ case pftNonZero:
+ return (edge.WindCnt2 == 0);
+ case pftPositive:
+ return (edge.WindCnt2 <= 0);
+ default:
+ return (edge.WindCnt2 >= 0);
+ }
+ else
+ return true;
+ break;
+ default:
+ return true;
+ }
+}
+//------------------------------------------------------------------------------
+
+// Called from Clipper::InsertLocalMinimaIntoAEL() and Clipper::IntersectEdges().
+OutPt* Clipper::AddLocalMinPoly(TEdge *e1, TEdge *e2, const IntPoint &Pt)
+{
+ PROFILE_FUNC();
+ OutPt* result;
+ TEdge *e, *prevE;
+ if (IsHorizontal(*e2) || ( e1->Dx > e2->Dx ))
+ {
+ result = 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
+ {
+ result = 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) &&
+ (e->WindDelta != 0) && (prevE->WindDelta != 0))
+ {
+ OutPt* outPt = AddOutPt(prevE, Pt);
+ m_Joins.emplace_back(Join(result, outPt, e->Top));
+ }
+ return result;
+}
+//------------------------------------------------------------------------------
+
+void Clipper::AddLocalMaxPoly(TEdge *e1, TEdge *e2, const IntPoint &Pt)
+{
+ AddOutPt( e1, Pt );
+ if (e2->WindDelta == 0) AddOutPt(e2, Pt);
+ if( e1->OutIdx == e2->OutIdx )
+ {
+ e1->OutIdx = Unassigned;
+ e2->OutIdx = Unassigned;
+ }
+ 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;
+ }
+}
+
+//------------------------------------------------------------------------------
+
+// Called from Clipper::ExecuteInternal()
+void Clipper::InsertLocalMinimaIntoAEL(const cInt botY)
+{
+ PROFILE_FUNC();
+ while (!m_MinimaList.empty() && m_MinimaList.back().Y == botY)
+ {
+ TEdge* lb = m_MinimaList.back().LeftBound;
+ TEdge* rb = m_MinimaList.back().RightBound;
+ m_MinimaList.pop_back();
+
+ OutPt *Op1 = 0;
+ if (!lb)
+ {
+ //nb: don't insert LB into either AEL or SEL
+ InsertEdgeIntoAEL(rb, 0);
+ SetWindingCount(*rb);
+ if (IsContributing(*rb))
+ Op1 = AddOutPt(rb, rb->Bot);
+ }
+ else if (!rb)
+ {
+ InsertEdgeIntoAEL(lb, 0);
+ SetWindingCount(*lb);
+ if (IsContributing(*lb))
+ Op1 = AddOutPt(lb, lb->Bot);
+ m_Scanbeam.push(lb->Top.Y);
+ }
+ else
+ {
+ InsertEdgeIntoAEL(lb, 0);
+ InsertEdgeIntoAEL(rb, lb);
+ SetWindingCount( *lb );
+ rb->WindCnt = lb->WindCnt;
+ rb->WindCnt2 = lb->WindCnt2;
+ if (IsContributing(*lb))
+ Op1 = AddLocalMinPoly(lb, rb, lb->Bot);
+ m_Scanbeam.push(lb->Top.Y);
+ }
+
+ if (rb)
+ {
+ if(IsHorizontal(*rb)) AddEdgeToSEL(rb);
+ else m_Scanbeam.push(rb->Top.Y);
+ }
+
+ if (!lb || !rb) continue;
+
+ //if any output polygons share an edge, they'll need joining later ...
+ if (Op1 && IsHorizontal(*rb) &&
+ m_GhostJoins.size() > 0 && (rb->WindDelta != 0))
+ {
+ for (Join &jr : m_GhostJoins)
+ //if the horizontal Rb and a 'ghost' horizontal overlap, then convert
+ //the 'ghost' join to a real join ready for later ...
+ if (HorzSegmentsOverlap(jr.OutPt1->Pt.X, jr.OffPt.X, rb->Bot.X, rb->Top.X))
+ m_Joins.emplace_back(Join(jr.OutPt1, Op1, jr.OffPt));
+ }
+
+ if (lb->OutIdx >= 0 && lb->PrevInAEL &&
+ lb->PrevInAEL->Curr.X == lb->Bot.X &&
+ lb->PrevInAEL->OutIdx >= 0 &&
+ SlopesEqual(*lb->PrevInAEL, *lb, m_UseFullRange) &&
+ (lb->WindDelta != 0) && (lb->PrevInAEL->WindDelta != 0))
+ {
+ OutPt *Op2 = AddOutPt(lb->PrevInAEL, lb->Bot);
+ m_Joins.emplace_back(Join(Op1, Op2, lb->Top));
+ }
+
+ if(lb->NextInAEL != rb)
+ {
+
+ if (rb->OutIdx >= 0 && rb->PrevInAEL->OutIdx >= 0 &&
+ SlopesEqual(*rb->PrevInAEL, *rb, m_UseFullRange) &&
+ (rb->WindDelta != 0) && (rb->PrevInAEL->WindDelta != 0))
+ {
+ OutPt *Op2 = AddOutPt(rb->PrevInAEL, rb->Bot);
+ m_Joins.emplace_back(Join(Op1, Op2, rb->Top));
+ }
+
+ TEdge* e = lb->NextInAEL;
+ if (e)
+ {
+ while( e != rb )
+ {
+ //nb: For calculating winding counts etc, IntersectEdges() assumes
+ //that param1 will be to the Right of param2 ABOVE the intersection ...
+ IntersectEdges(rb , e , lb->Curr); //order important here
+ e = e->NextInAEL;
+ }
+ }
+ }
+
+ }
+}
+//------------------------------------------------------------------------------
+
+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;
+}
+//------------------------------------------------------------------------------
+
+#ifdef use_xyz
+void Clipper::SetZ(IntPoint& pt, TEdge& e1, TEdge& e2)
+{
+ if (pt.Z != 0 || !m_ZFill) return;
+ else if (pt == e1.Bot) pt.Z = e1.Bot.Z;
+ else if (pt == e1.Top) pt.Z = e1.Top.Z;
+ else if (pt == e2.Bot) pt.Z = e2.Bot.Z;
+ else if (pt == e2.Top) pt.Z = e2.Top.Z;
+ else (*m_ZFill)(e1.Bot, e1.Top, e2.Bot, e2.Top, pt);
+}
+//------------------------------------------------------------------------------
+#endif
+
+void Clipper::IntersectEdges(TEdge *e1, TEdge *e2, IntPoint &Pt)
+{
+ bool e1Contributing = ( e1->OutIdx >= 0 );
+ bool e2Contributing = ( e2->OutIdx >= 0 );
+
+#ifdef use_xyz
+ SetZ(Pt, *e1, *e2);
+#endif
+
+#ifdef use_lines
+ //if either edge is on an OPEN path ...
+ if (e1->WindDelta == 0 || e2->WindDelta == 0)
+ {
+ //ignore subject-subject open path intersections UNLESS they
+ //are both open paths, AND they are both 'contributing maximas' ...
+ if (e1->WindDelta == 0 && e2->WindDelta == 0) return;
+
+ //if intersecting a subj line with a subj poly ...
+ else if (e1->PolyTyp == e2->PolyTyp &&
+ e1->WindDelta != e2->WindDelta && m_ClipType == ctUnion)
+ {
+ if (e1->WindDelta == 0)
+ {
+ if (e2Contributing)
+ {
+ AddOutPt(e1, Pt);
+ if (e1Contributing) e1->OutIdx = Unassigned;
+ }
+ }
+ else
+ {
+ if (e1Contributing)
+ {
+ AddOutPt(e2, Pt);
+ if (e2Contributing) e2->OutIdx = Unassigned;
+ }
+ }
+ }
+ else if (e1->PolyTyp != e2->PolyTyp)
+ {
+ //toggle subj open path OutIdx on/off when Abs(clip.WndCnt) == 1 ...
+ if ((e1->WindDelta == 0) && std::abs(e2->WindCnt) == 1 &&
+ (m_ClipType != ctUnion || e2->WindCnt2 == 0))
+ {
+ AddOutPt(e1, Pt);
+ if (e1Contributing) e1->OutIdx = Unassigned;
+ }
+ else if ((e2->WindDelta == 0) && (std::abs(e1->WindCnt) == 1) &&
+ (m_ClipType != ctUnion || e1->WindCnt2 == 0))
+ {
+ AddOutPt(e2, Pt);
+ if (e2Contributing) e2->OutIdx = Unassigned;
+ }
+ }
+ return;
+ }
+#endif
+
+ //update winding counts...
+ //assumes that e1 will be to the Right of e2 ABOVE the intersection
+ if ( e1->PolyTyp == e2->PolyTyp )
+ {
+ 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->PolyTyp == ptSubject)
+ {
+ e1FillType = m_SubjFillType;
+ e1FillType2 = m_ClipFillType;
+ } else
+ {
+ e1FillType = m_ClipFillType;
+ e1FillType2 = m_SubjFillType;
+ }
+ if (e2->PolyTyp == ptSubject)
+ {
+ e2FillType = m_SubjFillType;
+ e2FillType2 = m_ClipFillType;
+ } else
+ {
+ e2FillType = m_ClipFillType;
+ e2FillType2 = m_SubjFillType;
+ }
+
+ cInt e1Wc, e2Wc;
+ switch (e1FillType)
+ {
+ case pftPositive: e1Wc = e1->WindCnt; break;
+ case pftNegative: e1Wc = -e1->WindCnt; break;
+ default: e1Wc = std::abs(e1->WindCnt);
+ }
+ switch(e2FillType)
+ {
+ case pftPositive: e2Wc = e2->WindCnt; break;
+ case pftNegative: e2Wc = -e2->WindCnt; break;
+ default: e2Wc = std::abs(e2->WindCnt);
+ }
+
+ if ( e1Contributing && e2Contributing )
+ {
+ if ((e1Wc != 0 && e1Wc != 1) || (e2Wc != 0 && e2Wc != 1) ||
+ (e1->PolyTyp != e2->PolyTyp && m_ClipType != ctXor) )
+ {
+ AddLocalMaxPoly(e1, e2, Pt);
+ }
+ else
+ {
+ AddOutPt(e1, Pt);
+ AddOutPt(e2, Pt);
+ std::swap(e1->Side, e2->Side);
+ std::swap(e1->OutIdx, e2->OutIdx);
+ }
+ }
+ else if ( e1Contributing )
+ {
+ if (e2Wc == 0 || e2Wc == 1)
+ {
+ AddOutPt(e1, Pt);
+ std::swap(e1->Side, e2->Side);
+ std::swap(e1->OutIdx, e2->OutIdx);
+ }
+ }
+ else if ( e2Contributing )
+ {
+ if (e1Wc == 0 || e1Wc == 1)
+ {
+ AddOutPt(e2, Pt);
+ std::swap(e1->Side, e2->Side);
+ std::swap(e1->OutIdx, e2->OutIdx);
+ }
+ }
+ else if ( (e1Wc == 0 || e1Wc == 1) && (e2Wc == 0 || e2Wc == 1))
+ {
+ //neither edge is currently contributing ...
+
+ cInt e1Wc2, e2Wc2;
+ switch (e1FillType2)
+ {
+ case pftPositive: e1Wc2 = e1->WindCnt2; break;
+ case pftNegative : e1Wc2 = -e1->WindCnt2; break;
+ default: e1Wc2 = std::abs(e1->WindCnt2);
+ }
+ switch (e2FillType2)
+ {
+ case pftPositive: e2Wc2 = e2->WindCnt2; break;
+ case pftNegative: e2Wc2 = -e2->WindCnt2; break;
+ default: e2Wc2 = std::abs(e2->WindCnt2);
+ }
+
+ if (e1->PolyTyp != e2->PolyTyp)
+ {
+ 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->PolyTyp == ptClip) && (e1Wc2 > 0) && (e2Wc2 > 0)) ||
+ ((e1->PolyTyp == ptSubject) && (e1Wc2 <= 0) && (e2Wc2 <= 0)))
+ AddLocalMinPoly(e1, e2, Pt);
+ break;
+ case ctXor:
+ AddLocalMinPoly(e1, e2, Pt);
+ }
+ else
+ std::swap(e1->Side, e2->Side);
+ }
+}
+//------------------------------------------------------------------------------
+
+void Clipper::SetHoleState(TEdge *e, OutRec *outrec) const
+{
+ bool IsHole = false;
+ TEdge *e2 = e->PrevInAEL;
+ while (e2)
+ {
+ if (e2->OutIdx >= 0 && e2->WindDelta != 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 ...
+ if (!outRec1->BottomPt)
+ outRec1->BottomPt = GetBottomPt(outRec1->Pts);
+ if (!outRec2->BottomPt)
+ outRec2->BottomPt = GetBottomPt(outRec2->Pts);
+ 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;
+}
+//------------------------------------------------------------------------------
+
+OutRec* Clipper::GetOutRec(int Idx)
+{
+ OutRec* outrec = m_PolyOuts[Idx];
+ while (outrec != m_PolyOuts[outrec->Idx])
+ outrec = m_PolyOuts[outrec->Idx];
+ return outrec;
+}
+//------------------------------------------------------------------------------
+
+void Clipper::AppendPolygon(TEdge *e1, TEdge *e2) const
+{
+ //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);
+
+ //get the start and ends of both output polygons and
+ //join e2 poly onto e1 poly and delete pointers to e2 ...
+
+ 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;
+ }
+
+ outRec1->BottomPt = 0;
+ if (holeStateRec == outRec2)
+ {
+ 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 = Unassigned; //nb: safe because we only get here via AddLocalMaxPoly
+ e2->OutIdx = Unassigned;
+
+ TEdge* e = m_ActiveEdges;
+ while( e )
+ {
+ if( e->OutIdx == ObsoleteIdx )
+ {
+ e->OutIdx = OKIdx;
+ e->Side = Side;
+ break;
+ }
+ e = e->NextInAEL;
+ }
+
+ outRec2->Idx = outRec1->Idx;
+}
+//------------------------------------------------------------------------------
+
+OutRec* Clipper::CreateOutRec()
+{
+ OutRec* result = new OutRec;
+ result->IsHole = false;
+ result->IsOpen = false;
+ result->FirstLeft = 0;
+ result->Pts = 0;
+ result->BottomPt = 0;
+ result->PolyNd = 0;
+ m_PolyOuts.push_back(result);
+ result->Idx = (int)m_PolyOuts.size()-1;
+ return result;
+}
+//------------------------------------------------------------------------------
+
+OutPt* Clipper::AddOutPt(TEdge *e, const IntPoint &pt)
+{
+ if( e->OutIdx < 0 )
+ {
+ OutRec *outRec = CreateOutRec();
+ outRec->IsOpen = (e->WindDelta == 0);
+ OutPt* newOp = this->AllocateOutPt();
+ outRec->Pts = newOp;
+ newOp->Idx = outRec->Idx;
+ newOp->Pt = pt;
+ newOp->Next = newOp;
+ newOp->Prev = newOp;
+ if (!outRec->IsOpen)
+ SetHoleState(e, outRec);
+ e->OutIdx = outRec->Idx;
+ return newOp;
+ } else
+ {
+ OutRec *outRec = m_PolyOuts[e->OutIdx];
+ //OutRec.Pts is the 'Left-most' point & OutRec.Pts.Prev is the 'Right-most'
+ OutPt* op = outRec->Pts;
+
+ bool ToFront = (e->Side == esLeft);
+ if (ToFront && (pt == op->Pt)) return op;
+ else if (!ToFront && (pt == op->Prev->Pt)) return op->Prev;
+
+ OutPt* newOp = this->AllocateOutPt();
+ newOp->Idx = outRec->Idx;
+ newOp->Pt = pt;
+ newOp->Next = op;
+ newOp->Prev = op->Prev;
+ newOp->Prev->Next = newOp;
+ op->Prev = newOp;
+ if (ToFront) outRec->Pts = newOp;
+ return newOp;
+ }
+}
+//------------------------------------------------------------------------------
+
+OutPt* Clipper::GetLastOutPt(TEdge *e)
+{
+ OutRec *outRec = m_PolyOuts[e->OutIdx];
+ if (e->Side == esLeft)
+ return outRec->Pts;
+ else
+ return outRec->Pts->Prev;
+}
+//------------------------------------------------------------------------------
+
+void Clipper::ProcessHorizontals()
+{
+ PROFILE_FUNC();
+ TEdge* horzEdge = m_SortedEdges;
+ while(horzEdge)
+ {
+ DeleteFromSEL(horzEdge);
+ ProcessHorizontal(horzEdge);
+ horzEdge = m_SortedEdges;
+ }
+}
+//------------------------------------------------------------------------------
+
+inline bool IsMaxima(TEdge *e, const cInt Y)
+{
+ return e && e->Top.Y == Y && !e->NextInLML;
+}
+//------------------------------------------------------------------------------
+
+inline bool IsIntermediate(TEdge *e, const cInt Y)
+{
+ return e->Top.Y == Y && e->NextInLML;
+}
+//------------------------------------------------------------------------------
+
+inline TEdge *GetMaximaPair(TEdge *e)
+{
+ TEdge* result = 0;
+ if ((e->Next->Top == e->Top) && !e->Next->NextInLML)
+ result = e->Next;
+ else if ((e->Prev->Top == e->Top) && !e->Prev->NextInLML)
+ result = e->Prev;
+
+ if (result && (result->OutIdx == Skip ||
+ //result is false if both NextInAEL & PrevInAEL are nil & not horizontal ...
+ (result->NextInAEL == result->PrevInAEL && !IsHorizontal(*result))))
+ return 0;
+ return result;
+}
+//------------------------------------------------------------------------------
+
+void Clipper::SwapPositionsInAEL(TEdge *Edge1, TEdge *Edge2)
+{
+ //check that one or other edge hasn't already been removed from AEL ...
+ if (Edge1->NextInAEL == Edge1->PrevInAEL ||
+ Edge2->NextInAEL == Edge2->PrevInAEL) return;
+
+ 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;
+}
+//------------------------------------------------------------------------------
+
+inline void GetHorzDirection(TEdge& HorzEdge, Direction& Dir, cInt& Left, cInt& Right)
+{
+ if (HorzEdge.Bot.X < HorzEdge.Top.X)
+ {
+ Left = HorzEdge.Bot.X;
+ Right = HorzEdge.Top.X;
+ Dir = dLeftToRight;
+ } else
+ {
+ Left = HorzEdge.Top.X;
+ Right = HorzEdge.Bot.X;
+ Dir = dRightToLeft;
+ }
+}
+//------------------------------------------------------------------------
+
+/*******************************************************************************
+* 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 Bot.Xs only [#] *
+* (or they could intersect with Top.Xs only, ie EITHER Bot.Xs OR Top.Xs), *
+* 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. *
+*******************************************************************************/
+
+void Clipper::ProcessHorizontal(TEdge *horzEdge)
+{
+ Direction dir;
+ cInt horzLeft, horzRight;
+ bool IsOpen = (horzEdge->OutIdx >= 0 && m_PolyOuts[horzEdge->OutIdx]->IsOpen);
+
+ GetHorzDirection(*horzEdge, dir, horzLeft, horzRight);
+
+ TEdge* eLastHorz = horzEdge, *eMaxPair = 0;
+ while (eLastHorz->NextInLML && IsHorizontal(*eLastHorz->NextInLML))
+ eLastHorz = eLastHorz->NextInLML;
+ if (!eLastHorz->NextInLML)
+ eMaxPair = GetMaximaPair(eLastHorz);
+
+ std::vector<cInt>::const_iterator maxIt;
+ std::vector<cInt>::const_reverse_iterator maxRit;
+ if (!m_Maxima.empty())
+ {
+ //get the first maxima in range (X) ...
+ if (dir == dLeftToRight)
+ {
+ maxIt = m_Maxima.begin();
+ while (maxIt != m_Maxima.end() && *maxIt <= horzEdge->Bot.X) ++maxIt;
+ if (maxIt != m_Maxima.end() && *maxIt >= eLastHorz->Top.X)
+ maxIt = m_Maxima.end();
+ }
+ else
+ {
+ maxRit = m_Maxima.rbegin();
+ while (maxRit != m_Maxima.rend() && *maxRit > horzEdge->Bot.X) ++maxRit;
+ if (maxRit != m_Maxima.rend() && *maxRit <= eLastHorz->Top.X)
+ maxRit = m_Maxima.rend();
+ }
+ }
+
+ OutPt* op1 = 0;
+
+ for (;;) //loop through consec. horizontal edges
+ {
+
+ bool IsLastHorz = (horzEdge == eLastHorz);
+ TEdge* e = (dir == dLeftToRight) ? horzEdge->NextInAEL : horzEdge->PrevInAEL;
+ while(e)
+ {
+
+ //this code block inserts extra coords into horizontal edges (in output
+ //polygons) whereever maxima touch these horizontal edges. This helps
+ //'simplifying' polygons (ie if the Simplify property is set).
+ if (!m_Maxima.empty())
+ {
+ if (dir == dLeftToRight)
+ {
+ while (maxIt != m_Maxima.end() && *maxIt < e->Curr.X)
+ {
+ if (horzEdge->OutIdx >= 0 && !IsOpen)
+ AddOutPt(horzEdge, IntPoint(*maxIt, horzEdge->Bot.Y));
+ ++maxIt;
+ }
+ }
+ else
+ {
+ while (maxRit != m_Maxima.rend() && *maxRit > e->Curr.X)
+ {
+ if (horzEdge->OutIdx >= 0 && !IsOpen)
+ AddOutPt(horzEdge, IntPoint(*maxRit, horzEdge->Bot.Y));
+ ++maxRit;
+ }
+ }
+ };
+
+ if ((dir == dLeftToRight && e->Curr.X > horzRight) ||
+ (dir == dRightToLeft && e->Curr.X < horzLeft)) break;
+
+ //Also break if we've got to the end of an intermediate horizontal edge ...
+ //nb: Smaller Dx's are to the right of larger Dx's ABOVE the horizontal.
+ if (e->Curr.X == horzEdge->Top.X && horzEdge->NextInLML &&
+ e->Dx < horzEdge->NextInLML->Dx) break;
+
+ if (horzEdge->OutIdx >= 0 && !IsOpen) //note: may be done multiple times
+ {
+ op1 = AddOutPt(horzEdge, e->Curr);
+ TEdge* eNextHorz = m_SortedEdges;
+ while (eNextHorz)
+ {
+ if (eNextHorz->OutIdx >= 0 &&
+ HorzSegmentsOverlap(horzEdge->Bot.X,
+ horzEdge->Top.X, eNextHorz->Bot.X, eNextHorz->Top.X))
+ {
+ OutPt* op2 = GetLastOutPt(eNextHorz);
+ m_Joins.emplace_back(Join(op2, op1, eNextHorz->Top));
+ }
+ eNextHorz = eNextHorz->NextInSEL;
+ }
+ m_GhostJoins.emplace_back(Join(op1, 0, horzEdge->Bot));
+ }
+
+ //OK, so far we're still in range of the horizontal Edge but make sure
+ //we're at the last of consec. horizontals when matching with eMaxPair
+ if(e == eMaxPair && IsLastHorz)
+ {
+ if (horzEdge->OutIdx >= 0)
+ AddLocalMaxPoly(horzEdge, eMaxPair, horzEdge->Top);
+ DeleteFromAEL(horzEdge);
+ DeleteFromAEL(eMaxPair);
+ return;
+ }
+
+ if(dir == dLeftToRight)
+ {
+ IntPoint Pt = IntPoint(e->Curr.X, horzEdge->Curr.Y);
+ IntersectEdges(horzEdge, e, Pt);
+ }
+ else
+ {
+ IntPoint Pt = IntPoint(e->Curr.X, horzEdge->Curr.Y);
+ IntersectEdges( e, horzEdge, Pt);
+ }
+ TEdge* eNext = (dir == dLeftToRight) ? e->NextInAEL : e->PrevInAEL;
+ SwapPositionsInAEL( horzEdge, e );
+ e = eNext;
+ } //end while(e)
+
+ //Break out of loop if HorzEdge.NextInLML is not also horizontal ...
+ if (!horzEdge->NextInLML || !IsHorizontal(*horzEdge->NextInLML)) break;
+
+ UpdateEdgeIntoAEL(horzEdge);
+ if (horzEdge->OutIdx >= 0) AddOutPt(horzEdge, horzEdge->Bot);
+ GetHorzDirection(*horzEdge, dir, horzLeft, horzRight);
+
+ } //end for (;;)
+
+ if (horzEdge->OutIdx >= 0 && !op1)
+ {
+ op1 = GetLastOutPt(horzEdge);
+ TEdge* eNextHorz = m_SortedEdges;
+ while (eNextHorz)
+ {
+ if (eNextHorz->OutIdx >= 0 &&
+ HorzSegmentsOverlap(horzEdge->Bot.X,
+ horzEdge->Top.X, eNextHorz->Bot.X, eNextHorz->Top.X))
+ {
+ OutPt* op2 = GetLastOutPt(eNextHorz);
+ m_Joins.emplace_back(Join(op2, op1, eNextHorz->Top));
+ }
+ eNextHorz = eNextHorz->NextInSEL;
+ }
+ m_GhostJoins.emplace_back(Join(op1, 0, horzEdge->Top));
+ }
+
+ if (horzEdge->NextInLML)
+ {
+ if(horzEdge->OutIdx >= 0)
+ {
+ op1 = AddOutPt( horzEdge, horzEdge->Top);
+ UpdateEdgeIntoAEL(horzEdge);
+ if (horzEdge->WindDelta == 0) return;
+ //nb: HorzEdge is no longer horizontal here
+ TEdge* ePrev = horzEdge->PrevInAEL;
+ TEdge* eNext = horzEdge->NextInAEL;
+ if (ePrev && ePrev->Curr.X == horzEdge->Bot.X &&
+ ePrev->Curr.Y == horzEdge->Bot.Y && ePrev->WindDelta != 0 &&
+ (ePrev->OutIdx >= 0 && ePrev->Curr.Y > ePrev->Top.Y &&
+ SlopesEqual(*horzEdge, *ePrev, m_UseFullRange)))
+ {
+ OutPt* op2 = AddOutPt(ePrev, horzEdge->Bot);
+ m_Joins.emplace_back(Join(op1, op2, horzEdge->Top));
+ }
+ else if (eNext && eNext->Curr.X == horzEdge->Bot.X &&
+ eNext->Curr.Y == horzEdge->Bot.Y && eNext->WindDelta != 0 &&
+ eNext->OutIdx >= 0 && eNext->Curr.Y > eNext->Top.Y &&
+ SlopesEqual(*horzEdge, *eNext, m_UseFullRange))
+ {
+ OutPt* op2 = AddOutPt(eNext, horzEdge->Bot);
+ m_Joins.emplace_back(Join(op1, op2, horzEdge->Top));
+ }
+ }
+ else
+ UpdateEdgeIntoAEL(horzEdge);
+ }
+ else
+ {
+ if (horzEdge->OutIdx >= 0) AddOutPt(horzEdge, horzEdge->Top);
+ DeleteFromAEL(horzEdge);
+ }
+}
+//------------------------------------------------------------------------------
+
+void Clipper::UpdateEdgeIntoAEL(TEdge *&e)
+{
+ if( !e->NextInLML )
+ throw clipperException("UpdateEdgeIntoAEL: invalid call");
+
+ e->NextInLML->OutIdx = e->OutIdx;
+ TEdge* AelPrev = e->PrevInAEL;
+ TEdge* AelNext = e->NextInAEL;
+ 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->Curr = e->Bot;
+ e->PrevInAEL = AelPrev;
+ e->NextInAEL = AelNext;
+ if (!IsHorizontal(*e))
+ m_Scanbeam.push(e->Top.Y);
+}
+//------------------------------------------------------------------------------
+
+bool Clipper::ProcessIntersections(const cInt topY)
+{
+ PROFILE_FUNC();
+ if( !m_ActiveEdges ) return true;
+ try {
+ BuildIntersectList(topY);
+ size_t IlSize = m_IntersectList.size();
+ if (IlSize == 0) return true;
+ if (IlSize == 1 || FixupIntersectionOrder()) {
+ for (IntersectNode &iNode : m_IntersectList) {
+ IntersectEdges( iNode.Edge1, iNode.Edge2, iNode.Pt);
+ SwapPositionsInAEL( iNode.Edge1 , iNode.Edge2 );
+ }
+ m_IntersectList.clear();
+ }
+ else return false;
+ }
+ catch(...)
+ {
+ m_SortedEdges = 0;
+ m_IntersectList.clear();
+ throw clipperException("ProcessIntersections error");
+ }
+ m_SortedEdges = 0;
+ return true;
+}
+//------------------------------------------------------------------------------
+
+void Clipper::BuildIntersectList(const cInt 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->Curr.X = TopX( *e, topY );
+ e = e->NextInAEL;
+ }
+
+ //bubblesort ...
+ bool isModified;
+ do
+ {
+ isModified = false;
+ e = m_SortedEdges;
+ while( e->NextInSEL )
+ {
+ TEdge *eNext = e->NextInSEL;
+ IntPoint Pt;
+ if(e->Curr.X > eNext->Curr.X)
+ {
+ IntersectPoint(*e, *eNext, Pt);
+ m_IntersectList.emplace_back(IntersectNode(e, eNext, Pt));
+ SwapPositionsInSEL(e, eNext);
+ isModified = true;
+ }
+ else
+ e = eNext;
+ }
+ if( e->PrevInSEL ) e->PrevInSEL->NextInSEL = 0;
+ else break;
+ }
+ while ( isModified );
+ m_SortedEdges = 0; //important
+}
+//------------------------------------------------------------------------------
+
+
+inline bool EdgesAdjacent(const IntersectNode &inode)
+{
+ return (inode.Edge1->NextInSEL == inode.Edge2) ||
+ (inode.Edge1->PrevInSEL == inode.Edge2);
+}
+//------------------------------------------------------------------------------
+
+bool Clipper::FixupIntersectionOrder()
+{
+ //pre-condition: intersections are sorted Bottom-most first.
+ //Now it's crucial that intersections are made only between adjacent edges,
+ //so to ensure this the order of intersections may need adjusting ...
+ CopyAELToSEL();
+ std::sort(m_IntersectList.begin(), m_IntersectList.end(), [](const IntersectNode &node1, const IntersectNode &node2) { return node2.Pt.Y < node1.Pt.Y; });
+
+ size_t cnt = m_IntersectList.size();
+ for (size_t i = 0; i < cnt; ++i)
+ {
+ if (!EdgesAdjacent(m_IntersectList[i]))
+ {
+ size_t j = i + 1;
+ while (j < cnt && !EdgesAdjacent(m_IntersectList[j])) j++;
+ if (j == cnt) return false;
+ std::swap(m_IntersectList[i], m_IntersectList[j]);
+ }
+ SwapPositionsInSEL(m_IntersectList[i].Edge1, m_IntersectList[i].Edge2);
+ }
+ return true;
+}
+//------------------------------------------------------------------------------
+
+void Clipper::DoMaxima(TEdge *e)
+{
+ TEdge* eMaxPair = GetMaximaPair(e);
+ if (!eMaxPair)
+ {
+ if (e->OutIdx >= 0)
+ AddOutPt(e, e->Top);
+ DeleteFromAEL(e);
+ return;
+ }
+
+ TEdge* eNext = e->NextInAEL;
+ while(eNext && eNext != eMaxPair)
+ {
+ IntersectEdges(e, eNext, e->Top);
+ SwapPositionsInAEL(e, eNext);
+ eNext = e->NextInAEL;
+ }
+
+ if(e->OutIdx == Unassigned && eMaxPair->OutIdx == Unassigned)
+ {
+ DeleteFromAEL(e);
+ DeleteFromAEL(eMaxPair);
+ }
+ else if( e->OutIdx >= 0 && eMaxPair->OutIdx >= 0 )
+ {
+ if (e->OutIdx >= 0) AddLocalMaxPoly(e, eMaxPair, e->Top);
+ DeleteFromAEL(e);
+ DeleteFromAEL(eMaxPair);
+ }
+#ifdef use_lines
+ else if (e->WindDelta == 0)
+ {
+ if (e->OutIdx >= 0)
+ {
+ AddOutPt(e, e->Top);
+ e->OutIdx = Unassigned;
+ }
+ DeleteFromAEL(e);
+
+ if (eMaxPair->OutIdx >= 0)
+ {
+ AddOutPt(eMaxPair, e->Top);
+ eMaxPair->OutIdx = Unassigned;
+ }
+ DeleteFromAEL(eMaxPair);
+ }
+#endif
+ else throw clipperException("DoMaxima error");
+}
+//------------------------------------------------------------------------------
+
+void Clipper::ProcessEdgesAtTopOfScanbeam(const cInt topY)
+{
+ PROFILE_FUNC();
+ 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.
+ bool IsMaximaEdge = IsMaxima(e, topY);
+
+ if(IsMaximaEdge)
+ {
+ TEdge* eMaxPair = GetMaximaPair(e);
+ IsMaximaEdge = (!eMaxPair || !IsHorizontal(*eMaxPair));
+ }
+
+ if(IsMaximaEdge)
+ {
+ if (m_StrictSimple) m_Maxima.push_back(e->Top.X);
+ TEdge* ePrev = e->PrevInAEL;
+ DoMaxima(e);
+ if( !ePrev ) e = m_ActiveEdges;
+ else e = ePrev->NextInAEL;
+ }
+ else
+ {
+ //2. promote horizontal edges, otherwise update Curr.X and Curr.Y ...
+ if (IsIntermediate(e, topY) && IsHorizontal(*e->NextInLML))
+ {
+ UpdateEdgeIntoAEL(e);
+ if (e->OutIdx >= 0)
+ AddOutPt(e, e->Bot);
+ AddEdgeToSEL(e);
+ }
+ else
+ {
+ e->Curr.X = TopX( *e, topY );
+ e->Curr.Y = topY;
+ }
+
+ //When StrictlySimple and 'e' is being touched by another edge, then
+ //make sure both edges have a vertex here ...
+ if (m_StrictSimple)
+ {
+ TEdge* ePrev = e->PrevInAEL;
+ if ((e->OutIdx >= 0) && (e->WindDelta != 0) && ePrev && (ePrev->OutIdx >= 0) &&
+ (ePrev->Curr.X == e->Curr.X) && (ePrev->WindDelta != 0))
+ {
+ IntPoint pt = e->Curr;
+#ifdef use_xyz
+ SetZ(pt, *ePrev, *e);
+#endif
+ OutPt* op = AddOutPt(ePrev, pt);
+ OutPt* op2 = AddOutPt(e, pt);
+ m_Joins.emplace_back(Join(op, op2, pt)); //StrictlySimple (type-3) join
+ }
+ }
+
+ e = e->NextInAEL;
+ }
+ }
+
+ //3. Process horizontals at the Top of the scanbeam ...
+ std::sort(m_Maxima.begin(), m_Maxima.end());
+ ProcessHorizontals();
+ m_Maxima.clear();
+
+ //4. Promote intermediate vertices ...
+ e = m_ActiveEdges;
+ while(e)
+ {
+ if(IsIntermediate(e, topY))
+ {
+ OutPt* op = 0;
+ if( e->OutIdx >= 0 )
+ op = AddOutPt(e, e->Top);
+ UpdateEdgeIntoAEL(e);
+
+ //if output polygons share an edge, they'll need joining later ...
+ TEdge* ePrev = e->PrevInAEL;
+ TEdge* eNext = e->NextInAEL;
+ if (ePrev && ePrev->Curr.X == e->Bot.X &&
+ ePrev->Curr.Y == e->Bot.Y && op &&
+ ePrev->OutIdx >= 0 && ePrev->Curr.Y > ePrev->Top.Y &&
+ SlopesEqual(*e, *ePrev, m_UseFullRange) &&
+ (e->WindDelta != 0) && (ePrev->WindDelta != 0))
+ {
+ OutPt* op2 = AddOutPt(ePrev, e->Bot);
+ m_Joins.emplace_back(Join(op, op2, e->Top));
+ }
+ else if (eNext && eNext->Curr.X == e->Bot.X &&
+ eNext->Curr.Y == e->Bot.Y && op &&
+ eNext->OutIdx >= 0 && eNext->Curr.Y > eNext->Top.Y &&
+ SlopesEqual(*e, *eNext, m_UseFullRange) &&
+ (e->WindDelta != 0) && (eNext->WindDelta != 0))
+ {
+ OutPt* op2 = AddOutPt(eNext, e->Bot);
+ m_Joins.emplace_back(Join(op, op2, e->Top));
+ }
+ }
+ e = e->NextInAEL;
+ }
+}
+//------------------------------------------------------------------------------
+
+void Clipper::FixupOutPolyline(OutRec &outrec)
+{
+ OutPt *pp = outrec.Pts;
+ OutPt *lastPP = pp->Prev;
+ while (pp != lastPP)
+ {
+ pp = pp->Next;
+ if (pp->Pt == pp->Prev->Pt)
+ {
+ if (pp == lastPP) lastPP = pp->Prev;
+ OutPt *tmpPP = pp->Prev;
+ tmpPP->Next = pp->Next;
+ pp->Next->Prev = tmpPP;
+ this->DisposeOutPt(pp);
+ pp = tmpPP;
+ }
+ }
+
+ if (pp == pp->Prev)
+ {
+ this->DisposeOutPts(pp);
+ outrec.Pts = 0;
+ return;
+ }
+}
+//------------------------------------------------------------------------------
+
+void Clipper::FixupOutPolygon(OutRec &outrec)
+{
+ //FixupOutPolygon() - removes duplicate points and simplifies consecutive
+ //parallel edges by removing the middle vertex.
+ OutPt *lastOK = nullptr;
+ outrec.BottomPt = nullptr;
+ OutPt *pp = outrec.Pts;
+ bool preserveCol = m_PreserveCollinear || m_StrictSimple;
+
+ for (;;)
+ {
+ if (pp->Prev == pp || pp->Prev == pp->Next)
+ {
+ // Empty loop or a stick. Release the polygon.
+ this->DisposeOutPts(pp);
+ outrec.Pts = nullptr;
+ return;
+ }
+
+ //test for duplicate points and collinear edges ...
+ if ((pp->Pt == pp->Next->Pt) || (pp->Pt == pp->Prev->Pt) ||
+ (SlopesEqual(pp->Prev->Pt, pp->Pt, pp->Next->Pt, m_UseFullRange) &&
+ (!preserveCol || !Pt2IsBetweenPt1AndPt3(pp->Prev->Pt, pp->Pt, pp->Next->Pt))))
+ {
+ lastOK = nullptr;
+ OutPt *tmp = pp;
+ pp->Prev->Next = pp->Next;
+ pp->Next->Prev = pp->Prev;
+ pp = pp->Prev;
+ this->DisposeOutPt(tmp);
+ }
+ else if (pp == lastOK) break;
+ else
+ {
+ if (!lastOK) lastOK = pp;
+ pp = pp->Next;
+ }
+ }
+ outrec.Pts = pp;
+}
+//------------------------------------------------------------------------------
+
+// Count the number of points in a closed linked loop starting with Pts.
+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::BuildResult(Paths &polys)
+{
+ polys.reserve(m_PolyOuts.size());
+ for (OutRec* outRec : m_PolyOuts)
+ {
+ assert(! outRec->IsOpen);
+ if (!outRec->Pts) continue;
+ Path pg;
+ OutPt* p = outRec->Pts->Prev;
+ int cnt = PointCount(p);
+ if (cnt < 2) continue;
+ pg.reserve(cnt);
+ for (int i = 0; i < cnt; ++i)
+ {
+ pg.emplace_back(p->Pt);
+ p = p->Prev;
+ }
+ polys.emplace_back(std::move(pg));
+ }
+}
+//------------------------------------------------------------------------------
+
+void Clipper::BuildResult2(PolyTree& polytree)
+{
+ polytree.Clear();
+ polytree.AllNodes.reserve(m_PolyOuts.size());
+ //add each output polygon/contour to polytree ...
+ for (OutRec* outRec : m_PolyOuts)
+ {
+ int cnt = PointCount(outRec->Pts);
+ if ((outRec->IsOpen && cnt < 2) || (!outRec->IsOpen && cnt < 3))
+ // Ignore an invalid output loop or a polyline.
+ continue;
+
+ //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)) {
+ OutRec* orfl = outRec->FirstLeft;
+ while (orfl && ((orfl->IsHole == outRec->IsHole) || !orfl->Pts))
+ orfl = orfl->FirstLeft;
+ outRec->FirstLeft = orfl;
+ }
+
+ //nb: polytree takes ownership of all the PolyNodes
+ polytree.AllNodes.emplace_back(PolyNode());
+ PolyNode* pn = &polytree.AllNodes.back();
+ outRec->PolyNd = pn;
+ pn->Parent = 0;
+ pn->Index = 0;
+ pn->Contour.reserve(cnt);
+ OutPt *op = outRec->Pts->Prev;
+ for (int j = 0; j < cnt; j++)
+ {
+ pn->Contour.emplace_back(op->Pt);
+ op = op->Prev;
+ }
+ }
+
+ //fixup PolyNode links etc ...
+ polytree.Childs.reserve(m_PolyOuts.size());
+ for (OutRec* outRec : m_PolyOuts)
+ {
+ if (!outRec->PolyNd) continue;
+ if (outRec->IsOpen)
+ {
+ outRec->PolyNd->m_IsOpen = true;
+ polytree.AddChild(*outRec->PolyNd);
+ }
+ else if (outRec->FirstLeft && outRec->FirstLeft->PolyNd)
+ outRec->FirstLeft->PolyNd->AddChild(*outRec->PolyNd);
+ else
+ polytree.AddChild(*outRec->PolyNd);
+ }
+}
+//------------------------------------------------------------------------------
+
+inline bool E2InsertsBeforeE1(TEdge &e1, TEdge &e2)
+{
+ if (e2.Curr.X == e1.Curr.X)
+ {
+ if (e2.Top.Y > e1.Top.Y)
+ return e2.Top.X < TopX(e1, e2.Top.Y);
+ else return e1.Top.X > TopX(e2, e1.Top.Y);
+ }
+ else return e2.Curr.X < e1.Curr.X;
+}
+//------------------------------------------------------------------------------
+
+bool GetOverlap(const cInt a1, const cInt a2, const cInt b1, const cInt b2,
+ cInt& Left, cInt& Right)
+{
+ if (a1 < a2)
+ {
+ if (b1 < b2) {Left = std::max(a1,b1); Right = std::min(a2,b2);}
+ else {Left = std::max(a1,b2); Right = std::min(a2,b1);}
+ }
+ else
+ {
+ if (b1 < b2) {Left = std::max(a2,b1); Right = std::min(a1,b2);}
+ else {Left = std::max(a2,b2); Right = std::min(a1,b1);}
+ }
+ return Left < Right;
+}
+//------------------------------------------------------------------------------
+
+// Make all points of outrec point to outrec.Idx
+inline void UpdateOutPtIdxs(OutRec& outrec)
+{
+ OutPt* op = outrec.Pts;
+ do
+ {
+ op->Idx = outrec.Idx;
+ op = op->Prev;
+ }
+ while(op != outrec.Pts);
+}
+//------------------------------------------------------------------------------
+
+void Clipper::InsertEdgeIntoAEL(TEdge *edge, TEdge* startEdge)
+{
+ if(!m_ActiveEdges)
+ {
+ edge->PrevInAEL = 0;
+ edge->NextInAEL = 0;
+ m_ActiveEdges = edge;
+ }
+ else if(!startEdge && E2InsertsBeforeE1(*m_ActiveEdges, *edge))
+ {
+ edge->PrevInAEL = 0;
+ edge->NextInAEL = m_ActiveEdges;
+ m_ActiveEdges->PrevInAEL = edge;
+ m_ActiveEdges = edge;
+ }
+ else
+ {
+ if(!startEdge) startEdge = m_ActiveEdges;
+ while(startEdge->NextInAEL &&
+ !E2InsertsBeforeE1(*startEdge->NextInAEL , *edge))
+ startEdge = startEdge->NextInAEL;
+ edge->NextInAEL = startEdge->NextInAEL;
+ if(startEdge->NextInAEL) startEdge->NextInAEL->PrevInAEL = edge;
+ edge->PrevInAEL = startEdge;
+ startEdge->NextInAEL = edge;
+ }
+}
+//----------------------------------------------------------------------
+
+OutPt* Clipper::DupOutPt(OutPt* outPt, bool InsertAfter)
+{
+ OutPt* result = this->AllocateOutPt();
+ result->Pt = outPt->Pt;
+ result->Idx = outPt->Idx;
+ if (InsertAfter)
+ {
+ result->Next = outPt->Next;
+ result->Prev = outPt;
+ outPt->Next->Prev = result;
+ outPt->Next = result;
+ }
+ else
+ {
+ result->Prev = outPt->Prev;
+ result->Next = outPt;
+ outPt->Prev->Next = result;
+ outPt->Prev = result;
+ }
+ return result;
+}
+//------------------------------------------------------------------------------
+
+bool Clipper::JoinHorz(OutPt* op1, OutPt* op1b, OutPt* op2, OutPt* op2b,
+ const IntPoint &Pt, bool DiscardLeft)
+{
+ Direction Dir1 = (op1->Pt.X > op1b->Pt.X ? dRightToLeft : dLeftToRight);
+ Direction Dir2 = (op2->Pt.X > op2b->Pt.X ? dRightToLeft : dLeftToRight);
+ if (Dir1 == Dir2) return false;
+
+ //When DiscardLeft, we want Op1b to be on the Left of Op1, otherwise we
+ //want Op1b to be on the Right. (And likewise with Op2 and Op2b.)
+ //So, to facilitate this while inserting Op1b and Op2b ...
+ //when DiscardLeft, make sure we're AT or RIGHT of Pt before adding Op1b,
+ //otherwise make sure we're AT or LEFT of Pt. (Likewise with Op2b.)
+ if (Dir1 == dLeftToRight)
+ {
+ while (op1->Next->Pt.X <= Pt.X &&
+ op1->Next->Pt.X >= op1->Pt.X && op1->Next->Pt.Y == Pt.Y)
+ op1 = op1->Next;
+ if (DiscardLeft && (op1->Pt.X != Pt.X)) op1 = op1->Next;
+ op1b = this->DupOutPt(op1, !DiscardLeft);
+ if (op1b->Pt != Pt)
+ {
+ op1 = op1b;
+ op1->Pt = Pt;
+ op1b = this->DupOutPt(op1, !DiscardLeft);
+ }
+ }
+ else
+ {
+ while (op1->Next->Pt.X >= Pt.X &&
+ op1->Next->Pt.X <= op1->Pt.X && op1->Next->Pt.Y == Pt.Y)
+ op1 = op1->Next;
+ if (!DiscardLeft && (op1->Pt.X != Pt.X)) op1 = op1->Next;
+ op1b = this->DupOutPt(op1, DiscardLeft);
+ if (op1b->Pt != Pt)
+ {
+ op1 = op1b;
+ op1->Pt = Pt;
+ op1b = this->DupOutPt(op1, DiscardLeft);
+ }
+ }
+
+ if (Dir2 == dLeftToRight)
+ {
+ while (op2->Next->Pt.X <= Pt.X &&
+ op2->Next->Pt.X >= op2->Pt.X && op2->Next->Pt.Y == Pt.Y)
+ op2 = op2->Next;
+ if (DiscardLeft && (op2->Pt.X != Pt.X)) op2 = op2->Next;
+ op2b = this->DupOutPt(op2, !DiscardLeft);
+ if (op2b->Pt != Pt)
+ {
+ op2 = op2b;
+ op2->Pt = Pt;
+ op2b = this->DupOutPt(op2, !DiscardLeft);
+ };
+ } else
+ {
+ while (op2->Next->Pt.X >= Pt.X &&
+ op2->Next->Pt.X <= op2->Pt.X && op2->Next->Pt.Y == Pt.Y)
+ op2 = op2->Next;
+ if (!DiscardLeft && (op2->Pt.X != Pt.X)) op2 = op2->Next;
+ op2b = this->DupOutPt(op2, DiscardLeft);
+ if (op2b->Pt != Pt)
+ {
+ op2 = op2b;
+ op2->Pt = Pt;
+ op2b = this->DupOutPt(op2, DiscardLeft);
+ };
+ };
+
+ if ((Dir1 == dLeftToRight) == DiscardLeft)
+ {
+ op1->Prev = op2;
+ op2->Next = op1;
+ op1b->Next = op2b;
+ op2b->Prev = op1b;
+ }
+ else
+ {
+ op1->Next = op2;
+ op2->Prev = op1;
+ op1b->Prev = op2b;
+ op2b->Next = op1b;
+ }
+ return true;
+}
+//------------------------------------------------------------------------------
+
+bool Clipper::JoinPoints(Join *j, OutRec* outRec1, OutRec* outRec2)
+{
+ OutPt *op1 = j->OutPt1, *op1b;
+ OutPt *op2 = j->OutPt2, *op2b;
+
+ //There are 3 kinds of joins for output polygons ...
+ //1. Horizontal joins where Join.OutPt1 & Join.OutPt2 are vertices anywhere
+ //along (horizontal) collinear edges (& Join.OffPt is on the same horizontal).
+ //2. Non-horizontal joins where Join.OutPt1 & Join.OutPt2 are at the same
+ //location at the Bottom of the overlapping segment (& Join.OffPt is above).
+ //3. StrictSimple joins where edges touch but are not collinear and where
+ //Join.OutPt1, Join.OutPt2 & Join.OffPt all share the same point.
+ bool isHorizontal = (j->OutPt1->Pt.Y == j->OffPt.Y);
+
+ if (isHorizontal && (j->OffPt == j->OutPt1->Pt) &&
+ (j->OffPt == j->OutPt2->Pt))
+ {
+ //Strictly Simple join ...
+ if (outRec1 != outRec2) return false;
+ op1b = j->OutPt1->Next;
+ while (op1b != op1 && (op1b->Pt == j->OffPt))
+ op1b = op1b->Next;
+ bool reverse1 = (op1b->Pt.Y > j->OffPt.Y);
+ op2b = j->OutPt2->Next;
+ while (op2b != op2 && (op2b->Pt == j->OffPt))
+ op2b = op2b->Next;
+ bool reverse2 = (op2b->Pt.Y > j->OffPt.Y);
+ if (reverse1 == reverse2) return false;
+ if (reverse1)
+ {
+ op1b = this->DupOutPt(op1, false);
+ op2b = this->DupOutPt(op2, true);
+ op1->Prev = op2;
+ op2->Next = op1;
+ op1b->Next = op2b;
+ op2b->Prev = op1b;
+ j->OutPt1 = op1;
+ j->OutPt2 = op1b;
+ return true;
+ } else
+ {
+ op1b = this->DupOutPt(op1, true);
+ op2b = this->DupOutPt(op2, false);
+ op1->Next = op2;
+ op2->Prev = op1;
+ op1b->Prev = op2b;
+ op2b->Next = op1b;
+ j->OutPt1 = op1;
+ j->OutPt2 = op1b;
+ return true;
+ }
+ }
+ else if (isHorizontal)
+ {
+ //treat horizontal joins differently to non-horizontal joins since with
+ //them we're not yet sure where the overlapping is. OutPt1.Pt & OutPt2.Pt
+ //may be anywhere along the horizontal edge.
+ op1b = op1;
+ while (op1->Prev->Pt.Y == op1->Pt.Y && op1->Prev != op1b && op1->Prev != op2)
+ op1 = op1->Prev;
+ while (op1b->Next->Pt.Y == op1b->Pt.Y && op1b->Next != op1 && op1b->Next != op2)
+ op1b = op1b->Next;
+ if (op1b->Next == op1 || op1b->Next == op2) return false; //a flat 'polygon'
+
+ op2b = op2;
+ while (op2->Prev->Pt.Y == op2->Pt.Y && op2->Prev != op2b && op2->Prev != op1b)
+ op2 = op2->Prev;
+ while (op2b->Next->Pt.Y == op2b->Pt.Y && op2b->Next != op2 && op2b->Next != op1)
+ op2b = op2b->Next;
+ if (op2b->Next == op2 || op2b->Next == op1) return false; //a flat 'polygon'
+
+ cInt Left, Right;
+ //Op1 --> Op1b & Op2 --> Op2b are the extremites of the horizontal edges
+ if (!GetOverlap(op1->Pt.X, op1b->Pt.X, op2->Pt.X, op2b->Pt.X, Left, Right))
+ return false;
+
+ //DiscardLeftSide: when overlapping edges are joined, a spike will created
+ //which needs to be cleaned up. However, we don't want Op1 or Op2 caught up
+ //on the discard Side as either may still be needed for other joins ...
+ IntPoint Pt;
+ bool DiscardLeftSide;
+ if (op1->Pt.X >= Left && op1->Pt.X <= Right)
+ {
+ Pt = op1->Pt; DiscardLeftSide = (op1->Pt.X > op1b->Pt.X);
+ }
+ else if (op2->Pt.X >= Left&& op2->Pt.X <= Right)
+ {
+ Pt = op2->Pt; DiscardLeftSide = (op2->Pt.X > op2b->Pt.X);
+ }
+ else if (op1b->Pt.X >= Left && op1b->Pt.X <= Right)
+ {
+ Pt = op1b->Pt; DiscardLeftSide = op1b->Pt.X > op1->Pt.X;
+ }
+ else
+ {
+ Pt = op2b->Pt; DiscardLeftSide = (op2b->Pt.X > op2->Pt.X);
+ }
+ j->OutPt1 = op1; j->OutPt2 = op2;
+ return JoinHorz(op1, op1b, op2, op2b, Pt, DiscardLeftSide);
+ } else
+ {
+ //nb: For non-horizontal joins ...
+ // 1. Jr.OutPt1.Pt.Y == Jr.OutPt2.Pt.Y
+ // 2. Jr.OutPt1.Pt > Jr.OffPt.Y
+
+ //make sure the polygons are correctly oriented ...
+ op1b = op1->Next;
+ while ((op1b->Pt == op1->Pt) && (op1b != op1)) op1b = op1b->Next;
+ bool Reverse1 = ((op1b->Pt.Y > op1->Pt.Y) ||
+ !SlopesEqual(op1->Pt, op1b->Pt, j->OffPt, m_UseFullRange));
+ if (Reverse1)
+ {
+ op1b = op1->Prev;
+ while ((op1b->Pt == op1->Pt) && (op1b != op1)) op1b = op1b->Prev;
+ if ((op1b->Pt.Y > op1->Pt.Y) ||
+ !SlopesEqual(op1->Pt, op1b->Pt, j->OffPt, m_UseFullRange)) return false;
+ };
+ op2b = op2->Next;
+ while ((op2b->Pt == op2->Pt) && (op2b != op2))op2b = op2b->Next;
+ bool Reverse2 = ((op2b->Pt.Y > op2->Pt.Y) ||
+ !SlopesEqual(op2->Pt, op2b->Pt, j->OffPt, m_UseFullRange));
+ if (Reverse2)
+ {
+ op2b = op2->Prev;
+ while ((op2b->Pt == op2->Pt) && (op2b != op2)) op2b = op2b->Prev;
+ if ((op2b->Pt.Y > op2->Pt.Y) ||
+ !SlopesEqual(op2->Pt, op2b->Pt, j->OffPt, m_UseFullRange)) return false;
+ }
+
+ if ((op1b == op1) || (op2b == op2) || (op1b == op2b) ||
+ ((outRec1 == outRec2) && (Reverse1 == Reverse2))) return false;
+
+ if (Reverse1)
+ {
+ op1b = this->DupOutPt(op1, false);
+ op2b = this->DupOutPt(op2, true);
+ op1->Prev = op2;
+ op2->Next = op1;
+ op1b->Next = op2b;
+ op2b->Prev = op1b;
+ j->OutPt1 = op1;
+ j->OutPt2 = op1b;
+ return true;
+ } else
+ {
+ op1b = this->DupOutPt(op1, true);
+ op2b = this->DupOutPt(op2, false);
+ op1->Next = op2;
+ op2->Prev = op1;
+ op1b->Prev = op2b;
+ op2b->Next = op1b;
+ j->OutPt1 = op1;
+ j->OutPt2 = op1b;
+ return true;
+ }
+ }
+}
+//----------------------------------------------------------------------
+
+// This is potentially very expensive! O(n^3)!
+void Clipper::FixupFirstLefts1(OutRec* OldOutRec, OutRec* NewOutRec) const
+{
+ PROFILE_FUNC();
+ //tests if NewOutRec contains the polygon before reassigning FirstLeft
+ for (OutRec *outRec : m_PolyOuts)
+ {
+ if (!outRec->Pts || !outRec->FirstLeft) continue;
+ OutRec* firstLeft = outRec->FirstLeft;
+ // Skip empty polygons.
+ while (firstLeft && !firstLeft->Pts) firstLeft = firstLeft->FirstLeft;
+ if (firstLeft == OldOutRec && Poly2ContainsPoly1(outRec->Pts, NewOutRec->Pts))
+ outRec->FirstLeft = NewOutRec;
+ }
+}
+//----------------------------------------------------------------------
+
+void Clipper::FixupFirstLefts2(OutRec* OldOutRec, OutRec* NewOutRec) const
+{
+ //reassigns FirstLeft WITHOUT testing if NewOutRec contains the polygon
+ for (OutRec *outRec : m_PolyOuts)
+ if (outRec->FirstLeft == OldOutRec) outRec->FirstLeft = NewOutRec;
+}
+//----------------------------------------------------------------------
+
+void Clipper::JoinCommonEdges()
+{
+ PROFILE_FUNC();
+ for (Join &join : m_Joins)
+ {
+ OutRec *outRec1 = GetOutRec(join.OutPt1->Idx);
+ OutRec *outRec2 = GetOutRec(join.OutPt2->Idx);
+
+ if (!outRec1->Pts || !outRec2->Pts) continue;
+ if (outRec1->IsOpen || outRec2->IsOpen) 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);
+
+ if (!JoinPoints(&join, outRec1, outRec2)) continue;
+
+ if (outRec1 == outRec2)
+ {
+ //instead of joining two polygons, we've just created a new one by
+ //splitting one polygon into two.
+ outRec1->Pts = join.OutPt1;
+ outRec1->BottomPt = 0;
+ outRec2 = CreateOutRec();
+ outRec2->Pts = join.OutPt2;
+
+ //update all OutRec2.Pts Idx's ...
+ UpdateOutPtIdxs(*outRec2);
+
+ //We now need to check every OutRec.FirstLeft pointer. If it points
+ //to OutRec1 it may need to point to OutRec2 instead ...
+ if (m_UsingPolyTree)
+ for (size_t j = 0; j < m_PolyOuts.size() - 1; j++)
+ {
+ OutRec* oRec = m_PolyOuts[j];
+ OutRec* firstLeft = oRec->FirstLeft;
+ while (firstLeft && !firstLeft->Pts) firstLeft = firstLeft->FirstLeft;
+ if (!oRec->Pts || firstLeft != outRec1 ||
+ oRec->IsHole == outRec1->IsHole) continue;
+ if (Poly2ContainsPoly1(oRec->Pts, join.OutPt2))
+ oRec->FirstLeft = outRec2;
+ }
+
+ if (Poly2ContainsPoly1(outRec2->Pts, outRec1->Pts))
+ {
+ //outRec2 is contained by outRec1 ...
+ outRec2->IsHole = !outRec1->IsHole;
+ outRec2->FirstLeft = outRec1;
+
+ // For each m_PolyOuts, replace FirstLeft from outRec2 to outRec1.
+ if (m_UsingPolyTree) FixupFirstLefts2(outRec2, outRec1);
+
+ if ((outRec2->IsHole ^ m_ReverseOutput) == (Area(*outRec2) > 0))
+ ReversePolyPtLinks(outRec2->Pts);
+
+ } else if (Poly2ContainsPoly1(outRec1->Pts, outRec2->Pts))
+ {
+ //outRec1 is contained by outRec2 ...
+ outRec2->IsHole = outRec1->IsHole;
+ outRec1->IsHole = !outRec2->IsHole;
+ outRec2->FirstLeft = outRec1->FirstLeft;
+ outRec1->FirstLeft = outRec2;
+
+ // For each m_PolyOuts, replace FirstLeft from outRec1 to outRec2.
+ if (m_UsingPolyTree) FixupFirstLefts2(outRec1, outRec2);
+
+ if ((outRec1->IsHole ^ m_ReverseOutput) == (Area(*outRec1) > 0))
+ ReversePolyPtLinks(outRec1->Pts);
+ }
+ else
+ {
+ //the 2 polygons are completely separate ...
+ outRec2->IsHole = outRec1->IsHole;
+ outRec2->FirstLeft = outRec1->FirstLeft;
+
+ //fixup FirstLeft pointers that may need reassigning to OutRec2
+ // For each polygon of m_PolyOuts, replace FirstLeft from outRec1 to outRec2 if the polygon is inside outRec2.
+ //FIXME This is potentially very expensive! O(n^3)!
+ if (m_UsingPolyTree) FixupFirstLefts1(outRec1, outRec2);
+ }
+
+ } else
+ {
+ //joined 2 polygons together ...
+
+ outRec2->Pts = 0;
+ outRec2->BottomPt = 0;
+ outRec2->Idx = outRec1->Idx;
+
+ outRec1->IsHole = holeStateRec->IsHole;
+ if (holeStateRec == outRec2)
+ outRec1->FirstLeft = outRec2->FirstLeft;
+ outRec2->FirstLeft = outRec1;
+
+ // For each m_PolyOuts, replace FirstLeft from outRec2 to outRec1.
+ if (m_UsingPolyTree) FixupFirstLefts2(outRec2, outRec1);
+ }
+ }
+}
+
+//------------------------------------------------------------------------------
+// ClipperOffset support functions ...
+//------------------------------------------------------------------------------
+
+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);
+}
+
+//------------------------------------------------------------------------------
+// ClipperOffset class
+//------------------------------------------------------------------------------
+
+void ClipperOffset::Clear()
+{
+ for (int i = 0; i < m_polyNodes.ChildCount(); ++i)
+ delete m_polyNodes.Childs[i];
+ m_polyNodes.Childs.clear();
+ m_lowest.X = -1;
+}
+//------------------------------------------------------------------------------
+
+void ClipperOffset::AddPath(const Path& path, JoinType joinType, EndType endType)
+{
+ int highI = (int)path.size() - 1;
+ if (highI < 0) return;
+ PolyNode* newNode = new PolyNode();
+ newNode->m_jointype = joinType;
+ newNode->m_endtype = endType;
+
+ //strip duplicate points from path and also get index to the lowest point ...
+ bool has_shortest_edge_length = ShortestEdgeLength > 0.;
+ double shortest_edge_length2 = has_shortest_edge_length ? ShortestEdgeLength * ShortestEdgeLength : 0.;
+ if (endType == etClosedLine || endType == etClosedPolygon)
+ for (; highI > 0; -- highI) {
+ bool same = false;
+ if (has_shortest_edge_length) {
+ double dx = double(path[highI].X - path[0].X);
+ double dy = double(path[highI].Y - path[0].Y);
+ same = dx*dx + dy*dy < shortest_edge_length2;
+ } else
+ same = path[0] == path[highI];
+ if (! same)
+ break;
+ }
+ newNode->Contour.reserve(highI + 1);
+ newNode->Contour.push_back(path[0]);
+ int j = 0, k = 0;
+ for (int i = 1; i <= highI; i++) {
+ bool same = false;
+ if (has_shortest_edge_length) {
+ double dx = double(path[i].X - newNode->Contour[j].X);
+ double dy = double(path[i].Y - newNode->Contour[j].Y);
+ same = dx*dx + dy*dy < shortest_edge_length2;
+ } else
+ same = newNode->Contour[j] == path[i];
+ if (same)
+ continue;
+ j++;
+ newNode->Contour.push_back(path[i]);
+ if (path[i].Y > newNode->Contour[k].Y ||
+ (path[i].Y == newNode->Contour[k].Y &&
+ path[i].X < newNode->Contour[k].X)) k = j;
+ }
+ if (endType == etClosedPolygon && j < 2)
+ {
+ delete newNode;
+ return;
+ }
+ m_polyNodes.AddChild(*newNode);
+
+ //if this path's lowest pt is lower than all the others then update m_lowest
+ if (endType != etClosedPolygon) return;
+ if (m_lowest.X < 0)
+ m_lowest = IntPoint(m_polyNodes.ChildCount() - 1, k);
+ else
+ {
+ IntPoint ip = m_polyNodes.Childs[(int)m_lowest.X]->Contour[(int)m_lowest.Y];
+ if (newNode->Contour[k].Y > ip.Y ||
+ (newNode->Contour[k].Y == ip.Y &&
+ newNode->Contour[k].X < ip.X))
+ m_lowest = IntPoint(m_polyNodes.ChildCount() - 1, k);
+ }
+}
+//------------------------------------------------------------------------------
+
+void ClipperOffset::AddPaths(const Paths& paths, JoinType joinType, EndType endType)
+{
+ for (const Path &path : paths)
+ AddPath(path, joinType, endType);
+}
+//------------------------------------------------------------------------------
+
+void ClipperOffset::FixOrientations()
+{
+ //fixup orientations of all closed paths if the orientation of the
+ //closed path with the lowermost vertex is wrong ...
+ if (m_lowest.X >= 0 &&
+ !Orientation(m_polyNodes.Childs[(int)m_lowest.X]->Contour))
+ {
+ for (int i = 0; i < m_polyNodes.ChildCount(); ++i)
+ {
+ PolyNode& node = *m_polyNodes.Childs[i];
+ if (node.m_endtype == etClosedPolygon ||
+ (node.m_endtype == etClosedLine && Orientation(node.Contour)))
+ ReversePath(node.Contour);
+ }
+ } else
+ {
+ for (int i = 0; i < m_polyNodes.ChildCount(); ++i)
+ {
+ PolyNode& node = *m_polyNodes.Childs[i];
+ if (node.m_endtype == etClosedLine && !Orientation(node.Contour))
+ ReversePath(node.Contour);
+ }
+ }
+}
+//------------------------------------------------------------------------------
+
+void ClipperOffset::Execute(Paths& solution, double delta)
+{
+ solution.clear();
+ FixOrientations();
+ DoOffset(delta);
+
+ //now clean up 'corners' ...
+ Clipper clpr;
+ clpr.AddPaths(m_destPolys, ptSubject, true);
+ if (delta > 0)
+ {
+ clpr.Execute(ctUnion, solution, pftPositive, pftPositive);
+ }
+ else
+ {
+ IntRect r = clpr.GetBounds();
+ Path 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.AddPath(outer, ptSubject, true);
+ clpr.ReverseSolution(true);
+ clpr.Execute(ctUnion, solution, pftNegative, pftNegative);
+ if (solution.size() > 0) solution.erase(solution.begin());
+ }
+}
+//------------------------------------------------------------------------------
+
+void ClipperOffset::Execute(PolyTree& solution, double delta)
+{
+ solution.Clear();
+ FixOrientations();
+ DoOffset(delta);
+
+ //now clean up 'corners' ...
+ Clipper clpr;
+ clpr.AddPaths(m_destPolys, ptSubject, true);
+ if (delta > 0)
+ {
+ clpr.Execute(ctUnion, solution, pftPositive, pftPositive);
+ }
+ else
+ {
+ IntRect r = clpr.GetBounds();
+ Path 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.AddPath(outer, ptSubject, true);
+ clpr.ReverseSolution(true);
+ clpr.Execute(ctUnion, solution, pftNegative, pftNegative);
+ //remove the outer PolyNode rectangle ...
+ if (solution.ChildCount() == 1 && solution.Childs[0]->ChildCount() > 0)
+ {
+ PolyNode* outerNode = solution.Childs[0];
+ solution.Childs.reserve(outerNode->ChildCount());
+ solution.Childs[0] = outerNode->Childs[0];
+ solution.Childs[0]->Parent = outerNode->Parent;
+ for (int i = 1; i < outerNode->ChildCount(); ++i)
+ solution.AddChild(*outerNode->Childs[i]);
+ }
+ else
+ solution.Clear();
+ }
+}
+//------------------------------------------------------------------------------
+
+void ClipperOffset::DoOffset(double delta)
+{
+ m_destPolys.clear();
+ m_delta = delta;
+
+ //if Zero offset, just copy any CLOSED polygons to m_p and return ...
+ if (NEAR_ZERO(delta))
+ {
+ m_destPolys.reserve(m_polyNodes.ChildCount());
+ for (int i = 0; i < m_polyNodes.ChildCount(); i++)
+ {
+ PolyNode& node = *m_polyNodes.Childs[i];
+ if (node.m_endtype == etClosedPolygon)
+ m_destPolys.push_back(node.Contour);
+ }
+ return;
+ }
+
+ //see offset_triginometry3.svg in the documentation folder ...
+ if (MiterLimit > 2) m_miterLim = 2/(MiterLimit * MiterLimit);
+ else m_miterLim = 0.5;
+
+ double y;
+ if (ArcTolerance <= 0.0) y = def_arc_tolerance;
+ else if (ArcTolerance > std::fabs(delta) * def_arc_tolerance)
+ y = std::fabs(delta) * def_arc_tolerance;
+ else y = ArcTolerance;
+ //see offset_triginometry2.svg in the documentation folder ...
+ double steps = pi / std::acos(1 - y / std::fabs(delta));
+ if (steps > std::fabs(delta) * pi)
+ steps = std::fabs(delta) * pi; //ie excessive precision check
+ m_sin = std::sin(two_pi / steps);
+ m_cos = std::cos(two_pi / steps);
+ m_StepsPerRad = steps / two_pi;
+ if (delta < 0.0) m_sin = -m_sin;
+
+ m_destPolys.reserve(m_polyNodes.ChildCount() * 2);
+ for (int i = 0; i < m_polyNodes.ChildCount(); i++)
+ {
+ PolyNode& node = *m_polyNodes.Childs[i];
+ m_srcPoly = node.Contour;
+
+ int len = (int)m_srcPoly.size();
+ if (len == 0 || (delta <= 0 && (len < 3 || node.m_endtype != etClosedPolygon)))
+ continue;
+
+ m_destPoly.clear();
+ if (len == 1)
+ {
+ if (node.m_jointype == jtRound)
+ {
+ double X = 1.0, Y = 0.0;
+ for (cInt j = 1; j <= steps; j++)
+ {
+ m_destPoly.push_back(IntPoint(
+ Round(m_srcPoly[0].X + X * delta),
+ Round(m_srcPoly[0].Y + Y * delta)));
+ double X2 = X;
+ X = X * m_cos - m_sin * Y;
+ Y = X2 * m_sin + Y * m_cos;
+ }
+ }
+ else
+ {
+ double X = -1.0, Y = -1.0;
+ for (int j = 0; j < 4; ++j)
+ {
+ m_destPoly.push_back(IntPoint(
+ Round(m_srcPoly[0].X + X * delta),
+ Round(m_srcPoly[0].Y + Y * delta)));
+ if (X < 0) X = 1;
+ else if (Y < 0) Y = 1;
+ else X = -1;
+ }
+ }
+ m_destPolys.push_back(m_destPoly);
+ continue;
+ }
+ //build m_normals ...
+ m_normals.clear();
+ m_normals.reserve(len);
+ for (int j = 0; j < len - 1; ++j)
+ m_normals.push_back(GetUnitNormal(m_srcPoly[j], m_srcPoly[j + 1]));
+ if (node.m_endtype == etClosedLine || node.m_endtype == etClosedPolygon)
+ m_normals.push_back(GetUnitNormal(m_srcPoly[len - 1], m_srcPoly[0]));
+ else
+ m_normals.push_back(DoublePoint(m_normals[len - 2]));
+
+ if (node.m_endtype == etClosedPolygon)
+ {
+ int k = len - 1;
+ for (int j = 0; j < len; ++j)
+ OffsetPoint(j, k, node.m_jointype);
+ m_destPolys.push_back(m_destPoly);
+ }
+ else if (node.m_endtype == etClosedLine)
+ {
+ int k = len - 1;
+ for (int j = 0; j < len; ++j)
+ OffsetPoint(j, k, node.m_jointype);
+ m_destPolys.push_back(m_destPoly);
+ m_destPoly.clear();
+ //re-build m_normals ...
+ DoublePoint n = m_normals[len -1];
+ for (int j = len - 1; j > 0; j--)
+ m_normals[j] = DoublePoint(-m_normals[j - 1].X, -m_normals[j - 1].Y);
+ m_normals[0] = DoublePoint(-n.X, -n.Y);
+ k = 0;
+ for (int j = len - 1; j >= 0; j--)
+ OffsetPoint(j, k, node.m_jointype);
+ m_destPolys.push_back(m_destPoly);
+ }
+ else
+ {
+ int k = 0;
+ for (int j = 1; j < len - 1; ++j)
+ OffsetPoint(j, k, node.m_jointype);
+
+ IntPoint pt1;
+ if (node.m_endtype == etOpenButt)
+ {
+ int j = len - 1;
+ pt1 = IntPoint(Round(m_srcPoly[j].X + m_normals[j].X *
+ delta), Round(m_srcPoly[j].Y + m_normals[j].Y * delta));
+ m_destPoly.push_back(pt1);
+ pt1 = IntPoint(Round(m_srcPoly[j].X - m_normals[j].X *
+ delta), Round(m_srcPoly[j].Y - m_normals[j].Y * delta));
+ m_destPoly.push_back(pt1);
+ }
+ else
+ {
+ int j = len - 1;
+ k = len - 2;
+ m_sinA = 0;
+ m_normals[j] = DoublePoint(-m_normals[j].X, -m_normals[j].Y);
+ if (node.m_endtype == etOpenSquare)
+ DoSquare(j, k);
+ else
+ DoRound(j, k);
+ }
+
+ //re-build m_normals ...
+ for (int j = len - 1; j > 0; j--)
+ m_normals[j] = DoublePoint(-m_normals[j - 1].X, -m_normals[j - 1].Y);
+ m_normals[0] = DoublePoint(-m_normals[1].X, -m_normals[1].Y);
+
+ k = len - 1;
+ for (int j = k - 1; j > 0; --j) OffsetPoint(j, k, node.m_jointype);
+
+ if (node.m_endtype == etOpenButt)
+ {
+ pt1 = IntPoint(Round(m_srcPoly[0].X - m_normals[0].X * delta),
+ Round(m_srcPoly[0].Y - m_normals[0].Y * delta));
+ m_destPoly.push_back(pt1);
+ pt1 = IntPoint(Round(m_srcPoly[0].X + m_normals[0].X * delta),
+ Round(m_srcPoly[0].Y + m_normals[0].Y * delta));
+ m_destPoly.push_back(pt1);
+ }
+ else
+ {
+ k = 1;
+ m_sinA = 0;
+ if (node.m_endtype == etOpenSquare)
+ DoSquare(0, 1);
+ else
+ DoRound(0, 1);
+ }
+ m_destPolys.push_back(m_destPoly);
+ }
+ }
+}
+//------------------------------------------------------------------------------
+
+void ClipperOffset::OffsetPoint(int j, int& k, JoinType jointype)
+{
+ //cross product ...
+ m_sinA = (m_normals[k].X * m_normals[j].Y - m_normals[j].X * m_normals[k].Y);
+ if (std::fabs(m_sinA * m_delta) < 1.0)
+ {
+ //dot product ...
+ double cosA = (m_normals[k].X * m_normals[j].X + m_normals[j].Y * m_normals[k].Y );
+ if (cosA > 0) // angle => 0 degrees
+ {
+ m_destPoly.push_back(IntPoint(Round(m_srcPoly[j].X + m_normals[k].X * m_delta),
+ Round(m_srcPoly[j].Y + m_normals[k].Y * m_delta)));
+ return;
+ }
+ //else angle => 180 degrees
+ }
+ else if (m_sinA > 1.0) m_sinA = 1.0;
+ else if (m_sinA < -1.0) m_sinA = -1.0;
+
+ if (m_sinA * m_delta < 0)
+ {
+ m_destPoly.push_back(IntPoint(Round(m_srcPoly[j].X + m_normals[k].X * m_delta),
+ Round(m_srcPoly[j].Y + m_normals[k].Y * m_delta)));
+ m_destPoly.push_back(m_srcPoly[j]);
+ m_destPoly.push_back(IntPoint(Round(m_srcPoly[j].X + m_normals[j].X * m_delta),
+ Round(m_srcPoly[j].Y + m_normals[j].Y * m_delta)));
+ }
+ else
+ switch (jointype)
+ {
+ case jtMiter:
+ {
+ double r = 1 + (m_normals[j].X * m_normals[k].X +
+ m_normals[j].Y * m_normals[k].Y);
+ if (r >= m_miterLim) DoMiter(j, k, r); else DoSquare(j, k);
+ break;
+ }
+ case jtSquare: DoSquare(j, k); break;
+ case jtRound: DoRound(j, k); break;
+ }
+ k = j;
+}
+//------------------------------------------------------------------------------
+
+void ClipperOffset::DoSquare(int j, int k)
+{
+ double dx = std::tan(std::atan2(m_sinA,
+ m_normals[k].X * m_normals[j].X + m_normals[k].Y * m_normals[j].Y) / 4);
+ m_destPoly.push_back(IntPoint(
+ Round(m_srcPoly[j].X + m_delta * (m_normals[k].X - m_normals[k].Y * dx)),
+ Round(m_srcPoly[j].Y + m_delta * (m_normals[k].Y + m_normals[k].X * dx))));
+ m_destPoly.push_back(IntPoint(
+ Round(m_srcPoly[j].X + m_delta * (m_normals[j].X + m_normals[j].Y * dx)),
+ Round(m_srcPoly[j].Y + m_delta * (m_normals[j].Y - m_normals[j].X * dx))));
+}
+//------------------------------------------------------------------------------
+
+void ClipperOffset::DoMiter(int j, int k, double r)
+{
+ double q = m_delta / r;
+ m_destPoly.push_back(IntPoint(Round(m_srcPoly[j].X + (m_normals[k].X + m_normals[j].X) * q),
+ Round(m_srcPoly[j].Y + (m_normals[k].Y + m_normals[j].Y) * q)));
+}
+//------------------------------------------------------------------------------
+
+void ClipperOffset::DoRound(int j, int k)
+{
+ double a = std::atan2(m_sinA,
+ m_normals[k].X * m_normals[j].X + m_normals[k].Y * m_normals[j].Y);
+ int steps = std::max((int)Round(m_StepsPerRad * std::fabs(a)), 1);
+
+ double X = m_normals[k].X, Y = m_normals[k].Y, X2;
+ for (int i = 0; i < steps; ++i)
+ {
+ m_destPoly.push_back(IntPoint(
+ Round(m_srcPoly[j].X + X * m_delta),
+ Round(m_srcPoly[j].Y + Y * m_delta)));
+ X2 = X;
+ X = X * m_cos - m_sin * Y;
+ Y = X2 * m_sin + Y * m_cos;
+ }
+ m_destPoly.push_back(IntPoint(
+ Round(m_srcPoly[j].X + m_normals[j].X * m_delta),
+ Round(m_srcPoly[j].Y + m_normals[j].Y * m_delta)));
+}
+
+//------------------------------------------------------------------------------
+// Miscellaneous public functions
+//------------------------------------------------------------------------------
+
+// Called by Clipper::ExecuteInternal()
+// For each polygon, search for exactly duplicate non-successive points.
+// If such a point is found, the loop is split into two pieces.
+// Search for the duplicate points is O(n^2)!
+// http://www.angusj.com/delphi/clipper/documentation/Docs/Units/ClipperLib/Classes/Clipper/Properties/StrictlySimple.htm
+void Clipper::DoSimplePolygons()
+{
+ PROFILE_FUNC();
+ size_t i = 0;
+ while (i < m_PolyOuts.size())
+ {
+ OutRec* outrec = m_PolyOuts[i++];
+ OutPt* op = outrec->Pts;
+ if (!op || outrec->IsOpen) continue;
+ do //for each Pt in Polygon until duplicate found do ...
+ {
+ OutPt* op2 = op->Next;
+ while (op2 != outrec->Pts)
+ {
+ if ((op->Pt == op2->Pt) && op2->Next != op && op2->Prev != op)
+ {
+ //split the polygon into two ...
+ OutPt* op3 = op->Prev;
+ OutPt* op4 = op2->Prev;
+ op->Prev = op4;
+ op4->Next = op;
+ op2->Prev = op3;
+ op3->Next = op2;
+
+ outrec->Pts = op;
+ OutRec* outrec2 = CreateOutRec();
+ outrec2->Pts = op2;
+ UpdateOutPtIdxs(*outrec2);
+ if (Poly2ContainsPoly1(outrec2->Pts, outrec->Pts))
+ {
+ //OutRec2 is contained by OutRec1 ...
+ outrec2->IsHole = !outrec->IsHole;
+ outrec2->FirstLeft = outrec;
+ // For each m_PolyOuts, replace FirstLeft from outRec2 to outrec.
+ if (m_UsingPolyTree) FixupFirstLefts2(outrec2, outrec);
+ }
+ else
+ if (Poly2ContainsPoly1(outrec->Pts, outrec2->Pts))
+ {
+ //OutRec1 is contained by OutRec2 ...
+ outrec2->IsHole = outrec->IsHole;
+ outrec->IsHole = !outrec2->IsHole;
+ outrec2->FirstLeft = outrec->FirstLeft;
+ outrec->FirstLeft = outrec2;
+ // For each m_PolyOuts, replace FirstLeft from outrec to outrec2.
+ if (m_UsingPolyTree) FixupFirstLefts2(outrec, outrec2);
+ }
+ else
+ {
+ //the 2 polygons are separate ...
+ outrec2->IsHole = outrec->IsHole;
+ outrec2->FirstLeft = outrec->FirstLeft;
+ // For each polygon of m_PolyOuts, replace FirstLeft from outrec to outrec2 if the polygon is inside outRec2.
+ //FIXME This is potentially very expensive! O(n^3)!
+ if (m_UsingPolyTree) FixupFirstLefts1(outrec, outrec2);
+ }
+ op2 = op; //ie get ready for the Next iteration
+ }
+ op2 = op2->Next;
+ }
+ op = op->Next;
+ }
+ while (op != outrec->Pts);
+ }
+}
+//------------------------------------------------------------------------------
+
+void ReversePath(Path& p)
+{
+ std::reverse(p.begin(), p.end());
+}
+//------------------------------------------------------------------------------
+
+void ReversePaths(Paths& p)
+{
+ for (Paths::size_type i = 0; i < p.size(); ++i)
+ ReversePath(p[i]);
+}
+//------------------------------------------------------------------------------
+
+void SimplifyPolygon(const Path &in_poly, Paths &out_polys, PolyFillType fillType)
+{
+ Clipper c;
+ c.StrictlySimple(true);
+ c.AddPath(in_poly, ptSubject, true);
+ c.Execute(ctUnion, out_polys, fillType, fillType);
+}
+//------------------------------------------------------------------------------
+
+void SimplifyPolygons(const Paths &in_polys, Paths &out_polys, PolyFillType fillType)
+{
+ Clipper c;
+ c.StrictlySimple(true);
+ c.AddPaths(in_polys, ptSubject, true);
+ c.Execute(ctUnion, out_polys, fillType, fillType);
+}
+//------------------------------------------------------------------------------
+
+void SimplifyPolygons(Paths &polys, PolyFillType fillType)
+{
+ SimplifyPolygons(polys, polys, fillType);
+}
+//------------------------------------------------------------------------------
+
+inline double DistanceSqrd(const IntPoint& pt1, const IntPoint& pt2)
+{
+ double Dx = ((double)pt1.X - pt2.X);
+ double dy = ((double)pt1.Y - pt2.Y);
+ return (Dx*Dx + dy*dy);
+}
+//------------------------------------------------------------------------------
+
+double DistanceFromLineSqrd(
+ const IntPoint& pt, const IntPoint& ln1, const IntPoint& ln2)
+{
+ //The equation of a line in general form (Ax + By + C = 0)
+ //given 2 points (x¹,y¹) & (x²,y²) is ...
+ //(y¹ - y²)x + (x² - x¹)y + (y² - y¹)x¹ - (x² - x¹)y¹ = 0
+ //A = (y¹ - y²); B = (x² - x¹); C = (y² - y¹)x¹ - (x² - x¹)y¹
+ //perpendicular distance of point (x³,y³) = (Ax³ + By³ + C)/Sqrt(A² + B²)
+ //see http://en.wikipedia.org/wiki/Perpendicular_distance
+ double A = double(ln1.Y - ln2.Y);
+ double B = double(ln2.X - ln1.X);
+ double C = A * ln1.X + B * ln1.Y;
+ C = A * pt.X + B * pt.Y - C;
+ return (C * C) / (A * A + B * B);
+}
+//---------------------------------------------------------------------------
+
+bool SlopesNearCollinear(const IntPoint& pt1,
+ const IntPoint& pt2, const IntPoint& pt3, double distSqrd)
+{
+ //this function is more accurate when the point that's geometrically
+ //between the other 2 points is the one that's tested for distance.
+ //ie makes it more likely to pick up 'spikes' ...
+ if (std::abs(pt1.X - pt2.X) > std::abs(pt1.Y - pt2.Y))
+ {
+ if ((pt1.X > pt2.X) == (pt1.X < pt3.X))
+ return DistanceFromLineSqrd(pt1, pt2, pt3) < distSqrd;
+ else if ((pt2.X > pt1.X) == (pt2.X < pt3.X))
+ return DistanceFromLineSqrd(pt2, pt1, pt3) < distSqrd;
+ else
+ return DistanceFromLineSqrd(pt3, pt1, pt2) < distSqrd;
+ }
+ else
+ {
+ if ((pt1.Y > pt2.Y) == (pt1.Y < pt3.Y))
+ return DistanceFromLineSqrd(pt1, pt2, pt3) < distSqrd;
+ else if ((pt2.Y > pt1.Y) == (pt2.Y < pt3.Y))
+ return DistanceFromLineSqrd(pt2, pt1, pt3) < distSqrd;
+ else
+ return DistanceFromLineSqrd(pt3, pt1, pt2) < distSqrd;
+ }
+}
+//------------------------------------------------------------------------------
+
+bool PointsAreClose(IntPoint pt1, IntPoint pt2, double distSqrd)
+{
+ double Dx = (double)pt1.X - pt2.X;
+ double dy = (double)pt1.Y - pt2.Y;
+ return ((Dx * Dx) + (dy * dy) <= distSqrd);
+}
+//------------------------------------------------------------------------------
+
+OutPt* ExcludeOp(OutPt* op)
+{
+ OutPt* result = op->Prev;
+ result->Next = op->Next;
+ op->Next->Prev = result;
+ result->Idx = 0;
+ return result;
+}
+//------------------------------------------------------------------------------
+
+// Simplify a polygon using a linked list of points.
+void CleanPolygon(const Path& in_poly, Path& out_poly, double distance)
+{
+ //distance = proximity in units/pixels below which vertices
+ //will be stripped. Default ~= sqrt(2).
+
+ size_t size = in_poly.size();
+
+ if (size == 0)
+ {
+ out_poly.clear();
+ return;
+ }
+
+ std::vector<OutPt> outPts(size);
+ for (size_t i = 0; i < size; ++i)
+ {
+ outPts[i].Pt = in_poly[i];
+ outPts[i].Next = &outPts[(i + 1) % size];
+ outPts[i].Next->Prev = &outPts[i];
+ outPts[i].Idx = 0;
+ }
+
+ double distSqrd = distance * distance;
+ OutPt* op = &outPts[0];
+ while (op->Idx == 0 && op->Next != op->Prev)
+ {
+ if (PointsAreClose(op->Pt, op->Prev->Pt, distSqrd))
+ {
+ op = ExcludeOp(op);
+ size--;
+ }
+ else if (PointsAreClose(op->Prev->Pt, op->Next->Pt, distSqrd))
+ {
+ ExcludeOp(op->Next);
+ op = ExcludeOp(op);
+ size -= 2;
+ }
+ else if (SlopesNearCollinear(op->Prev->Pt, op->Pt, op->Next->Pt, distSqrd))
+ {
+ op = ExcludeOp(op);
+ size--;
+ }
+ else
+ {
+ op->Idx = 1;
+ op = op->Next;
+ }
+ }
+
+ if (size < 3) size = 0;
+ out_poly.resize(size);
+ for (size_t i = 0; i < size; ++i)
+ {
+ out_poly[i] = op->Pt;
+ op = op->Next;
+ }
+}
+//------------------------------------------------------------------------------
+
+void CleanPolygon(Path& poly, double distance)
+{
+ CleanPolygon(poly, poly, distance);
+}
+//------------------------------------------------------------------------------
+
+void CleanPolygons(const Paths& in_polys, Paths& out_polys, double distance)
+{
+ for (Paths::size_type i = 0; i < in_polys.size(); ++i)
+ CleanPolygon(in_polys[i], out_polys[i], distance);
+}
+//------------------------------------------------------------------------------
+
+void CleanPolygons(Paths& polys, double distance)
+{
+ CleanPolygons(polys, polys, distance);
+}
+//------------------------------------------------------------------------------
+
+void Minkowski(const Path& poly, const Path& path,
+ Paths& solution, bool isSum, bool isClosed)
+{
+ int delta = (isClosed ? 1 : 0);
+ size_t polyCnt = poly.size();
+ size_t pathCnt = path.size();
+ Paths pp;
+ pp.reserve(pathCnt);
+ if (isSum)
+ for (size_t i = 0; i < pathCnt; ++i)
+ {
+ Path p;
+ p.reserve(polyCnt);
+ for (size_t j = 0; j < poly.size(); ++j)
+ p.push_back(IntPoint(path[i].X + poly[j].X, path[i].Y + poly[j].Y));
+ pp.push_back(p);
+ }
+ else
+ for (size_t i = 0; i < pathCnt; ++i)
+ {
+ Path p;
+ p.reserve(polyCnt);
+ for (size_t j = 0; j < poly.size(); ++j)
+ p.push_back(IntPoint(path[i].X - poly[j].X, path[i].Y - poly[j].Y));
+ pp.push_back(p);
+ }
+
+ solution.clear();
+ solution.reserve((pathCnt + delta) * (polyCnt + 1));
+ for (size_t i = 0; i < pathCnt - 1 + delta; ++i)
+ for (size_t j = 0; j < polyCnt; ++j)
+ {
+ Path quad;
+ quad.reserve(4);
+ quad.push_back(pp[i % pathCnt][j % polyCnt]);
+ quad.push_back(pp[(i + 1) % pathCnt][j % polyCnt]);
+ quad.push_back(pp[(i + 1) % pathCnt][(j + 1) % polyCnt]);
+ quad.push_back(pp[i % pathCnt][(j + 1) % polyCnt]);
+ if (!Orientation(quad)) ReversePath(quad);
+ solution.push_back(quad);
+ }
+}
+//------------------------------------------------------------------------------
+
+void MinkowskiSum(const Path& pattern, const Path& path, Paths& solution, bool pathIsClosed)
+{
+ Minkowski(pattern, path, solution, true, pathIsClosed);
+ Clipper c;
+ c.AddPaths(solution, ptSubject, true);
+ c.Execute(ctUnion, solution, pftNonZero, pftNonZero);
+}
+//------------------------------------------------------------------------------
+
+void TranslatePath(const Path& input, Path& output, const IntPoint& delta)
+{
+ //precondition: input != output
+ output.resize(input.size());
+ for (size_t i = 0; i < input.size(); ++i)
+ output[i] = IntPoint(input[i].X + delta.X, input[i].Y + delta.Y);
+}
+//------------------------------------------------------------------------------
+
+void MinkowskiSum(const Path& pattern, const Paths& paths, Paths& solution, bool pathIsClosed)
+{
+ Clipper c;
+ for (size_t i = 0; i < paths.size(); ++i)
+ {
+ Paths tmp;
+ Minkowski(pattern, paths[i], tmp, true, pathIsClosed);
+ c.AddPaths(tmp, ptSubject, true);
+ if (pathIsClosed)
+ {
+ Path tmp2;
+ TranslatePath(paths[i], tmp2, pattern[0]);
+ c.AddPath(tmp2, ptClip, true);
+ }
+ }
+ c.Execute(ctUnion, solution, pftNonZero, pftNonZero);
+}
+//------------------------------------------------------------------------------
+
+void MinkowskiDiff(const Path& poly1, const Path& poly2, Paths& solution)
+{
+ Minkowski(poly1, poly2, solution, false, true);
+ Clipper c;
+ c.AddPaths(solution, ptSubject, true);
+ c.Execute(ctUnion, solution, pftNonZero, pftNonZero);
+}
+//------------------------------------------------------------------------------
+
+enum NodeType {ntAny, ntOpen, ntClosed};
+
+void AddPolyNodeToPaths(const PolyNode& polynode, NodeType nodetype, Paths& paths)
+{
+ bool match = true;
+ if (nodetype == ntClosed) match = !polynode.IsOpen();
+ else if (nodetype == ntOpen) return;
+
+ if (!polynode.Contour.empty() && match)
+ paths.push_back(polynode.Contour);
+ for (int i = 0; i < polynode.ChildCount(); ++i)
+ AddPolyNodeToPaths(*polynode.Childs[i], nodetype, paths);
+}
+//------------------------------------------------------------------------------
+
+void PolyTreeToPaths(const PolyTree& polytree, Paths& paths)
+{
+ paths.resize(0);
+ paths.reserve(polytree.Total());
+ AddPolyNodeToPaths(polytree, ntAny, paths);
+}
+//------------------------------------------------------------------------------
+
+void ClosedPathsFromPolyTree(const PolyTree& polytree, Paths& paths)
+{
+ paths.resize(0);
+ paths.reserve(polytree.Total());
+ AddPolyNodeToPaths(polytree, ntClosed, paths);
+}
+//------------------------------------------------------------------------------
+
+void OpenPathsFromPolyTree(PolyTree& polytree, Paths& paths)
+{
+ paths.resize(0);
+ paths.reserve(polytree.Total());
+ //Open paths are top level only, so ...
+ for (int i = 0; i < polytree.ChildCount(); ++i)
+ if (polytree.Childs[i]->IsOpen())
+ paths.push_back(polytree.Childs[i]->Contour);
+}
+//------------------------------------------------------------------------------
+
+std::ostream& operator <<(std::ostream &s, const IntPoint &p)
+{
+ s << "(" << p.X << "," << p.Y << ")";
+ return s;
+}
+//------------------------------------------------------------------------------
+
+std::ostream& operator <<(std::ostream &s, const Path &p)
+{
+ if (p.empty()) return s;
+ Path::size_type last = p.size() -1;
+ for (Path::size_type i = 0; i < last; i++)
+ s << "(" << p[i].X << "," << p[i].Y << "), ";
+ s << "(" << p[last].X << "," << p[last].Y << ")\n";
+ return s;
+}
+//------------------------------------------------------------------------------
+
+std::ostream& operator <<(std::ostream &s, const Paths &p)
+{
+ for (Paths::size_type i = 0; i < p.size(); i++)
+ s << p[i];
+ s << "\n";
+ return s;
+}
+//------------------------------------------------------------------------------
+
+} //ClipperLib namespace
diff --git a/xs/src/clipper.hpp b/src/clipper/clipper.hpp
index 2e7069619..8a28fe46f 100644
--- a/xs/src/clipper.hpp
+++ b/src/clipper/clipper.hpp
@@ -1,487 +1,487 @@
-/*******************************************************************************
-* *
-* Author : Angus Johnson *
-* Version : 6.2.9 *
-* Date : 16 February 2015 *
-* Website : http://www.angusj.com *
-* Copyright : Angus Johnson 2010-2015 *
-* *
-* 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 <inttypes.h>
-
-#define CLIPPER_VERSION "6.2.6"
-
-//use_xyz: adds a Z member to IntPoint. Adds a minor cost to perfomance.
-//#define use_xyz
-
-//use_lines: Enables line clipping. Adds a very minor cost to performance.
-#define use_lines
-
-//use_deprecated: Enables temporary support for the obsolete functions
-//#define use_deprecated
-
-#include <vector>
-#include <deque>
-#include <stdexcept>
-#include <cstring>
-#include <cstdlib>
-#include <ostream>
-#include <functional>
-#include <queue>
-
-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 };
-
-// Point coordinate type
-typedef int64_t cInt;
-// Maximum cInt value to allow a cross product calculation using 32bit expressions.
-static cInt const loRange = 0x3FFFFFFF;
-// Maximum allowed cInt value.
-static cInt const hiRange = 0x3FFFFFFFFFFFFFFFLL;
-
-struct IntPoint {
- cInt X;
- cInt Y;
-#ifdef use_xyz
- cInt Z;
- IntPoint(cInt x = 0, cInt y = 0, cInt z = 0): X(x), Y(y), Z(z) {};
-#else
- IntPoint(cInt x = 0, cInt y = 0): X(x), Y(y) {};
-#endif
-
- friend inline bool operator== (const IntPoint& a, const IntPoint& b)
- {
- return a.X == b.X && a.Y == b.Y;
- }
- friend inline bool operator!= (const IntPoint& a, const IntPoint& b)
- {
- return a.X != b.X || a.Y != b.Y;
- }
-};
-//------------------------------------------------------------------------------
-
-typedef std::vector< IntPoint > Path;
-typedef std::vector< Path > Paths;
-
-inline Path& operator <<(Path& poly, const IntPoint& p) {poly.push_back(p); return poly;}
-inline Paths& operator <<(Paths& polys, const Path& p) {polys.push_back(p); return polys;}
-
-std::ostream& operator <<(std::ostream &s, const IntPoint &p);
-std::ostream& operator <<(std::ostream &s, const Path &p);
-std::ostream& operator <<(std::ostream &s, const Paths &p);
-
-struct DoublePoint
-{
- double X;
- double Y;
- DoublePoint(double x = 0, double y = 0) : X(x), Y(y) {}
- DoublePoint(IntPoint ip) : X((double)ip.X), Y((double)ip.Y) {}
-};
-//------------------------------------------------------------------------------
-
-#ifdef use_xyz
-typedef void (*ZFillCallback)(IntPoint& e1bot, IntPoint& e1top, IntPoint& e2bot, IntPoint& e2top, IntPoint& pt);
-#endif
-
-enum InitOptions {ioReverseSolution = 1, ioStrictlySimple = 2, ioPreserveCollinear = 4};
-enum JoinType {jtSquare, jtRound, jtMiter};
-enum EndType {etClosedPolygon, etClosedLine, etOpenButt, etOpenSquare, etOpenRound};
-
-class PolyNode;
-typedef std::vector< PolyNode* > PolyNodes;
-
-class PolyNode
-{
-public:
- PolyNode() : Childs(), Parent(0), Index(0), m_IsOpen(false) {}
- virtual ~PolyNode(){};
- Path Contour;
- PolyNodes Childs;
- PolyNode* Parent;
- // Traversal of the polygon tree in a depth first fashion.
- PolyNode* GetNext() const { return Childs.empty() ? GetNextSiblingUp() : Childs.front(); }
- bool IsHole() const;
- bool IsOpen() const { return m_IsOpen; }
- int ChildCount() const { return (int)Childs.size(); }
-private:
- unsigned Index; //node index in Parent.Childs
- bool m_IsOpen;
- JoinType m_jointype;
- EndType m_endtype;
- PolyNode* GetNextSiblingUp() const { return Parent ? ((Index == Parent->Childs.size() - 1) ? Parent->GetNextSiblingUp() : Parent->Childs[Index + 1]) : nullptr; }
- void AddChild(PolyNode& child);
- friend class Clipper; //to access Index
- friend class ClipperOffset;
- friend class PolyTree; //to implement the PolyTree::move operator
-};
-
-class PolyTree: public PolyNode
-{
-public:
- PolyTree() {}
- PolyTree(PolyTree &&src) { *this = std::move(src); }
- virtual ~PolyTree(){Clear();};
- PolyTree& operator=(PolyTree &&src) {
- AllNodes = std::move(src.AllNodes);
- Contour = std::move(src.Contour);
- Childs = std::move(src.Childs);
- Parent = nullptr;
- Index = src.Index;
- m_IsOpen = src.m_IsOpen;
- m_jointype = src.m_jointype;
- m_endtype = src.m_endtype;
- for (size_t i = 0; i < Childs.size(); ++ i)
- Childs[i]->Parent = this;
- return *this;
- }
- PolyNode* GetFirst() const { return Childs.empty() ? nullptr : Childs.front(); }
- void Clear() { AllNodes.clear(); Childs.clear(); }
- int Total() const;
-private:
- PolyTree(const PolyTree &src) = delete;
- PolyTree& operator=(const PolyTree &src) = delete;
- std::vector<PolyNode> AllNodes;
- friend class Clipper; //to access AllNodes
-};
-
-double Area(const Path &poly);
-inline bool Orientation(const Path &poly) { return Area(poly) >= 0; }
-int PointInPolygon(const IntPoint &pt, const Path &path);
-
-void SimplifyPolygon(const Path &in_poly, Paths &out_polys, PolyFillType fillType = pftEvenOdd);
-void SimplifyPolygons(const Paths &in_polys, Paths &out_polys, PolyFillType fillType = pftEvenOdd);
-void SimplifyPolygons(Paths &polys, PolyFillType fillType = pftEvenOdd);
-
-void CleanPolygon(const Path& in_poly, Path& out_poly, double distance = 1.415);
-void CleanPolygon(Path& poly, double distance = 1.415);
-void CleanPolygons(const Paths& in_polys, Paths& out_polys, double distance = 1.415);
-void CleanPolygons(Paths& polys, double distance = 1.415);
-
-void MinkowskiSum(const Path& pattern, const Path& path, Paths& solution, bool pathIsClosed);
-void MinkowskiSum(const Path& pattern, const Paths& paths, Paths& solution, bool pathIsClosed);
-void MinkowskiDiff(const Path& poly1, const Path& poly2, Paths& solution);
-
-void PolyTreeToPaths(const PolyTree& polytree, Paths& paths);
-void ClosedPathsFromPolyTree(const PolyTree& polytree, Paths& paths);
-void OpenPathsFromPolyTree(PolyTree& polytree, Paths& paths);
-
-void ReversePath(Path& p);
-void ReversePaths(Paths& p);
-
-struct IntRect { cInt left; cInt top; cInt right; cInt bottom; };
-
-//enums that are used internally ...
-enum EdgeSide { esLeft = 1, esRight = 2};
-
-// namespace Internal {
- //forward declarations (for stuff used internally) ...
- struct TEdge {
- // Bottom point of this edge (with minimum Y).
- IntPoint Bot;
- // Current position.
- IntPoint Curr;
- // Top point of this edge (with maximum Y).
- IntPoint Top;
- // Vector from Bot to Top.
- IntPoint Delta;
- // Slope (dx/dy). For horiontal edges, the slope is set to HORIZONTAL (-1.0E+40).
- double Dx;
- PolyType PolyTyp;
- EdgeSide Side;
- // Winding number delta. 1 or -1 depending on winding direction, 0 for open paths and flat closed paths.
- int WindDelta;
- int WindCnt;
- int WindCnt2; //winding count of the opposite polytype
- int OutIdx;
- // Next edge in the input path.
- TEdge *Next;
- // Previous edge in the input path.
- TEdge *Prev;
- // Next edge in the Local Minima List chain.
- TEdge *NextInLML;
- TEdge *NextInAEL;
- TEdge *PrevInAEL;
- TEdge *NextInSEL;
- TEdge *PrevInSEL;
- };
-
- struct IntersectNode {
- IntersectNode(TEdge *Edge1, TEdge *Edge2, IntPoint Pt) :
- Edge1(Edge1), Edge2(Edge2), Pt(Pt) {}
- TEdge *Edge1;
- TEdge *Edge2;
- IntPoint Pt;
- };
-
- struct LocalMinimum {
- cInt Y;
- TEdge *LeftBound;
- TEdge *RightBound;
- };
-
- // Point of an output polygon.
- // 36B on 64bit system without use_xyz.
- struct OutPt {
- // 4B
- int Idx;
- // 16B without use_xyz / 24B with use_xyz
- IntPoint Pt;
- // 4B on 32bit system, 8B on 64bit system
- OutPt *Next;
- // 4B on 32bit system, 8B on 64bit system
- OutPt *Prev;
- };
-
- struct OutRec;
- struct Join {
- Join(OutPt *OutPt1, OutPt *OutPt2, IntPoint OffPt) :
- OutPt1(OutPt1), OutPt2(OutPt2), OffPt(OffPt) {}
- OutPt *OutPt1;
- OutPt *OutPt2;
- IntPoint OffPt;
- };
-// }; // namespace Internal
-
-//------------------------------------------------------------------------------
-
-//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() : m_UseFullRange(false), m_HasOpenPaths(false) {}
- ~ClipperBase() { Clear(); }
- bool AddPath(const Path &pg, PolyType PolyTyp, bool Closed);
- bool AddPaths(const Paths &ppg, PolyType PolyTyp, bool Closed);
- void Clear();
- IntRect GetBounds();
- // By default, when three or more vertices are collinear in input polygons (subject or clip), the Clipper object removes the 'inner' vertices before clipping.
- // When enabled the PreserveCollinear property prevents this default behavior to allow these inner vertices to appear in the solution.
- bool PreserveCollinear() const {return m_PreserveCollinear;};
- void PreserveCollinear(bool value) {m_PreserveCollinear = value;};
-protected:
- bool AddPathInternal(const Path &pg, int highI, PolyType PolyTyp, bool Closed, TEdge* edges);
- TEdge* AddBoundsToLML(TEdge *e, bool IsClosed);
- void Reset();
- TEdge* ProcessBound(TEdge* E, bool IsClockwise);
- TEdge* DescendToMin(TEdge *&E);
- void AscendToMax(TEdge *&E, bool Appending, bool IsClosed);
-
- // Local minima (Y, left edge, right edge) sorted by ascending Y.
- std::vector<LocalMinimum> m_MinimaList;
-
- // True if the input polygons have abs values higher than loRange, but lower than hiRange.
- // False if the input polygons have abs values lower or equal to loRange.
- bool m_UseFullRange;
- // A vector of edges per each input path.
- std::vector<std::vector<TEdge>> m_edges;
- // Don't remove intermediate vertices of a collinear sequence of points.
- bool m_PreserveCollinear;
- // Is any of the paths inserted by AddPath() or AddPaths() open?
- bool m_HasOpenPaths;
-};
-//------------------------------------------------------------------------------
-
-class Clipper : public ClipperBase
-{
-public:
- Clipper(int initOptions = 0);
- ~Clipper() { Clear(); }
- void Clear() { ClipperBase::Clear(); DisposeAllOutRecs(); }
- bool Execute(ClipType clipType,
- Paths &solution,
- PolyFillType fillType = pftEvenOdd)
- { return Execute(clipType, solution, fillType, fillType); }
- bool Execute(ClipType clipType,
- Paths &solution,
- PolyFillType subjFillType,
- PolyFillType clipFillType);
- bool Execute(ClipType clipType,
- PolyTree &polytree,
- PolyFillType fillType = pftEvenOdd)
- { return Execute(clipType, polytree, fillType, fillType); }
- bool Execute(ClipType clipType,
- PolyTree &polytree,
- PolyFillType subjFillType,
- PolyFillType clipFillType);
- bool ReverseSolution() const { return m_ReverseOutput; };
- void ReverseSolution(bool value) {m_ReverseOutput = value;};
- bool StrictlySimple() const {return m_StrictSimple;};
- void StrictlySimple(bool value) {m_StrictSimple = value;};
- //set the callback function for z value filling on intersections (otherwise Z is 0)
-#ifdef use_xyz
- void ZFillFunction(ZFillCallback zFillFunc) { m_ZFill = zFillFunc; }
-#endif
-protected:
- void Reset();
- virtual bool ExecuteInternal();
-private:
-
- // Output polygons.
- std::vector<OutRec*> m_PolyOuts;
- // Output points, allocated by a continuous sets of m_OutPtsChunkSize.
- std::vector<OutPt*> m_OutPts;
- // List of free output points, to be used before taking a point from m_OutPts or allocating a new chunk.
- OutPt *m_OutPtsFree;
- size_t m_OutPtsChunkSize;
- size_t m_OutPtsChunkLast;
-
- std::vector<Join> m_Joins;
- std::vector<Join> m_GhostJoins;
- std::vector<IntersectNode> m_IntersectList;
- ClipType m_ClipType;
- // A priority queue (a binary heap) of Y coordinates.
- std::priority_queue<cInt> m_Scanbeam;
- // Maxima are collected by ProcessEdgesAtTopOfScanbeam(), consumed by ProcessHorizontal().
- std::vector<cInt> m_Maxima;
- TEdge *m_ActiveEdges;
- TEdge *m_SortedEdges;
- PolyFillType m_ClipFillType;
- PolyFillType m_SubjFillType;
- bool m_ReverseOutput;
- // Does the result go to a PolyTree or Paths?
- bool m_UsingPolyTree;
- bool m_StrictSimple;
-#ifdef use_xyz
- ZFillCallback m_ZFill; //custom callback
-#endif
- void SetWindingCount(TEdge& edge) const;
- bool IsEvenOddFillType(const TEdge& edge) const
- { return (edge.PolyTyp == ptSubject) ? m_SubjFillType == pftEvenOdd : m_ClipFillType == pftEvenOdd; }
- bool IsEvenOddAltFillType(const TEdge& edge) const
- { return (edge.PolyTyp == ptSubject) ? m_ClipFillType == pftEvenOdd : m_SubjFillType == pftEvenOdd; }
- void InsertLocalMinimaIntoAEL(const cInt botY);
- void InsertEdgeIntoAEL(TEdge *edge, TEdge* startEdge);
- 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 cInt XPos);
- void SwapPositionsInAEL(TEdge *edge1, TEdge *edge2);
- void DoMaxima(TEdge *e);
- void ProcessHorizontals();
- void ProcessHorizontal(TEdge *horzEdge);
- void AddLocalMaxPoly(TEdge *e1, TEdge *e2, const IntPoint &pt);
- OutPt* AddLocalMinPoly(TEdge *e1, TEdge *e2, const IntPoint &pt);
- OutRec* GetOutRec(int idx);
- void AppendPolygon(TEdge *e1, TEdge *e2) const;
- void IntersectEdges(TEdge *e1, TEdge *e2, IntPoint &pt);
- OutRec* CreateOutRec();
- OutPt* AddOutPt(TEdge *e, const IntPoint &pt);
- OutPt* GetLastOutPt(TEdge *e);
- OutPt* AllocateOutPt();
- OutPt* DupOutPt(OutPt* outPt, bool InsertAfter);
- // Add the point to a list of free points.
- void DisposeOutPt(OutPt *pt) { pt->Next = m_OutPtsFree; m_OutPtsFree = pt; }
- void DisposeOutPts(OutPt*& pp) { if (pp != nullptr) { pp->Prev->Next = m_OutPtsFree; m_OutPtsFree = pp; } }
- void DisposeAllOutRecs();
- bool ProcessIntersections(const cInt topY);
- void BuildIntersectList(const cInt topY);
- void ProcessEdgesAtTopOfScanbeam(const cInt topY);
- void BuildResult(Paths& polys);
- void BuildResult2(PolyTree& polytree);
- void SetHoleState(TEdge *e, OutRec *outrec) const;
- bool FixupIntersectionOrder();
- void FixupOutPolygon(OutRec &outrec);
- void FixupOutPolyline(OutRec &outrec);
- bool FindOwnerFromSplitRecs(OutRec &outRec, OutRec *&currOrfl);
- void FixHoleLinkage(OutRec &outrec);
- bool JoinPoints(Join *j, OutRec* outRec1, OutRec* outRec2);
- bool JoinHorz(OutPt* op1, OutPt* op1b, OutPt* op2, OutPt* op2b, const IntPoint &Pt, bool DiscardLeft);
- void JoinCommonEdges();
- void DoSimplePolygons();
- void FixupFirstLefts1(OutRec* OldOutRec, OutRec* NewOutRec) const;
- void FixupFirstLefts2(OutRec* OldOutRec, OutRec* NewOutRec) const;
-#ifdef use_xyz
- void SetZ(IntPoint& pt, TEdge& e1, TEdge& e2);
-#endif
-};
-//------------------------------------------------------------------------------
-
-class ClipperOffset
-{
-public:
- ClipperOffset(double miterLimit = 2.0, double roundPrecision = 0.25, double shortestEdgeLength = 0.) :
- MiterLimit(miterLimit), ArcTolerance(roundPrecision), ShortestEdgeLength(shortestEdgeLength), m_lowest(-1, 0) {}
- ~ClipperOffset() { Clear(); }
- void AddPath(const Path& path, JoinType joinType, EndType endType);
- void AddPaths(const Paths& paths, JoinType joinType, EndType endType);
- void Execute(Paths& solution, double delta);
- void Execute(PolyTree& solution, double delta);
- void Clear();
- double MiterLimit;
- double ArcTolerance;
- double ShortestEdgeLength;
-private:
- Paths m_destPolys;
- Path m_srcPoly;
- Path m_destPoly;
- std::vector<DoublePoint> m_normals;
- double m_delta, m_sinA, m_sin, m_cos;
- double m_miterLim, m_StepsPerRad;
- IntPoint m_lowest;
- PolyNode m_polyNodes;
-
- void FixOrientations();
- void DoOffset(double delta);
- void OffsetPoint(int j, int& k, JoinType jointype);
- void DoSquare(int j, int k);
- void DoMiter(int j, int k, double r);
- void DoRound(int j, int k);
-};
-//------------------------------------------------------------------------------
-
-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
-
-
+/*******************************************************************************
+* *
+* Author : Angus Johnson *
+* Version : 6.2.9 *
+* Date : 16 February 2015 *
+* Website : http://www.angusj.com *
+* Copyright : Angus Johnson 2010-2015 *
+* *
+* 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 <inttypes.h>
+
+#define CLIPPER_VERSION "6.2.6"
+
+//use_xyz: adds a Z member to IntPoint. Adds a minor cost to perfomance.
+//#define use_xyz
+
+//use_lines: Enables line clipping. Adds a very minor cost to performance.
+#define use_lines
+
+//use_deprecated: Enables temporary support for the obsolete functions
+//#define use_deprecated
+
+#include <vector>
+#include <deque>
+#include <stdexcept>
+#include <cstring>
+#include <cstdlib>
+#include <ostream>
+#include <functional>
+#include <queue>
+
+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 };
+
+// Point coordinate type
+typedef int64_t cInt;
+// Maximum cInt value to allow a cross product calculation using 32bit expressions.
+static cInt const loRange = 0x3FFFFFFF;
+// Maximum allowed cInt value.
+static cInt const hiRange = 0x3FFFFFFFFFFFFFFFLL;
+
+struct IntPoint {
+ cInt X;
+ cInt Y;
+#ifdef use_xyz
+ cInt Z;
+ IntPoint(cInt x = 0, cInt y = 0, cInt z = 0): X(x), Y(y), Z(z) {};
+#else
+ IntPoint(cInt x = 0, cInt y = 0): X(x), Y(y) {};
+#endif
+
+ friend inline bool operator== (const IntPoint& a, const IntPoint& b)
+ {
+ return a.X == b.X && a.Y == b.Y;
+ }
+ friend inline bool operator!= (const IntPoint& a, const IntPoint& b)
+ {
+ return a.X != b.X || a.Y != b.Y;
+ }
+};
+//------------------------------------------------------------------------------
+
+typedef std::vector< IntPoint > Path;
+typedef std::vector< Path > Paths;
+
+inline Path& operator <<(Path& poly, const IntPoint& p) {poly.push_back(p); return poly;}
+inline Paths& operator <<(Paths& polys, const Path& p) {polys.push_back(p); return polys;}
+
+std::ostream& operator <<(std::ostream &s, const IntPoint &p);
+std::ostream& operator <<(std::ostream &s, const Path &p);
+std::ostream& operator <<(std::ostream &s, const Paths &p);
+
+struct DoublePoint
+{
+ double X;
+ double Y;
+ DoublePoint(double x = 0, double y = 0) : X(x), Y(y) {}
+ DoublePoint(IntPoint ip) : X((double)ip.X), Y((double)ip.Y) {}
+};
+//------------------------------------------------------------------------------
+
+#ifdef use_xyz
+typedef void (*ZFillCallback)(IntPoint& e1bot, IntPoint& e1top, IntPoint& e2bot, IntPoint& e2top, IntPoint& pt);
+#endif
+
+enum InitOptions {ioReverseSolution = 1, ioStrictlySimple = 2, ioPreserveCollinear = 4};
+enum JoinType {jtSquare, jtRound, jtMiter};
+enum EndType {etClosedPolygon, etClosedLine, etOpenButt, etOpenSquare, etOpenRound};
+
+class PolyNode;
+typedef std::vector< PolyNode* > PolyNodes;
+
+class PolyNode
+{
+public:
+ PolyNode() : Childs(), Parent(0), Index(0), m_IsOpen(false) {}
+ virtual ~PolyNode(){};
+ Path Contour;
+ PolyNodes Childs;
+ PolyNode* Parent;
+ // Traversal of the polygon tree in a depth first fashion.
+ PolyNode* GetNext() const { return Childs.empty() ? GetNextSiblingUp() : Childs.front(); }
+ bool IsHole() const;
+ bool IsOpen() const { return m_IsOpen; }
+ int ChildCount() const { return (int)Childs.size(); }
+private:
+ unsigned Index; //node index in Parent.Childs
+ bool m_IsOpen;
+ JoinType m_jointype;
+ EndType m_endtype;
+ PolyNode* GetNextSiblingUp() const { return Parent ? ((Index == Parent->Childs.size() - 1) ? Parent->GetNextSiblingUp() : Parent->Childs[Index + 1]) : nullptr; }
+ void AddChild(PolyNode& child);
+ friend class Clipper; //to access Index
+ friend class ClipperOffset;
+ friend class PolyTree; //to implement the PolyTree::move operator
+};
+
+class PolyTree: public PolyNode
+{
+public:
+ PolyTree() {}
+ PolyTree(PolyTree &&src) { *this = std::move(src); }
+ virtual ~PolyTree(){Clear();};
+ PolyTree& operator=(PolyTree &&src) {
+ AllNodes = std::move(src.AllNodes);
+ Contour = std::move(src.Contour);
+ Childs = std::move(src.Childs);
+ Parent = nullptr;
+ Index = src.Index;
+ m_IsOpen = src.m_IsOpen;
+ m_jointype = src.m_jointype;
+ m_endtype = src.m_endtype;
+ for (size_t i = 0; i < Childs.size(); ++ i)
+ Childs[i]->Parent = this;
+ return *this;
+ }
+ PolyNode* GetFirst() const { return Childs.empty() ? nullptr : Childs.front(); }
+ void Clear() { AllNodes.clear(); Childs.clear(); }
+ int Total() const;
+private:
+ PolyTree(const PolyTree &src) = delete;
+ PolyTree& operator=(const PolyTree &src) = delete;
+ std::vector<PolyNode> AllNodes;
+ friend class Clipper; //to access AllNodes
+};
+
+double Area(const Path &poly);
+inline bool Orientation(const Path &poly) { return Area(poly) >= 0; }
+int PointInPolygon(const IntPoint &pt, const Path &path);
+
+void SimplifyPolygon(const Path &in_poly, Paths &out_polys, PolyFillType fillType = pftEvenOdd);
+void SimplifyPolygons(const Paths &in_polys, Paths &out_polys, PolyFillType fillType = pftEvenOdd);
+void SimplifyPolygons(Paths &polys, PolyFillType fillType = pftEvenOdd);
+
+void CleanPolygon(const Path& in_poly, Path& out_poly, double distance = 1.415);
+void CleanPolygon(Path& poly, double distance = 1.415);
+void CleanPolygons(const Paths& in_polys, Paths& out_polys, double distance = 1.415);
+void CleanPolygons(Paths& polys, double distance = 1.415);
+
+void MinkowskiSum(const Path& pattern, const Path& path, Paths& solution, bool pathIsClosed);
+void MinkowskiSum(const Path& pattern, const Paths& paths, Paths& solution, bool pathIsClosed);
+void MinkowskiDiff(const Path& poly1, const Path& poly2, Paths& solution);
+
+void PolyTreeToPaths(const PolyTree& polytree, Paths& paths);
+void ClosedPathsFromPolyTree(const PolyTree& polytree, Paths& paths);
+void OpenPathsFromPolyTree(PolyTree& polytree, Paths& paths);
+
+void ReversePath(Path& p);
+void ReversePaths(Paths& p);
+
+struct IntRect { cInt left; cInt top; cInt right; cInt bottom; };
+
+//enums that are used internally ...
+enum EdgeSide { esLeft = 1, esRight = 2};
+
+// namespace Internal {
+ //forward declarations (for stuff used internally) ...
+ struct TEdge {
+ // Bottom point of this edge (with minimum Y).
+ IntPoint Bot;
+ // Current position.
+ IntPoint Curr;
+ // Top point of this edge (with maximum Y).
+ IntPoint Top;
+ // Vector from Bot to Top.
+ IntPoint Delta;
+ // Slope (dx/dy). For horiontal edges, the slope is set to HORIZONTAL (-1.0E+40).
+ double Dx;
+ PolyType PolyTyp;
+ EdgeSide Side;
+ // Winding number delta. 1 or -1 depending on winding direction, 0 for open paths and flat closed paths.
+ int WindDelta;
+ int WindCnt;
+ int WindCnt2; //winding count of the opposite polytype
+ int OutIdx;
+ // Next edge in the input path.
+ TEdge *Next;
+ // Previous edge in the input path.
+ TEdge *Prev;
+ // Next edge in the Local Minima List chain.
+ TEdge *NextInLML;
+ TEdge *NextInAEL;
+ TEdge *PrevInAEL;
+ TEdge *NextInSEL;
+ TEdge *PrevInSEL;
+ };
+
+ struct IntersectNode {
+ IntersectNode(TEdge *Edge1, TEdge *Edge2, IntPoint Pt) :
+ Edge1(Edge1), Edge2(Edge2), Pt(Pt) {}
+ TEdge *Edge1;
+ TEdge *Edge2;
+ IntPoint Pt;
+ };
+
+ struct LocalMinimum {
+ cInt Y;
+ TEdge *LeftBound;
+ TEdge *RightBound;
+ };
+
+ // Point of an output polygon.
+ // 36B on 64bit system without use_xyz.
+ struct OutPt {
+ // 4B
+ int Idx;
+ // 16B without use_xyz / 24B with use_xyz
+ IntPoint Pt;
+ // 4B on 32bit system, 8B on 64bit system
+ OutPt *Next;
+ // 4B on 32bit system, 8B on 64bit system
+ OutPt *Prev;
+ };
+
+ struct OutRec;
+ struct Join {
+ Join(OutPt *OutPt1, OutPt *OutPt2, IntPoint OffPt) :
+ OutPt1(OutPt1), OutPt2(OutPt2), OffPt(OffPt) {}
+ OutPt *OutPt1;
+ OutPt *OutPt2;
+ IntPoint OffPt;
+ };
+// }; // namespace Internal
+
+//------------------------------------------------------------------------------
+
+//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() : m_UseFullRange(false), m_HasOpenPaths(false) {}
+ ~ClipperBase() { Clear(); }
+ bool AddPath(const Path &pg, PolyType PolyTyp, bool Closed);
+ bool AddPaths(const Paths &ppg, PolyType PolyTyp, bool Closed);
+ void Clear();
+ IntRect GetBounds();
+ // By default, when three or more vertices are collinear in input polygons (subject or clip), the Clipper object removes the 'inner' vertices before clipping.
+ // When enabled the PreserveCollinear property prevents this default behavior to allow these inner vertices to appear in the solution.
+ bool PreserveCollinear() const {return m_PreserveCollinear;};
+ void PreserveCollinear(bool value) {m_PreserveCollinear = value;};
+protected:
+ bool AddPathInternal(const Path &pg, int highI, PolyType PolyTyp, bool Closed, TEdge* edges);
+ TEdge* AddBoundsToLML(TEdge *e, bool IsClosed);
+ void Reset();
+ TEdge* ProcessBound(TEdge* E, bool IsClockwise);
+ TEdge* DescendToMin(TEdge *&E);
+ void AscendToMax(TEdge *&E, bool Appending, bool IsClosed);
+
+ // Local minima (Y, left edge, right edge) sorted by ascending Y.
+ std::vector<LocalMinimum> m_MinimaList;
+
+ // True if the input polygons have abs values higher than loRange, but lower than hiRange.
+ // False if the input polygons have abs values lower or equal to loRange.
+ bool m_UseFullRange;
+ // A vector of edges per each input path.
+ std::vector<std::vector<TEdge>> m_edges;
+ // Don't remove intermediate vertices of a collinear sequence of points.
+ bool m_PreserveCollinear;
+ // Is any of the paths inserted by AddPath() or AddPaths() open?
+ bool m_HasOpenPaths;
+};
+//------------------------------------------------------------------------------
+
+class Clipper : public ClipperBase
+{
+public:
+ Clipper(int initOptions = 0);
+ ~Clipper() { Clear(); }
+ void Clear() { ClipperBase::Clear(); DisposeAllOutRecs(); }
+ bool Execute(ClipType clipType,
+ Paths &solution,
+ PolyFillType fillType = pftEvenOdd)
+ { return Execute(clipType, solution, fillType, fillType); }
+ bool Execute(ClipType clipType,
+ Paths &solution,
+ PolyFillType subjFillType,
+ PolyFillType clipFillType);
+ bool Execute(ClipType clipType,
+ PolyTree &polytree,
+ PolyFillType fillType = pftEvenOdd)
+ { return Execute(clipType, polytree, fillType, fillType); }
+ bool Execute(ClipType clipType,
+ PolyTree &polytree,
+ PolyFillType subjFillType,
+ PolyFillType clipFillType);
+ bool ReverseSolution() const { return m_ReverseOutput; };
+ void ReverseSolution(bool value) {m_ReverseOutput = value;};
+ bool StrictlySimple() const {return m_StrictSimple;};
+ void StrictlySimple(bool value) {m_StrictSimple = value;};
+ //set the callback function for z value filling on intersections (otherwise Z is 0)
+#ifdef use_xyz
+ void ZFillFunction(ZFillCallback zFillFunc) { m_ZFill = zFillFunc; }
+#endif
+protected:
+ void Reset();
+ virtual bool ExecuteInternal();
+private:
+
+ // Output polygons.
+ std::vector<OutRec*> m_PolyOuts;
+ // Output points, allocated by a continuous sets of m_OutPtsChunkSize.
+ std::vector<OutPt*> m_OutPts;
+ // List of free output points, to be used before taking a point from m_OutPts or allocating a new chunk.
+ OutPt *m_OutPtsFree;
+ size_t m_OutPtsChunkSize;
+ size_t m_OutPtsChunkLast;
+
+ std::vector<Join> m_Joins;
+ std::vector<Join> m_GhostJoins;
+ std::vector<IntersectNode> m_IntersectList;
+ ClipType m_ClipType;
+ // A priority queue (a binary heap) of Y coordinates.
+ std::priority_queue<cInt> m_Scanbeam;
+ // Maxima are collected by ProcessEdgesAtTopOfScanbeam(), consumed by ProcessHorizontal().
+ std::vector<cInt> m_Maxima;
+ TEdge *m_ActiveEdges;
+ TEdge *m_SortedEdges;
+ PolyFillType m_ClipFillType;
+ PolyFillType m_SubjFillType;
+ bool m_ReverseOutput;
+ // Does the result go to a PolyTree or Paths?
+ bool m_UsingPolyTree;
+ bool m_StrictSimple;
+#ifdef use_xyz
+ ZFillCallback m_ZFill; //custom callback
+#endif
+ void SetWindingCount(TEdge& edge) const;
+ bool IsEvenOddFillType(const TEdge& edge) const
+ { return (edge.PolyTyp == ptSubject) ? m_SubjFillType == pftEvenOdd : m_ClipFillType == pftEvenOdd; }
+ bool IsEvenOddAltFillType(const TEdge& edge) const
+ { return (edge.PolyTyp == ptSubject) ? m_ClipFillType == pftEvenOdd : m_SubjFillType == pftEvenOdd; }
+ void InsertLocalMinimaIntoAEL(const cInt botY);
+ void InsertEdgeIntoAEL(TEdge *edge, TEdge* startEdge);
+ 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 cInt XPos);
+ void SwapPositionsInAEL(TEdge *edge1, TEdge *edge2);
+ void DoMaxima(TEdge *e);
+ void ProcessHorizontals();
+ void ProcessHorizontal(TEdge *horzEdge);
+ void AddLocalMaxPoly(TEdge *e1, TEdge *e2, const IntPoint &pt);
+ OutPt* AddLocalMinPoly(TEdge *e1, TEdge *e2, const IntPoint &pt);
+ OutRec* GetOutRec(int idx);
+ void AppendPolygon(TEdge *e1, TEdge *e2) const;
+ void IntersectEdges(TEdge *e1, TEdge *e2, IntPoint &pt);
+ OutRec* CreateOutRec();
+ OutPt* AddOutPt(TEdge *e, const IntPoint &pt);
+ OutPt* GetLastOutPt(TEdge *e);
+ OutPt* AllocateOutPt();
+ OutPt* DupOutPt(OutPt* outPt, bool InsertAfter);
+ // Add the point to a list of free points.
+ void DisposeOutPt(OutPt *pt) { pt->Next = m_OutPtsFree; m_OutPtsFree = pt; }
+ void DisposeOutPts(OutPt*& pp) { if (pp != nullptr) { pp->Prev->Next = m_OutPtsFree; m_OutPtsFree = pp; } }
+ void DisposeAllOutRecs();
+ bool ProcessIntersections(const cInt topY);
+ void BuildIntersectList(const cInt topY);
+ void ProcessEdgesAtTopOfScanbeam(const cInt topY);
+ void BuildResult(Paths& polys);
+ void BuildResult2(PolyTree& polytree);
+ void SetHoleState(TEdge *e, OutRec *outrec) const;
+ bool FixupIntersectionOrder();
+ void FixupOutPolygon(OutRec &outrec);
+ void FixupOutPolyline(OutRec &outrec);
+ bool FindOwnerFromSplitRecs(OutRec &outRec, OutRec *&currOrfl);
+ void FixHoleLinkage(OutRec &outrec);
+ bool JoinPoints(Join *j, OutRec* outRec1, OutRec* outRec2);
+ bool JoinHorz(OutPt* op1, OutPt* op1b, OutPt* op2, OutPt* op2b, const IntPoint &Pt, bool DiscardLeft);
+ void JoinCommonEdges();
+ void DoSimplePolygons();
+ void FixupFirstLefts1(OutRec* OldOutRec, OutRec* NewOutRec) const;
+ void FixupFirstLefts2(OutRec* OldOutRec, OutRec* NewOutRec) const;
+#ifdef use_xyz
+ void SetZ(IntPoint& pt, TEdge& e1, TEdge& e2);
+#endif
+};
+//------------------------------------------------------------------------------
+
+class ClipperOffset
+{
+public:
+ ClipperOffset(double miterLimit = 2.0, double roundPrecision = 0.25, double shortestEdgeLength = 0.) :
+ MiterLimit(miterLimit), ArcTolerance(roundPrecision), ShortestEdgeLength(shortestEdgeLength), m_lowest(-1, 0) {}
+ ~ClipperOffset() { Clear(); }
+ void AddPath(const Path& path, JoinType joinType, EndType endType);
+ void AddPaths(const Paths& paths, JoinType joinType, EndType endType);
+ void Execute(Paths& solution, double delta);
+ void Execute(PolyTree& solution, double delta);
+ void Clear();
+ double MiterLimit;
+ double ArcTolerance;
+ double ShortestEdgeLength;
+private:
+ Paths m_destPolys;
+ Path m_srcPoly;
+ Path m_destPoly;
+ std::vector<DoublePoint> m_normals;
+ double m_delta, m_sinA, m_sin, m_cos;
+ double m_miterLim, m_StepsPerRad;
+ IntPoint m_lowest;
+ PolyNode m_polyNodes;
+
+ void FixOrientations();
+ void DoOffset(double delta);
+ void OffsetPoint(int j, int& k, JoinType jointype);
+ void DoSquare(int j, int k);
+ void DoMiter(int j, int k, double r);
+ void DoRound(int j, int k);
+};
+//------------------------------------------------------------------------------
+
+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/xs/src/eigen/COPYING.README b/src/eigen/COPYING.README
index de5b63215..de5b63215 100644
--- a/xs/src/eigen/COPYING.README
+++ b/src/eigen/COPYING.README
diff --git a/xs/src/eigen/Eigen/CMakeLists.txt b/src/eigen/Eigen/CMakeLists.txt
index 9eb502b79..9eb502b79 100644
--- a/xs/src/eigen/Eigen/CMakeLists.txt
+++ b/src/eigen/Eigen/CMakeLists.txt
diff --git a/xs/src/eigen/Eigen/Cholesky b/src/eigen/Eigen/Cholesky
index 1332b540d..1332b540d 100644
--- a/xs/src/eigen/Eigen/Cholesky
+++ b/src/eigen/Eigen/Cholesky
diff --git a/xs/src/eigen/Eigen/CholmodSupport b/src/eigen/Eigen/CholmodSupport
index bed8924d3..bed8924d3 100644
--- a/xs/src/eigen/Eigen/CholmodSupport
+++ b/src/eigen/Eigen/CholmodSupport
diff --git a/xs/src/eigen/Eigen/Core b/src/eigen/Eigen/Core
index 4d4901e03..4d4901e03 100644
--- a/xs/src/eigen/Eigen/Core
+++ b/src/eigen/Eigen/Core
diff --git a/xs/src/eigen/Eigen/Dense b/src/eigen/Eigen/Dense
index 5768910bd..5768910bd 100644
--- a/xs/src/eigen/Eigen/Dense
+++ b/src/eigen/Eigen/Dense
diff --git a/xs/src/eigen/Eigen/Eigen b/src/eigen/Eigen/Eigen
index 654c8dc63..654c8dc63 100644
--- a/xs/src/eigen/Eigen/Eigen
+++ b/src/eigen/Eigen/Eigen
diff --git a/xs/src/eigen/Eigen/Eigenvalues b/src/eigen/Eigen/Eigenvalues
index f3f661b07..f3f661b07 100644
--- a/xs/src/eigen/Eigen/Eigenvalues
+++ b/src/eigen/Eigen/Eigenvalues
diff --git a/xs/src/eigen/Eigen/Geometry b/src/eigen/Eigen/Geometry
index 716d52952..716d52952 100644
--- a/xs/src/eigen/Eigen/Geometry
+++ b/src/eigen/Eigen/Geometry
diff --git a/xs/src/eigen/Eigen/Householder b/src/eigen/Eigen/Householder
index 89cd81b1a..89cd81b1a 100644
--- a/xs/src/eigen/Eigen/Householder
+++ b/src/eigen/Eigen/Householder
diff --git a/xs/src/eigen/Eigen/IterativeLinearSolvers b/src/eigen/Eigen/IterativeLinearSolvers
index 957d5750b..957d5750b 100644
--- a/xs/src/eigen/Eigen/IterativeLinearSolvers
+++ b/src/eigen/Eigen/IterativeLinearSolvers
diff --git a/xs/src/eigen/Eigen/Jacobi b/src/eigen/Eigen/Jacobi
index 17c1d785a..17c1d785a 100644
--- a/xs/src/eigen/Eigen/Jacobi
+++ b/src/eigen/Eigen/Jacobi
diff --git a/xs/src/eigen/Eigen/LU b/src/eigen/Eigen/LU
index 6418a86e1..6418a86e1 100644
--- a/xs/src/eigen/Eigen/LU
+++ b/src/eigen/Eigen/LU
diff --git a/xs/src/eigen/Eigen/MetisSupport b/src/eigen/Eigen/MetisSupport
index 85c41bf34..85c41bf34 100644
--- a/xs/src/eigen/Eigen/MetisSupport
+++ b/src/eigen/Eigen/MetisSupport
diff --git a/xs/src/eigen/Eigen/OrderingMethods b/src/eigen/Eigen/OrderingMethods
index d8ea36193..d8ea36193 100644
--- a/xs/src/eigen/Eigen/OrderingMethods
+++ b/src/eigen/Eigen/OrderingMethods
diff --git a/xs/src/eigen/Eigen/PaStiXSupport b/src/eigen/Eigen/PaStiXSupport
index de3a63b4d..de3a63b4d 100644
--- a/xs/src/eigen/Eigen/PaStiXSupport
+++ b/src/eigen/Eigen/PaStiXSupport
diff --git a/xs/src/eigen/Eigen/PardisoSupport b/src/eigen/Eigen/PardisoSupport
index 340edf51f..340edf51f 100644
--- a/xs/src/eigen/Eigen/PardisoSupport
+++ b/src/eigen/Eigen/PardisoSupport
diff --git a/xs/src/eigen/Eigen/QR b/src/eigen/Eigen/QR
index c7e914469..c7e914469 100644
--- a/xs/src/eigen/Eigen/QR
+++ b/src/eigen/Eigen/QR
diff --git a/xs/src/eigen/Eigen/QtAlignedMalloc b/src/eigen/Eigen/QtAlignedMalloc
index 4f07df02a..4f07df02a 100644
--- a/xs/src/eigen/Eigen/QtAlignedMalloc
+++ b/src/eigen/Eigen/QtAlignedMalloc
diff --git a/xs/src/eigen/Eigen/SPQRSupport b/src/eigen/Eigen/SPQRSupport
index f70390c17..f70390c17 100644
--- a/xs/src/eigen/Eigen/SPQRSupport
+++ b/src/eigen/Eigen/SPQRSupport
diff --git a/xs/src/eigen/Eigen/SVD b/src/eigen/Eigen/SVD
index 5d0e75f7f..5d0e75f7f 100644
--- a/xs/src/eigen/Eigen/SVD
+++ b/src/eigen/Eigen/SVD
diff --git a/xs/src/eigen/Eigen/Sparse b/src/eigen/Eigen/Sparse
index 136e681a1..136e681a1 100644
--- a/xs/src/eigen/Eigen/Sparse
+++ b/src/eigen/Eigen/Sparse
diff --git a/xs/src/eigen/Eigen/SparseCholesky b/src/eigen/Eigen/SparseCholesky
index b6a320c40..b6a320c40 100644
--- a/xs/src/eigen/Eigen/SparseCholesky
+++ b/src/eigen/Eigen/SparseCholesky
diff --git a/xs/src/eigen/Eigen/SparseCore b/src/eigen/Eigen/SparseCore
index 76966c4c4..76966c4c4 100644
--- a/xs/src/eigen/Eigen/SparseCore
+++ b/src/eigen/Eigen/SparseCore
diff --git a/xs/src/eigen/Eigen/SparseLU b/src/eigen/Eigen/SparseLU
index 38b38b531..38b38b531 100644
--- a/xs/src/eigen/Eigen/SparseLU
+++ b/src/eigen/Eigen/SparseLU
diff --git a/xs/src/eigen/Eigen/SparseQR b/src/eigen/Eigen/SparseQR
index a6f3b7f7d..a6f3b7f7d 100644
--- a/xs/src/eigen/Eigen/SparseQR
+++ b/src/eigen/Eigen/SparseQR
diff --git a/xs/src/eigen/Eigen/StdDeque b/src/eigen/Eigen/StdDeque
index bc68397be..bc68397be 100644
--- a/xs/src/eigen/Eigen/StdDeque
+++ b/src/eigen/Eigen/StdDeque
diff --git a/xs/src/eigen/Eigen/StdList b/src/eigen/Eigen/StdList
index 4c6262c08..4c6262c08 100644
--- a/xs/src/eigen/Eigen/StdList
+++ b/src/eigen/Eigen/StdList
diff --git a/xs/src/eigen/Eigen/StdVector b/src/eigen/Eigen/StdVector
index 0c4697ad5..0c4697ad5 100644
--- a/xs/src/eigen/Eigen/StdVector
+++ b/src/eigen/Eigen/StdVector
diff --git a/xs/src/eigen/Eigen/SuperLUSupport b/src/eigen/Eigen/SuperLUSupport
index 59312a82d..59312a82d 100644
--- a/xs/src/eigen/Eigen/SuperLUSupport
+++ b/src/eigen/Eigen/SuperLUSupport
diff --git a/xs/src/eigen/Eigen/UmfPackSupport b/src/eigen/Eigen/UmfPackSupport
index 00eec8087..00eec8087 100644
--- a/xs/src/eigen/Eigen/UmfPackSupport
+++ b/src/eigen/Eigen/UmfPackSupport
diff --git a/xs/src/eigen/Eigen/src/Cholesky/LDLT.h b/src/eigen/Eigen/src/Cholesky/LDLT.h
index 0313a54bf..0313a54bf 100644
--- a/xs/src/eigen/Eigen/src/Cholesky/LDLT.h
+++ b/src/eigen/Eigen/src/Cholesky/LDLT.h
diff --git a/xs/src/eigen/Eigen/src/Cholesky/LLT.h b/src/eigen/Eigen/src/Cholesky/LLT.h
index e1624d21b..e1624d21b 100644
--- a/xs/src/eigen/Eigen/src/Cholesky/LLT.h
+++ b/src/eigen/Eigen/src/Cholesky/LLT.h
diff --git a/xs/src/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h b/src/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h
index bc6489e69..bc6489e69 100644
--- a/xs/src/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h
+++ b/src/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h
diff --git a/xs/src/eigen/Eigen/src/CholmodSupport/CholmodSupport.h b/src/eigen/Eigen/src/CholmodSupport/CholmodSupport.h
index 571972023..571972023 100644
--- a/xs/src/eigen/Eigen/src/CholmodSupport/CholmodSupport.h
+++ b/src/eigen/Eigen/src/CholmodSupport/CholmodSupport.h
diff --git a/xs/src/eigen/Eigen/src/Core/Array.h b/src/eigen/Eigen/src/Core/Array.h
index e10020d4f..e10020d4f 100644
--- a/xs/src/eigen/Eigen/src/Core/Array.h
+++ b/src/eigen/Eigen/src/Core/Array.h
diff --git a/xs/src/eigen/Eigen/src/Core/ArrayBase.h b/src/eigen/Eigen/src/Core/ArrayBase.h
index 3dbc7084c..3dbc7084c 100644
--- a/xs/src/eigen/Eigen/src/Core/ArrayBase.h
+++ b/src/eigen/Eigen/src/Core/ArrayBase.h
diff --git a/xs/src/eigen/Eigen/src/Core/ArrayWrapper.h b/src/eigen/Eigen/src/Core/ArrayWrapper.h
index 688aadd62..688aadd62 100644
--- a/xs/src/eigen/Eigen/src/Core/ArrayWrapper.h
+++ b/src/eigen/Eigen/src/Core/ArrayWrapper.h
diff --git a/xs/src/eigen/Eigen/src/Core/Assign.h b/src/eigen/Eigen/src/Core/Assign.h
index 53806ba33..53806ba33 100644
--- a/xs/src/eigen/Eigen/src/Core/Assign.h
+++ b/src/eigen/Eigen/src/Core/Assign.h
diff --git a/xs/src/eigen/Eigen/src/Core/AssignEvaluator.h b/src/eigen/Eigen/src/Core/AssignEvaluator.h
index dbe435d86..dbe435d86 100644
--- a/xs/src/eigen/Eigen/src/Core/AssignEvaluator.h
+++ b/src/eigen/Eigen/src/Core/AssignEvaluator.h
diff --git a/xs/src/eigen/Eigen/src/Core/Assign_MKL.h b/src/eigen/Eigen/src/Core/Assign_MKL.h
index 6866095bf..6866095bf 100644
--- a/xs/src/eigen/Eigen/src/Core/Assign_MKL.h
+++ b/src/eigen/Eigen/src/Core/Assign_MKL.h
diff --git a/xs/src/eigen/Eigen/src/Core/BandMatrix.h b/src/eigen/Eigen/src/Core/BandMatrix.h
index 4978c9140..4978c9140 100644
--- a/xs/src/eigen/Eigen/src/Core/BandMatrix.h
+++ b/src/eigen/Eigen/src/Core/BandMatrix.h
diff --git a/xs/src/eigen/Eigen/src/Core/Block.h b/src/eigen/Eigen/src/Core/Block.h
index 11de45c2e..11de45c2e 100644
--- a/xs/src/eigen/Eigen/src/Core/Block.h
+++ b/src/eigen/Eigen/src/Core/Block.h
diff --git a/xs/src/eigen/Eigen/src/Core/BooleanRedux.h b/src/eigen/Eigen/src/Core/BooleanRedux.h
index 8409d8749..8409d8749 100644
--- a/xs/src/eigen/Eigen/src/Core/BooleanRedux.h
+++ b/src/eigen/Eigen/src/Core/BooleanRedux.h
diff --git a/xs/src/eigen/Eigen/src/Core/CommaInitializer.h b/src/eigen/Eigen/src/Core/CommaInitializer.h
index d218e9814..d218e9814 100644
--- a/xs/src/eigen/Eigen/src/Core/CommaInitializer.h
+++ b/src/eigen/Eigen/src/Core/CommaInitializer.h
diff --git a/xs/src/eigen/Eigen/src/Core/ConditionEstimator.h b/src/eigen/Eigen/src/Core/ConditionEstimator.h
index aa7efdc76..aa7efdc76 100644
--- a/xs/src/eigen/Eigen/src/Core/ConditionEstimator.h
+++ b/src/eigen/Eigen/src/Core/ConditionEstimator.h
diff --git a/xs/src/eigen/Eigen/src/Core/CoreEvaluators.h b/src/eigen/Eigen/src/Core/CoreEvaluators.h
index 910889efa..910889efa 100644
--- a/xs/src/eigen/Eigen/src/Core/CoreEvaluators.h
+++ b/src/eigen/Eigen/src/Core/CoreEvaluators.h
diff --git a/xs/src/eigen/Eigen/src/Core/CoreIterators.h b/src/eigen/Eigen/src/Core/CoreIterators.h
index 4eb42b93a..4eb42b93a 100644
--- a/xs/src/eigen/Eigen/src/Core/CoreIterators.h
+++ b/src/eigen/Eigen/src/Core/CoreIterators.h
diff --git a/xs/src/eigen/Eigen/src/Core/CwiseBinaryOp.h b/src/eigen/Eigen/src/Core/CwiseBinaryOp.h
index a36765e39..a36765e39 100644
--- a/xs/src/eigen/Eigen/src/Core/CwiseBinaryOp.h
+++ b/src/eigen/Eigen/src/Core/CwiseBinaryOp.h
diff --git a/xs/src/eigen/Eigen/src/Core/CwiseNullaryOp.h b/src/eigen/Eigen/src/Core/CwiseNullaryOp.h
index ddd607e38..ddd607e38 100644
--- a/xs/src/eigen/Eigen/src/Core/CwiseNullaryOp.h
+++ b/src/eigen/Eigen/src/Core/CwiseNullaryOp.h
diff --git a/xs/src/eigen/Eigen/src/Core/CwiseTernaryOp.h b/src/eigen/Eigen/src/Core/CwiseTernaryOp.h
index 9f3576fec..9f3576fec 100644
--- a/xs/src/eigen/Eigen/src/Core/CwiseTernaryOp.h
+++ b/src/eigen/Eigen/src/Core/CwiseTernaryOp.h
diff --git a/xs/src/eigen/Eigen/src/Core/CwiseUnaryOp.h b/src/eigen/Eigen/src/Core/CwiseUnaryOp.h
index 1d2dd19f2..1d2dd19f2 100644
--- a/xs/src/eigen/Eigen/src/Core/CwiseUnaryOp.h
+++ b/src/eigen/Eigen/src/Core/CwiseUnaryOp.h
diff --git a/xs/src/eigen/Eigen/src/Core/CwiseUnaryView.h b/src/eigen/Eigen/src/Core/CwiseUnaryView.h
index 271033056..271033056 100644
--- a/xs/src/eigen/Eigen/src/Core/CwiseUnaryView.h
+++ b/src/eigen/Eigen/src/Core/CwiseUnaryView.h
diff --git a/xs/src/eigen/Eigen/src/Core/DenseBase.h b/src/eigen/Eigen/src/Core/DenseBase.h
index 90066ae73..90066ae73 100644
--- a/xs/src/eigen/Eigen/src/Core/DenseBase.h
+++ b/src/eigen/Eigen/src/Core/DenseBase.h
diff --git a/xs/src/eigen/Eigen/src/Core/DenseCoeffsBase.h b/src/eigen/Eigen/src/Core/DenseCoeffsBase.h
index c4af48ab6..c4af48ab6 100644
--- a/xs/src/eigen/Eigen/src/Core/DenseCoeffsBase.h
+++ b/src/eigen/Eigen/src/Core/DenseCoeffsBase.h
diff --git a/xs/src/eigen/Eigen/src/Core/DenseStorage.h b/src/eigen/Eigen/src/Core/DenseStorage.h
index 7958feeb9..7958feeb9 100644
--- a/xs/src/eigen/Eigen/src/Core/DenseStorage.h
+++ b/src/eigen/Eigen/src/Core/DenseStorage.h
diff --git a/xs/src/eigen/Eigen/src/Core/Diagonal.h b/src/eigen/Eigen/src/Core/Diagonal.h
index afcaf3575..afcaf3575 100644
--- a/xs/src/eigen/Eigen/src/Core/Diagonal.h
+++ b/src/eigen/Eigen/src/Core/Diagonal.h
diff --git a/xs/src/eigen/Eigen/src/Core/DiagonalMatrix.h b/src/eigen/Eigen/src/Core/DiagonalMatrix.h
index ecfdce8ef..ecfdce8ef 100644
--- a/xs/src/eigen/Eigen/src/Core/DiagonalMatrix.h
+++ b/src/eigen/Eigen/src/Core/DiagonalMatrix.h
diff --git a/xs/src/eigen/Eigen/src/Core/DiagonalProduct.h b/src/eigen/Eigen/src/Core/DiagonalProduct.h
index d372b938f..d372b938f 100644
--- a/xs/src/eigen/Eigen/src/Core/DiagonalProduct.h
+++ b/src/eigen/Eigen/src/Core/DiagonalProduct.h
diff --git a/xs/src/eigen/Eigen/src/Core/Dot.h b/src/eigen/Eigen/src/Core/Dot.h
index 1fe7a84a4..1fe7a84a4 100644
--- a/xs/src/eigen/Eigen/src/Core/Dot.h
+++ b/src/eigen/Eigen/src/Core/Dot.h
diff --git a/xs/src/eigen/Eigen/src/Core/EigenBase.h b/src/eigen/Eigen/src/Core/EigenBase.h
index b195506a9..b195506a9 100644
--- a/xs/src/eigen/Eigen/src/Core/EigenBase.h
+++ b/src/eigen/Eigen/src/Core/EigenBase.h
diff --git a/xs/src/eigen/Eigen/src/Core/ForceAlignedAccess.h b/src/eigen/Eigen/src/Core/ForceAlignedAccess.h
index 7b08b45e6..7b08b45e6 100644
--- a/xs/src/eigen/Eigen/src/Core/ForceAlignedAccess.h
+++ b/src/eigen/Eigen/src/Core/ForceAlignedAccess.h
diff --git a/xs/src/eigen/Eigen/src/Core/Fuzzy.h b/src/eigen/Eigen/src/Core/Fuzzy.h
index 3e403a09d..3e403a09d 100644
--- a/xs/src/eigen/Eigen/src/Core/Fuzzy.h
+++ b/src/eigen/Eigen/src/Core/Fuzzy.h
diff --git a/xs/src/eigen/Eigen/src/Core/GeneralProduct.h b/src/eigen/Eigen/src/Core/GeneralProduct.h
index 6f0cc80e9..6f0cc80e9 100644
--- a/xs/src/eigen/Eigen/src/Core/GeneralProduct.h
+++ b/src/eigen/Eigen/src/Core/GeneralProduct.h
diff --git a/xs/src/eigen/Eigen/src/Core/GenericPacketMath.h b/src/eigen/Eigen/src/Core/GenericPacketMath.h
index 029f8ac36..029f8ac36 100644
--- a/xs/src/eigen/Eigen/src/Core/GenericPacketMath.h
+++ b/src/eigen/Eigen/src/Core/GenericPacketMath.h
diff --git a/xs/src/eigen/Eigen/src/Core/GlobalFunctions.h b/src/eigen/Eigen/src/Core/GlobalFunctions.h
index 769dc255c..769dc255c 100644
--- a/xs/src/eigen/Eigen/src/Core/GlobalFunctions.h
+++ b/src/eigen/Eigen/src/Core/GlobalFunctions.h
diff --git a/xs/src/eigen/Eigen/src/Core/IO.h b/src/eigen/Eigen/src/Core/IO.h
index da7fd6cce..da7fd6cce 100644
--- a/xs/src/eigen/Eigen/src/Core/IO.h
+++ b/src/eigen/Eigen/src/Core/IO.h
diff --git a/xs/src/eigen/Eigen/src/Core/Inverse.h b/src/eigen/Eigen/src/Core/Inverse.h
index b76f0439d..b76f0439d 100644
--- a/xs/src/eigen/Eigen/src/Core/Inverse.h
+++ b/src/eigen/Eigen/src/Core/Inverse.h
diff --git a/xs/src/eigen/Eigen/src/Core/Map.h b/src/eigen/Eigen/src/Core/Map.h
index 548bf9a2d..548bf9a2d 100644
--- a/xs/src/eigen/Eigen/src/Core/Map.h
+++ b/src/eigen/Eigen/src/Core/Map.h
diff --git a/xs/src/eigen/Eigen/src/Core/MapBase.h b/src/eigen/Eigen/src/Core/MapBase.h
index 020f939ad..020f939ad 100644
--- a/xs/src/eigen/Eigen/src/Core/MapBase.h
+++ b/src/eigen/Eigen/src/Core/MapBase.h
diff --git a/xs/src/eigen/Eigen/src/Core/MathFunctions.h b/src/eigen/Eigen/src/Core/MathFunctions.h
index 6eb974d41..6eb974d41 100644
--- a/xs/src/eigen/Eigen/src/Core/MathFunctions.h
+++ b/src/eigen/Eigen/src/Core/MathFunctions.h
diff --git a/xs/src/eigen/Eigen/src/Core/MathFunctionsImpl.h b/src/eigen/Eigen/src/Core/MathFunctionsImpl.h
index 9c1ceb0eb..9c1ceb0eb 100644
--- a/xs/src/eigen/Eigen/src/Core/MathFunctionsImpl.h
+++ b/src/eigen/Eigen/src/Core/MathFunctionsImpl.h
diff --git a/xs/src/eigen/Eigen/src/Core/Matrix.h b/src/eigen/Eigen/src/Core/Matrix.h
index 90c336d8c..90c336d8c 100644
--- a/xs/src/eigen/Eigen/src/Core/Matrix.h
+++ b/src/eigen/Eigen/src/Core/Matrix.h
diff --git a/xs/src/eigen/Eigen/src/Core/MatrixBase.h b/src/eigen/Eigen/src/Core/MatrixBase.h
index 05db48813..05db48813 100644
--- a/xs/src/eigen/Eigen/src/Core/MatrixBase.h
+++ b/src/eigen/Eigen/src/Core/MatrixBase.h
diff --git a/xs/src/eigen/Eigen/src/Core/NestByValue.h b/src/eigen/Eigen/src/Core/NestByValue.h
index 13adf070e..13adf070e 100644
--- a/xs/src/eigen/Eigen/src/Core/NestByValue.h
+++ b/src/eigen/Eigen/src/Core/NestByValue.h
diff --git a/xs/src/eigen/Eigen/src/Core/NoAlias.h b/src/eigen/Eigen/src/Core/NoAlias.h
index 33908010b..33908010b 100644
--- a/xs/src/eigen/Eigen/src/Core/NoAlias.h
+++ b/src/eigen/Eigen/src/Core/NoAlias.h
diff --git a/xs/src/eigen/Eigen/src/Core/NumTraits.h b/src/eigen/Eigen/src/Core/NumTraits.h
index daf489878..daf489878 100644
--- a/xs/src/eigen/Eigen/src/Core/NumTraits.h
+++ b/src/eigen/Eigen/src/Core/NumTraits.h
diff --git a/xs/src/eigen/Eigen/src/Core/PermutationMatrix.h b/src/eigen/Eigen/src/Core/PermutationMatrix.h
index b1fb455b9..b1fb455b9 100644
--- a/xs/src/eigen/Eigen/src/Core/PermutationMatrix.h
+++ b/src/eigen/Eigen/src/Core/PermutationMatrix.h
diff --git a/xs/src/eigen/Eigen/src/Core/PlainObjectBase.h b/src/eigen/Eigen/src/Core/PlainObjectBase.h
index 1dc7e223a..1dc7e223a 100644
--- a/xs/src/eigen/Eigen/src/Core/PlainObjectBase.h
+++ b/src/eigen/Eigen/src/Core/PlainObjectBase.h
diff --git a/xs/src/eigen/Eigen/src/Core/Product.h b/src/eigen/Eigen/src/Core/Product.h
index 676c48027..676c48027 100644
--- a/xs/src/eigen/Eigen/src/Core/Product.h
+++ b/src/eigen/Eigen/src/Core/Product.h
diff --git a/xs/src/eigen/Eigen/src/Core/ProductEvaluators.h b/src/eigen/Eigen/src/Core/ProductEvaluators.h
index 9b99bd769..9b99bd769 100644
--- a/xs/src/eigen/Eigen/src/Core/ProductEvaluators.h
+++ b/src/eigen/Eigen/src/Core/ProductEvaluators.h
diff --git a/xs/src/eigen/Eigen/src/Core/Random.h b/src/eigen/Eigen/src/Core/Random.h
index 6faf789c7..6faf789c7 100644
--- a/xs/src/eigen/Eigen/src/Core/Random.h
+++ b/src/eigen/Eigen/src/Core/Random.h
diff --git a/xs/src/eigen/Eigen/src/Core/Redux.h b/src/eigen/Eigen/src/Core/Redux.h
index 760e9f861..760e9f861 100644
--- a/xs/src/eigen/Eigen/src/Core/Redux.h
+++ b/src/eigen/Eigen/src/Core/Redux.h
diff --git a/xs/src/eigen/Eigen/src/Core/Ref.h b/src/eigen/Eigen/src/Core/Ref.h
index 9c6e3c5d9..9c6e3c5d9 100644
--- a/xs/src/eigen/Eigen/src/Core/Ref.h
+++ b/src/eigen/Eigen/src/Core/Ref.h
diff --git a/xs/src/eigen/Eigen/src/Core/Replicate.h b/src/eigen/Eigen/src/Core/Replicate.h
index 9960ef884..9960ef884 100644
--- a/xs/src/eigen/Eigen/src/Core/Replicate.h
+++ b/src/eigen/Eigen/src/Core/Replicate.h
diff --git a/xs/src/eigen/Eigen/src/Core/ReturnByValue.h b/src/eigen/Eigen/src/Core/ReturnByValue.h
index c44b7673b..c44b7673b 100644
--- a/xs/src/eigen/Eigen/src/Core/ReturnByValue.h
+++ b/src/eigen/Eigen/src/Core/ReturnByValue.h
diff --git a/xs/src/eigen/Eigen/src/Core/Reverse.h b/src/eigen/Eigen/src/Core/Reverse.h
index 0640cda2a..0640cda2a 100644
--- a/xs/src/eigen/Eigen/src/Core/Reverse.h
+++ b/src/eigen/Eigen/src/Core/Reverse.h
diff --git a/xs/src/eigen/Eigen/src/Core/Select.h b/src/eigen/Eigen/src/Core/Select.h
index 79eec1b5b..79eec1b5b 100644
--- a/xs/src/eigen/Eigen/src/Core/Select.h
+++ b/src/eigen/Eigen/src/Core/Select.h
diff --git a/xs/src/eigen/Eigen/src/Core/SelfAdjointView.h b/src/eigen/Eigen/src/Core/SelfAdjointView.h
index b2e51f37a..b2e51f37a 100644
--- a/xs/src/eigen/Eigen/src/Core/SelfAdjointView.h
+++ b/src/eigen/Eigen/src/Core/SelfAdjointView.h
diff --git a/xs/src/eigen/Eigen/src/Core/SelfCwiseBinaryOp.h b/src/eigen/Eigen/src/Core/SelfCwiseBinaryOp.h
index 7c89c2e23..7c89c2e23 100644
--- a/xs/src/eigen/Eigen/src/Core/SelfCwiseBinaryOp.h
+++ b/src/eigen/Eigen/src/Core/SelfCwiseBinaryOp.h
diff --git a/xs/src/eigen/Eigen/src/Core/Solve.h b/src/eigen/Eigen/src/Core/Solve.h
index a8daea511..a8daea511 100644
--- a/xs/src/eigen/Eigen/src/Core/Solve.h
+++ b/src/eigen/Eigen/src/Core/Solve.h
diff --git a/xs/src/eigen/Eigen/src/Core/SolveTriangular.h b/src/eigen/Eigen/src/Core/SolveTriangular.h
index 049890b25..049890b25 100644
--- a/xs/src/eigen/Eigen/src/Core/SolveTriangular.h
+++ b/src/eigen/Eigen/src/Core/SolveTriangular.h
diff --git a/xs/src/eigen/Eigen/src/Core/SolverBase.h b/src/eigen/Eigen/src/Core/SolverBase.h
index 8a4adc229..8a4adc229 100644
--- a/xs/src/eigen/Eigen/src/Core/SolverBase.h
+++ b/src/eigen/Eigen/src/Core/SolverBase.h
diff --git a/xs/src/eigen/Eigen/src/Core/StableNorm.h b/src/eigen/Eigen/src/Core/StableNorm.h
index 88c8d9890..88c8d9890 100644
--- a/xs/src/eigen/Eigen/src/Core/StableNorm.h
+++ b/src/eigen/Eigen/src/Core/StableNorm.h
diff --git a/xs/src/eigen/Eigen/src/Core/Stride.h b/src/eigen/Eigen/src/Core/Stride.h
index 513742f34..513742f34 100644
--- a/xs/src/eigen/Eigen/src/Core/Stride.h
+++ b/src/eigen/Eigen/src/Core/Stride.h
diff --git a/xs/src/eigen/Eigen/src/Core/Swap.h b/src/eigen/Eigen/src/Core/Swap.h
index d70200918..d70200918 100644
--- a/xs/src/eigen/Eigen/src/Core/Swap.h
+++ b/src/eigen/Eigen/src/Core/Swap.h
diff --git a/xs/src/eigen/Eigen/src/Core/Transpose.h b/src/eigen/Eigen/src/Core/Transpose.h
index 79b767bcc..79b767bcc 100644
--- a/xs/src/eigen/Eigen/src/Core/Transpose.h
+++ b/src/eigen/Eigen/src/Core/Transpose.h
diff --git a/xs/src/eigen/Eigen/src/Core/Transpositions.h b/src/eigen/Eigen/src/Core/Transpositions.h
index 86da5af59..86da5af59 100644
--- a/xs/src/eigen/Eigen/src/Core/Transpositions.h
+++ b/src/eigen/Eigen/src/Core/Transpositions.h
diff --git a/xs/src/eigen/Eigen/src/Core/TriangularMatrix.h b/src/eigen/Eigen/src/Core/TriangularMatrix.h
index 667ef09dc..667ef09dc 100644
--- a/xs/src/eigen/Eigen/src/Core/TriangularMatrix.h
+++ b/src/eigen/Eigen/src/Core/TriangularMatrix.h
diff --git a/xs/src/eigen/Eigen/src/Core/VectorBlock.h b/src/eigen/Eigen/src/Core/VectorBlock.h
index d72fbf7e9..d72fbf7e9 100644
--- a/xs/src/eigen/Eigen/src/Core/VectorBlock.h
+++ b/src/eigen/Eigen/src/Core/VectorBlock.h
diff --git a/xs/src/eigen/Eigen/src/Core/VectorwiseOp.h b/src/eigen/Eigen/src/Core/VectorwiseOp.h
index 4fe267e9f..4fe267e9f 100644
--- a/xs/src/eigen/Eigen/src/Core/VectorwiseOp.h
+++ b/src/eigen/Eigen/src/Core/VectorwiseOp.h
diff --git a/xs/src/eigen/Eigen/src/Core/Visitor.h b/src/eigen/Eigen/src/Core/Visitor.h
index 54c1883d9..54c1883d9 100644
--- a/xs/src/eigen/Eigen/src/Core/Visitor.h
+++ b/src/eigen/Eigen/src/Core/Visitor.h
diff --git a/xs/src/eigen/Eigen/src/Core/arch/AVX/Complex.h b/src/eigen/Eigen/src/Core/arch/AVX/Complex.h
index 7fa61969d..7fa61969d 100644
--- a/xs/src/eigen/Eigen/src/Core/arch/AVX/Complex.h
+++ b/src/eigen/Eigen/src/Core/arch/AVX/Complex.h
diff --git a/xs/src/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h b/src/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h
index 6af67ce2d..6af67ce2d 100644
--- a/xs/src/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h
+++ b/src/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h
diff --git a/xs/src/eigen/Eigen/src/Core/arch/AVX/PacketMath.h b/src/eigen/Eigen/src/Core/arch/AVX/PacketMath.h
index 61c3dfcab..61c3dfcab 100644
--- a/xs/src/eigen/Eigen/src/Core/arch/AVX/PacketMath.h
+++ b/src/eigen/Eigen/src/Core/arch/AVX/PacketMath.h
diff --git a/xs/src/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h b/src/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h
index 83bfdc604..83bfdc604 100644
--- a/xs/src/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h
+++ b/src/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h
diff --git a/xs/src/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h b/src/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h
index 9c1717f76..9c1717f76 100644
--- a/xs/src/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h
+++ b/src/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h
diff --git a/xs/src/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h b/src/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h
index 89705248a..89705248a 100644
--- a/xs/src/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h
+++ b/src/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h
diff --git a/xs/src/eigen/Eigen/src/Core/arch/AltiVec/Complex.h b/src/eigen/Eigen/src/Core/arch/AltiVec/Complex.h
index 3e665730c..3e665730c 100644
--- a/xs/src/eigen/Eigen/src/Core/arch/AltiVec/Complex.h
+++ b/src/eigen/Eigen/src/Core/arch/AltiVec/Complex.h
diff --git a/xs/src/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h b/src/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h
index c5e4bede7..c5e4bede7 100644
--- a/xs/src/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h
+++ b/src/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h
diff --git a/xs/src/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h b/src/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h
index 08a27d153..08a27d153 100644
--- a/xs/src/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h
+++ b/src/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h
diff --git a/xs/src/eigen/Eigen/src/Core/arch/CUDA/Complex.h b/src/eigen/Eigen/src/Core/arch/CUDA/Complex.h
index 9c2536509..9c2536509 100644
--- a/xs/src/eigen/Eigen/src/Core/arch/CUDA/Complex.h
+++ b/src/eigen/Eigen/src/Core/arch/CUDA/Complex.h
diff --git a/xs/src/eigen/Eigen/src/Core/arch/CUDA/Half.h b/src/eigen/Eigen/src/Core/arch/CUDA/Half.h
index 02ac0c23a..02ac0c23a 100644
--- a/xs/src/eigen/Eigen/src/Core/arch/CUDA/Half.h
+++ b/src/eigen/Eigen/src/Core/arch/CUDA/Half.h
diff --git a/xs/src/eigen/Eigen/src/Core/arch/CUDA/MathFunctions.h b/src/eigen/Eigen/src/Core/arch/CUDA/MathFunctions.h
index 0348b41db..0348b41db 100644
--- a/xs/src/eigen/Eigen/src/Core/arch/CUDA/MathFunctions.h
+++ b/src/eigen/Eigen/src/Core/arch/CUDA/MathFunctions.h
diff --git a/xs/src/eigen/Eigen/src/Core/arch/CUDA/PacketMath.h b/src/eigen/Eigen/src/Core/arch/CUDA/PacketMath.h
index 4dda63188..4dda63188 100644
--- a/xs/src/eigen/Eigen/src/Core/arch/CUDA/PacketMath.h
+++ b/src/eigen/Eigen/src/Core/arch/CUDA/PacketMath.h
diff --git a/xs/src/eigen/Eigen/src/Core/arch/CUDA/PacketMathHalf.h b/src/eigen/Eigen/src/Core/arch/CUDA/PacketMathHalf.h
index 943e0b06d..943e0b06d 100644
--- a/xs/src/eigen/Eigen/src/Core/arch/CUDA/PacketMathHalf.h
+++ b/src/eigen/Eigen/src/Core/arch/CUDA/PacketMathHalf.h
diff --git a/xs/src/eigen/Eigen/src/Core/arch/CUDA/TypeCasting.h b/src/eigen/Eigen/src/Core/arch/CUDA/TypeCasting.h
index aa5fbce8e..aa5fbce8e 100644
--- a/xs/src/eigen/Eigen/src/Core/arch/CUDA/TypeCasting.h
+++ b/src/eigen/Eigen/src/Core/arch/CUDA/TypeCasting.h
diff --git a/xs/src/eigen/Eigen/src/Core/arch/Default/ConjHelper.h b/src/eigen/Eigen/src/Core/arch/Default/ConjHelper.h
index 4cfe34e05..4cfe34e05 100644
--- a/xs/src/eigen/Eigen/src/Core/arch/Default/ConjHelper.h
+++ b/src/eigen/Eigen/src/Core/arch/Default/ConjHelper.h
diff --git a/xs/src/eigen/Eigen/src/Core/arch/Default/Settings.h b/src/eigen/Eigen/src/Core/arch/Default/Settings.h
index 097373c84..097373c84 100644
--- a/xs/src/eigen/Eigen/src/Core/arch/Default/Settings.h
+++ b/src/eigen/Eigen/src/Core/arch/Default/Settings.h
diff --git a/xs/src/eigen/Eigen/src/Core/arch/NEON/Complex.h b/src/eigen/Eigen/src/Core/arch/NEON/Complex.h
index 306a309be..306a309be 100644
--- a/xs/src/eigen/Eigen/src/Core/arch/NEON/Complex.h
+++ b/src/eigen/Eigen/src/Core/arch/NEON/Complex.h
diff --git a/xs/src/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h b/src/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h
index 6bb05bb92..6bb05bb92 100644
--- a/xs/src/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h
+++ b/src/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h
diff --git a/xs/src/eigen/Eigen/src/Core/arch/NEON/PacketMath.h b/src/eigen/Eigen/src/Core/arch/NEON/PacketMath.h
index 3d5ed0d24..3d5ed0d24 100644
--- a/xs/src/eigen/Eigen/src/Core/arch/NEON/PacketMath.h
+++ b/src/eigen/Eigen/src/Core/arch/NEON/PacketMath.h
diff --git a/xs/src/eigen/Eigen/src/Core/arch/SSE/Complex.h b/src/eigen/Eigen/src/Core/arch/SSE/Complex.h
index d075043ce..d075043ce 100644
--- a/xs/src/eigen/Eigen/src/Core/arch/SSE/Complex.h
+++ b/src/eigen/Eigen/src/Core/arch/SSE/Complex.h
diff --git a/xs/src/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h b/src/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h
index 7b5f948e1..7b5f948e1 100644
--- a/xs/src/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h
+++ b/src/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h
diff --git a/xs/src/eigen/Eigen/src/Core/arch/SSE/PacketMath.h b/src/eigen/Eigen/src/Core/arch/SSE/PacketMath.h
index 5e652cc79..5e652cc79 100644
--- a/xs/src/eigen/Eigen/src/Core/arch/SSE/PacketMath.h
+++ b/src/eigen/Eigen/src/Core/arch/SSE/PacketMath.h
diff --git a/xs/src/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h b/src/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h
index c6ca8c716..c6ca8c716 100644
--- a/xs/src/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h
+++ b/src/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h
diff --git a/xs/src/eigen/Eigen/src/Core/arch/ZVector/Complex.h b/src/eigen/Eigen/src/Core/arch/ZVector/Complex.h
index 1bfb73397..1bfb73397 100644
--- a/xs/src/eigen/Eigen/src/Core/arch/ZVector/Complex.h
+++ b/src/eigen/Eigen/src/Core/arch/ZVector/Complex.h
diff --git a/xs/src/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h b/src/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h
index 5c7aa7256..5c7aa7256 100644
--- a/xs/src/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h
+++ b/src/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h
diff --git a/xs/src/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h b/src/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h
index 57b01fc63..57b01fc63 100644
--- a/xs/src/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h
+++ b/src/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h
diff --git a/xs/src/eigen/Eigen/src/Core/functors/AssignmentFunctors.h b/src/eigen/Eigen/src/Core/functors/AssignmentFunctors.h
index 4153b877c..4153b877c 100644
--- a/xs/src/eigen/Eigen/src/Core/functors/AssignmentFunctors.h
+++ b/src/eigen/Eigen/src/Core/functors/AssignmentFunctors.h
diff --git a/xs/src/eigen/Eigen/src/Core/functors/BinaryFunctors.h b/src/eigen/Eigen/src/Core/functors/BinaryFunctors.h
index 3eae6b8ca..3eae6b8ca 100644
--- a/xs/src/eigen/Eigen/src/Core/functors/BinaryFunctors.h
+++ b/src/eigen/Eigen/src/Core/functors/BinaryFunctors.h
diff --git a/xs/src/eigen/Eigen/src/Core/functors/NullaryFunctors.h b/src/eigen/Eigen/src/Core/functors/NullaryFunctors.h
index b03be0269..b03be0269 100644
--- a/xs/src/eigen/Eigen/src/Core/functors/NullaryFunctors.h
+++ b/src/eigen/Eigen/src/Core/functors/NullaryFunctors.h
diff --git a/xs/src/eigen/Eigen/src/Core/functors/StlFunctors.h b/src/eigen/Eigen/src/Core/functors/StlFunctors.h
index 9c1d75850..9c1d75850 100644
--- a/xs/src/eigen/Eigen/src/Core/functors/StlFunctors.h
+++ b/src/eigen/Eigen/src/Core/functors/StlFunctors.h
diff --git a/xs/src/eigen/Eigen/src/Core/functors/TernaryFunctors.h b/src/eigen/Eigen/src/Core/functors/TernaryFunctors.h
index b254e96c6..b254e96c6 100644
--- a/xs/src/eigen/Eigen/src/Core/functors/TernaryFunctors.h
+++ b/src/eigen/Eigen/src/Core/functors/TernaryFunctors.h
diff --git a/xs/src/eigen/Eigen/src/Core/functors/UnaryFunctors.h b/src/eigen/Eigen/src/Core/functors/UnaryFunctors.h
index 2e6a00ffd..2e6a00ffd 100644
--- a/xs/src/eigen/Eigen/src/Core/functors/UnaryFunctors.h
+++ b/src/eigen/Eigen/src/Core/functors/UnaryFunctors.h
diff --git a/xs/src/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h b/src/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h
index 45230bce5..45230bce5 100644
--- a/xs/src/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h
+++ b/src/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h
diff --git a/xs/src/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h b/src/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h
index 6440e1d09..6440e1d09 100644
--- a/xs/src/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h
+++ b/src/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h
diff --git a/xs/src/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h b/src/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h
index e844e37d1..e844e37d1 100644
--- a/xs/src/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h
+++ b/src/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h
diff --git a/xs/src/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h b/src/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h
index 9176a1382..9176a1382 100644
--- a/xs/src/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h
+++ b/src/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h
diff --git a/xs/src/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h b/src/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h
index b0f6b0d5b..b0f6b0d5b 100644
--- a/xs/src/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h
+++ b/src/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h
diff --git a/xs/src/eigen/Eigen/src/Core/products/GeneralMatrixVector.h b/src/eigen/Eigen/src/Core/products/GeneralMatrixVector.h
index a597c1f4e..a597c1f4e 100644
--- a/xs/src/eigen/Eigen/src/Core/products/GeneralMatrixVector.h
+++ b/src/eigen/Eigen/src/Core/products/GeneralMatrixVector.h
diff --git a/xs/src/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h b/src/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h
index 6e36c2b3c..6e36c2b3c 100644
--- a/xs/src/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h
+++ b/src/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h
diff --git a/xs/src/eigen/Eigen/src/Core/products/Parallelizer.h b/src/eigen/Eigen/src/Core/products/Parallelizer.h
index c2f084c82..c2f084c82 100644
--- a/xs/src/eigen/Eigen/src/Core/products/Parallelizer.h
+++ b/src/eigen/Eigen/src/Core/products/Parallelizer.h
diff --git a/xs/src/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h b/src/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h
index da6f82abc..da6f82abc 100644
--- a/xs/src/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h
+++ b/src/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h
diff --git a/xs/src/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h b/src/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h
index 9a5318507..9a5318507 100644
--- a/xs/src/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h
+++ b/src/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h
diff --git a/xs/src/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h b/src/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h
index 3fd180e6c..3fd180e6c 100644
--- a/xs/src/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h
+++ b/src/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h
diff --git a/xs/src/eigen/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h b/src/eigen/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h
index 1238345e3..1238345e3 100644
--- a/xs/src/eigen/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h
+++ b/src/eigen/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h
diff --git a/xs/src/eigen/Eigen/src/Core/products/SelfadjointProduct.h b/src/eigen/Eigen/src/Core/products/SelfadjointProduct.h
index f038d686f..f038d686f 100644
--- a/xs/src/eigen/Eigen/src/Core/products/SelfadjointProduct.h
+++ b/src/eigen/Eigen/src/Core/products/SelfadjointProduct.h
diff --git a/xs/src/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h b/src/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h
index 2ae364111..2ae364111 100644
--- a/xs/src/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h
+++ b/src/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h
diff --git a/xs/src/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h b/src/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h
index f784507e7..f784507e7 100644
--- a/xs/src/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h
+++ b/src/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h
diff --git a/xs/src/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h b/src/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h
index a25197ab0..a25197ab0 100644
--- a/xs/src/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h
+++ b/src/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h
diff --git a/xs/src/eigen/Eigen/src/Core/products/TriangularMatrixVector.h b/src/eigen/Eigen/src/Core/products/TriangularMatrixVector.h
index 76bfa159c..76bfa159c 100644
--- a/xs/src/eigen/Eigen/src/Core/products/TriangularMatrixVector.h
+++ b/src/eigen/Eigen/src/Core/products/TriangularMatrixVector.h
diff --git a/xs/src/eigen/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h b/src/eigen/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h
index 3d47a2b94..3d47a2b94 100644
--- a/xs/src/eigen/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h
+++ b/src/eigen/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h
diff --git a/xs/src/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h b/src/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h
index 223c38b86..223c38b86 100644
--- a/xs/src/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h
+++ b/src/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h
diff --git a/xs/src/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h b/src/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h
index f0775116a..f0775116a 100644
--- a/xs/src/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h
+++ b/src/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h
diff --git a/xs/src/eigen/Eigen/src/Core/products/TriangularSolverVector.h b/src/eigen/Eigen/src/Core/products/TriangularSolverVector.h
index b994759b2..b994759b2 100644
--- a/xs/src/eigen/Eigen/src/Core/products/TriangularSolverVector.h
+++ b/src/eigen/Eigen/src/Core/products/TriangularSolverVector.h
diff --git a/xs/src/eigen/Eigen/src/Core/util/BlasUtil.h b/src/eigen/Eigen/src/Core/util/BlasUtil.h
index 6e6ee119b..6e6ee119b 100644
--- a/xs/src/eigen/Eigen/src/Core/util/BlasUtil.h
+++ b/src/eigen/Eigen/src/Core/util/BlasUtil.h
diff --git a/xs/src/eigen/Eigen/src/Core/util/Constants.h b/src/eigen/Eigen/src/Core/util/Constants.h
index 7587d6842..7587d6842 100644
--- a/xs/src/eigen/Eigen/src/Core/util/Constants.h
+++ b/src/eigen/Eigen/src/Core/util/Constants.h
diff --git a/xs/src/eigen/Eigen/src/Core/util/DisableStupidWarnings.h b/src/eigen/Eigen/src/Core/util/DisableStupidWarnings.h
index 7559e129c..7559e129c 100644
--- a/xs/src/eigen/Eigen/src/Core/util/DisableStupidWarnings.h
+++ b/src/eigen/Eigen/src/Core/util/DisableStupidWarnings.h
diff --git a/xs/src/eigen/Eigen/src/Core/util/ForwardDeclarations.h b/src/eigen/Eigen/src/Core/util/ForwardDeclarations.h
index ea107393a..ea107393a 100644
--- a/xs/src/eigen/Eigen/src/Core/util/ForwardDeclarations.h
+++ b/src/eigen/Eigen/src/Core/util/ForwardDeclarations.h
diff --git a/xs/src/eigen/Eigen/src/Core/util/MKL_support.h b/src/eigen/Eigen/src/Core/util/MKL_support.h
index b7d6ecc76..b7d6ecc76 100644
--- a/xs/src/eigen/Eigen/src/Core/util/MKL_support.h
+++ b/src/eigen/Eigen/src/Core/util/MKL_support.h
diff --git a/xs/src/eigen/Eigen/src/Core/util/Macros.h b/src/eigen/Eigen/src/Core/util/Macros.h
index 02d21d2cd..02d21d2cd 100644
--- a/xs/src/eigen/Eigen/src/Core/util/Macros.h
+++ b/src/eigen/Eigen/src/Core/util/Macros.h
diff --git a/xs/src/eigen/Eigen/src/Core/util/Memory.h b/src/eigen/Eigen/src/Core/util/Memory.h
index 66cdbd8dd..66cdbd8dd 100644
--- a/xs/src/eigen/Eigen/src/Core/util/Memory.h
+++ b/src/eigen/Eigen/src/Core/util/Memory.h
diff --git a/xs/src/eigen/Eigen/src/Core/util/Meta.h b/src/eigen/Eigen/src/Core/util/Meta.h
index 1d73f05d6..1d73f05d6 100644
--- a/xs/src/eigen/Eigen/src/Core/util/Meta.h
+++ b/src/eigen/Eigen/src/Core/util/Meta.h
diff --git a/xs/src/eigen/Eigen/src/Core/util/NonMPL2.h b/src/eigen/Eigen/src/Core/util/NonMPL2.h
index 1af67cf18..1af67cf18 100644
--- a/xs/src/eigen/Eigen/src/Core/util/NonMPL2.h
+++ b/src/eigen/Eigen/src/Core/util/NonMPL2.h
diff --git a/xs/src/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h b/src/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h
index 86b60f52f..86b60f52f 100644
--- a/xs/src/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h
+++ b/src/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h
diff --git a/xs/src/eigen/Eigen/src/Core/util/StaticAssert.h b/src/eigen/Eigen/src/Core/util/StaticAssert.h
index 500e47792..500e47792 100644
--- a/xs/src/eigen/Eigen/src/Core/util/StaticAssert.h
+++ b/src/eigen/Eigen/src/Core/util/StaticAssert.h
diff --git a/xs/src/eigen/Eigen/src/Core/util/XprHelper.h b/src/eigen/Eigen/src/Core/util/XprHelper.h
index ba5bd186d..ba5bd186d 100644
--- a/xs/src/eigen/Eigen/src/Core/util/XprHelper.h
+++ b/src/eigen/Eigen/src/Core/util/XprHelper.h
diff --git a/xs/src/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h b/src/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h
index dc5fae06a..dc5fae06a 100644
--- a/xs/src/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h
+++ b/src/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h
diff --git a/xs/src/eigen/Eigen/src/Eigenvalues/ComplexSchur.h b/src/eigen/Eigen/src/Eigenvalues/ComplexSchur.h
index 7f38919f7..7f38919f7 100644
--- a/xs/src/eigen/Eigen/src/Eigenvalues/ComplexSchur.h
+++ b/src/eigen/Eigen/src/Eigenvalues/ComplexSchur.h
diff --git a/xs/src/eigen/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h b/src/eigen/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h
index 4980a3ede..4980a3ede 100644
--- a/xs/src/eigen/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h
+++ b/src/eigen/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h
diff --git a/xs/src/eigen/Eigen/src/Eigenvalues/EigenSolver.h b/src/eigen/Eigen/src/Eigenvalues/EigenSolver.h
index f205b185d..f205b185d 100644
--- a/xs/src/eigen/Eigen/src/Eigenvalues/EigenSolver.h
+++ b/src/eigen/Eigen/src/Eigenvalues/EigenSolver.h
diff --git a/xs/src/eigen/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h b/src/eigen/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h
index 87d789b3f..87d789b3f 100644
--- a/xs/src/eigen/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h
+++ b/src/eigen/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h
diff --git a/xs/src/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h b/src/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h
index 5f6bb8289..5f6bb8289 100644
--- a/xs/src/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h
+++ b/src/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h
diff --git a/xs/src/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h b/src/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h
index f647f69b0..f647f69b0 100644
--- a/xs/src/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h
+++ b/src/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h
diff --git a/xs/src/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h b/src/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h
index 4fec8af0a..4fec8af0a 100644
--- a/xs/src/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h
+++ b/src/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h
diff --git a/xs/src/eigen/Eigen/src/Eigenvalues/RealQZ.h b/src/eigen/Eigen/src/Eigenvalues/RealQZ.h
index b3a910dd9..b3a910dd9 100644
--- a/xs/src/eigen/Eigen/src/Eigenvalues/RealQZ.h
+++ b/src/eigen/Eigen/src/Eigenvalues/RealQZ.h
diff --git a/xs/src/eigen/Eigen/src/Eigenvalues/RealSchur.h b/src/eigen/Eigen/src/Eigenvalues/RealSchur.h
index 17ea903f5..17ea903f5 100644
--- a/xs/src/eigen/Eigen/src/Eigenvalues/RealSchur.h
+++ b/src/eigen/Eigen/src/Eigenvalues/RealSchur.h
diff --git a/xs/src/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h b/src/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h
index 2c2251715..2c2251715 100644
--- a/xs/src/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h
+++ b/src/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h
diff --git a/xs/src/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h b/src/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h
index 9ddd553f2..9ddd553f2 100644
--- a/xs/src/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h
+++ b/src/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h
diff --git a/xs/src/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h b/src/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h
index b0c947dc0..b0c947dc0 100644
--- a/xs/src/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h
+++ b/src/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h
diff --git a/xs/src/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h b/src/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h
index 1d102c17b..1d102c17b 100644
--- a/xs/src/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h
+++ b/src/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h
diff --git a/xs/src/eigen/Eigen/src/Geometry/AlignedBox.h b/src/eigen/Eigen/src/Geometry/AlignedBox.h
index 066eae4f9..066eae4f9 100644
--- a/xs/src/eigen/Eigen/src/Geometry/AlignedBox.h
+++ b/src/eigen/Eigen/src/Geometry/AlignedBox.h
diff --git a/xs/src/eigen/Eigen/src/Geometry/AngleAxis.h b/src/eigen/Eigen/src/Geometry/AngleAxis.h
index 83ee1be46..83ee1be46 100644
--- a/xs/src/eigen/Eigen/src/Geometry/AngleAxis.h
+++ b/src/eigen/Eigen/src/Geometry/AngleAxis.h
diff --git a/xs/src/eigen/Eigen/src/Geometry/EulerAngles.h b/src/eigen/Eigen/src/Geometry/EulerAngles.h
index c633268af..c633268af 100644
--- a/xs/src/eigen/Eigen/src/Geometry/EulerAngles.h
+++ b/src/eigen/Eigen/src/Geometry/EulerAngles.h
diff --git a/xs/src/eigen/Eigen/src/Geometry/Homogeneous.h b/src/eigen/Eigen/src/Geometry/Homogeneous.h
index 5f0da1a9e..5f0da1a9e 100644
--- a/xs/src/eigen/Eigen/src/Geometry/Homogeneous.h
+++ b/src/eigen/Eigen/src/Geometry/Homogeneous.h
diff --git a/xs/src/eigen/Eigen/src/Geometry/Hyperplane.h b/src/eigen/Eigen/src/Geometry/Hyperplane.h
index 05929b299..05929b299 100644
--- a/xs/src/eigen/Eigen/src/Geometry/Hyperplane.h
+++ b/src/eigen/Eigen/src/Geometry/Hyperplane.h
diff --git a/xs/src/eigen/Eigen/src/Geometry/OrthoMethods.h b/src/eigen/Eigen/src/Geometry/OrthoMethods.h
index a035e6310..a035e6310 100644
--- a/xs/src/eigen/Eigen/src/Geometry/OrthoMethods.h
+++ b/src/eigen/Eigen/src/Geometry/OrthoMethods.h
diff --git a/xs/src/eigen/Eigen/src/Geometry/ParametrizedLine.h b/src/eigen/Eigen/src/Geometry/ParametrizedLine.h
index 1e985d8cd..1e985d8cd 100644
--- a/xs/src/eigen/Eigen/src/Geometry/ParametrizedLine.h
+++ b/src/eigen/Eigen/src/Geometry/ParametrizedLine.h
diff --git a/xs/src/eigen/Eigen/src/Geometry/Quaternion.h b/src/eigen/Eigen/src/Geometry/Quaternion.h
index c3fd8c3e0..c3fd8c3e0 100644
--- a/xs/src/eigen/Eigen/src/Geometry/Quaternion.h
+++ b/src/eigen/Eigen/src/Geometry/Quaternion.h
diff --git a/xs/src/eigen/Eigen/src/Geometry/Rotation2D.h b/src/eigen/Eigen/src/Geometry/Rotation2D.h
index 884b7d0ee..884b7d0ee 100644
--- a/xs/src/eigen/Eigen/src/Geometry/Rotation2D.h
+++ b/src/eigen/Eigen/src/Geometry/Rotation2D.h
diff --git a/xs/src/eigen/Eigen/src/Geometry/RotationBase.h b/src/eigen/Eigen/src/Geometry/RotationBase.h
index f0ee0bd03..f0ee0bd03 100644
--- a/xs/src/eigen/Eigen/src/Geometry/RotationBase.h
+++ b/src/eigen/Eigen/src/Geometry/RotationBase.h
diff --git a/xs/src/eigen/Eigen/src/Geometry/Scaling.h b/src/eigen/Eigen/src/Geometry/Scaling.h
index f58ca03d9..f58ca03d9 100644
--- a/xs/src/eigen/Eigen/src/Geometry/Scaling.h
+++ b/src/eigen/Eigen/src/Geometry/Scaling.h
diff --git a/xs/src/eigen/Eigen/src/Geometry/Transform.h b/src/eigen/Eigen/src/Geometry/Transform.h
index 3f31ee45d..3f31ee45d 100644
--- a/xs/src/eigen/Eigen/src/Geometry/Transform.h
+++ b/src/eigen/Eigen/src/Geometry/Transform.h
diff --git a/xs/src/eigen/Eigen/src/Geometry/Translation.h b/src/eigen/Eigen/src/Geometry/Translation.h
index 51d9a82eb..51d9a82eb 100644
--- a/xs/src/eigen/Eigen/src/Geometry/Translation.h
+++ b/src/eigen/Eigen/src/Geometry/Translation.h
diff --git a/xs/src/eigen/Eigen/src/Geometry/Umeyama.h b/src/eigen/Eigen/src/Geometry/Umeyama.h
index 7e933fca1..7e933fca1 100644
--- a/xs/src/eigen/Eigen/src/Geometry/Umeyama.h
+++ b/src/eigen/Eigen/src/Geometry/Umeyama.h
diff --git a/xs/src/eigen/Eigen/src/Geometry/arch/Geometry_SSE.h b/src/eigen/Eigen/src/Geometry/arch/Geometry_SSE.h
index f68cab583..f68cab583 100644
--- a/xs/src/eigen/Eigen/src/Geometry/arch/Geometry_SSE.h
+++ b/src/eigen/Eigen/src/Geometry/arch/Geometry_SSE.h
diff --git a/xs/src/eigen/Eigen/src/Householder/BlockHouseholder.h b/src/eigen/Eigen/src/Householder/BlockHouseholder.h
index 01a7ed188..01a7ed188 100644
--- a/xs/src/eigen/Eigen/src/Householder/BlockHouseholder.h
+++ b/src/eigen/Eigen/src/Householder/BlockHouseholder.h
diff --git a/xs/src/eigen/Eigen/src/Householder/Householder.h b/src/eigen/Eigen/src/Householder/Householder.h
index 80de2c305..80de2c305 100644
--- a/xs/src/eigen/Eigen/src/Householder/Householder.h
+++ b/src/eigen/Eigen/src/Householder/Householder.h
diff --git a/xs/src/eigen/Eigen/src/Householder/HouseholderSequence.h b/src/eigen/Eigen/src/Householder/HouseholderSequence.h
index 3ce0a693d..3ce0a693d 100644
--- a/xs/src/eigen/Eigen/src/Householder/HouseholderSequence.h
+++ b/src/eigen/Eigen/src/Householder/HouseholderSequence.h
diff --git a/xs/src/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h b/src/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h
index f66c846ef..f66c846ef 100644
--- a/xs/src/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h
+++ b/src/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h
diff --git a/xs/src/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h b/src/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h
index 454f46814..454f46814 100644
--- a/xs/src/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h
+++ b/src/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h
diff --git a/xs/src/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h b/src/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h
index 395daa8e4..395daa8e4 100644
--- a/xs/src/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h
+++ b/src/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h
diff --git a/xs/src/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h b/src/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h
index e45c272b4..e45c272b4 100644
--- a/xs/src/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h
+++ b/src/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h
diff --git a/xs/src/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h b/src/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h
index 338e6f10a..338e6f10a 100644
--- a/xs/src/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h
+++ b/src/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h
diff --git a/xs/src/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h b/src/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h
index 7c2326eb7..7c2326eb7 100644
--- a/xs/src/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h
+++ b/src/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h
diff --git a/xs/src/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h b/src/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h
index 0aea0e099..0aea0e099 100644
--- a/xs/src/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h
+++ b/src/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h
diff --git a/xs/src/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h b/src/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h
index 0ace45177..0ace45177 100644
--- a/xs/src/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h
+++ b/src/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h
diff --git a/xs/src/eigen/Eigen/src/Jacobi/Jacobi.h b/src/eigen/Eigen/src/Jacobi/Jacobi.h
index 437e666a3..437e666a3 100644
--- a/xs/src/eigen/Eigen/src/Jacobi/Jacobi.h
+++ b/src/eigen/Eigen/src/Jacobi/Jacobi.h
diff --git a/xs/src/eigen/Eigen/src/LU/Determinant.h b/src/eigen/Eigen/src/LU/Determinant.h
index d6a3c1e5a..d6a3c1e5a 100644
--- a/xs/src/eigen/Eigen/src/LU/Determinant.h
+++ b/src/eigen/Eigen/src/LU/Determinant.h
diff --git a/xs/src/eigen/Eigen/src/LU/FullPivLU.h b/src/eigen/Eigen/src/LU/FullPivLU.h
index 03b6af706..03b6af706 100644
--- a/xs/src/eigen/Eigen/src/LU/FullPivLU.h
+++ b/src/eigen/Eigen/src/LU/FullPivLU.h
diff --git a/xs/src/eigen/Eigen/src/LU/InverseImpl.h b/src/eigen/Eigen/src/LU/InverseImpl.h
index f49f23360..f49f23360 100644
--- a/xs/src/eigen/Eigen/src/LU/InverseImpl.h
+++ b/src/eigen/Eigen/src/LU/InverseImpl.h
diff --git a/xs/src/eigen/Eigen/src/LU/PartialPivLU.h b/src/eigen/Eigen/src/LU/PartialPivLU.h
index d43961887..d43961887 100644
--- a/xs/src/eigen/Eigen/src/LU/PartialPivLU.h
+++ b/src/eigen/Eigen/src/LU/PartialPivLU.h
diff --git a/xs/src/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h b/src/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h
index 755168a94..755168a94 100644
--- a/xs/src/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h
+++ b/src/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h
diff --git a/xs/src/eigen/Eigen/src/LU/arch/Inverse_SSE.h b/src/eigen/Eigen/src/LU/arch/Inverse_SSE.h
index ebb64a62b..ebb64a62b 100644
--- a/xs/src/eigen/Eigen/src/LU/arch/Inverse_SSE.h
+++ b/src/eigen/Eigen/src/LU/arch/Inverse_SSE.h
diff --git a/xs/src/eigen/Eigen/src/MetisSupport/MetisSupport.h b/src/eigen/Eigen/src/MetisSupport/MetisSupport.h
index 4c15304ad..4c15304ad 100644
--- a/xs/src/eigen/Eigen/src/MetisSupport/MetisSupport.h
+++ b/src/eigen/Eigen/src/MetisSupport/MetisSupport.h
diff --git a/xs/src/eigen/Eigen/src/OrderingMethods/Amd.h b/src/eigen/Eigen/src/OrderingMethods/Amd.h
index f91ecb24e..f91ecb24e 100644
--- a/xs/src/eigen/Eigen/src/OrderingMethods/Amd.h
+++ b/src/eigen/Eigen/src/OrderingMethods/Amd.h
diff --git a/xs/src/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h b/src/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h
index da85b4d6e..da85b4d6e 100644
--- a/xs/src/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h
+++ b/src/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h
diff --git a/xs/src/eigen/Eigen/src/OrderingMethods/Ordering.h b/src/eigen/Eigen/src/OrderingMethods/Ordering.h
index 7ea9b14d7..7ea9b14d7 100644
--- a/xs/src/eigen/Eigen/src/OrderingMethods/Ordering.h
+++ b/src/eigen/Eigen/src/OrderingMethods/Ordering.h
diff --git a/xs/src/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h b/src/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h
index 160d8a523..160d8a523 100644
--- a/xs/src/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h
+++ b/src/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h
diff --git a/xs/src/eigen/Eigen/src/PardisoSupport/PardisoSupport.h b/src/eigen/Eigen/src/PardisoSupport/PardisoSupport.h
index 091c3970e..091c3970e 100644
--- a/xs/src/eigen/Eigen/src/PardisoSupport/PardisoSupport.h
+++ b/src/eigen/Eigen/src/PardisoSupport/PardisoSupport.h
diff --git a/xs/src/eigen/Eigen/src/QR/ColPivHouseholderQR.h b/src/eigen/Eigen/src/QR/ColPivHouseholderQR.h
index a7b47d55d..a7b47d55d 100644
--- a/xs/src/eigen/Eigen/src/QR/ColPivHouseholderQR.h
+++ b/src/eigen/Eigen/src/QR/ColPivHouseholderQR.h
diff --git a/xs/src/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h b/src/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h
index 4e9651f83..4e9651f83 100644
--- a/xs/src/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h
+++ b/src/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h
diff --git a/xs/src/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h b/src/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h
index 34c637b70..34c637b70 100644
--- a/xs/src/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h
+++ b/src/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h
diff --git a/xs/src/eigen/Eigen/src/QR/FullPivHouseholderQR.h b/src/eigen/Eigen/src/QR/FullPivHouseholderQR.h
index e489bddc2..e489bddc2 100644
--- a/xs/src/eigen/Eigen/src/QR/FullPivHouseholderQR.h
+++ b/src/eigen/Eigen/src/QR/FullPivHouseholderQR.h
diff --git a/xs/src/eigen/Eigen/src/QR/HouseholderQR.h b/src/eigen/Eigen/src/QR/HouseholderQR.h
index 3513d995c..3513d995c 100644
--- a/xs/src/eigen/Eigen/src/QR/HouseholderQR.h
+++ b/src/eigen/Eigen/src/QR/HouseholderQR.h
diff --git a/xs/src/eigen/Eigen/src/QR/HouseholderQR_LAPACKE.h b/src/eigen/Eigen/src/QR/HouseholderQR_LAPACKE.h
index 1dc7d5363..1dc7d5363 100644
--- a/xs/src/eigen/Eigen/src/QR/HouseholderQR_LAPACKE.h
+++ b/src/eigen/Eigen/src/QR/HouseholderQR_LAPACKE.h
diff --git a/xs/src/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h b/src/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h
index 953d57c9d..953d57c9d 100644
--- a/xs/src/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h
+++ b/src/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h
diff --git a/xs/src/eigen/Eigen/src/SVD/BDCSVD.h b/src/eigen/Eigen/src/SVD/BDCSVD.h
index 1134d66e7..1134d66e7 100644
--- a/xs/src/eigen/Eigen/src/SVD/BDCSVD.h
+++ b/src/eigen/Eigen/src/SVD/BDCSVD.h
diff --git a/xs/src/eigen/Eigen/src/SVD/JacobiSVD.h b/src/eigen/Eigen/src/SVD/JacobiSVD.h
index 43488b1e0..43488b1e0 100644
--- a/xs/src/eigen/Eigen/src/SVD/JacobiSVD.h
+++ b/src/eigen/Eigen/src/SVD/JacobiSVD.h
diff --git a/xs/src/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h b/src/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h
index ff0516f61..ff0516f61 100644
--- a/xs/src/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h
+++ b/src/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h
diff --git a/xs/src/eigen/Eigen/src/SVD/SVDBase.h b/src/eigen/Eigen/src/SVD/SVDBase.h
index cc90a3b75..cc90a3b75 100644
--- a/xs/src/eigen/Eigen/src/SVD/SVDBase.h
+++ b/src/eigen/Eigen/src/SVD/SVDBase.h
diff --git a/xs/src/eigen/Eigen/src/SVD/UpperBidiagonalization.h b/src/eigen/Eigen/src/SVD/UpperBidiagonalization.h
index 11ac847e1..11ac847e1 100644
--- a/xs/src/eigen/Eigen/src/SVD/UpperBidiagonalization.h
+++ b/src/eigen/Eigen/src/SVD/UpperBidiagonalization.h
diff --git a/xs/src/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h b/src/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h
index 2907f6529..2907f6529 100644
--- a/xs/src/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h
+++ b/src/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h
diff --git a/xs/src/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h b/src/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h
index 31e06995b..31e06995b 100644
--- a/xs/src/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h
+++ b/src/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h
diff --git a/xs/src/eigen/Eigen/src/SparseCore/AmbiVector.h b/src/eigen/Eigen/src/SparseCore/AmbiVector.h
index e0295f2af..e0295f2af 100644
--- a/xs/src/eigen/Eigen/src/SparseCore/AmbiVector.h
+++ b/src/eigen/Eigen/src/SparseCore/AmbiVector.h
diff --git a/xs/src/eigen/Eigen/src/SparseCore/CompressedStorage.h b/src/eigen/Eigen/src/SparseCore/CompressedStorage.h
index d89fa0dae..d89fa0dae 100644
--- a/xs/src/eigen/Eigen/src/SparseCore/CompressedStorage.h
+++ b/src/eigen/Eigen/src/SparseCore/CompressedStorage.h
diff --git a/xs/src/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h b/src/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h
index 9db119b67..9db119b67 100644
--- a/xs/src/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h
+++ b/src/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h
diff --git a/xs/src/eigen/Eigen/src/SparseCore/MappedSparseMatrix.h b/src/eigen/Eigen/src/SparseCore/MappedSparseMatrix.h
index 67718c85b..67718c85b 100644
--- a/xs/src/eigen/Eigen/src/SparseCore/MappedSparseMatrix.h
+++ b/src/eigen/Eigen/src/SparseCore/MappedSparseMatrix.h
diff --git a/xs/src/eigen/Eigen/src/SparseCore/SparseAssign.h b/src/eigen/Eigen/src/SparseCore/SparseAssign.h
index 18352a847..18352a847 100644
--- a/xs/src/eigen/Eigen/src/SparseCore/SparseAssign.h
+++ b/src/eigen/Eigen/src/SparseCore/SparseAssign.h
diff --git a/xs/src/eigen/Eigen/src/SparseCore/SparseBlock.h b/src/eigen/Eigen/src/SparseCore/SparseBlock.h
index 511e92b2f..511e92b2f 100644
--- a/xs/src/eigen/Eigen/src/SparseCore/SparseBlock.h
+++ b/src/eigen/Eigen/src/SparseCore/SparseBlock.h
diff --git a/xs/src/eigen/Eigen/src/SparseCore/SparseColEtree.h b/src/eigen/Eigen/src/SparseCore/SparseColEtree.h
index ebe02d1ab..ebe02d1ab 100644
--- a/xs/src/eigen/Eigen/src/SparseCore/SparseColEtree.h
+++ b/src/eigen/Eigen/src/SparseCore/SparseColEtree.h
diff --git a/xs/src/eigen/Eigen/src/SparseCore/SparseCompressedBase.h b/src/eigen/Eigen/src/SparseCore/SparseCompressedBase.h
index 5ccb46656..5ccb46656 100644
--- a/xs/src/eigen/Eigen/src/SparseCore/SparseCompressedBase.h
+++ b/src/eigen/Eigen/src/SparseCore/SparseCompressedBase.h
diff --git a/xs/src/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h b/src/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h
index e315e3550..e315e3550 100644
--- a/xs/src/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h
+++ b/src/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h
diff --git a/xs/src/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h b/src/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h
index ea7973790..ea7973790 100644
--- a/xs/src/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h
+++ b/src/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h
diff --git a/xs/src/eigen/Eigen/src/SparseCore/SparseDenseProduct.h b/src/eigen/Eigen/src/SparseCore/SparseDenseProduct.h
index 0547db596..0547db596 100644
--- a/xs/src/eigen/Eigen/src/SparseCore/SparseDenseProduct.h
+++ b/src/eigen/Eigen/src/SparseCore/SparseDenseProduct.h
diff --git a/xs/src/eigen/Eigen/src/SparseCore/SparseDiagonalProduct.h b/src/eigen/Eigen/src/SparseCore/SparseDiagonalProduct.h
index 941c03be3..941c03be3 100644
--- a/xs/src/eigen/Eigen/src/SparseCore/SparseDiagonalProduct.h
+++ b/src/eigen/Eigen/src/SparseCore/SparseDiagonalProduct.h
diff --git a/xs/src/eigen/Eigen/src/SparseCore/SparseDot.h b/src/eigen/Eigen/src/SparseCore/SparseDot.h
index 38bc4aa9e..38bc4aa9e 100644
--- a/xs/src/eigen/Eigen/src/SparseCore/SparseDot.h
+++ b/src/eigen/Eigen/src/SparseCore/SparseDot.h
diff --git a/xs/src/eigen/Eigen/src/SparseCore/SparseFuzzy.h b/src/eigen/Eigen/src/SparseCore/SparseFuzzy.h
index 7d47eb94d..7d47eb94d 100644
--- a/xs/src/eigen/Eigen/src/SparseCore/SparseFuzzy.h
+++ b/src/eigen/Eigen/src/SparseCore/SparseFuzzy.h
diff --git a/xs/src/eigen/Eigen/src/SparseCore/SparseMap.h b/src/eigen/Eigen/src/SparseCore/SparseMap.h
index f99be3379..f99be3379 100644
--- a/xs/src/eigen/Eigen/src/SparseCore/SparseMap.h
+++ b/src/eigen/Eigen/src/SparseCore/SparseMap.h
diff --git a/xs/src/eigen/Eigen/src/SparseCore/SparseMatrix.h b/src/eigen/Eigen/src/SparseCore/SparseMatrix.h
index 323c2323b..323c2323b 100644
--- a/xs/src/eigen/Eigen/src/SparseCore/SparseMatrix.h
+++ b/src/eigen/Eigen/src/SparseCore/SparseMatrix.h
diff --git a/xs/src/eigen/Eigen/src/SparseCore/SparseMatrixBase.h b/src/eigen/Eigen/src/SparseCore/SparseMatrixBase.h
index c6b548f11..c6b548f11 100644
--- a/xs/src/eigen/Eigen/src/SparseCore/SparseMatrixBase.h
+++ b/src/eigen/Eigen/src/SparseCore/SparseMatrixBase.h
diff --git a/xs/src/eigen/Eigen/src/SparseCore/SparsePermutation.h b/src/eigen/Eigen/src/SparseCore/SparsePermutation.h
index ef38357ae..ef38357ae 100644
--- a/xs/src/eigen/Eigen/src/SparseCore/SparsePermutation.h
+++ b/src/eigen/Eigen/src/SparseCore/SparsePermutation.h
diff --git a/xs/src/eigen/Eigen/src/SparseCore/SparseProduct.h b/src/eigen/Eigen/src/SparseCore/SparseProduct.h
index 4cbf68781..4cbf68781 100644
--- a/xs/src/eigen/Eigen/src/SparseCore/SparseProduct.h
+++ b/src/eigen/Eigen/src/SparseCore/SparseProduct.h
diff --git a/xs/src/eigen/Eigen/src/SparseCore/SparseRedux.h b/src/eigen/Eigen/src/SparseCore/SparseRedux.h
index 458774962..458774962 100644
--- a/xs/src/eigen/Eigen/src/SparseCore/SparseRedux.h
+++ b/src/eigen/Eigen/src/SparseCore/SparseRedux.h
diff --git a/xs/src/eigen/Eigen/src/SparseCore/SparseRef.h b/src/eigen/Eigen/src/SparseCore/SparseRef.h
index d91f38f97..d91f38f97 100644
--- a/xs/src/eigen/Eigen/src/SparseCore/SparseRef.h
+++ b/src/eigen/Eigen/src/SparseCore/SparseRef.h
diff --git a/xs/src/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h b/src/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h
index 65611b3d4..65611b3d4 100644
--- a/xs/src/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h
+++ b/src/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h
diff --git a/xs/src/eigen/Eigen/src/SparseCore/SparseSolverBase.h b/src/eigen/Eigen/src/SparseCore/SparseSolverBase.h
index b4c9a422f..b4c9a422f 100644
--- a/xs/src/eigen/Eigen/src/SparseCore/SparseSolverBase.h
+++ b/src/eigen/Eigen/src/SparseCore/SparseSolverBase.h
diff --git a/xs/src/eigen/Eigen/src/SparseCore/SparseSparseProductWithPruning.h b/src/eigen/Eigen/src/SparseCore/SparseSparseProductWithPruning.h
index 88820a48f..88820a48f 100644
--- a/xs/src/eigen/Eigen/src/SparseCore/SparseSparseProductWithPruning.h
+++ b/src/eigen/Eigen/src/SparseCore/SparseSparseProductWithPruning.h
diff --git a/xs/src/eigen/Eigen/src/SparseCore/SparseTranspose.h b/src/eigen/Eigen/src/SparseCore/SparseTranspose.h
index 3757d4c6b..3757d4c6b 100644
--- a/xs/src/eigen/Eigen/src/SparseCore/SparseTranspose.h
+++ b/src/eigen/Eigen/src/SparseCore/SparseTranspose.h
diff --git a/xs/src/eigen/Eigen/src/SparseCore/SparseTriangularView.h b/src/eigen/Eigen/src/SparseCore/SparseTriangularView.h
index 9ac120266..9ac120266 100644
--- a/xs/src/eigen/Eigen/src/SparseCore/SparseTriangularView.h
+++ b/src/eigen/Eigen/src/SparseCore/SparseTriangularView.h
diff --git a/xs/src/eigen/Eigen/src/SparseCore/SparseUtil.h b/src/eigen/Eigen/src/SparseCore/SparseUtil.h
index 74df0d496..74df0d496 100644
--- a/xs/src/eigen/Eigen/src/SparseCore/SparseUtil.h
+++ b/src/eigen/Eigen/src/SparseCore/SparseUtil.h
diff --git a/xs/src/eigen/Eigen/src/SparseCore/SparseVector.h b/src/eigen/Eigen/src/SparseCore/SparseVector.h
index 19b0fbc9d..19b0fbc9d 100644
--- a/xs/src/eigen/Eigen/src/SparseCore/SparseVector.h
+++ b/src/eigen/Eigen/src/SparseCore/SparseVector.h
diff --git a/xs/src/eigen/Eigen/src/SparseCore/SparseView.h b/src/eigen/Eigen/src/SparseCore/SparseView.h
index 7c4aea743..7c4aea743 100644
--- a/xs/src/eigen/Eigen/src/SparseCore/SparseView.h
+++ b/src/eigen/Eigen/src/SparseCore/SparseView.h
diff --git a/xs/src/eigen/Eigen/src/SparseCore/TriangularSolver.h b/src/eigen/Eigen/src/SparseCore/TriangularSolver.h
index f9c56ba79..f9c56ba79 100644
--- a/xs/src/eigen/Eigen/src/SparseCore/TriangularSolver.h
+++ b/src/eigen/Eigen/src/SparseCore/TriangularSolver.h
diff --git a/xs/src/eigen/Eigen/src/SparseLU/SparseLU.h b/src/eigen/Eigen/src/SparseLU/SparseLU.h
index f883ab383..f883ab383 100644
--- a/xs/src/eigen/Eigen/src/SparseLU/SparseLU.h
+++ b/src/eigen/Eigen/src/SparseLU/SparseLU.h
diff --git a/xs/src/eigen/Eigen/src/SparseLU/SparseLUImpl.h b/src/eigen/Eigen/src/SparseLU/SparseLUImpl.h
index fc0cfc4de..fc0cfc4de 100644
--- a/xs/src/eigen/Eigen/src/SparseLU/SparseLUImpl.h
+++ b/src/eigen/Eigen/src/SparseLU/SparseLUImpl.h
diff --git a/xs/src/eigen/Eigen/src/SparseLU/SparseLU_Memory.h b/src/eigen/Eigen/src/SparseLU/SparseLU_Memory.h
index 4dc42e87b..4dc42e87b 100644
--- a/xs/src/eigen/Eigen/src/SparseLU/SparseLU_Memory.h
+++ b/src/eigen/Eigen/src/SparseLU/SparseLU_Memory.h
diff --git a/xs/src/eigen/Eigen/src/SparseLU/SparseLU_Structs.h b/src/eigen/Eigen/src/SparseLU/SparseLU_Structs.h
index cf5ec449b..cf5ec449b 100644
--- a/xs/src/eigen/Eigen/src/SparseLU/SparseLU_Structs.h
+++ b/src/eigen/Eigen/src/SparseLU/SparseLU_Structs.h
diff --git a/xs/src/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h b/src/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h
index 721e1883b..721e1883b 100644
--- a/xs/src/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h
+++ b/src/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h
diff --git a/xs/src/eigen/Eigen/src/SparseLU/SparseLU_Utils.h b/src/eigen/Eigen/src/SparseLU/SparseLU_Utils.h
index 9e3dab44d..9e3dab44d 100644
--- a/xs/src/eigen/Eigen/src/SparseLU/SparseLU_Utils.h
+++ b/src/eigen/Eigen/src/SparseLU/SparseLU_Utils.h
diff --git a/xs/src/eigen/Eigen/src/SparseLU/SparseLU_column_bmod.h b/src/eigen/Eigen/src/SparseLU/SparseLU_column_bmod.h
index b57f06802..b57f06802 100644
--- a/xs/src/eigen/Eigen/src/SparseLU/SparseLU_column_bmod.h
+++ b/src/eigen/Eigen/src/SparseLU/SparseLU_column_bmod.h
diff --git a/xs/src/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h b/src/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h
index c98b30e32..c98b30e32 100644
--- a/xs/src/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h
+++ b/src/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h
diff --git a/xs/src/eigen/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h b/src/eigen/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h
index c32d8d8b1..c32d8d8b1 100644
--- a/xs/src/eigen/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h
+++ b/src/eigen/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h
diff --git a/xs/src/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h b/src/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h
index 95ba7413f..95ba7413f 100644
--- a/xs/src/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h
+++ b/src/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h
diff --git a/xs/src/eigen/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h b/src/eigen/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h
index 6f75d500e..6f75d500e 100644
--- a/xs/src/eigen/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h
+++ b/src/eigen/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h
diff --git a/xs/src/eigen/Eigen/src/SparseLU/SparseLU_kernel_bmod.h b/src/eigen/Eigen/src/SparseLU/SparseLU_kernel_bmod.h
index 8c1b3e8bc..8c1b3e8bc 100644
--- a/xs/src/eigen/Eigen/src/SparseLU/SparseLU_kernel_bmod.h
+++ b/src/eigen/Eigen/src/SparseLU/SparseLU_kernel_bmod.h
diff --git a/xs/src/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h b/src/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h
index 822cf32c3..822cf32c3 100644
--- a/xs/src/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h
+++ b/src/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h
diff --git a/xs/src/eigen/Eigen/src/SparseLU/SparseLU_panel_dfs.h b/src/eigen/Eigen/src/SparseLU/SparseLU_panel_dfs.h
index 155df7336..155df7336 100644
--- a/xs/src/eigen/Eigen/src/SparseLU/SparseLU_panel_dfs.h
+++ b/src/eigen/Eigen/src/SparseLU/SparseLU_panel_dfs.h
diff --git a/xs/src/eigen/Eigen/src/SparseLU/SparseLU_pivotL.h b/src/eigen/Eigen/src/SparseLU/SparseLU_pivotL.h
index a86dac93f..a86dac93f 100644
--- a/xs/src/eigen/Eigen/src/SparseLU/SparseLU_pivotL.h
+++ b/src/eigen/Eigen/src/SparseLU/SparseLU_pivotL.h
diff --git a/xs/src/eigen/Eigen/src/SparseLU/SparseLU_pruneL.h b/src/eigen/Eigen/src/SparseLU/SparseLU_pruneL.h
index ad32fed5e..ad32fed5e 100644
--- a/xs/src/eigen/Eigen/src/SparseLU/SparseLU_pruneL.h
+++ b/src/eigen/Eigen/src/SparseLU/SparseLU_pruneL.h
diff --git a/xs/src/eigen/Eigen/src/SparseLU/SparseLU_relax_snode.h b/src/eigen/Eigen/src/SparseLU/SparseLU_relax_snode.h
index c408d01b4..c408d01b4 100644
--- a/xs/src/eigen/Eigen/src/SparseLU/SparseLU_relax_snode.h
+++ b/src/eigen/Eigen/src/SparseLU/SparseLU_relax_snode.h
diff --git a/xs/src/eigen/Eigen/src/SparseQR/SparseQR.h b/src/eigen/Eigen/src/SparseQR/SparseQR.h
index 7409fcae9..7409fcae9 100644
--- a/xs/src/eigen/Eigen/src/SparseQR/SparseQR.h
+++ b/src/eigen/Eigen/src/SparseQR/SparseQR.h
diff --git a/xs/src/eigen/Eigen/src/StlSupport/StdDeque.h b/src/eigen/Eigen/src/StlSupport/StdDeque.h
index cf1fedf92..cf1fedf92 100644
--- a/xs/src/eigen/Eigen/src/StlSupport/StdDeque.h
+++ b/src/eigen/Eigen/src/StlSupport/StdDeque.h
diff --git a/xs/src/eigen/Eigen/src/StlSupport/StdList.h b/src/eigen/Eigen/src/StlSupport/StdList.h
index e1eba4985..e1eba4985 100644
--- a/xs/src/eigen/Eigen/src/StlSupport/StdList.h
+++ b/src/eigen/Eigen/src/StlSupport/StdList.h
diff --git a/xs/src/eigen/Eigen/src/StlSupport/StdVector.h b/src/eigen/Eigen/src/StlSupport/StdVector.h
index ec22821d2..ec22821d2 100644
--- a/xs/src/eigen/Eigen/src/StlSupport/StdVector.h
+++ b/src/eigen/Eigen/src/StlSupport/StdVector.h
diff --git a/xs/src/eigen/Eigen/src/StlSupport/details.h b/src/eigen/Eigen/src/StlSupport/details.h
index 2cfd13e03..2cfd13e03 100644
--- a/xs/src/eigen/Eigen/src/StlSupport/details.h
+++ b/src/eigen/Eigen/src/StlSupport/details.h
diff --git a/xs/src/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h b/src/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h
index 50a69f306..50a69f306 100644
--- a/xs/src/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h
+++ b/src/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h
diff --git a/xs/src/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h b/src/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h
index 91c09ab13..91c09ab13 100644
--- a/xs/src/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h
+++ b/src/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h
diff --git a/xs/src/eigen/Eigen/src/misc/Image.h b/src/eigen/Eigen/src/misc/Image.h
index b8b8a0455..b8b8a0455 100644
--- a/xs/src/eigen/Eigen/src/misc/Image.h
+++ b/src/eigen/Eigen/src/misc/Image.h
diff --git a/xs/src/eigen/Eigen/src/misc/Kernel.h b/src/eigen/Eigen/src/misc/Kernel.h
index bef5d6ff5..bef5d6ff5 100644
--- a/xs/src/eigen/Eigen/src/misc/Kernel.h
+++ b/src/eigen/Eigen/src/misc/Kernel.h
diff --git a/xs/src/eigen/Eigen/src/misc/RealSvd2x2.h b/src/eigen/Eigen/src/misc/RealSvd2x2.h
index abb4d3c2f..abb4d3c2f 100644
--- a/xs/src/eigen/Eigen/src/misc/RealSvd2x2.h
+++ b/src/eigen/Eigen/src/misc/RealSvd2x2.h
diff --git a/xs/src/eigen/Eigen/src/misc/blas.h b/src/eigen/Eigen/src/misc/blas.h
index 25215b15e..25215b15e 100644
--- a/xs/src/eigen/Eigen/src/misc/blas.h
+++ b/src/eigen/Eigen/src/misc/blas.h
diff --git a/xs/src/eigen/Eigen/src/misc/lapack.h b/src/eigen/Eigen/src/misc/lapack.h
index 249f3575c..249f3575c 100644
--- a/xs/src/eigen/Eigen/src/misc/lapack.h
+++ b/src/eigen/Eigen/src/misc/lapack.h
diff --git a/xs/src/eigen/Eigen/src/misc/lapacke.h b/src/eigen/Eigen/src/misc/lapacke.h
index 8c7e79b03..8c7e79b03 100644
--- a/xs/src/eigen/Eigen/src/misc/lapacke.h
+++ b/src/eigen/Eigen/src/misc/lapacke.h
diff --git a/xs/src/eigen/Eigen/src/misc/lapacke_mangling.h b/src/eigen/Eigen/src/misc/lapacke_mangling.h
index 6211fd144..6211fd144 100644
--- a/xs/src/eigen/Eigen/src/misc/lapacke_mangling.h
+++ b/src/eigen/Eigen/src/misc/lapacke_mangling.h
diff --git a/xs/src/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h b/src/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h
index 1f8a531af..1f8a531af 100644
--- a/xs/src/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h
+++ b/src/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h
diff --git a/xs/src/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h b/src/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h
index ebaa3f192..ebaa3f192 100644
--- a/xs/src/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h
+++ b/src/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h
diff --git a/xs/src/eigen/Eigen/src/plugins/BlockMethods.h b/src/eigen/Eigen/src/plugins/BlockMethods.h
index ac35a0086..ac35a0086 100644
--- a/xs/src/eigen/Eigen/src/plugins/BlockMethods.h
+++ b/src/eigen/Eigen/src/plugins/BlockMethods.h
diff --git a/xs/src/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h b/src/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h
index 8b6730ede..8b6730ede 100644
--- a/xs/src/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h
+++ b/src/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h
diff --git a/xs/src/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.h b/src/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.h
index 89f4faaac..89f4faaac 100644
--- a/xs/src/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.h
+++ b/src/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.h
diff --git a/xs/src/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h b/src/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h
index f1084abef..f1084abef 100644
--- a/xs/src/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h
+++ b/src/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h
diff --git a/xs/src/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h b/src/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h
index b1be3d566..b1be3d566 100644
--- a/xs/src/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h
+++ b/src/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h
diff --git a/xs/src/eigen/README.md b/src/eigen/README.md
index 39892c00b..39892c00b 100644
--- a/xs/src/eigen/README.md
+++ b/src/eigen/README.md
diff --git a/xs/src/expat/COPYING b/src/expat/COPYING
index 092c83bae..092c83bae 100644
--- a/xs/src/expat/COPYING
+++ b/src/expat/COPYING
diff --git a/xs/src/expat/README b/src/expat/README
index 40873a6f8..40873a6f8 100644
--- a/xs/src/expat/README
+++ b/src/expat/README
diff --git a/xs/src/expat/ascii.h b/src/expat/ascii.h
index d10530b09..d10530b09 100644
--- a/xs/src/expat/ascii.h
+++ b/src/expat/ascii.h
diff --git a/xs/src/expat/asciitab.h b/src/expat/asciitab.h
index 79a15c28c..79a15c28c 100644
--- a/xs/src/expat/asciitab.h
+++ b/src/expat/asciitab.h
diff --git a/xs/src/expat/expat.h b/src/expat/expat.h
index 086e24b39..086e24b39 100644
--- a/xs/src/expat/expat.h
+++ b/src/expat/expat.h
diff --git a/xs/src/expat/expat_config.h b/src/expat/expat_config.h
index 8aa80db0d..8aa80db0d 100644
--- a/xs/src/expat/expat_config.h
+++ b/src/expat/expat_config.h
diff --git a/xs/src/expat/expat_external.h b/src/expat/expat_external.h
index 56cd84367..56cd84367 100644
--- a/xs/src/expat/expat_external.h
+++ b/src/expat/expat_external.h
diff --git a/xs/src/expat/iasciitab.h b/src/expat/iasciitab.h
index 24a1d5ccc..24a1d5ccc 100644
--- a/xs/src/expat/iasciitab.h
+++ b/src/expat/iasciitab.h
diff --git a/xs/src/expat/internal.h b/src/expat/internal.h
index 94cb98e15..94cb98e15 100644
--- a/xs/src/expat/internal.h
+++ b/src/expat/internal.h
diff --git a/xs/src/expat/latin1tab.h b/src/expat/latin1tab.h
index 53c25d76b..53c25d76b 100644
--- a/xs/src/expat/latin1tab.h
+++ b/src/expat/latin1tab.h
diff --git a/xs/src/expat/nametab.h b/src/expat/nametab.h
index b05e62c77..b05e62c77 100644
--- a/xs/src/expat/nametab.h
+++ b/src/expat/nametab.h
diff --git a/xs/src/expat/utf8tab.h b/src/expat/utf8tab.h
index 7bb3e7760..7bb3e7760 100644
--- a/xs/src/expat/utf8tab.h
+++ b/src/expat/utf8tab.h
diff --git a/xs/src/expat/xmlparse.c b/src/expat/xmlparse.c
index fbe5e0200..fbe5e0200 100644
--- a/xs/src/expat/xmlparse.c
+++ b/src/expat/xmlparse.c
diff --git a/xs/src/expat/xmlrole.c b/src/expat/xmlrole.c
index 8475238d3..8475238d3 100644
--- a/xs/src/expat/xmlrole.c
+++ b/src/expat/xmlrole.c
diff --git a/xs/src/expat/xmlrole.h b/src/expat/xmlrole.h
index 4dd9f06f9..4dd9f06f9 100644
--- a/xs/src/expat/xmlrole.h
+++ b/src/expat/xmlrole.h
diff --git a/xs/src/expat/xmltok.c b/src/expat/xmltok.c
index f10b459ff..f10b459ff 100644
--- a/xs/src/expat/xmltok.c
+++ b/src/expat/xmltok.c
diff --git a/xs/src/expat/xmltok.h b/src/expat/xmltok.h
index 752007e8b..752007e8b 100644
--- a/xs/src/expat/xmltok.h
+++ b/src/expat/xmltok.h
diff --git a/xs/src/expat/xmltok_impl.h b/src/expat/xmltok_impl.h
index da0ea60a6..da0ea60a6 100644
--- a/xs/src/expat/xmltok_impl.h
+++ b/src/expat/xmltok_impl.h
diff --git a/xs/src/expat/xmltok_impl.inc b/src/expat/xmltok_impl.inc
index 5f779c057..5f779c057 100644
--- a/xs/src/expat/xmltok_impl.inc
+++ b/src/expat/xmltok_impl.inc
diff --git a/xs/src/expat/xmltok_ns.inc b/src/expat/xmltok_ns.inc
index c3b88fdf4..c3b88fdf4 100644
--- a/xs/src/expat/xmltok_ns.inc
+++ b/src/expat/xmltok_ns.inc
diff --git a/xs/src/glew/LICENSE.txt b/src/glew/LICENSE.txt
index f7078042e..f7078042e 100644
--- a/xs/src/glew/LICENSE.txt
+++ b/src/glew/LICENSE.txt
diff --git a/xs/src/glew/README.md b/src/glew/README.md
index f31cd0ce2..f31cd0ce2 100644
--- a/xs/src/glew/README.md
+++ b/src/glew/README.md
diff --git a/xs/src/glew/include/GL/glew.h b/src/glew/include/GL/glew.h
index 702265c38..702265c38 100644
--- a/xs/src/glew/include/GL/glew.h
+++ b/src/glew/include/GL/glew.h
diff --git a/xs/src/glew/include/GL/glxew.h b/src/glew/include/GL/glxew.h
index d803d260b..d803d260b 100644
--- a/xs/src/glew/include/GL/glxew.h
+++ b/src/glew/include/GL/glxew.h
diff --git a/xs/src/glew/include/GL/wglew.h b/src/glew/include/GL/wglew.h
index c13c54a5f..c13c54a5f 100644
--- a/xs/src/glew/include/GL/wglew.h
+++ b/src/glew/include/GL/wglew.h
diff --git a/xs/src/glew/src/glew.c b/src/glew/src/glew.c
index 2ed1c74a5..2ed1c74a5 100644
--- a/xs/src/glew/src/glew.c
+++ b/src/glew/src/glew.c
diff --git a/xs/src/libnest2d/CMakeLists.txt b/src/libnest2d/CMakeLists.txt
index f81355012..f81355012 100644
--- a/xs/src/libnest2d/CMakeLists.txt
+++ b/src/libnest2d/CMakeLists.txt
diff --git a/xs/src/libnest2d/LICENSE.txt b/src/libnest2d/LICENSE.txt
index dba13ed2d..dba13ed2d 100644
--- a/xs/src/libnest2d/LICENSE.txt
+++ b/src/libnest2d/LICENSE.txt
diff --git a/xs/src/libnest2d/README.md b/src/libnest2d/README.md
index 61a7ac7d0..61a7ac7d0 100644
--- a/xs/src/libnest2d/README.md
+++ b/src/libnest2d/README.md
diff --git a/xs/src/libnest2d/cmake_modules/DownloadNLopt.cmake b/src/libnest2d/cmake_modules/DownloadNLopt.cmake
index 0f5392596..0f5392596 100644
--- a/xs/src/libnest2d/cmake_modules/DownloadNLopt.cmake
+++ b/src/libnest2d/cmake_modules/DownloadNLopt.cmake
diff --git a/xs/src/libnest2d/cmake_modules/DownloadProject.CMakeLists.cmake.in b/src/libnest2d/cmake_modules/DownloadProject.CMakeLists.cmake.in
index d5cf3c1d9..d5cf3c1d9 100644
--- a/xs/src/libnest2d/cmake_modules/DownloadProject.CMakeLists.cmake.in
+++ b/src/libnest2d/cmake_modules/DownloadProject.CMakeLists.cmake.in
diff --git a/xs/src/libnest2d/cmake_modules/DownloadProject.cmake b/src/libnest2d/cmake_modules/DownloadProject.cmake
index 1709e09ad..1709e09ad 100644
--- a/xs/src/libnest2d/cmake_modules/DownloadProject.cmake
+++ b/src/libnest2d/cmake_modules/DownloadProject.cmake
diff --git a/xs/src/libnest2d/cmake_modules/FindClipper.cmake b/src/libnest2d/cmake_modules/FindClipper.cmake
index f6b973440..f6b973440 100644
--- a/xs/src/libnest2d/cmake_modules/FindClipper.cmake
+++ b/src/libnest2d/cmake_modules/FindClipper.cmake
diff --git a/xs/src/libnest2d/cmake_modules/FindNLopt.cmake b/src/libnest2d/cmake_modules/FindNLopt.cmake
index 4b93be7b6..4b93be7b6 100644
--- a/xs/src/libnest2d/cmake_modules/FindNLopt.cmake
+++ b/src/libnest2d/cmake_modules/FindNLopt.cmake
diff --git a/xs/src/libnest2d/cmake_modules/FindTBB.cmake b/src/libnest2d/cmake_modules/FindTBB.cmake
index 8b498d3ab..8b498d3ab 100644
--- a/xs/src/libnest2d/cmake_modules/FindTBB.cmake
+++ b/src/libnest2d/cmake_modules/FindTBB.cmake
diff --git a/xs/src/libnest2d/examples/main.cpp b/src/libnest2d/examples/main.cpp
index ebc3fb15c..ebc3fb15c 100644
--- a/xs/src/libnest2d/examples/main.cpp
+++ b/src/libnest2d/examples/main.cpp
diff --git a/xs/src/libnest2d/libnest2d.h b/src/libnest2d/libnest2d.h
index bfd88f4f5..bfd88f4f5 100644
--- a/xs/src/libnest2d/libnest2d.h
+++ b/src/libnest2d/libnest2d.h
diff --git a/xs/src/libnest2d/libnest2d/boost_alg.hpp b/src/libnest2d/libnest2d/boost_alg.hpp
index bb0403b06..bb0403b06 100644
--- a/xs/src/libnest2d/libnest2d/boost_alg.hpp
+++ b/src/libnest2d/libnest2d/boost_alg.hpp
diff --git a/xs/src/libnest2d/libnest2d/clipper_backend/CMakeLists.txt b/src/libnest2d/libnest2d/clipper_backend/CMakeLists.txt
index b6f2de439..b6f2de439 100644
--- a/xs/src/libnest2d/libnest2d/clipper_backend/CMakeLists.txt
+++ b/src/libnest2d/libnest2d/clipper_backend/CMakeLists.txt
diff --git a/xs/src/libnest2d/libnest2d/clipper_backend/clipper_backend.hpp b/src/libnest2d/libnest2d/clipper_backend/clipper_backend.hpp
index 745fd2108..745fd2108 100644
--- a/xs/src/libnest2d/libnest2d/clipper_backend/clipper_backend.hpp
+++ b/src/libnest2d/libnest2d/clipper_backend/clipper_backend.hpp
diff --git a/xs/src/libnest2d/libnest2d/common.hpp b/src/libnest2d/libnest2d/common.hpp
index 6867f76f3..6867f76f3 100644
--- a/xs/src/libnest2d/libnest2d/common.hpp
+++ b/src/libnest2d/libnest2d/common.hpp
diff --git a/xs/src/libnest2d/libnest2d/geometry_traits.hpp b/src/libnest2d/libnest2d/geometry_traits.hpp
index a78a03b3a..a78a03b3a 100644
--- a/xs/src/libnest2d/libnest2d/geometry_traits.hpp
+++ b/src/libnest2d/libnest2d/geometry_traits.hpp
diff --git a/xs/src/libnest2d/libnest2d/geometry_traits_nfp.hpp b/src/libnest2d/libnest2d/geometry_traits_nfp.hpp
index 2982454cd..2982454cd 100644
--- a/xs/src/libnest2d/libnest2d/geometry_traits_nfp.hpp
+++ b/src/libnest2d/libnest2d/geometry_traits_nfp.hpp
diff --git a/xs/src/libnest2d/libnest2d/libnest2d.hpp b/src/libnest2d/libnest2d/libnest2d.hpp
index 8841d1b73..8841d1b73 100644
--- a/xs/src/libnest2d/libnest2d/libnest2d.hpp
+++ b/src/libnest2d/libnest2d/libnest2d.hpp
diff --git a/xs/src/libnest2d/libnest2d/metaloop.hpp b/src/libnest2d/libnest2d/metaloop.hpp
index d88988ba1..d88988ba1 100644
--- a/xs/src/libnest2d/libnest2d/metaloop.hpp
+++ b/src/libnest2d/libnest2d/metaloop.hpp
diff --git a/xs/src/libnest2d/libnest2d/optimizer.hpp b/src/libnest2d/libnest2d/optimizer.hpp
index 90d2f2ff9..90d2f2ff9 100644
--- a/xs/src/libnest2d/libnest2d/optimizer.hpp
+++ b/src/libnest2d/libnest2d/optimizer.hpp
diff --git a/xs/src/libnest2d/libnest2d/optimizers/genetic.hpp b/src/libnest2d/libnest2d/optimizers/genetic.hpp
index 276854a12..276854a12 100644
--- a/xs/src/libnest2d/libnest2d/optimizers/genetic.hpp
+++ b/src/libnest2d/libnest2d/optimizers/genetic.hpp
diff --git a/xs/src/libnest2d/libnest2d/optimizers/nlopt_boilerplate.hpp b/src/libnest2d/libnest2d/optimizers/nlopt_boilerplate.hpp
index 1a0f06e02..1a0f06e02 100644
--- a/xs/src/libnest2d/libnest2d/optimizers/nlopt_boilerplate.hpp
+++ b/src/libnest2d/libnest2d/optimizers/nlopt_boilerplate.hpp
diff --git a/xs/src/libnest2d/libnest2d/optimizers/simplex.hpp b/src/libnest2d/libnest2d/optimizers/simplex.hpp
index 78b09b89a..78b09b89a 100644
--- a/xs/src/libnest2d/libnest2d/optimizers/simplex.hpp
+++ b/src/libnest2d/libnest2d/optimizers/simplex.hpp
diff --git a/xs/src/libnest2d/libnest2d/optimizers/subplex.hpp b/src/libnest2d/libnest2d/optimizers/subplex.hpp
index 841b04057..841b04057 100644
--- a/xs/src/libnest2d/libnest2d/optimizers/subplex.hpp
+++ b/src/libnest2d/libnest2d/optimizers/subplex.hpp
diff --git a/xs/src/libnest2d/libnest2d/placers/bottomleftplacer.hpp b/src/libnest2d/libnest2d/placers/bottomleftplacer.hpp
index 18c27c40c..18c27c40c 100644
--- a/xs/src/libnest2d/libnest2d/placers/bottomleftplacer.hpp
+++ b/src/libnest2d/libnest2d/placers/bottomleftplacer.hpp
diff --git a/xs/src/libnest2d/libnest2d/placers/nfpplacer.hpp b/src/libnest2d/libnest2d/placers/nfpplacer.hpp
index c86fb507e..c86fb507e 100644
--- a/xs/src/libnest2d/libnest2d/placers/nfpplacer.hpp
+++ b/src/libnest2d/libnest2d/placers/nfpplacer.hpp
diff --git a/xs/src/libnest2d/libnest2d/placers/placer_boilerplate.hpp b/src/libnest2d/libnest2d/placers/placer_boilerplate.hpp
index 0df1b8c91..0df1b8c91 100644
--- a/xs/src/libnest2d/libnest2d/placers/placer_boilerplate.hpp
+++ b/src/libnest2d/libnest2d/placers/placer_boilerplate.hpp
diff --git a/xs/src/libnest2d/libnest2d/rotfinder.hpp b/src/libnest2d/libnest2d/rotfinder.hpp
index 525fd8759..525fd8759 100644
--- a/xs/src/libnest2d/libnest2d/rotfinder.hpp
+++ b/src/libnest2d/libnest2d/rotfinder.hpp
diff --git a/xs/src/libnest2d/libnest2d/selections/djd_heuristic.hpp b/src/libnest2d/libnest2d/selections/djd_heuristic.hpp
index 39761f557..39761f557 100644
--- a/xs/src/libnest2d/libnest2d/selections/djd_heuristic.hpp
+++ b/src/libnest2d/libnest2d/selections/djd_heuristic.hpp
diff --git a/xs/src/libnest2d/libnest2d/selections/filler.hpp b/src/libnest2d/libnest2d/selections/filler.hpp
index 5f95a6eff..5f95a6eff 100644
--- a/xs/src/libnest2d/libnest2d/selections/filler.hpp
+++ b/src/libnest2d/libnest2d/selections/filler.hpp
diff --git a/xs/src/libnest2d/libnest2d/selections/firstfit.hpp b/src/libnest2d/libnest2d/selections/firstfit.hpp
index 6bb9c60e4..6bb9c60e4 100644
--- a/xs/src/libnest2d/libnest2d/selections/firstfit.hpp
+++ b/src/libnest2d/libnest2d/selections/firstfit.hpp
diff --git a/xs/src/libnest2d/libnest2d/selections/selection_boilerplate.hpp b/src/libnest2d/libnest2d/selections/selection_boilerplate.hpp
index cfb98a9c8..cfb98a9c8 100644
--- a/xs/src/libnest2d/libnest2d/selections/selection_boilerplate.hpp
+++ b/src/libnest2d/libnest2d/selections/selection_boilerplate.hpp
diff --git a/xs/src/libnest2d/tests/CMakeLists.txt b/src/libnest2d/tests/CMakeLists.txt
index 3777f3c56..3777f3c56 100644
--- a/xs/src/libnest2d/tests/CMakeLists.txt
+++ b/src/libnest2d/tests/CMakeLists.txt
diff --git a/xs/src/libnest2d/tests/printer_parts.cpp b/src/libnest2d/tests/printer_parts.cpp
index bdc2a3d43..bdc2a3d43 100644
--- a/xs/src/libnest2d/tests/printer_parts.cpp
+++ b/src/libnest2d/tests/printer_parts.cpp
diff --git a/xs/src/libnest2d/tests/printer_parts.h b/src/libnest2d/tests/printer_parts.h
index b9a4eb8fa..b9a4eb8fa 100644
--- a/xs/src/libnest2d/tests/printer_parts.h
+++ b/src/libnest2d/tests/printer_parts.h
diff --git a/xs/src/libnest2d/tests/test.cpp b/src/libnest2d/tests/test.cpp
index 323fb8d31..323fb8d31 100644
--- a/xs/src/libnest2d/tests/test.cpp
+++ b/src/libnest2d/tests/test.cpp
diff --git a/xs/src/benchmark.h b/src/libnest2d/tools/benchmark.h
index 19870b37b..19870b37b 100644
--- a/xs/src/benchmark.h
+++ b/src/libnest2d/tools/benchmark.h
diff --git a/xs/src/libnest2d/tools/libnfpglue.cpp b/src/libnest2d/tools/libnfpglue.cpp
index 31733acf9..31733acf9 100644
--- a/xs/src/libnest2d/tools/libnfpglue.cpp
+++ b/src/libnest2d/tools/libnfpglue.cpp
diff --git a/xs/src/libnest2d/tools/libnfpglue.hpp b/src/libnest2d/tools/libnfpglue.hpp
index 1ff033cb9..1ff033cb9 100644
--- a/xs/src/libnest2d/tools/libnfpglue.hpp
+++ b/src/libnest2d/tools/libnfpglue.hpp
diff --git a/xs/src/libnest2d/tools/libnfporb/LICENSE b/src/libnest2d/tools/libnfporb/LICENSE
index 94a9ed024..94a9ed024 100644
--- a/xs/src/libnest2d/tools/libnfporb/LICENSE
+++ b/src/libnest2d/tools/libnfporb/LICENSE
diff --git a/xs/src/libnest2d/tools/libnfporb/ORIGIN b/src/libnest2d/tools/libnfporb/ORIGIN
index 788bfd9af..788bfd9af 100644
--- a/xs/src/libnest2d/tools/libnfporb/ORIGIN
+++ b/src/libnest2d/tools/libnfporb/ORIGIN
diff --git a/xs/src/libnest2d/tools/libnfporb/README.md b/src/libnest2d/tools/libnfporb/README.md
index 9698972be..9698972be 100644
--- a/xs/src/libnest2d/tools/libnfporb/README.md
+++ b/src/libnest2d/tools/libnfporb/README.md
diff --git a/xs/src/libnest2d/tools/libnfporb/libnfporb.hpp b/src/libnest2d/tools/libnfporb/libnfporb.hpp
index 8cb34567e..8cb34567e 100644
--- a/xs/src/libnest2d/tools/libnfporb/libnfporb.hpp
+++ b/src/libnest2d/tools/libnfporb/libnfporb.hpp
diff --git a/xs/src/libnest2d/tools/nfp_svgnest.hpp b/src/libnest2d/tools/nfp_svgnest.hpp
index ac5700c10..ac5700c10 100644
--- a/xs/src/libnest2d/tools/nfp_svgnest.hpp
+++ b/src/libnest2d/tools/nfp_svgnest.hpp
diff --git a/xs/src/libnest2d/tools/nfp_svgnest_glue.hpp b/src/libnest2d/tools/nfp_svgnest_glue.hpp
index ea1fb4d07..ea1fb4d07 100644
--- a/xs/src/libnest2d/tools/nfp_svgnest_glue.hpp
+++ b/src/libnest2d/tools/nfp_svgnest_glue.hpp
diff --git a/xs/src/libnest2d/tools/svgtools.hpp b/src/libnest2d/tools/svgtools.hpp
index 776dd5a1a..776dd5a1a 100644
--- a/xs/src/libnest2d/tools/svgtools.hpp
+++ b/src/libnest2d/tools/svgtools.hpp
diff --git a/xs/src/libslic3r/BoundingBox.cpp b/src/libslic3r/BoundingBox.cpp
index d3cca7ff2..d3cca7ff2 100644
--- a/xs/src/libslic3r/BoundingBox.cpp
+++ b/src/libslic3r/BoundingBox.cpp
diff --git a/xs/src/libslic3r/BoundingBox.hpp b/src/libslic3r/BoundingBox.hpp
index b3a1c2f5c..b3a1c2f5c 100644
--- a/xs/src/libslic3r/BoundingBox.hpp
+++ b/src/libslic3r/BoundingBox.hpp
diff --git a/xs/src/libslic3r/BridgeDetector.cpp b/src/libslic3r/BridgeDetector.cpp
index ccc3505ce..ccc3505ce 100644
--- a/xs/src/libslic3r/BridgeDetector.cpp
+++ b/src/libslic3r/BridgeDetector.cpp
diff --git a/xs/src/libslic3r/BridgeDetector.hpp b/src/libslic3r/BridgeDetector.hpp
index 5c55276be..5c55276be 100644
--- a/xs/src/libslic3r/BridgeDetector.hpp
+++ b/src/libslic3r/BridgeDetector.hpp
diff --git a/src/libslic3r/CMakeLists.txt b/src/libslic3r/CMakeLists.txt
new file mode 100644
index 000000000..6955dd1e7
--- /dev/null
+++ b/src/libslic3r/CMakeLists.txt
@@ -0,0 +1,173 @@
+project(libslic3r)
+cmake_minimum_required(VERSION 2.6)
+
+add_library(libslic3r STATIC
+ BoundingBox.cpp
+ BoundingBox.hpp
+ BridgeDetector.cpp
+ BridgeDetector.hpp
+ ClipperUtils.cpp
+ ClipperUtils.hpp
+ Config.cpp
+ Config.hpp
+ EdgeGrid.cpp
+ EdgeGrid.hpp
+ ExPolygon.cpp
+ ExPolygon.hpp
+ ExPolygonCollection.cpp
+ ExPolygonCollection.hpp
+ Extruder.cpp
+ Extruder.hpp
+ ExtrusionEntity.cpp
+ ExtrusionEntity.hpp
+ ExtrusionEntityCollection.cpp
+ ExtrusionEntityCollection.hpp
+ ExtrusionSimulator.cpp
+ ExtrusionSimulator.hpp
+ FileParserError.hpp
+ Fill/Fill.cpp
+ Fill/Fill.hpp
+ Fill/Fill3DHoneycomb.cpp
+ Fill/Fill3DHoneycomb.hpp
+ Fill/FillBase.cpp
+ Fill/FillBase.hpp
+ Fill/FillConcentric.cpp
+ Fill/FillConcentric.hpp
+ Fill/FillHoneycomb.cpp
+ Fill/FillHoneycomb.hpp
+ Fill/FillGyroid.cpp
+ Fill/FillGyroid.hpp
+ Fill/FillPlanePath.cpp
+ Fill/FillPlanePath.hpp
+ Fill/FillRectilinear.cpp
+ Fill/FillRectilinear.hpp
+ Fill/FillRectilinear2.cpp
+ Fill/FillRectilinear2.hpp
+ Fill/FillRectilinear3.cpp
+ Fill/FillRectilinear3.hpp
+ Flow.cpp
+ Flow.hpp
+ Format/3mf.cpp
+ Format/3mf.hpp
+ Format/AMF.cpp
+ Format/AMF.hpp
+ Format/OBJ.cpp
+ Format/OBJ.hpp
+ Format/objparser.cpp
+ Format/objparser.hpp
+ Format/PRUS.cpp
+ Format/PRUS.hpp
+ Format/STL.cpp
+ Format/STL.hpp
+ GCode/Analyzer.cpp
+ GCode/Analyzer.hpp
+ GCode/CoolingBuffer.cpp
+ GCode/CoolingBuffer.hpp
+ GCode/PostProcessor.cpp
+ GCode/PostProcessor.hpp
+ GCode/PressureEqualizer.cpp
+ GCode/PressureEqualizer.hpp
+ GCode/PreviewData.cpp
+ GCode/PreviewData.hpp
+ GCode/PrintExtents.cpp
+ GCode/PrintExtents.hpp
+ GCode/SpiralVase.cpp
+ GCode/SpiralVase.hpp
+ GCode/ToolOrdering.cpp
+ GCode/ToolOrdering.hpp
+ GCode/WipeTower.hpp
+ GCode/WipeTowerPrusaMM.cpp
+ GCode/WipeTowerPrusaMM.hpp
+ GCode.cpp
+ GCode.hpp
+ GCodeReader.cpp
+ GCodeReader.hpp
+ GCodeSender.cpp
+ GCodeSender.hpp
+ GCodeTimeEstimator.cpp
+ GCodeTimeEstimator.hpp
+ GCodeWriter.cpp
+ GCodeWriter.hpp
+ Geometry.cpp
+ Geometry.hpp
+ Int128.hpp
+# KdTree.hpp
+ Layer.cpp
+ Layer.hpp
+ LayerRegion.cpp
+ libslic3r.h
+ Line.cpp
+ Line.hpp
+ Model.cpp
+ Model.hpp
+ ModelArrange.hpp
+ MotionPlanner.cpp
+ MotionPlanner.hpp
+ MultiPoint.cpp
+ MultiPoint.hpp
+ MutablePriorityQueue.hpp
+ PerimeterGenerator.cpp
+ PerimeterGenerator.hpp
+ PlaceholderParser.cpp
+ PlaceholderParser.hpp
+ Point.cpp
+ Point.hpp
+ Polygon.cpp
+ Polygon.hpp
+ Polyline.cpp
+ Polyline.hpp
+ PolylineCollection.cpp
+ PolylineCollection.hpp
+ Print.cpp
+ Print.hpp
+ PrintExport.hpp
+ PrintConfig.cpp
+ PrintConfig.hpp
+ PrintObject.cpp
+ PrintRegion.cpp
+ Rasterizer/Rasterizer.hpp
+ Rasterizer/Rasterizer.cpp
+ Slicing.cpp
+ Slicing.hpp
+ SlicingAdaptive.cpp
+ SlicingAdaptive.hpp
+ SupportMaterial.cpp
+ SupportMaterial.hpp
+ Surface.cpp
+ Surface.hpp
+ SurfaceCollection.cpp
+ SurfaceCollection.hpp
+ SVG.cpp
+ SVG.hpp
+ Technologies.hpp
+ TriangleMesh.cpp
+ TriangleMesh.hpp
+ SLABasePool.hpp
+ SLABasePool.cpp
+ utils.cpp
+ Utils.hpp
+)
+
+target_compile_definitions(libslic3r PUBLIC -DUSE_TBB ${PNG_DEFINITIONS})
+target_include_directories(libslic3r PUBLIC BEFORE ${LIBNEST2D_INCLUDES} ${PNG_INCLUDE_DIRS})
+target_link_libraries(libslic3r
+ ${LIBNEST2D_LIBRARIES}
+ admesh
+ miniz
+ ${Boost_LIBRARIES}
+ clipper
+ nowide
+ ${EXPAT_LIBRARIES}
+ ${GLEW_LIBRARIES}
+ ${PNG_LIBRARIES}
+ polypartition
+ poly2tri
+ qhull
+ semver
+ ${TBB_LIBRARIES}
+# ${wxWidgets_LIBRARIES}
+ )
+
+if(SLIC3R_PROFILE)
+ target_link_libraries(slic3r Shiny)
+endif()
diff --git a/xs/src/libslic3r/ClipperUtils.cpp b/src/libslic3r/ClipperUtils.cpp
index f00e908ce..f00e908ce 100644
--- a/xs/src/libslic3r/ClipperUtils.cpp
+++ b/src/libslic3r/ClipperUtils.cpp
diff --git a/xs/src/libslic3r/ClipperUtils.hpp b/src/libslic3r/ClipperUtils.hpp
index b065cfe07..b065cfe07 100644
--- a/xs/src/libslic3r/ClipperUtils.hpp
+++ b/src/libslic3r/ClipperUtils.hpp
diff --git a/xs/src/libslic3r/Config.cpp b/src/libslic3r/Config.cpp
index e7442d773..e7442d773 100644
--- a/xs/src/libslic3r/Config.cpp
+++ b/src/libslic3r/Config.cpp
diff --git a/xs/src/libslic3r/Config.hpp b/src/libslic3r/Config.hpp
index e3cd14335..e3cd14335 100644
--- a/xs/src/libslic3r/Config.hpp
+++ b/src/libslic3r/Config.hpp
diff --git a/xs/src/libslic3r/EdgeGrid.cpp b/src/libslic3r/EdgeGrid.cpp
index 2b2893c80..2b2893c80 100644
--- a/xs/src/libslic3r/EdgeGrid.cpp
+++ b/src/libslic3r/EdgeGrid.cpp
diff --git a/xs/src/libslic3r/EdgeGrid.hpp b/src/libslic3r/EdgeGrid.hpp
index ab1aa4ed0..ab1aa4ed0 100644
--- a/xs/src/libslic3r/EdgeGrid.hpp
+++ b/src/libslic3r/EdgeGrid.hpp
diff --git a/xs/src/libslic3r/ExPolygon.cpp b/src/libslic3r/ExPolygon.cpp
index 00bb4ffe4..00bb4ffe4 100644
--- a/xs/src/libslic3r/ExPolygon.cpp
+++ b/src/libslic3r/ExPolygon.cpp
diff --git a/xs/src/libslic3r/ExPolygon.hpp b/src/libslic3r/ExPolygon.hpp
index 4833ee49e..4833ee49e 100644
--- a/xs/src/libslic3r/ExPolygon.hpp
+++ b/src/libslic3r/ExPolygon.hpp
diff --git a/xs/src/libslic3r/ExPolygonCollection.cpp b/src/libslic3r/ExPolygonCollection.cpp
index 6933544b6..6933544b6 100644
--- a/xs/src/libslic3r/ExPolygonCollection.cpp
+++ b/src/libslic3r/ExPolygonCollection.cpp
diff --git a/xs/src/libslic3r/ExPolygonCollection.hpp b/src/libslic3r/ExPolygonCollection.hpp
index 4c181cd6a..4c181cd6a 100644
--- a/xs/src/libslic3r/ExPolygonCollection.hpp
+++ b/src/libslic3r/ExPolygonCollection.hpp
diff --git a/xs/src/libslic3r/Extruder.cpp b/src/libslic3r/Extruder.cpp
index 74d900825..74d900825 100644
--- a/xs/src/libslic3r/Extruder.cpp
+++ b/src/libslic3r/Extruder.cpp
diff --git a/xs/src/libslic3r/Extruder.hpp b/src/libslic3r/Extruder.hpp
index df92bf84b..df92bf84b 100644
--- a/xs/src/libslic3r/Extruder.hpp
+++ b/src/libslic3r/Extruder.hpp
diff --git a/xs/src/libslic3r/ExtrusionEntity.cpp b/src/libslic3r/ExtrusionEntity.cpp
index 92f0d3669..92f0d3669 100644
--- a/xs/src/libslic3r/ExtrusionEntity.cpp
+++ b/src/libslic3r/ExtrusionEntity.cpp
diff --git a/xs/src/libslic3r/ExtrusionEntity.hpp b/src/libslic3r/ExtrusionEntity.hpp
index cce3020f8..cce3020f8 100644
--- a/xs/src/libslic3r/ExtrusionEntity.hpp
+++ b/src/libslic3r/ExtrusionEntity.hpp
diff --git a/xs/src/libslic3r/ExtrusionEntityCollection.cpp b/src/libslic3r/ExtrusionEntityCollection.cpp
index 7a086bcbf..7a086bcbf 100644
--- a/xs/src/libslic3r/ExtrusionEntityCollection.cpp
+++ b/src/libslic3r/ExtrusionEntityCollection.cpp
diff --git a/xs/src/libslic3r/ExtrusionEntityCollection.hpp b/src/libslic3r/ExtrusionEntityCollection.hpp
index 230c04160..230c04160 100644
--- a/xs/src/libslic3r/ExtrusionEntityCollection.hpp
+++ b/src/libslic3r/ExtrusionEntityCollection.hpp
diff --git a/xs/src/libslic3r/ExtrusionSimulator.cpp b/src/libslic3r/ExtrusionSimulator.cpp
index fcb2fe825..fcb2fe825 100644
--- a/xs/src/libslic3r/ExtrusionSimulator.cpp
+++ b/src/libslic3r/ExtrusionSimulator.cpp
diff --git a/xs/src/libslic3r/ExtrusionSimulator.hpp b/src/libslic3r/ExtrusionSimulator.hpp
index 040406766..040406766 100644
--- a/xs/src/libslic3r/ExtrusionSimulator.hpp
+++ b/src/libslic3r/ExtrusionSimulator.hpp
diff --git a/xs/src/libslic3r/FileParserError.hpp b/src/libslic3r/FileParserError.hpp
index 3f560fa4f..3f560fa4f 100644
--- a/xs/src/libslic3r/FileParserError.hpp
+++ b/src/libslic3r/FileParserError.hpp
diff --git a/xs/src/libslic3r/Fill/Fill.cpp b/src/libslic3r/Fill/Fill.cpp
index f1436c931..f1436c931 100644
--- a/xs/src/libslic3r/Fill/Fill.cpp
+++ b/src/libslic3r/Fill/Fill.cpp
diff --git a/xs/src/libslic3r/Fill/Fill.hpp b/src/libslic3r/Fill/Fill.hpp
index c04305c04..c04305c04 100644
--- a/xs/src/libslic3r/Fill/Fill.hpp
+++ b/src/libslic3r/Fill/Fill.hpp
diff --git a/xs/src/libslic3r/Fill/Fill3DHoneycomb.cpp b/src/libslic3r/Fill/Fill3DHoneycomb.cpp
index 6a37e4369..6a37e4369 100644
--- a/xs/src/libslic3r/Fill/Fill3DHoneycomb.cpp
+++ b/src/libslic3r/Fill/Fill3DHoneycomb.cpp
diff --git a/xs/src/libslic3r/Fill/Fill3DHoneycomb.hpp b/src/libslic3r/Fill/Fill3DHoneycomb.hpp
index 52b792251..52b792251 100644
--- a/xs/src/libslic3r/Fill/Fill3DHoneycomb.hpp
+++ b/src/libslic3r/Fill/Fill3DHoneycomb.hpp
diff --git a/xs/src/libslic3r/Fill/FillBase.cpp b/src/libslic3r/Fill/FillBase.cpp
index 7a99e84f7..7a99e84f7 100644
--- a/xs/src/libslic3r/Fill/FillBase.cpp
+++ b/src/libslic3r/Fill/FillBase.cpp
diff --git a/xs/src/libslic3r/Fill/FillBase.hpp b/src/libslic3r/Fill/FillBase.hpp
index b67d14339..b67d14339 100644
--- a/xs/src/libslic3r/Fill/FillBase.hpp
+++ b/src/libslic3r/Fill/FillBase.hpp
diff --git a/xs/src/libslic3r/Fill/FillConcentric.cpp b/src/libslic3r/Fill/FillConcentric.cpp
index 8a3a7ea89..8a3a7ea89 100644
--- a/xs/src/libslic3r/Fill/FillConcentric.cpp
+++ b/src/libslic3r/Fill/FillConcentric.cpp
diff --git a/xs/src/libslic3r/Fill/FillConcentric.hpp b/src/libslic3r/Fill/FillConcentric.hpp
index 1286858ea..1286858ea 100644
--- a/xs/src/libslic3r/Fill/FillConcentric.hpp
+++ b/src/libslic3r/Fill/FillConcentric.hpp
diff --git a/xs/src/libslic3r/Fill/FillGyroid.cpp b/src/libslic3r/Fill/FillGyroid.cpp
index d6bf03ce6..d6bf03ce6 100644
--- a/xs/src/libslic3r/Fill/FillGyroid.cpp
+++ b/src/libslic3r/Fill/FillGyroid.cpp
diff --git a/xs/src/libslic3r/Fill/FillGyroid.hpp b/src/libslic3r/Fill/FillGyroid.hpp
index 17924b5ab..17924b5ab 100644
--- a/xs/src/libslic3r/Fill/FillGyroid.hpp
+++ b/src/libslic3r/Fill/FillGyroid.hpp
diff --git a/xs/src/libslic3r/Fill/FillHoneycomb.cpp b/src/libslic3r/Fill/FillHoneycomb.cpp
index cbfe926f2..cbfe926f2 100644
--- a/xs/src/libslic3r/Fill/FillHoneycomb.cpp
+++ b/src/libslic3r/Fill/FillHoneycomb.cpp
diff --git a/xs/src/libslic3r/Fill/FillHoneycomb.hpp b/src/libslic3r/Fill/FillHoneycomb.hpp
index 4717602d4..4717602d4 100644
--- a/xs/src/libslic3r/Fill/FillHoneycomb.hpp
+++ b/src/libslic3r/Fill/FillHoneycomb.hpp
diff --git a/xs/src/libslic3r/Fill/FillPlanePath.cpp b/src/libslic3r/Fill/FillPlanePath.cpp
index 615cc6efe..615cc6efe 100644
--- a/xs/src/libslic3r/Fill/FillPlanePath.cpp
+++ b/src/libslic3r/Fill/FillPlanePath.cpp
diff --git a/xs/src/libslic3r/Fill/FillPlanePath.hpp b/src/libslic3r/Fill/FillPlanePath.hpp
index 49fb2b387..49fb2b387 100644
--- a/xs/src/libslic3r/Fill/FillPlanePath.hpp
+++ b/src/libslic3r/Fill/FillPlanePath.hpp
diff --git a/xs/src/libslic3r/Fill/FillRectilinear.cpp b/src/libslic3r/Fill/FillRectilinear.cpp
index 205eb1b66..205eb1b66 100644
--- a/xs/src/libslic3r/Fill/FillRectilinear.cpp
+++ b/src/libslic3r/Fill/FillRectilinear.cpp
diff --git a/xs/src/libslic3r/Fill/FillRectilinear.hpp b/src/libslic3r/Fill/FillRectilinear.hpp
index 1be85f755..1be85f755 100644
--- a/xs/src/libslic3r/Fill/FillRectilinear.hpp
+++ b/src/libslic3r/Fill/FillRectilinear.hpp
diff --git a/xs/src/libslic3r/Fill/FillRectilinear2.cpp b/src/libslic3r/Fill/FillRectilinear2.cpp
index 65440d0ef..65440d0ef 100644
--- a/xs/src/libslic3r/Fill/FillRectilinear2.cpp
+++ b/src/libslic3r/Fill/FillRectilinear2.cpp
diff --git a/xs/src/libslic3r/Fill/FillRectilinear2.hpp b/src/libslic3r/Fill/FillRectilinear2.hpp
index 4459919b0..4459919b0 100644
--- a/xs/src/libslic3r/Fill/FillRectilinear2.hpp
+++ b/src/libslic3r/Fill/FillRectilinear2.hpp
diff --git a/xs/src/libslic3r/Fill/FillRectilinear3.cpp b/src/libslic3r/Fill/FillRectilinear3.cpp
index 8fc129eac..8fc129eac 100644
--- a/xs/src/libslic3r/Fill/FillRectilinear3.cpp
+++ b/src/libslic3r/Fill/FillRectilinear3.cpp
diff --git a/xs/src/libslic3r/Fill/FillRectilinear3.hpp b/src/libslic3r/Fill/FillRectilinear3.hpp
index 2023a25b7..2023a25b7 100644
--- a/xs/src/libslic3r/Fill/FillRectilinear3.hpp
+++ b/src/libslic3r/Fill/FillRectilinear3.hpp
diff --git a/xs/src/libslic3r/Flow.cpp b/src/libslic3r/Flow.cpp
index e71b935db..e71b935db 100644
--- a/xs/src/libslic3r/Flow.cpp
+++ b/src/libslic3r/Flow.cpp
diff --git a/xs/src/libslic3r/Flow.hpp b/src/libslic3r/Flow.hpp
index 516490b35..516490b35 100644
--- a/xs/src/libslic3r/Flow.hpp
+++ b/src/libslic3r/Flow.hpp
diff --git a/xs/src/libslic3r/Format/3mf.cpp b/src/libslic3r/Format/3mf.cpp
index 43c99f19f..43c99f19f 100644
--- a/xs/src/libslic3r/Format/3mf.cpp
+++ b/src/libslic3r/Format/3mf.cpp
diff --git a/xs/src/libslic3r/Format/3mf.hpp b/src/libslic3r/Format/3mf.hpp
index 85bc812e3..85bc812e3 100644
--- a/xs/src/libslic3r/Format/3mf.hpp
+++ b/src/libslic3r/Format/3mf.hpp
diff --git a/xs/src/libslic3r/Format/AMF.cpp b/src/libslic3r/Format/AMF.cpp
index 458ce79de..458ce79de 100644
--- a/xs/src/libslic3r/Format/AMF.cpp
+++ b/src/libslic3r/Format/AMF.cpp
diff --git a/xs/src/libslic3r/Format/AMF.hpp b/src/libslic3r/Format/AMF.hpp
index 4779e9a51..4779e9a51 100644
--- a/xs/src/libslic3r/Format/AMF.hpp
+++ b/src/libslic3r/Format/AMF.hpp
diff --git a/xs/src/libslic3r/Format/OBJ.cpp b/src/libslic3r/Format/OBJ.cpp
index ee5756083..ee5756083 100644
--- a/xs/src/libslic3r/Format/OBJ.cpp
+++ b/src/libslic3r/Format/OBJ.cpp
diff --git a/xs/src/libslic3r/Format/OBJ.hpp b/src/libslic3r/Format/OBJ.hpp
index 9a8790bff..9a8790bff 100644
--- a/xs/src/libslic3r/Format/OBJ.hpp
+++ b/src/libslic3r/Format/OBJ.hpp
diff --git a/xs/src/libslic3r/Format/PRUS.cpp b/src/libslic3r/Format/PRUS.cpp
index 45eb56c63..45eb56c63 100644
--- a/xs/src/libslic3r/Format/PRUS.cpp
+++ b/src/libslic3r/Format/PRUS.cpp
diff --git a/xs/src/libslic3r/Format/PRUS.hpp b/src/libslic3r/Format/PRUS.hpp
index 8559a70d6..8559a70d6 100644
--- a/xs/src/libslic3r/Format/PRUS.hpp
+++ b/src/libslic3r/Format/PRUS.hpp
diff --git a/xs/src/libslic3r/Format/STL.cpp b/src/libslic3r/Format/STL.cpp
index 99e2ff193..99e2ff193 100644
--- a/xs/src/libslic3r/Format/STL.cpp
+++ b/src/libslic3r/Format/STL.cpp
diff --git a/xs/src/libslic3r/Format/STL.hpp b/src/libslic3r/Format/STL.hpp
index 2fd32324c..2fd32324c 100644
--- a/xs/src/libslic3r/Format/STL.hpp
+++ b/src/libslic3r/Format/STL.hpp
diff --git a/xs/src/libslic3r/Format/objparser.cpp b/src/libslic3r/Format/objparser.cpp
index 88dfae695..88dfae695 100644
--- a/xs/src/libslic3r/Format/objparser.cpp
+++ b/src/libslic3r/Format/objparser.cpp
diff --git a/xs/src/libslic3r/Format/objparser.hpp b/src/libslic3r/Format/objparser.hpp
index 5fc25e297..5fc25e297 100644
--- a/xs/src/libslic3r/Format/objparser.hpp
+++ b/src/libslic3r/Format/objparser.hpp
diff --git a/xs/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp
index d10705c18..d10705c18 100644
--- a/xs/src/libslic3r/GCode.cpp
+++ b/src/libslic3r/GCode.cpp
diff --git a/xs/src/libslic3r/GCode.hpp b/src/libslic3r/GCode.hpp
index 45f17a68a..45f17a68a 100644
--- a/xs/src/libslic3r/GCode.hpp
+++ b/src/libslic3r/GCode.hpp
diff --git a/xs/src/libslic3r/GCode/Analyzer.cpp b/src/libslic3r/GCode/Analyzer.cpp
index 51d5b1a06..51d5b1a06 100644
--- a/xs/src/libslic3r/GCode/Analyzer.cpp
+++ b/src/libslic3r/GCode/Analyzer.cpp
diff --git a/xs/src/libslic3r/GCode/Analyzer.hpp b/src/libslic3r/GCode/Analyzer.hpp
index 27a49b869..27a49b869 100644
--- a/xs/src/libslic3r/GCode/Analyzer.hpp
+++ b/src/libslic3r/GCode/Analyzer.hpp
diff --git a/xs/src/libslic3r/GCode/CoolingBuffer.cpp b/src/libslic3r/GCode/CoolingBuffer.cpp
index 40ccc7b09..40ccc7b09 100644
--- a/xs/src/libslic3r/GCode/CoolingBuffer.cpp
+++ b/src/libslic3r/GCode/CoolingBuffer.cpp
diff --git a/xs/src/libslic3r/GCode/CoolingBuffer.hpp b/src/libslic3r/GCode/CoolingBuffer.hpp
index bf4b082e2..bf4b082e2 100644
--- a/xs/src/libslic3r/GCode/CoolingBuffer.hpp
+++ b/src/libslic3r/GCode/CoolingBuffer.hpp
diff --git a/xs/src/libslic3r/GCode/PostProcessor.cpp b/src/libslic3r/GCode/PostProcessor.cpp
index c04aeae3c..c04aeae3c 100644
--- a/xs/src/libslic3r/GCode/PostProcessor.cpp
+++ b/src/libslic3r/GCode/PostProcessor.cpp
diff --git a/xs/src/libslic3r/GCode/PostProcessor.hpp b/src/libslic3r/GCode/PostProcessor.hpp
index ce47374cb..ce47374cb 100644
--- a/xs/src/libslic3r/GCode/PostProcessor.hpp
+++ b/src/libslic3r/GCode/PostProcessor.hpp
diff --git a/xs/src/libslic3r/GCode/PressureEqualizer.cpp b/src/libslic3r/GCode/PressureEqualizer.cpp
index 3b2a58a88..3b2a58a88 100644
--- a/xs/src/libslic3r/GCode/PressureEqualizer.cpp
+++ b/src/libslic3r/GCode/PressureEqualizer.cpp
diff --git a/xs/src/libslic3r/GCode/PressureEqualizer.hpp b/src/libslic3r/GCode/PressureEqualizer.hpp
index 13cdc9418..13cdc9418 100644
--- a/xs/src/libslic3r/GCode/PressureEqualizer.hpp
+++ b/src/libslic3r/GCode/PressureEqualizer.hpp
diff --git a/xs/src/libslic3r/GCode/PreviewData.cpp b/src/libslic3r/GCode/PreviewData.cpp
index 9cf9716e0..9cf9716e0 100644
--- a/xs/src/libslic3r/GCode/PreviewData.cpp
+++ b/src/libslic3r/GCode/PreviewData.cpp
diff --git a/xs/src/libslic3r/GCode/PreviewData.hpp b/src/libslic3r/GCode/PreviewData.hpp
index ab74993f5..ab74993f5 100644
--- a/xs/src/libslic3r/GCode/PreviewData.hpp
+++ b/src/libslic3r/GCode/PreviewData.hpp
diff --git a/xs/src/libslic3r/GCode/PrintExtents.cpp b/src/libslic3r/GCode/PrintExtents.cpp
index 92a58fdf0..92a58fdf0 100644
--- a/xs/src/libslic3r/GCode/PrintExtents.cpp
+++ b/src/libslic3r/GCode/PrintExtents.cpp
diff --git a/xs/src/libslic3r/GCode/PrintExtents.hpp b/src/libslic3r/GCode/PrintExtents.hpp
index db507689d..db507689d 100644
--- a/xs/src/libslic3r/GCode/PrintExtents.hpp
+++ b/src/libslic3r/GCode/PrintExtents.hpp
diff --git a/xs/src/libslic3r/GCode/SpiralVase.cpp b/src/libslic3r/GCode/SpiralVase.cpp
index 8e8ae3075..8e8ae3075 100644
--- a/xs/src/libslic3r/GCode/SpiralVase.cpp
+++ b/src/libslic3r/GCode/SpiralVase.cpp
diff --git a/xs/src/libslic3r/GCode/SpiralVase.hpp b/src/libslic3r/GCode/SpiralVase.hpp
index 60aa668d8..60aa668d8 100644
--- a/xs/src/libslic3r/GCode/SpiralVase.hpp
+++ b/src/libslic3r/GCode/SpiralVase.hpp
diff --git a/xs/src/libslic3r/GCode/ToolOrdering.cpp b/src/libslic3r/GCode/ToolOrdering.cpp
index 175b69447..175b69447 100644
--- a/xs/src/libslic3r/GCode/ToolOrdering.cpp
+++ b/src/libslic3r/GCode/ToolOrdering.cpp
diff --git a/xs/src/libslic3r/GCode/ToolOrdering.hpp b/src/libslic3r/GCode/ToolOrdering.hpp
index 4dcf6516a..4dcf6516a 100644
--- a/xs/src/libslic3r/GCode/ToolOrdering.hpp
+++ b/src/libslic3r/GCode/ToolOrdering.hpp
diff --git a/xs/src/libslic3r/GCode/WipeTower.hpp b/src/libslic3r/GCode/WipeTower.hpp
index 5cbbc1ca9..5cbbc1ca9 100644
--- a/xs/src/libslic3r/GCode/WipeTower.hpp
+++ b/src/libslic3r/GCode/WipeTower.hpp
diff --git a/xs/src/libslic3r/GCode/WipeTowerPrusaMM.cpp b/src/libslic3r/GCode/WipeTowerPrusaMM.cpp
index 54bdfdfd6..54bdfdfd6 100644
--- a/xs/src/libslic3r/GCode/WipeTowerPrusaMM.cpp
+++ b/src/libslic3r/GCode/WipeTowerPrusaMM.cpp
diff --git a/xs/src/libslic3r/GCode/WipeTowerPrusaMM.hpp b/src/libslic3r/GCode/WipeTowerPrusaMM.hpp
index 06625d189..06625d189 100644
--- a/xs/src/libslic3r/GCode/WipeTowerPrusaMM.hpp
+++ b/src/libslic3r/GCode/WipeTowerPrusaMM.hpp
diff --git a/xs/src/libslic3r/GCodeReader.cpp b/src/libslic3r/GCodeReader.cpp
index 51853e9fa..51853e9fa 100644
--- a/xs/src/libslic3r/GCodeReader.cpp
+++ b/src/libslic3r/GCodeReader.cpp
diff --git a/xs/src/libslic3r/GCodeReader.hpp b/src/libslic3r/GCodeReader.hpp
index 84ed89a7c..84ed89a7c 100644
--- a/xs/src/libslic3r/GCodeReader.hpp
+++ b/src/libslic3r/GCodeReader.hpp
diff --git a/xs/src/libslic3r/GCodeSender.cpp b/src/libslic3r/GCodeSender.cpp
index 0988091ce..0988091ce 100644
--- a/xs/src/libslic3r/GCodeSender.cpp
+++ b/src/libslic3r/GCodeSender.cpp
diff --git a/xs/src/libslic3r/GCodeSender.hpp b/src/libslic3r/GCodeSender.hpp
index d7663ca55..d7663ca55 100644
--- a/xs/src/libslic3r/GCodeSender.hpp
+++ b/src/libslic3r/GCodeSender.hpp
diff --git a/xs/src/libslic3r/GCodeTimeEstimator.cpp b/src/libslic3r/GCodeTimeEstimator.cpp
index f97265ee3..f97265ee3 100644
--- a/xs/src/libslic3r/GCodeTimeEstimator.cpp
+++ b/src/libslic3r/GCodeTimeEstimator.cpp
diff --git a/xs/src/libslic3r/GCodeTimeEstimator.hpp b/src/libslic3r/GCodeTimeEstimator.hpp
index e9da584c3..e9da584c3 100644
--- a/xs/src/libslic3r/GCodeTimeEstimator.hpp
+++ b/src/libslic3r/GCodeTimeEstimator.hpp
diff --git a/xs/src/libslic3r/GCodeWriter.cpp b/src/libslic3r/GCodeWriter.cpp
index 6ef17f4f4..6ef17f4f4 100644
--- a/xs/src/libslic3r/GCodeWriter.cpp
+++ b/src/libslic3r/GCodeWriter.cpp
diff --git a/xs/src/libslic3r/GCodeWriter.hpp b/src/libslic3r/GCodeWriter.hpp
index 664b0e3a1..664b0e3a1 100644
--- a/xs/src/libslic3r/GCodeWriter.hpp
+++ b/src/libslic3r/GCodeWriter.hpp
diff --git a/xs/src/libslic3r/Geometry.cpp b/src/libslic3r/Geometry.cpp
index 87b4e223d..87b4e223d 100644
--- a/xs/src/libslic3r/Geometry.cpp
+++ b/src/libslic3r/Geometry.cpp
diff --git a/xs/src/libslic3r/Geometry.hpp b/src/libslic3r/Geometry.hpp
index 3698b996f..3698b996f 100644
--- a/xs/src/libslic3r/Geometry.hpp
+++ b/src/libslic3r/Geometry.hpp
diff --git a/xs/src/libslic3r/I18N.hpp b/src/libslic3r/I18N.hpp
index db4fd22df..db4fd22df 100644
--- a/xs/src/libslic3r/I18N.hpp
+++ b/src/libslic3r/I18N.hpp
diff --git a/xs/src/libslic3r/Int128.hpp b/src/libslic3r/Int128.hpp
index d54b75342..d54b75342 100644
--- a/xs/src/libslic3r/Int128.hpp
+++ b/src/libslic3r/Int128.hpp
diff --git a/xs/src/libslic3r/Layer.cpp b/src/libslic3r/Layer.cpp
index 6c2bd0da9..6c2bd0da9 100644
--- a/xs/src/libslic3r/Layer.cpp
+++ b/src/libslic3r/Layer.cpp
diff --git a/xs/src/libslic3r/Layer.hpp b/src/libslic3r/Layer.hpp
index 8dbe850cc..8dbe850cc 100644
--- a/xs/src/libslic3r/Layer.hpp
+++ b/src/libslic3r/Layer.hpp
diff --git a/xs/src/libslic3r/LayerRegion.cpp b/src/libslic3r/LayerRegion.cpp
index e0f97703c..e0f97703c 100644
--- a/xs/src/libslic3r/LayerRegion.cpp
+++ b/src/libslic3r/LayerRegion.cpp
diff --git a/xs/src/libslic3r/Line.cpp b/src/libslic3r/Line.cpp
index 35cfa2b76..35cfa2b76 100644
--- a/xs/src/libslic3r/Line.cpp
+++ b/src/libslic3r/Line.cpp
diff --git a/xs/src/libslic3r/Line.hpp b/src/libslic3r/Line.hpp
index 36e02247c..36e02247c 100644
--- a/xs/src/libslic3r/Line.hpp
+++ b/src/libslic3r/Line.hpp
diff --git a/xs/src/libslic3r/Model.cpp b/src/libslic3r/Model.cpp
index ec7447352..ec7447352 100644
--- a/xs/src/libslic3r/Model.cpp
+++ b/src/libslic3r/Model.cpp
diff --git a/xs/src/libslic3r/Model.hpp b/src/libslic3r/Model.hpp
index 4c2356429..4c2356429 100644
--- a/xs/src/libslic3r/Model.hpp
+++ b/src/libslic3r/Model.hpp
diff --git a/xs/src/libslic3r/ModelArrange.hpp b/src/libslic3r/ModelArrange.hpp
index 372689c39..372689c39 100644
--- a/xs/src/libslic3r/ModelArrange.hpp
+++ b/src/libslic3r/ModelArrange.hpp
diff --git a/xs/src/libslic3r/MotionPlanner.cpp b/src/libslic3r/MotionPlanner.cpp
index ff3475ed8..ff3475ed8 100644
--- a/xs/src/libslic3r/MotionPlanner.cpp
+++ b/src/libslic3r/MotionPlanner.cpp
diff --git a/xs/src/libslic3r/MotionPlanner.hpp b/src/libslic3r/MotionPlanner.hpp
index e912f2fb4..e912f2fb4 100644
--- a/xs/src/libslic3r/MotionPlanner.hpp
+++ b/src/libslic3r/MotionPlanner.hpp
diff --git a/xs/src/libslic3r/MultiPoint.cpp b/src/libslic3r/MultiPoint.cpp
index f44897a04..f44897a04 100644
--- a/xs/src/libslic3r/MultiPoint.cpp
+++ b/src/libslic3r/MultiPoint.cpp
diff --git a/xs/src/libslic3r/MultiPoint.hpp b/src/libslic3r/MultiPoint.hpp
index 03b89df51..03b89df51 100644
--- a/xs/src/libslic3r/MultiPoint.hpp
+++ b/src/libslic3r/MultiPoint.hpp
diff --git a/xs/src/libslic3r/MutablePriorityQueue.hpp b/src/libslic3r/MutablePriorityQueue.hpp
index 82e992fd6..82e992fd6 100644
--- a/xs/src/libslic3r/MutablePriorityQueue.hpp
+++ b/src/libslic3r/MutablePriorityQueue.hpp
diff --git a/xs/src/libslic3r/PerimeterGenerator.cpp b/src/libslic3r/PerimeterGenerator.cpp
index de8aeeb2a..de8aeeb2a 100644
--- a/xs/src/libslic3r/PerimeterGenerator.cpp
+++ b/src/libslic3r/PerimeterGenerator.cpp
diff --git a/xs/src/libslic3r/PerimeterGenerator.hpp b/src/libslic3r/PerimeterGenerator.hpp
index 44af8c8be..44af8c8be 100644
--- a/xs/src/libslic3r/PerimeterGenerator.hpp
+++ b/src/libslic3r/PerimeterGenerator.hpp
diff --git a/xs/src/libslic3r/PlaceholderParser.cpp b/src/libslic3r/PlaceholderParser.cpp
index cc6f1c75e..cc6f1c75e 100644
--- a/xs/src/libslic3r/PlaceholderParser.cpp
+++ b/src/libslic3r/PlaceholderParser.cpp
diff --git a/xs/src/libslic3r/PlaceholderParser.hpp b/src/libslic3r/PlaceholderParser.hpp
index 49d53ec9e..49d53ec9e 100644
--- a/xs/src/libslic3r/PlaceholderParser.hpp
+++ b/src/libslic3r/PlaceholderParser.hpp
diff --git a/xs/src/libslic3r/Point.cpp b/src/libslic3r/Point.cpp
index c2417d0dc..c2417d0dc 100644
--- a/xs/src/libslic3r/Point.cpp
+++ b/src/libslic3r/Point.cpp
diff --git a/xs/src/libslic3r/Point.hpp b/src/libslic3r/Point.hpp
index 6d9d82d25..6d9d82d25 100644
--- a/xs/src/libslic3r/Point.hpp
+++ b/src/libslic3r/Point.hpp
diff --git a/xs/src/libslic3r/Polygon.cpp b/src/libslic3r/Polygon.cpp
index cf0783bae..cf0783bae 100644
--- a/xs/src/libslic3r/Polygon.cpp
+++ b/src/libslic3r/Polygon.cpp
diff --git a/xs/src/libslic3r/Polygon.hpp b/src/libslic3r/Polygon.hpp
index 63162d953..63162d953 100644
--- a/xs/src/libslic3r/Polygon.hpp
+++ b/src/libslic3r/Polygon.hpp
diff --git a/xs/src/libslic3r/Polyline.cpp b/src/libslic3r/Polyline.cpp
index af155468a..af155468a 100644
--- a/xs/src/libslic3r/Polyline.cpp
+++ b/src/libslic3r/Polyline.cpp
diff --git a/xs/src/libslic3r/Polyline.hpp b/src/libslic3r/Polyline.hpp
index 925b88aca..925b88aca 100644
--- a/xs/src/libslic3r/Polyline.hpp
+++ b/src/libslic3r/Polyline.hpp
diff --git a/xs/src/libslic3r/PolylineCollection.cpp b/src/libslic3r/PolylineCollection.cpp
index 1304161c3..1304161c3 100644
--- a/xs/src/libslic3r/PolylineCollection.cpp
+++ b/src/libslic3r/PolylineCollection.cpp
diff --git a/xs/src/libslic3r/PolylineCollection.hpp b/src/libslic3r/PolylineCollection.hpp
index 87fc1985b..87fc1985b 100644
--- a/xs/src/libslic3r/PolylineCollection.hpp
+++ b/src/libslic3r/PolylineCollection.hpp
diff --git a/xs/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp
index f8f6537ca..cdc12d2d1 100644
--- a/xs/src/libslic3r/Print.cpp
+++ b/src/libslic3r/Print.cpp
@@ -1341,22 +1341,22 @@ std::string Print::output_filepath(const std::string &path) const
void Print::export_png(const std::string &dirpath)
{
- size_t idx = 0;
- for (PrintObject *obj : m_objects) {
- obj->slice();
- this->set_status(int(floor(idx * 100. / m_objects.size() + 0.5)), "Slicing...");
- ++ idx;
- }
- this->set_status(90, "Exporting zipped archive...");
- print_to<FilePrinterFormat::PNG>(*this,
- dirpath,
- float(m_config.bed_size_x.value),
- float(m_config.bed_size_y.value),
- int(m_config.pixel_width.value),
- int(m_config.pixel_height.value),
- float(m_config.exp_time.value),
- float(m_config.exp_time_first.value));
- this->set_status(100, "Done.");
+// size_t idx = 0;
+// for (PrintObject *obj : m_objects) {
+// obj->slice();
+// this->set_status(int(floor(idx * 100. / m_objects.size() + 0.5)), "Slicing...");
+// ++ idx;
+// }
+// this->set_status(90, "Exporting zipped archive...");
+// print_to<FilePrinterFormat::PNG>(*this,
+// dirpath,
+// float(m_config.bed_size_x.value),
+// float(m_config.bed_size_y.value),
+// int(m_config.pixel_width.value),
+// int(m_config.pixel_height.value),
+// float(m_config.exp_time.value),
+// float(m_config.exp_time_first.value));
+// this->set_status(100, "Done.");
}
// Returns extruder this eec should be printed with, according to PrintRegion config
diff --git a/xs/src/libslic3r/Print.hpp b/src/libslic3r/Print.hpp
index 7f88110bc..7f88110bc 100644
--- a/xs/src/libslic3r/Print.hpp
+++ b/src/libslic3r/Print.hpp
diff --git a/xs/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp
index ed02f6d43..ed02f6d43 100644
--- a/xs/src/libslic3r/PrintConfig.cpp
+++ b/src/libslic3r/PrintConfig.cpp
diff --git a/xs/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp
index bc3b0ef49..bc3b0ef49 100644
--- a/xs/src/libslic3r/PrintConfig.hpp
+++ b/src/libslic3r/PrintConfig.hpp
diff --git a/xs/src/libslic3r/PrintExport.hpp b/src/libslic3r/PrintExport.hpp
index 7c3871251..7c3871251 100644
--- a/xs/src/libslic3r/PrintExport.hpp
+++ b/src/libslic3r/PrintExport.hpp
diff --git a/xs/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp
index ef2364dc4..ef2364dc4 100644
--- a/xs/src/libslic3r/PrintObject.cpp
+++ b/src/libslic3r/PrintObject.cpp
diff --git a/xs/src/libslic3r/PrintRegion.cpp b/src/libslic3r/PrintRegion.cpp
index 4ea777b4a..4ea777b4a 100644
--- a/xs/src/libslic3r/PrintRegion.cpp
+++ b/src/libslic3r/PrintRegion.cpp
diff --git a/xs/src/libslic3r/Rasterizer/Rasterizer.cpp b/src/libslic3r/Rasterizer/Rasterizer.cpp
index b0bf04343..b0bf04343 100644
--- a/xs/src/libslic3r/Rasterizer/Rasterizer.cpp
+++ b/src/libslic3r/Rasterizer/Rasterizer.cpp
diff --git a/xs/src/libslic3r/Rasterizer/Rasterizer.hpp b/src/libslic3r/Rasterizer/Rasterizer.hpp
index cbb39bc6b..cbb39bc6b 100644
--- a/xs/src/libslic3r/Rasterizer/Rasterizer.hpp
+++ b/src/libslic3r/Rasterizer/Rasterizer.hpp
diff --git a/xs/src/libslic3r/SLABasePool.cpp b/src/libslic3r/SLABasePool.cpp
index f3683865c..f3683865c 100644
--- a/xs/src/libslic3r/SLABasePool.cpp
+++ b/src/libslic3r/SLABasePool.cpp
diff --git a/xs/src/libslic3r/SLABasePool.hpp b/src/libslic3r/SLABasePool.hpp
index 55c94df07..55c94df07 100644
--- a/xs/src/libslic3r/SLABasePool.hpp
+++ b/src/libslic3r/SLABasePool.hpp
diff --git a/xs/src/libslic3r/SVG.cpp b/src/libslic3r/SVG.cpp
index 03f55802e..03f55802e 100644
--- a/xs/src/libslic3r/SVG.cpp
+++ b/src/libslic3r/SVG.cpp
diff --git a/xs/src/libslic3r/SVG.hpp b/src/libslic3r/SVG.hpp
index 3a5602196..3a5602196 100644
--- a/xs/src/libslic3r/SVG.hpp
+++ b/src/libslic3r/SVG.hpp
diff --git a/xs/src/libslic3r/Slicing.cpp b/src/libslic3r/Slicing.cpp
index b3e314549..b3e314549 100644
--- a/xs/src/libslic3r/Slicing.cpp
+++ b/src/libslic3r/Slicing.cpp
diff --git a/xs/src/libslic3r/Slicing.hpp b/src/libslic3r/Slicing.hpp
index b4a074bb5..b4a074bb5 100644
--- a/xs/src/libslic3r/Slicing.hpp
+++ b/src/libslic3r/Slicing.hpp
diff --git a/xs/src/libslic3r/SlicingAdaptive.cpp b/src/libslic3r/SlicingAdaptive.cpp
index 2ef4aec8c..2ef4aec8c 100644
--- a/xs/src/libslic3r/SlicingAdaptive.cpp
+++ b/src/libslic3r/SlicingAdaptive.cpp
diff --git a/xs/src/libslic3r/SlicingAdaptive.hpp b/src/libslic3r/SlicingAdaptive.hpp
index bfd081d81..bfd081d81 100644
--- a/xs/src/libslic3r/SlicingAdaptive.hpp
+++ b/src/libslic3r/SlicingAdaptive.hpp
diff --git a/xs/src/libslic3r/SupportMaterial.cpp b/src/libslic3r/SupportMaterial.cpp
index 2bcf597e6..2bcf597e6 100644
--- a/xs/src/libslic3r/SupportMaterial.cpp
+++ b/src/libslic3r/SupportMaterial.cpp
diff --git a/xs/src/libslic3r/SupportMaterial.hpp b/src/libslic3r/SupportMaterial.hpp
index 2e1a05946..2e1a05946 100644
--- a/xs/src/libslic3r/SupportMaterial.hpp
+++ b/src/libslic3r/SupportMaterial.hpp
diff --git a/xs/src/libslic3r/Surface.cpp b/src/libslic3r/Surface.cpp
index 0e9eca7fd..0e9eca7fd 100644
--- a/xs/src/libslic3r/Surface.cpp
+++ b/src/libslic3r/Surface.cpp
diff --git a/xs/src/libslic3r/Surface.hpp b/src/libslic3r/Surface.hpp
index c2cec3793..c2cec3793 100644
--- a/xs/src/libslic3r/Surface.hpp
+++ b/src/libslic3r/Surface.hpp
diff --git a/xs/src/libslic3r/SurfaceCollection.cpp b/src/libslic3r/SurfaceCollection.cpp
index 6db599306..6db599306 100644
--- a/xs/src/libslic3r/SurfaceCollection.cpp
+++ b/src/libslic3r/SurfaceCollection.cpp
diff --git a/xs/src/libslic3r/SurfaceCollection.hpp b/src/libslic3r/SurfaceCollection.hpp
index 9544748e9..9544748e9 100644
--- a/xs/src/libslic3r/SurfaceCollection.hpp
+++ b/src/libslic3r/SurfaceCollection.hpp
diff --git a/xs/src/libslic3r/Technologies.hpp b/src/libslic3r/Technologies.hpp
index 5c4f8617d..5c4f8617d 100644
--- a/xs/src/libslic3r/Technologies.hpp
+++ b/src/libslic3r/Technologies.hpp
diff --git a/xs/src/libslic3r/TriangleMesh.cpp b/src/libslic3r/TriangleMesh.cpp
index 4bf13330f..4bf13330f 100644
--- a/xs/src/libslic3r/TriangleMesh.cpp
+++ b/src/libslic3r/TriangleMesh.cpp
diff --git a/xs/src/libslic3r/TriangleMesh.hpp b/src/libslic3r/TriangleMesh.hpp
index f6e0baea9..f6e0baea9 100644
--- a/xs/src/libslic3r/TriangleMesh.hpp
+++ b/src/libslic3r/TriangleMesh.hpp
diff --git a/xs/src/libslic3r/Utils.hpp b/src/libslic3r/Utils.hpp
index c90ad7650..c90ad7650 100644
--- a/xs/src/libslic3r/Utils.hpp
+++ b/src/libslic3r/Utils.hpp
diff --git a/xs/src/libslic3r/libslic3r.h b/src/libslic3r/libslic3r.h
index 5f2f3fba1..5f2f3fba1 100644
--- a/xs/src/libslic3r/libslic3r.h
+++ b/src/libslic3r/libslic3r.h
diff --git a/xs/src/libslic3r/utils.cpp b/src/libslic3r/utils.cpp
index 4ff15175b..4ff15175b 100644
--- a/xs/src/libslic3r/utils.cpp
+++ b/src/libslic3r/utils.cpp
diff --git a/src/miniz/CMakeLists.txt b/src/miniz/CMakeLists.txt
new file mode 100644
index 000000000..da92b1252
--- /dev/null
+++ b/src/miniz/CMakeLists.txt
@@ -0,0 +1,14 @@
+project(miniz)
+cmake_minimum_required(VERSION 2.6)
+
+add_library(miniz STATIC
+ miniz.h
+ miniz_common.h
+ miniz_tdef.h
+ miniz_tinfl.h
+ miniz_zip.h
+ miniz.cpp
+ miniz_tdef.cpp
+ miniz_tinfl.cpp
+ miniz_zip.cpp
+)
diff --git a/xs/src/miniz/miniz.cpp b/src/miniz/miniz.cpp
index 318a86da9..318a86da9 100644
--- a/xs/src/miniz/miniz.cpp
+++ b/src/miniz/miniz.cpp
diff --git a/xs/src/miniz/miniz.h b/src/miniz/miniz.h
index 6e7d5fde0..6e7d5fde0 100644
--- a/xs/src/miniz/miniz.h
+++ b/src/miniz/miniz.h
diff --git a/xs/src/miniz/miniz_common.h b/src/miniz/miniz_common.h
index d45bdfcb4..d45bdfcb4 100644
--- a/xs/src/miniz/miniz_common.h
+++ b/src/miniz/miniz_common.h
diff --git a/xs/src/miniz/miniz_tdef.cpp b/src/miniz/miniz_tdef.cpp
index 36207e64a..36207e64a 100644
--- a/xs/src/miniz/miniz_tdef.cpp
+++ b/src/miniz/miniz_tdef.cpp
diff --git a/xs/src/miniz/miniz_tdef.h b/src/miniz/miniz_tdef.h
index ca63cfd42..ca63cfd42 100644
--- a/xs/src/miniz/miniz_tdef.h
+++ b/src/miniz/miniz_tdef.h
diff --git a/xs/src/miniz/miniz_tinfl.cpp b/src/miniz/miniz_tinfl.cpp
index 59b24d73f..59b24d73f 100644
--- a/xs/src/miniz/miniz_tinfl.cpp
+++ b/src/miniz/miniz_tinfl.cpp
diff --git a/xs/src/miniz/miniz_tinfl.h b/src/miniz/miniz_tinfl.h
index b90f22749..b90f22749 100644
--- a/xs/src/miniz/miniz_tinfl.h
+++ b/src/miniz/miniz_tinfl.h
diff --git a/xs/src/miniz/miniz_zip.cpp b/src/miniz/miniz_zip.cpp
index 463660c1c..463660c1c 100644
--- a/xs/src/miniz/miniz_zip.cpp
+++ b/src/miniz/miniz_zip.cpp
diff --git a/xs/src/miniz/miniz_zip.h b/src/miniz/miniz_zip.h
index 71ecb4ae2..71ecb4ae2 100644
--- a/xs/src/miniz/miniz_zip.h
+++ b/src/miniz/miniz_zip.h
diff --git a/xs/src/png/AUTHORS b/src/png/AUTHORS
index 25aad54dc..25aad54dc 100644
--- a/xs/src/png/AUTHORS
+++ b/src/png/AUTHORS
diff --git a/xs/src/png/COPYING b/src/png/COPYING
index 04889ba11..04889ba11 100644
--- a/xs/src/png/COPYING
+++ b/src/png/COPYING
diff --git a/xs/src/png/NEWS b/src/png/NEWS
index cc006fbf5..cc006fbf5 100644
--- a/xs/src/png/NEWS
+++ b/src/png/NEWS
diff --git a/xs/src/png/color.hpp b/src/png/color.hpp
index b5ffde2c4..b5ffde2c4 100644
--- a/xs/src/png/color.hpp
+++ b/src/png/color.hpp
diff --git a/xs/src/png/end_info.hpp b/src/png/end_info.hpp
index 09590596d..09590596d 100644
--- a/xs/src/png/end_info.hpp
+++ b/src/png/end_info.hpp
diff --git a/xs/src/png/error.hpp b/src/png/error.hpp
index c67f97630..c67f97630 100644
--- a/xs/src/png/error.hpp
+++ b/src/png/error.hpp
diff --git a/xs/src/png/image_info.hpp b/src/png/image_info.hpp
index 8407bc18b..8407bc18b 100644
--- a/xs/src/png/image_info.hpp
+++ b/src/png/image_info.hpp
diff --git a/xs/src/png/info.hpp b/src/png/info.hpp
index 3f3cf09c3..3f3cf09c3 100644
--- a/xs/src/png/info.hpp
+++ b/src/png/info.hpp
diff --git a/xs/src/png/info_base.hpp b/src/png/info_base.hpp
index 45e154296..45e154296 100644
--- a/xs/src/png/info_base.hpp
+++ b/src/png/info_base.hpp
diff --git a/xs/src/png/io_base.hpp b/src/png/io_base.hpp
index 3c2d83043..3c2d83043 100644
--- a/xs/src/png/io_base.hpp
+++ b/src/png/io_base.hpp
diff --git a/xs/src/png/libpng/ANNOUNCE b/src/png/libpng/ANNOUNCE
index 0f66c0d1d..0f66c0d1d 100644
--- a/xs/src/png/libpng/ANNOUNCE
+++ b/src/png/libpng/ANNOUNCE
diff --git a/xs/src/png/libpng/CMakeLists.txt b/src/png/libpng/CMakeLists.txt
index 266b67d0e..7697110c7 100644
--- a/xs/src/png/libpng/CMakeLists.txt
+++ b/src/png/libpng/CMakeLists.txt
@@ -107,7 +107,7 @@ endif()
# set definitions and sources for powerpc
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^powerpc*" OR
- CMAKE_SYSTEM_PROCESSOR MATCHES "^ppc64*" )
+ CMAKE_SYSTEM_PROCESSOR MATCHES "^ppc64*" )
set(PNG_POWERPC_VSX_POSSIBLE_VALUES on off)
set(PNG_POWERPC_VSX "on" CACHE STRING "Enable POWERPC VSX optimizations:
off: disable the optimizations.")
@@ -131,7 +131,7 @@ endif()
# set definitions and sources for intel
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^i?86" OR
- CMAKE_SYSTEM_PROCESSOR MATCHES "^x86_64*" )
+ CMAKE_SYSTEM_PROCESSOR MATCHES "^x86_64*" )
set(PNG_INTEL_SSE_POSSIBLE_VALUES on off)
set(PNG_INTEL_SSE "on" CACHE STRING "Enable INTEL_SSE optimizations:
off: disable the optimizations")
@@ -155,7 +155,7 @@ endif()
# set definitions and sources for MIPS
if(CMAKE_SYSTEM_PROCESSOR MATCHES "mipsel*" OR
- CMAKE_SYSTEM_PROCESSOR MATCHES "mips64el*" )
+ CMAKE_SYSTEM_PROCESSOR MATCHES "mips64el*" )
set(PNG_MIPS_MSA_POSSIBLE_VALUES on off)
set(PNG_MIPS_MSA "on" CACHE STRING "Enable MIPS_MSA optimizations:
off: disable the optimizations")
@@ -770,14 +770,14 @@ function(CREATE_SYMLINK DEST_FILE)
if(CMAKE_HOST_WIN32 AND NOT CYGWIN AND NOT MSYS)
execute_process(
- COMMAND "${CMAKE_COMMAND}" -E copy_if_different ${S_FILE} ${DEST_FILE}
- WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
- )
+ COMMAND "${CMAKE_COMMAND}" -E copy_if_different ${S_FILE} ${DEST_FILE}
+ WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
+ )
else(CMAKE_HOST_WIN32 AND NOT CYGWIN AND NOT MSYS)
execute_process(
- COMMAND ${CMAKE_COMMAND} -E create_symlink ${S_FILE} ${DEST_FILE}
- WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
- )
+ COMMAND ${CMAKE_COMMAND} -E create_symlink ${S_FILE} ${DEST_FILE}
+ WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
+ )
endif(CMAKE_HOST_WIN32 AND NOT CYGWIN AND NOT MSYS)
endif(S_FILE)
@@ -788,12 +788,12 @@ function(CREATE_SYMLINK DEST_FILE)
if(CMAKE_HOST_WIN32 AND NOT CYGWIN AND NOT MSYS)
add_custom_command(TARGET ${S_TARGET} POST_BUILD
- COMMAND "${CMAKE_COMMAND}" -E copy_if_different $<TARGET_LINKER_FILE_NAME:${S_TARGET}> $<TARGET_LINKER_FILE_DIR:${S_TARGET}>/${DEST_FILE}
- )
+ COMMAND "${CMAKE_COMMAND}" -E copy_if_different $<TARGET_LINKER_FILE_NAME:${S_TARGET}> $<TARGET_LINKER_FILE_DIR:${S_TARGET}>/${DEST_FILE}
+ )
else(CMAKE_HOST_WIN32 AND NOT CYGWIN AND NOT MSYS)
add_custom_command(TARGET ${S_TARGET} POST_BUILD
- COMMAND "${CMAKE_COMMAND}" -E create_symlink $<TARGET_LINKER_FILE_NAME:${S_TARGET}> $<TARGET_LINKER_FILE_DIR:${S_TARGET}>/${DEST_FILE}
- )
+ COMMAND "${CMAKE_COMMAND}" -E create_symlink $<TARGET_LINKER_FILE_NAME:${S_TARGET}> $<TARGET_LINKER_FILE_DIR:${S_TARGET}>/${DEST_FILE}
+ )
endif(CMAKE_HOST_WIN32 AND NOT CYGWIN AND NOT MSYS)
endif(S_TARGET)
diff --git a/xs/src/png/libpng/LICENSE b/src/png/libpng/LICENSE
index 4cda4fa0a..4cda4fa0a 100644
--- a/xs/src/png/libpng/LICENSE
+++ b/src/png/libpng/LICENSE
diff --git a/xs/src/png/libpng/arm/arm_init.c b/src/png/libpng/arm/arm_init.c
index 02df812e7..02df812e7 100644
--- a/xs/src/png/libpng/arm/arm_init.c
+++ b/src/png/libpng/arm/arm_init.c
diff --git a/xs/src/png/libpng/arm/filter_neon.S b/src/png/libpng/arm/filter_neon.S
index 000764cd2..000764cd2 100644
--- a/xs/src/png/libpng/arm/filter_neon.S
+++ b/src/png/libpng/arm/filter_neon.S
diff --git a/xs/src/png/libpng/arm/filter_neon_intrinsics.c b/src/png/libpng/arm/filter_neon_intrinsics.c
index ea7e356bc..ea7e356bc 100644
--- a/xs/src/png/libpng/arm/filter_neon_intrinsics.c
+++ b/src/png/libpng/arm/filter_neon_intrinsics.c
diff --git a/xs/src/png/libpng/intel/filter_sse2_intrinsics.c b/src/png/libpng/intel/filter_sse2_intrinsics.c
index 5e8553fbb..5e8553fbb 100644
--- a/xs/src/png/libpng/intel/filter_sse2_intrinsics.c
+++ b/src/png/libpng/intel/filter_sse2_intrinsics.c
diff --git a/xs/src/png/libpng/intel/intel_init.c b/src/png/libpng/intel/intel_init.c
index 8f08baf8c..8f08baf8c 100644
--- a/xs/src/png/libpng/intel/intel_init.c
+++ b/src/png/libpng/intel/intel_init.c
diff --git a/xs/src/png/libpng/libpng-config.in b/src/png/libpng/libpng-config.in
index 69bf8e33f..69bf8e33f 100644
--- a/xs/src/png/libpng/libpng-config.in
+++ b/src/png/libpng/libpng-config.in
diff --git a/xs/src/png/libpng/libpng.pc.in b/src/png/libpng/libpng.pc.in
index 9708e9af2..9708e9af2 100644
--- a/xs/src/png/libpng/libpng.pc.in
+++ b/src/png/libpng/libpng.pc.in
diff --git a/xs/src/png/libpng/mips/filter_msa_intrinsics.c b/src/png/libpng/mips/filter_msa_intrinsics.c
index 943bb3d05..943bb3d05 100644
--- a/xs/src/png/libpng/mips/filter_msa_intrinsics.c
+++ b/src/png/libpng/mips/filter_msa_intrinsics.c
diff --git a/xs/src/png/libpng/mips/mips_init.c b/src/png/libpng/mips/mips_init.c
index 0bfb7a32e..0bfb7a32e 100644
--- a/xs/src/png/libpng/mips/mips_init.c
+++ b/src/png/libpng/mips/mips_init.c
diff --git a/xs/src/png/libpng/png.c b/src/png/libpng/png.c
index ff02c5651..ff02c5651 100644
--- a/xs/src/png/libpng/png.c
+++ b/src/png/libpng/png.c
diff --git a/xs/src/png/libpng/png.h b/src/png/libpng/png.h
index 4c873f5c2..4c873f5c2 100644
--- a/xs/src/png/libpng/png.h
+++ b/src/png/libpng/png.h
diff --git a/xs/src/png/libpng/pngconf.h b/src/png/libpng/pngconf.h
index d13b13e57..d13b13e57 100644
--- a/xs/src/png/libpng/pngconf.h
+++ b/src/png/libpng/pngconf.h
diff --git a/xs/src/png/libpng/pngdebug.h b/src/png/libpng/pngdebug.h
index 15a7ed0c9..15a7ed0c9 100644
--- a/xs/src/png/libpng/pngdebug.h
+++ b/src/png/libpng/pngdebug.h
diff --git a/xs/src/png/libpng/pngerror.c b/src/png/libpng/pngerror.c
index ad48bfb98..ad48bfb98 100644
--- a/xs/src/png/libpng/pngerror.c
+++ b/src/png/libpng/pngerror.c
diff --git a/xs/src/png/libpng/pngget.c b/src/png/libpng/pngget.c
index 26e9fb1c3..26e9fb1c3 100644
--- a/xs/src/png/libpng/pngget.c
+++ b/src/png/libpng/pngget.c
diff --git a/xs/src/png/libpng/pnginfo.h b/src/png/libpng/pnginfo.h
index d5f6149db..d5f6149db 100644
--- a/xs/src/png/libpng/pnginfo.h
+++ b/src/png/libpng/pnginfo.h
diff --git a/xs/src/png/libpng/pngmem.c b/src/png/libpng/pngmem.c
index ff3ef7e88..ff3ef7e88 100644
--- a/xs/src/png/libpng/pngmem.c
+++ b/src/png/libpng/pngmem.c
diff --git a/xs/src/png/libpng/pngpread.c b/src/png/libpng/pngpread.c
index fbe361dc3..fbe361dc3 100644
--- a/xs/src/png/libpng/pngpread.c
+++ b/src/png/libpng/pngpread.c
diff --git a/xs/src/png/libpng/pngpriv.h b/src/png/libpng/pngpriv.h
index 1f2e90f2b..1f2e90f2b 100644
--- a/xs/src/png/libpng/pngpriv.h
+++ b/src/png/libpng/pngpriv.h
diff --git a/xs/src/png/libpng/pngread.c b/src/png/libpng/pngread.c
index da32e9ad9..da32e9ad9 100644
--- a/xs/src/png/libpng/pngread.c
+++ b/src/png/libpng/pngread.c
diff --git a/xs/src/png/libpng/pngrio.c b/src/png/libpng/pngrio.c
index 7e26e855c..7e26e855c 100644
--- a/xs/src/png/libpng/pngrio.c
+++ b/src/png/libpng/pngrio.c
diff --git a/xs/src/png/libpng/pngrtran.c b/src/png/libpng/pngrtran.c
index c18965031..c18965031 100644
--- a/xs/src/png/libpng/pngrtran.c
+++ b/src/png/libpng/pngrtran.c
diff --git a/xs/src/png/libpng/pngrutil.c b/src/png/libpng/pngrutil.c
index 8692933bd..8692933bd 100644
--- a/xs/src/png/libpng/pngrutil.c
+++ b/src/png/libpng/pngrutil.c
diff --git a/xs/src/png/libpng/pngset.c b/src/png/libpng/pngset.c
index 6f3a1ee11..6f3a1ee11 100644
--- a/xs/src/png/libpng/pngset.c
+++ b/src/png/libpng/pngset.c
diff --git a/xs/src/png/libpng/pngstruct.h b/src/png/libpng/pngstruct.h
index d83f97125..d83f97125 100644
--- a/xs/src/png/libpng/pngstruct.h
+++ b/src/png/libpng/pngstruct.h
diff --git a/xs/src/png/libpng/pngtest.c b/src/png/libpng/pngtest.c
index 9d5075791..9d5075791 100644
--- a/xs/src/png/libpng/pngtest.c
+++ b/src/png/libpng/pngtest.c
diff --git a/xs/src/png/libpng/pngtrans.c b/src/png/libpng/pngtrans.c
index 6882f0fd7..6882f0fd7 100644
--- a/xs/src/png/libpng/pngtrans.c
+++ b/src/png/libpng/pngtrans.c
diff --git a/xs/src/png/libpng/pngusr.dfa b/src/png/libpng/pngusr.dfa
index 83067c38c..83067c38c 100644
--- a/xs/src/png/libpng/pngusr.dfa
+++ b/src/png/libpng/pngusr.dfa
diff --git a/xs/src/png/libpng/pngwio.c b/src/png/libpng/pngwio.c
index 37c7c3a7f..37c7c3a7f 100644
--- a/xs/src/png/libpng/pngwio.c
+++ b/src/png/libpng/pngwio.c
diff --git a/xs/src/png/libpng/pngwrite.c b/src/png/libpng/pngwrite.c
index a16d77ce0..a16d77ce0 100644
--- a/xs/src/png/libpng/pngwrite.c
+++ b/src/png/libpng/pngwrite.c
diff --git a/xs/src/png/libpng/pngwtran.c b/src/png/libpng/pngwtran.c
index 377b43e5c..377b43e5c 100644
--- a/xs/src/png/libpng/pngwtran.c
+++ b/src/png/libpng/pngwtran.c
diff --git a/xs/src/png/libpng/pngwutil.c b/src/png/libpng/pngwutil.c
index 0d4fb1336..0d4fb1336 100644
--- a/xs/src/png/libpng/pngwutil.c
+++ b/src/png/libpng/pngwutil.c
diff --git a/xs/src/png/libpng/powerpc/filter_vsx_intrinsics.c b/src/png/libpng/powerpc/filter_vsx_intrinsics.c
index e3de496bd..e3de496bd 100644
--- a/xs/src/png/libpng/powerpc/filter_vsx_intrinsics.c
+++ b/src/png/libpng/powerpc/filter_vsx_intrinsics.c
diff --git a/xs/src/png/libpng/powerpc/powerpc_init.c b/src/png/libpng/powerpc/powerpc_init.c
index 07016177c..07016177c 100644
--- a/xs/src/png/libpng/powerpc/powerpc_init.c
+++ b/src/png/libpng/powerpc/powerpc_init.c
diff --git a/xs/src/png/libpng/scripts/checksym.awk b/src/png/libpng/scripts/checksym.awk
index fe3af55e0..fe3af55e0 100755..100644
--- a/xs/src/png/libpng/scripts/checksym.awk
+++ b/src/png/libpng/scripts/checksym.awk
diff --git a/xs/src/png/libpng/scripts/def.c b/src/png/libpng/scripts/def.c
index 0ffcbeb0c..0ffcbeb0c 100644
--- a/xs/src/png/libpng/scripts/def.c
+++ b/src/png/libpng/scripts/def.c
diff --git a/xs/src/png/libpng/scripts/dfn.awk b/src/png/libpng/scripts/dfn.awk
index 346b9db7d..346b9db7d 100755..100644
--- a/xs/src/png/libpng/scripts/dfn.awk
+++ b/src/png/libpng/scripts/dfn.awk
diff --git a/xs/src/png/libpng/scripts/genchk.cmake.in b/src/png/libpng/scripts/genchk.cmake.in
index ab3b9d746..ab3b9d746 100644
--- a/xs/src/png/libpng/scripts/genchk.cmake.in
+++ b/src/png/libpng/scripts/genchk.cmake.in
diff --git a/xs/src/png/libpng/scripts/genout.cmake.in b/src/png/libpng/scripts/genout.cmake.in
index 01f12de2f..01f12de2f 100644
--- a/xs/src/png/libpng/scripts/genout.cmake.in
+++ b/src/png/libpng/scripts/genout.cmake.in
diff --git a/xs/src/png/libpng/scripts/gensrc.cmake.in b/src/png/libpng/scripts/gensrc.cmake.in
index f28a62266..f28a62266 100644
--- a/xs/src/png/libpng/scripts/gensrc.cmake.in
+++ b/src/png/libpng/scripts/gensrc.cmake.in
diff --git a/xs/src/png/libpng/scripts/intprefix.c b/src/png/libpng/scripts/intprefix.c
index 254f8e94b..254f8e94b 100644
--- a/xs/src/png/libpng/scripts/intprefix.c
+++ b/src/png/libpng/scripts/intprefix.c
diff --git a/xs/src/png/libpng/scripts/libpng-config-body.in b/src/png/libpng/scripts/libpng-config-body.in
index b466432d5..b466432d5 100644
--- a/xs/src/png/libpng/scripts/libpng-config-body.in
+++ b/src/png/libpng/scripts/libpng-config-body.in
diff --git a/xs/src/png/libpng/scripts/libpng-config-head.in b/src/png/libpng/scripts/libpng-config-head.in
index 64dd3987d..64dd3987d 100644
--- a/xs/src/png/libpng/scripts/libpng-config-head.in
+++ b/src/png/libpng/scripts/libpng-config-head.in
diff --git a/xs/src/png/libpng/scripts/libpng.pc.in b/src/png/libpng/scripts/libpng.pc.in
index 33c65767b..33c65767b 100644
--- a/xs/src/png/libpng/scripts/libpng.pc.in
+++ b/src/png/libpng/scripts/libpng.pc.in
diff --git a/xs/src/png/libpng/scripts/options.awk b/src/png/libpng/scripts/options.awk
index fef5dfd78..fef5dfd78 100755..100644
--- a/xs/src/png/libpng/scripts/options.awk
+++ b/src/png/libpng/scripts/options.awk
diff --git a/xs/src/png/libpng/scripts/pnglibconf.dfa b/src/png/libpng/scripts/pnglibconf.dfa
index b298a72f3..b298a72f3 100644
--- a/xs/src/png/libpng/scripts/pnglibconf.dfa
+++ b/src/png/libpng/scripts/pnglibconf.dfa
diff --git a/xs/src/png/libpng/scripts/pnglibconf.h.prebuilt b/src/png/libpng/scripts/pnglibconf.h.prebuilt
index 53b5e442c..53b5e442c 100644
--- a/xs/src/png/libpng/scripts/pnglibconf.h.prebuilt
+++ b/src/png/libpng/scripts/pnglibconf.h.prebuilt
diff --git a/xs/src/png/libpng/scripts/prefix.c b/src/png/libpng/scripts/prefix.c
index 8b604a091..8b604a091 100644
--- a/xs/src/png/libpng/scripts/prefix.c
+++ b/src/png/libpng/scripts/prefix.c
diff --git a/xs/src/png/libpng/scripts/sym.c b/src/png/libpng/scripts/sym.c
index ea9e4c507..ea9e4c507 100644
--- a/xs/src/png/libpng/scripts/sym.c
+++ b/src/png/libpng/scripts/sym.c
diff --git a/xs/src/png/libpng/scripts/symbols.c b/src/png/libpng/scripts/symbols.c
index 28b841d8b..28b841d8b 100644
--- a/xs/src/png/libpng/scripts/symbols.c
+++ b/src/png/libpng/scripts/symbols.c
diff --git a/xs/src/png/libpng/scripts/symbols.def b/src/png/libpng/scripts/symbols.def
index 4a3c3ff41..4a3c3ff41 100644
--- a/xs/src/png/libpng/scripts/symbols.def
+++ b/src/png/libpng/scripts/symbols.def
diff --git a/xs/src/png/libpng/scripts/test.cmake.in b/src/png/libpng/scripts/test.cmake.in
index fa6a889bb..fa6a889bb 100644
--- a/xs/src/png/libpng/scripts/test.cmake.in
+++ b/src/png/libpng/scripts/test.cmake.in
diff --git a/xs/src/png/libpng/scripts/vers.c b/src/png/libpng/scripts/vers.c
index de7319716..de7319716 100644
--- a/xs/src/png/libpng/scripts/vers.c
+++ b/src/png/libpng/scripts/vers.c
diff --git a/xs/src/png/palette.hpp b/src/png/palette.hpp
index 917f28007..917f28007 100644
--- a/xs/src/png/palette.hpp
+++ b/src/png/palette.hpp
diff --git a/xs/src/png/pixel_traits.hpp b/src/png/pixel_traits.hpp
index 8ffdfeedb..8ffdfeedb 100644
--- a/xs/src/png/pixel_traits.hpp
+++ b/src/png/pixel_traits.hpp
diff --git a/xs/src/png/tRNS.hpp b/src/png/tRNS.hpp
index ff0181643..ff0181643 100644
--- a/xs/src/png/tRNS.hpp
+++ b/src/png/tRNS.hpp
diff --git a/xs/src/png/types.hpp b/src/png/types.hpp
index 1538d6bd2..1538d6bd2 100644
--- a/xs/src/png/types.hpp
+++ b/src/png/types.hpp
diff --git a/xs/src/png/writer.hpp b/src/png/writer.hpp
index 448dfd50b..448dfd50b 100644
--- a/xs/src/png/writer.hpp
+++ b/src/png/writer.hpp
diff --git a/xs/src/png/zlib/CMakeLists.txt b/src/png/zlib/CMakeLists.txt
index 1ea38fef1..1ea38fef1 100644
--- a/xs/src/png/zlib/CMakeLists.txt
+++ b/src/png/zlib/CMakeLists.txt
diff --git a/xs/src/png/zlib/ChangeLog b/src/png/zlib/ChangeLog
index 30199a65a..30199a65a 100644
--- a/xs/src/png/zlib/ChangeLog
+++ b/src/png/zlib/ChangeLog
diff --git a/xs/src/png/zlib/FAQ b/src/png/zlib/FAQ
index 99b7cf92e..99b7cf92e 100644
--- a/xs/src/png/zlib/FAQ
+++ b/src/png/zlib/FAQ
diff --git a/xs/src/png/zlib/INDEX b/src/png/zlib/INDEX
index 2ba064120..2ba064120 100644
--- a/xs/src/png/zlib/INDEX
+++ b/src/png/zlib/INDEX
diff --git a/xs/src/png/zlib/Makefile b/src/png/zlib/Makefile
index 6bba86c73..6bba86c73 100644
--- a/xs/src/png/zlib/Makefile
+++ b/src/png/zlib/Makefile
diff --git a/xs/src/png/zlib/Makefile.in b/src/png/zlib/Makefile.in
index 5a77949ff..5a77949ff 100644
--- a/xs/src/png/zlib/Makefile.in
+++ b/src/png/zlib/Makefile.in
diff --git a/xs/src/png/zlib/README b/src/png/zlib/README
index 51106de47..51106de47 100644
--- a/xs/src/png/zlib/README
+++ b/src/png/zlib/README
diff --git a/xs/src/png/zlib/adler32.c b/src/png/zlib/adler32.c
index d0be4380a..d0be4380a 100644
--- a/xs/src/png/zlib/adler32.c
+++ b/src/png/zlib/adler32.c
diff --git a/xs/src/png/zlib/amiga/Makefile.pup b/src/png/zlib/amiga/Makefile.pup
index 8940c120f..8940c120f 100644
--- a/xs/src/png/zlib/amiga/Makefile.pup
+++ b/src/png/zlib/amiga/Makefile.pup
diff --git a/xs/src/png/zlib/amiga/Makefile.sas b/src/png/zlib/amiga/Makefile.sas
index 749e29152..749e29152 100644
--- a/xs/src/png/zlib/amiga/Makefile.sas
+++ b/src/png/zlib/amiga/Makefile.sas
diff --git a/xs/src/png/zlib/compress.c b/src/png/zlib/compress.c
index e2db404ab..e2db404ab 100644
--- a/xs/src/png/zlib/compress.c
+++ b/src/png/zlib/compress.c
diff --git a/xs/src/png/zlib/configure b/src/png/zlib/configure
index e974d1fd7..e974d1fd7 100644
--- a/xs/src/png/zlib/configure
+++ b/src/png/zlib/configure
diff --git a/xs/src/png/zlib/contrib/README.contrib b/src/png/zlib/contrib/README.contrib
index a411d5c39..a411d5c39 100644
--- a/xs/src/png/zlib/contrib/README.contrib
+++ b/src/png/zlib/contrib/README.contrib
diff --git a/xs/src/png/zlib/contrib/ada/buffer_demo.adb b/src/png/zlib/contrib/ada/buffer_demo.adb
index 46b863810..46b863810 100644
--- a/xs/src/png/zlib/contrib/ada/buffer_demo.adb
+++ b/src/png/zlib/contrib/ada/buffer_demo.adb
diff --git a/xs/src/png/zlib/contrib/ada/mtest.adb b/src/png/zlib/contrib/ada/mtest.adb
index c4dfd080f..c4dfd080f 100644
--- a/xs/src/png/zlib/contrib/ada/mtest.adb
+++ b/src/png/zlib/contrib/ada/mtest.adb
diff --git a/xs/src/png/zlib/contrib/ada/read.adb b/src/png/zlib/contrib/ada/read.adb
index 1f2efbfeb..1f2efbfeb 100644
--- a/xs/src/png/zlib/contrib/ada/read.adb
+++ b/src/png/zlib/contrib/ada/read.adb
diff --git a/xs/src/png/zlib/contrib/ada/readme.txt b/src/png/zlib/contrib/ada/readme.txt
index ce4d2cadf..ce4d2cadf 100644
--- a/xs/src/png/zlib/contrib/ada/readme.txt
+++ b/src/png/zlib/contrib/ada/readme.txt
diff --git a/xs/src/png/zlib/contrib/ada/test.adb b/src/png/zlib/contrib/ada/test.adb
index 90773acfa..90773acfa 100644
--- a/xs/src/png/zlib/contrib/ada/test.adb
+++ b/src/png/zlib/contrib/ada/test.adb
diff --git a/xs/src/png/zlib/contrib/ada/zlib-streams.adb b/src/png/zlib/contrib/ada/zlib-streams.adb
index b6497bae2..b6497bae2 100644
--- a/xs/src/png/zlib/contrib/ada/zlib-streams.adb
+++ b/src/png/zlib/contrib/ada/zlib-streams.adb
diff --git a/xs/src/png/zlib/contrib/ada/zlib-streams.ads b/src/png/zlib/contrib/ada/zlib-streams.ads
index 8e26cd450..8e26cd450 100644
--- a/xs/src/png/zlib/contrib/ada/zlib-streams.ads
+++ b/src/png/zlib/contrib/ada/zlib-streams.ads
diff --git a/xs/src/png/zlib/contrib/ada/zlib-thin.adb b/src/png/zlib/contrib/ada/zlib-thin.adb
index 0ca4a7120..0ca4a7120 100644
--- a/xs/src/png/zlib/contrib/ada/zlib-thin.adb
+++ b/src/png/zlib/contrib/ada/zlib-thin.adb
diff --git a/xs/src/png/zlib/contrib/ada/zlib-thin.ads b/src/png/zlib/contrib/ada/zlib-thin.ads
index 810173cff..810173cff 100644
--- a/xs/src/png/zlib/contrib/ada/zlib-thin.ads
+++ b/src/png/zlib/contrib/ada/zlib-thin.ads
diff --git a/xs/src/png/zlib/contrib/ada/zlib.adb b/src/png/zlib/contrib/ada/zlib.adb
index 8b6fd686a..8b6fd686a 100644
--- a/xs/src/png/zlib/contrib/ada/zlib.adb
+++ b/src/png/zlib/contrib/ada/zlib.adb
diff --git a/xs/src/png/zlib/contrib/ada/zlib.ads b/src/png/zlib/contrib/ada/zlib.ads
index 79ffc4095..79ffc4095 100644
--- a/xs/src/png/zlib/contrib/ada/zlib.ads
+++ b/src/png/zlib/contrib/ada/zlib.ads
diff --git a/xs/src/png/zlib/contrib/ada/zlib.gpr b/src/png/zlib/contrib/ada/zlib.gpr
index 296b22aa9..296b22aa9 100644
--- a/xs/src/png/zlib/contrib/ada/zlib.gpr
+++ b/src/png/zlib/contrib/ada/zlib.gpr
diff --git a/xs/src/png/zlib/contrib/amd64/amd64-match.S b/src/png/zlib/contrib/amd64/amd64-match.S
index 81d4a1c94..81d4a1c94 100644
--- a/xs/src/png/zlib/contrib/amd64/amd64-match.S
+++ b/src/png/zlib/contrib/amd64/amd64-match.S
diff --git a/xs/src/png/zlib/contrib/asm686/README.686 b/src/png/zlib/contrib/asm686/README.686
index a0bf3bea4..a0bf3bea4 100644
--- a/xs/src/png/zlib/contrib/asm686/README.686
+++ b/src/png/zlib/contrib/asm686/README.686
diff --git a/xs/src/png/zlib/contrib/asm686/match.S b/src/png/zlib/contrib/asm686/match.S
index fa4210927..fa4210927 100644
--- a/xs/src/png/zlib/contrib/asm686/match.S
+++ b/src/png/zlib/contrib/asm686/match.S
diff --git a/xs/src/png/zlib/contrib/blast/Makefile b/src/png/zlib/contrib/blast/Makefile
index 9be80bafe..9be80bafe 100644
--- a/xs/src/png/zlib/contrib/blast/Makefile
+++ b/src/png/zlib/contrib/blast/Makefile
diff --git a/xs/src/png/zlib/contrib/blast/README b/src/png/zlib/contrib/blast/README
index e3a60b3f5..e3a60b3f5 100644
--- a/xs/src/png/zlib/contrib/blast/README
+++ b/src/png/zlib/contrib/blast/README
diff --git a/xs/src/png/zlib/contrib/blast/blast.c b/src/png/zlib/contrib/blast/blast.c
index e6e659073..e6e659073 100644
--- a/xs/src/png/zlib/contrib/blast/blast.c
+++ b/src/png/zlib/contrib/blast/blast.c
diff --git a/xs/src/png/zlib/contrib/blast/blast.h b/src/png/zlib/contrib/blast/blast.h
index 6cf65eda1..6cf65eda1 100644
--- a/xs/src/png/zlib/contrib/blast/blast.h
+++ b/src/png/zlib/contrib/blast/blast.h
diff --git a/xs/src/png/zlib/contrib/blast/test.pk b/src/png/zlib/contrib/blast/test.pk
index be10b2bbb..be10b2bbb 100644
--- a/xs/src/png/zlib/contrib/blast/test.pk
+++ b/src/png/zlib/contrib/blast/test.pk
Binary files differ
diff --git a/xs/src/png/zlib/contrib/blast/test.txt b/src/png/zlib/contrib/blast/test.txt
index bfdf1c5dc..bfdf1c5dc 100644
--- a/xs/src/png/zlib/contrib/blast/test.txt
+++ b/src/png/zlib/contrib/blast/test.txt
diff --git a/xs/src/png/zlib/contrib/delphi/ZLib.pas b/src/png/zlib/contrib/delphi/ZLib.pas
index 060e19911..060e19911 100644
--- a/xs/src/png/zlib/contrib/delphi/ZLib.pas
+++ b/src/png/zlib/contrib/delphi/ZLib.pas
diff --git a/xs/src/png/zlib/contrib/delphi/ZLibConst.pas b/src/png/zlib/contrib/delphi/ZLibConst.pas
index cdfe13671..cdfe13671 100644
--- a/xs/src/png/zlib/contrib/delphi/ZLibConst.pas
+++ b/src/png/zlib/contrib/delphi/ZLibConst.pas
diff --git a/xs/src/png/zlib/contrib/delphi/readme.txt b/src/png/zlib/contrib/delphi/readme.txt
index 2dc9a8bba..2dc9a8bba 100644
--- a/xs/src/png/zlib/contrib/delphi/readme.txt
+++ b/src/png/zlib/contrib/delphi/readme.txt
diff --git a/xs/src/png/zlib/contrib/delphi/zlibd32.mak b/src/png/zlib/contrib/delphi/zlibd32.mak
index 9bb00b7cc..9bb00b7cc 100644
--- a/xs/src/png/zlib/contrib/delphi/zlibd32.mak
+++ b/src/png/zlib/contrib/delphi/zlibd32.mak
diff --git a/xs/src/png/zlib/contrib/dotzlib/DotZLib.build b/src/png/zlib/contrib/dotzlib/DotZLib.build
index e69630cec..e69630cec 100644
--- a/xs/src/png/zlib/contrib/dotzlib/DotZLib.build
+++ b/src/png/zlib/contrib/dotzlib/DotZLib.build
diff --git a/xs/src/png/zlib/contrib/dotzlib/DotZLib.chm b/src/png/zlib/contrib/dotzlib/DotZLib.chm
index f214a444a..f214a444a 100644
--- a/xs/src/png/zlib/contrib/dotzlib/DotZLib.chm
+++ b/src/png/zlib/contrib/dotzlib/DotZLib.chm
Binary files differ
diff --git a/xs/src/png/zlib/contrib/dotzlib/DotZLib.sln b/src/png/zlib/contrib/dotzlib/DotZLib.sln
index 5d533d6bc..5d533d6bc 100644
--- a/xs/src/png/zlib/contrib/dotzlib/DotZLib.sln
+++ b/src/png/zlib/contrib/dotzlib/DotZLib.sln
diff --git a/xs/src/png/zlib/contrib/dotzlib/DotZLib/AssemblyInfo.cs b/src/png/zlib/contrib/dotzlib/DotZLib/AssemblyInfo.cs
index 724c5347f..724c5347f 100644
--- a/xs/src/png/zlib/contrib/dotzlib/DotZLib/AssemblyInfo.cs
+++ b/src/png/zlib/contrib/dotzlib/DotZLib/AssemblyInfo.cs
diff --git a/xs/src/png/zlib/contrib/dotzlib/DotZLib/ChecksumImpl.cs b/src/png/zlib/contrib/dotzlib/DotZLib/ChecksumImpl.cs
index b110dae6a..b110dae6a 100644
--- a/xs/src/png/zlib/contrib/dotzlib/DotZLib/ChecksumImpl.cs
+++ b/src/png/zlib/contrib/dotzlib/DotZLib/ChecksumImpl.cs
diff --git a/xs/src/png/zlib/contrib/dotzlib/DotZLib/CircularBuffer.cs b/src/png/zlib/contrib/dotzlib/DotZLib/CircularBuffer.cs
index 9c8d60195..9c8d60195 100644
--- a/xs/src/png/zlib/contrib/dotzlib/DotZLib/CircularBuffer.cs
+++ b/src/png/zlib/contrib/dotzlib/DotZLib/CircularBuffer.cs
diff --git a/xs/src/png/zlib/contrib/dotzlib/DotZLib/CodecBase.cs b/src/png/zlib/contrib/dotzlib/DotZLib/CodecBase.cs
index b0eb78a02..b0eb78a02 100644
--- a/xs/src/png/zlib/contrib/dotzlib/DotZLib/CodecBase.cs
+++ b/src/png/zlib/contrib/dotzlib/DotZLib/CodecBase.cs
diff --git a/xs/src/png/zlib/contrib/dotzlib/DotZLib/Deflater.cs b/src/png/zlib/contrib/dotzlib/DotZLib/Deflater.cs
index 9039f41f6..9039f41f6 100644
--- a/xs/src/png/zlib/contrib/dotzlib/DotZLib/Deflater.cs
+++ b/src/png/zlib/contrib/dotzlib/DotZLib/Deflater.cs
diff --git a/xs/src/png/zlib/contrib/dotzlib/DotZLib/DotZLib.cs b/src/png/zlib/contrib/dotzlib/DotZLib/DotZLib.cs
index 90c7c3b38..90c7c3b38 100644
--- a/xs/src/png/zlib/contrib/dotzlib/DotZLib/DotZLib.cs
+++ b/src/png/zlib/contrib/dotzlib/DotZLib/DotZLib.cs
diff --git a/xs/src/png/zlib/contrib/dotzlib/DotZLib/DotZLib.csproj b/src/png/zlib/contrib/dotzlib/DotZLib/DotZLib.csproj
index dea7fb16a..dea7fb16a 100644
--- a/xs/src/png/zlib/contrib/dotzlib/DotZLib/DotZLib.csproj
+++ b/src/png/zlib/contrib/dotzlib/DotZLib/DotZLib.csproj
diff --git a/xs/src/png/zlib/contrib/dotzlib/DotZLib/GZipStream.cs b/src/png/zlib/contrib/dotzlib/DotZLib/GZipStream.cs
index f0eada1d2..f0eada1d2 100644
--- a/xs/src/png/zlib/contrib/dotzlib/DotZLib/GZipStream.cs
+++ b/src/png/zlib/contrib/dotzlib/DotZLib/GZipStream.cs
diff --git a/xs/src/png/zlib/contrib/dotzlib/DotZLib/Inflater.cs b/src/png/zlib/contrib/dotzlib/DotZLib/Inflater.cs
index d295f2680..d295f2680 100644
--- a/xs/src/png/zlib/contrib/dotzlib/DotZLib/Inflater.cs
+++ b/src/png/zlib/contrib/dotzlib/DotZLib/Inflater.cs
diff --git a/xs/src/png/zlib/contrib/dotzlib/DotZLib/UnitTests.cs b/src/png/zlib/contrib/dotzlib/DotZLib/UnitTests.cs
index 6d8aebb79..6d8aebb79 100644
--- a/xs/src/png/zlib/contrib/dotzlib/DotZLib/UnitTests.cs
+++ b/src/png/zlib/contrib/dotzlib/DotZLib/UnitTests.cs
diff --git a/xs/src/png/zlib/contrib/dotzlib/LICENSE_1_0.txt b/src/png/zlib/contrib/dotzlib/LICENSE_1_0.txt
index 127a5bc39..127a5bc39 100644
--- a/xs/src/png/zlib/contrib/dotzlib/LICENSE_1_0.txt
+++ b/src/png/zlib/contrib/dotzlib/LICENSE_1_0.txt
diff --git a/xs/src/png/zlib/contrib/dotzlib/readme.txt b/src/png/zlib/contrib/dotzlib/readme.txt
index 4d8c2dd93..4d8c2dd93 100644
--- a/xs/src/png/zlib/contrib/dotzlib/readme.txt
+++ b/src/png/zlib/contrib/dotzlib/readme.txt
diff --git a/xs/src/png/zlib/contrib/gcc_gvmat64/gvmat64.S b/src/png/zlib/contrib/gcc_gvmat64/gvmat64.S
index 23309fa28..23309fa28 100644
--- a/xs/src/png/zlib/contrib/gcc_gvmat64/gvmat64.S
+++ b/src/png/zlib/contrib/gcc_gvmat64/gvmat64.S
diff --git a/xs/src/png/zlib/contrib/infback9/README b/src/png/zlib/contrib/infback9/README
index e75ed1329..e75ed1329 100644
--- a/xs/src/png/zlib/contrib/infback9/README
+++ b/src/png/zlib/contrib/infback9/README
diff --git a/xs/src/png/zlib/contrib/infback9/infback9.c b/src/png/zlib/contrib/infback9/infback9.c
index 05fb3e338..05fb3e338 100644
--- a/xs/src/png/zlib/contrib/infback9/infback9.c
+++ b/src/png/zlib/contrib/infback9/infback9.c
diff --git a/xs/src/png/zlib/contrib/infback9/infback9.h b/src/png/zlib/contrib/infback9/infback9.h
index 1073c0a38..1073c0a38 100644
--- a/xs/src/png/zlib/contrib/infback9/infback9.h
+++ b/src/png/zlib/contrib/infback9/infback9.h
diff --git a/xs/src/png/zlib/contrib/infback9/inffix9.h b/src/png/zlib/contrib/infback9/inffix9.h
index ee5671d2d..ee5671d2d 100644
--- a/xs/src/png/zlib/contrib/infback9/inffix9.h
+++ b/src/png/zlib/contrib/infback9/inffix9.h
diff --git a/xs/src/png/zlib/contrib/infback9/inflate9.h b/src/png/zlib/contrib/infback9/inflate9.h
index ee9a79394..ee9a79394 100644
--- a/xs/src/png/zlib/contrib/infback9/inflate9.h
+++ b/src/png/zlib/contrib/infback9/inflate9.h
diff --git a/xs/src/png/zlib/contrib/infback9/inftree9.c b/src/png/zlib/contrib/infback9/inftree9.c
index 5f4a76798..5f4a76798 100644
--- a/xs/src/png/zlib/contrib/infback9/inftree9.c
+++ b/src/png/zlib/contrib/infback9/inftree9.c
diff --git a/xs/src/png/zlib/contrib/infback9/inftree9.h b/src/png/zlib/contrib/infback9/inftree9.h
index 5ab21f0c6..5ab21f0c6 100644
--- a/xs/src/png/zlib/contrib/infback9/inftree9.h
+++ b/src/png/zlib/contrib/infback9/inftree9.h
diff --git a/xs/src/png/zlib/contrib/inflate86/inffas86.c b/src/png/zlib/contrib/inflate86/inffas86.c
index 7292f67b7..7292f67b7 100644
--- a/xs/src/png/zlib/contrib/inflate86/inffas86.c
+++ b/src/png/zlib/contrib/inflate86/inffas86.c
diff --git a/xs/src/png/zlib/contrib/inflate86/inffast.S b/src/png/zlib/contrib/inflate86/inffast.S
index 2245a2905..2245a2905 100644
--- a/xs/src/png/zlib/contrib/inflate86/inffast.S
+++ b/src/png/zlib/contrib/inflate86/inffast.S
diff --git a/xs/src/png/zlib/contrib/iostream/test.cpp b/src/png/zlib/contrib/iostream/test.cpp
index 7d265b3b5..7d265b3b5 100644
--- a/xs/src/png/zlib/contrib/iostream/test.cpp
+++ b/src/png/zlib/contrib/iostream/test.cpp
diff --git a/xs/src/png/zlib/contrib/iostream/zfstream.cpp b/src/png/zlib/contrib/iostream/zfstream.cpp
index d0cd85faa..d0cd85faa 100644
--- a/xs/src/png/zlib/contrib/iostream/zfstream.cpp
+++ b/src/png/zlib/contrib/iostream/zfstream.cpp
diff --git a/xs/src/png/zlib/contrib/iostream/zfstream.h b/src/png/zlib/contrib/iostream/zfstream.h
index ed79098a3..ed79098a3 100644
--- a/xs/src/png/zlib/contrib/iostream/zfstream.h
+++ b/src/png/zlib/contrib/iostream/zfstream.h
diff --git a/xs/src/png/zlib/contrib/iostream2/zstream.h b/src/png/zlib/contrib/iostream2/zstream.h
index 43d2332b7..43d2332b7 100644
--- a/xs/src/png/zlib/contrib/iostream2/zstream.h
+++ b/src/png/zlib/contrib/iostream2/zstream.h
diff --git a/xs/src/png/zlib/contrib/iostream2/zstream_test.cpp b/src/png/zlib/contrib/iostream2/zstream_test.cpp
index 6273f62d6..6273f62d6 100644
--- a/xs/src/png/zlib/contrib/iostream2/zstream_test.cpp
+++ b/src/png/zlib/contrib/iostream2/zstream_test.cpp
diff --git a/xs/src/png/zlib/contrib/iostream3/README b/src/png/zlib/contrib/iostream3/README
index f7b319ab9..f7b319ab9 100644
--- a/xs/src/png/zlib/contrib/iostream3/README
+++ b/src/png/zlib/contrib/iostream3/README
diff --git a/xs/src/png/zlib/contrib/iostream3/TODO b/src/png/zlib/contrib/iostream3/TODO
index 7032f97be..7032f97be 100644
--- a/xs/src/png/zlib/contrib/iostream3/TODO
+++ b/src/png/zlib/contrib/iostream3/TODO
diff --git a/xs/src/png/zlib/contrib/iostream3/test.cc b/src/png/zlib/contrib/iostream3/test.cc
index 94235334f..94235334f 100644
--- a/xs/src/png/zlib/contrib/iostream3/test.cc
+++ b/src/png/zlib/contrib/iostream3/test.cc
diff --git a/xs/src/png/zlib/contrib/iostream3/zfstream.cc b/src/png/zlib/contrib/iostream3/zfstream.cc
index 94eb93344..94eb93344 100644
--- a/xs/src/png/zlib/contrib/iostream3/zfstream.cc
+++ b/src/png/zlib/contrib/iostream3/zfstream.cc
diff --git a/xs/src/png/zlib/contrib/iostream3/zfstream.h b/src/png/zlib/contrib/iostream3/zfstream.h
index 8574479ae..8574479ae 100644
--- a/xs/src/png/zlib/contrib/iostream3/zfstream.h
+++ b/src/png/zlib/contrib/iostream3/zfstream.h
diff --git a/xs/src/png/zlib/contrib/masmx64/bld_ml64.bat b/src/png/zlib/contrib/masmx64/bld_ml64.bat
index f74bcef5b..f74bcef5b 100644
--- a/xs/src/png/zlib/contrib/masmx64/bld_ml64.bat
+++ b/src/png/zlib/contrib/masmx64/bld_ml64.bat
diff --git a/xs/src/png/zlib/contrib/masmx64/gvmat64.asm b/src/png/zlib/contrib/masmx64/gvmat64.asm
index c1817f1be..c1817f1be 100644
--- a/xs/src/png/zlib/contrib/masmx64/gvmat64.asm
+++ b/src/png/zlib/contrib/masmx64/gvmat64.asm
diff --git a/xs/src/png/zlib/contrib/masmx64/inffas8664.c b/src/png/zlib/contrib/masmx64/inffas8664.c
index aa861a333..aa861a333 100644
--- a/xs/src/png/zlib/contrib/masmx64/inffas8664.c
+++ b/src/png/zlib/contrib/masmx64/inffas8664.c
diff --git a/xs/src/png/zlib/contrib/masmx64/inffasx64.asm b/src/png/zlib/contrib/masmx64/inffasx64.asm
index 41ec82392..41ec82392 100644
--- a/xs/src/png/zlib/contrib/masmx64/inffasx64.asm
+++ b/src/png/zlib/contrib/masmx64/inffasx64.asm
diff --git a/xs/src/png/zlib/contrib/masmx64/readme.txt b/src/png/zlib/contrib/masmx64/readme.txt
index 652571c7a..652571c7a 100644
--- a/xs/src/png/zlib/contrib/masmx64/readme.txt
+++ b/src/png/zlib/contrib/masmx64/readme.txt
diff --git a/xs/src/png/zlib/contrib/masmx86/bld_ml32.bat b/src/png/zlib/contrib/masmx86/bld_ml32.bat
index fcf5755e4..fcf5755e4 100644
--- a/xs/src/png/zlib/contrib/masmx86/bld_ml32.bat
+++ b/src/png/zlib/contrib/masmx86/bld_ml32.bat
diff --git a/xs/src/png/zlib/contrib/masmx86/inffas32.asm b/src/png/zlib/contrib/masmx86/inffas32.asm
index cb37a81e4..cb37a81e4 100644
--- a/xs/src/png/zlib/contrib/masmx86/inffas32.asm
+++ b/src/png/zlib/contrib/masmx86/inffas32.asm
diff --git a/xs/src/png/zlib/contrib/masmx86/match686.asm b/src/png/zlib/contrib/masmx86/match686.asm
index 69e0eed01..69e0eed01 100644
--- a/xs/src/png/zlib/contrib/masmx86/match686.asm
+++ b/src/png/zlib/contrib/masmx86/match686.asm
diff --git a/xs/src/png/zlib/contrib/masmx86/readme.txt b/src/png/zlib/contrib/masmx86/readme.txt
index 3f8888679..3f8888679 100644
--- a/xs/src/png/zlib/contrib/masmx86/readme.txt
+++ b/src/png/zlib/contrib/masmx86/readme.txt
diff --git a/xs/src/png/zlib/contrib/minizip/Makefile b/src/png/zlib/contrib/minizip/Makefile
index 84eaad20d..84eaad20d 100644
--- a/xs/src/png/zlib/contrib/minizip/Makefile
+++ b/src/png/zlib/contrib/minizip/Makefile
diff --git a/xs/src/png/zlib/contrib/minizip/Makefile.am b/src/png/zlib/contrib/minizip/Makefile.am
index d343011eb..d343011eb 100644
--- a/xs/src/png/zlib/contrib/minizip/Makefile.am
+++ b/src/png/zlib/contrib/minizip/Makefile.am
diff --git a/xs/src/png/zlib/contrib/minizip/MiniZip64_Changes.txt b/src/png/zlib/contrib/minizip/MiniZip64_Changes.txt
index 13a1bd91a..13a1bd91a 100644
--- a/xs/src/png/zlib/contrib/minizip/MiniZip64_Changes.txt
+++ b/src/png/zlib/contrib/minizip/MiniZip64_Changes.txt
diff --git a/xs/src/png/zlib/contrib/minizip/MiniZip64_info.txt b/src/png/zlib/contrib/minizip/MiniZip64_info.txt
index 57d715242..57d715242 100644
--- a/xs/src/png/zlib/contrib/minizip/MiniZip64_info.txt
+++ b/src/png/zlib/contrib/minizip/MiniZip64_info.txt
diff --git a/xs/src/png/zlib/contrib/minizip/configure.ac b/src/png/zlib/contrib/minizip/configure.ac
index 5b1197097..5b1197097 100644
--- a/xs/src/png/zlib/contrib/minizip/configure.ac
+++ b/src/png/zlib/contrib/minizip/configure.ac
diff --git a/xs/src/png/zlib/contrib/minizip/crypt.h b/src/png/zlib/contrib/minizip/crypt.h
index 1e9e8200b..1e9e8200b 100644
--- a/xs/src/png/zlib/contrib/minizip/crypt.h
+++ b/src/png/zlib/contrib/minizip/crypt.h
diff --git a/xs/src/png/zlib/contrib/minizip/ioapi.c b/src/png/zlib/contrib/minizip/ioapi.c
index 7f5c191b2..7f5c191b2 100644
--- a/xs/src/png/zlib/contrib/minizip/ioapi.c
+++ b/src/png/zlib/contrib/minizip/ioapi.c
diff --git a/xs/src/png/zlib/contrib/minizip/ioapi.h b/src/png/zlib/contrib/minizip/ioapi.h
index 8dcbdb06e..8dcbdb06e 100644
--- a/xs/src/png/zlib/contrib/minizip/ioapi.h
+++ b/src/png/zlib/contrib/minizip/ioapi.h
diff --git a/xs/src/png/zlib/contrib/minizip/iowin32.c b/src/png/zlib/contrib/minizip/iowin32.c
index 274f39eb1..274f39eb1 100644
--- a/xs/src/png/zlib/contrib/minizip/iowin32.c
+++ b/src/png/zlib/contrib/minizip/iowin32.c
diff --git a/xs/src/png/zlib/contrib/minizip/iowin32.h b/src/png/zlib/contrib/minizip/iowin32.h
index 0ca0969a7..0ca0969a7 100644
--- a/xs/src/png/zlib/contrib/minizip/iowin32.h
+++ b/src/png/zlib/contrib/minizip/iowin32.h
diff --git a/xs/src/png/zlib/contrib/minizip/make_vms.com b/src/png/zlib/contrib/minizip/make_vms.com
index 9ac13a98f..9ac13a98f 100644
--- a/xs/src/png/zlib/contrib/minizip/make_vms.com
+++ b/src/png/zlib/contrib/minizip/make_vms.com
diff --git a/xs/src/png/zlib/contrib/minizip/miniunz.c b/src/png/zlib/contrib/minizip/miniunz.c
index 3d65401be..3d65401be 100644
--- a/xs/src/png/zlib/contrib/minizip/miniunz.c
+++ b/src/png/zlib/contrib/minizip/miniunz.c
diff --git a/xs/src/png/zlib/contrib/minizip/miniunzip.1 b/src/png/zlib/contrib/minizip/miniunzip.1
index 111ac6919..111ac6919 100644
--- a/xs/src/png/zlib/contrib/minizip/miniunzip.1
+++ b/src/png/zlib/contrib/minizip/miniunzip.1
diff --git a/xs/src/png/zlib/contrib/minizip/minizip.1 b/src/png/zlib/contrib/minizip/minizip.1
index 1154484c1..1154484c1 100644
--- a/xs/src/png/zlib/contrib/minizip/minizip.1
+++ b/src/png/zlib/contrib/minizip/minizip.1
diff --git a/xs/src/png/zlib/contrib/minizip/minizip.c b/src/png/zlib/contrib/minizip/minizip.c
index 4288962ec..4288962ec 100644
--- a/xs/src/png/zlib/contrib/minizip/minizip.c
+++ b/src/png/zlib/contrib/minizip/minizip.c
diff --git a/xs/src/png/zlib/contrib/minizip/minizip.pc.in b/src/png/zlib/contrib/minizip/minizip.pc.in
index 69b5b7fdc..69b5b7fdc 100644
--- a/xs/src/png/zlib/contrib/minizip/minizip.pc.in
+++ b/src/png/zlib/contrib/minizip/minizip.pc.in
diff --git a/xs/src/png/zlib/contrib/minizip/mztools.c b/src/png/zlib/contrib/minizip/mztools.c
index 96891c2e0..96891c2e0 100644
--- a/xs/src/png/zlib/contrib/minizip/mztools.c
+++ b/src/png/zlib/contrib/minizip/mztools.c
diff --git a/xs/src/png/zlib/contrib/minizip/mztools.h b/src/png/zlib/contrib/minizip/mztools.h
index a49a426ec..a49a426ec 100644
--- a/xs/src/png/zlib/contrib/minizip/mztools.h
+++ b/src/png/zlib/contrib/minizip/mztools.h
diff --git a/xs/src/png/zlib/contrib/minizip/unzip.c b/src/png/zlib/contrib/minizip/unzip.c
index bcfb9416e..bcfb9416e 100644
--- a/xs/src/png/zlib/contrib/minizip/unzip.c
+++ b/src/png/zlib/contrib/minizip/unzip.c
diff --git a/xs/src/png/zlib/contrib/minizip/unzip.h b/src/png/zlib/contrib/minizip/unzip.h
index 2104e3915..2104e3915 100644
--- a/xs/src/png/zlib/contrib/minizip/unzip.h
+++ b/src/png/zlib/contrib/minizip/unzip.h
diff --git a/xs/src/png/zlib/contrib/minizip/zip.c b/src/png/zlib/contrib/minizip/zip.c
index 44e88a9cb..44e88a9cb 100644
--- a/xs/src/png/zlib/contrib/minizip/zip.c
+++ b/src/png/zlib/contrib/minizip/zip.c
diff --git a/xs/src/png/zlib/contrib/minizip/zip.h b/src/png/zlib/contrib/minizip/zip.h
index 8aaebb623..8aaebb623 100644
--- a/xs/src/png/zlib/contrib/minizip/zip.h
+++ b/src/png/zlib/contrib/minizip/zip.h
diff --git a/xs/src/png/zlib/contrib/pascal/example.pas b/src/png/zlib/contrib/pascal/example.pas
index 5518b36a7..5518b36a7 100644
--- a/xs/src/png/zlib/contrib/pascal/example.pas
+++ b/src/png/zlib/contrib/pascal/example.pas
diff --git a/xs/src/png/zlib/contrib/pascal/readme.txt b/src/png/zlib/contrib/pascal/readme.txt
index 60e87c8a3..60e87c8a3 100644
--- a/xs/src/png/zlib/contrib/pascal/readme.txt
+++ b/src/png/zlib/contrib/pascal/readme.txt
diff --git a/xs/src/png/zlib/contrib/pascal/zlibd32.mak b/src/png/zlib/contrib/pascal/zlibd32.mak
index 9bb00b7cc..9bb00b7cc 100644
--- a/xs/src/png/zlib/contrib/pascal/zlibd32.mak
+++ b/src/png/zlib/contrib/pascal/zlibd32.mak
diff --git a/xs/src/png/zlib/contrib/pascal/zlibpas.pas b/src/png/zlib/contrib/pascal/zlibpas.pas
index a0dff11b5..a0dff11b5 100644
--- a/xs/src/png/zlib/contrib/pascal/zlibpas.pas
+++ b/src/png/zlib/contrib/pascal/zlibpas.pas
diff --git a/xs/src/png/zlib/contrib/puff/Makefile b/src/png/zlib/contrib/puff/Makefile
index 0e2594c80..0e2594c80 100644
--- a/xs/src/png/zlib/contrib/puff/Makefile
+++ b/src/png/zlib/contrib/puff/Makefile
diff --git a/xs/src/png/zlib/contrib/puff/README b/src/png/zlib/contrib/puff/README
index bbc4cb595..bbc4cb595 100644
--- a/xs/src/png/zlib/contrib/puff/README
+++ b/src/png/zlib/contrib/puff/README
diff --git a/xs/src/png/zlib/contrib/puff/puff.c b/src/png/zlib/contrib/puff/puff.c
index c6c90d714..c6c90d714 100644
--- a/xs/src/png/zlib/contrib/puff/puff.c
+++ b/src/png/zlib/contrib/puff/puff.c
diff --git a/xs/src/png/zlib/contrib/puff/puff.h b/src/png/zlib/contrib/puff/puff.h
index e23a24543..e23a24543 100644
--- a/xs/src/png/zlib/contrib/puff/puff.h
+++ b/src/png/zlib/contrib/puff/puff.h
diff --git a/xs/src/png/zlib/contrib/puff/pufftest.c b/src/png/zlib/contrib/puff/pufftest.c
index 776481488..776481488 100644
--- a/xs/src/png/zlib/contrib/puff/pufftest.c
+++ b/src/png/zlib/contrib/puff/pufftest.c
diff --git a/xs/src/png/zlib/contrib/puff/zeros.raw b/src/png/zlib/contrib/puff/zeros.raw
index 0a90e76b3..0a90e76b3 100644
--- a/xs/src/png/zlib/contrib/puff/zeros.raw
+++ b/src/png/zlib/contrib/puff/zeros.raw
Binary files differ
diff --git a/xs/src/png/zlib/contrib/testzlib/testzlib.c b/src/png/zlib/contrib/testzlib/testzlib.c
index 8626c92ad..8626c92ad 100644
--- a/xs/src/png/zlib/contrib/testzlib/testzlib.c
+++ b/src/png/zlib/contrib/testzlib/testzlib.c
diff --git a/xs/src/png/zlib/contrib/testzlib/testzlib.txt b/src/png/zlib/contrib/testzlib/testzlib.txt
index e508bb22f..e508bb22f 100644
--- a/xs/src/png/zlib/contrib/testzlib/testzlib.txt
+++ b/src/png/zlib/contrib/testzlib/testzlib.txt
diff --git a/xs/src/png/zlib/contrib/untgz/Makefile b/src/png/zlib/contrib/untgz/Makefile
index b54266fba..b54266fba 100644
--- a/xs/src/png/zlib/contrib/untgz/Makefile
+++ b/src/png/zlib/contrib/untgz/Makefile
diff --git a/xs/src/png/zlib/contrib/untgz/Makefile.msc b/src/png/zlib/contrib/untgz/Makefile.msc
index 77b860221..77b860221 100644
--- a/xs/src/png/zlib/contrib/untgz/Makefile.msc
+++ b/src/png/zlib/contrib/untgz/Makefile.msc
diff --git a/xs/src/png/zlib/contrib/untgz/untgz.c b/src/png/zlib/contrib/untgz/untgz.c
index 2c391e598..2c391e598 100644
--- a/xs/src/png/zlib/contrib/untgz/untgz.c
+++ b/src/png/zlib/contrib/untgz/untgz.c
diff --git a/xs/src/png/zlib/contrib/vstudio/readme.txt b/src/png/zlib/contrib/vstudio/readme.txt
index 48cccc0d2..48cccc0d2 100644
--- a/xs/src/png/zlib/contrib/vstudio/readme.txt
+++ b/src/png/zlib/contrib/vstudio/readme.txt
diff --git a/xs/src/png/zlib/contrib/vstudio/vc10/miniunz.vcxproj b/src/png/zlib/contrib/vstudio/vc10/miniunz.vcxproj
index 1b3624215..1b3624215 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc10/miniunz.vcxproj
+++ b/src/png/zlib/contrib/vstudio/vc10/miniunz.vcxproj
diff --git a/xs/src/png/zlib/contrib/vstudio/vc10/miniunz.vcxproj.filters b/src/png/zlib/contrib/vstudio/vc10/miniunz.vcxproj.filters
index 0bd12210c..0bd12210c 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc10/miniunz.vcxproj.filters
+++ b/src/png/zlib/contrib/vstudio/vc10/miniunz.vcxproj.filters
diff --git a/xs/src/png/zlib/contrib/vstudio/vc10/minizip.vcxproj b/src/png/zlib/contrib/vstudio/vc10/minizip.vcxproj
index ccd3651df..ccd3651df 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc10/minizip.vcxproj
+++ b/src/png/zlib/contrib/vstudio/vc10/minizip.vcxproj
diff --git a/xs/src/png/zlib/contrib/vstudio/vc10/minizip.vcxproj.filters b/src/png/zlib/contrib/vstudio/vc10/minizip.vcxproj.filters
index 7076d76ff..7076d76ff 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc10/minizip.vcxproj.filters
+++ b/src/png/zlib/contrib/vstudio/vc10/minizip.vcxproj.filters
diff --git a/xs/src/png/zlib/contrib/vstudio/vc10/testzlib.vcxproj b/src/png/zlib/contrib/vstudio/vc10/testzlib.vcxproj
index 476b8ea45..476b8ea45 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc10/testzlib.vcxproj
+++ b/src/png/zlib/contrib/vstudio/vc10/testzlib.vcxproj
diff --git a/xs/src/png/zlib/contrib/vstudio/vc10/testzlib.vcxproj.filters b/src/png/zlib/contrib/vstudio/vc10/testzlib.vcxproj.filters
index 327649103..327649103 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc10/testzlib.vcxproj.filters
+++ b/src/png/zlib/contrib/vstudio/vc10/testzlib.vcxproj.filters
diff --git a/xs/src/png/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj b/src/png/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj
index 8e38876fa..8e38876fa 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj
+++ b/src/png/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj
diff --git a/xs/src/png/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj.filters b/src/png/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj.filters
index ab87f09f4..ab87f09f4 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj.filters
+++ b/src/png/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj.filters
diff --git a/xs/src/png/zlib/contrib/vstudio/vc10/zlib.rc b/src/png/zlib/contrib/vstudio/vc10/zlib.rc
index c4e4b016e..c4e4b016e 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc10/zlib.rc
+++ b/src/png/zlib/contrib/vstudio/vc10/zlib.rc
diff --git a/xs/src/png/zlib/contrib/vstudio/vc10/zlibstat.vcxproj b/src/png/zlib/contrib/vstudio/vc10/zlibstat.vcxproj
index 45389a352..45389a352 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc10/zlibstat.vcxproj
+++ b/src/png/zlib/contrib/vstudio/vc10/zlibstat.vcxproj
diff --git a/xs/src/png/zlib/contrib/vstudio/vc10/zlibstat.vcxproj.filters b/src/png/zlib/contrib/vstudio/vc10/zlibstat.vcxproj.filters
index 0c8b2501c..0c8b2501c 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc10/zlibstat.vcxproj.filters
+++ b/src/png/zlib/contrib/vstudio/vc10/zlibstat.vcxproj.filters
diff --git a/xs/src/png/zlib/contrib/vstudio/vc10/zlibvc.def b/src/png/zlib/contrib/vstudio/vc10/zlibvc.def
index f876c3bca..f876c3bca 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc10/zlibvc.def
+++ b/src/png/zlib/contrib/vstudio/vc10/zlibvc.def
diff --git a/xs/src/png/zlib/contrib/vstudio/vc10/zlibvc.sln b/src/png/zlib/contrib/vstudio/vc10/zlibvc.sln
index 649f40c7e..649f40c7e 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc10/zlibvc.sln
+++ b/src/png/zlib/contrib/vstudio/vc10/zlibvc.sln
diff --git a/xs/src/png/zlib/contrib/vstudio/vc10/zlibvc.vcxproj b/src/png/zlib/contrib/vstudio/vc10/zlibvc.vcxproj
index 7d7c49a6d..7d7c49a6d 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc10/zlibvc.vcxproj
+++ b/src/png/zlib/contrib/vstudio/vc10/zlibvc.vcxproj
diff --git a/xs/src/png/zlib/contrib/vstudio/vc10/zlibvc.vcxproj.filters b/src/png/zlib/contrib/vstudio/vc10/zlibvc.vcxproj.filters
index 22786824f..22786824f 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc10/zlibvc.vcxproj.filters
+++ b/src/png/zlib/contrib/vstudio/vc10/zlibvc.vcxproj.filters
diff --git a/xs/src/png/zlib/contrib/vstudio/vc11/miniunz.vcxproj b/src/png/zlib/contrib/vstudio/vc11/miniunz.vcxproj
index 99be63d69..99be63d69 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc11/miniunz.vcxproj
+++ b/src/png/zlib/contrib/vstudio/vc11/miniunz.vcxproj
diff --git a/xs/src/png/zlib/contrib/vstudio/vc11/minizip.vcxproj b/src/png/zlib/contrib/vstudio/vc11/minizip.vcxproj
index d6e98f4d5..d6e98f4d5 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc11/minizip.vcxproj
+++ b/src/png/zlib/contrib/vstudio/vc11/minizip.vcxproj
diff --git a/xs/src/png/zlib/contrib/vstudio/vc11/testzlib.vcxproj b/src/png/zlib/contrib/vstudio/vc11/testzlib.vcxproj
index 0115dd17b..0115dd17b 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc11/testzlib.vcxproj
+++ b/src/png/zlib/contrib/vstudio/vc11/testzlib.vcxproj
diff --git a/xs/src/png/zlib/contrib/vstudio/vc11/testzlibdll.vcxproj b/src/png/zlib/contrib/vstudio/vc11/testzlibdll.vcxproj
index 9d36336eb..9d36336eb 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc11/testzlibdll.vcxproj
+++ b/src/png/zlib/contrib/vstudio/vc11/testzlibdll.vcxproj
diff --git a/xs/src/png/zlib/contrib/vstudio/vc11/zlib.rc b/src/png/zlib/contrib/vstudio/vc11/zlib.rc
index c4e4b016e..c4e4b016e 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc11/zlib.rc
+++ b/src/png/zlib/contrib/vstudio/vc11/zlib.rc
diff --git a/xs/src/png/zlib/contrib/vstudio/vc11/zlibstat.vcxproj b/src/png/zlib/contrib/vstudio/vc11/zlibstat.vcxproj
index 64b4d869d..64b4d869d 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc11/zlibstat.vcxproj
+++ b/src/png/zlib/contrib/vstudio/vc11/zlibstat.vcxproj
diff --git a/xs/src/png/zlib/contrib/vstudio/vc11/zlibvc.def b/src/png/zlib/contrib/vstudio/vc11/zlibvc.def
index f876c3bca..f876c3bca 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc11/zlibvc.def
+++ b/src/png/zlib/contrib/vstudio/vc11/zlibvc.def
diff --git a/xs/src/png/zlib/contrib/vstudio/vc11/zlibvc.sln b/src/png/zlib/contrib/vstudio/vc11/zlibvc.sln
index b7e381266..b7e381266 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc11/zlibvc.sln
+++ b/src/png/zlib/contrib/vstudio/vc11/zlibvc.sln
diff --git a/xs/src/png/zlib/contrib/vstudio/vc11/zlibvc.vcxproj b/src/png/zlib/contrib/vstudio/vc11/zlibvc.vcxproj
index c4cffccf1..c4cffccf1 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc11/zlibvc.vcxproj
+++ b/src/png/zlib/contrib/vstudio/vc11/zlibvc.vcxproj
diff --git a/xs/src/png/zlib/contrib/vstudio/vc12/miniunz.vcxproj b/src/png/zlib/contrib/vstudio/vc12/miniunz.vcxproj
index d88ac7fc7..d88ac7fc7 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc12/miniunz.vcxproj
+++ b/src/png/zlib/contrib/vstudio/vc12/miniunz.vcxproj
diff --git a/xs/src/png/zlib/contrib/vstudio/vc12/minizip.vcxproj b/src/png/zlib/contrib/vstudio/vc12/minizip.vcxproj
index f1f239c9e..f1f239c9e 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc12/minizip.vcxproj
+++ b/src/png/zlib/contrib/vstudio/vc12/minizip.vcxproj
diff --git a/xs/src/png/zlib/contrib/vstudio/vc12/testzlib.vcxproj b/src/png/zlib/contrib/vstudio/vc12/testzlib.vcxproj
index 64b2cbe34..64b2cbe34 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc12/testzlib.vcxproj
+++ b/src/png/zlib/contrib/vstudio/vc12/testzlib.vcxproj
diff --git a/xs/src/png/zlib/contrib/vstudio/vc12/testzlibdll.vcxproj b/src/png/zlib/contrib/vstudio/vc12/testzlibdll.vcxproj
index c66573a8b..c66573a8b 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc12/testzlibdll.vcxproj
+++ b/src/png/zlib/contrib/vstudio/vc12/testzlibdll.vcxproj
diff --git a/xs/src/png/zlib/contrib/vstudio/vc12/zlib.rc b/src/png/zlib/contrib/vstudio/vc12/zlib.rc
index c4e4b016e..c4e4b016e 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc12/zlib.rc
+++ b/src/png/zlib/contrib/vstudio/vc12/zlib.rc
diff --git a/xs/src/png/zlib/contrib/vstudio/vc12/zlibstat.vcxproj b/src/png/zlib/contrib/vstudio/vc12/zlibstat.vcxproj
index 3fdee7c50..3fdee7c50 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc12/zlibstat.vcxproj
+++ b/src/png/zlib/contrib/vstudio/vc12/zlibstat.vcxproj
diff --git a/xs/src/png/zlib/contrib/vstudio/vc12/zlibvc.def b/src/png/zlib/contrib/vstudio/vc12/zlibvc.def
index f876c3bca..f876c3bca 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc12/zlibvc.def
+++ b/src/png/zlib/contrib/vstudio/vc12/zlibvc.def
diff --git a/xs/src/png/zlib/contrib/vstudio/vc12/zlibvc.sln b/src/png/zlib/contrib/vstudio/vc12/zlibvc.sln
index dcda22984..dcda22984 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc12/zlibvc.sln
+++ b/src/png/zlib/contrib/vstudio/vc12/zlibvc.sln
diff --git a/xs/src/png/zlib/contrib/vstudio/vc12/zlibvc.vcxproj b/src/png/zlib/contrib/vstudio/vc12/zlibvc.vcxproj
index ab2b6c360..ab2b6c360 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc12/zlibvc.vcxproj
+++ b/src/png/zlib/contrib/vstudio/vc12/zlibvc.vcxproj
diff --git a/xs/src/png/zlib/contrib/vstudio/vc14/miniunz.vcxproj b/src/png/zlib/contrib/vstudio/vc14/miniunz.vcxproj
index 9b5c07587..9b5c07587 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc14/miniunz.vcxproj
+++ b/src/png/zlib/contrib/vstudio/vc14/miniunz.vcxproj
diff --git a/xs/src/png/zlib/contrib/vstudio/vc14/minizip.vcxproj b/src/png/zlib/contrib/vstudio/vc14/minizip.vcxproj
index 968a410a1..968a410a1 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc14/minizip.vcxproj
+++ b/src/png/zlib/contrib/vstudio/vc14/minizip.vcxproj
diff --git a/xs/src/png/zlib/contrib/vstudio/vc14/testzlib.vcxproj b/src/png/zlib/contrib/vstudio/vc14/testzlib.vcxproj
index 2c371252a..2c371252a 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc14/testzlib.vcxproj
+++ b/src/png/zlib/contrib/vstudio/vc14/testzlib.vcxproj
diff --git a/xs/src/png/zlib/contrib/vstudio/vc14/testzlibdll.vcxproj b/src/png/zlib/contrib/vstudio/vc14/testzlibdll.vcxproj
index d87474dec..d87474dec 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc14/testzlibdll.vcxproj
+++ b/src/png/zlib/contrib/vstudio/vc14/testzlibdll.vcxproj
diff --git a/xs/src/png/zlib/contrib/vstudio/vc14/zlib.rc b/src/png/zlib/contrib/vstudio/vc14/zlib.rc
index c4e4b016e..c4e4b016e 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc14/zlib.rc
+++ b/src/png/zlib/contrib/vstudio/vc14/zlib.rc
diff --git a/xs/src/png/zlib/contrib/vstudio/vc14/zlibstat.vcxproj b/src/png/zlib/contrib/vstudio/vc14/zlibstat.vcxproj
index 3e4b98639..3e4b98639 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc14/zlibstat.vcxproj
+++ b/src/png/zlib/contrib/vstudio/vc14/zlibstat.vcxproj
diff --git a/xs/src/png/zlib/contrib/vstudio/vc14/zlibvc.def b/src/png/zlib/contrib/vstudio/vc14/zlibvc.def
index f876c3bca..f876c3bca 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc14/zlibvc.def
+++ b/src/png/zlib/contrib/vstudio/vc14/zlibvc.def
diff --git a/xs/src/png/zlib/contrib/vstudio/vc14/zlibvc.sln b/src/png/zlib/contrib/vstudio/vc14/zlibvc.sln
index 6f4a1076a..6f4a1076a 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc14/zlibvc.sln
+++ b/src/png/zlib/contrib/vstudio/vc14/zlibvc.sln
diff --git a/xs/src/png/zlib/contrib/vstudio/vc14/zlibvc.vcxproj b/src/png/zlib/contrib/vstudio/vc14/zlibvc.vcxproj
index f8f673cb0..f8f673cb0 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc14/zlibvc.vcxproj
+++ b/src/png/zlib/contrib/vstudio/vc14/zlibvc.vcxproj
diff --git a/xs/src/png/zlib/contrib/vstudio/vc9/miniunz.vcproj b/src/png/zlib/contrib/vstudio/vc9/miniunz.vcproj
index 038a9e5fa..038a9e5fa 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc9/miniunz.vcproj
+++ b/src/png/zlib/contrib/vstudio/vc9/miniunz.vcproj
diff --git a/xs/src/png/zlib/contrib/vstudio/vc9/minizip.vcproj b/src/png/zlib/contrib/vstudio/vc9/minizip.vcproj
index ad4023991..ad4023991 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc9/minizip.vcproj
+++ b/src/png/zlib/contrib/vstudio/vc9/minizip.vcproj
diff --git a/xs/src/png/zlib/contrib/vstudio/vc9/testzlib.vcproj b/src/png/zlib/contrib/vstudio/vc9/testzlib.vcproj
index c9f19d24e..c9f19d24e 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc9/testzlib.vcproj
+++ b/src/png/zlib/contrib/vstudio/vc9/testzlib.vcproj
diff --git a/xs/src/png/zlib/contrib/vstudio/vc9/testzlibdll.vcproj b/src/png/zlib/contrib/vstudio/vc9/testzlibdll.vcproj
index d7530fd7d..d7530fd7d 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc9/testzlibdll.vcproj
+++ b/src/png/zlib/contrib/vstudio/vc9/testzlibdll.vcproj
diff --git a/xs/src/png/zlib/contrib/vstudio/vc9/zlib.rc b/src/png/zlib/contrib/vstudio/vc9/zlib.rc
index c4e4b016e..c4e4b016e 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc9/zlib.rc
+++ b/src/png/zlib/contrib/vstudio/vc9/zlib.rc
diff --git a/xs/src/png/zlib/contrib/vstudio/vc9/zlibstat.vcproj b/src/png/zlib/contrib/vstudio/vc9/zlibstat.vcproj
index d4ffb46b2..d4ffb46b2 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc9/zlibstat.vcproj
+++ b/src/png/zlib/contrib/vstudio/vc9/zlibstat.vcproj
diff --git a/xs/src/png/zlib/contrib/vstudio/vc9/zlibvc.def b/src/png/zlib/contrib/vstudio/vc9/zlibvc.def
index f876c3bca..f876c3bca 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc9/zlibvc.def
+++ b/src/png/zlib/contrib/vstudio/vc9/zlibvc.def
diff --git a/xs/src/png/zlib/contrib/vstudio/vc9/zlibvc.sln b/src/png/zlib/contrib/vstudio/vc9/zlibvc.sln
index 75c64c3f4..75c64c3f4 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc9/zlibvc.sln
+++ b/src/png/zlib/contrib/vstudio/vc9/zlibvc.sln
diff --git a/xs/src/png/zlib/contrib/vstudio/vc9/zlibvc.vcproj b/src/png/zlib/contrib/vstudio/vc9/zlibvc.vcproj
index 95bb241f3..95bb241f3 100644
--- a/xs/src/png/zlib/contrib/vstudio/vc9/zlibvc.vcproj
+++ b/src/png/zlib/contrib/vstudio/vc9/zlibvc.vcproj
diff --git a/xs/src/png/zlib/crc32.c b/src/png/zlib/crc32.c
index 9580440c0..9580440c0 100644
--- a/xs/src/png/zlib/crc32.c
+++ b/src/png/zlib/crc32.c
diff --git a/xs/src/png/zlib/crc32.h b/src/png/zlib/crc32.h
index 9e0c77810..9e0c77810 100644
--- a/xs/src/png/zlib/crc32.h
+++ b/src/png/zlib/crc32.h
diff --git a/xs/src/png/zlib/deflate.c b/src/png/zlib/deflate.c
index 1ec761448..1ec761448 100644
--- a/xs/src/png/zlib/deflate.c
+++ b/src/png/zlib/deflate.c
diff --git a/xs/src/png/zlib/deflate.h b/src/png/zlib/deflate.h
index 23ecdd312..23ecdd312 100644
--- a/xs/src/png/zlib/deflate.h
+++ b/src/png/zlib/deflate.h
diff --git a/xs/src/png/zlib/gzclose.c b/src/png/zlib/gzclose.c
index caeb99a31..caeb99a31 100644
--- a/xs/src/png/zlib/gzclose.c
+++ b/src/png/zlib/gzclose.c
diff --git a/xs/src/png/zlib/gzguts.h b/src/png/zlib/gzguts.h
index 990a4d251..990a4d251 100644
--- a/xs/src/png/zlib/gzguts.h
+++ b/src/png/zlib/gzguts.h
diff --git a/xs/src/png/zlib/gzlib.c b/src/png/zlib/gzlib.c
index 4105e6aff..4105e6aff 100644
--- a/xs/src/png/zlib/gzlib.c
+++ b/src/png/zlib/gzlib.c
diff --git a/xs/src/png/zlib/gzread.c b/src/png/zlib/gzread.c
index 956b91ea7..956b91ea7 100644
--- a/xs/src/png/zlib/gzread.c
+++ b/src/png/zlib/gzread.c
diff --git a/xs/src/png/zlib/gzwrite.c b/src/png/zlib/gzwrite.c
index c7b5651d7..c7b5651d7 100644
--- a/xs/src/png/zlib/gzwrite.c
+++ b/src/png/zlib/gzwrite.c
diff --git a/xs/src/png/zlib/infback.c b/src/png/zlib/infback.c
index 59679ecbf..59679ecbf 100644
--- a/xs/src/png/zlib/infback.c
+++ b/src/png/zlib/infback.c
diff --git a/xs/src/png/zlib/inffast.c b/src/png/zlib/inffast.c
index 0dbd1dbc0..0dbd1dbc0 100644
--- a/xs/src/png/zlib/inffast.c
+++ b/src/png/zlib/inffast.c
diff --git a/xs/src/png/zlib/inffast.h b/src/png/zlib/inffast.h
index e5c1aa4ca..e5c1aa4ca 100644
--- a/xs/src/png/zlib/inffast.h
+++ b/src/png/zlib/inffast.h
diff --git a/xs/src/png/zlib/inffixed.h b/src/png/zlib/inffixed.h
index d62832776..d62832776 100644
--- a/xs/src/png/zlib/inffixed.h
+++ b/src/png/zlib/inffixed.h
diff --git a/xs/src/png/zlib/inflate.c b/src/png/zlib/inflate.c
index ac333e8c2..ac333e8c2 100644
--- a/xs/src/png/zlib/inflate.c
+++ b/src/png/zlib/inflate.c
diff --git a/xs/src/png/zlib/inflate.h b/src/png/zlib/inflate.h
index a46cce6b6..a46cce6b6 100644
--- a/xs/src/png/zlib/inflate.h
+++ b/src/png/zlib/inflate.h
diff --git a/xs/src/png/zlib/inftrees.c b/src/png/zlib/inftrees.c
index 2ea08fc13..2ea08fc13 100644
--- a/xs/src/png/zlib/inftrees.c
+++ b/src/png/zlib/inftrees.c
diff --git a/xs/src/png/zlib/inftrees.h b/src/png/zlib/inftrees.h
index baa53a0b1..baa53a0b1 100644
--- a/xs/src/png/zlib/inftrees.h
+++ b/src/png/zlib/inftrees.h
diff --git a/xs/src/png/zlib/make_vms.com b/src/png/zlib/make_vms.com
index 65e9d0cbc..65e9d0cbc 100644
--- a/xs/src/png/zlib/make_vms.com
+++ b/src/png/zlib/make_vms.com
diff --git a/xs/src/png/zlib/msdos/Makefile.bor b/src/png/zlib/msdos/Makefile.bor
index 3d12a2c25..3d12a2c25 100644
--- a/xs/src/png/zlib/msdos/Makefile.bor
+++ b/src/png/zlib/msdos/Makefile.bor
diff --git a/xs/src/png/zlib/msdos/Makefile.dj2 b/src/png/zlib/msdos/Makefile.dj2
index 59d2037d6..59d2037d6 100644
--- a/xs/src/png/zlib/msdos/Makefile.dj2
+++ b/src/png/zlib/msdos/Makefile.dj2
diff --git a/xs/src/png/zlib/msdos/Makefile.emx b/src/png/zlib/msdos/Makefile.emx
index e30f67bed..e30f67bed 100644
--- a/xs/src/png/zlib/msdos/Makefile.emx
+++ b/src/png/zlib/msdos/Makefile.emx
diff --git a/xs/src/png/zlib/msdos/Makefile.msc b/src/png/zlib/msdos/Makefile.msc
index ae8378615..ae8378615 100644
--- a/xs/src/png/zlib/msdos/Makefile.msc
+++ b/src/png/zlib/msdos/Makefile.msc
diff --git a/xs/src/png/zlib/msdos/Makefile.tc b/src/png/zlib/msdos/Makefile.tc
index 5aec82a9d..5aec82a9d 100644
--- a/xs/src/png/zlib/msdos/Makefile.tc
+++ b/src/png/zlib/msdos/Makefile.tc
diff --git a/xs/src/png/zlib/nintendods/Makefile b/src/png/zlib/nintendods/Makefile
index 21337d01a..21337d01a 100644
--- a/xs/src/png/zlib/nintendods/Makefile
+++ b/src/png/zlib/nintendods/Makefile
diff --git a/xs/src/png/zlib/nintendods/README b/src/png/zlib/nintendods/README
index ba7a37dbe..ba7a37dbe 100644
--- a/xs/src/png/zlib/nintendods/README
+++ b/src/png/zlib/nintendods/README
diff --git a/xs/src/png/zlib/old/Makefile.emx b/src/png/zlib/old/Makefile.emx
index 612b03791..612b03791 100644
--- a/xs/src/png/zlib/old/Makefile.emx
+++ b/src/png/zlib/old/Makefile.emx
diff --git a/xs/src/png/zlib/old/Makefile.riscos b/src/png/zlib/old/Makefile.riscos
index 57e29d3fb..57e29d3fb 100644
--- a/xs/src/png/zlib/old/Makefile.riscos
+++ b/src/png/zlib/old/Makefile.riscos
diff --git a/xs/src/png/zlib/old/README b/src/png/zlib/old/README
index 800bf0798..800bf0798 100644
--- a/xs/src/png/zlib/old/README
+++ b/src/png/zlib/old/README
diff --git a/xs/src/png/zlib/old/descrip.mms b/src/png/zlib/old/descrip.mms
index 7066da5b5..7066da5b5 100644
--- a/xs/src/png/zlib/old/descrip.mms
+++ b/src/png/zlib/old/descrip.mms
diff --git a/xs/src/png/zlib/old/os2/Makefile.os2 b/src/png/zlib/old/os2/Makefile.os2
index bb426c0d8..bb426c0d8 100644
--- a/xs/src/png/zlib/old/os2/Makefile.os2
+++ b/src/png/zlib/old/os2/Makefile.os2
diff --git a/xs/src/png/zlib/old/os2/zlib.def b/src/png/zlib/old/os2/zlib.def
index 4c753f1a3..4c753f1a3 100644
--- a/xs/src/png/zlib/old/os2/zlib.def
+++ b/src/png/zlib/old/os2/zlib.def
diff --git a/xs/src/png/zlib/old/visual-basic.txt b/src/png/zlib/old/visual-basic.txt
index 57efe5812..57efe5812 100644
--- a/xs/src/png/zlib/old/visual-basic.txt
+++ b/src/png/zlib/old/visual-basic.txt
diff --git a/xs/src/png/zlib/os400/README400 b/src/png/zlib/os400/README400
index 4f98334f5..4f98334f5 100644
--- a/xs/src/png/zlib/os400/README400
+++ b/src/png/zlib/os400/README400
diff --git a/xs/src/png/zlib/os400/bndsrc b/src/png/zlib/os400/bndsrc
index 5e6e0a2f0..5e6e0a2f0 100644
--- a/xs/src/png/zlib/os400/bndsrc
+++ b/src/png/zlib/os400/bndsrc
diff --git a/xs/src/png/zlib/os400/make.sh b/src/png/zlib/os400/make.sh
index 19eec117a..19eec117a 100644
--- a/xs/src/png/zlib/os400/make.sh
+++ b/src/png/zlib/os400/make.sh
diff --git a/xs/src/png/zlib/os400/zlib.inc b/src/png/zlib/os400/zlib.inc
index c6aca2cbd..c6aca2cbd 100644
--- a/xs/src/png/zlib/os400/zlib.inc
+++ b/src/png/zlib/os400/zlib.inc
diff --git a/xs/src/png/zlib/qnx/package.qpg b/src/png/zlib/qnx/package.qpg
index 31e8e90db..31e8e90db 100644
--- a/xs/src/png/zlib/qnx/package.qpg
+++ b/src/png/zlib/qnx/package.qpg
diff --git a/xs/src/png/zlib/treebuild.xml b/src/png/zlib/treebuild.xml
index fd75525f9..fd75525f9 100644
--- a/xs/src/png/zlib/treebuild.xml
+++ b/src/png/zlib/treebuild.xml
diff --git a/xs/src/png/zlib/trees.c b/src/png/zlib/trees.c
index 50cf4b457..50cf4b457 100644
--- a/xs/src/png/zlib/trees.c
+++ b/src/png/zlib/trees.c
diff --git a/xs/src/png/zlib/trees.h b/src/png/zlib/trees.h
index d35639d82..d35639d82 100644
--- a/xs/src/png/zlib/trees.h
+++ b/src/png/zlib/trees.h
diff --git a/xs/src/png/zlib/uncompr.c b/src/png/zlib/uncompr.c
index f03a1a865..f03a1a865 100644
--- a/xs/src/png/zlib/uncompr.c
+++ b/src/png/zlib/uncompr.c
diff --git a/xs/src/png/zlib/watcom/watcom_f.mak b/src/png/zlib/watcom/watcom_f.mak
index 37f4d74c1..37f4d74c1 100644
--- a/xs/src/png/zlib/watcom/watcom_f.mak
+++ b/src/png/zlib/watcom/watcom_f.mak
diff --git a/xs/src/png/zlib/watcom/watcom_l.mak b/src/png/zlib/watcom/watcom_l.mak
index 193eed7b3..193eed7b3 100644
--- a/xs/src/png/zlib/watcom/watcom_l.mak
+++ b/src/png/zlib/watcom/watcom_l.mak
diff --git a/xs/src/png/zlib/win32/DLL_FAQ.txt b/src/png/zlib/win32/DLL_FAQ.txt
index 12c009018..12c009018 100644
--- a/xs/src/png/zlib/win32/DLL_FAQ.txt
+++ b/src/png/zlib/win32/DLL_FAQ.txt
diff --git a/xs/src/png/zlib/win32/Makefile.bor b/src/png/zlib/win32/Makefile.bor
index d152bbb7f..d152bbb7f 100644
--- a/xs/src/png/zlib/win32/Makefile.bor
+++ b/src/png/zlib/win32/Makefile.bor
diff --git a/xs/src/png/zlib/win32/Makefile.gcc b/src/png/zlib/win32/Makefile.gcc
index 305be50af..305be50af 100644
--- a/xs/src/png/zlib/win32/Makefile.gcc
+++ b/src/png/zlib/win32/Makefile.gcc
diff --git a/xs/src/png/zlib/win32/Makefile.msc b/src/png/zlib/win32/Makefile.msc
index 6831882de..6831882de 100644
--- a/xs/src/png/zlib/win32/Makefile.msc
+++ b/src/png/zlib/win32/Makefile.msc
diff --git a/xs/src/png/zlib/win32/README-WIN32.txt b/src/png/zlib/win32/README-WIN32.txt
index df7ab7f4b..df7ab7f4b 100644
--- a/xs/src/png/zlib/win32/README-WIN32.txt
+++ b/src/png/zlib/win32/README-WIN32.txt
diff --git a/xs/src/png/zlib/win32/VisualC.txt b/src/png/zlib/win32/VisualC.txt
index 1005b2194..1005b2194 100644
--- a/xs/src/png/zlib/win32/VisualC.txt
+++ b/src/png/zlib/win32/VisualC.txt
diff --git a/xs/src/png/zlib/win32/zlib.def b/src/png/zlib/win32/zlib.def
index a2188b000..a2188b000 100644
--- a/xs/src/png/zlib/win32/zlib.def
+++ b/src/png/zlib/win32/zlib.def
diff --git a/xs/src/png/zlib/win32/zlib1.rc b/src/png/zlib/win32/zlib1.rc
index 234e641c3..234e641c3 100644
--- a/xs/src/png/zlib/win32/zlib1.rc
+++ b/src/png/zlib/win32/zlib1.rc
diff --git a/xs/src/png/zlib/zconf.h.cmakein b/src/png/zlib/zconf.h.cmakein
index a7f24cce6..a7f24cce6 100644
--- a/xs/src/png/zlib/zconf.h.cmakein
+++ b/src/png/zlib/zconf.h.cmakein
diff --git a/xs/src/png/zlib/zconf.h.in b/src/png/zlib/zconf.h.in
index 5e1d68a00..5e1d68a00 100644
--- a/xs/src/png/zlib/zconf.h.in
+++ b/src/png/zlib/zconf.h.in
diff --git a/xs/src/png/zlib/zconf.h.included b/src/png/zlib/zconf.h.included
index 5e1d68a00..5e1d68a00 100644
--- a/xs/src/png/zlib/zconf.h.included
+++ b/src/png/zlib/zconf.h.included
diff --git a/xs/src/png/zlib/zlib.3 b/src/png/zlib/zlib.3
index bda4eb073..bda4eb073 100644
--- a/xs/src/png/zlib/zlib.3
+++ b/src/png/zlib/zlib.3
diff --git a/xs/src/png/zlib/zlib.3.pdf b/src/png/zlib/zlib.3.pdf
index 6fa519c5b..6fa519c5b 100644
--- a/xs/src/png/zlib/zlib.3.pdf
+++ b/src/png/zlib/zlib.3.pdf
Binary files differ
diff --git a/xs/src/png/zlib/zlib.h b/src/png/zlib/zlib.h
index f09cdaf1e..f09cdaf1e 100644
--- a/xs/src/png/zlib/zlib.h
+++ b/src/png/zlib/zlib.h
diff --git a/xs/src/png/zlib/zlib.map b/src/png/zlib/zlib.map
index 82ce98cf7..82ce98cf7 100644
--- a/xs/src/png/zlib/zlib.map
+++ b/src/png/zlib/zlib.map
diff --git a/xs/src/png/zlib/zlib.pc.cmakein b/src/png/zlib/zlib.pc.cmakein
index a5e642938..a5e642938 100644
--- a/xs/src/png/zlib/zlib.pc.cmakein
+++ b/src/png/zlib/zlib.pc.cmakein
diff --git a/xs/src/png/zlib/zlib.pc.in b/src/png/zlib/zlib.pc.in
index 7e5acf9c7..7e5acf9c7 100644
--- a/xs/src/png/zlib/zlib.pc.in
+++ b/src/png/zlib/zlib.pc.in
diff --git a/xs/src/png/zlib/zlib2ansi b/src/png/zlib/zlib2ansi
index 15e3e165f..15e3e165f 100644
--- a/xs/src/png/zlib/zlib2ansi
+++ b/src/png/zlib/zlib2ansi
diff --git a/xs/src/png/zlib/zutil.c b/src/png/zlib/zutil.c
index a76c6b0c7..a76c6b0c7 100644
--- a/xs/src/png/zlib/zutil.c
+++ b/src/png/zlib/zutil.c
diff --git a/xs/src/png/zlib/zutil.h b/src/png/zlib/zutil.h
index b079ea6a8..b079ea6a8 100644
--- a/xs/src/png/zlib/zutil.h
+++ b/src/png/zlib/zutil.h
diff --git a/src/poly2tri/CMakeLists.txt b/src/poly2tri/CMakeLists.txt
new file mode 100644
index 000000000..3cdff1221
--- /dev/null
+++ b/src/poly2tri/CMakeLists.txt
@@ -0,0 +1,17 @@
+project(poly2tri)
+cmake_minimum_required(VERSION 2.6)
+
+add_library(poly2tri STATIC
+ common/shapes.cc
+ common/shapes.h
+ common/utils.h
+ poly2tri.h
+ sweep/advancing_front.cc
+ sweep/advancing_front.h
+ sweep/cdt.cc
+ sweep/cdt.h
+ sweep/sweep.cc
+ sweep/sweep.h
+ sweep/sweep_context.cc
+ sweep/sweep_context.h
+)
diff --git a/xs/src/poly2tri/common/shapes.cc b/src/poly2tri/common/shapes.cc
index 54aeaba6a..54aeaba6a 100644
--- a/xs/src/poly2tri/common/shapes.cc
+++ b/src/poly2tri/common/shapes.cc
diff --git a/xs/src/poly2tri/common/shapes.h b/src/poly2tri/common/shapes.h
index 3b8a5247e..3b8a5247e 100644
--- a/xs/src/poly2tri/common/shapes.h
+++ b/src/poly2tri/common/shapes.h
diff --git a/xs/src/poly2tri/common/utils.h b/src/poly2tri/common/utils.h
index 4bcb76361..4bcb76361 100644
--- a/xs/src/poly2tri/common/utils.h
+++ b/src/poly2tri/common/utils.h
diff --git a/xs/src/poly2tri/poly2tri.h b/src/poly2tri/poly2tri.h
index 29a08d052..29a08d052 100644
--- a/xs/src/poly2tri/poly2tri.h
+++ b/src/poly2tri/poly2tri.h
diff --git a/xs/src/poly2tri/sweep/advancing_front.cc b/src/poly2tri/sweep/advancing_front.cc
index 38723beef..38723beef 100644
--- a/xs/src/poly2tri/sweep/advancing_front.cc
+++ b/src/poly2tri/sweep/advancing_front.cc
diff --git a/xs/src/poly2tri/sweep/advancing_front.h b/src/poly2tri/sweep/advancing_front.h
index 645dcec97..645dcec97 100644
--- a/xs/src/poly2tri/sweep/advancing_front.h
+++ b/src/poly2tri/sweep/advancing_front.h
diff --git a/xs/src/poly2tri/sweep/cdt.cc b/src/poly2tri/sweep/cdt.cc
index 09d088ae3..09d088ae3 100644
--- a/xs/src/poly2tri/sweep/cdt.cc
+++ b/src/poly2tri/sweep/cdt.cc
diff --git a/xs/src/poly2tri/sweep/cdt.h b/src/poly2tri/sweep/cdt.h
index ea3286d9a..ea3286d9a 100644
--- a/xs/src/poly2tri/sweep/cdt.h
+++ b/src/poly2tri/sweep/cdt.h
diff --git a/xs/src/poly2tri/sweep/sweep.cc b/src/poly2tri/sweep/sweep.cc
index 8d2b576e8..8d2b576e8 100644
--- a/xs/src/poly2tri/sweep/sweep.cc
+++ b/src/poly2tri/sweep/sweep.cc
diff --git a/xs/src/poly2tri/sweep/sweep.h b/src/poly2tri/sweep/sweep.h
index 33e34a714..33e34a714 100644
--- a/xs/src/poly2tri/sweep/sweep.h
+++ b/src/poly2tri/sweep/sweep.h
diff --git a/xs/src/poly2tri/sweep/sweep_context.cc b/src/poly2tri/sweep/sweep_context.cc
index a9f1fdf8e..a9f1fdf8e 100644
--- a/xs/src/poly2tri/sweep/sweep_context.cc
+++ b/src/poly2tri/sweep/sweep_context.cc
diff --git a/xs/src/poly2tri/sweep/sweep_context.h b/src/poly2tri/sweep/sweep_context.h
index ba0d06581..ba0d06581 100644
--- a/xs/src/poly2tri/sweep/sweep_context.h
+++ b/src/poly2tri/sweep/sweep_context.h
diff --git a/src/polypartition/CMakeLists.txt b/src/polypartition/CMakeLists.txt
new file mode 100644
index 000000000..07b92840b
--- /dev/null
+++ b/src/polypartition/CMakeLists.txt
@@ -0,0 +1,7 @@
+project(polypartition)
+cmake_minimum_required(VERSION 2.6)
+
+add_library(polypartition STATIC
+ polypartition.cpp
+ polypartition.h
+)
diff --git a/xs/src/polypartition.cpp b/src/polypartition/polypartition.cpp
index 700cd0974..9c5917251 100644
--- a/xs/src/polypartition.cpp
+++ b/src/polypartition/polypartition.cpp
@@ -1,1563 +1,1563 @@
-//Copyright (C) 2011 by Ivan Fratric
-//
-//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.
-
-
-#include <stdio.h>
-#include <string.h>
-#include <math.h>
-#include <list>
-#include <algorithm>
-#include <set>
-
-using namespace std;
-
-#include "polypartition.h"
-
-#define TPPL_VERTEXTYPE_REGULAR 0
-#define TPPL_VERTEXTYPE_START 1
-#define TPPL_VERTEXTYPE_END 2
-#define TPPL_VERTEXTYPE_SPLIT 3
-#define TPPL_VERTEXTYPE_MERGE 4
-
-TPPLPoly::TPPLPoly() {
- hole = false;
- numpoints = 0;
- points = NULL;
-}
-
-TPPLPoly::~TPPLPoly() {
- if(points) delete [] points;
-}
-
-void TPPLPoly::Clear() {
- if(points) delete [] points;
- hole = false;
- numpoints = 0;
- points = NULL;
-}
-
-void TPPLPoly::Init(long numpoints) {
- Clear();
- this->numpoints = numpoints;
- points = new TPPLPoint[numpoints];
-}
-
-void TPPLPoly::Triangle(TPPLPoint &p1, TPPLPoint &p2, TPPLPoint &p3) {
- Init(3);
- points[0] = p1;
- points[1] = p2;
- points[2] = p3;
-}
-
-TPPLPoly::TPPLPoly(const TPPLPoly &src) {
- hole = src.hole;
- numpoints = src.numpoints;
- points = new TPPLPoint[numpoints];
- memcpy(points, src.points, numpoints*sizeof(TPPLPoint));
-}
-
-TPPLPoly& TPPLPoly::operator=(const TPPLPoly &src) {
- if(&src != this) {
- Clear();
- hole = src.hole;
- numpoints = src.numpoints;
- points = new TPPLPoint[numpoints];
- memcpy(points, src.points, numpoints*sizeof(TPPLPoint));
- }
- return *this;
-}
-
-int TPPLPoly::GetOrientation() const {
- long i1,i2;
- tppl_float area = 0;
- for(i1=0; i1<numpoints; i1++) {
- i2 = i1+1;
- if(i2 == numpoints) i2 = 0;
- area += points[i1].x * points[i2].y - points[i1].y * points[i2].x;
- }
- if(area>0) return TPPL_CCW;
- if(area<0) return TPPL_CW;
- return 0;
-}
-
-void TPPLPoly::SetOrientation(int orientation) {
- int polyorientation = GetOrientation();
- if(polyorientation&&(polyorientation!=orientation)) {
- Invert();
- }
-}
-
-void TPPLPoly::Invert() {
- long i;
- TPPLPoint *invpoints;
-
- invpoints = new TPPLPoint[numpoints];
- for(i=0;i<numpoints;i++) {
- invpoints[i] = points[numpoints-i-1];
- }
-
- delete [] points;
- points = invpoints;
-}
-
-TPPLPoint TPPLPartition::Normalize(const TPPLPoint &p) {
- TPPLPoint r;
- tppl_float n = sqrt(p.x*p.x + p.y*p.y);
- if(n!=0) {
- r = p/n;
- } else {
- r.x = 0;
- r.y = 0;
- }
- return r;
-}
-
-tppl_float TPPLPartition::Distance(const TPPLPoint &p1, const TPPLPoint &p2) {
- tppl_float dx,dy;
- dx = p2.x - p1.x;
- dy = p2.y - p1.y;
- return(sqrt(dx*dx + dy*dy));
-}
-
-//checks if two lines intersect
-int TPPLPartition::Intersects(TPPLPoint &p11, TPPLPoint &p12, TPPLPoint &p21, TPPLPoint &p22) {
- if((p11.x == p21.x)&&(p11.y == p21.y)) return 0;
- if((p11.x == p22.x)&&(p11.y == p22.y)) return 0;
- if((p12.x == p21.x)&&(p12.y == p21.y)) return 0;
- if((p12.x == p22.x)&&(p12.y == p22.y)) return 0;
-
- TPPLPoint v1ort,v2ort,v;
- tppl_float dot11,dot12,dot21,dot22;
-
- v1ort.x = p12.y-p11.y;
- v1ort.y = p11.x-p12.x;
-
- v2ort.x = p22.y-p21.y;
- v2ort.y = p21.x-p22.x;
-
- v = p21-p11;
- dot21 = v.x*v1ort.x + v.y*v1ort.y;
- v = p22-p11;
- dot22 = v.x*v1ort.x + v.y*v1ort.y;
-
- v = p11-p21;
- dot11 = v.x*v2ort.x + v.y*v2ort.y;
- v = p12-p21;
- dot12 = v.x*v2ort.x + v.y*v2ort.y;
-
- if(dot11*dot12>0) return 0;
- if(dot21*dot22>0) return 0;
-
- return 1;
-}
-
-//removes holes from inpolys by merging them with non-holes
-int TPPLPartition::RemoveHoles(list<TPPLPoly> *inpolys, list<TPPLPoly> *outpolys) {
- list<TPPLPoly> polys;
- list<TPPLPoly>::iterator holeiter,polyiter,iter,iter2;
- long i,i2,holepointindex,polypointindex = 0;
- TPPLPoint holepoint,polypoint,bestpolypoint;
- TPPLPoint linep1,linep2;
- TPPLPoint v1,v2;
- TPPLPoly newpoly;
- bool hasholes;
- bool pointvisible;
- bool pointfound;
-
- //check for trivial case (no holes)
- hasholes = false;
- for(iter = inpolys->begin(); iter!=inpolys->end(); ++iter) {
- if(iter->IsHole()) {
- hasholes = true;
- break;
- }
- }
- if(!hasholes) {
- for(iter = inpolys->begin(); iter!=inpolys->end(); ++iter) {
- outpolys->push_back(*iter);
- }
- return 1;
- }
-
- polys = *inpolys;
-
- while(1) {
- //find the hole point with the largest x
- hasholes = false;
- for(iter = polys.begin(); iter!=polys.end(); ++iter) {
- if(!iter->IsHole()) continue;
-
- if(!hasholes) {
- hasholes = true;
- holeiter = iter;
- holepointindex = 0;
- }
-
- for(i=0; i < iter->GetNumPoints(); i++) {
- if(iter->GetPoint(i).x > holeiter->GetPoint(holepointindex).x) {
- holeiter = iter;
- holepointindex = i;
- }
- }
- }
- if(!hasholes) break;
- holepoint = holeiter->GetPoint(holepointindex);
-
- pointfound = false;
- for(iter = polys.begin(); iter!=polys.end(); ++iter) {
- if(iter->IsHole()) continue;
- for(i=0; i < iter->GetNumPoints(); i++) {
- if(iter->GetPoint(i).x <= holepoint.x) continue;
- if(!InCone(iter->GetPoint((i+iter->GetNumPoints()-1)%(iter->GetNumPoints())),
- iter->GetPoint(i),
- iter->GetPoint((i+1)%(iter->GetNumPoints())),
- holepoint))
- continue;
- polypoint = iter->GetPoint(i);
- if(pointfound) {
- v1 = Normalize(polypoint-holepoint);
- v2 = Normalize(bestpolypoint-holepoint);
- if(v2.x > v1.x) continue;
- }
- pointvisible = true;
- for(iter2 = polys.begin(); iter2!=polys.end(); ++iter2) {
- if(iter2->IsHole()) continue;
- for(i2=0; i2 < iter2->GetNumPoints(); i2++) {
- linep1 = iter2->GetPoint(i2);
- linep2 = iter2->GetPoint((i2+1)%(iter2->GetNumPoints()));
- if(Intersects(holepoint,polypoint,linep1,linep2)) {
- pointvisible = false;
- break;
- }
- }
- if(!pointvisible) break;
- }
- if(pointvisible) {
- pointfound = true;
- bestpolypoint = polypoint;
- polyiter = iter;
- polypointindex = i;
- }
- }
- }
-
- if(!pointfound) return 0;
-
- newpoly.Init(holeiter->GetNumPoints() + polyiter->GetNumPoints() + 2);
- i2 = 0;
- for(i=0;i<=polypointindex;i++) {
- newpoly[i2] = polyiter->GetPoint(i);
- i2++;
- }
- for(i=0;i<=holeiter->GetNumPoints();i++) {
- newpoly[i2] = holeiter->GetPoint((i+holepointindex)%holeiter->GetNumPoints());
- i2++;
- }
- for(i=polypointindex;i<polyiter->GetNumPoints();i++) {
- newpoly[i2] = polyiter->GetPoint(i);
- i2++;
- }
-
- polys.erase(holeiter);
- polys.erase(polyiter);
- polys.push_back(newpoly);
- }
-
- for(iter = polys.begin(); iter!=polys.end(); ++iter) {
- outpolys->push_back(*iter);
- }
-
- return 1;
-}
-
-bool TPPLPartition::IsConvex(TPPLPoint& p1, TPPLPoint& p2, TPPLPoint& p3) {
- tppl_float tmp;
- tmp = (p3.y-p1.y)*(p2.x-p1.x)-(p3.x-p1.x)*(p2.y-p1.y);
- if(tmp>0) return 1;
- else return 0;
-}
-
-bool TPPLPartition::IsReflex(TPPLPoint& p1, TPPLPoint& p2, TPPLPoint& p3) {
- tppl_float tmp;
- tmp = (p3.y-p1.y)*(p2.x-p1.x)-(p3.x-p1.x)*(p2.y-p1.y);
- if(tmp<0) return 1;
- else return 0;
-}
-
-bool TPPLPartition::IsInside(TPPLPoint& p1, TPPLPoint& p2, TPPLPoint& p3, TPPLPoint &p) {
- if(IsConvex(p1,p,p2)) return false;
- if(IsConvex(p2,p,p3)) return false;
- if(IsConvex(p3,p,p1)) return false;
- return true;
-}
-
-bool TPPLPartition::InCone(TPPLPoint &p1, TPPLPoint &p2, TPPLPoint &p3, TPPLPoint &p) {
- bool convex;
-
- convex = IsConvex(p1,p2,p3);
-
- if(convex) {
- if(!IsConvex(p1,p2,p)) return false;
- if(!IsConvex(p2,p3,p)) return false;
- return true;
- } else {
- if(IsConvex(p1,p2,p)) return true;
- if(IsConvex(p2,p3,p)) return true;
- return false;
- }
-}
-
-bool TPPLPartition::InCone(PartitionVertex *v, TPPLPoint &p) {
- TPPLPoint p1,p2,p3;
-
- p1 = v->previous->p;
- p2 = v->p;
- p3 = v->next->p;
-
- return InCone(p1,p2,p3,p);
-}
-
-void TPPLPartition::UpdateVertexReflexity(PartitionVertex *v) {
- PartitionVertex *v1,*v3;
- v1 = v->previous;
- v3 = v->next;
- v->isConvex = !IsReflex(v1->p,v->p,v3->p);
-}
-
-void TPPLPartition::UpdateVertex(PartitionVertex *v, PartitionVertex *vertices, long numvertices) {
- long i;
- PartitionVertex *v1,*v3;
- TPPLPoint vec1,vec3;
-
- v1 = v->previous;
- v3 = v->next;
-
- v->isConvex = IsConvex(v1->p,v->p,v3->p);
-
- vec1 = Normalize(v1->p - v->p);
- vec3 = Normalize(v3->p - v->p);
- v->angle = vec1.x*vec3.x + vec1.y*vec3.y;
-
- if(v->isConvex) {
- v->isEar = true;
- for(i=0;i<numvertices;i++) {
- if((vertices[i].p.x==v->p.x)&&(vertices[i].p.y==v->p.y)) continue;
- if((vertices[i].p.x==v1->p.x)&&(vertices[i].p.y==v1->p.y)) continue;
- if((vertices[i].p.x==v3->p.x)&&(vertices[i].p.y==v3->p.y)) continue;
- if(IsInside(v1->p,v->p,v3->p,vertices[i].p)) {
- v->isEar = false;
- break;
- }
- }
- } else {
- v->isEar = false;
- }
-}
-
-//triangulation by ear removal
-int TPPLPartition::Triangulate_EC(TPPLPoly *poly, list<TPPLPoly> *triangles) {
- long numvertices;
- PartitionVertex *vertices;
- PartitionVertex *ear;
- TPPLPoly triangle;
- long i,j;
- bool earfound;
-
- if(poly->GetNumPoints() < 3) return 0;
- if(poly->GetNumPoints() == 3) {
- triangles->push_back(*poly);
- return 1;
- }
-
- numvertices = poly->GetNumPoints();
-
- vertices = new PartitionVertex[numvertices];
- for(i=0;i<numvertices;i++) {
- vertices[i].isActive = true;
- vertices[i].p = poly->GetPoint(i);
- if(i==(numvertices-1)) vertices[i].next=&(vertices[0]);
- else vertices[i].next=&(vertices[i+1]);
- if(i==0) vertices[i].previous = &(vertices[numvertices-1]);
- else vertices[i].previous = &(vertices[i-1]);
- }
- for(i=0;i<numvertices;i++) {
- UpdateVertex(&vertices[i],vertices,numvertices);
- }
-
- for(i=0;i<numvertices-3;i++) {
- earfound = false;
- //find the most extruded ear
- for(j=0;j<numvertices;j++) {
- if(!vertices[j].isActive) continue;
- if(!vertices[j].isEar) continue;
- if(!earfound) {
- earfound = true;
- ear = &(vertices[j]);
- } else {
- if(vertices[j].angle > ear->angle) {
- ear = &(vertices[j]);
- }
- }
- }
- if(!earfound) {
- delete [] vertices;
- return 0;
- }
-
- triangle.Triangle(ear->previous->p,ear->p,ear->next->p);
- triangles->push_back(triangle);
-
- ear->isActive = false;
- ear->previous->next = ear->next;
- ear->next->previous = ear->previous;
-
- if(i==numvertices-4) break;
-
- UpdateVertex(ear->previous,vertices,numvertices);
- UpdateVertex(ear->next,vertices,numvertices);
- }
- for(i=0;i<numvertices;i++) {
- if(vertices[i].isActive) {
- triangle.Triangle(vertices[i].previous->p,vertices[i].p,vertices[i].next->p);
- triangles->push_back(triangle);
- break;
- }
- }
-
- delete [] vertices;
-
- return 1;
-}
-
-int TPPLPartition::Triangulate_EC(list<TPPLPoly> *inpolys, list<TPPLPoly> *triangles) {
- list<TPPLPoly> outpolys;
- list<TPPLPoly>::iterator iter;
-
- if(!RemoveHoles(inpolys,&outpolys)) return 0;
- for(iter=outpolys.begin();iter!=outpolys.end();++iter) {
- if(!Triangulate_EC(&(*iter),triangles)) return 0;
- }
- return 1;
-}
-
-int TPPLPartition::ConvexPartition_HM(TPPLPoly *poly, list<TPPLPoly> *parts) {
- list<TPPLPoly> triangles;
- list<TPPLPoly>::iterator iter1,iter2;
- TPPLPoly *poly1,*poly2;
- TPPLPoly newpoly;
- TPPLPoint d1,d2,p1,p2,p3;
- long i11,i12,i21,i22,i13,i23,j,k;
- bool isdiagonal;
- long numreflex;
-
- //check if the poly is already convex
- numreflex = 0;
- for(i11=0;i11<poly->GetNumPoints();i11++) {
- if(i11==0) i12 = poly->GetNumPoints()-1;
- else i12=i11-1;
- if(i11==(poly->GetNumPoints()-1)) i13=0;
- else i13=i11+1;
- if(IsReflex(poly->GetPoint(i12),poly->GetPoint(i11),poly->GetPoint(i13))) {
- numreflex = 1;
- break;
- }
- }
- if(numreflex == 0) {
- parts->push_back(*poly);
- return 1;
- }
-
- if(!Triangulate_EC(poly,&triangles)) return 0;
-
- for(iter1 = triangles.begin(); iter1 != triangles.end(); ++iter1) {
- poly1 = &(*iter1);
- for(i11=0;i11<poly1->GetNumPoints();i11++) {
- d1 = poly1->GetPoint(i11);
- i12 = (i11+1)%(poly1->GetNumPoints());
- d2 = poly1->GetPoint(i12);
-
- isdiagonal = false;
- for(iter2 = iter1; iter2 != triangles.end(); ++iter2) {
- if(iter1 == iter2) continue;
- poly2 = &(*iter2);
-
- for(i21=0;i21<poly2->GetNumPoints();i21++) {
- if((d2.x != poly2->GetPoint(i21).x)||(d2.y != poly2->GetPoint(i21).y)) continue;
- i22 = (i21+1)%(poly2->GetNumPoints());
- if((d1.x != poly2->GetPoint(i22).x)||(d1.y != poly2->GetPoint(i22).y)) continue;
- isdiagonal = true;
- break;
- }
- if(isdiagonal) break;
- }
-
- if(!isdiagonal) continue;
-
- p2 = poly1->GetPoint(i11);
- if(i11 == 0) i13 = poly1->GetNumPoints()-1;
- else i13 = i11-1;
- p1 = poly1->GetPoint(i13);
- if(i22 == (poly2->GetNumPoints()-1)) i23 = 0;
- else i23 = i22+1;
- p3 = poly2->GetPoint(i23);
-
- if(!IsConvex(p1,p2,p3)) continue;
-
- p2 = poly1->GetPoint(i12);
- if(i12 == (poly1->GetNumPoints()-1)) i13 = 0;
- else i13 = i12+1;
- p3 = poly1->GetPoint(i13);
- if(i21 == 0) i23 = poly2->GetNumPoints()-1;
- else i23 = i21-1;
- p1 = poly2->GetPoint(i23);
-
- if(!IsConvex(p1,p2,p3)) continue;
-
- newpoly.Init(poly1->GetNumPoints()+poly2->GetNumPoints()-2);
- k = 0;
- for(j=i12;j!=i11;j=(j+1)%(poly1->GetNumPoints())) {
- newpoly[k] = poly1->GetPoint(j);
- k++;
- }
- for(j=i22;j!=i21;j=(j+1)%(poly2->GetNumPoints())) {
- newpoly[k] = poly2->GetPoint(j);
- k++;
- }
-
- triangles.erase(iter2);
- *iter1 = newpoly;
- poly1 = &(*iter1);
- i11 = -1;
-
- continue;
- }
- }
-
- for(iter1 = triangles.begin(); iter1 != triangles.end(); ++iter1) {
- parts->push_back(*iter1);
- }
-
- return 1;
-}
-
-int TPPLPartition::ConvexPartition_HM(list<TPPLPoly> *inpolys, list<TPPLPoly> *parts) {
- list<TPPLPoly> outpolys;
- list<TPPLPoly>::iterator iter;
-
- if(!RemoveHoles(inpolys,&outpolys)) return 0;
- for(iter=outpolys.begin();iter!=outpolys.end();++iter) {
- if(!ConvexPartition_HM(&(*iter),parts)) return 0;
- }
- return 1;
-}
-
-//minimum-weight polygon triangulation by dynamic programming
-//O(n^3) time complexity
-//O(n^2) space complexity
-int TPPLPartition::Triangulate_OPT(TPPLPoly *poly, list<TPPLPoly> *triangles) {
- long i,j,k,gap,n;
- DPState **dpstates;
- TPPLPoint p1,p2,p3,p4;
- long bestvertex;
- tppl_float weight,minweight,d1,d2;
- Diagonal diagonal,newdiagonal;
- list<Diagonal> diagonals;
- TPPLPoly triangle;
- int ret = 1;
-
- n = poly->GetNumPoints();
- dpstates = new DPState *[n];
- for(i=1;i<n;i++) {
- dpstates[i] = new DPState[i];
- }
-
- //init states and visibility
- for(i=0;i<(n-1);i++) {
- p1 = poly->GetPoint(i);
- for(j=i+1;j<n;j++) {
- dpstates[j][i].visible = true;
- dpstates[j][i].weight = 0;
- dpstates[j][i].bestvertex = -1;
- if(j!=(i+1)) {
- p2 = poly->GetPoint(j);
-
- //visibility check
- if(i==0) p3 = poly->GetPoint(n-1);
- else p3 = poly->GetPoint(i-1);
- if(i==(n-1)) p4 = poly->GetPoint(0);
- else p4 = poly->GetPoint(i+1);
- if(!InCone(p3,p1,p4,p2)) {
- dpstates[j][i].visible = false;
- continue;
- }
-
- if(j==0) p3 = poly->GetPoint(n-1);
- else p3 = poly->GetPoint(j-1);
- if(j==(n-1)) p4 = poly->GetPoint(0);
- else p4 = poly->GetPoint(j+1);
- if(!InCone(p3,p2,p4,p1)) {
- dpstates[j][i].visible = false;
- continue;
- }
-
- for(k=0;k<n;k++) {
- p3 = poly->GetPoint(k);
- if(k==(n-1)) p4 = poly->GetPoint(0);
- else p4 = poly->GetPoint(k+1);
- if(Intersects(p1,p2,p3,p4)) {
- dpstates[j][i].visible = false;
- break;
- }
- }
- }
- }
- }
- dpstates[n-1][0].visible = true;
- dpstates[n-1][0].weight = 0;
- dpstates[n-1][0].bestvertex = -1;
-
- for(gap = 2; gap<n; gap++) {
- for(i=0; i<(n-gap); i++) {
- j = i+gap;
- if(!dpstates[j][i].visible) continue;
- bestvertex = -1;
- for(k=(i+1);k<j;k++) {
- if(!dpstates[k][i].visible) continue;
- if(!dpstates[j][k].visible) continue;
-
- if(k<=(i+1)) d1=0;
- else d1 = Distance(poly->GetPoint(i),poly->GetPoint(k));
- if(j<=(k+1)) d2=0;
- else d2 = Distance(poly->GetPoint(k),poly->GetPoint(j));
-
- weight = dpstates[k][i].weight + dpstates[j][k].weight + d1 + d2;
-
- if((bestvertex == -1)||(weight<minweight)) {
- bestvertex = k;
- minweight = weight;
- }
- }
- if(bestvertex == -1) {
- for(i=1;i<n;i++) {
- delete [] dpstates[i];
- }
- delete [] dpstates;
-
- return 0;
- }
-
- dpstates[j][i].bestvertex = bestvertex;
- dpstates[j][i].weight = minweight;
- }
- }
-
- newdiagonal.index1 = 0;
- newdiagonal.index2 = n-1;
- diagonals.push_back(newdiagonal);
- while(!diagonals.empty()) {
- diagonal = *(diagonals.begin());
- diagonals.pop_front();
- bestvertex = dpstates[diagonal.index2][diagonal.index1].bestvertex;
- if(bestvertex == -1) {
- ret = 0;
- break;
- }
- triangle.Triangle(poly->GetPoint(diagonal.index1),poly->GetPoint(bestvertex),poly->GetPoint(diagonal.index2));
- triangles->push_back(triangle);
- if(bestvertex > (diagonal.index1+1)) {
- newdiagonal.index1 = diagonal.index1;
- newdiagonal.index2 = bestvertex;
- diagonals.push_back(newdiagonal);
- }
- if(diagonal.index2 > (bestvertex+1)) {
- newdiagonal.index1 = bestvertex;
- newdiagonal.index2 = diagonal.index2;
- diagonals.push_back(newdiagonal);
- }
- }
-
- for(i=1;i<n;i++) {
- delete [] dpstates[i];
- }
- delete [] dpstates;
-
- return ret;
-}
-
-void TPPLPartition::UpdateState(long a, long b, long w, long i, long j, DPState2 **dpstates) {
- Diagonal newdiagonal;
- list<Diagonal> *pairs;
- long w2;
-
- w2 = dpstates[a][b].weight;
- if(w>w2) return;
-
- pairs = &(dpstates[a][b].pairs);
- newdiagonal.index1 = i;
- newdiagonal.index2 = j;
-
- if(w<w2) {
- pairs->clear();
- pairs->push_front(newdiagonal);
- dpstates[a][b].weight = w;
- } else {
- if((!pairs->empty())&&(i <= pairs->begin()->index1)) return;
- while((!pairs->empty())&&(pairs->begin()->index2 >= j)) pairs->pop_front();
- pairs->push_front(newdiagonal);
- }
-}
-
-void TPPLPartition::TypeA(long i, long j, long k, PartitionVertex *vertices, DPState2 **dpstates) {
- list<Diagonal> *pairs;
- list<Diagonal>::iterator iter,lastiter;
- long top;
- long w;
-
- if(!dpstates[i][j].visible) return;
- top = j;
- w = dpstates[i][j].weight;
- if(k-j > 1) {
- if (!dpstates[j][k].visible) return;
- w += dpstates[j][k].weight + 1;
- }
- if(j-i > 1) {
- pairs = &(dpstates[i][j].pairs);
- iter = pairs->end();
- lastiter = pairs->end();
- while(iter!=pairs->begin()) {
- --iter;
- if(!IsReflex(vertices[iter->index2].p,vertices[j].p,vertices[k].p)) lastiter = iter;
- else break;
- }
- if(lastiter == pairs->end()) w++;
- else {
- if(IsReflex(vertices[k].p,vertices[i].p,vertices[lastiter->index1].p)) w++;
- else top = lastiter->index1;
- }
- }
- UpdateState(i,k,w,top,j,dpstates);
-}
-
-void TPPLPartition::TypeB(long i, long j, long k, PartitionVertex *vertices, DPState2 **dpstates) {
- list<Diagonal> *pairs;
- list<Diagonal>::iterator iter,lastiter;
- long top;
- long w;
-
- if(!dpstates[j][k].visible) return;
- top = j;
- w = dpstates[j][k].weight;
-
- if (j-i > 1) {
- if (!dpstates[i][j].visible) return;
- w += dpstates[i][j].weight + 1;
- }
- if (k-j > 1) {
- pairs = &(dpstates[j][k].pairs);
-
- iter = pairs->begin();
- if((!pairs->empty())&&(!IsReflex(vertices[i].p,vertices[j].p,vertices[iter->index1].p))) {
- lastiter = iter;
- while(iter!=pairs->end()) {
- if(!IsReflex(vertices[i].p,vertices[j].p,vertices[iter->index1].p)) {
- lastiter = iter;
- ++iter;
- }
- else break;
- }
- if(IsReflex(vertices[lastiter->index2].p,vertices[k].p,vertices[i].p)) w++;
- else top = lastiter->index2;
- } else w++;
- }
- UpdateState(i,k,w,j,top,dpstates);
-}
-
-int TPPLPartition::ConvexPartition_OPT(TPPLPoly *poly, list<TPPLPoly> *parts) {
- TPPLPoint p1,p2,p3,p4;
- PartitionVertex *vertices;
- DPState2 **dpstates;
- long i,j,k,n,gap;
- list<Diagonal> diagonals,diagonals2;
- Diagonal diagonal,newdiagonal;
- list<Diagonal> *pairs,*pairs2;
- list<Diagonal>::iterator iter,iter2;
- int ret;
- TPPLPoly newpoly;
- list<long> indices;
- list<long>::iterator iiter;
- bool ijreal,jkreal;
-
- n = poly->GetNumPoints();
- vertices = new PartitionVertex[n];
-
- dpstates = new DPState2 *[n];
- for(i=0;i<n;i++) {
- dpstates[i] = new DPState2[n];
- }
-
- //init vertex information
- for(i=0;i<n;i++) {
- vertices[i].p = poly->GetPoint(i);
- vertices[i].isActive = true;
- if(i==0) vertices[i].previous = &(vertices[n-1]);
- else vertices[i].previous = &(vertices[i-1]);
- if(i==(poly->GetNumPoints()-1)) vertices[i].next = &(vertices[0]);
- else vertices[i].next = &(vertices[i+1]);
- }
- for(i=1;i<n;i++) {
- UpdateVertexReflexity(&(vertices[i]));
- }
-
- //init states and visibility
- for(i=0;i<(n-1);i++) {
- p1 = poly->GetPoint(i);
- for(j=i+1;j<n;j++) {
- dpstates[i][j].visible = true;
- if(j==i+1) {
- dpstates[i][j].weight = 0;
- } else {
- dpstates[i][j].weight = 2147483647;
- }
- if(j!=(i+1)) {
- p2 = poly->GetPoint(j);
-
- //visibility check
- if(!InCone(&vertices[i],p2)) {
- dpstates[i][j].visible = false;
- continue;
- }
- if(!InCone(&vertices[j],p1)) {
- dpstates[i][j].visible = false;
- continue;
- }
-
- for(k=0;k<n;k++) {
- p3 = poly->GetPoint(k);
- if(k==(n-1)) p4 = poly->GetPoint(0);
- else p4 = poly->GetPoint(k+1);
- if(Intersects(p1,p2,p3,p4)) {
- dpstates[i][j].visible = false;
- break;
- }
- }
- }
- }
- }
- for(i=0;i<(n-2);i++) {
- j = i+2;
- if(dpstates[i][j].visible) {
- dpstates[i][j].weight = 0;
- newdiagonal.index1 = i+1;
- newdiagonal.index2 = i+1;
- dpstates[i][j].pairs.push_back(newdiagonal);
- }
- }
-
- dpstates[0][n-1].visible = true;
- vertices[0].isConvex = false; //by convention
-
- for(gap=3; gap<n; gap++) {
- for(i=0;i<n-gap;i++) {
- if(vertices[i].isConvex) continue;
- k = i+gap;
- if(dpstates[i][k].visible) {
- if(!vertices[k].isConvex) {
- for(j=i+1;j<k;j++) TypeA(i,j,k,vertices,dpstates);
- } else {
- for(j=i+1;j<(k-1);j++) {
- if(vertices[j].isConvex) continue;
- TypeA(i,j,k,vertices,dpstates);
- }
- TypeA(i,k-1,k,vertices,dpstates);
- }
- }
- }
- for(k=gap;k<n;k++) {
- if(vertices[k].isConvex) continue;
- i = k-gap;
- if((vertices[i].isConvex)&&(dpstates[i][k].visible)) {
- TypeB(i,i+1,k,vertices,dpstates);
- for(j=i+2;j<k;j++) {
- if(vertices[j].isConvex) continue;
- TypeB(i,j,k,vertices,dpstates);
- }
- }
- }
- }
-
-
- //recover solution
- ret = 1;
- newdiagonal.index1 = 0;
- newdiagonal.index2 = n-1;
- diagonals.push_front(newdiagonal);
- while(!diagonals.empty()) {
- diagonal = *(diagonals.begin());
- diagonals.pop_front();
- if((diagonal.index2 - diagonal.index1) <=1) continue;
- pairs = &(dpstates[diagonal.index1][diagonal.index2].pairs);
- if(pairs->empty()) {
- ret = 0;
- break;
- }
- if(!vertices[diagonal.index1].isConvex) {
- iter = pairs->end();
- --iter;
- j = iter->index2;
- newdiagonal.index1 = j;
- newdiagonal.index2 = diagonal.index2;
- diagonals.push_front(newdiagonal);
- if((j - diagonal.index1)>1) {
- if(iter->index1 != iter->index2) {
- pairs2 = &(dpstates[diagonal.index1][j].pairs);
- while(1) {
- if(pairs2->empty()) {
- ret = 0;
- break;
- }
- iter2 = pairs2->end();
- --iter2;
- if(iter->index1 != iter2->index1) pairs2->pop_back();
- else break;
- }
- if(ret == 0) break;
- }
- newdiagonal.index1 = diagonal.index1;
- newdiagonal.index2 = j;
- diagonals.push_front(newdiagonal);
- }
- } else {
- iter = pairs->begin();
- j = iter->index1;
- newdiagonal.index1 = diagonal.index1;
- newdiagonal.index2 = j;
- diagonals.push_front(newdiagonal);
- if((diagonal.index2 - j) > 1) {
- if(iter->index1 != iter->index2) {
- pairs2 = &(dpstates[j][diagonal.index2].pairs);
- while(1) {
- if(pairs2->empty()) {
- ret = 0;
- break;
- }
- iter2 = pairs2->begin();
- if(iter->index2 != iter2->index2) pairs2->pop_front();
- else break;
- }
- if(ret == 0) break;
- }
- newdiagonal.index1 = j;
- newdiagonal.index2 = diagonal.index2;
- diagonals.push_front(newdiagonal);
- }
- }
- }
-
- if(ret == 0) {
- for(i=0;i<n;i++) {
- delete [] dpstates[i];
- }
- delete [] dpstates;
- delete [] vertices;
-
- return ret;
- }
-
- newdiagonal.index1 = 0;
- newdiagonal.index2 = n-1;
- diagonals.push_front(newdiagonal);
- while(!diagonals.empty()) {
- diagonal = *(diagonals.begin());
- diagonals.pop_front();
- if((diagonal.index2 - diagonal.index1) <= 1) continue;
-
- indices.clear();
- diagonals2.clear();
- indices.push_back(diagonal.index1);
- indices.push_back(diagonal.index2);
- diagonals2.push_front(diagonal);
-
- while(!diagonals2.empty()) {
- diagonal = *(diagonals2.begin());
- diagonals2.pop_front();
- if((diagonal.index2 - diagonal.index1) <= 1) continue;
- ijreal = true;
- jkreal = true;
- pairs = &(dpstates[diagonal.index1][diagonal.index2].pairs);
- if(!vertices[diagonal.index1].isConvex) {
- iter = pairs->end();
- --iter;
- j = iter->index2;
- if(iter->index1 != iter->index2) ijreal = false;
- } else {
- iter = pairs->begin();
- j = iter->index1;
- if(iter->index1 != iter->index2) jkreal = false;
- }
-
- newdiagonal.index1 = diagonal.index1;
- newdiagonal.index2 = j;
- if(ijreal) {
- diagonals.push_back(newdiagonal);
- } else {
- diagonals2.push_back(newdiagonal);
- }
-
- newdiagonal.index1 = j;
- newdiagonal.index2 = diagonal.index2;
- if(jkreal) {
- diagonals.push_back(newdiagonal);
- } else {
- diagonals2.push_back(newdiagonal);
- }
-
- indices.push_back(j);
- }
-
- indices.sort();
- newpoly.Init((long)indices.size());
- k=0;
- for(iiter = indices.begin();iiter!=indices.end(); ++iiter) {
- newpoly[k] = vertices[*iiter].p;
- k++;
- }
- parts->push_back(newpoly);
- }
-
- for(i=0;i<n;i++) {
- delete [] dpstates[i];
- }
- delete [] dpstates;
- delete [] vertices;
-
- return ret;
-}
-
-//triangulates a set of polygons by first partitioning them into monotone polygons
-//O(n*log(n)) time complexity, O(n) space complexity
-//the algorithm used here is outlined in the book
-//"Computational Geometry: Algorithms and Applications"
-//by Mark de Berg, Otfried Cheong, Marc van Kreveld and Mark Overmars
-int TPPLPartition::MonotonePartition(list<TPPLPoly> *inpolys, list<TPPLPoly> *monotonePolys) {
- list<TPPLPoly>::iterator iter;
- MonotoneVertex *vertices;
- long i,numvertices,vindex,vindex2,newnumvertices,maxnumvertices;
- long polystartindex, polyendindex;
- TPPLPoly *poly;
- MonotoneVertex *v,*v2,*vprev,*vnext;
- ScanLineEdge newedge;
- bool error = false;
-
- numvertices = 0;
- for(iter = inpolys->begin(); iter != inpolys->end(); ++iter) {
- numvertices += iter->GetNumPoints();
- }
-
- maxnumvertices = numvertices*3;
- vertices = new MonotoneVertex[maxnumvertices];
- newnumvertices = numvertices;
-
- polystartindex = 0;
- for(iter = inpolys->begin(); iter != inpolys->end(); ++iter) {
- poly = &(*iter);
- polyendindex = polystartindex + poly->GetNumPoints()-1;
- for(i=0;i<poly->GetNumPoints();i++) {
- vertices[i+polystartindex].p = poly->GetPoint(i);
- if(i==0) vertices[i+polystartindex].previous = polyendindex;
- else vertices[i+polystartindex].previous = i+polystartindex-1;
- if(i==(poly->GetNumPoints()-1)) vertices[i+polystartindex].next = polystartindex;
- else vertices[i+polystartindex].next = i+polystartindex+1;
- }
- polystartindex = polyendindex+1;
- }
-
- //construct the priority queue
- long *priority = new long [numvertices];
- for(i=0;i<numvertices;i++) priority[i] = i;
- std::sort(priority,&(priority[numvertices]),VertexSorter(vertices));
-
- //determine vertex types
- char *vertextypes = new char[maxnumvertices];
- for(i=0;i<numvertices;i++) {
- v = &(vertices[i]);
- vprev = &(vertices[v->previous]);
- vnext = &(vertices[v->next]);
-
- if(Below(vprev->p,v->p)&&Below(vnext->p,v->p)) {
- if(IsConvex(vnext->p,vprev->p,v->p)) {
- vertextypes[i] = TPPL_VERTEXTYPE_START;
- } else {
- vertextypes[i] = TPPL_VERTEXTYPE_SPLIT;
- }
- } else if(Below(v->p,vprev->p)&&Below(v->p,vnext->p)) {
- if(IsConvex(vnext->p,vprev->p,v->p))
- {
- vertextypes[i] = TPPL_VERTEXTYPE_END;
- } else {
- vertextypes[i] = TPPL_VERTEXTYPE_MERGE;
- }
- } else {
- vertextypes[i] = TPPL_VERTEXTYPE_REGULAR;
- }
- }
-
- //helpers
- long *helpers = new long[maxnumvertices];
-
- //binary search tree that holds edges intersecting the scanline
- //note that while set doesn't actually have to be implemented as a tree
- //complexity requirements for operations are the same as for the balanced binary search tree
- set<ScanLineEdge> edgeTree;
- //store iterators to the edge tree elements
- //this makes deleting existing edges much faster
- set<ScanLineEdge>::iterator *edgeTreeIterators,edgeIter;
- edgeTreeIterators = new set<ScanLineEdge>::iterator[maxnumvertices];
- pair<set<ScanLineEdge>::iterator,bool> edgeTreeRet;
-
- //for each vertex
- for(i=0;i<numvertices;i++) {
- vindex = priority[i];
- v = &(vertices[vindex]);
- vindex2 = vindex;
- v2 = v;
-
- //depending on the vertex type, do the appropriate action
- //comments in the following sections are copied from "Computational Geometry: Algorithms and Applications"
- switch(vertextypes[vindex]) {
- case TPPL_VERTEXTYPE_START:
- //Insert ei in T and set helper(ei) to vi.
- newedge.p1 = v->p;
- newedge.p2 = vertices[v->next].p;
- newedge.index = vindex;
- edgeTreeRet = edgeTree.insert(newedge);
- edgeTreeIterators[vindex] = edgeTreeRet.first;
- helpers[vindex] = vindex;
- break;
-
- case TPPL_VERTEXTYPE_END:
- //if helper(ei-1) is a merge vertex
- if(vertextypes[helpers[v->previous]]==TPPL_VERTEXTYPE_MERGE) {
- //Insert the diagonal connecting vi to helper(ei-1) in D.
- AddDiagonal(vertices,&newnumvertices,vindex,helpers[v->previous]);
- vertextypes[newnumvertices-2] = vertextypes[vindex];
- edgeTreeIterators[newnumvertices-2] = edgeTreeIterators[vindex];
- helpers[newnumvertices-2] = helpers[vindex];
- vertextypes[newnumvertices-1] = vertextypes[helpers[v->previous]];
- edgeTreeIterators[newnumvertices-1] = edgeTreeIterators[helpers[v->previous]];
- helpers[newnumvertices-1] = helpers[helpers[v->previous]];
- }
- //Delete ei-1 from T
- edgeTree.erase(edgeTreeIterators[v->previous]);
- break;
-
- case TPPL_VERTEXTYPE_SPLIT:
- //Search in T to find the edge e j directly left of vi.
- newedge.p1 = v->p;
- newedge.p2 = v->p;
- edgeIter = edgeTree.lower_bound(newedge);
- if(edgeIter == edgeTree.begin()) {
- error = true;
- break;
- }
- --edgeIter;
- //Insert the diagonal connecting vi to helper(ej) in D.
- AddDiagonal(vertices,&newnumvertices,vindex,helpers[edgeIter->index]);
- vertextypes[newnumvertices-2] = vertextypes[vindex];
- edgeTreeIterators[newnumvertices-2] = edgeTreeIterators[vindex];
- helpers[newnumvertices-2] = helpers[vindex];
- vertextypes[newnumvertices-1] = vertextypes[helpers[edgeIter->index]];
- edgeTreeIterators[newnumvertices-1] = edgeTreeIterators[helpers[edgeIter->index]];
- helpers[newnumvertices-1] = helpers[helpers[edgeIter->index]];
- vindex2 = newnumvertices-2;
- v2 = &(vertices[vindex2]);
- //helper(e j)�vi
- helpers[edgeIter->index] = vindex;
- //Insert ei in T and set helper(ei) to vi.
- newedge.p1 = v2->p;
- newedge.p2 = vertices[v2->next].p;
- newedge.index = vindex2;
- edgeTreeRet = edgeTree.insert(newedge);
- edgeTreeIterators[vindex2] = edgeTreeRet.first;
- helpers[vindex2] = vindex2;
- break;
-
- case TPPL_VERTEXTYPE_MERGE:
- //if helper(ei-1) is a merge vertex
- if(vertextypes[helpers[v->previous]]==TPPL_VERTEXTYPE_MERGE) {
- //Insert the diagonal connecting vi to helper(ei-1) in D.
- AddDiagonal(vertices,&newnumvertices,vindex,helpers[v->previous]);
- vertextypes[newnumvertices-2] = vertextypes[vindex];
- edgeTreeIterators[newnumvertices-2] = edgeTreeIterators[vindex];
- helpers[newnumvertices-2] = helpers[vindex];
- vertextypes[newnumvertices-1] = vertextypes[helpers[v->previous]];
- edgeTreeIterators[newnumvertices-1] = edgeTreeIterators[helpers[v->previous]];
- helpers[newnumvertices-1] = helpers[helpers[v->previous]];
- vindex2 = newnumvertices-2;
- v2 = &(vertices[vindex2]);
- }
- //Delete ei-1 from T.
- edgeTree.erase(edgeTreeIterators[v->previous]);
- //Search in T to find the edge e j directly left of vi.
- newedge.p1 = v->p;
- newedge.p2 = v->p;
- edgeIter = edgeTree.lower_bound(newedge);
- if(edgeIter == edgeTree.begin()) {
- error = true;
- break;
- }
- --edgeIter;
- //if helper(ej) is a merge vertex
- if(vertextypes[helpers[edgeIter->index]]==TPPL_VERTEXTYPE_MERGE) {
- //Insert the diagonal connecting vi to helper(e j) in D.
- AddDiagonal(vertices,&newnumvertices,vindex2,helpers[edgeIter->index]);
- vertextypes[newnumvertices-2] = vertextypes[vindex2];
- edgeTreeIterators[newnumvertices-2] = edgeTreeIterators[vindex2];
- helpers[newnumvertices-2] = helpers[vindex2];
- vertextypes[newnumvertices-1] = vertextypes[helpers[edgeIter->index]];
- edgeTreeIterators[newnumvertices-1] = edgeTreeIterators[helpers[edgeIter->index]];
- helpers[newnumvertices-1] = helpers[helpers[edgeIter->index]];
- }
- //helper(e j)�vi
- helpers[edgeIter->index] = vindex2;
- break;
-
- case TPPL_VERTEXTYPE_REGULAR:
- //if the interior of P lies to the right of vi
- if(Below(v->p,vertices[v->previous].p)) {
- //if helper(ei-1) is a merge vertex
- if(vertextypes[helpers[v->previous]]==TPPL_VERTEXTYPE_MERGE) {
- //Insert the diagonal connecting vi to helper(ei-1) in D.
- AddDiagonal(vertices,&newnumvertices,vindex,helpers[v->previous]);
- vertextypes[newnumvertices-2] = vertextypes[vindex];
- edgeTreeIterators[newnumvertices-2] = edgeTreeIterators[vindex];
- helpers[newnumvertices-2] = helpers[vindex];
- vertextypes[newnumvertices-1] = vertextypes[helpers[v->previous]];
- edgeTreeIterators[newnumvertices-1] = edgeTreeIterators[helpers[v->previous]];
- helpers[newnumvertices-1] = helpers[helpers[v->previous]];
- vindex2 = newnumvertices-2;
- v2 = &(vertices[vindex2]);
- }
- //Delete ei-1 from T.
- edgeTree.erase(edgeTreeIterators[v->previous]);
- //Insert ei in T and set helper(ei) to vi.
- newedge.p1 = v2->p;
- newedge.p2 = vertices[v2->next].p;
- newedge.index = vindex2;
- edgeTreeRet = edgeTree.insert(newedge);
- edgeTreeIterators[vindex2] = edgeTreeRet.first;
- helpers[vindex2] = vindex;
- } else {
- //Search in T to find the edge ej directly left of vi.
- newedge.p1 = v->p;
- newedge.p2 = v->p;
- edgeIter = edgeTree.lower_bound(newedge);
- if(edgeIter == edgeTree.begin()) {
- error = true;
- break;
- }
- --edgeIter;
- //if helper(ej) is a merge vertex
- if(vertextypes[helpers[edgeIter->index]]==TPPL_VERTEXTYPE_MERGE) {
- //Insert the diagonal connecting vi to helper(e j) in D.
- AddDiagonal(vertices,&newnumvertices,vindex,helpers[edgeIter->index]);
- vertextypes[newnumvertices-2] = vertextypes[vindex];
- edgeTreeIterators[newnumvertices-2] = edgeTreeIterators[vindex];
- helpers[newnumvertices-2] = helpers[vindex];
- vertextypes[newnumvertices-1] = vertextypes[helpers[edgeIter->index]];
- edgeTreeIterators[newnumvertices-1] = edgeTreeIterators[helpers[edgeIter->index]];
- helpers[newnumvertices-1] = helpers[helpers[edgeIter->index]];
- }
- //helper(e j)�vi
- helpers[edgeIter->index] = vindex;
- }
- break;
- }
-
- if(error) break;
- }
-
- char *used = new char[newnumvertices];
- memset(used,0,newnumvertices*sizeof(char));
-
- if(!error) {
- //return result
- long size;
- TPPLPoly mpoly;
- for(i=0;i<newnumvertices;i++) {
- if(used[i]) continue;
- v = &(vertices[i]);
- vnext = &(vertices[v->next]);
- size = 1;
- while(vnext!=v) {
- vnext = &(vertices[vnext->next]);
- size++;
- }
- mpoly.Init(size);
- v = &(vertices[i]);
- mpoly[0] = v->p;
- vnext = &(vertices[v->next]);
- size = 1;
- used[i] = 1;
- used[v->next] = 1;
- while(vnext!=v) {
- mpoly[size] = vnext->p;
- used[vnext->next] = 1;
- vnext = &(vertices[vnext->next]);
- size++;
- }
- monotonePolys->push_back(mpoly);
- }
- }
-
- //cleanup
- delete [] vertices;
- delete [] priority;
- delete [] vertextypes;
- delete [] edgeTreeIterators;
- delete [] helpers;
- delete [] used;
-
- if(error) {
- return 0;
- } else {
- return 1;
- }
-}
-
-//adds a diagonal to the doubly-connected list of vertices
-void TPPLPartition::AddDiagonal(MonotoneVertex *vertices, long *numvertices, long index1, long index2) {
- long newindex1,newindex2;
-
- newindex1 = *numvertices;
- (*numvertices)++;
- newindex2 = *numvertices;
- (*numvertices)++;
-
- vertices[newindex1].p = vertices[index1].p;
- vertices[newindex2].p = vertices[index2].p;
-
- vertices[newindex2].next = vertices[index2].next;
- vertices[newindex1].next = vertices[index1].next;
-
- vertices[vertices[index2].next].previous = newindex2;
- vertices[vertices[index1].next].previous = newindex1;
-
- vertices[index1].next = newindex2;
- vertices[newindex2].previous = index1;
-
- vertices[index2].next = newindex1;
- vertices[newindex1].previous = index2;
-}
-
-bool TPPLPartition::Below(TPPLPoint &p1, TPPLPoint &p2) {
- if(p1.y < p2.y) return true;
- else if(p1.y == p2.y) {
- if(p1.x < p2.x) return true;
- }
- return false;
-}
-
-//sorts in the falling order of y values, if y is equal, x is used instead
-bool TPPLPartition::VertexSorter::operator() (long index1, long index2) const {
- if(vertices[index1].p.y > vertices[index2].p.y) return true;
- else if(vertices[index1].p.y == vertices[index2].p.y) {
- if(vertices[index1].p.x > vertices[index2].p.x) return true;
- }
- return false;
-}
-
-bool TPPLPartition::ScanLineEdge::IsConvex(const TPPLPoint& p1, const TPPLPoint& p2, const TPPLPoint& p3) const {
- tppl_float tmp;
- tmp = (p3.y-p1.y)*(p2.x-p1.x)-(p3.x-p1.x)*(p2.y-p1.y);
- if(tmp>0) return 1;
- else return 0;
-}
-
-bool TPPLPartition::ScanLineEdge::operator < (const ScanLineEdge & other) const {
- if(other.p1.y == other.p2.y) {
- if(p1.y == p2.y) {
- if(p1.y < other.p1.y) return true;
- else return false;
- }
- if(IsConvex(p1,p2,other.p1)) return true;
- else return false;
- } else if(p1.y == p2.y) {
- if(IsConvex(other.p1,other.p2,p1)) return false;
- else return true;
- } else if(p1.y < other.p1.y) {
- if(IsConvex(other.p1,other.p2,p1)) return false;
- else return true;
- } else {
- if(IsConvex(p1,p2,other.p1)) return true;
- else return false;
- }
-}
-
-//triangulates monotone polygon
-//O(n) time, O(n) space complexity
-int TPPLPartition::TriangulateMonotone(TPPLPoly *inPoly, list<TPPLPoly> *triangles) {
- long i,i2,j,topindex,bottomindex,leftindex,rightindex,vindex;
- TPPLPoint *points;
- long numpoints;
- TPPLPoly triangle;
-
- numpoints = inPoly->GetNumPoints();
- points = inPoly->GetPoints();
-
- //trivial calses
- if(numpoints < 3) return 0;
- if(numpoints == 3) {
- triangles->push_back(*inPoly);
- }
-
- topindex = 0; bottomindex=0;
- for(i=1;i<numpoints;i++) {
- if(Below(points[i],points[bottomindex])) bottomindex = i;
- if(Below(points[topindex],points[i])) topindex = i;
- }
-
- //check if the poly is really monotone
- i = topindex;
- while(i!=bottomindex) {
- i2 = i+1; if(i2>=numpoints) i2 = 0;
- if(!Below(points[i2],points[i])) return 0;
- i = i2;
- }
- i = bottomindex;
- while(i!=topindex) {
- i2 = i+1; if(i2>=numpoints) i2 = 0;
- if(!Below(points[i],points[i2])) return 0;
- i = i2;
- }
-
- char *vertextypes = new char[numpoints];
- long *priority = new long[numpoints];
-
- //merge left and right vertex chains
- priority[0] = topindex;
- vertextypes[topindex] = 0;
- leftindex = topindex+1; if(leftindex>=numpoints) leftindex = 0;
- rightindex = topindex-1; if(rightindex<0) rightindex = numpoints-1;
- for(i=1;i<(numpoints-1);i++) {
- if(leftindex==bottomindex) {
- priority[i] = rightindex;
- rightindex--; if(rightindex<0) rightindex = numpoints-1;
- vertextypes[priority[i]] = -1;
- } else if(rightindex==bottomindex) {
- priority[i] = leftindex;
- leftindex++; if(leftindex>=numpoints) leftindex = 0;
- vertextypes[priority[i]] = 1;
- } else {
- if(Below(points[leftindex],points[rightindex])) {
- priority[i] = rightindex;
- rightindex--; if(rightindex<0) rightindex = numpoints-1;
- vertextypes[priority[i]] = -1;
- } else {
- priority[i] = leftindex;
- leftindex++; if(leftindex>=numpoints) leftindex = 0;
- vertextypes[priority[i]] = 1;
- }
- }
- }
- priority[i] = bottomindex;
- vertextypes[bottomindex] = 0;
-
- long *stack = new long[numpoints];
- long stackptr = 0;
-
- stack[0] = priority[0];
- stack[1] = priority[1];
- stackptr = 2;
-
- //for each vertex from top to bottom trim as many triangles as possible
- for(i=2;i<(numpoints-1);i++) {
- vindex = priority[i];
- if(vertextypes[vindex]!=vertextypes[stack[stackptr-1]]) {
- for(j=0;j<(stackptr-1);j++) {
- if(vertextypes[vindex]==1) {
- triangle.Triangle(points[stack[j+1]],points[stack[j]],points[vindex]);
- } else {
- triangle.Triangle(points[stack[j]],points[stack[j+1]],points[vindex]);
- }
- triangles->push_back(triangle);
- }
- stack[0] = priority[i-1];
- stack[1] = priority[i];
- stackptr = 2;
- } else {
- stackptr--;
- while(stackptr>0) {
- if(vertextypes[vindex]==1) {
- if(IsConvex(points[vindex],points[stack[stackptr-1]],points[stack[stackptr]])) {
- triangle.Triangle(points[vindex],points[stack[stackptr-1]],points[stack[stackptr]]);
- triangles->push_back(triangle);
- stackptr--;
- } else {
- break;
- }
- } else {
- if(IsConvex(points[vindex],points[stack[stackptr]],points[stack[stackptr-1]])) {
- triangle.Triangle(points[vindex],points[stack[stackptr]],points[stack[stackptr-1]]);
- triangles->push_back(triangle);
- stackptr--;
- } else {
- break;
- }
- }
- }
- stackptr++;
- stack[stackptr] = vindex;
- stackptr++;
- }
- }
- vindex = priority[i];
- for(j=0;j<(stackptr-1);j++) {
- if(vertextypes[stack[j+1]]==1) {
- triangle.Triangle(points[stack[j]],points[stack[j+1]],points[vindex]);
- } else {
- triangle.Triangle(points[stack[j+1]],points[stack[j]],points[vindex]);
- }
- triangles->push_back(triangle);
- }
-
- delete [] priority;
- delete [] vertextypes;
- delete [] stack;
-
- return 1;
-}
-
-int TPPLPartition::Triangulate_MONO(list<TPPLPoly> *inpolys, list<TPPLPoly> *triangles) {
- list<TPPLPoly> monotone;
- list<TPPLPoly>::iterator iter;
-
- if(!MonotonePartition(inpolys,&monotone)) return 0;
- for(iter = monotone.begin(); iter!=monotone.end(); ++iter) {
- if(!TriangulateMonotone(&(*iter),triangles)) return 0;
- }
- return 1;
-}
-
-int TPPLPartition::Triangulate_MONO(TPPLPoly *poly, list<TPPLPoly> *triangles) {
- list<TPPLPoly> polys;
- polys.push_back(*poly);
-
- return Triangulate_MONO(&polys, triangles);
-}
+//Copyright (C) 2011 by Ivan Fratric
+//
+//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.
+
+
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+#include <list>
+#include <algorithm>
+#include <set>
+
+using namespace std;
+
+#include "polypartition.h"
+
+#define TPPL_VERTEXTYPE_REGULAR 0
+#define TPPL_VERTEXTYPE_START 1
+#define TPPL_VERTEXTYPE_END 2
+#define TPPL_VERTEXTYPE_SPLIT 3
+#define TPPL_VERTEXTYPE_MERGE 4
+
+TPPLPoly::TPPLPoly() {
+ hole = false;
+ numpoints = 0;
+ points = NULL;
+}
+
+TPPLPoly::~TPPLPoly() {
+ if(points) delete [] points;
+}
+
+void TPPLPoly::Clear() {
+ if(points) delete [] points;
+ hole = false;
+ numpoints = 0;
+ points = NULL;
+}
+
+void TPPLPoly::Init(long numpoints) {
+ Clear();
+ this->numpoints = numpoints;
+ points = new TPPLPoint[numpoints];
+}
+
+void TPPLPoly::Triangle(TPPLPoint &p1, TPPLPoint &p2, TPPLPoint &p3) {
+ Init(3);
+ points[0] = p1;
+ points[1] = p2;
+ points[2] = p3;
+}
+
+TPPLPoly::TPPLPoly(const TPPLPoly &src) {
+ hole = src.hole;
+ numpoints = src.numpoints;
+ points = new TPPLPoint[numpoints];
+ memcpy(points, src.points, numpoints*sizeof(TPPLPoint));
+}
+
+TPPLPoly& TPPLPoly::operator=(const TPPLPoly &src) {
+ if(&src != this) {
+ Clear();
+ hole = src.hole;
+ numpoints = src.numpoints;
+ points = new TPPLPoint[numpoints];
+ memcpy(points, src.points, numpoints*sizeof(TPPLPoint));
+ }
+ return *this;
+}
+
+int TPPLPoly::GetOrientation() const {
+ long i1,i2;
+ tppl_float area = 0;
+ for(i1=0; i1<numpoints; i1++) {
+ i2 = i1+1;
+ if(i2 == numpoints) i2 = 0;
+ area += points[i1].x * points[i2].y - points[i1].y * points[i2].x;
+ }
+ if(area>0) return TPPL_CCW;
+ if(area<0) return TPPL_CW;
+ return 0;
+}
+
+void TPPLPoly::SetOrientation(int orientation) {
+ int polyorientation = GetOrientation();
+ if(polyorientation&&(polyorientation!=orientation)) {
+ Invert();
+ }
+}
+
+void TPPLPoly::Invert() {
+ long i;
+ TPPLPoint *invpoints;
+
+ invpoints = new TPPLPoint[numpoints];
+ for(i=0;i<numpoints;i++) {
+ invpoints[i] = points[numpoints-i-1];
+ }
+
+ delete [] points;
+ points = invpoints;
+}
+
+TPPLPoint TPPLPartition::Normalize(const TPPLPoint &p) {
+ TPPLPoint r;
+ tppl_float n = sqrt(p.x*p.x + p.y*p.y);
+ if(n!=0) {
+ r = p/n;
+ } else {
+ r.x = 0;
+ r.y = 0;
+ }
+ return r;
+}
+
+tppl_float TPPLPartition::Distance(const TPPLPoint &p1, const TPPLPoint &p2) {
+ tppl_float dx,dy;
+ dx = p2.x - p1.x;
+ dy = p2.y - p1.y;
+ return(sqrt(dx*dx + dy*dy));
+}
+
+//checks if two lines intersect
+int TPPLPartition::Intersects(TPPLPoint &p11, TPPLPoint &p12, TPPLPoint &p21, TPPLPoint &p22) {
+ if((p11.x == p21.x)&&(p11.y == p21.y)) return 0;
+ if((p11.x == p22.x)&&(p11.y == p22.y)) return 0;
+ if((p12.x == p21.x)&&(p12.y == p21.y)) return 0;
+ if((p12.x == p22.x)&&(p12.y == p22.y)) return 0;
+
+ TPPLPoint v1ort,v2ort,v;
+ tppl_float dot11,dot12,dot21,dot22;
+
+ v1ort.x = p12.y-p11.y;
+ v1ort.y = p11.x-p12.x;
+
+ v2ort.x = p22.y-p21.y;
+ v2ort.y = p21.x-p22.x;
+
+ v = p21-p11;
+ dot21 = v.x*v1ort.x + v.y*v1ort.y;
+ v = p22-p11;
+ dot22 = v.x*v1ort.x + v.y*v1ort.y;
+
+ v = p11-p21;
+ dot11 = v.x*v2ort.x + v.y*v2ort.y;
+ v = p12-p21;
+ dot12 = v.x*v2ort.x + v.y*v2ort.y;
+
+ if(dot11*dot12>0) return 0;
+ if(dot21*dot22>0) return 0;
+
+ return 1;
+}
+
+//removes holes from inpolys by merging them with non-holes
+int TPPLPartition::RemoveHoles(list<TPPLPoly> *inpolys, list<TPPLPoly> *outpolys) {
+ list<TPPLPoly> polys;
+ list<TPPLPoly>::iterator holeiter,polyiter,iter,iter2;
+ long i,i2,holepointindex,polypointindex = 0;
+ TPPLPoint holepoint,polypoint,bestpolypoint;
+ TPPLPoint linep1,linep2;
+ TPPLPoint v1,v2;
+ TPPLPoly newpoly;
+ bool hasholes;
+ bool pointvisible;
+ bool pointfound;
+
+ //check for trivial case (no holes)
+ hasholes = false;
+ for(iter = inpolys->begin(); iter!=inpolys->end(); ++iter) {
+ if(iter->IsHole()) {
+ hasholes = true;
+ break;
+ }
+ }
+ if(!hasholes) {
+ for(iter = inpolys->begin(); iter!=inpolys->end(); ++iter) {
+ outpolys->push_back(*iter);
+ }
+ return 1;
+ }
+
+ polys = *inpolys;
+
+ while(1) {
+ //find the hole point with the largest x
+ hasholes = false;
+ for(iter = polys.begin(); iter!=polys.end(); ++iter) {
+ if(!iter->IsHole()) continue;
+
+ if(!hasholes) {
+ hasholes = true;
+ holeiter = iter;
+ holepointindex = 0;
+ }
+
+ for(i=0; i < iter->GetNumPoints(); i++) {
+ if(iter->GetPoint(i).x > holeiter->GetPoint(holepointindex).x) {
+ holeiter = iter;
+ holepointindex = i;
+ }
+ }
+ }
+ if(!hasholes) break;
+ holepoint = holeiter->GetPoint(holepointindex);
+
+ pointfound = false;
+ for(iter = polys.begin(); iter!=polys.end(); ++iter) {
+ if(iter->IsHole()) continue;
+ for(i=0; i < iter->GetNumPoints(); i++) {
+ if(iter->GetPoint(i).x <= holepoint.x) continue;
+ if(!InCone(iter->GetPoint((i+iter->GetNumPoints()-1)%(iter->GetNumPoints())),
+ iter->GetPoint(i),
+ iter->GetPoint((i+1)%(iter->GetNumPoints())),
+ holepoint))
+ continue;
+ polypoint = iter->GetPoint(i);
+ if(pointfound) {
+ v1 = Normalize(polypoint-holepoint);
+ v2 = Normalize(bestpolypoint-holepoint);
+ if(v2.x > v1.x) continue;
+ }
+ pointvisible = true;
+ for(iter2 = polys.begin(); iter2!=polys.end(); ++iter2) {
+ if(iter2->IsHole()) continue;
+ for(i2=0; i2 < iter2->GetNumPoints(); i2++) {
+ linep1 = iter2->GetPoint(i2);
+ linep2 = iter2->GetPoint((i2+1)%(iter2->GetNumPoints()));
+ if(Intersects(holepoint,polypoint,linep1,linep2)) {
+ pointvisible = false;
+ break;
+ }
+ }
+ if(!pointvisible) break;
+ }
+ if(pointvisible) {
+ pointfound = true;
+ bestpolypoint = polypoint;
+ polyiter = iter;
+ polypointindex = i;
+ }
+ }
+ }
+
+ if(!pointfound) return 0;
+
+ newpoly.Init(holeiter->GetNumPoints() + polyiter->GetNumPoints() + 2);
+ i2 = 0;
+ for(i=0;i<=polypointindex;i++) {
+ newpoly[i2] = polyiter->GetPoint(i);
+ i2++;
+ }
+ for(i=0;i<=holeiter->GetNumPoints();i++) {
+ newpoly[i2] = holeiter->GetPoint((i+holepointindex)%holeiter->GetNumPoints());
+ i2++;
+ }
+ for(i=polypointindex;i<polyiter->GetNumPoints();i++) {
+ newpoly[i2] = polyiter->GetPoint(i);
+ i2++;
+ }
+
+ polys.erase(holeiter);
+ polys.erase(polyiter);
+ polys.push_back(newpoly);
+ }
+
+ for(iter = polys.begin(); iter!=polys.end(); ++iter) {
+ outpolys->push_back(*iter);
+ }
+
+ return 1;
+}
+
+bool TPPLPartition::IsConvex(TPPLPoint& p1, TPPLPoint& p2, TPPLPoint& p3) {
+ tppl_float tmp;
+ tmp = (p3.y-p1.y)*(p2.x-p1.x)-(p3.x-p1.x)*(p2.y-p1.y);
+ if(tmp>0) return 1;
+ else return 0;
+}
+
+bool TPPLPartition::IsReflex(TPPLPoint& p1, TPPLPoint& p2, TPPLPoint& p3) {
+ tppl_float tmp;
+ tmp = (p3.y-p1.y)*(p2.x-p1.x)-(p3.x-p1.x)*(p2.y-p1.y);
+ if(tmp<0) return 1;
+ else return 0;
+}
+
+bool TPPLPartition::IsInside(TPPLPoint& p1, TPPLPoint& p2, TPPLPoint& p3, TPPLPoint &p) {
+ if(IsConvex(p1,p,p2)) return false;
+ if(IsConvex(p2,p,p3)) return false;
+ if(IsConvex(p3,p,p1)) return false;
+ return true;
+}
+
+bool TPPLPartition::InCone(TPPLPoint &p1, TPPLPoint &p2, TPPLPoint &p3, TPPLPoint &p) {
+ bool convex;
+
+ convex = IsConvex(p1,p2,p3);
+
+ if(convex) {
+ if(!IsConvex(p1,p2,p)) return false;
+ if(!IsConvex(p2,p3,p)) return false;
+ return true;
+ } else {
+ if(IsConvex(p1,p2,p)) return true;
+ if(IsConvex(p2,p3,p)) return true;
+ return false;
+ }
+}
+
+bool TPPLPartition::InCone(PartitionVertex *v, TPPLPoint &p) {
+ TPPLPoint p1,p2,p3;
+
+ p1 = v->previous->p;
+ p2 = v->p;
+ p3 = v->next->p;
+
+ return InCone(p1,p2,p3,p);
+}
+
+void TPPLPartition::UpdateVertexReflexity(PartitionVertex *v) {
+ PartitionVertex *v1,*v3;
+ v1 = v->previous;
+ v3 = v->next;
+ v->isConvex = !IsReflex(v1->p,v->p,v3->p);
+}
+
+void TPPLPartition::UpdateVertex(PartitionVertex *v, PartitionVertex *vertices, long numvertices) {
+ long i;
+ PartitionVertex *v1,*v3;
+ TPPLPoint vec1,vec3;
+
+ v1 = v->previous;
+ v3 = v->next;
+
+ v->isConvex = IsConvex(v1->p,v->p,v3->p);
+
+ vec1 = Normalize(v1->p - v->p);
+ vec3 = Normalize(v3->p - v->p);
+ v->angle = vec1.x*vec3.x + vec1.y*vec3.y;
+
+ if(v->isConvex) {
+ v->isEar = true;
+ for(i=0;i<numvertices;i++) {
+ if((vertices[i].p.x==v->p.x)&&(vertices[i].p.y==v->p.y)) continue;
+ if((vertices[i].p.x==v1->p.x)&&(vertices[i].p.y==v1->p.y)) continue;
+ if((vertices[i].p.x==v3->p.x)&&(vertices[i].p.y==v3->p.y)) continue;
+ if(IsInside(v1->p,v->p,v3->p,vertices[i].p)) {
+ v->isEar = false;
+ break;
+ }
+ }
+ } else {
+ v->isEar = false;
+ }
+}
+
+//triangulation by ear removal
+int TPPLPartition::Triangulate_EC(TPPLPoly *poly, list<TPPLPoly> *triangles) {
+ long numvertices;
+ PartitionVertex *vertices;
+ PartitionVertex *ear;
+ TPPLPoly triangle;
+ long i,j;
+ bool earfound;
+
+ if(poly->GetNumPoints() < 3) return 0;
+ if(poly->GetNumPoints() == 3) {
+ triangles->push_back(*poly);
+ return 1;
+ }
+
+ numvertices = poly->GetNumPoints();
+
+ vertices = new PartitionVertex[numvertices];
+ for(i=0;i<numvertices;i++) {
+ vertices[i].isActive = true;
+ vertices[i].p = poly->GetPoint(i);
+ if(i==(numvertices-1)) vertices[i].next=&(vertices[0]);
+ else vertices[i].next=&(vertices[i+1]);
+ if(i==0) vertices[i].previous = &(vertices[numvertices-1]);
+ else vertices[i].previous = &(vertices[i-1]);
+ }
+ for(i=0;i<numvertices;i++) {
+ UpdateVertex(&vertices[i],vertices,numvertices);
+ }
+
+ for(i=0;i<numvertices-3;i++) {
+ earfound = false;
+ //find the most extruded ear
+ for(j=0;j<numvertices;j++) {
+ if(!vertices[j].isActive) continue;
+ if(!vertices[j].isEar) continue;
+ if(!earfound) {
+ earfound = true;
+ ear = &(vertices[j]);
+ } else {
+ if(vertices[j].angle > ear->angle) {
+ ear = &(vertices[j]);
+ }
+ }
+ }
+ if(!earfound) {
+ delete [] vertices;
+ return 0;
+ }
+
+ triangle.Triangle(ear->previous->p,ear->p,ear->next->p);
+ triangles->push_back(triangle);
+
+ ear->isActive = false;
+ ear->previous->next = ear->next;
+ ear->next->previous = ear->previous;
+
+ if(i==numvertices-4) break;
+
+ UpdateVertex(ear->previous,vertices,numvertices);
+ UpdateVertex(ear->next,vertices,numvertices);
+ }
+ for(i=0;i<numvertices;i++) {
+ if(vertices[i].isActive) {
+ triangle.Triangle(vertices[i].previous->p,vertices[i].p,vertices[i].next->p);
+ triangles->push_back(triangle);
+ break;
+ }
+ }
+
+ delete [] vertices;
+
+ return 1;
+}
+
+int TPPLPartition::Triangulate_EC(list<TPPLPoly> *inpolys, list<TPPLPoly> *triangles) {
+ list<TPPLPoly> outpolys;
+ list<TPPLPoly>::iterator iter;
+
+ if(!RemoveHoles(inpolys,&outpolys)) return 0;
+ for(iter=outpolys.begin();iter!=outpolys.end();++iter) {
+ if(!Triangulate_EC(&(*iter),triangles)) return 0;
+ }
+ return 1;
+}
+
+int TPPLPartition::ConvexPartition_HM(TPPLPoly *poly, list<TPPLPoly> *parts) {
+ list<TPPLPoly> triangles;
+ list<TPPLPoly>::iterator iter1,iter2;
+ TPPLPoly *poly1,*poly2;
+ TPPLPoly newpoly;
+ TPPLPoint d1,d2,p1,p2,p3;
+ long i11,i12,i21,i22,i13,i23,j,k;
+ bool isdiagonal;
+ long numreflex;
+
+ //check if the poly is already convex
+ numreflex = 0;
+ for(i11=0;i11<poly->GetNumPoints();i11++) {
+ if(i11==0) i12 = poly->GetNumPoints()-1;
+ else i12=i11-1;
+ if(i11==(poly->GetNumPoints()-1)) i13=0;
+ else i13=i11+1;
+ if(IsReflex(poly->GetPoint(i12),poly->GetPoint(i11),poly->GetPoint(i13))) {
+ numreflex = 1;
+ break;
+ }
+ }
+ if(numreflex == 0) {
+ parts->push_back(*poly);
+ return 1;
+ }
+
+ if(!Triangulate_EC(poly,&triangles)) return 0;
+
+ for(iter1 = triangles.begin(); iter1 != triangles.end(); ++iter1) {
+ poly1 = &(*iter1);
+ for(i11=0;i11<poly1->GetNumPoints();i11++) {
+ d1 = poly1->GetPoint(i11);
+ i12 = (i11+1)%(poly1->GetNumPoints());
+ d2 = poly1->GetPoint(i12);
+
+ isdiagonal = false;
+ for(iter2 = iter1; iter2 != triangles.end(); ++iter2) {
+ if(iter1 == iter2) continue;
+ poly2 = &(*iter2);
+
+ for(i21=0;i21<poly2->GetNumPoints();i21++) {
+ if((d2.x != poly2->GetPoint(i21).x)||(d2.y != poly2->GetPoint(i21).y)) continue;
+ i22 = (i21+1)%(poly2->GetNumPoints());
+ if((d1.x != poly2->GetPoint(i22).x)||(d1.y != poly2->GetPoint(i22).y)) continue;
+ isdiagonal = true;
+ break;
+ }
+ if(isdiagonal) break;
+ }
+
+ if(!isdiagonal) continue;
+
+ p2 = poly1->GetPoint(i11);
+ if(i11 == 0) i13 = poly1->GetNumPoints()-1;
+ else i13 = i11-1;
+ p1 = poly1->GetPoint(i13);
+ if(i22 == (poly2->GetNumPoints()-1)) i23 = 0;
+ else i23 = i22+1;
+ p3 = poly2->GetPoint(i23);
+
+ if(!IsConvex(p1,p2,p3)) continue;
+
+ p2 = poly1->GetPoint(i12);
+ if(i12 == (poly1->GetNumPoints()-1)) i13 = 0;
+ else i13 = i12+1;
+ p3 = poly1->GetPoint(i13);
+ if(i21 == 0) i23 = poly2->GetNumPoints()-1;
+ else i23 = i21-1;
+ p1 = poly2->GetPoint(i23);
+
+ if(!IsConvex(p1,p2,p3)) continue;
+
+ newpoly.Init(poly1->GetNumPoints()+poly2->GetNumPoints()-2);
+ k = 0;
+ for(j=i12;j!=i11;j=(j+1)%(poly1->GetNumPoints())) {
+ newpoly[k] = poly1->GetPoint(j);
+ k++;
+ }
+ for(j=i22;j!=i21;j=(j+1)%(poly2->GetNumPoints())) {
+ newpoly[k] = poly2->GetPoint(j);
+ k++;
+ }
+
+ triangles.erase(iter2);
+ *iter1 = newpoly;
+ poly1 = &(*iter1);
+ i11 = -1;
+
+ continue;
+ }
+ }
+
+ for(iter1 = triangles.begin(); iter1 != triangles.end(); ++iter1) {
+ parts->push_back(*iter1);
+ }
+
+ return 1;
+}
+
+int TPPLPartition::ConvexPartition_HM(list<TPPLPoly> *inpolys, list<TPPLPoly> *parts) {
+ list<TPPLPoly> outpolys;
+ list<TPPLPoly>::iterator iter;
+
+ if(!RemoveHoles(inpolys,&outpolys)) return 0;
+ for(iter=outpolys.begin();iter!=outpolys.end();++iter) {
+ if(!ConvexPartition_HM(&(*iter),parts)) return 0;
+ }
+ return 1;
+}
+
+//minimum-weight polygon triangulation by dynamic programming
+//O(n^3) time complexity
+//O(n^2) space complexity
+int TPPLPartition::Triangulate_OPT(TPPLPoly *poly, list<TPPLPoly> *triangles) {
+ long i,j,k,gap,n;
+ DPState **dpstates;
+ TPPLPoint p1,p2,p3,p4;
+ long bestvertex;
+ tppl_float weight,minweight,d1,d2;
+ Diagonal diagonal,newdiagonal;
+ list<Diagonal> diagonals;
+ TPPLPoly triangle;
+ int ret = 1;
+
+ n = poly->GetNumPoints();
+ dpstates = new DPState *[n];
+ for(i=1;i<n;i++) {
+ dpstates[i] = new DPState[i];
+ }
+
+ //init states and visibility
+ for(i=0;i<(n-1);i++) {
+ p1 = poly->GetPoint(i);
+ for(j=i+1;j<n;j++) {
+ dpstates[j][i].visible = true;
+ dpstates[j][i].weight = 0;
+ dpstates[j][i].bestvertex = -1;
+ if(j!=(i+1)) {
+ p2 = poly->GetPoint(j);
+
+ //visibility check
+ if(i==0) p3 = poly->GetPoint(n-1);
+ else p3 = poly->GetPoint(i-1);
+ if(i==(n-1)) p4 = poly->GetPoint(0);
+ else p4 = poly->GetPoint(i+1);
+ if(!InCone(p3,p1,p4,p2)) {
+ dpstates[j][i].visible = false;
+ continue;
+ }
+
+ if(j==0) p3 = poly->GetPoint(n-1);
+ else p3 = poly->GetPoint(j-1);
+ if(j==(n-1)) p4 = poly->GetPoint(0);
+ else p4 = poly->GetPoint(j+1);
+ if(!InCone(p3,p2,p4,p1)) {
+ dpstates[j][i].visible = false;
+ continue;
+ }
+
+ for(k=0;k<n;k++) {
+ p3 = poly->GetPoint(k);
+ if(k==(n-1)) p4 = poly->GetPoint(0);
+ else p4 = poly->GetPoint(k+1);
+ if(Intersects(p1,p2,p3,p4)) {
+ dpstates[j][i].visible = false;
+ break;
+ }
+ }
+ }
+ }
+ }
+ dpstates[n-1][0].visible = true;
+ dpstates[n-1][0].weight = 0;
+ dpstates[n-1][0].bestvertex = -1;
+
+ for(gap = 2; gap<n; gap++) {
+ for(i=0; i<(n-gap); i++) {
+ j = i+gap;
+ if(!dpstates[j][i].visible) continue;
+ bestvertex = -1;
+ for(k=(i+1);k<j;k++) {
+ if(!dpstates[k][i].visible) continue;
+ if(!dpstates[j][k].visible) continue;
+
+ if(k<=(i+1)) d1=0;
+ else d1 = Distance(poly->GetPoint(i),poly->GetPoint(k));
+ if(j<=(k+1)) d2=0;
+ else d2 = Distance(poly->GetPoint(k),poly->GetPoint(j));
+
+ weight = dpstates[k][i].weight + dpstates[j][k].weight + d1 + d2;
+
+ if((bestvertex == -1)||(weight<minweight)) {
+ bestvertex = k;
+ minweight = weight;
+ }
+ }
+ if(bestvertex == -1) {
+ for(i=1;i<n;i++) {
+ delete [] dpstates[i];
+ }
+ delete [] dpstates;
+
+ return 0;
+ }
+
+ dpstates[j][i].bestvertex = bestvertex;
+ dpstates[j][i].weight = minweight;
+ }
+ }
+
+ newdiagonal.index1 = 0;
+ newdiagonal.index2 = n-1;
+ diagonals.push_back(newdiagonal);
+ while(!diagonals.empty()) {
+ diagonal = *(diagonals.begin());
+ diagonals.pop_front();
+ bestvertex = dpstates[diagonal.index2][diagonal.index1].bestvertex;
+ if(bestvertex == -1) {
+ ret = 0;
+ break;
+ }
+ triangle.Triangle(poly->GetPoint(diagonal.index1),poly->GetPoint(bestvertex),poly->GetPoint(diagonal.index2));
+ triangles->push_back(triangle);
+ if(bestvertex > (diagonal.index1+1)) {
+ newdiagonal.index1 = diagonal.index1;
+ newdiagonal.index2 = bestvertex;
+ diagonals.push_back(newdiagonal);
+ }
+ if(diagonal.index2 > (bestvertex+1)) {
+ newdiagonal.index1 = bestvertex;
+ newdiagonal.index2 = diagonal.index2;
+ diagonals.push_back(newdiagonal);
+ }
+ }
+
+ for(i=1;i<n;i++) {
+ delete [] dpstates[i];
+ }
+ delete [] dpstates;
+
+ return ret;
+}
+
+void TPPLPartition::UpdateState(long a, long b, long w, long i, long j, DPState2 **dpstates) {
+ Diagonal newdiagonal;
+ list<Diagonal> *pairs;
+ long w2;
+
+ w2 = dpstates[a][b].weight;
+ if(w>w2) return;
+
+ pairs = &(dpstates[a][b].pairs);
+ newdiagonal.index1 = i;
+ newdiagonal.index2 = j;
+
+ if(w<w2) {
+ pairs->clear();
+ pairs->push_front(newdiagonal);
+ dpstates[a][b].weight = w;
+ } else {
+ if((!pairs->empty())&&(i <= pairs->begin()->index1)) return;
+ while((!pairs->empty())&&(pairs->begin()->index2 >= j)) pairs->pop_front();
+ pairs->push_front(newdiagonal);
+ }
+}
+
+void TPPLPartition::TypeA(long i, long j, long k, PartitionVertex *vertices, DPState2 **dpstates) {
+ list<Diagonal> *pairs;
+ list<Diagonal>::iterator iter,lastiter;
+ long top;
+ long w;
+
+ if(!dpstates[i][j].visible) return;
+ top = j;
+ w = dpstates[i][j].weight;
+ if(k-j > 1) {
+ if (!dpstates[j][k].visible) return;
+ w += dpstates[j][k].weight + 1;
+ }
+ if(j-i > 1) {
+ pairs = &(dpstates[i][j].pairs);
+ iter = pairs->end();
+ lastiter = pairs->end();
+ while(iter!=pairs->begin()) {
+ --iter;
+ if(!IsReflex(vertices[iter->index2].p,vertices[j].p,vertices[k].p)) lastiter = iter;
+ else break;
+ }
+ if(lastiter == pairs->end()) w++;
+ else {
+ if(IsReflex(vertices[k].p,vertices[i].p,vertices[lastiter->index1].p)) w++;
+ else top = lastiter->index1;
+ }
+ }
+ UpdateState(i,k,w,top,j,dpstates);
+}
+
+void TPPLPartition::TypeB(long i, long j, long k, PartitionVertex *vertices, DPState2 **dpstates) {
+ list<Diagonal> *pairs;
+ list<Diagonal>::iterator iter,lastiter;
+ long top;
+ long w;
+
+ if(!dpstates[j][k].visible) return;
+ top = j;
+ w = dpstates[j][k].weight;
+
+ if (j-i > 1) {
+ if (!dpstates[i][j].visible) return;
+ w += dpstates[i][j].weight + 1;
+ }
+ if (k-j > 1) {
+ pairs = &(dpstates[j][k].pairs);
+
+ iter = pairs->begin();
+ if((!pairs->empty())&&(!IsReflex(vertices[i].p,vertices[j].p,vertices[iter->index1].p))) {
+ lastiter = iter;
+ while(iter!=pairs->end()) {
+ if(!IsReflex(vertices[i].p,vertices[j].p,vertices[iter->index1].p)) {
+ lastiter = iter;
+ ++iter;
+ }
+ else break;
+ }
+ if(IsReflex(vertices[lastiter->index2].p,vertices[k].p,vertices[i].p)) w++;
+ else top = lastiter->index2;
+ } else w++;
+ }
+ UpdateState(i,k,w,j,top,dpstates);
+}
+
+int TPPLPartition::ConvexPartition_OPT(TPPLPoly *poly, list<TPPLPoly> *parts) {
+ TPPLPoint p1,p2,p3,p4;
+ PartitionVertex *vertices;
+ DPState2 **dpstates;
+ long i,j,k,n,gap;
+ list<Diagonal> diagonals,diagonals2;
+ Diagonal diagonal,newdiagonal;
+ list<Diagonal> *pairs,*pairs2;
+ list<Diagonal>::iterator iter,iter2;
+ int ret;
+ TPPLPoly newpoly;
+ list<long> indices;
+ list<long>::iterator iiter;
+ bool ijreal,jkreal;
+
+ n = poly->GetNumPoints();
+ vertices = new PartitionVertex[n];
+
+ dpstates = new DPState2 *[n];
+ for(i=0;i<n;i++) {
+ dpstates[i] = new DPState2[n];
+ }
+
+ //init vertex information
+ for(i=0;i<n;i++) {
+ vertices[i].p = poly->GetPoint(i);
+ vertices[i].isActive = true;
+ if(i==0) vertices[i].previous = &(vertices[n-1]);
+ else vertices[i].previous = &(vertices[i-1]);
+ if(i==(poly->GetNumPoints()-1)) vertices[i].next = &(vertices[0]);
+ else vertices[i].next = &(vertices[i+1]);
+ }
+ for(i=1;i<n;i++) {
+ UpdateVertexReflexity(&(vertices[i]));
+ }
+
+ //init states and visibility
+ for(i=0;i<(n-1);i++) {
+ p1 = poly->GetPoint(i);
+ for(j=i+1;j<n;j++) {
+ dpstates[i][j].visible = true;
+ if(j==i+1) {
+ dpstates[i][j].weight = 0;
+ } else {
+ dpstates[i][j].weight = 2147483647;
+ }
+ if(j!=(i+1)) {
+ p2 = poly->GetPoint(j);
+
+ //visibility check
+ if(!InCone(&vertices[i],p2)) {
+ dpstates[i][j].visible = false;
+ continue;
+ }
+ if(!InCone(&vertices[j],p1)) {
+ dpstates[i][j].visible = false;
+ continue;
+ }
+
+ for(k=0;k<n;k++) {
+ p3 = poly->GetPoint(k);
+ if(k==(n-1)) p4 = poly->GetPoint(0);
+ else p4 = poly->GetPoint(k+1);
+ if(Intersects(p1,p2,p3,p4)) {
+ dpstates[i][j].visible = false;
+ break;
+ }
+ }
+ }
+ }
+ }
+ for(i=0;i<(n-2);i++) {
+ j = i+2;
+ if(dpstates[i][j].visible) {
+ dpstates[i][j].weight = 0;
+ newdiagonal.index1 = i+1;
+ newdiagonal.index2 = i+1;
+ dpstates[i][j].pairs.push_back(newdiagonal);
+ }
+ }
+
+ dpstates[0][n-1].visible = true;
+ vertices[0].isConvex = false; //by convention
+
+ for(gap=3; gap<n; gap++) {
+ for(i=0;i<n-gap;i++) {
+ if(vertices[i].isConvex) continue;
+ k = i+gap;
+ if(dpstates[i][k].visible) {
+ if(!vertices[k].isConvex) {
+ for(j=i+1;j<k;j++) TypeA(i,j,k,vertices,dpstates);
+ } else {
+ for(j=i+1;j<(k-1);j++) {
+ if(vertices[j].isConvex) continue;
+ TypeA(i,j,k,vertices,dpstates);
+ }
+ TypeA(i,k-1,k,vertices,dpstates);
+ }
+ }
+ }
+ for(k=gap;k<n;k++) {
+ if(vertices[k].isConvex) continue;
+ i = k-gap;
+ if((vertices[i].isConvex)&&(dpstates[i][k].visible)) {
+ TypeB(i,i+1,k,vertices,dpstates);
+ for(j=i+2;j<k;j++) {
+ if(vertices[j].isConvex) continue;
+ TypeB(i,j,k,vertices,dpstates);
+ }
+ }
+ }
+ }
+
+
+ //recover solution
+ ret = 1;
+ newdiagonal.index1 = 0;
+ newdiagonal.index2 = n-1;
+ diagonals.push_front(newdiagonal);
+ while(!diagonals.empty()) {
+ diagonal = *(diagonals.begin());
+ diagonals.pop_front();
+ if((diagonal.index2 - diagonal.index1) <=1) continue;
+ pairs = &(dpstates[diagonal.index1][diagonal.index2].pairs);
+ if(pairs->empty()) {
+ ret = 0;
+ break;
+ }
+ if(!vertices[diagonal.index1].isConvex) {
+ iter = pairs->end();
+ --iter;
+ j = iter->index2;
+ newdiagonal.index1 = j;
+ newdiagonal.index2 = diagonal.index2;
+ diagonals.push_front(newdiagonal);
+ if((j - diagonal.index1)>1) {
+ if(iter->index1 != iter->index2) {
+ pairs2 = &(dpstates[diagonal.index1][j].pairs);
+ while(1) {
+ if(pairs2->empty()) {
+ ret = 0;
+ break;
+ }
+ iter2 = pairs2->end();
+ --iter2;
+ if(iter->index1 != iter2->index1) pairs2->pop_back();
+ else break;
+ }
+ if(ret == 0) break;
+ }
+ newdiagonal.index1 = diagonal.index1;
+ newdiagonal.index2 = j;
+ diagonals.push_front(newdiagonal);
+ }
+ } else {
+ iter = pairs->begin();
+ j = iter->index1;
+ newdiagonal.index1 = diagonal.index1;
+ newdiagonal.index2 = j;
+ diagonals.push_front(newdiagonal);
+ if((diagonal.index2 - j) > 1) {
+ if(iter->index1 != iter->index2) {
+ pairs2 = &(dpstates[j][diagonal.index2].pairs);
+ while(1) {
+ if(pairs2->empty()) {
+ ret = 0;
+ break;
+ }
+ iter2 = pairs2->begin();
+ if(iter->index2 != iter2->index2) pairs2->pop_front();
+ else break;
+ }
+ if(ret == 0) break;
+ }
+ newdiagonal.index1 = j;
+ newdiagonal.index2 = diagonal.index2;
+ diagonals.push_front(newdiagonal);
+ }
+ }
+ }
+
+ if(ret == 0) {
+ for(i=0;i<n;i++) {
+ delete [] dpstates[i];
+ }
+ delete [] dpstates;
+ delete [] vertices;
+
+ return ret;
+ }
+
+ newdiagonal.index1 = 0;
+ newdiagonal.index2 = n-1;
+ diagonals.push_front(newdiagonal);
+ while(!diagonals.empty()) {
+ diagonal = *(diagonals.begin());
+ diagonals.pop_front();
+ if((diagonal.index2 - diagonal.index1) <= 1) continue;
+
+ indices.clear();
+ diagonals2.clear();
+ indices.push_back(diagonal.index1);
+ indices.push_back(diagonal.index2);
+ diagonals2.push_front(diagonal);
+
+ while(!diagonals2.empty()) {
+ diagonal = *(diagonals2.begin());
+ diagonals2.pop_front();
+ if((diagonal.index2 - diagonal.index1) <= 1) continue;
+ ijreal = true;
+ jkreal = true;
+ pairs = &(dpstates[diagonal.index1][diagonal.index2].pairs);
+ if(!vertices[diagonal.index1].isConvex) {
+ iter = pairs->end();
+ --iter;
+ j = iter->index2;
+ if(iter->index1 != iter->index2) ijreal = false;
+ } else {
+ iter = pairs->begin();
+ j = iter->index1;
+ if(iter->index1 != iter->index2) jkreal = false;
+ }
+
+ newdiagonal.index1 = diagonal.index1;
+ newdiagonal.index2 = j;
+ if(ijreal) {
+ diagonals.push_back(newdiagonal);
+ } else {
+ diagonals2.push_back(newdiagonal);
+ }
+
+ newdiagonal.index1 = j;
+ newdiagonal.index2 = diagonal.index2;
+ if(jkreal) {
+ diagonals.push_back(newdiagonal);
+ } else {
+ diagonals2.push_back(newdiagonal);
+ }
+
+ indices.push_back(j);
+ }
+
+ indices.sort();
+ newpoly.Init((long)indices.size());
+ k=0;
+ for(iiter = indices.begin();iiter!=indices.end(); ++iiter) {
+ newpoly[k] = vertices[*iiter].p;
+ k++;
+ }
+ parts->push_back(newpoly);
+ }
+
+ for(i=0;i<n;i++) {
+ delete [] dpstates[i];
+ }
+ delete [] dpstates;
+ delete [] vertices;
+
+ return ret;
+}
+
+//triangulates a set of polygons by first partitioning them into monotone polygons
+//O(n*log(n)) time complexity, O(n) space complexity
+//the algorithm used here is outlined in the book
+//"Computational Geometry: Algorithms and Applications"
+//by Mark de Berg, Otfried Cheong, Marc van Kreveld and Mark Overmars
+int TPPLPartition::MonotonePartition(list<TPPLPoly> *inpolys, list<TPPLPoly> *monotonePolys) {
+ list<TPPLPoly>::iterator iter;
+ MonotoneVertex *vertices;
+ long i,numvertices,vindex,vindex2,newnumvertices,maxnumvertices;
+ long polystartindex, polyendindex;
+ TPPLPoly *poly;
+ MonotoneVertex *v,*v2,*vprev,*vnext;
+ ScanLineEdge newedge;
+ bool error = false;
+
+ numvertices = 0;
+ for(iter = inpolys->begin(); iter != inpolys->end(); ++iter) {
+ numvertices += iter->GetNumPoints();
+ }
+
+ maxnumvertices = numvertices*3;
+ vertices = new MonotoneVertex[maxnumvertices];
+ newnumvertices = numvertices;
+
+ polystartindex = 0;
+ for(iter = inpolys->begin(); iter != inpolys->end(); ++iter) {
+ poly = &(*iter);
+ polyendindex = polystartindex + poly->GetNumPoints()-1;
+ for(i=0;i<poly->GetNumPoints();i++) {
+ vertices[i+polystartindex].p = poly->GetPoint(i);
+ if(i==0) vertices[i+polystartindex].previous = polyendindex;
+ else vertices[i+polystartindex].previous = i+polystartindex-1;
+ if(i==(poly->GetNumPoints()-1)) vertices[i+polystartindex].next = polystartindex;
+ else vertices[i+polystartindex].next = i+polystartindex+1;
+ }
+ polystartindex = polyendindex+1;
+ }
+
+ //construct the priority queue
+ long *priority = new long [numvertices];
+ for(i=0;i<numvertices;i++) priority[i] = i;
+ std::sort(priority,&(priority[numvertices]),VertexSorter(vertices));
+
+ //determine vertex types
+ char *vertextypes = new char[maxnumvertices];
+ for(i=0;i<numvertices;i++) {
+ v = &(vertices[i]);
+ vprev = &(vertices[v->previous]);
+ vnext = &(vertices[v->next]);
+
+ if(Below(vprev->p,v->p)&&Below(vnext->p,v->p)) {
+ if(IsConvex(vnext->p,vprev->p,v->p)) {
+ vertextypes[i] = TPPL_VERTEXTYPE_START;
+ } else {
+ vertextypes[i] = TPPL_VERTEXTYPE_SPLIT;
+ }
+ } else if(Below(v->p,vprev->p)&&Below(v->p,vnext->p)) {
+ if(IsConvex(vnext->p,vprev->p,v->p))
+ {
+ vertextypes[i] = TPPL_VERTEXTYPE_END;
+ } else {
+ vertextypes[i] = TPPL_VERTEXTYPE_MERGE;
+ }
+ } else {
+ vertextypes[i] = TPPL_VERTEXTYPE_REGULAR;
+ }
+ }
+
+ //helpers
+ long *helpers = new long[maxnumvertices];
+
+ //binary search tree that holds edges intersecting the scanline
+ //note that while set doesn't actually have to be implemented as a tree
+ //complexity requirements for operations are the same as for the balanced binary search tree
+ set<ScanLineEdge> edgeTree;
+ //store iterators to the edge tree elements
+ //this makes deleting existing edges much faster
+ set<ScanLineEdge>::iterator *edgeTreeIterators,edgeIter;
+ edgeTreeIterators = new set<ScanLineEdge>::iterator[maxnumvertices];
+ pair<set<ScanLineEdge>::iterator,bool> edgeTreeRet;
+
+ //for each vertex
+ for(i=0;i<numvertices;i++) {
+ vindex = priority[i];
+ v = &(vertices[vindex]);
+ vindex2 = vindex;
+ v2 = v;
+
+ //depending on the vertex type, do the appropriate action
+ //comments in the following sections are copied from "Computational Geometry: Algorithms and Applications"
+ switch(vertextypes[vindex]) {
+ case TPPL_VERTEXTYPE_START:
+ //Insert ei in T and set helper(ei) to vi.
+ newedge.p1 = v->p;
+ newedge.p2 = vertices[v->next].p;
+ newedge.index = vindex;
+ edgeTreeRet = edgeTree.insert(newedge);
+ edgeTreeIterators[vindex] = edgeTreeRet.first;
+ helpers[vindex] = vindex;
+ break;
+
+ case TPPL_VERTEXTYPE_END:
+ //if helper(ei-1) is a merge vertex
+ if(vertextypes[helpers[v->previous]]==TPPL_VERTEXTYPE_MERGE) {
+ //Insert the diagonal connecting vi to helper(ei-1) in D.
+ AddDiagonal(vertices,&newnumvertices,vindex,helpers[v->previous]);
+ vertextypes[newnumvertices-2] = vertextypes[vindex];
+ edgeTreeIterators[newnumvertices-2] = edgeTreeIterators[vindex];
+ helpers[newnumvertices-2] = helpers[vindex];
+ vertextypes[newnumvertices-1] = vertextypes[helpers[v->previous]];
+ edgeTreeIterators[newnumvertices-1] = edgeTreeIterators[helpers[v->previous]];
+ helpers[newnumvertices-1] = helpers[helpers[v->previous]];
+ }
+ //Delete ei-1 from T
+ edgeTree.erase(edgeTreeIterators[v->previous]);
+ break;
+
+ case TPPL_VERTEXTYPE_SPLIT:
+ //Search in T to find the edge e j directly left of vi.
+ newedge.p1 = v->p;
+ newedge.p2 = v->p;
+ edgeIter = edgeTree.lower_bound(newedge);
+ if(edgeIter == edgeTree.begin()) {
+ error = true;
+ break;
+ }
+ --edgeIter;
+ //Insert the diagonal connecting vi to helper(ej) in D.
+ AddDiagonal(vertices,&newnumvertices,vindex,helpers[edgeIter->index]);
+ vertextypes[newnumvertices-2] = vertextypes[vindex];
+ edgeTreeIterators[newnumvertices-2] = edgeTreeIterators[vindex];
+ helpers[newnumvertices-2] = helpers[vindex];
+ vertextypes[newnumvertices-1] = vertextypes[helpers[edgeIter->index]];
+ edgeTreeIterators[newnumvertices-1] = edgeTreeIterators[helpers[edgeIter->index]];
+ helpers[newnumvertices-1] = helpers[helpers[edgeIter->index]];
+ vindex2 = newnumvertices-2;
+ v2 = &(vertices[vindex2]);
+ //helper(e j)�vi
+ helpers[edgeIter->index] = vindex;
+ //Insert ei in T and set helper(ei) to vi.
+ newedge.p1 = v2->p;
+ newedge.p2 = vertices[v2->next].p;
+ newedge.index = vindex2;
+ edgeTreeRet = edgeTree.insert(newedge);
+ edgeTreeIterators[vindex2] = edgeTreeRet.first;
+ helpers[vindex2] = vindex2;
+ break;
+
+ case TPPL_VERTEXTYPE_MERGE:
+ //if helper(ei-1) is a merge vertex
+ if(vertextypes[helpers[v->previous]]==TPPL_VERTEXTYPE_MERGE) {
+ //Insert the diagonal connecting vi to helper(ei-1) in D.
+ AddDiagonal(vertices,&newnumvertices,vindex,helpers[v->previous]);
+ vertextypes[newnumvertices-2] = vertextypes[vindex];
+ edgeTreeIterators[newnumvertices-2] = edgeTreeIterators[vindex];
+ helpers[newnumvertices-2] = helpers[vindex];
+ vertextypes[newnumvertices-1] = vertextypes[helpers[v->previous]];
+ edgeTreeIterators[newnumvertices-1] = edgeTreeIterators[helpers[v->previous]];
+ helpers[newnumvertices-1] = helpers[helpers[v->previous]];
+ vindex2 = newnumvertices-2;
+ v2 = &(vertices[vindex2]);
+ }
+ //Delete ei-1 from T.
+ edgeTree.erase(edgeTreeIterators[v->previous]);
+ //Search in T to find the edge e j directly left of vi.
+ newedge.p1 = v->p;
+ newedge.p2 = v->p;
+ edgeIter = edgeTree.lower_bound(newedge);
+ if(edgeIter == edgeTree.begin()) {
+ error = true;
+ break;
+ }
+ --edgeIter;
+ //if helper(ej) is a merge vertex
+ if(vertextypes[helpers[edgeIter->index]]==TPPL_VERTEXTYPE_MERGE) {
+ //Insert the diagonal connecting vi to helper(e j) in D.
+ AddDiagonal(vertices,&newnumvertices,vindex2,helpers[edgeIter->index]);
+ vertextypes[newnumvertices-2] = vertextypes[vindex2];
+ edgeTreeIterators[newnumvertices-2] = edgeTreeIterators[vindex2];
+ helpers[newnumvertices-2] = helpers[vindex2];
+ vertextypes[newnumvertices-1] = vertextypes[helpers[edgeIter->index]];
+ edgeTreeIterators[newnumvertices-1] = edgeTreeIterators[helpers[edgeIter->index]];
+ helpers[newnumvertices-1] = helpers[helpers[edgeIter->index]];
+ }
+ //helper(e j)�vi
+ helpers[edgeIter->index] = vindex2;
+ break;
+
+ case TPPL_VERTEXTYPE_REGULAR:
+ //if the interior of P lies to the right of vi
+ if(Below(v->p,vertices[v->previous].p)) {
+ //if helper(ei-1) is a merge vertex
+ if(vertextypes[helpers[v->previous]]==TPPL_VERTEXTYPE_MERGE) {
+ //Insert the diagonal connecting vi to helper(ei-1) in D.
+ AddDiagonal(vertices,&newnumvertices,vindex,helpers[v->previous]);
+ vertextypes[newnumvertices-2] = vertextypes[vindex];
+ edgeTreeIterators[newnumvertices-2] = edgeTreeIterators[vindex];
+ helpers[newnumvertices-2] = helpers[vindex];
+ vertextypes[newnumvertices-1] = vertextypes[helpers[v->previous]];
+ edgeTreeIterators[newnumvertices-1] = edgeTreeIterators[helpers[v->previous]];
+ helpers[newnumvertices-1] = helpers[helpers[v->previous]];
+ vindex2 = newnumvertices-2;
+ v2 = &(vertices[vindex2]);
+ }
+ //Delete ei-1 from T.
+ edgeTree.erase(edgeTreeIterators[v->previous]);
+ //Insert ei in T and set helper(ei) to vi.
+ newedge.p1 = v2->p;
+ newedge.p2 = vertices[v2->next].p;
+ newedge.index = vindex2;
+ edgeTreeRet = edgeTree.insert(newedge);
+ edgeTreeIterators[vindex2] = edgeTreeRet.first;
+ helpers[vindex2] = vindex;
+ } else {
+ //Search in T to find the edge ej directly left of vi.
+ newedge.p1 = v->p;
+ newedge.p2 = v->p;
+ edgeIter = edgeTree.lower_bound(newedge);
+ if(edgeIter == edgeTree.begin()) {
+ error = true;
+ break;
+ }
+ --edgeIter;
+ //if helper(ej) is a merge vertex
+ if(vertextypes[helpers[edgeIter->index]]==TPPL_VERTEXTYPE_MERGE) {
+ //Insert the diagonal connecting vi to helper(e j) in D.
+ AddDiagonal(vertices,&newnumvertices,vindex,helpers[edgeIter->index]);
+ vertextypes[newnumvertices-2] = vertextypes[vindex];
+ edgeTreeIterators[newnumvertices-2] = edgeTreeIterators[vindex];
+ helpers[newnumvertices-2] = helpers[vindex];
+ vertextypes[newnumvertices-1] = vertextypes[helpers[edgeIter->index]];
+ edgeTreeIterators[newnumvertices-1] = edgeTreeIterators[helpers[edgeIter->index]];
+ helpers[newnumvertices-1] = helpers[helpers[edgeIter->index]];
+ }
+ //helper(e j)�vi
+ helpers[edgeIter->index] = vindex;
+ }
+ break;
+ }
+
+ if(error) break;
+ }
+
+ char *used = new char[newnumvertices];
+ memset(used,0,newnumvertices*sizeof(char));
+
+ if(!error) {
+ //return result
+ long size;
+ TPPLPoly mpoly;
+ for(i=0;i<newnumvertices;i++) {
+ if(used[i]) continue;
+ v = &(vertices[i]);
+ vnext = &(vertices[v->next]);
+ size = 1;
+ while(vnext!=v) {
+ vnext = &(vertices[vnext->next]);
+ size++;
+ }
+ mpoly.Init(size);
+ v = &(vertices[i]);
+ mpoly[0] = v->p;
+ vnext = &(vertices[v->next]);
+ size = 1;
+ used[i] = 1;
+ used[v->next] = 1;
+ while(vnext!=v) {
+ mpoly[size] = vnext->p;
+ used[vnext->next] = 1;
+ vnext = &(vertices[vnext->next]);
+ size++;
+ }
+ monotonePolys->push_back(mpoly);
+ }
+ }
+
+ //cleanup
+ delete [] vertices;
+ delete [] priority;
+ delete [] vertextypes;
+ delete [] edgeTreeIterators;
+ delete [] helpers;
+ delete [] used;
+
+ if(error) {
+ return 0;
+ } else {
+ return 1;
+ }
+}
+
+//adds a diagonal to the doubly-connected list of vertices
+void TPPLPartition::AddDiagonal(MonotoneVertex *vertices, long *numvertices, long index1, long index2) {
+ long newindex1,newindex2;
+
+ newindex1 = *numvertices;
+ (*numvertices)++;
+ newindex2 = *numvertices;
+ (*numvertices)++;
+
+ vertices[newindex1].p = vertices[index1].p;
+ vertices[newindex2].p = vertices[index2].p;
+
+ vertices[newindex2].next = vertices[index2].next;
+ vertices[newindex1].next = vertices[index1].next;
+
+ vertices[vertices[index2].next].previous = newindex2;
+ vertices[vertices[index1].next].previous = newindex1;
+
+ vertices[index1].next = newindex2;
+ vertices[newindex2].previous = index1;
+
+ vertices[index2].next = newindex1;
+ vertices[newindex1].previous = index2;
+}
+
+bool TPPLPartition::Below(TPPLPoint &p1, TPPLPoint &p2) {
+ if(p1.y < p2.y) return true;
+ else if(p1.y == p2.y) {
+ if(p1.x < p2.x) return true;
+ }
+ return false;
+}
+
+//sorts in the falling order of y values, if y is equal, x is used instead
+bool TPPLPartition::VertexSorter::operator() (long index1, long index2) const {
+ if(vertices[index1].p.y > vertices[index2].p.y) return true;
+ else if(vertices[index1].p.y == vertices[index2].p.y) {
+ if(vertices[index1].p.x > vertices[index2].p.x) return true;
+ }
+ return false;
+}
+
+bool TPPLPartition::ScanLineEdge::IsConvex(const TPPLPoint& p1, const TPPLPoint& p2, const TPPLPoint& p3) const {
+ tppl_float tmp;
+ tmp = (p3.y-p1.y)*(p2.x-p1.x)-(p3.x-p1.x)*(p2.y-p1.y);
+ if(tmp>0) return 1;
+ else return 0;
+}
+
+bool TPPLPartition::ScanLineEdge::operator < (const ScanLineEdge & other) const {
+ if(other.p1.y == other.p2.y) {
+ if(p1.y == p2.y) {
+ if(p1.y < other.p1.y) return true;
+ else return false;
+ }
+ if(IsConvex(p1,p2,other.p1)) return true;
+ else return false;
+ } else if(p1.y == p2.y) {
+ if(IsConvex(other.p1,other.p2,p1)) return false;
+ else return true;
+ } else if(p1.y < other.p1.y) {
+ if(IsConvex(other.p1,other.p2,p1)) return false;
+ else return true;
+ } else {
+ if(IsConvex(p1,p2,other.p1)) return true;
+ else return false;
+ }
+}
+
+//triangulates monotone polygon
+//O(n) time, O(n) space complexity
+int TPPLPartition::TriangulateMonotone(TPPLPoly *inPoly, list<TPPLPoly> *triangles) {
+ long i,i2,j,topindex,bottomindex,leftindex,rightindex,vindex;
+ TPPLPoint *points;
+ long numpoints;
+ TPPLPoly triangle;
+
+ numpoints = inPoly->GetNumPoints();
+ points = inPoly->GetPoints();
+
+ //trivial calses
+ if(numpoints < 3) return 0;
+ if(numpoints == 3) {
+ triangles->push_back(*inPoly);
+ }
+
+ topindex = 0; bottomindex=0;
+ for(i=1;i<numpoints;i++) {
+ if(Below(points[i],points[bottomindex])) bottomindex = i;
+ if(Below(points[topindex],points[i])) topindex = i;
+ }
+
+ //check if the poly is really monotone
+ i = topindex;
+ while(i!=bottomindex) {
+ i2 = i+1; if(i2>=numpoints) i2 = 0;
+ if(!Below(points[i2],points[i])) return 0;
+ i = i2;
+ }
+ i = bottomindex;
+ while(i!=topindex) {
+ i2 = i+1; if(i2>=numpoints) i2 = 0;
+ if(!Below(points[i],points[i2])) return 0;
+ i = i2;
+ }
+
+ char *vertextypes = new char[numpoints];
+ long *priority = new long[numpoints];
+
+ //merge left and right vertex chains
+ priority[0] = topindex;
+ vertextypes[topindex] = 0;
+ leftindex = topindex+1; if(leftindex>=numpoints) leftindex = 0;
+ rightindex = topindex-1; if(rightindex<0) rightindex = numpoints-1;
+ for(i=1;i<(numpoints-1);i++) {
+ if(leftindex==bottomindex) {
+ priority[i] = rightindex;
+ rightindex--; if(rightindex<0) rightindex = numpoints-1;
+ vertextypes[priority[i]] = -1;
+ } else if(rightindex==bottomindex) {
+ priority[i] = leftindex;
+ leftindex++; if(leftindex>=numpoints) leftindex = 0;
+ vertextypes[priority[i]] = 1;
+ } else {
+ if(Below(points[leftindex],points[rightindex])) {
+ priority[i] = rightindex;
+ rightindex--; if(rightindex<0) rightindex = numpoints-1;
+ vertextypes[priority[i]] = -1;
+ } else {
+ priority[i] = leftindex;
+ leftindex++; if(leftindex>=numpoints) leftindex = 0;
+ vertextypes[priority[i]] = 1;
+ }
+ }
+ }
+ priority[i] = bottomindex;
+ vertextypes[bottomindex] = 0;
+
+ long *stack = new long[numpoints];
+ long stackptr = 0;
+
+ stack[0] = priority[0];
+ stack[1] = priority[1];
+ stackptr = 2;
+
+ //for each vertex from top to bottom trim as many triangles as possible
+ for(i=2;i<(numpoints-1);i++) {
+ vindex = priority[i];
+ if(vertextypes[vindex]!=vertextypes[stack[stackptr-1]]) {
+ for(j=0;j<(stackptr-1);j++) {
+ if(vertextypes[vindex]==1) {
+ triangle.Triangle(points[stack[j+1]],points[stack[j]],points[vindex]);
+ } else {
+ triangle.Triangle(points[stack[j]],points[stack[j+1]],points[vindex]);
+ }
+ triangles->push_back(triangle);
+ }
+ stack[0] = priority[i-1];
+ stack[1] = priority[i];
+ stackptr = 2;
+ } else {
+ stackptr--;
+ while(stackptr>0) {
+ if(vertextypes[vindex]==1) {
+ if(IsConvex(points[vindex],points[stack[stackptr-1]],points[stack[stackptr]])) {
+ triangle.Triangle(points[vindex],points[stack[stackptr-1]],points[stack[stackptr]]);
+ triangles->push_back(triangle);
+ stackptr--;
+ } else {
+ break;
+ }
+ } else {
+ if(IsConvex(points[vindex],points[stack[stackptr]],points[stack[stackptr-1]])) {
+ triangle.Triangle(points[vindex],points[stack[stackptr]],points[stack[stackptr-1]]);
+ triangles->push_back(triangle);
+ stackptr--;
+ } else {
+ break;
+ }
+ }
+ }
+ stackptr++;
+ stack[stackptr] = vindex;
+ stackptr++;
+ }
+ }
+ vindex = priority[i];
+ for(j=0;j<(stackptr-1);j++) {
+ if(vertextypes[stack[j+1]]==1) {
+ triangle.Triangle(points[stack[j]],points[stack[j+1]],points[vindex]);
+ } else {
+ triangle.Triangle(points[stack[j+1]],points[stack[j]],points[vindex]);
+ }
+ triangles->push_back(triangle);
+ }
+
+ delete [] priority;
+ delete [] vertextypes;
+ delete [] stack;
+
+ return 1;
+}
+
+int TPPLPartition::Triangulate_MONO(list<TPPLPoly> *inpolys, list<TPPLPoly> *triangles) {
+ list<TPPLPoly> monotone;
+ list<TPPLPoly>::iterator iter;
+
+ if(!MonotonePartition(inpolys,&monotone)) return 0;
+ for(iter = monotone.begin(); iter!=monotone.end(); ++iter) {
+ if(!TriangulateMonotone(&(*iter),triangles)) return 0;
+ }
+ return 1;
+}
+
+int TPPLPartition::Triangulate_MONO(TPPLPoly *poly, list<TPPLPoly> *triangles) {
+ list<TPPLPoly> polys;
+ polys.push_back(*poly);
+
+ return Triangulate_MONO(&polys, triangles);
+}
diff --git a/xs/src/polypartition.h b/src/polypartition/polypartition.h
index 2596243ae..20ec0e24f 100644
--- a/xs/src/polypartition.h
+++ b/src/polypartition/polypartition.h
@@ -1,343 +1,343 @@
-//Copyright (C) 2011 by Ivan Fratric
-//
-//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.
-
-
-#include <list>
-using namespace std;
-
-typedef double tppl_float;
-
-#define TPPL_CCW 1
-#define TPPL_CW -1
-
-//2D point structure
-struct TPPLPoint {
- tppl_float x;
- tppl_float y;
-
- TPPLPoint operator + (const TPPLPoint& p) const {
- TPPLPoint r;
- r.x = x + p.x;
- r.y = y + p.y;
- return r;
- }
-
- TPPLPoint operator - (const TPPLPoint& p) const {
- TPPLPoint r;
- r.x = x - p.x;
- r.y = y - p.y;
- return r;
- }
-
- TPPLPoint operator * (const tppl_float f ) const {
- TPPLPoint r;
- r.x = x*f;
- r.y = y*f;
- return r;
- }
-
- TPPLPoint operator / (const tppl_float f ) const {
- TPPLPoint r;
- r.x = x/f;
- r.y = y/f;
- return r;
- }
-
- bool operator==(const TPPLPoint& p) const {
- if((x == p.x)&&(y==p.y)) return true;
- else return false;
- }
-
- bool operator!=(const TPPLPoint& p) const {
- if((x == p.x)&&(y==p.y)) return false;
- else return true;
- }
-};
-
-//Polygon implemented as an array of points with a 'hole' flag
-class TPPLPoly {
-protected:
-
- TPPLPoint *points;
- long numpoints;
- bool hole;
-
-public:
-
- //constructors/destructors
- TPPLPoly();
- ~TPPLPoly();
-
- TPPLPoly(const TPPLPoly &src);
- TPPLPoly& operator=(const TPPLPoly &src);
-
- //getters and setters
- long GetNumPoints() const {
- return numpoints;
- }
-
- bool IsHole() const {
- return hole;
- }
-
- void SetHole(bool hole) {
- this->hole = hole;
- }
-
- TPPLPoint &GetPoint(long i) {
- return points[i];
- }
-
- TPPLPoint *GetPoints() {
- return points;
- }
-
- TPPLPoint& operator[] (int i) {
- return points[i];
- }
-
- //clears the polygon points
- void Clear();
-
- //inits the polygon with numpoints vertices
- void Init(long numpoints);
-
- //creates a triangle with points p1,p2,p3
- void Triangle(TPPLPoint &p1, TPPLPoint &p2, TPPLPoint &p3);
-
- //inverts the orfer of vertices
- void Invert();
-
- //returns the orientation of the polygon
- //possible values:
- // TPPL_CCW : polygon vertices are in counter-clockwise order
- // TPPL_CW : polygon vertices are in clockwise order
- // 0 : the polygon has no (measurable) area
- int GetOrientation() const;
-
- //sets the polygon orientation
- //orientation can be
- // TPPL_CCW : sets vertices in counter-clockwise order
- // TPPL_CW : sets vertices in clockwise order
- void SetOrientation(int orientation);
-};
-
-class TPPLPartition {
-protected:
- struct PartitionVertex {
- bool isActive;
- bool isConvex;
- bool isEar;
-
- TPPLPoint p;
- tppl_float angle;
- PartitionVertex *previous;
- PartitionVertex *next;
- };
-
- struct MonotoneVertex {
- TPPLPoint p;
- long previous;
- long next;
- };
-
- class VertexSorter{
- MonotoneVertex *vertices;
- public:
- VertexSorter(MonotoneVertex *v) : vertices(v) {}
- bool operator() (long index1, long index2) const;
- };
-
- struct Diagonal {
- long index1;
- long index2;
- };
-
- //dynamic programming state for minimum-weight triangulation
- struct DPState {
- bool visible;
- tppl_float weight;
- long bestvertex;
- };
-
- //dynamic programming state for convex partitioning
- struct DPState2 {
- bool visible;
- long weight;
- list<Diagonal> pairs;
- };
-
- //edge that intersects the scanline
- struct ScanLineEdge {
- long index;
- TPPLPoint p1;
- TPPLPoint p2;
-
- //determines if the edge is to the left of another edge
- bool operator< (const ScanLineEdge & other) const;
-
- bool IsConvex(const TPPLPoint& p1, const TPPLPoint& p2, const TPPLPoint& p3) const;
- };
-
- //standard helper functions
- bool IsConvex(TPPLPoint& p1, TPPLPoint& p2, TPPLPoint& p3);
- bool IsReflex(TPPLPoint& p1, TPPLPoint& p2, TPPLPoint& p3);
- bool IsInside(TPPLPoint& p1, TPPLPoint& p2, TPPLPoint& p3, TPPLPoint &p);
-
- bool InCone(TPPLPoint &p1, TPPLPoint &p2, TPPLPoint &p3, TPPLPoint &p);
- bool InCone(PartitionVertex *v, TPPLPoint &p);
-
- int Intersects(TPPLPoint &p11, TPPLPoint &p12, TPPLPoint &p21, TPPLPoint &p22);
-
- TPPLPoint Normalize(const TPPLPoint &p);
- tppl_float Distance(const TPPLPoint &p1, const TPPLPoint &p2);
-
- //helper functions for Triangulate_EC
- void UpdateVertexReflexity(PartitionVertex *v);
- void UpdateVertex(PartitionVertex *v,PartitionVertex *vertices, long numvertices);
-
- //helper functions for ConvexPartition_OPT
- void UpdateState(long a, long b, long w, long i, long j, DPState2 **dpstates);
- void TypeA(long i, long j, long k, PartitionVertex *vertices, DPState2 **dpstates);
- void TypeB(long i, long j, long k, PartitionVertex *vertices, DPState2 **dpstates);
-
- //helper functions for MonotonePartition
- bool Below(TPPLPoint &p1, TPPLPoint &p2);
- void AddDiagonal(MonotoneVertex *vertices, long *numvertices, long index1, long index2);
-
- //triangulates a monotone polygon, used in Triangulate_MONO
- int TriangulateMonotone(TPPLPoly *inPoly, list<TPPLPoly> *triangles);
-
-public:
-
- //simple heuristic procedure for removing holes from a list of polygons
- //works by creating a diagonal from the rightmost hole vertex to some visible vertex
- //time complexity: O(h*(n^2)), h is the number of holes, n is the number of vertices
- //space complexity: O(n)
- //params:
- // inpolys : a list of polygons that can contain holes
- // vertices of all non-hole polys have to be in counter-clockwise order
- // vertices of all hole polys have to be in clockwise order
- // outpolys : a list of polygons without holes
- //returns 1 on success, 0 on failure
- int RemoveHoles(list<TPPLPoly> *inpolys, list<TPPLPoly> *outpolys);
-
- //triangulates a polygon by ear clipping
- //time complexity O(n^2), n is the number of vertices
- //space complexity: O(n)
- //params:
- // poly : an input polygon to be triangulated
- // vertices have to be in counter-clockwise order
- // triangles : a list of triangles (result)
- //returns 1 on success, 0 on failure
- int Triangulate_EC(TPPLPoly *poly, list<TPPLPoly> *triangles);
-
- //triangulates a list of polygons that may contain holes by ear clipping algorithm
- //first calls RemoveHoles to get rid of the holes, and then Triangulate_EC for each resulting polygon
- //time complexity: O(h*(n^2)), h is the number of holes, n is the number of vertices
- //space complexity: O(n)
- //params:
- // inpolys : a list of polygons to be triangulated (can contain holes)
- // vertices of all non-hole polys have to be in counter-clockwise order
- // vertices of all hole polys have to be in clockwise order
- // triangles : a list of triangles (result)
- //returns 1 on success, 0 on failure
- int Triangulate_EC(list<TPPLPoly> *inpolys, list<TPPLPoly> *triangles);
-
- //creates an optimal polygon triangulation in terms of minimal edge length
- //time complexity: O(n^3), n is the number of vertices
- //space complexity: O(n^2)
- //params:
- // poly : an input polygon to be triangulated
- // vertices have to be in counter-clockwise order
- // triangles : a list of triangles (result)
- //returns 1 on success, 0 on failure
- int Triangulate_OPT(TPPLPoly *poly, list<TPPLPoly> *triangles);
-
- //triangulates a polygons by firstly partitioning it into monotone polygons
- //time complexity: O(n*log(n)), n is the number of vertices
- //space complexity: O(n)
- //params:
- // poly : an input polygon to be triangulated
- // vertices have to be in counter-clockwise order
- // triangles : a list of triangles (result)
- //returns 1 on success, 0 on failure
- int Triangulate_MONO(TPPLPoly *poly, list<TPPLPoly> *triangles);
-
- //triangulates a list of polygons by firstly partitioning them into monotone polygons
- //time complexity: O(n*log(n)), n is the number of vertices
- //space complexity: O(n)
- //params:
- // inpolys : a list of polygons to be triangulated (can contain holes)
- // vertices of all non-hole polys have to be in counter-clockwise order
- // vertices of all hole polys have to be in clockwise order
- // triangles : a list of triangles (result)
- //returns 1 on success, 0 on failure
- int Triangulate_MONO(list<TPPLPoly> *inpolys, list<TPPLPoly> *triangles);
-
- //creates a monotone partition of a list of polygons that can contain holes
- //time complexity: O(n*log(n)), n is the number of vertices
- //space complexity: O(n)
- //params:
- // inpolys : a list of polygons to be triangulated (can contain holes)
- // vertices of all non-hole polys have to be in counter-clockwise order
- // vertices of all hole polys have to be in clockwise order
- // monotonePolys : a list of monotone polygons (result)
- //returns 1 on success, 0 on failure
- int MonotonePartition(list<TPPLPoly> *inpolys, list<TPPLPoly> *monotonePolys);
-
- //partitions a polygon into convex polygons by using Hertel-Mehlhorn algorithm
- //the algorithm gives at most four times the number of parts as the optimal algorithm
- //however, in practice it works much better than that and often gives optimal partition
- //uses triangulation obtained by ear clipping as intermediate result
- //time complexity O(n^2), n is the number of vertices
- //space complexity: O(n)
- //params:
- // poly : an input polygon to be partitioned
- // vertices have to be in counter-clockwise order
- // parts : resulting list of convex polygons
- //returns 1 on success, 0 on failure
- int ConvexPartition_HM(TPPLPoly *poly, list<TPPLPoly> *parts);
-
- //partitions a list of polygons into convex parts by using Hertel-Mehlhorn algorithm
- //the algorithm gives at most four times the number of parts as the optimal algorithm
- //however, in practice it works much better than that and often gives optimal partition
- //uses triangulation obtained by ear clipping as intermediate result
- //time complexity O(n^2), n is the number of vertices
- //space complexity: O(n)
- //params:
- // inpolys : an input list of polygons to be partitioned
- // vertices of all non-hole polys have to be in counter-clockwise order
- // vertices of all hole polys have to be in clockwise order
- // parts : resulting list of convex polygons
- //returns 1 on success, 0 on failure
- int ConvexPartition_HM(list<TPPLPoly> *inpolys, list<TPPLPoly> *parts);
-
- //optimal convex partitioning (in terms of number of resulting convex polygons)
- //using the Keil-Snoeyink algorithm
- //M. Keil, J. Snoeyink, "On the time bound for convex decomposition of simple polygons", 1998
- //time complexity O(n^3), n is the number of vertices
- //space complexity: O(n^3)
- // poly : an input polygon to be partitioned
- // vertices have to be in counter-clockwise order
- // parts : resulting list of convex polygons
- //returns 1 on success, 0 on failure
- int ConvexPartition_OPT(TPPLPoly *poly, list<TPPLPoly> *parts);
-};
+//Copyright (C) 2011 by Ivan Fratric
+//
+//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.
+
+
+#include <list>
+using namespace std;
+
+typedef double tppl_float;
+
+#define TPPL_CCW 1
+#define TPPL_CW -1
+
+//2D point structure
+struct TPPLPoint {
+ tppl_float x;
+ tppl_float y;
+
+ TPPLPoint operator + (const TPPLPoint& p) const {
+ TPPLPoint r;
+ r.x = x + p.x;
+ r.y = y + p.y;
+ return r;
+ }
+
+ TPPLPoint operator - (const TPPLPoint& p) const {
+ TPPLPoint r;
+ r.x = x - p.x;
+ r.y = y - p.y;
+ return r;
+ }
+
+ TPPLPoint operator * (const tppl_float f ) const {
+ TPPLPoint r;
+ r.x = x*f;
+ r.y = y*f;
+ return r;
+ }
+
+ TPPLPoint operator / (const tppl_float f ) const {
+ TPPLPoint r;
+ r.x = x/f;
+ r.y = y/f;
+ return r;
+ }
+
+ bool operator==(const TPPLPoint& p) const {
+ if((x == p.x)&&(y==p.y)) return true;
+ else return false;
+ }
+
+ bool operator!=(const TPPLPoint& p) const {
+ if((x == p.x)&&(y==p.y)) return false;
+ else return true;
+ }
+};
+
+//Polygon implemented as an array of points with a 'hole' flag
+class TPPLPoly {
+protected:
+
+ TPPLPoint *points;
+ long numpoints;
+ bool hole;
+
+public:
+
+ //constructors/destructors
+ TPPLPoly();
+ ~TPPLPoly();
+
+ TPPLPoly(const TPPLPoly &src);
+ TPPLPoly& operator=(const TPPLPoly &src);
+
+ //getters and setters
+ long GetNumPoints() const {
+ return numpoints;
+ }
+
+ bool IsHole() const {
+ return hole;
+ }
+
+ void SetHole(bool hole) {
+ this->hole = hole;
+ }
+
+ TPPLPoint &GetPoint(long i) {
+ return points[i];
+ }
+
+ TPPLPoint *GetPoints() {
+ return points;
+ }
+
+ TPPLPoint& operator[] (int i) {
+ return points[i];
+ }
+
+ //clears the polygon points
+ void Clear();
+
+ //inits the polygon with numpoints vertices
+ void Init(long numpoints);
+
+ //creates a triangle with points p1,p2,p3
+ void Triangle(TPPLPoint &p1, TPPLPoint &p2, TPPLPoint &p3);
+
+ //inverts the orfer of vertices
+ void Invert();
+
+ //returns the orientation of the polygon
+ //possible values:
+ // TPPL_CCW : polygon vertices are in counter-clockwise order
+ // TPPL_CW : polygon vertices are in clockwise order
+ // 0 : the polygon has no (measurable) area
+ int GetOrientation() const;
+
+ //sets the polygon orientation
+ //orientation can be
+ // TPPL_CCW : sets vertices in counter-clockwise order
+ // TPPL_CW : sets vertices in clockwise order
+ void SetOrientation(int orientation);
+};
+
+class TPPLPartition {
+protected:
+ struct PartitionVertex {
+ bool isActive;
+ bool isConvex;
+ bool isEar;
+
+ TPPLPoint p;
+ tppl_float angle;
+ PartitionVertex *previous;
+ PartitionVertex *next;
+ };
+
+ struct MonotoneVertex {
+ TPPLPoint p;
+ long previous;
+ long next;
+ };
+
+ class VertexSorter{
+ MonotoneVertex *vertices;
+ public:
+ VertexSorter(MonotoneVertex *v) : vertices(v) {}
+ bool operator() (long index1, long index2) const;
+ };
+
+ struct Diagonal {
+ long index1;
+ long index2;
+ };
+
+ //dynamic programming state for minimum-weight triangulation
+ struct DPState {
+ bool visible;
+ tppl_float weight;
+ long bestvertex;
+ };
+
+ //dynamic programming state for convex partitioning
+ struct DPState2 {
+ bool visible;
+ long weight;
+ list<Diagonal> pairs;
+ };
+
+ //edge that intersects the scanline
+ struct ScanLineEdge {
+ long index;
+ TPPLPoint p1;
+ TPPLPoint p2;
+
+ //determines if the edge is to the left of another edge
+ bool operator< (const ScanLineEdge & other) const;
+
+ bool IsConvex(const TPPLPoint& p1, const TPPLPoint& p2, const TPPLPoint& p3) const;
+ };
+
+ //standard helper functions
+ bool IsConvex(TPPLPoint& p1, TPPLPoint& p2, TPPLPoint& p3);
+ bool IsReflex(TPPLPoint& p1, TPPLPoint& p2, TPPLPoint& p3);
+ bool IsInside(TPPLPoint& p1, TPPLPoint& p2, TPPLPoint& p3, TPPLPoint &p);
+
+ bool InCone(TPPLPoint &p1, TPPLPoint &p2, TPPLPoint &p3, TPPLPoint &p);
+ bool InCone(PartitionVertex *v, TPPLPoint &p);
+
+ int Intersects(TPPLPoint &p11, TPPLPoint &p12, TPPLPoint &p21, TPPLPoint &p22);
+
+ TPPLPoint Normalize(const TPPLPoint &p);
+ tppl_float Distance(const TPPLPoint &p1, const TPPLPoint &p2);
+
+ //helper functions for Triangulate_EC
+ void UpdateVertexReflexity(PartitionVertex *v);
+ void UpdateVertex(PartitionVertex *v,PartitionVertex *vertices, long numvertices);
+
+ //helper functions for ConvexPartition_OPT
+ void UpdateState(long a, long b, long w, long i, long j, DPState2 **dpstates);
+ void TypeA(long i, long j, long k, PartitionVertex *vertices, DPState2 **dpstates);
+ void TypeB(long i, long j, long k, PartitionVertex *vertices, DPState2 **dpstates);
+
+ //helper functions for MonotonePartition
+ bool Below(TPPLPoint &p1, TPPLPoint &p2);
+ void AddDiagonal(MonotoneVertex *vertices, long *numvertices, long index1, long index2);
+
+ //triangulates a monotone polygon, used in Triangulate_MONO
+ int TriangulateMonotone(TPPLPoly *inPoly, list<TPPLPoly> *triangles);
+
+public:
+
+ //simple heuristic procedure for removing holes from a list of polygons
+ //works by creating a diagonal from the rightmost hole vertex to some visible vertex
+ //time complexity: O(h*(n^2)), h is the number of holes, n is the number of vertices
+ //space complexity: O(n)
+ //params:
+ // inpolys : a list of polygons that can contain holes
+ // vertices of all non-hole polys have to be in counter-clockwise order
+ // vertices of all hole polys have to be in clockwise order
+ // outpolys : a list of polygons without holes
+ //returns 1 on success, 0 on failure
+ int RemoveHoles(list<TPPLPoly> *inpolys, list<TPPLPoly> *outpolys);
+
+ //triangulates a polygon by ear clipping
+ //time complexity O(n^2), n is the number of vertices
+ //space complexity: O(n)
+ //params:
+ // poly : an input polygon to be triangulated
+ // vertices have to be in counter-clockwise order
+ // triangles : a list of triangles (result)
+ //returns 1 on success, 0 on failure
+ int Triangulate_EC(TPPLPoly *poly, list<TPPLPoly> *triangles);
+
+ //triangulates a list of polygons that may contain holes by ear clipping algorithm
+ //first calls RemoveHoles to get rid of the holes, and then Triangulate_EC for each resulting polygon
+ //time complexity: O(h*(n^2)), h is the number of holes, n is the number of vertices
+ //space complexity: O(n)
+ //params:
+ // inpolys : a list of polygons to be triangulated (can contain holes)
+ // vertices of all non-hole polys have to be in counter-clockwise order
+ // vertices of all hole polys have to be in clockwise order
+ // triangles : a list of triangles (result)
+ //returns 1 on success, 0 on failure
+ int Triangulate_EC(list<TPPLPoly> *inpolys, list<TPPLPoly> *triangles);
+
+ //creates an optimal polygon triangulation in terms of minimal edge length
+ //time complexity: O(n^3), n is the number of vertices
+ //space complexity: O(n^2)
+ //params:
+ // poly : an input polygon to be triangulated
+ // vertices have to be in counter-clockwise order
+ // triangles : a list of triangles (result)
+ //returns 1 on success, 0 on failure
+ int Triangulate_OPT(TPPLPoly *poly, list<TPPLPoly> *triangles);
+
+ //triangulates a polygons by firstly partitioning it into monotone polygons
+ //time complexity: O(n*log(n)), n is the number of vertices
+ //space complexity: O(n)
+ //params:
+ // poly : an input polygon to be triangulated
+ // vertices have to be in counter-clockwise order
+ // triangles : a list of triangles (result)
+ //returns 1 on success, 0 on failure
+ int Triangulate_MONO(TPPLPoly *poly, list<TPPLPoly> *triangles);
+
+ //triangulates a list of polygons by firstly partitioning them into monotone polygons
+ //time complexity: O(n*log(n)), n is the number of vertices
+ //space complexity: O(n)
+ //params:
+ // inpolys : a list of polygons to be triangulated (can contain holes)
+ // vertices of all non-hole polys have to be in counter-clockwise order
+ // vertices of all hole polys have to be in clockwise order
+ // triangles : a list of triangles (result)
+ //returns 1 on success, 0 on failure
+ int Triangulate_MONO(list<TPPLPoly> *inpolys, list<TPPLPoly> *triangles);
+
+ //creates a monotone partition of a list of polygons that can contain holes
+ //time complexity: O(n*log(n)), n is the number of vertices
+ //space complexity: O(n)
+ //params:
+ // inpolys : a list of polygons to be triangulated (can contain holes)
+ // vertices of all non-hole polys have to be in counter-clockwise order
+ // vertices of all hole polys have to be in clockwise order
+ // monotonePolys : a list of monotone polygons (result)
+ //returns 1 on success, 0 on failure
+ int MonotonePartition(list<TPPLPoly> *inpolys, list<TPPLPoly> *monotonePolys);
+
+ //partitions a polygon into convex polygons by using Hertel-Mehlhorn algorithm
+ //the algorithm gives at most four times the number of parts as the optimal algorithm
+ //however, in practice it works much better than that and often gives optimal partition
+ //uses triangulation obtained by ear clipping as intermediate result
+ //time complexity O(n^2), n is the number of vertices
+ //space complexity: O(n)
+ //params:
+ // poly : an input polygon to be partitioned
+ // vertices have to be in counter-clockwise order
+ // parts : resulting list of convex polygons
+ //returns 1 on success, 0 on failure
+ int ConvexPartition_HM(TPPLPoly *poly, list<TPPLPoly> *parts);
+
+ //partitions a list of polygons into convex parts by using Hertel-Mehlhorn algorithm
+ //the algorithm gives at most four times the number of parts as the optimal algorithm
+ //however, in practice it works much better than that and often gives optimal partition
+ //uses triangulation obtained by ear clipping as intermediate result
+ //time complexity O(n^2), n is the number of vertices
+ //space complexity: O(n)
+ //params:
+ // inpolys : an input list of polygons to be partitioned
+ // vertices of all non-hole polys have to be in counter-clockwise order
+ // vertices of all hole polys have to be in clockwise order
+ // parts : resulting list of convex polygons
+ //returns 1 on success, 0 on failure
+ int ConvexPartition_HM(list<TPPLPoly> *inpolys, list<TPPLPoly> *parts);
+
+ //optimal convex partitioning (in terms of number of resulting convex polygons)
+ //using the Keil-Snoeyink algorithm
+ //M. Keil, J. Snoeyink, "On the time bound for convex decomposition of simple polygons", 1998
+ //time complexity O(n^3), n is the number of vertices
+ //space complexity: O(n^3)
+ // poly : an input polygon to be partitioned
+ // vertices have to be in counter-clockwise order
+ // parts : resulting list of convex polygons
+ //returns 1 on success, 0 on failure
+ int ConvexPartition_OPT(TPPLPoly *poly, list<TPPLPoly> *parts);
+};
diff --git a/xs/src/qhull/Announce.txt b/src/qhull/Announce.txt
index 635cff1af..635cff1af 100644
--- a/xs/src/qhull/Announce.txt
+++ b/src/qhull/Announce.txt
diff --git a/xs/src/qhull/CMakeLists.txt b/src/qhull/CMakeLists.txt
index d798b018f..d798b018f 100644
--- a/xs/src/qhull/CMakeLists.txt
+++ b/src/qhull/CMakeLists.txt
diff --git a/xs/src/qhull/COPYING.txt b/src/qhull/COPYING.txt
index 2895ec6a3..2895ec6a3 100644
--- a/xs/src/qhull/COPYING.txt
+++ b/src/qhull/COPYING.txt
diff --git a/xs/src/qhull/README.txt b/src/qhull/README.txt
index f4c7a3b22..f4c7a3b22 100644
--- a/xs/src/qhull/README.txt
+++ b/src/qhull/README.txt
diff --git a/xs/src/qhull/REGISTER.txt b/src/qhull/REGISTER.txt
index 16ccb1a58..16ccb1a58 100644
--- a/xs/src/qhull/REGISTER.txt
+++ b/src/qhull/REGISTER.txt
diff --git a/xs/src/qhull/html/index.htm b/src/qhull/html/index.htm
index ca4789b47..ca4789b47 100644
--- a/xs/src/qhull/html/index.htm
+++ b/src/qhull/html/index.htm
diff --git a/xs/src/qhull/html/normal_voronoi_knauss_oesterle.jpg b/src/qhull/html/normal_voronoi_knauss_oesterle.jpg
index f46d42127..f46d42127 100644
--- a/xs/src/qhull/html/normal_voronoi_knauss_oesterle.jpg
+++ b/src/qhull/html/normal_voronoi_knauss_oesterle.jpg
Binary files differ
diff --git a/xs/src/qhull/html/qconvex.htm b/src/qhull/html/qconvex.htm
index 38a363b08..38a363b08 100644
--- a/xs/src/qhull/html/qconvex.htm
+++ b/src/qhull/html/qconvex.htm
diff --git a/xs/src/qhull/html/qdelau_f.htm b/src/qhull/html/qdelau_f.htm
index d8981e16b..d8981e16b 100644
--- a/xs/src/qhull/html/qdelau_f.htm
+++ b/src/qhull/html/qdelau_f.htm
diff --git a/xs/src/qhull/html/qdelaun.htm b/src/qhull/html/qdelaun.htm
index a42223c66..a42223c66 100644
--- a/xs/src/qhull/html/qdelaun.htm
+++ b/src/qhull/html/qdelaun.htm
diff --git a/xs/src/qhull/html/qh--4d.gif b/src/qhull/html/qh--4d.gif
index 08be18c8a..08be18c8a 100644
--- a/xs/src/qhull/html/qh--4d.gif
+++ b/src/qhull/html/qh--4d.gif
Binary files differ
diff --git a/xs/src/qhull/html/qh--cone.gif b/src/qhull/html/qh--cone.gif
index 78470ee8f..78470ee8f 100644
--- a/xs/src/qhull/html/qh--cone.gif
+++ b/src/qhull/html/qh--cone.gif
Binary files differ
diff --git a/xs/src/qhull/html/qh--dt.gif b/src/qhull/html/qh--dt.gif
index b6d4e2672..b6d4e2672 100644
--- a/xs/src/qhull/html/qh--dt.gif
+++ b/src/qhull/html/qh--dt.gif
Binary files differ
diff --git a/xs/src/qhull/html/qh--geom.gif b/src/qhull/html/qh--geom.gif
index 9c70b5499..9c70b5499 100644
--- a/xs/src/qhull/html/qh--geom.gif
+++ b/src/qhull/html/qh--geom.gif
Binary files differ
diff --git a/xs/src/qhull/html/qh--half.gif b/src/qhull/html/qh--half.gif
index 80a4d0883..80a4d0883 100644
--- a/xs/src/qhull/html/qh--half.gif
+++ b/src/qhull/html/qh--half.gif
Binary files differ
diff --git a/xs/src/qhull/html/qh--rand.gif b/src/qhull/html/qh--rand.gif
index 4d4e4daee..4d4e4daee 100644
--- a/xs/src/qhull/html/qh--rand.gif
+++ b/src/qhull/html/qh--rand.gif
Binary files differ
diff --git a/xs/src/qhull/html/qh-code.htm b/src/qhull/html/qh-code.htm
index fff7faddb..fff7faddb 100644
--- a/xs/src/qhull/html/qh-code.htm
+++ b/src/qhull/html/qh-code.htm
diff --git a/xs/src/qhull/html/qh-eg.htm b/src/qhull/html/qh-eg.htm
index a08f0d13f..a08f0d13f 100644
--- a/xs/src/qhull/html/qh-eg.htm
+++ b/src/qhull/html/qh-eg.htm
diff --git a/xs/src/qhull/html/qh-faq.htm b/src/qhull/html/qh-faq.htm
index feda544a7..feda544a7 100644
--- a/xs/src/qhull/html/qh-faq.htm
+++ b/src/qhull/html/qh-faq.htm
diff --git a/xs/src/qhull/html/qh-get.htm b/src/qhull/html/qh-get.htm
index c39ed2256..c39ed2256 100644
--- a/xs/src/qhull/html/qh-get.htm
+++ b/src/qhull/html/qh-get.htm
diff --git a/xs/src/qhull/html/qh-impre.htm b/src/qhull/html/qh-impre.htm
index cfbe0acb8..cfbe0acb8 100644
--- a/xs/src/qhull/html/qh-impre.htm
+++ b/src/qhull/html/qh-impre.htm
diff --git a/xs/src/qhull/html/qh-optc.htm b/src/qhull/html/qh-optc.htm
index 87308180d..87308180d 100644
--- a/xs/src/qhull/html/qh-optc.htm
+++ b/src/qhull/html/qh-optc.htm
diff --git a/xs/src/qhull/html/qh-optf.htm b/src/qhull/html/qh-optf.htm
index 3c7a2b1db..3c7a2b1db 100644
--- a/xs/src/qhull/html/qh-optf.htm
+++ b/src/qhull/html/qh-optf.htm
diff --git a/xs/src/qhull/html/qh-optg.htm b/src/qhull/html/qh-optg.htm
index a56e29df1..a56e29df1 100644
--- a/xs/src/qhull/html/qh-optg.htm
+++ b/src/qhull/html/qh-optg.htm
diff --git a/xs/src/qhull/html/qh-opto.htm b/src/qhull/html/qh-opto.htm
index e7b21745c..e7b21745c 100644
--- a/xs/src/qhull/html/qh-opto.htm
+++ b/src/qhull/html/qh-opto.htm
diff --git a/xs/src/qhull/html/qh-optp.htm b/src/qhull/html/qh-optp.htm
index 9c6df90f5..9c6df90f5 100644
--- a/xs/src/qhull/html/qh-optp.htm
+++ b/src/qhull/html/qh-optp.htm
diff --git a/xs/src/qhull/html/qh-optq.htm b/src/qhull/html/qh-optq.htm
index 2edbb1fd4..2edbb1fd4 100644
--- a/xs/src/qhull/html/qh-optq.htm
+++ b/src/qhull/html/qh-optq.htm
diff --git a/xs/src/qhull/html/qh-optt.htm b/src/qhull/html/qh-optt.htm
index 0709f58c6..0709f58c6 100644
--- a/xs/src/qhull/html/qh-optt.htm
+++ b/src/qhull/html/qh-optt.htm
diff --git a/xs/src/qhull/html/qh-quick.htm b/src/qhull/html/qh-quick.htm
index 9d52e7d75..9d52e7d75 100644
--- a/xs/src/qhull/html/qh-quick.htm
+++ b/src/qhull/html/qh-quick.htm
diff --git a/xs/src/qhull/html/qhalf.htm b/src/qhull/html/qhalf.htm
index c87fe719e..c87fe719e 100644
--- a/xs/src/qhull/html/qhalf.htm
+++ b/src/qhull/html/qhalf.htm
diff --git a/xs/src/qhull/html/qhull-cpp.xml b/src/qhull/html/qhull-cpp.xml
index ae755e826..ae755e826 100644
--- a/xs/src/qhull/html/qhull-cpp.xml
+++ b/src/qhull/html/qhull-cpp.xml
diff --git a/xs/src/qhull/html/qhull.htm b/src/qhull/html/qhull.htm
index 0a2aa75e0..0a2aa75e0 100644
--- a/xs/src/qhull/html/qhull.htm
+++ b/src/qhull/html/qhull.htm
diff --git a/xs/src/qhull/html/qhull.man b/src/qhull/html/qhull.man
index 8d1dc08ac..8d1dc08ac 100644
--- a/xs/src/qhull/html/qhull.man
+++ b/src/qhull/html/qhull.man
diff --git a/xs/src/qhull/html/qhull.txt b/src/qhull/html/qhull.txt
index 03753547e..03753547e 100644
--- a/xs/src/qhull/html/qhull.txt
+++ b/src/qhull/html/qhull.txt
diff --git a/xs/src/qhull/html/qvoron_f.htm b/src/qhull/html/qvoron_f.htm
index db538b5ab..db538b5ab 100644
--- a/xs/src/qhull/html/qvoron_f.htm
+++ b/src/qhull/html/qvoron_f.htm
diff --git a/xs/src/qhull/html/qvoronoi.htm b/src/qhull/html/qvoronoi.htm
index 6d81d48c1..6d81d48c1 100644
--- a/xs/src/qhull/html/qvoronoi.htm
+++ b/src/qhull/html/qvoronoi.htm
diff --git a/xs/src/qhull/html/rbox.htm b/src/qhull/html/rbox.htm
index 9c28face5..9c28face5 100644
--- a/xs/src/qhull/html/rbox.htm
+++ b/src/qhull/html/rbox.htm
diff --git a/xs/src/qhull/html/rbox.man b/src/qhull/html/rbox.man
index 3ea6395e6..3ea6395e6 100644
--- a/xs/src/qhull/html/rbox.man
+++ b/src/qhull/html/rbox.man
diff --git a/xs/src/qhull/html/rbox.txt b/src/qhull/html/rbox.txt
index e3cf72189..e3cf72189 100644
--- a/xs/src/qhull/html/rbox.txt
+++ b/src/qhull/html/rbox.txt
diff --git a/xs/src/qhull/index.htm b/src/qhull/index.htm
index 4ea7806c9..4ea7806c9 100644
--- a/xs/src/qhull/index.htm
+++ b/src/qhull/index.htm
diff --git a/xs/src/qhull/origCMakeLists.txt b/src/qhull/origCMakeLists.txt
index 1034d1dea..1034d1dea 100644
--- a/xs/src/qhull/origCMakeLists.txt
+++ b/src/qhull/origCMakeLists.txt
diff --git a/xs/src/qhull/src/Changes.txt b/src/qhull/src/Changes.txt
index 2dbf41e39..2dbf41e39 100644
--- a/xs/src/qhull/src/Changes.txt
+++ b/src/qhull/src/Changes.txt
diff --git a/xs/src/qhull/src/libqhull/DEPRECATED.txt b/src/qhull/src/libqhull/DEPRECATED.txt
index 617275c14..617275c14 100644
--- a/xs/src/qhull/src/libqhull/DEPRECATED.txt
+++ b/src/qhull/src/libqhull/DEPRECATED.txt
diff --git a/xs/src/qhull/src/libqhull/Makefile b/src/qhull/src/libqhull/Makefile
index bcad65777..bcad65777 100644
--- a/xs/src/qhull/src/libqhull/Makefile
+++ b/src/qhull/src/libqhull/Makefile
diff --git a/xs/src/qhull/src/libqhull/Mborland b/src/qhull/src/libqhull/Mborland
index 46d88dbd4..46d88dbd4 100644
--- a/xs/src/qhull/src/libqhull/Mborland
+++ b/src/qhull/src/libqhull/Mborland
diff --git a/xs/src/qhull/src/libqhull/geom.c b/src/qhull/src/libqhull/geom.c
index 71444f05a..71444f05a 100644
--- a/xs/src/qhull/src/libqhull/geom.c
+++ b/src/qhull/src/libqhull/geom.c
diff --git a/xs/src/qhull/src/libqhull/geom.h b/src/qhull/src/libqhull/geom.h
index 16ef48d2d..16ef48d2d 100644
--- a/xs/src/qhull/src/libqhull/geom.h
+++ b/src/qhull/src/libqhull/geom.h
diff --git a/xs/src/qhull/src/libqhull/geom2.c b/src/qhull/src/libqhull/geom2.c
index 82ec4936e..82ec4936e 100644
--- a/xs/src/qhull/src/libqhull/geom2.c
+++ b/src/qhull/src/libqhull/geom2.c
diff --git a/xs/src/qhull/src/libqhull/global.c b/src/qhull/src/libqhull/global.c
index 0328fea7b..0328fea7b 100644
--- a/xs/src/qhull/src/libqhull/global.c
+++ b/src/qhull/src/libqhull/global.c
diff --git a/xs/src/qhull/src/libqhull/index.htm b/src/qhull/src/libqhull/index.htm
index 62b9d9970..62b9d9970 100644
--- a/xs/src/qhull/src/libqhull/index.htm
+++ b/src/qhull/src/libqhull/index.htm
diff --git a/xs/src/qhull/src/libqhull/io.c b/src/qhull/src/libqhull/io.c
index 401987ec0..401987ec0 100644
--- a/xs/src/qhull/src/libqhull/io.c
+++ b/src/qhull/src/libqhull/io.c
diff --git a/xs/src/qhull/src/libqhull/io.h b/src/qhull/src/libqhull/io.h
index eca0369d3..eca0369d3 100644
--- a/xs/src/qhull/src/libqhull/io.h
+++ b/src/qhull/src/libqhull/io.h
diff --git a/xs/src/qhull/src/libqhull/libqhull.c b/src/qhull/src/libqhull/libqhull.c
index 7696a8a9f..7696a8a9f 100644
--- a/xs/src/qhull/src/libqhull/libqhull.c
+++ b/src/qhull/src/libqhull/libqhull.c
diff --git a/xs/src/qhull/src/libqhull/libqhull.h b/src/qhull/src/libqhull/libqhull.h
index 677085808..677085808 100644
--- a/xs/src/qhull/src/libqhull/libqhull.h
+++ b/src/qhull/src/libqhull/libqhull.h
diff --git a/xs/src/qhull/src/libqhull/libqhull.pro b/src/qhull/src/libqhull/libqhull.pro
index 18005da59..18005da59 100644
--- a/xs/src/qhull/src/libqhull/libqhull.pro
+++ b/src/qhull/src/libqhull/libqhull.pro
diff --git a/xs/src/qhull/src/libqhull/mem.c b/src/qhull/src/libqhull/mem.c
index db72bb4e1..db72bb4e1 100644
--- a/xs/src/qhull/src/libqhull/mem.c
+++ b/src/qhull/src/libqhull/mem.c
diff --git a/xs/src/qhull/src/libqhull/mem.h b/src/qhull/src/libqhull/mem.h
index 453f319df..453f319df 100644
--- a/xs/src/qhull/src/libqhull/mem.h
+++ b/src/qhull/src/libqhull/mem.h
diff --git a/xs/src/qhull/src/libqhull/merge.c b/src/qhull/src/libqhull/merge.c
index 22104dc03..22104dc03 100644
--- a/xs/src/qhull/src/libqhull/merge.c
+++ b/src/qhull/src/libqhull/merge.c
diff --git a/xs/src/qhull/src/libqhull/merge.h b/src/qhull/src/libqhull/merge.h
index 7f5ec3fb6..7f5ec3fb6 100644
--- a/xs/src/qhull/src/libqhull/merge.h
+++ b/src/qhull/src/libqhull/merge.h
diff --git a/xs/src/qhull/src/libqhull/poly.c b/src/qhull/src/libqhull/poly.c
index b8db6a9ef..b8db6a9ef 100644
--- a/xs/src/qhull/src/libqhull/poly.c
+++ b/src/qhull/src/libqhull/poly.c
diff --git a/xs/src/qhull/src/libqhull/poly.h b/src/qhull/src/libqhull/poly.h
index af8b42077..af8b42077 100644
--- a/xs/src/qhull/src/libqhull/poly.h
+++ b/src/qhull/src/libqhull/poly.h
diff --git a/xs/src/qhull/src/libqhull/poly2.c b/src/qhull/src/libqhull/poly2.c
index de3e6ad0b..de3e6ad0b 100644
--- a/xs/src/qhull/src/libqhull/poly2.c
+++ b/src/qhull/src/libqhull/poly2.c
diff --git a/xs/src/qhull/src/libqhull/qh-geom.htm b/src/qhull/src/libqhull/qh-geom.htm
index 6dc7465eb..6dc7465eb 100644
--- a/xs/src/qhull/src/libqhull/qh-geom.htm
+++ b/src/qhull/src/libqhull/qh-geom.htm
diff --git a/xs/src/qhull/src/libqhull/qh-globa.htm b/src/qhull/src/libqhull/qh-globa.htm
index c87508b66..c87508b66 100644
--- a/xs/src/qhull/src/libqhull/qh-globa.htm
+++ b/src/qhull/src/libqhull/qh-globa.htm
diff --git a/xs/src/qhull/src/libqhull/qh-io.htm b/src/qhull/src/libqhull/qh-io.htm
index 5cb591d87..5cb591d87 100644
--- a/xs/src/qhull/src/libqhull/qh-io.htm
+++ b/src/qhull/src/libqhull/qh-io.htm
diff --git a/xs/src/qhull/src/libqhull/qh-mem.htm b/src/qhull/src/libqhull/qh-mem.htm
index b993b2229..b993b2229 100644
--- a/xs/src/qhull/src/libqhull/qh-mem.htm
+++ b/src/qhull/src/libqhull/qh-mem.htm
diff --git a/xs/src/qhull/src/libqhull/qh-merge.htm b/src/qhull/src/libqhull/qh-merge.htm
index 54b97c88e..54b97c88e 100644
--- a/xs/src/qhull/src/libqhull/qh-merge.htm
+++ b/src/qhull/src/libqhull/qh-merge.htm
diff --git a/xs/src/qhull/src/libqhull/qh-poly.htm b/src/qhull/src/libqhull/qh-poly.htm
index c8f6b38b0..c8f6b38b0 100644
--- a/xs/src/qhull/src/libqhull/qh-poly.htm
+++ b/src/qhull/src/libqhull/qh-poly.htm
diff --git a/xs/src/qhull/src/libqhull/qh-qhull.htm b/src/qhull/src/libqhull/qh-qhull.htm
index 5212c6422..5212c6422 100644
--- a/xs/src/qhull/src/libqhull/qh-qhull.htm
+++ b/src/qhull/src/libqhull/qh-qhull.htm
diff --git a/xs/src/qhull/src/libqhull/qh-set.htm b/src/qhull/src/libqhull/qh-set.htm
index 06e71bbc9..06e71bbc9 100644
--- a/xs/src/qhull/src/libqhull/qh-set.htm
+++ b/src/qhull/src/libqhull/qh-set.htm
diff --git a/xs/src/qhull/src/libqhull/qh-stat.htm b/src/qhull/src/libqhull/qh-stat.htm
index b96854031..b96854031 100644
--- a/xs/src/qhull/src/libqhull/qh-stat.htm
+++ b/src/qhull/src/libqhull/qh-stat.htm
diff --git a/xs/src/qhull/src/libqhull/qh-user.htm b/src/qhull/src/libqhull/qh-user.htm
index 6682f4b2f..6682f4b2f 100644
--- a/xs/src/qhull/src/libqhull/qh-user.htm
+++ b/src/qhull/src/libqhull/qh-user.htm
diff --git a/xs/src/qhull/src/libqhull/qhull-exports.def b/src/qhull/src/libqhull/qhull-exports.def
index 11a42b57e..11a42b57e 100644
--- a/xs/src/qhull/src/libqhull/qhull-exports.def
+++ b/src/qhull/src/libqhull/qhull-exports.def
diff --git a/xs/src/qhull/src/libqhull/qhull_a.h b/src/qhull/src/libqhull/qhull_a.h
index 729b72327..729b72327 100644
--- a/xs/src/qhull/src/libqhull/qhull_a.h
+++ b/src/qhull/src/libqhull/qhull_a.h
diff --git a/xs/src/qhull/src/libqhull/qhull_p-exports.def b/src/qhull/src/libqhull/qhull_p-exports.def
index cadf8a4fa..cadf8a4fa 100644
--- a/xs/src/qhull/src/libqhull/qhull_p-exports.def
+++ b/src/qhull/src/libqhull/qhull_p-exports.def
diff --git a/xs/src/qhull/src/libqhull/qset.c b/src/qhull/src/libqhull/qset.c
index a969252a7..a969252a7 100644
--- a/xs/src/qhull/src/libqhull/qset.c
+++ b/src/qhull/src/libqhull/qset.c
diff --git a/xs/src/qhull/src/libqhull/qset.h b/src/qhull/src/libqhull/qset.h
index 7e4e7d14f..7e4e7d14f 100644
--- a/xs/src/qhull/src/libqhull/qset.h
+++ b/src/qhull/src/libqhull/qset.h
diff --git a/xs/src/qhull/src/libqhull/random.c b/src/qhull/src/libqhull/random.c
index 176d697ae..176d697ae 100644
--- a/xs/src/qhull/src/libqhull/random.c
+++ b/src/qhull/src/libqhull/random.c
diff --git a/xs/src/qhull/src/libqhull/random.h b/src/qhull/src/libqhull/random.h
index 0c6896b76..0c6896b76 100644
--- a/xs/src/qhull/src/libqhull/random.h
+++ b/src/qhull/src/libqhull/random.h
diff --git a/xs/src/qhull/src/libqhull/rboxlib.c b/src/qhull/src/libqhull/rboxlib.c
index f945133fa..f945133fa 100644
--- a/xs/src/qhull/src/libqhull/rboxlib.c
+++ b/src/qhull/src/libqhull/rboxlib.c
diff --git a/xs/src/qhull/src/libqhull/stat.c b/src/qhull/src/libqhull/stat.c
index 70196bbb0..70196bbb0 100644
--- a/xs/src/qhull/src/libqhull/stat.c
+++ b/src/qhull/src/libqhull/stat.c
diff --git a/xs/src/qhull/src/libqhull/stat.h b/src/qhull/src/libqhull/stat.h
index d86fc0a87..d86fc0a87 100644
--- a/xs/src/qhull/src/libqhull/stat.h
+++ b/src/qhull/src/libqhull/stat.h
diff --git a/xs/src/qhull/src/libqhull/user.c b/src/qhull/src/libqhull/user.c
index d4726eaa3..d4726eaa3 100644
--- a/xs/src/qhull/src/libqhull/user.c
+++ b/src/qhull/src/libqhull/user.c
diff --git a/xs/src/qhull/src/libqhull/user.h b/src/qhull/src/libqhull/user.h
index 523aa7b4e..523aa7b4e 100644
--- a/xs/src/qhull/src/libqhull/user.h
+++ b/src/qhull/src/libqhull/user.h
diff --git a/xs/src/qhull/src/libqhull/usermem.c b/src/qhull/src/libqhull/usermem.c
index 0e99e8f66..0e99e8f66 100644
--- a/xs/src/qhull/src/libqhull/usermem.c
+++ b/src/qhull/src/libqhull/usermem.c
diff --git a/xs/src/qhull/src/libqhull/userprintf.c b/src/qhull/src/libqhull/userprintf.c
index 190d7cd79..190d7cd79 100644
--- a/xs/src/qhull/src/libqhull/userprintf.c
+++ b/src/qhull/src/libqhull/userprintf.c
diff --git a/xs/src/qhull/src/libqhull/userprintf_rbox.c b/src/qhull/src/libqhull/userprintf_rbox.c
index 8edd2001a..8edd2001a 100644
--- a/xs/src/qhull/src/libqhull/userprintf_rbox.c
+++ b/src/qhull/src/libqhull/userprintf_rbox.c
diff --git a/xs/src/qhull/src/libqhull_r/Makefile b/src/qhull/src/libqhull_r/Makefile
index 5c40969e0..5c40969e0 100644
--- a/xs/src/qhull/src/libqhull_r/Makefile
+++ b/src/qhull/src/libqhull_r/Makefile
diff --git a/xs/src/qhull/src/libqhull_r/geom2_r.c b/src/qhull/src/libqhull_r/geom2_r.c
index 48addba1c..48addba1c 100644
--- a/xs/src/qhull/src/libqhull_r/geom2_r.c
+++ b/src/qhull/src/libqhull_r/geom2_r.c
diff --git a/xs/src/qhull/src/libqhull_r/geom_r.c b/src/qhull/src/libqhull_r/geom_r.c
index 8104813ca..8104813ca 100644
--- a/xs/src/qhull/src/libqhull_r/geom_r.c
+++ b/src/qhull/src/libqhull_r/geom_r.c
diff --git a/xs/src/qhull/src/libqhull_r/geom_r.h b/src/qhull/src/libqhull_r/geom_r.h
index d73e95345..d73e95345 100644
--- a/xs/src/qhull/src/libqhull_r/geom_r.h
+++ b/src/qhull/src/libqhull_r/geom_r.h
diff --git a/xs/src/qhull/src/libqhull_r/global_r.c b/src/qhull/src/libqhull_r/global_r.c
index eef465ca1..eef465ca1 100644
--- a/xs/src/qhull/src/libqhull_r/global_r.c
+++ b/src/qhull/src/libqhull_r/global_r.c
diff --git a/xs/src/qhull/src/libqhull_r/index.htm b/src/qhull/src/libqhull_r/index.htm
index c62030e06..c62030e06 100644
--- a/xs/src/qhull/src/libqhull_r/index.htm
+++ b/src/qhull/src/libqhull_r/index.htm
diff --git a/xs/src/qhull/src/libqhull_r/io_r.c b/src/qhull/src/libqhull_r/io_r.c
index 9721a000d..9721a000d 100644
--- a/xs/src/qhull/src/libqhull_r/io_r.c
+++ b/src/qhull/src/libqhull_r/io_r.c
diff --git a/xs/src/qhull/src/libqhull_r/io_r.h b/src/qhull/src/libqhull_r/io_r.h
index 12e05ae7a..12e05ae7a 100644
--- a/xs/src/qhull/src/libqhull_r/io_r.h
+++ b/src/qhull/src/libqhull_r/io_r.h
diff --git a/xs/src/qhull/src/libqhull_r/libqhull_r.c b/src/qhull/src/libqhull_r/libqhull_r.c
index 0fe0c980d..0fe0c980d 100644
--- a/xs/src/qhull/src/libqhull_r/libqhull_r.c
+++ b/src/qhull/src/libqhull_r/libqhull_r.c
diff --git a/xs/src/qhull/src/libqhull_r/libqhull_r.h b/src/qhull/src/libqhull_r/libqhull_r.h
index 363e6da6a..363e6da6a 100644
--- a/xs/src/qhull/src/libqhull_r/libqhull_r.h
+++ b/src/qhull/src/libqhull_r/libqhull_r.h
diff --git a/xs/src/qhull/src/libqhull_r/libqhull_r.pro b/src/qhull/src/libqhull_r/libqhull_r.pro
index 6b8db44b7..6b8db44b7 100644
--- a/xs/src/qhull/src/libqhull_r/libqhull_r.pro
+++ b/src/qhull/src/libqhull_r/libqhull_r.pro
diff --git a/xs/src/qhull/src/libqhull_r/mem_r.c b/src/qhull/src/libqhull_r/mem_r.c
index 801a8c76a..801a8c76a 100644
--- a/xs/src/qhull/src/libqhull_r/mem_r.c
+++ b/src/qhull/src/libqhull_r/mem_r.c
diff --git a/xs/src/qhull/src/libqhull_r/mem_r.h b/src/qhull/src/libqhull_r/mem_r.h
index 25b551333..25b551333 100644
--- a/xs/src/qhull/src/libqhull_r/mem_r.h
+++ b/src/qhull/src/libqhull_r/mem_r.h
diff --git a/xs/src/qhull/src/libqhull_r/merge_r.c b/src/qhull/src/libqhull_r/merge_r.c
index e5823de8d..e5823de8d 100644
--- a/xs/src/qhull/src/libqhull_r/merge_r.c
+++ b/src/qhull/src/libqhull_r/merge_r.c
diff --git a/xs/src/qhull/src/libqhull_r/merge_r.h b/src/qhull/src/libqhull_r/merge_r.h
index 30a51815d..30a51815d 100644
--- a/xs/src/qhull/src/libqhull_r/merge_r.h
+++ b/src/qhull/src/libqhull_r/merge_r.h
diff --git a/xs/src/qhull/src/libqhull_r/poly2_r.c b/src/qhull/src/libqhull_r/poly2_r.c
index b8ae9af9f..b8ae9af9f 100644
--- a/xs/src/qhull/src/libqhull_r/poly2_r.c
+++ b/src/qhull/src/libqhull_r/poly2_r.c
diff --git a/xs/src/qhull/src/libqhull_r/poly_r.c b/src/qhull/src/libqhull_r/poly_r.c
index e5b479743..e5b479743 100644
--- a/xs/src/qhull/src/libqhull_r/poly_r.c
+++ b/src/qhull/src/libqhull_r/poly_r.c
diff --git a/xs/src/qhull/src/libqhull_r/poly_r.h b/src/qhull/src/libqhull_r/poly_r.h
index c71511bd6..c71511bd6 100644
--- a/xs/src/qhull/src/libqhull_r/poly_r.h
+++ b/src/qhull/src/libqhull_r/poly_r.h
diff --git a/xs/src/qhull/src/libqhull_r/qh-geom_r.htm b/src/qhull/src/libqhull_r/qh-geom_r.htm
index eeefc0c75..eeefc0c75 100644
--- a/xs/src/qhull/src/libqhull_r/qh-geom_r.htm
+++ b/src/qhull/src/libqhull_r/qh-geom_r.htm
diff --git a/xs/src/qhull/src/libqhull_r/qh-globa_r.htm b/src/qhull/src/libqhull_r/qh-globa_r.htm
index 45437a059..45437a059 100644
--- a/xs/src/qhull/src/libqhull_r/qh-globa_r.htm
+++ b/src/qhull/src/libqhull_r/qh-globa_r.htm
diff --git a/xs/src/qhull/src/libqhull_r/qh-io_r.htm b/src/qhull/src/libqhull_r/qh-io_r.htm
index 8a8a96300..8a8a96300 100644
--- a/xs/src/qhull/src/libqhull_r/qh-io_r.htm
+++ b/src/qhull/src/libqhull_r/qh-io_r.htm
diff --git a/xs/src/qhull/src/libqhull_r/qh-mem_r.htm b/src/qhull/src/libqhull_r/qh-mem_r.htm
index db59119cb..db59119cb 100644
--- a/xs/src/qhull/src/libqhull_r/qh-mem_r.htm
+++ b/src/qhull/src/libqhull_r/qh-mem_r.htm
diff --git a/xs/src/qhull/src/libqhull_r/qh-merge_r.htm b/src/qhull/src/libqhull_r/qh-merge_r.htm
index 63e5135be..63e5135be 100644
--- a/xs/src/qhull/src/libqhull_r/qh-merge_r.htm
+++ b/src/qhull/src/libqhull_r/qh-merge_r.htm
diff --git a/xs/src/qhull/src/libqhull_r/qh-poly_r.htm b/src/qhull/src/libqhull_r/qh-poly_r.htm
index c5b6f2f83..c5b6f2f83 100644
--- a/xs/src/qhull/src/libqhull_r/qh-poly_r.htm
+++ b/src/qhull/src/libqhull_r/qh-poly_r.htm
diff --git a/xs/src/qhull/src/libqhull_r/qh-qhull_r.htm b/src/qhull/src/libqhull_r/qh-qhull_r.htm
index 25d5e4972..25d5e4972 100644
--- a/xs/src/qhull/src/libqhull_r/qh-qhull_r.htm
+++ b/src/qhull/src/libqhull_r/qh-qhull_r.htm
diff --git a/xs/src/qhull/src/libqhull_r/qh-set_r.htm b/src/qhull/src/libqhull_r/qh-set_r.htm
index cf8ab63af..cf8ab63af 100644
--- a/xs/src/qhull/src/libqhull_r/qh-set_r.htm
+++ b/src/qhull/src/libqhull_r/qh-set_r.htm
diff --git a/xs/src/qhull/src/libqhull_r/qh-stat_r.htm b/src/qhull/src/libqhull_r/qh-stat_r.htm
index ea9d7fc56..ea9d7fc56 100644
--- a/xs/src/qhull/src/libqhull_r/qh-stat_r.htm
+++ b/src/qhull/src/libqhull_r/qh-stat_r.htm
diff --git a/xs/src/qhull/src/libqhull_r/qh-user_r.htm b/src/qhull/src/libqhull_r/qh-user_r.htm
index 909fec656..909fec656 100644
--- a/xs/src/qhull/src/libqhull_r/qh-user_r.htm
+++ b/src/qhull/src/libqhull_r/qh-user_r.htm
diff --git a/xs/src/qhull/src/libqhull_r/qhull_r-exports.def b/src/qhull/src/libqhull_r/qhull_r-exports.def
index 325d57c3b..325d57c3b 100644
--- a/xs/src/qhull/src/libqhull_r/qhull_r-exports.def
+++ b/src/qhull/src/libqhull_r/qhull_r-exports.def
diff --git a/xs/src/qhull/src/libqhull_r/qhull_ra.h b/src/qhull/src/libqhull_r/qhull_ra.h
index 5c5bd8779..5c5bd8779 100644
--- a/xs/src/qhull/src/libqhull_r/qhull_ra.h
+++ b/src/qhull/src/libqhull_r/qhull_ra.h
diff --git a/xs/src/qhull/src/libqhull_r/qset_r.c b/src/qhull/src/libqhull_r/qset_r.c
index 15cd3c0e2..15cd3c0e2 100644
--- a/xs/src/qhull/src/libqhull_r/qset_r.c
+++ b/src/qhull/src/libqhull_r/qset_r.c
diff --git a/xs/src/qhull/src/libqhull_r/qset_r.h b/src/qhull/src/libqhull_r/qset_r.h
index 7ba199d6f..7ba199d6f 100644
--- a/xs/src/qhull/src/libqhull_r/qset_r.h
+++ b/src/qhull/src/libqhull_r/qset_r.h
diff --git a/xs/src/qhull/src/libqhull_r/random_r.c b/src/qhull/src/libqhull_r/random_r.c
index 1fefb51c3..1fefb51c3 100644
--- a/xs/src/qhull/src/libqhull_r/random_r.c
+++ b/src/qhull/src/libqhull_r/random_r.c
diff --git a/xs/src/qhull/src/libqhull_r/random_r.h b/src/qhull/src/libqhull_r/random_r.h
index dc884b33c..dc884b33c 100644
--- a/xs/src/qhull/src/libqhull_r/random_r.h
+++ b/src/qhull/src/libqhull_r/random_r.h
diff --git a/xs/src/qhull/src/libqhull_r/rboxlib_r.c b/src/qhull/src/libqhull_r/rboxlib_r.c
index 6c0c7e35e..6c0c7e35e 100644
--- a/xs/src/qhull/src/libqhull_r/rboxlib_r.c
+++ b/src/qhull/src/libqhull_r/rboxlib_r.c
diff --git a/xs/src/qhull/src/libqhull_r/stat_r.c b/src/qhull/src/libqhull_r/stat_r.c
index 0f3ff0d3d..0f3ff0d3d 100644
--- a/xs/src/qhull/src/libqhull_r/stat_r.c
+++ b/src/qhull/src/libqhull_r/stat_r.c
diff --git a/xs/src/qhull/src/libqhull_r/stat_r.h b/src/qhull/src/libqhull_r/stat_r.h
index 75e7d1057..75e7d1057 100644
--- a/xs/src/qhull/src/libqhull_r/stat_r.h
+++ b/src/qhull/src/libqhull_r/stat_r.h
diff --git a/xs/src/qhull/src/libqhull_r/user_r.c b/src/qhull/src/libqhull_r/user_r.c
index bf7ed1d8d..bf7ed1d8d 100644
--- a/xs/src/qhull/src/libqhull_r/user_r.c
+++ b/src/qhull/src/libqhull_r/user_r.c
diff --git a/xs/src/qhull/src/libqhull_r/user_r.h b/src/qhull/src/libqhull_r/user_r.h
index 7cca65a80..7cca65a80 100644
--- a/xs/src/qhull/src/libqhull_r/user_r.h
+++ b/src/qhull/src/libqhull_r/user_r.h
diff --git a/xs/src/qhull/src/libqhull_r/usermem_r.c b/src/qhull/src/libqhull_r/usermem_r.c
index 3297b0318..3297b0318 100644
--- a/xs/src/qhull/src/libqhull_r/usermem_r.c
+++ b/src/qhull/src/libqhull_r/usermem_r.c
diff --git a/xs/src/qhull/src/libqhull_r/userprintf_r.c b/src/qhull/src/libqhull_r/userprintf_r.c
index 6004491a1..6004491a1 100644
--- a/xs/src/qhull/src/libqhull_r/userprintf_r.c
+++ b/src/qhull/src/libqhull_r/userprintf_r.c
diff --git a/xs/src/qhull/src/libqhull_r/userprintf_rbox_r.c b/src/qhull/src/libqhull_r/userprintf_rbox_r.c
index 1e721a22a..1e721a22a 100644
--- a/xs/src/qhull/src/libqhull_r/userprintf_rbox_r.c
+++ b/src/qhull/src/libqhull_r/userprintf_rbox_r.c
diff --git a/xs/src/qhull/src/libqhullcpp/Coordinates.cpp b/src/qhull/src/libqhullcpp/Coordinates.cpp
index 806b438ab..806b438ab 100644
--- a/xs/src/qhull/src/libqhullcpp/Coordinates.cpp
+++ b/src/qhull/src/libqhullcpp/Coordinates.cpp
diff --git a/xs/src/qhull/src/libqhullcpp/Coordinates.h b/src/qhull/src/libqhullcpp/Coordinates.h
index df8bd1138..df8bd1138 100644
--- a/xs/src/qhull/src/libqhullcpp/Coordinates.h
+++ b/src/qhull/src/libqhullcpp/Coordinates.h
diff --git a/xs/src/qhull/src/libqhullcpp/PointCoordinates.cpp b/src/qhull/src/libqhullcpp/PointCoordinates.cpp
index a5b71e901..a5b71e901 100644
--- a/xs/src/qhull/src/libqhullcpp/PointCoordinates.cpp
+++ b/src/qhull/src/libqhullcpp/PointCoordinates.cpp
diff --git a/xs/src/qhull/src/libqhullcpp/PointCoordinates.h b/src/qhull/src/libqhullcpp/PointCoordinates.h
index 4c63cdfca..4c63cdfca 100644
--- a/xs/src/qhull/src/libqhullcpp/PointCoordinates.h
+++ b/src/qhull/src/libqhullcpp/PointCoordinates.h
diff --git a/xs/src/qhull/src/libqhullcpp/Qhull.cpp b/src/qhull/src/libqhullcpp/Qhull.cpp
index 7124a15cd..7124a15cd 100644
--- a/xs/src/qhull/src/libqhullcpp/Qhull.cpp
+++ b/src/qhull/src/libqhullcpp/Qhull.cpp
diff --git a/xs/src/qhull/src/libqhullcpp/Qhull.h b/src/qhull/src/libqhullcpp/Qhull.h
index e3ad9d8e1..e3ad9d8e1 100644
--- a/xs/src/qhull/src/libqhullcpp/Qhull.h
+++ b/src/qhull/src/libqhullcpp/Qhull.h
diff --git a/xs/src/qhull/src/libqhullcpp/QhullError.h b/src/qhull/src/libqhullcpp/QhullError.h
index 08d50aa0f..08d50aa0f 100644
--- a/xs/src/qhull/src/libqhullcpp/QhullError.h
+++ b/src/qhull/src/libqhullcpp/QhullError.h
diff --git a/xs/src/qhull/src/libqhullcpp/QhullFacet.cpp b/src/qhull/src/libqhullcpp/QhullFacet.cpp
index 40d3828a4..40d3828a4 100644
--- a/xs/src/qhull/src/libqhullcpp/QhullFacet.cpp
+++ b/src/qhull/src/libqhullcpp/QhullFacet.cpp
diff --git a/xs/src/qhull/src/libqhullcpp/QhullFacet.h b/src/qhull/src/libqhullcpp/QhullFacet.h
index ae4f008fd..ae4f008fd 100644
--- a/xs/src/qhull/src/libqhullcpp/QhullFacet.h
+++ b/src/qhull/src/libqhullcpp/QhullFacet.h
diff --git a/xs/src/qhull/src/libqhullcpp/QhullFacetList.cpp b/src/qhull/src/libqhullcpp/QhullFacetList.cpp
index 9e6ddfe9e..9e6ddfe9e 100644
--- a/xs/src/qhull/src/libqhullcpp/QhullFacetList.cpp
+++ b/src/qhull/src/libqhullcpp/QhullFacetList.cpp
diff --git a/xs/src/qhull/src/libqhullcpp/QhullFacetList.h b/src/qhull/src/libqhullcpp/QhullFacetList.h
index e61e56840..e61e56840 100644
--- a/xs/src/qhull/src/libqhullcpp/QhullFacetList.h
+++ b/src/qhull/src/libqhullcpp/QhullFacetList.h
diff --git a/xs/src/qhull/src/libqhullcpp/QhullFacetSet.cpp b/src/qhull/src/libqhullcpp/QhullFacetSet.cpp
index d30c21e26..d30c21e26 100644
--- a/xs/src/qhull/src/libqhullcpp/QhullFacetSet.cpp
+++ b/src/qhull/src/libqhullcpp/QhullFacetSet.cpp
diff --git a/xs/src/qhull/src/libqhullcpp/QhullFacetSet.h b/src/qhull/src/libqhullcpp/QhullFacetSet.h
index ee3208559..ee3208559 100644
--- a/xs/src/qhull/src/libqhullcpp/QhullFacetSet.h
+++ b/src/qhull/src/libqhullcpp/QhullFacetSet.h
diff --git a/xs/src/qhull/src/libqhullcpp/QhullHyperplane.cpp b/src/qhull/src/libqhullcpp/QhullHyperplane.cpp
index ed5cc4bae..ed5cc4bae 100644
--- a/xs/src/qhull/src/libqhullcpp/QhullHyperplane.cpp
+++ b/src/qhull/src/libqhullcpp/QhullHyperplane.cpp
diff --git a/xs/src/qhull/src/libqhullcpp/QhullHyperplane.h b/src/qhull/src/libqhullcpp/QhullHyperplane.h
index 2868ce5c9..2868ce5c9 100644
--- a/xs/src/qhull/src/libqhullcpp/QhullHyperplane.h
+++ b/src/qhull/src/libqhullcpp/QhullHyperplane.h
diff --git a/xs/src/qhull/src/libqhullcpp/QhullIterator.h b/src/qhull/src/libqhullcpp/QhullIterator.h
index ec60496bf..ec60496bf 100644
--- a/xs/src/qhull/src/libqhullcpp/QhullIterator.h
+++ b/src/qhull/src/libqhullcpp/QhullIterator.h
diff --git a/xs/src/qhull/src/libqhullcpp/QhullLinkedList.h b/src/qhull/src/libqhullcpp/QhullLinkedList.h
index d4caf52c1..d4caf52c1 100644
--- a/xs/src/qhull/src/libqhullcpp/QhullLinkedList.h
+++ b/src/qhull/src/libqhullcpp/QhullLinkedList.h
diff --git a/xs/src/qhull/src/libqhullcpp/QhullPoint.cpp b/src/qhull/src/libqhullcpp/QhullPoint.cpp
index f5e912460..f5e912460 100644
--- a/xs/src/qhull/src/libqhullcpp/QhullPoint.cpp
+++ b/src/qhull/src/libqhullcpp/QhullPoint.cpp
diff --git a/xs/src/qhull/src/libqhullcpp/QhullPoint.h b/src/qhull/src/libqhullcpp/QhullPoint.h
index 17f94ab36..17f94ab36 100644
--- a/xs/src/qhull/src/libqhullcpp/QhullPoint.h
+++ b/src/qhull/src/libqhullcpp/QhullPoint.h
diff --git a/xs/src/qhull/src/libqhullcpp/QhullPointSet.cpp b/src/qhull/src/libqhullcpp/QhullPointSet.cpp
index 561fd6c76..561fd6c76 100644
--- a/xs/src/qhull/src/libqhullcpp/QhullPointSet.cpp
+++ b/src/qhull/src/libqhullcpp/QhullPointSet.cpp
diff --git a/xs/src/qhull/src/libqhullcpp/QhullPointSet.h b/src/qhull/src/libqhullcpp/QhullPointSet.h
index 8562e170e..8562e170e 100644
--- a/xs/src/qhull/src/libqhullcpp/QhullPointSet.h
+++ b/src/qhull/src/libqhullcpp/QhullPointSet.h
diff --git a/xs/src/qhull/src/libqhullcpp/QhullPoints.cpp b/src/qhull/src/libqhullcpp/QhullPoints.cpp
index 2320b5007..2320b5007 100644
--- a/xs/src/qhull/src/libqhullcpp/QhullPoints.cpp
+++ b/src/qhull/src/libqhullcpp/QhullPoints.cpp
diff --git a/xs/src/qhull/src/libqhullcpp/QhullPoints.h b/src/qhull/src/libqhullcpp/QhullPoints.h
index ce169a159..ce169a159 100644
--- a/xs/src/qhull/src/libqhullcpp/QhullPoints.h
+++ b/src/qhull/src/libqhullcpp/QhullPoints.h
diff --git a/xs/src/qhull/src/libqhullcpp/QhullQh.cpp b/src/qhull/src/libqhullcpp/QhullQh.cpp
index 363533700..363533700 100644
--- a/xs/src/qhull/src/libqhullcpp/QhullQh.cpp
+++ b/src/qhull/src/libqhullcpp/QhullQh.cpp
diff --git a/xs/src/qhull/src/libqhullcpp/QhullQh.h b/src/qhull/src/libqhullcpp/QhullQh.h
index c3b277ff0..c3b277ff0 100644
--- a/xs/src/qhull/src/libqhullcpp/QhullQh.h
+++ b/src/qhull/src/libqhullcpp/QhullQh.h
diff --git a/xs/src/qhull/src/libqhullcpp/QhullRidge.cpp b/src/qhull/src/libqhullcpp/QhullRidge.cpp
index 7a0181280..7a0181280 100644
--- a/xs/src/qhull/src/libqhullcpp/QhullRidge.cpp
+++ b/src/qhull/src/libqhullcpp/QhullRidge.cpp
diff --git a/xs/src/qhull/src/libqhullcpp/QhullRidge.h b/src/qhull/src/libqhullcpp/QhullRidge.h
index 924340fb0..924340fb0 100644
--- a/xs/src/qhull/src/libqhullcpp/QhullRidge.h
+++ b/src/qhull/src/libqhullcpp/QhullRidge.h
diff --git a/xs/src/qhull/src/libqhullcpp/QhullSet.cpp b/src/qhull/src/libqhullcpp/QhullSet.cpp
index dfdc3c51f..dfdc3c51f 100644
--- a/xs/src/qhull/src/libqhullcpp/QhullSet.cpp
+++ b/src/qhull/src/libqhullcpp/QhullSet.cpp
diff --git a/xs/src/qhull/src/libqhullcpp/QhullSet.h b/src/qhull/src/libqhullcpp/QhullSet.h
index afb6b51d9..afb6b51d9 100644
--- a/xs/src/qhull/src/libqhullcpp/QhullSet.h
+++ b/src/qhull/src/libqhullcpp/QhullSet.h
diff --git a/xs/src/qhull/src/libqhullcpp/QhullSets.h b/src/qhull/src/libqhullcpp/QhullSets.h
index d0f200cbc..d0f200cbc 100644
--- a/xs/src/qhull/src/libqhullcpp/QhullSets.h
+++ b/src/qhull/src/libqhullcpp/QhullSets.h
diff --git a/xs/src/qhull/src/libqhullcpp/QhullStat.cpp b/src/qhull/src/libqhullcpp/QhullStat.cpp
index c4fe6c491..c4fe6c491 100644
--- a/xs/src/qhull/src/libqhullcpp/QhullStat.cpp
+++ b/src/qhull/src/libqhullcpp/QhullStat.cpp
diff --git a/xs/src/qhull/src/libqhullcpp/QhullStat.h b/src/qhull/src/libqhullcpp/QhullStat.h
index 54bde8fc7..54bde8fc7 100644
--- a/xs/src/qhull/src/libqhullcpp/QhullStat.h
+++ b/src/qhull/src/libqhullcpp/QhullStat.h
diff --git a/xs/src/qhull/src/libqhullcpp/QhullVertex.cpp b/src/qhull/src/libqhullcpp/QhullVertex.cpp
index fd7aef089..fd7aef089 100644
--- a/xs/src/qhull/src/libqhullcpp/QhullVertex.cpp
+++ b/src/qhull/src/libqhullcpp/QhullVertex.cpp
diff --git a/xs/src/qhull/src/libqhullcpp/QhullVertex.h b/src/qhull/src/libqhullcpp/QhullVertex.h
index 0137766db..0137766db 100644
--- a/xs/src/qhull/src/libqhullcpp/QhullVertex.h
+++ b/src/qhull/src/libqhullcpp/QhullVertex.h
diff --git a/xs/src/qhull/src/libqhullcpp/QhullVertexSet.cpp b/src/qhull/src/libqhullcpp/QhullVertexSet.cpp
index 00ba62d19..00ba62d19 100644
--- a/xs/src/qhull/src/libqhullcpp/QhullVertexSet.cpp
+++ b/src/qhull/src/libqhullcpp/QhullVertexSet.cpp
diff --git a/xs/src/qhull/src/libqhullcpp/QhullVertexSet.h b/src/qhull/src/libqhullcpp/QhullVertexSet.h
index a3a11c124..a3a11c124 100644
--- a/xs/src/qhull/src/libqhullcpp/QhullVertexSet.h
+++ b/src/qhull/src/libqhullcpp/QhullVertexSet.h
diff --git a/xs/src/qhull/src/libqhullcpp/RboxPoints.cpp b/src/qhull/src/libqhullcpp/RboxPoints.cpp
index d7acd9fce..d7acd9fce 100644
--- a/xs/src/qhull/src/libqhullcpp/RboxPoints.cpp
+++ b/src/qhull/src/libqhullcpp/RboxPoints.cpp
diff --git a/xs/src/qhull/src/libqhullcpp/RboxPoints.h b/src/qhull/src/libqhullcpp/RboxPoints.h
index e8ec72b14..e8ec72b14 100644
--- a/xs/src/qhull/src/libqhullcpp/RboxPoints.h
+++ b/src/qhull/src/libqhullcpp/RboxPoints.h
diff --git a/xs/src/qhull/src/libqhullcpp/RoadError.cpp b/src/qhull/src/libqhullcpp/RoadError.cpp
index 1d41ec1bc..1d41ec1bc 100644
--- a/xs/src/qhull/src/libqhullcpp/RoadError.cpp
+++ b/src/qhull/src/libqhullcpp/RoadError.cpp
diff --git a/xs/src/qhull/src/libqhullcpp/RoadError.h b/src/qhull/src/libqhullcpp/RoadError.h
index 1c9f6cdd5..1c9f6cdd5 100644
--- a/xs/src/qhull/src/libqhullcpp/RoadError.h
+++ b/src/qhull/src/libqhullcpp/RoadError.h
diff --git a/xs/src/qhull/src/libqhullcpp/RoadLogEvent.cpp b/src/qhull/src/libqhullcpp/RoadLogEvent.cpp
index 9a9cf5960..9a9cf5960 100644
--- a/xs/src/qhull/src/libqhullcpp/RoadLogEvent.cpp
+++ b/src/qhull/src/libqhullcpp/RoadLogEvent.cpp
diff --git a/xs/src/qhull/src/libqhullcpp/RoadLogEvent.h b/src/qhull/src/libqhullcpp/RoadLogEvent.h
index 7c4cfba0d..7c4cfba0d 100644
--- a/xs/src/qhull/src/libqhullcpp/RoadLogEvent.h
+++ b/src/qhull/src/libqhullcpp/RoadLogEvent.h
diff --git a/xs/src/qhull/src/libqhullcpp/functionObjects.h b/src/qhull/src/libqhullcpp/functionObjects.h
index 3645c0713..3645c0713 100644
--- a/xs/src/qhull/src/libqhullcpp/functionObjects.h
+++ b/src/qhull/src/libqhullcpp/functionObjects.h
diff --git a/xs/src/qhull/src/libqhullcpp/libqhullcpp.pro b/src/qhull/src/libqhullcpp/libqhullcpp.pro
index 89b967bef..89b967bef 100644
--- a/xs/src/qhull/src/libqhullcpp/libqhullcpp.pro
+++ b/src/qhull/src/libqhullcpp/libqhullcpp.pro
diff --git a/xs/src/qhull/src/libqhullcpp/qt-qhull.cpp b/src/qhull/src/libqhullcpp/qt-qhull.cpp
index 895f591a8..895f591a8 100644
--- a/xs/src/qhull/src/libqhullcpp/qt-qhull.cpp
+++ b/src/qhull/src/libqhullcpp/qt-qhull.cpp
diff --git a/xs/src/qhull/src/libqhullcpp/usermem_r-cpp.cpp b/src/qhull/src/libqhullcpp/usermem_r-cpp.cpp
index bb9534d09..bb9534d09 100644
--- a/xs/src/qhull/src/libqhullcpp/usermem_r-cpp.cpp
+++ b/src/qhull/src/libqhullcpp/usermem_r-cpp.cpp
diff --git a/xs/src/qhull/src/libqhullstatic/libqhullstatic.pro b/src/qhull/src/libqhullstatic/libqhullstatic.pro
index 1a516db73..1a516db73 100644
--- a/xs/src/qhull/src/libqhullstatic/libqhullstatic.pro
+++ b/src/qhull/src/libqhullstatic/libqhullstatic.pro
diff --git a/xs/src/qhull/src/libqhullstatic_r/libqhullstatic_r.pro b/src/qhull/src/libqhullstatic_r/libqhullstatic_r.pro
index 2f5bf4d07..2f5bf4d07 100644
--- a/xs/src/qhull/src/libqhullstatic_r/libqhullstatic_r.pro
+++ b/src/qhull/src/libqhullstatic_r/libqhullstatic_r.pro
diff --git a/xs/src/qhull/src/qconvex/qconvex.c b/src/qhull/src/qconvex/qconvex.c
index 41bd666da..41bd666da 100644
--- a/xs/src/qhull/src/qconvex/qconvex.c
+++ b/src/qhull/src/qconvex/qconvex.c
diff --git a/xs/src/qhull/src/qconvex/qconvex.pro b/src/qhull/src/qconvex/qconvex.pro
index 1bf631bff..1bf631bff 100644
--- a/xs/src/qhull/src/qconvex/qconvex.pro
+++ b/src/qhull/src/qconvex/qconvex.pro
diff --git a/xs/src/qhull/src/qconvex/qconvex_r.c b/src/qhull/src/qconvex/qconvex_r.c
index abf68ce37..abf68ce37 100644
--- a/xs/src/qhull/src/qconvex/qconvex_r.c
+++ b/src/qhull/src/qconvex/qconvex_r.c
diff --git a/xs/src/qhull/src/qdelaunay/qdelaun.c b/src/qhull/src/qdelaunay/qdelaun.c
index 9011d9fcc..9011d9fcc 100644
--- a/xs/src/qhull/src/qdelaunay/qdelaun.c
+++ b/src/qhull/src/qdelaunay/qdelaun.c
diff --git a/xs/src/qhull/src/qdelaunay/qdelaun_r.c b/src/qhull/src/qdelaunay/qdelaun_r.c
index 0854b8bb9..0854b8bb9 100644
--- a/xs/src/qhull/src/qdelaunay/qdelaun_r.c
+++ b/src/qhull/src/qdelaunay/qdelaun_r.c
diff --git a/xs/src/qhull/src/qdelaunay/qdelaunay.pro b/src/qhull/src/qdelaunay/qdelaunay.pro
index 138ac0589..138ac0589 100644
--- a/xs/src/qhull/src/qdelaunay/qdelaunay.pro
+++ b/src/qhull/src/qdelaunay/qdelaunay.pro
diff --git a/xs/src/qhull/src/qhalf/qhalf.c b/src/qhull/src/qhalf/qhalf.c
index 4a5889ed7..4a5889ed7 100644
--- a/xs/src/qhull/src/qhalf/qhalf.c
+++ b/src/qhull/src/qhalf/qhalf.c
diff --git a/xs/src/qhull/src/qhalf/qhalf.pro b/src/qhull/src/qhalf/qhalf.pro
index ebad38789..ebad38789 100644
--- a/xs/src/qhull/src/qhalf/qhalf.pro
+++ b/src/qhull/src/qhalf/qhalf.pro
diff --git a/xs/src/qhull/src/qhalf/qhalf_r.c b/src/qhull/src/qhalf/qhalf_r.c
index c49d777f9..c49d777f9 100644
--- a/xs/src/qhull/src/qhalf/qhalf_r.c
+++ b/src/qhull/src/qhalf/qhalf_r.c
diff --git a/xs/src/qhull/src/qhull-all.pro b/src/qhull/src/qhull-all.pro
index 1d3a0ac6f..1d3a0ac6f 100644
--- a/xs/src/qhull/src/qhull-all.pro
+++ b/src/qhull/src/qhull-all.pro
diff --git a/xs/src/qhull/src/qhull-app-c.pri b/src/qhull/src/qhull-app-c.pri
index 05e5a00f2..05e5a00f2 100644
--- a/xs/src/qhull/src/qhull-app-c.pri
+++ b/src/qhull/src/qhull-app-c.pri
diff --git a/xs/src/qhull/src/qhull-app-c_r.pri b/src/qhull/src/qhull-app-c_r.pri
index 9c2ef5600..9c2ef5600 100644
--- a/xs/src/qhull/src/qhull-app-c_r.pri
+++ b/src/qhull/src/qhull-app-c_r.pri
diff --git a/xs/src/qhull/src/qhull-app-cpp.pri b/src/qhull/src/qhull-app-cpp.pri
index a6f17d8ec..a6f17d8ec 100644
--- a/xs/src/qhull/src/qhull-app-cpp.pri
+++ b/src/qhull/src/qhull-app-cpp.pri
diff --git a/xs/src/qhull/src/qhull-app-shared.pri b/src/qhull/src/qhull-app-shared.pri
index 1f4026a6a..1f4026a6a 100644
--- a/xs/src/qhull/src/qhull-app-shared.pri
+++ b/src/qhull/src/qhull-app-shared.pri
diff --git a/xs/src/qhull/src/qhull-app-shared_r.pri b/src/qhull/src/qhull-app-shared_r.pri
index e55c1a65f..e55c1a65f 100644
--- a/xs/src/qhull/src/qhull-app-shared_r.pri
+++ b/src/qhull/src/qhull-app-shared_r.pri
diff --git a/xs/src/qhull/src/qhull-libqhull-src.pri b/src/qhull/src/qhull-libqhull-src.pri
index e7aff3f78..e7aff3f78 100644
--- a/xs/src/qhull/src/qhull-libqhull-src.pri
+++ b/src/qhull/src/qhull-libqhull-src.pri
diff --git a/xs/src/qhull/src/qhull-libqhull-src_r.pri b/src/qhull/src/qhull-libqhull-src_r.pri
index 3b53291b1..3b53291b1 100644
--- a/xs/src/qhull/src/qhull-libqhull-src_r.pri
+++ b/src/qhull/src/qhull-libqhull-src_r.pri
diff --git a/xs/src/qhull/src/qhull-warn.pri b/src/qhull/src/qhull-warn.pri
index 7d0e7fa2f..7d0e7fa2f 100644
--- a/xs/src/qhull/src/qhull-warn.pri
+++ b/src/qhull/src/qhull-warn.pri
diff --git a/xs/src/qhull/src/qhull/qhull.pro b/src/qhull/src/qhull/qhull.pro
index 839372856..839372856 100644
--- a/xs/src/qhull/src/qhull/qhull.pro
+++ b/src/qhull/src/qhull/qhull.pro
diff --git a/xs/src/qhull/src/qhull/unix.c b/src/qhull/src/qhull/unix.c
index 892a819c3..892a819c3 100644
--- a/xs/src/qhull/src/qhull/unix.c
+++ b/src/qhull/src/qhull/unix.c
diff --git a/xs/src/qhull/src/qhull/unix_r.c b/src/qhull/src/qhull/unix_r.c
index 3f999f7fa..3f999f7fa 100644
--- a/xs/src/qhull/src/qhull/unix_r.c
+++ b/src/qhull/src/qhull/unix_r.c
diff --git a/xs/src/qhull/src/qhulltest/Coordinates_test.cpp b/src/qhull/src/qhulltest/Coordinates_test.cpp
index 3e8658a5b..3e8658a5b 100644
--- a/xs/src/qhull/src/qhulltest/Coordinates_test.cpp
+++ b/src/qhull/src/qhulltest/Coordinates_test.cpp
diff --git a/xs/src/qhull/src/qhulltest/PointCoordinates_test.cpp b/src/qhull/src/qhulltest/PointCoordinates_test.cpp
index 09285954d..09285954d 100644
--- a/xs/src/qhull/src/qhulltest/PointCoordinates_test.cpp
+++ b/src/qhull/src/qhulltest/PointCoordinates_test.cpp
diff --git a/xs/src/qhull/src/qhulltest/QhullFacetList_test.cpp b/src/qhull/src/qhulltest/QhullFacetList_test.cpp
index 5a09d01da..5a09d01da 100644
--- a/xs/src/qhull/src/qhulltest/QhullFacetList_test.cpp
+++ b/src/qhull/src/qhulltest/QhullFacetList_test.cpp
diff --git a/xs/src/qhull/src/qhulltest/QhullFacetSet_test.cpp b/src/qhull/src/qhulltest/QhullFacetSet_test.cpp
index a7fe123a2..a7fe123a2 100644
--- a/xs/src/qhull/src/qhulltest/QhullFacetSet_test.cpp
+++ b/src/qhull/src/qhulltest/QhullFacetSet_test.cpp
diff --git a/xs/src/qhull/src/qhulltest/QhullFacet_test.cpp b/src/qhull/src/qhulltest/QhullFacet_test.cpp
index 271f63753..271f63753 100644
--- a/xs/src/qhull/src/qhulltest/QhullFacet_test.cpp
+++ b/src/qhull/src/qhulltest/QhullFacet_test.cpp
diff --git a/xs/src/qhull/src/qhulltest/QhullHyperplane_test.cpp b/src/qhull/src/qhulltest/QhullHyperplane_test.cpp
index d016989a9..d016989a9 100644
--- a/xs/src/qhull/src/qhulltest/QhullHyperplane_test.cpp
+++ b/src/qhull/src/qhulltest/QhullHyperplane_test.cpp
diff --git a/xs/src/qhull/src/qhulltest/QhullLinkedList_test.cpp b/src/qhull/src/qhulltest/QhullLinkedList_test.cpp
index e0cde4050..e0cde4050 100644
--- a/xs/src/qhull/src/qhulltest/QhullLinkedList_test.cpp
+++ b/src/qhull/src/qhulltest/QhullLinkedList_test.cpp
diff --git a/xs/src/qhull/src/qhulltest/QhullPointSet_test.cpp b/src/qhull/src/qhulltest/QhullPointSet_test.cpp
index ff633a518..ff633a518 100644
--- a/xs/src/qhull/src/qhulltest/QhullPointSet_test.cpp
+++ b/src/qhull/src/qhulltest/QhullPointSet_test.cpp
diff --git a/xs/src/qhull/src/qhulltest/QhullPoint_test.cpp b/src/qhull/src/qhulltest/QhullPoint_test.cpp
index 1528086a1..1528086a1 100644
--- a/xs/src/qhull/src/qhulltest/QhullPoint_test.cpp
+++ b/src/qhull/src/qhulltest/QhullPoint_test.cpp
diff --git a/xs/src/qhull/src/qhulltest/QhullPoints_test.cpp b/src/qhull/src/qhulltest/QhullPoints_test.cpp
index c2d8347e2..c2d8347e2 100644
--- a/xs/src/qhull/src/qhulltest/QhullPoints_test.cpp
+++ b/src/qhull/src/qhulltest/QhullPoints_test.cpp
diff --git a/xs/src/qhull/src/qhulltest/QhullRidge_test.cpp b/src/qhull/src/qhulltest/QhullRidge_test.cpp
index 420a7f06d..420a7f06d 100644
--- a/xs/src/qhull/src/qhulltest/QhullRidge_test.cpp
+++ b/src/qhull/src/qhulltest/QhullRidge_test.cpp
diff --git a/xs/src/qhull/src/qhulltest/QhullSet_test.cpp b/src/qhull/src/qhulltest/QhullSet_test.cpp
index 87fcf4acf..87fcf4acf 100644
--- a/xs/src/qhull/src/qhulltest/QhullSet_test.cpp
+++ b/src/qhull/src/qhulltest/QhullSet_test.cpp
diff --git a/xs/src/qhull/src/qhulltest/QhullVertexSet_test.cpp b/src/qhull/src/qhulltest/QhullVertexSet_test.cpp
index 41caacd29..41caacd29 100644
--- a/xs/src/qhull/src/qhulltest/QhullVertexSet_test.cpp
+++ b/src/qhull/src/qhulltest/QhullVertexSet_test.cpp
diff --git a/xs/src/qhull/src/qhulltest/QhullVertex_test.cpp b/src/qhull/src/qhulltest/QhullVertex_test.cpp
index fb6ec9640..fb6ec9640 100644
--- a/xs/src/qhull/src/qhulltest/QhullVertex_test.cpp
+++ b/src/qhull/src/qhulltest/QhullVertex_test.cpp
diff --git a/xs/src/qhull/src/qhulltest/Qhull_test.cpp b/src/qhull/src/qhulltest/Qhull_test.cpp
index cc3918a05..cc3918a05 100644
--- a/xs/src/qhull/src/qhulltest/Qhull_test.cpp
+++ b/src/qhull/src/qhulltest/Qhull_test.cpp
diff --git a/xs/src/qhull/src/qhulltest/RboxPoints_test.cpp b/src/qhull/src/qhulltest/RboxPoints_test.cpp
index 4f4ea984f..4f4ea984f 100644
--- a/xs/src/qhull/src/qhulltest/RboxPoints_test.cpp
+++ b/src/qhull/src/qhulltest/RboxPoints_test.cpp
diff --git a/xs/src/qhull/src/qhulltest/RoadTest.cpp b/src/qhull/src/qhulltest/RoadTest.cpp
index 05c87f3de..05c87f3de 100644
--- a/xs/src/qhull/src/qhulltest/RoadTest.cpp
+++ b/src/qhull/src/qhulltest/RoadTest.cpp
diff --git a/xs/src/qhull/src/qhulltest/RoadTest.h b/src/qhull/src/qhulltest/RoadTest.h
index adfe0bf8c..adfe0bf8c 100644
--- a/xs/src/qhull/src/qhulltest/RoadTest.h
+++ b/src/qhull/src/qhulltest/RoadTest.h
diff --git a/xs/src/qhull/src/qhulltest/qhulltest.cpp b/src/qhull/src/qhulltest/qhulltest.cpp
index 5bfe16e9c..5bfe16e9c 100644
--- a/xs/src/qhull/src/qhulltest/qhulltest.cpp
+++ b/src/qhull/src/qhulltest/qhulltest.cpp
diff --git a/xs/src/qhull/src/qhulltest/qhulltest.pro b/src/qhull/src/qhulltest/qhulltest.pro
index 0da34d375..0da34d375 100644
--- a/xs/src/qhull/src/qhulltest/qhulltest.pro
+++ b/src/qhull/src/qhulltest/qhulltest.pro
diff --git a/xs/src/qhull/src/qvoronoi/qvoronoi.c b/src/qhull/src/qvoronoi/qvoronoi.c
index b93d23711..b93d23711 100644
--- a/xs/src/qhull/src/qvoronoi/qvoronoi.c
+++ b/src/qhull/src/qvoronoi/qvoronoi.c
diff --git a/xs/src/qhull/src/qvoronoi/qvoronoi.pro b/src/qhull/src/qvoronoi/qvoronoi.pro
index 4646c8447..4646c8447 100644
--- a/xs/src/qhull/src/qvoronoi/qvoronoi.pro
+++ b/src/qhull/src/qvoronoi/qvoronoi.pro
diff --git a/xs/src/qhull/src/qvoronoi/qvoronoi_r.c b/src/qhull/src/qvoronoi/qvoronoi_r.c
index 6323c8b49..6323c8b49 100644
--- a/xs/src/qhull/src/qvoronoi/qvoronoi_r.c
+++ b/src/qhull/src/qvoronoi/qvoronoi_r.c
diff --git a/xs/src/qhull/src/rbox/rbox.c b/src/qhull/src/rbox/rbox.c
index d7c51b1aa..d7c51b1aa 100644
--- a/xs/src/qhull/src/rbox/rbox.c
+++ b/src/qhull/src/rbox/rbox.c
diff --git a/xs/src/qhull/src/rbox/rbox.pro b/src/qhull/src/rbox/rbox.pro
index 6c21bdb6d..6c21bdb6d 100644
--- a/xs/src/qhull/src/rbox/rbox.pro
+++ b/src/qhull/src/rbox/rbox.pro
diff --git a/xs/src/qhull/src/rbox/rbox_r.c b/src/qhull/src/rbox/rbox_r.c
index 6ec74d914..6ec74d914 100644
--- a/xs/src/qhull/src/rbox/rbox_r.c
+++ b/src/qhull/src/rbox/rbox_r.c
diff --git a/xs/src/qhull/src/testqset/testqset.c b/src/qhull/src/testqset/testqset.c
index 61057eef9..61057eef9 100644
--- a/xs/src/qhull/src/testqset/testqset.c
+++ b/src/qhull/src/testqset/testqset.c
diff --git a/xs/src/qhull/src/testqset/testqset.pro b/src/qhull/src/testqset/testqset.pro
index 3f69048aa..3f69048aa 100644
--- a/xs/src/qhull/src/testqset/testqset.pro
+++ b/src/qhull/src/testqset/testqset.pro
diff --git a/xs/src/qhull/src/testqset_r/testqset_r.c b/src/qhull/src/testqset_r/testqset_r.c
index 9a6d496e4..9a6d496e4 100644
--- a/xs/src/qhull/src/testqset_r/testqset_r.c
+++ b/src/qhull/src/testqset_r/testqset_r.c
diff --git a/xs/src/qhull/src/testqset_r/testqset_r.pro b/src/qhull/src/testqset_r/testqset_r.pro
index 951e0624e..951e0624e 100644
--- a/xs/src/qhull/src/testqset_r/testqset_r.pro
+++ b/src/qhull/src/testqset_r/testqset_r.pro
diff --git a/xs/src/qhull/src/user_eg/user_eg.c b/src/qhull/src/user_eg/user_eg.c
index 9c5fee51b..9c5fee51b 100644
--- a/xs/src/qhull/src/user_eg/user_eg.c
+++ b/src/qhull/src/user_eg/user_eg.c
diff --git a/xs/src/qhull/src/user_eg/user_eg.pro b/src/qhull/src/user_eg/user_eg.pro
index 9dda01009..9dda01009 100644
--- a/xs/src/qhull/src/user_eg/user_eg.pro
+++ b/src/qhull/src/user_eg/user_eg.pro
diff --git a/xs/src/qhull/src/user_eg/user_eg_r.c b/src/qhull/src/user_eg/user_eg_r.c
index 21b0ccf4e..21b0ccf4e 100644
--- a/xs/src/qhull/src/user_eg/user_eg_r.c
+++ b/src/qhull/src/user_eg/user_eg_r.c
diff --git a/xs/src/qhull/src/user_eg2/user_eg2.c b/src/qhull/src/user_eg2/user_eg2.c
index a455f025d..a455f025d 100644
--- a/xs/src/qhull/src/user_eg2/user_eg2.c
+++ b/src/qhull/src/user_eg2/user_eg2.c
diff --git a/xs/src/qhull/src/user_eg2/user_eg2.pro b/src/qhull/src/user_eg2/user_eg2.pro
index c841bfe13..c841bfe13 100644
--- a/xs/src/qhull/src/user_eg2/user_eg2.pro
+++ b/src/qhull/src/user_eg2/user_eg2.pro
diff --git a/xs/src/qhull/src/user_eg2/user_eg2_r.c b/src/qhull/src/user_eg2/user_eg2_r.c
index 2f8b4e6c7..2f8b4e6c7 100644
--- a/xs/src/qhull/src/user_eg2/user_eg2_r.c
+++ b/src/qhull/src/user_eg2/user_eg2_r.c
diff --git a/xs/src/qhull/src/user_eg3/user_eg3.pro b/src/qhull/src/user_eg3/user_eg3.pro
index 35372fbf9..35372fbf9 100644
--- a/xs/src/qhull/src/user_eg3/user_eg3.pro
+++ b/src/qhull/src/user_eg3/user_eg3.pro
diff --git a/xs/src/qhull/src/user_eg3/user_eg3_r.cpp b/src/qhull/src/user_eg3/user_eg3_r.cpp
index 5257872ab..5257872ab 100644
--- a/xs/src/qhull/src/user_eg3/user_eg3_r.cpp
+++ b/src/qhull/src/user_eg3/user_eg3_r.cpp
diff --git a/src/semver/CMakeLists.txt b/src/semver/CMakeLists.txt
new file mode 100644
index 000000000..e3457bf29
--- /dev/null
+++ b/src/semver/CMakeLists.txt
@@ -0,0 +1,7 @@
+project(semver)
+cmake_minimum_required(VERSION 2.6)
+
+add_library(semver STATIC
+ semver.c
+ semver.h
+)
diff --git a/xs/src/semver/semver.c b/src/semver/semver.c
index 527738644..527738644 100644
--- a/xs/src/semver/semver.c
+++ b/src/semver/semver.c
diff --git a/xs/src/semver/semver.h b/src/semver/semver.h
index 01a15fc43..01a15fc43 100644
--- a/xs/src/semver/semver.h
+++ b/src/semver/semver.h
diff --git a/src/slic3r.cpp b/src/slic3r.cpp
index 085b39686..8174ba0a2 100644
--- a/src/slic3r.cpp
+++ b/src/slic3r.cpp
@@ -12,8 +12,83 @@
#include <boost/nowide/args.hpp>
#include <boost/nowide/iostream.hpp>
+#include "slic3r/GUI/GUI.hpp"
+
using namespace Slic3r;
+// wxWidgets "Hello world" Program
+// For compilers that support precompilation, includes "wx/wx.h".
+#include <wx/wxprec.h>
+#ifndef WX_PRECOMP
+ #include <wx/wx.h>
+#endif
+class MyApp: public wxApp
+{
+public:
+ virtual bool OnInit();
+};
+class MyFrame: public wxFrame
+{
+public:
+ MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size);
+private:
+ void OnHello(wxCommandEvent& event);
+ void OnExit(wxCommandEvent& event);
+ void OnAbout(wxCommandEvent& event);
+ wxDECLARE_EVENT_TABLE();
+};
+enum
+{
+ ID_Hello = 1
+};
+wxBEGIN_EVENT_TABLE(MyFrame, wxFrame)
+ EVT_MENU(ID_Hello, MyFrame::OnHello)
+ EVT_MENU(wxID_EXIT, MyFrame::OnExit)
+ EVT_MENU(wxID_ABOUT, MyFrame::OnAbout)
+wxEND_EVENT_TABLE()
+bool MyApp::OnInit()
+{
+ MyFrame *frame = new MyFrame( "Hello World", wxPoint(50, 50), wxSize(450, 340) );
+ frame->Show( true );
+ return true;
+}
+MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
+ : wxFrame(NULL, wxID_ANY, title, pos, size)
+{
+ wxMenu *menuFile = new wxMenu;
+ menuFile->Append(ID_Hello, "&Hello...\tCtrl-H",
+ "Help string shown in status bar for this menu item");
+ menuFile->AppendSeparator();
+ menuFile->Append(wxID_EXIT);
+ wxMenu *menuHelp = new wxMenu;
+ menuHelp->Append(wxID_ABOUT);
+ wxMenuBar *menuBar = new wxMenuBar;
+ menuBar->Append( menuFile, "&File" );
+ menuBar->Append( menuHelp, "&Help" );
+ SetMenuBar( menuBar );
+ CreateStatusBar();
+ SetStatusText( "Welcome to wxWidgets!" );
+ Slic3r::Model model;
+ ModelObject *object = model.add_object();
+ SetStatusText(Slic3r::GUI::from_u8("HHuhuh"));
+}
+
+void MyFrame::OnExit(wxCommandEvent& event)
+{
+ Close( true );
+}
+void MyFrame::OnAbout(wxCommandEvent& event)
+{
+ wxMessageBox( "This is a wxWidgets' Hello world sample",
+ "About Hello World", wxOK | wxICON_INFORMATION );
+}
+void MyFrame::OnHello(wxCommandEvent& event)
+{
+ wxLogMessage("Hello world from wxWidgets!");
+}
+
+
+#if 1
int
main(int argc, char **argv)
{
@@ -176,5 +251,11 @@ main(int argc, char **argv)
}
#endif
+
+ MyApp *gui = new MyApp();
+
+ MyApp::SetInstance(gui);
+ wxEntry(argc, argv);
return 0;
}
+#endif
diff --git a/xs/src/slic3r/AppController.cpp b/src/slic3r/AppController.cpp
index 4a36b5d7f..4a36b5d7f 100644
--- a/xs/src/slic3r/AppController.cpp
+++ b/src/slic3r/AppController.cpp
diff --git a/xs/src/slic3r/AppController.hpp b/src/slic3r/AppController.hpp
index 71472835e..71472835e 100644
--- a/xs/src/slic3r/AppController.hpp
+++ b/src/slic3r/AppController.hpp
diff --git a/xs/src/slic3r/AppControllerWx.cpp b/src/slic3r/AppControllerWx.cpp
index 4d67d5f66..4d67d5f66 100644
--- a/xs/src/slic3r/AppControllerWx.cpp
+++ b/src/slic3r/AppControllerWx.cpp
diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt
new file mode 100644
index 000000000..e4dfd35ea
--- /dev/null
+++ b/src/slic3r/CMakeLists.txt
@@ -0,0 +1,106 @@
+add_library(libslic3r_gui STATIC
+ ${LIBDIR}/slic3r/GUI/AboutDialog.cpp
+ ${LIBDIR}/slic3r/GUI/AboutDialog.hpp
+ ${LIBDIR}/slic3r/GUI/AppConfig.cpp
+ ${LIBDIR}/slic3r/GUI/AppConfig.hpp
+ ${LIBDIR}/slic3r/GUI/BackgroundSlicingProcess.cpp
+ ${LIBDIR}/slic3r/GUI/BackgroundSlicingProcess.hpp
+ ${LIBDIR}/slic3r/GUI/BitmapCache.cpp
+ ${LIBDIR}/slic3r/GUI/BitmapCache.hpp
+ ${LIBDIR}/slic3r/GUI/ConfigSnapshotDialog.cpp
+ ${LIBDIR}/slic3r/GUI/ConfigSnapshotDialog.hpp
+ ${LIBDIR}/slic3r/GUI/3DScene.cpp
+ ${LIBDIR}/slic3r/GUI/3DScene.hpp
+ ${LIBDIR}/slic3r/GUI/GLShader.cpp
+ ${LIBDIR}/slic3r/GUI/GLShader.hpp
+ ${LIBDIR}/slic3r/GUI/GLCanvas3D.hpp
+ ${LIBDIR}/slic3r/GUI/GLCanvas3D.cpp
+ ${LIBDIR}/slic3r/GUI/GLCanvas3DManager.hpp
+ ${LIBDIR}/slic3r/GUI/GLCanvas3DManager.cpp
+ ${LIBDIR}/slic3r/GUI/GLGizmo.hpp
+ ${LIBDIR}/slic3r/GUI/GLGizmo.cpp
+ ${LIBDIR}/slic3r/GUI/GLTexture.hpp
+ ${LIBDIR}/slic3r/GUI/GLTexture.cpp
+ ${LIBDIR}/slic3r/GUI/GLToolbar.hpp
+ ${LIBDIR}/slic3r/GUI/GLToolbar.cpp
+ ${LIBDIR}/slic3r/GUI/Preferences.cpp
+ ${LIBDIR}/slic3r/GUI/Preferences.hpp
+ ${LIBDIR}/slic3r/GUI/Preset.cpp
+ ${LIBDIR}/slic3r/GUI/Preset.hpp
+ ${LIBDIR}/slic3r/GUI/PresetBundle.cpp
+ ${LIBDIR}/slic3r/GUI/PresetBundle.hpp
+ ${LIBDIR}/slic3r/GUI/PresetHints.cpp
+ ${LIBDIR}/slic3r/GUI/PresetHints.hpp
+ ${LIBDIR}/slic3r/GUI/GUI.cpp
+ ${LIBDIR}/slic3r/GUI/GUI.hpp
+ ${LIBDIR}/slic3r/GUI/GUI_ObjectParts.cpp
+ ${LIBDIR}/slic3r/GUI/GUI_ObjectParts.hpp
+ ${LIBDIR}/slic3r/GUI/LambdaObjectDialog.cpp
+ ${LIBDIR}/slic3r/GUI/LambdaObjectDialog.hpp
+ ${LIBDIR}/slic3r/GUI/Tab.cpp
+ ${LIBDIR}/slic3r/GUI/Tab.hpp
+ ${LIBDIR}/slic3r/GUI/TabIface.cpp
+ ${LIBDIR}/slic3r/GUI/TabIface.hpp
+ ${LIBDIR}/slic3r/GUI/Field.cpp
+ ${LIBDIR}/slic3r/GUI/Field.hpp
+ ${LIBDIR}/slic3r/GUI/OptionsGroup.cpp
+ ${LIBDIR}/slic3r/GUI/OptionsGroup.hpp
+ ${LIBDIR}/slic3r/GUI/BedShapeDialog.cpp
+ ${LIBDIR}/slic3r/GUI/BedShapeDialog.hpp
+ ${LIBDIR}/slic3r/GUI/2DBed.cpp
+ ${LIBDIR}/slic3r/GUI/2DBed.hpp
+ ${LIBDIR}/slic3r/GUI/wxExtensions.cpp
+ ${LIBDIR}/slic3r/GUI/wxExtensions.hpp
+ ${LIBDIR}/slic3r/GUI/WipeTowerDialog.cpp
+ ${LIBDIR}/slic3r/GUI/WipeTowerDialog.hpp
+ ${LIBDIR}/slic3r/GUI/RammingChart.cpp
+ ${LIBDIR}/slic3r/GUI/RammingChart.hpp
+ ${LIBDIR}/slic3r/GUI/BonjourDialog.cpp
+ ${LIBDIR}/slic3r/GUI/BonjourDialog.hpp
+ ${LIBDIR}/slic3r/GUI/ButtonsDescription.cpp
+ ${LIBDIR}/slic3r/GUI/ButtonsDescription.hpp
+ ${LIBDIR}/slic3r/Config/Snapshot.cpp
+ ${LIBDIR}/slic3r/Config/Snapshot.hpp
+ ${LIBDIR}/slic3r/Config/Version.cpp
+ ${LIBDIR}/slic3r/Config/Version.hpp
+ ${LIBDIR}/slic3r/Utils/ASCIIFolding.cpp
+ ${LIBDIR}/slic3r/Utils/ASCIIFolding.hpp
+ ${LIBDIR}/slic3r/Utils/Serial.cpp
+ ${LIBDIR}/slic3r/Utils/Serial.hpp
+ ${LIBDIR}/slic3r/GUI/ConfigWizard.cpp
+ ${LIBDIR}/slic3r/GUI/ConfigWizard.hpp
+ ${LIBDIR}/slic3r/GUI/MsgDialog.cpp
+ ${LIBDIR}/slic3r/GUI/MsgDialog.hpp
+ ${LIBDIR}/slic3r/GUI/UpdateDialogs.cpp
+ ${LIBDIR}/slic3r/GUI/UpdateDialogs.hpp
+ ${LIBDIR}/slic3r/GUI/FirmwareDialog.cpp
+ ${LIBDIR}/slic3r/GUI/FirmwareDialog.hpp
+ ${LIBDIR}/slic3r/GUI/ProgressIndicator.hpp
+ ${LIBDIR}/slic3r/GUI/ProgressStatusBar.hpp
+ ${LIBDIR}/slic3r/GUI/ProgressStatusBar.cpp
+ ${LIBDIR}/slic3r/Utils/Http.cpp
+ ${LIBDIR}/slic3r/Utils/Http.hpp
+ ${LIBDIR}/slic3r/Utils/FixModelByWin10.cpp
+ ${LIBDIR}/slic3r/Utils/FixModelByWin10.hpp
+ ${LIBDIR}/slic3r/Utils/PrintHostSendDialog.cpp
+ ${LIBDIR}/slic3r/Utils/PrintHostSendDialog.hpp
+ ${LIBDIR}/slic3r/Utils/OctoPrint.cpp
+ ${LIBDIR}/slic3r/Utils/OctoPrint.hpp
+ ${LIBDIR}/slic3r/Utils/Duet.cpp
+ ${LIBDIR}/slic3r/Utils/Duet.hpp
+ ${LIBDIR}/slic3r/Utils/PrintHost.cpp
+ ${LIBDIR}/slic3r/Utils/PrintHost.hpp
+ ${LIBDIR}/slic3r/Utils/Bonjour.cpp
+ ${LIBDIR}/slic3r/Utils/Bonjour.hpp
+ ${LIBDIR}/slic3r/Utils/PresetUpdater.cpp
+ ${LIBDIR}/slic3r/Utils/PresetUpdater.hpp
+ ${LIBDIR}/slic3r/Utils/Time.cpp
+ ${LIBDIR}/slic3r/Utils/Time.hpp
+ ${LIBDIR}/slic3r/Utils/HexFile.cpp
+ ${LIBDIR}/slic3r/Utils/HexFile.hpp
+ ${LIBDIR}/slic3r/AppController.hpp
+ ${LIBDIR}/slic3r/AppController.cpp
+ ${LIBDIR}/slic3r/AppControllerWx.cpp
+)
+
+target_link_libraries(libslic3r_gui libslic3r avrdude)
diff --git a/xs/src/slic3r/Config/Snapshot.cpp b/src/slic3r/Config/Snapshot.cpp
index 704fbcfa1..704fbcfa1 100644
--- a/xs/src/slic3r/Config/Snapshot.cpp
+++ b/src/slic3r/Config/Snapshot.cpp
diff --git a/xs/src/slic3r/Config/Snapshot.hpp b/src/slic3r/Config/Snapshot.hpp
index a916dfe92..a916dfe92 100644
--- a/xs/src/slic3r/Config/Snapshot.hpp
+++ b/src/slic3r/Config/Snapshot.hpp
diff --git a/xs/src/slic3r/Config/Version.cpp b/src/slic3r/Config/Version.cpp
index a85322eca..a85322eca 100644
--- a/xs/src/slic3r/Config/Version.cpp
+++ b/src/slic3r/Config/Version.cpp
diff --git a/xs/src/slic3r/Config/Version.hpp b/src/slic3r/Config/Version.hpp
index acb0ae460..acb0ae460 100644
--- a/xs/src/slic3r/Config/Version.hpp
+++ b/src/slic3r/Config/Version.hpp
diff --git a/xs/src/slic3r/GUI/2DBed.cpp b/src/slic3r/GUI/2DBed.cpp
index e19f839cd..e19f839cd 100644
--- a/xs/src/slic3r/GUI/2DBed.cpp
+++ b/src/slic3r/GUI/2DBed.cpp
diff --git a/xs/src/slic3r/GUI/2DBed.hpp b/src/slic3r/GUI/2DBed.hpp
index d7a7f4260..d7a7f4260 100644
--- a/xs/src/slic3r/GUI/2DBed.hpp
+++ b/src/slic3r/GUI/2DBed.hpp
diff --git a/xs/src/slic3r/GUI/3DScene.cpp b/src/slic3r/GUI/3DScene.cpp
index e6f038042..e6f038042 100644
--- a/xs/src/slic3r/GUI/3DScene.cpp
+++ b/src/slic3r/GUI/3DScene.cpp
diff --git a/xs/src/slic3r/GUI/3DScene.hpp b/src/slic3r/GUI/3DScene.hpp
index f2d1c0786..f2d1c0786 100644
--- a/xs/src/slic3r/GUI/3DScene.hpp
+++ b/src/slic3r/GUI/3DScene.hpp
diff --git a/xs/src/slic3r/GUI/AboutDialog.cpp b/src/slic3r/GUI/AboutDialog.cpp
index 0fed8d175..0fed8d175 100644
--- a/xs/src/slic3r/GUI/AboutDialog.cpp
+++ b/src/slic3r/GUI/AboutDialog.cpp
diff --git a/xs/src/slic3r/GUI/AboutDialog.hpp b/src/slic3r/GUI/AboutDialog.hpp
index 01f7564c5..01f7564c5 100644
--- a/xs/src/slic3r/GUI/AboutDialog.hpp
+++ b/src/slic3r/GUI/AboutDialog.hpp
diff --git a/xs/src/slic3r/GUI/AppConfig.cpp b/src/slic3r/GUI/AppConfig.cpp
index d7307cc32..d7307cc32 100644
--- a/xs/src/slic3r/GUI/AppConfig.cpp
+++ b/src/slic3r/GUI/AppConfig.cpp
diff --git a/xs/src/slic3r/GUI/AppConfig.hpp b/src/slic3r/GUI/AppConfig.hpp
index 5af635a12..5af635a12 100644
--- a/xs/src/slic3r/GUI/AppConfig.hpp
+++ b/src/slic3r/GUI/AppConfig.hpp
diff --git a/xs/src/slic3r/GUI/BackgroundSlicingProcess.cpp b/src/slic3r/GUI/BackgroundSlicingProcess.cpp
index 99997e390..99997e390 100644
--- a/xs/src/slic3r/GUI/BackgroundSlicingProcess.cpp
+++ b/src/slic3r/GUI/BackgroundSlicingProcess.cpp
diff --git a/xs/src/slic3r/GUI/BackgroundSlicingProcess.hpp b/src/slic3r/GUI/BackgroundSlicingProcess.hpp
index cc7a6db30..cc7a6db30 100644
--- a/xs/src/slic3r/GUI/BackgroundSlicingProcess.hpp
+++ b/src/slic3r/GUI/BackgroundSlicingProcess.hpp
diff --git a/xs/src/slic3r/GUI/BedShapeDialog.cpp b/src/slic3r/GUI/BedShapeDialog.cpp
index e04f2b370..e04f2b370 100644
--- a/xs/src/slic3r/GUI/BedShapeDialog.cpp
+++ b/src/slic3r/GUI/BedShapeDialog.cpp
diff --git a/xs/src/slic3r/GUI/BedShapeDialog.hpp b/src/slic3r/GUI/BedShapeDialog.hpp
index d8ba5a912..d8ba5a912 100644
--- a/xs/src/slic3r/GUI/BedShapeDialog.hpp
+++ b/src/slic3r/GUI/BedShapeDialog.hpp
diff --git a/xs/src/slic3r/GUI/BitmapCache.cpp b/src/slic3r/GUI/BitmapCache.cpp
index 93853458e..93853458e 100644
--- a/xs/src/slic3r/GUI/BitmapCache.cpp
+++ b/src/slic3r/GUI/BitmapCache.cpp
diff --git a/xs/src/slic3r/GUI/BitmapCache.hpp b/src/slic3r/GUI/BitmapCache.hpp
index bec9a7ad2..bec9a7ad2 100644
--- a/xs/src/slic3r/GUI/BitmapCache.hpp
+++ b/src/slic3r/GUI/BitmapCache.hpp
diff --git a/xs/src/slic3r/GUI/BonjourDialog.cpp b/src/slic3r/GUI/BonjourDialog.cpp
index 11cfea642..11cfea642 100644
--- a/xs/src/slic3r/GUI/BonjourDialog.cpp
+++ b/src/slic3r/GUI/BonjourDialog.cpp
diff --git a/xs/src/slic3r/GUI/BonjourDialog.hpp b/src/slic3r/GUI/BonjourDialog.hpp
index e3f53790b..e3f53790b 100644
--- a/xs/src/slic3r/GUI/BonjourDialog.hpp
+++ b/src/slic3r/GUI/BonjourDialog.hpp
diff --git a/xs/src/slic3r/GUI/ButtonsDescription.cpp b/src/slic3r/GUI/ButtonsDescription.cpp
index 5739fc90e..5739fc90e 100644
--- a/xs/src/slic3r/GUI/ButtonsDescription.cpp
+++ b/src/slic3r/GUI/ButtonsDescription.cpp
diff --git a/xs/src/slic3r/GUI/ButtonsDescription.hpp b/src/slic3r/GUI/ButtonsDescription.hpp
index 4858eaaea..4858eaaea 100644
--- a/xs/src/slic3r/GUI/ButtonsDescription.hpp
+++ b/src/slic3r/GUI/ButtonsDescription.hpp
diff --git a/xs/src/slic3r/GUI/ConfigExceptions.hpp b/src/slic3r/GUI/ConfigExceptions.hpp
index 9038d3445..9038d3445 100644
--- a/xs/src/slic3r/GUI/ConfigExceptions.hpp
+++ b/src/slic3r/GUI/ConfigExceptions.hpp
diff --git a/xs/src/slic3r/GUI/ConfigSnapshotDialog.cpp b/src/slic3r/GUI/ConfigSnapshotDialog.cpp
index efcbf05bd..efcbf05bd 100644
--- a/xs/src/slic3r/GUI/ConfigSnapshotDialog.cpp
+++ b/src/slic3r/GUI/ConfigSnapshotDialog.cpp
diff --git a/xs/src/slic3r/GUI/ConfigSnapshotDialog.hpp b/src/slic3r/GUI/ConfigSnapshotDialog.hpp
index f43fb8ed1..f43fb8ed1 100644
--- a/xs/src/slic3r/GUI/ConfigSnapshotDialog.hpp
+++ b/src/slic3r/GUI/ConfigSnapshotDialog.hpp
diff --git a/xs/src/slic3r/GUI/ConfigWizard.cpp b/src/slic3r/GUI/ConfigWizard.cpp
index e784d8525..e784d8525 100644
--- a/xs/src/slic3r/GUI/ConfigWizard.cpp
+++ b/src/slic3r/GUI/ConfigWizard.cpp
diff --git a/xs/src/slic3r/GUI/ConfigWizard.hpp b/src/slic3r/GUI/ConfigWizard.hpp
index 73fce7cd2..73fce7cd2 100644
--- a/xs/src/slic3r/GUI/ConfigWizard.hpp
+++ b/src/slic3r/GUI/ConfigWizard.hpp
diff --git a/xs/src/slic3r/GUI/ConfigWizard_private.hpp b/src/slic3r/GUI/ConfigWizard_private.hpp
index 2c8f23cd3..2c8f23cd3 100644
--- a/xs/src/slic3r/GUI/ConfigWizard_private.hpp
+++ b/src/slic3r/GUI/ConfigWizard_private.hpp
diff --git a/xs/src/slic3r/GUI/Field.cpp b/src/slic3r/GUI/Field.cpp
index f143e8bc6..f143e8bc6 100644
--- a/xs/src/slic3r/GUI/Field.cpp
+++ b/src/slic3r/GUI/Field.cpp
diff --git a/xs/src/slic3r/GUI/Field.hpp b/src/slic3r/GUI/Field.hpp
index c38658e2b..c38658e2b 100644
--- a/xs/src/slic3r/GUI/Field.hpp
+++ b/src/slic3r/GUI/Field.hpp
diff --git a/xs/src/slic3r/GUI/FirmwareDialog.cpp b/src/slic3r/GUI/FirmwareDialog.cpp
index d5ac64d90..d5ac64d90 100644
--- a/xs/src/slic3r/GUI/FirmwareDialog.cpp
+++ b/src/slic3r/GUI/FirmwareDialog.cpp
diff --git a/xs/src/slic3r/GUI/FirmwareDialog.hpp b/src/slic3r/GUI/FirmwareDialog.hpp
index ad048bf5d..ad048bf5d 100644
--- a/xs/src/slic3r/GUI/FirmwareDialog.hpp
+++ b/src/slic3r/GUI/FirmwareDialog.hpp
diff --git a/xs/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp
index cb3250916..cb3250916 100644
--- a/xs/src/slic3r/GUI/GLCanvas3D.cpp
+++ b/src/slic3r/GUI/GLCanvas3D.cpp
diff --git a/xs/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp
index 528f73fc1..528f73fc1 100644
--- a/xs/src/slic3r/GUI/GLCanvas3D.hpp
+++ b/src/slic3r/GUI/GLCanvas3D.hpp
diff --git a/xs/src/slic3r/GUI/GLCanvas3DManager.cpp b/src/slic3r/GUI/GLCanvas3DManager.cpp
index 495f49425..495f49425 100644
--- a/xs/src/slic3r/GUI/GLCanvas3DManager.cpp
+++ b/src/slic3r/GUI/GLCanvas3DManager.cpp
diff --git a/xs/src/slic3r/GUI/GLCanvas3DManager.hpp b/src/slic3r/GUI/GLCanvas3DManager.hpp
index 4922b6171..4922b6171 100644
--- a/xs/src/slic3r/GUI/GLCanvas3DManager.hpp
+++ b/src/slic3r/GUI/GLCanvas3DManager.hpp
diff --git a/xs/src/slic3r/GUI/GLGizmo.cpp b/src/slic3r/GUI/GLGizmo.cpp
index e23958c1d..e23958c1d 100644
--- a/xs/src/slic3r/GUI/GLGizmo.cpp
+++ b/src/slic3r/GUI/GLGizmo.cpp
diff --git a/xs/src/slic3r/GUI/GLGizmo.hpp b/src/slic3r/GUI/GLGizmo.hpp
index 2430b5af5..2430b5af5 100644
--- a/xs/src/slic3r/GUI/GLGizmo.hpp
+++ b/src/slic3r/GUI/GLGizmo.hpp
diff --git a/xs/src/slic3r/GUI/GLShader.cpp b/src/slic3r/GUI/GLShader.cpp
index e2995f7c3..e2995f7c3 100644
--- a/xs/src/slic3r/GUI/GLShader.cpp
+++ b/src/slic3r/GUI/GLShader.cpp
diff --git a/xs/src/slic3r/GUI/GLShader.hpp b/src/slic3r/GUI/GLShader.hpp
index 803b2f154..803b2f154 100644
--- a/xs/src/slic3r/GUI/GLShader.hpp
+++ b/src/slic3r/GUI/GLShader.hpp
diff --git a/xs/src/slic3r/GUI/GLTexture.cpp b/src/slic3r/GUI/GLTexture.cpp
index 235e3d93b..235e3d93b 100644
--- a/xs/src/slic3r/GUI/GLTexture.cpp
+++ b/src/slic3r/GUI/GLTexture.cpp
diff --git a/xs/src/slic3r/GUI/GLTexture.hpp b/src/slic3r/GUI/GLTexture.hpp
index e027bd152..e027bd152 100644
--- a/xs/src/slic3r/GUI/GLTexture.hpp
+++ b/src/slic3r/GUI/GLTexture.hpp
diff --git a/xs/src/slic3r/GUI/GLToolbar.cpp b/src/slic3r/GUI/GLToolbar.cpp
index 388868b12..388868b12 100644
--- a/xs/src/slic3r/GUI/GLToolbar.cpp
+++ b/src/slic3r/GUI/GLToolbar.cpp
diff --git a/xs/src/slic3r/GUI/GLToolbar.hpp b/src/slic3r/GUI/GLToolbar.hpp
index 65d6748ff..65d6748ff 100644
--- a/xs/src/slic3r/GUI/GLToolbar.hpp
+++ b/src/slic3r/GUI/GLToolbar.hpp
diff --git a/xs/src/slic3r/GUI/GUI.cpp b/src/slic3r/GUI/GUI.cpp
index decdb5691..24d459921 100644
--- a/xs/src/slic3r/GUI/GUI.cpp
+++ b/src/slic3r/GUI/GUI.cpp
@@ -46,6 +46,8 @@
#include "Tab.hpp"
#include "TabIface.hpp"
+#include "GUI_Preview.hpp"
+#include "GUI_PreviewIface.hpp"
#include "AboutDialog.hpp"
#include "AppConfig.hpp"
#include "ConfigSnapshotDialog.hpp"
@@ -148,6 +150,8 @@ wxStaticBitmap *g_manifold_warning_icon = nullptr;
bool g_show_print_info = false;
bool g_show_manifold_warning_icon = false;
+PreviewIface* g_preview = nullptr;
+
static void init_label_colours()
{
auto luma = get_colour_approx_luma(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW));
@@ -665,6 +669,17 @@ TabIface* get_preset_tab_iface(char *name)
return new TabIface(nullptr);
}
+PreviewIface* create_preview_iface(wxNotebook* parent, DynamicPrintConfig* config, Print* print, GCodePreviewData* gcode_preview_data)
+{
+ if (g_preview == nullptr)
+ {
+ Preview* panel = new Preview(parent, config, print, gcode_preview_data);
+ g_preview = new PreviewIface(panel);
+ }
+
+ return g_preview;
+}
+
// opt_index = 0, by the reason of zero-index in ConfigOptionVector by default (in case only one element)
void change_opt_value(DynamicPrintConfig& config, const t_config_option_key& opt_key, const boost::any& value, int opt_index /*= 0*/)
{
diff --git a/xs/src/slic3r/GUI/GUI.hpp b/src/slic3r/GUI/GUI.hpp
index 998b572b9..8dfaf42c6 100644
--- a/xs/src/slic3r/GUI/GUI.hpp
+++ b/src/slic3r/GUI/GUI.hpp
@@ -39,6 +39,9 @@ class AppConfig;
class PresetUpdater;
class DynamicPrintConfig;
class TabIface;
+class PreviewIface;
+class Print;
+class GCodePreviewData;
#define _(s) Slic3r::GUI::I18N::translate((s))
@@ -165,6 +168,8 @@ extern void open_preferences_dialog(int event_preferences);
void create_preset_tabs(int event_value_change, int event_presets_changed);
TabIface* get_preset_tab_iface(char *name);
+PreviewIface* create_preview_iface(wxNotebook* notebook, DynamicPrintConfig* config, Print* print, GCodePreviewData* gcode_preview_data);
+
// add it at the end of the tab panel.
void add_created_tab(Tab* panel, int event_value_change, int event_presets_changed);
// Change option value in config
diff --git a/xs/src/slic3r/GUI/GUI_ObjectParts.cpp b/src/slic3r/GUI/GUI_ObjectParts.cpp
index ae34359ce..ae34359ce 100644
--- a/xs/src/slic3r/GUI/GUI_ObjectParts.cpp
+++ b/src/slic3r/GUI/GUI_ObjectParts.cpp
diff --git a/xs/src/slic3r/GUI/GUI_ObjectParts.hpp b/src/slic3r/GUI/GUI_ObjectParts.hpp
index e66b4d1db..e66b4d1db 100644
--- a/xs/src/slic3r/GUI/GUI_ObjectParts.hpp
+++ b/src/slic3r/GUI/GUI_ObjectParts.hpp
diff --git a/xs/src/slic3r/GUI/LambdaObjectDialog.cpp b/src/slic3r/GUI/LambdaObjectDialog.cpp
index 7d741be7f..7d741be7f 100644
--- a/xs/src/slic3r/GUI/LambdaObjectDialog.cpp
+++ b/src/slic3r/GUI/LambdaObjectDialog.cpp
diff --git a/xs/src/slic3r/GUI/LambdaObjectDialog.hpp b/src/slic3r/GUI/LambdaObjectDialog.hpp
index 8f3e8cd80..8f3e8cd80 100644
--- a/xs/src/slic3r/GUI/LambdaObjectDialog.hpp
+++ b/src/slic3r/GUI/LambdaObjectDialog.hpp
diff --git a/xs/src/slic3r/GUI/MsgDialog.cpp b/src/slic3r/GUI/MsgDialog.cpp
index 58679ed9e..58679ed9e 100644
--- a/xs/src/slic3r/GUI/MsgDialog.cpp
+++ b/src/slic3r/GUI/MsgDialog.cpp
diff --git a/xs/src/slic3r/GUI/MsgDialog.hpp b/src/slic3r/GUI/MsgDialog.hpp
index ca349eb5c..ca349eb5c 100644
--- a/xs/src/slic3r/GUI/MsgDialog.hpp
+++ b/src/slic3r/GUI/MsgDialog.hpp
diff --git a/xs/src/slic3r/GUI/OptionsGroup.cpp b/src/slic3r/GUI/OptionsGroup.cpp
index ea22b2cb5..ea22b2cb5 100644
--- a/xs/src/slic3r/GUI/OptionsGroup.cpp
+++ b/src/slic3r/GUI/OptionsGroup.cpp
diff --git a/xs/src/slic3r/GUI/OptionsGroup.hpp b/src/slic3r/GUI/OptionsGroup.hpp
index 4941e5453..4941e5453 100644
--- a/xs/src/slic3r/GUI/OptionsGroup.hpp
+++ b/src/slic3r/GUI/OptionsGroup.hpp
diff --git a/xs/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp
index 89a8ead92..89a8ead92 100644
--- a/xs/src/slic3r/GUI/Preferences.cpp
+++ b/src/slic3r/GUI/Preferences.cpp
diff --git a/xs/src/slic3r/GUI/Preferences.hpp b/src/slic3r/GUI/Preferences.hpp
index d01d78b70..d01d78b70 100644
--- a/xs/src/slic3r/GUI/Preferences.hpp
+++ b/src/slic3r/GUI/Preferences.hpp
diff --git a/xs/src/slic3r/GUI/Preset.cpp b/src/slic3r/GUI/Preset.cpp
index 9911caa5b..9911caa5b 100644
--- a/xs/src/slic3r/GUI/Preset.cpp
+++ b/src/slic3r/GUI/Preset.cpp
diff --git a/xs/src/slic3r/GUI/Preset.hpp b/src/slic3r/GUI/Preset.hpp
index 821d7dc54..821d7dc54 100644
--- a/xs/src/slic3r/GUI/Preset.hpp
+++ b/src/slic3r/GUI/Preset.hpp
diff --git a/xs/src/slic3r/GUI/PresetBundle.cpp b/src/slic3r/GUI/PresetBundle.cpp
index cd3924dd0..cd3924dd0 100644
--- a/xs/src/slic3r/GUI/PresetBundle.cpp
+++ b/src/slic3r/GUI/PresetBundle.cpp
diff --git a/xs/src/slic3r/GUI/PresetBundle.hpp b/src/slic3r/GUI/PresetBundle.hpp
index 68ec534da..68ec534da 100644
--- a/xs/src/slic3r/GUI/PresetBundle.hpp
+++ b/src/slic3r/GUI/PresetBundle.hpp
diff --git a/xs/src/slic3r/GUI/PresetHints.cpp b/src/slic3r/GUI/PresetHints.cpp
index d4c929c1c..d4c929c1c 100644
--- a/xs/src/slic3r/GUI/PresetHints.cpp
+++ b/src/slic3r/GUI/PresetHints.cpp
diff --git a/xs/src/slic3r/GUI/PresetHints.hpp b/src/slic3r/GUI/PresetHints.hpp
index 39bf0b100..39bf0b100 100644
--- a/xs/src/slic3r/GUI/PresetHints.hpp
+++ b/src/slic3r/GUI/PresetHints.hpp
diff --git a/xs/src/slic3r/GUI/ProgressIndicator.hpp b/src/slic3r/GUI/ProgressIndicator.hpp
index 0cf8b4a17..0cf8b4a17 100644
--- a/xs/src/slic3r/GUI/ProgressIndicator.hpp
+++ b/src/slic3r/GUI/ProgressIndicator.hpp
diff --git a/xs/src/slic3r/GUI/ProgressStatusBar.cpp b/src/slic3r/GUI/ProgressStatusBar.cpp
index 363e34cb2..363e34cb2 100644
--- a/xs/src/slic3r/GUI/ProgressStatusBar.cpp
+++ b/src/slic3r/GUI/ProgressStatusBar.cpp
diff --git a/xs/src/slic3r/GUI/ProgressStatusBar.hpp b/src/slic3r/GUI/ProgressStatusBar.hpp
index 9a7f58eee..7c2171a5e 100644
--- a/xs/src/slic3r/GUI/ProgressStatusBar.hpp
+++ b/src/slic3r/GUI/ProgressStatusBar.hpp
@@ -4,7 +4,7 @@
#include <memory>
#include <functional>
-#include "../../callback.hpp"
+#include "callback.hpp"
class wxTimer;
class wxGauge;
diff --git a/xs/src/slic3r/GUI/RammingChart.cpp b/src/slic3r/GUI/RammingChart.cpp
index 8954ff93b..8954ff93b 100644
--- a/xs/src/slic3r/GUI/RammingChart.cpp
+++ b/src/slic3r/GUI/RammingChart.cpp
diff --git a/xs/src/slic3r/GUI/RammingChart.hpp b/src/slic3r/GUI/RammingChart.hpp
index 7d3b9a962..7d3b9a962 100644
--- a/xs/src/slic3r/GUI/RammingChart.hpp
+++ b/src/slic3r/GUI/RammingChart.hpp
diff --git a/xs/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp
index e0db63803..e0db63803 100644
--- a/xs/src/slic3r/GUI/Tab.cpp
+++ b/src/slic3r/GUI/Tab.cpp
diff --git a/xs/src/slic3r/GUI/Tab.hpp b/src/slic3r/GUI/Tab.hpp
index e4e37d4eb..e4e37d4eb 100644
--- a/xs/src/slic3r/GUI/Tab.hpp
+++ b/src/slic3r/GUI/Tab.hpp
diff --git a/xs/src/slic3r/GUI/TabIface.cpp b/src/slic3r/GUI/TabIface.cpp
index 29833322b..29833322b 100644
--- a/xs/src/slic3r/GUI/TabIface.cpp
+++ b/src/slic3r/GUI/TabIface.cpp
diff --git a/xs/src/slic3r/GUI/TabIface.hpp b/src/slic3r/GUI/TabIface.hpp
index 2f7f4e8e7..2f7f4e8e7 100644
--- a/xs/src/slic3r/GUI/TabIface.hpp
+++ b/src/slic3r/GUI/TabIface.hpp
diff --git a/xs/src/slic3r/GUI/UpdateDialogs.cpp b/src/slic3r/GUI/UpdateDialogs.cpp
index 70d9c851c..70d9c851c 100644
--- a/xs/src/slic3r/GUI/UpdateDialogs.cpp
+++ b/src/slic3r/GUI/UpdateDialogs.cpp
diff --git a/xs/src/slic3r/GUI/UpdateDialogs.hpp b/src/slic3r/GUI/UpdateDialogs.hpp
index 62548b98b..62548b98b 100644
--- a/xs/src/slic3r/GUI/UpdateDialogs.hpp
+++ b/src/slic3r/GUI/UpdateDialogs.hpp
diff --git a/xs/src/slic3r/GUI/Widget.hpp b/src/slic3r/GUI/Widget.hpp
index bcf772469..bcf772469 100644
--- a/xs/src/slic3r/GUI/Widget.hpp
+++ b/src/slic3r/GUI/Widget.hpp
diff --git a/xs/src/slic3r/GUI/WipeTowerDialog.cpp b/src/slic3r/GUI/WipeTowerDialog.cpp
index eef4017c1..eef4017c1 100644
--- a/xs/src/slic3r/GUI/WipeTowerDialog.cpp
+++ b/src/slic3r/GUI/WipeTowerDialog.cpp
diff --git a/xs/src/slic3r/GUI/WipeTowerDialog.hpp b/src/slic3r/GUI/WipeTowerDialog.hpp
index d858062da..d858062da 100644
--- a/xs/src/slic3r/GUI/WipeTowerDialog.hpp
+++ b/src/slic3r/GUI/WipeTowerDialog.hpp
diff --git a/src/slic3r/GUI/callback.hpp b/src/slic3r/GUI/callback.hpp
new file mode 100644
index 000000000..ac92721a5
--- /dev/null
+++ b/src/slic3r/GUI/callback.hpp
@@ -0,0 +1,30 @@
+// I AM A PHONY PLACEHOLDER FOR THE PERL CALLBACK.
+// GET RID OF ME!
+
+#ifndef slic3r_GUI_PerlCallback_phony_hpp_
+#define slic3r_GUI_PerlCallback_phony_hpp_
+
+#include <vector>
+
+namespace Slic3r {
+
+class PerlCallback {
+public:
+ PerlCallback(void *) {}
+ PerlCallback() {}
+ void register_callback(void *) {}
+ void deregister_callback() {}
+ void call() const {}
+ void call(int) const {}
+ void call(int, int) const {}
+ void call(const std::vector<int>&) const {}
+ void call(double) const {}
+ void call(double, double) const {}
+ void call(double, double, double) const {}
+ void call(double, double, double, double) const {}
+ void call(bool b) const {}
+};
+
+} // namespace Slic3r
+
+#endif /* slic3r_GUI_PerlCallback_phony_hpp_ */
diff --git a/xs/src/slic3r/GUI/wxExtensions.cpp b/src/slic3r/GUI/wxExtensions.cpp
index 13730a497..13730a497 100644
--- a/xs/src/slic3r/GUI/wxExtensions.cpp
+++ b/src/slic3r/GUI/wxExtensions.cpp
diff --git a/xs/src/slic3r/GUI/wxExtensions.hpp b/src/slic3r/GUI/wxExtensions.hpp
index 51c02035c..51c02035c 100644
--- a/xs/src/slic3r/GUI/wxExtensions.hpp
+++ b/src/slic3r/GUI/wxExtensions.hpp
diff --git a/xs/src/slic3r/GUI/wxinit.h b/src/slic3r/GUI/wxinit.h
index b55681b92..b55681b92 100644
--- a/xs/src/slic3r/GUI/wxinit.h
+++ b/src/slic3r/GUI/wxinit.h
diff --git a/xs/src/slic3r/Utils/ASCIIFolding.cpp b/src/slic3r/Utils/ASCIIFolding.cpp
index c61fe2902..c61fe2902 100644
--- a/xs/src/slic3r/Utils/ASCIIFolding.cpp
+++ b/src/slic3r/Utils/ASCIIFolding.cpp
diff --git a/xs/src/slic3r/Utils/ASCIIFolding.hpp b/src/slic3r/Utils/ASCIIFolding.hpp
index 55f56482d..55f56482d 100644
--- a/xs/src/slic3r/Utils/ASCIIFolding.hpp
+++ b/src/slic3r/Utils/ASCIIFolding.hpp
diff --git a/xs/src/slic3r/Utils/Bonjour.cpp b/src/slic3r/Utils/Bonjour.cpp
index 09d9b5873..09d9b5873 100644
--- a/xs/src/slic3r/Utils/Bonjour.cpp
+++ b/src/slic3r/Utils/Bonjour.cpp
diff --git a/xs/src/slic3r/Utils/Bonjour.hpp b/src/slic3r/Utils/Bonjour.hpp
index 63f34638c..63f34638c 100644
--- a/xs/src/slic3r/Utils/Bonjour.hpp
+++ b/src/slic3r/Utils/Bonjour.hpp
diff --git a/xs/src/slic3r/Utils/Duet.cpp b/src/slic3r/Utils/Duet.cpp
index f25327161..f25327161 100644
--- a/xs/src/slic3r/Utils/Duet.cpp
+++ b/src/slic3r/Utils/Duet.cpp
diff --git a/xs/src/slic3r/Utils/Duet.hpp b/src/slic3r/Utils/Duet.hpp
index bc210d7a4..bc210d7a4 100644
--- a/xs/src/slic3r/Utils/Duet.hpp
+++ b/src/slic3r/Utils/Duet.hpp
diff --git a/xs/src/slic3r/Utils/FixModelByWin10.cpp b/src/slic3r/Utils/FixModelByWin10.cpp
index 556035a5b..556035a5b 100644
--- a/xs/src/slic3r/Utils/FixModelByWin10.cpp
+++ b/src/slic3r/Utils/FixModelByWin10.cpp
diff --git a/xs/src/slic3r/Utils/FixModelByWin10.hpp b/src/slic3r/Utils/FixModelByWin10.hpp
index c148a6970..c148a6970 100644
--- a/xs/src/slic3r/Utils/FixModelByWin10.hpp
+++ b/src/slic3r/Utils/FixModelByWin10.hpp
diff --git a/xs/src/slic3r/Utils/HexFile.cpp b/src/slic3r/Utils/HexFile.cpp
index 282c647bd..282c647bd 100644
--- a/xs/src/slic3r/Utils/HexFile.cpp
+++ b/src/slic3r/Utils/HexFile.cpp
diff --git a/xs/src/slic3r/Utils/HexFile.hpp b/src/slic3r/Utils/HexFile.hpp
index 1201d23a4..1201d23a4 100644
--- a/xs/src/slic3r/Utils/HexFile.hpp
+++ b/src/slic3r/Utils/HexFile.hpp
diff --git a/xs/src/slic3r/Utils/Http.cpp b/src/slic3r/Utils/Http.cpp
index 9b67ceea8..9b67ceea8 100644
--- a/xs/src/slic3r/Utils/Http.cpp
+++ b/src/slic3r/Utils/Http.cpp
diff --git a/xs/src/slic3r/Utils/Http.hpp b/src/slic3r/Utils/Http.hpp
index 44580b7ea..44580b7ea 100644
--- a/xs/src/slic3r/Utils/Http.hpp
+++ b/src/slic3r/Utils/Http.hpp
diff --git a/xs/src/slic3r/Utils/OctoPrint.cpp b/src/slic3r/Utils/OctoPrint.cpp
index db86d7697..db86d7697 100644
--- a/xs/src/slic3r/Utils/OctoPrint.cpp
+++ b/src/slic3r/Utils/OctoPrint.cpp
diff --git a/xs/src/slic3r/Utils/OctoPrint.hpp b/src/slic3r/Utils/OctoPrint.hpp
index f6c4d58c8..f6c4d58c8 100644
--- a/xs/src/slic3r/Utils/OctoPrint.hpp
+++ b/src/slic3r/Utils/OctoPrint.hpp
diff --git a/xs/src/slic3r/Utils/PresetUpdater.cpp b/src/slic3r/Utils/PresetUpdater.cpp
index 2e423dc5e..2e423dc5e 100644
--- a/xs/src/slic3r/Utils/PresetUpdater.cpp
+++ b/src/slic3r/Utils/PresetUpdater.cpp
diff --git a/xs/src/slic3r/Utils/PresetUpdater.hpp b/src/slic3r/Utils/PresetUpdater.hpp
index 6a53cca81..6a53cca81 100644
--- a/xs/src/slic3r/Utils/PresetUpdater.hpp
+++ b/src/slic3r/Utils/PresetUpdater.hpp
diff --git a/xs/src/slic3r/Utils/PrintHost.cpp b/src/slic3r/Utils/PrintHost.cpp
index dd72bae40..dd72bae40 100644
--- a/xs/src/slic3r/Utils/PrintHost.cpp
+++ b/src/slic3r/Utils/PrintHost.cpp
diff --git a/xs/src/slic3r/Utils/PrintHost.hpp b/src/slic3r/Utils/PrintHost.hpp
index bc828ea46..bc828ea46 100644
--- a/xs/src/slic3r/Utils/PrintHost.hpp
+++ b/src/slic3r/Utils/PrintHost.hpp
diff --git a/xs/src/slic3r/Utils/PrintHostSendDialog.cpp b/src/slic3r/Utils/PrintHostSendDialog.cpp
index c5d441f87..c5d441f87 100644
--- a/xs/src/slic3r/Utils/PrintHostSendDialog.cpp
+++ b/src/slic3r/Utils/PrintHostSendDialog.cpp
diff --git a/xs/src/slic3r/Utils/PrintHostSendDialog.hpp b/src/slic3r/Utils/PrintHostSendDialog.hpp
index dc4a8d6f7..dc4a8d6f7 100644
--- a/xs/src/slic3r/Utils/PrintHostSendDialog.hpp
+++ b/src/slic3r/Utils/PrintHostSendDialog.hpp
diff --git a/xs/src/slic3r/Utils/Semver.hpp b/src/slic3r/Utils/Semver.hpp
index 736f9b891..736f9b891 100644
--- a/xs/src/slic3r/Utils/Semver.hpp
+++ b/src/slic3r/Utils/Semver.hpp
diff --git a/xs/src/slic3r/Utils/Serial.cpp b/src/slic3r/Utils/Serial.cpp
index 601719b50..601719b50 100644
--- a/xs/src/slic3r/Utils/Serial.cpp
+++ b/src/slic3r/Utils/Serial.cpp
diff --git a/xs/src/slic3r/Utils/Serial.hpp b/src/slic3r/Utils/Serial.hpp
index e4a28de09..e4a28de09 100644
--- a/xs/src/slic3r/Utils/Serial.hpp
+++ b/src/slic3r/Utils/Serial.hpp
diff --git a/xs/src/slic3r/Utils/Time.cpp b/src/slic3r/Utils/Time.cpp
index f38c4b407..f38c4b407 100644
--- a/xs/src/slic3r/Utils/Time.cpp
+++ b/src/slic3r/Utils/Time.cpp
diff --git a/xs/src/slic3r/Utils/Time.hpp b/src/slic3r/Utils/Time.hpp
index 7b670bd3e..7b670bd3e 100644
--- a/xs/src/slic3r/Utils/Time.hpp
+++ b/src/slic3r/Utils/Time.hpp
diff --git a/xs/CMakeLists.txt b/xs/CMakeLists.txt
index 69e03779a..92964c900 100644
--- a/xs/CMakeLists.txt
+++ b/xs/CMakeLists.txt
@@ -1,435 +1,4 @@
-# Enable C++11 language standard.
-set(CMAKE_CXX_STANDARD 11)
-set(CMAKE_CXX_STANDARD_REQUIRED ON)
-
-# Enable C11 language standard.
-set(CMAKE_C_STANDARD 11)
-set(CMAKE_C_STANDARD_REQUIRED ON)
-
-# Add our own cmake module path.
-list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/modules/)
-
-if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
- # Workaround for an old CMake, which does not understand CMAKE_CXX_STANDARD.
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wno-reorder" )
- find_package(PkgConfig REQUIRED)
-endif()
-
-if (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUXX)
- # Adding -fext-numeric-literals to enable GCC extensions on definitions of quad float literals, which are required by Boost.
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fext-numeric-literals" )
-endif()
-
-# Where all the bundled libraries reside?
-set(LIBDIR ${CMAKE_CURRENT_SOURCE_DIR}/src/)
-# For the bundled boost libraries (boost::nowide)
-include_directories(${LIBDIR})
-# For libslic3r.h
-include_directories(${LIBDIR}/libslic3r)
-#set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-if(WIN32)
- # BOOST_ALL_NO_LIB: Avoid the automatic linking of Boost libraries on Windows. Rather rely on explicit linking.
- add_definitions(-D_USE_MATH_DEFINES -D_WIN32 -DBOOST_ALL_NO_LIB -DBOOST_USE_WINAPI_VERSION=0x601)
- # -D_ITERATOR_DEBUG_LEVEL)
- if(WIN10SDK_PATH)
- message("Building with Win10 Netfabb STL fixing service support")
- add_definitions(-DHAS_WIN10SDK)
- include_directories("${WIN10SDK_PATH}/Include")
- else()
- message("Building without Win10 Netfabb STL fixing service support")
- endif()
-endif()
-
-add_definitions(-DwxUSE_UNICODE -D_UNICODE -DUNICODE -DWXINTL_NO_GETTEXT_MACRO)
-
-add_library(libslic3r STATIC
- ${LIBDIR}/libslic3r/BoundingBox.cpp
- ${LIBDIR}/libslic3r/BoundingBox.hpp
- ${LIBDIR}/libslic3r/BridgeDetector.cpp
- ${LIBDIR}/libslic3r/BridgeDetector.hpp
- ${LIBDIR}/libslic3r/ClipperUtils.cpp
- ${LIBDIR}/libslic3r/ClipperUtils.hpp
- ${LIBDIR}/libslic3r/Config.cpp
- ${LIBDIR}/libslic3r/Config.hpp
- ${LIBDIR}/libslic3r/EdgeGrid.cpp
- ${LIBDIR}/libslic3r/EdgeGrid.hpp
- ${LIBDIR}/libslic3r/ExPolygon.cpp
- ${LIBDIR}/libslic3r/ExPolygon.hpp
- ${LIBDIR}/libslic3r/ExPolygonCollection.cpp
- ${LIBDIR}/libslic3r/ExPolygonCollection.hpp
- ${LIBDIR}/libslic3r/Extruder.cpp
- ${LIBDIR}/libslic3r/Extruder.hpp
- ${LIBDIR}/libslic3r/ExtrusionEntity.cpp
- ${LIBDIR}/libslic3r/ExtrusionEntity.hpp
- ${LIBDIR}/libslic3r/ExtrusionEntityCollection.cpp
- ${LIBDIR}/libslic3r/ExtrusionEntityCollection.hpp
- ${LIBDIR}/libslic3r/ExtrusionSimulator.cpp
- ${LIBDIR}/libslic3r/ExtrusionSimulator.hpp
- ${LIBDIR}/libslic3r/FileParserError.hpp
- ${LIBDIR}/libslic3r/Fill/Fill.cpp
- ${LIBDIR}/libslic3r/Fill/Fill.hpp
- ${LIBDIR}/libslic3r/Fill/Fill3DHoneycomb.cpp
- ${LIBDIR}/libslic3r/Fill/Fill3DHoneycomb.hpp
- ${LIBDIR}/libslic3r/Fill/FillBase.cpp
- ${LIBDIR}/libslic3r/Fill/FillBase.hpp
- ${LIBDIR}/libslic3r/Fill/FillConcentric.cpp
- ${LIBDIR}/libslic3r/Fill/FillConcentric.hpp
- ${LIBDIR}/libslic3r/Fill/FillHoneycomb.cpp
- ${LIBDIR}/libslic3r/Fill/FillHoneycomb.hpp
- ${LIBDIR}/libslic3r/Fill/FillGyroid.cpp
- ${LIBDIR}/libslic3r/Fill/FillGyroid.hpp
- ${LIBDIR}/libslic3r/Fill/FillPlanePath.cpp
- ${LIBDIR}/libslic3r/Fill/FillPlanePath.hpp
- ${LIBDIR}/libslic3r/Fill/FillRectilinear.cpp
- ${LIBDIR}/libslic3r/Fill/FillRectilinear.hpp
- ${LIBDIR}/libslic3r/Fill/FillRectilinear2.cpp
- ${LIBDIR}/libslic3r/Fill/FillRectilinear2.hpp
- ${LIBDIR}/libslic3r/Fill/FillRectilinear3.cpp
- ${LIBDIR}/libslic3r/Fill/FillRectilinear3.hpp
- ${LIBDIR}/libslic3r/Flow.cpp
- ${LIBDIR}/libslic3r/Flow.hpp
- ${LIBDIR}/libslic3r/Format/3mf.cpp
- ${LIBDIR}/libslic3r/Format/3mf.hpp
- ${LIBDIR}/libslic3r/Format/AMF.cpp
- ${LIBDIR}/libslic3r/Format/AMF.hpp
- ${LIBDIR}/libslic3r/Format/OBJ.cpp
- ${LIBDIR}/libslic3r/Format/OBJ.hpp
- ${LIBDIR}/libslic3r/Format/objparser.cpp
- ${LIBDIR}/libslic3r/Format/objparser.hpp
- ${LIBDIR}/libslic3r/Format/PRUS.cpp
- ${LIBDIR}/libslic3r/Format/PRUS.hpp
- ${LIBDIR}/libslic3r/Format/STL.cpp
- ${LIBDIR}/libslic3r/Format/STL.hpp
- ${LIBDIR}/libslic3r/GCode/Analyzer.cpp
- ${LIBDIR}/libslic3r/GCode/Analyzer.hpp
- ${LIBDIR}/libslic3r/GCode/CoolingBuffer.cpp
- ${LIBDIR}/libslic3r/GCode/CoolingBuffer.hpp
- ${LIBDIR}/libslic3r/GCode/PostProcessor.cpp
- ${LIBDIR}/libslic3r/GCode/PostProcessor.hpp
- ${LIBDIR}/libslic3r/GCode/PressureEqualizer.cpp
- ${LIBDIR}/libslic3r/GCode/PressureEqualizer.hpp
- ${LIBDIR}/libslic3r/GCode/PreviewData.cpp
- ${LIBDIR}/libslic3r/GCode/PreviewData.hpp
- ${LIBDIR}/libslic3r/GCode/PrintExtents.cpp
- ${LIBDIR}/libslic3r/GCode/PrintExtents.hpp
- ${LIBDIR}/libslic3r/GCode/SpiralVase.cpp
- ${LIBDIR}/libslic3r/GCode/SpiralVase.hpp
- ${LIBDIR}/libslic3r/GCode/ToolOrdering.cpp
- ${LIBDIR}/libslic3r/GCode/ToolOrdering.hpp
- ${LIBDIR}/libslic3r/GCode/WipeTower.hpp
- ${LIBDIR}/libslic3r/GCode/WipeTowerPrusaMM.cpp
- ${LIBDIR}/libslic3r/GCode/WipeTowerPrusaMM.hpp
- ${LIBDIR}/libslic3r/GCode.cpp
- ${LIBDIR}/libslic3r/GCode.hpp
- ${LIBDIR}/libslic3r/GCodeReader.cpp
- ${LIBDIR}/libslic3r/GCodeReader.hpp
- ${LIBDIR}/libslic3r/GCodeSender.cpp
- ${LIBDIR}/libslic3r/GCodeSender.hpp
- ${LIBDIR}/libslic3r/GCodeTimeEstimator.cpp
- ${LIBDIR}/libslic3r/GCodeTimeEstimator.hpp
- ${LIBDIR}/libslic3r/GCodeWriter.cpp
- ${LIBDIR}/libslic3r/GCodeWriter.hpp
- ${LIBDIR}/libslic3r/Geometry.cpp
- ${LIBDIR}/libslic3r/Geometry.hpp
- ${LIBDIR}/libslic3r/Int128.hpp
-# ${LIBDIR}/libslic3r/KdTree.hpp
- ${LIBDIR}/libslic3r/Layer.cpp
- ${LIBDIR}/libslic3r/Layer.hpp
- ${LIBDIR}/libslic3r/LayerRegion.cpp
- ${LIBDIR}/libslic3r/libslic3r.h
- ${LIBDIR}/libslic3r/Line.cpp
- ${LIBDIR}/libslic3r/Line.hpp
- ${LIBDIR}/libslic3r/Model.cpp
- ${LIBDIR}/libslic3r/Model.hpp
- ${LIBDIR}/libslic3r/ModelArrange.hpp
- ${LIBDIR}/libslic3r/MotionPlanner.cpp
- ${LIBDIR}/libslic3r/MotionPlanner.hpp
- ${LIBDIR}/libslic3r/MultiPoint.cpp
- ${LIBDIR}/libslic3r/MultiPoint.hpp
- ${LIBDIR}/libslic3r/MutablePriorityQueue.hpp
- ${LIBDIR}/libslic3r/PerimeterGenerator.cpp
- ${LIBDIR}/libslic3r/PerimeterGenerator.hpp
- ${LIBDIR}/libslic3r/PlaceholderParser.cpp
- ${LIBDIR}/libslic3r/PlaceholderParser.hpp
- ${LIBDIR}/libslic3r/Point.cpp
- ${LIBDIR}/libslic3r/Point.hpp
- ${LIBDIR}/libslic3r/Polygon.cpp
- ${LIBDIR}/libslic3r/Polygon.hpp
- ${LIBDIR}/libslic3r/Polyline.cpp
- ${LIBDIR}/libslic3r/Polyline.hpp
- ${LIBDIR}/libslic3r/PolylineCollection.cpp
- ${LIBDIR}/libslic3r/PolylineCollection.hpp
- ${LIBDIR}/libslic3r/Print.cpp
- ${LIBDIR}/libslic3r/Print.hpp
- ${LIBDIR}/libslic3r/PrintExport.hpp
- ${LIBDIR}/libslic3r/PrintConfig.cpp
- ${LIBDIR}/libslic3r/PrintConfig.hpp
- ${LIBDIR}/libslic3r/PrintObject.cpp
- ${LIBDIR}/libslic3r/PrintRegion.cpp
- ${LIBDIR}/libslic3r/Slicing.cpp
- ${LIBDIR}/libslic3r/Slicing.hpp
- ${LIBDIR}/libslic3r/SlicingAdaptive.cpp
- ${LIBDIR}/libslic3r/SlicingAdaptive.hpp
- ${LIBDIR}/libslic3r/SupportMaterial.cpp
- ${LIBDIR}/libslic3r/SupportMaterial.hpp
- ${LIBDIR}/libslic3r/Surface.cpp
- ${LIBDIR}/libslic3r/Surface.hpp
- ${LIBDIR}/libslic3r/SurfaceCollection.cpp
- ${LIBDIR}/libslic3r/SurfaceCollection.hpp
- ${LIBDIR}/libslic3r/SVG.cpp
- ${LIBDIR}/libslic3r/SVG.hpp
- ${LIBDIR}/libslic3r/Technologies.hpp
- ${LIBDIR}/libslic3r/TriangleMesh.cpp
- ${LIBDIR}/libslic3r/TriangleMesh.hpp
- ${LIBDIR}/libslic3r/SLABasePool.hpp
- ${LIBDIR}/libslic3r/SLABasePool.cpp
-# ${LIBDIR}/libslic3r/utils.cpp
- ${LIBDIR}/libslic3r/Utils.hpp
-
-)
-
-add_library(libslic3r_gui STATIC
- ${LIBDIR}/slic3r/GUI/AboutDialog.cpp
- ${LIBDIR}/slic3r/GUI/AboutDialog.hpp
- ${LIBDIR}/slic3r/GUI/AppConfig.cpp
- ${LIBDIR}/slic3r/GUI/AppConfig.hpp
- ${LIBDIR}/slic3r/GUI/BackgroundSlicingProcess.cpp
- ${LIBDIR}/slic3r/GUI/BackgroundSlicingProcess.hpp
- ${LIBDIR}/slic3r/GUI/BitmapCache.cpp
- ${LIBDIR}/slic3r/GUI/BitmapCache.hpp
- ${LIBDIR}/slic3r/GUI/ConfigSnapshotDialog.cpp
- ${LIBDIR}/slic3r/GUI/ConfigSnapshotDialog.hpp
- ${LIBDIR}/slic3r/GUI/3DScene.cpp
- ${LIBDIR}/slic3r/GUI/3DScene.hpp
- ${LIBDIR}/slic3r/GUI/GLShader.cpp
- ${LIBDIR}/slic3r/GUI/GLShader.hpp
- ${LIBDIR}/slic3r/GUI/GLCanvas3D.hpp
- ${LIBDIR}/slic3r/GUI/GLCanvas3D.cpp
- ${LIBDIR}/slic3r/GUI/GLCanvas3DManager.hpp
- ${LIBDIR}/slic3r/GUI/GLCanvas3DManager.cpp
- ${LIBDIR}/slic3r/GUI/GLGizmo.hpp
- ${LIBDIR}/slic3r/GUI/GLGizmo.cpp
- ${LIBDIR}/slic3r/GUI/GLTexture.hpp
- ${LIBDIR}/slic3r/GUI/GLTexture.cpp
- ${LIBDIR}/slic3r/GUI/GLToolbar.hpp
- ${LIBDIR}/slic3r/GUI/GLToolbar.cpp
- ${LIBDIR}/slic3r/GUI/Preferences.cpp
- ${LIBDIR}/slic3r/GUI/Preferences.hpp
- ${LIBDIR}/slic3r/GUI/Preset.cpp
- ${LIBDIR}/slic3r/GUI/Preset.hpp
- ${LIBDIR}/slic3r/GUI/PresetBundle.cpp
- ${LIBDIR}/slic3r/GUI/PresetBundle.hpp
- ${LIBDIR}/slic3r/GUI/PresetHints.cpp
- ${LIBDIR}/slic3r/GUI/PresetHints.hpp
- ${LIBDIR}/slic3r/GUI/GUI.cpp
- ${LIBDIR}/slic3r/GUI/GUI.hpp
- ${LIBDIR}/slic3r/GUI/GUI_ObjectParts.cpp
- ${LIBDIR}/slic3r/GUI/GUI_ObjectParts.hpp
- ${LIBDIR}/slic3r/GUI/LambdaObjectDialog.cpp
- ${LIBDIR}/slic3r/GUI/LambdaObjectDialog.hpp
- ${LIBDIR}/slic3r/GUI/Tab.cpp
- ${LIBDIR}/slic3r/GUI/Tab.hpp
- ${LIBDIR}/slic3r/GUI/TabIface.cpp
- ${LIBDIR}/slic3r/GUI/TabIface.hpp
- ${LIBDIR}/slic3r/GUI/Field.cpp
- ${LIBDIR}/slic3r/GUI/Field.hpp
- ${LIBDIR}/slic3r/GUI/OptionsGroup.cpp
- ${LIBDIR}/slic3r/GUI/OptionsGroup.hpp
- ${LIBDIR}/slic3r/GUI/BedShapeDialog.cpp
- ${LIBDIR}/slic3r/GUI/BedShapeDialog.hpp
- ${LIBDIR}/slic3r/GUI/2DBed.cpp
- ${LIBDIR}/slic3r/GUI/2DBed.hpp
- ${LIBDIR}/slic3r/GUI/wxExtensions.cpp
- ${LIBDIR}/slic3r/GUI/wxExtensions.hpp
- ${LIBDIR}/slic3r/GUI/WipeTowerDialog.cpp
- ${LIBDIR}/slic3r/GUI/WipeTowerDialog.hpp
- ${LIBDIR}/slic3r/GUI/RammingChart.cpp
- ${LIBDIR}/slic3r/GUI/RammingChart.hpp
- ${LIBDIR}/slic3r/GUI/BonjourDialog.cpp
- ${LIBDIR}/slic3r/GUI/BonjourDialog.hpp
- ${LIBDIR}/slic3r/GUI/ButtonsDescription.cpp
- ${LIBDIR}/slic3r/GUI/ButtonsDescription.hpp
- ${LIBDIR}/slic3r/Config/Snapshot.cpp
- ${LIBDIR}/slic3r/Config/Snapshot.hpp
- ${LIBDIR}/slic3r/Config/Version.cpp
- ${LIBDIR}/slic3r/Config/Version.hpp
- ${LIBDIR}/slic3r/Utils/ASCIIFolding.cpp
- ${LIBDIR}/slic3r/Utils/ASCIIFolding.hpp
- ${LIBDIR}/slic3r/Utils/Serial.cpp
- ${LIBDIR}/slic3r/Utils/Serial.hpp
- ${LIBDIR}/slic3r/GUI/ConfigWizard.cpp
- ${LIBDIR}/slic3r/GUI/ConfigWizard.hpp
- ${LIBDIR}/slic3r/GUI/MsgDialog.cpp
- ${LIBDIR}/slic3r/GUI/MsgDialog.hpp
- ${LIBDIR}/slic3r/GUI/UpdateDialogs.cpp
- ${LIBDIR}/slic3r/GUI/UpdateDialogs.hpp
- ${LIBDIR}/slic3r/GUI/FirmwareDialog.cpp
- ${LIBDIR}/slic3r/GUI/FirmwareDialog.hpp
- ${LIBDIR}/slic3r/GUI/ProgressIndicator.hpp
- ${LIBDIR}/slic3r/GUI/ProgressStatusBar.hpp
- ${LIBDIR}/slic3r/GUI/ProgressStatusBar.cpp
- ${LIBDIR}/slic3r/Utils/Http.cpp
- ${LIBDIR}/slic3r/Utils/Http.hpp
- ${LIBDIR}/slic3r/Utils/FixModelByWin10.cpp
- ${LIBDIR}/slic3r/Utils/FixModelByWin10.hpp
- ${LIBDIR}/slic3r/Utils/PrintHostSendDialog.cpp
- ${LIBDIR}/slic3r/Utils/PrintHostSendDialog.hpp
- ${LIBDIR}/slic3r/Utils/OctoPrint.cpp
- ${LIBDIR}/slic3r/Utils/OctoPrint.hpp
- ${LIBDIR}/slic3r/Utils/Duet.cpp
- ${LIBDIR}/slic3r/Utils/Duet.hpp
- ${LIBDIR}/slic3r/Utils/PrintHost.cpp
- ${LIBDIR}/slic3r/Utils/PrintHost.hpp
- ${LIBDIR}/slic3r/Utils/Bonjour.cpp
- ${LIBDIR}/slic3r/Utils/Bonjour.hpp
- ${LIBDIR}/slic3r/Utils/PresetUpdater.cpp
- ${LIBDIR}/slic3r/Utils/PresetUpdater.hpp
- ${LIBDIR}/slic3r/Utils/Time.cpp
- ${LIBDIR}/slic3r/Utils/Time.hpp
- ${LIBDIR}/slic3r/Utils/HexFile.cpp
- ${LIBDIR}/slic3r/Utils/HexFile.hpp
- ${LIBDIR}/slic3r/AppController.hpp
- ${LIBDIR}/slic3r/AppController.cpp
- ${LIBDIR}/slic3r/AppControllerWx.cpp
-)
-
-add_library(admesh STATIC
- ${LIBDIR}/admesh/connect.cpp
- ${LIBDIR}/admesh/normals.cpp
- ${LIBDIR}/admesh/shared.cpp
- ${LIBDIR}/admesh/stl.h
- ${LIBDIR}/admesh/stl_io.cpp
- ${LIBDIR}/admesh/stlinit.cpp
- ${LIBDIR}/admesh/util.cpp
-)
-
-add_library(miniz STATIC
- ${LIBDIR}/miniz/miniz.h
- ${LIBDIR}/miniz/miniz_common.h
- ${LIBDIR}/miniz/miniz_tdef.h
- ${LIBDIR}/miniz/miniz_tinfl.h
- ${LIBDIR}/miniz/miniz_zip.h
- ${LIBDIR}/miniz/miniz.cpp
- ${LIBDIR}/miniz/miniz_tdef.cpp
- ${LIBDIR}/miniz/miniz_tinfl.cpp
- ${LIBDIR}/miniz/miniz_zip.cpp
-)
-
-add_library(clipper STATIC
- ${LIBDIR}/clipper.cpp
- ${LIBDIR}/clipper.hpp
-)
-
-add_library(polypartition STATIC
- ${LIBDIR}/polypartition.cpp
- ${LIBDIR}/polypartition.h
-)
-
-add_library(poly2tri STATIC
- ${LIBDIR}/poly2tri/common/shapes.cc
- ${LIBDIR}/poly2tri/common/shapes.h
- ${LIBDIR}/poly2tri/common/utils.h
- ${LIBDIR}/poly2tri/poly2tri.h
- ${LIBDIR}/poly2tri/sweep/advancing_front.cc
- ${LIBDIR}/poly2tri/sweep/advancing_front.h
- ${LIBDIR}/poly2tri/sweep/cdt.cc
- ${LIBDIR}/poly2tri/sweep/cdt.h
- ${LIBDIR}/poly2tri/sweep/sweep.cc
- ${LIBDIR}/poly2tri/sweep/sweep.h
- ${LIBDIR}/poly2tri/sweep/sweep_context.cc
- ${LIBDIR}/poly2tri/sweep/sweep_context.h
-)
-
-add_library(nowide STATIC
- ${LIBDIR}/boost/nowide/args.hpp
- ${LIBDIR}/boost/nowide/cenv.hpp
- ${LIBDIR}/boost/nowide/config.hpp
- ${LIBDIR}/boost/nowide/convert.hpp
- ${LIBDIR}/boost/nowide/cstdio.hpp
- ${LIBDIR}/boost/nowide/cstdlib.hpp
- ${LIBDIR}/boost/nowide/filebuf.hpp
- ${LIBDIR}/boost/nowide/fstream.hpp
- ${LIBDIR}/boost/nowide/integration/filesystem.hpp
- ${LIBDIR}/boost/nowide/iostream.cpp
- ${LIBDIR}/boost/nowide/iostream.hpp
- ${LIBDIR}/boost/nowide/stackstring.hpp
- ${LIBDIR}/boost/nowide/system.hpp
- ${LIBDIR}/boost/nowide/utf8_codecvt.hpp
- ${LIBDIR}/boost/nowide/windows.hpp
-)
-
-add_library(Shiny STATIC
- ${LIBDIR}/Shiny/Shiny.h
- ${LIBDIR}/Shiny/ShinyConfig.h
- ${LIBDIR}/Shiny/ShinyData.h
- ${LIBDIR}/Shiny/ShinyMacros.h
- ${LIBDIR}/Shiny/ShinyManager.c
- ${LIBDIR}/Shiny/ShinyManager.h
- ${LIBDIR}/Shiny/ShinyNode.c
- ${LIBDIR}/Shiny/ShinyNode.h
- ${LIBDIR}/Shiny/ShinyNodePool.c
- ${LIBDIR}/Shiny/ShinyNodePool.h
- ${LIBDIR}/Shiny/ShinyNodeState.c
- ${LIBDIR}/Shiny/ShinyNodeState.h
- ${LIBDIR}/Shiny/ShinyOutput.c
- ${LIBDIR}/Shiny/ShinyOutput.h
- ${LIBDIR}/Shiny/ShinyPrereqs.h
- ${LIBDIR}/Shiny/ShinyTools.c
- ${LIBDIR}/Shiny/ShinyTools.h
- ${LIBDIR}/Shiny/ShinyVersion.h
- ${LIBDIR}/Shiny/ShinyZone.c
- ${LIBDIR}/Shiny/ShinyZone.h
-)
-
-add_library(semver STATIC
- ${LIBDIR}/semver/semver.h
- ${LIBDIR}/semver/semver.c
-)
-
-# ##############################################################################
-# Configure rasterizer target
-# ##############################################################################
-
-find_package(PNG QUIET)
-
-option(RASTERIZER_FORCE_BUILTIN_LIBPNG "Force the usage of builting libpng instead of the system version." OFF)
-
-add_library(rasterizer STATIC
- ${LIBDIR}/libslic3r/Rasterizer/Rasterizer.hpp
- ${LIBDIR}/libslic3r/Rasterizer/Rasterizer.cpp
-)
-
-if(PNG_FOUND AND NOT RASTERIZER_FORCE_BUILTIN_LIBPNG)
- message(STATUS "Using system libpng.")
- target_link_libraries(rasterizer PRIVATE ${PNG_LIBRARIES})
- target_include_directories(rasterizer PRIVATE ${PNG_INCLUDE_DIRS})
- target_compile_definitions(rasterizer PRIVATE ${PNG_DEFINITIONS})
-else()
- set(ZLIB_LIBRARY "")
- message(WARNING "Using builtin libpng. This can cause crashes on some platforms.")
- add_subdirectory( ${LIBDIR}/png/zlib)
-
- set(ZLIB_INCLUDE_DIR
- ${LIBDIR}/png/zlib
- ${CMAKE_CURRENT_BINARY_DIR}/src/png/zlib
- )
-
- add_subdirectory( ${LIBDIR}/png/libpng )
- set_target_properties(zlibstatic PROPERTIES POSITION_INDEPENDENT_CODE ON)
- set_target_properties(png_static PROPERTIES POSITION_INDEPENDENT_CODE ON)
-
- target_include_directories(rasterizer PRIVATE
- ${LIBDIR}/png/libpng
- ${CMAKE_CURRENT_BINARY_DIR}/src/png/libpng
- )
- target_link_libraries(rasterizer PRIVATE png_static zlibstatic)
-
-endif()
-
-target_link_libraries(libslic3r rasterizer )
-
-# ##############################################################################
+project(XS)
# Generate the Slic3r Perl module (XS) typemap file.
set(MyTypemap ${CMAKE_CURRENT_BINARY_DIR}/typemap)
@@ -461,12 +30,6 @@ set(XS_XSP_FILES
${XSP_DIR}/GCode.xsp
${XSP_DIR}/GCodeSender.xsp
${XSP_DIR}/Geometry.xsp
- ${XSP_DIR}/GUI.xsp
- ${XSP_DIR}/GUI_AppConfig.xsp
- ${XSP_DIR}/GUI_BackgroundSlicingProcess.xsp
- ${XSP_DIR}/GUI_3DScene.xsp
- ${XSP_DIR}/GUI_Preset.xsp
- ${XSP_DIR}/GUI_Tab.xsp
${XSP_DIR}/Layer.xsp
${XSP_DIR}/Line.xsp
${XSP_DIR}/Model.xsp
@@ -481,10 +44,6 @@ set(XS_XSP_FILES
${XSP_DIR}/Surface.xsp
${XSP_DIR}/SurfaceCollection.xsp
${XSP_DIR}/TriangleMesh.xsp
- ${XSP_DIR}/Utils_PrintHost.xsp
- ${XSP_DIR}/Utils_PresetUpdater.xsp
- ${XSP_DIR}/AppController.xsp
- ${XSP_DIR}/ProgressStatusBar.xsp
${XSP_DIR}/XS.xsp
)
foreach (file ${XS_XSP_FILES})
@@ -515,46 +74,38 @@ else()
endif()
add_library(XS ${XS_SHARED_LIBRARY_TYPE}
${XS_MAIN_CPP}
- ${LIBDIR}/libslic3r/utils.cpp
- ${LIBDIR}/slic3r/GUI/wxPerlIface.cpp
- ${LIBDIR}/perlglue.cpp
- ${LIBDIR}/callback.cpp
- ${LIBDIR}/callback.hpp
- ${LIBDIR}/ppport.h
- ${LIBDIR}/xsinit.h
- ${CMAKE_CURRENT_LIST_DIR}/xsp/my.map
+# ${LIBDIR}/libslic3r/utils.cpp
+# ${LIBDIR}/slic3r/GUI/wxPerlIface.cpp
+ src/perlglue.cpp
+# src/callback.cpp
+# src/callback.hpp
+ src/ppport.h
+ src/xsinit.h
+ xsp/my.map
# mytype.map is empty. Is it required by Build.PL or the Perl xspp module?
- ${CMAKE_CURRENT_LIST_DIR}/xsp/mytype.map
+ xsp/mytype.map
# Used by Perl xsubpp to generate XS.cpp
- ${CMAKE_CURRENT_LIST_DIR}/xsp/typemap.xspt
+ xsp/typemap.xspt
)
if(APPLE)
set_target_properties(XS PROPERTIES BUNDLE TRUE)
# Ignore undefined symbols of the perl interpreter, they will be found in the caller image.
target_link_libraries(XS "-undefined dynamic_lookup")
endif()
-target_link_libraries(XS libslic3r libslic3r_gui admesh miniz clipper nowide polypartition poly2tri semver avrdude qhull)
+target_link_libraries(XS libslic3r admesh miniz clipper nowide polypartition poly2tri semver avrdude qhull)
if(SLIC3R_PROFILE)
target_link_libraries(XS Shiny)
endif()
-# Add the OpenGL and GLU libraries.
-if (SLIC3R_GUI)
- if (MSVC)
- target_link_libraries(XS user32.lib Setupapi.lib OpenGL32.Lib GlU32.Lib)
- elseif (MINGW)
- target_link_libraries(XS -lopengl32)
- elseif (APPLE)
- target_link_libraries(XS "-framework OpenGL")
- else ()
- target_link_libraries(XS -lGL -lGLU)
- endif ()
-endif ()
-
target_include_directories(XS PRIVATE src src/libslic3r) # Local include directories
target_compile_definitions(XS PRIVATE -DSLIC3RXS)
set_target_properties(XS PROPERTIES PREFIX "") # Prevent cmake from generating libXS.so instead of XS.so
+target_link_libraries(XS ${Boost_LIBRARIES})
+# target_link_libraries(XS ${wxWidgets_LIBRARIES})
+# target_link_libraries(XS ${CURL_LIBRARIES})
+# target_link_libraries(XS ${OPENSSL_LIBRARIES})
+
if (APPLE)
# add_compile_options(-stdlib=libc++)
# add_definitions(-DBOOST_THREAD_DONT_USE_CHRONO -DBOOST_NO_CXX11_RVALUE_REFERENCES -DBOOST_THREAD_USES_MOVE)
@@ -578,56 +129,19 @@ if (MSVC AND SLIC3R_MSVC_PDB AND "${CMAKE_BUILD_TYPE}" STREQUAL "Release")
)
endif()
-## Configuration flags
-if (SLIC3R_GUI)
- message("Slic3r will be built with GUI support")
- target_compile_definitions(XS PRIVATE -DSLIC3R_GUI)
-endif ()
-
-if (SLIC3R_PROFILE)
- message("Slic3r will be built with a Shiny invasive profiler")
- add_definitions(-DSLIC3R_PROFILE)
-endif ()
-
if (CMAKE_BUILD_TYPE MATCHES DEBUG)
target_compile_definitions(XS PRIVATE -DSLIC3R_DEBUG -DDEBUG -D_DEBUG)
else ()
target_compile_definitions(XS PRIVATE -DNDEBUG)
endif ()
-# Perl specific stuff
-find_package(PerlLibs REQUIRED)
-set(PerlEmbed_DEBUG 1)
-find_package(PerlEmbed REQUIRED)
target_include_directories(XS PRIVATE ${PERL_INCLUDE_PATH})
target_compile_options(XS PRIVATE ${PerlEmbed_CCFLAGS})
-# If the Perl is compiled with optimization off, disable optimization over the whole project.
-if (WIN32 AND ";${PerlEmbed_CCFLAGS};" MATCHES ";[-/]Od;")
- message(STATUS "Perl compiled without optimization. Disabling optimization for the Slic3r build.")
- message("Old CMAKE_CXX_FLAGS_RELEASE: ${CMAKE_CXX_FLAGS_RELEASE}")
- message("Old CMAKE_CXX_FLAGS_RELWITHDEBINFO: ${CMAKE_CXX_FLAGS_RELEASE}")
- message("Old CMAKE_CXX_FLAGS: ${CMAKE_CXX_FLAGS_RELEASE}")
- set(CMAKE_CXX_FLAGS_RELEASE "/MD /Od /Zi /EHsc /DNDEBUG /DWIN32 /DTBB_USE_ASSERT")
- set(CMAKE_C_FLAGS_RELEASE "/MD /Od /Zi /DNDEBUG /DWIN32 /DTBB_USE_ASSERT")
- set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "/MD /Od /Zi /EHsc /DNDEBUG /DWIN32 /DTBB_USE_ASSERT")
- set(CMAKE_C_FLAGS_RELWITHDEBINFO "/MD /Od /Zi /DNDEBUG /DWIN32 /DTBB_USE_ASSERT")
- set(CMAKE_CXX_FLAGS "/MD /Od /Zi /EHsc /DNDEBUG /DWIN32 /DTBB_USE_ASSERT")
- set(CMAKE_C_FLAGS "/MD /Od /Zi /DNDEBUG /DWIN32 /DTBB_USE_ASSERT")
-endif()
-# The following line will add -fPIC on Linux to make the XS.so rellocable.
-add_definitions(${PerlEmbed_CCCDLFLAGS})
+
if (WIN32)
target_link_libraries(XS ${PERL_LIBRARY})
endif()
-add_subdirectory(src/avrdude)
-
-add_subdirectory(src/qhull)
-include_directories(${LIBDIR}/qhull/src)
-message(STATUS ${LIBDIR}/qhull/src)
-
-## REQUIRED packages
-
# Find and configure boost
if(SLIC3R_STATIC)
# Use static boost libraries.
@@ -635,136 +149,22 @@ if(SLIC3R_STATIC)
# Use boost libraries linked statically to the C++ runtime.
# set(Boost_USE_STATIC_RUNTIME ON)
endif()
-#set(Boost_DEBUG ON)
-find_package(Boost REQUIRED COMPONENTS system filesystem thread log locale regex)
-if(Boost_FOUND)
- include_directories(${Boost_INCLUDE_DIRS})
- target_link_libraries(XS ${Boost_LIBRARIES})
- if (APPLE)
- # BOOST_ASIO_DISABLE_KQUEUE : prevents a Boost ASIO bug on OS X: https://svn.boost.org/trac/boost/ticket/5339
- add_definitions(-DBOOST_ASIO_DISABLE_KQUEUE)
- endif()
- if(NOT SLIC3R_STATIC)
- add_definitions(-DBOOST_LOG_DYN_LINK)
- endif()
-endif()
-# Find and configure intel-tbb
-if(SLIC3R_STATIC)
- set(TBB_STATIC 1)
-endif()
-set(TBB_DEBUG 1)
-find_package(TBB REQUIRED)
-include_directories(${TBB_INCLUDE_DIRS})
-add_definitions(${TBB_DEFINITIONS})
-if(MSVC)
- # Suppress implicit linking of the TBB libraries by the Visual Studio compiler.
- add_definitions(-D__TBB_NO_IMPLICIT_LINKAGE)
-endif()
-# The Intel TBB library will use the std::exception_ptr feature of C++11.
-add_definitions(-DTBB_USE_CAPTURED_EXCEPTION=0)
+target_link_libraries(XS ${Boost_LIBRARIES})
target_link_libraries(XS ${TBB_LIBRARIES})
-
-# Find and configure wxWidgets
-if (SLIC3R_PRUSACONTROL)
- set(wxWidgets_UseAlienWx 1)
- if (wxWidgets_UseAlienWx)
- set(AlienWx_DEBUG 1)
- find_package(AlienWx REQUIRED COMPONENTS base core adv html gl)
- include_directories(${AlienWx_INCLUDE_DIRS})
- #add_compile_options(${AlienWx_CXX_FLAGS})
- add_definitions(${AlienWx_DEFINITIONS})
- set(wxWidgets_LIBRARIES ${AlienWx_LIBRARIES})
- # On Linux / gtk, we need to have a direct access to gtk+ for some workarounds.
- if (AlienWx_GUI_TOOLKIT STREQUAL "gtk2")
- pkg_check_modules(GTK2 gtk+-2.0)
- include_directories(${GTK2_INCLUDE_DIRS})
- endif()
- if (AlienWx_GUI_TOOLKIT STREQUAL "gtk3")
- pkg_check_modules(GTK3 gtk+-3.0)
- include_directories(${GTK3_INCLUDE_DIRS})
- endif()
- else ()
- find_package(wxWidgets REQUIRED COMPONENTS base core adv html gl)
- include(${wxWidgets_USE_FILE})
- endif ()
- add_definitions(-DSLIC3R_GUI -DSLIC3R_PRUS)
- target_link_libraries(XS ${wxWidgets_LIBRARIES})
-endif()
-
-find_package(CURL REQUIRED)
-include_directories(${CURL_INCLUDE_DIRS})
-target_link_libraries(XS ${CURL_LIBRARIES})
-
-if (SLIC3R_STATIC)
- if (NOT APPLE)
- # libcurl is always linked dynamically to the system libcurl on OSX.
- # On other systems, libcurl is linked statically if SLIC3R_STATIC is set.
- add_definitions(-DCURL_STATICLIB)
- endif()
- if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
- # As of now, our build system produces a statically linked libcurl,
- # which links the OpenSSL library dynamically.
- find_package(OpenSSL REQUIRED)
- message("OpenSSL include dir: ${OPENSSL_INCLUDE_DIR}")
- message("OpenSSL libraries: ${OPENSSL_LIBRARIES}")
- include_directories(${OPENSSL_INCLUDE_DIR})
- target_link_libraries(XS ${OPENSSL_LIBRARIES})
- endif()
-endif()
-
-## OPTIONAL packages
-
-# Find eigen3 or use bundled version
-if (NOT SLIC3R_STATIC)
- find_package(Eigen3)
-endif ()
-if (NOT Eigen3_FOUND)
- set(Eigen3_FOUND 1)
- set(EIGEN3_INCLUDE_DIR ${LIBDIR}/eigen/)
-endif ()
-include_directories(${EIGEN3_INCLUDE_DIR})
-
-# Find expat or use bundled version
-# Always use the system libexpat on Linux.
-if (NOT SLIC3R_STATIC OR CMAKE_SYSTEM_NAME STREQUAL "Linux")
- find_package(EXPAT)
-endif ()
-if (NOT EXPAT_FOUND)
- add_library(expat STATIC
- ${LIBDIR}/expat/xmlparse.c
- ${LIBDIR}/expat/xmlrole.c
- ${LIBDIR}/expat/xmltok.c
- )
- set(EXPAT_FOUND 1)
- set(EXPAT_INCLUDE_DIRS ${LIBDIR}/expat/)
- set(EXPAT_LIBRARIES expat)
-endif ()
-include_directories(${EXPAT_INCLUDE_DIRS})
+# target_link_libraries(XS ${wxWidgets_LIBRARIES})
target_link_libraries(XS ${EXPAT_LIBRARIES})
+# target_link_libraries(XS ${GLEW_LIBRARIES})
-# Find glew or use bundled version
-if (NOT SLIC3R_STATIC)
- find_package(GLEW)
-endif ()
-if (NOT GLEW_FOUND)
- add_library(glew STATIC ${LIBDIR}/glew/src/glew.c)
- set(GLEW_FOUND 1)
- set(GLEW_INCLUDE_DIRS ${LIBDIR}/glew/include/)
- set(GLEW_LIBRARIES glew)
- add_definitions(-DGLEW_STATIC)
-endif ()
-include_directories(${GLEW_INCLUDE_DIRS})
-target_link_libraries(XS ${GLEW_LIBRARIES})
# Install the XS.pm and XS.{so,dll,bundle} into the local-lib directory.
-set(PERL_LOCAL_LIB_DIR "${PROJECT_SOURCE_DIR}/local-lib/lib/perl5/${PerlEmbed_ARCHNAME}")
+set(PERL_LOCAL_LIB_DIR "../local-lib/lib/perl5/${PerlEmbed_ARCHNAME}")
add_custom_command(
TARGET XS
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory "${PERL_LOCAL_LIB_DIR}/auto/Slic3r/XS/"
COMMAND ${CMAKE_COMMAND} -E copy "$<TARGET_FILE:XS>" "${PERL_LOCAL_LIB_DIR}/auto/Slic3r/XS/"
COMMAND ${CMAKE_COMMAND} -E make_directory "${PERL_LOCAL_LIB_DIR}/Slic3r/"
- COMMAND ${CMAKE_COMMAND} -E copy "${PROJECT_SOURCE_DIR}/xs/lib/Slic3r/XS.pm" "${PERL_LOCAL_LIB_DIR}/Slic3r/"
+ COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/lib/Slic3r/XS.pm" "${PERL_LOCAL_LIB_DIR}/Slic3r/"
COMMENT "Installing XS.pm and XS.{so,dll,bundle} into the local-lib directory ..."
)
if(APPLE)
@@ -775,23 +175,11 @@ if(APPLE)
)
endif()
-# Create a slic3r executable
-add_executable(slic3r EXCLUDE_FROM_ALL ${PROJECT_SOURCE_DIR}/src/slic3r.cpp)
target_include_directories(XS PRIVATE src src/libslic3r)
-target_link_libraries(slic3r libslic3r libslic3r_gui admesh miniz ${Boost_LIBRARIES} clipper ${EXPAT_LIBRARIES} ${GLEW_LIBRARIES} polypartition poly2tri ${TBB_LIBRARIES} ${wxWidgets_LIBRARIES})
-
-add_executable(slabasebed EXCLUDE_FROM_ALL ${PROJECT_SOURCE_DIR}/src/slabasebed.cpp)
-target_include_directories(slabasebed PRIVATE src src/libslic3r)
-target_link_libraries(slabasebed libslic3r libslic3r_gui qhull admesh miniz ${Boost_LIBRARIES} clipper ${EXPAT_LIBRARIES} ${GLEW_LIBRARIES} polypartition poly2tri ${TBB_LIBRARIES} ${wxWidgets_LIBRARIES} ${CMAKE_DL_LIBS})
if(SLIC3R_PROFILE)
target_link_libraries(Shiny)
endif()
-if (APPLE)
- target_link_libraries(slic3r "-framework IOKit" "-framework CoreFoundation" -lc++)
-elseif (NOT MSVC)
- target_link_libraries(slic3r -lstdc++)
-endif ()
if (MSVC)
# Here we associate some additional properties with the MSVC project to enable compilation and debugging out of the box.
@@ -799,35 +187,10 @@ if (MSVC)
string(REPLACE "/" "\\" PROPS_PERL_BIN_PATH "${PROPS_PERL_BIN_PATH}")
string(REPLACE "/" "\\" PROPS_PERL_EXECUTABLE "${PERL_EXECUTABLE}")
string(REPLACE "/" "\\" PROPS_CMAKE_SOURCE_DIR "${CMAKE_SOURCE_DIR}")
- configure_file("${PROJECT_SOURCE_DIR}/cmake/msvc/xs.wperl.props.in" "${CMAKE_BINARY_DIR}/xs.wperl.props" NEWLINE_STYLE CRLF)
+ configure_file("../cmake/msvc/xs.wperl.props.in" "${CMAKE_BINARY_DIR}/xs.wperl.props" NEWLINE_STYLE CRLF)
set_target_properties(XS PROPERTIES VS_USER_PROPS "${CMAKE_BINARY_DIR}/xs.wperl.props")
endif()
-# l10n
-set(L10N_DIR "${PROJECT_SOURCE_DIR}/resources/localization")
-add_custom_target(pot
- COMMAND xgettext --keyword=L --from-code=UTF-8 --debug
- -f "${L10N_DIR}/list.txt"
- -o "${L10N_DIR}/Slic3rPE.pot"
- WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
- COMMENT "Generate pot file from strings in the source tree"
-)
-
-# ##############################################################################
-# Adding libnest2d project for bin packing...
-# ##############################################################################
-
-set(LIBNEST2D_UNITTESTS ON CACHE BOOL "Force generating unittests for libnest2d")
-
-add_subdirectory(${LIBDIR}/libnest2d)
-target_compile_definitions(libslic3r PUBLIC -DUSE_TBB)
-target_include_directories(libslic3r PUBLIC BEFORE ${LIBNEST2D_INCLUDES})
-target_include_directories(libslic3r_gui PUBLIC BEFORE ${LIBNEST2D_INCLUDES})
-
-message(STATUS "Libnest2D Libraries: ${LIBNEST2D_LIBRARIES}")
-target_link_libraries(libslic3r ${LIBNEST2D_LIBRARIES})
-# ##############################################################################
-
# Installation
install(TARGETS XS DESTINATION ${PERL_VENDORARCH}/auto/Slic3r/XS)
install(FILES lib/Slic3r/XS.pm DESTINATION ${PERL_VENDORLIB}/Slic3r)
diff --git a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s01s01.html~ b/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s01s01.html~
deleted file mode 100644
index 20b5c4514..000000000
--- a/xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s01s01.html~
+++ /dev/null
@@ -1,215 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head>
-<meta content="IE=edge" http-equiv="X-UA-Compatible" />
-<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-<title>QUERY - - Atmel EDBG-based Tools Protocols</title><meta content="DocBook XSL Stylesheets V1.78.1" name="generator" /><link rel="home" href="index.html" title="Atmel EDBG-based Tools Protocols" /><link rel="up" href="ch03s01.html" title="Protocol commands" /><link rel="prev" href="ch03s01.html" title="Protocol commands" /><link rel="next" href="section_edbg_query_contexts.html" title="EDBG QUERY contexts" /><meta content="QUERY" name="Section-title" /><script type="text/javascript">
- //The id for tree cookie
- var treeCookieId = "treeview-10619";
- var language = "en";
- var w = new Object();
- //Localization
- txt_filesfound = 'Results';
- txt_enter_at_least_1_char = "You must enter at least one character.";
- txt_browser_not_supported = "JavaScript is disabled on your browser. Please enable JavaScript to enjoy all the features of this site.";
- txt_please_wait = "Please wait. Search in progress...";
- txt_results_for = "Results for: ";
- </script><link type="image/x-icon" href="../favicon.ico" rel="shortcut icon" /><link href="../common/css/positioning.css" type="text/css" rel="stylesheet" /><link href="../common/jquery/theme-redmond/jquery-ui-1.8.2.custom.css" type="text/css" rel="stylesheet" /><link href="../common/jquery/treeview/jquery.treeview.css" type="text/css" rel="stylesheet" /><style type="text/css">
- #noscript{
- font-weight:bold;
- background-color:#55AA55;
- font-weight:bold;
- height:25spx;
- z-index:3000;
- top:0px;
- width:100%;
- position:relative;
- border-bottom:solid 5px black;
- text-align:center;
- color:white;
- }
-
- input{
- margin-bottom:5px;
- margin-top:2px;
- }
- .folder{
- display:block;
- height:22px;
- padding-left:20px;
- background:transparent url(../common/jquery/treeview/images/folder.gif) 0 0px no-repeat;
- }
- .dochome{
- display:block;
- margin:10px 0 0 0;
- padding-left:20px;
- background:transparent url(../common/images/Library.png) 0 0px no-repeat;
- }
- .root{
- display:block;
- margin:10px 0 0 2px;
- padding-left:20px;
- background:transparent url(../common/images/Book_Open.png) 0 0px no-repeat;
- }
- .dochome a,
- .root a {
- text-decoration:none;
- font-size:12px;
- color:#517291;
- }
- span.contentsTab{
- padding-left:20px;
- background:url(../common/images/toc-icon.png) no-repeat 0 center;
- }
- span.searchTab{
- padding-left:20px;
- background:url(../common/images/search-icon.png) no-repeat 0 center;
- }
-
- /* Overide jquery treeview's defaults for ul. */
- .treeview ul{
- background-color:transparent;
- margin-top:4px;
- }
- #webhelp-currentid{
- background-color:#D8D8D8 !important;
- }
- .treeview .hover{
- color:black;
- }
- .filetree li span a{
- text-decoration:none;
- font-size:12px;
- color:#517291;
- }
-
- .filetree span.file {
- background: url(../common/images/Document_Text.png) 0 0 no-repeat;
- }
-
- /* Override jquery-ui's default css customizations. These are supposed to take precedence over those.*/
- .ui-widget-content{
- border:0px;
- background:none;
- color:none;
- }
- .ui-widget-header{
- color:#e9e8e9;
- border-left:1px solid #e5e5e5;
- border-right:1px solid #e5e5e5;
- border-bottom:1px solid #bbc4c5;
- border-top:4px solid #e5e5e5;
- border:medium none;
- background:#F4F4F4; /* old browsers */
- background:-moz-linear-gradient(top, #F4F4F4 0%, #E6E4E5 100%); /* firefox */
- background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #F4F4F4), color-stop(100%, #E6E4E5)); /* webkit */
- font-weight:none;
- }
- .ui-widget-header a{
- color:none;
- }
- .ui-state-default,
- .ui-widget-content .ui-state-default,
- .ui-widget-header .ui-state-default{
- border:none;
- background:none;
- font-weight:none;
- color:none;
- }
- .ui-state-default a,
- .ui-state-default a:link,
- .ui-state-default a:visited{
- color:black;
- text-decoration:none;
- }
- .ui-state-hover,
- .ui-widget-content .ui-state-hover,
- .ui-widget-header .ui-state-hover,
- .ui-state-focus,
- .ui-widget-content .ui-state-focus,
- .ui-widget-header .ui-state-focus{
- border:none;
- background:none;
- font-weight:none;
- color:none;
- }
-
- .ui-state-active,
- .ui-widget-content .ui-state-active,
- .ui-widget-header .ui-state-active{
- border:none;
- background:none;
- font-weight:none;
- color:none;
- }
- .ui-state-active a,
- .ui-state-active a:link,
- .ui-state-active a:visited{
- color:black;
- text-decoration:none;
- background:#C6C6C6; /* old browsers */
- background:-moz-linear-gradient(top, #C6C6C6 0%, #D8D8D8 100%); /* firefox */
- background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #C6C6C6), color-stop(100%, #D8D8D8)); /* webkit */
- -webkit-border-radius:15px;
- -moz-border-radius:10px;
- border:1px solid #f1f1f1;
- }
- .ui-corner-all{
- border-radius:0 0 0 0;
- }
-
- .ui-tabs{
- padding:.2em;
- }
- .ui-tabs .ui-tabs-panel {
- padding-top: 6px;
- }
- .ui-tabs .ui-tabs-nav li{
- top:0px;
- margin:-2px 0 1px;
- text-transform:uppercase;
- font-size:10.5px;
- }
- .ui-tabs .ui-tabs-nav li a{
- padding:.25em 2em .25em 1em;
- margin:.5em;
- text-shadow:0 1px 0 rgba(255, 255, 255, .5);
- }
- /**
- * Basic Layout Theme
- *
- * This theme uses the default layout class-names for all classes
- * Add any 'custom class-names', from options: paneClass, resizerClass, togglerClass
- */
-
- .ui-layout-resizer{ /* all 'resizer-bars' */
- background:#DDD;
- top:100px
- }
-
- .ui-layout-toggler{ /* all 'toggler-buttons' */
- background:#AAA;
- }
- </style><!--[if IE]>
- <link rel="stylesheet" type="text/css" href="../common/css/ie.css"/>
- <![endif]--><script src="../common/browserDetect.js" type="text/javascript"><!----></script><script src="../common/jquery/jquery-1.7.2.min.js" type="text/javascript"><!----></script><script src="../common/jquery/jquery.ui.all.js" type="text/javascript"><!----></script><script src="../common/jquery/jquery.cookie.js" type="text/javascript"><!----></script><script src="../common/jquery/treeview/jquery.treeview.min.js" type="text/javascript"><!----></script><script src="../common/jquery/layout/jquery.layout.js" type="text/javascript"><!----></script><script src="search/l10n.js" type="text/javascript"><!----></script><script src="search/htmlFileInfoList.js" type="text/javascript"><!----></script><script src="search/nwSearchFnt.js" type="text/javascript"><!----></script><script src="search/stemmers/en_stemmer.js" type="text/javascript" /><script src="search/index-1.js" type="text/javascript"><!----></script><script src="search/index-2.js" type="text/javascript"><!----></script><script src="search/index-3.js" type="text/javascript"><!----></script><meta name="date" content="" /><meta name="dc.date.created" content="" /><link rel="stylesheet" type="text/css" href="../common/css/docbook.css" /><link media="print" rel="stylesheet" type="text/css" href="../common/css/print.css" /><script type="text/javascript">
- var _gaq = _gaq || [];
- _gaq.push(['_setAccount', 'UA-41389295-1']);
- _gaq.push(['_trackPageview']);
-
- (function() {
- var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
- ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
- var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
- })();
- </script></head><body><noscript><link rel="stylesheet" type="text/css" href="../common/css/print.css" /><div id="noscript">JavaScript is disabled on your browser. Please enable JavaScript to enjoy all the features of this site.</div></noscript><div id="header"><a href="http://www.atmel.com/webdoc"><img id="logo" alt="Atmel Logo" src="../common/images/logo.png" /></a><h1>Atmel EDBG-based Tools Protocols<br />Protocol commands</h1><div id="navheader"><!----><table class="navLinks"><tr><td><a title="Hide TOC tree" tabindex="5" class="pointLeft" onclick="myLayout.toggle('west')" href="#" id="showHideButton">Sidebar
- </a></td><td><a tabindex="5" class="navLinkPrevious" accesskey="p" href="ch03s01.html">Prev</a>
- |
- <a tabindex="5" class="navLinkUp" accesskey="u" href="ch03s01.html">Up</a>
- |
- <a tabindex="5" class="navLinkNext" accesskey="n" href="section_edbg_query_contexts.html">Next</a></td></tr></table></div></div><div id="content"><!----><div class="section"><div xmlns="" class="titlepage"><div><div><h3 xmlns="http://www.w3.org/1999/xhtml" class="title"><a id="N107D6" />QUERY</h3></div></div></div><div xmlns="http://www.w3.org/1999/xhtml" class="toc"><p xmlns="http://www.w3.org/1999/xhtml"><strong>Table of Contents</strong></p><dl xmlns="http://www.w3.org/1999/xhtml" class="toc"><dt><span class="section"><a href="section_edbg_query_contexts.html">EDBG QUERY contexts</a></span></dt></dl></div><p>Used to discover the capabilities of the tool.</p><p>For lists of valid query types, see <a class="xref" href="section_edbg_query_contexts.html" title="EDBG QUERY contexts">the section called &ldquo;EDBG QUERY contexts&rdquo;</a></p><p>
- </p><div class="table"><a id="N107E2" /><p class="title"><strong>Table&nbsp;35.&nbsp;Query</strong></p><div class="table-contents"><table summary="Query" border="1"><colgroup><col /><col /><col /></colgroup><thead><tr><th>Field</th><th>Size</th><th>Description</th></tr></thead><tbody><tr><td>QUERY (0x00)</td><td>1 byte</td><td>Command ID</td></tr><tr><td>Version (0x00)</td><td>1 byte</td><td>Command version</td></tr><tr><td>Query context</td><td>1 byte</td><td>Type of query to execute</td></tr></tbody></table></div></div><p><br class="table-break" />
- </p><p>Responses:</p><p>
- </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>LIST</p></li><li class="listitem"><p>FAILED</p></li></ul></div><p>
- </p></div><script src="../common/main.js" type="text/javascript"><!----></script><script src="../common/splitterInit.js" type="text/javascript"><!----></script><div class="navfooter"><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="ch03s01.html">Prev</a>&nbsp;</td><td align="center" width="20%"><a accesskey="u" href="ch03s01.html">Up</a></td><td align="right" width="40%">&nbsp;<a accesskey="n" href="section_edbg_query_contexts.html">Next</a></td></tr><tr><td valign="top" align="left" width="40%">&nbsp;</td><td align="center" width="20%"><a accesskey="h" href="index.html">Home</a></td><td valign="top" align="right" width="40%">&nbsp;</td></tr></table></div></div><div id="sidebar"><div style="padding-top:3px;" id="leftnavigation"><div id="tabs"><ul><li><a tabindex="1" style="outline:0;" href="#treeDiv"><span class="contentsTab">Contents</span></a></li><li><a onclick="doSearch()" tabindex="1" style="outline:0;" href="#searchDiv"><span class="searchTab">Search</span></a></li></ul><div id="treeDiv"><img style="display:block;" id="tocLoading" alt="loading table of contents..." src="../common/images/loading.gif" /><span class="dochome"><a href="../index.html" tabindex="1">Documentation Home</a></span><span class="root"><a href="index.html" tabindex="1">Atmel EDBG-based Tools Protocols</a></span><div style="display:none" id="ulTreeDiv"><ul class="filetree" id="tree"><li><span class="file"><a tabindex="1" href="pr01.html">Preface</a></span></li><li><span class="file"><a tabindex="1" href="protocoldocs.Introduction.html">Introduction</a></span><ul><li><span class="file"><a tabindex="1" href="ch01s01.html">EDBG interface overview</a></span></li><li><span class="file"><a tabindex="1" href="ch01s02.html">Atmel EDBG-based tool implementations</a></span></li></ul></li><li><span class="file"><a tabindex="1" href="protocoldocs.cmsis_dap.html">CMSIS-DAP</a></span><ul><li><span class="file"><a tabindex="1" href="ch02s01.html">CMSIS-DAP protocol</a></span></li><li><span class="file"><a tabindex="1" href="ch02s02.html">CMSIS-DAP vendor commands</a></span><ul><li><span class="file"><a tabindex="1" href="ch02s02s01.html">AVR-target specific vendor commands</a></span></li><li><span class="file"><a tabindex="1" href="ch02s02s02.html">ARM-target specific vendor commands</a></span><ul><li><span class="file"><a tabindex="1" href="ch02s02s02s01.html">Erase pin</a></span></li><li><span class="file"><a tabindex="1" href="ch02s02s02s02.html">Serial trace</a></span></li></ul></li><li><span class="file"><a tabindex="1" href="ch02s02s03.html">EDBG-specific vendor commands</a></span><ul><li><span class="file"><a tabindex="1" href="ch02s02s03s01.html">Get configuration</a></span></li><li><span class="file"><a tabindex="1" href="ch02s02s03s02.html">Set configuration</a></span></li><li><span class="file"><a tabindex="1" href="ch02s02s03s03.html">EDBG GET request</a></span></li><li><span class="file"><a tabindex="1" href="ch02s02s03s04.html">EDBG SET request</a></span></li></ul></li></ul></li><li><span class="file"><a tabindex="1" href="section_serial_trace.html">Serial trace commands</a></span><ul><li><span class="file"><a tabindex="1" href="ch02s03s01.html">Set transport mode</a></span></li><li><span class="file"><a tabindex="1" href="ch02s03s02.html">Set capture mode</a></span></li><li><span class="file"><a tabindex="1" href="ch02s03s03.html">Set baud rate</a></span></li><li><span class="file"><a tabindex="1" href="ch02s03s04.html">Start</a></span></li><li><span class="file"><a tabindex="1" href="ch02s03s05.html">Stop</a></span></li><li><span class="file"><a tabindex="1" href="ch02s03s06.html">Get data</a></span></li><li><span class="file"><a tabindex="1" href="ch02s03s07.html">Get status</a></span></li><li><span class="file"><a tabindex="1" href="ch02s03s08.html">Get buffer size</a></span></li><li><span class="file"><a tabindex="1" href="ch02s03s09.html">Signon</a></span></li></ul></li><li><span class="file"><a tabindex="1" href="ch02s04.html">Enveloped AVR commands, responses &amp; events</a></span><ul><li><span class="file"><a tabindex="1" href="ch02s04s01.html">Wrapping AVR commands</a></span></li><li><span class="file"><a tabindex="1" href="ch02s04s02.html">Unwrapping AVR responses</a></span></li><li><span class="file"><a tabindex="1" href="ch02s04s03.html">Unwrapping AVR events</a></span></li></ul></li></ul></li><li><span class="file"><a tabindex="1" href="protocoldocs.edbg_ctrl_protocol.html">EDBG Control Protocol</a></span><ul><li><span class="file"><a tabindex="1" href="ch03s01.html">Protocol commands</a></span><ul><li id="webhelp-currentid"><span class="file"><a tabindex="1" href="ch03s01s01.html">QUERY</a></span><ul><li><span class="file"><a tabindex="1" href="section_edbg_query_contexts.html">EDBG QUERY contexts</a></span></li></ul></li><li><span class="file"><a tabindex="1" href="ch03s01s02.html">SET</a></span></li><li><span class="file"><a tabindex="1" href="ch03s01s03.html">GET</a></span><ul><li><span class="file"><a tabindex="1" href="ch03s01s03s01.html">SET/GET parameters</a></span></li></ul></li></ul></li><li><span class="file"><a tabindex="1" href="ch03s02.html">Responses</a></span><ul><li><span class="file"><a tabindex="1" href="ch03s02s01.html">OK</a></span></li><li><span class="file"><a tabindex="1" href="ch03s02s02.html">LIST</a></span></li><li><span class="file"><a tabindex="1" href="ch03s02s03.html">DATA</a></span></li><li><span class="file"><a tabindex="1" href="ch03s02s04.html">FAILED</a></span></li></ul></li><li><span class="file"><a tabindex="1" href="section_edbg_ctrl_setget_params.html">EDBGCTRL ID definitions</a></span></li></ul></li><li><span class="file"><a tabindex="1" href="protocoldocs.avrprotocol.Overview.html">AVR communication protocol</a></span><ul><li><span class="file"><a tabindex="1" href="ch04s01.html">Overview</a></span></li><li><span class="file"><a tabindex="1" href="ch04s02.html">Framing</a></span></li><li><span class="file"><a tabindex="1" href="ch04s03.html">Protocol sub-set overview</a></span></li><li><span class="file"><a tabindex="1" href="ch04s04.html">Discovery Protocol Definition</a></span><ul><li><span class="file"><a tabindex="1" href="ch04s04s01.html">CMD: QUERY</a></span></li><li><span class="file"><a tabindex="1" href="section_jdx_m11_sl.html">Discovery QUERY contexts</a></span></li><li><span class="file"><a tabindex="1" href="ch04s04s03.html">RSP: LIST</a></span></li><li><span class="file"><a tabindex="1" href="ch04s04s04.html">RSP: FAILED</a></span></li><li><span class="file"><a tabindex="1" href="ch04s04s05.html">Discovery Protocol ID definitions</a></span></li></ul></li><li><span class="file"><a tabindex="1" href="ch04s05.html">Housekeeping Protocol</a></span><ul><li><span class="file"><a tabindex="1" href="ch04s05s01.html">CMD: QUERY</a></span></li><li><span class="file"><a tabindex="1" href="section_i5v_3yz_rl.html">Housekeeping QUERY contexts</a></span></li><li><span class="file"><a tabindex="1" href="ch04s05s03.html">CMD: SET</a></span></li><li><span class="file"><a tabindex="1" href="ch04s05s04.html">CMD: GET</a></span></li><li><span class="file"><a tabindex="1" href="section_t1f_hb1_sl.html">Housekeeping SET/GET parameters</a></span></li><li><span class="file"><a tabindex="1" href="ch04s05s06.html">Housekeeping Commands</a></span><ul><li><span class="file"><a tabindex="1" href="section_housekeeping_start_session.html">Start session</a></span></li><li><span class="file"><a tabindex="1" href="ch04s05s06s02.html">End Session</a></span></li><li><span class="file"><a tabindex="1" href="ch04s05s06s03.html">Firmware Upgrade</a></span></li><li><span class="file"><a tabindex="1" href="ch04s05s06s04.html">JTAG scan-chain detection</a></span></li><li><span class="file"><a tabindex="1" href="ch04s05s06s05.html">Calibrate Oscillator</a></span></li></ul></li><li><span class="file"><a tabindex="1" href="ch04s05s07.html">Housekeeping Responses</a></span><ul><li><span class="file"><a tabindex="1" href="ch04s05s07s01.html">OK</a></span></li><li><span class="file"><a tabindex="1" href="ch04s05s07s02.html">LIST</a></span></li><li><span class="file"><a tabindex="1" href="ch04s05s07s03.html">DATA</a></span></li><li><span class="file"><a tabindex="1" href="ch04s05s07s04.html">FAILED</a></span></li></ul></li><li><span class="file"><a tabindex="1" href="ch04s05s08.html">Events</a></span><ul><li><span class="file"><a tabindex="1" href="ch04s05s08s01.html">Event: power</a></span></li><li><span class="file"><a tabindex="1" href="ch04s05s08s02.html">Event: sleep</a></span></li><li><span class="file"><a tabindex="1" href="ch04s05s08s03.html">Event: external reset</a></span></li></ul></li><li><span class="file"><a tabindex="1" href="ch04s05s09.html">
- Hints and tips
- </a></span></li><li><span class="file"><a tabindex="1" href="ch04s05s10.html">Housekeeping ID definitions</a></span></li></ul></li></ul></li><li><span class="file"><a tabindex="1" href="protocoldocs.avr32protocol.html">AVR32 generic protocol</a></span><ul><li><span class="file"><a tabindex="1" href="ch05s01.html">Protocol commands</a></span><ul><li><span class="file"><a tabindex="1" href="ch05s01s01.html">QUERY</a></span><ul><li><span class="file"><a tabindex="1" href="section_qhb_x1c_sl.html">AVR32 QUERY contexts</a></span></li></ul></li><li><span class="file"><a tabindex="1" href="ch05s01s02.html">SET</a></span></li><li><span class="file"><a tabindex="1" href="ch05s01s03.html">GET</a></span><ul><li><span class="file"><a tabindex="1" href="section_avr32_setget_params.html">SET/GET parameters</a></span></li></ul></li><li><span class="file"><a tabindex="1" href="ch05s01s04.html">Activate Physical</a></span></li><li><span class="file"><a tabindex="1" href="ch05s01s05.html">Deactivate Physical</a></span></li><li><span class="file"><a tabindex="1" href="ch05s01s06.html">Get ID</a></span></li><li><span class="file"><a tabindex="1" href="ch05s01s07.html">Erase</a></span></li><li><span class="file"><a tabindex="1" href="ch05s01s08.html">Halt</a></span></li><li><span class="file"><a tabindex="1" href="ch05s01s09.html">Reset</a></span></li><li><span class="file"><a tabindex="1" href="ch05s01s10.html">Step</a></span></li><li><span class="file"><a tabindex="1" href="ch05s01s11.html">Read</a></span></li><li><span class="file"><a tabindex="1" href="ch05s01s12.html">Write</a></span><ul><li><span class="file"><a tabindex="1" href="section_avr32_memtypes.html">Memory Types</a></span></li></ul></li><li><span class="file"><a tabindex="1" href="ch05s01s13.html">TAP</a></span></li><li><span class="file"><a tabindex="1" href="ch05s01s14.html">Is protected</a></span></li><li><span class="file"><a tabindex="1" href="ch05s01s15.html">Erase Section</a></span></li></ul></li><li><span class="file"><a tabindex="1" href="ch05s02.html">Responses</a></span><ul><li><span class="file"><a tabindex="1" href="ch05s02s01.html">OK</a></span></li><li><span class="file"><a tabindex="1" href="ch05s02s02.html">LIST</a></span></li><li><span class="file"><a tabindex="1" href="ch05s02s03.html">ID</a></span></li><li><span class="file"><a tabindex="1" href="ch05s02s04.html">PC</a></span></li><li><span class="file"><a tabindex="1" href="ch05s02s05.html">DATA</a></span></li><li><span class="file"><a tabindex="1" href="ch05s02s06.html">FAILED</a></span></li></ul></li><li><span class="file"><a tabindex="1" href="ch05s03.html">Hints and tips</a></span><ul><li><span class="file"><a tabindex="1" href="ch05s03s01.html">Configuration</a></span></li><li><span class="file"><a tabindex="1" href="ch05s03s02.html">Activate and deactivate physical</a></span></li><li><span class="file"><a tabindex="1" href="ch05s03s03.html">Programming and debugging commands</a></span></li></ul></li><li><span class="file"><a tabindex="1" href="ch05s04.html">AVR32GENERIC ID definitions</a></span></li></ul></li><li><span class="file"><a tabindex="1" href="protocoldocs.avr8protocol.html">AVR8 generic protocol</a></span><ul><li><span class="file"><a tabindex="1" href="ch06s01.html">Protocol Commands</a></span><ul><li><span class="file"><a tabindex="1" href="ch06s01s01.html">QUERY</a></span><ul><li><span class="file"><a tabindex="1" href="section_avr8_query_contexts.html">AVR8 QUERY contexts</a></span></li></ul></li><li><span class="file"><a tabindex="1" href="ch06s01s02.html">SET</a></span></li><li><span class="file"><a tabindex="1" href="ch06s01s03.html">GET</a></span><ul><li><span class="file"><a tabindex="1" href="section_avr8_setget_params.html">SET/GET parameters</a></span><ul><li><span class="file"><a tabindex="1" href="section_avr8_setget_params.html#N11932">Device context: debugWIRE targets</a></span></li><li><span class="file"><a tabindex="1" href="section_avr8_setget_params.html#N119D3">Device context: megaAVR JTAG targets</a></span></li><li><span class="file"><a tabindex="1" href="section_avr8_setget_params.html#section_avr8_xmega_device_context">Device context: AVR XMEGA targets</a></span></li></ul></li></ul></li><li><span class="file"><a tabindex="1" href="ch06s01s04.html">Activate Physical</a></span></li><li><span class="file"><a tabindex="1" href="ch06s01s05.html">Deactivate Physical</a></span></li><li><span class="file"><a tabindex="1" href="ch06s01s06.html">Get ID</a></span></li><li><span class="file"><a tabindex="1" href="ch06s01s07.html">Attach</a></span></li><li><span class="file"><a tabindex="1" href="ch06s01s08.html">Detach</a></span></li><li><span class="file"><a tabindex="1" href="ch06s01s09.html">Reset</a></span></li><li><span class="file"><a tabindex="1" href="ch06s01s10.html">Stop</a></span></li><li><span class="file"><a tabindex="1" href="ch06s01s11.html">Run</a></span></li><li><span class="file"><a tabindex="1" href="ch06s01s12.html">Run To</a></span></li><li><span class="file"><a tabindex="1" href="ch06s01s13.html">Step</a></span></li><li><span class="file"><a tabindex="1" href="ch06s01s14.html">PC read</a></span></li><li><span class="file"><a tabindex="1" href="ch06s01s15.html">PC write</a></span></li><li><span class="file"><a tabindex="1" href="ch06s01s16.html">Prog Mode Enter</a></span></li><li><span class="file"><a tabindex="1" href="ch06s01s17.html">Prog Mode Leave</a></span></li><li><span class="file"><a tabindex="1" href="ch06s01s18.html">Disable debugWIRE</a></span></li><li><span class="file"><a tabindex="1" href="ch06s01s19.html">Erase</a></span></li><li><span class="file"><a tabindex="1" href="ch06s01s20.html">CRC</a></span></li><li><span class="file"><a tabindex="1" href="ch06s01s21.html">Memory Read</a></span></li><li><span class="file"><a tabindex="1" href="ch06s01s22.html">Memory Read masked</a></span></li><li><span class="file"><a tabindex="1" href="ch06s01s23.html">Memory Write</a></span></li><li><span class="file"><a tabindex="1" href="ch06s01s24.html">Page Erase</a></span></li><li><span class="file"><a tabindex="1" href="ch06s01s25.html">Hardware Breakpoint Set</a></span></li><li><span class="file"><a tabindex="1" href="ch06s01s26.html">Hardware Breakpoint Clear</a></span></li><li><span class="file"><a tabindex="1" href="ch06s01s27.html">Software Breakpoint Set</a></span></li><li><span class="file"><a tabindex="1" href="ch06s01s28.html">Software Breakpoint Clear</a></span></li><li><span class="file"><a tabindex="1" href="ch06s01s29.html">Software Breakpoint Clear All</a></span></li></ul></li><li><span class="file"><a tabindex="1" href="ch06s02.html">Responses</a></span><ul><li><span class="file"><a tabindex="1" href="ch06s02s01.html">OK</a></span></li><li><span class="file"><a tabindex="1" href="ch06s02s02.html">LIST</a></span></li><li><span class="file"><a tabindex="1" href="ch06s02s03.html">PC</a></span></li><li><span class="file"><a tabindex="1" href="ch06s02s04.html">DATA</a></span></li><li><span class="file"><a tabindex="1" href="ch06s02s05.html">FAILED</a></span></li></ul></li><li><span class="file"><a tabindex="1" href="ch06s03.html">Events</a></span><ul><li><span class="file"><a tabindex="1" href="ch06s03s01.html">Event: Break</a></span></li><li><span class="file"><a tabindex="1" href="ch06s03s02.html">Event: IDR message</a></span></li></ul></li><li><span class="file"><a tabindex="1" href="section_avr8_memtypes.html">Memory Types</a></span><ul><li><span class="file"><a tabindex="1" href="ch06s04s01.html">debugWIRE memtypes</a></span></li><li><span class="file"><a tabindex="1" href="ch06s04s02.html">megaAVR (JTAG) OCD memtypes</a></span></li><li><span class="file"><a tabindex="1" href="ch06s04s03.html">AVR XMEGA memtypes</a></span></li></ul></li><li><span class="file"><a tabindex="1" href="ch06s05.html">Hints and tips:</a></span><ul><li><span class="file"><a tabindex="1" href="ch06s05s01.html">Configuration</a></span></li><li><span class="file"><a tabindex="1" href="ch06s05s02.html">Activate and deactivate physical</a></span></li><li><span class="file"><a tabindex="1" href="ch06s05s03.html">Programming session control</a></span></li><li><span class="file"><a tabindex="1" href="ch06s05s04.html">Debug session control</a></span></li><li><span class="file"><a tabindex="1" href="ch06s05s05.html">Flow control</a></span></li></ul></li><li><span class="file"><a tabindex="1" href="ch06s06.html">AVR8GENERIC ID definitions</a></span></li></ul></li><li><span class="file"><a tabindex="1" href="protocoldocs.avrispprotocol.html">AVR ISP protocol</a></span><ul><li><span class="file"><a tabindex="1" href="ch07s01.html">SPI programming protocol commands</a></span><ul><li><span class="file"><a tabindex="1" href="ch07s01s01.html">SPI Load Address</a></span></li><li><span class="file"><a tabindex="1" href="ch07s01s02.html">SPI Set Baud</a></span></li><li><span class="file"><a tabindex="1" href="ch07s01s03.html">SPI Get Baud</a></span></li><li><span class="file"><a tabindex="1" href="ch07s01s04.html">SPI Enter Programming Mode</a></span></li><li><span class="file"><a tabindex="1" href="ch07s01s05.html">SPI Leave Programming Mode</a></span></li><li><span class="file"><a tabindex="1" href="ch07s01s06.html">SPI Chip Erase</a></span></li><li><span class="file"><a tabindex="1" href="ch07s01s07.html">SPI Program Flash</a></span></li><li><span class="file"><a tabindex="1" href="ch07s01s08.html">SPI Read Flash</a></span></li><li><span class="file"><a tabindex="1" href="ch07s01s09.html">SPI Program EEPROM</a></span></li><li><span class="file"><a tabindex="1" href="ch07s01s10.html">SPI Read EEPROM</a></span></li><li><span class="file"><a tabindex="1" href="ch07s01s11.html">SPI Program Fuse</a></span></li><li><span class="file"><a tabindex="1" href="ch07s01s12.html">SPI Read Fuse</a></span></li><li><span class="file"><a tabindex="1" href="ch07s01s13.html">SPI Program Lock</a></span></li><li><span class="file"><a tabindex="1" href="ch07s01s14.html">SPI Read Lock</a></span></li><li><span class="file"><a tabindex="1" href="ch07s01s15.html">SPI Read Signature</a></span></li><li><span class="file"><a tabindex="1" href="ch07s01s16.html">SPI Read OSCCAL</a></span></li><li><span class="file"><a tabindex="1" href="ch07s01s17.html">SPI Multi</a></span></li></ul></li><li><span class="file"><a tabindex="1" href="ch07s02.html">SPI programming protocol responses</a></span></li><li><span class="file"><a tabindex="1" href="ch07s03.html">ID definitions</a></span></li></ul></li><li><span class="file"><a tabindex="1" href="protocoldocs.tpiprotocol.html">TPI Protocol</a></span><ul><li><span class="file"><a tabindex="1" href="ch08s01.html">TPI protocol commands</a></span><ul><li><span class="file"><a tabindex="1" href="ch08s01s01.html">TPI Enter Programming Mode</a></span></li><li><span class="file"><a tabindex="1" href="ch08s01s02.html">TPI Leave Programming Mode</a></span></li><li><span class="file"><a tabindex="1" href="ch08s01s03.html">TPI Set Parameter</a></span></li><li><span class="file"><a tabindex="1" href="ch08s01s04.html">TPI Erase</a></span></li><li><span class="file"><a tabindex="1" href="ch08s01s05.html">TPI Write Memory</a></span></li><li><span class="file"><a tabindex="1" href="ch08s01s06.html">TPI Read Memory</a></span></li></ul></li><li><span class="file"><a tabindex="1" href="ch08s02.html">TPI programming protocol responses</a></span></li><li><span class="file"><a tabindex="1" href="ch08s03.html">ID definitions</a></span></li></ul></li><li><span class="file"><a tabindex="1" href="document.revisions.html">Document Revisions</a></span></li></ul></div></div><div id="searchDiv"><div id="search"><form class="searchForm" name="searchForm" onsubmit="Verifie(searchForm);return false"><div><input tabindex="1" class="searchText" placeholder="Search" type="search" name="textToSearch" id="textToSearch" /> &nbsp; <input tabindex="1" id="doSearch" value="Go" class="searchButton" type="button" onclick="Verifie(searchForm)" /></div></form></div><div id="searchResults"><center /></div><p class="searchHighlight"><a onclick="toggleHighlight()" href="#">Search Highlighter (On/Off)</a></p></div></div></div></div></body></html> \ No newline at end of file
diff --git a/xs/src/libnest2d/tools/benchmark.h b/xs/src/libnest2d/tools/benchmark.h
deleted file mode 100644
index 19870b37b..000000000
--- a/xs/src/libnest2d/tools/benchmark.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (C) Tamás Mészáros
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-#ifndef INCLUDE_BENCHMARK_H_
-#define INCLUDE_BENCHMARK_H_
-
-#include <chrono>
-#include <ratio>
-
-/**
- * A class for doing benchmarks.
- */
-class Benchmark {
- typedef std::chrono::high_resolution_clock Clock;
- typedef Clock::duration Duration;
- typedef Clock::time_point TimePoint;
-
- TimePoint t1, t2;
- Duration d;
-
- inline double to_sec(Duration d) {
- return d.count() * double(Duration::period::num) / Duration::period::den;
- }
-
-public:
-
- /**
- * Measure time from the moment of this call.
- */
- void start() { t1 = Clock::now(); }
-
- /**
- * Measure time to the moment of this call.
- */
- void stop() { t2 = Clock::now(); }
-
- /**
- * Get the time elapsed between a start() end a stop() call.
- * @return Returns the elapsed time in seconds.
- */
- double getElapsedSec() { d = t2 - t1; return to_sec(d); }
-};
-
-
-#endif /* INCLUDE_BENCHMARK_H_ */
diff --git a/xs/src/slic3r/GUI/wxPerlIface.cpp b/xs/src/slic3r/GUI/wxPerlIface.cpp
deleted file mode 100644
index 216ca4b3b..000000000
--- a/xs/src/slic3r/GUI/wxPerlIface.cpp
+++ /dev/null
@@ -1,97 +0,0 @@
-// Derived from the following:
-
-/////////////////////////////////////////////////////////////////////////////
-// Name: cpp/helpers.cpp
-// Purpose: implementation for helpers.h
-// Author: Mattia Barbon
-// Modified by:
-// Created: 29/10/2000
-// RCS-ID: $Id: helpers.cpp 3397 2012-09-30 02:26:07Z mdootson $
-// Copyright: (c) 2000-2011 Mattia Barbon
-// Licence: This program is free software; you can redistribute it and/or
-// modify it under the same terms as Perl itself
-/////////////////////////////////////////////////////////////////////////////
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-#include "ppport.h"
-#undef do_open
-#undef do_close
-#ifdef __cplusplus
-}
-#endif
-
-//#include <xsinit.h>
-
-// ----------------------------------------------------------------------------
-// Utility functions for working with MAGIC
-// ----------------------------------------------------------------------------
-
-struct my_magic
-{
- my_magic() : object( NULL ), deleteable( true ) { }
-
- void* object;
- bool deleteable;
-};
-
-//STATIC MGVTBL my_vtbl = { 0, 0, 0, 0, 0, 0, 0, 0 };
-
-my_magic* wxPli_get_magic( pTHX_ SV* rv )
-{
- // check for reference
- if( !SvROK( rv ) )
- return NULL;
- SV* ref = SvRV( rv );
-
- // if it isn't a SvPVMG, then it can't have MAGIC
- // so it is deleteable
- if( !ref || SvTYPE( ref ) < SVt_PVMG )
- return NULL;
-
- // search for '~' / PERL_MAGIC_ext magic, and check the value
-// MAGIC* magic = mg_findext( ref, PERL_MAGIC_ext, &my_vtbl );
- MAGIC* magic = mg_find( ref, '~' );
- if( !magic )
- return NULL;
-
- return (my_magic*)magic->mg_ptr;
-}
-
-// gets 'this' pointer from a blessed scalar/hash reference
-void* wxPli_sv_2_object( pTHX_ SV* scalar, const char* classname )
-{
- // is it correct to use undef as 'NULL'?
- if( !SvOK( scalar ) )
- {
- return NULL;
- }
-
- if( !SvROK( scalar ) )
- croak( "variable is not an object: it must have type %s", classname );
-
- if( !classname || sv_derived_from( scalar, (char*) classname ) )
- {
- SV* ref = SvRV( scalar );
-
- my_magic* mg = wxPli_get_magic( aTHX_ scalar );
-
- // rationale: if this is an hash-ish object, it always
- // has both mg and mg->object; if however this is a
- // scalar-ish object that has been marked/unmarked deletable
- // it has mg, but not mg->object
- if( !mg || !mg->object )
- return INT2PTR( void*, SvOK( ref ) ? SvIV( ref ) : 0 );
-
- return mg->object;
- }
- else
- {
- croak( "variable is not of type %s", classname );
- return NULL; // dummy, for compiler
- }
-}