From Py To Common

inizio col dire che questa libreria import utility as rhutil non mi viene riconosciuta. . .
ovviamente non potevo iniziare diversamente ahahahah :joy: :joy:

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# … :thinking:

in Python, Emilio mi sa che dopo oggi pomeriggio la fiducia che potevi avere in me è crollata drasticamente
:rofl: :rofl:

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()
    
2 Mi Piace

Scusa, cosa stai cercando di fare ?
Non capisco … come sempre … :roll_eyes: :wink: :smile:

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 :+1:

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

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. . .

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

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

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

edit: stavo guardando meglio ciò che avevi scritto nella spiegazione:

questa non lo proprio compresa, cosa intendi col codice e’ dentro rhinoscriptsyntax

Bello …
Non sapevo che ti eri dato a Python. :slight_smile:

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 …

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:

GitHub - mcneel/rhinoscriptsyntax: rhinoscriptsyntax library for Python scripting engine that runs on both the Windows and OSX Rhino as well as Grasshopper

se leggi, c’e’ scritto mcneel/rhinoscriptsyntax.

Quella e’ rhinoscriptsyntax.

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

:+1:

ok credevo che fossero esempi postati da utenti sorry. . .