2011-10-03 6 views
6

Qual è il modo più semplice/più conveniente per separare gli oggetti disegnati a mano in Mathematica da quelli generati da programmazione?Separare gli oggetti "disegnati a mano" in Mathematica

Gli strumenti di disegno interattivi sono convenienti e utili. Ma se disegno qualcosa sulla trama, essa si perderà non appena la trama verrà rigenerata. C'è una soluzione conveniente per questo?

Potrei fare il disegno su una trama vuota, li combinano con la trama reale. Ma questo è di nuovo inopportuno in quanto ho bisogno di impostare manualmente l'intervallo di trama del grafico vuoto e non vedo lo sfondo in cima al quale sto aggiungendo le annotazioni.

+5

questione connessa: http://stackoverflow.com/q/5744117/421225 – Simon

+0

@Simon hai ragione, forse qualcuno può unire? – Szabolcs

+1

Sono felice di averli separati. [La domanda di Sjoerd] (http://stackoverflow.com/q/5744117/421225) distrae con la sua trama interessante e [la bella risposta semantica di Brett] (http://stackoverflow.com/questions/7635181/separate-hand- drawn-objects-in-mathematica/7640149 # 7640149) (al contrario di [risposta sintattica di TomD] (http://stackoverflow.com/questions/5744117/saving-plot-annotations/5753555#5753555) merita di essere facile trova. Ad ogni modo, le due domande sono "Collegate" nella colonna di destra della pagina, quindi sono facili da trovare l'una dall'altra. – Simon

risposta

14

Un approccio, utilizzando un'annotazione per segnalare il contenuto generato:

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

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

RecoverDrawing[<modified graphic>] 

enter image description here

+4

+1 Buono, Brett! Questo risponde alla domanda che ho avuto con le iterazioni precedenti di questo problema (in cui dovevi incidere alcune posizioni nella struttura grafica usando Part), vale a dire che funzionerà nelle versioni future? L'utilizzo di Annotation sembra essere il modo più efficace. –

+2

+10 Davvero bello! –

0

Sfortunatamente, la cosa migliore che riesco a pensare è scrivere un programma usando ClickPane o EventHandler che non solo disegna bu record i punti che vengono aggiunti all'immagine. Una modifica del codice come:

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