Skip to content

soldernerd/LevelApp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

76 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LevelApp

A Windows desktop application for evaluating precision electronic level measurements used in machine tool geometry inspection and granite surface plate qualification.

The software guides the operator through a defined measurement procedure, acquires readings from a precision electronic level instrument, computes a best-fit surface map using least-squares adjustment, detects suspect readings, and displays results graphically.


Features

  • Guided measurement workflow — step-by-step instructions with a live map showing position, orientation arrow, and progress indicator
  • Surface plate qualification — Full Grid and Union Jack measurement strategies for granite surface plates and similar flat objects
    • Full Grid — boustrophedon row and column traversal ensures every interior grid point is measured twice for redundancy
    • Union Jack — eight arms from the centre with configurable segment count; Full (with closure loops) and Circumference variants
    • Least-squares surface fitting — closure errors are distributed optimally across all steps simultaneously
    • Outlier detection — suspect readings flagged automatically when their residual exceeds a configurable sigma threshold (default: 2.5σ)
    • Correction workflow — flagged steps can be re-measured in a guided mini-session; original readings are always preserved
    • 3D surface plot — colour-mapped dot-and-wire visualisation of the fitted height map
  • Parallel Ways — straightness and parallelism evaluation for machine tool beds, slideways, and rail pairs
    • Configurable number of rails, step distance, and optional bridge measurements between rails
    • Forward-only or forward-and-return passes per rail/bridge task
    • Two solver modes: Global Least-Squares and Independent-then-Reconcile
    • Per-rail straightness (peak-to-valley after best-fit line removal) and per-pair parallelism results
  • Flatness / straightness result — peak-to-valley value and residual RMS displayed alongside the plot
  • Project persistence — projects are saved as .levelproj files (JSON), human-readable and version-control friendly
  • Open existing project — load a .levelproj file at any time; if the file contains all readings but no computed result the solver runs automatically on load
  • Preferences — configurable default project folder and Light / Dark / Follow system theme, both remembered across sessions
  • About dialog — Help → About LevelApp shows the current version, copyright, license, and links to the license text and GitHub repository
  • Contextual help — ⓘ flyout buttons on all section headers and algorithmic concepts (least-squares, flagged steps, sigma threshold, correction rounds, etc.); tooltips on all metric labels and input fields
  • Localised UI — full English (en-US) and German (de-DE) localisation; the OS language setting selects the active locale automatically
  • Extensible architecture — geometry modules, measurement strategies, instrument providers and display modules are all plugin-style interfaces; new object types and instruments can be added without touching existing code

Screenshots

(Screenshots coming soon.)


Technology Stack

Concern Choice
Language C# (.NET 8/9)
UI Framework WinUI 3 / Windows App SDK
UI Pattern MVVM
Persistence JSON via System.Text.Json
Bluetooth (planned) Windows.Devices.Bluetooth (WinRT)
USB HID (planned) Windows.Devices.HumanInterfaceDevice (WinRT)

Requirements


Getting Started

Clone and build

git clone https://github.com/soldernerd/LevelApp.git
cd LevelApp

Open LevelApp.slnx in Visual Studio 2022 and build the solution (Ctrl+Shift+B). Run the LevelApp.App project.

Create a project

  1. Enter a project name, operator name and optional notes
  2. Select a geometry type:
    • Surface Plate — enter plate dimensions (mm) and grid size; choose Full Grid or Union Jack strategy
    • Parallel Ways — define two or more rails (label, length, separation), add measurement tasks (along-rail and/or bridge), and choose solver options
  3. Click Start Measurement

Take measurements

The app guides you step by step. For each step it shows:

  • The grid map with the current position highlighted
  • The required instrument orientation (North / South / East / West)
  • A plain-text instruction
  • A reading entry field (mm/m)

Enter the reading from your electronic level and click Accept Reading. Repeat for all steps.

Review results

After all steps are complete the app runs the least-squares solver and displays:

  • A 3D colour-mapped surface plot
  • Peak-to-valley flatness value
  • Residual RMS (σ)
  • Any flagged steps that warrant re-measurement

Project Structure

LevelApp/
├── LevelApp.Core/               # No UI dependencies — fully unit-testable
│   ├── Models/                  # Project, Session, Step, Result, RailDefinition, …
│   ├── Interfaces/              # IMeasurementStrategy, ISurfaceCalculator
│   ├── Geometry/                # StrategyFactory, CalculatorFactory,
│   │                            # Calculators/, SurfacePlate/Strategies/,
│   │                            # ParallelWays/ (strategy + calculator)
│   └── Serialization/           # ProjectSerializer, ObjectValueConverter,
│                                # OrientationConverter
├── LevelApp.App/                # WinUI 3 application
│   ├── Views/                   # ProjectSetupView, MeasurementView,
│   │                            # ResultsView, CorrectionView, Dialogs/
│   ├── ViewModels/              # MVVM view models
│   ├── Controls/                # HelpButton, HelpLabel (reusable UserControls)
│   ├── Services/                # ProjectFileService, SettingsService, ThemeService,
│   │                            # LocalisationService
│   ├── Helpers/                 # ThemeHelper (shared colour resolution for all renderers)
│   ├── Strings/                 # en-US/Resources.resw, de-DE/Resources.resw
│   ├── Styles/                  # ThemeColors.xaml, TextStyles.xaml, ControlStyles.xaml,
│   │                            # HelpButtonStyle.xaml
│   └── DisplayModules/          # SurfacePlot3DDisplay, MeasurementsGridRenderer,
│                                # StrategyPreviewRenderer, ParallelWaysDisplay
├── LevelApp.Tests/              # xUnit unit tests (Core only)
└── docs/
    ├── architecture.md          # Full architecture and design reference
    └── levelproj.md             # .levelproj JSON format reference

Roadmap

  • Union Jack measurement strategy
  • Parallel Ways geometry module (straightness + parallelism for rails/slideways)
  • Light / Dark / Follow system theme with live preview and persistence
  • Contextual help (tooltips + ⓘ flyouts) and en-US / de-DE localisation
  • Parallel Ways correction workflow
  • Heat map display module
  • Numerical table display module
  • Residuals chart display module
  • Bluetooth LE instrument provider
  • USB HID instrument provider
  • Additional geometry modules (squareness, lathe bed, …)
  • PDF report export

Architecture

The full architecture and design rationale is documented in docs/architecture.md. It covers the data model hierarchy, the least-squares algorithm, the guided measurement state machine, the JSON file format with schema versioning, and the plugin interface contracts.


Contributing

Contributions are welcome. Please open an issue to discuss significant changes before submitting a pull request.

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/my-feature)
  3. Commit your changes (git commit -m 'Add my feature')
  4. Push to the branch (git push origin feature/my-feature)
  5. Open a pull request

License

Copyright (C) 2026 Lukas Fässler

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.

About

A GUI application to measure machine geometries using precision digital levels.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages