Pagina 1 di 1

fidocadj

Inviato: 20/07/2011, 10:30
da mae89
Ciao a tutti.. alcuni forum, come questo, hanno una specie di mod/bbcode che permette l'inserimento di schemi elettrici fatti con il programma fidocadj

Il programma genera un codice ad esempio:

Codice: Seleziona tutto

[FIDOCAD]
MC 70 50 0 0 170
MC 80 75 0 0 580
MC 160 75 0 0 580
MC 135 75 0 0 080
MC 170 55 0 0 080
MC 45 75 0 0 080
MC 40 70 1 0 100
MC 20 65 0 0 200
MC 35 85 2 0 200
LI 35 65 40 65 0
LI 40 65 40 70 0
LI 35 85 40 85 0
LI 40 80 40 85 0
LI 40 85 40 85 0
LI 70 50 70 75 0
LI 80 50 105 50 0
LI 105 50 105 80 0
LI 105 50 105 40 0
LI 105 80 130 80 0
LI 130 80 130 75 0
LI 130 75 135 75 0
LI 145 75 165 75 0
LI 165 75 155 75 0
LI 155 75 155 55 0
LI 155 55 170 55 0
LI 180 55 185 55 0
LI 185 55 185 80 0
LI 20 65 20 110 0
LI 20 110 185 110 0
LI 185 110 185 80 0
LI 185 80 205 80 0
MC 80 75 0 0 045
MC 160 85 0 0 045
TY 30 75 4 3 0 0 0 * P3
TY 50 65 4 3 0 0 0 * R6
TY 75 40 4 3 0 0 0 * Co
TY 135 65 4 3 0 0 0 * R1
TY 175 45 4 3 0 0 0 * R2
TY 210 75 4 3 0 0 0 Verdana Vq
TY 105 30 4 3 0 0 0 * Vt
LI 55 75 70 75 0
LI 70 75 70 85 0
LI 70 85 80 85 0
LI 80 85 70 85 0
e viene inserito nei post con i tag [fidocad] [/fidocad]

come posso implementare questa funzione pure io sul mio forum?

Re: fidocadj

Inviato: 20/07/2011, 18:15
da Carlo
Quale sarebbe il risultato? Non conosco questo programma e non sò cosa produce.

Re: fidocadj

Inviato: 20/07/2011, 19:27
da mae89
il programma produce quel codice...

te su quel forum lo metti nei tag [fidocad] e il risultato è il disegno del circuito

Re: fidocadj

Inviato: 21/07/2011, 8:40
da Carlo
Eheh, la cosa è più complicata di quanto sembri.

Praticamente non c'è una vera e propria MOD.

Nel forum da te citato, ho trovato questa discussione, dove si è discusso di quell'interprete FidoCad.
Praticamente in modalità lato server viene eseguito il programma FidoCad, a cui viene passato quel codice e restituisce l'immagine del circuito.
Cosa impossibile da fare su un hosting condiviso. Hai bisogno di un server linux su cui installare Java e FidoCadJ.

Re: fidocadj

Inviato: 30/07/2011, 13:06
da DarwinNE
Questo è il mio primo messaggio nel forum phpBB Italia e ne approfitto per salutare tutti.
Carlo ha scritto: Praticamente in modalità lato server viene eseguito il programma FidoCad, a cui viene passato quel codice e restituisce l'immagine del circuito.
Cosa impossibile da fare su un hosting condiviso. Hai bisogno di un server linux su cui installare Java e FidoCadJ.
Io sono l'autore di FidoCadJ ed ho partecipato attivamente alla discussione di cui state parlando. Effettivamente, confermo che quello che è stato fatto richiede privilegi non comuni sul server, necessari per far girare il programma. Tuttavia, esiste una seconda possibilità che è stata creata appunto per evitare questo problema ed è il progetto FidoReadPHP:

https://sourceforge.net/projects/fidoreadphp/

Si tratta di un lettore/interprete di disegni in formato FidoCadJ scritto interamente in PHP e che fa uso della libreria GD per creare i disegni. Questa tecnica è stata sperimentata ed utilizzata con successo qui:

http://www.grix.it/forum/forum_thread.p ... ead=223336

i disegni non sono della stessa qualità che si ottiene con FidoCadJ, perché la libreria GD non ha niente a che vedere con la raffinatezza del sistema grafico di Java. Tuttavia, il sistema sembra funzionare abbastanza bene, anche se FidoReadPHP è ancora un progetto molto giovane che merita di essere sviluppato ancora (se qualcuno volesse darci una mano è il benvenuto :-) ).

Se avete bisogno di una mano da parte mia, fate un fischio!

Re: fidocadj

Inviato: 31/07/2011, 17:18
da Carlo
Ciao, benvenuto. Grazie per il tuo contributo.

Per essere utilizzato in phpBB, si potrebbe inviare al file di esempio index.php via GET il codice per realizzare il circuito, codificato in base64, mostrandolo attraverso il tag HTML <img>.

Re: fidocadj

Inviato: 31/07/2011, 19:41
da DarwinNE
Ciao Carlo e grazie a te per il benvenuto.

In FidoReadPHP, il file di esempio index.php non fa moltissimo, si limita solo a configurare una classe FidoParser con un disegno ed alcune cose che gli servono (i font da utilizzare, le librerie eccetera) e poi è FidoParser che fa il lavoro. In pratica, bisogna fare le cose seguenti:
  • Recuperare il disegno all'interno di un post, identificato con dei tag che possono essere [fcd] e [/fcd] per coerenza con il primo sito che ha adottato questo metodo. FidoReadPHP non riconosce encoding tipo Base64, quindi bisognerà avere cura di trasformare il tutto in una stringa UTF-8.
  • Creare un'istanza di classe FidoParser passandogli il codice che contiene il disegno da processare, le librerie ed i font da utilizzare.
  • Recuperare l'immagine creata da FidoParser e salvarla, per esempio in formato PNG con dimensioni adeguate.
  • Mostrarla all'utente all'interno del post permettendo al contempo di accedere al sorgente.
Naturalmente, dato che FidoParser richiede un po' di tempo per creare l'immagine, la cosa da fare è creare una cache di immagini che viene aggiornata solo quando ci sono novità. In altre parole, le immagini devono essere create solo quando necessario e non tutte le volte che il server risponde ad un accesso ad una pagina.

Vediamo insieme il codice necessario per creare un disegno come quello che mae89 ha suggerito all'inizio di questa discussione. Dapprima bisognerà creare un'istanza della classe FidoParser contenente il codice da mostrare. In questo esempio ho copiato ed incollato il codice fornito da mae89, mentre in un'applicazione più realistica questo sarà stato estratto dal post e memorizzato in una variabile.

Codice: Seleziona tutto

require_once('FidoParser.php');
error_reporting(-1);

$fidoParser = new FidoParser('[FIDOCAD]
MC 70 50 0 0 170
MC 80 75 0 0 580
MC 160 75 0 0 580
MC 135 75 0 0 080
MC 170 55 0 0 080
MC 45 75 0 0 080
MC 40 70 1 0 100
MC 20 65 0 0 200
MC 35 85 2 0 200
LI 35 65 40 65 0
LI 40 65 40 70 0
LI 35 85 40 85 0
LI 40 80 40 85 0
LI 40 85 40 85 0
LI 70 50 70 75 0
LI 80 50 105 50 0
LI 105 50 105 80 0
LI 105 50 105 40 0
LI 105 80 130 80 0
LI 130 80 130 75 0
LI 130 75 135 75 0
LI 145 75 165 75 0
LI 165 75 155 75 0
LI 155 75 155 55 0
LI 155 55 170 55 0
LI 180 55 185 55 0
LI 185 55 185 80 0
LI 20 65 20 110 0
LI 20 110 185 110 0
LI 185 110 185 80 0
LI 185 80 205 80 0
MC 80 75 0 0 045
MC 160 85 0 0 045
TY 30 75 4 3 0 0 0 * P3
TY 50 65 4 3 0 0 0 * R6
TY 75 40 4 3 0 0 0 * Co
TY 135 65 4 3 0 0 0 * R1
TY 175 45 4 3 0 0 0 * R2
TY 210 75 4 3 0 0 0 Verdana Vq
TY 105 30 4 3 0 0 0 * Vt
LI 55 75 70 75 0
LI 70 75 70 85 0
LI 70 85 80 85 0
LI 80 85 70 85 0');
La seconda cosa da fare è caricare le librerie necessarie:

Codice: Seleziona tutto

$standardLibraryString = file_get_contents('./FCDstdlib_en.fcl', true);
$fidoParser->readLibrary($standardLibraryString, "");
$pcbLibraryString = file_get_contents('./PCB_en.fcl', true);
$fidoParser->readLibrary($pcbLibraryString, "pcb");
$ihramLibraryString = file_get_contents('./IHRAM_en.fcl', true);
$fidoParser->readLibrary($ihramLibraryString, "ihram");
Colgo l'occasione per annunciare che poche ore fa ho fatto uscire una nuova versione di FidoCadJ, comprendente una libreria in più. Dovrei aggiornare anche FidoReadPHP perché venga fornita con il download ufficiale.

Dopodiché, si forniscono al sistema alcune sostituzioni relative ai font da utilizzare. FidoReadPHP contiene al suo interno i font Liberation, che hanno metriche compatibili con i font Microsoft più diffusi, ma che non hanno problemi ad essere distribuiti in un software con licenza G.P.L. v. 3.

http://it.wikipedia.org/wiki/Liberation_(font)

Codice: Seleziona tutto

$fidoParser->registerFont("Arial", "fonts/liberation/LiberationSans-Regular.ttf");
$fidoParser->registerFont("Helvetica", "fonts/liberation/LiberationSans-Regular.ttf");
$fidoParser->registerFont("Times", "fonts/liberation/LiberationSerif-Regular.ttf");
$fidoParser->registerFont("Times New Roman", "fonts/liberation/LiberationSerif-Regular.ttf");
$fidoParser->registerFont("Times Roman", "fonts/liberation/LiberationSerif-Regular.ttf");
$fidoParser->registerFont("Courier", "fonts/liberation/LiberationMono-Regular.ttf");
$fidoParser->registerFont("Courier New", "fonts/liberation/LiberationMono-Regular.ttf");
L'ultima cosa necessaria è la creazione dell'immagine propriamente detta. La classe FidoParser processerà il codice e restituirà un'immagine con le caratteristiche richieste:

Codice: Seleziona tutto

// We set up 2 pixels for each logical units and we ask FidoReadPHP to calculate
// the size of the image for us.
$fidoParser->setupSize(2, -1, -1);
// We create the image
$fidoParser->parse(); 
// We get the image
$my_img = $fidoParser->getImage();
$my_img contiene ora l'immagine che si potrà mostrare all'utente, oppure scrivere in cache.

Detto questo, come ho detto sopra, il progetto FidoReadPHP è giovane ed anche se sembra funzionare da diversi mesi su Grix.it, c'è un certo margine di miglioramento. Per esempio, con alcuni interpreti PHP, vengono mostrati numerosi warning.

Io posso fornire assistenza riguardo a FidoCadJ e FidoReadPHP, ma non posso scrivere io il MOD, perché non sono pratico di phpBB ed a dire il vero non sono neppure un virtuoso del PHP.

Re: fidocadj

Inviato: 04/09/2011, 22:46
da DarwinNE
Uhm... ho visto che la cosa non sembra abbia avuto un seguito, per il momento.

Beh, io resto in ascolto, se vi servisse una mano da parte mia su FidoCadJ o FidoReadPHP, fatemi un fischio ;)