Gestire Script

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

Cos’e’ RhinoCommand ?
Dove lo hai letto ?

la fretta la fretta RhinoCommon sorry

ottima. . . come dire: escamotage :wink:

Sergio io ho seguito le indicazioni del link che hai postato, adesso non mi lasciare solo però. . .
che se sto cercando di iniziare questa nuova sfida e per colmare le lacune che ci sono con VBS/Py

https://developer.rhino3d.com/guides/rhinoscript/primer-101/4-operators-and-functions/

So what if we want our function to manipulate several variables? How do we get around the ‘one return value only’ limitation? There are essentially four solutions to this, two of which are far too difficult for you at this moment and one of which is just stupid… try to guess which is which:

Use global variables
Declare arguments by reference
Return an array
Return a class instance

We’ll focus on number two for the time being. (#1 was the stupid option in case you were wondering.)

mi sa che la scelta 1 è quella che senza saperlo avevo scelto :laughing: :laughing: :sweat_smile:

Since the arguments are passed in by value, intA and intB are left intact when AnotherBogusFunction is called. Although the function received the values 4 and 7 respectively, it does not know where they came from and thus when it increments them on lines 11 and 12, the operation only applies to the local variable copies intNumber1 and intNumber2.

Passing arguments by reference is quite a tricky thing to wrap your head around, so don’t feel bad if you don’t get it at first. You can rest assured that in almost all cases we’ll be using the ByVal approach which means our data is simply copied out of harms way.

There is one other reason to use ByRef arguments which has to do with optimization. Whenever you pass an argument to a function it will be copied in the computer memory. With small stuff like integers, vectors and shorts strings this doesn’t matter, but when you start copying huge arrays back and forth you’re wasting memory and processor cycles. If it turns out your script is running slowly you could consider passing arguments by reference in order to avoid casual copying. You have to be careful not to change them, or very unpredictable things will start happening.

se non erro si tratta dell’argomento di cui parlasti con Emilio: ByRef e ByVal

alla fine quello che intendevo fare con le classi in VBS si fa direttamente con le Funzioni
mentre io invece all’epoca per far funzionare la Funzione dovetti dichiarare le variabili pubbliche
invece leggendo alcuni passi che spiegavano le Funzioni ho trovato proprio quello che m interessava:

Option Explicit

Function somma()
	somma = 3 * 3
End Function

Call Main()
Sub Main()
	Rhino.Print somma()
End Sub

:face_with_raised_eyebrow:

1 Mi Piace

perplesso? non ti convince. . .

… no no … sono stupefatto. Del resto anche il titolo,
Advanced function syntax, è molto appropriato.

Hahahahahaha …
Confessa che non lo sapevi, Sergio :wink: … le funzioni sono una cosa MOOOOOLTO advanced.
:grinning_face_with_smiling_eyes: :grinning_face_with_smiling_eyes: :grinning_face_with_smiling_eyes:

1 Mi Piace

Si’, certo.
Quella pagina fa parte della documentazione relativa a RhinoCommon.
E comunque per comunicare con Rhino tramite C# c’e’ poco da sbagliare. :wink:
Puoi usare solo RhinoCommon. :grinning:

1 Mi Piace

inizio col dire che ho aperto un 3d proprio su C# in Rhino:

:+1: