2011-08-10 15 views
2

トリガーはアニメーションに使用すると便利ですが、コード内のトリガーの状態を変更する方法を見つけることができません一時停止または再生ボタンを押す必要はありません)。コード(ボタンだけでなく)を使用してトリガー状態(一時停止、再生)を制御する方法

たとえば、あるイベントが発生したときに、現在アクティブなトリガーをPAUSE状態にしたい場合、別のイベントが発生したときにトリガーをPLAY状態にしたいと思うとします。

これを行うボタンはまだ存在しますが、物理的に操作することなくコードから変更することもできます。

理由は、私はいくつかのアクションを実行しています。この他のアクションを実行している間にトリガーをPLAYモードにしていると、動作しないことになります。

私はそれをPAUSE状態にする必要があり、完了したらPLAY状態に戻すことができます。ここで

は、私が何を意味するかの小さな例です。

上記で
Manipulate[ 

EventHandler[ 
    [email protected][ 
    {Circle[{0,0},1], Text[n,pt] }, 
    PlotRange->All,ImageSize->200,ImagePadding->10], 
    { 
    "MouseDown":> 
    (
     (* What to do here to cause the trigger to become Paused?"*) 
     pt=MousePosition["Graphics"] 
    ), 

    "MouseDragged":> 
    (
    (* while dragging, the trigger remains in PAUSED state "*) 
     Print["mouse dragged"]; 
     pt=MousePosition["Graphics"] 
    ), 

    "MouseUp":> 
    (
    Print["MouseUp"] 
    (* What to do here to cause the trigger to Play again?"*) 
    ) 
    } 
    ], 
    Control[{{n,0,"Run"},0,100,0.01, 
      ControlType->Trigger, DisplayAllSteps->True, AnimationRate->1, 
      AppearanceElements->{"PlayPauseButton","ResetButton"}} 
    ], 

    {{pt,{0,0}},ControlType->None} 
] 

、私はディスプレイ上でマウスをドラッグするながら示す番号が変更されないように、私はトリガーが一時停止になりたいですドラッグされた。ドラッグを終了したら、必要に応じてもう一度トリガーを再生することができます。

私の質問:上記のようなトリガ状態を変更する方法はありますか?

私は、トリガーをまったく使用せず、他の方法で自分自身をすべてコード化することができますが、トリガーは使いやすいので、あきらめる前に尋ねると考えました。

トリガーとボタンの詳細なドキュメントへのリンクです。

私が見つけた最も近いものは、トリガーするEnabled->オプションですが、これはトリガー自体を有効にしないようにし、トリガー状態には影響しません。トリガーが発砲している場合、無効にしても発火し続ける。

http://reference.wolfram.com/mathematica/ref/Manipulator.html

http://reference.wolfram.com/mathematica/ref/Trigger.html

おかげ

答えて

3

は、おそらくこれを行うための簡単な方法があるが、これは動作するようです。基本的にTriggerを模倣しています。スケジュールされたタスクを作成し、マウスボタンを押したり離したとき、または再生/一時停止ボタンをクリックしたときに停止して開始することによって、

DynamicModule[{start = 0, finish = 100, dt = 0.01, running = False, task, n}, 
n = start; 
Manipulate[ 
    EventHandler[ 
    [email protected] 
    Graphics[{Circle[{0, 0}, 1], Text[n, pt]}, PlotRange -> All, 
    ImageSize -> 200, ImagePadding -> 10], 
    { 
    "MouseDown" :> 
    (StopScheduledTask[task]; pt = MousePosition["Graphics"]), 

    "MouseDragged" :> 
    (Print["mouse dragged"]; pt = MousePosition["Graphics"]), 

    "MouseUp" :> 
    (If[running, StartScheduledTask[task]]; Print["MouseUp"]) 
    }], 

    Control[Labeled[ 
    Row[{ 
    Button[ 
    [email protected][running, Magnify["\[DoubleVerticalBar]", 1.5], 
     Magnify["\[RightPointer]", 1.5]], 
    (If[running, running = False; StopScheduledTask[task], 
     running = True; StartScheduledTask[task]]), 
    Appearance -> "Palette", ImageSize -> 15, ContentPadding -> False], 

    Button[ 
    Magnify["\[FirstPage]", 1.5], 
    (n = start; ResetScheduledTask[task]), 
    Appearance -> "Palette", ImageSize -> 15, ContentPadding -> False] 
    }], "Run", Left] 
    ], 

    {{pt, {0, 0}}, ControlType -> None} 
], 

Initialization :> (task = 
    CreateScheduledTask[n += dt, {dt, Floor[(finish - start)/dt]}]), 
Deinitialization :> RemoveScheduledTask[task] 
] 

編集:はそれらをより伝統的な再生/一時停止のように見えるようにするためのコントロールの外観を変更/リセットボタン。

+0

これを行うのが最も簡単な方法です。私は「トリガー」自体でそれを行う方法を見つけることができませんでした。私は文字列 "Pause"、 "Play"、 "Reset"の代わりにMathematicaのアイコンを探していましたが、特定のセットが見つかりませんでした。最も近いのは、一時停止の場合は\ [DoubleVerticalBar]、再生の場合は\ [FilledRightTriangle]、リセットの場合は\ [LeftArrowBar]ですが、実際にはうまくありません。 –

+0

@Sjoerd:いいアイコンも見つけられなかったのと同じ問題があった。もともと私はリセットのための\ [FirstPage] '、再生のための' \ [RightPointer] '、一時停止のための' '||" 'を思いついたのですが、あまり満足できなかったので、 。 MathematicaがPlay/Pause/Resetアイコンをどこに保存しているのだろうか。 – Heike

関連する問題