Salve a tutti
Per un progetto mi trovo a dover scrivere uno programmino in ambiente Rhino python che mi esegua in un ciclo for l’intersezione di varie mesh.
Purtroppo però sono bloccato appunto nell’interazione dellle mesh che viene effettuata con il comando meshmeshintersection che come da testo dovrebbe restituire una array di punti 3d rappresentanti la polilinea di intersezione.
Quello che se vado a fare il print del risultato dell’intersezione non esce una lista, vettore o altro ma mi restituisce un oggetto un scritta che purtroppo ,essendo un neofita , non riesco ad interpretare, e peggio ancora non riesco a lavorare in quanto ogni funzione che vado ad eseguire mettendo per oggetto l’intersezione ottenuta,mi viene detto che quest’ultima non è un argomento valido.
Non so più dove sbattere la testa
Dove sbaglio? che qualcosa che non ho considerato?
P.s. facendo print dell’intersezione l’output è
[<Rhino.geometry.polyline object at 0x000000000000002C [Rhino.geometry.polyline]>]
Ringrazio in anticipo
Devi postare il codice dello script che hai fatto per riuscire a capire dove sta il problema…
Anche un esempio di mesh che utilizzi durante la procedura di intersezione (magari lo script é corretto ma le geometrie no…)
Ciao Lucio grazie per la risposta domani mattina metterò lo script che utilizzo , non aspettarti qualcosa di contorto è soltanto 2 funzioni getobject e un meshmeshintersection, perché prima volevo capire come far funzionare un programma base per poi svilupparlo in base alle esigenze
Ciao Emilio ringrazio anche te per la risposta, l’unica cosa che non capisco è perché se il return della funzione meshmeshintersection deve essere un array che mi definisce i punti di una polilinea per quale motivo mi restituisce un oggetto? Come posso ricavare i punti da questo oggetto?
P.s. ho trovato un esempio di intersezione mesh sempre domani mattina posteró anche quello
Chiedo scusa, prima ho scritto una scemenza …
Non e’ un oggetto Polyline, ma una lista contenente un oggetto Polyline
La documentazione di rs.MeshMeshIntersection dice:
Returns
List A list of 3-D point arrays that identify the vertices of the intersection curves (polylines) if successful.
E in effetti parla di una lista di arrays di punti 3-D.
Il polylines tra parentesi credo significhi che le arrays in questione sono in realta’ delle Polyline.
Certo, per capirlo e’ utile sapere che Polyline discende da Point3dList, come dice RhinoCommon:
Di seguito inserisco lo script che sto usando con l’aggiunto di qualche modifica suggerita da Emilio e anche l’esempio trovato in rete.
#importo la libreria rhinoscriptsyntax
import rhinoscriptsyntax as rs
#vado a selezionare la prima mesh da lavorare (risultato = GUID)
mesh1 = rs.GetObject('selezionare la prima mesh da lavorare:')
#vado a selezionare la prima mesh da lavorare (risultato = GUID)
mesh2 = rs.GetObject('selezionare la seconda mesh da lavorare:')
#creo come risultato l'intersezione delle mesh (risultato = Rhino.object.polyline)
intersezione = rs.MeshMeshIntersection(mesh1,mesh2)
#vado a convertire l'oggetto intersezione in una lista
punti_di_intersezione = list(intersezione)
print len(intersezione)
print intersezione[0]
print list(intersezione[0])
#mostro a schermo il contenuto della lista punti_di_intersezione
print (punti_di_intersezione)
#la parte successiva e un esempio che ho trovato in internet per ottenere una polilinea
#---------------------------------------------------------------
results = rs.MeshMeshIntersection(mesh1, mesh2)
if results:
for points in results:
polilinea = rs.AddPolyline(points)
#---------------------------------------------------------------
#successivamente la parte che ho agguinto io per ottenere l'aggiunta di un punto
print polilinea
lista_di_punti = rs.PolylineVertices(polilinea)
print lista_di_punti
rs.AddPoint(lista_di_punti[1])
quello che non mi è chiaro :
perchè facendo print list(intersezione[0]) non ottengo un singolo punto ma gli ottendo tutti?
perchè devo aggiungere un ciclo for per ottenere una polilinea quando da quel che sò basterebbe il comando rs.AddPolyline(points) ?
la variabile punto nel ciclo for perchè varia nell’intervallo dei punti di result dandomi una polilinea, mentre se io semplicemente vado a scrivere print punto al posto di polilinea = rs.AddPolyline(points) mi restituisce l’oggetto polilinea?
scusate le tante domande magari anche stupide ma sono alle prime armi, portate pazienza
Credo di cominciare a vedere una luce in fondo al tunnel
dopo qualche altra prova sono riuscito a ricavare le coordinate dei singoli punti ottenuti dell’intersezione tramite
da sostituire alla riga 17
in questo modo se vado a scrivere :
print punti_di_intersezione[0]
ottendo esattamente le coordinate del punto 0 della lista
il mio problema fosse propio il non sapere che da una funzione contenuta in rhinoscriptsyntax si potesse ottenere un “oggetto” “lavorabile” solo con la libreria Rhino, buono a sapersi per il futuro
Perche’ MeshMeshIntersection restituisce una lista di polilinee, come dice la documentazione:
Returns
List A list of 3-D point arrays that identify the vertices of the intersection curves (polylines) if successful.
Sempre perche’ hai una lista di polilinee, e per ottenere le varie poillinee usi un ciclo
Non sono punti, sono polilinee. Il nome points non va tanto bene qui …
Puoi anche scrivere semplicemente
No, ottieni una Polyline, ma una Polyline e’ anche una array di punti, che puoi usare direttamente con cicli o indicizzazioni o trasformare agevolmente in una lista di punti.
Non c’e’ bisogno di usare direttamente RhinoCommon, salvo che tu voglia fare operazioni che rhinoscriptsyntax non puo’ fare.
Di niente, figurati !
Se hai qualche dubbio, chiedi pure.