This is a cross-post of http://community.wolfram.com/groups/-/m/t/1186782
I am working on something where I need to know which locator out of many is currently being changed.
Here is some working code that uses the second argument to Dynamic to identify which locator is active for a limited set of Locators. I'd like to extend this to many Locators. In this code, the Locators are hard-coded. I'd like to extend this programmatically so I can slot in the Locators and the Manipulator controls. I've tried various combinations of Hold* without really knowing what I am doing.
Does anyone know how I can achieve my goal of finding which is the active locator?
See some additional comments below the working code about an attempt to do this with LocatorPane.
DynamicModule[
{active = 0, p},
Manipulate[
Column[
{active,
Deploy@Graphics[
{
{
Locator@
Dynamic[p[1, 1,
1], {((p[1, 1, 1] = {-1, Last[#]};
active = {1, 1, 1}) &), ((active = 0) &)}],
Locator@
Dynamic[p[1, 1,
2], {((p[1, 1, 2] = #;
active = {1, 1, 2}) &), ((active = 0) &)}],
Locator@
Dynamic[p[1, 1,
3], {((p[1, 1, 3] = {1, Last[#]};
active = {1, 1, 3}) &), (active = 0) &}]
},
Line[{p[1, 1, 1], p[1, 1, 2], p[1, 1, 3]}]
},
PlotRange -> 2
]
}
],
{{p[1, 1, 1], {-1, -1}}, ControlType -> None},
{{p[1, 1, 2], {0, 0}}, ControlType -> None},
{{p[1, 1, 3], {1, 1}}, ControlType -> None}
]
]
Trying to do the same thing with a LocatorPane and Nearest. It is not clear to me that the 2 argument form of Dynamic is working here:
DynamicModule[{active = False, pt1 = {1, 1}/2, pt2 = {-1, 1}/2,
pt3 = {1, -1}/2},
Row[
{active,
LocatorPane[
{
Dynamic[
pt1, {((active = Nearest[pt1, #, 1][[1]]);
pt1 = {0, 1} #) &, ((active = 0) &)}],
Dynamic[
pt2, {((active = Nearest[pt2, #, 1][[1]]);
pt2 = #) &, ((active = 0) &)}]
},
Graphics[{Yellow, Disk[{0, 0}, 2]},
PlotRange -> 2
]
]
}
]
]
Association
back-end to yourLocator
GUI if you need to do big stuff with it. That's what I did for this answer. Then you can use some merger of user6014 and Mathe172's ideas. $\endgroup$