# From Py To Common

**URL:** <https://it.discourse.mcneel.com/t/from-py-to-common/4835>\
**Category:** Bar-Rhino\
**Created:** [29 Dicembre 2022, 9:45pm UTC](https://it.discourse.mcneel.com/t/from-py-to-common/4835 "2022-12-29T21:45:02Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [29 Dicembre 2022, 9:45pm UTC](https://it.discourse.mcneel.com/t/from-py-to-common/4835/1 "2022-12-29T21:45:02Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![Sergio\_Alessi](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/sergio_alessi/32/22676_2.png) [@Sergio\_Alessi](https://it.discourse.mcneel.com/u/Sergio_Alessi)\
**Post date:** [29 Dicembre 2022, 10:00pm UTC](https://it.discourse.mcneel.com/t/from-py-to-common/4835/2 "2022-12-29T22:00:29Z")

</div>

Codice please.

---

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [29 Dicembre 2022, 10:06pm UTC](https://it.discourse.mcneel.com/t/from-py-to-common/4835/3 "2022-12-29T22:06:45Z")

</div>

> <https://github.com/mcneel/rhinoscriptsyntax/blob/rhino-6.x/Scripts/rhinoscript/line.py>

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

---

<div class="post-metadata">

**Author:** ![emilio](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/emilio/32/23060_2.png) [@emilio](https://it.discourse.mcneel.com/u/emilio)\
**Post date:** [29 Dicembre 2022, 10:29pm UTC](https://it.discourse.mcneel.com/t/from-py-to-common/4835/4 "2022-12-29T22:29:41Z")

</div>

> [@0904](#):
>
> la seconda riga non me l’accetta

Non ho capito se stai provando con Python o con C# … 🤔

---

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [29 Dicembre 2022, 10:37pm UTC](https://it.discourse.mcneel.com/t/from-py-to-common/4835/5 "2022-12-29T22:37:53Z")

</div>

> [@emilio](#):
>
> 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  
🤣 🤣

---

<div class="post-metadata">

**Author:** ![Sergio\_Alessi](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/sergio_alessi/32/22676_2.png) [@Sergio\_Alessi](https://it.discourse.mcneel.com/u/Sergio_Alessi)\
**Post date:** [29 Dicembre 2022, 10:39pm UTC](https://it.discourse.mcneel.com/t/from-py-to-common/4835/6 "2022-12-29T22:39:19Z")

</div>

```auto
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()
    

```

---

<div class="post-metadata">

**Author:** ![emilio](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/emilio/32/23060_2.png) [@emilio](https://it.discourse.mcneel.com/u/emilio)\
**Post date:** [29 Dicembre 2022, 10:40pm UTC](https://it.discourse.mcneel.com/t/from-py-to-common/4835/7 "2022-12-29T22:40:33Z")

</div>

> [@0904](#):
>
> in Python

Scusa, cosa stai cercando di fare ?  
Non capisco … come sempre … 🙄 😉 😄

---

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [29 Dicembre 2022, 10:46pm UTC](https://it.discourse.mcneel.com/t/from-py-to-common/4835/8 "2022-12-29T22:46:24Z")

</div>

> [@emilio](#):
>
> 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. . .

---

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [29 Dicembre 2022, 10:47pm UTC](https://it.discourse.mcneel.com/t/from-py-to-common/4835/9 "2022-12-29T22:47:18Z")

</div>

grazie Sergio e scusa se chiedo subito aiuto  
la prossima volta cercherò di osservare meglio prima 👍

---

<div class="post-metadata">

**Author:** ![emilio](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/emilio/32/23060_2.png) [@emilio](https://it.discourse.mcneel.com/u/emilio)\
**Post date:** [29 Dicembre 2022, 10:52pm UTC](https://it.discourse.mcneel.com/t/from-py-to-common/4835/10 "2022-12-29T22:52:48Z")

</div>

> [@0904](#):
>
> a questo punto mi sa che chi ha scritto il codice ha fatto uno scherzetto da prete. . .

Chi ha scritto ha fatto quello che doveva per far funzionare rhinoscriptsyntax, cioe’ per fare in modo che a noi basti scrivere

```python
import rhinoscriptsyntax

```

… Che e’ quello che giustamente ha fatto Sergio.

> [@0904](#):
>
> avevo solo copiato il codice in Py di Rh per farlo avviare

OK, ma a quale scopo ? 🙂

---

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [29 Dicembre 2022, 11:02pm UTC](https://it.discourse.mcneel.com/t/from-py-to-common/4835/11 "2022-12-29T23:02:45Z")

</div>

> [@emilio](#):
>
> OK, ma a quale scopo ?

> [@Conferma Metodo Rcommon](https://it.discourse.mcneel.com/t/conferma-metodo-rcommon/4833/27):
>
> > [@Conferma Metodo Rcommon](https://it.discourse.mcneel.com/t/conferma-metodo-rcommon/4833/26):
> >
> > ma ci vuole il codice intero per realizzare una linea con **line.py**?
> 
> E’ per quello che dobbiamo provare in pratica …  
> Per capire cosa serve, cosa non serve e cosa serve a fare cosa …

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

---

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [29 Dicembre 2022, 11:07pm UTC](https://it.discourse.mcneel.com/t/from-py-to-common/4835/12 "2022-12-29T23:07:23Z")

</div>

> [@emilio](#):
>
> 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**

---

<div class="post-metadata">

**Author:** ![emilio](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/emilio/32/23060_2.png) [@emilio](https://it.discourse.mcneel.com/u/emilio)\
**Post date:** [29 Dicembre 2022, 11:32pm UTC](https://it.discourse.mcneel.com/t/from-py-to-common/4835/13 "2022-12-29T23:32:05Z")

</div>

> [@0904](#):
>
> 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 …

> [@0904](#):
>
> 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()

```python
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 …

---

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [29 Dicembre 2022, 11:38pm UTC](https://it.discourse.mcneel.com/t/from-py-to-common/4835/14 "2022-12-29T23:38:23Z")

</div>

> [@emilio](#):
>
> 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

---

<div class="post-metadata">

**Author:** ![emilio](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/emilio/32/23060_2.png) [@emilio](https://it.discourse.mcneel.com/u/emilio)\
**Post date:** [29 Dicembre 2022, 11:53pm UTC](https://it.discourse.mcneel.com/t/from-py-to-common/4835/15 "2022-12-29T23:53:30Z")

</div>

Come vuoi. 🙂  
Allora i punti dove li prendiamo ?  
Definiamo due punti direttamente nello script (temporaneamente) ?  
O vuoi ricavarli subito dall’input dell’utilizzatore ?

---

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [29 Dicembre 2022, 11:54pm UTC](https://it.discourse.mcneel.com/t/from-py-to-common/4835/16 "2022-12-29T23:54:58Z")

</div>

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:

> [@emilio](#):
>
> Perche’ quel codice e’ **dentro** rhinoscriptsyntax, fa parte di rhinoscriptsyntax.

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

---

<div class="post-metadata">

**Author:** ![emilio](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/emilio/32/23060_2.png) [@emilio](https://it.discourse.mcneel.com/u/emilio)\
**Post date:** [29 Dicembre 2022, 11:58pm UTC](https://it.discourse.mcneel.com/t/from-py-to-common/4835/17 "2022-12-29T23:58:13Z")

</div>

> [@Sergio\_Alessi](#):
>
> ` line = (0,0,0), (5,5,0)`

Bello …  
Non sapevo che ti eri dato a Python. 🙂

---

<div class="post-metadata">

**Author:** ![emilio](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/emilio/32/23060_2.png) [@emilio](https://it.discourse.mcneel.com/u/emilio)\
**Post date:** [30 Dicembre 2022, 12:09am UTC](https://it.discourse.mcneel.com/t/from-py-to-common/4835/18 "2022-12-30T00:09:35Z")

</div>

> [@0904](#):
>
> 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)](https://developer.rhino3d.com/api/RhinoCommon/html/T_Rhino_Geometry_Point3d.htm)

Per il secondo punto vuoi usare Rhino.Input , cioe’ l’input semplificato ?

[https://developer.rhino3d.com/api/RhinoCommon/html/N\_Rhino\_Input.htm](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)](https://developer.rhino3d.com/api/RhinoCommon/html/N_Rhino_Input_Custom.htm)

Credo che tu ricordi la discussione a riguardo …

> [@0904](#):
>
> 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:

[GitHub - mcneel/rhinoscriptsyntax: rhinoscriptsyntax library for Python scripting engine that runs on both the Windows and OSX Rhino as well as Grasshopper](https://github.com/mcneel/rhinoscriptsyntax)

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

Quella **e’** rhinoscriptsyntax.

---

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [30 Dicembre 2022, 12:14am UTC](https://it.discourse.mcneel.com/t/from-py-to-common/4835/19 "2022-12-30T00:14:49Z")

</div>

> [@Sergio\_Alessi](#):
>
> ```auto
> 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

---

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [30 Dicembre 2022, 12:17am UTC](https://it.discourse.mcneel.com/t/from-py-to-common/4835/20 "2022-12-30T00:17:45Z")

</div>

> [@emilio](#):
>
> 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](https://github.com/mcneel/rhinoscriptsyntax)
> 
> se leggi, c’e’ scritto mcneel/rhinoscriptsyntax.
> 
> Quella **e’** rhinoscriptsyntax.

👍

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

[Pagina seguente](https://it.discourse.mcneel.com/t/from-py-to-common/4835.md?page=2)
