Skip to content

Including Boxes.py in my CAD/CAM Project #929

Description

@UnfinishedBusiness

Hello,

I've ported nearly all of the Boxes.py shapes to JetCad3, a professional CAD/CAM application for plasma tables, laser cutters, routers, CNC machinists and makers. I'm reaching out to be fully transparent about what I've done, explain why I believe it's license-compliant, and offer something back to the project.


About JetCad3's workspaces

JetCad3 is organized into specialized workspaces, each targeting a different discipline:

Plasma Workspace — Full CAD/CAM for plasma tables. DXF import, parametric auto-nesting with real-time quoting (cut time, pierce count, material utilization), common line cutting (adjacent parts share a single cut edge, eliminating redundant pierces and reducing cut time), collision detection with a kerf-aware bump stop (prevents toolpaths from ever cutting into adjacent already-cut parts), SheetCAM .job file import (preserving part nesting and sheet dimensions for users migrating from SheetCAM), kerf offset, lead-in/lead-out control, and full G-code post processor output.

Laser Workspace — Full CAD/CAM for laser cutters. Shares the core CAM pipeline with the Plasma workspace but is tailored specifically for laser cutting workflows, power/speed settings, and laser-specific post processors.

Drafting Workspace — Technical drafting and print-ready output for machinists. Includes a full constraint solver, dimensioning tools, and Lathe Mode — a sketch mode that flips the canvas to a half-profile view and automatically dimensions everything as D: (diameter) and Z: (axial position), exactly the coordinate system used by conversational CNC lathes like the Bridgeport EZ Path. Sketch a turned profile, drop dimensions, and walk up to the machine with a clean print.

Design Workspace — 3D parametric solid modeling powered by the OpenCascade geometry kernel. Boolean operations (fuse, cut), fillets, chamfers, extrusions, and full 3D body management. This is where the Shape Generator lives and it is completely unlimited on JetCad3's free/hobby login — every shape, every parameter, no restrictions.

** Router, Mill, & Lathe *** - These three workspace are currently in development but coming soon. Mill and Lathe with have an HSMWorks like workflow while Routing will have a nesting first workflow and 2.5D tool-paths with rich V-Carve like features.


What are jshapes?

JetCad3 has a Shape Generator — a parametric shape library accessible from every workspace. Shapes are defined as .jshape files: plain JavaScript files that declare parameters, presets, and a geometry generation function. The jshape API and the files themselves are fully open-source and user-distributable. Users can:

  • Open any .jshape file in a text editor and modify it
  • Create their own shapes from scratch
  • Share and distribute .jshape files freely
  • Import community shapes directly into JetCad3
    The Shape Generator is available in the Design workspace, which is completely unlimited on JetCad3's free/hobby login — no account required, no credit card, no feature restrictions whatsoever. The Shape Generator itself is free and unlimited verbatim across all login tiers.

What I've ported

I've ported nearly every Boxes.py shape to the jshape format. Every ported shape file includes the following header without exception:

// SPDX-License-Identifier: GPL-3.0-or-later
// Boxes.py port for JetCad3 Shape Generator.
// Original project: https://github.com/florianfesti/boxes
 
const ATTRIBUTION = 'Ported from Boxes.py, GPL-3.0-or-later. Original project: https://github.com/florianfesti/boxes'

The ATTRIBUTION string is surfaced directly in the Shape Generator dialog so that every user who uses a ported shape sees the credit and the link back to this project.


Why I believe this is license-compliant

  • The ported .jshape files are themselves open-source and GPL-3.0-or-later licensed — the same license as Boxes.py
  • They are user-editable and freely distributable, satisfying GPL's source availability and distribution requirements
  • Attribution and license identifiers are present in every file and shown in the UI
  • JetCad3 acts as an interpreter/runtime for the jshape files — the GPL license of individual shape files does not propagate to JetCad3's closed-source core, in the same way that a GPL script running in a commercial IDE doesn't relicense the IDE
    That said, I wanted to reach out directly rather than assume. If anyone on the project has concerns or sees something I've missed, I'm very open to discussing it.

What I can offer back as pull requests

In building out JetCad3's shape library I've written a number of parametric shapes that don't currently exist in Boxes.py and that I think would be a genuine addition to the project. These include:

  • Involute Gear — external, internal, and rack variants; module and DP sizing systems; configurable pressure angle, profile shift, bore
  • Timing Pulley — HTD, GT, trapezoidal, metric, imperial, and custom profiles; full tooth geometry from pitch/addendum/groove radius parameters
  • Spline — SAE J499 straight-sided, ANSI B92.1, ISO 4156 involute spline; external shaft and internal hub profiles
  • Sprocket — ANSI roller chain sprocket geometry
  • Trigger Wheel — configurable tooth count and missing-tooth patterns for engine crank/cam sensing
  • Exhaust Flange — round and oval profiles, center bore, configurable bolt patterns
  • Pipe Flange — ASME Class 150/300/etc. presets, NPS sizing, bolt circle
  • Tool drive profiles — Allen/Hex, Torx/Security Torx, External Torx, Phillips/Pozidriv/JIS Cross, Slotted/Spanner/Snake-Eye, Tri-Wing/Tri-Point, Triple Square/XZN, 12-Point/Double Hex, Clutch/Bow Tie, Bit Blank/Adapter Profile, Spline Drive
    These are all fully parametric with standards-based presets where applicable. I'd be happy to contribute any or all of them as PRs if there's interest.

I hope this integration helps introduce the Boxes.py project to a wider machinist and fabricator audience. Happy to answer any questions or provide more detail.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions