diff --git a/src/Mod/CAM/Roadmap/ADR/ADR-002.md b/src/Mod/CAM/Roadmap/ADR/ADR-002.md new file mode 100644 index 0000000000..065f948a6b --- /dev/null +++ b/src/Mod/CAM/Roadmap/ADR/ADR-002.md @@ -0,0 +1,81 @@ + +# ADR-002: Internal Representation of tool paths + +## Status +Legacy + +## Context +We require a data structure to hold the computed tool path data. The internal representation will be directly rendered into the 3D scene. +Tool paths may contain hundreds of thousands or even millions of elements so memory utilization should be considered. The tool paths will be converted into +g-code during post-processing. + +## Decision +We will use an abbreviated subset of gcode as the internal representation. The intent is not to support the full range +of RS274 features but to provide enough to capture user intent and to efficiently render the tool paths visually. + +The internal representation (Path Commands) resembles gcode but does not support all gcode features. It differs from gcode in significant ways. + + +| FreeCAD Path Commands | Gcode | +| --- | --- | +| always in FreeCAD native units (MM) | May be in MM or IN | +| velocity is represented in units per second | velocity is represented in units per minute | +| absolute coordinates are in the FreeCAD global coordinate system. No other coordinate systems exist. | absolute coordinates are relative to the active coordinate system | +| gcode command coordinates are always absolute | gcode coordinates may be either absolute or relative | +| no modal commands | some gcodes affect how subsequent gcodes are interpreted | +| machine agnostic | machine specific | + + +# List of currently supported G-code commands +| Command | Description | Supported Arguments | Displayed | +| ---- | ---- | ---- | ---- | +| G0, G00 | Rapid move | X,Y,Z,A,B,C | Red | +| G1, G01 | Normal interpolated move | X,Y,Z,A,B,C | Green | +| G2, G02 | Clockwise arc | X,Y,Z,A,B,C,I,J,K | Green | +| G3, G03 | Counterclockwise arc | X,Y,Z,A,B,C,I,J,K | Green | +| G73 | chipbreak drill operation | X,Y,Z,R,Q | Red/Green | +| G74 | left hand tapping operation | X,Y,Z,R,Q | Red/Green | +| G81 | drill operation | X,Y,Z,R,Q | Red/Green | +| G82 | drill operation with dwell | X,Y,Z,R,Q | Red/Green | +| G83 | drill operation with peck | X,Y,Z,R,Q | Red/Green | +| G84 | right hand tapping operation | X,Y,Z,R,Q | Red/Green | +| G38.2 | Straight probe move (used in probe operation) | Z,F | Yellow | +| M0, M00 | Compulsory stop | | | +| M1, M01 | Optional stop | | | +| M3, M03 | Spindle on (clockwise rotation) | S\ | | +| M4, M04 | Spindle on (counterclockwise rotation) | S\ | | +| M6, M06 | Tool change | T\ | | +| (Message) | comment | | | + +# Fixtures +FreeCAD Job setup allows operations to be conducted in multiple machine fixtures. Path commands for activating fixtures are supported for: +G54, G55, G56, G57, G58, G59, G59.1 G59.2, G59.3, G59.4, G59.5, G59.6, G59.7, G59.8, G59.9, + +# Non-Conforming commands +These commands do not conform to this ADR and are subject to deprecation and should not be used. + +| Command | Description | Supported Arguments | +| ------- | ----------------------------------------- | -------------------------------------- | +| G80 | cancel canned cycle | | +| G90 | absolute coordinates | | +| G91 | relative coordinates | | +| G41 | Tool radius compensation value | Radius compensation is done in FreeCAD | +| G42 | Tool radius compensation value | Radius compensation is done in FreeCAD | +| G98 | Return to initial Z level in canned cycle | | +| G99 | Return to R level in canned cycle | | +| G40 | Cancel tool compensation | | +| | | | + +## Consequences + +Advantages +- it is human readable +- it is memory efficient +- it is easily converted into final gcode +- it is extensible + +Disadvantages +- Gcode is not explicit. A command contains semantics about where to move the + cutter *to* but not where it is coming *from*. Therefore the first move will always appear as a move from the origin +- Directly inspecting the path commands will not reflect either the document + unit schema or the selected output unit schema. diff --git a/src/Mod/CAM/Roadmap/ADR/template.md b/src/Mod/CAM/Roadmap/ADR/template.md new file mode 100644 index 0000000000..cb246abc86 --- /dev/null +++ b/src/Mod/CAM/Roadmap/ADR/template.md @@ -0,0 +1,15 @@ + +# ADR-001: Use PostgreSQL instead of MongoDB + +## Status +Accepted + +## Context +We need a relational database to support complex joins and ACID transactions. We considered MongoDB for its flexible schema but it lacks transactional guarantees across documents. + +## Decision +We'll use PostgreSQL. + +## Consequences +- Gains: strong consistency, mature tooling, powerful query engine. +- Costs: more up-front schema design, learning curve for some devs. diff --git a/src/Mod/CAM/Roadmap/Epics/Better Tool Library.md b/src/Mod/CAM/Roadmap/Epics/Better Tool Library.md new file mode 100644 index 0000000000..b1228376c7 --- /dev/null +++ b/src/Mod/CAM/Roadmap/Epics/Better Tool Library.md @@ -0,0 +1,16 @@ + +# Status +Active + +# Why it is a priority + +The decision was made to rework the current tool handling subsystem to be similar to the BTL (Better Tool Library) add-on. The new approach provider a better user experience but the work is unfinished and has introduced some regressions +# Scope + +| In | Out | +| --------------------------- | ------------------------------------------------ | +| Resolve regressions.
| Rework UI/UX to reduce tool controller confusion | +| improve Tool Library Editor | | + +# Related Epics +- diff --git a/src/Mod/CAM/Roadmap/Epics/Template.md b/src/Mod/CAM/Roadmap/Epics/Template.md new file mode 100644 index 0000000000..cc74e98395 --- /dev/null +++ b/src/Mod/CAM/Roadmap/Epics/Template.md @@ -0,0 +1,19 @@ +# STATUS: +ACTIVE/PROPOSED/DELAYED/REJECTED + +# Why it is a priority + +*(Give some justification why this is important)* +- +# Scope + +*(think about what's in and out to keep the scope narrow)* + +| In | Out | +| --- | --- | +| | | +| | | + +# Related Epics +*(list any other epics (draft, active, delayed) that relate)* +- diff --git a/src/Mod/CAM/Roadmap/Functionality/Job Management.md b/src/Mod/CAM/Roadmap/Functionality/Job Management.md new file mode 100644 index 0000000000..0c0cf5a659 --- /dev/null +++ b/src/Mod/CAM/Roadmap/Functionality/Job Management.md @@ -0,0 +1,37 @@ +# 🟩 Core Essentials +*Features present or expected in a basic CAM package and necessary to perform the required tasks* + +| Feature | Description | Assessment | +| ---------------------- | -------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | +| Operation Grouping | Group operations into jobs or setups | COMPLETE | +| Operation Ordering | Define the order in which operations are executed | COMPLETE (Workplan) | +| Intuitive Job Creation | The job setup process should help the user set up stock, tools, models, and origin | Current functionality is confusing and weak | +| Input Geometry | The application should be able to work on input geometry that the user has
2D (imported SVG/DXF)
3D Shapes
Images | FreeCAD can work with 2D and 3D base geometry

Image based CAM (height map milling) not supported at this time. | + +--- + +# 🟨 Professional Grade +*Features usually present or expected in the state-of-the art applications* + +| Feature | Description | Assessment | +| ----------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Setup | UI should allow dragging parts within the stock. It should allow selecting planes and elements from the model as reference points.
Parts should 'drop' onto the work plane much like placing parts works in a 3D slicer. | Orienting parts within stock is clunky.
No automatic bin-packing
No. | +| Machine Type Selection | Choose machine type: milling, lathe, multi-axis, or laser/plasma/waterjet | NONE | +| Multi-Setup Workflow | Organize workflows with multiple parts in one job and jobs that process the same part in different setups.

This item needs more work.

| Multiple parts are supported in one job.
No support for multi-setup jobs. | +| Fixture Selection | Choose WCS for output based on fixture definition | COMPLETE | +| Fixture Configuration | Configure how fixtures are used across operations | COMPLETE | +| Minimize Tool Changes | Optimize across fixtures to reduce tool changes | COMPLETE | +| Stock Clearing/Reset | Allow stock clearing and reset while other fixture is active | COMPLETE | +| Inter-Op Inspection | Allow for inspection between operations | COMPLETE | +| job templates | Work spent configuring a job should be reusable on future jobs | Existing functionality is very good but is not apparent to users.
The functionality is under utilized. Good examples are not shipped with FreeCAD. | +| Job Defaults | Experienced users want certain values to always default in particular ways.
Example: "I always want my drilling retract depth to be 2mm above the start depth" | opDefaults allow full customizaton. The functionality is very good but poorly exposed to users.
The SetupSheet is confusing and the functionality overlaps with OpDefaults in Job setup.
The functionality doesn't appear where users might prefer it - in CAM preferences. | +| Feature Arrays| There are numerous cases where the user wants to create the same toolpath or set of toolpaths in multiple locations. There are several different use cases that overlap. | INCOMPLETE. Some uses-cases can be achieved with Array op. Others with Array dressup and still others with fixtures. The functionality is confusing and buggy.| + +--- + +# 🟦 Next-Level CAM +*Features that would exceed industry standard* + +| Feature | Description | Assessment | +|--------|-------------|------------| +| *(placeholder)* | *(Add future-facing or experimental features here)* | | diff --git a/src/Mod/CAM/Roadmap/Functionality/Operation Configuration.md b/src/Mod/CAM/Roadmap/Functionality/Operation Configuration.md new file mode 100644 index 0000000000..34d2cc27a4 --- /dev/null +++ b/src/Mod/CAM/Roadmap/Functionality/Operation Configuration.md @@ -0,0 +1,171 @@ +# Requirements + +## 🟩 Core Essentials +*Features present or expected in a basic CAM package and necessary to perform the required tasks* + +### All Operations + +| Feature | Description | Assessment | +| --------------------------------- | -------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Operation tool control Parameters | Configure spindle speed, feed rate, tool selection | tools are configured via the Tool Controller. The functionality is COMPLETE but not intuitive. Users expect to configure this within an operation and need to exit the op and edit the TC. | +| Operation Depth parameters | start/end depth, | COMPLETE.
Terminology used throughout CAM is inconsistent.
| + +### Pocketing + +| Feature | Description | Assessment | +| ------------------- | ---------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Entry Strategies | Provide helical and ramp entry | Partially complete via dressup.
specific strategies are possible but limited and buggy | +| Entry Start Point | Allow user to specify entry point | Start point selection is poorly implemented. It's not allowed at all in adaptive.
When used in other pocket ops (millface) only a single point is allowed. If the pocket algorithm needs to retract and re-enter, it will use whichever point is needed.

Pocket entry point should be studied to evaluate the current state-of-the-art. Either remove it and let the op set start point automatically or reimplement it consistently.

Retain starting position from hole to hole when set. Angle in XY set by first hole.
+ie retain starting angle on XY plane as determined by first hole.
+Minimising rapids between holes gains nothing over all and leads to rather arbitrary starting points. | +| Clearing Strategies | zigzag, offset, line, grid, adaptive, Spiral | INCOMPLETE. Spiral pattern is missing and is desirable for some use cases | +| Stock to Leave | Set material to leave for finishing pass | COMPLETE. Terminology is inconsistent. | +| Stepover Control | Set amount of material removed per pass | COMPLETE | + +### Contouring (Profile) + +| Feature | Description | Assessment | +| --------------------- | ----------------------------------- | -------------------------------------------------------------------- | +| Entry/Exit Strategies | Specify entry/exit paths | Partially Complete via dressup.
strategies are limited and buggy | +| Stock to Leave | Set material to leave for finishing | COMPLETE with inconsistent terminology | +| Holding Tags | Add tags to retain part | COMPLETE via dressup | + +### Drilling Holes + +| Feature | Description | Assessment | +| -------------------------------------- | ------------------------------------------------ | ---------------------------- | +| Canned Cycles | Support G81, G82, G83, G73 | COMPLETE | +| Multiple Targets | Handle multiple targets in one op | COMPLETE | +| Drill Ordering | Allow user-defined target order. Don't ignore selected objects | Incomplete | +| Obstructed Faces | Support targets across intermediate obstructions | Incomplete | +| enable and disable indidvidual targets | | Requires deleting the target | +| | | | +| | | | + +| Gcode | Canned Cycle | Assessment | +| ----- | --------------------- | ---------- | +| G81 | Drilling Cycle | WORKS, excessive air cutting, see #22622 | +| G82 | Drilling Cycle, Dwell | WORKS, excessive air cutting, see #22622 | +| G83 | Peck Drilling Cycle | WORKS, excessive air cutting, see #22622 | +| G73 | Chip Breaking Drill | WORKS, excessive air cutting, see #22622 | + +### Engraving + +| Feature | Description | Assessment | +| ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- | +| Engrave text | Allow operating on a text | DONE | +| Engrave centerline | TrueType fonts usually don't work well for engraving.
Single-line fonts are rare and limited. Engraving software that follows font centerline is ideal | NONE | +| | | | + +--- + +## 🟨 Professional Grade +*Features usually present or expected in the state-of-the-art applications* + +### All Operations + +| Feature | Description | Assessment | +| --------------------------- | ---------------------------------------------------------- | ---------- | +| Model-Based Depth Selection | Set relevant depths by clicking features of model or stock | DONE | +| Tool selection | Only allow selecting tools that function with the operation| INCOMPLETE| + +### Pocketing + +| Feature | Description | Assessment | +| ------------ | ------------------------------------------ | ----------------------------------------------------- | +| REST Milling | Target leftover material from previous ops | Partially implemented.
Buggy
Poor visualization | + +### Contouring (Profile) + +| Feature | Description | Assessment | +| ----------------- | ------------------------------------ | ---------- | +| Multiple Passes | Support multi-pass or kerf-widening | NO | +| Holding Tag Shape | Customize size/shape of holding tabs | DONE | + +### Engraving + +| Feature | Description | Assessment | +|--------|-------------|------------| +| *(placeholder)* | *(To be defined)* | | + +### Drilling Holes + +| Feature | Description | Assessment | +| ------------------ | --------------------------------------------- | ---------- | +| Order Optimization | Automatically sort drill order for efficiency | NO | +| Efficient Cycles | Minimize wasted travel in canned cycles | NO | + +#### Boring Cycles + +| Gcode | Canned Cycle | Assessment | +| ----- | ------------------------ | ---------- | +| G85 | Boring Cycle, Feed Out | | +| G86 | Spindle Stop, Rapid Out | | +| G87 | Back Boring Cycle | | +| G88 | Spindle Stop, Manual Out | | +| G89 | Dwell, Feed Out | | + +#### Tapping Cycles + +| Gcode | Canned Cycle | Assessment | +|-------|---------------------------------------------|------------| +| G33.1 | Rigid Tapping | | +| G74 | Left-hand Tapping with Dwell | | +| G84 | Right-hand Tapping with Dwell | | + +### Threadmilling + +| Feature | Description | Assessment | +|--------|-------------|------------| +| non-synchronised theadmilling | WORKING | | + +### V-Carving + +| Feature | Description | Assessment | +| -------------------------------- | --------------------------------------------------------------------------------- | ---------- | +| Compute accurate Vcarve toolpath | Use a V-shaped cutter at varying depth to create varying glyph width in the carve | DONE | + +### Deburring + +| Feature | Description | Assessment | +|--------|-------------|------------| +| *(placeholder)* | *(To be defined)* | | + +### Helical Clearing + +| Feature | Description | Assessment | +|--------|-------------|------------| +| clear cyl. hole | needs outside helix profiling; refuses hole less than twice tool size | | + +### Adaptive Clearing + +| Feature | Description | Assessment | +|--------|-------------|------------| +| *(placeholder)* | *(To be defined)* | | + +### Lathe Operations + +| Feature | Description | Assessment | +|--------|-------------|------------| +| *(placeholder)* | *(To be defined)* | | + +### Indexed Multi-Axis + +| Feature | Description | Assessment | +|--------|-------------|------------| +| *(placeholder)* | *(To be defined)* | | + +### Continuous 4th and 5th Axis + +| Feature | Description | Assessment | +|--------|-------------|------------| +| *(placeholder)* | *(To be defined)* | | + +--- + +## 🟦 Next-Level CAM +*Features that would exceed industry standard* + +| Feature | Description | Assessment | +|--------|-------------|------------| +| framework to support extremely esoteric strategies | -Jeweling, fluting, guilloche | | diff --git a/src/Mod/CAM/Roadmap/Functionality/Output Generation.md b/src/Mod/CAM/Roadmap/Functionality/Output Generation.md new file mode 100644 index 0000000000..433b28e02d --- /dev/null +++ b/src/Mod/CAM/Roadmap/Functionality/Output Generation.md @@ -0,0 +1,39 @@ + +# 🟩 Core Essentials +*Features present or expected in a basic CAM package and necessary to perform the required tasks* + +| Feature | Description | Assessment | +| -------------------- | --------------------------------------------------------------- | ---------- | +| G-code Generation | Translate internal tool path to machine-specific G-code dialect | DONE | +| Output Customization | Line numbers, comments, units (G20/G21) | DONE | +| Output review & edit | After the gcode is generated, the user should have the option to review it and edit before saving. They should have the option of editing in an external editor of their choice | Output review is done. Only uses internal editor which is poor | + +--- + +# 🟨 Professional Grade +*Features usually present or expected in the state-of-the-art applications* + +| Feature | Description | Assessment | +| ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | +| Preflight Checks | Catch and flag obvious problems before generating output | Sanity check can catch some errors. Requires running the check manually. | +| Post-Processor Customization | Control modal vs explicit axes, tool change blocks, headers/footers | Customization with flags in the Job output tab. Posts are inconsistent. | +| Advanced Customizatoin | Allow customization of output beyond the trivial. Allow customizing the post with an editing/customization tool | Requires editing the python file.
Requires copying the post file to a specific location. Clunky and unintuitive | +| Subprogram Support | Generate G-code with subprograms and subroutines | NONE | +| Setup Page Generation | Instructions, checklists, warnings, and errors for the operator | DONE | +| G-code Decomposition | Break arcs/canned cycles into linear segments or explicit moves | NONE | +| Coordinate Conversion | Convert absolute to relative (G91), center arcs to relative (G91.1) | NONE | +| Coolant Control | Coolant control should be started at the most desirable point to avoid wasting coolant during a tool change or before it is actually needed. | Current coolant control turns on when the TC is loaded. Inefficient | +| Advanced g-code generation | It should be possible to write postprocessors to generate any valid gcode | Some gcode features are not possible | + +--- + +# 🟦 Next-Level CAM +*Features that would exceed industry standard* + +| Feature | Description | Assessment | +| ----------------------------- | --------------------------------------------------------- | ---------- | +| On-Machine Inspection | Generate code or triggers for probing/inspection routines | None | +| Multi-File Output | Support splitting G-code into multiple files | LImited | +| Tool Wear Compensation | Output tool wear adjustments via offsets or tables | None | +| Feedback Loop Integration | Closed-loop post processing using machine state | None | +| Direct-to-Machine Fabrication | Reimagine CAM → G-code → Machine as a seamless pipeline | None | diff --git a/src/Mod/CAM/Roadmap/Functionality/Scripting and automation.md b/src/Mod/CAM/Roadmap/Functionality/Scripting and automation.md new file mode 100644 index 0000000000..ad8d1640e2 --- /dev/null +++ b/src/Mod/CAM/Roadmap/Functionality/Scripting and automation.md @@ -0,0 +1,25 @@ +# 🟩 Core Essentials +*Features present or expected in a basic CAM package and necessary to perform the required tasks* + +| Feature | Description | Assessment | +| -------------------- | -------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | +| Python/Macro Support | Allow scripting or automation via Python or macros | Limited.
Some CAM functions require the GUI to be loaded.
No examples shipped with FreeCAD.
No examples on the wiki | + +--- + +# 🟨 Professional Grade +*Features usually present or expected in the state-of-the art applications* + +| Feature | Description | Assessment | +| -------------------- | ------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Parametric Workflows | Operations update automatically in response to model changes | Partial.
Recomputes are inconsistent. Sometimes triggered when not needed. Sometimes require manual recompute.
Recomputes are inefficient. Cannot, for example, recompute just the dressup or just the finishing pass. | + +--- + +# 🟦 Next-Level CAM +*Features that would exceed industry standard* + +| Feature | Description | Assessment | +| ----------------------------- | ----------------------------------------------------- | ---------- | +| Headless Batch Jobs | Run toolpath generation/export without UI interaction | Limited | +| External Workflow Integration | Embed CAM pipeline into other automated systems | None | diff --git a/src/Mod/CAM/Roadmap/Functionality/Simulation and Verification.md b/src/Mod/CAM/Roadmap/Functionality/Simulation and Verification.md new file mode 100644 index 0000000000..074cf137a2 --- /dev/null +++ b/src/Mod/CAM/Roadmap/Functionality/Simulation and Verification.md @@ -0,0 +1,35 @@ +# 🟩 Core Essentials +*Features present or expected in a basic CAM package and necessary to perform the required tasks* + +| Feature | Description | Assessment | +| ---------------------- | ------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Toolpath Visualization | Display toolpath in context of model and stock | Done. Arrow indicators on segments are too small to be useful. | +| Toolpath Inspection | Allow user to inspect/explore segments of the toolpath | Done.
Inspection shows the raw internal comands for the segments. These commands are not in the correct unit schema and do not reflect the postprocessed code. | +| | | | + +--- + +# 🟨 Professional Grade +*Features usually present or expected in the state-of-the art applications* + +| Feature | Description | Assessment | +| ---------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- | +| Job Origin Indicator | Visual reference showing origin of the job | Shows in the 3D scene if enabled.
Does not show in the simulators. | +| Simulation: Tool & Model | Realistically render tool, stock, and models | Partially done.
Tool representation is incomplete. | +| Simulation: Tool Motion | Show representative tool movement.
Movement is sufficient to verify the tool path accuracy but does not reflect every movement. For example, may not show every peck movement in a cycle. | DONE | +| Simulation: Material Removal | Show realistic material removal in simulation | DONE | +| Simulation Speed Control | Speed up or slow down simulation for inspection | DONE | +| Collision Detection | Detect collisions between tool, stock, and model | NO | +| Error Detection | Identify common errors like gouging, overcutting, missed areas | NO | +| Consistent UI/UX | The UI scene navigation (pan, zoom, rotate) should follow the application mouse model | Behavior is inconsistent | + +--- + +# 🟦 Next-Level CAM +*Features that would exceed industry standard* + +| Feature | Description | Assessment | +| ------------------ | ------------------------------------------------------------------- | ---------- | +| Machine Simulation | Simulation accurately reflects actual machine behavior and movement | | +| Job estimates | Estimates of tool path completion time are accurate to within 1% | | +| | | | diff --git a/src/Mod/CAM/Roadmap/Functionality/Stock and Work-piece Setup.md b/src/Mod/CAM/Roadmap/Functionality/Stock and Work-piece Setup.md new file mode 100644 index 0000000000..43e21fa8e3 --- /dev/null +++ b/src/Mod/CAM/Roadmap/Functionality/Stock and Work-piece Setup.md @@ -0,0 +1,28 @@ +# 🟩 Core Essentials +*Features necessary to perform the required function* + +| Feature | Description | Assessment | +|--------|-------------|------------| +| Define Stock Geometry | Specify size, shape, and orientation of raw material | | +| Model Placement | Position and rotate models within the stock | | +| Set Work Origin | Define the work coordinate system origin | | + +--- + +# 🟨 Professional Grade +*Features present in the state-of-the-art applications and expected* + +| Feature | Description | Assessment | +|--------|-------------|------------| +| Define Stock Material | Specify material type (for feeds/speeds, simulation, etc.) | | +| Fixtures/Clamping | Optionally define fixtures or clamping constraints | | +| Machine Envelope Visualization | Show how the job fits within the machine's work volume | | + +--- + +# 🟦 Next-Level CAM +*Features that would exceed industry standard* + +| Feature | Description | Assessment | +|--------|-------------|------------| +| *(placeholder)* | *(Add advanced stock/setup ideas here)* | | diff --git a/src/Mod/CAM/Roadmap/Functionality/Tool Management.md b/src/Mod/CAM/Roadmap/Functionality/Tool Management.md new file mode 100644 index 0000000000..70b5a31632 --- /dev/null +++ b/src/Mod/CAM/Roadmap/Functionality/Tool Management.md @@ -0,0 +1,31 @@ +# 🟩 Core Essentials +*Features necessary to perform the required function* + +| Feature | Description | Assessment | +|--------|-------------|------------| +| Tool Definition | Define and manage tools such as end mills, drills, inserts | | +| Tool Numbering | Assign tool numbers for G-code output | | + +--- + +# 🟨 Professional Grade +*Features usually present or expected in the state-of-the-art applications* + +| Feature | Description | Assessment | +| ------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- | +| Tool Metadata | Define shapes, material, holding, and additional metadata | | +| Feeds & Speeds Suggestions | Recommend cutting parameters based on tool, material, and operation | | +| Tool Import/Export | Synchronize tool definitions with machine or external databases | | +| Tool Libraries | Manage sets of tools as reusable libraries | | +| Probe Tool Definition | Identify probe tools and suppress spindle start | | +| Drag Knife Support | Define drag-knife tool and generate accurate offset-aware toolpaths | | +| Separate tool preparation from tool loading | With larger machines, a tool magazine may take a significant amount of time to index in preparation for a tool change.
We should support separating the calls to 'call for a tool' from the call to 'load the tool'. | | + +--- + +# 🟦 Next-Level CAM +*Features that would exceed industry standard* + +| Feature | Description | Assessment | +|--------|-------------|------------| +| *(placeholder)* | *(Add cutting-edge tool management or smart tooling features here)* | | diff --git a/src/Mod/CAM/Roadmap/README.md b/src/Mod/CAM/Roadmap/README.md new file mode 100644 index 0000000000..95d90ddefd --- /dev/null +++ b/src/Mod/CAM/Roadmap/README.md @@ -0,0 +1,79 @@ +# 📍 FreeCAD CAM Workbench Road-map – 2025 and Beyond + +This document aims to guide the ongoing development of the CAM Workbench. It sets out shared goals, identifies pain points and opportunities, and invites discussion, collaboration, and contributions from the wider community. + +FreeCAD is a volunteer-driven project. This road-map does not prescribe work or enforce deadlines — it is a living document to help focus effort and encourage alignment across developers, users, and stakeholders. + +Like everyone, Maintainers only have so much time that they can allocate to FreeCAD. With many contributors submitting changes, it can be difficult to judge the relative importance of an individual contribution. This document establishes a shared vision of the direction of the workbench so maintainers have a framework for prioritizing review and approval. + +# 🔭 Vision +*(this section establishes non-negotiable big-picture definition of what we are building)* + +A robust, intuitive, and industry-ready CAM solution that: + +- Integrates seamlessly with the FreeCAD modeling workflow, unit schemas, and translation +- Supports professional CNC workflows +- Is usable and intuitive for hobbyist and non-professionals +- Embraces open standards +- Encourages extensibility and script-ability via Python + +## ⚙️ Functionality +*(this section describes expected functionality in agnostic terms. No FreeCAD-specific language)* + +Any CAM application meeting the needs above must provide functionality in these areas: +- [Tool Management](<./Functionality/Tool Management.md>) +- [Stock and Work-piece Setup](<./Functionality/Stock and Work-piece Setup.md>) +- [Job Management](<./Functionality/Job Management.md>) +- [Operation Configuration](<./Functionality/Operation Configuration.md>) +- [Simulation and Verification](<./Functionality/Simulation and Verification.md>) +- [Output Generation](<./Functionality/Output Generation.md>) +- [Scripting and automation](<./Functionality/Scripting and automation.md>) + +### ADR Log + +*(ADRs - Architecture Decision Report)* + +| ADR | Description | Status | +| ----------------------------- | ---------------------------------------------------------------------------------------------------------- | ------ | +| [ADR-002](<./ADR/ADR-002.md>) | Internal representation of tool path | Legacy | + + +# ⚠️ Pain Points +*(this section functions like an FAQ. It helps keep users from creating duplicate issues. It gives new developers a first place to connect)* + +Perennial complaints from users: + +- Climb vs Conventional terminology not consistently used +- Safe Height vs Clearance Height confusing +- Visualization of first rapid move in operation makes it appear as though tool + returns to origin between ops (It doesn't) +- Arrays of similar gcode +- Lack of F & S calculation +- Selecting and using tools (tool controllers) is cumbersome + +# 🚀 Initiatives and Projects (Epics) + +*(this section will be a list of initiatives that have been collectively discussed. +We agree these things should get collective attention because they are larger than a single issue or pull request and have implications on the work of multiple people. )* + +*(If you have an idea for a project, create a pull request adding it to this section. Changes will be discussed in the PR and at periodic meetups)* + +*(To keep focused and moving forward, we should voluntarily limit this list to ~8-10 active items)* + +*(Each project will have a corresponding GitHub project to connect related issues and pull requests)* + +*(You may, of course, work on anything that you like and submit pull requests. However, be warned that pull requests will be judged on the priorities noted below and new features that are outside of the discussed projects will receive additional scrutiny)* + +| Epic | Description | Status | +| ------------------------------------------------------------------------------- | ------------------------------------------------------------------- | -------- | +| [Better Tool Library](Epics/Better%20Tool%20Library.md) | Implement the 'Better Tool Library' approach to tool management | Active | + +# Priorities +*(When evaluating Pull Requests, the following priorities will be considered)* + +| Priority | Change | Rationale | +| -------- | ----------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 1 | Regression bug fixes | Regressions represents a step backward. They impact users and other developers. Regressions may slow development in other areas. | +| 2 | Changes related to the initiatives and projects | Projects are grouping together numerous issues including both features and bug fixes. Multiple people may be working collectively. Timely response to changes is necessary to avoid rework and conflict. | +| 3 | other bug fixes | Resolving bugs with existing functionality that is not part of a broader initiative. | +| 4 | other new features | One-off features are either small enough to be reviewed independently or are big enough to warrant discussion by a larger group. This can be time consuming.
New features that are not part of an existing epic may represent good functionality but will receive heightened scrutiny to ensure they are consistent with established goals. |