<< Click to Display Table of Contents >> Navigation: 3. Script Language > ! User-Macros > Graphical Subprograms |
Sample Code
Graphics-Library
These Macro-Commands can be used to do Pixel-Processing.
This Command will Scan a Line in an Image-Register until a specified Color is found.
The specification is the Color as RGB and the Minimum and/or Maximum Color-Difference.
The Command will return whether -1 (="no such color found") or the X-Position of the found color.
VAN.$$COA=&HFF00FF
VAN.$$COB=&H00FF00
VAN.$$STO=100
VAN.$$CST=25
%Calculate_Color_between $$COA|$$COB|$$STO|$$CST
POP.$$RES
VTH.$$RES|$$REA|6
PRT.Erg. -- $$REA
MBX.!
ENR.
Result:
193.8 -- 61.2 -- 193.8
C23DC2
'-----------------------------------------------------------
'
'-----------------------------------------------------------
'
' Parameter:
' 1 - Number of the IR
' 2 - Start-Pos X
' 3 - Pos Y
' 4 - End-Pos X
' 5 - Color to Scan for
' 6 - Colordif - Max (or -1)
' 7 - Colordif - Min (or -1)
' If 6/7 do fit, result is returned on TOS
' 000 - X-Pos
' or -1 if not found
'
: %Find_Block_of_Color_X 6
SAV.Save|$$LOP|$$E01|$$E02|$$E03|$$E04|$$E05|$$E06|$$E07|$$ERM|$$ERC|$$ERD|$$ERA|$$XPA
#IF PARAMS<6
MBX.Not enough Parameter.
#EIF.
' IR - Number
VAN.$$E01=§§§01
' Startpos X
VAN.$$E02=§§§02
' Y-Pos
VAN.$$E03=§§§03
' X-Pos End
VAN.$$E04=§§§04
' Color to scan for
VAN.$$E05=§§§05
VAN.$$E06=§§§06
#IF PARAMS=6
VAN.$$E07=-1
#ELS
VAN.$$E07=§§§07
#EIF
'-----------------------------------------------------------
' The Loop-Initialization is necessary because we jump out of the Loop many times.
VAN.$$LOP=$$E02
FOR.$$LOP|$$E02|$$E04
ANA.GetPixelColor|$$E01|$$LOP|$$E03|$$C01
'-----------------------------------------------------------
IVV.$$E06!-1
' This Command will return only the largest Color-Distance of the 3 values: Red, Green and Blue
ANA.Color_Diff_Max|$$C01|$$E05|$$ERA
IVV.$$ERA<$$E06
VAN.$$ERC=1
ELS.
VAN.$$ERC=0
EIF.
ELS.
VAN.$$ERC=1
EIF.
'-----------------------------------------------------------
IVV.$$E07!-1
' This Command will return only the largest Color-Distance of the 3 values: Red, Green and Blue
ANA.Color_Diff_MIN|$$C01|$$E05|$$ERA
IVV.$$ERA<$$E07
VAN.$$ERD=1
ELS.
VAN.$$ERD=0
EIF.
ELS.
VAN.$$ERD=1
EIF.
'-----------------------------------------------------------
CAL.$$ERM=$$ERC+$$ERD
IVV.$$ERM=2
VAN.$$XPA=$$LOP
GTO.Leave_Macro_§§§98
EIF.
NEX.
'-----------------------------------------------------------
VAN.$$XPA=-1
:Leave_Macro_§§§98
PUV.$$XPA
'-----------------------------------------------------------
SAV.Restore
END%
'-----------------------------------------------------------
'
'-----------------------------------------------------------
'
' Parameter:
' 1 - Number of the IR
' 2 - Start-Pos X
' 3 - Pos Y
' 4 - End-Pos X
' 5 - Colordif - Min (or 0)
'
' If 5 matches, result is returned on TOS
' 000 - X-Pos End of Color-Block
' or -1 if not found
'
: %Find_End_of_Color_Block_X 4
SAV.Save|$$LOP|$$E01|$$E02|$$E03|$$E04|$$E05|$$E06|$$ERM|$$ERC|$$ERD|$$ERA|$$XPA
#IF PARAMS<4
MBX.Not enough Parameter.
#EIF.
' IR - Number
VAN.$$E01=§§§01
' Startpos X
VAN.$$E02=§§§02
' Y-Pos
VAN.$$E03=§§§03
' X-Pos End
VAN.$$E04=§§§04
' Maximum Color Diff to end Block
VAN.$$E05=§§§05
#IF PARAMS=4
VAN.$$E05=0
#ELS
VAN.$$E05=§§§05
#EIF
'-----------------------------------------------------------
' Get Block Color
ANA.GetPixelColor|$$E01|$$E02|$$E03|$$E06
'-----------------------------------------------------------
' The Loop-Initialization is necessary because we jump out of the Loop many times.
VAN.$$LOP=$$E02
FOR.$$LOP|$$E02|$$E04
ANA.GetPixelColor|$$E01|$$LOP|$$E03|$$C01
' This Command will return only the largest Color-Distance of the 3 values: Red, Green and Blue
ANA.Color_Diff_Max|$$C01|$$E06|$$ERA
IVV.$$ERA>$$E05
VAN.$$XPA=$$LOP
GTO.Leave_Macro_§§§98
EIF.
NEX.
'-----------------------------------------------------------
VAN.$$XPA=-1
:Leave_Macro_§§§98
PUV.$$XPA
'-----------------------------------------------------------
SAV.Restore
END%
'-----------------------------------------------------------
'
'-----------------------------------------------------------
' Calculate a Color between two Colors in steps
'
' 1 - Color A
' 2 - Color B
' 3 - Steps total
' 4 - Aktueller Step von 0 ... P3
' Resulting Color is on TOS 000
'
: %Calculate_Color_between 4
SAV.Save|$$E01|$$E02|$$E03|$$E04|$$E05|$$RST|$$GST|$$BST|$$RAA|$$GAA|$$BAA
#IF PARAMS<4
MBX.Not enough Parameter.
#EIF.
' Color A
VAN.$$E01=§§§01
' Color B
VAN.$$E02=§§§02
' Steps total
VAN.$$E03=§§§03
' Current Step, First step is "0"
VAN.$$E04=(§§§04-1)
IVV.$$E01=$$E02
VAR.$$E05=$$E01
GTO.Leave_Macro_§§§98
EIF.
'-----------------------------------------------------------
ANA.Split_RGB|$$E01|$$R01|$$G01|$$B01
ANA.Split_RGB|$$E02|$$R02|$$G02|$$B02
CAL.$$RST=($$R01-$$R02)/$$E03
CAL.$$GST=($$G01-$$G02)/$$E03
CAL.$$BST=($$B01-$$B02)/$$E03
CAL.$$RAA=$$RST*$$E04|a
IVV.$$R01>$$R02
CAL.$$RAA=&HFF-$$RAA
EIF.
CAL.$$GAA=$$GST*$$E04|a
IVV.$$G01>$$G02
CAL.$$GAA=&HFF-$$GAA
EIF.
CAL.$$BAA=$$BST*$$E04|a
IVV.$$B01>$$B02
CAL.$$BAA=&HFF-$$BAA
EIF.
ANA.Combine_RGB|$$RAA|$$GAA|$$BAA|$$E05
'-----------------------------------------------------------
:Leave_Macro_§§§98
PUV.$$E05
'-----------------------------------------------------------
SAV.Restore
END%
'-----------------------------------------------------------
'
'-----------------------------------------------------------
' Calculate a Color between two Pixels in Steps
' 1 - IR
' 2 - XPos - Pixel A
' 3 - XPos - Pixel B
' 4 - YPos
' 5 - Actual X-Pos
' Resulting Color is on TOS 000
'
: %Calculate_Color_between_X 4
SAV.Save|$$E01|$$E02|$$E03|$$E04|$$E05|$$C01|$$C02|$$STO|$$CST
#IF PARAMS<5
MBX.Not enough Parameter.
#EIF.
' IR
VAN.$$E01=§§§01
' XPos A
VAN.$$E02=§§§02
' XPos B
VAN.$$E03=§§§03
' YPos
VAN.$$E04=§§§04
' Current Pos
VAN.$$E05=§§§05
'-----------------------------------------------------------
ANA.GetPixelColor|$$E01|$$E02|$$E04|$$C01
ANA.GetPixelColor|$$E01|$$E03|$$E04|$$C02
' Error-Conditions
IVV.$$E01=$$E02
GTO.Leave_MacroA_§§§98
EIF.
IVV.$$C01=$$C02
GTO.Leave_MacroA_§§§98
EIF.
' Swap variables if needed (P1 needs to be > P2)
IVV.$$E01>$$E02
VAR.$$E04=$$E01
VAR.$$E01=$$E02
VAR.$$E02=$$E04
EIF.
' Calc total Steps
CAL.$$STO=$$E03-$$E02
' Current Step
CAL.$$CST=$$E05-$$E02
%Calculate_Color_between $$C01|$$C02|$$STO|$$CST
POP.$$E05
'-----------------------------------------------------------
GTO.Leave_MacroB_§§§98
:Leave_MacroA_§§§98
VAR.$$E05=$$C01
:Leave_MacroB_§§§98
'PRT.Leaving with $$E05
PUV.$$E05
'-----------------------------------------------------------
SAV.Restore
END%
'-----------------------------------------------------------
'
'-----------------------------------------------------------
'-----------------------------------------------------------
'
'-----------------------------------------------------------