Skip to content

Commit e1d79d7

Browse files
Finalize multiaxis, cycle posts and reference checks
1 parent e65607b commit e1d79d7

81 files changed

Lines changed: 20167 additions & 14632 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
name: Bug report
2+
description: Report a reproducible application, GUI, CLI, parser, or analysis defect
3+
title: "[Bug] "
4+
labels: []
5+
body:
6+
- type: markdown
7+
attributes:
8+
value: |
9+
Please provide a minimal reproducible case. For incorrect G-code execution, controller conversion, or exported motion, use the **G-code / export semantics bug** template instead.
10+
- type: input
11+
id: version
12+
attributes:
13+
label: Easy GCode Plot version
14+
placeholder: "e.g. 1.9.4"
15+
validations:
16+
required: true
17+
- type: dropdown
18+
id: platform
19+
attributes:
20+
label: Operating system
21+
options:
22+
- Windows
23+
- Linux
24+
- Other
25+
validations:
26+
required: true
27+
- type: dropdown
28+
id: area
29+
attributes:
30+
label: Area
31+
options:
32+
- GUI
33+
- CLI
34+
- Parser / dialect
35+
- Execution / kernel
36+
- Visualization
37+
- Analysis / diagnostics
38+
- Import / file handling
39+
- Build / packaging
40+
- Other
41+
validations:
42+
required: true
43+
- type: textarea
44+
id: description
45+
attributes:
46+
label: What happened?
47+
description: Describe the observed behavior and why it is incorrect.
48+
validations:
49+
required: true
50+
- type: textarea
51+
id: steps
52+
attributes:
53+
label: Reproduction steps
54+
placeholder: |
55+
1. Open ...
56+
2. Select ...
57+
3. Run ...
58+
validations:
59+
required: true
60+
- type: textarea
61+
id: expected
62+
attributes:
63+
label: Expected behavior
64+
validations:
65+
required: true
66+
- type: textarea
67+
id: diagnostics
68+
attributes:
69+
label: Diagnostics / traceback
70+
description: Paste relevant CLI output, traceback, or diagnostics. Remove private data.
71+
render: text
72+
- type: textarea
73+
id: sample
74+
attributes:
75+
label: Minimal sample or fixture
76+
description: Attach or paste the smallest input that reproduces the problem when applicable.
77+
- type: checkboxes
78+
id: checks
79+
attributes:
80+
label: Confirmation
81+
options:
82+
- label: I checked the current ROADMAP and existing issues for the same problem.
83+
required: true
84+
- label: I removed credentials, private paths, and other sensitive data from the report.
85+
required: true
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
name: Feature request
2+
description: Propose a focused capability that fits the project direction
3+
title: "[Feature] "
4+
labels: []
5+
body:
6+
- type: markdown
7+
attributes:
8+
value: |
9+
Please check `ROADMAP.md` first. Requests that duplicate planned work are more useful when they add a concrete controller/program example or acceptance criteria.
10+
- type: textarea
11+
id: problem
12+
attributes:
13+
label: Problem to solve
14+
description: Describe the real workflow or limitation, not only the desired UI/control.
15+
validations:
16+
required: true
17+
- type: textarea
18+
id: proposal
19+
attributes:
20+
label: Proposed behavior
21+
description: Describe what Easy GCode Plot should do.
22+
validations:
23+
required: true
24+
- type: dropdown
25+
id: area
26+
attributes:
27+
label: Area
28+
options:
29+
- Parser / dialect
30+
- Execution / kernel
31+
- Turning
32+
- Milling
33+
- Multiaxis / kinematics
34+
- Visualization
35+
- Analysis / diagnostics
36+
- Export / postprocessing
37+
- GUI
38+
- CLI / batch
39+
- Documentation
40+
- Other
41+
validations:
42+
required: true
43+
- type: textarea
44+
id: example
45+
attributes:
46+
label: Example
47+
description: Add a representative G-code program, controller command, workflow, or expected output if applicable.
48+
- type: textarea
49+
id: reference
50+
attributes:
51+
label: Documentation / reference
52+
description: For controller-specific behavior, identify the controller/manual/version when possible.
53+
- type: checkboxes
54+
id: scope
55+
attributes:
56+
label: Scope check
57+
options:
58+
- label: I checked `ROADMAP.md` and this request is not merely asking for already completed functionality.
59+
required: true
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
name: G-code / export semantics bug
2+
description: Report incorrect toolpath, coordinates, cycles, rotary/TCP/TWP behavior, or controller conversion
3+
title: "[G-code] "
4+
labels: []
5+
body:
6+
- type: markdown
7+
attributes:
8+
value: |
9+
Use this template when Easy GCode Plot changes machining semantics, produces incorrect resolved motion, or exports a program that does not replay equivalently. Do not run unverified output on a real machine.
10+
- type: input
11+
id: version
12+
attributes:
13+
label: Easy GCode Plot version
14+
placeholder: "e.g. 1.9.4"
15+
validations:
16+
required: true
17+
- type: dropdown
18+
id: machine
19+
attributes:
20+
label: Machine mode
21+
options:
22+
- Milling 3-axis
23+
- Milling 4-axis
24+
- Milling 5-axis
25+
- Turning
26+
- Unknown / not applicable
27+
validations:
28+
required: true
29+
- type: input
30+
id: controller
31+
attributes:
32+
label: Controller / dialect
33+
description: Include the controller family and dialect if known.
34+
placeholder: "e.g. FANUC milling, SINUMERIK native, SINUMERIK ISO-M"
35+
validations:
36+
required: true
37+
- type: input
38+
id: kinematics
39+
attributes:
40+
label: Kinematics profile
41+
description: Required for rotary/multiaxis problems when known.
42+
placeholder: "e.g. 4ax_table_c, 5ax_table_bc_angled"
43+
- type: dropdown
44+
id: path
45+
attributes:
46+
label: Affected path
47+
options:
48+
- Parser / native dialect
49+
- Execution / resolved trajectory
50+
- Visualization
51+
- Full Program export
52+
- Expanded Execution export
53+
- Controller conversion
54+
- CLI / batch export
55+
- GUI export
56+
- Other
57+
validations:
58+
required: true
59+
- type: textarea
60+
id: source
61+
attributes:
62+
label: Minimal source program
63+
description: Prefer the smallest program that still reproduces the semantic difference.
64+
render: text
65+
validations:
66+
required: true
67+
- type: textarea
68+
id: expected
69+
attributes:
70+
label: Expected machining semantics
71+
description: Describe expected positions, trajectory, modal state, rotary angles, TCP/TWP state, cycle behavior, or reference move.
72+
validations:
73+
required: true
74+
- type: textarea
75+
id: actual
76+
attributes:
77+
label: Actual result
78+
description: Describe the incorrect geometry/state or paste the generated NC output and diagnostics.
79+
validations:
80+
required: true
81+
- type: textarea
82+
id: evidence
83+
attributes:
84+
label: Reference / evidence
85+
description: Controller manual section, known-good output, CAM result, machine documentation, or another reproducible reference.
86+
- type: textarea
87+
id: replay
88+
attributes:
89+
label: Round-trip / replay result
90+
description: If applicable, include source vs exported motion count, trajectory signature, final position, rotary state, or diagnostics.
91+
- type: checkboxes
92+
id: safety
93+
attributes:
94+
label: Safety confirmation
95+
options:
96+
- label: I have not treated Easy GCode Plot output as machine-safe solely because it rendered or passed a test.
97+
required: true
98+
- label: I identified whether this should work according to the current ROADMAP, rather than assuming planned functionality is already supported.
99+
required: true

‎.github/PULL_REQUEST_TEMPLATE.md‎

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
## Problem
2+
3+
Describe the defect or limitation this PR addresses.
4+
5+
## Change
6+
7+
Describe the implementation change and why this approach is appropriate.
8+
9+
## Semantics / safety impact
10+
11+
For parser, execution, cycles, kinematics, or export changes, state what machining semantics are affected and how equivalence was verified.
12+
13+
If not applicable, write `N/A`.
14+
15+
## Regression coverage
16+
17+
List the tests or fixtures added/updated and what each protects.
18+
19+
## Validation
20+
21+
- [ ] `./scripts/ps1/test.ps1` or `bash scripts/sh/test.sh`
22+
- [ ] `./scripts/ps1/lint.ps1 -CheckResources` or `bash scripts/sh/lint.sh`
23+
- [ ] `git diff --check`
24+
- [ ] Relevant controller/export round-trip checks, when applicable
25+
- [ ] No lint/complexity suppression added only to make checks pass
26+
27+
## Notes
28+
29+
Document intentional fail-closed behavior, environment limitations, controller-specific assumptions, or checks that could not be run.

‎CHANGELOG.md‎

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,23 @@
11
# Changelog
22

3+
## 1.9.4 - Unreleased
4+
5+
- Reconstruct the verified indexed A/B/C, simultaneous table-C and angled AC/BC TCP subsets through multiaxis posts. Tilted-plane/CYCLE800 reconstruction and indexed export about a displaced WCS remain unsupported.
6+
- Emit supported drilling and tapping operations through the selected post's cycle templates, preserving resolved geometry and machine state. Native SINUMERIK posts retain separate classic 01/2008 and extended 03/2009 cycle interfaces.
7+
- Use the display name `840D Extended cycles` in Options, help and diagnostics. Keep the saved `CNC/SINUMERIK_840D_SL` setting, CLI `--sinumerik-cycles classic|sl` values and JSON cycle-profile identifiers compatible.
8+
- Add direct NC reference comparison to CLI `export` with `--compare-with FILE`: print a deterministic unified diff and return 1 on mismatch, 0 on a match, or 2 on export/read errors. Protect the reference from overwrite.
9+
- Add the supplied `ext_cycles.mpf` and `no_ext_cycles.mpf` programs to the fixture corpus, checking common drilling geometry, supported extended tapping, export replay and explicit rejection of unmodeled operations.
10+
- Audit multiaxis reconstruction with real fixture replay in absolute and incremental output. Preserve physical position on repeated G43.4 and G43 cancellation, distribute ABC over split/linearized TCP arcs without cumulative incremental angle drift, and preserve inverse-time block duration after subdivision.
11+
- Keep rotary feed motion at the table-C origin in the trace, retain table-frame metadata on reference returns independently of head orientation, validate every emitted rotary axis against the post, and invalidate modal motion after explicit rotary control frames.
12+
- Allow already-resolved zero-distance reference returns and source-preserving macro/index normalization. Reject indexed export about a displaced WCS until target frame offsets can be reconstructed; classify unverified compensation/ignored native geometry as export limitations with their concrete diagnostic codes.
13+
- Prototype controller-neutral multiaxis EXPANDED reconstruction. Multiaxis posts can declare target TCP control frames; bundled FANUC and SINUMERIK multiaxis profiles map resolved `G43.4`/`G49` and `TRAORI`/`TRAFOOF` semantics across controllers instead of rejecting all TCP execution.
14+
- Emit verified indexed `A/B/C` changes as dedicated rotary rapid frames instead of folding an index into the next XYZ motion. Reconstruct indexed-table XYZ/arc geometry in the rotary frame before postprocessing so replay does not rotate physical coordinates twice.
15+
- Reconstruct the verified non-TCP `4ax_table_c` continuous rotary subset through FANUC and SINUMERIK multiaxis posts. Indexed A/B/C and simultaneous table-C output now re-execute with matching geometry and final rotary state; other unresolved continuous-rotary semantics remain fail-closed.
16+
- Record TCP controls as real state transitions instead of source-word echoes: inactive `G49`, native `D0` and `TRAFOOF` no longer manufacture `TCP_CONTROL_OFF`, and repeated activation/cancellation does not duplicate semantic edges.
17+
- Allow native SINUMERIK A/B/C positioning on any selected profile that actually configures those axes; ISO-M rotary remains fail-closed and TRAORI still requires the supported angled AC/BC TCP profiles.
18+
- Keep tilted working planes/CYCLE800 fail-closed in EXPANDED until their controller reconstruction contract is implemented.
19+
- Add semantic replay regressions for FANUC↔SINUMERIK TCP conversion, indexed/continuous rotary output, TCP edge events, the shared `export_file` path, and both full FANUC five-axis impeller fixtures.
20+
321
## 1.9.3 - 2026-10-06
422

523
- Consolidate user-facing export into three paths: FULL source-preserving normalization, EXPANDED controller postprocessing from resolved execution, and DXF geometry output. Remove Plot Data and separate cycle-export modes from the current export contract.

‎CODE_OF_CONDUCT.md‎

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# Code of Conduct
2+
3+
Easy GCode Plot is a technical project. Discussion should stay professional, specific, and focused on evidence.
4+
5+
## Expected behavior
6+
7+
Participants should:
8+
9+
- discuss code, controller behavior, documentation, and test results rather than attacking people;
10+
- provide reproducible examples when disputing machining or controller semantics;
11+
- distinguish documented controller behavior from assumptions and machine-specific behavior;
12+
- accept technical correction when evidence shows an implementation or claim is wrong;
13+
- keep issue and pull-request discussions relevant to the reported problem;
14+
- respect contributors regardless of experience level, background, identity, or location.
15+
16+
## Unacceptable behavior
17+
18+
The following is not acceptable:
19+
20+
- harassment, threats, personal attacks, or discriminatory language;
21+
- deliberate disruption of issues or pull requests;
22+
- publishing private information without permission;
23+
- knowingly presenting unsafe or fabricated CNC behavior as verified;
24+
- repeatedly ignoring project scope or safety requirements after being asked to stop.
25+
26+
## Enforcement
27+
28+
To report a concern, [open an issue requesting maintainer contact](https://github.com/MaestroFusion360/easy_gcode_plot/issues/new). Link the relevant public discussion if appropriate. For sensitive reports, request a private channel without posting personal information or incident details publicly; wait for the maintainer to provide that channel. Security vulnerabilities follow the [Security Policy](SECURITY.md).
29+
30+
Maintainers may edit, hide, lock, or remove content that violates these rules and may restrict participation when necessary to keep the project usable and safe.
31+
32+
Technical disagreement is welcome. Personal hostility is not.

0 commit comments

Comments
 (0)