# Deviazione tra superfici

**URL:** <https://it.discourse.mcneel.com/t/deviazione-tra-superfici/2494>\
**Category:** Rhino Windows\
**Created:** [15 Giugno 2019, 11:58am UTC](https://it.discourse.mcneel.com/t/deviazione-tra-superfici/2494 "2019-06-15T11:58:47Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![illo76](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/illo76/32/17751_2.png) [@illo76](https://it.discourse.mcneel.com/u/illo76)\
**Post date:** [15 Giugno 2019, 11:58am UTC](https://it.discourse.mcneel.com/t/deviazione-tra-superfici/2494/1 "2019-06-15T11:58:47Z")

</div>

buongiorno a tutti,  
pongo un quesito riguardante la deviazione tra due superfici, se voglio sapere la distanza massima e minima tra due superfici e ricorro al comando point deviation l’unico valore che mi pare mi restituisca la distanza tra le due è il valore Median distance (che mi da la distanza media tra le due superfici)  
e nel caso di una superfice offsettata già non capisco come mai il valore non corrisponda a quello dell’offset (allego un esempio di offset senza loose nelle impostazioni di 75mm e che se confrontato con il point deviation mi da appunto 75.28 come valore di distanza media…)

 ![image](https://discourse-cdn-aws1.com/mcneel/uploads/mcneel_it/original/2X/2/232f6007668910dd4b8e58919b5aa8aa2487aec1.png)  
[offset75mm.3dm (108,4 KB)](https://it.discourse.mcneel.com/uploads/short-url/ugeycdC1CdMOufQGSLTK91zKfxm.3dm)

inoltre la domanda è: ma se dovessi sapere la deviazione minima e massima tra due superfici o meglio ancora tra due polisuperfici esiste un comando o una procedura?  
point deviation mi pare che si basi sempre su set di punti (quindi cloud di punti o appunto nell’esempio postato attivando i control point di una superfice che per definizione non giaciono sulla superfice eccezion fatta per quelli di perimetro della superficie primitiva)  
grazie in anticipo per chi ha esperienza e contribuisce a chiarirmi il dubbio

---

<div class="post-metadata">

**Author:** ![emilio](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/emilio/32/16095_2.png) [@emilio](https://it.discourse.mcneel.com/u/emilio)\
**Post date:** [15 Giugno 2019, 2:37pm UTC](https://it.discourse.mcneel.com/t/deviazione-tra-superfici/2494/2 "2019-06-15T14:37:01Z")

</div>

Ciao Marco

Premesso che forse il comando c’e’, eventualmente combinando piu’ comandi,  
ma io non riesco a capire come fare … 😕

( Sarebbe strano se non ci fosse )

Comunque per estrarre dei punti da una superficie ti consiglierei di usare una mesh ausiliaria.  
Ricavi la mesh dalla superficie e poi i punti dalla mesh, cosi’ ottieni punti che giacciono sulla superficie.

Dicevo … dato che non so (non mi ricordo) come fare usando i comandi, ho imbastito una piccola definizione … che non funziona 🙄  
( Ma credo che la cosa sia risolvibile )

![srfsrfdist](https://discourse-cdn-aws1.com/mcneel/uploads/mcneel_it/original/2X/d/ddfbe21b2571ae5ce09ae91bd59a462900fbcc1d.png)

[srfsrfdist.gh (9,8 KB)](https://it.discourse.mcneel.com/uploads/short-url/35rvxFNLgfIbmwCVyRr8HnfrhIM.gh)

Il problema con la definizione e’ che non riesco a estrarre l’ultimo elemento dalla lista ( che contiene le distanze tra i punti e la superficie )

Non riesco a sottrarre 1 da 121 per avere 120 … OK con GH sono un niubbo eterno …😄  
( Cioe’ 121 in questo caso di mesh 10 X 10, poi certo il valore varia )

Se qualche esperto ci dice come fare, credo che poi la definizione possa servire per verificare le distanze che cerchi.

EDIT

Aspetta, ho visto che prende anche indici negativi …

![srfsrfdist2](https://discourse-cdn-aws1.com/mcneel/uploads/mcneel_it/original/2X/4/443216bc5b969e58b30cd06cb552c2ec0601ab97.png)

[srfsrfdist2.gh (10,4 KB)](https://it.discourse.mcneel.com/uploads/short-url/cforHRaurRVQKfdNDB7FxQL8Wjg.gh)

Cosi’ sembra che funzioni.

( La prova e’ fatta con un offset di 1 mm, quindi l’offset sembra OK )

Lascio comunque anche la prima versione ‘buggy’ perche’ in ogni caso vorrei sapere dagli esperti cosa sbaglio. 🙂

Grazie !

---

<div class="post-metadata">

**Author:** ![illo76](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/illo76/32/17751_2.png) [@illo76](https://it.discourse.mcneel.com/u/illo76)\
**Post date:** [15 Giugno 2019, 8:45pm UTC](https://it.discourse.mcneel.com/t/deviazione-tra-superfici/2494/3 "2019-06-15T20:45:32Z")

</div>

Grazie Emilio, sei sempre un mito!  
Purtroppo io neppure non novello di gh posso definirmi… e mi auguravo di capire come fare a ottenere le distanze in modo snello in rhino senza ricorrere a gh, tipo fare un check veloce di distanza tra due superfici rapido e frequente…  
Estrarre i punti da mesh mi pare già un buon consiglio per poi eseguire il point deviation, anche se mi rimane il dubbio di come mai nell’esempio da me postato il responso della distanza media sia differente dal valore di offset usato per generare la superficie in oggetto… mistero

---

<div class="post-metadata">

**Author:** ![emilio](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/emilio/32/16095_2.png) [@emilio](https://it.discourse.mcneel.com/u/emilio)\
**Post date:** [15 Giugno 2019, 10:01pm UTC](https://it.discourse.mcneel.com/t/deviazione-tra-superfici/2494/4 "2019-06-15T22:01:34Z")

</div>

> [@illo76](#):
>
> senza ricorrere a gh

Si’, certo.  
Si puo’ fare la stessa cosa con uno script.  
Credo che cambi solo il modo di definire la mesh …  
Se riesco provo poi a scrivere qualcosa, ma non prometto … sorry. 😐  
Ma forse qualcuno mi precede. 🙂

> [@illo76](#):
>
> il responso della distanza media sia differente

Quale delle due superfici ?  
Ci sono due offset nel file postato.  
Provando con la definizione, a me risulta un errore di circa 3 centesimi per la superficie piu’ ‘fitta’, con 34 x 18 CV  
E un errore oltre il mm per l’altra, con 5 x 9 CV.  
( Usando una mesh di 10 x 10 facce )

I punti per calcolare le distanze come il hai ricavati ?  
Se sono i CV, come mi sembra di capire, ovviamente, come hai detto tu, non sono tutti sulla superficie, quindi non servono.

---

<div class="post-metadata">

**Author:** ![emilio](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/emilio/32/16095_2.png) [@emilio](https://it.discourse.mcneel.com/u/emilio)\
**Post date:** [16 Giugno 2019, 6:54am UTC](https://it.discourse.mcneel.com/t/deviazione-tra-superfici/2494/5 "2019-06-16T06:54:46Z")

</div>

Ciao Marco

Se vuoi provare questo …

```python
import rhinoscriptsyntax as rs

def main():
  su0 = rs.GetObject( 'Reference surface ?', 8, True )
  if not su0:
    return
  rs.UnselectAllObjects()
  su1 = rs.GetObject( 'Surface to check ?', 8 )
  if not su1:
    return
  rs.UnselectAllObjects()
  rs.EnableRedraw( False )
  rs.SelectObject( su1 )
  rs.Command( '_Mesh' )
  rs.UnselectAllObjects()
  me = rs.FirstObject()
  ves = rs.MeshVertices( me )
  rs.DeleteObject( me )
  rs.EnableRedraw( True )
  diss = []
  for ve in ves:
    uv = rs.SurfaceClosestPoint( su0, ve )
    if uv:
      pt = rs.EvaluateSurface( su0, uv[0], uv[1] )
      dis = rs.Distance( ve, pt )
      diss.append( dis )
  diss.sort()
  msg = 'Min. distance: %.4f - Max. distance: %.4f' % ( diss[0], diss[-1] )
  print msg

main()

```

---

<div class="post-metadata">

**Author:** ![emilio](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/emilio/32/16095_2.png) [@emilio](https://it.discourse.mcneel.com/u/emilio)\
**Post date:** [16 Giugno 2019, 7:55am UTC](https://it.discourse.mcneel.com/t/deviazione-tra-superfici/2494/6 "2019-06-16T07:55:30Z")

</div>

Scusa … meglio cosi’:

```python
import rhinoscriptsyntax as rs

def main():
  su0 = rs.GetObject( 'Reference surface ?', 8, True )
  if not su0:
    return
  rs.UnselectAllObjects()
  su1 = rs.GetObject( 'Surface to check ?', 8 )
  if not su1:
    return
  rs.EnableRedraw( False )
  fir = rs.FirstObject()
  rs.SelectObject( su1 )
  rs.Command( '_Mesh' )
  rs.UnselectAllObjects()
  me = rs.FirstObject()
  if me == fir:
    rs.EnableRedraw( True )
    print( 'Mesh command failed ... sorry' )
    return
  ves = rs.MeshVertices( me )
  rs.DeleteObject( me )
  rs.EnableRedraw( True )
  diss = []
  for ve in ves:
    uv = rs.SurfaceClosestPoint( su0, ve )
    if uv:
      pt = rs.EvaluateSurface( su0, uv[0], uv[1] )
      dis = rs.Distance( ve, pt )
      diss.append( dis )
  diss.sort()
  msg = ( 'Checked %d points - Min. distance: %.4f - Max. distance: %.4f' % 
      ( len( ves ), diss[0], diss[-1] ) )
  print( msg )

main()

```

---

<div class="post-metadata">

**Author:** ![illo76](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/illo76/32/17751_2.png) [@illo76](https://it.discourse.mcneel.com/u/illo76)\
**Post date:** [16 Giugno 2019, 9:04am UTC](https://it.discourse.mcneel.com/t/deviazione-tra-superfici/2494/7 "2019-06-16T09:04:38Z")

</div>

ciao Emilio,  
ho provato ad inserire il tuo script in un comando ma mi da questo errore

 ![image](https://discourse-cdn-aws1.com/mcneel/uploads/mcneel_it/original/2X/f/f616e95669750c796c1496d1756f18c0915aef88.png)  
ho inserito direttamente lo script in un comando in questo modo  
 ![image](https://discourse-cdn-aws1.com/mcneel/uploads/mcneel_it/original/2X/b/b9c6322589f7df1e7e3d74358487808be123cc29.png)  
come indicato sull’help su internet e l’errore si riferisce alla riga 4

su0 = rs.GetObject( ‘Reference surface ?’, 8, True )

sicuramente mi sto sbagliando io in qualche punto nell’inserire lo script…

---

<div class="post-metadata">

**Author:** ![emilio](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/emilio/32/16095_2.png) [@emilio](https://it.discourse.mcneel.com/u/emilio)\
**Post date:** [16 Giugno 2019, 10:06am UTC](https://it.discourse.mcneel.com/t/deviazione-tra-superfici/2494/8 "2019-06-16T10:06:07Z")

</div>

E’ uno script in Python, non VBScript.

Qui avevo provato a spiegare come usare ‘sti script.  
( Perche’ ogni volta devo farlo io, McNeel pare si diverta a non divulgare le necessarie informazioni … )

> [@Ingrandire lista livelli](https://it.discourse.mcneel.com/t/ingrandire-lista-livelli/1676/6):
>
> Mah, qui mi mostra il layer dell’oggetto (Rhino 6.4 in inglese) … Non vorrei ci fosse qualcosa da settare … non saprei, mi spiace. Quanto allo script, non mi stupisce che tu non sappia come usarlo. Spiegare come usare gli script e’ una cosa che McNeel non ama fare … smile Il comando e’ \_RunPythonScript Se guardi nello help, ti dice poco niente … C’e’ questo: … Che pero’ non dice tutto … Comunque: se esegui il comando \_RunPythonScript , lui ti chiede di selezionare un file da eseguir…

---

<div class="post-metadata">

**Author:** ![illo76](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/illo76/32/17751_2.png) [@illo76](https://it.discourse.mcneel.com/u/illo76)\
**Post date:** [16 Giugno 2019, 4:48pm UTC](https://it.discourse.mcneel.com/t/deviazione-tra-superfici/2494/9 "2019-06-16T16:48:32Z")

</div>

sarò io impedito ma anche seguendo le indicazioni mi da questo errore

 ![image](https://discourse-cdn-aws1.com/mcneel/uploads/mcneel_it/original/2X/0/07e20b27997773a1f54191d1faffa85fede36a53.png)

e il comando da tasto destro del bottone è inserito così

 ![image](https://discourse-cdn-aws1.com/mcneel/uploads/mcneel_it/original/2X/8/80fc6c41c94340f1614a59d39d5fa4fcd0e6541f.png)

---

<div class="post-metadata">

**Author:** ![illo76](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/illo76/32/17751_2.png) [@illo76](https://it.discourse.mcneel.com/u/illo76)\
**Post date:** [16 Giugno 2019, 4:49pm UTC](https://it.discourse.mcneel.com/t/deviazione-tra-superfici/2494/10 "2019-06-16T16:49:15Z")

</div>

anche togliendo il ! iniziale il messaggio di errore resta lo stesso

---

<div class="post-metadata">

**Author:** ![illo76](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/illo76/32/17751_2.png) [@illo76](https://it.discourse.mcneel.com/u/illo76)\
**Post date:** [16 Giugno 2019, 4:53pm UTC](https://it.discourse.mcneel.com/t/deviazione-tra-superfici/2494/11 "2019-06-16T16:53:23Z")

</div>

e per permetterti di capire se sbaglio e dove ti copio il testo del comando da me inserito

\_-RunPythonScript (

def main():  
su0 = rs.GetObject( ‘Reference surface ?’, 8, True )  
if not su0:  
return  
rs.UnselectAllObjects()  
su1 = rs.GetObject( ‘Surface to check ?’, 8 )  
if not su1:  
return  
rs.EnableRedraw( False )  
fir = rs.FirstObject()  
rs.SelectObject( su1 )  
rs.Command( ‘\_Mesh’ )  
rs.UnselectAllObjects()  
me = rs.FirstObject()  
if me == fir:  
rs.EnableRedraw( True )  
print( ‘Mesh command failed … sorry’ )  
return  
ves = rs.MeshVertices( me )  
rs.DeleteObject( me )  
rs.EnableRedraw( True )  
diss =   
for ve in ves:  
uv = rs.SurfaceClosestPoint( su0, ve )  
if uv:  
pt = rs.EvaluateSurface( su0, uv[0], uv[1] )  
dis = rs.Distance( ve, pt )  
diss.append( dis )  
diss.sort()  
msg = ( ‘Checked %d points - Min. distance: %.4f - Max. distance: %.4f’ %  
( len( ves ), diss[0], diss[-1] ) )  
print( msg )

main()  
)

---

<div class="post-metadata">

**Author:** ![Gambler](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/gambler/32/16276_2.png) [@Gambler](https://it.discourse.mcneel.com/u/Gambler)\
**Post date:** [16 Giugno 2019, 5:12pm UTC](https://it.discourse.mcneel.com/t/deviazione-tra-superfici/2494/12 "2019-06-16T17:12:30Z")

</div>

> [@emilio](#):
>
> Premesso che forse il comando c’e’, eventualmente combinando piu’ comandi,  
> ma io non riesco a capire come fare … 😕
> 
> ( Sarebbe strano se non ci fosse )

E mi sa che è proprio strano. 🤐

> [@emilio](#):
>
> Se riesco provo poi a scrivere qualcosa, ma non prometto … sorry. 😐  
> Ma forse qualcuno mi precede. 🙂

Mi hai fregato sul tempo, stavo giusto postando io uno script … 😂  
Emy, e chi ti batte sugli script??  
Tra l’altro carino, molto più comodo della definizione GH.  
Come detto, peccato non ci sia nulla in Rhino per questo tipo di controllo … qualcosa di analogo al CrvDeviation insomma.

---

<div class="post-metadata">

**Author:** ![illo76](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/illo76/32/17751_2.png) [@illo76](https://it.discourse.mcneel.com/u/illo76)\
**Post date:** [16 Giugno 2019, 5:18pm UTC](https://it.discourse.mcneel.com/t/deviazione-tra-superfici/2494/13 "2019-06-16T17:18:28Z")

</div>

ciao Gambler, riesci a spiegarmi perchè non riesco a far eseguire il comando?

---

<div class="post-metadata">

**Author:** ![Gambler](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/gambler/32/16276_2.png) [@Gambler](https://it.discourse.mcneel.com/u/Gambler)\
**Post date:** [16 Giugno 2019, 5:19pm UTC](https://it.discourse.mcneel.com/t/deviazione-tra-superfici/2494/14 "2019-06-16T17:19:50Z")

</div>

Intendi lo script python?

---

<div class="post-metadata">

**Author:** ![illo76](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/illo76/32/17751_2.png) [@illo76](https://it.discourse.mcneel.com/u/illo76)\
**Post date:** [16 Giugno 2019, 5:23pm UTC](https://it.discourse.mcneel.com/t/deviazione-tra-superfici/2494/15 "2019-06-16T17:23:21Z")

</div>

si, quello postato da Emilio, ho provato a inserirlo in un comando e ho postato il testo perchè mi da errore nell’utilizzo

---

<div class="post-metadata">

**Author:** ![Gambler](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/gambler/32/16276_2.png) [@Gambler](https://it.discourse.mcneel.com/u/Gambler)\
**Post date:** [16 Giugno 2019, 5:28pm UTC](https://it.discourse.mcneel.com/t/deviazione-tra-superfici/2494/16 "2019-06-16T17:28:48Z")

</div>

Non saprei, prova una cosa semplice.

Vai in: Tools-PythonScript-Edit  
Incolla il testo dello script di Emilio in una file vuoto e salvalo con un nome dove sei comodo.  
Poi torna in Tools-PythonScript-Run e lancia lo script.  
Così funziona?

---

<div class="post-metadata">

**Author:** ![illo76](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/illo76/32/17751_2.png) [@illo76](https://it.discourse.mcneel.com/u/illo76)\
**Post date:** [16 Giugno 2019, 5:33pm UTC](https://it.discourse.mcneel.com/t/deviazione-tra-superfici/2494/17 "2019-06-16T17:33:34Z")

</div>

> [@emilio](#):
>
> ```auto
> import rhinoscriptsyntax as rs
> 
> def main():
> su0 = rs.GetObject( 'Reference surface ?', 8, True )
> if not su0:
> return
> rs.UnselectAllObjects()
> su1 = rs.GetObject( 'Surface to check ?', 8 )
> if not su1:
> return
> rs.EnableRedraw( False )
> fir = rs.FirstObject()
> rs.SelectObject( su1 )
> rs.Command( '_Mesh' )
> rs.UnselectAllObjects()
> me = rs.FirstObject()
> if me == fir:
> rs.EnableRedraw( True )
> print( 'Mesh command failed ... sorry' )
> return
> ves = rs.MeshVertices( me )
> rs.DeleteObject( me )
> rs.EnableRedraw( True )
> diss = []
> for ve in ves:
> uv = rs.SurfaceClosestPoint( su0, ve )
> if uv:
> pt = rs.EvaluateSurface( su0, uv[0], uv[1] )
> dis = rs.Distance( ve, pt )
> diss.append( dis )
> diss.sort()
> msg = ( 'Checked %d points - Min. distance: %.4f - Max. distance: %.4f' % 
> ( len( ves ), diss[0], diss[-1] ) )
> print( msg )
> 
> main()
> 
> ```

si, così funziona

---

<div class="post-metadata">

**Author:** ![illo76](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/illo76/32/17751_2.png) [@illo76](https://it.discourse.mcneel.com/u/illo76)\
**Post date:** [16 Giugno 2019, 5:34pm UTC](https://it.discourse.mcneel.com/t/deviazione-tra-superfici/2494/18 "2019-06-16T17:34:12Z")

</div>

ma non riesco a caricarlo editando un pulsante di rhino

---

<div class="post-metadata">

**Author:** ![illo76](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/illo76/32/17751_2.png) [@illo76](https://it.discourse.mcneel.com/u/illo76)\
**Post date:** [16 Giugno 2019, 5:37pm UTC](https://it.discourse.mcneel.com/t/deviazione-tra-superfici/2494/19 "2019-06-16T17:37:25Z")

</div>

EUREKA!!! ci son riuscito!!! miracolo!!!  
caspita ma che impresa…  
resta comunque il dubbio di come mai non riesca a inserire lo script direttamente nel comando ma è già oro che sia riuscito a farglielo caricare dal bottone

---

<div class="post-metadata">

**Author:** ![emilio](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/emilio/32/16095_2.png) [@emilio](https://it.discourse.mcneel.com/u/emilio)\
**Post date:** [16 Giugno 2019, 6:09pm UTC](https://it.discourse.mcneel.com/t/deviazione-tra-superfici/2494/20 "2019-06-16T18:09:43Z")

</div>

Ciao Marco.

Scusa la risposta … lenta. 😉

Da quello che hai postato, mi sembra che nel pulsante manchi la prima linea dello script:

```python
import rhinoscriptsyntax as rs

```

Se inserisci anche quella, credo che il pulsante possa funzionare. 🙂

[Pagina seguente](https://it.discourse.mcneel.com/t/deviazione-tra-superfici/2494.md?page=2)
