Instead crosshairs, you can use small vias for your board extremes in Y direction, find the screenset that has "laser zero" functionality, use some Tweakie's code for Local System Rotate (so you can fix your PCB in almost any rotated position), and a small endoscope camera like this one:
https://www.aliexpress.com/item/32255881055.html?spm=a2g0o.productlist.0.0.355e6e5eOM1Cfb&algo_pvid=39d12563-0f6f-413f-8833-c5ebe7c18563&algo_expid=39d12563-0f6f-413f-8833-c5ebe7c18563-0&btsid=0ab6f83915945003200298906e170d&ws_ab_test=searchweb0_0,searchweb201602_,searchweb201603_Code for Local System rotate according to buttona A, B and C (on another computer I made it a single button):
'Button A script;
Zmove = GetOEMDRO(1202)
Code "G0 G53 Z" &Zmove
While IsMoving()
Wend
Call SetOEMDRO(118,0) 'reset system rotate DRO
Code "(Locate Datum then click Button B)" 'message for status bar
Call SetOEMDRO(3,1) 'set slow jog rate to 1%
Call SetUserLed(1102,1) 'open Klaus's video window
'Button B script;
DoOEMButton (1008) 'zero X axis DRO
DoOEMButton (1009) 'zero Y axis DRO
Code "(Locate Reference then click Button C)" 'message for status bar
' Button C script
Sub Main()
X1pos = GetOemDRO(800) 'read x axis DRO
Y1pos = GetOemDRO(801) 'read y axis DRO
If (Y1pos=0) Then GoTo Label1 'avoid divide by zero error
b = Atn(X1pos/Y1pos)*(180/(4*Atn(1))) 'calculate angle
b = b - (b*2) 'change sign (+/-)
Code "G0 X0 Y0" 'move to datum
While IsMoving () 'wait for task to be completed
Wend
' Xmove = 70.850 'enter your camera offset here
Xmove = GetOemDRO(1103)
' Ymove = 1.070 'enter your camera offset here
Ymove = GetOemDRO(1104)
Code "G91 G0 X" &Xmove & "Y" &Ymove 'make incremental move
While IsMoving () 'wait while that happens
Wend
Code "G90" 'go back to absolute moves
Call SetOemDRO(118,b) 'set system rotate DRO
Label1:
DoOEMButton (1008) 'zero X axis DRO
DoOEMButton (1009) 'zero Y axis DRO
Call SetOemDRO(3,80) 'reset jog rate to 80%
Code "(Process complete)" 'message for status bar
Call SetUserLed(1103,1) 'close Klaus's video window
End Sub
Of course this assumes that you use KD's camera plugin
Camera ON script, and Camera Zero script according to second image:
'Camera button script;
Zmove = GetOEMDRO(1202) 'get Z tool change location (machine coordinates)
Call SetUserlED(1104,1) 'light up LED near camera button
Call SetOemDRO(118,0) ' reset system rotate DRO
Call SetOEMDRO(3,5) 'set slow jog rate to 5%
Call SetUserLed(1102,1) 'open Klaus's video window
Code "G0 G53 Z" &Zmove 'goto Z tool change height
While IsMoving()
Wend
Code "(Locate Datum then click CAMERA ZERO)" 'message for status bar
'Home button script;
Call SetOemDRO(3,80) 'reset jog rate to 80%
Xs=GetOemDRO(59) 'read Xscale DRO
Ys=GetOemDRO(60) 'read Yscale DRO
Xmove =GetUserDRO(1103) * 1/Xs 'enter your camera offset here
Ymove = GetUserDRO(1104) * 1/Ys 'enter your camera offset here
Code "G91 G0 X" &Xmove & "Y" &Ymove 'make incremental move
While IsMoving () 'wait while that happens
Wend
Code "G90" 'go back to absolute moves
DoOEMButton (1008) 'zero X axis DRO
DoOEMButton (1009) 'zero Y axis DRO
SetUserLED(1103,1) 'close Klause’s video window
SetUserLED(1104,0) 'Switch off LED near camera button
Code "(Homing to Datum Complete)" 'message for status bar
Hope this will help you
If needed, I can attach you screenshots of board made in KiCAD with vias and where I place auxiliary origin.