{********************************************************************************}
{                                                                                }
{ Filename:  'Koordinaten'                                                       }
{ Startname: koord_auslesen                                                      }
{                                                                                }
{ Dieses Macro ist geistiges Eigentum von Urs Thali und darf ohne                }
{ mein Einverstaendnis weder kopiert noch weitergegeben werden                   }
{                                                                                }
{ Copyright by Thali   28.07.21 / Urs Thali                                      }
{ Letzte Aenderung     12.02.26 / Urs Thali                                      }
{                                                                                }
{********************************************************************************}


DEFINE koord_auslesen
	LOCAL ALPHANORD
	LOCAL ALPHAWEST
	LOCAL BETA
	LOCAL GAMMA
	LOCAL UP
	LOCAL UP_KOOR
	LOCAL UP1_KOOR
	LOCAL UP_NORD
	LOCAL UPX
	LOCAL UPY
	LOCAL UPX1
	LOCAL UPY1
	LOCAL UPXN
	LOCAL UPYN
	LOCAL MASS_A
	LOCAL UPX_KOOR
	LOCAL UPY_KOOR
	LOCAL P1
	LOCAL P1_BEZ
	LOCAL P2
	LOCAL l_koord
	LOCAL l_tmpfile
	LET l_tmpfile (MAKE_TMP_NAME)
		READ PNT 'Ursprungspunkt antippen damit er aktiv wird' P2
		EDIT_PART P2
		READ NUMBER 'X-Koordinate eingeben [m]' X_KOR
		READ NUMBER 'Y-Koordinate eingeben [m]' Y_KOR
		LET UP_KOOR ('Ursprung'+','+STR(X_KOR)+','+STR(Y_KOR))
		READ PNT 'Ursprungspunkt bzw. bekannten Punkt antippen' UP
		READ PNT 'Punkt im Norden, ausgehend vom Ursprungspunkt bzw. bekannten Punkt, antippen' UP_NORD
		LET UP (UP/1000)
		LET UPX (X_OF UP)			{X-Koordinate Ursprungspunkt}
		LET UPY (Y_OF UP)			{Y-Koordinate Ursprungspunkt}
		
		LET UP_Nord (UP_NORD/1000)
		LET UPXN (X_OF UP_NORD)		{X-Koordinate Nordrichtung}
		LET UPYN (Y_OF UP_NORD)		{Y-Koordinate Nordrichtung}
		
		LET ALPHANORD (ARCTAN((UPXN-UPX)/(UPYN-UPY)))	{Verdrehwinkel System}
		LET ALPHAWEST (90-ALPHANORD)
		
		LET TITELZEILE ('Punktebezeichnung,X-Koordinate [m],Y-Koordinate [m]')
		
		OPEN_OUTFILE 1 DEL_OLD 'C:\temp\Koordinaten.csv'
{
		OPEN_OUTFILE 1 DEL_OLD ('W:\HOME\'+(GETENV "USERNAME")+'\Koordinaten.csv')			
}



		WRITE_FILE 1 TITELZEILE
		WRITE_FILE 1 UP_KOOR

	IF (UPYN>=UPY)		{Nordrichtung zwischen 9 Uhr und 3 Uhr}
		LOOP
			READ PNT 'Punkt antippen' P1
			READ STRING 'Punktebezeichnung eingeben' P1_BEZ
			LET P1 (P1/1000)
			LET UPX1 (X_OF P1)
			LET UPY1 (Y_OF P1)	
			LET UPX1 (UPX1-UPX)
			LET UPY1 (UPY1-UPY)
			LET BETA (ARCTAN((UPY1/UPX1)))
			LET BETAABS (ABS(BETA))
			LET GAMMA (ALPHANORD+BETA)
			LET MASS_A (SQRT((SQR UPX1)+(SQR UPY1)))
			LET MASS_A (MASS_A*1)
		
			IF ((UPX1>=0) AND ((90-ALPHAWEST-BETAABS)<0))	
				LET UPX1 (X_KOR+(MASS_A*(COS GAMMA)))
				LET UPY1 (Y_KOR+(MASS_A*(SIN GAMMA)))
				LET UP1_KOOR (P1_BEZ+','+STR(UPX1)+','+STR(UPY1))
				WRITE_FILE 1 UP1_KOOR
				LET UPX1 0
				LET UPY1 0
				LET P1_BEZ ''
			END_IF
		
			IF ((UPX1<0) AND ((90-ALPHAWEST-BETAABS)<0))		
				LET UPX1 (X_KOR-(MASS_A*(COS GAMMA)))
				LET UPY1 (Y_KOR-(MASS_A*(SIN GAMMA)))
				LET UP1_KOOR (P1_BEZ+','+STR(UPX1)+','+STR(UPY1))
				WRITE_FILE 1 UP1_KOOR
				LET UPX1 0	
				LET UPY1 0
				LET P1_BEZ ''				
			END_IF
			
			IF ((UPX1>=0) AND ((90-ALPHAWEST-BETAABS)>=0))			
				LET UPX1 (X_KOR+(MASS_A*(COS GAMMA)))
				LET UPY1 (Y_KOR+(MASS_A*(SIN GAMMA)))
				LET UP1_KOOR (P1_BEZ+','+STR(UPX1)+','+STR(UPY1))
				WRITE_FILE 1 UP1_KOOR
				LET UPX1 0	
				LET UPY1 0	
				LET P1_BEZ ''				
			END_IF
		
			IF ((UPX1<0) AND ((90-ALPHAWEST-BETAABS)>=0))					
				LET UPX1 (X_KOR-(MASS_A*(COS GAMMA)))
				LET UPY1 (Y_KOR-(MASS_A*(SIN GAMMA)))
				LET UP1_KOOR (P1_BEZ+','+STR(UPX1)+','+STR(UPY1))
				WRITE_FILE 1 UP1_KOOR
				LET UPX1 0	
				LET UPY1 0
				LET P1_BEZ ''				
			END_IF			
			
		END_LOOP
	END_IF
	
	IF (UPYN<UPY)		{Nordrichtung zwischen 3 Uhr und 9 Uhr}
		LOOP
			READ PNT 'Punkt antippen' P1
			READ STRING 'Punktebezeichnung eingeben' P1_BEZ
			LET P1 (P1/1000)
			LET UPX1 (X_OF P1)
			LET UPY1 (Y_OF P1)	
			LET UPX1 (UPX1-UPX)
			LET UPY1 (UPY1-UPY)
			LET BETA (ARCTAN((UPY1/UPX1)))
			LET BETAABS (ABS(BETA))
			LET GAMMA (ALPHANORD+BETA)
			LET MASS_A (SQRT((SQR UPX1)+(SQR UPY1)))
			LET MASS_A (MASS_A*1)
		
			IF ((UPX1>=0) AND ((90-ALPHAWEST-BETAABS)<0))	
				LET UPX1 (X_KOR-(MASS_A*(COS GAMMA)))
				LET UPY1 (Y_KOR-(MASS_A*(SIN GAMMA)))
				LET UP1_KOOR (P1_BEZ+','+STR(UPX1)+','+STR(UPY1))
				WRITE_FILE 1 UP1_KOOR
				LET UPX1 0
				LET UPY1 0
				LET P1_BEZ ''
			END_IF
		
			IF ((UPX1<0) AND ((90-ALPHAWEST-BETAABS)<0))		
				LET UPX1 (X_KOR+(MASS_A*(COS GAMMA)))
				LET UPY1 (Y_KOR+(MASS_A*(SIN GAMMA)))
				LET UP1_KOOR (P1_BEZ+','+STR(UPX1)+','+STR(UPY1))
				WRITE_FILE 1 UP1_KOOR
				LET UPX1 0	
				LET UPY1 0
				LET P1_BEZ ''				
			END_IF
			
			IF ((UPX1>=0) AND ((90-ALPHAWEST-BETAABS)>=0))			
				LET UPX1 (X_KOR-(MASS_A*(COS GAMMA)))
				LET UPY1 (Y_KOR-(MASS_A*(SIN GAMMA)))
				LET UP1_KOOR (P1_BEZ+','+STR(UPX1)+','+STR(UPY1))
				WRITE_FILE 1 UP1_KOOR
				LET UPX1 0	
				LET UPY1 0	
				LET P1_BEZ ''				
			END_IF
		
			IF ((UPX1<0) AND ((90-ALPHAWEST-BETAABS)>=0))					
				LET UPX1 (X_KOR+(MASS_A*(COS GAMMA)))
				LET UPY1 (Y_KOR+(MASS_A*(SIN GAMMA)))
				LET UP1_KOOR (P1_BEZ+','+STR(UPX1)+','+STR(UPY1))
				WRITE_FILE 1 UP1_KOOR
				LET UPX1 0	
				LET UPY1 0
				LET P1_BEZ ''				
			END_IF			
			
		END_LOOP
	END_IF			
	
	CLOSE_FILE 1
END_DEFINE
