2014-12-09 6 views
9

Sfondo

Nelle precedenti versioni di MATLAB (per esempio R2013b), ho avuto un trucco in cui vorrei collegare un ascoltatore alla proprietà di una maniglia assi YLim, che mi avrebbe avvisa quando gli assi y limiti sono stati cambiati:Come accedere al nuovo valore di un PropertyEvent in MATLAB R2014b?

addlistener(gca, 'YLim', 'PreSet', @(src,ev_data) disp(ev_data.NewValue)) 

Stavo usando questo per aggiornare una seconda figura che mostrerebbe alcune statistiche riassuntive del sottoinsieme di dati visibili in questi assi. E quello è stato fantastico! Si ingrandisce e la seconda figura si aggiorna automaticamente. Grande.

Facendolo diventare un listener PreSet (anziché da PostSet), è stato utile perché in quel momento potevo verificare se il nuovo valore era uguale al vecchio valore e quindi evitare di ricalcolare queste statistiche quando non necessario.

Il problema

Tuttavia, questo non funziona più per me in R2014b. Sono in grado di allegare il listener di eventi, ma quando si attiva l'evento, viene visualizzato questo messaggio di errore:

Nessun metodo, proprietà o campo appropriato NewValue per event.PropertyEvent di classe.

Credo che questo abbia qualcosa a che fare con il sistema grafico HG2. Con un punto di interruzione appropriato, possiamo esaminare i dati dell'evento. In R2013b:

K>> ev_data 
ev_data = 
    handle.PropertySetEventData 

K>> get(ev_data) 
       Type: 'PropertyPreSet' 
      Source: [1x1 schema.prop] 
    AffectedObject: [1x1 axes] 
      NewValue: [0.5000 220.5000] 

In R2014b, ci sembra di essere manca il campo NewValue:

K>> ev_data 
ev_data = 
    PropertyEvent with properties: 

    AffectedObject: [1x1 Axes] 
      Source: [1x1 matlab.graphics.internal.GraphicsMetaProperty] 
     EventName: 'PreSet' 

Dove è andato ?! Sicuramente ci deve essere un modo per accedervi. Un gestore di eventi preimpostato sulla proprietà è piuttosto inutile se non puoi accedere al nuovo valore che stai cercando di impostare.

+0

anche discusso [at MatlabCentral] (http://www.mathworks.com/matlabcentral/answers/161503-addlistener-in-r2014b-can-t-access-new-property -valore). – horchler

+1

Beh, dannazione. Immagino che 'NewValue' sia davvero sparito e dovrò aggirarlo. – KQS

+0

Dai un'occhiata a questo [nuovo post su UndocumentedMatlab] (http://undocumentedmatlab.com/blog/undocumented-hg2-graphics-events) - sembra che possa contenere ciò che volevi. –

risposta

-1

L'oggetto meta.property di proprietà contiene handle di funzioni sul set della proprietà e metodi get. La proprietà SetMethod contiene un handle di funzione per il metodo set della proprietà e la proprietà GetMethod contiene un handle di funzione per il metodo get della proprietà. Speriamo che questo vi aiuterà a link aloot

Problemi correlati