# Bake Automatico

**URL:** <https://it.discourse.mcneel.com/t/bake-automatico/4900>\
**Category:** Grasshopper\
**Created:** [27 Gennaio 2023, 9:33am UTC](https://it.discourse.mcneel.com/t/bake-automatico/4900 "2023-01-27T09:33:32Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![Martino\_Cantamessa](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/martino_cantamessa/32/17765_2.png) [@Martino\_Cantamessa](https://it.discourse.mcneel.com/u/Martino_Cantamessa)\
**Post date:** [27 Gennaio 2023, 9:33am UTC](https://it.discourse.mcneel.com/t/bake-automatico/4900/1 "2023-01-27T09:33:33Z")

</div>

Ciao, esiste un comando specifico o un modo per effettuare il bake in automatico alla fine del codice Grasshopper?

---

<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:** [27 Gennaio 2023, 9:45am UTC](https://it.discourse.mcneel.com/t/bake-automatico/4900/2 "2023-01-27T09:45:58Z")

</div>

Nativamente, grasshopper, non ha componenti per farlo.

Tramite script (tipo c# o python) o plug-in, si può.

La domanda però è: perché farlo?

Tieni conto che una definizione potrebbe completarsi molte volte **ogni secondo** (tipo trascinando uno slider), cosa dovrebbe fare quindi questo “bake automatico”? Creare decine di geometrie identiche, sovrapposte? Eliminarle tutte e tenere solo l’ultima?  
E se sposto/modifico la geometria su rhino e poi rieseguo lo script di grasshopper? Mi sovrascrive la geometria su rhino?

Non e banale.

---

<div class="post-metadata">

**Author:** ![giuseppe](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/giuseppe/32/16416_2.png) [@giuseppe](https://it.discourse.mcneel.com/u/giuseppe)\
**Post date:** [27 Gennaio 2023, 9:56am UTC](https://it.discourse.mcneel.com/t/bake-automatico/4900/3 "2023-01-27T09:56:51Z")

</div>

> [@RiccardoMajewski](#):
>
> La domanda però è: perché farlo?

yesss

---

<div class="post-metadata">

**Author:** ![Martino\_Cantamessa](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/martino_cantamessa/32/17765_2.png) [@Martino\_Cantamessa](https://it.discourse.mcneel.com/u/Martino_Cantamessa)\
**Post date:** [27 Gennaio 2023, 10:08am UTC](https://it.discourse.mcneel.com/t/bake-automatico/4900/4 "2023-01-27T10:08:28Z")

</div>

Cerco di riassumere e voi mi direte se é fattibile 😅

1. ho un software che mi itera tutte le combinazioni possibili dei parametri di Grasshopper.

2. dopo ogni iterazione la geometria deve essere analizzata da un plug-in che ho solo su Rhino. Una macro si occupa di prendere la geometria su Rhino ed eseguire i comandi. Per questo mi servirebbe automatizzare il bake.

3. Attraverso il software del punto 1 ricevo la geometria migliore tra quelle analizzate.

Se necessario, sarò lieto di andare più nello specifico.  
Grazie

---

<div class="post-metadata">

**Author:** ![emilio](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/emilio/32/16095_2.png) [@emilio](https://it.discourse.mcneel.com/u/emilio)\
**Post date:** [27 Gennaio 2023, 12:06pm UTC](https://it.discourse.mcneel.com/t/bake-automatico/4900/5 "2023-01-27T12:06:36Z")

</div>

Scusa la curiosita’, Martino.

> [@Martino\_Cantamessa](#):
>
> ho un software che mi itera tutte le combinazioni possibili dei parametri di Grasshopper.

Come fa il tuo software a comunicare con Grasshopper ?

Grazie. 🙂

---

<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:** [27 Gennaio 2023, 1:19pm UTC](https://it.discourse.mcneel.com/t/bake-automatico/4900/6 "2023-01-27T13:19:36Z")

</div>

Ho buttato giù una bozza, riciclando roba che avevo fatto in passato, di come far dialogare gh con un plugin rhino.

In pratica questo componente:

- esegue il suo codice solo al **rilascio** di un bottone, ovvero quando il valore passa da true a false.
- fa il “bake” di una geometria assegnandogli un layer, nome (nickname) e GUID (generandolo dal nickname).
- se trova una geometria con lo stesso GUID , la elimina e sostituisce.
- seleziona la geometria
- esegue il comando “\_Volume”
- legge lo storico dei prompt dei comandi e estrae l’ultima riga (qui a volte fallisce ed estrae altro, tipo “Autosave completed.”)

 ![2023-01-27 14_12_19-Grasshopper - bake automatico V0.1_](https://global.discourse-cdn.com/mcneel/uploads/mcneel_it/original/2X/a/a482aeba11579fe732bd4989c6ab8b070ec078fc.png)  
[bake automatico V0.1.gh](https://it.discourse.mcneel.com/uploads/short-url/tP2lkPnsSbWo0GxYbZorjyMOMZ5.gh) (9,2 KB)

Nel tuo caso devi sostituire “\_Volume” con quello che hai te.  
Non so nemmeno se puoi avere un feedback sul prompt dei comandi…  
L’idea migliore sarebbe usare il plugin via codice, tramite le sue librerie, dovresti contattare lo sviluppatore.

Codice:

```auto
using System.Security.Cryptography;
using System.Text;

  private void RunScript(string Layer, string nick, GeometryBase geo, bool bake, ref object result)
  {
    if(bake)pressed = true;
    else if(pressed){
      pressed = false;

      RhinoDoc doc = this.RhinoDocument;
      int layeri = doc.Layers.FindName(Layer).Index;
      bool state = doc.Layers[layeri].IsLocked;
      doc.Layers[layeri].IsLocked = false;

      doc.Objects.UnselectAll();

      byte[] hash = System.Security.Cryptography.MD5.Create().ComputeHash(Encoding.Default.GetBytes(nick));
      System.Guid id = new Guid(hash);

      ShowAndDelete(id);

      Rhino.DocObjects.ObjectAttributes att = new Rhino.DocObjects.ObjectAttributes();
      att.LayerIndex = layeri;
      att.ObjectId = id;
      att.WireDensity = -1;
      att.Name = nick;

      doc.Objects.Add(geo, att);

      doc.Views.Redraw();

      doc.Objects.Select(id);

      Rhino.RhinoApp.RunScript("_Volume", true);
      string commandhistory = Rhino.RhinoApp.CommandHistoryWindowText;
      string[] results = commandhistory.Split(new [] { '\r', '\n' });
      result = results[results.Length - 2];

      doc.Layers[layeri].IsLocked = state;

    }
  }

  // <Custom additional code> 
  public bool pressed;
  public void ShowAndDelete(Guid id){
    Rhino.DocObjects.RhinoObject obj = this.RhinoDocument.Objects.FindId(id);
    if(obj != null){
      obj.Attributes.Visible = true;
      obj.CommitChanges();
    }
    this.RhinoDocument.Objects.Delete(id, true);
  }

```

---

<div class="post-metadata">

**Author:** ![Martino\_Cantamessa](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/martino_cantamessa/32/17765_2.png) [@Martino\_Cantamessa](https://it.discourse.mcneel.com/u/Martino_Cantamessa)\
**Post date:** [27 Gennaio 2023, 2:44pm UTC](https://it.discourse.mcneel.com/t/bake-automatico/4900/7 "2023-01-27T14:44:15Z")

</div>

Il software é in grado in automatico di comunicare con Grasshopper, quindi non mi sono posto il problema.  
Il programma in questione é modeFrontier di Esteco.

---

<div class="post-metadata">

**Author:** ![Martino\_Cantamessa](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/martino_cantamessa/32/17765_2.png) [@Martino\_Cantamessa](https://it.discourse.mcneel.com/u/Martino_Cantamessa)\
**Post date:** [27 Gennaio 2023, 2:45pm UTC](https://it.discourse.mcneel.com/t/bake-automatico/4900/8 "2023-01-27T14:45:43Z")

</div>

Grazie infinite, proverò a giocarci e mi farò vivo per rompervi le scatole. 😅

---

<div class="post-metadata">

**Author:** ![lucio\_zadra](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/lucio_zadra/32/16361_2.png) [@lucio\_zadra](https://it.discourse.mcneel.com/u/lucio_zadra)\
**Post date:** [28 Gennaio 2023, 9:44am UTC](https://it.discourse.mcneel.com/t/bake-automatico/4900/9 "2023-01-28T09:44:14Z")

</div>

> [@RiccardoMajewski](#):
>
> La domanda però è: perché farlo?

Mio personale pensiero: per fare un comando di rhino che funzioni senza l’interfaccia ingombrante di gh.  
Faccio la mia definizione in gh, la butto in un pulsante al pari di uno script o macro, la richiamo passando i valori da barra di comando o con qualche finestra di input e faccio il bake.  
Ovviamente sarebbe molto limitante, poco dinamico rispetto a tutti i controlli che si possono mettere nella finestra gh ma sarebbe più integrato nel flusso di lavoro classico.  
Da ignorante in gh mi pare ci fosse il gh remote che dovrebbe fare qualcosa di simile ma forse mi sbaglio… magari tutto quello che ho detto è una boiata, nel caso mi scuso.

---

<div class="post-metadata">

**Author:** ![emilio](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/emilio/32/16095_2.png) [@emilio](https://it.discourse.mcneel.com/u/emilio)\
**Post date:** [28 Gennaio 2023, 11:34am UTC](https://it.discourse.mcneel.com/t/bake-automatico/4900/10 "2023-01-28T11:34:54Z")

</div>

> [@lucio\_zadra](#):
>
> Faccio la mia definizione in gh, la butto in un pulsante al pari di uno script o macro, la richiamo passando i valori da barra di comando o con qualche finestra di input e faccio il bake.

Certo, e’ un’idea che gira da molto tempo, in pratica da quando e’ nato GH.  
E forse McNeel sta cercando di dare una mano … finalmente 😉 . Ad esempio:

> **[Rhino 8 Feature: GH1 Is Now More Than Just Geometry!](https://discourse.mcneel.com/t/rhino-8-feature-gh1-is-now-more-than-just-geometry/147294)**
>
> New Data Types Available in GH1 Have you ever been frustrated that you couldn’t bake geometry with custom attributes? What about display materials? Have you ever wanted to be able to use native Rhino materials in the Grasshopper display pipeline?...

> **[Write Rhino Commands in Grasshopper](https://discourse.mcneel.com/t/write-rhino-commands-in-grasshopper/99764)**
>
> Turn your Grasshopper definitions into Rhino commands The latest V7 WIP contains a new “GrasshopperPlayer” command along with several new components for this feature. The GrasshopperPlayer’s intent is to allow a definition to be run as a normal...

---

<div class="post-metadata">

**Author:** ![alex.coppola7](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/alex.coppola7/32/18314_2.png) [@alex.coppola7](https://it.discourse.mcneel.com/u/alex.coppola7)\
**Post date:** [28 Gennaio 2023, 2:06pm UTC](https://it.discourse.mcneel.com/t/bake-automatico/4900/11 "2023-01-28T14:06:14Z")

</div>

C’è un GH remote, ma c’è anche GH player. Poco usati, ma qualcosa si fa
