Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - SVG->Gdi+ : gli archi proprio no :(
Forum - C/C++ - SVG->Gdi+ : gli archi proprio no :(

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
AldoBaldo (Member)
Guru


Messaggi: 700
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 12:20
Domenica, 22/10/2017
Buongiorno.

Com'è tipico di quelli che fan le cose per il gusto di farle, ho messo in piedi un'altra cosa lasciando da parte quella che stavo facendo. In particolare, sto tentando di fare un programmino che riceva in ingresso un percorso di quelli caratteristici del formato SVG ("d="M10,10 l100,100, h-50", per intendersi) e lo traduca automaticamente in codice C++ per GDI+ bell'e pronto.

Al momento, il mio programmino genera correttamente il file di intestazione e il file di implementazione per tutti i comandi specificati nella documentazione di SVG sulla quale son riuscito a mettere le mani, tranne il comando 'a' e quello 'A' (non è male, perché ho già implementato la sfilza dei comandi Mm, Zz, Ll, Hh, Vv, Cc, Ss, Qq e Tt, che per me non è poco).

Il problema è che passare dalla parametrizzazione basata su "endpoint" di SVG a quella basata su rettangoli di GDI+ pare essere oltre le mie possibilità, non tanto per il codice in sè, quanto per le basi di geometria/trigonometria che sarebbe necessario padroneggiare ad un livello che non mi appartiene.

In effetti, la documentazione riporta delle formule per la conversione, ma non indica come tradurle in codice. Siccome quelle formule impiegano un tipo di notazione che non conosco e che sembra io non sia in grado di comprendere, sono bloccato. Lunghissime ricerche sul web si sono rivelate infruttuose (anche se sto cercando di convertire esempi che ho trovato in python e in java, ma si tratta di linguaggi diversi dal C, che non conosco e che a tratti mi confondono).

Qualcuno qui sarebbe tanto gentile da aiutarmi a trovare una via d'uscita?


ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 13:25
Domenica, 22/10/2017
Di quali formule parliamo?

P.S. Una curiosità ... perché questo thread non lo apri su iprogrammatori ?


Ultima modifica effettuata da nessuno il 22/10/2017 alle 13:26


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
lumo (Member)
Expert


Messaggi: 449
Iscritto: 18/04/2010

Segnala al moderatore
Postato alle 14:33
Domenica, 22/10/2017
Testo quotato

Postato originariamente da nessuno:

Di quali formule parliamo?

P.S. Una curiosità ... perché questo thread non lo apri su iprogrammatori ?



Avevo parlato brevemente con AldoBaldo di questa cosa in chat e l'ho invitato a esporsi :D


Aldo, come dice nessuno potresti indirizzarci alla sezione precisa della documentazione?
Inoltre per chiarire, il problema della traduzione ce l'hai per tutti i comandi giusto?

Ultima modifica effettuata da lumo il 22/10/2017 alle 14:34
PM Quote
Avatar
AldoBaldo (Member)
Guru


Messaggi: 700
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 20:18
Domenica, 22/10/2017
@lumo

Io ho un pdf, però c'è la stessa cosa anche qui:

https://svgwg.org/svg2-draft/implnote.html#ArcConversionCen ...

Gli altri comandi li ho già implementati tutti di testa mia, e funzionano (lo so, è incredibile e sembra impossibile, però è così). Sicuramente il mio codice sarà molto "naif", ma se uno si accontenta... :pat:

Se riuscirò a finire e rifinire il programmino, pur con tutti i difetti che non riuscirò a eliminare perché fanno parte del mio stile da autodidatta della domenica, lo condividerò qui.




@nessuno

Perché questa community qui è molto più accogliente e di larghe vedute. Di là ci vado volentieri perché c'è più movimento (più post sul forum) e dunque posso divertirmi un po', però è anche vero che circola un po' di spocchia da parte di alcuni. Che dovremmo dire? Del resto, ognuno ha la sua testa (e va bene così).


ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 20:28
Domenica, 22/10/2017
Testo quotato

Perché questa community qui è molto più accogliente e di larghe vedute. Di là ci vado volentieri perché c'è più movimento (più post sul forum) e dunque posso divertirmi un po', però è anche vero che circola un po' di spocchia da parte di alcuni. Che dovremmo dire? Del resto, ognuno ha la sua testa (e va bene così).



Beh, qui l'età (e la preparazione) media è sicuramente molto inferiore, quindi è comprensibile che la cosa si rifletta sul grado di "accoglienza percepita", non so se mi sono spiegato. Per essere più precisi, qui si possono scrivere più "fesserie" rispetto all'altro posto ...

Dato che ritenevo l'argomento più consono all'altro forum, mi chiedevo quale criterio usassi nello scegliere qui o lì quando posti una domanda ... anche se vedo che lì, più che altro, rispondi e qui chiedi ...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
AldoBaldo (Member)
Guru


Messaggi: 700
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 20:56
Domenica, 22/10/2017
Ipotizzo che chiedendo di là più che risposte otterrei altre domande. Il che in certe situazioni va bene, in altre no. In questa sicuramente no, perché il tipo di problema non è di quelli che sono in grado di risolvere da me.


ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
PM Quote
Avatar
lumo (Member)
Expert


Messaggi: 449
Iscritto: 18/04/2010

Segnala al moderatore
Postato alle 22:44
Domenica, 22/10/2017
Testo quotato

Postato originariamente da AldoBaldo:

Ipotizzo che chiedendo di là più che risposte otterrei altre domande. Il che in certe situazioni va bene, in altre no. In questa sicuramente no, perché il tipo di problema non è di quelli che sono in grado di risolvere da me.


Non ho capito per nulla il tuo ragionamento, comunque venendo al problema:

SVG usa i parametri descritti qui per tracciare un arco ellittico:
https://www.w3.org/TR/SVG/paths.html#PathDataEllipticalArcC ...

Mentre GDI+ vuole questi:
Codice sorgente - presumibilmente Plain Text

  1. Status AddArc(
  2.   [in]  REAL x,
  3.   [in]  REAL y,
  4.   [in]  REAL width,
  5.   [in]  REAL height,
  6.   [in]  REAL startAngle,
  7.   [in]  REAL sweepAngle
  8. );



Invece di fare una descrizione molto lunga, ti ho fatto un paio di disegni e ti ho scritto le formule dei valori che ti servono. In fondo trovi una legenda delle operazioni matematiche con vettori e matrici 2x2 che si vedono anche al link che hai fornito, così se sei curioso puoi guardarle.

(è un PDF)
https://mega.nz/#!SUtixJAA!vR9rnrYNbdWAjb-mI1rpu6fvj5attNZS ...

PM Quote
Avatar
AldoBaldo (Member)
Guru


Messaggi: 700
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 18:51
Lunedì, 23/10/2017
aaaaAAAAAARRRRRRGGGGGHHHhhhhhhfff... (accasciandosi al suolo in punto di morte) :rotfl:

Va be', dopo cena mi ci metto e vedo se riesco a capirci qualcosa. Così di getto mi manca un po' l'aria... :pat:


ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
PM Quote
Avatar
lumo (Member)
Expert


Messaggi: 449
Iscritto: 18/04/2010

Segnala al moderatore
Postato alle 20:10
Lunedì, 23/10/2017
Testo quotato

Postato originariamente da AldoBaldo:

aaaaAAAAAARRRRRRGGGGGHHHhhhhhhfff... (accasciandosi al suolo in punto di morte) :rotfl:

Va be', dopo cena mi ci metto e vedo se riesco a capirci qualcosa. Così di getto mi manca un po' l'aria... :pat:


È intenzionale :rotfl: la strada facile è guardare i disegni e copiare i risultati delle formule. I tre passi sarebbero ciò che devi effettivamente fare con il codice, cioè creare un arco inizialmente appartenente all'ellisse centrato nell'origine, poi questo ellisse viene ruotato di un angolo phi. Queste cose le fai molto facilmente con GDI.
Il terzo passo ti porta l'arco dove vuoi tu, e serve una traslazione (sempre GDI), e le componenti per cui devi traslare sono calcolate lì. In più, siccome vuoi sapere da quale punto deve partire il prossimo oggetto (penso ti serva?) servono le coordinate anche di quello, ed è calcolato.
I passaggi sono utili per controllare di non aver sbagliato, ma puoi saltarli :rofl:

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo