Analisi del Codice

Sei piu’ esperto di quanto credessi, bene ! :grinning:

Per avere il numero converti in un intero

int( tipo_oggetto )
1 Mi Piace

naaaaaaa dai. . .

:rage: :rage:

sto da ieri a provare in tutti i modi possibili e a fare ricerche in ogni libreria e sul forum

ma quale esperto, mi ha fregato una conversione da niente

(ma potevano mettere una info a tale riguardo pero. . .)

vabbè mo è meglio andare che a parte l’orario, questa conversione a int mi ha proprio :triumph: :triumph:

ps giustamente quello già è tutto semplice con gli OOP
consultare la guida come abbiamo visto è facilissimo
ovviamente aggiungere una breve descrizione. . .

e vabbè Emilio grazie come sempre, domani ripasso tutto
e cerco di mettere in pratica quello che hai spiegato
nel caso serve aiuto chiamo SuperEmilio :+1:

a domani :wave: :wave:

1 Mi Piace

Emilio mi sono preso una pausa per staccare un po essendo che per me è dura dura. . .

il primo passo mi sono dovuto avvicinare agli OOP e quindi capire le basi di C#
per poi cercare di riuscire a destreggiarmi nell’utilizzo di RCommon
ma con questa guida ti dico è peggio di una lingua arcaica
(sarà una mia fissa ma proprio non se ne scende)

pensando alla conversione che mi hai consigliato, mi sono chiesto in che modo avviene?
nel senso: in Python c’é la funzione Enumerate ritorna l’indice di una lista in un ciclo

immagine

nella guida da come leggo viene riportata proprio la funzione enum
infatti io prima della tua soluzione, come in Py avevo provato a dare un indice
[0] o [1] per farmi ritornare il valore numerico ma ovviamente senza successo.

quindi mi chiedevo come funziona in questo caso Enumerate (se ovviamente ne hai idea. . .)
(mi sfugge, il fatto che un risultato come “Curve” di una funzione convertendolo dia un risultato numerico)

Di quale guida parli ?
Per il C# se non erro stavi seguendo il corso con i video … :slight_smile:
Per RhinoCommon … c’e’ qualcosa qui:

… ma una guida singola e completa non credo ci sia …

No, la funzione enumerate() non c’entra.

Qui enum sta per enumeration.
E’ una cosa che si trova in molti linguaggi, per Python se non erro bisogna importare un modulo.
Indica una variabile che puo’ assumere un numero limitato di valori.
Questi valori sono individuati da un nome e da un numero.
Qui:
ObjectType Enumeration (rhino3d.com)
nella colonna Member name ci sono i nomi e in quella Value ci sono i numeri.
E’ come se fosse una serie di costanti.
Noi scriviamo Rhino.DocObjects.ObjectType.Curve, ma il valore utilizzato dal programma e’ 4
Per cui la ‘conversione’ in intero in realta’ cambia solo il tipo di dati, ma il valore era 4 prima e resta 4 anche dopo.
La ‘conversione’ tramuta un oggetto di tipo ObjectType che vale 4 in un intero, che vale sempre 4.

Solo che quando tu chiedi un output, come un print in Python o un Console.WriteLine in C#, il linguaggio legge 4 ma per un valore ObjectType scrive “Curve”, mentre per un intero scrive “4”.

immagine

in Python come mi facessi vedere tempo fa è già incorporata non ha bisogno di importare moduli

mmmm che lavorasse su valori costanti non c’erano dubbi, sia il Member che Value sono due Costanti
su questa cosa della conversione di cisuro è come dici che è anche stato il mio primo pensiero
in pratica e come se all’errore nella conversione del testo a numero, viene intercettato l’errore
essendo che in questo caso non si tratta di convertire “1” a 1 ma una serie di caratteri e
quindi con tipo un if va a prendere il valore numerico anziché quello di testo

chissà proverò a ri-convertire il valore numerico in testo vediamo cosa succede. . .
mi manda a quel paese ahahahah

https://developer.rhino3d.com/api/RhinoCommon/html/R_Project_RhinoCommon.htm

gli esempi della guida per RCommon (il mio Everest)
capire il ragionamento di come è strutturata questa guida non mi è facile (vediamo dove arriviamo. . .)

:+1:

Non ci sono errori. Non convertiamo da un testo, ma da un valore di una enumerazione,
che di per se’ e’ gia’ in intero, solo che e’ un intero con un nome, come fosse il nome di una variabile.
Il linguaggio sa che quel numero appartiene a una enumerazione, quindi quando gli chiedi di stamparlo, lui stampa il nome anziche’ il numero.

Se parti da un numero, ottieni un testo che rappresenta il numero, l’enumerazione non c’entra piu’ niente.

Ah, OK.
Be’, certo, come guida quegli esempi non sono il massimo.
Comunque, non essendoci una vera guida, in fondo si rivelano molto utili … anche chiedendo spiegazioni sul forum.

Io, dopo parecchio ravanamento, un’ idea me la sono fatta, almeno per alcune parti di RhinoCommon.
Se vuoi, chiedi … :slight_smile:

eeee è proprio questo il fatto, che come quando ho imparato ad usare VBS e Py chiedevo per ogni cosa,
poi dopo essermi fermato per approcciarmi a Gh, quando poi ho ripreso VBS e Py per apportare delle modifiche ai vecchi script già fatti, tranne qualche volta che ho chiesto sempre a voi sul forum, ma per 80% delle cose sono riuscito a risolverle da solo cercando in rete e sulla guida che avevo capito come usarla.

adesso invece avevo pensato di fare l’inverso, imparare come funziona la guida, cercare le soluzioni nei 3d e poi se necessario chiedere sul forum (come dovrebbe essere) ma questa guida non mi facilità a questo.

copiare solo spezzoni di codici senza sapere e capire cosa si sta facendo non mi sembra una buona idea, poi mettici che sono curioso peggio di un gatto e che mi faccio sempre mille domande ahahahah

(spero solo che questa volta non imparo ad usare la guida dopo aver imparato RCommon)

è questo mi spaventa, considerando le tue conoscenze ed esperienza se hai dovuto anche tu tribolare,
significa che è più tosta di quanto pensassi. . .

infatti, che stupido il numero viene semplicemente convertito in testo,
e vabbè questà sarà un’altra cosa che capirò col tempo su come accade

Significa solo che sono zuccone.
( Le mie conoscenze ed esperienza in fatto di programmazione sono quelle di un semplice appassionato … anche parecchio duro di comprendonio, come detto. :roll_eyes: )

Perche’ non e’ una guida.
E’ solo la documentazione relativa a quella interfaccia di programmazione (API).
Per fortuna c’e’ qualche esempio, poi come gia’ detto si chiede direttamente sul forum.
McNeel non ha il tempo per scrivere e aggiornare una guida, secondo me.

Se parli delle enum, secondo me funziona grosso modo cosi’.
Tabellina con alcune variabili di tipi diversi.
Di ogni variabile il linguaggio registra i primi 3 valori:
1 nome variabile
2 tipo di dati
3 valore

Quando serve convertire, ad esempio, in int o in string, il linguaggio applica le sue regole a seconda del tipo di dati, per cui otteniamo quanto si vede nelle ultime 2 colonne

variabile      tipo       valore          str()      int()
a        |  ObjectType |     4    |      'Curve'  |    4
b        |   int       |     8    |       '8'     |    8
c        |   string    |  "Line"  |       'Line'  |  ERRORE

Ma forse sarebbe meglio chiedere a Sergio … :blush:

1 Mi Piace

Enum è una associazione nome - numero per definire gruppi di costanti. L’enum più nota è true/false. La numerazione può essere automatica oppure definita dall’utente. L’uso intelligente delle enum possono rendere molto efficienti certe elaborazioni come ad esempio la enum binaria.

1 Mi Piace

Salvio la guida è essenziale e ipotizza che l’utente conosca in modo adeguato il linguaggio di programmazione scelto. Aggiungendo gli esempi e il supporto del forum dovresti essere in grado di fare tutto quello che vuoi. Chiaramente il supporto del forum (cat. Dev.) riguarda solo le api di rhino.

su questo siamo perfettamente d’accordo, infatti non a caso spesso dico che tante cose le assimilo dopo averlo usato per tanto tempo, in pratica dopo aver fatto esperienza, infatti quando leggo la guida che spiega determinati argomenti che non ho mai trattato ovviamente non comprendo nulla, ma dopo che mi avete spiegato come funziona e vado ad usare e fare delle prove, se dopo qualche mese rileggo qualcosa inerente al quel discorso, seguo non solo la teoria ma nella mente riesco a ricostruire tutti i passaggi spiegati da fare. per carità so anche, che per chi ha molta esperienza quando inizia una cosa nuova mai fatta, si ha bisogno di ricominciare da zero (o quasi) ma mi aspettavo una soluzione più alla mia portata.


si potrebbe vedere un piccolo esempio di una numerazione definita da utente o anche un link?

// Numerazione lasciata al compilatore che assegnerà 0 al primo membro, 1 al secondo ecc.
enum Mese{
Gennaio, 
Febbraio,
Marzo,
....
}

//In alternativa si può assegnare valori definiti dall'utente

enum Mese{
Gennaio=1, 
Febbraio=2,
Marzo=4,
Aprile=8,
....
}

La enumeration binaria è molto utilizzata per ottimizzare certe condizioni di verifica.
Ad esempio in rhino ObjectType:

https://developer.rhino3d.com/api/RhinoCommon/html/T_Rhino_DocObjects_ObjectType.htm

dove:

Point =1
PointSet=2
Curve =4
Surface=8

Questo consente di creare filtri numericamente molto efficienti:

// definisco un filtro utilizzando l’operatore or (|)
int filtro = Point | PointSet | Curve;

int a = Surface;
int res= a & filtro; // restituisce 0 => false

// mentre …

a = Point;
res= a & filtro; // restituisce 1 => vero

//oppure

a = Curve;
res= a & filtro; // restituisce 4 => vero

Spiegazione. I valori assegnati in forma binaria sono:

Point =1 // 0001
PointSet=2 //0010
Curve =4 // 0100
Surface=8 // 1000

La variabile filtro combina i valori con operatore or (regole tra bit: 0|0=0 1|0=1 0|1=1 1|1=1)
filtro = 7 // 0001 | 0010 = 0011 | 0100 = 0111
a=8 //1000 (surface)
L’operatore & (regole tra bit: 0&0=0 1&0=0 0&1=0 1&1=1)
res = a & filtro // 1000 & 0111 = 0
Se invece a = Curve, valore binario 0100
res = a & filtro // 0100 & 0111 = 0100 diverso tra 0 => vero!

Spero sia chiaro …

Sergio

1 Mi Piace

La soluzione semplice e’ RhinoScript o rhinoscriptsyntax.

Secondo me ci e’ andata anche bene che abbiano fatto RhinoCommon.
Se consideri che Rhino e’ nato senza pensare minimamente agli script, tra l’altro col suo linguaggio di comando ci puoi fare al massimo delle macro, anche parecchio difficili da scrivere, ma niente di piu’,
e che RhinoScript fu introdotto in Rhino 2 come sperimentale e con tutti i suoi limiti.
Forse non fosse per Steve e la sua passione per Python, saremmo ancora all’eta’ della pietra … pardon … di RhinoScript. :wink: :smile:

eeee ma usando rs non imparo RCommon :wink:

certo chiarissimo come la guida di delle API in RCommon :smiley:

bisognerebbe specificare a priori con “chiaro” cosa si intende
se con chiaro si vuol sottolineare il fatto di aver seguito il discorso allora
per me invece se una cosa la ritengo chiara, significa che posso replicarla in qualsiasi contesto
comunque +/- credo di aver colto la tua spiegazione

grazie @emilio @Sergio_Alessi :+1:

1 Mi Piace

eeee non proprio. . .

un’altro esempio ovviamente semplice. . ?
(ma sopratutto “diverso”)

Scusa Salvio, hai provato a guardare il video ?

Ho trovato anche questo

il secondo si, infatti grazie ai tutorial di Edoardo Midali (più alla mia portata)
sono riuscito a capire meglio il funzionamento di C#

il primo video di FCamuso mi ero fermato un bel po prima, essendo molto più tecnici
ed avanzati in un certo senso quindi mi perdevo tra i vari passaggi di codice
(per questo poi cercando altri tutoria sono arrivato a Edoardo Midali)

ps non’é enum in sè il problema, ma la spiegazione di ciò che fa dietro le quinte enum
lo so che sono concetti avanzati e sono adato a cercare anche nella guida di Microsoft

ripeto, approssimativamente il ragionamento caso per caso, seguo e comprendo il discroso
ovviamente, mancando la pratica non posso pretendere chissà cosa
però qualche diverso dettaglio in più, sarebbe utile.

ps nel video 82 (seconda parte) spiega proprio enum bitwise
speriamo. . .

Cerchiamo di non mischiare le cose … :wink:

L’enum non e’ niente di particolare.
Come ha detto Sergio, e’ semplicemente un modo per raggruppare delle costanti.
E’ solo una comodita’, invece di definire una serie di costanti, definisci una enum.
Dietro le quinte enum non fa niente. Il programma si limita a convertire i nomi in numeri e viceversa.
La stessa cosa che succede per una variabile: tu scrivi il nome della variabile ma il programma utilizza il suo valore.
Ai fini pratici, usare un gruppo di variabili o usare una enum e’ la stessa cosa.

Le operazioni sui bit sono una cosa diversa, indipendente dalle enum.
Certo, puo’ capitare di fare operazioni sui bit utilizzando una enum.
Ma puoi farle benissimo con numeri o variabili che contengono valori singoli.
Non e’ necessario usare le enum quando fai operazioni sui bit.
Le enum contengono degli interi, e le operazioni sui bit lavorano sugli interi, quindi a volte vedi le operazioni sui bit utilizzare con le enum, tutto li’. :slight_smile:

Utilizzare o meno una enum per operazioni sui bit e’ questione di logica del programma.
Cioe’ come tu strutturi il programma affinche’ faccia quello che serve.
Le operazioni che tu decidi di fare nel tuo script.

La sintassi del C# non c’entra. Non c’e’ nessuna regola che ti obblighi a usare le operazioni sui bit con le enum.
Semplicemente lo fai se ti sembra l’operazione giusta da fare.
Come qualsiasi altra cosa che fai fare al tuo script.

Se guardi qui

vedi che sotto “Tipi di enumerazione come flag di bit”, dice:

Se si vuole che un tipo di enumerazione rappresenti …

Dice se: e’ solo un modo per utilizzare le enum, non il modo.

Tra l’altro, non so come fai a imparare qualcosa da quelle pagine.
La traduzione automatica e’ terrificante …

1 Mi Piace

Infatti! :joy: