'Antasten Werkstück (gedreht)
Public Function TouchG()
	Message "Antasten schraeges Bauteil"

	'Parameter holen
	X = GetUserDro (1055) 'delta der X-Punkte
	Y = GetUserDro (1056) 'delta der Y-Punkte 
	CurrentToolDiameter = GetUserDro (1027)

	'Parameter prüfen
	If X = 0 Then
		MSGBox "Delta X zu klein!",vbOK + vbCritical ,"Fehler !"
		Exit function	
	End If
	If Y = 0 Then
		MSGBox "Delta Y zu klein!",vbOK + vbCritical ,"Fehler !"
		Exit function	
	End If
	
	'PI vorbesetzen -----------------------------------------------
	pi=4*Atn(1)

	'Koordinatendrehung ausschalten
	Code "G69"
	Sleep(200)
	
	'X / Y auf null setzen
    Call SetDro (0,0)
    Call SetDro (1,0)
	Sleep(200)

	'die Y Seite vermessen

	'P1 antasten
	Probe 100,0,0
	'Koordinaten P2
    X1 = GetVar(2000) 
    Y1=0 
	
	'Vorposition P2 anfahren
	Message("Vorposition P2 anfahren")
    Y2 = Y
    Code "G91 G1 X-" &X & "F1800"
	WaitForMove(False)
    Code "G91 G1 Y" &Y2
	WaitForMove(True)

	'P2 antasten
	Probe 100,0,0
	'Koordinaten P2
    X2 = GetVar(2000) 

    'die X Seite vermessen -----------------------------------------------

	'Vorposition P3 anfahren
	Message("Vorposition P3 anfahren")
	X3 = X1 + (CurrentToolDiameter/2) + 10
    Code "G91 G1 X-" &X & "F1800"
	WaitForMove(False)
    Code "G90 G1 Y-30"
	WaitForMove(True)
    Code "G90 G1 X" &X3 
	WaitForMove(True)

	'P3 antasten
	Probe 0,100,0
	'Koordinaten P3
    Y3 = GetVar(2001)  

	'Vorposition P4 anfahren
	Message("Vorposition P4 anfahren")
    X4 = X3 + X
    Code "G91 G1 Y-20 F1800"
	WaitForMove(False)
    Code "G90 G1 X" &X4
	WaitForMove(True)
	
	'P4 antasten
	Probe 0,100,0
	'Koordinaten P4
    Y4 = GetVar(2001) 'get the probe touch location

	'Z auffahren
	Code "G91 G01 Y-0.2 F1800"
	WaitForMove(False)
    Code "G91 G1 Z20"
	WaitForMove(True)
	
	'Brechnung
	t1= (X4-X3)*(Y1-Y3)-(Y4-Y3)*(X1-X3)
	b1= (Y4-Y3)*(X2-X1)-(X4-X3)*(Y2-Y1)
	ua=t1/b1

	'Nullpunkt berechnen
	XH=X1+ua*(X2-X1) ' X Home  distance away
	YH=Y1+ua*(Y2-Y1) ' Y Home  distance away

'	Message("Koordinaten Nullpunkt : X " &XH &" Y " &YH) 
'	Sleep(200)

	
	'Winkel aus der längeren Seite berechnen
	If X>Y Then
		'längere Seite=X
		a=(Y4-Y3)
		b=(X4-X3)
		v=a/b
		NewAngle=Atn(v)*(180/pi)
	Else
		'längere Seite=Y
		a=(X2-X1)
		b=(Y2-Y1)
		v=b/a
		NewAngle=Atn(v)*(180/pi)

		If NewAngle > 0 Then
			NewAngle=NewAngle-90
		Else
			NewAngle=NewAngle+90
		End If
	End If
'	Message("Neuer Winkel : " &NewAngle ) 
'	Sleep(200)

	'zum neuen Nullpunkt fahren
	'Winkel = errechneter Winkel + 45°
	siWi = 2*Pi/360*(NewAngle+45)
	hyWi = SQR((CurrentToolDiameter/2)*(CurrentToolDiameter/2)*2)

	Dx = hyWi * Cos(siWi)
	Dy = hyWi * Sin(siWi)
'	Message("Koordinaten Berechnung : X " &Dx &" Y " &Dy) 
'	Sleep(200)

	'Zu neuen Nullpunkt fahren
    Code "G90 G1 X" &XH+Dx & " Y" &YH+Dy 
	WaitForMove(True)
	
	'neuen Nullpunkt setzen
    Call SetDro (0,0)
    Call SetDro (1,0)

	'Koordinatendrehung setzen
    Call SetOemDro (118,NewAngle)
	
	'Koordinaten ausgeben
'	Message "X1 " &X1 &" Y1 " &Y1 & "   X2 " &X2 &" Y2 " &Y2 & "   X3 " &X3 &" Y3 " &Y3 & "   X4 " &X4 &" Y4 " &Y4 
	
	'wieder auf absolut stellen
	Code "G90"
	Message ""
	
End Function
