ezdxf 1.3.1__zip → 1.3.1b0__zip

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (834) hide show
  1. {ezdxf-1.3.1/src/ezdxf.egg-info → ezdxf-1.3.1b0}/PKG-INFO +1 -1
  2. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/drawing/frontend.py +2 -5
  3. ezdxf-1.3.1b0/src/ezdxf/edgeminer.py +665 -0
  4. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/edgesmith.py +23 -104
  5. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/math/clipping.py +28 -8
  6. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/math/rtree.py +5 -6
  7. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/tools/clipping_portal.py +0 -6
  8. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/version.py +2 -2
  9. {ezdxf-1.3.1 → ezdxf-1.3.1b0/src/ezdxf.egg-info}/PKG-INFO +1 -1
  10. ezdxf-1.3.1b0/tests/test_05_tools/test_546_edgeminer.py +395 -0
  11. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_619_greiner_hormann.py +5 -97
  12. ezdxf-1.3.1/src/ezdxf/edgeminer.py +0 -1166
  13. ezdxf-1.3.1/tests/test_05_tools/test_546_edgeminer.py +0 -749
  14. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/LICENSE +0 -0
  15. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/MANIFEST.in +0 -0
  16. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/README.md +0 -0
  17. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/check_disable_c_ext_by_config_file.py +0 -0
  18. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/check_disable_c_ext_by_env_var.py +0 -0
  19. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/conftest.py +0 -0
  20. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/data/AC1003_LINE_Example.dxf +0 -0
  21. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/data/ASCII_R12.dxf +0 -0
  22. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/data/Leica_Disto_S910.dxf +0 -0
  23. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/data/MODEL.dxf +0 -0
  24. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/data/PLOTFILE.plt +0 -0
  25. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/data/POLI-ALL210_12.DXF +0 -0
  26. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/data/R12_with_trash_beyond_EOF.dxf +0 -0
  27. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/data/XRECORD_0.bin +0 -0
  28. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/data/XRECORD_1.bin +0 -0
  29. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/data/XRECORD_2.bin +0 -0
  30. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/data/acad_table_with_blk_ref.dxf +0 -0
  31. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/data/bin_dxf_r12.dxf +0 -0
  32. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/data/bin_dxf_r13.dxf +0 -0
  33. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/data/bin_dxf_r14.dxf +0 -0
  34. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/data/bin_dxf_r2000.dxf +0 -0
  35. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/data/cc_dxflib.dxf +0 -0
  36. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/data/custom_blocks.dxf +0 -0
  37. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/data/duplicate_handles.dxf +0 -0
  38. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/data/dxf_unicode.dxf +0 -0
  39. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/data/dynblks.zip +0 -0
  40. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/data/empty_handles.dxf +0 -0
  41. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/data/groups.dxf +0 -0
  42. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/data/layout_broken_links.dxf +0 -0
  43. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/data/layout_broken_links_2.dxf +0 -0
  44. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/data/layout_missing_block_definition.dxf +0 -0
  45. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/data/layout_missing_block_record.dxf +0 -0
  46. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/data/mtext_columns_R2007.dxf +0 -0
  47. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/data/mtext_columns_R2018.dxf +0 -0
  48. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/data/mtext_framed_columns.dxf +0 -0
  49. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/data/mtext_text_frame.dxf +0 -0
  50. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/data/no_layouts.dxf +0 -0
  51. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/data/recover01.dxf +0 -0
  52. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/data/recover02.dxf +0 -0
  53. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/data/small_r13.dxf +0 -0
  54. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/data/small_r14.dxf +0 -0
  55. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/test_acad_table.py +0 -0
  56. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/test_acis_entites.py +0 -0
  57. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/test_all_dimline_styles.py +0 -0
  58. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/test_all_ellipse_transformations.py +0 -0
  59. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/test_anonymous_blocks.py +0 -0
  60. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/test_appsettings.py +0 -0
  61. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/test_audit_critical_dxf_files.py +0 -0
  62. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/test_audit_layouts.py +0 -0
  63. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/test_complex_line_type_2.py +0 -0
  64. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/test_create_basic_graphics.py +0 -0
  65. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/test_document_guid.py +0 -0
  66. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/test_document_page_setup.py +0 -0
  67. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/test_dxf_info_scanning.py +0 -0
  68. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/test_dynblkhelper.py +0 -0
  69. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/test_entities_iterator.py +0 -0
  70. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/test_fix_dulicate_handles.py +0 -0
  71. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/test_geo.py +0 -0
  72. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/test_groups.py +0 -0
  73. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/test_hpgl2_addon.py +0 -0
  74. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/test_ignore_junk_beyond_EOF.py +0 -0
  75. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/test_launcher.py +0 -0
  76. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/test_leica_disto_r12.py +0 -0
  77. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/test_load_dxf_unicode_notation.py +0 -0
  78. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/test_mapbox_earcut.py +0 -0
  79. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/test_mtext_columns.py +0 -0
  80. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/test_mtext_explode_addon.py +0 -0
  81. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/test_mtext_text_frame.py +0 -0
  82. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/test_new_table_entries.py +0 -0
  83. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/test_none_ascii_read_write.py +0 -0
  84. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/test_odafc.py +0 -0
  85. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/test_open_R13_R14.py +0 -0
  86. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/test_open_binary_DXF_files.py +0 -0
  87. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/test_open_coord_order_issue.py +0 -0
  88. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/test_open_exotic_dxf_files.py +0 -0
  89. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/test_polyline_entity.py +0 -0
  90. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/test_preserve_binary_data_in_xrecords.py +0 -0
  91. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/test_r12export.py +0 -0
  92. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/test_r12strict.py +0 -0
  93. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/test_r12writer.py +0 -0
  94. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/test_read_file_without_handles.py +0 -0
  95. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/test_read_write_modern_entites.py +0 -0
  96. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/test_recover.py +0 -0
  97. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/test_redraw_order.py +0 -0
  98. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/test_rotated_block_attributes.py +0 -0
  99. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/test_surface_entities.py +0 -0
  100. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/test_write_fixed_meta_data.py +0 -0
  101. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/test_write_without_handles.py +0 -0
  102. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/test_xref_detach.py +0 -0
  103. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/integration_tests/test_xref_load_acis.py +0 -0
  104. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/pyproject.toml +0 -0
  105. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/requirements.txt +0 -0
  106. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/setup.cfg +0 -0
  107. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/setup.py +0 -0
  108. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/__init__.py +0 -0
  109. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/__main__.py +0 -0
  110. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/_options.py +0 -0
  111. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/acc/__init__.py +0 -0
  112. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/acc/bezier3p.pyx +0 -0
  113. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/acc/bezier4p.pyx +0 -0
  114. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/acc/bspline.pyx +0 -0
  115. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/acc/constants.h +0 -0
  116. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/acc/construct.pyx +0 -0
  117. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/acc/linetypes.pyx +0 -0
  118. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/acc/mapbox_earcut.pyx +0 -0
  119. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/acc/matrix44.pxd +0 -0
  120. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/acc/matrix44.pyx +0 -0
  121. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/acc/np_support.pyx +0 -0
  122. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/acc/vector.pxd +0 -0
  123. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/acc/vector.pyx +0 -0
  124. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/acis/__init__.py +0 -0
  125. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/acis/abstract.py +0 -0
  126. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/acis/api.py +0 -0
  127. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/acis/cache.py +0 -0
  128. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/acis/const.py +0 -0
  129. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/acis/dbg.py +0 -0
  130. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/acis/dxf.py +0 -0
  131. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/acis/entities.py +0 -0
  132. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/acis/hdr.py +0 -0
  133. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/acis/mesh.py +0 -0
  134. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/acis/sab.py +0 -0
  135. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/acis/sat.py +0 -0
  136. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/acis/type_hints.py +0 -0
  137. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/__init__.py +0 -0
  138. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/acadctb.py +0 -0
  139. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/acisbrowser/__init__.py +0 -0
  140. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/acisbrowser/browser.py +0 -0
  141. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/acisbrowser/data.py +0 -0
  142. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/binpacking.py +0 -0
  143. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/browser/__init__.py +0 -0
  144. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/browser/bookmarks.py +0 -0
  145. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/browser/browser.py +0 -0
  146. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/browser/data.py +0 -0
  147. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/browser/find_dialog.py +0 -0
  148. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/browser/loader.py +0 -0
  149. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/browser/model.py +0 -0
  150. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/browser/reflinks.py +0 -0
  151. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/browser/tags.py +0 -0
  152. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/browser/views.py +0 -0
  153. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/dimlines.py +0 -0
  154. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/drawing/__init__.py +0 -0
  155. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/drawing/backend.py +0 -0
  156. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/drawing/config.py +0 -0
  157. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/drawing/debug_backend.py +0 -0
  158. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/drawing/debug_utils.py +0 -0
  159. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/drawing/dxf.py +0 -0
  160. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/drawing/file_output.py +0 -0
  161. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/drawing/gfxproxy.py +0 -0
  162. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/drawing/hpgl2.py +0 -0
  163. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/drawing/json.py +0 -0
  164. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/drawing/layout.py +0 -0
  165. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/drawing/matplotlib.py +0 -0
  166. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/drawing/mtext_complex.py +0 -0
  167. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/drawing/pipeline.py +0 -0
  168. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/drawing/properties.py +0 -0
  169. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/drawing/pymupdf.py +0 -0
  170. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/drawing/pyqt.py +0 -0
  171. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/drawing/qtviewer.py +0 -0
  172. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/drawing/recorder.py +0 -0
  173. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/drawing/svg.py +0 -0
  174. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/drawing/text.py +0 -0
  175. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/drawing/text_renderer.py +0 -0
  176. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/drawing/type_hints.py +0 -0
  177. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/drawing/unified_text_renderer.py +0 -0
  178. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/dwg/__init__.py +0 -0
  179. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/dwg/classes_section.py +0 -0
  180. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/dwg/const.py +0 -0
  181. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/dwg/crc.py +0 -0
  182. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/dwg/fileheader.py +0 -0
  183. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/dwg/header_section.py +0 -0
  184. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/dwg/loader.py +0 -0
  185. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/dxf2code.py +0 -0
  186. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/genetic_algorithm.py +0 -0
  187. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/geo.py +0 -0
  188. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/gerber_D6673.py +0 -0
  189. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/hpgl2/__init__.py +0 -0
  190. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/hpgl2/api.py +0 -0
  191. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/hpgl2/backend.py +0 -0
  192. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/hpgl2/deps.py +0 -0
  193. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/hpgl2/interpreter.py +0 -0
  194. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/hpgl2/page.py +0 -0
  195. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/hpgl2/plotter.py +0 -0
  196. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/hpgl2/polygon_buffer.py +0 -0
  197. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/hpgl2/properties.py +0 -0
  198. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/hpgl2/tokenizer.py +0 -0
  199. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/hpgl2/viewer.py +0 -0
  200. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/importer.py +0 -0
  201. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/iterdxf.py +0 -0
  202. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/menger_sponge.py +0 -0
  203. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/meshex.py +0 -0
  204. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/mixins.py +0 -0
  205. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/mtextsurrogate.py +0 -0
  206. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/mtxpl.py +0 -0
  207. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/odafc.py +0 -0
  208. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/openscad.py +0 -0
  209. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/pycsg.py +0 -0
  210. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/r12export.py +0 -0
  211. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/r12writer.py +0 -0
  212. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/sierpinski_pyramid.py +0 -0
  213. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/tablepainter.py +0 -0
  214. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/text2path.py +0 -0
  215. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/xplayer.py +0 -0
  216. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/addons/xqt.py +0 -0
  217. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/appsettings.py +0 -0
  218. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/audit.py +0 -0
  219. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/bbox.py +0 -0
  220. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/blkrefs.py +0 -0
  221. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/colors.py +0 -0
  222. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/commands.py +0 -0
  223. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/comments.py +0 -0
  224. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/disassemble.py +0 -0
  225. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/document.py +0 -0
  226. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/dwginfo.py +0 -0
  227. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/dynblkhelper.py +0 -0
  228. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/__init__.py +0 -0
  229. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/acad_proxy_entity.py +0 -0
  230. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/acad_table.py +0 -0
  231. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/acad_xrec_roundtrip.py +0 -0
  232. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/acis.py +0 -0
  233. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/appdata.py +0 -0
  234. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/appid.py +0 -0
  235. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/arc.py +0 -0
  236. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/attrib.py +0 -0
  237. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/block.py +0 -0
  238. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/blockrecord.py +0 -0
  239. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/boundary_paths.py +0 -0
  240. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/circle.py +0 -0
  241. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/copy.py +0 -0
  242. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/dictionary.py +0 -0
  243. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/dimension.py +0 -0
  244. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/dimstyle.py +0 -0
  245. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/dimstyleoverride.py +0 -0
  246. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/dxfclass.py +0 -0
  247. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/dxfentity.py +0 -0
  248. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/dxfgfx.py +0 -0
  249. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/dxfgroups.py +0 -0
  250. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/dxfns.py +0 -0
  251. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/dxfobj.py +0 -0
  252. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/ellipse.py +0 -0
  253. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/factory.py +0 -0
  254. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/geodata.py +0 -0
  255. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/gradient.py +0 -0
  256. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/hatch.py +0 -0
  257. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/helix.py +0 -0
  258. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/idbuffer.py +0 -0
  259. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/image.py +0 -0
  260. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/insert.py +0 -0
  261. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/layer.py +0 -0
  262. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/layout.py +0 -0
  263. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/leader.py +0 -0
  264. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/light.py +0 -0
  265. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/line.py +0 -0
  266. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/ltype.py +0 -0
  267. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/lwpolyline.py +0 -0
  268. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/material.py +0 -0
  269. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/mesh.py +0 -0
  270. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/mleader.py +0 -0
  271. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/mline.py +0 -0
  272. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/mpolygon.py +0 -0
  273. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/mtext.py +0 -0
  274. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/mtext_columns.py +0 -0
  275. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/objectcollection.py +0 -0
  276. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/oleframe.py +0 -0
  277. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/pattern.py +0 -0
  278. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/point.py +0 -0
  279. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/polygon.py +0 -0
  280. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/polyline.py +0 -0
  281. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/shape.py +0 -0
  282. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/solid.py +0 -0
  283. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/spatial_filter.py +0 -0
  284. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/spline.py +0 -0
  285. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/subentity.py +0 -0
  286. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/sun.py +0 -0
  287. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/table.py +0 -0
  288. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/temporary_transform.py +0 -0
  289. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/text.py +0 -0
  290. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/textstyle.py +0 -0
  291. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/tolerance.py +0 -0
  292. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/ucs.py +0 -0
  293. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/underlay.py +0 -0
  294. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/view.py +0 -0
  295. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/viewport.py +0 -0
  296. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/visualstyle.py +0 -0
  297. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/vport.py +0 -0
  298. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/xdata.py +0 -0
  299. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/xdict.py +0 -0
  300. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entities/xline.py +0 -0
  301. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/entitydb.py +0 -0
  302. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/enums.py +0 -0
  303. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/explode.py +0 -0
  304. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/eztypes.py +0 -0
  305. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/filemanagement.py +0 -0
  306. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/fonts/__init__.py +0 -0
  307. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/fonts/font_face.py +0 -0
  308. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/fonts/font_manager.py +0 -0
  309. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/fonts/font_measurements.py +0 -0
  310. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/fonts/font_synonyms.py +0 -0
  311. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/fonts/fonts.py +0 -0
  312. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/fonts/glyphs.py +0 -0
  313. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/fonts/lff.py +0 -0
  314. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/fonts/shapefile.py +0 -0
  315. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/fonts/ttfonts.py +0 -0
  316. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/gfxattribs.py +0 -0
  317. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/graphicsfactory.py +0 -0
  318. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/groupby.py +0 -0
  319. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/layouts/__init__.py +0 -0
  320. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/layouts/base.py +0 -0
  321. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/layouts/blocklayout.py +0 -0
  322. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/layouts/layout.py +0 -0
  323. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/layouts/layouts.py +0 -0
  324. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/lldxf/__init__.py +0 -0
  325. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/lldxf/attributes.py +0 -0
  326. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/lldxf/const.py +0 -0
  327. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/lldxf/encoding.py +0 -0
  328. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/lldxf/extendedtags.py +0 -0
  329. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/lldxf/fileindex.py +0 -0
  330. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/lldxf/hdrvars.py +0 -0
  331. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/lldxf/loader.py +0 -0
  332. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/lldxf/packedtags.py +0 -0
  333. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/lldxf/repair.py +0 -0
  334. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/lldxf/tagger.py +0 -0
  335. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/lldxf/tags.py +0 -0
  336. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/lldxf/tagwriter.py +0 -0
  337. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/lldxf/types.py +0 -0
  338. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/lldxf/validator.py +0 -0
  339. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/math/__init__.py +0 -0
  340. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/math/_bezier3p.py +0 -0
  341. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/math/_bezier4p.py +0 -0
  342. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/math/_bspline.py +0 -0
  343. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/math/_construct.py +0 -0
  344. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/math/_ctypes.py +0 -0
  345. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/math/_mapbox_earcut.py +0 -0
  346. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/math/_matrix44.py +0 -0
  347. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/math/_vector.py +0 -0
  348. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/math/arc.py +0 -0
  349. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/math/bbox.py +0 -0
  350. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/math/bezier.py +0 -0
  351. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/math/bezier_interpolation.py +0 -0
  352. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/math/box.py +0 -0
  353. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/math/bspline.py +0 -0
  354. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/math/bulge.py +0 -0
  355. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/math/circle.py +0 -0
  356. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/math/clustering.py +0 -0
  357. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/math/construct2d.py +0 -0
  358. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/math/construct3d.py +0 -0
  359. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/math/cspline.py +0 -0
  360. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/math/curvetools.py +0 -0
  361. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/math/ellipse.py +0 -0
  362. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/math/eulerspiral.py +0 -0
  363. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/math/legacy.py +0 -0
  364. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/math/linalg.py +0 -0
  365. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/math/line.py +0 -0
  366. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/math/offset2d.py +0 -0
  367. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/math/parametrize.py +0 -0
  368. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/math/perlin.py +0 -0
  369. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/math/polyline.py +0 -0
  370. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/math/shape.py +0 -0
  371. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/math/transformtools.py +0 -0
  372. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/math/triangulation.py +0 -0
  373. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/math/ucs.py +0 -0
  374. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/messenger.py +0 -0
  375. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/msgtypes.py +0 -0
  376. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/npshapes.py +0 -0
  377. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/path/__init__.py +0 -0
  378. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/path/commands.py +0 -0
  379. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/path/converter.py +0 -0
  380. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/path/nesting.py +0 -0
  381. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/path/path.py +0 -0
  382. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/path/shapes.py +0 -0
  383. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/path/tools.py +0 -0
  384. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/protocols.py +0 -0
  385. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/proxygraphic.py +0 -0
  386. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/py.typed +0 -0
  387. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/query.py +0 -0
  388. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/queryparser.py +0 -0
  389. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/r12strict.py +0 -0
  390. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/recover.py +0 -0
  391. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/render/__init__.py +0 -0
  392. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/render/_linetypes.py +0 -0
  393. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/render/abstract_mtext_renderer.py +0 -0
  394. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/render/arrows.py +0 -0
  395. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/render/curves.py +0 -0
  396. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/render/dim_base.py +0 -0
  397. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/render/dim_curved.py +0 -0
  398. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/render/dim_diameter.py +0 -0
  399. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/render/dim_linear.py +0 -0
  400. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/render/dim_ordinate.py +0 -0
  401. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/render/dim_radius.py +0 -0
  402. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/render/dimension.py +0 -0
  403. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/render/forms.py +0 -0
  404. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/render/hatching.py +0 -0
  405. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/render/leader.py +0 -0
  406. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/render/linetypes.py +0 -0
  407. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/render/mesh.py +0 -0
  408. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/render/mleader.py +0 -0
  409. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/render/mline.py +0 -0
  410. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/render/point.py +0 -0
  411. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/render/polyline.py +0 -0
  412. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/render/r12spline.py +0 -0
  413. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/render/trace.py +0 -0
  414. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/reorder.py +0 -0
  415. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/resources/16x16.png +0 -0
  416. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/resources/24x24.png +0 -0
  417. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/resources/256x256.png +0 -0
  418. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/resources/32x32.png +0 -0
  419. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/resources/48x48.png +0 -0
  420. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/resources/64x64.png +0 -0
  421. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/resources/icon-copy-64px.png +0 -0
  422. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/resources/icon-find-64px.png +0 -0
  423. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/resources/icon-goto-bookmark-64px.png +0 -0
  424. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/resources/icon-goto-handle-64px.png +0 -0
  425. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/resources/icon-goto-line-64px.png +0 -0
  426. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/resources/icon-left-arrow-64px.png +0 -0
  427. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/resources/icon-next-entity-64px.png +0 -0
  428. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/resources/icon-prev-entity-64px.png +0 -0
  429. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/resources/icon-right-arrow-64px.png +0 -0
  430. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/resources/icon-show-in-tree-64px.png +0 -0
  431. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/resources/icon-store-bookmark-64px.png +0 -0
  432. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/revcloud.py +0 -0
  433. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/sections/__init__.py +0 -0
  434. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/sections/acdsdata.py +0 -0
  435. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/sections/blocks.py +0 -0
  436. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/sections/classes.py +0 -0
  437. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/sections/entities.py +0 -0
  438. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/sections/header.py +0 -0
  439. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/sections/headervars.py +0 -0
  440. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/sections/objects.py +0 -0
  441. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/sections/table.py +0 -0
  442. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/sections/tables.py +0 -0
  443. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/select.py +0 -0
  444. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/tools/__init__.py +0 -0
  445. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/tools/_iso_pattern.py +0 -0
  446. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/tools/analyze.py +0 -0
  447. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/tools/binarydata.py +0 -0
  448. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/tools/codepage.py +0 -0
  449. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/tools/complex_ltype.py +0 -0
  450. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/tools/crypt.py +0 -0
  451. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/tools/debug.py +0 -0
  452. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/tools/difftags.py +0 -0
  453. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/tools/handle.py +0 -0
  454. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/tools/indexing.py +0 -0
  455. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/tools/juliandate.py +0 -0
  456. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/tools/pattern.py +0 -0
  457. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/tools/rawloader.py +0 -0
  458. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/tools/standards.py +0 -0
  459. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/tools/strip.py +0 -0
  460. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/tools/test.py +0 -0
  461. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/tools/text.py +0 -0
  462. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/tools/text_layout.py +0 -0
  463. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/tools/text_size.py +0 -0
  464. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/tools/zipmanager.py +0 -0
  465. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/transform.py +0 -0
  466. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/units.py +0 -0
  467. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/upright.py +0 -0
  468. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/urecord.py +0 -0
  469. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/xclip.py +0 -0
  470. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/xref.py +0 -0
  471. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf/zoom.py +0 -0
  472. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf.egg-info/SOURCES.txt +0 -0
  473. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf.egg-info/dependency_links.txt +0 -0
  474. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf.egg-info/entry_points.txt +0 -0
  475. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf.egg-info/not-zip-safe +0 -0
  476. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf.egg-info/requires.txt +0 -0
  477. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/src/ezdxf.egg-info/top_level.txt +0 -0
  478. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/conftest.py +0 -0
  479. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_00_dxf_low_level_structs/test_001_dxf_types.py +0 -0
  480. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_00_dxf_low_level_structs/test_002_dxf_vertex.py +0 -0
  481. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_00_dxf_low_level_structs/test_003_dxf_binary_tag.py +0 -0
  482. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_00_dxf_low_level_structs/test_004_dxf_value.py +0 -0
  483. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_00_dxf_low_level_structs/test_005_packed_tags.py +0 -0
  484. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_00_dxf_low_level_structs/test_010_binary_data.py +0 -0
  485. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_00_dxf_low_level_structs/test_011_codepage.py +0 -0
  486. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_00_dxf_low_level_structs/test_012_crypt.py +0 -0
  487. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_00_dxf_low_level_structs/test_013_juliandate.py +0 -0
  488. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_00_dxf_low_level_structs/test_014_multi_tags_text.py +0 -0
  489. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_00_dxf_low_level_structs/test_015_entity_structure_validator.py +0 -0
  490. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_00_dxf_low_level_structs/test_016_encoding.py +0 -0
  491. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_00_dxf_low_level_structs/test_018_handle.py +0 -0
  492. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_00_dxf_low_level_structs/test_019_complex_line_type.py +0 -0
  493. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_00_dxf_low_level_structs/test_020_validators_and_fixer.py +0 -0
  494. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_00_dxf_low_level_structs/test_021_fix_line_coordinates.py +0 -0
  495. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_00_dxf_low_level_structs/test_022_set_flag_state.py +0 -0
  496. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_00_dxf_low_level_structs/test_023_fix_invalid_located_group_codes.py +0 -0
  497. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_00_dxf_low_level_structs/test_024_render_tag.py +0 -0
  498. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_00_dxf_low_level_structs/test_040_tags.py +0 -0
  499. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_00_dxf_low_level_structs/test_041_group_tags.py +0 -0
  500. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_00_dxf_low_level_structs/test_042_tags_loader.py +0 -0
  501. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_00_dxf_low_level_structs/test_043_filter_invalid_point_codes.py +0 -0
  502. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_00_dxf_low_level_structs/test_050_extended_tags.py +0 -0
  503. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_00_dxf_low_level_structs/test_051_load_dxf_structure.py +0 -0
  504. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_00_dxf_low_level_structs/test_052_tag_writer.py +0 -0
  505. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_00_dxf_low_level_structs/test_053_embedded_object_tags.py +0 -0
  506. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_00_dxf_low_level_structs/test_054_dxfattr.py +0 -0
  507. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_00_dxf_low_level_structs/test_055_recover_loader.py +0 -0
  508. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_00_dxf_low_level_structs/test_056_special_string_decoding.py +0 -0
  509. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_00_dxf_low_level_structs/test_057_group_code_mapping.py +0 -0
  510. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_00_dxf_low_level_structs/test_058_json_tags.py +0 -0
  511. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_01_dxf_entities/test_101_dxfnamespace.py +0 -0
  512. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_01_dxf_entities/test_102_appdata.py +0 -0
  513. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_01_dxf_entities/test_103_reactors.py +0 -0
  514. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_01_dxf_entities/test_104_extension_dict.py +0 -0
  515. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_01_dxf_entities/test_105_xdata.py +0 -0
  516. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_01_dxf_entities/test_110_dxfentity.py +0 -0
  517. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_01_dxf_entities/test_111_unknown_dxf_entity.py +0 -0
  518. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_01_dxf_entities/test_112a_dxfgfx.py +0 -0
  519. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_01_dxf_entities/test_112b_dxfobj.py +0 -0
  520. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_01_dxf_entities/test_113_dxfclass.py +0 -0
  521. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_01_dxf_entities/test_114_factory.py +0 -0
  522. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_01_dxf_entities/test_115_new_empty_drawing.py +0 -0
  523. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_01_dxf_entities/test_116_dictionary.py +0 -0
  524. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_01_dxf_entities/test_117_layer_table_entry.py +0 -0
  525. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_01_dxf_entities/test_118_appid_table_entry.py +0 -0
  526. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_01_dxf_entities/test_119_ucs_table_entry.py +0 -0
  527. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_01_dxf_entities/test_120_style_table_entry.py +0 -0
  528. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_01_dxf_entities/test_121_ltype_table_entry.py +0 -0
  529. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_01_dxf_entities/test_122_vport_table_entry.py +0 -0
  530. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_01_dxf_entities/test_123_view_table_entry.py +0 -0
  531. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_01_dxf_entities/test_124_dimstyle_table_entry.py +0 -0
  532. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_01_dxf_entities/test_125_image_def.py +0 -0
  533. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_01_dxf_entities/test_126_image_def_reactor.py +0 -0
  534. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_01_dxf_entities/test_127_raster_variables.py +0 -0
  535. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_01_dxf_entities/test_128_pdf_definition.py +0 -0
  536. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_01_dxf_entities/test_129_xrecord.py +0 -0
  537. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_01_dxf_entities/test_130_id_buffer.py +0 -0
  538. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_01_dxf_entities/test_131_field_list.py +0 -0
  539. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_01_dxf_entities/test_132_layer_filter.py +0 -0
  540. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_01_dxf_entities/test_133_sun.py +0 -0
  541. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_01_dxf_entities/test_134_material.py +0 -0
  542. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_01_dxf_entities/test_135_geo_data.py +0 -0
  543. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_01_dxf_entities/test_136_vba_project.py +0 -0
  544. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_01_dxf_entities/test_137_sortentstable.py +0 -0
  545. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_01_dxf_entities/test_138_setup_visual_styles.py +0 -0
  546. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_01_dxf_entities/test_139_user_record.py +0 -0
  547. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_01_dxf_entities/test_140_block_record.py +0 -0
  548. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_01_dxf_entities/test_141_layer_vp_override.py +0 -0
  549. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_01_dxf_entities/test_142_copy_strategy.py +0 -0
  550. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_01_dxf_entities/test_143_spatial_filter.py +0 -0
  551. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_01_dxf_entities/test_144_roundtrip_xrecord.py +0 -0
  552. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/conftest.py +0 -0
  553. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_200_line.py +0 -0
  554. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_201_point.py +0 -0
  555. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_202_circle.py +0 -0
  556. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_203_arc.py +0 -0
  557. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_204_shape.py +0 -0
  558. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_205_solid.py +0 -0
  559. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_206_text.py +0 -0
  560. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_207_attdef.py +0 -0
  561. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_208_attrib.py +0 -0
  562. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_209_vertex.py +0 -0
  563. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_210_polyline_1.py +0 -0
  564. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_210_polyline_2.py +0 -0
  565. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_210_polyline_explode.py +0 -0
  566. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_210_polyline_vertex_attributes.py +0 -0
  567. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_211_viewport.py +0 -0
  568. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_212_insert.py +0 -0
  569. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_213_minsert.py +0 -0
  570. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_214_block.py +0 -0
  571. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_215_dimension.py +0 -0
  572. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_216_dimlines_R12.py +0 -0
  573. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_217_dimlines_R2000.py +0 -0
  574. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_218_poly_line_mesh_face.py +0 -0
  575. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_219_dxf_r2000_generics.py +0 -0
  576. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_220_lwpolyline_1.py +0 -0
  577. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_220_lwpolyline_2.py +0 -0
  578. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_220_lwpolyline_3.py +0 -0
  579. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_220_lwpolyline_explode.py +0 -0
  580. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_221_ellipse.py +0 -0
  581. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_222_xline.py +0 -0
  582. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_223_ray.py +0 -0
  583. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_224_group.py +0 -0
  584. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_225_mtext.py +0 -0
  585. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_226_spline.py +0 -0
  586. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_226_spline_with_linear_segments.py +0 -0
  587. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_227_mesh_packed_data.py +0 -0
  588. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_228_mesh.py +0 -0
  589. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_229a_hatch_dxf_interface.py +0 -0
  590. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_229b_hatch_extended.py +0 -0
  591. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_229c_hatch_transformations.py +0 -0
  592. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_230a_image_as_virtual_entity.py +0 -0
  593. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_230b_image_in_layout_context.py +0 -0
  594. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_231_underlay.py +0 -0
  595. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_231_underlay_2.py +0 -0
  596. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_232a_add_acis.py +0 -0
  597. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_232b_acis_export.py +0 -0
  598. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_232c_acis_surface.py +0 -0
  599. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_232d_acis_copy.py +0 -0
  600. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_232e_acis_transform.py +0 -0
  601. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_233_helix.py +0 -0
  602. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_234_light.py +0 -0
  603. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_235_leader.py +0 -0
  604. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_236_multileader.py +0 -0
  605. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_237_mline.py +0 -0
  606. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_238_tolerance.py +0 -0
  607. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_239_proxy_graphic.py +0 -0
  608. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_240_arc_dimension.py +0 -0
  609. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_241_hyperlink.py +0 -0
  610. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_242_random_transform.py +0 -0
  611. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_243_replace_entity.py +0 -0
  612. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_244_large_radial_dimension.py +0 -0
  613. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_245_wipeout.py +0 -0
  614. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_246_spline_audit.py +0 -0
  615. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_247_mtext_columns_R2018.py +0 -0
  616. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_248_mpolygon.py +0 -0
  617. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_248_mtext_linked_columns_R2000_to_R2013.py +0 -0
  618. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_249_boundary_paths.py +0 -0
  619. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_250_virtual_boundary_path_entities.py +0 -0
  620. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_251_upright.py +0 -0
  621. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_252_acad_proxy_entity.py +0 -0
  622. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_253_ole2frame.py +0 -0
  623. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_02_dxf_graphics/test_254_get_font_name.py +0 -0
  624. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_03_dxf_layouts/test_300_layout.py +0 -0
  625. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_03_dxf_layouts/test_301_add_gfx_to_layout.py +0 -0
  626. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_03_dxf_layouts/test_302_block_references.py +0 -0
  627. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_03_dxf_layouts/test_303_auto_block_references.py +0 -0
  628. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_03_dxf_layouts/test_304_new_entity_space.py +0 -0
  629. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_03_dxf_layouts/test_305_copy_and_move_entity_to_layout.py +0 -0
  630. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_03_dxf_layouts/test_306_copy_linked_entities.py +0 -0
  631. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_03_dxf_layouts/test_307_groupby.py +0 -0
  632. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_03_dxf_layouts/test_308_query.py +0 -0
  633. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_03_dxf_layouts/test_309_query_parser.py +0 -0
  634. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_03_dxf_layouts/test_311_add_foreign_entity.py +0 -0
  635. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_03_dxf_layouts/test_312_virtual_layout.py +0 -0
  636. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_03_dxf_layouts/test_313_redraw_order.py +0 -0
  637. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_04_dxf_high_level_structs/test_401_headersection.py +0 -0
  638. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_04_dxf_high_level_structs/test_402_classessection.py +0 -0
  639. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_04_dxf_high_level_structs/test_403_entity_database.py +0 -0
  640. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_04_dxf_high_level_structs/test_404a_tables.py +0 -0
  641. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_04_dxf_high_level_structs/test_404b_object_collections.py +0 -0
  642. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_04_dxf_high_level_structs/test_405_classes.py +0 -0
  643. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_04_dxf_high_level_structs/test_406_blocks_section.py +0 -0
  644. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_04_dxf_high_level_structs/test_407_entity_section.py +0 -0
  645. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_04_dxf_high_level_structs/test_408_objects_section.py +0 -0
  646. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_04_dxf_high_level_structs/test_409_create_objects.py +0 -0
  647. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_04_dxf_high_level_structs/test_410_table.py +0 -0
  648. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_04_dxf_high_level_structs/test_411_acds_data.py +0 -0
  649. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_04_dxf_high_level_structs/test_412_rename_layer.py +0 -0
  650. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_04_dxf_high_level_structs/test_413_dxfgroups.py +0 -0
  651. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_04_dxf_high_level_structs/test_414_block_reference_content.py +0 -0
  652. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_04_dxf_high_level_structs/test_415_layout_management.py +0 -0
  653. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_04_dxf_high_level_structs/test_416a_disassemble.py +0 -0
  654. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_04_dxf_high_level_structs/test_416b_recursive_decompose.py +0 -0
  655. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_04_dxf_high_level_structs/test_417_bbox.py +0 -0
  656. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_04_dxf_high_level_structs/test_418_copy_entities.py +0 -0
  657. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_04_dxf_high_level_structs/test_420_load_dxf_file.py +0 -0
  658. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_04_dxf_high_level_structs/test_421_new_drawings.py +0 -0
  659. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_04_dxf_high_level_structs/test_422_drawing_object.py +0 -0
  660. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_04_dxf_high_level_structs/test_423_read_proe_r2004.py +0 -0
  661. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_04_dxf_high_level_structs/test_424_audit.py +0 -0
  662. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_04_dxf_high_level_structs/test_425_limits_and_extents.py +0 -0
  663. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_04_dxf_high_level_structs/test_426_ezdxf_metadata.py +0 -0
  664. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_04_dxf_high_level_structs/test_427_appsettings.py +0 -0
  665. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_04_dxf_high_level_structs/test_428_r12_name_translator.py +0 -0
  666. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_04_dxf_high_level_structs/test_429_xclip.py +0 -0
  667. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_05_tools/conftest.py +0 -0
  668. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_05_tools/test_500_units.py +0 -0
  669. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_05_tools/test_501_truecolor.py +0 -0
  670. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_05_tools/test_502_raw_color.py +0 -0
  671. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_05_tools/test_503_indexing.py +0 -0
  672. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_05_tools/test_504_suppress_zeros.py +0 -0
  673. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_05_tools/test_506_version.py +0 -0
  674. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_05_tools/test_508_read_zip.py +0 -0
  675. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_05_tools/test_509_comments.py +0 -0
  676. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_05_tools/test_510_byte_stream.py +0 -0
  677. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_05_tools/test_511_bit_stream.py +0 -0
  678. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_05_tools/test_512_pattern.py +0 -0
  679. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_05_tools/test_513_reorder_entities.py +0 -0
  680. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_05_tools/test_514_text.py +0 -0
  681. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_05_tools/test_515a_fonts_truetype.py +0 -0
  682. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_05_tools/test_515b_fonts_shapefiles.py +0 -0
  683. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_05_tools/test_515c_fonts_lff.py +0 -0
  684. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_05_tools/test_516_zoom.py +0 -0
  685. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_05_tools/test_517_text_layout.py +0 -0
  686. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_05_tools/test_518_header_guid.py +0 -0
  687. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_05_tools/test_519_mtext_editor.py +0 -0
  688. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_05_tools/test_520_mtext_context.py +0 -0
  689. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_05_tools/test_521_mtext_parser.py +0 -0
  690. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_05_tools/test_522_text_scanner.py +0 -0
  691. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_05_tools/test_523_text_size.py +0 -0
  692. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_05_tools/test_524_block_reference_manager.py +0 -0
  693. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_05_tools/test_525_transparency.py +0 -0
  694. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_05_tools/test_526_explode.py +0 -0
  695. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_05_tools/test_527_gfxattribs.py +0 -0
  696. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_05_tools/test_528_difftags.py +0 -0
  697. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_05_tools/test_529_acis_sat.py +0 -0
  698. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_05_tools/test_530_acis_sab.py +0 -0
  699. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_05_tools/test_531_acis_entities.py +0 -0
  700. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_05_tools/test_532_acis_mesh.py +0 -0
  701. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_05_tools/test_533_shapefiles.py +0 -0
  702. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_05_tools/test_534_dwg_info.py +0 -0
  703. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_05_tools/test_535_xref_basic.py +0 -0
  704. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_05_tools/test_536_xref_conflict.py +0 -0
  705. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_05_tools/test_537_transform.py +0 -0
  706. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_05_tools/test_538_scale_mtext_inline_commands.py +0 -0
  707. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_05_tools/test_539_npshapes.py +0 -0
  708. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_05_tools/test_540_lff_parser.py +0 -0
  709. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_05_tools/test_541_clipping_portal.py +0 -0
  710. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_05_tools/test_542_itertools.py +0 -0
  711. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_05_tools/test_543_select.py +0 -0
  712. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_05_tools/test_544_revcloud.py +0 -0
  713. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_05_tools/test_545_acis_cache.py +0 -0
  714. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_05_tools/test_547_edgesmith.py +0 -0
  715. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/conftest.py +0 -0
  716. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_600_base.py +0 -0
  717. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_601_bulge.py +0 -0
  718. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_602_vec3.py +0 -0
  719. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_603_vec2.py +0 -0
  720. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_604_banded_matrix.py +0 -0
  721. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_604_linalg.py +0 -0
  722. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_605_matrix44.py +0 -0
  723. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_606_convexhull.py +0 -0
  724. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_607_perlin_noise.py +0 -0
  725. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_608_intersection_line_line_2d.py +0 -0
  726. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_609_point_on_line.py +0 -0
  727. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_610_ocs.py +0 -0
  728. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_611_ucs.py +0 -0
  729. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_612_ucs_pass_trough.py +0 -0
  730. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_613_is_point_in_polygon_2d.py +0 -0
  731. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_614_construct_3d.py +0 -0
  732. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_615_rytz_axis.py +0 -0
  733. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_616_plane.py +0 -0
  734. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_617_clockwise_orientation.py +0 -0
  735. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_618_clipping.py +0 -0
  736. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_620_knot.py +0 -0
  737. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_621_bspline.py +0 -0
  738. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_622_bsplineu.py +0 -0
  739. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_623_rbspline.py +0 -0
  740. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_624_global_bspline_interpolation.py +0 -0
  741. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_626_local_bspline_interpolation.py +0 -0
  742. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_627_bspline_basis.py +0 -0
  743. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_629_bezier.py +0 -0
  744. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_630a_bezier4p_base.py +0 -0
  745. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_630b_bezier4p_functions.py +0 -0
  746. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_631_euler_spiral.py +0 -0
  747. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_632_bezier3p.py +0 -0
  748. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_640_bbox.py +0 -0
  749. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_641_construction_ray.py +0 -0
  750. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_642_construction_line.py +0 -0
  751. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_643_construction_box.py +0 -0
  752. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_644_construction_circle.py +0 -0
  753. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_645_construction_arc.py +0 -0
  754. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_646_offset_vertices_2d.py +0 -0
  755. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_647_transform_tools.py +0 -0
  756. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_648_construction_ellipse.py +0 -0
  757. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_650_elliptic_arc_span.py +0 -0
  758. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_651_construction_polyline.py +0 -0
  759. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_652_approx_param_t.py +0 -0
  760. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_653_polyline_intersection.py +0 -0
  761. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_654_rtree.py +0 -0
  762. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_655_dbscan.py +0 -0
  763. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_656_k_means.py +0 -0
  764. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_657_mapbox_earcut.py +0 -0
  765. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_658_bevel_tools.py +0 -0
  766. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_659_intersection_line_polygon_3d.py +0 -0
  767. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_660_intersection_ray_polygon_3d.py +0 -0
  768. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_661_is_face_normal_pointing_outwards.py +0 -0
  769. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_662_is_convex_polygon_2d.py +0 -0
  770. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_663_is_axes_aligned_rectange.py +0 -0
  771. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_664_concave_clipping_polygon.py +0 -0
  772. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_665_inverted_clipping_polygon.py +0 -0
  773. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_06_math/test_666_wgs84_transform.py +0 -0
  774. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_07_render/test_701_arrows.py +0 -0
  775. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_07_render/test_702_render_forms.py +0 -0
  776. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_07_render/test_703_mesh_builder.py +0 -0
  777. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_07_render/test_704_render_linear_dimension.py +0 -0
  778. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_07_render/test_705_shape.py +0 -0
  779. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_07_render/test_706_random_path.py +0 -0
  780. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_07_render/test_707_trace.py +0 -0
  781. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_07_render/test_708a_path.py +0 -0
  782. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_07_render/test_708b_path_tools.py +0 -0
  783. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_07_render/test_708c_matplotlib_path_tools.py +0 -0
  784. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_07_render/test_708d_qpainter_path_tools.py +0 -0
  785. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_07_render/test_708e_path_shapes.py +0 -0
  786. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_07_render/test_708f_path_nesting.py +0 -0
  787. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_07_render/test_709_linetype_renderer.py +0 -0
  788. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_07_render/test_711_points.py +0 -0
  789. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_07_render/test_712_render_curved_dimension.py +0 -0
  790. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_07_render/test_713_mleader_builder.py +0 -0
  791. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_07_render/test_714_mleader_render_engine.py +0 -0
  792. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_07_render/test_715_hatching.py +0 -0
  793. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_07_render/test_715_issue_747_explode_3d_dim.py +0 -0
  794. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_08_addons/test_800_mtext_surrogate.py +0 -0
  795. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_08_addons/test_801_r12spline.py +0 -0
  796. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_08_addons/test_802_table_painter.py +0 -0
  797. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_08_addons/test_803_entities_to_code.py +0 -0
  798. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_08_addons/test_804_importer.py +0 -0
  799. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_08_addons/test_805_pycsg.py +0 -0
  800. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_08_addons/test_806_acadctb.py +0 -0
  801. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_08_addons/test_807_dwg_loader_basics.py +0 -0
  802. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_08_addons/test_810_drawing_properties.py +0 -0
  803. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_08_addons/test_811a_drawing_frontend.py +0 -0
  804. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_08_addons/test_811b_drawing_recorder.py +0 -0
  805. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_08_addons/test_811c_viewport_processing.py +0 -0
  806. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_08_addons/test_812_drawing_graphic_proxy.py +0 -0
  807. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_08_addons/test_813_geo_interface.py +0 -0
  808. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_08_addons/test_814_text2path.py +0 -0
  809. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_08_addons/test_815_dxf_browser.py +0 -0
  810. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_08_addons/test_816_bin_packing.py +0 -0
  811. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_08_addons/test_817_genetic_algorithm.py +0 -0
  812. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_08_addons/test_818_meshex.py +0 -0
  813. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_08_addons/test_819_menger_sponge.py +0 -0
  814. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_08_addons/test_820_openscad.py +0 -0
  815. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_08_addons/test_821_hpgl2.py +0 -0
  816. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_08_addons/test_821_hpgl2_polygon_encoded.py +0 -0
  817. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_08_addons/test_823_drawing_layout.py +0 -0
  818. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_08_addons/test_824_svg_drawing_backend.py +0 -0
  819. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_08_addons/test_825_hpgl2_drawing_backend.py +0 -0
  820. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_08_addons/test_826_custom_json_backend.py +0 -0
  821. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_08_addons/test_827_geojson_backend.py +0 -0
  822. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_09_cython_acceleration/test_901_acc_vec2.py +0 -0
  823. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_09_cython_acceleration/test_902_acc_vec3.py +0 -0
  824. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_09_cython_acceleration/test_903_acc_matrix44.py +0 -0
  825. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_09_cython_acceleration/test_904_acc_bezier4p.py +0 -0
  826. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_09_cython_acceleration/test_905_acc_bezier3p.py +0 -0
  827. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_09_cython_acceleration/test_906_acc_bspline.py +0 -0
  828. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_10_issues/test_issue_1078_bbox_calculation.py +0 -0
  829. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_10_issues/test_issue_414_bbox_calculation.py +0 -0
  830. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_10_issues/test_issue_557_reload_dimension_text_style.py +0 -0
  831. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_10_issues/test_issue_574_flattening_error.py +0 -0
  832. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_10_issues/test_issue_589_incorrect_virtual_face3d.py +0 -0
  833. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_10_issues/test_issue_749_text_layout.py +0 -0
  834. {ezdxf-1.3.1 → ezdxf-1.3.1b0}/tests/test_10_issues/test_issue_873_circle_inverted_normal.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ezdxf
3
- Version: 1.3.1
3
+ Version: 1.3.1b0
4
4
  Summary: A Python package to create/manipulate DXF drawings.
5
5
  Author-email: Manfred Moitzi <me@mozman.at>
6
6
  Project-URL: Repository, https://github.com/mozman/ezdxf
@@ -851,8 +851,6 @@ class UniversalFrontend:
851
851
  entity, segments=self.config.circle_approximation_count // 2
852
852
  )
853
853
  for polygon in trace.polygons(): # polygon is a sequence of Vec2()
854
- if len(polygon) < 3:
855
- continue
856
854
  if transform:
857
855
  points = ocs.points_to_wcs(
858
856
  Vec3(v.x, v.y, elevation) for v in polygon
@@ -863,9 +861,8 @@ class UniversalFrontend:
863
861
  properties.filling = Filling()
864
862
  self.pipeline.draw_filled_polygon(points, properties)
865
863
  return
866
- polyline_path = make_path(entity)
867
- if len(polyline_path):
868
- self.pipeline.draw_path(polyline_path, properties)
864
+
865
+ self.pipeline.draw_path(make_path(entity), properties)
869
866
 
870
867
  def draw_composite_entity(self, entity: DXFGraphic, properties: Properties) -> None:
871
868
  def draw_insert(insert: Insert):
@@ -0,0 +1,665 @@
1
+ # Copyright (c) 2024, Manfred Moitzi
2
+ # License: MIT License
3
+ """
4
+ EdgeMiner
5
+ =========
6
+
7
+ A module for detecting linked edges.
8
+
9
+ The complementary module ezdxf.edgesmith can create entities from the output of this
10
+ module.
11
+
12
+ .. versionadded:: 1.4
13
+
14
+ """
15
+ from __future__ import annotations
16
+ from typing import Any, Sequence, Iterator, Iterable, Dict, Tuple
17
+ from typing_extensions import Self, TypeAlias
18
+ from collections import defaultdict
19
+ import time
20
+
21
+ from ezdxf.math import UVec, Vec3, distance_point_line_3d
22
+ from ezdxf.math import rtree
23
+
24
+
25
+ __all__ = [
26
+ "Edge",
27
+ "EdgeDeposit",
28
+ "find_all_loops_in_deposit",
29
+ "find_all_loops",
30
+ "find_all_sequential",
31
+ "find_first_loop_in_deposit",
32
+ "find_first_loop",
33
+ "find_sequential",
34
+ "is_backwards_connected",
35
+ "is_chain",
36
+ "is_forward_connected",
37
+ "is_loop",
38
+ "length",
39
+ "longest_chain",
40
+ "Network",
41
+ "shortest_chain",
42
+ "TimeoutError",
43
+ ]
44
+ ABS_TOL = 1e-12
45
+ GAP_TOL = 1e-12
46
+ TIMEOUT = 60.0 # in seconds
47
+
48
+
49
+ class EdgeMinerException(Exception):
50
+ pass
51
+
52
+
53
+ class TimeoutError(EdgeMinerException):
54
+ pass
55
+
56
+
57
+ class Edge:
58
+ """Represents an edge.
59
+
60
+ The edge can represent any linear curve (line, arc, spline,...).
61
+ Therefore, the length of the edge must be specified if the length calculation for
62
+ a sequence of edges is to be possible.
63
+
64
+ This class is immutable by design!
65
+
66
+ Attributes:
67
+ id: unique id as int
68
+ start: start vertex as Vec3
69
+ end: end vertex as Vec3
70
+ reverse: flag to indicate that the edge is reversed compared to its initial state
71
+ length: length of the edge, default is the distance between start- and end vertex
72
+ payload: arbitrary data associated to the edge
73
+ """
74
+
75
+ __slots__ = ("id", "start", "end", "reverse", "length", "payload")
76
+ _next_id = 1
77
+
78
+ def __init__(
79
+ self, start: UVec, end: UVec, length: float = -1.0, payload: Any = None
80
+ ) -> None:
81
+ self.id = Edge._next_id # unique id but reversed copies have the same id
82
+ Edge._next_id += 1
83
+ self.start = Vec3(start)
84
+ self.end = Vec3(end)
85
+ self.reverse: bool = False
86
+ if length < 0.0:
87
+ length = self.start.distance(self.end)
88
+ self.length = length
89
+ self.payload = payload
90
+
91
+ def __eq__(self, other) -> bool:
92
+ """Return ``True`` if the ids of the edges are equal."""
93
+ if isinstance(other, Edge):
94
+ return self.id == other.id
95
+ return False
96
+
97
+ def __repr__(self) -> str:
98
+ if self.payload is None:
99
+ content = str(self.id)
100
+ else:
101
+ content = str(self.payload)
102
+ return f"Edge({content})"
103
+
104
+ def __hash__(self) -> int:
105
+ # edges can be used in sets and set-operations
106
+ return self.id
107
+
108
+ def reversed(self) -> Self:
109
+ """Returns a reversed copy."""
110
+ edge = self.__class__(self.end, self.start, self.length, self.payload)
111
+ edge.reverse = not self.reverse
112
+ edge.id = self.id # reversed copies represent the same edge
113
+ return edge
114
+
115
+
116
+ def isclose(a: Vec3, b: Vec3, gap_tol=GAP_TOL) -> bool:
117
+ """This function should be used to test whether two vertices are close to each other
118
+ to get consistent results.
119
+ """
120
+ return a.distance(b) <= gap_tol
121
+
122
+
123
+ def is_forward_connected(a: Edge, b: Edge, gap_tol=GAP_TOL) -> bool:
124
+ """Returns ``True`` if the edges have a forward connection.
125
+
126
+ Forward connection: distance from a.end to b.start <= gap_tol
127
+
128
+ Args:
129
+ a: first edge
130
+ b: second edge
131
+ gap_tol: maximum vertex distance to consider two edges as connected
132
+ """
133
+ return isclose(a.end, b.start, gap_tol)
134
+
135
+
136
+ def is_backwards_connected(a: Edge, b: Edge, gap_tol=GAP_TOL) -> bool:
137
+ """Returns ``True`` if the edges have a backwards connection.
138
+
139
+ Backwards connection: distance from b.end to a.start <= gap_tol
140
+
141
+ Args:
142
+ a: first edge
143
+ b: second edge
144
+ gap_tol: maximum vertex distance to consider two edges as connected
145
+ """
146
+ return isclose(a.start, b.end, gap_tol)
147
+
148
+
149
+ def is_chain(edges: Sequence[Edge], gap_tol=GAP_TOL) -> bool:
150
+ """Returns ``True`` if all edges have a forward connection.
151
+
152
+ Args:
153
+ edges: sequence of edges
154
+ gap_tol: maximum vertex distance to consider two edges as connected
155
+ """
156
+ return all(is_forward_connected(a, b, gap_tol) for a, b in zip(edges, edges[1:]))
157
+
158
+
159
+ def is_loop(edges: Sequence[Edge], gap_tol=GAP_TOL, full=True) -> bool:
160
+ """Return ``True`` if the sequence of edges is a closed loop.
161
+
162
+ Args:
163
+ edges: sequence of edges
164
+ gap_tol: maximum vertex distance to consider two edges as connected
165
+ full: does a full check if all edges have a forward connection if ``True``,
166
+ otherwise checks only if the last edge is connected to the first edge.
167
+ """
168
+ if full and not is_chain(edges, gap_tol):
169
+ return False
170
+ return is_forward_connected(edges[-1], edges[0])
171
+
172
+
173
+ def length(edges: Sequence[Edge]) -> float:
174
+ """Returns the length of a sequence of edges."""
175
+ return sum(e.length for e in edges)
176
+
177
+
178
+ def shortest_chain(chains: Iterable[Sequence[Edge]]) -> Sequence[Edge]:
179
+ """Returns the shortest chain of connected edges.
180
+
181
+ .. note::
182
+
183
+ This function does not verify if the input sequences are connected edges!
184
+
185
+ """
186
+ sorted_chains = sorted(chains, key=length)
187
+ if sorted_chains:
188
+ return sorted_chains[0]
189
+ return tuple()
190
+
191
+
192
+ def longest_chain(chains: Iterable[Sequence[Edge]]) -> Sequence[Edge]:
193
+ """Returns the longest chain of connected edges.
194
+
195
+ .. Note::
196
+
197
+ This function does not verify if the input sequences are connected edges!
198
+
199
+ """
200
+ sorted_chains = sorted(chains, key=length)
201
+ if sorted_chains:
202
+ return sorted_chains[-1]
203
+ return tuple()
204
+
205
+
206
+ def find_sequential(edges: Sequence[Edge], gap_tol=GAP_TOL) -> Sequence[Edge]:
207
+ """Returns all consecutive connected edges starting from the first edge.
208
+
209
+ The search stops at the first edge without a froward connection from the previous
210
+ edge.
211
+
212
+ Args:
213
+ edges: edges to be examined
214
+ gap_tol: maximum vertex distance to consider two edges as connected
215
+
216
+ Raises:
217
+ TypeError: invalid data in sequence `edges`
218
+ """
219
+ edges = type_check(edges)
220
+ if len(edges) < 2:
221
+ return edges
222
+ chain = [edges[0]]
223
+ for edge in edges[1:]:
224
+ last = chain[-1]
225
+ if is_forward_connected(last, edge, gap_tol):
226
+ chain.append(edge)
227
+ continue
228
+ reversed_edge = edge.reversed()
229
+ if is_forward_connected(last, reversed_edge, gap_tol):
230
+ chain.append(reversed_edge)
231
+ continue
232
+ break
233
+ return chain
234
+
235
+
236
+ def find_all_sequential(
237
+ edges: Sequence[Edge], gap_tol=GAP_TOL
238
+ ) -> Iterator[Sequence[Edge]]:
239
+ """Yields all edge chains with consecutive connected edges starting from the first
240
+ edge. This search starts a new sequence at every edge without a forward connection
241
+ from the previous sequence. Each sequence has always one or more edges.
242
+
243
+ Args:
244
+ edges: sequence of edges
245
+ gap_tol: maximum vertex distance to consider two edges as connected
246
+
247
+ Raises:
248
+ TypeError: invalid data in sequence `edges`
249
+ """
250
+ while edges:
251
+ chain = find_sequential(edges, gap_tol)
252
+ edges = edges[len(chain) :]
253
+ yield chain
254
+
255
+
256
+ class Watchdog:
257
+ def __init__(self, timeout=TIMEOUT) -> None:
258
+ self.timeout: float = timeout
259
+ self.start_time: float = time.perf_counter()
260
+
261
+ def start(self, timeout: float):
262
+ self.timeout = timeout
263
+ self.start_time = time.perf_counter()
264
+
265
+ @property
266
+ def has_timed_out(self) -> bool:
267
+ return time.perf_counter() - self.start_time > self.timeout
268
+
269
+
270
+ def find_first_loop(
271
+ edges: Sequence[Edge], gap_tol=GAP_TOL, timeout=TIMEOUT
272
+ ) -> Sequence[Edge]:
273
+ """Returns the first closed loop found in `edges`.
274
+
275
+ .. note::
276
+
277
+ Recursive backtracking algorithm with time complexity of O(n!).
278
+
279
+ Args:
280
+ edges: sequence of edges
281
+ gap_tol: maximum vertex distance to consider two edges as connected
282
+ timeout: timeout in seconds
283
+
284
+ Raises:
285
+ TimeoutError: search process has timed out
286
+ TypeError: invalid data in sequence `edges`
287
+ """
288
+ deposit = EdgeDeposit(edges, gap_tol=gap_tol)
289
+ if len(deposit.edges) < 2:
290
+ return tuple()
291
+ return find_first_loop_in_deposit(deposit, timeout=timeout)
292
+
293
+
294
+ def find_first_loop_in_deposit(deposit: EdgeDeposit, timeout=TIMEOUT) -> Sequence[Edge]:
295
+ """Returns the first closed loop found in edge `deposit`.
296
+
297
+ .. note::
298
+
299
+ Recursive backtracking algorithm with time complexity of O(n!).
300
+
301
+ Args:
302
+ deposit: edge deposit
303
+ timeout: timeout in seconds
304
+
305
+ Raises:
306
+ TimeoutError: search process has timed out
307
+ """
308
+
309
+ if len(deposit.edges) < 2:
310
+ return tuple()
311
+ networks = list(deposit.build_all_networks(timeout=timeout))
312
+ for network in networks:
313
+ finder = LoopFinder(network, timeout=timeout)
314
+ loop = finder.find_any_loop()
315
+ if loop:
316
+ return loop
317
+ return tuple()
318
+
319
+
320
+ def find_all_loops(
321
+ edges: Sequence[Edge], gap_tol=GAP_TOL, timeout=TIMEOUT
322
+ ) -> Sequence[Sequence[Edge]]:
323
+ """Returns all unique closed loops and doesn't include reversed solutions.
324
+
325
+ .. note::
326
+
327
+ Recursive backtracking algorithm with time complexity of O(n!).
328
+
329
+ Args:
330
+ edges: sequence of edges
331
+ gap_tol: maximum vertex distance to consider two edges as connected
332
+ timeout: timeout in seconds
333
+
334
+ Raises:
335
+ TimeoutError: search process has timed out
336
+ TypeError: invalid data in sequence `edges`
337
+ """
338
+ deposit = EdgeDeposit(edges, gap_tol=gap_tol)
339
+ if len(deposit.edges) < 2:
340
+ return tuple()
341
+ return find_all_loops_in_deposit(deposit, timeout=timeout)
342
+
343
+
344
+ def find_all_loops_in_deposit(
345
+ deposit: EdgeDeposit, timeout=TIMEOUT
346
+ ) -> Sequence[Sequence[Edge]]:
347
+ """Returns all unique closed loops in found in the edge `deposit` and doesn't
348
+ include reversed solutions.
349
+
350
+ .. note::
351
+
352
+ Recursive backtracking algorithm with time complexity of O(n!).
353
+
354
+ Args:
355
+ deposit: edge deposit
356
+ timeout: timeout in seconds
357
+
358
+ Raises:
359
+ TimeoutError: search process has timed out
360
+ """
361
+ gap_tol = deposit.gap_tol
362
+ solutions: list[Sequence[Edge]] = []
363
+ for network in deposit.build_all_networks(timeout=timeout):
364
+ finder = LoopFinder(network, gap_tol=gap_tol, timeout=timeout)
365
+ for edge in network:
366
+ finder.search(edge)
367
+ solutions.extend(finder)
368
+ return solutions
369
+
370
+
371
+ def type_check(edges: Sequence[Edge]) -> Sequence[Edge]:
372
+ for edge in edges:
373
+ if not isinstance(edge, Edge):
374
+ raise TypeError(f"expected type <Edge>, got {str(type(edge))}")
375
+ return edges
376
+
377
+
378
+ class EdgeVertexIndex:
379
+ """Index of edges referenced by the id of their start- and end vertices.
380
+
381
+ .. important::
382
+
383
+ The id of the vertices is indexed not the location!
384
+
385
+ (internal class)
386
+ """
387
+
388
+ def __init__(self, edges: Sequence[Edge]) -> None:
389
+ index: dict[int, Edge] = {}
390
+ for edge in edges:
391
+ index[id(edge.start)] = edge
392
+ index[id(edge.end)] = edge
393
+ self._index = index
394
+
395
+ def find_edges(self, vertices: Iterable[Vec3]) -> Sequence[Edge]:
396
+ """Returns all edges referenced by the id of given vertices."""
397
+ index = self._index
398
+ edges: list[Edge] = []
399
+ for vertex in vertices:
400
+ edge = index.get(id(vertex))
401
+ if edge:
402
+ edges.append(edge)
403
+ return edges
404
+
405
+
406
+ class SpatialSearchIndex:
407
+ """Spatial search index of all edge vertices.
408
+
409
+ (internal class)
410
+ """
411
+
412
+ def __init__(self, edges: Sequence[Edge]) -> None:
413
+ vertices: list[Vec3] = []
414
+ for edge in edges:
415
+ vertices.append(edge.start)
416
+ vertices.append(edge.end)
417
+ self._search_tree = rtree.RTree(vertices)
418
+
419
+ def vertices_in_sphere(self, center: Vec3, radius: float) -> Sequence[Vec3]:
420
+ """Returns all vertices located around `center` with a max. distance of `radius`."""
421
+ return tuple(self._search_tree.points_in_sphere(center, radius)) # type: ignore
422
+
423
+ def nearest_vertex(self, location: Vec3) -> Vec3:
424
+ """Returns the nearest vertex to the given location."""
425
+ vertex, _ = self._search_tree.nearest_neighbor(location)
426
+ return vertex # type: ignore
427
+
428
+
429
+ def discard_edges(edges: Iterable[Edge], discard: Iterable[Edge]) -> Sequence[Edge]:
430
+ return discard_ids(edges, ids=set(e.id for e in discard))
431
+
432
+
433
+ def discard_ids(edges: Iterable[Edge], ids: set[int]) -> Sequence[Edge]:
434
+ return tuple(e for e in edges if e.id not in ids)
435
+
436
+
437
+ class EdgeDeposit:
438
+ """The edge deposit stores all available edges for further searches."""
439
+
440
+ def __init__(self, edges: Sequence[Edge], gap_tol=GAP_TOL) -> None:
441
+ self.gap_tol = gap_tol
442
+ self.edges = type_check(tuple(edges))
443
+ self.edge_index = EdgeVertexIndex(self.edges)
444
+ self.search_index = SpatialSearchIndex(self.edges)
445
+
446
+ def edges_linked_to(self, vertex: UVec, radius: float = -1) -> Sequence[Edge]:
447
+ """Returns all edges linked to `vertex` in range of `radius`.
448
+
449
+ Default radius is :attr:`self.gap_tol`.
450
+ """
451
+ if radius < 0:
452
+ radius = self.gap_tol
453
+ vertices = self.search_index.vertices_in_sphere(Vec3(vertex), radius)
454
+ if not vertices:
455
+ return tuple()
456
+ return self.edge_index.find_edges(vertices)
457
+
458
+ def find_nearest_edge(self, vertex: UVec) -> Edge | None:
459
+ """Return the nearest edge to the given vertex.
460
+
461
+ The distance is measured to the connection line from start to end of the edge.
462
+ This is not correct for edges that represent arcs or splines.
463
+ """
464
+
465
+ def distance(edge: Edge) -> float:
466
+ return distance_point_line_3d(vertex, edge.start, edge.end)
467
+
468
+ vertex = Vec3(vertex)
469
+ si = self.search_index
470
+ nearest_vertex = si.nearest_vertex(vertex)
471
+ edges = self.edges_linked_to(nearest_vertex)
472
+ if edges:
473
+ return min(edges, key=distance)
474
+ return None
475
+
476
+ def build_network(self, edge: Edge, timeout=TIMEOUT) -> Network:
477
+ """Returns the network of all edges that are directly and indirectly linked to
478
+ `edge`.
479
+
480
+ Raises:
481
+ TimeoutError: build process has timed out
482
+ """
483
+
484
+ def process(vertex: Vec3) -> None:
485
+ linked_edges = self.edges_linked_to(vertex)
486
+ linked_edges = discard_ids(linked_edges, ids=done)
487
+ if linked_edges:
488
+ network.add_connections(edge, linked_edges)
489
+ todo.extend(linked_edges)
490
+
491
+ network = Network()
492
+ done: set[int] = set()
493
+ todo: list[Edge] = [edge]
494
+ watchdog = Watchdog(timeout)
495
+
496
+ while todo:
497
+ if watchdog.has_timed_out:
498
+ raise TimeoutError("build process has timed out")
499
+ edge = todo.pop()
500
+ done.add(edge.id)
501
+ process(edge.start)
502
+ process(edge.end)
503
+
504
+ return network
505
+
506
+ def build_all_networks(self, timeout=TIMEOUT) -> Sequence[Network]:
507
+ """Returns all separated networks in this deposit in ascending order of edge
508
+ count.
509
+
510
+ Raises:
511
+ TimeoutError: build process has timed out
512
+ """
513
+ watchdog = Watchdog(timeout)
514
+ edges = set(self.edges)
515
+ networks: list[Network] = []
516
+ while edges:
517
+ if watchdog.has_timed_out:
518
+ raise TimeoutError("search process has timed out")
519
+ edge = edges.pop()
520
+ network = self.build_network(edge, timeout=timeout)
521
+ if len(network):
522
+ networks.append(network)
523
+ edges -= set(network)
524
+ else: # solitary edge
525
+ edges.discard(edge)
526
+
527
+ networks.sort(key=lambda n: len(n))
528
+ return networks
529
+
530
+
531
+ class Network:
532
+ """The all edges in a network are reachable from every other edge."""
533
+
534
+ def __init__(self) -> None:
535
+ self._edges: dict[int, Edge] = {}
536
+ self._connections: dict[int, set[int]] = defaultdict(set)
537
+
538
+ def __repr__(self) -> str:
539
+ content = ",".join(str(e) for e in self)
540
+ return f"Network([{content}])"
541
+
542
+ def __len__(self) -> int:
543
+ return len(self._edges)
544
+
545
+ def __iter__(self) -> Iterator[Edge]:
546
+ return iter(self._edges.values())
547
+
548
+ def __contains__(self, edge: Edge) -> bool:
549
+ return edge.id in self._edges
550
+
551
+ def add_connection(self, base: Edge, target: Edge) -> None:
552
+ if base.id == target.id:
553
+ return
554
+ self._edges[base.id] = base
555
+ self._edges[target.id] = target
556
+ self._connections[base.id].add(target.id)
557
+ self._connections[target.id].add(base.id)
558
+
559
+ def add_connections(self, base: Edge, targets: Iterable[Edge]) -> None:
560
+ for target in targets:
561
+ self.add_connection(base, target)
562
+
563
+ def edges_linked_to(self, edge: Edge) -> Sequence[Edge]:
564
+ return tuple(self._edges[eid] for eid in self._connections[edge.id])
565
+
566
+
567
+ SearchSolutions: TypeAlias = Dict[Tuple[int, ...], Sequence[Edge]]
568
+
569
+
570
+ class LoopFinder:
571
+ """Find closed loops in a network by a recursive backtracking algorithm.
572
+
573
+ (internal class)
574
+ """
575
+
576
+ def __init__(
577
+ self, network: Network, discard_reverse=True, gap_tol=GAP_TOL, timeout=TIMEOUT
578
+ ) -> None:
579
+ if len(network) < 2:
580
+ raise ValueError("two or more network nodes required")
581
+ self._network = network
582
+ self._discard_reverse_solutions = discard_reverse
583
+ self._gap_tol = gap_tol
584
+ self._timeout = timeout
585
+ self._solutions: SearchSolutions = {}
586
+
587
+ def __iter__(self) -> Iterator[Sequence[Edge]]:
588
+ return iter(self._solutions.values())
589
+
590
+ def __len__(self) -> int:
591
+ return len(self._solutions)
592
+
593
+ def find_any_loop(self, start: Edge | None = None) -> Sequence[Edge]:
594
+ """Returns the first loop found beginning with the given start edge or an
595
+ arbitrary edge if `start` is None.
596
+ """
597
+ if start is None:
598
+ start = next(iter(self._network))
599
+
600
+ self.search(start, stop_at_first_loop=True)
601
+ try:
602
+ return next(iter(self._solutions.values()))
603
+ except StopIteration:
604
+ return tuple()
605
+
606
+ def search(self, start: Edge, stop_at_first_loop: bool = False) -> None:
607
+ """Searches for all loops that begin at the given start edge.
608
+
609
+ These are not all possible loops in a network!
610
+ """
611
+ if start not in self._network:
612
+ raise ValueError("start edge not in network")
613
+ network = self._network
614
+ gap_tol = self._gap_tol
615
+
616
+ watchdog = Watchdog(self._timeout)
617
+ todo: list[tuple[Edge, ...]] = [(start,)] # "unlimited" recursion stack
618
+ while todo:
619
+ if watchdog.has_timed_out:
620
+ raise TimeoutError("search process has timed out")
621
+ chain = todo.pop()
622
+ last_edge = chain[-1]
623
+ end_point = last_edge.end
624
+ candidates = network.edges_linked_to(last_edge)
625
+ # edges must be unique in a loop
626
+ for edge in set(candidates) - set(chain):
627
+ if isclose(end_point, edge.start, gap_tol):
628
+ extended_chain = chain + (edge,)
629
+ elif isclose(end_point, edge.end, gap_tol):
630
+ extended_chain = chain + (edge.reversed(),)
631
+ else:
632
+ continue
633
+ if is_forward_connected(extended_chain[-1], start, gap_tol):
634
+ self.add_solution(extended_chain)
635
+ if stop_at_first_loop:
636
+ return
637
+ else:
638
+ todo.append(extended_chain)
639
+
640
+ def add_solution(self, loop: Sequence[Edge]) -> None:
641
+ solutions = self._solutions
642
+ key = loop_key(loop)
643
+ if key in solutions:
644
+ return
645
+ if (
646
+ self._discard_reverse_solutions
647
+ and loop_key(loop, reverse=True) in solutions
648
+ ):
649
+ return
650
+ solutions[key] = loop
651
+
652
+
653
+ def loop_key(edges: Sequence[Edge], reverse=False) -> tuple[int, ...]:
654
+ """Returns a normalized key.
655
+
656
+ The key is rotated to begin with the smallest edge id.
657
+ """
658
+ if reverse:
659
+ ids = tuple(edge.id for edge in reversed(edges))
660
+ else:
661
+ ids = tuple(edge.id for edge in edges)
662
+ index = ids.index(min(ids))
663
+ if index:
664
+ ids = ids[index:] + ids[:index]
665
+ return ids