# Codice per testo sempre fronte vista

**URL:** <https://it.discourse.mcneel.com/t/codice-per-testo-sempre-fronte-vista/6473>\
**Category:** Scripting e Programmazione\
**Created:** [26 Gennaio 2025, 9:52am UTC](https://it.discourse.mcneel.com/t/codice-per-testo-sempre-fronte-vista/6473 "2025-01-26T09:52:26Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![luca.filippone](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/luca.filippone/32/16173_2.png) [@luca.filippone](https://it.discourse.mcneel.com/u/luca.filippone)\
**Post date:** [26 Gennaio 2025, 9:52am UTC](https://it.discourse.mcneel.com/t/codice-per-testo-sempre-fronte-vista/6473/1 "2025-01-26T09:52:26Z")

</div>

Per gli smanettoni C#, qualcuno riesce a dirmi cosa sbaglio?  
Gli input sono: l’altezza del testo, il punto di posizionamento e la stringa di testo da mostrare. Vorrei scrivere il codice che me lo tiene sempre fronte vista.

```auto
  private void RunScript(List<string> testo, List<Point3d> posizione, double altezza, ref object A, ref object B, ref object C)
  {
    // Verifica che le liste abbiano la stessa dimensione
    if (testo == null || posizione == null || testo.Count != posizione.Count)
    {
      Rhino.RhinoApp.WriteLine("Errore: le liste 'testo' e 'posizione' devono avere la stessa lunghezza.");
      return;
    }

    // Ottieni la vista attuale della camera
    RhinoViewport vp = Rhino.RhinoDoc.ActiveDoc.Views.ActiveView.ActiveViewport;

    // Ottieni la direzione della vista (normale della camera)
    Vector3d normaleVista = vp.CameraDirection;
    normaleVista.Unitize();

    List<Text3d> testo3D = new List<Text3d>();
    Plane pianoTesto = new Plane();

    // Itera sui punti sorgente e Crea l'entità di testo 3D

    for (int i = 0; i < posizione.Count; i++)
    {
      pianoTesto = Plane(posizione[i], normaleVista);
      // Ruota il piano per allinearlo alla vista
      //pianoTesto.Rotate(Math.PI, pianoTesto.ZAxis);
      // Crea l'entità di testo 3D
      Text3d entitaTesto = new Text3d(testo[i], pianoTesto, altezza);

      testo3D.Add(entitaTesto);
    }

    // Output del testo 3D
    A = testo3D;
  }

```

Grazie

---

<div class="post-metadata">

**Author:** ![luca.filippone](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/luca.filippone/32/16173_2.png) [@luca.filippone](https://it.discourse.mcneel.com/u/luca.filippone)\
**Post date:** [26 Gennaio 2025, 2:47pm UTC](https://it.discourse.mcneel.com/t/codice-per-testo-sempre-fronte-vista/6473/2 "2025-01-26T14:47:47Z")

</div>

In pratica il risultato e simile a quello che otterrei dal comando Tag

 ![image](https://global.discourse-cdn.com/mcneel/uploads/mcneel_it/original/3X/1/d/1d53c9253297fae296ee73d13950091750fb254f.png)  
 ![image](https://global.discourse-cdn.com/mcneel/uploads/mcneel_it/original/3X/2/9/29550b2d1ac5d7ec383079a1d057b16c99564300.jpeg)  
ma vorrei il controllo della dimensione del testo.

---

<div class="post-metadata">

**Author:** ![RiccardoMajewski](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/riccardomajewski/32/22945_2.png) [@RiccardoMajewski](https://it.discourse.mcneel.com/u/RiccardoMajewski)\
**Post date:** [26 Gennaio 2025, 6:23pm UTC](https://it.discourse.mcneel.com/t/codice-per-testo-sempre-fronte-vista/6473/3 "2025-01-26T18:23:04Z")

</div>

Su Rhino esistono i “punti di annotazione” (o Annotate dot in inglese) che mantengono una proporzione costante sullo schermo, invece che rispettare la prospettiva (lontano=piccolo) della vista 3d.  
Se tu usi dei testi 3d, c’è l’opzione “Horizontal to view” ma non mi pare ce ne sia una relativa alla dimensione.  
Dovresti aggiungere una funziona che scala tutti i tuoi testi in funzione della distanza dalla telecamera, e assegnarla all’evento camera, così che triggheri ogni volta che la camera si muove…  
intendevi questo?

I text dot o i testi generati dal text tag di grasshopper secondo me seguono una diversa “pipeline”, credo siano testi letteralmente 2D, disegnati sullo spazio dello schermo (in pixel), piuttosto che nello spazio 3d, infatti non possono essere “oscurati/eclissati” da niente, sono disegnati per ultimi, sullo schermo.  
Se vuoi farteli te per conto tui devi comunque gestire l’evento camera per correggere costantemente la posizione su schermo, mentre se usi i text dot, trovi tutto già pronto.

Quale delle due strade pensi sia meglio?

Edit:  
con i text dot puoi fare molto, e ti semplifichi parecchio la vita:

> **[Grasshopper Text Dot visibility/overlap](https://discourse.mcneel.com/t/grasshopper-text-dot-visibility-overlap/152944)**
>
> Hello! I am facing problem with Text Dot visibility when it is intersecting GH previewed object. For normal Rhino geometry, Text dots are always visible without any issues However, when I create Grasshopper preview of active objects (Rhino...

---

<div class="post-metadata">

**Author:** ![luca.filippone](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/luca.filippone/32/16173_2.png) [@luca.filippone](https://it.discourse.mcneel.com/u/luca.filippone)\
**Post date:** [26 Gennaio 2025, 8:35pm UTC](https://it.discourse.mcneel.com/t/codice-per-testo-sempre-fronte-vista/6473/4 "2025-01-26T20:35:20Z")

</div>

> [@RiccardoMajewski](#):
>
> Dovresti aggiungere una funziona che scala tutti i tuoi testi in funzione della distanza dalla telecamera, e assegnarla all’evento camera, così che triggheri ogni volta che la camera si muove…  
> intendevi questo?

Una scala in base alla distanza è già molto evoluto, mi accontento di cambiare io la dimensione del testo con uno slider. Nel forum inglese ho trovato questo.  
[20\_07\_29\_text\_oriented\_to\_camera.gh](https://it.discourse.mcneel.com/uploads/short-url/xBJDR1nMmW6skRDLpfJeDa4vVAX.gh) (20,9 KB)

Utile per un lavoro simile, ma non capisco perché mi crea questa situazione:

 ![image](https://global.discourse-cdn.com/mcneel/uploads/mcneel_it/original/3X/8/1/8114bcfef4c3bcbebaeec1c0946f494e7b37180a.jpeg)

Ho capito che con il comando trigger associato al componente che mi restituisce la vista posso aggiornare il piano di riferimento del testo. A questo punto vi chiedo solo come creare questo componente, il resto dovrei riuscire a farlo io.

---

<div class="post-metadata">

**Author:** ![luca.filippone](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/luca.filippone/32/16173_2.png) [@luca.filippone](https://it.discourse.mcneel.com/u/luca.filippone)\
**Post date:** [26 Gennaio 2025, 8:58pm UTC](https://it.discourse.mcneel.com/t/codice-per-testo-sempre-fronte-vista/6473/5 "2025-01-26T20:58:02Z")

</div>

Risolto così:

 ![image](https://global.discourse-cdn.com/mcneel/uploads/mcneel_it/original/3X/e/f/ef17b21e5611c4f439ef3ffe0fb1a0e0459402ad.png)
