simplecadapi 2.0.0b3__tar.gz → 2.0.0b4__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.
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/PKG-INFO +8 -7
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/README.md +4 -4
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/README.md +2 -2
- simplecadapi-2.0.0b3/docs/api/cut_rsolidlist.md → simplecadapi-2.0.0b4/docs/api/cut_rsolid.md +3 -3
- simplecadapi-2.0.0b3/docs/api/intersect_rsolidlist.md → simplecadapi-2.0.0b4/docs/api/intersect_rsolid.md +3 -3
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/architecture/sdk-architecture-review.md +2 -2
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/core/README.md +2 -2
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/core/declarative_constraints.md +1 -1
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/core/operation_graph_json_spec.md +7 -7
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/core/rearchitecture_2_0_requirements.md +2 -2
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/core/serialization/README.md +1 -1
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/core/serialization/features-booleans-transforms.md +6 -6
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/core/solid.md +6 -6
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/pyproject.toml +4 -3
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/src/simplecadapi/__init__.py +6 -6
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/src/simplecadapi/auto_tools/make_export.py +2 -2
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/src/simplecadapi/auto_tools/skill_pack.py +3 -3
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/src/simplecadapi/evolve.py +4 -4
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/src/simplecadapi/freecad_translator.py +4 -4
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/src/simplecadapi/graph.py +1 -1
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/src/simplecadapi/operations.py +20 -20
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/src/simplecadapi/serializer.py +10 -10
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/src/simplecadapi/topology.py +3 -3
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/.gitignore +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/LICENSE +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/MANIFEST.in +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/Const.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/Expr.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/ExpressionGraph.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/GraphSession.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/SemanticDelta.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/SemanticRef.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/SimpleCADError.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/Sketch.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/Var.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/and_.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/apply_tag.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/chamfer_rsolid.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/const_function.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/export_graph_json.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/export_model_json.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/export_session_json.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/export_step.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/export_stl.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/extrude_rsolid.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/fillet_rsolid.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/geo.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/helical_sweep_rsolid.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/import_graph_json.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/import_model_json.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/import_session_json.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/linear_pattern_rsolidlist.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/list_tags.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/loft_rsolid.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/make_angle_arc_redge.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/make_angle_arc_rwire.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/make_box_rsolid.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/make_circle_redge.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/make_circle_rface.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/make_circle_rwire.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/make_cone_rsolid.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/make_cylinder_rsolid.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/make_face_from_wire_rface.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/make_helix_redge.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/make_helix_rwire.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/make_line_redge.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/make_n_hole_flange_rsolid.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/make_naca_propeller_blade_rsolid.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/make_point_rvertex.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/make_polyline_rwire.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/make_rectangle_rface.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/make_rectangle_rwire.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/make_segment_redge.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/make_segment_rwire.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/make_sphere_rsolid.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/make_spline_redge.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/make_spline_rwire.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/make_threaded_rod_rsolid.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/make_three_point_arc_redge.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/make_three_point_arc_rwire.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/make_wire_from_edges_rwire.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/meta.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/mirror_shape.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/not_.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/or_.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/radial_pattern_rsolidlist.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/render_screenshot_rpath.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/replay_graph.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/replay_model_json.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/revolve_rsolid.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/rotate_shape.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/select.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/select_edges_by_tag.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/select_faces_by_tag.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/shell_rsolid.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/suspend_graph_recording.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/sweep_rsolid.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/tag.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/translate_model_json_to_fcstd.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/translate_model_json_to_freecad_script.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/translate_shape.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/union_rsolid.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/value.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/api/var_function.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/core/compound.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/core/coordinate_system.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/core/edge.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/core/face.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/core/rearchitecture_2_0.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/core/serialization/expressions-and-replay.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/core/serialization/primitives-and-profiles.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/core/serialization/scalar-fields.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/core/shell.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/core/simple_workplane.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/core/tagged_mixin.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/core/vertex.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/docs/core/wire.md +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/src/simplecadapi/_vendor_warning_filters.py +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/src/simplecadapi/auto_tools/__init__.py +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/src/simplecadapi/auto_tools/auto_docs_gen.py +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/src/simplecadapi/auto_tools/evolution.py +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/src/simplecadapi/autotag.py +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/src/simplecadapi/core.py +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/src/simplecadapi/errors.py +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/src/simplecadapi/expr.py +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/src/simplecadapi/frame.py +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/src/simplecadapi/kernel/__init__.py +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/src/simplecadapi/kernel/ocp_booleans.py +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/src/simplecadapi/kernel/ocp_builders.py +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/src/simplecadapi/kernel/ocp_cast.py +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/src/simplecadapi/kernel/ocp_curves.py +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/src/simplecadapi/kernel/ocp_export.py +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/src/simplecadapi/kernel/ocp_features.py +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/src/simplecadapi/kernel/ocp_mesh.py +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/src/simplecadapi/kernel/ocp_properties.py +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/src/simplecadapi/kernel/ocp_topology.py +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/src/simplecadapi/kernel/ocp_transforms.py +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/src/simplecadapi/kernel/spline_fit.py +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/src/simplecadapi/py.typed +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/src/simplecadapi/ql.py +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/src/simplecadapi/sketch.py +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/src/simplecadapi/tagging.py +0 -0
- {simplecadapi-2.0.0b3 → simplecadapi-2.0.0b4}/src/simplecadapi/tracking.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: simplecadapi
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.0b4
|
|
4
4
|
Summary: A simplified OCP-native CAD modeling Python API
|
|
5
5
|
Project-URL: Homepage, https://github.com/NiJingzhe/SimpleCADAPI
|
|
6
6
|
Project-URL: Repository, https://github.com/NiJingzhe/SimpleCADAPI
|
|
@@ -358,10 +358,11 @@ Classifier: Programming Language :: Python :: 3
|
|
|
358
358
|
Classifier: Programming Language :: Python :: 3.10
|
|
359
359
|
Classifier: Programming Language :: Python :: 3.11
|
|
360
360
|
Classifier: Programming Language :: Python :: 3.12
|
|
361
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
361
362
|
Classifier: Topic :: Scientific/Engineering
|
|
362
363
|
Classifier: Topic :: Scientific/Engineering :: Visualization
|
|
363
|
-
Requires-Python:
|
|
364
|
-
Requires-Dist: cadquery-ocp>=7.
|
|
364
|
+
Requires-Python: <3.14,>=3.10
|
|
365
|
+
Requires-Dist: cadquery-ocp>=7.9.3.1
|
|
365
366
|
Requires-Dist: numpy>=1.21.0
|
|
366
367
|
Requires-Dist: rich>=14.0.0
|
|
367
368
|
Provides-Extra: dev
|
|
@@ -381,7 +382,7 @@ in a compact public API for creating solids, applying features, tagging semantic
|
|
|
381
382
|
intent, querying topology, exporting manufacturing files, and translating recorded
|
|
382
383
|
models into FreeCAD workflows.
|
|
383
384
|
|
|
384
|
-
Current beta: `simplecadapi==2.0.
|
|
385
|
+
Current beta: `simplecadapi==2.0.0b4`.
|
|
385
386
|
|
|
386
387
|
## What It Provides
|
|
387
388
|
|
|
@@ -429,7 +430,7 @@ base = scad.make_box_rsolid(60.0, 36.0, 8.0, bottom_face_center=(0.0, 0.0, 0.0))
|
|
|
429
430
|
hole = scad.make_cylinder_rsolid(5.0, 14.0, bottom_face_center=(0.0, 0.0, -3.0))
|
|
430
431
|
slot = scad.make_box_rsolid(18.0, 8.0, 14.0, bottom_face_center=(14.0, 0.0, -3.0))
|
|
431
432
|
|
|
432
|
-
part = scad.
|
|
433
|
+
part = scad.cut_rsolid(base, hole, slot)
|
|
433
434
|
boss = scad.make_cylinder_rsolid(8.0, 7.0, bottom_face_center=(-18.0, 0.0, 8.0))
|
|
434
435
|
part = scad.union_rsolid(part, boss)
|
|
435
436
|
part = scad.apply_tag(part, "role.demo.bracket")
|
|
@@ -454,7 +455,7 @@ from simplecadapi import ql as Q
|
|
|
454
455
|
with scad.GraphSession() as session:
|
|
455
456
|
body = scad.make_box_rsolid(40.0, 24.0, 10.0, bottom_face_center=(0.0, 0.0, 0.0))
|
|
456
457
|
cutter = scad.make_cylinder_rsolid(4.0, 16.0, bottom_face_center=(0.0, 0.0, -3.0))
|
|
457
|
-
drilled = scad.
|
|
458
|
+
drilled = scad.cut_rsolid(body, cutter)
|
|
458
459
|
|
|
459
460
|
bottom_circle = (
|
|
460
461
|
Q.edges()
|
|
@@ -480,7 +481,7 @@ print("replayed_outputs", len(rebuilt))
|
|
|
480
481
|
wires/faces first, then solid features such as extrude, revolve, loft, and
|
|
481
482
|
sweep.
|
|
482
483
|
- Keep operations functional. Create new values with public functions such as
|
|
483
|
-
`make_rectangle_rface(...)`, `extrude_rsolid(...)`, `
|
|
484
|
+
`make_rectangle_rface(...)`, `extrude_rsolid(...)`, `cut_rsolid(...)`, and
|
|
484
485
|
`fillet_rsolid(...)`.
|
|
485
486
|
- Use tags for semantic intent and selection anchors, for example
|
|
486
487
|
`role.mounting.surface`, `anchor.datum.primary`, or `group.fasteners`.
|
|
@@ -6,7 +6,7 @@ in a compact public API for creating solids, applying features, tagging semantic
|
|
|
6
6
|
intent, querying topology, exporting manufacturing files, and translating recorded
|
|
7
7
|
models into FreeCAD workflows.
|
|
8
8
|
|
|
9
|
-
Current beta: `simplecadapi==2.0.
|
|
9
|
+
Current beta: `simplecadapi==2.0.0b4`.
|
|
10
10
|
|
|
11
11
|
## What It Provides
|
|
12
12
|
|
|
@@ -54,7 +54,7 @@ base = scad.make_box_rsolid(60.0, 36.0, 8.0, bottom_face_center=(0.0, 0.0, 0.0))
|
|
|
54
54
|
hole = scad.make_cylinder_rsolid(5.0, 14.0, bottom_face_center=(0.0, 0.0, -3.0))
|
|
55
55
|
slot = scad.make_box_rsolid(18.0, 8.0, 14.0, bottom_face_center=(14.0, 0.0, -3.0))
|
|
56
56
|
|
|
57
|
-
part = scad.
|
|
57
|
+
part = scad.cut_rsolid(base, hole, slot)
|
|
58
58
|
boss = scad.make_cylinder_rsolid(8.0, 7.0, bottom_face_center=(-18.0, 0.0, 8.0))
|
|
59
59
|
part = scad.union_rsolid(part, boss)
|
|
60
60
|
part = scad.apply_tag(part, "role.demo.bracket")
|
|
@@ -79,7 +79,7 @@ from simplecadapi import ql as Q
|
|
|
79
79
|
with scad.GraphSession() as session:
|
|
80
80
|
body = scad.make_box_rsolid(40.0, 24.0, 10.0, bottom_face_center=(0.0, 0.0, 0.0))
|
|
81
81
|
cutter = scad.make_cylinder_rsolid(4.0, 16.0, bottom_face_center=(0.0, 0.0, -3.0))
|
|
82
|
-
drilled = scad.
|
|
82
|
+
drilled = scad.cut_rsolid(body, cutter)
|
|
83
83
|
|
|
84
84
|
bottom_circle = (
|
|
85
85
|
Q.edges()
|
|
@@ -105,7 +105,7 @@ print("replayed_outputs", len(rebuilt))
|
|
|
105
105
|
wires/faces first, then solid features such as extrude, revolve, loft, and
|
|
106
106
|
sweep.
|
|
107
107
|
- Keep operations functional. Create new values with public functions such as
|
|
108
|
-
`make_rectangle_rface(...)`, `extrude_rsolid(...)`, `
|
|
108
|
+
`make_rectangle_rface(...)`, `extrude_rsolid(...)`, `cut_rsolid(...)`, and
|
|
109
109
|
`fillet_rsolid(...)`.
|
|
110
110
|
- Use tags for semantic intent and selection anchors, for example
|
|
111
111
|
`role.mounting.surface`, `anchor.datum.primary`, or `group.fasteners`.
|
|
@@ -56,8 +56,8 @@ This index includes generated docs for the public SimpleCAD API surface, includi
|
|
|
56
56
|
|
|
57
57
|
## Boolean Operations
|
|
58
58
|
|
|
59
|
-
- [
|
|
60
|
-
- [
|
|
59
|
+
- [cut_rsolid](cut_rsolid.md) *(from operations.py)* `top-level`
|
|
60
|
+
- [intersect_rsolid](intersect_rsolid.md) *(from operations.py)* `top-level`
|
|
61
61
|
- [union_rsolid](union_rsolid.md) *(from operations.py)* `top-level`
|
|
62
62
|
|
|
63
63
|
## Export
|
simplecadapi-2.0.0b3/docs/api/cut_rsolidlist.md → simplecadapi-2.0.0b4/docs/api/cut_rsolid.md
RENAMED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
#
|
|
1
|
+
# cut_rsolid
|
|
2
2
|
|
|
3
3
|
## API Definition
|
|
4
4
|
|
|
5
5
|
```python
|
|
6
|
-
def
|
|
6
|
+
def cut_rsolid(*solids: Union[Solid, Sequence[Solid]], skip_non_intersecting: bool = True) -> Solid
|
|
7
7
|
```
|
|
8
8
|
|
|
9
9
|
*Source: operations.py*
|
|
10
10
|
|
|
11
11
|
## Import Surface
|
|
12
12
|
|
|
13
|
-
- top-level: `from simplecadapi import
|
|
13
|
+
- top-level: `from simplecadapi import cut_rsolid`
|
|
14
14
|
|
|
15
15
|
## Description
|
|
16
16
|
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
#
|
|
1
|
+
# intersect_rsolid
|
|
2
2
|
|
|
3
3
|
## API Definition
|
|
4
4
|
|
|
5
5
|
```python
|
|
6
|
-
def
|
|
6
|
+
def intersect_rsolid(*solids: Union[Solid, Sequence[Solid]]) -> Solid
|
|
7
7
|
```
|
|
8
8
|
|
|
9
9
|
*Source: operations.py*
|
|
10
10
|
|
|
11
11
|
## Import Surface
|
|
12
12
|
|
|
13
|
-
- top-level: `from simplecadapi import
|
|
13
|
+
- top-level: `from simplecadapi import intersect_rsolid`
|
|
14
14
|
|
|
15
15
|
## Description
|
|
16
16
|
|
|
@@ -57,7 +57,7 @@ SimpleCADAPI 的顶层 API 选择是正确的:它没有把用户拖进传统 C
|
|
|
57
57
|
|
|
58
58
|
- 顶层 API 被 aliases 稀释了。`create_box`、`create_line`、`extrude`、`union`、`to_step` 等别名降低了 canonical API 的唯一性。对用户友好,但对文档、LLM、图记录和长期兼容不友好。参考:`src/simplecadapi/__init__.py:145`、`src/simplecadapi/__init__.py:318`。
|
|
59
59
|
- README 说 API 函数统一用 return type 反映命名,但公开面包含 `translate_shape`、`rotate_shape`、`export_step`、`export_stl` 和大量 aliases。这个声明过强。参考:`README.md:200`、`src/simplecadapi/__init__.py:47`、`src/simplecadapi/__init__.py:187`。
|
|
60
|
-
- `rsolidlist` 命名混杂了“参数类型”和“返回类型”:`
|
|
60
|
+
- `rsolidlist` 命名混杂了“参数类型”和“返回类型”:`cut_rsolid`、`intersect_rsolid` 实际返回 `Solid`,而 `linear_pattern_rsolidlist` 返回 `List[Solid]`。这会伤害 API 语义一致性。参考:`src/simplecadapi/operations.py:2994`、`src/simplecadapi/operations.py:3102`、`src/simplecadapi/operations.py:4121`。
|
|
61
61
|
- public op 名和 graph op 名不完全一致:`translate_shape` 记录为 `make_translate_rshape`,`extrude_rsolid` 记录为 `make_extrude_rsolid`。这种分层可以接受,但必须正式化为“source API”和“canonical IR”的稳定映射表。参考:`src/simplecadapi/operations.py:117`、`src/simplecadapi/serializer.py:116`。
|
|
62
62
|
- 一些非 session 分支仍记录 legacy op 名,如 `make_box`、`make_cylinder`、`make_segment_wire`,和 canonical `make_*_r*` 命名不一致。参考:`src/simplecadapi/operations.py:785`、`src/simplecadapi/operations.py:1534`、`src/simplecadapi/operations.py:1638`。
|
|
63
63
|
|
|
@@ -186,7 +186,7 @@ QL 是架构上最应该继续投资的部分。
|
|
|
186
186
|
|
|
187
187
|
- `tracked_union` 接收 `glue` 和 `tol`,但没有把它们设置到 `BRepAlgoAPI_Fuse`。也就是说用于结果的 union 和用于 tracking 的 union 参数可能不一致。参考:`src/simplecadapi/tracking.py:338`、`src/simplecadapi/tracking.py:352`。
|
|
188
188
|
- `union_rsolid` replay 忽略记录过的 `clean`、`glue`、`tol`,只调用 `ops.union_rsolid(all_solids)`。参数不 faithful。参考:`src/simplecadapi/operations.py:2946`、`src/simplecadapi/serializer.py:1029`。
|
|
189
|
-
- `
|
|
189
|
+
- `cut_rsolid` 对无交集 tool 直接跳过,这对 modeling convenience 可能友好,但对 replay/diagnostic 来说可能隐藏错误。参考:`src/simplecadapi/operations.py:3033`。
|
|
190
190
|
- 多 tool cut/intersect 只保留最后一次 delta,前面 tool 的 lineage 丢失。参考:`src/simplecadapi/operations.py:3020`、`src/simplecadapi/operations.py:3127`。
|
|
191
191
|
- extrude face classification 使用 center 精确相等、normal dot 精确等于 0、angle 精确等于 pi,这在 CAD 数值几何里非常脆弱。参考:`src/simplecadapi/operations.py:2631`、`src/simplecadapi/operations.py:2646`、`src/simplecadapi/operations.py:2653`。
|
|
192
192
|
|
|
@@ -55,7 +55,7 @@ SimpleWorkplane ← local modeling context
|
|
|
55
55
|
## Design Principles
|
|
56
56
|
|
|
57
57
|
- **Shape-first API**: users work with `Vertex`, `Edge`, `Wire`, `Face`, and `Solid`, not graph nodes.
|
|
58
|
-
- **Functional modeling style**: public operations return new geometry values, e.g. `make_box_rsolid(...)`, `
|
|
58
|
+
- **Functional modeling style**: public operations return new geometry values, e.g. `make_box_rsolid(...)`, `cut_rsolid(...)`, `fillet_rsolid(...)`.
|
|
59
59
|
- **OCP-native runtime**: geometry construction, topology traversal, properties, booleans, transforms, and export use OCP/OpenCascade helpers.
|
|
60
60
|
- **Replayable graph workflows**: `GraphSession` can record a canonical low-level operation graph and `export_model_json()` can serialize it for `replay_model_json()`.
|
|
61
61
|
- **Tags and metadata**: tags are useful for lightweight semantics; structured numeric facts should be stored in metadata such as `metadata["geo"]`.
|
|
@@ -85,7 +85,7 @@ import simplecadapi as scad
|
|
|
85
85
|
with scad.GraphSession() as session:
|
|
86
86
|
body = scad.make_box_rsolid(10, 10, 4)
|
|
87
87
|
hole = scad.make_cylinder_rsolid(1.5, 8, bottom_face_center=(0, 0, -2))
|
|
88
|
-
part = scad.
|
|
88
|
+
part = scad.cut_rsolid(body, hole)
|
|
89
89
|
|
|
90
90
|
payload = scad.export_model_json(session)
|
|
91
91
|
rebuilt = scad.replay_model_json(payload)
|
|
@@ -28,7 +28,7 @@ Current supported workflows should model final parts as ordinary geometry:
|
|
|
28
28
|
|
|
29
29
|
- Use `translate_shape(...)`, `rotate_shape(...)`, and `mirror_shape(...)` for explicit placement.
|
|
30
30
|
- Use Python sequences of `Solid` objects plus `export_step([...], path)` / `export_stl(...)` for multi-body exports.
|
|
31
|
-
- Use `union_rsolid(...)`, `
|
|
31
|
+
- Use `union_rsolid(...)`, `cut_rsolid(...)`, and `intersect_rsolid(...)` when a single merged solid is required.
|
|
32
32
|
|
|
33
33
|
`export_model_json(...)` no longer accepts `assembly=...`, and newly exported model JSON does not include `assembly`, `assembly_registry`, or `constraint_registry` fields.
|
|
34
34
|
|
|
@@ -116,7 +116,7 @@ source API 名字不等于 canonical graph op 名字。Composite source API 可
|
|
|
116
116
|
```json
|
|
117
117
|
{
|
|
118
118
|
"schema_version": "2.0",
|
|
119
|
-
"producer_version": "2.0.
|
|
119
|
+
"producer_version": "2.0.0b4",
|
|
120
120
|
"capabilities": {
|
|
121
121
|
"selection_ref_strategies": true,
|
|
122
122
|
"geo_select_nodes": true,
|
|
@@ -329,7 +329,7 @@ source API 名字不等于 canonical graph op 名字。Composite source API 可
|
|
|
329
329
|
|
|
330
330
|
- `make_*_face` 与 `make_face_from_wire` -> `Sketch`
|
|
331
331
|
- `make_*_edge` / `make_*_wire` -> `Profile`
|
|
332
|
-
- `make_extrude_rsolid` / `make_revolve_rsolid` / `make_loft_rsolid` / `make_sweep_rsolid` / `make_fillet_rsolid` / `make_chamfer_rsolid` / `make_shell_rsolid` / `
|
|
332
|
+
- `make_extrude_rsolid` / `make_revolve_rsolid` / `make_loft_rsolid` / `make_sweep_rsolid` / `make_fillet_rsolid` / `make_chamfer_rsolid` / `make_shell_rsolid` / `make_cut_rsolid` / `make_union_rsolid` / `make_intersect_rsolid` -> `Feature`
|
|
333
333
|
|
|
334
334
|
## 7. Topology Delta Schema
|
|
335
335
|
|
|
@@ -907,9 +907,9 @@ New canonical profile nodes use the `make_*_r*` names listed in `canonical_contr
|
|
|
907
907
|
- `make_translate_rshape`
|
|
908
908
|
- `make_rotate_rshape`
|
|
909
909
|
- `make_mirror_rshape`
|
|
910
|
-
- `
|
|
910
|
+
- `make_cut_rsolid`
|
|
911
911
|
- `make_union_rsolid`
|
|
912
|
-
- `
|
|
912
|
+
- `make_intersect_rsolid`
|
|
913
913
|
- `make_fillet_rsolid`
|
|
914
914
|
- `make_chamfer_rsolid`
|
|
915
915
|
- `make_shell_rsolid`
|
|
@@ -1227,7 +1227,7 @@ Notes:
|
|
|
1227
1227
|
- If the kernel cannot produce exactly one merged solid, the API raises instead of returning disconnected pieces.
|
|
1228
1228
|
- replay passes recorded `clean`, `glue`, and `tol` back to `union_rsolid(...)`; the tracking builder uses the same `glue` and fuzzy tolerance as the actual boolean builder.
|
|
1229
1229
|
|
|
1230
|
-
#### `
|
|
1230
|
+
#### `make_cut_rsolid`
|
|
1231
1231
|
|
|
1232
1232
|
- Inputs: base solid + tool solids
|
|
1233
1233
|
- Outputs: 1 `Solid` (wrapped in a single-output node)
|
|
@@ -1240,11 +1240,11 @@ Notes:
|
|
|
1240
1240
|
|
|
1241
1241
|
Notes:
|
|
1242
1242
|
|
|
1243
|
-
- Public `
|
|
1243
|
+
- Public `cut_rsolid(...)` defaults this flag to `true` for interactive convenience.
|
|
1244
1244
|
- Graph replay defaults missing `skip_non_intersecting` to `false` so malformed or drifting graphs fail diagnostically instead of silently skipping tools.
|
|
1245
1245
|
- Multi-tool cut preserves the full topology delta chain across all performed tool cuts.
|
|
1246
1246
|
|
|
1247
|
-
#### `
|
|
1247
|
+
#### `make_intersect_rsolid`
|
|
1248
1248
|
|
|
1249
1249
|
- Inputs: N `Solid`
|
|
1250
1250
|
- Outputs: 1 `Solid` when overlap exists
|
|
@@ -13,7 +13,7 @@ import simplecadapi as scad
|
|
|
13
13
|
with scad.GraphSession() as session:
|
|
14
14
|
body = scad.make_box_rsolid(10, 6, 2)
|
|
15
15
|
hole = scad.make_cylinder_rsolid(1, 4, bottom_face_center=(0, 0, -1))
|
|
16
|
-
result = scad.
|
|
16
|
+
result = scad.cut_rsolid(body, hole)
|
|
17
17
|
|
|
18
18
|
model_json = scad.export_model_json(session)
|
|
19
19
|
payload = json.loads(model_json)
|
|
@@ -265,14 +265,14 @@ Source:
|
|
|
265
265
|
```python
|
|
266
266
|
body = scad.make_box_rsolid(4, 4, 2)
|
|
267
267
|
tool = scad.make_cylinder_rsolid(0.8, 4, bottom_face_center=(0, 0, -1))
|
|
268
|
-
result = scad.
|
|
268
|
+
result = scad.cut_rsolid(body, tool)
|
|
269
269
|
```
|
|
270
270
|
|
|
271
271
|
Serialized node:
|
|
272
272
|
|
|
273
273
|
```json
|
|
274
274
|
{
|
|
275
|
-
"op": "
|
|
275
|
+
"op": "make_cut_rsolid",
|
|
276
276
|
"params": {
|
|
277
277
|
"tool_count": 1,
|
|
278
278
|
"input_count": 2
|
|
@@ -286,7 +286,7 @@ Replay effect:
|
|
|
286
286
|
|
|
287
287
|
1. Replay first input as the body.
|
|
288
288
|
2. Replay remaining inputs as tools.
|
|
289
|
-
3. Call `
|
|
289
|
+
3. Call `cut_rsolid(body, tools)`.
|
|
290
290
|
|
|
291
291
|
## Boolean intersection
|
|
292
292
|
|
|
@@ -295,14 +295,14 @@ Source:
|
|
|
295
295
|
```python
|
|
296
296
|
a = scad.make_box_rsolid(2, 2, 2)
|
|
297
297
|
b = scad.make_box_rsolid(2, 2, 2, bottom_face_center=(1, 0, 0))
|
|
298
|
-
result = scad.
|
|
298
|
+
result = scad.intersect_rsolid(a, b)
|
|
299
299
|
```
|
|
300
300
|
|
|
301
301
|
Serialized node:
|
|
302
302
|
|
|
303
303
|
```json
|
|
304
304
|
{
|
|
305
|
-
"op": "
|
|
305
|
+
"op": "make_intersect_rsolid",
|
|
306
306
|
"params": {
|
|
307
307
|
"input_count": 2
|
|
308
308
|
},
|
|
@@ -311,7 +311,7 @@ Serialized node:
|
|
|
311
311
|
}
|
|
312
312
|
```
|
|
313
313
|
|
|
314
|
-
Replay effect: replays inputs and calls `
|
|
314
|
+
Replay effect: replays inputs and calls `intersect_rsolid(first, rest)`.
|
|
315
315
|
|
|
316
316
|
## Fillet
|
|
317
317
|
|
|
@@ -278,8 +278,8 @@ from simplecadapi import (
|
|
|
278
278
|
make_box_rsolid,
|
|
279
279
|
make_cylinder_rsolid,
|
|
280
280
|
union_rsolid,
|
|
281
|
-
|
|
282
|
-
|
|
281
|
+
cut_rsolid,
|
|
282
|
+
intersect_rsolid
|
|
283
283
|
)
|
|
284
284
|
|
|
285
285
|
def boolean_operations_example():
|
|
@@ -298,12 +298,12 @@ def boolean_operations_example():
|
|
|
298
298
|
apply_tag(union_result, "combined_geometry")
|
|
299
299
|
|
|
300
300
|
# 差集运算(从盒子中减去圆柱)
|
|
301
|
-
cut_result =
|
|
301
|
+
cut_result = cut_rsolid(box, cylinder)[0]
|
|
302
302
|
apply_tag(cut_result, "cut_result")
|
|
303
303
|
apply_tag(cut_result, "with_hole")
|
|
304
304
|
|
|
305
305
|
# 交集运算
|
|
306
|
-
intersect_result =
|
|
306
|
+
intersect_result = intersect_rsolid(box, cylinder)[0]
|
|
307
307
|
apply_tag(intersect_result, "intersect_result")
|
|
308
308
|
apply_tag(intersect_result, "common_volume")
|
|
309
309
|
|
|
@@ -439,7 +439,7 @@ from simplecadapi import (
|
|
|
439
439
|
make_cylinder_rsolid,
|
|
440
440
|
make_sphere_rsolid,
|
|
441
441
|
union_rsolid,
|
|
442
|
-
|
|
442
|
+
cut_rsolid,
|
|
443
443
|
translate_shape,
|
|
444
444
|
rotate_shape
|
|
445
445
|
)
|
|
@@ -478,7 +478,7 @@ def create_complex_geometry():
|
|
|
478
478
|
|
|
479
479
|
# 减去孔
|
|
480
480
|
for hole in holes:
|
|
481
|
-
complex_solid =
|
|
481
|
+
complex_solid = cut_rsolid(complex_solid, hole)[0]
|
|
482
482
|
|
|
483
483
|
# 标记复杂几何体
|
|
484
484
|
apply_tag(complex_solid, "complex_geometry")
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "simplecadapi"
|
|
3
|
-
version = "2.0.
|
|
3
|
+
version = "2.0.0b4"
|
|
4
4
|
description = "A simplified OCP-native CAD modeling Python API"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = { file = "LICENSE" }
|
|
7
7
|
authors = [{ name = "倪旌哲", email = "nijingzhe@zju.edu.cn" }]
|
|
8
8
|
maintainers = [{ name = "倪旌哲", email = "nijingzhe@zju.edu.cn" }]
|
|
9
|
-
requires-python = ">=3.10"
|
|
9
|
+
requires-python = ">=3.10,<3.14"
|
|
10
10
|
keywords = ["cad", "modeling", "3d", "design", "ocp", "opencascade"]
|
|
11
11
|
classifiers = [
|
|
12
12
|
"Development Status :: 3 - Alpha",
|
|
@@ -19,12 +19,13 @@ classifiers = [
|
|
|
19
19
|
"Programming Language :: Python :: 3.10",
|
|
20
20
|
"Programming Language :: Python :: 3.11",
|
|
21
21
|
"Programming Language :: Python :: 3.12",
|
|
22
|
+
"Programming Language :: Python :: 3.13",
|
|
22
23
|
"Operating System :: OS Independent",
|
|
23
24
|
]
|
|
24
25
|
dependencies = [
|
|
25
26
|
"numpy>=1.21.0",
|
|
26
27
|
"rich>=14.0.0",
|
|
27
|
-
"cadquery-ocp>=7.
|
|
28
|
+
"cadquery-ocp>=7.9.3.1",
|
|
28
29
|
]
|
|
29
30
|
|
|
30
31
|
[project.optional-dependencies]
|
|
@@ -58,8 +58,8 @@ from .operations import (
|
|
|
58
58
|
select_edges_by_tag,
|
|
59
59
|
select_faces_by_tag,
|
|
60
60
|
# 布尔运算
|
|
61
|
-
|
|
62
|
-
|
|
61
|
+
cut_rsolid,
|
|
62
|
+
intersect_rsolid,
|
|
63
63
|
union_rsolid,
|
|
64
64
|
# 导出
|
|
65
65
|
export_step,
|
|
@@ -156,8 +156,8 @@ extrude = extrude_rsolid
|
|
|
156
156
|
revolve = revolve_rsolid
|
|
157
157
|
|
|
158
158
|
# 布尔运算别名
|
|
159
|
-
cut =
|
|
160
|
-
intersect =
|
|
159
|
+
cut = cut_rsolid
|
|
160
|
+
intersect = intersect_rsolid
|
|
161
161
|
union = union_rsolid
|
|
162
162
|
|
|
163
163
|
# 导出别名
|
|
@@ -220,8 +220,8 @@ __all__ = [
|
|
|
220
220
|
"select_edges_by_tag",
|
|
221
221
|
"select_faces_by_tag",
|
|
222
222
|
# 布尔运算
|
|
223
|
-
"
|
|
224
|
-
"
|
|
223
|
+
"cut_rsolid",
|
|
224
|
+
"intersect_rsolid",
|
|
225
225
|
"union_rsolid",
|
|
226
226
|
# 导出
|
|
227
227
|
"export_step",
|
|
@@ -105,8 +105,8 @@ ALIAS_RULES = {
|
|
|
105
105
|
"extrude_rsolid": "extrude",
|
|
106
106
|
"revolve_rsolid": "revolve",
|
|
107
107
|
"union_rsolid": "union",
|
|
108
|
-
"
|
|
109
|
-
"
|
|
108
|
+
"cut_rsolid": "cut",
|
|
109
|
+
"intersect_rsolid": "intersect",
|
|
110
110
|
"export_step": "to_step",
|
|
111
111
|
"export_stl": "to_stl",
|
|
112
112
|
}
|
|
@@ -488,7 +488,7 @@ class SkillPackager:
|
|
|
488
488
|
15. If a task depends on model replay or interchange, prefer `export_model_json()` output over hand-written payloads.
|
|
489
489
|
|
|
490
490
|
## Boolean result discipline
|
|
491
|
-
- `union_rsolid(...)`, `
|
|
491
|
+
- `union_rsolid(...)`, `cut_rsolid(...)`, and `intersect_rsolid(...)` accept mixed inputs: standalone `Solid`, lists of `Solid`, and nested sequences.
|
|
492
492
|
- They return a single `Solid`.
|
|
493
493
|
- `union_rsolid(...)` already applies the package's default glue mode and a conservative internal tolerance.
|
|
494
494
|
- If a union cannot produce exactly one merged solid, it fails explicitly instead of returning multiple pieces.
|
|
@@ -497,7 +497,7 @@ class SkillPackager:
|
|
|
497
497
|
## Modeling Mental Model
|
|
498
498
|
- Start with intent: identify the part, its reference axes, critical profiles, and the features that produce the final solid.
|
|
499
499
|
- Build from lower-dimensional geometry to higher-dimensional geometry: `Vertex` / `Edge` / `Wire` / `Face` profiles first, then `Solid` features such as extrude, revolve, loft, and sweep.
|
|
500
|
-
- Keep modeling operations functional. Create new values from public functions such as `make_circle_rface(...)`, `extrude_rsolid(...)`, `
|
|
500
|
+
- Keep modeling operations functional. Create new values from public functions such as `make_circle_rface(...)`, `extrude_rsolid(...)`, `cut_rsolid(...)`, and `fillet_rsolid(...)`.
|
|
501
501
|
- Use `GraphSession` when the model should be replayable, inspectable, exported as model JSON, or translated to another CAD system.
|
|
502
502
|
- Treat model JSON as the interchange boundary. Prefer `export_model_json(session)` and `replay_model_json(payload)` over hand-authored operation payloads.
|
|
503
503
|
- Use QL for precise grounding. Query faces, edges, centers, normals, areas, lengths, curve types, and tags; print only the facts needed to validate the current step.
|
|
@@ -725,7 +725,7 @@ class SkillPackager:
|
|
|
725
725
|
|
|
726
726
|
- Use `union_rsolid(...)` when multiple solids should become one integrated body.
|
|
727
727
|
- Ensure bodies that should union into one solid have real geometric overlap or embedding.
|
|
728
|
-
- Use `
|
|
728
|
+
- Use `cut_rsolid(...)` for subtractive features and `intersect_rsolid(...)` for common-volume workflows.
|
|
729
729
|
- Validate body count and volume after major boolean operations.
|
|
730
730
|
"""
|
|
731
731
|
)
|
|
@@ -45,7 +45,7 @@ def make_n_hole_flange_rsolid(
|
|
|
45
45
|
print(f" 法兰内孔圆柱创建成功,直径: {flange_inner_diameter}mm")
|
|
46
46
|
|
|
47
47
|
# 从外圆柱中减去内孔形成法兰主体
|
|
48
|
-
flange_body =
|
|
48
|
+
flange_body = cut_rsolid(outer_cylinder, inner_cylinder)
|
|
49
49
|
body_volume = flange_body.get_volume()
|
|
50
50
|
print(f" 法兰主体创建完成,体积: {body_volume:.2f} mm³")
|
|
51
51
|
|
|
@@ -88,7 +88,7 @@ def make_n_hole_flange_rsolid(
|
|
|
88
88
|
print(f" 凸起圆环内孔创建成功,直径: {flange_inner_diameter}mm")
|
|
89
89
|
|
|
90
90
|
# 从凸起圆环中减去内孔,形成环形凸起
|
|
91
|
-
boss_ring =
|
|
91
|
+
boss_ring = cut_rsolid(boss_outer_solid, boss_inner_hole)
|
|
92
92
|
print(" 凸起圆环内孔切割完成,形成环形凸起")
|
|
93
93
|
|
|
94
94
|
# 合并法兰主体和凸起圆环
|
|
@@ -141,7 +141,7 @@ def make_n_hole_flange_rsolid(
|
|
|
141
141
|
)
|
|
142
142
|
|
|
143
143
|
# 切割孔
|
|
144
|
-
current_flange =
|
|
144
|
+
current_flange = cut_rsolid(current_flange, hole)
|
|
145
145
|
print(f" 第{i + 1}个孔位置: ({x:.2f}, {y:.2f}), 角度: {angle:.1f}°")
|
|
146
146
|
|
|
147
147
|
flange_with_holes = current_flange
|
|
@@ -506,7 +506,7 @@ def make_threaded_rod_rsolid(
|
|
|
506
506
|
# 步骤3: 从螺杆中减去螺纹切割体形成螺纹
|
|
507
507
|
print(" 步骤3: 切割螺纹...")
|
|
508
508
|
|
|
509
|
-
thread_solid =
|
|
509
|
+
thread_solid = cut_rsolid(thread_solid, helical_cut_solid)
|
|
510
510
|
print(" 螺纹切割完成")
|
|
511
511
|
|
|
512
512
|
except Exception as e:
|
|
@@ -84,9 +84,9 @@ _OP_EXPRESSION_BINDINGS: Dict[str, Tuple[Tuple[str, Tuple[Any, ...]], ...]] = {
|
|
|
84
84
|
),
|
|
85
85
|
"make_loft_rsolid": (("Ruled", ("ruled",)),),
|
|
86
86
|
"make_sweep_rsolid": (("Frenet", ("is_frenet",)),),
|
|
87
|
-
"
|
|
87
|
+
"make_cut_rsolid": (),
|
|
88
88
|
"make_union_rsolid": (),
|
|
89
|
-
"
|
|
89
|
+
"make_intersect_rsolid": (),
|
|
90
90
|
"make_fillet_rsolid": (),
|
|
91
91
|
"make_chamfer_rsolid": (),
|
|
92
92
|
"make_shell_rsolid": (("Value", ("thickness",)),),
|
|
@@ -2388,7 +2388,7 @@ def _resolve_vec3_param(params, param_exprs, key):
|
|
|
2388
2388
|
lines.extend(finish())
|
|
2389
2389
|
return lines
|
|
2390
2390
|
|
|
2391
|
-
if node.op == "
|
|
2391
|
+
if node.op == "make_cut_rsolid" and len(inputs) >= 2:
|
|
2392
2392
|
lines: List[str]
|
|
2393
2393
|
if len(inputs) == 2:
|
|
2394
2394
|
lines = [
|
|
@@ -2424,7 +2424,7 @@ def _resolve_vec3_param(params, param_exprs, key):
|
|
|
2424
2424
|
lines.extend(finish())
|
|
2425
2425
|
return lines
|
|
2426
2426
|
|
|
2427
|
-
if node.op == "
|
|
2427
|
+
if node.op == "make_intersect_rsolid" and len(inputs) >= 2:
|
|
2428
2428
|
if len(inputs) == 2:
|
|
2429
2429
|
lines = [
|
|
2430
2430
|
f"{var_name} = doc.addObject('Part::Common', {_json_ascii(object_name)})",
|
|
@@ -297,7 +297,7 @@ def record_operation_if_active(
|
|
|
297
297
|
"""Record an operation only when a session is active.
|
|
298
298
|
|
|
299
299
|
This is the seamless bridge used by the original modeling APIs.
|
|
300
|
-
Users keep calling `make_box_rsolid(...)` or `
|
|
300
|
+
Users keep calling `make_box_rsolid(...)` or `cut_rsolid(...)`; when a
|
|
301
301
|
graph session exists, the operation is recorded automatically and its
|
|
302
302
|
outputs are annotated with hidden lineage state.
|
|
303
303
|
"""
|