Un oggetto PGF nodo per il disegno di barcode

  • Creatore
    Topic
  • #82510
    robitex
    Amministratore del forum
      Up
      0
      Down
      ::


      Ciao,
      l’idea è quella di implemetare una nuova shape per disegnare un barcode secondo un dato formato.
      Una shape è gestita da PGF tramite i noti punti di ancoraggio.
      Il problema nel caso del barcode è che il disegno della forma non dipende dalle dimensioni del testo del nodo, ma dal testo stesso.
      Secondo voi è possibile rintracciare la macro dove pgf memorizza il testo del nodo per processarla?
      Il manuale al capitolo “Nodes and Shapes” non fa cenno alla cosa.
      Forse non è possibile.

      Il codice che crea una forma rettangolare al cui interno trova posto il barcode, è il seguente (manca della parte di disegno):
      `\pgfdeclareshape{barcode}{%
      \savedanchor{\centerpoint}{
      \pgf@y=.5\pgfbc@h
      \pgf@x=.5\pgfbc@x
      }
      \savedanchor{\upperrightcorner}{
      \pgf@y=\pgfbc@h
      \pgf@x=\pgfbc@x
      }
      \anchor{north east}{\upperrightcorner}
      \anchor{center}{\centerpoint}
      \foregroundpath{… elaborazione del testo per la produzione del barcode…}
      }`

      Utilizzo delle dimensioni TeX variabili a seconda del codice del barcode.
      Dispongo già del codice pgf per disegnare il barcode (nel formato code39) a partire dal testo.
      Semmai si potrebbe pensare di scrivere un articolo (breve) per il prossimo numero di Ars se qualcuno è interessato.
      Grazie mille.
      R.

    Visualizzazione 9 filoni di risposte
    • Autore
      Risposte
      • #82511
        Up
        0
        Down
        ::

        robitex” post=81846Ciao,
        l’idea è quella di implemetare una nuova shape per disegnare un barcode secondo un dato formato.
        Una shape è gestita da PGF tramite i noti punti di ancoraggio.
        Il problema nel caso del barcode è che il disegno della forma non dipende dalle dimensioni del testo del nodo, ma dal testo stesso.
        Secondo voi è possibile rintracciare la macro dove pgf memorizza il testo del nodo per processarla?
        Il manuale al capitolo “Nodes and Shapes” non fa cenno alla cosa.
        Forse non è possibile.

        Il codice che crea una forma rettangolare al cui interno trova posto il barcode, è il seguente (manca della parte di disegno):
        `\pgfdeclareshape{barcode}{%
        \savedanchor{\centerpoint}{
        \pgf@y=.5\pgfbc@h
        \pgf@x=.5\pgfbc@x
        }
        \savedanchor{\upperrightcorner}{
        \pgf@y=\pgfbc@h
        \pgf@x=\pgfbc@x
        }
        \anchor{north east}{\upperrightcorner}
        \anchor{center}{\centerpoint}
        \foregroundpath{… elaborazione del testo per la produzione del barcode…}
        }`

        Utilizzo delle dimensioni TeX variabili a seconda del codice del barcode.
        Dispongo già del codice pgf per disegnare il barcode (nel formato code39) a partire dal testo.
        Semmai si potrebbe pensare di scrivere un articolo (breve) per il prossimo numero di Ars se qualcuno è interessato.
        Grazie mille.
        R.

        Dovrebbe essere [tt]\pgfnodeparttextbox[/tt]. Onestamente però non ne sono sicuro al 100%. Ho controllato in [tt]tikz.code.tex[/tt] e in un certo senso viene confermata la mia impressione vedendo che la macro è usata in [tt]\tikz@do@fig[/tt] (e quindi seguendo il filo in [tt]\tikz@fig@collectresetcolor[/tt] -> [tt]\tikz@fig@boxdone[/tt] ed infine [tt]\tikz@fig@continue[/tt] – è proprio questa definizione finale quella chiave che mi conferma l’impressione). Vedendo poi l’uso di [tt]\pgfmultipartnode[/tt] e andando nel manuale a pagina 619 c’è un esempio decisamente interessante.

        Sono curioso di vedere poi il codice dell’applicazione 😉

        Ciao
        Claudio

      • #82512
        Up
        0
        Down
        ::


        Non sarebbe più semplice creare una chiave per memorizzare il testo ed usare quella per definire le proprietà del codice a barre? Tipo

        ` \node[cbarre,codice={12345}] {}`

        Magari è meno elegante perché le graffe esterne rimangono vuote, però forse è più semplice da implementare

        Ciao
        Fra

      • #82513
        robitex
        Amministratore del forum
          Up
          0
          Down
          ::

          Spike” post=81856Non sarebbe più semplice creare una chiave per memorizzare il testo ed usare quella per definire le proprietà del codice a barre? Tipo

          ` \node[cbarre,codice={12345}] {}`

          Magari è meno elegante perché le graffe esterne rimangono vuote, però forse è più semplice da implementare

          Ciao
          Fra

          Pensi anche tu allora che il modo migliore di estendere pgf nella grafica dei barcode sia con un oggetto nodo apposito?
          Il barcode è un disegno che se pensato in termini di oggetto grafico, deve poter essere posizionato nella figura dove si desidera, deve poter essere ruotato, colorato, ecc.
          Fino ad ora dispongo di un comando \barcode{12345678} che espande all’interno di un ambiente pgf il codice necessario per il disegno.

          Dove posso reperire un esempio di programmazione tramite chiavi per \node?
          Magari si potrebbe nascondere il comando \node creando una macro tipo:
          `\barcodenode[format={code39, height=10mm}] {123456789};`
          o simile.
          Grazie.
          R.

        • #82514
          Up
          0
          Down
          ::

          robitex” post=81858Magari si potrebbe nascondere il comando \node creando una macro tipo:
          `\barcodenode[format={code39, height=10mm}] {123456789};`
          o simile.

          Se vuoi nascondere [tt]\node[/tt] con un comando uguale in tutto e per tutto [tt]\node[/tt], ma con un nome diverso, ti basta dire `\makeatletter
          \def\barcode{\tikz@path@overlay{node}}
          \makeatother` Ora [tt]\barcode[/tt] è un alias di [tt]\node[/tt] e quindi: `\barcode[draw,rectangle]at(0,0){ciao};` funzionerà.

          Ciao
          Claudio

        • #82515
          robitex
          Amministratore del forum
            Up
            0
            Down
            ::


            No, non sono soddisfatto.
            Ho letto un po’ di documentazione sulle chiavi (\pgfkeys) ed il codice di una libreria (calendar).
            Non è facilissimo implementare una nuova libreria integrata in pgf.
            Spero di riuscire a scrivere il codice pgf ed un pacchetto LaTeX per far si che la libreria sia disponibile per più formati (TeX plain, LaTeX e ConTeXt).
            Il codice TiKZ di interfaccia utente dovrebbe essere il comando o qualcosa del genere:
            `\barcode[option] at (x,y) {code string};`
            Saluti.
            R.

          • #82516
            Up
            0
            Down
            ::

            robitex” post=81874No, non sono soddisfatto.
            Ho letto un po’ di documentazione sulle chiavi (\pgfkeys) ed il codice di una libreria (calendar).
            Non è facilissimo implementare una nuova libreria integrata in pgf.
            Spero di riuscire a scrivere il codice pgf ed un pacchetto LaTeX per far si che la libreria sia disponibile per più formati (TeX plain, LaTeX e ConTeXt).
            Il codice TiKZ di interfaccia utente dovrebbe essere il comando o qualcosa del genere:
            `\barcode[option] at (x,y) {code string};`
            Saluti.
            R.

            Mi sono documentato un attimo: il progetto è oggetto di notevole attenzione, vedi pgf-Tikz QR code generator (poi basta cercare nel tag barcodes per altri esempi).

            Onestamente non ho ben presente come stai pensando di implementarlo e come sia l’algoritmo, probabilmente però si riesce a trovare il modo di non fare tutto in pgf. Mi vengono in mente soluzioni tipo:
            1) la libreria [tt]lindenmayersystem[/tt]
            2) Penrose tiling in TikZ

            Ciao
            Claudio

          • #82517
            Up
            0
            Down
            ::

            robitex” post=81858Pensi anche tu allora che il modo migliore di estendere pgf nella grafica dei barcode sia con un oggetto nodo apposito?

            Non ne sono sicuro al 100%, ma è ciò che ho fatto io per la libreria (in sviluppo) tikz-mec. Il codice a barre si può interpretare come una forma che, ovviamente, dipende dalle chiavi che le vengono passate.

            Il barcode è un disegno che se pensato in termini di oggetto grafico, deve poter essere posizionato nella figura dove si desidera, deve poter essere ruotato, colorato, ecc.

            Il vantaggio di usare i nodi è proprio quello di poter utilizzare tutte le chiavi già presenti in tikz che vi si possono applicare.

            Dove posso reperire un esempio di programmazione tramite chiavi per \node?

            Dai un’occhio qui: https://gitorious.org/tikz-mec
            Non mi voglio fare pubblicità, però penso ci siano parecchi spunti per un lavoro come il tuo. Il codice è abbastanza commentato, ma se c’è qualcosa che ti interessa in particolare sono qua

            Ciao
            Fra

          • #82518
            Up
            0
            Down
            ::


            Un’altra risorsa (utile o no non lo so perché l’ho appena scoperta) è il pacchetto makeshape.

            Ciao
            Claudio

          • #82519
            robitex
            Amministratore del forum
              Up
              0
              Down
              ::


              Grazie a tutti per le risposte, e scusate per lo scarso interessamento di questi ultimi giorni causa impegni.
              Risolvere la questione richiede conoscenze approfondite di TeX/PGF.
              A breve caricherò un primo blocco di codice su un repo di github così che tutti gli interessati possano fare esperimenti.
              Stay tuned…
              … e grazie di nuovo.
              R.

            • #82520
              robitex
              Amministratore del forum
                Up
                0
                Down
                ::


                A questa pagina di GitHub ho caricato una prima versione del pacchetto per disegnare in PGF/TikZ i codici a barre.
                Contrariamente al titolo, mi sto convincendo che l’oggetto nodo NON è idoneo per rappresentare la sintassi TikZ del comando di disegno dei barcode a meno che non si riesca ad ‘interccetare’ il disegno del testo del comando.
                Un saluto.
                R.

            Visualizzazione 9 filoni di risposte
            • Devi essere connesso per rispondere a questo topic.

            Go to top