Skip to content

Commit 4d317b5

Browse files
Fix turning cycles; add STL panel; update print and FAQ translations
1 parent 12f8855 commit 4d317b5

68 files changed

Lines changed: 19432 additions & 9820 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.gitattributes‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
# Keep Windows project files consistent across Git and IDE settings.
2-
* text=auto eol=crlf
1+
# Store text with LF in Git. Use each platform's Git checkout setting
2+
# (core.autocrlf=true on Windows, false on Linux) for working-tree endings.
3+
* text=auto
34

45
# Shell scripts are executed by Bash in Linux CI and must stay LF.
56
*.sh text eol=lf

‎CHANGELOG.md‎

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,27 @@
11
# Changelog
22

3-
## 1.6.8 - in progress
3+
## 1.6.9 - 2026-09-29
4+
5+
- Switched the milling 3D camera to an orthographic CAD projection and kept it orthographic while orbiting from fixed views, so apparent feature size does not change with depth.
6+
- Refined the STL Objects panel with a dark-theme border, copyable statistics, visible base-point coordinates and a plot marker. Mesh measurements now account for float32 STL coordinate precision, and Section displays clipped 3D geometry with section caps and supports Clear/Undo.
7+
- Completed Russian localization of the STL Objects panel, compacted the operation pages, added Apply/Clear section controls, shortened array and positioning actions, renamed the minimum bounding-box base point, and removed the forced panel minimum width. Updated both FAQs and the README guidance.
8+
- Raised the default automatic-refresh segment and generated-motion limits to the QSpinBox upper bound (`2,147,483,647`); automatic refresh no longer applies a separate 20,000-point cap.
9+
- Updated STL section/statistics golden expectations for the current `test4.stl` asset and kept offscreen GUI tests from painting the OpenGL view when they only exercise editor actions or panel widgets.
10+
- Added a persistent Recent STL submenu after Clear STL in the File menu.
11+
- Replaced raster plot snapshots in Print with page-fitted vector toolpath rendering; all motions print regardless of playback position, with distinct rapid and cutting styles.
12+
- Removed the page heading from Print and added Plot settings for rapid visibility, rapid dashes, and colors by tool for both rapid and cutting moves. The settings apply to the 3D view and printed output and have Russian translations.
13+
- Matched on-screen rapid dashes to the short dash spacing used by Print at plot build and explicit view changes. Camera navigation now draws the resident VBO without rebuilding dash geometry on every frame.
14+
- Made Plot options more compact with paired checkboxes, playback speed last, and a shorter Options dialog.
15+
- Kept the milling `PROGRAM_START` event when the first block is eligible for native acceleration, and expanded native/Python trace parity checks across modal transitions.
16+
- A damaged user `rotary_profiles.json` no longer prevents the GUI from opening: menus use the installed profiles while strict kernel calls still report the invalid override.
17+
- Matched recent-file and save-path casing to the host platform, and moved restored windows back onto an available screen.
18+
- Solid STL overlays now write depth before the toolpath is drawn; trajectory segments behind the model are hidden. The plot requests a 24-bit depth buffer.
19+
- G71 now reports empty profiles and zero pass depth instead of producing an empty cycle. G72 Type II accepts repeated endpoint crossings on a closed contour while continuing to reject genuinely disjoint facing spans.
20+
- Consolidated simple Plot, Stock, CNC, Editor, General and Export preferences into shared load/save specifications with defaults, types and applicable bounds. Simplified turning-cycle, execution and tool-library code without changing its supported controller scope.
21+
- Delayed FAQ search while typing, retained immediate navigation, removed unused GUI compatibility wrappers, and labeled the text toolpath duration as estimated motion time.
22+
- Added a full Russian FAQ translation and kept the in-app FAQ content synchronized with the expanded English documentation.
23+
24+
## 1.6.8 - 2026-09-28
425

526
- Resolved duplicate hotkeys while loading older settings: Grid keeps its F4 default, and a conflicting legacy Fit to View F4 assignment is cleared before the Options hotkey list opens.
627
- Brightened the Tool List toolbar icon and simplified the Hole Calculator icon to four blue markers for clearer display at 32×32.

‎FAQ.md‎

Lines changed: 69 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Easy G-Code Plot FAQ
22

3-
This document is the detailed user and developer reference for Easy G-Code Plot. It reflects the current 1.6.8 development tree and explains the GUI, deterministic FANUC execution kernel, Macro B runtime, turning and milling cycles, indexed rotary behavior, diagnostics, CLI, batch analysis and export behavior.
3+
This document is the detailed user and developer reference for Easy G-Code Plot. It reflects the current 1.6.9 tree and explains the GUI, deterministic FANUC execution kernel, Macro B runtime, turning and milling cycles, indexed rotary behavior, diagnostics, CLI, batch analysis and export behavior.
44

55
The same FAQ can be packaged for offline use in **Help → FAQ**.
66

@@ -54,6 +54,7 @@ The same FAQ can be packaged for offline use in **Help → FAQ**.
5454
- [Are Macro B variable values stored per execution step?](#are-macro-b-variable-values-stored-per-execution-step)
5555
- [Does Expanded Execution export keep Macro B statements?](#does-expanded-execution-export-keep-macro-b-statements)
5656
- [FANUC turning](#fanuc-turning)
57+
- [Main differences between Type A and Type B](#main-differences-between-type-a-and-type-b)
5758
- [What is the turning coordinate model?](#what-is-the-turning-coordinate-model)
5859
- [How do X/U and Z/W behave?](#how-do-xu-and-zw-behave)
5960
- [How are G20 and G21 handled?](#how-are-g20-and-g21-handled)
@@ -150,6 +151,15 @@ The same FAQ can be packaged for offline use in **Help → FAQ**.
150151
- [Does CLI execution load the GUI Saved Library?](#does-cli-execution-load-the-gui-saved-library)
151152
- [Interface, editor and playback](#interface-editor-and-playback)
152153
- [What are the two main GUI panels?](#what-are-the-two-main-gui-panels)
154+
- [How does an imported STL affect toolpath visibility?](#how-does-an-imported-stl-affect-toolpath-visibility)
155+
- [How do I use the STL Objects panel?](#how-do-i-use-the-stl-objects-panel)
156+
- [How do I import and select STL models?](#how-do-i-import-and-select-stl-models)
157+
- [What do Undo, Redo, Statistics and Delete do?](#what-do-undo-redo-statistics-and-delete-do)
158+
- [How do STL base points and bounding-box picks work?](#how-do-stl-base-points-and-bounding-box-picks-work)
159+
- [How do I position and transform an STL model?](#how-do-i-position-and-transform-an-stl-model)
160+
- [How do STL arrays work?](#how-do-stl-arrays-work)
161+
- [How do I make a 3D section through an STL model?](#how-do-i-make-a-3d-section-through-an-stl-model)
162+
- [What does STL Statistics report, and how do I display inches?](#what-does-stl-statistics-report-and-how-do-i-display-inches)
153163
- [How do I change letter case or mark optional blocks?](#how-do-i-change-letter-case-or-mark-optional-blocks)
154164
- [How do I print the plot?](#how-do-i-print-the-plot)
155165
- [Which fixed views are available?](#which-fixed-views-are-available)
@@ -982,6 +992,8 @@ The first line captures rough depth and retract. The second line supplies the P-
982992

983993
The first-line U depth is treated as a radial depth and converted consistently into programmed diameter motion when diameter programming is active.
984994

995+
An empty P-Q profile or zero first-line depth produces an explicit G71 diagnostic; no partial cycle trajectory is published.
996+
985997
### How are G71 U/W finish allowances handled?
986998

987999
The second-line U and W are applied to the roughing profile before rough passes are generated.
@@ -1034,6 +1046,8 @@ instead of choosing an arbitrary span.
10341046

10351047
An empty profile, zero pass depth, or a lone interior crossing after a closed Type II span also produces an explicit diagnostic. No cuttable Type II facing span is reported as an error rather than an empty expansion.
10361048

1049+
Repeated intersections at the same endpoint of a closed contour count as one crossing. Distinct, disjoint spans still produce `UNSUPPORTED_G72_TYPE_II_SPANS`.
1050+
10371051
### How does G73 work?
10381052

10391053
G73 is implemented as repeated shifted copies of the roughing profile.
@@ -1214,6 +1228,8 @@ The catalog also contains head, mixed head/table, angled-axis and two-rotary-axi
12141228

12151229
The JSON editor validates a profile and saves it to `rotary_profiles.json` beside the user's `config.ini`. It does not change the installed catalog. A selected profile defines the table/head axis and sign explicitly; the software cannot infer those properties from an A, B or C word. Execution steps retain the selected WCS and the configured rotary angles. G10 L2 and WCS changes preserve the current machine position after a table index.
12161230

1231+
If the user profile file is damaged or invalid, the GUI opens with the installed profiles. Kernel and CLI loads remain strict and report the invalid file until it is corrected.
1232+
12171233
### What happens when indexed geometry cannot be resolved?
12181234

12191235
A changed A/B/C address without a selected profile or an address absent from the selected profile stops milling execution with an explicit diagnostic. Simultaneous rotary/XYZ movement and non-rapid rotary interpolation also stop for the indexed A/B profiles; the checked `4ax_table_c` planar X/C feed contour is the exception. This is the present 1.6.7 implementation, not a general FANUC restriction. A/B/C with an unsupported position-changing G-code also stops execution. Unknown M-codes and G41/G42 that cannot be verified because of missing tool or unsupported contour data produce warnings and let execution continue. G30 is not modeled as G28: its controller-specific second reference point is not inferred from the configured G28 home.
@@ -1509,6 +1525,57 @@ This matters for G41/G42 verification: inferred tool dimensions should be review
15091525

15101526
The left side is a QScintilla editor with syntax highlighting, line numbers, search/replace and cleanup functions. The right side is an OpenGL trajectory view with axes, grid, camera controls, trajectory picking and playback.
15111527

1528+
The milling 3D view uses an orthographic CAD projection. Rotating from Top, Front or Left keeps parallel lines parallel and preserves apparent size across depth.
1529+
1530+
### How does an imported STL affect toolpath visibility?
1531+
1532+
In solid mode, the STL surface hides toolpath segments behind it. The feature-edge wireframe has no solid surface to occlude those segments. This changes only visibility in the plot, not the resolved trajectory geometry. Manage imported models in **Settings → STL Objects**; the guide below covers transforms, sections, picking and measurements.
1533+
1534+
### How do I use the STL Objects panel?
1535+
1536+
The **Settings → STL Objects** dock edits imported STL scene objects without changing the G-code program. Import a model with **File → Import STL**. The dock lists each imported model; select a row before applying an operation. Choose **Base point**, **Position**, **Transform**, **Circular array**, **Rectangular array** or **Section** from the operation selector. The four compact buttons at the top apply Undo, Redo, Statistics and Delete to the STL scene.
1537+
1538+
#### How do I import and select STL models?
1539+
1540+
Use **File → Import STL** to load an ASCII or binary mesh. **File → Recent STL** reopens a recent model. Each import appears as a separate row in the dock; selecting a row makes it the target of the operation controls and statistics. **Delete** removes the selected model. **File → Clear STL** removes all STL models. These commands affect imported scene objects, not the editor contents or G-code trajectory.
1541+
1542+
#### What do Undo, Redo, Statistics and Delete do?
1543+
1544+
The STL **Undo** and **Redo** history is separate from text-editor undo. It records scene edits such as adding another model, changing a base point, moving, rotating, mirroring, scaling, creating arrays, applying or clearing a section, and deleting an object. The first imported model establishes the scene baseline, so Undo does not close the panel or remove that first model. **Statistics** opens copyable measurements for the selected object. **Delete** removes only the selected row; use **File → Clear STL** to remove the complete STL scene.
1545+
1546+
#### How do STL base points and bounding-box picks work?
1547+
1548+
The **Base point** selector chooses the point used as the pivot for rotation, mirroring and scaling:
1549+
1550+
- **Center** sets it to the center of the source mesh's bounding box.
1551+
- **Bounding-box corner** sets it to the source mesh's minimum X, Y and Z corner and displays the transformed object's axis-aligned bounding box in the Base Point color.
1552+
- **Origin** sets the point to model coordinates `(0, 0, 0)`.
1553+
- **Custom** enables the X/Y/Z fields; enter coordinates in model space and press **Set base point**.
1554+
1555+
When the bounding box is displayed, its eight corners are picking points. Hold **Shift** and left-click a corner in the 3D plot to move the base point there. The picked point becomes larger and cyan; the other seven corner markers remain in the Base Point color. Picking changes the base point to a custom point, while keeping the box visible so another corner can be picked. Choosing Center or Origin exits bounding-box picking.
1556+
1557+
The **Position** page shows the current base point's world position. Enter a target X/Y/Z there and use **Move base point here** to place the pivot at those world coordinates. Moving changes the object's transform while preserving its shape.
1558+
1559+
#### How do I position and transform an STL model?
1560+
1561+
On **Transform**, select an axis and angle to rotate around the current base point. **Mirror** reflects the object across the plane whose normal is the selected X, Y or Z axis, passing through the base point. **Scale** applies a uniform factor around that point. These operations preserve the source STL and update the scene object's transform; they do not modify the original file on disk.
1562+
1563+
#### How do STL arrays work?
1564+
1565+
**Circular array** creates the requested number of copies around a selected axis and center, spread over the total angle. With **Rotate copies** enabled, each copy rotates with its position. When disabled, each copy keeps its orientation and distributes the current base point around the circle. A full 360-degree array spaces copies evenly without duplicating the first copy at the end.
1566+
1567+
**Rectangular array** creates copies along X, Y and Z. Set the copy count and step for each axis; the resulting array includes the original object. Array creation is one STL history action and can be undone.
1568+
1569+
#### How do I make a 3D section through an STL model?
1570+
1571+
On **Section**, choose X, Y or Z for the cutting plane, enter its coordinate and choose which side to keep. The initial coordinate is the midpoint of the selected model's world-space bounding box along that axis. **Apply section** clips the solid in 3D and closes the cut where the mesh produces a closed contour; the cut model remains visible over the source toolpath. **Clear section** restores the full STL. Applying and clearing a section are undoable STL scene actions.
1572+
1573+
#### What does STL Statistics report, and how do I display inches?
1574+
1575+
**Statistics** reports surface area, volume, center of mass, world-space coordinate bounds and per-axis lengths. Bounds are written explicitly as `Xmin`, `Xmax` and `Length` (and likewise for Y and Z). The **Inches** checkbox at the lower left of the dialog converts all reported lengths, coordinates, area and volume while leaving the mesh unchanged. Unchecked values display in millimetres; checked values use inches, square inches and cubic inches.
1576+
1577+
STL files do not encode a unit system, so these labels are display units and do not determine the source model's real-world scale. Surface area and bounding box are available for open meshes. Volume and center of mass require a closed mesh with consistently oriented faces; otherwise the dialog reports them as undefined.
1578+
15121579
### How do I change letter case or mark optional blocks?
15131580

15141581
Use **Edit → Uppercase** (`Ctrl+Shift+U`) or **Edit → Lowercase** (`Ctrl+U`), or their toolbar buttons, to convert selected text. With no selection, they convert the entire editor document. Their shortcuts can be changed in Options.
@@ -1517,7 +1584,7 @@ Select one or more blocks and press **Ctrl+/** to add `/` at the start of each s
15171584

15181585
### How do I print the plot?
15191586

1520-
Use **File → Print** (`Ctrl+P`) or the Print button in the File toolbar. The app captures the current plot view with a white background, faint grid and black toolpath, then restores the on-screen theme. The landscape print preview centers and scales the image to fit the printable area. **FAQ** opens with `F3`, and **Grid** toggles with `F4` by default.
1587+
Use **File → Print** (`Ctrl+P`) or the Print button in the File toolbar. The app prints sharp vector lines in the current camera orientation, fitted to a landscape page. Printing ignores the playback slider and does not hide lines behind an imported STL. In **Options → Plot**, you can show or hide rapid moves, render them dashed or solid, and color all moves by tool; Print follows those choices. **FAQ** opens with `F3`, and **Grid** toggles with `F4` by default.
15211588

15221589
### Which fixed views are available?
15231590

0 commit comments

Comments
 (0)