Ho proposto che JMP gestisca gli elementi di visualizzazione allo stesso modo di ogni altro framework GUI: non ridisegnare alcun elemento a meno che il contenuto non sia cambiato o non venga richiamato un metodo di ridisegno (o inval) specifico.
Nello specifico, può esserci un modo per impedire ai framebox di ridisegnare il contenuto (questo include il ridisegnamento di tutti i punti dati e la riesecuzione di qualsiasi script allegato) ogni volta che si scorre una finestra? Come sul serio, disegna una volta e mantieni la bitmap (o pixmap) persistente a meno che la casella non sia stata modificata (modifica dimensione/modifica dt RowState/metodo inval)
Questa è una perdita di produttività incredibilmente estrema quando si scorrono grafici che hanno molte migliaia di punti o script complessi allegati. L'attuale metodo di "ridisegnare ad ogni possibile occasione, qualunque cosa accada" è estremamente sconcertante.
Ecco un esempio: lo script allegato viene semplicemente stampato nel registro, ma scorrendo i grafici mostra come è costantemente in esecuzione ogni volta che la casella di scorrimento si aggiorna (non propagare il <
New Window( "Test",
vlb = V List Box()
);
::global function = Function( {},
Print( 1 );
);
For( i = 1, i <= 20, i++,
vlb << Append(
Graph Box(
Frame Size( 200, 200 ),
X Scale( -100, 100 ),
Y Scale( -100, 100 ),
::global function
)
)
)Grazie per la risposta!(scusa per la risposta prolissa qui)
Nel mio gruppo stiamo esaminando i difetti sui wafer: spesso scansioneremo interi FOUP durante le escursioni composte da 25 wafer.Poiché si tratta di escursioni, ci sono spesso decine o centinaia di migliaia di difetti per wafer.Parte del nostro flusso di lavoro consiste nel controllare questi wafer.
Ho creato uno script che apporta solo un po' di personalizzazioni alla trama, vale a dire, disegno il dado sotto i punti del difetto utilizzando il comando Path() (utilizzando una stringa SVG), quindi disegno i difetti non classificati, quindi aggiungo un marcatore seg con i difetti classificati per ultimi (per garantire che i difetti classificati non siano oscurati dai difetti non classificati).
Il rendering iniziale di 25 wafer può richiedere diversi secondi e spesso possiamo vederli tutti in una volta (dimensioni sullo schermo relativamente piccole per wafermap), ma se gli utenti vogliono wafermap più grandi dovranno scorrere l'elenco.Lo scorrimento delle wafermap dovrebbe essere fluido come il burro poiché non cambia nulla, ma ovviamente ci vogliono diversi secondi per ogni aggiornamento del frame.
La mia soluzione è stata quella di creare un'immagine dopo aver disegnato la wafermap e mostrare solo l'immagine, ma questo comporta un sovraccarico per garantire il ridisegno dell'immagine se lo stato della tabella cambia o qualsiasi altra cosa.Inoltre, questo metodo richiede circa 3 volte più tempo per il rendering iniziale rispetto al non utilizzo.
Ho creato API della GUI nel mio lavoro precedente e l'impostazione predefinita era sempre una valutazione pigra - devo ammettere che non ho mai dovuto utilizzare alcun formato di immagine più grande di un JPEG standard (2 ^ 16 pixel per lato), ma gestirebbe regolarmente queste dimensioni massime JPEG senza problemi e utilizza solo pochi MB di RAM.
Quello che penso sarebbe l'ideale è poter dare a un FrameBox una sorta di messaggio per garantire una valutazione pigra della bitmap per il motore di visualizzazione, e quindi qualsiasi problema di RAM che potenzialmente potrebbe esistere a causa di enormi bitmap (o pixmap) verrebbe lasciato a discrezione dell'utente.
Ecco un buon esempio del problema che sto affrontando: (nota che utilizzo questo metodo < dolorosamente lento , ed è solo un GraphBox.Immagina di farlo con 10 - 20 di loro in mostra!
Sto usando un desktop abbastanza decente con 64G di RAM e una bella CPU a 4 core.Questo è JMP16 con rendering hardware (anche JMP14 ha lo stesso problema) e sto usando un monitor 4k, ma gli utenti con monitor HD standard hanno gli stessi problemi.
Names Default to Here( 1 );
table = New Table( "test table",
Add Rows( 150000 ),
<<NEW column=""></NEW>
Riassumere:
- Potete fornire un metodo per la valutazione pigra della bitmap di Display Manager?Sai già quando un RowState cambia e fornisci già un metodo <
- Potete fornire un metodo per disabilitare qualsiasi tentativo di hover-text?Questo consuma molti cicli ed è anche del tutto inutile in questa situazione (o anche un po' dannoso in quanto disegna una casella sopra i punti)
E, poiché sono stato frustrato da questi altri problemi minori per molto tempo, lasciatemi solo fare qualche altra richiesta (spesso non mi aspetto affatto che voi ragazzi lavoriate su questi problemi, sarebbe semplicemente fantastico se l'hai fatto 
- In JMP12, l'ordine degli oggetti veniva rispettato in FrameBox -> Personalizza... (il menu di scelta rapida).In particolare, quando si selezionano le righe, i punti selezionati potrebbero essere disegnati da qualsiasi script grafico aggiunto elencato dopo di loro nell'elenco.A partire da JMP14 (non ho mai usato JMP13, quindi non posso parlare per questo), i punti selezionati vengono disegnati sopra ogni altra cosa.Questo è problematico quando si ha a che fare con molte migliaia di punti e non si è in grado di mostrare le linee di tendenza o qualsiasi altro oggetto sopra i punti se sono selezionati.
- Questo entra davvero in gioco quando un utente seleziona una categoria nella legenda e i punti vengono selezionati - improvvisamente l'utente non può vedere le linee!!
- vedi sotto per un po 'di codice che mostra questo
- Inoltre, quando si disegna una griglia (lo faccio per visualizzare il die all'interno di una wafermap) su un GraphBox, la griglia non è anti-alias.Quando si copia l'immagine negli appunti, anche in questo caso l'immagine non è anti-alias.JMP12 farebbe l'anti-aliasing e le immagini apparirebbero tanto Meglio!
- vedere sotto per un confronto tra l'antialiasing JMP12 e JMP14/16
Esempio di problema con punti selezionati sopra tutti gli altri possibili elementi:
Names Default to Here( 1 );
table = New Table( "test table",
Add Rows( 150000 ),
<<NEW column=""></NEW>
foto del problema:

La linea dovrebbe essere tracciata sopra i punti dati.

JMP12 disegnerebbe nell'ordine corretto:

Esempi di anti-aliasing: (nota che queste sono wafermap false che dimostrano il mio punto)
JMP14/16: Schermata di stampa:

Immagine copia JMP14/16:

Schermata di stampa JMP12:

Copia immagine JMP12:

Grazie!!
CIAO @ErraticAttack -
Grazie per il suggerimento: le prestazioni sono decisamente importanti per JMP.Alcuni report possono essere alti più di 100.000 pixel, pertanto JMP disegna solo il contenuto attualmente visibile in un'area di scorrimento.Su Windows, lo scorrimento è ottimizzato per piccoli valori di scorrimento per copiare i pixel ove possibile e ridisegnare solo il contenuto "nuovo".
Puoi dirci qualcosa in più sul tuo caso d'uso?In particolare:
- Mac o Windows
- La tua finestra è composta principalmente da piattaforme o grafici personalizzati?
- Il tuo script grafico esegue molti disegni o viene utilizzato per altre attività?
Se stai disegnando una grande quantità di geometria usando JSL, potrebbe essere possibile velocizzare le cose usando Display Segs (Marker Seg, Line Seg) piuttosto che JSL.