Buongiorno ,
oggi ho questo problema:
Ho fatto un piccolo script che prende la mesh
estrae la lista delle facce ( ad es 100 facce)
estrae la lista dei facevertex
estrae la lista delle normali delle facce
estrae la lista dei vertici della mesh
per ogni faccia esamina la normale
se corrisponde ad una certa condizione appende i facevertex di quella faccia ad una nuova lista
alla fine del ciclo ho una nuova lista di facevertex con un numero di elementi inferiore a quella di partenza (ad es 20 facce)
costruisco una nuova mesh con la nuovaface vertex e la lista originaria di vertici.
La mesh viene creata , ha tutte le caratteristiche che servono , ma se estraggo i vertici ottengo anche i punti ormai inutili.
dovrei fare la mesh con una ridotta lista di vertici, cioe’ dovrei ridurre, riordinare la vertexlist indicizzando nuovamente i vertici delle singole faccette. Non ho la piu’ pallida idea di come fare .
Qualche suggerimento?
qui sotto lo script:
import Rhino as rh
import rhinoscriptsyntax as rs
import System
import time
import clr
import scriptcontext as sc
rs.AddLayer(“A”,(255,100,100))
rs.AddLayer(“B”,(0,255,200))
mesh_id = rs.GetObject ( message=" seleziona la MESH", filter=32)
rs.EnableRedraw(enable=False)
i=0
faces = rs.MeshFaces(mesh_id, False)
faceVerts = rs.MeshFaceVertices( mesh_id )
vertices= rs.MeshVertices(mesh_id)
normals = rs.MeshFaceNormals(mesh_id)
newfaces=
newfaceverts=
newfaceverts2=
if normals:
for vector in normals:
if vector[2] < 0.05 and vector[2] > -0.05: # REGOLA x NORMALE
newfaces.append(faces[i])
newfaceverts.append(faceVerts[i])
else:
newfaceverts2.append(faceVerts[i])
i=i+1
M1=rs.AddMesh( vertices, newfaceverts ) # le facce che rispondono alla regola
obj=rs.FirstObject()
rs.ObjectLayer( obj, “A” )
M2=rs.AddMesh( vertices, newfaceverts2 ) #le altre
obj=rs.FirstObject()
rs.ObjectLayer( obj, “B” )
rs.EnableRedraw(enable=True)
m0= “il lay ‘A’ contiene la mesh estratta, il lay ‘B’ il resto \n”
m1= " ogni mesh contiene la lista di ‘Tutti’ i vertici della mesh originale \n"
rs.MessageBox(m1+m2)
Grazie
Franco