Re: Automatically colred and indexed custom locators
- To: mathgroup at smc.vnet.net
- Subject: [mg124587] Re: Automatically colred and indexed custom locators
- From: Heike Gramberg <heike.gramberg at gmail.com>
- Date: Wed, 25 Jan 2012 07:09:26 -0500 (EST)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- References: <201201241005.FAA20228@smc.vnet.net>
Looks nice. To make the locators snap to the grid on creation you can do something like this: locGraphics[k_, n_, locSize_, opac_, offset_] := Graphics[{Opacity[opac], Hue[0.85 (k - 1)/(n - 1)], Disk[{0, 0}], Opacity[1], Black, Circle[{0, 0}], Line[{{-1.5, 0}, {1.5, 0}}], Line[{{0, -1.5}, {0, 1.5}}], Text[k, {0, 0}, offset]}, ImageSize -> locSize] Manipulate[ DynamicModule[{n}, P = Round[P, .25]; LocatorPane[Dynamic[P], Show[Graphics[{Thick, Line[P]}], Axes -> True, PlotRange -> 2, GridLines -> {Range[-2, 2, 0.25], Range[-2, 2, 0.25]}, GridLinesStyle -> LightGray], {{-2, -2}, {2, 2}, {.25, .25}}, LocatorAutoCreate -> True, Appearance -> (n = Length[P]; Table[locGraphics[k, n, locSize, opac, offset], {k, 1, n}])]], {{P, {{0, 0}, {1, 1}}}, None}, {{locSize, 15}, 5, 80, 1}, {{opac, 0.75}, 0, 1}, {{offset, {0, 0}}, {-2, -2}, {2, 2}, {0.25, 0.25}}] Basically, all I've done her is changing P from being a local variable of the DynamicModule to a controller of the enclosing Manipulate and adding the line P = Round[P, .25]; Heike By the way, changing P to a controller should also solve the problem in your other post about morphing Bezier curves. On 24 Jan 2012, at 11:05, Chris Young wrote: > After quite a bit of re-reading the help on LocatorPane, I discovered > the following very helpful hint: > > With Appearance->{Subscript[g, 1],Subscript[g, 2],...}, the i\[Null]^th > locator is displayed as Subscript[g, i]. =BB > > Putting this into effect, and putting my graphics in the following > function, I came up with a handy way to index and color auto-created > locators in a Manipulate, so you know at a glance which point is which. > Another nice feature when LocatorPane is used is that you can get very > smooth snapping to a grid just by including that in the range > specification. Below, it's the third list in {{-2, -2}, {2, 2}, {.25, > ..25}}. > > Only two small problems: > > 1) When first created, the points don't get snapped to the grid. > > 2) If the locators are made too small, offsetting the text labels > nudges them away from the correct positions. > > http://home.comcast.net/~cy56/Mma/CustomLocators.nb > http://home.comcast.net/~cy56/Mma/CustomLocatorsPic1.png > http://home.comcast.net/~cy56/Mma/CustomLocatorsPic2.png > > Chris Young > cy56 at comcast.net > > locGraphics[k_, n_, locSize_, opac_, offset_] := > Graphics[ > {Opacity[opac], Hue[0.85 (k - 1)/(n - 1)], Disk[{0, 0}], > Opacity[1], Black, > Circle[{0, 0}], > Line[{{-1.5, 0}, {1.5, 0}}], > Line[{{0, -1.5}, {0, 1.5}}], > Text[k, {0, 0}, offset]}, > ImageSize -> locSize > ] > > Manipulate[ > DynamicModule[ > {P, n}, > > P = {{0, 0}, {1, 1}}; > > Dynamic @ > LocatorPane[ > Dynamic @ P, > > Dynamic @ > Show[ > Graphics[{Thick, Line[P]}], > Axes -> True, > PlotRange -> 2, > GridLines -> {Range[-2, 2, 0.25], Range[-2, 2, 0.25]}, > GridLinesStyle -> LightGray > ], > {{-2, -2}, {2, 2}, {.25, .25}}, > > LocatorAutoCreate -> True, > Appearance -> ( > n = Length[P]; > Table[locGraphics[k, n, locSize, opac, offset], {k, 1, n}] > ) > ] > ], > {{locSize, 15}, 5, 80, 1}, > {{opac, 0.75}, 0, 1}, > {{offset, {0, 0}}, {-2, -2}, {2, 2}, {0.25, 0.25}} > ] > >
- References:
- Automatically colred and indexed custom locators
- From: Chris Young <cy56@comcast.net>
- Automatically colred and indexed custom locators