WISH: analisi simmetria

Buongiorno a tutti,
mi capita di tanto in tanto , quando devo modificare degli stampi (quindi matematiche complesse realizzate da altri) di dover verificare la simmetria così da poter lavorare solo su una parte. A volte sembra ci sia una simmetria ma non è così.
Sarebbe utile avere uno strumento di diagnostica che consentisse di verificare la simmetria ed eventualmente evidenziare le zone che non la rispettano.
Anche a qualcuno di voi potrebbe risultare comodo?
Giuseppe, potrebbe essere una richiesta plausibile da integrare in una prossima release?

1 Mi Piace

Ciao Paolo,
In realtà si può fare qualcosa di simile anche ora con una definizione di Grasshopper che ti permette di visualizzare più facilmente gli scostamenti eventuali basandosi su colori.
Ho fatto una definizione simile per controllare gli scostamenti in offset variabili ma la sostanza non cambia.

2 Mi Piace

ciao,
quando devo fare il controllo simmetria, suddivido una copia dello stampo, cambio il colore di una metà e la specchio, in modo di fare una comparazione visiva della simmetria .
per gli stampi semplici funziona abbastanza bene.
ciao, Andrea

2 Mi Piace

hai provato se DeviazioneCrv ve bene nel tuo caso?

Sì, infatti Andrea per le simmetrie semplici faccio anch’io così, ma su quelle complesse è una sfida da “settimana enigmistica”.

è limitato alle curve…

Purtroppo per GH ho un rigetto preferirei un semplice pulsante con la selezione della polisuperficie e del piano di simmetria. Grazie Giuseppe.

ciao Paolo,
esisteva il plugin RhinoMold della TDM che assieme ad altre cose utili per gli stampisti,
aveva un modulo “compare” che serviva per valutare le geometrie, ma si basava sempre sui colori. ora comunque non è più distribuito .
anche io ho difficoltà con Grasshopper ma è comunque una ottima soluzione in tante situazioni.
ciao, Andrea

Buttare su uno script non è difficile (soprattutto se con grasshopper).
Ma non spererei troppo che McNeel si metta a creare comandi così specifici…

è proprio questo il punto. Pure a te, che ne hai bisogno, ti capita ogni tanto.


Io farei un populate geometry per ogni faccia E spigolo della polisuperficie iniziale, con una densità bella abbondante, specchierei i punti, e con BrepClosestPoint verificherei quanti e quali punti sono fuori tolleranza…

3 Mi Piace

Ecco, ancora meglio andando di mesh… abbastanza semplice:


trova differenze simmetria V0.1.gh (115,8 KB)
Questo fa una mesh del solido fornito e colora ogni vertice in base a se trova o no la simmetria… si vede meglio se rhino è in modalità wireframe , fil di ferro…

1 Mi Piace

Ciao Paolo, se può servire io ho questo script per confrontare lo scostamento tra due superfici.
No ricordo da dove venga, forse @emilio?
Non indica i punti dove c’è lo scostamento, penso si possa fare semplicemente se si conosce Python, non è il mio caso, ho già sudato sette camicie per fare una piccola modifca. :sweat_smile:

"import rhinoscriptsyntax as rs

def main():
su0 = rs.GetObject( ‘Reference surface ?’, 8, True )
if not su0:
return
rs.HideObject(su0)
su1 = rs.GetObject( ‘Surface to check ?’, 8 )
if not su1:
return
rs.EnableRedraw( False )
fir = rs.FirstObject()
rs.SelectObject( su1 )
rs.ShowObject(su0)
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()"

3 Mi Piace

@Gambler Discourse ti svacca il codice…
Se selezioni tutta la parte di codice e clikki su:
2023-11-14 17_21_04-WISH_ analisi simmetria - Rhino Windows - McNeel Forum
ti mantiene il codice corretto, testualmente identico, senza riformattarlo “web/html”, pronto per essere nuovamente copiato e usato.

Vedo qualche carattere che è stato convertito… forse è diventato non eseguibile ora come ora…

3 Mi Piace

Riprovo:

import rhinoscriptsyntax as rs

def main():
  su0 = rs.GetObject( 'Reference surface ?', 8, True )
  if not su0:
    return
  rs.HideObject(su0)
  su1 = rs.GetObject( 'Surface to check ?', 8 )
  if not su1:
    return
  rs.EnableRedraw( False )
  fir = rs.FirstObject()
  rs.SelectObject( su1 )
  rs.ShowObject(su0)
  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()
4 Mi Piace

Forse no, dato che lavora su una singola superficie.
Bisognerebbe estenderlo a una (o piu’) brep, come fa la bella def di Riccardo.
E volendo migliorarlo lavorando sulle geometrie invece che sugli oggetti visibili nel documento, ma e’ piu’ una questione di ‘estetica dello script’ … :smile:
E poi, certo, considerare un piano di simmetria, una tolleranza e mostrare in qualche modo le zone che non combaciano.

… Ma non c’era anche un modo per eseguire le def di GH da pulsante ?
Mi sembra di ricordare qualcosa … ma molto vagamente … :blush:

In ogni caso concordo con gli ‘ex colleghi’ :wink: che e’ una feature che un CAD dovrebbe avere (senza per questo voler catalogare Rhino come CAD, Rhino decide lui cosa vuole essere :slight_smile: ).
Il fatto della simmetria puo’ non essere basilare, a mio avviso, pero’ poter confrontare 2 forme per scoprire le differenze, si’, decisamente serve.

EDIT

Vista !
Be’, si’, prima era un po’ ‘brutale’ … :smile:

GrasshopperPlayer, che sarebbe qua:
2023-11-14 17_53_35-puzzle 001.3dm (2 MB) - Rhino 7 Commerciale - Top
ma usando quel bottone ti tocca andare a cercare a mano lo script ogni volta.

Quello che intendi te è un bottone che richiama il comando con anche il percorso del file, nel mio caso è:
-_GrasshopperPlayer "C:\Users\maje\Desktop\trova differenze simmetria V0.2.gh"


Script modificato:


trova differenze simmetria V0.2.gh (15,0 KB)
In questo caso però non è interattivo, il comando da rhino ti butta fuori una mesh dove vedi i colori in modalità Shaded/Ombreggiata …

Personalmente mi permetto di suggerire a chi non è pratico di provare anche la strada del
“apro GH, imposto un paio di geometrie con ‘Set one brep’ o simili, e lo lascio attivo che aggiorna dinamicamente…” … tipo nel caso del mio script V0.1 qua sopra è comodo che l’anteprima colorata non sia selezionabile, è solo in sovraimpressione, simile ai vari tool di analisi.
GrasshopperPlayer funziona, ma ti ritrovi una mesh tra i piedi, che potrebbe non essere aggiornata…

2 Mi Piace

Effettivamente non è male Riccardo, lo provo e ti so dire.

1 Mi Piace

Proprio lui ! :wink:

Grazie. :slight_smile:

Allora ricordavo bene, è un tuo script. :grinning:
Visto che modifica da esperto programmatore? :rofl:

Subito dicevo …
Strano, ho messo uno ShowObject tra SelectObject e il comando … dovveo essere un po’ fuso …
E non avevo nemmeno notato la differenza riguardo agli spazi nelle chiamate di funzione …

:smile:

Ovviamente niente di male, anzi, lo script va benissimo cosi’ !
Solo non combaciava con le mie abitudini …

:smile:

2 Mi Piace

Giusta osservazione.
Ancor piu’ importante quando l’indentazione influisce sulla sintassi, come qui. :grinning:
Poi le parentesi quadre che diventano un quadratino mi fanno sempre sclerare … :smile: