Script C# in GH: inviare valore da codice addizionale all'output parameter A

Ciao Ricc, non conosco le cose di cui parli.
Potresti spiegarmi meglio?

Ogni 2 secondi deve essere inviato in A un punto.

“un punto” ? :sweat_smile:
mmm … vedi se questo ha senso per te…

  private void RunScript(int ms, bool Reset, bool On, ref object A)
  {
    if(timer == null | Reset){
      if(timer != null){
        timer.Stop();
        timer.Enabled = false;
      }
      timer = new System.Timers.Timer();
      timer.Interval = ms;
      timer.AutoReset = true;
      timer.Elapsed += EseguiQualcosa;
      k = 0;
    }
    timer.Interval = ms;
    timer.Enabled = On;

    A = k;
  }

  // <Custom additional code> 
  int k = 0;
  public System.Timers.Timer timer;
  public void EseguiQualcosa(Object source, System.Timers.ElapsedEventArgs e){
    k++;
    this.Component.ExpireSolution(true);
  }

timer.gh (8,7 KB)

1 Mi Piace

Una versione un po’ così.
punti.gh (12,6 KB)

Grazie Ricc, lo guarderò.

Comunque un codice funzionante l avevo scritto, ma non riuscivo a mandare unq proprietà dal codice addizionale.

Buongiorno Ricc,

Al posto di int K, riesci ad instanziare un oggetto nel codice addizionale con la Proprietà interoK e mandarla alla sezione principale ?

Eh …si.
Ma non mi sto immaginando il quadro completo.

Il succo è: se dichiari un oggetto al di fuori del void principale RunScript, ovvero lo dichiari sotto alla riga // <Custom additional code> , allora tale oggetto non verrà perso tra una esecuzione e l’altra del RunScript, non verrà resettato.

Fintanto che il tuo oggetto (con proprietà interoK) non viene cancellato o sostituito da qualche metodo, rimarrà accessibile così come lo hai lasciato l’ultima volta.

2024-06-15 13_36_29-Grasshopper - bob
bob.gh (4,4 KB)

 private void RunScript(bool Reset, object y, ref object A)
  {
    if(Reset | bob == null){
      bob = new MiaClasse(10);
    }else{
      bob.FaiQualcosa();
      A = bob.interoK;
    }
  }

  // <Custom additional code> 
  MiaClasse bob;
  class MiaClasse{
    public int interoK;
    public MiaClasse(int valoreiniziale){
      interoK = valoreiniziale;
    }
    public void FaiQualcosa(){
      interoK++;
    }
  }

Così dichiari un campo, non una proprietà.
Ad ogni modo tra poco provo quanto mi avete mandato, grazie.

Eh… a livello di terminologia sono estremamente noob.
Comunque dovrebbe essere tutto uguale in pratica… entrare e uscire dalla sezione principale…

Questo perché?

@RiccardoMajewski grazie per l’utilissimo supporto. L’ho dovuto rimaneggiare, ma senza non so quando avrei risolto sinceramente.

@Riccardo_Gatti :sweat_smile:

ps aereo su percorso.

1 Mi Piace

L’appetito vien mangiando: come trovo il cerchio osculatore di una spline in un punto?

mi rispondo da solo :joy:

Ciao Luca

C’e’ anche il metodo CurvatureAt di Curve
https://developer.rhino3d.com/api/rhinocommon/rhino.geometry.curve/curvatureat

Breve test … sempre se e’ giusto … :confused: :smile:

Lo script e’ in Python, sorry :blush: , ma e’ tutto RhinoCommon.