compas.numerical.scalarfield_contours_numpy(xy, s, levels=50, density=100)[source]

Compute the contour lines of a scalarfield.

  • xy (array-like) – The xy-coordinates at which the scalar field is defined.

  • s (array-like) – The values of the scalar field.

  • levels (int, optional) – The number of contour lines to compute. Default is 50.


tuple – A tuple of a list of levels and a list of contour geometry.

The list of levels contains the values of the scalarfield at each of the contours. The second item in the tuple is a list of contour lines. Each contour line is a list of paths, and each path is a list polygons.


The computation of the contour lines is based on the contours function available through matplotlib.


import compas
from compas.datastructures import Mesh
from compas.geometry import centroid_points
from compas.geometry import distance_point_point
from compas.geometry import scalarfield_contours_numpy

mesh = Mesh.from_obj(compas.get('faces.obj'))

points = [mesh.vertex_coordinates(key) for key in mesh.vertices()]
centroid = centroid_points(points)
distances = [distance_point_point(point, centroid) for point in points]

xy = [point[0:2] for point in points]

levels, contours = scalarfield_contours_numpy(xy, distances)

for i in range(len(contours)):
    level = levels[i]
    contour = contours[i]
    for path in contour:
        for polygon in path: