I have an issue with the axlGetFindFilter() command. I have a small SKILL script for Find & replace text in the DB. In the code below I was trying to get the initial Find Filter setings and backup them, before I change it to TEXT, how ever it only returned nil, so I'm not able to backup them.
Second issue is that axlSetFindFilter(...) will not work when I execute my script when another command is actually running in the PCB editor (e.g. move). Is there any command whit which I can get the state of the PCB Editor, so I will be able to notice the user that another command is runnig and he need to close it first, before execute the script?
moFindFilterEnabled = axlGetFindFilter(nil) > this returns nilmoFindFilterButtons = axlGetFindFilter(t) > this returns nil println( moFindFilterEnabled) - just for check println( moFindFilterEnabled) - just for check axlSetFindFilter( ?enabled list( "noall" "text" "invisible") ?onButtons list( "noall" "text")) axlAddSelectAll() moAllTexts = axlGetSelSet()
REST OF THE CODE
) > sets only the TEXT as enabled and on
I think axlGetFindFilter only works when fields are set by axlSetFindFlter, and active command is idle.
regarding second issue, to check when a certain command is active by using axlOkToProceed.
You should register your skill entry point as an Allegro command via axlCmdRegister. If you register it as an interactive command then the system will 'DONE' any other interactive command before calling your Skill code.
axlGetFindFilter returns a nil because no other Skill code has set the find filter. Commands like move, delete, etc. have their own find filter settings. These settings are not shared with the Skill environment.
Thanks guys for reply. I will try it. When the code will be registered as the command, will it handle also the Find Filter settings? I want to make it clear that it don't mess with the last used filter in the Editor (in idle mode).
axlGetFindFilteraxlSetFindFilter is provided tosupport a push/pop programming strategy.
For example, your code enables the find filter to allow the user to control what objects they select. After they selected an object your code might need to find other objects using the find filter. In this case, this utility to find other objects would want to preserver the original find filter settings.
With normal command level programming you don't need to restore the find filter. An exception is if you are writing a utility function that is used by other Skill code then it is good programming practive to restore the find filter if your utility function changes it.
Cadence commands either have their own persistent find filter settings they set when the command starts or use fixed set of initial settings.
If you are writing your own command level code, you should assume that the intiial find filter settings are undefined and you always need to set them to the values your command intially requires.
Thanks again for quick reply. I've registered the function with the axlCmdRegister() and it works fine for closing the running command.
But I still have issues with the Find Filter. I use the filter to get dbids of all texts in the DB for my SKILL code. If there is another way how to avoid using the filter to get the dbids of all texts in the whole design this will solve the problem too.
If I understand it correctly, there is no way how to preserve the setting of the Find Filter for the Idle mode of PCB Editor?
Now my SKILL code behave like this in relation to Find FIlter.
- there are some setting (user selected before)- after executing my SKILL code, the code change the Find Filter settings to text only (enabled and on_button)- then when the code ends and return to the PCB Editor, the Find Filter settings remain set to text only available option- user need to execute some another command e.g. move, slide, etc., then done the command and after this the Find Filter enables all usually enabled options- how ever the on_button stay on text only
Even the code work I would like to fix this behavior to make it more user friendly.
If there is interest, attached is the SKILL code. After loading the code it is necessary to run it by typing mo_bfr to the command line.