C'è un modo per costruire percorsi al Cairo combinando due percorsi insieme attraverso operazioni booleane come Unione, Differenza e Intersezione? Sto lavorando a un'applicazione di grafica vettoriale che usa il Cairo per eseguire il rendering e vorrei offrire ai miei utenti la possibilità di combinare i percorsi insieme in questo modo, ma non riesco a trovare un modo per farlo al Cairo.Operazioni booleane su Cairo Paths?
risposta
La combinazione di percorsi con operatori non ha alcun senso per me. Cosa ottieni dalla "linea AND curva o arco"?
Invece, è possibile applicare compositing operators utilizzando cairo_set_operator()
: sarà impostato come l'operazione di disegno corrente (essendo esso cairo_fill()
, cairo_stroke()
o altro) deve essere miscelato con il vecchio contenuto della superficie.
Non ho trovato un modo per farlo con le librerie cairo. Ma è una caratteristica che ho cercato anche io. Sarebbe sicuramente utile quando (per esempio) accarezzando la combinazione di due percorsi - gli operatori di compositing menzionati da ntd non sembrano in grado di farlo.
Nel frattempo, sto provando a scrivere script per inkscape e lasciando che inkscape esegua l'unione/differenziazione. Accettabile per il problema su cui sto lavorando ma sicuramente non per il tuo. Hai avuto fortuna, con cairo o qualsiasi altra libreria svg? Dopo un paio di giorni di googling, non sembra essere banale:/
ps - elenco intersect/combine/overlay elencato sul sito di cairo come possibile progetto di estate del codice http://cairographics.org/summerofcode/ideas/ – ImAlsoGreg
Un esempio di ciò che intendo è il modo in cui Inkscape combina i percorsi attraverso operazioni booleane: http://www.usinginkscape.com/node/34. Suppongo che la maggior parte di questi effetti possa essere raggiunta attraverso una serie di operatori di compositing, eccetto che i punti in cui i percorsi delle due figure si intersecano non necessariamente hanno giunzioni di linea appropriate. –
Non riesco ancora a capire la domanda: inkscape utilizza cairo dalla versione 0.46: http://wiki.inkscape.org/wiki/index.php/Release_notes/0.46#Speed_and_interactivity – ntd