2011-10-03 5 views
6

Mathematicaで手書きオブジェクトをプログラムで生成されたものから分離する最も簡単で便利な方法は何ですか?Mathematicaの "手書き"オブジェクトの分離

インタラクティブな描画ツールは便利で便利です。しかし、プロットの上に何かを描くと、プロットが再生成されるとすぐに失われます。これに便利なソリューションはありますか?

私は空のプロットの上に図面を作って、それらを実際のプロットと組み合わせることができました。しかし、私は手動で空のプロットのプロット範囲を設定する必要があり、私は注釈を追加する上に背景が表示されないようにこれは再び不便です。

+5

関連質問:http://stackoverflow.com/q/5744117/421225 – Simon

+0

@Simonあなたが正しいです、おそらく誰かがマージできますか? – Szabolcs

+1

私はそれらを別々にすることができてうれしいです。 [Sjoerdの質問](http://stackoverflow.com/q/5744117/421225)は、そのすばらしいプロットと[Brettの素敵な意味論的解答]に気を散らしています(http://stackoverflow.com/questions/7635181/separate-hand- Mathematica/7640149#7640149)(TomDの構文的解答とは対照的に)(http://stackoverflow.com/questions/5744117/saving-plot-annotations/5753555#5753555))は簡単であるに値する見つける。とにかく、2つの質問は、ページの右側の列に「リンクされている」ので、お互いから簡単に見つけることができます。 – Simon

答えて

14

一つのアプローチ、:のようなコードの修正

Plot[Annotation[Sin[x], "GeneratedPrimitives"], {x, 0, 10}] 

RecoverDrawing[g_Graphics] := g /. Annotation[_, "GeneratedPrimitives"] :> {} 

RecoverDrawing[<modified graphic>] 

enter image description here

+4

+1いいですよブレット!これは、この問題の以前の反復で(私はPartを使ってGraphics構造の特定の位置をハックしなければならなかった)、つまりこれは将来のバージョンでうまくいくのでしょうか?アノテーションを使用する方がより堅牢な方法と思われます。 –

+2

+10本当に素晴らしいです! –

0

残念ながら、私が考えることができる最も良いことは、ClickPaneまたはEventHandlerを使用してプログラムに書き込むことです。このプログラムは、buレコードをイメージに追加するだけでなく、生成されたコンテンツをフラグにアノテーションを使用

DynamicModule[{pts = {}}, 
ClickPane[Dynamic[[email protected][Line[pts], PlotRange -> 1]], 
    AppendTo[pts, #] &]]