Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,48 @@
Changelog
=========

Version 1.0.1 (Development)
============================

what's new:
-----------

- **Helical Extrusion**: New ``helical_extrude()`` function in ``yapcad.geom3d_util``
creates smooth helical/twisted extrusions using high-resolution lofting. Ideal for
helical gears, twisted columns, and spiral features. Requires pythonocc-core.

- **Pattern Functions**: New pattern generation functions for creating arrays of geometry:

- ``radial_pattern()`` in ``yapcad.geom_util`` - Creates circular patterns of 2D geometry
- ``linear_pattern()`` in ``yapcad.geom_util`` - Creates linear arrays of 2D geometry
- ``radial_pattern_solid()`` in ``yapcad.geom3d_util`` - Creates circular patterns of 3D solids
- ``linear_pattern_solid()`` in ``yapcad.geom3d_util`` - Creates linear arrays of 3D solids
- ``radial_pattern_surface()`` in ``yapcad.geom3d_util`` - Creates circular patterns of surfaces
- ``linear_pattern_surface()`` in ``yapcad.geom3d_util`` - Creates linear arrays of surfaces

- **OCC Helix Helper**: New ``make_occ_helix()`` function creates mathematically exact
helix curves using OpenCascade's 2D parametric curve on cylindrical surface technique.
Used internally by ``helical_extrude()`` but also available for advanced users.

- **Edge Operations**: New fillet and chamfer functions in ``yapcad.brep``:

- ``fillet_all_edges()`` - Apply rounded fillets to all edges of a BREP solid
- ``fillet_edges()`` - Apply fillets to specific selected edges
- ``chamfer_all_edges()`` - Apply beveled chamfers to all edges
- ``chamfer_edges()`` - Apply chamfers to specific selected edges
- DSL builtins: ``fillet(solid, radius)`` and ``chamfer(solid, distance)``

- **3D Text Support**: New ``yapcad.text3d`` module for creating 3D text geometry:

- ``text_to_solid()`` - Generate extruded 3D text from strings
- ``text_to_surface()`` - Generate text as a flat surface
- TrueType font support via freetype-py (with block font fallback)
- System font discovery across macOS, Linux, and Windows

- **Documentation Improvements**: All new functions include comprehensive docstrings
with parameter descriptions, return values, usage examples, and notes following
Sphinx documentation standards.

Version 1.0.0rc1 (2025-12-30)
=============================

Expand Down
4 changes: 4 additions & 0 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,10 @@ pipelines. Highlights from the 1.0 release cycle include:
proper threading geometry.
* **Adaptive Sweeps**: ``sweep_adaptive()`` with tangent-tracking profile orientation
for complex path sweeps.
* **Helical Extrusion**: ``helical_extrude()`` creates smooth twisted extrusions with
true helical surfaces for gears, columns, and spiral features.
* **Pattern Generation**: ``radial_pattern()`` and ``linear_pattern()`` functions for
creating circular and linear arrays of 2D/3D geometry, solids, and surfaces.
* ``.ycpkg`` project packaging with manifest, geometry JSON, exports, and metadata.
* **Package signing** with GPG and SSH key support for cryptographic verification.
* **Validation schemas** for test definitions and solver integration.
Expand Down
6 changes: 4 additions & 2 deletions docs/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,10 @@ package format enables provenance tracking and reproducible designs.
helpers and ear-cut tessellation), ``yapcad.geometry_checks`` (mesh
validation), ``yapcad.metadata`` (surface/solid provenance),
``yapcad.geom3d_util.stack_solids`` and ``cutaway_solid_x`` (layout and
section tools), ``yapcad.boolean.native`` (production-ready boolean
engine), and ``yapcad.io`` for validated STL/STEP export.
section tools), ``yapcad.geom3d_util.helical_extrude`` (smooth helical
extrusions), ``yapcad.geom_util.radial_pattern`` and ``linear_pattern``
(geometry array generation), ``yapcad.boolean.native`` (production-ready
boolean engine), and ``yapcad.io`` for validated STL/STEP export.

Contents
========
Expand Down
2 changes: 2 additions & 0 deletions docs/yapCADone.rst
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ This section reflects the **actual current state** of the codebase as of version
- 2D boolean operations (union, difference, intersection) with proper hole accumulation
- Curve types: ellipse, catmull-rom splines, NURBS, parabola, hyperbola
- Adaptive sweep operations with tangent-tracking profile orientation
- Helical extrusion with smooth twisted surfaces (``helical_extrude()``)
- Pattern generation: radial and linear patterns for 2D geometry, 3D solids, and surfaces
- 627 regression tests across geometry, DSL, import/export, packaging, and validation

**Partially Implemented:**
Expand Down
34 changes: 34 additions & 0 deletions examples/fillet_chamfer_demo.dsl
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# Fillet and Chamfer Demo
# Demonstrates the new fillet() and chamfer() DSL operations
#
# Run with: python -m yapcad.dsl.interpreter examples/fillet_chamfer_demo.dsl
# Or view in OpenGL: python -m yapcad.dsl.interpreter examples/fillet_chamfer_demo.dsl --view

# Create a simple box
base_box: solid = box(30.0, 20.0, 10.0)

# Apply fillet to round all edges
# The fillet radius determines how rounded the edges become
fillet_radius: float = 2.0
filleted_box: solid = fillet(base_box, fillet_radius)

# Move it for display
filleted_display: solid = translate(filleted_box, -20.0, 0.0, 0.0)

# Create another box for chamfer demo
chamfer_box: solid = box(30.0, 20.0, 10.0)

# Apply chamfer to bevel all edges
# The chamfer distance determines the size of the bevel
chamfer_distance: float = 1.5
chamfered_box: solid = chamfer(chamfer_box, chamfer_distance)

# Move it for display
chamfered_display: solid = translate(chamfered_box, 20.0, 0.0, 0.0)

# Combine for output
# Left: filleted box, Right: chamfered box
result: solid = union(filleted_display, chamfered_display)

# Export
export result
Loading