Angolo della seconda retta tangente

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?

:slight_smile:

ola Emilio (anche tu notte insonne?) :slight_smile:

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

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 ( :smile: ), 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”:

  1. è un linguaggio di programmazione?
  2. come si accede a questo RCommon?

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

Caro amico ignoto … confermo che a questo punto non sai piu’ chi sei …
:rofl:

Se ti dico che e’ una libreria di Python … non puo’ essere un linguaggio di programmazione, no ? :laughing:

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 ? :smile:

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 …

:rofl:

Ciao ! :slight_smile:

l’accendo :slight_smile:

in GH sperando che fosse più veloce ma invece . . . .

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

ciao Emilio grazie per lo script e della spiegazione

faccio solo alcune costatazioni da profano:

  1. RhinoCommon viene eseguito in IronPyrhon
  2. È un modulo da importare
  3. Deve lavorare con scriptcontext
  4. Per fare un cerchio ci sono 11 righe

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 …:grinning:

E’ vero, questo e’ il mio modo di fare … che e’ sicuramente diverso dal tuo … :slight_smile:
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 … :smile:

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

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

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 … :smile:

1 Mi Piace

è direi proprio di si :slight_smile: