ScadPy 0.2.13__tar.gz → 0.4.2__tar.gz

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 (540) hide show
  1. scadpy-0.4.2/.claude/jedi_query.py +48 -0
  2. {scadpy-0.2.13 → scadpy-0.4.2}/PKG-INFO +20 -6
  3. {scadpy-0.2.13 → scadpy-0.4.2}/README.md +18 -5
  4. {scadpy-0.2.13 → scadpy-0.4.2}/docs/_static/badges/coverage.svg +1 -1
  5. {scadpy-0.2.13 → scadpy-0.4.2}/docs/_static/badges/interrogate.svg +3 -3
  6. {scadpy-0.2.13 → scadpy-0.4.2}/docs/index.rst +17 -2
  7. scadpy-0.4.2/docs/scripts/build_skills.py +411 -0
  8. scadpy-0.4.2/docs/snapshots/d2__chamfer_shape_all__dark.md5 +1 -0
  9. scadpy-0.4.2/docs/snapshots/d2__chamfer_shape_all__light.md5 +1 -0
  10. scadpy-0.4.2/docs/snapshots/d2__chamfer_shape_convex_only__dark.md5 +1 -0
  11. scadpy-0.4.2/docs/snapshots/d2__chamfer_shape_convex_only__light.md5 +1 -0
  12. scadpy-0.4.2/docs/snapshots/d2__chamfer_shape_sharp_convex__dark.md5 +1 -0
  13. scadpy-0.4.2/docs/snapshots/d2__chamfer_shape_sharp_convex__light.md5 +1 -0
  14. scadpy-0.4.2/docs/snapshots/d2__exclude_solid__dark.md5 +1 -0
  15. scadpy-0.4.2/docs/snapshots/d2__exclude_solid__light.md5 +1 -0
  16. scadpy-0.4.2/docs/snapshots/d2__fillet_shape_all__dark.md5 +1 -0
  17. scadpy-0.4.2/docs/snapshots/d2__fillet_shape_all__light.md5 +1 -0
  18. scadpy-0.4.2/docs/snapshots/d2__fillet_shape_convex_only__dark.md5 +1 -0
  19. scadpy-0.4.2/docs/snapshots/d2__fillet_shape_convex_only__light.md5 +1 -0
  20. scadpy-0.4.2/docs/snapshots/d2__fillet_shape_sharp_convex__dark.md5 +1 -0
  21. scadpy-0.4.2/docs/snapshots/d2__fillet_shape_sharp_convex__light.md5 +1 -0
  22. scadpy-0.4.2/docs/snapshots/d2__index_bearing__dark.md5 +1 -0
  23. scadpy-0.4.2/docs/snapshots/d2__index_bearing__light.md5 +1 -0
  24. scadpy-0.4.2/docs/snapshots/d2__index_dice__dark.md5 +1 -0
  25. scadpy-0.4.2/docs/snapshots/d2__index_dice__light.md5 +1 -0
  26. scadpy-0.4.2/docs/snapshots/d2__index_extruded_plate__dark.md5 +1 -0
  27. scadpy-0.4.2/docs/snapshots/d2__index_extruded_plate__light.md5 +1 -0
  28. scadpy-0.4.2/docs/snapshots/d2__index_plate__dark.md5 +1 -0
  29. scadpy-0.4.2/docs/snapshots/d2__index_plate__light.md5 +1 -0
  30. scadpy-0.4.2/docs/snapshots/d2__index_storage_box__dark.md5 +1 -0
  31. scadpy-0.4.2/docs/snapshots/d2__index_storage_box__light.md5 +1 -0
  32. scadpy-0.4.2/docs/snapshots/d2__linear_pattern_shape_method_2d__dark.md5 +1 -0
  33. scadpy-0.4.2/docs/snapshots/d2__linear_pattern_shape_method_2d__light.md5 +1 -0
  34. scadpy-0.4.2/docs/snapshots/d2__linear_pattern_shape_method__dark.md5 +1 -0
  35. scadpy-0.4.2/docs/snapshots/d2__linear_pattern_shape_method__light.md5 +1 -0
  36. scadpy-0.4.2/docs/snapshots/d2__linear_pattern_solid_method_2d__dark.md5 +1 -0
  37. scadpy-0.4.2/docs/snapshots/d2__linear_pattern_solid_method_2d__light.md5 +1 -0
  38. scadpy-0.4.2/docs/snapshots/d2__linear_pattern_solid_method_3d__dark.md5 +1 -0
  39. scadpy-0.4.2/docs/snapshots/d2__linear_pattern_solid_method_3d__light.md5 +1 -0
  40. scadpy-0.4.2/docs/snapshots/d2__linear_pattern_solid_method__dark.md5 +1 -0
  41. scadpy-0.4.2/docs/snapshots/d2__linear_pattern_solid_method__light.md5 +1 -0
  42. scadpy-0.4.2/docs/snapshots/d2__radial_pattern_shape_method__dark.md5 +1 -0
  43. scadpy-0.4.2/docs/snapshots/d2__radial_pattern_shape_method__light.md5 +1 -0
  44. scadpy-0.4.2/docs/snapshots/d2__radial_pattern_solid_method__dark.md5 +1 -0
  45. scadpy-0.4.2/docs/snapshots/d2__radial_pattern_solid_method__light.md5 +1 -0
  46. scadpy-0.4.2/docs/snapshots/d2__subtract_solid__dark.md5 +1 -0
  47. scadpy-0.4.2/docs/snapshots/d2__subtract_solid__light.md5 +1 -0
  48. scadpy-0.4.2/docs/snapshots/d2__text_example__dark.md5 +1 -0
  49. scadpy-0.4.2/docs/snapshots/d2__text_example__light.md5 +1 -0
  50. {scadpy-0.2.13 → scadpy-0.4.2}/pyproject.toml +3 -3
  51. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/color/utils/get_random_color.py +0 -2
  52. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/assembly/combinations/concat_assemblies.py +0 -2
  53. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/assembly/combinations/exclude_assemblies.py +7 -25
  54. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/assembly/combinations/intersect_assemblies.py +0 -2
  55. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/assembly/combinations/subtract_assemblies.py +10 -50
  56. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/assembly/combinations/unify_assemblies.py +0 -2
  57. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/assembly/topologies/directed_edge/get_assembly_directed_edge_directions.py +0 -2
  58. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/assembly/topologies/directed_edge/get_assembly_directed_edge_to_edge.py +0 -2
  59. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/assembly/topologies/directed_edge/get_assembly_directed_edge_to_vertex.py +0 -2
  60. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/assembly/topologies/edge/get_assembly_edge_lengths.py +0 -2
  61. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/assembly/topologies/edge/get_assembly_edge_midpoints.py +0 -2
  62. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/assembly/topologies/edge/get_assembly_edge_normals.py +0 -2
  63. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/assembly/topologies/face_vertex/get_assembly_face_vertex_angles.py +0 -2
  64. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/assembly/topologies/face_vertex/get_assembly_face_vertex_normals.py +0 -2
  65. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/assembly/topologies/face_vertex/get_assembly_face_vertex_to_incoming_directed_edge.py +0 -2
  66. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/assembly/topologies/face_vertex/get_assembly_face_vertex_to_outgoing_directed_edge.py +0 -2
  67. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/assembly/topologies/part/get_assembly_part_colors.py +0 -2
  68. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/assembly/transformations/__init__.py +4 -0
  69. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/assembly/transformations/color_assembly.py +0 -2
  70. scadpy-0.4.2/scadpy/core/assembly/transformations/linear_pattern_assembly.py +68 -0
  71. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/assembly/transformations/mirror_vertex_coordinates.py +0 -2
  72. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/assembly/transformations/pull_vertex_coordinates.py +0 -2
  73. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/assembly/transformations/push_vertex_coordinates.py +0 -2
  74. scadpy-0.4.2/scadpy/core/assembly/transformations/radial_pattern_assembly.py +37 -0
  75. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/assembly/transformations/resize_vertex_coordinates.py +0 -2
  76. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/assembly/transformations/rotate_vertex_coordinates.py +0 -2
  77. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/assembly/transformations/scale_vertex_coordinates.py +0 -2
  78. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/assembly/transformations/translate_vertex_coordinates.py +0 -2
  79. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/assembly/utils/lookup_pairs.py +0 -2
  80. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/assembly/utils/resolve_topology_filter.py +0 -2
  81. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/assembly/utils/transform_filtered_parts.py +0 -2
  82. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/component/exporters/map_component_to_html_file.py +5 -4
  83. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/component/exporters/map_component_to_screen.py +12 -7
  84. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/component/features/get_component_bounds.py +0 -2
  85. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/component/utils/blend_component_colors.py +0 -2
  86. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/component/utils/get_intersecting_component_index_groups.py +0 -2
  87. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/part/combinations/concat_parts.py +0 -2
  88. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/part/combinations/intersect_parts.py +36 -0
  89. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/part/combinations/subtract_parts.py +12 -10
  90. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/part/combinations/unify_parts.py +36 -0
  91. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/combinations/are_shape_parts_intersecting.py +0 -2
  92. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/combinations/concat_shape.py +0 -2
  93. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/combinations/exclude_shape.py +2 -11
  94. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/combinations/intersect_shape.py +0 -2
  95. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/combinations/intersect_shape_parts.py +0 -2
  96. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/combinations/subtract_shape.py +2 -16
  97. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/combinations/subtract_shape_parts.py +12 -13
  98. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/combinations/unify_shape.py +0 -2
  99. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/combinations/unify_shape_parts.py +0 -2
  100. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/exporters/map_shape_to_dxf.py +1 -2
  101. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/exporters/map_shape_to_dxf_file.py +0 -2
  102. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/exporters/map_shape_to_html.py +8 -6
  103. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/exporters/map_shape_to_html_file.py +0 -2
  104. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/exporters/map_shape_to_screen.py +0 -2
  105. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/exporters/map_shape_to_svg.py +1 -2
  106. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/exporters/map_shape_to_svg_file.py +0 -2
  107. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/features/__init__.py +4 -0
  108. scadpy-0.4.2/scadpy/d2/shape/features/get_shape_bounding_box.py +37 -0
  109. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/features/get_shape_bounds.py +0 -2
  110. scadpy-0.4.2/scadpy/d2/shape/features/get_shape_centroid.py +44 -0
  111. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/features/get_shape_part_bounds.py +0 -2
  112. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/features/is_shape_empty.py +0 -2
  113. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/importers/map_dxf_to_shape.py +1 -2
  114. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/importers/map_geometries_to_shape.py +0 -2
  115. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/importers/map_geometry_to_shape.py +0 -2
  116. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/importers/map_parts_to_shape.py +0 -2
  117. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/importers/map_svg_to_shape.py +1 -2
  118. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/primitives/circle.py +0 -2
  119. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/primitives/polygon.py +0 -2
  120. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/primitives/rectangle.py +0 -2
  121. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/primitives/square.py +0 -2
  122. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/primitives/text.py +11 -5
  123. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/topologies/directed_edge/get_shape_directed_edge_directions.py +0 -2
  124. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/topologies/directed_edge/get_shape_directed_edge_to_edge.py +0 -2
  125. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/topologies/directed_edge/get_shape_directed_edge_to_vertex.py +0 -2
  126. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/topologies/edge/get_shape_edge_lengths.py +0 -2
  127. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/topologies/edge/get_shape_edge_midpoints.py +0 -2
  128. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/topologies/edge/get_shape_edge_normals.py +0 -2
  129. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/topologies/edge/get_shape_edge_to_vertex.py +0 -2
  130. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/topologies/ring/get_shape_ring_to_part.py +0 -2
  131. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/topologies/ring/get_shape_ring_types.py +0 -2
  132. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/topologies/vertex/are_shape_vertices_convex.py +0 -2
  133. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/topologies/vertex/get_shape_part_vertex_coordinates.py +0 -2
  134. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/topologies/vertex/get_shape_vertex_angles.py +0 -2
  135. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/topologies/vertex/get_shape_vertex_coordinates.py +0 -2
  136. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/topologies/vertex/get_shape_vertex_normals.py +0 -2
  137. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/topologies/vertex/get_shape_vertex_to_incoming_directed_edge.py +0 -2
  138. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/topologies/vertex/get_shape_vertex_to_neighbor_vertex.py +0 -2
  139. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/topologies/vertex/get_shape_vertex_to_outgoing_directed_edge.py +0 -2
  140. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/topologies/vertex/get_shape_vertex_to_part.py +0 -2
  141. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/topologies/vertex/get_shape_vertex_to_ring.py +0 -2
  142. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/transformations/__init__.py +4 -0
  143. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/transformations/chamfer_shape.py +0 -2
  144. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/transformations/color_shape.py +0 -2
  145. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/transformations/convexify_shape.py +0 -2
  146. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/transformations/fill_shape.py +0 -2
  147. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/transformations/fillet_shape.py +0 -2
  148. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/transformations/grow_shape.py +0 -2
  149. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/transformations/linear_cut_shape.py +0 -2
  150. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/transformations/linear_extrude_shape.py +0 -2
  151. scadpy-0.4.2/scadpy/d2/shape/transformations/linear_pattern_shape.py +46 -0
  152. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/transformations/linear_slice_shape.py +0 -2
  153. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/transformations/mirror_shape.py +0 -2
  154. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/transformations/pull_shape.py +0 -2
  155. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/transformations/push_shape.py +0 -2
  156. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/transformations/radial_extrude_shape.py +2 -3
  157. scadpy-0.4.2/scadpy/d2/shape/transformations/radial_pattern_shape.py +43 -0
  158. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/transformations/radial_slice_shape.py +0 -2
  159. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/transformations/recoordinate_shape.py +0 -2
  160. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/transformations/resize_shape.py +0 -2
  161. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/transformations/rotate_shape.py +0 -2
  162. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/transformations/scale_shape.py +0 -2
  163. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/transformations/shrink_shape.py +0 -2
  164. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/transformations/translate_shape.py +0 -2
  165. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/types/shape.py +100 -5
  166. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/types/utils/shapely_base_geometry_to_shapely_polygons.py +0 -2
  167. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/utils/shapely_base_geometry_to_shapely_polygons.py +0 -2
  168. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/utils/resolve_vector_2d.py +0 -2
  169. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/combinations/are_solid_parts_intersecting.py +11 -11
  170. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/combinations/concat_solid.py +0 -2
  171. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/combinations/exclude_solid.py +2 -11
  172. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/combinations/intersect_solid.py +0 -2
  173. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/combinations/intersect_solid_parts.py +0 -2
  174. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/combinations/subtract_solid.py +2 -16
  175. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/combinations/subtract_solid_parts.py +9 -11
  176. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/combinations/unify_solid.py +0 -2
  177. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/combinations/unify_solid_parts.py +0 -2
  178. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/exporters/map_solid_to_html.py +6 -4
  179. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/exporters/map_solid_to_html_file.py +0 -2
  180. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/exporters/map_solid_to_screen.py +0 -2
  181. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/exporters/map_solid_to_stl_file.py +1 -2
  182. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/features/__init__.py +4 -0
  183. scadpy-0.4.2/scadpy/d3/solid/features/get_solid_bounding_box.py +35 -0
  184. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/features/get_solid_bounds.py +0 -2
  185. scadpy-0.4.2/scadpy/d3/solid/features/get_solid_centroid.py +41 -0
  186. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/features/get_solid_part_bounds.py +0 -2
  187. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/features/get_solid_part_colors.py +0 -2
  188. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/features/is_solid_empty.py +0 -2
  189. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/importers/map_geometries_to_solid.py +0 -2
  190. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/importers/map_geometry_to_solid.py +0 -2
  191. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/importers/map_parts_to_solid.py +0 -2
  192. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/importers/map_stl_to_solid.py +1 -4
  193. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/primitives/cone.py +0 -2
  194. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/primitives/cuboid.py +0 -2
  195. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/primitives/cylinder.py +0 -2
  196. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/primitives/polyhedron.py +0 -2
  197. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/primitives/sphere.py +0 -2
  198. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/topologies/triangle/get_solid_triangle_to_vertex.py +0 -2
  199. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/topologies/vertex/get_solid_vertex_coordinates.py +0 -2
  200. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/topologies/vertex/get_solid_vertex_to_part.py +0 -2
  201. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/transformations/__init__.py +4 -0
  202. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/transformations/color_solid.py +0 -2
  203. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/transformations/convexify_solid.py +0 -2
  204. scadpy-0.4.2/scadpy/d3/solid/transformations/linear_pattern_solid.py +46 -0
  205. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/transformations/mirror_solid.py +0 -2
  206. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/transformations/pull_solid.py +0 -2
  207. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/transformations/push_solid.py +0 -2
  208. scadpy-0.4.2/scadpy/d3/solid/transformations/radial_pattern_solid.py +46 -0
  209. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/transformations/recoordinate_solid.py +0 -2
  210. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/transformations/resize_solid.py +0 -2
  211. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/transformations/rotate_solid.py +0 -2
  212. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/transformations/scale_solid.py +0 -2
  213. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/transformations/translate_solid.py +0 -2
  214. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/types/solid.py +117 -13
  215. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/utils/resolve_vector_3d.py +0 -2
  216. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/utils/available_fonts.py +4 -3
  217. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/utils/resolve_vector.py +0 -2
  218. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/utils/x.py +0 -2
  219. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/utils/y.py +0 -2
  220. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/utils/z.py +0 -2
  221. scadpy-0.2.13/docs/snapshots/d2__chamfer_shape_all__dark.md5 +0 -1
  222. scadpy-0.2.13/docs/snapshots/d2__chamfer_shape_all__light.md5 +0 -1
  223. scadpy-0.2.13/docs/snapshots/d2__chamfer_shape_convex_only__dark.md5 +0 -1
  224. scadpy-0.2.13/docs/snapshots/d2__chamfer_shape_convex_only__light.md5 +0 -1
  225. scadpy-0.2.13/docs/snapshots/d2__chamfer_shape_sharp_convex__dark.md5 +0 -1
  226. scadpy-0.2.13/docs/snapshots/d2__chamfer_shape_sharp_convex__light.md5 +0 -1
  227. scadpy-0.2.13/docs/snapshots/d2__exclude_solid__dark.md5 +0 -1
  228. scadpy-0.2.13/docs/snapshots/d2__exclude_solid__light.md5 +0 -1
  229. scadpy-0.2.13/docs/snapshots/d2__fillet_shape_all__dark.md5 +0 -1
  230. scadpy-0.2.13/docs/snapshots/d2__fillet_shape_all__light.md5 +0 -1
  231. scadpy-0.2.13/docs/snapshots/d2__fillet_shape_convex_only__dark.md5 +0 -1
  232. scadpy-0.2.13/docs/snapshots/d2__fillet_shape_convex_only__light.md5 +0 -1
  233. scadpy-0.2.13/docs/snapshots/d2__fillet_shape_sharp_convex__dark.md5 +0 -1
  234. scadpy-0.2.13/docs/snapshots/d2__fillet_shape_sharp_convex__light.md5 +0 -1
  235. scadpy-0.2.13/docs/snapshots/d2__index_bearing__dark.md5 +0 -1
  236. scadpy-0.2.13/docs/snapshots/d2__index_bearing__light.md5 +0 -1
  237. scadpy-0.2.13/docs/snapshots/d2__index_dice__dark.md5 +0 -1
  238. scadpy-0.2.13/docs/snapshots/d2__index_dice__light.md5 +0 -1
  239. scadpy-0.2.13/docs/snapshots/d2__index_extruded_plate__dark.md5 +0 -1
  240. scadpy-0.2.13/docs/snapshots/d2__index_extruded_plate__light.md5 +0 -1
  241. scadpy-0.2.13/docs/snapshots/d2__index_plate__dark.md5 +0 -1
  242. scadpy-0.2.13/docs/snapshots/d2__index_plate__light.md5 +0 -1
  243. scadpy-0.2.13/docs/snapshots/d2__index_storage_box__dark.md5 +0 -1
  244. scadpy-0.2.13/docs/snapshots/d2__index_storage_box__light.md5 +0 -1
  245. scadpy-0.2.13/docs/snapshots/d2__subtract_solid__dark.md5 +0 -1
  246. scadpy-0.2.13/docs/snapshots/d2__subtract_solid__light.md5 +0 -1
  247. scadpy-0.2.13/docs/snapshots/d2__text_example__dark.md5 +0 -1
  248. scadpy-0.2.13/docs/snapshots/d2__text_example__light.md5 +0 -1
  249. {scadpy-0.2.13 → scadpy-0.4.2}/.github/workflows/ci.yml +0 -0
  250. {scadpy-0.2.13 → scadpy-0.4.2}/.github/workflows/release.yml +0 -0
  251. {scadpy-0.2.13 → scadpy-0.4.2}/.gitignore +0 -0
  252. {scadpy-0.2.13 → scadpy-0.4.2}/LICENSE.md +0 -0
  253. {scadpy-0.2.13 → scadpy-0.4.2}/docs/Makefile +0 -0
  254. {scadpy-0.2.13 → scadpy-0.4.2}/docs/_static/css/custom.css +0 -0
  255. {scadpy-0.2.13 → scadpy-0.4.2}/docs/_static/examples/bearing_dark.png +0 -0
  256. {scadpy-0.2.13 → scadpy-0.4.2}/docs/_static/examples/bearing_light.png +0 -0
  257. {scadpy-0.2.13 → scadpy-0.4.2}/docs/_static/examples/dice_dark.png +0 -0
  258. {scadpy-0.2.13 → scadpy-0.4.2}/docs/_static/examples/dice_light.png +0 -0
  259. {scadpy-0.2.13 → scadpy-0.4.2}/docs/_static/examples/extruded_plate_dark.png +0 -0
  260. {scadpy-0.2.13 → scadpy-0.4.2}/docs/_static/examples/extruded_plate_light.png +0 -0
  261. {scadpy-0.2.13 → scadpy-0.4.2}/docs/_static/examples/plate_dark.png +0 -0
  262. {scadpy-0.2.13 → scadpy-0.4.2}/docs/_static/examples/plate_light.png +0 -0
  263. {scadpy-0.2.13 → scadpy-0.4.2}/docs/_static/examples/storage_box_dark.png +0 -0
  264. {scadpy-0.2.13 → scadpy-0.4.2}/docs/_static/examples/storage_box_light.png +0 -0
  265. {scadpy-0.2.13 → scadpy-0.4.2}/docs/_static/logo.ico +0 -0
  266. {scadpy-0.2.13 → scadpy-0.4.2}/docs/_static/logo.png +0 -0
  267. {scadpy-0.2.13 → scadpy-0.4.2}/docs/conf.py +0 -0
  268. {scadpy-0.2.13 → scadpy-0.4.2}/docs/scadpy/core/assembly/combinations.rst +0 -0
  269. {scadpy-0.2.13 → scadpy-0.4.2}/docs/scadpy/core/assembly/topologies.rst +0 -0
  270. {scadpy-0.2.13 → scadpy-0.4.2}/docs/scadpy/core/assembly/transformations.rst +0 -0
  271. {scadpy-0.2.13 → scadpy-0.4.2}/docs/scadpy/core/assembly/types.rst +0 -0
  272. {scadpy-0.2.13 → scadpy-0.4.2}/docs/scadpy/core/assembly/utils.rst +0 -0
  273. {scadpy-0.2.13 → scadpy-0.4.2}/docs/scadpy/core/assembly.rst +0 -0
  274. {scadpy-0.2.13 → scadpy-0.4.2}/docs/scadpy/core/component/exporters.rst +0 -0
  275. {scadpy-0.2.13 → scadpy-0.4.2}/docs/scadpy/core/component/features.rst +0 -0
  276. {scadpy-0.2.13 → scadpy-0.4.2}/docs/scadpy/core/component/utils.rst +0 -0
  277. {scadpy-0.2.13 → scadpy-0.4.2}/docs/scadpy/core/component.rst +0 -0
  278. {scadpy-0.2.13 → scadpy-0.4.2}/docs/scadpy/core/part/combinations.rst +0 -0
  279. {scadpy-0.2.13 → scadpy-0.4.2}/docs/scadpy/core/part.rst +0 -0
  280. {scadpy-0.2.13 → scadpy-0.4.2}/docs/scadpy/core.rst +0 -0
  281. {scadpy-0.2.13 → scadpy-0.4.2}/docs/scadpy/d2/shape/combinations.rst +0 -0
  282. {scadpy-0.2.13 → scadpy-0.4.2}/docs/scadpy/d2/shape/exporters.rst +0 -0
  283. {scadpy-0.2.13 → scadpy-0.4.2}/docs/scadpy/d2/shape/features.rst +0 -0
  284. {scadpy-0.2.13 → scadpy-0.4.2}/docs/scadpy/d2/shape/importers.rst +0 -0
  285. {scadpy-0.2.13 → scadpy-0.4.2}/docs/scadpy/d2/shape/primitives.rst +0 -0
  286. {scadpy-0.2.13 → scadpy-0.4.2}/docs/scadpy/d2/shape/topologies.rst +0 -0
  287. {scadpy-0.2.13 → scadpy-0.4.2}/docs/scadpy/d2/shape/transformations.rst +0 -0
  288. {scadpy-0.2.13 → scadpy-0.4.2}/docs/scadpy/d2/shape/types.rst +0 -0
  289. {scadpy-0.2.13 → scadpy-0.4.2}/docs/scadpy/d2/shape.rst +0 -0
  290. {scadpy-0.2.13 → scadpy-0.4.2}/docs/scadpy/d2.rst +0 -0
  291. {scadpy-0.2.13 → scadpy-0.4.2}/docs/scadpy/d3/solid/combinations.rst +0 -0
  292. {scadpy-0.2.13 → scadpy-0.4.2}/docs/scadpy/d3/solid/exporters.rst +0 -0
  293. {scadpy-0.2.13 → scadpy-0.4.2}/docs/scadpy/d3/solid/features.rst +0 -0
  294. {scadpy-0.2.13 → scadpy-0.4.2}/docs/scadpy/d3/solid/importers.rst +0 -0
  295. {scadpy-0.2.13 → scadpy-0.4.2}/docs/scadpy/d3/solid/primitives.rst +0 -0
  296. {scadpy-0.2.13 → scadpy-0.4.2}/docs/scadpy/d3/solid/topologies.rst +0 -0
  297. {scadpy-0.2.13 → scadpy-0.4.2}/docs/scadpy/d3/solid/transformations.rst +0 -0
  298. {scadpy-0.2.13 → scadpy-0.4.2}/docs/scadpy/d3/solid/types.rst +0 -0
  299. {scadpy-0.2.13 → scadpy-0.4.2}/docs/scadpy/d3/solid.rst +0 -0
  300. {scadpy-0.2.13 → scadpy-0.4.2}/docs/scadpy/d3.rst +0 -0
  301. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__chamfer_shape_clamp_proportional__dark.md5 +0 -0
  302. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__chamfer_shape_clamp_proportional__light.md5 +0 -0
  303. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__chamfer_shape_concave_asymmetric__dark.md5 +0 -0
  304. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__chamfer_shape_concave_asymmetric__light.md5 +0 -0
  305. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__color_shape__dark.md5 +0 -0
  306. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__color_shape__light.md5 +0 -0
  307. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__color_solid__dark.md5 +0 -0
  308. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__color_solid__light.md5 +0 -0
  309. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__concat_shape__dark.md5 +0 -0
  310. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__concat_shape__light.md5 +0 -0
  311. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__concat_solid__dark.md5 +0 -0
  312. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__concat_solid__light.md5 +0 -0
  313. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__cone__dark.md5 +0 -0
  314. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__cone__light.md5 +0 -0
  315. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__convexify_shape__dark.md5 +0 -0
  316. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__convexify_shape__light.md5 +0 -0
  317. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__convexify_shape_partial__dark.md5 +0 -0
  318. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__convexify_shape_partial__light.md5 +0 -0
  319. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__convexify_solid__dark.md5 +0 -0
  320. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__convexify_solid__light.md5 +0 -0
  321. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__cube__dark.md5 +0 -0
  322. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__cube__light.md5 +0 -0
  323. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__cuboid__dark.md5 +0 -0
  324. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__cuboid__light.md5 +0 -0
  325. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__cylinder__dark.md5 +0 -0
  326. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__cylinder__light.md5 +0 -0
  327. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__exclude_shape__dark.md5 +0 -0
  328. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__exclude_shape__light.md5 +0 -0
  329. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__fill_shape__dark.md5 +0 -0
  330. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__fill_shape__light.md5 +0 -0
  331. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__fill_shape_partial__dark.md5 +0 -0
  332. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__fill_shape_partial__light.md5 +0 -0
  333. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__fillet_shape_clamp_proportional__dark.md5 +0 -0
  334. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__fillet_shape_clamp_proportional__light.md5 +0 -0
  335. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__fillet_shape_concave_asymmetric__dark.md5 +0 -0
  336. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__fillet_shape_concave_asymmetric__light.md5 +0 -0
  337. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__grow_shape__dark.md5 +0 -0
  338. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__grow_shape__light.md5 +0 -0
  339. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__grow_shape_partial__dark.md5 +0 -0
  340. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__grow_shape_partial__light.md5 +0 -0
  341. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__grow_shape_shrink__dark.md5 +0 -0
  342. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__grow_shape_shrink__light.md5 +0 -0
  343. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__hexagonal_cone__dark.md5 +0 -0
  344. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__hexagonal_cone__light.md5 +0 -0
  345. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__hexagonal_cylinder__dark.md5 +0 -0
  346. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__hexagonal_cylinder__light.md5 +0 -0
  347. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__index_2d__dark.md5 +0 -0
  348. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__index_2d__light.md5 +0 -0
  349. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__index_3d__dark.md5 +0 -0
  350. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__index_3d__light.md5 +0 -0
  351. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__intersect_shape__dark.md5 +0 -0
  352. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__intersect_shape__light.md5 +0 -0
  353. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__intersect_shape_parts_example__dark.md5 +0 -0
  354. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__intersect_shape_parts_example__light.md5 +0 -0
  355. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__intersect_solid__dark.md5 +0 -0
  356. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__intersect_solid__light.md5 +0 -0
  357. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__intersect_solid_parts_example__dark.md5 +0 -0
  358. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__intersect_solid_parts_example__light.md5 +0 -0
  359. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__linear_cut_shape__dark.md5 +0 -0
  360. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__linear_cut_shape__light.md5 +0 -0
  361. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__linear_cut_shape_diagonal__dark.md5 +0 -0
  362. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__linear_cut_shape_diagonal__light.md5 +0 -0
  363. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__linear_extrude_shape_square__dark.md5 +0 -0
  364. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__linear_extrude_shape_square__light.md5 +0 -0
  365. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__linear_extrude_shape_tube__dark.md5 +0 -0
  366. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__linear_extrude_shape_tube__light.md5 +0 -0
  367. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__linear_slice_shape_diagonal__dark.md5 +0 -0
  368. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__linear_slice_shape_diagonal__light.md5 +0 -0
  369. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__linear_slice_shape_horizontal__dark.md5 +0 -0
  370. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__linear_slice_shape_horizontal__light.md5 +0 -0
  371. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__linear_slice_shape_partial__dark.md5 +0 -0
  372. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__linear_slice_shape_partial__light.md5 +0 -0
  373. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__linear_slice_shape_pivot__dark.md5 +0 -0
  374. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__linear_slice_shape_pivot__light.md5 +0 -0
  375. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__low_resolution_sphere__dark.md5 +0 -0
  376. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__low_resolution_sphere__light.md5 +0 -0
  377. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__map_dxf_to_shape__dark.md5 +0 -0
  378. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__map_dxf_to_shape__light.md5 +0 -0
  379. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__map_geometries_to_shape__dark.md5 +0 -0
  380. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__map_geometries_to_shape__light.md5 +0 -0
  381. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__map_geometries_to_solid__dark.md5 +0 -0
  382. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__map_geometries_to_solid__light.md5 +0 -0
  383. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__map_geometry_to_shape__dark.md5 +0 -0
  384. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__map_geometry_to_shape__light.md5 +0 -0
  385. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__map_geometry_to_solid__dark.md5 +0 -0
  386. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__map_geometry_to_solid__light.md5 +0 -0
  387. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__map_parts_to_shape__dark.md5 +0 -0
  388. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__map_parts_to_shape__light.md5 +0 -0
  389. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__map_parts_to_solid__dark.md5 +0 -0
  390. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__map_parts_to_solid__light.md5 +0 -0
  391. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__map_svg_to_shape__dark.md5 +0 -0
  392. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__map_svg_to_shape__light.md5 +0 -0
  393. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__mirror_shape__dark.md5 +0 -0
  394. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__mirror_shape__light.md5 +0 -0
  395. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__mirror_solid__dark.md5 +0 -0
  396. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__mirror_solid__light.md5 +0 -0
  397. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__polyhedron__dark.md5 +0 -0
  398. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__polyhedron__light.md5 +0 -0
  399. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__pull_shape__dark.md5 +0 -0
  400. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__pull_shape__light.md5 +0 -0
  401. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__pull_solid__dark.md5 +0 -0
  402. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__pull_solid__light.md5 +0 -0
  403. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__push_shape__dark.md5 +0 -0
  404. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__push_shape__light.md5 +0 -0
  405. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__push_solid__dark.md5 +0 -0
  406. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__push_solid__light.md5 +0 -0
  407. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__radial_extrude_shape__dark.md5 +0 -0
  408. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__radial_extrude_shape__light.md5 +0 -0
  409. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__radial_extrude_shape_partial__dark.md5 +0 -0
  410. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__radial_extrude_shape_partial__light.md5 +0 -0
  411. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__radial_slice_shape_partial__dark.md5 +0 -0
  412. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__radial_slice_shape_partial__light.md5 +0 -0
  413. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__radial_slice_shape_pivot__dark.md5 +0 -0
  414. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__radial_slice_shape_pivot__light.md5 +0 -0
  415. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__radial_slice_shape_quarter__dark.md5 +0 -0
  416. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__radial_slice_shape_quarter__light.md5 +0 -0
  417. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__radial_slice_shape_three_quarter__dark.md5 +0 -0
  418. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__radial_slice_shape_three_quarter__light.md5 +0 -0
  419. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__recoordinate_shape__dark.md5 +0 -0
  420. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__recoordinate_shape__light.md5 +0 -0
  421. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__recoordinate_solid__dark.md5 +0 -0
  422. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__recoordinate_solid__light.md5 +0 -0
  423. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__resize_shape_auto__dark.md5 +0 -0
  424. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__resize_shape_auto__light.md5 +0 -0
  425. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__resize_shape_exact__dark.md5 +0 -0
  426. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__resize_shape_exact__light.md5 +0 -0
  427. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__resize_shape_freeze__dark.md5 +0 -0
  428. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__resize_shape_freeze__light.md5 +0 -0
  429. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__resize_solid_auto__dark.md5 +0 -0
  430. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__resize_solid_auto__light.md5 +0 -0
  431. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__resize_solid_exact__dark.md5 +0 -0
  432. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__resize_solid_exact__light.md5 +0 -0
  433. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__resize_solid_freeze__dark.md5 +0 -0
  434. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__resize_solid_freeze__light.md5 +0 -0
  435. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__rotate_shape__dark.md5 +0 -0
  436. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__rotate_shape__light.md5 +0 -0
  437. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__rotate_solid__dark.md5 +0 -0
  438. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__rotate_solid__light.md5 +0 -0
  439. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__scale_shape__dark.md5 +0 -0
  440. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__scale_shape__light.md5 +0 -0
  441. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__scale_solid__dark.md5 +0 -0
  442. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__scale_solid__light.md5 +0 -0
  443. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__shrink_shape__dark.md5 +0 -0
  444. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__shrink_shape__light.md5 +0 -0
  445. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__shrink_shape_negative__dark.md5 +0 -0
  446. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__shrink_shape_negative__light.md5 +0 -0
  447. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__shrink_shape_partial__dark.md5 +0 -0
  448. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__shrink_shape_partial__light.md5 +0 -0
  449. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__sphere__dark.md5 +0 -0
  450. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__sphere__light.md5 +0 -0
  451. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__subtract_shape__dark.md5 +0 -0
  452. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__subtract_shape__light.md5 +0 -0
  453. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__subtract_shape_parts_example__dark.md5 +0 -0
  454. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__subtract_shape_parts_example__light.md5 +0 -0
  455. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__subtract_solid_parts_example__dark.md5 +0 -0
  456. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__subtract_solid_parts_example__light.md5 +0 -0
  457. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__translate_shape__dark.md5 +0 -0
  458. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__translate_shape__light.md5 +0 -0
  459. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__translate_solid__dark.md5 +0 -0
  460. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__translate_solid__light.md5 +0 -0
  461. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__unify_shape__dark.md5 +0 -0
  462. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__unify_shape__light.md5 +0 -0
  463. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__unify_shape_parts_example__dark.md5 +0 -0
  464. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__unify_shape_parts_example__light.md5 +0 -0
  465. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__unify_solid__dark.md5 +0 -0
  466. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__unify_solid__light.md5 +0 -0
  467. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__unify_solid_parts_example__dark.md5 +0 -0
  468. {scadpy-0.2.13 → scadpy-0.4.2}/docs/snapshots/d2__unify_solid_parts_example__light.md5 +0 -0
  469. {scadpy-0.2.13 → scadpy-0.4.2}/project_bundle.json +0 -0
  470. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/__init__.py +0 -0
  471. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/color/__init__.py +0 -0
  472. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/color/constants/BEIGE.py +0 -0
  473. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/color/constants/BLACK.py +0 -0
  474. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/color/constants/BLUE.py +0 -0
  475. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/color/constants/BROWN.py +0 -0
  476. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/color/constants/DARK_GRAY.py +0 -0
  477. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/color/constants/DEFAULT_COLOR.py +0 -0
  478. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/color/constants/DEFAULT_OPACITY.py +0 -0
  479. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/color/constants/GRAY.py +0 -0
  480. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/color/constants/GREEN.py +0 -0
  481. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/color/constants/ORANGE.py +0 -0
  482. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/color/constants/RED.py +0 -0
  483. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/color/constants/WHITE.py +0 -0
  484. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/color/constants/YELLOW.py +0 -0
  485. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/color/constants/__init__.py +0 -0
  486. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/color/type/__init__.py +0 -0
  487. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/color/type/color.py +0 -0
  488. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/color/utils/__init__.py +0 -0
  489. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/__init__.py +0 -0
  490. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/assembly/__init__.py +0 -0
  491. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/assembly/combinations/__init__.py +0 -0
  492. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/assembly/topologies/__init__.py +0 -0
  493. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/assembly/topologies/directed_edge/__init__.py +0 -0
  494. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/assembly/topologies/edge/__init__.py +0 -0
  495. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/assembly/topologies/face_vertex/__init__.py +0 -0
  496. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/assembly/topologies/part/__init__.py +0 -0
  497. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/assembly/topologies/vertex/__init__.py +0 -0
  498. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/assembly/topologies/vertex/get_assembly_vertex_coordinates.py +0 -0
  499. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/assembly/topologies/vertex/get_assembly_vertex_to_part.py +0 -0
  500. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/assembly/types/__init__.py +0 -0
  501. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/assembly/types/assembly.py +0 -0
  502. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/assembly/types/topology_filter.py +0 -0
  503. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/assembly/utils/__init__.py +0 -0
  504. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/component/__init__.py +0 -0
  505. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/component/exporters/__init__.py +0 -0
  506. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/component/features/__init__.py +0 -0
  507. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/component/utils/__init__.py +0 -0
  508. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/part/__init__.py +0 -0
  509. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/part/combinations/__init__.py +0 -0
  510. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/part/types/__init__.py +0 -0
  511. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/part/types/part.py +0 -0
  512. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/part/utils/__init__.py +0 -0
  513. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/core/part/utils/blend_part_colors.py +0 -0
  514. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/__init__.py +0 -0
  515. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/__init__.py +0 -0
  516. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/combinations/__init__.py +0 -0
  517. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/exporters/__init__.py +0 -0
  518. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/importers/__init__.py +0 -0
  519. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/primitives/__init__.py +0 -0
  520. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/topologies/__init__.py +0 -0
  521. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/topologies/directed_edge/__init__.py +0 -0
  522. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/topologies/edge/__init__.py +0 -0
  523. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/topologies/ring/__init__.py +0 -0
  524. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/topologies/vertex/__init__.py +0 -0
  525. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/types/__init__.py +0 -0
  526. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/types/utils/__init__.py +0 -0
  527. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/shape/utils/__init__.py +0 -0
  528. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d2/utils/__init__.py +0 -0
  529. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/__init__.py +0 -0
  530. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/__init__.py +0 -0
  531. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/combinations/__init__.py +0 -0
  532. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/exporters/__init__.py +0 -0
  533. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/importers/__init__.py +0 -0
  534. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/primitives/__init__.py +0 -0
  535. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/topologies/__init__.py +0 -0
  536. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/topologies/triangle/__init__.py +0 -0
  537. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/topologies/vertex/__init__.py +0 -0
  538. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/solid/types/__init__.py +0 -0
  539. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/d3/utils/__init__.py +0 -0
  540. {scadpy-0.2.13 → scadpy-0.4.2}/scadpy/utils/__init__.py +0 -0
@@ -0,0 +1,48 @@
1
+ #!/usr/bin/env python3
2
+ """Jedi-based code intelligence queries for Claude."""
3
+ import sys
4
+ import json
5
+ import jedi
6
+
7
+ def find_references(file_path, line, col):
8
+ script = jedi.Script(path=file_path)
9
+ refs = script.get_references(line, col)
10
+ return [{"file": str(r.module_path), "line": r.line, "col": r.column, "name": r.name} for r in refs]
11
+
12
+ def goto_definition(file_path, line, col):
13
+ script = jedi.Script(path=file_path)
14
+ defs = script.goto(line, col)
15
+ return [{"file": str(d.module_path), "line": d.line, "col": d.column, "name": d.name} for d in defs]
16
+
17
+ def find_usages_of_name(project_path, name):
18
+ project = jedi.Project(project_path)
19
+ results = []
20
+ import os
21
+ for root, _, files in os.walk(project_path):
22
+ for f in files:
23
+ if f.endswith(".py") and ".venv" not in root:
24
+ path = os.path.join(root, f)
25
+ try:
26
+ script = jedi.Script(path=path, project=project)
27
+ with open(path) as fh:
28
+ lines = fh.readlines()
29
+ for i, line in enumerate(lines, 1):
30
+ if name in line:
31
+ col = line.index(name)
32
+ refs = script.get_references(i, col)
33
+ for r in refs:
34
+ if r.name == name:
35
+ results.append({"file": path, "line": i, "col": col})
36
+ break
37
+ except Exception:
38
+ pass
39
+ return results
40
+
41
+ if __name__ == "__main__":
42
+ cmd = sys.argv[1]
43
+ if cmd == "refs":
44
+ print(json.dumps(find_references(sys.argv[2], int(sys.argv[3]), int(sys.argv[4])), indent=2))
45
+ elif cmd == "goto":
46
+ print(json.dumps(goto_definition(sys.argv[2], int(sys.argv[3]), int(sys.argv[4])), indent=2))
47
+ elif cmd == "usages":
48
+ print(json.dumps(find_usages_of_name(sys.argv[2], sys.argv[3]), indent=2))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ScadPy
3
- Version: 0.2.13
3
+ Version: 0.4.2
4
4
  Summary: Simplified 2D/3D modeling for Python with fluent API and boolean operations
5
5
  Author: m-fabregue
6
6
  License: # MIT License
@@ -56,6 +56,7 @@ Requires-Dist: ipython~=8.30
56
56
  Requires-Dist: manifold3d==3.2.1
57
57
  Requires-Dist: matplotlib==3.10.6
58
58
  Requires-Dist: pyside6~=6.10
59
+ Requires-Dist: python-fcl~=0.7
59
60
  Requires-Dist: triangle==20250106
60
61
  Requires-Dist: trimesh[easy]~=4.10
61
62
  Requires-Dist: typeguard~=4.4
@@ -139,7 +140,6 @@ extruded_plate.to_screen()
139
140
  ```python
140
141
  # 3D — parametric ball bearing
141
142
  from scadpy import circle, rectangle, sphere, x, y, GRAY, ORANGE
142
- import numpy as np
143
143
 
144
144
  BALL_RADIUS = 3
145
145
  RACE_RADIUS = 15
@@ -151,10 +151,8 @@ RACE_THICKNESS = 10
151
151
  groove = circle(BALL_RADIUS + CLEARANCE) | rectangle([BALL_RADIUS, RING_HEIGHT])
152
152
  race = rectangle([RACE_THICKNESS, RING_HEIGHT]) - groove
153
153
  bearing = race.radial_extrude(axis=y(), pivot=x(RACE_RADIUS)).color(GRAY)
154
-
155
- ball = sphere(BALL_RADIUS).color(ORANGE)
156
- for angle in np.linspace(0, 360, NB_BALLS, endpoint=False):
157
- bearing += ball.rotate(angle, axis=y(), pivot=x(RACE_RADIUS))
154
+ ball = sphere(BALL_RADIUS).color(ORANGE)
155
+ bearing += ball.radial_pattern(count=NB_BALLS, axis=y(), pivot=x(RACE_RADIUS))
158
156
 
159
157
  bearing.to_screen()
160
158
  ```
@@ -260,10 +258,12 @@ s.fill() # part_filter=None
260
258
  s.fillet(size=0.8) # vertex_filter=None, segment_count=32, epsilon=1e-8
261
259
  s.grow(distance=0.5) # part_filter=None
262
260
  s.linear_cut(axis=x()) # pivot=0
261
+ s.linear_pattern(counts=4, steps=x(3)) # counts=[nx, ny], steps=[sx, sy]
263
262
  s.linear_slice(thickness=2, direction=x()) # pivot=0, part_filter=None
264
263
  s.mirror(normal=[1, 0]) # pivot=0
265
264
  s.pull(distance=1.0) # pivot=0, vertex_filter=None
266
265
  s.push(distance=1.0) # pivot=0, vertex_filter=None
266
+ s.radial_pattern(count=6) # angle=360, pivot=0
267
267
  s.radial_slice(start=0, end=180) # pivot=0, part_filter=None
268
268
  s.resize(size=[6, None]) # auto=False, pivot=None, vertex_filter=None
269
269
  s.rotate(angle=30) # pivot=0, vertex_filter=None
@@ -271,6 +271,12 @@ s.scale(scale=[2, 0.5]) # pivot=0, vertex_filter=None
271
271
  s.shrink(distance=0.5) # part_filter=None
272
272
  s.translate(translation=[2, 1]) # vertex_filter=None
273
273
 
274
+ # features
275
+ s.bounds # [min_x, min_y, max_x, max_y]
276
+ s.bounding_box # → Shape (rectangle)
277
+ s.centroid # [cx, cy] — geometric centroid
278
+ s.is_empty # bool
279
+
274
280
  # topology — coordinates & attributes
275
281
  s.are_vertices_convex # (n_vertices,) — convexity mask
276
282
  s.directed_edge_directions # (2*n_edges, 2)
@@ -328,14 +334,22 @@ a + b # concat (no merge)
328
334
  # transforms
329
335
  a.color(color=RED)
330
336
  a.convexify() # part_filter=None
337
+ a.linear_pattern(counts=4, steps=x(3)) # counts=[nx, ny, nz], steps=[sx, sy, sz]
331
338
  a.mirror(normal=[1, 0, 0]) # pivot=0
332
339
  a.pull(distance=1.0) # pivot=0, vertex_filter=None
333
340
  a.push(distance=1.0) # pivot=0, vertex_filter=None
341
+ a.radial_pattern(count=6, axis=z()) # angle=360, pivot=0
334
342
  a.resize(size=[6, None, None]) # auto=False, pivot=None, vertex_filter=None
335
343
  a.rotate(angle=30, axis=z()) # pivot=0, vertex_filter=None
336
344
  a.scale(scale=[2, 1, 0.5]) # pivot=0, vertex_filter=None
337
345
  a.translate(translation=[1, 0, 0]) # vertex_filter=None
338
346
 
347
+ # features
348
+ a.bounds # [min_x, min_y, min_z, max_x, max_y, max_z]
349
+ a.bounding_box # → Solid (cuboid)
350
+ a.centroid # [cx, cy, cz] — geometric centroid
351
+ a.is_empty # bool
352
+
339
353
  # topology — coordinates & bridges (*_to_*)
340
354
  a.triangle_to_vertex # triangle → [v0, v1, v2]
341
355
  a.vertex_coordinates # (n_vertices, 3)
@@ -67,7 +67,6 @@ extruded_plate.to_screen()
67
67
  ```python
68
68
  # 3D — parametric ball bearing
69
69
  from scadpy import circle, rectangle, sphere, x, y, GRAY, ORANGE
70
- import numpy as np
71
70
 
72
71
  BALL_RADIUS = 3
73
72
  RACE_RADIUS = 15
@@ -79,10 +78,8 @@ RACE_THICKNESS = 10
79
78
  groove = circle(BALL_RADIUS + CLEARANCE) | rectangle([BALL_RADIUS, RING_HEIGHT])
80
79
  race = rectangle([RACE_THICKNESS, RING_HEIGHT]) - groove
81
80
  bearing = race.radial_extrude(axis=y(), pivot=x(RACE_RADIUS)).color(GRAY)
82
-
83
- ball = sphere(BALL_RADIUS).color(ORANGE)
84
- for angle in np.linspace(0, 360, NB_BALLS, endpoint=False):
85
- bearing += ball.rotate(angle, axis=y(), pivot=x(RACE_RADIUS))
81
+ ball = sphere(BALL_RADIUS).color(ORANGE)
82
+ bearing += ball.radial_pattern(count=NB_BALLS, axis=y(), pivot=x(RACE_RADIUS))
86
83
 
87
84
  bearing.to_screen()
88
85
  ```
@@ -188,10 +185,12 @@ s.fill() # part_filter=None
188
185
  s.fillet(size=0.8) # vertex_filter=None, segment_count=32, epsilon=1e-8
189
186
  s.grow(distance=0.5) # part_filter=None
190
187
  s.linear_cut(axis=x()) # pivot=0
188
+ s.linear_pattern(counts=4, steps=x(3)) # counts=[nx, ny], steps=[sx, sy]
191
189
  s.linear_slice(thickness=2, direction=x()) # pivot=0, part_filter=None
192
190
  s.mirror(normal=[1, 0]) # pivot=0
193
191
  s.pull(distance=1.0) # pivot=0, vertex_filter=None
194
192
  s.push(distance=1.0) # pivot=0, vertex_filter=None
193
+ s.radial_pattern(count=6) # angle=360, pivot=0
195
194
  s.radial_slice(start=0, end=180) # pivot=0, part_filter=None
196
195
  s.resize(size=[6, None]) # auto=False, pivot=None, vertex_filter=None
197
196
  s.rotate(angle=30) # pivot=0, vertex_filter=None
@@ -199,6 +198,12 @@ s.scale(scale=[2, 0.5]) # pivot=0, vertex_filter=None
199
198
  s.shrink(distance=0.5) # part_filter=None
200
199
  s.translate(translation=[2, 1]) # vertex_filter=None
201
200
 
201
+ # features
202
+ s.bounds # [min_x, min_y, max_x, max_y]
203
+ s.bounding_box # → Shape (rectangle)
204
+ s.centroid # [cx, cy] — geometric centroid
205
+ s.is_empty # bool
206
+
202
207
  # topology — coordinates & attributes
203
208
  s.are_vertices_convex # (n_vertices,) — convexity mask
204
209
  s.directed_edge_directions # (2*n_edges, 2)
@@ -256,14 +261,22 @@ a + b # concat (no merge)
256
261
  # transforms
257
262
  a.color(color=RED)
258
263
  a.convexify() # part_filter=None
264
+ a.linear_pattern(counts=4, steps=x(3)) # counts=[nx, ny, nz], steps=[sx, sy, sz]
259
265
  a.mirror(normal=[1, 0, 0]) # pivot=0
260
266
  a.pull(distance=1.0) # pivot=0, vertex_filter=None
261
267
  a.push(distance=1.0) # pivot=0, vertex_filter=None
268
+ a.radial_pattern(count=6, axis=z()) # angle=360, pivot=0
262
269
  a.resize(size=[6, None, None]) # auto=False, pivot=None, vertex_filter=None
263
270
  a.rotate(angle=30, axis=z()) # pivot=0, vertex_filter=None
264
271
  a.scale(scale=[2, 1, 0.5]) # pivot=0, vertex_filter=None
265
272
  a.translate(translation=[1, 0, 0]) # vertex_filter=None
266
273
 
274
+ # features
275
+ a.bounds # [min_x, min_y, min_z, max_x, max_y, max_z]
276
+ a.bounding_box # → Solid (cuboid)
277
+ a.centroid # [cx, cy, cz] — geometric centroid
278
+ a.is_empty # bool
279
+
267
280
  # topology — coordinates & bridges (*_to_*)
268
281
  a.triangle_to_vertex # triangle → [v0, v1, v2]
269
282
  a.vertex_coordinates # (n_vertices, 3)
@@ -1 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="114" height="20" role="img" aria-label="coverage: 92.90%"><title>coverage: 92.90%</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="114" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="61" height="20" fill="#555"/><rect x="61" width="53" height="20" fill="#4c1"/><rect width="114" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="315" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="510">coverage</text><text x="315" y="140" transform="scale(.1)" fill="#fff" textLength="510">coverage</text><text aria-hidden="true" x="865" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="430">92.90%</text><text x="865" y="140" transform="scale(.1)" fill="#fff" textLength="430">92.90%</text></g></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="114" height="20" role="img" aria-label="coverage: 91.60%"><title>coverage: 91.60%</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="114" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="61" height="20" fill="#555"/><rect x="61" width="53" height="20" fill="#4c1"/><rect width="114" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="315" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="510">coverage</text><text x="315" y="140" transform="scale(.1)" fill="#fff" textLength="510">coverage</text><text aria-hidden="true" x="865" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="430">91.60%</text><text x="865" y="140" transform="scale(.1)" fill="#fff" textLength="430">91.60%</text></g></svg>
@@ -1,5 +1,5 @@
1
1
  <svg width="140" height="20" viewBox="0 0 140 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
2
- <title>interrogate: 91.6%</title>
2
+ <title>interrogate: 92.2%</title>
3
3
  <g transform="matrix(1,0,0,1,22,0)">
4
4
  <g id="backgrounds" transform="matrix(1.32789,0,0,1,-22.3892,0)">
5
5
  <rect x="0" y="0" width="71" height="20" style="fill:rgb(85,85,85);"/>
@@ -12,8 +12,8 @@
12
12
  <g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="110">
13
13
  <text x="590" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="610">interrogate</text>
14
14
  <text x="590" y="140" transform="scale(.1)" textLength="610">interrogate</text>
15
- <text x="1160" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="370" data-interrogate="result">91.6%</text>
16
- <text x="1160" y="140" transform="scale(.1)" textLength="370" data-interrogate="result">91.6%</text>
15
+ <text x="1160" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="370" data-interrogate="result">92.2%</text>
16
+ <text x="1160" y="140" transform="scale(.1)" textLength="370" data-interrogate="result">92.2%</text>
17
17
  </g>
18
18
  <g id="logo-shadow" serif:id="logo shadow" transform="matrix(0.854876,0,0,0.854876,-6.73514,1.732)">
19
19
  <g transform="matrix(0.299012,0,0,0.299012,9.70229,-6.68582)">
@@ -94,8 +94,7 @@ Quick examples
94
94
  >>> bearing = race.radial_extrude(axis=y(), pivot=x(RACE_RADIUS)).color(GRAY)
95
95
 
96
96
  >>> ball = sphere(BALL_RADIUS).color(ORANGE)
97
- >>> for angle in np.linspace(0, 360, NB_BALLS, endpoint=False):
98
- ... bearing += ball.rotate(angle, axis=y(), pivot=x(RACE_RADIUS))
97
+ >>> bearing += ball.radial_pattern(count=NB_BALLS, axis=y(), pivot=x(RACE_RADIUS))
99
98
 
100
99
  >>> bearing.to_screen() # doctest: +SKIP
101
100
 
@@ -200,10 +199,12 @@ Cheat sheet
200
199
  s.fillet(size=0.8) # vertex_filter=None, segment_count=32, epsilon=1e-8
201
200
  s.grow(distance=0.5) # part_filter=None
202
201
  s.linear_cut(axis=x()) # pivot=0
202
+ s.linear_pattern(counts=4, steps=x(3)) # counts=[nx, ny], steps=[sx, sy]
203
203
  s.linear_slice(thickness=2, direction=x()) # pivot=0, part_filter=None
204
204
  s.mirror(normal=[1, 0]) # pivot=0
205
205
  s.pull(distance=1.0) # pivot=0, vertex_filter=None
206
206
  s.push(distance=1.0) # pivot=0, vertex_filter=None
207
+ s.radial_pattern(count=6) # angle=360, pivot=0
207
208
  s.radial_slice(start=0, end=180) # pivot=0, part_filter=None
208
209
  s.resize(size=[6, None]) # auto=False, pivot=None, vertex_filter=None
209
210
  s.rotate(angle=30) # pivot=0, vertex_filter=None
@@ -211,6 +212,12 @@ Cheat sheet
211
212
  s.shrink(distance=0.5) # part_filter=None
212
213
  s.translate(translation=[2, 1]) # vertex_filter=None
213
214
 
215
+ # features
216
+ s.bounds # [min_x, min_y, max_x, max_y]
217
+ s.bounding_box # → Shape (rectangle)
218
+ s.centroid # [cx, cy] — geometric centroid
219
+ s.is_empty # bool
220
+
214
221
  # topology — coordinates & attributes
215
222
  s.are_vertices_convex # (n_vertices,) — convexity mask
216
223
  s.directed_edge_directions # (2*n_edges, 2)
@@ -268,14 +275,22 @@ Cheat sheet
268
275
  # transforms
269
276
  a.color(color=RED)
270
277
  a.convexify() # part_filter=None
278
+ a.linear_pattern(counts=4, steps=x(3)) # counts=[nx, ny, nz], steps=[sx, sy, sz]
271
279
  a.mirror(normal=[1, 0, 0]) # pivot=0
272
280
  a.pull(distance=1.0) # pivot=0, vertex_filter=None
273
281
  a.push(distance=1.0) # pivot=0, vertex_filter=None
282
+ a.radial_pattern(count=6, axis=z()) # angle=360, pivot=0
274
283
  a.resize(size=[6, None, None]) # auto=False, pivot=None, vertex_filter=None
275
284
  a.rotate(angle=30, axis=z()) # pivot=0, vertex_filter=None
276
285
  a.scale(scale=[2, 1, 0.5]) # pivot=0, vertex_filter=None
277
286
  a.translate(translation=[1, 0, 0]) # vertex_filter=None
278
287
 
288
+ # features
289
+ a.bounds # [min_x, min_y, min_z, max_x, max_y, max_z]
290
+ a.bounding_box # → Solid (cuboid)
291
+ a.centroid # [cx, cy, cz] — geometric centroid
292
+ a.is_empty # bool
293
+
279
294
  # topology — coordinates & bridges (*_to_*)
280
295
  a.triangle_to_vertex # triangle → [v0, v1, v2]
281
296
  a.vertex_coordinates # (n_vertices, 3)