ciao Sergio, la seconda riga non me l’accetta, io uso Rh7.2 lo script è per la v6
ma ho cercato anche lo script nella sezione dedicata per la v7 ed è identico
c’é sempre la stessa libreria e sempre con lo stesso problema
avevo solo copiato il codice in Py di Rh per farlo avviare dovevo richiamare una def
ma non mi ha dato nemmeno la possibilità essendo che la seconda riga non me l’accetta
import scriptcontext
import utility as rhutil
import Rhino
Sergio però ha postato la correzione prendendo i coerce da rhinoscriptsyntax giustamente ha subito raggirato l’ostacolo senza nemmeno considerarlo
(cosa che dovrei imparare anch’io a fare)
a questo punto mi sa che chi ha scritto il codice ha fatto uno scherzetto da prete. . .
era il codice del file line.py citato sopra, lo avevo aperto per iniziare a dare un’occhiata
diciamo che mi ero impressionato un pò troppo essendo che dopo aver copiato il codice in Py
ho notato che la maggioranza del codice è solo testo che da indicazioni e basta il codice è al minimo
Emilio se e quando hai tempo e voglia di indicarmi qualche cosa da fare con la tua guida io sono pronto. . .
Perche’ quel codice e’ dentro rhinoscriptsyntax, fa parte di rhinoscriptsyntax.
Non credo che per una libreria cercare di importare se’ stessa abbia molto senso …
Provare a scrivere un plug-in in C# che disegni una linea mi sembra un’ottima idea.
Quindi andiamo a vedere cosa fa il codice di rs.AddLine()
def AddLine(start, end):
"""Adds a line curve to the current model.
Parameters:
start, end (point|guid) end points of the line
Returns:
guid: id of the new curve object
Example:
import rhinoscriptsyntax as rs
start = rs.GetPoint("Start of line")
if start:
end = rs.GetPoint("End of line")
if end: rs.AddLine(start, end)
See Also:
CurveEndPoint
CurveStartPoint
IsLine
"""
start = rhutil.coerce3dpoint(start, True)
end = rhutil.coerce3dpoint(end, True)
rc = scriptcontext.doc.Objects.AddLine(start, end)
if rc==System.Guid.Empty: raise Exception("Unable to add line to document")
scriptcontext.doc.Views.Redraw()
return rc
C’e’ la solita spiegazioni iniziale, bene.
Poi usa una funziona coerce* per ricavare i due punti
e infine disegna la linea con scriptcontext.doc.Objects.AddLine()
E ancora un messaggio di errore nel caso non funzioni.
Ma questo e’ rhinoscriptsyntax e vuole due punti (definiti in qualche modo) come parametri.
Bisogna decidere come ottenere i punti nel plug-in.
Come si puo’ fare ?
Ad esempio … iniziare con una cosa semplice, scrivendo direttamente i punti nel codice del plug-in, per poi in seguito aggiungere l’input dell’utilizzatore ?
O fare altrimenti ?
Che ne dici ?
Se riesci a usare RhinoCode con Rhino 8 possiamo anche provare con un semplice script …
che dici se invece usassimo Rhinocommon in Python alla fine la libreria è la stessa che usa C#
cosi possiamo gestire meglio lo script in Rhino che a parte i for if e sintassi dovrebbe essere identico. . .
quindi in pratica invece di usare i coerce tramite rhinoscriptsyntax ecc usiamo Rhinocommon
Come vuoi.
Allora i punti dove li prendiamo ?
Definiamo due punti direttamente nello script (temporaneamente) ?
O vuoi ricavarli subito dall’input dell’utilizzatore ?
Intendo che quel file e’ uno dei file che costituiscono rhinoscriptsyntax.
La libreria sara’ fatta da un certo numero di file, no ?
Quel file che hai aperto e’ uno di quelli.
ok ci ho messo un po di tempo ma credo di aver afferrato la doppia def
con SimpleLine() viene richiamata la seconda def che per come è scritta è praticamente autonoma
ma se si toglie rs. da rs.LineClosestPoint( line, point) come risultato va a richiamare il risultato
della prima def LineClosestPoint(line, testpoint): una volta avuto il risultato della prima def
esegue il su risultato finale che in entrambi i casi è quello di aggiunge il punto più vicino
quindi perpendicolare alla direzione della linea creata inizialmente tramite i 2 punti