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.

3 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.

2 Mi Piace

Velocità effettiva del modello aliante, 100km/h, il percorso è di oltre 5 km, il movimento e la velocità sono realistici ed effettivi. Ho calcolato l’azione dell’accelerazione in curva perché la virata non sia sbandata.

2 Mi Piace

stavolta ho preferito per costruzione geometrica, tre componenti e via.

1 Mi Piace

Super fico!

Domanda - tecnicismo:
Se hai usato la curvatura locale del percorso, la forza centrifuga e quindi calcolato il rollio dell’aereo … sarebbe in realtà adatta per costruire una “pista virtuale” per una sfera che rotola… giusto?
In teoria l’effetto dell’aria sulle ali, dato che non c’è rigidità, ha una “lag” per così dire… un ritardo…
(ma forse è un effetto che si nota solo sulle virate strette?)
Forse se consideri in anticipo di x decine metri in avanti il percorso per rilevare la curvatura, risulta un effetto un pelino più realistico.
… è probabile io stia vaneggiando.

PS non vedo l’ora che fai una animazione più veloce

1 Mi Piace

La curvatura mi è servita per ottenere direzione e verso puntuale dell accelerazione cetrifuga che sommo vettorialmente alla gravità. Esatto, così trovo il vettore che posiziona il velivolo secondo un angolo di rollio, ma che non mi serve calcolare analiticamente, perché impostando correttamente i prodotti vettoriali va tutto a posto senza formule.
Si, possiamo fare anche la pista, corretto, soprattutto se la sfera scivola, se c’è puro rotolamento bisogna fare le considerazioni del caso.

Non ho capito, scusami.

O che sia io a non comprendere, probabilmente :stuck_out_tongue_winking_eye:. Se provi a spiegare in altro modo magari…

Più veloce si, ma più fluido no o di poco.

Se aumenti troppo l intervallo crasha GH.

Molto bello il metodo di calcolo dei vettori sulla curva.
Bravo!