e mi sa che invece avevo capito che servisse a tutt’altro
questa soluzione avevo già attuata ma il tempo è sempre troppo per i miei gusti
qualche esempio nell’uso di RhinoCommon?
e mi sa che invece avevo capito che servisse a tutt’altro
questa soluzione avevo già attuata ma il tempo è sempre troppo per i miei gusti
qualche esempio nell’uso di RhinoCommon?
ola Emilio (anche tu notte insonne?)
non dirmi nulla ma a parte l’ora, ne sento sempre parlare tra di voi ma non ho mai capito di cosa si tratta
è un plugin è un altro linguaggio? ho visto il link ma tanto per darti un’idea quando ci sono
queste spiegazioni e come quando spiego io qualcosa è tipo arabo ahahahah
non so nemmeno come accedere a questo RhinoCommon SDK .NET già il nome fa capire tutto
Hehe … no,no … e’ solo che venerdi’ e sabato posso fare i miei orari naturali …
Le altre sere sono schiavo del maledetto orario lavorativo (della mattina seguente)
E’ la libreria di classi che ti consente di interagire con Rhino, nonche’ di lavorare su oggetti geometrici.
In Python, ad esempio, per usare i tuoi amati seno e coseno ( ), devi prima scrivere
import math
dopodiche’ puoi scrivere, quando ti serve, cose come
a = math.sin( math.radians( 30 ) )
… eccetera
Con RhinoCommon e’ la stessa cosa:
tu all’inizio dello script scrivi:
import Rhino
dopodiche’ puoi usare tutte le classi RhinoCommon
Un’altra analogia la possiamo fare con rhinoscriptsyntax,
tu scrivi
import rhinoscriptsyntax as rs
e dopo puoi scrivere
curva = rs.GetObject( 'Curva ?' )
nella pagina Web linkata prima trovi varie informazioni, documentazione ed esempi.
La documentazione, che corrisponde in pratica al file RhinoIronPython.chm che usi per
rhinoscriptsyntax, la trovi qui:
http://developer.rhino3d.com/api/RhinoCommonWin/html/N_Rhino.htm
Tra l’altro … rhinoscriptsyntax e’ scritto usando RhinoCommon …
Quindi puo’ essere un ottimo esempio di uso di RhinoCommon.
Su questo computer ad esempio,la trovo in:
C:\Users\Pc\AppData\Roaming\McNeel\Rhinoceros\5.0\Plug-ins\IronPython (814d908a-e25c-493d-97e9-ee3861957f49)\settings\lib\rhinoscript
grazie della spiegazione Emilio e per gli esempi ma ormai con VBS GH PY ormai sto fuori ahahahah
giusto per capire a parte le info tecniche che al momento non riesco ad gestire ed elaborare
giusto per andare diritti al nocciolo e per “capire”:
non mi dire nulla ma forse come hai potuto constatare sapevo che approfondendo PY e addirittura contenmporaneamente a GH e GHPY davo i numeri ormai non so nemmeno chi sono io ahahahaha
Caro amico ignoto … confermo che a questo punto non sai piu’ chi sei …
Se ti dico che e’ una libreria di Python … non puo’ essere un linguaggio di programmazione, no ?
Il linguaggio e’ Python, RhinoCommon e’ un modulo (nome ufficiale Python per le librerie importate).
Cioe’ e’ un file che definisce funzioni, classi, ecc…
In pratica ‘pezzi di programma’ gia’ pronti che ti permettono, semplicemente chiamando una fuzione, di fare una certa operazione facilmente.
Anche rhinoscriptsyntax e’ un modulo.
RhinoCommon, per quanto ci riguarda, e’ un modulo esattamente come rhinoscriptsynatx, che importiamo se vogliamo usufruire delle sue classi, dei suoi oggetti.
rhinoscriptsyntax so sai usare … mica ti sarai dimenticato ?
OK, RhinoCommon lo usi allo stesso identico modo, con la differenza che invece di scrivere
import rhnioscriptsyntax
scrivi:
import Rhino
OK, forse e’ meglio se ‘stacchi’ un momento e dai tempo alla mente di riposare e schiarirsi un po’ le idee …
Ciao !
l’accendo
Salvio parto dal principio…
Il punto di sinistra è un punto angoloso e non ha senso parlare di “tangenti”. Quello è solo un punto per cui passa una retta che data la costruzione della forma può essere tangente all’arco che troviamo a destra.
Non ci sono le condizioni geometriche per avere una retta tangente-tangente.
Tutto ciò premesso la strada adda esse un’altra.
La definizione che allego contiene un sacco di list item per identificare i vari oggetti. Anche quello si potrebbe automatizzare con un minimo di stile… ma non ci ho voglia…
Il punto lo trova e le rette le traccia…
AMEN
point-tang-gm.gh (9,0 KB)
Ciao Salvio, rieccomi …
Se ti interessa ancora RhinoCommon e vuoi vedere … che faccia ha…
posto qui sotto uno script di esempio, molto semplice:
import Rhino
import scriptcontext
def main():
result, cen = Rhino.Input.RhinoGet.GetPoint( 'Centro ?', True )
if result != Rhino.Commands.Result.Success:
return
rad = 1.0
result, rad = Rhino.Input.RhinoGet.GetNumber( 'Raggio ?', True, rad )
if result != Rhino.Commands.Result.Success:
return
pla = Rhino.Geometry.Plane( cen, Rhino.Geometry.Vector3d.ZAxis )
cir = Rhino.Geometry.Circle( pla, rad )
scriptcontext.doc.Objects.AddCircle( cir )
scriptcontext.doc.Views.Redraw()
main()
Non fa altro che disegnare un cerchio.
Chiede il centro e il raggio e poi disegna, usando le classi di RhinoCommon.
Usa i metodi GetPoint() e GetNumber() della classe
Rhino.Input.GetPoint
t
per l’input.
E usa oggetti geometrici delle classi
Rhino.Geometry.Point3d
Rhino.Geometry.Vector3d
Rhino.Geometry.Plane
Rhino.Geometry.Circle
Usa anche un oggetto
Rhino.RhinoDoc
per interagire con Rhino (il programma)
Come gia’ accennato, la documentazione sulle varie classi la troviamo qui
http://developer.rhino3d.com/api/RhinoCommonWin/html/N_Rhino.htm
E’ della documentazione in … stile RMA … quindi abbastanza scarna.
Ma dopo averci fatto un po’ … l’orecchio (veramente sarebbe l’occhio) …
diventa il riferimento principale per gli script ( almeno entro i suoi limiti ).
Se hai domande (per quel poco che ci capisco io) , di’ pure.
ciao Emilio grazie per lo script e della spiegazione
faccio solo alcune costatazioni da profano:
mi domando come mai tutto questo? nel senso non credo che chi ha realizzato questo modulo
si sia sfiacchito per fare con 11 righe quello che IronPython già lo fa con un terzo di righe
quindi di sicuro credo che sia stato ideato per fare cose non fattibili con un altro modulo giusto…
anche perchè da come vedo la sintassi per usare questo modulo non è proprio concisa.
Stavo per aggiungere la versione Gh dello script, la riporto qui:
import Rhino
pla = Rhino.Geometry.Plane( cen, Rhino.Geometry.Vector3d.ZAxis )
cir = Rhino.Geometry.Circle( pla, rad )
con parametri di input cen e rad e output cir
Hehe … prevedevo che avresti detto una cosa del genere …
E’ vero, questo e’ il mio modo di fare … che e’ sicuramente diverso dal tuo …
Io comincio sempre con molta cautela, dalle cose piu’ semplci, poco per volta …
cercando di capire le cose basilari prima di affrontare difficolta’ maggiori.
Per altri questa e’ certamente una via molto pallosa …
Hai ragione, il risultato con RC e’ certamente uno script piu’ lungo e complicato, rispetto a rhinoscriptsyntax.
RC lavora con operazioni piu’ semplci, per cui ad esempio potresi dover usare 3 o 4 istruzioni dove con rhinoscriptsyntax ne usi una sola.
( I lungi nomi delle classi, volendo, li puoi accorciare usando import as )
E hai ancora ragione a pensare che dia maggiori possibilita’.
Ad esempio possiamo costruire comandi con opzioni complesse, tipo comandi Rhino, volendo anche con preview.
Possiamo usare oggetti geometrici (come curve e superfici) non presenti nel documento Rhino.
Eccetera.
Ma queste cose secondo me si capiscono meglio una volta iniziato a usare RhinoCommon, partendo da cose semplici o meno.
A proposito …
rhinoscriptsyntax usa appunto RhinoCommon per fare quello che fa.
Riporto qui (ma ce l’hai anche tu sul PC) la funzione
rhinoscriptsyntax.AddCircle()
che fa piu’ o meno quello che fa lo script visto sopra
( … Veramente fa parecchio di piu’ … )
def AddCircle(plane_or_center, radius):
"""Adds a circle curve to the document
Parameters:
plane_or_center = plane on which the circle will lie. If a point is
passed, this will be the center of the circle on the active
construction plane
radius = the radius of the circle
Returns:
id of the new curve object
"""
rc = None
plane = rhutil.coerceplane(plane_or_center, False)
if plane:
circle = Rhino.Geometry.Circle(plane, radius)
rc = scriptcontext.doc.Objects.AddCircle(circle)
else:
center = rhutil.coerce3dpoint(plane_or_center, True)
view = scriptcontext.doc.Views.ActiveView
plane = view.ActiveViewport.ConstructionPlane()
plane.Origin = center
circle = Rhino.Geometry.Circle(plane, radius)
rc = scriptcontext.doc.Objects.AddCircle(circle)
if rc==System.Guid.Empty: raise Exception("Unable to add circle to document")
scriptcontext.doc.Views.Redraw()
return rc
'notte
quindi rhinoscriptsyntax sarebbe la sintassi di RhinoCommon
è tipo una istruzione che con 1 riga di RS accorpa le 11 righe di RC
è tutto questo è incorporato come moduli in Python, che oltre a gestire RS RC ecc è un linguaggio di per se.
quindi personalmente è come se conoscessi una pozzanghera inconfronto all’oceano
rhinoscriptsyntax, come dice il nome, e’ un modulo che permette di usare la sintassi di RhinoScript in Python.
Qui con ‘sintassi’ si intendono i metodi di RhinoScript, cioe’
Rhino.GetObject() in VBS diventa
rhinoscriptsyntax.GetObject() in Python
Questo vale per ogni libreria esterna, in ogni linguaggio.
Le librerie servono appunto per fare certe operazioni facilmente.
Anzi vale per ogni funzione, che appartenga a una libreria o al tuo stesso programma.
Anche questo e’ normale amministrazione, succede usando tutti i linguaggi.
Se hai bisogno di una libreria esterna, la importi e la usi.
Eeeeh, e’ il destino dello scriptomane (beh, almeno di alcuni), sentirsi profondamente ignoranti rispetto ai programmatori veri.
Ma questo non ci scoraggia certamente … continuiamo a scrivere le nostre belle castronerie … e a divertirci un sacco …
è direi proprio di si