mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-09-18 22:42:37 +00:00
Two commits carried across (snaporca 579a9a9162, f68613cfc5). Past about 480 entities a sketch had NO constraints at all and said nothing: libslvs declares MAX_UNKNOWNS = 1024 and is handed every entity in the sketch at two params per point, so the whole system came back TOO_MANY_UNKNOWNS and try_add_constraints rolled the entire inferred batch back. From there no dimension could ever be applied. Constraints only couple entities that share a point, so the solver now falls back — only on TOO_MANY_UNKNOWNS — to solving connected components separately and committing all-or-nothing. The auto-constraint pass batches its Horizontal/Vertical constraints instead of one solve each, which is what kept the bulk path fast once solves started succeeding: a 1204-entity load went 1585 ms -> 562 ms. Plus the scale rungs (a thousand-entity plate drawn on by hand; the heaviest real drawings graded and timed), the --step 1 fix that used to select nothing while reporting a clean run, and scripts/ladder-all.sh as the one-command gate. Parity 17 identical / 8 diverging as expected. Kernel suite here: 188 cases / 2532 assertions, including "a sketch past the solver's unknown limit still solves". snaporca-yww4, snaporca-x6v7, snaporca-j6sr
53 lines
2.1 KiB
Bash
Executable File
53 lines
2.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Every ladder, in one command, as the gate before a push that touched the Design tab.
|
|
#
|
|
# WHY A SCRIPT AND NOT CI. Three of the four rungs need a running application with an OpenGL
|
|
# canvas and synthetic input; GitHub's runners have neither. So the gate is local and explicit:
|
|
# run this, read the last line, and do not push a red one. The kernel suite is the only part CI
|
|
# can carry, and it already does.
|
|
#
|
|
# scripts/ladder-all.sh # kernel + engine + corpus (every 20th) + gestures
|
|
# FULL=1 scripts/ladder-all.sh # corpus over ALL 997 sheets (~25 min)
|
|
# SKIP_GUI=1 scripts/ladder-all.sh # kernel only, for a machine with no rig
|
|
#
|
|
# The rig container is expected to be up with the app running and SNAPORCA_MCP set; bring it up
|
|
# with scripts/gui-session.sh inside it. The corpus lives at /corpus in that container.
|
|
set -uo pipefail
|
|
cd "$(dirname "$0")/.."
|
|
|
|
C="${C:-snaporca-gui}"
|
|
CORPUS="${CORPUS:-/corpus}"
|
|
STEP="${STEP:-20}"
|
|
[ -n "${FULL:-}" ] && STEP=1
|
|
fail=0
|
|
|
|
step() {
|
|
local name="$1"; shift
|
|
echo
|
|
echo "=== $name ==="
|
|
if "$@"; then echo "--- $name OK"; else echo "--- $name FAILED"; fail=1; fi
|
|
}
|
|
|
|
run_in_rig() { # copy the script in fresh, then run it there
|
|
docker cp "$1" "$C:/tmp/$(basename "$1")" >/dev/null || return 1
|
|
shift
|
|
docker exec "$C" python3 "$@"
|
|
}
|
|
|
|
step "kernel suite" scripts/kernel-test.sh --vol "${KVOL:-snaporca_kerneltest}"
|
|
|
|
if [ -z "${SKIP_GUI:-}" ]; then
|
|
step "engine ladder (rungs 1-8, scripted geometry)" \
|
|
run_in_rig scripts/sketch-ladder.py /tmp/sketch-ladder.py
|
|
step "corpus rung (real drawings, every ${STEP}th)" \
|
|
run_in_rig scripts/ladder-corpus.py /tmp/ladder-corpus.py --corpus "$CORPUS" --step "$STEP"
|
|
step "corpus scale rung (the heaviest sheets)" \
|
|
run_in_rig scripts/ladder-corpus.py /tmp/ladder-corpus.py --corpus "$CORPUS" --scale
|
|
step "gesture ladder (mouse and keyboard)" \
|
|
run_in_rig scripts/gui-ladder.py /tmp/gui-ladder.py
|
|
fi
|
|
|
|
echo
|
|
if [ "$fail" -eq 0 ]; then echo "ALL LADDERS HELD"; else echo "AT LEAST ONE LADDER FAILED"; fi
|
|
exit "$fail"
|