Skip to content

Commit 188feab

Browse files
authored
UI polish: sketch snap, sketch/shape list UX, grid settings, docs (#112)
## Summary UI and sketch workflow polish on `Trailcode/ui_improve4` (9 commits vs `main`): - **Sketch snap:** simplify `try_get_node_idx_snap` to axis-guide feedback; restore direct snap to nodes on other visible sketches; fix dimension-tool hover mutating stored node coordinates; remove dead vertex snap annotation code. - **Sketch List:** changing the current sketch no longer forces **Sketch inspection mode** when a sketch tool is already active (e.g. **Add line** stays active). - **Shape List:** hovering a visible shape row highlights that shape in the 3D view; configurable hover color in **Settings**; pane highlight styling. - **3D view grid:** Settings exposes rectangular grid step and graphic extent / Z offset (`occt_view` JSON). - **Docs / discoverability:** new **Sketch snapping** section in `usage-sketch.md`; **mid-point snap** terminology in `usage.md` and Add node docs; Sketch List and settings cross-links; GitHub Pages landing page (`web/index.html`) and sync script; Read the Docs / SEO metadata updates. Closes #111. ## Commits | Commit | Description | | --- | --- | | `66f7f24` | Shape List hover drives 3D shape highlight | | `0bd8936` | Shape List pane highlight; grid + hover color settings | | `eda08e7` | SEO / GitHub Pages landing page and doc metadata | | `4850d84` / `d126307` | Sketch snap simplification (axis guides) | | `98dafc6` | User guide: sketch snapping section | | `bae40ae` | Agent issue draft (#111) | | `7c4bd04` | Sketch List: preserve active sketch tool when switching sketches | | `472d88f` | Docs: **mid-point snap** overview in `usage.md`; aligned Add node wording | ## Test plan - [x] Sketch mode: move cursor near nodes — axis guides appear; vertex locks when X and Y align to the same point. - [x] Dimension tool: hover a node — guides show; node coordinates do not drift. - [x] Two visible sketches: snap to a node on the other sketch while editing the current one. - [x] Add node: **mid-point snap** — click near a straight edge (not at ends); node lands on the segment and the edge splits in two. - [x] Sketch List: in **Add line**, switch current sketch — tool stays **Add line** (not inspection). - [x] Sketch List: from **Normal**, switch current sketch — enters **Sketch inspection**. - [x] Shape List: hover a visible shape row — shape highlights in 3D; color follows **Settings**. - [x] Settings: grid step / extent changes persist and affect the view grid. - [x] `EzyCad_tests.exe --gtest_filter=Sketch_test.*` — all pass.
1 parent 5237d54 commit 188feab

25 files changed

Lines changed: 817 additions & 160 deletions

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
2929

3030
### Changed
3131

32+
- **Sketch snap:** unified axis-guide feedback in sketch mode; direct snap to nodes on **other visible sketches** (projected onto the current plane) restored; dimension-tool node hover no longer mutates stored node coordinates.
33+
- **Documentation:** [usage-sketch.md](usage-sketch.md#sketch-snapping) adds a **Sketch snapping** section (axis alignment, vertex lock, cross-sketch targets, add-node edge interior). [usage.md](usage.md#sketch-list) clarifies Sketch List **Nodes** vs topology vertices. [usage-settings.md](usage-settings.md#sketch-tools) links to the snap section.
3234
- **View roll** (**Shift**+**NumPad 4**/**6**, main **4**/**6**, or **Left**/**Right** arrow): same roll as **Shift**+**4**/**6**; helps when Num Lock makes the numpad send arrows. Handled on key **repeat** as well as press; **Shift**+main **4**/**6** no longer fall through to the selection filter.
3335
- **Keyboard zoom** (**NumPad +/-**, **Shift+=**, **-**): each repeated OS key event zooms again so holding the key zooms continuously (uses GLFW key repeat).
3436
- **Zoom:** **Zoom scroll scale** in Settings replaces the hard-coded wheel multiplier (**4**); stored as **`gui.view_zoom_scroll_scale`**. Hold **Shift** while scrolling or using +/- for Blender-style finer zoom (**x0.1** on the delta).

README.md

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,16 @@
11
# EzyCad
22

3+
[![GitHub](https://img.shields.io/github/stars/trailcode/EzyCad?style=social)](https://github.com/trailcode/EzyCad)
4+
[![Documentation](https://img.shields.io/badge/docs-readthedocs-blue)](https://ezycad.readthedocs.io/en/latest/usage.html)
5+
[![WebAssembly](https://img.shields.io/badge/run_in-browser-WebAssembly-green)](https://trailcode.github.io/EzyCad/EzyCad.html)
6+
7+
**Repository:** [https://github.com/trailcode/EzyCad](https://github.com/trailcode/EzyCad)
8+
39
![EzyCad splash screen](doc/gen/AI-gen-splashscreen_05_01_2026_512.png)
410

5-
EzyCad (Easy CAD) is a CAD application for hobbyist machinists to design and edit 2D and 3D models for machining projects. It supports creating precise parts with tools for sketching, extruding, and applying geometric operations, using OpenGL, ImGui, and Open CASCADE Technology (OCCT). Export models to formats like STEP or STL for CNC machines or 3D printers, or [run EzyCad in your browser (WebAssembly)](https://trailcode.github.io/EzyCad/EzyCad.html).
11+
EzyCad (Easy CAD) is an open-source CAD application for hobbyist machinists to design and edit 2D and 3D models for machining projects. It supports creating precise parts with tools for sketching, extruding, and applying geometric operations, using OpenGL, Dear ImGui, and Open CASCADE Technology (OCCT). Export models to formats like STEP or STL for CNC machines or 3D printers, or [run EzyCad in your browser (WebAssembly)](https://trailcode.github.io/EzyCad/EzyCad.html). Project home: [trailcode.github.io/EzyCad](https://trailcode.github.io/EzyCad/).
12+
13+
> **Not EZCAD laser software:** [EzyCad](https://github.com/trailcode/EzyCad) (with a **y**) is hobbyist mechanical CAD built on OCCT — unrelated to EZCAD2/EZCAD3 laser marking products.
614
715
## Features
816
- 2D and 3D modeling capabilities.
@@ -77,15 +85,18 @@ Ensure the following dependencies are installed:
7785
- Build the project.
7886
- Serve the WebAssembly: `python.exe -m http.server 8000`
7987
- Or build and serve: `ninja && python.exe -m http.server 8000`
88+
- **GitHub Pages HTML:** After changing `web/index.html` or `web/EzyCad.html`, sync to [trailcode.github.io](https://github.com/trailcode/trailcode.github.io) with `scripts/sync-github-pages-html.ps1` (see script header).
8089
- Dear ImGui under `third_party/imgui/` carries EzyCad-specific changes (font rendering); see [In-tree third-party libraries](#in-tree-third-party-libraries) at the end of this README.
8190

8291
### Artwork
8392
- Icons from: https://wiki.freecad.org/Artwork
8493

8594
## Support and Contributions
86-
- Report issues or suggest features on the GitHub repository.
87-
- Contribute by developing features and fixing bugs. Pull requests are welcome!
95+
- **Project home:** [trailcode.github.io/EzyCad](https://trailcode.github.io/EzyCad/)
96+
- Report issues or suggest features on the [GitHub repository](https://github.com/trailcode/EzyCad).
97+
- Contribute by developing features and fixing bugs. Pull requests are welcome!
8898
- Additional resources, including video tutorials and online documentation, are linked in [usage.md](usage.md).
99+
- Outreach draft posts (forums, Reddit, awesome lists): [agents/discoverability-outreach.md](agents/discoverability-outreach.md).
89100

90101
### We need development help
91102
EzyCad is maintained by a small team and we would love more contributors. If you can help with features, bug fixes, documentation, or testing - please jump in. Every contribution helps move the project forward.

agents/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,5 @@ To use a note in **Cursor**, copy or symlink the relevant file into your user or
77
| File | Intent |
88
| --- | --- |
99
| [ezycad-ascii-source.md](ezycad-ascii-source.md) | ASCII-only comments and strings in `src/`; points at `ezycad_code_style.md` and `scripts/check-nonascii-src.ps1`. |
10+
| [discoverability-outreach.md](discoverability-outreach.md) | Draft posts for forums, Reddit, awesome lists (SEO / backlinks). |
1011
| *(repo root)* [ezycad_doc_style.md](../ezycad_doc_style.md) | User guides, Read the Docs, images, in-app doc URLs. |

agents/discoverability-outreach.md

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
# EzyCad discoverability — outreach drafts
2+
3+
Copy-paste templates for posts that link back to the project. Update URLs or screenshots before publishing.
4+
5+
**Canonical links**
6+
7+
| Resource | URL |
8+
| --- | --- |
9+
| GitHub | https://github.com/trailcode/EzyCad |
10+
| Documentation | https://ezycad.readthedocs.io/ |
11+
| Landing page | https://trailcode.github.io/EzyCad/ |
12+
| Run in browser (WebAssembly) | https://trailcode.github.io/EzyCad/EzyCad.html |
13+
| Releases | https://github.com/trailcode/EzyCad/releases |
14+
15+
**Search tip for others:** `trailcode EzyCad` or `site:github.com EzyCad trailcode`
16+
17+
---
18+
19+
## Open CASCADE forum (showcase)
20+
21+
**Title:** EzyCad — hobbyist CAD with OCCT + Dear ImGui + OpenGL (WebAssembly in the browser)
22+
23+
**Body:**
24+
25+
Hello,
26+
27+
I've been building **EzyCad** (Easy CAD), an open-source CAD app aimed at hobbyist machinists. It uses Open CASCADE for geometry, Dear ImGui for the UI, and OpenGL/GLFW for rendering. Desktop (Windows) and a **WebAssembly** build are available.
28+
29+
- Source: https://github.com/trailcode/EzyCad
30+
- Docs: https://ezycad.readthedocs.io/
31+
- Run in browser: https://trailcode.github.io/EzyCad/EzyCad.html
32+
33+
If you're integrating OCCT with ImGui in one GLFW window, some of our render-loop choices may be useful as a reference. Feedback and contributors welcome.
34+
35+
---
36+
37+
## Reddit (r/hobbycnc, r/CNC, r/opencascade)
38+
39+
**Title:** EzyCad — open-source hobbyist CAD (OCCT + ImGui), runs in the browser
40+
41+
**Body:**
42+
43+
I maintain **EzyCad**, a small open-source CAD project for designing parts for machining/3D printing. Stack: Open CASCADE, Dear ImGui, OpenGL. Exports STEP/STL.
44+
45+
- GitHub: https://github.com/trailcode/EzyCad
46+
- Run in browser, no install: https://trailcode.github.io/EzyCad/EzyCad.html
47+
48+
Looking for testers and contributors. Not related to EZCAD laser software — name is EzyCad with a "y".
49+
50+
---
51+
52+
## Awesome list PR (e.g. awesome-opencascade or CAD lists)
53+
54+
**One-line description:**
55+
56+
[EzyCad](https://github.com/trailcode/EzyCad) — Open-source hobbyist CAD using OCCT, Dear ImGui, and OpenGL; desktop and WebAssembly builds.
57+
58+
---
59+
60+
## YouTube video description block
61+
62+
```
63+
EzyCad — open-source hobbyist CAD (Open CASCADE / OCCT, Dear ImGui, OpenGL)
64+
65+
GitHub: https://github.com/trailcode/EzyCad
66+
Documentation: https://ezycad.readthedocs.io/
67+
Run in browser: https://trailcode.github.io/EzyCad/EzyCad.html
68+
69+
Keywords: EzyCad, trailcode, OCCT, Open CASCADE, ImGui, CAD, CNC, machining, WebAssembly
70+
```
71+
72+
---
73+
74+
## Show HN (Hacker News)
75+
76+
**Title:** Show HN: EzyCad – open-source hobbyist CAD with OCCT and ImGui (runs in the browser)
77+
78+
**Body:**
79+
80+
EzyCad is a CAD app I'm building for hobbyist machinists: sketch, extrude, export STEP/STL. Uses Open CASCADE, Dear ImGui, OpenGL. You can run it in the browser via Emscripten or build from source on Windows.
81+
82+
https://trailcode.github.io/EzyCad/
83+
https://github.com/trailcode/EzyCad
84+
85+
Happy for feedback on UX, performance, and what would make this useful alongside FreeCAD/Fusion.

agents/issues/006-pr-body.txt

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
### Summary
2+
3+
Simplify sketch node snapping around a single axis-guide model, fix a dimension-tool hover bug, restore direct snap to nodes on other visible sketches, and document how snap works for users.
4+
5+
### Problem
6+
7+
- `try_get_node_idx_snap` had overlapping paths (direct vertex snap, outside snap, axis snap) and dead annotation code (`update_node_snap_anno_`, `m_snap_anno`).
8+
- `try_pick_existing_node` passed a stored node reference into snap logic, which could mutate sketch geometry during dimension-tool hover.
9+
- The recent snap simplification dropped direct snap to **outside** sketch points (nodes on other visible sketches).
10+
- User guides described snap only generically ("snaps to nodes and geometry") with no explanation of axis alignment vs vertex lock or cross-sketch targets.
11+
12+
### Implemented scope
13+
14+
**Code (`src/sketch_nodes.cpp`, `src/sketch_nodes.h`):**
15+
16+
- Unified snap feedback through axis guides (`show_snap_guides_at_`, `update_axis_snap_anno_`).
17+
- Shared vertex snap threshold helper (`vertex_snap_threshold_sq_`).
18+
- **Fix:** dimension pick hover uses `show_snap_guides_at_` on a copy of the picked position (no mutation of stored nodes).
19+
- **Restore:** direct snap to `m_outside_snap_pts` (other visible sketches, projected onto the current plane).
20+
- **Keep:** in-sketch vertex lock via dual-axis convergence (not proximity snap) so add-node edge-interior placement still works.
21+
- Removed dead `update_node_snap_anno_`, `m_snap_anno`, `m_last_snap_pt`.
22+
23+
**Documentation:**
24+
25+
- `usage-sketch.md` — new **Sketch snapping** section (axis guides, vertex lock, edge interior, cross-sketch).
26+
- `usage-settings.md` — link from Sketch options to snap section.
27+
- `usage.md` — Sketch List **Nodes** clarifies user-placed points only.
28+
- `CHANGELOG.md` — `[Unreleased]` entries.
29+
30+
### Acceptance criteria
31+
32+
- [ ] Dimension tool hover near a node shows snap guides without moving stored node coordinates.
33+
- [ ] Snapping works to nodes on other **visible** sketches (e.g. polar duplicate, multi-sketch alignment).
34+
- [ ] Add-node edge-interior split still works (near-miss onto segment interior).
35+
- [ ] All `Sketch_test` cases pass.
36+
- [ ] User guide **Sketch snapping** section matches in-app behavior.
37+
38+
### Files touched
39+
40+
- `src/sketch_nodes.cpp`
41+
- `src/sketch_nodes.h`
42+
- `usage-sketch.md`
43+
- `usage-settings.md`
44+
- `usage.md`
45+
- `CHANGELOG.md`
46+
47+
### Related
48+
49+
- Prior simplification: axis-only snap model in `try_get_node_idx_snap`.
50+
- #102 — polar duplicate sketch snap expectations.
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
# Sketch snap unification, fixes, and documentation
2+
3+
**Opened on GitHub:** https://github.com/trailcode/EzyCad/issues/111
4+
5+
**Suggested labels:** `enhancement`, `sketch`, `docs`
6+
7+
---
8+
9+
## Title (GitHub)
10+
11+
Sketch snap: unify axis guides, fix dimension hover, restore cross-sketch snap, document behavior
12+
13+
## Body (GitHub)
14+
15+
### Summary
16+
17+
Simplify sketch node snapping around a single axis-guide model, fix a dimension-tool hover bug, restore direct snap to nodes on other visible sketches, and document how snap works for users.
18+
19+
### Problem
20+
21+
- `try_get_node_idx_snap` had overlapping paths (direct vertex snap, outside snap, axis snap) and dead annotation code (`update_node_snap_anno_`, `m_snap_anno`).
22+
- `try_pick_existing_node` passed a stored node reference into snap logic, which could mutate sketch geometry during dimension-tool hover.
23+
- The recent snap simplification dropped direct snap to **outside** sketch points (nodes on other visible sketches).
24+
- User guides described snap only generically ("snaps to nodes and geometry") with no explanation of axis alignment vs vertex lock or cross-sketch targets.
25+
26+
### Implemented scope
27+
28+
**Code (`src/sketch_nodes.cpp`, `src/sketch_nodes.h`):**
29+
30+
- Unified snap feedback through axis guides (`show_snap_guides_at_`, `update_axis_snap_anno_`).
31+
- Shared vertex snap threshold helper (`vertex_snap_threshold_sq_`).
32+
- **Fix:** dimension pick hover uses `show_snap_guides_at_` on a copy of the picked position (no mutation of stored nodes).
33+
- **Restore:** direct snap to `m_outside_snap_pts` (other visible sketches, projected onto the current plane).
34+
- **Keep:** in-sketch vertex lock via dual-axis convergence (not proximity snap) so add-node edge-interior placement still works.
35+
- Removed dead `update_node_snap_anno_`, `m_snap_anno`, `m_last_snap_pt`.
36+
37+
**Documentation:**
38+
39+
- `usage-sketch.md` — new **Sketch snapping** section (axis guides, vertex lock, edge interior, cross-sketch).
40+
- `usage-settings.md` — link from Sketch options to snap section.
41+
- `usage.md` — Sketch List **Nodes** clarifies user-placed points only.
42+
- `CHANGELOG.md``[Unreleased]` entries.
43+
44+
### Acceptance criteria
45+
46+
- [ ] Dimension tool hover near a node shows snap guides without moving stored node coordinates.
47+
- [ ] Snapping works to nodes on other **visible** sketches (e.g. polar duplicate, multi-sketch alignment).
48+
- [ ] Add-node edge-interior split still works (near-miss onto segment interior).
49+
- [ ] All `Sketch_test` cases pass.
50+
- [ ] User guide **Sketch snapping** section matches in-app behavior.
51+
52+
### Files touched
53+
54+
- `src/sketch_nodes.cpp`
55+
- `src/sketch_nodes.h`
56+
- `usage-sketch.md`
57+
- `usage-settings.md`
58+
- `usage.md`
59+
- `CHANGELOG.md`
60+
61+
### Related
62+
63+
- Prior simplification commits: axis-only snap model in `try_get_node_idx_snap`.
64+
- `agents/issues/004-polar-dup-sketch-based-reference.md` — polar duplicate sketch snap expectations.
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
## Summary
2+
3+
UI and sketch workflow polish on `Trailcode/ui_improve4` (8 commits vs `main`):
4+
5+
- **Sketch snap:** simplify `try_get_node_idx_snap` to axis-guide feedback; restore direct snap to nodes on other visible sketches; fix dimension-tool hover mutating stored node coordinates; remove dead vertex snap annotation code.
6+
- **Sketch List:** changing the current sketch no longer forces **Sketch inspection mode** when a sketch tool is already active (e.g. **Add line** stays active).
7+
- **Shape List:** hovering a visible shape row highlights that shape in the 3D view; configurable hover color in **Settings**; pane highlight styling.
8+
- **3D view grid:** Settings exposes rectangular grid step and graphic extent / Z offset (`occt_view` JSON).
9+
- **Docs / discoverability:** new **Sketch snapping** section in `usage-sketch.md`; Sketch List and settings cross-links; GitHub Pages landing page (`web/index.html`) and sync script; Read the Docs / SEO metadata updates.
10+
11+
Closes #111.
12+
13+
## Commits
14+
15+
| Commit | Description |
16+
| --- | --- |
17+
| `66f7f24` | Shape List hover drives 3D shape highlight |
18+
| `0bd8936` | Shape List pane highlight; grid + hover color settings |
19+
| `eda08e7` | SEO / GitHub Pages landing page and doc metadata |
20+
| `4850d84` / `d126307` | Sketch snap simplification (axis guides) |
21+
| `98dafc6` | User guide: sketch snapping section |
22+
| `bae40ae` | Agent issue draft (#111) |
23+
| `7c4bd04` | Sketch List: preserve active sketch tool when switching sketches |
24+
25+
## Test plan
26+
27+
- [ ] Sketch mode: move cursor near nodes — axis guides appear; vertex locks when X and Y align to the same point.
28+
- [ ] Dimension tool: hover a node — guides show; node coordinates do not drift.
29+
- [ ] Two visible sketches: snap to a node on the other sketch while editing the current one.
30+
- [ ] Add node: near-miss onto a straight edge interior still splits the edge.
31+
- [ ] Sketch List: in **Add line**, switch current sketch — tool stays **Add line** (not inspection).
32+
- [ ] Sketch List: from **Normal**, switch current sketch — enters **Sketch inspection**.
33+
- [ ] Shape List: hover a visible shape row — shape highlights in 3D; color follows **Settings**.
34+
- [ ] Settings: grid step / extent changes persist and affect the view grid.
35+
- [ ] `EzyCad_tests.exe --gtest_filter=Sketch_test.*` — all pass.

doc/conf.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,25 @@ def _verify_doc_assets() -> None:
6868
copyright = "2026, trailcode"
6969
author = "trailcode"
7070

71+
# Search and social previews (Read the Docs, Google, link unfurlers).
72+
html_title = "EzyCad — open-source hobbyist CAD (OCCT, ImGui, OpenGL)"
73+
html_short_title = "EzyCad"
74+
html_meta = {
75+
"description": (
76+
"EzyCad (Easy CAD) is open-source hobbyist CAD for machining: sketch, "
77+
"extrude, and export STEP/STL using Open CASCADE, Dear ImGui, and OpenGL. "
78+
"Not EZCAD laser marking software."
79+
),
80+
"keywords": (
81+
"EzyCad, CAD, Open CASCADE, OCCT, ImGui, OpenGL, CNC, machining, "
82+
"STEP, STL, WebAssembly, Emscripten, 3D modeling"
83+
),
84+
}
85+
html_theme_options = {
86+
"navigation_depth": 4,
87+
"collapse_navigation": False,
88+
}
89+
7190
extensions = [
7291
"myst_parser",
7392
]

doc/index.rst

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,21 @@ EzyCad documentation
55
:alt: EzyCad splash screen
66
:align: center
77

8-
EzyCad (Easy CAD) is a CAD application for hobbyist machinists. These pages are built from the
9-
Markdown guides in the `EzyCad repository <https://github.com/trailcode/EzyCad>`_.
8+
EzyCad (Easy CAD) is an open-source CAD application for hobbyist machinists. It uses
9+
Open CASCADE Technology (OCCT), Dear ImGui, and OpenGL for 2D/3D modeling and exports
10+
STEP, STL, and other formats for CNC or 3D printing.
11+
12+
**Source:** https://github.com/trailcode/EzyCad
13+
14+
**Run in browser (WebAssembly):** https://trailcode.github.io/EzyCad/EzyCad.html
15+
16+
.. note::
17+
18+
**EzyCad** (with a **y**) is mechanical CAD — not `EZCAD2/EZCAD3 <https://www.ezcad.com/>`_
19+
laser marking software.
20+
21+
These pages are built from the Markdown guides in the
22+
`EzyCad repository <https://github.com/trailcode/EzyCad>`_.
1023

1124
.. toctree::
1225
:maxdepth: 2

ezycad_code_style.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ Use this style when editing or adding C/C++ code in the EzyCad project (files un
1818
- Prefer clear domain prefixes for related member groups (e.g. `m_underlay_*`) instead of mixed short forms.
1919
- **Constants** (e.g. lookup arrays for enums): `c_` prefix (e.g. `c_mode_strs`, `c_chamfer_mode_strs`).
2020
- **Functions / methods**: snake_case (e.g. `add_new_node`, `get_node_exact`, `try_get_node_idx_snap`).
21-
- **Private methods**: snake_case with trailing underscore (e.g. `update_node_snap_anno_`, `try_snap_outside_`).
21+
- **Private methods**: snake_case with trailing underscore (e.g. `update_axis_snap_anno_`).
2222
- **Type aliases**: snake_case with suffix by role, e.g. `*_ptr` for handles (`AIS_Shape_ptr`, `Shp_ptr`), `*_rslt` for result types (`Shp_rslt`). Typedefs like `ScreenCoords` are PascalCase.
2323
- **Macros**: UPPER_SNAKE_CASE (e.g. `EZY_ASSERT`, `EZY_ASSERT_MSG`, `DBG_MSG`).
2424

0 commit comments

Comments
 (0)