Composer: SH-03 mid-hole at Y=45 (upper-third, not centerline)

User confirmed: the two extra clamping holes on the SH-03 long sides
sit at the upper-third position, not the geometric centerline that
I was rendering. Matches the engraved sample plate photos where the
"DISMISS / MUSEUM" row appears just below the middle hole pair.

  before: middle holes at (3, 67) and (82, 67)   ← geometric centre
   after: middle holes at (3, 45) and (82, 45)   ← upper-third

Constants picked up by holePositions(). SH-01 and SH-02 still 4-corner.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
mineracks 2026-05-28 20:45:49 +10:00
parent d7dd748fe4
commit a42a410fd3

View File

@ -347,10 +347,17 @@ const holeDiameterMM = 3.0
// 5.5mm, head/socket 5-6mm).
const holeDangerDiameterMM = 7.0
// sh03MidHoleY is the Y coordinate of the two extra clamping holes on
// the long sides of the SH-03 (Large) plate, measured from the top edge.
// User-confirmed at ~45 mm — upper-third position, not the geometric
// centerline. Matches the physical clamping pattern on real Mineracks
// SH-03 production plates (see engraved sample in roadmap photos).
const sh03MidHoleY = 45.0
// holePositions returns the mounting-hole centres for a given plate.
// SH-01 (Small) and SH-02 (Square) have 4 corner holes; SH-03 (Large)
// adds 2 mid-edge holes on the long sides for extra clamping force
// (the 134mm length needs more than 4-corner support).
// adds 2 mid-edge holes on the long sides at sh03MidHoleY for extra
// clamping force (the 134mm length needs more than 4-corner support).
func holePositions(dims plateDims) [][2]float64 {
w, h := dims.W, dims.H
corners := [][2]float64{
@ -364,8 +371,8 @@ func holePositions(dims plateDims) [][2]float64 {
// falls below the threshold.
if h >= 120 {
corners = append(corners,
[2]float64{holeInsetMM, h / 2},
[2]float64{w - holeInsetMM, h / 2},
[2]float64{holeInsetMM, sh03MidHoleY},
[2]float64{w - holeInsetMM, sh03MidHoleY},
)
}
return corners