Sto usando wxPython per prototipare alcune interfacce di visualizzazione per un progetto che alla fine diventerà un progetto incorporato. Dal momento che stiamo iterando con un designer grafico, è molto più facile lasciarli lavorare in un editor WYSIWYG come Inkscape piuttosto che riscrivere costantemente le chiamate di disegno grafiche 2D. Per gli elementi che richiedono animazione o testo dinamico, gli elementi SVG sono facilmente identificabili tramite ID in modo che possano essere aggiornati in modo programmatico prima del rendering. Il flusso di rendering si presenta così:Ottieni coordinate assolute per la rotazione degli elementi Inkscape SVG
Inkscape SVG as XML --> Python modification of XML --> Drawing onto wxPython buffered canvas using Cairo and pyRSVG
mi piacerebbe per animare un ago di rotazione attorno ad un asse fisso per un calibro. Per definire un ago, il progettista grafico disegna l'elemento grafico "ago" e un "ago_assiale" che è un piccolo cerchio. Quindi, pensavo di poter impostare la proprietà di trasformazione utilizzando l'angolo desiderato e le coordinate del centro di "needle_axis". Tuttavia, poiché le posizioni relative potrebbero essere state influenzate a causa di altre trasformazioni, determinare la posizione assoluta dell'asse di rotazione non è banale.
Non riesco a trovare una libreria Python per determinare le coordinate assolute di un elemento e mi sembra di dover reinventare la ruota per provare a implementare la parte delle specifiche SVG. necessario per calcolarlo. Il rsvg API menziona le funzioni rsvg_handle_get_dimensions_sub
e arsvg_handle_get_position_sub
per ottenere le dimensioni e le posizioni degli elementi, ma non riesco a trovare un'API per pyRSVG.
C'è un modo migliore per trovare l'asse di rotazione che calcolarlo manualmente? Un esempio Inkscape SVG file and test snippet è disponibile come sintesi.
Potrebbe fornire ulteriori dettagli su come estrarre le coordinate? In realtà ho iniziato a fare qualcosa di simile, ma ho realizzato che avrei dovuto ri-implementare tutte le specifiche SVG per quanto riguarda le trasformazioni e le coordinate assolute/relative. Sto ottenendo framerate "abbastanza buone" semplicemente modificando l'XML SVG tra i frame. Questo evita questo I/O di file che aiuta ma sembra ancora sporco poiché coinvolge pyRSVG che ripete l'intero albero ogni fotogramma. – superlou
È vero che potresti avere alcuni problemi se il tuo software SVG non "applica" le trasformazioni sulle coordinate e le lascia come intere trasformazioni SVG. Ma penso che tu possa forzare il comportamento opposto su Inkscape. Quindi dovrai "solo" costruire un percorso del Cairo (http://www.cairographics.org/manual/cairo-Paths.html) dal percorso SVG. Non ** che ** difficile ma dovrai comunque leggere le specifiche SVG sui percorsi: http://www.w3schools.com/svg/svg_path.asp – halflings
Puoi forzare Inkscape ad esportare senza utilizzare le coordinate relative, ma io non ho trovato un'opzione per impedire l'utilizzo di trasformazioni in tutte le situazioni. Sono d'accordo che sarebbe meglio portare i dati SVG nei percorsi del Cairo o qualche oggetto responsabile della generazione dei percorsi del Cairo, ma lascerò aperta la domanda poiché non penso che ci debba essere una traduzione "roll-your-own" codice per tutti coloro che hanno bisogno di questa funzionalità. – superlou