MeshFaceNormals come fare?

Buongiorno,

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)

  1. lista di tutte le facce
  2. lista di tutte le normali
  3. 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?

in trepida attesa vi saluto

franco

ciao,

domanda un po generica, sopratutto per le condizioni, quali sarebbero?

1 Mi Piace

Ciao Franco.

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?

Se puoi usare Grasshopper c’è un componente Peacock che può fare al caso tuo, anche con Rhino 5.

1 Mi Piace

Grazie per le risposte,

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)

Insomma , ho bisogno che qualcuno mi insegni come si usa questa MeshFaceNormalList …

una curiosità: a cosa ti serve praticamente questa lista?

Io non conosco python, però dai un occhiata qua:

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.

Ho provato ma non riesco a farla funzionare . probabilmente non sono un esperto di Common.

Questo è python in grasshopper di Rhino 7, però in qualche modo dovresti riuscire a farlo andare su Rhino 5…


mesh filter faces by angle.gh (6,1 KB)

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
2 Mi Piace

gia’ piu’ chiaro , grazie