Cazzo se solo lo avessi saputo prima! :D
getBoundingClientRect funziona! Anche per gli elementi all’interno di un svg! E questo rivoluziona tutto il calcolo delle coordinate dei disegni in cache.
Intanto ora le coordinate dell’origine del tag G le calcolo così, e mi ritrovo coordinate affidabili al 110%.
Seconda cosa, posso usare lo stesso sistema anche per le due funzioni updateCacheForDrag / Zoom, che non hanno più senso di esistere separate! (Ovviamente per tutte queste modifiche mi tengo commentato anche il vecchio codice, perchè non ho ancora studiato la compatibilità di svg.element.getBoundingClientRect su tutti i browser).
Ora basterà fare una sola funzione che va a cercare nel dom tutte le immagini presenti in cache, e aggiorna pax pxy pxw pxh della cache coi valori presi da getBoundingClientRect. E non sarà nemmeno obbligatorio chiamarla per ogni drag o zoom! Potremo chiamarla ogni tot tempo, o quando ci serve per selezionare il disegno su click, o quando vogliamo rimuovere disegni dal svg.
Bella!