Skip to content

contributing

Christophe Barlieb edited this page May 5, 2026 · 2 revisions

Contributing

This page covers what you need to know to contribute code, post-processor changes, or wiki edits to CCL_Clay3DP. The audience is split: lab members + interested external forkers.

Dev environment

  • Windows 10 or 11 (64-bit)
  • Rhino 8 (with the plugin loaded for testing)
  • .NET Framework 4.8 SDK (Visual Studio 2022 includes it; standalone via the .NET Framework Developer Pack)
  • Visual Studio 2022 or VS Code with C# Dev Kit — the solution is 3DP.sln at the repo root
  • Python 3.x with the RoboDK API (typically C:\RoboDK\Python)
  • RoboDK running locally for end-to-end testing
git clone https://github.com/CyberCraftLab/CCL_Clay3DP.git
cd ccl_clay3dp/CCL_Clay3DP
dotnet build

The output bin/Debug/CCL_Clay3DP.dll can be loaded in Rhino via _PlugInManager → Install…. Close Rhino before re-building — Rhino locks loaded DLLs.

📷 VS 2022 / VS Code with the solution open, build output panel showing a successful build.

Architecture before code

Before changing anything non-trivial, read ARCHITECTURE.md — eight Mermaid diagrams + tables documenting:

  • Folder map and dependency direction
  • Every panel button and what it triggers
  • The slice pipeline (RunPipeline is the single entry point)
  • The Send-to-RoboDK pipeline
  • Settings flow + class diagram
  • Cached state in the panel (fields that span method calls)
  • "Where to look when fixing X" cheat sheet
  • Recent slice history (context for why decisions were made)

Lab quirks (read these before opening an MR)

These conventions exist for hardware reasons. Violating them either breaks the cell or produces unsafe motion.

S1 idle, F600 plunge

The post-processor emits S1 (extruder off) at the end of every path and F600 (mm/min) on Z plunge / retract. Never override either — see G-code conventions for why.

G-code only via the official RoboDK post-processor

No hand-written or hand-edited .nc files for CCL-ALTAR-01. The pipeline is:

Rhino geometry → CCL_Clay3DP plugin → RoboDK → KUKA CNC ISG post → .nc file

If you need a G-code feature the post doesn't emit, modify the post, regenerate, verify on scrap, then deploy. See G-code conventions.

Eto popup centering

All panel-originated popups must use:

CenterOnActiveScreen(dlg);
dlg.ShowModal();              // parentless

Never dlg.ShowModal(this) — anchoring to the docked panel causes popups to clip when the panel is narrow or on a screen edge. The convention is consolidated in CenterOnActiveScreen's docstring; respect it.

Eto layout gotchas worth knowing:

  • Use Size, not MinimumSize, to constrain wrap labels — MinimumSize doesn't always trigger reflow.
  • Add a null soaker row above any button row in TableLayout — without it the button row inherits weird vertical stretching.

No personal data on the wiki

Per OTH IT guidelines, no laptop hostnames, full personal-account paths, or other identifying data appear in wiki content or commit metadata. The wiki's "Last edited by" indicator on GitHub bypasses .mailmap, so:

  • New wiki clones must set local user.name / user.email to the canonical identity (Christophe Barlieb / christophe.barlieb@oth-regensburg.de). The global git config is fixed as of 2026-05-03 but verify per-clone if you cloned earlier.
  • Screenshots must be scrubbed for window titles, taskbar usernames, and RoboDK license info.

Branching

  • main — released and release-candidate work; protected on GitHub
  • Feature branches — short-lived, named <area>-<feature> (e.g. settings-ui, audit-redact-settings-ini)
  • Tags — annotated, named vX.Y.Z-alpha (or vX.Y.Z post-alpha)

For destructive history operations (filter-repo, force-push, tag rewrite), GitHub branch protection must be toggled before the push, and --force-with-lease needs an established remote-tracking ref via git fetch first.

Adapting to your own lab

If you're forking CCL_Clay3DP for a different cell, the lab-coupled bits are concentrated in:

File What's lab-specific
Models/RobotSettings.cs Default RoboDK paths, station template, nozzle dropdown options
RoboDK/RoboDKSubprocess.cs Robot / tool / frame names, post-processor filename, 3DP_Template machining-project assumption
Settings/SettingsDialog.cs Nozzle dropdown values (T10/T11/T12)
Your copy of the post-processor KUKA-specific G-code dialect, lead compensation, dwell unit conversion

The slicer (Core/), printability analyzer (Analysis/), and plugin scaffolding (UI/, Settings/, Commands/) are generic and should run on any Rhino 8 install without changes.

Credit back to the CyberCraft Lab and Prof. Barlieb is appreciated but not legally required (Apache-2.0).

Wiki contributions

The wiki lives at https://github.com/CyberCraftLab/CCL_Clay3DP/wiki/ and is backed by a separate git repo at the same URL with .wiki.git. Two ways to edit:

  • Web UI — edit any page directly on GitHub. Saves to a single Update <page> commit.
  • Local clonegit clone <wiki-url>.wiki.git, edit markdown files, commit + push. Better for batch changes or when adding multiple linked pages.

The sidebar (_sidebar.md) controls the persistent left rail; update it when you add a new top-level page.

Mermaid renders natively. Image attachments live under uploads/ (drag-and-drop in the web editor or commit them directly to the wiki repo).

Future direction

A Grasshopper component pair under the CyberCraft Toolbox umbrella is planned to address cross-platform compatibility (macOS support) and to unify Clay3DP, Corals, and TreeSupports as separate-but-related components on one CyberCraft GH tab. Track this work via GitHub issues when scoping begins.

Reporting issues

  • Bugs — GitHub Issues on the project. Include Rhino version, RoboDK version, steps to reproduce, and the %TEMP%/ccl_clay3dp_<TIMESTAMP>.log if the issue is in the Send pipeline.
  • Hardware-side issues (calibration drift, ratio-pot questions) — flag in the lab study log and ping Prof. Barlieb.
  • Security / IT compliance issues — do not open as a public Issue. Email christophe.barlieb@oth-regensburg.de directly.

Clone this wiki locally