Devo estrarre da una mesh tutte le facce le cui normali soddisfano a certe condizioni.
L’idea era questa:
0) seleziona la mesh ->M= coercemesh (mesh_id)
lista di tutte le facce
lista di tutte le normali
per ogni normale verifica la condizione, se soddisfatta appendi la faccia ad una apposita lista.
… etc
Gia’ al punto 1 sono in difficolta’. ho provato ad usare ListaNormali= rh.Geometry.Mesh.FaceNormals(M) ed anche rh.Geometry.Collections.MeshFaceNormalList.ComputeFaceNormals, in tutti i modi ma non ne vengo fuori.
Esiste veramente la possibilita’ di ricavare la lista delle normali delle facce da una mesh in Rhino5?
Rhino 5 è vecchiotto, io potrei provare qualcosa con il 7, sperando sia retrocompatibile il tutto.
Rhinoscript può andare bene?
In realtà con grasshopper queste cose sono molto più gestibili e facili. Considereresti installare grasshopper per rhino 5?
Ho gia installato grasshopper su Rh5 , ma non mi trovo a mio agio. Preferisco gli script con Python.
Ho dato qualche occhiata in giro e fatto qualche prova il risultato e’ che per usare il metodo " MeshFaceNormalList " ci vuole qualche procedura misteriosa oppure non funziona.
Ho provato:
mesh_id = rs.GetObject ( message=" seleziona la MESH", filter=32)
M = rs.coercemesh(mesh_id)
FN= rh.Geometry.Mesh.FaceNormals(M) # non va
FN5=rh.Geometry.Collections.MeshFaceNormalList(FN4) #non va
#FN10=rh.Geometry.Collections.MeshFaceNormalList.ComputeFaceNormals(FN)
Nota anche come sottolineano che alla lista si accede con le parentesi quadre.
Guarda il codice che si vede nella finestra nello screenshot. Fa qualcosa con la variabile “normals” , che dovrebbe essere una MeshFaceNormalList …
vogli estrarre da una mesh solo le facce che hanno una determinata normale , ad esempio con la componente verticale entro un certo angolo.
Ho visto che posso risolvere la questione con
normals = rs.MeshFaceNormals(obj)"
e poi analizzare i singoli componenti della lista “normals”.
Ma questa faccenda della misteriosa “MeshFaceNormalList” mi intriga e vorrei sapere come si usa.
import Rhino as rc
M.FaceNormals.ComputeFaceNormals()
normals = M.FaceNormals
faces = []
for i in range(M.Faces.Count):
if rc.Geometry.Vector3d.VectorAngle(normals[i],V) < 0.2:
faces.append(M.Faces[i])
M.Faces.Clear()
M.Faces.AddFaces(faces)
M.Vertices.CullUnused()
a=M