# Gestire Script

**URL:** <https://it.discourse.mcneel.com/t/gestire-script/4800>\
**Category:** Bar-Rhino\
**Created:** [24 Novembre 2022, 11:06am UTC](https://it.discourse.mcneel.com/t/gestire-script/4800 "2022-11-24T11:06:27Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [24 Novembre 2022, 11:06am UTC](https://it.discourse.mcneel.com/t/gestire-script/4800/1 "2022-11-24T11:06:27Z")

</div>

un parere dagli esperti:

realizzando un file **RVB** dove ogni **SUB** è da associare ad un pulsante  
per gestire al meglio il codice, sarebbe un metodo migliore copiare i codici dalla guida  
e poi creo le mie **SUB** richiamando le **Routine** all’occasione e gestendole tra di loro?

ho il dubbio se per caso tra i vari codici copiati in ogni **SUB** possa verificarsi un conflitto  
essendo che a volte le variabili che sono dichiarate nella guida hanno lo stesso nome  
oppure lo stesso discorso vale per le variabili che andrei a dichiarare nelle mie **SUB**

ps ma RScript non ha le classi?

---

<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:** [25 Novembre 2022, 1:33pm UTC](https://it.discourse.mcneel.com/t/gestire-script/4800/2 "2022-11-25T13:33:35Z")

</div>

Salvio … qui ci vuole una categoria Archeologia … 😄  
E chi si ricorda 'ste cose preistoriche ? 😉

Forse … ma proprio forse … mi sembra che per eseguire routine diverse dallo stesso script si usassero insieme sia LoadScript che RunScript nello stesso pulsante ( se i nomi sono giusti … 😕 ).

Altro non saprei … sorry …

Ciao !

---

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [25 Novembre 2022, 11:17pm UTC](https://it.discourse.mcneel.com/t/gestire-script/4800/3 "2022-11-25T23:17:02Z")

</div>

ciao Emilio,  
chiarisco meglio essendo che come immagino sono stato poco chiaro:

```auto
Sub ListBox()
	Dim arrLayers, strResult
	arrLayers = Rhino.LayerNames
	If IsArray(arrLayers) Then
		strResult = Rhino.ListBox(arrLayers, "Layer to set current")
		If Not IsNull(strResult) Then
			Call Rhino.CurrentLayer(strResult)
		End If
	End If
End Sub

Call Main()
Sub Main()
	ListBox()
End Sub

```

ho preso giusto un esempio, richiamo una routine dalla routine che vado ad eseguire  
ultimamente lo stavo facendo ma sempre con tutto il codice scritto da me  
adesso invece mi chiedevo se potevo usare direttamente il codice della guida senza avere problemi  
nel senso che copiando il codice dalla guida, nelle routine capita spesso che le variabili hanno lo stesso nome, non credo dovrebbe essere un problema questo essendo che le sub sono private però volevo giusto una conferma in merito o se ci sono altre cose a cui dovrei prestare attenzione per non fare errori.  
essendo che già mi è capitato più volte (come sapete) che avevo preso una direzione nel fare una determinata cosa, per poi ad un certo punto ritrovandomi con un problema e dover rifare tutto da capo.

---

<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:** [25 Novembre 2022, 11:41pm UTC](https://it.discourse.mcneel.com/t/gestire-script/4800/4 "2022-11-25T23:41:02Z")

</div>

Scusa Salvio, di quale guida stiamo parlando ?

---

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [26 Novembre 2022, 11:17am UTC](https://it.discourse.mcneel.com/t/gestire-script/4800/5 "2022-11-26T11:17:23Z")

</div>

la guida classica premendo F1 dall’editor di VBScript

---

<div class="post-metadata">

**Author:** ![Sergio\_Alessi](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/sergio_alessi/32/22676_2.png) [@Sergio\_Alessi](https://it.discourse.mcneel.com/u/Sergio_Alessi)\
**Post date:** [26 Novembre 2022, 1:59pm UTC](https://it.discourse.mcneel.com/t/gestire-script/4800/6 "2022-11-26T13:59:47Z")

</div>

> [@0904](#):
>
> ssendo che già mi è capitato più volte (come sapete) che avevo preso una direzione nel fare una determinata cosa, per poi ad un certo punto ritrovandomi con un problema e dover rifare tutto da capo.

Per primo dovresti focalizzarti in un solo linguaggioe concentrarti su quello  
per almeno un anno: c#?  
Nell’esempio hai dichiarato all’interno della sub le variabili:  
Dim arrLayers, strResult  
Se all’interno di un altra sub inserisci le stesse omonime variabili non sussiste il  
pericolo di conflitto proprio perché dichiarate all’interno di due funzioni distinte:  
ogni variabile dichiarata all’interno di una funzione viene inizializzata  
e distrutta a esecuzione ultimata della ripsettiva funzione.

---

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [26 Novembre 2022, 2:31pm UTC](https://it.discourse.mcneel.com/t/gestire-script/4800/7 "2022-11-26T14:31:27Z")

</div>

ciao Sergio e grazie per la conferma era la prima domanda alla quale ero quasi sicuro del risultato  
poi come già accennato al fatto se era possibile creare le classi in VBScript, essendo che avevo pensato di usare quelle per recuperare il risultato se ho capito bene (dagli esempi che ho visto postati per le classi)  
ciò che ho inteso: metto il codice in una classe e alla fine con result mi ritorna output della classe ri-chiamata  
quindi se così fosse mi sarebbe molto comodo gestire i vari script richiamarli senza 1000 variabili public

> [@Sergio\_Alessi](#):
>
> Per primo dovresti focalizzarti in un solo linguaggioe concentrarti su quello  
> per almeno un anno: c#?

hai pienamente ragione il fatto e che tempo fa avevo anche installato C# ma non riuscito a far funzionare  
correttamente il codice, mi partiva Rhino ma non succedeva nulla anzi se ricordo bene mi usciva un errore  
alla fine anche se iniziassi a ri-scrivere i codici che maggiormente mi interessano sarebbe già un’ottima cosa anche perché alcuni script lavorano con oggetti di Rhino tipo schede e cose simili che sono obbligato ad usare il Command essendo che sia in VBS che Py non hanno accesso a tali oggetti poi se ricordo bene alcune discussioni si è pure accennato alla probabilità in futuro dell’esclusione di questi linguaggi minori  
quindi sarebbe cosa buona per lo meno iniziare poi chissà magari vedo che è anche alla mia portata. . .  
se qualcuno mi aiuta per la corretta installazione di C# in modo che possa interagire con Rhino ci ri-provo.

---

<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:** [26 Novembre 2022, 3:03pm UTC](https://it.discourse.mcneel.com/t/gestire-script/4800/8 "2022-11-26T15:03:10Z")

</div>

… In attesa delle spiegazioni di Sergio …

> [@0904](#):
>
> sarebbe molto comodo gestire i vari script richiamarli senza 1000 variabili public

Stai parlando di un solo script per fare diverse operazioni ?  
Ti e’ piu’ comodo avere uno script unico ?

… Oppure non ho capito un tubo ? 😕

> [@0904](#):
>
> avevo anche installato C# ma non riuscito a far funzionare

Scusa, non volevi usarlo con l’apposito componente di GH ?  
Tra l’altro, per quanto ne so, ci vuole Rhino 8 per poter utilizzare script in C# con Rhino (senza usare ne’ GH ne’ plug-ins).

---

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [26 Novembre 2022, 3:35pm UTC](https://it.discourse.mcneel.com/t/gestire-script/4800/9 "2022-11-26T15:35:39Z")

</div>

> [@emilio](#):
>
> Stai parlando di un solo script per fare diverse operazioni ?  
> Ti e’ piu’ comodo avere uno script unico ?

si in pratica ho un file RVB con oltre 2000 righe di codice tutti in VBS con varie Sub  
ogni Sub è associata ad un pulsante che mi ri-chiama la Routine ed esegue il codice  
è lo script che scrissi all’inizio che mi iscrissi qui tempestando di domande te e Lucio 😉  
poi ero passato a Gh, adesso che ci stavo rimettendo le mani stavo apportando delle modifiche  
e quindi con un po di esperienza in più volevo gestire meglio il codice essendo che per ogni Sub  
a volte capita di ripete lo stesso codice quindi volevo ottimizzarlo anche per una lettura più chiara  
e poi dopo qualche annetto di esperienza vedo delle pecche nell’esecuzione che prima non notavo.

> [@emilio](#):
>
> Scusa, non volevi usarlo con l’apposito componente di GH ?  
> Tra l’altro, per quanto ne so, ci vuole Rhino 8 per poter utilizzare script in C# con Rhino (senza usare ne’ GH ne’ plug-ins).

si inizialmente era questo il mio approccio ma giusto per iniziale a prendere confidenza con C#  
poi come ho detto riprendendo questo script in VBS avevo pensato di provarci in C# ma si bloccava

non saprei io avevo cercato in rete e avevo letto che era possibile a meno che non ho preso una cantonata però ti so dire che ero arrivato a buon punto, scrivevo il codice in Visual Studio e quando avviavo il codice mi si apriva Rhino, però o non succedeva nulla o mi usciva un errore che mancava qualche cosa.

ero andato sicuro anche perché alcune volte mi avevi consigliato di imparare C# in modo che avrei potuto fare anche dei plug-in ma dopo quello che mia hai detto e qualche ricerca fatta forse parlavi di RCommon?

> **[Installing Tools (Windows)](https://developer.rhino3d.com/guides/rhinocommon/installing-tools-windows/)**
>
> This guide covers the tools required to author, build and debug Rhino plugins on Windows.

questo è il link che ho trovato adesso che parla di Common

> **[Installing Tools (Windows)](https://developer.rhino3d.com/guides/cpp/installing-tools-windows/)**
>
> This guide covers all the necessary tools required to author Rhino plugins in C/C++ on Windows.

questo invece è il link seguito tempo fa per C#  
se ho inteso bene dovrebbe permettere di scrivere codice in C# per Rhino giusto?

---

<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:** [26 Novembre 2022, 4:59pm UTC](https://it.discourse.mcneel.com/t/gestire-script/4800/10 "2022-11-26T16:59:34Z")

</div>

> [@0904](#):
>
> ho un file RVB con oltre 2000 righe di codice tutti in VBS con varie Sub  
> ogni Sub è associata ad un pulsante che mi ri-chiama la Routine ed esegue il codice

Scusa, come funziona ? 🙂  
Come fanno pulsanti diversi a richiamare routine diverse dallo stesso file ?  
C’entrano le classi di cui parlavi e le variabili globali ?  
E adesso vuoi cambiare qualcosa ?

Quindi con C# vuoi scrivere dei plug-in.  
Spiacente, non credo di aver mai provato a fare un plug-in RhinoCommon … 😕

Occhio che il secondo link che hai postato si riferisce al C++, non al C#. 🙂

---

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [26 Novembre 2022, 5:23pm UTC](https://it.discourse.mcneel.com/t/gestire-script/4800/11 "2022-11-26T17:23:56Z")

</div>

> [@emilio](#):
>
> Scusa, come funziona ? 🙂  
> Come fanno pulsanti diversi a richiamare routine diverse dallo stesso file ?  
> C’entrano le classi di cui parlavi e le variabili globali ?

 ![Emilio1](https://global.discourse-cdn.com/mcneel/uploads/mcneel_it/original/2X/7/74881aca1d2f404d1d450b89e7dacca8b0fb3758.png)

nel file RVB scrivo tutte le Sub che voglio poi nel pulsante con RunScript richiamo la Sub che mi interessa  
nel secondo pulsante richiamo la prima Sub Main che a sua volta richiama le altre due Sub 1 e 2

ps ovviamente dopo aver salvato il file RVB lo debbo caricare in Rhino

---

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [26 Novembre 2022, 5:40pm UTC](https://it.discourse.mcneel.com/t/gestire-script/4800/12 "2022-11-26T17:40:09Z")

</div>

> [@emilio](#):
>
> Occhio che il secondo link che hai postato si riferisce al C++, non al C#.

hai ragione non’è C# 🤔 🤔

> [@emilio](#):
>
> Quindi con C# vuoi scrivere dei plug-in.

per plug-in veri e propri non’è che mi interessa, mi basta un file dove scrivo il codice  
ed un modo che mi faccia eseguire quel codice, se debbo creare un plug-in è secondario

---

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [26 Novembre 2022, 5:55pm UTC](https://it.discourse.mcneel.com/t/gestire-script/4800/13 "2022-11-26T17:55:15Z")

</div>

> [@0904](#):
>
> hai ragione non’è C# 🤔 🤔

però se vado in questa pagina dove si parla di sviluppo:

> **[Rhino and Grasshopper Developer Documentation](https://developer.rhino3d.com/)**
>
> Official developer resources for Rhino and Grasshopper. Rhino developer tools are royalty free and include support.

 ![Screenshot 2022-11-26 at 18-47-23 Rhino and Grasshopper Developer Documentation](https://global.discourse-cdn.com/mcneel/uploads/mcneel_it/original/2X/5/5aebccb0149b615a08bb75fcb15837a00ae68c6c.png)

cliccando su RhinoCommon o su C/C++ mi riporta sempre alla stessa pagina:

> **[Samples](https://developer.rhino3d.com/samples/)**
>
> All the official sample code available for Rhino and Grasshopper developers.

e se mi interessa creare una retta comunque l’esempio di codice è questo:

 ![Screenshot 2022-11-26 at 18-47-44 Add Line](https://global.discourse-cdn.com/mcneel/uploads/mcneel_it/original/2X/9/9142e5a1b6c3c2161caac1eb7d37bb414ad3a86f.png)

ormai non ci capisco più nulla. . . che debbo fare 🤯 🤯

---

<div class="post-metadata">

**Author:** ![Sergio\_Alessi](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/sergio_alessi/32/22676_2.png) [@Sergio\_Alessi](https://it.discourse.mcneel.com/u/Sergio_Alessi)\
**Post date:** [26 Novembre 2022, 6:03pm UTC](https://it.discourse.mcneel.com/t/gestire-script/4800/14 "2022-11-26T18:03:29Z")

</div>

Ciao Salvio  
sono contento di aver confermato ciò di cui eri già quasi sicuro,  
Non ho capito bene: tu crei una classe che dovrebbe sostituire  
1000 variabili pubbliche che servono per gestire 2000 righe di  
codice?  
Supponiamo che esegui una sub del tuo codice: cosa ti restituisce  
questa sub per richiede delle variabili pubbliche? Serve per  
condividere dati con le altre sub? E cos’è il result della classe?

---

<div class="post-metadata">

**Author:** ![Sergio\_Alessi](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/sergio_alessi/32/22676_2.png) [@Sergio\_Alessi](https://it.discourse.mcneel.com/u/Sergio_Alessi)\
**Post date:** [26 Novembre 2022, 6:16pm UTC](https://it.discourse.mcneel.com/t/gestire-script/4800/15 "2022-11-26T18:16:28Z")

</div>

> [@0904](#):
>
> ormai non ci capisco più nulla. . . che debbo fare 🤯 🤯

> **[Guides](https://developer.rhino3d.com/guides/#getting-started-1)**
>
> All the guides available for developing for Rhino or Grasshopper.

1 - Installing Tools  
2 - Your First Plugin

Segui scrupolosamente la guida.

---

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [26 Novembre 2022, 7:59pm UTC](https://it.discourse.mcneel.com/t/gestire-script/4800/16 "2022-11-26T19:59:48Z")

</div>

> [@Sergio\_Alessi](#):
>
> Ciao Salvio  
> sono contento di aver confermato ciò di cui eri già quasi sicuro,  
> Non ho capito bene: tu crei una classe che dovrebbe sostituire  
> 1000 variabili pubbliche che servono per gestire 2000 righe di  
> codice?  
> Supponiamo che esegui una sub del tuo codice: cosa ti restituisce  
> questa sub per richiede delle variabili pubbliche? Serve per  
> condividere dati con le altre sub? E cos’è il result della classe?

vabbè era per dire 1000 variabili. . . nel senso la mia idea di poter usare le classi “per quello che ho capito di poter sfruttare” tipo: (sostituire le variabili pubbliche con le classi) scusare il linguaggio poco tecnico 🙏

esempio:  
in questo file RVB ho una Funzione che viene richiamata in più Sub  
per poter prendermi il valore del risultato della Funzione ho dovuto dichiarare alcune Variabili Pubbliche

ora se volessi strutturare/ottimizzare tutto il codice di questo file in questo modo  
dovrei dichiarare una miriade di Variabili pubbliche per poter interagire tra le varie Sub/Function

(ora sempre se quello che sto per dire non sia da buttare)

non ricordo bene se ci voglia una classe oppure basta anche una def (in questo caso parlo di Py)  
ma alla fine del codice con la funzione “return” mi prendo il risultato della def/classe ripeto  
se così fosse invece di n Sub per poi crearci le variabili pubbliche creo direttamente  
una def o classe in modo che richiamandole mi torna il risultato di return.

ps spero di essermi spiegato

---

<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:** [26 Novembre 2022, 8:02pm UTC](https://it.discourse.mcneel.com/t/gestire-script/4800/17 "2022-11-26T20:02:00Z")

</div>

> [@0904](#):
>
> cliccando su RhinoCommon o su C/C++ mi riporta sempre alla stessa pagina:

Ah, OK, dev’essere perche’ gli esempi per i vari linguaggi sono pubblicati nella stessa pagina. Bene.

> [@0904](#):
>
> mi basta un file dove scrivo il codice  
> ed un modo che mi faccia eseguire quel codice

Temo che l’unico modo per eseguire istruzioni C# su Rhino 7 (senza usare GH) siano i plug-in.

Credo che Sergio sapra’ darti le dritte necessarie, in caso di difficolta’ … 🙂

---

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [26 Novembre 2022, 8:15pm UTC](https://it.discourse.mcneel.com/t/gestire-script/4800/18 "2022-11-26T20:15:04Z")

</div>

> [@emilio](#):
>
> Credo che Sergio sapra’ darti le dritte necessarie, in caso di difficolta’ … 🙂

io sto ri-provando ad re-installarlo faccio gli scongiuri. . . anche perché non mi piace arrendermi  
poi chissà tra qualche tempo scopro le cose che non potevo fare in VBS/Py non le posso fare  
nemmeno in C/C++/C# ahahahah a quel punto 😭 😭

---

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [26 Novembre 2022, 8:53pm UTC](https://it.discourse.mcneel.com/t/gestire-script/4800/19 "2022-11-26T20:53:58Z")

</div>

> **[RhinoDoc Class](https://developer.rhino3d.com/api/RhinoCommon/html/T_Rhino_RhinoDoc.htm)**
>
> Represents an active model.

scusate in questa guida vedo che il codice è scritto in C# ma in conclusione si tratta di RhinoCommand?

---

<div class="post-metadata">

**Author:** ![Sergio\_Alessi](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/sergio_alessi/32/22676_2.png) [@Sergio\_Alessi](https://it.discourse.mcneel.com/u/Sergio_Alessi)\
**Post date:** [26 Novembre 2022, 9:01pm UTC](https://it.discourse.mcneel.com/t/gestire-script/4800/20 "2022-11-26T21:01:06Z")

</div>

> [@0904](#):
>
> esempio:  
> in questo file RVB ho una Funzione che viene richiamata in più Sub  
> per poter prendermi il valore del risultato della Funzione ho dovuto dichiarare alcune Variabili Pubbliche

Rimane il fatto che per risponderti bisogna sempre brancolare alla cieca …  
Invece delle variabili globali utilizza i metodi Get/SetDocumentData.

Esempio molto banale:

Sub SetMyColor()  
Dim MyColor  
MyColor = Rhino.GetColor(lngColor)  
If not IsNull(lMyColor) Then  
Rhino.SetDocumentData “MyApp”, “MyColor”, MyColor  
End If  
End Sub

Sub MyDraw()  
Dim MyColor  
MyColor = Rhino.GetDocumentData(“MyApp”, “MyColor”)  
if isNull(MyColor) then  
'gestire l’errore che il colore non è settato  
end if  
…  
Dim Obj  
Obj=rhino.AddLine(p1,p2)  
Rhino.ObjectColor Obj, MyColor  
…  
End Sub

[Pagina seguente](https://it.discourse.mcneel.com/t/gestire-script/4800.md?page=2)
