Gli Script

Ciao Claudio

Scusa, puoi specificare quali sono le liste di cui parli ?
E fare lo stesso per il valore e la distanza ? :slightly_smiling_face:
Grazie.

Ciao

Ciao Emilio , la mia domanda in pratica pone se possibile calcolare la distanza fra 2 centri , nel nostro caso di cerchi o loft , che le liste a cui fa riferimento se ho ben capito ma potrei sbagliare è dove vengono memorizzati i valori recuperati dal file txt :

passiamo il carattere newline come separatore tra le linee

lines = text.split( '\n' )
# viene definito una variabile nome per riga file di importazione
rad = [] # 
lng = [] # lunghezza asse tronco di cono
deg = [] # grado inclizazione 
# Usiamo un ciclo for e una variabile cnt
# come contatore per elencare le linee di testo lette

Usiamo un ciclo for e una variabile cnt

# come contatore per elencare le linee di testo lette
for line in lines:
    # Creazione lista con le stringhe ottenute scomponendo stringa originale wrd
    wrd = line.strip().split( ',' )
    # lista di numeri ottenuti floating-point
    num = [ float( wr ) for wr in wrd ]
    # prendo valore primo 0 dalla lista , diametro 1 e trovo raggio
    rad.append( num[ 0 ] / 2 ) 
    # prendo valore 1 dalla lista ,lunghezza  
    lng.append( num[ 2 ] )
    # prendo il valore quattro 3 dalla lista , angolo piega
    deg.append( num[ 3 ] )
    # prendo valore secondo 1 dalla lista ,diametro 2 e trovo raggio 
rad.append( num[ 1 ] / 2 )

Dovrebbe essere Ccen

controllo

xax = [ 1, 0, 0 ]
zax = [ 0, 0, 1 ]
# usiamo la lista  per salvare i centri dei cerchi ,primo valore 0,0,0
ccen = [ [ 0, 0, 0 ] ]
for ix in range( sucnt ):
    vec = rs.VectorRotate( xax, arot[ ix ], zax )
    vec = rs.VectorScale( vec, lng[ ix ] )
    pnt = rs.VectorAdd( ccen[ -1 ], vec )
    ccen.append( pnt )
cen = [ 0, 0, 0 ]
pla = rs.WorldYZPlane()

File txt in breve

39.0 ,39.3, 25.6, 14.0
39.3 ,41.3, 26.6, 14.0
41.3 ,42.0, 25.6, 14.0


In pratica conoscere la distanza da ccen valore posizione 0 a valore ccen valore posizione 6 ad esempio.

Non so se la mia spiegazione è chiara nel caso cerco di formulare meglio la mia domanda.

Ciao grazie

Esatto, quella lista contiene i centri dei cerchi.

OK, chiaro. :slight_smile:

Suppongo tu intenda la distanza 3D, ‘reale’.
Per questo si puo’ usare
rhinoscriptsyntax.Distance()
https://developer.rhino3d.com/api/RhinoScriptSyntax/#utility-Distance

Se invece cerchi la distanza misurata lungo l’asse del condotto, ovviamente si trova sommando le verie lunghezze in lng … anche se non penso che sia questo che ti serve. :confused:

Quanto detto vale se il calcolo lo fai all’interno dello script, cioe’ mentre lo script e’ in esecuzione.

Se no, come dici tu, una volta terminata l’esecuzione, dei dati interni allo script non resta traccia.
Quindi bisogna partire dal condotto disegnato.
Se serve, ovviamente, si puo’ far disegnare allo script anche i cerchi, oppure i centri dei cerchi, o ancora la polilinea che rappresenta l’asse del condotto.

Se no si parte dal bordo della superficie di loft, ottenendo un cerchio e poi si prende il centro.

E’ quello che volevi sapere ? :slight_smile:

Ciao

Si , esatto, in sostanza si intende la distanza lineare fra due punti o centri (ccen) nello spazio , oppure si puo scegliere anche un atro riferimento per verifica non necessariamente deve essere il centro , ovviamente lo si puo fare anche dopo manualmente ma cerco di capire se ci sia metodo semplice o non troppo complesso per averlo da script .

Distance

Distance(point1, point2)

Measures distance between two 3D points, or between a 3D point and an array of 3D points.

Parameters:

point1 (point): The first 3D point. point2 (point): The second 3D point or list of 3-D points.

Returns:

point: If point2 is a 3D point then the distance if successful. point: If point2 is a list of points, then an list of distances if successful. None: if not successful

Example:
import rhinoscriptsyntax as rspoint1 = rs.GetPoint("First point")if point1:    point2 = rs.GetPoint("Second point")    if point2:        print("Distance: {}".format(rs.Distance(point1, point2)))

Poi presumo serve il print se si vuole scriverla a schermo o quota o puntodianotazione.

Ciao Grazie per le risposte.

Certo, si puo’ fare da script.

Il print scrive semplicemente del testo nella command area di Rhino.

Ma se e’ sufficiente vedere la distanza, penso che fai prima col comando _Distance, snappando sul centro dei bordi delle superfici (cioe’ i centri dei cerchi).

Anche per la quota e’ semplice farlo da comando, ma solo nel caso il condotto sia in piano, come lo disegna lo script originale.
Se invece ci sono anche rotazioni verso l’asse Z. allora, come dico sotto, credo sia necessario prima orientare il CPlane …

Tornando agli script …
Se vuoi una quota, c’e’ questo:
rhinoscriptsyntax.AddLinearDimension()
https://developer.rhino3d.com/api/RhinoScriptSyntax/#dimension-AddAlignedDimension
… Ma tieni presente che non sempre e’ semplicissimo disegnare quote in 3D con Rhino.
Le quote Rhino le disegna parallele al CPlane, quindi bisogna orientare prima il CPlane in modo che sia parallelo alla quota.

Invece col punto di annotazione ovviamente non ci sono problemi.
Da script si puo’ fare con
rhinoscriptsyntax.AddTextDot()
https://developer.rhino3d.com/api/RhinoScriptSyntax/#geometry-AddTextDot

Ciao

1 Mi Piace

Concordo , ho visto gestisce i piani di lavoro secondo i suoi criteri e ovviamente ho notato che non è semplice se non sei in planare come visuale .

Si serve solo conoscere il valore per cui gia il punto di annotazione è ok

Appena ho finito i disegni mi ci metto .

Ciao Grazie

1 Mi Piace

Ho fatto alcune prove , sembra funzionare , mentre con la quota allineata al momento non sono riuscito . si vede in foto per verifica .

Ciao grazie

Qui cosi’ sembra che funzioni. :slight_smile:

import rhinoscriptsyntax as rs

textheight = 10
ds = rs.CurrentDimStyle()
rs.DimStyleTextHeight( ds, textheight )
p0 = [ - 100, 0, 0 ]
p1 = [ 100, 100, 0 ]
pd = [ 0, 100, 0 ]
gid = rs.AddAlignedDimension( p0, p1, pd )

Ma questo sul piano XY.
Stavi provando su un piano diverso ?

Ciao

Devo rivedere perchè non mi ricordo piu perchè ho fatto piu modifiche fra rotazione , ed ho riscontrato problemi penso proprio sul piano , selezione e sviluppo per cui devo indietreggiare e rivedere con calma :cold_sweat: :cold_sweat:.

Appena riesco provo.

Ciao Grazie

1 Mi Piace

Ciao , sto provando a fare 2 cose e ovviamente due problemi :rofl::sweat_smile:.

Ho creato un pulsante e un Alias con la prima parte di codice che mi ha fatto (Emilio), lo script se eseguito tramite ScriptEditor funziona , dal pulsante funziona ma tramite alias m mi esce questo errore presumo di sbagliare qualcosa ?


Allego foto percorso Alias m

La seconda domanda è se esiste un metodo in modo che l allineamento sia automatico o piu rapido ad esempio sui dei centri dei cerchi nello spazio , non in un piano o zona planare situati diciamo nello spazio . (riferito al disegno effettuato dallo script)
Si riesce ma ovviamente devo allineare il Gunball e pensando di farlo da Script diventa molto ostico … per il momento.

Ciao Grazie

Ciao Claudio

Per l’encoding, l’unica cosa che ho sentito e’ di scrivere, come primissima riga del file:

# -*- coding: utf-8 -*-

Hai idea di quale sia il carattere che da’ problemi ?

Non capisco di quale allineamento stiamo parlando …
Vuoi spostare l’oggetto allineando 2 punti lungo una certa direzione ?
… O altro ? :slight_smile:

Ciao

Grazie , ceno sta sera siamo in ritardo, poi provo .

È sempre per ruotare 4 o 5 loft in una direzione mantenedo i cerchi concentrici fra i due punti dove ruota , uno rimane fermo e l altro ruota.
Ovviamente Rhino , il Gungball in nessun modo si allinea al centro del cerchio sui 3 assi correttamente,lo fa solo al centro , e si allinea solo se definisci i 3 punti.
Ho provato anche con allinramento piani ma al momento non sono riuscito , solo allineando i 3 punti.

Hai ragione non ho spiegato molto bene , dopo cerco di fare un video che risulta piu semplice a cosa mi riferisco.

Ciao Grazie Buona serata

1 Mi Piace

Ci ho guardato ma non ho proprio capito sinceramente , dall errore da un link che verificato
PEP 263 – Defining Python Source Code Encodings | peps.python.org ed spiega parecchie cose , cè anche il comando che mi hai gentilmente suggerito .

lo inserito nel codice script e ora Alias è perfettamente funzionante. :partying_face: :partying_face: :partying_face:

Per quanto riguarda la rotazione allego un breve video , in sintesi chiedo per un tentativo di fare lo script conn relativa calma , sicuramente complesso perchè dovrei creare dei gruppi e poi selezionando il centro effettuare la rotazione ma al momento il problema è capire , come poterlo fare dato che no sembra banale nemmeno in ambiente Rhino cosi diciamo …

Ciao e grazie delle spiegazioni

Scusa se te lo avevo gia’ chiesto, ma non mi ricordo … :blush:
Come definisci l’asse di rotazione ?

Parliamo di ruotare le superfici da script, giusto ?

Grazie per il video, l’ho visto adesso …

Comunque, una volta stabilito l’asse di rotazione e l’angolo, non dovrebbe essere complicato.

Vedo che usi il Gumball. Niente di male ovviamente :smile:
Ma il gumball spesso e’ utile per operazioni a mano, e fatte ‘al volo’.

Se stai lavorando su una operazione (la rotazione in questione) da fare via script, forse e’ piu’ semplice ragionare con un normale comando, come Rotate3D.
Risulta piu’ semplice replicare poi l’operazione nello script.

Ciao

1 Mi Piace

Hai perfettamente ragione l ho scoperto solo pochi giorni fa da buon neofita ho visto che era adatto piu di ruota .

Si lo scopo è quello oppure uno script anche separato che seleziono le varie parti e poi fa la rotazione .

Ci provo un po vedo cosa ne esce ma qui sto mollando il disegno e vado avanti con lo script , non va bene :joy: :joy: :joy:

Ciao grazie

Grazie a tè che mi dai sempre aiuti.

Confermo con Ruota3D molto piu semplice selezioni i 2 centri dei cerchi e digiti la rotazione ed è eseguito. :star_struck: Ho provato ora ovviamente in ambiente Rhinoceros.

Giusto per vedere come sia possibile con l’uso di GH.
Le sezioni ruotano sul piano di costruzione delle stesse

1 Mi Piace

MI piacerebbe Leopoldo avvicinarmici a GH ma mi sa difficile , mi è sembrato piu semplice lo script , avevo anche pensato di utilizzare il tuo esempio che mi hai fatto tempo fa ( Grande opera , Grazie ) e proseguire nel mio obbiettivo per il risultato , ma mi sembra che alla fine ci vuole una conoscenza in script e poi anche conoscere GH e capire mi sa altre cose , mi è sembrato piu difficile poi forse mi sbaglio …

Grazie per l esempio
CIao CIao