Re: Dynamic Control of Graphics
- To: mathgroup at smc.vnet.net
- Subject: [mg105124] Re: Dynamic Control of Graphics
- From: Albert Retey <awnl at gmx-topmail.de>
- Date: Sat, 21 Nov 2009 03:36:59 -0500 (EST)
- References: <he0oae$4ov$1@smc.vnet.net>
PeterSF schrieb: > I am new to the dynamic features of the Mathematica fron end. Having spent a > considerable amount of time, I am still strufggling with the following > problem: how to control dynamically individual elements of a combined graphics? > Specifically, we are given > Show[ Plot[ Sin[x], {x,0,Pi} ], Graphics[ { textColor, Text > ["Test"] } ], > Graphics[ { lineWidth, > Line[{ {0,0}, {0,2}] } ] ] > The objective is to change: > * the color of text (the 2nd element) if and only if a mouse is > over that text; > * the thickness of the line (the 3rd element) if and only if a > mouse is > over that line. > I can see how to handle these simultaneously: > > DynamicModule[ { lineWidth = Thin, textColor = Blue}, > Dynamic @ EventHandler[ Show[ Plot[Sin[x], {x, 0, \[Pi]} ], > Graphics[{ textColor, Text["XXX", {1, 1}]}], > Graphics[{ lineWidth, Line[{{0, 0}, {2, 1}}]}]], > "MouseClicked" :> (textColor = Red, lineWidth )]] > > The question is, how can one control the wdth and the color > individually? > > More broadly, I need to perform the following tasks: upon mouseover to > change the appearance of a single graphics element (line, text, etc.); > then, upon mouse click, to store in a variable which elements was > selected (clicked over); and, upon pressing of the Delete key, to > remove that element from the combined graphics. > > I would be most greatful for any and all of the help you could give > me. I think the following is doing what you described, except that I am using the "d" key instead of the delete key. Unfortunatly there seems to be no documented way to get ahold of the Delete key pressed events, or am I missing something? I am using a combination of Mouseover, Dynamic and Eventhandler: DynamicModule[{ selected = None, highlighted = None, lineWidth = Thin, textColor = Blue, curve, text, line }, curve = Plot[Sin[x], {x, 0, \[Pi]}] /. Line[points_] :> Mouseover[ Dynamic[highlighted = None; Line[points]], Dynamic[highlighted = Hold[curve]; Line[points]] ]; text = Graphics[Mouseover[ Dynamic[{highlighted = None; Blue, Text["XXX", {1, 1}]}], Dynamic[{highlighted = Hold[text]; Red, Text["XXX", {1, 1}]}] ]]; line = Graphics[Mouseover[ Dynamic[{highlighted = None; Thin, Line[{{0, 0}, {2, 1}}]}], Dynamic[{highlighted = Hold[line]; Thick, Line[{{0, 0}, {2, 1}}]}] ]]; EventHandler[ Column[{ Dynamic[Show[curve, text, line]], Dynamic[highlighted], Dynamic[selected] }], { "MouseClicked" :> (selected = highlighted), {"KeyDown", "d"} :> ( Print["deleting: " <> ToString[selected]]; Set @@ Append[selected, Graphics[]] ) }, PassEventsDown -> True ]] hth, albert