added UVtools patch
This commit is contained in:
192
UVtools/Readme.md
Normal file
192
UVtools/Readme.md
Normal file
@@ -0,0 +1,192 @@
|
||||
# UVtools PCB Exposure CLI — Build & Usage Guide
|
||||
|
||||
This guide covers building a wrapper for the`UVtoolsCmd`, for headless Gerber → `.pm4n` (or any slicer format) conversion on Ubuntu.
|
||||
|
||||
> **Note:** The UVtools maintainer is implementing an official equivalent via
|
||||
> the generic `run` command and a new `FileArray` reflection property
|
||||
> (`-p FileArray=file.gbr`). Once that ships in a release
|
||||
> ([issue 1127](https://github.com/sn4k3/UVtools/issues/1127)), you can switch to
|
||||
> `pcb-expose-official.sh` and skip the patch/compile steps entirely — see
|
||||
> [Option B](#option-b-official-release-no-compiling-required) below.
|
||||
|
||||
---
|
||||
|
||||
## Option A: Patched local build (`pcb-expose` command)
|
||||
|
||||
### 1. Install .NET SDK
|
||||
|
||||
```bash
|
||||
sudo snap install dotnet
|
||||
export DOTNET_ROOT=/var/snap/dotnet/common/dotnet
|
||||
dotnet --version
|
||||
```
|
||||
|
||||
Add the `export` line to your `~/.bashrc` so it persists across shells:
|
||||
|
||||
```bash
|
||||
echo 'export DOTNET_ROOT=/var/snap/dotnet/common/dotnet' >> ~/.bashrc
|
||||
```
|
||||
|
||||
### 2. Clone the repo
|
||||
|
||||
```bash
|
||||
cd ~/proj
|
||||
git clone --depth 1 https://github.com/sn4k3/UVtools.git
|
||||
cd UVtools
|
||||
```
|
||||
|
||||
### 3. Apply the patch
|
||||
|
||||
Copy `pcb-expose.patch` into the repo root, then:
|
||||
|
||||
```bash
|
||||
git apply ../kicad2msla/UVtools/pcb-expose.patch
|
||||
```
|
||||
|
||||
This does two things:
|
||||
- Adds `UVtools.Cmd/Symbols/PcbExposeCommand.cs` (new `pcb-expose` subcommand)
|
||||
- Registers it in `UVtools.Cmd/Program.cs`
|
||||
|
||||
Verify it applied cleanly:
|
||||
|
||||
```bash
|
||||
git add .
|
||||
git status
|
||||
# modified: UVtools.Cmd/Program.cs
|
||||
# new file: UVtools.Cmd/Symbols/PcbExposeCommand.cs
|
||||
```
|
||||
|
||||
### 4. Restore & build
|
||||
|
||||
```bash
|
||||
dotnet restore
|
||||
|
||||
dotnet publish UVtools.Cmd/UVtools.Cmd.csproj \
|
||||
-c Release \
|
||||
-r linux-x64 \
|
||||
--self-contained false \
|
||||
-o ./publish/
|
||||
```
|
||||
|
||||
### 5. Copy the OpenCV native library
|
||||
|
||||
The published output doesn't include `libcvextern.so` — copy it from the repo:
|
||||
|
||||
```bash
|
||||
cp build/platforms/linux-x64/libcvextern.so ./publish/
|
||||
```
|
||||
|
||||
### 6. Test it
|
||||
|
||||
```bash
|
||||
./publish/UVtoolsCmd pcb-expose \
|
||||
~/proj/kicad2msla/Dummy.pm4n \
|
||||
~/proj/kicad2msla/gerbers/Flow_Controller_Panel-Front.gtl \
|
||||
--invert \
|
||||
--mirror \
|
||||
--exposure 120 \
|
||||
--output ~/proj/kicad2msla/Flow_Controller_Panel-Front.pm4n
|
||||
```
|
||||
|
||||
### 7. Install the wrapper
|
||||
|
||||
Copy `pcb-expose-patched.sh` somewhere on your `$PATH`, e.g.:
|
||||
|
||||
```bash
|
||||
# Copy the script
|
||||
cp ~/proj/kicad2msla/UVtools/pcb-expose-patched.sh ~/.local/bin
|
||||
# Make it executable
|
||||
chmod +x ~/.local/bin/pcb-expose-patched.sh
|
||||
# Create a symlink
|
||||
ln -s ~/.local/bin/pcb-expose-patched.sh ~/.local/bin/pcb-expose.sh
|
||||
```
|
||||
|
||||
By default the wrapper looks for the build at `~/proj/UVtools/publish/UVtoolsCmd`.
|
||||
If yours is elsewhere, either edit the `UVTOOLSCMD` variable at the top of the
|
||||
script, or set it as an environment variable each time:
|
||||
|
||||
```bash
|
||||
export UVTOOLSCMD=~/proj/UVtools/publish/UVtoolsCmd
|
||||
```
|
||||
|
||||
### 8. Usage
|
||||
|
||||
```bash
|
||||
pcb-expose.sh ~/proj/kicad2msla/Dummy.pm4n \
|
||||
~/proj/kicad2msla/gerbers/Flow_Controller_Panel-Front.gtl \
|
||||
--invert --mirror --exposure 120 \
|
||||
--output ~/proj/kicad2msla/Flow_Controller_Panel-Front.pm4n
|
||||
```
|
||||
|
||||
Multiple files / per-file polarity inversion / merging into one layer:
|
||||
|
||||
```bash
|
||||
pcb-expose.sh Dummy.pm4n \
|
||||
Board-F.Cu.gtl Board-B.Cu.gtl \
|
||||
--merge --invert-polarity --mirror --exposure 120 \
|
||||
--output Board-combined.pm4n
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Option B: Official release (no compiling required)
|
||||
|
||||
Once the maintainer's `FileArray` property ships in an official UVtools
|
||||
release:
|
||||
|
||||
### 1. Download & install the release
|
||||
|
||||
Grab the Linux release from the
|
||||
[UVtools releases page](https://github.com/sn4k3/UVtools/releases) and
|
||||
extract it, e.g. to `~/UVtools/`. `libcvextern.so` is bundled in official
|
||||
releases, so no extra steps are needed there.
|
||||
|
||||
### 2. Install the wrapper
|
||||
|
||||
```bash
|
||||
# Copy the script
|
||||
cp ~/proj/kicad2msla/UVtools/pcb-expose-official.sh ~/.local/bin
|
||||
# Make it executable
|
||||
chmod +x ~/.local/bin/pcb-expose-official.sh
|
||||
# Create a symlink
|
||||
ln -s ~/.local/bin/pcb-expose-official.sh ~/.local/bin/pcb-expose.sh
|
||||
```
|
||||
|
||||
By default it looks for `~/UVtools/UVtoolsCmd`. Override with:
|
||||
|
||||
```bash
|
||||
export UVTOOLSCMD=~/UVtools/UVtoolsCmd
|
||||
```
|
||||
|
||||
### 3. Usage
|
||||
|
||||
Same interface as Option A (minus `--invert-polarity`, which the official
|
||||
`FileArray` property doesn't support per-file):
|
||||
|
||||
```bash
|
||||
pcb-expose.sh ~/proj/kicad2msla/Dummy.pm4n \
|
||||
~/proj/kicad2msla/gerbers/Flow_Controller_Panel-Front.gtl \
|
||||
--invert --mirror --exposure 120 \
|
||||
--output ~/proj/kicad2msla/Flow_Controller_Panel-Front.pm4n
|
||||
```
|
||||
|
||||
Internally this runs:
|
||||
|
||||
```bash
|
||||
UVtoolsCmd run Dummy.pm4n PCBExposure \
|
||||
-p FileArray=Board-F.Cu.gtl \
|
||||
-p InvertColor=true \
|
||||
-p Mirror=true \
|
||||
-p ExposureTime=120 \
|
||||
--output Board-F.Cu.pm4n
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Files in this bundle
|
||||
|
||||
| File | Purpose |
|
||||
|---|---|
|
||||
| `pcb-expose.patch` | `git apply`-able patch adding the `pcb-expose` command (Option A) |
|
||||
| `pcb-expose-patched.sh` | Wrapper for the patched local build |
|
||||
| `pcb-expose-official.sh` | Wrapper for the official release using `run` + `FileArray` |
|
||||
Reference in New Issue
Block a user