inizio col dire che questa libreria import utility as rhutil non mi viene riconosciuta. . .
ovviamente non potevo iniziare diversamente ahahahah
Codice please.
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
compare questo messagio:
Message: No module named utility
Traceback:
line 2, in
Non ho capito se stai provando con Python o con C# …
in Python, Emilio mi sa che dopo oggi pomeriggio la fiducia che potevi avere in me è crollata drasticamente
import scriptcontext as sc
import rhinoscriptsyntax as rs
import Rhino as rh
def LineClosestPoint(line, testpoint):
line = rs.coerceline(line, True)
testpoint = rs.coerce3dpoint(testpoint, True)
return line.ClosestPoint(testpoint, False)
def SimpleLine():
line = (0,0,0), (5,5,0)
point = (15, 10, 0)
result = rs.LineClosestPoint( line, point)
if result: rs.AddPoint(result)
if( __name__ == "__main__" ):
SimpleLine()
Scusa, cosa stai cercando di fare ?
Non capisco … come sempre …
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. . .
grazie Sergio e scusa se chiedo subito aiuto
la prossima volta cercherò di osservare meglio prima
Chi ha scritto ha fatto quello che doveva per far funzionare rhinoscriptsyntax, cioe’ per fare in modo che a noi basti scrivere
import rhinoscriptsyntax
… Che e’ quello che giustamente ha fatto Sergio.
OK, ma a quale scopo ?
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. . .
Chi ha scritto ha fatto quello che doveva per far funzionare rhinoscriptsyntax, cioe’ per fare in modo che a noi basti scrivere
mmmm diciamo, pensadoci bene ed osservando in quale sezione si trova il codice:
rhinoscriptsyntax/Scripts/rhinoscript/line.py
vero sarebbe stato logico andare a sostituirlo però perché scrivere utility invece che rhinoscriptsyntax
perché scrivere utility invece che rhinoscriptsyntax
Perche’ quel codice e’ dentro rhinoscriptsyntax, fa parte di rhinoscriptsyntax.
Non credo che per una libreria cercare di importare se’ stessa abbia molto senso …
indicarmi qualche cosa da fare
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 …
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 ?
perché non fare metà e metà
uno lo diamo già nel codice e l’altro lo indichiamo noi così vediamo entrambi i casi
edit: stavo guardando meglio ciò che avevi scritto nella spiegazione:
Perche’ quel codice e’ dentro rhinoscriptsyntax, fa parte di rhinoscriptsyntax.
questa non lo proprio compresa, cosa intendi col codice e’ dentro rhinoscriptsyntax
line = (0,0,0), (5,5,0)
Bello …
Non sapevo che ti eri dato a Python.
perché non fare metà e metà
OK, allora se vuoi prova a definire un nuovo punto, qui c’e’ la classe, anzi la struttura:
Point3d Structure (rhino3d.com)
Per il secondo punto vuoi usare Rhino.Input , cioe’ l’input semplificato ?
https://developer.rhino3d.com/api/RhinoCommon/html/N_Rhino_Input.htm
Oppure Rhino.Input.Custom , cioe’ quello piu’ flessibile e complicato ?
Rhino.Input.Custom Namespace (rhino3d.com)
Credo che tu ricordi la discussione a riguardo …
cosa intendi col codice e’ dentro rhinoscriptsyntax
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.
Nel link che avevo postato, questo:
se leggi, c’e’ scritto mcneel/rhinoscriptsyntax.
Quella e’ rhinoscriptsyntax.
import scriptcontext as sc import rhinoscriptsyntax as rs import Rhino as rh def LineClosestPoint(line, testpoint): line = rs.coerceline(line, True) testpoint = rs.coerce3dpoint(testpoint, True) return line.ClosestPoint(testpoint, False) def SimpleLine(): line = (0,0,0), (5,5,0) point = (15, 10, 0) result = rs.LineClosestPoint( line, point) if result: rs.AddPoint(result) if( __name__ == "__main__" ): SimpleLine()
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
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.Nel link che avevo postato, questo:
se leggi, c’e’ scritto mcneel/rhinoscriptsyntax.
Quella e’ rhinoscriptsyntax.
ok credevo che fossero esempi postati da utenti sorry. . .