Gestire Script

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?

Salvio … qui ci vuole una categoria Archeologia … :grinning_face_with_smiling_eyes:
E chi si ricorda 'ste cose preistoriche ? :wink:

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 … :confused: ).

Altro non saprei … sorry …

Ciao !

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

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.

Scusa Salvio, di quale guida stiamo parlando ?

la guida classica premendo F1 dall’editor di VBScript

1 Mi Piace

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.

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

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.

… In attesa delle spiegazioni di Sergio …

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

… Oppure non ho capito un tubo ? :confused:

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

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?

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

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

Scusa, come funziona ? :slight_smile:
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 … :confused:

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

1 Mi Piace

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

1 Mi Piace

hai ragione non’è C# :thinking: :thinking:

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

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

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

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

ormai non ci capisco più nulla. . . che debbo fare :exploding_head: :exploding_head:

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?

1 Mi Piace

1 - Installing Tools
2 - Your First Plugin

Segui scrupolosamente la guida.

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 :pray:

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

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

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’ … :slight_smile:

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 :sob: :sob:

1 Mi Piace

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

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