<-- back to the index of Rosetta examples
action: move selected objects
Create a new action mv(dx,dy) that moves selected objects relative by dx and dy mm.
Example implementations
awk
|
bash
|
lua
|
pl
|
py
|
rb
|
scm
|
stt
|
tcl
Explanation, step by step
Load packages the script depends on:
-
actions
for registering the new action;
-
layout
for searching selected objects and moving objects.
Create a function
ev_action
that will be called when any of the actions registered by the script is executed. The script registers only one action, so it does not need to check which action caused the function to be called.
When the action event is called, first set up:
- fetch event argument 0 and 1 using
action_arg
;
- resolve the conversion rate from mm to PCB's units using
mm2pcb_multiplier
;
- perform a search for all selected object using
layout_search_selected
(return value is the number of objects found), name the resulting list "mv_search"
A loop then iterates over the objects on the list:
- resolve the Nth element of the list using
layout_search_get
, referencing the list by name ("mv_search") and specifying which element to get (the Nth); the result is an object pointer;
- move the object using
layout_obj_move
; specify the object pointer, then which part of the object should be moved ("OC_OBJ" means the whole object) and relative offsets (dx and dy calculated earlier)
Finally the search list shall be destroyed to reclaim memory, using
layout_search_free
.
In the "main" section of the script, bind event
ACTE_action
to our local function
ev_action
- this gets
ev_action
to be called when any of the actions registered by this script is executed.
Finally use
action_register
to register the action:
- first argument is the name of the action
- second is the xy query string; it is empty since this action won't need coordinates to operate on
- third is the description that shows up in dumps and helps
- fourth is the syntax description (also for helps)