Bake Automatico

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

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.

2 Mi Piace

yesss

Cerco di riassumere e voi mi direte se Ă© fattibile :sweat_smile:

  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

Scusa la curiosita’, Martino.

Come fa il tuo software a comunicare con Grasshopper ?

Grazie. :slight_smile:

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.”)


bake automatico V0.1.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:

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);
  }
2 Mi Piace

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

1 Mi Piace

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

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.

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 :wink: . Ad esempio:

2 Mi Piace

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

2 Mi Piace