JavaFX chiarimenti relativi al canvas

di il
2 risposte

JavaFX chiarimenti relativi al canvas

Salve a tutti, dovrei realizzare un piccolo software in cui l'utente debba disegnare (come se fosse paint) un grafo.
Da premettere che non sono molto esperto, ma piano piano sono riuscito a trovare un modo per farlo aiutato molto da google.
La soluzione adoperata in breve è la seguente:
-Ho creato due canvas, uno per l'effetto ovale che si crea quando con il mouse clicco sul canvas, e l'altro per la figura finale
-Ho estratto i contesti grafici
-Ho creato i listner per le gesture del mouse
Fin qui tutto ok, ora però voglio "salvare" sia i nodi creati del grafo che gli archi in due strutture differenti. Questo perché ho necessita di controllare i nodi e gli archi disegnati dall'utente. E' possibile fare qualcosa? Ho notato che una cosa del genere è fattibile solo se utilizzassi la classe "shape" di javafx dove ad esempio posso salvare qualunque figura in una struttura dati. Invece in questo modo non capisco come posso fare per salvare il nodo/arco appena disegnato. Qualcuno è in grado di darmi una mano?

2 Risposte

  • Re: JavaFX chiarimenti relativi al canvas

    applefriend ha scritto:


    ora però voglio "salvare" sia i nodi creati del grafo che gli archi in due strutture differenti. Questo perché ho necessita di controllare i nodi e gli archi disegnati dall'utente. E' possibile fare qualcosa?
    Non sono (ancora) preparatissimo su JavaFX ma per quanto ne so il canvas (javafx.scene.canvas.Canvas) di JavaFX è semplicemente una immagine "buffer" di NxM pixel su cui puoi disegnare usando tutte le "primitive" di disegno offerte dal GraphicsContext.
    Tutto quello che disegni va direttamente sui pixel nel buffer, il Canvas non tiene alcuna "memoria" di cosa è stato disegnato a livello logico e con quale sequenza. Se disegni dei cerchi di vari colori, nel buffer ci sono tanti pixel colorati e basta, alcuni magari vanno "sopra" altre figure. Ma alla fine non puoi più sapere quali/quanti cerchi hai disegnato e dove e in che ordine.

    Tutto questo solo per dire una cosa più o meno ovvia: se vuoi tenere traccia tu di questo, devi realizzare TU classi e strutture dati per mantenere la "storia" (o comunque le relazioni) delle figure disegnate.
  • Re: JavaFX chiarimenti relativi al canvas

    Ciao, intanto ti ringrazio per il prezioso consiglio, infatti stavo abbandonando l'idea di permettere all'utente di disegnare il grafo, sia perché non avevo idea di come tener traccia di nodi e archi e sia perché non sapevo come verificare che si tratti di un grafo ben formato (ossia che ogni arco collega due nodi ecc...). Mi è venuta l'idea di utilizzare i dialog per chiedere all'utente di inserire nodi e archi, ad ogni nodo sarà associato un nome da parte dell'utente e ogni arco invece corrispondera ad una proprietà.
    Praticamente l'utente esprime attraverso un grafo con delle variabili e delle proprietà una specie di meta-query come se fosse un pattern:
    Per esempio, la seguente metaquery:
    P(?x, ?y), Q(?x, ?z), Q(?y, ?z)
    (P e Q sono proprietà quindi archi, e le variabili invece sono ?x,?y,?z)
    serve a cercare le proprietà Q condivise da due individui che sono correlati da P.
    Qui P e Q sono nomi di variabili quindi possono essere istanziati in tanti modi a partire dai dati presenti nel grafo RDF.
    una possibile risposta alla metaquery è la seguente:
    isMarriedTo(?x, ?y), livesIn(?x, ?z), livesIn(?y, ?z)
    che si ottiene istanziando la metaquery nel modo seguente: a P sostituisce isMarriedTo e a Q sostituisce livesIn.

    In sostanza l'utente prima seleziona un grafo RDF da interrogare con una choicebox e successivamente "disegna" un grafo come l'esempio sopra ( P(?x, ?y), Q(?x, ?z), Q(?y, ?z) ) interrogando il grafo di conoscenza selezionato, e una possibile risposta tra tutte potrebbe essere "isMarriedTo(?x, ?y), livesIn(?x, ?z), livesIn(?y, ?z)"

    In allegato la GUI momentanea realizzata da me, ovviamente dovrei cercare di capire prima in che modo far si che l'utente crei il grafo (abbiamo detto che disegnandolo non va bene per i motivi sopra citati)

    Mi scuso per il papiro, ma per me è davvero importante riuscire a completare il tutto, avendo poca esperienza (se non quella dettata da alcuni esami universitari) ed essendo un lavoro di tesi vorrei una mano almeno per creare le "basi" del progetto..

    Se riesci a consigliarmi una soluzione te ne sarei davvero molto grato..
    Allegati:
    21940_782b0a3ab8a43df0c3172acd27f7dad6.png
    21940_782b0a3ab8a43df0c3172acd27f7dad6.png

    21940_998ccb9739959a7edc18e4c080a2b0b9.png
    21940_998ccb9739959a7edc18e4c080a2b0b9.png
Devi accedere o registrarti per scrivere nel forum
2 risposte