frompathlibimportPathimportnumpyasnpfromcompas.geometryimportPointfromcompas.geometryimportVectorfromcompas.geometryimportPlanefromcompas.geometryimportPolylinefromcompas.datastructuresimportMeshfromcompas.colorsimportColorfromcompas_view2.appimportAppfromcompas_cgal.slicerimportslice_mesh_planesFILE=Path(__file__).parent.parent.parent/"data"/"3DBenchy.stl"# ==============================================================================# Get benchy and construct a mesh# ==============================================================================benchy=Mesh.from_stl(FILE)# ==============================================================================# Create planes# ==============================================================================# replace by planes along a curvebbox=benchy.bounding_box()x,y,z=zip(*bbox)zmin,zmax=min(z),max(z)normal=Vector(0,0,1)planes=[]foriinnp.linspace(zmin,zmax,50):plane=Plane(Point(0,0,i),normal)planes.append(plane)# ==============================================================================# Slice# ==============================================================================M=benchy.to_vertices_and_faces()pointsets=slice_mesh_planes(M,planes)# ==============================================================================# Process output# ==============================================================================polylines=[]forpointsinpointsets:points=[Point(*point)forpointinpoints]polyline=Polyline(points)polylines.append(polyline)# ==============================================================================# Visualize# ==============================================================================viewer=App(width=1600,height=900)viewer.view.camera.position=[-40,-70,40]viewer.view.camera.look_at([0,0,20])viewer.add(benchy,show_lines=False,opacity=0.5)forpolylineinpolylines:viewer.add(polyline,linecolor=Color.grey(),linewidth=2)viewer.run()