Geometry Utilities (mathutils.geometry)

The Blender geometry module

mathutils.geometry.area_tri(v1, v2, v3)

Returns the area size of the 2D or 3D triangle defined.

Parameters:
Return type:

float

mathutils.geometry.barycentric_transform(point, tri_a1, tri_a2, tri_a3, tri_b1, tri_b2, tri_b3)

Return a transformed point, the transformation is defined by 2 triangles.

Parameters:
Returns:

The transformed point

Return type:

mathutils.Vector’s

mathutils.geometry.box_fit_2d(points)

Returns an angle that best fits the points to an axis aligned rectangle

Parameters:points (list) – list of 2d points.
Returns:angle
Return type:float
mathutils.geometry.box_pack_2d(boxes)

Returns the normal of the 3D tri or quad.

Parameters:boxes (list) – list of boxes, each box is a list where the first 4 items are [x, y, width, height, …] other items are ignored.
Returns:the width and height of the packed bounding box
Return type:tuple, pair of floats
mathutils.geometry.convex_hull_2d(points)

Returns a list of indices into the list given

Parameters:points (list) – list of 2d points.
Returns:a list of indices
Return type:list of ints
mathutils.geometry.delaunay_2d_cdt(vert_coords, edges, faces, output_type, epsilon)

Computes the Constrained Delaunay Triangulation of a set of vertices, with edges and faces that must appear in the triangulation. Some triangles may be eaten away, or combined with other triangles, according to output type. The returned verts may be in a different order from input verts, may be moved slightly, and may be merged with other nearby verts. The three returned orig lists give, for each of verts, edges, and faces, the list of input element indices corresponding to the positionally same output element. For edges, the orig indices start with the input edges and then continue with the edges implied by each of the faces (n of them for an n-gon).

arg vert_coords:
 Vertex coordinates (2d)
type vert_coords:
 list of mathutils.Vector
arg edges:Edges, as pairs of indices in vert_coords
type edges:list of (int, int)
arg faces:Faces, each sublist is a face, as indices in vert_coords (CCW oriented)
type faces:list of list of int
arg output_type:
 What output looks like. 0 => triangles with convex hull. 1 => triangles inside constraints. 2 => the input constraints, intersected. 3 => like 2 but with extra edges to make valid BMesh faces.
type output_type:
 intn :arg epsilon: For nearness tests; should not be zero
type epsilon:float
return:Output tuple, (vert_coords, edges, faces, orig_verts, orig_edges, orig_faces)
rtype:(list of mathutils.Vector, list of (int, int), list of list of int, list of list of int, list of list of int, list of list of int)
mathutils.geometry.distance_point_to_plane(pt, plane_co, plane_no)

Returns the signed distance between a point and a plane (negative when below the normal).

Parameters:
Return type:

float

mathutils.geometry.interpolate_bezier(knot1, handle1, handle2, knot2, resolution)

Interpolate a bezier spline segment.

Parameters:
Returns:

The interpolated points

Return type:

list of mathutils.Vector’s

mathutils.geometry.intersect_line_line(v1, v2, v3, v4)

Returns a tuple with the points on each line respectively closest to the other.

Parameters:
Return type:

tuple of mathutils.Vector’s

mathutils.geometry.intersect_line_line_2d(lineA_p1, lineA_p2, lineB_p1, lineB_p2)

Takes 2 segments (defined by 4 vectors) and returns a vector for their point of intersection or None.

Warning

Despite its name, this function works on segments, and not on lines.

Parameters:
Returns:

The point of intersection or None when not found

Return type:

mathutils.Vector or None

mathutils.geometry.intersect_line_plane(line_a, line_b, plane_co, plane_no, no_flip=False)

Calculate the intersection between a line (as 2 vectors) and a plane. Returns a vector for the intersection or None.

Parameters:
Returns:

The point of intersection or None when not found

Return type:

mathutils.Vector or None

mathutils.geometry.intersect_line_sphere(line_a, line_b, sphere_co, sphere_radius, clip=True)

Takes a line (as 2 points) and a sphere (as a point and a radius) and returns the intersection

Parameters:
Returns:

The intersection points as a pair of vectors or None when there is no intersection

Return type:

A tuple pair containing mathutils.Vector or None

mathutils.geometry.intersect_line_sphere_2d(line_a, line_b, sphere_co, sphere_radius, clip=True)

Takes a line (as 2 points) and a sphere (as a point and a radius) and returns the intersection

Parameters:
Returns:

The intersection points as a pair of vectors or None when there is no intersection

Return type:

A tuple pair containing mathutils.Vector or None

mathutils.geometry.intersect_plane_plane(plane_a_co, plane_a_no, plane_b_co, plane_b_no)

Return the intersection between two planes

Parameters:
Returns:

The line of the intersection represented as a point and a vector

Return type:

tuple pair of mathutils.Vector or None if the intersection can’t be calculated

mathutils.geometry.intersect_point_line(pt, line_p1, line_p2)

Takes a point and a line and returns a tuple with the closest point on the line and its distance from the first point of the line as a percentage of the length of the line.

Parameters:
Return type:

(mathutils.Vector, float)

mathutils.geometry.intersect_point_quad_2d(pt, quad_p1, quad_p2, quad_p3, quad_p4)

Takes 5 vectors (using only the x and y coordinates): one is the point and the next 4 define the quad, only the x and y are used from the vectors. Returns 1 if the point is within the quad, otherwise 0. Works only with convex quads without singular edges.

Parameters:
Return type:

int

mathutils.geometry.intersect_point_tri(pt, tri_p1, tri_p2, tri_p3)

Takes 4 vectors: one is the point and the next 3 define the triangle.

Parameters:
Returns:

Point on the triangles plane or None if its outside the triangle

Return type:

mathutils.Vector or None

mathutils.geometry.intersect_point_tri_2d(pt, tri_p1, tri_p2, tri_p3)

Takes 4 vectors (using only the x and y coordinates): one is the point and the next 3 define the triangle. Returns 1 if the point is within the triangle, otherwise 0.

Parameters:
Return type:

int

mathutils.geometry.intersect_ray_tri(v1, v2, v3, ray, orig, clip=True)

Returns the intersection between a ray and a triangle, if possible, returns None otherwise.

Parameters:
Returns:

The point of intersection or None if no intersection is found

Return type:

mathutils.Vector or None

mathutils.geometry.intersect_sphere_sphere_2d(p_a, radius_a, p_b, radius_b)

Returns 2 points on between intersecting circles.

Parameters:
  • p_a (mathutils.Vector) – Center of the first circle
  • radius_a (float) – Radius of the first circle
  • p_b (mathutils.Vector) – Center of the second circle
  • radius_b (float) – Radius of the second circle
Return type:

tuple of mathutils.Vector’s or None when there is no intersection

mathutils.geometry.intersect_tri_tri_2d(tri_a1, tri_a2, tri_a3, tri_b1, tri_b2, tri_b3)

Check if two 2D triangles intersect.

Return type:bool
mathutils.geometry.normal(vectors)

Returns the normal of a 3D polygon.

Parameters:vectors (sequence of 3 or more 3d vector) – Vectors to calculate normals with
Return type:mathutils.Vector
mathutils.geometry.points_in_planes(planes)

Returns a list of points inside all planes given and a list of index values for the planes used.

Parameters:planes (list of mathutils.Vector) – List of planes (4D vectors).
Returns:two lists, once containing the vertices inside the planes, another containing the plane indices used
Return type:pair of lists
mathutils.geometry.tessellate_polygon(veclist_list)

Takes a list of polylines (each point a vector) and returns the point indices for a polyline filled with triangles.

Parameters:veclist_list – list of polylines
Return type:list
mathutils.geometry.volume_tetrahedron(v1, v2, v3, v4)

Return the volume formed by a tetrahedron (points can be in any order).

Parameters:
Return type:

float