# Estrarre una mesh da una esistente

**URL:** <https://it.discourse.mcneel.com/t/estrarre-una-mesh-da-una-esistente/5406>\
**Category:** Rhino\
**Created:** [20 Settembre 2023, 5:12pm UTC](https://it.discourse.mcneel.com/t/estrarre-una-mesh-da-una-esistente/5406 "2023-09-20T17:12:49Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![franco](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/franco/32/16348_2.png) [@franco](https://it.discourse.mcneel.com/u/franco)\
**Post date:** [20 Settembre 2023, 5:12pm UTC](https://it.discourse.mcneel.com/t/estrarre-una-mesh-da-una-esistente/5406/1 "2023-09-20T17:12:49Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![RiccardoMajewski](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/riccardomajewski/32/22945_2.png) [@RiccardoMajewski](https://it.discourse.mcneel.com/u/RiccardoMajewski)\
**Post date:** [20 Settembre 2023, 8:12pm UTC](https://it.discourse.mcneel.com/t/estrarre-una-mesh-da-una-esistente/5406/2 "2023-09-20T20:12:50Z")

</div>

> [@franco](#):
>
> dovrei fare la mesh con una ridotta lista di vertici, cioe’ dovrei ridurre, riordinare la vertexlist indicizzando nuovamente i vertici delle singole faccette.

In specifico, cosa stai cercando di fare?

Se devi semplicemente “filtrare” le facce di una mesh, vedi l’esempio che avevo fatto nell’altro thread:

> [@MeshFaceNormals come fare?](https://it.discourse.mcneel.com/t/meshfacenormals-come-fare/5365/11):
>
> 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](https://it.discourse.mcneel.com/uploads/short-url/ozaXWTGYTdpkCPGZLpx0DpmcHi5.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

Lo avevi guardato?

Lascia stare i vertici, tienili tutti. Lavora sulle facce e alla fine, e solo alla fine, fai un .CullUnused() e hai finito.
