← Back to team overview

sikuli-driver team mailing list archive

Re: [Question #148363]: unfocus code snipet

 

Question #148363 on Sikuli changed:
https://answers.launchpad.net/sikuli/+question/148363

    Status: Open => Answered

RaiMan proposed the following answer:
For this solution a class is not really needed (only if you want to
extend it further with more behavior).

so a function would be sufficient:

def unfocus(obj, sim=0.7, reg=SCREEN):
	to = Location(0,0)
	if obj.__class__.__name__ == "Pattern":
		to = obj.getTargetOffset()
	for i in range(4): 
		if reg.exists(Pattern(obj).similar(sim).targetOffset(to.x, to.y),0):
			return reg.getLastMatch()
		sim -= 0.1
	return false

this solution:
- takes any Region-like object, if omitted searches in SCREEN
- the search object can either be an image or a Pattern
- does not wait 3 seconds with every search (back latest after 3-4 seconds instead of 12 -15)
- does not search again if found

comment:
the first 3 lines in the def() are only necessary, because Pattern(some_other_pattern) does not preserve a targetOffset.


one more thing (for the developers ;-)
Having a class Pattern, that preserves the targetOffset, the def() would be:

def unfocus(obj, sim=0.7, reg=SCREEN):
	for i in range(4): 
		if reg.exists(Pattern(obj).similar(sim)):
			return reg.getLastMatch()
		sim -= 0.1
	return false

class Pattern is really poor currently:
- should preserve the attributes when based on another Pattern
- should accept a Location object as targetOffset

-- 
You received this question notification because you are a member of
Sikuli Drivers, which is an answer contact for Sikuli.