stl package

stl.Mesh

class stl.Mesh(data, calculate_normals=True, remove_empty_areas=False, remove_duplicate_polygons=<RemoveDuplicates.NONE: 0>, name='', speedups=True, **kwargs)[source]

Bases: stl.stl.BaseStl

property areas

Mesh areas

property attr
check()

Check the mesh is valid or not

classmethod debug(*args, **kwargs)

Log a message with severity ‘DEBUG’ on the root logger. If the logger has no handlers, call basicConfig() to add a console handler with a pre-defined format.

dtype = dtype([('normals', '<f4', (3,)), ('vectors', '<f4', (3, 3)), ('attr', '<u2', (1,))])
classmethod error(*args, **kwargs)

Log a message with severity ‘ERROR’ on the root logger. If the logger has no handlers, call basicConfig() to add a console handler with a pre-defined format.

classmethod exception(*args, exc_info=True, **kwargs)

Log a message with severity ‘ERROR’ on the root logger, with exception information. If the logger has no handlers, basicConfig() is called to add a console handler with a pre-defined format.

classmethod from_file(filename, calculate_normals=True, fh=None, mode=<Mode.AUTOMATIC: 0>, speedups=True, **kwargs)

Load a mesh from a STL file

Parameters
  • filename (str) – The file to load

  • calculate_normals (bool) – Whether to update the normals

  • fh (file) – The file handle to open

  • kwargs (dict) – The same as for stl.mesh.Mesh

classmethod from_files(filenames, calculate_normals=True, mode=<Mode.AUTOMATIC: 0>, speedups=True, **kwargs)

Load multiple meshes from a STL file

Note: mode is hardcoded to ascii since binary stl files do not support the multi format

Parameters
  • filenames (list(str)) – The files to load

  • calculate_normals (bool) – Whether to update the normals

  • fh (file) – The file handle to open

  • kwargs (dict) – The same as for stl.mesh.Mesh

classmethod from_multi_file(filename, calculate_normals=True, fh=None, mode=<Mode.ASCII: 1>, speedups=True, **kwargs)

Load multiple meshes from a STL file

Note: mode is hardcoded to ascii since binary stl files do not support the multi format

Parameters
  • filename (str) – The file to load

  • calculate_normals (bool) – Whether to update the normals

  • fh (file) – The file handle to open

  • kwargs (dict) – The same as for stl.mesh.Mesh

get(k[, d]) → D[k] if k in D, else d. d defaults to None.
get_header(name)
get_mass_properties()
Evaluate and return a tuple with the following elements:
  • the volume

  • the position of the center of gravity (COG)

  • the inertia matrix expressed at the COG

Documentation can be found here: http://www.geometrictools.com/Documentation/PolyhedralMassProperties.pdf

classmethod info(*args, **kwargs)

Log a message with severity ‘INFO’ on the root logger. If the logger has no handlers, call basicConfig() to add a console handler with a pre-defined format.

is_closed()

Check the mesh is closed or not

items() → a set-like object providing a view on D's items
keys() → a set-like object providing a view on D's keys
classmethod load(fh, mode=<Mode.AUTOMATIC: 0>, speedups=True)

Load Mesh from STL file

Automatically detects binary versus ascii STL files.

Parameters
  • fh (file) – The file handle to open

  • mode (int) – Automatically detect the filetype or force binary

classmethod log(msg, *args, **kwargs)

Log ‘msg % args’ with the integer severity ‘level’ on the root logger. If the logger has no handlers, call basicConfig() to add a console handler with a pre-defined format.

logger = <Logger stl.base.BaseMesh (WARNING)>
property max_

Mesh maximum value

property min_

Mesh minimum value

property normals
property points
classmethod remove_duplicate_polygons(data, value=<RemoveDuplicates.SINGLE: 1>)
classmethod remove_empty_areas(data)
rotate(axis, theta=0, point=None)

Rotate the matrix over the given axis by the given theta (angle)

Uses the rotation_matrix() in the background.

Note

Note that the point was accidentaly inverted with the old version of the code. To get the old and incorrect behaviour simply pass -point instead of point or -numpy.array(point) if you’re passing along an array.

Parameters
  • axis (numpy.array) – Axis to rotate over (x, y, z)

  • theta (float) – Rotation angle in radians, use math.radians to convert degrees to radians if needed.

  • point (numpy.array) – Rotation point so manual translation is not required

rotate_using_matrix(rotation_matrix, point=None)
classmethod rotation_matrix(axis, theta)

Generate a rotation matrix to Rotate the matrix over the given axis by the given theta (angle)

Uses the Euler-Rodrigues formula for fast rotations.

Parameters
  • axis (numpy.array) – Axis to rotate over (x, y, z)

  • theta (float) – Rotation angle in radians, use math.radians to convert degrees to radians if needed.

save(filename, fh=None, mode=<Mode.AUTOMATIC: 0>, update_normals=True)

Save the STL to a (binary) file

If mode is AUTOMATIC an ASCII file will be written if the output is a TTY and a BINARY file otherwise.

Parameters
  • filename (str) – The file to load

  • fh (file) – The file handle to open

  • mode (int) – The mode to write, default is AUTOMATIC.

  • update_normals (bool) – Whether to update the normals

transform(matrix)

Transform the mesh with a rotation and a translation stored in a single 4x4 matrix

Parameters

matrix (numpy.array) – Transform matrix with shape (4, 4), where matrix[0:3, 0:3] represents the rotation part of the transformation matrix[0:3, 3] represents the translation part of the transformation

translate(translation)

Translate the mesh in the three directions

Parameters

translation (numpy.array) – Translation vector (x, y, z)

property units

Mesh unit vectors

update_areas(normals=None)
update_max()
update_min()
update_normals(update_areas=True)

Update the normals and areas for all points

update_units()
property v0
property v1
property v2
values() → an object providing a view on D's values
property vectors
classmethod warning(*args, **kwargs)

Log a message with severity ‘WARNING’ on the root logger. If the logger has no handlers, call basicConfig() to add a console handler with a pre-defined format.

property x
property y
property z

stl.main module

stl.main.main()[source]
stl.main.to_ascii()[source]
stl.main.to_binary()[source]

stl.base module

stl.base.AREA_SIZE_THRESHOLD = 0

When removing empty areas, remove areas that are smaller than this

class stl.base.BaseMesh(data, calculate_normals=True, remove_empty_areas=False, remove_duplicate_polygons=<RemoveDuplicates.NONE: 0>, name='', speedups=True, **kwargs)[source]

Bases: python_utils.logger.Logged, collections.abc.Mapping

Mesh object with easy access to the vectors through v0, v1 and v2. The normals, areas, min, max and units are calculated automatically.

Parameters
  • data (numpy.array) – The data for this mesh

  • calculate_normals (bool) – Whether to calculate the normals

  • remove_empty_areas (bool) – Whether to remove triangles with 0 area (due to rounding errors for example)

Variables
  • name (str) – Name of the solid, only exists in ASCII files

  • data (numpy.array) – Data as BaseMesh.dtype()

  • points (numpy.array) – All points (Nx9)

  • normals (numpy.array) – Normals for this mesh, calculated automatically by default (Nx3)

  • vectors (numpy.array) – Vectors in the mesh (Nx3x3)

  • attr (numpy.array) – Attributes per vector (used by binary STL)

  • x (numpy.array) – Points on the X axis by vertex (Nx3)

  • y (numpy.array) – Points on the Y axis by vertex (Nx3)

  • z (numpy.array) – Points on the Z axis by vertex (Nx3)

  • v0 (numpy.array) – Points in vector 0 (Nx3)

  • v1 (numpy.array) – Points in vector 1 (Nx3)

  • v2 (numpy.array) – Points in vector 2 (Nx3)

>>> data = numpy.zeros(10, dtype=BaseMesh.dtype)
>>> mesh = BaseMesh(data, remove_empty_areas=False)
>>> # Increment vector 0 item 0
>>> mesh.v0[0] += 1
>>> mesh.v1[0] += 2
>>> # Check item 0 (contains v0, v1 and v2)
>>> assert numpy.array_equal(
...     mesh[0],
...     numpy.array([1., 1., 1., 2., 2., 2., 0., 0., 0.]))
>>> assert numpy.array_equal(
... mesh.vectors[0],
... numpy.array([[1., 1., 1.],
...     [2., 2., 2.],
...     [0., 0., 0.]]))
>>> assert numpy.array_equal(
...     mesh.v0[0],
...     numpy.array([1., 1., 1.]))
>>> assert numpy.array_equal(
...     mesh.points[0],
...     numpy.array([1., 1., 1., 2., 2., 2., 0., 0., 0.]))
>>> assert numpy.array_equal(
...     mesh.data[0],
...     numpy.array((
...             [0., 0., 0.],
...             [[1., 1., 1.], [2., 2., 2.], [0., 0., 0.]],
...             [0]),
...         dtype=BaseMesh.dtype))
>>> assert numpy.array_equal(mesh.x[0], numpy.array([1., 2., 0.]))
>>> mesh[0] = 3
>>> assert numpy.array_equal(
...     mesh[0],
...     numpy.array([3., 3., 3., 3., 3., 3., 3., 3., 3.]))
>>> len(mesh) == len(list(mesh))
True
>>> (mesh.min_ < mesh.max_).all()
True
>>> mesh.update_normals()
>>> mesh.units.sum()
0.0
>>> mesh.v0[:] = mesh.v1[:] = mesh.v2[:] = 0
>>> mesh.points.sum()
0.0
>>> mesh.v0 = mesh.v1 = mesh.v2 = 0
>>> mesh.x = mesh.y = mesh.z = 0
>>> mesh.attr = 1
>>> (mesh.attr == 1).all()
True
>>> mesh.normals = 2
>>> (mesh.normals == 2).all()
True
>>> mesh.vectors = 3
>>> (mesh.vectors == 3).all()
True
>>> mesh.points = 4
>>> (mesh.points == 4).all()
True
property areas

Mesh areas

property attr
check()[source]

Check the mesh is valid or not

classmethod debug(*args, **kwargs)

Log a message with severity ‘DEBUG’ on the root logger. If the logger has no handlers, call basicConfig() to add a console handler with a pre-defined format.

dtype = dtype([('normals', '<f4', (3,)), ('vectors', '<f4', (3, 3)), ('attr', '<u2', (1,))])
  • normals: numpy.float32(), (3, )

  • vectors: numpy.float32(), (3, 3)

  • attr: numpy.uint16(), (1, )

classmethod error(*args, **kwargs)

Log a message with severity ‘ERROR’ on the root logger. If the logger has no handlers, call basicConfig() to add a console handler with a pre-defined format.

classmethod exception(*args, exc_info=True, **kwargs)

Log a message with severity ‘ERROR’ on the root logger, with exception information. If the logger has no handlers, basicConfig() is called to add a console handler with a pre-defined format.

get(k[, d]) → D[k] if k in D, else d. d defaults to None.
get_mass_properties()[source]
Evaluate and return a tuple with the following elements:
  • the volume

  • the position of the center of gravity (COG)

  • the inertia matrix expressed at the COG

Documentation can be found here: http://www.geometrictools.com/Documentation/PolyhedralMassProperties.pdf

classmethod info(*args, **kwargs)

Log a message with severity ‘INFO’ on the root logger. If the logger has no handlers, call basicConfig() to add a console handler with a pre-defined format.

is_closed()[source]

Check the mesh is closed or not

items() → a set-like object providing a view on D's items
keys() → a set-like object providing a view on D's keys
classmethod log(msg, *args, **kwargs)

Log ‘msg % args’ with the integer severity ‘level’ on the root logger. If the logger has no handlers, call basicConfig() to add a console handler with a pre-defined format.

logger = <Logger stl.base.BaseMesh (WARNING)>
property max_

Mesh maximum value

property min_

Mesh minimum value

property normals
property points
classmethod remove_duplicate_polygons(data, value=<RemoveDuplicates.SINGLE: 1>)[source]
classmethod remove_empty_areas(data)[source]
rotate(axis, theta=0, point=None)[source]

Rotate the matrix over the given axis by the given theta (angle)

Uses the rotation_matrix() in the background.

Note

Note that the point was accidentaly inverted with the old version of the code. To get the old and incorrect behaviour simply pass -point instead of point or -numpy.array(point) if you’re passing along an array.

Parameters
  • axis (numpy.array) – Axis to rotate over (x, y, z)

  • theta (float) – Rotation angle in radians, use math.radians to convert degrees to radians if needed.

  • point (numpy.array) – Rotation point so manual translation is not required

rotate_using_matrix(rotation_matrix, point=None)[source]
classmethod rotation_matrix(axis, theta)[source]

Generate a rotation matrix to Rotate the matrix over the given axis by the given theta (angle)

Uses the Euler-Rodrigues formula for fast rotations.

Parameters
  • axis (numpy.array) – Axis to rotate over (x, y, z)

  • theta (float) – Rotation angle in radians, use math.radians to convert degrees to radians if needed.

transform(matrix)[source]

Transform the mesh with a rotation and a translation stored in a single 4x4 matrix

Parameters

matrix (numpy.array) – Transform matrix with shape (4, 4), where matrix[0:3, 0:3] represents the rotation part of the transformation matrix[0:3, 3] represents the translation part of the transformation

translate(translation)[source]

Translate the mesh in the three directions

Parameters

translation (numpy.array) – Translation vector (x, y, z)

property units

Mesh unit vectors

update_areas(normals=None)[source]
update_max()[source]
update_min()[source]
update_normals(update_areas=True)[source]

Update the normals and areas for all points

update_units()[source]
property v0
property v1
property v2
values() → an object providing a view on D's values
property vectors
classmethod warning(*args, **kwargs)

Log a message with severity ‘WARNING’ on the root logger. If the logger has no handlers, call basicConfig() to add a console handler with a pre-defined format.

property x
property y
property z
stl.base.DIMENSIONS = 3

Dimensions used in a vector

class stl.base.Dimension[source]

Bases: enum.IntEnum

An enumeration.

X = 0

X index (for example, mesh.v0[0][X])

Y = 1

Y index (for example, mesh.v0[0][Y])

Z = 2

Z index (for example, mesh.v0[0][Z])

class stl.base.RemoveDuplicates[source]

Bases: enum.Enum

Choose whether to remove no duplicates, leave only a single of the duplicates or remove all duplicates (leaving holes).

ALL = 2
NONE = 0
SINGLE = 1
map = <bound method RemoveDuplicates.map of <enum 'RemoveDuplicates'>>[source]
stl.base.VECTORS = 3

Vectors in a point

stl.base.logged(class_)[source]

stl.mesh module

class stl.mesh.Mesh(data, calculate_normals=True, remove_empty_areas=False, remove_duplicate_polygons=<RemoveDuplicates.NONE: 0>, name='', speedups=True, **kwargs)[source]

Bases: stl.stl.BaseStl

property areas

Mesh areas

property attr
check()

Check the mesh is valid or not

classmethod debug(*args, **kwargs)

Log a message with severity ‘DEBUG’ on the root logger. If the logger has no handlers, call basicConfig() to add a console handler with a pre-defined format.

dtype = dtype([('normals', '<f4', (3,)), ('vectors', '<f4', (3, 3)), ('attr', '<u2', (1,))])
classmethod error(*args, **kwargs)

Log a message with severity ‘ERROR’ on the root logger. If the logger has no handlers, call basicConfig() to add a console handler with a pre-defined format.

classmethod exception(*args, exc_info=True, **kwargs)

Log a message with severity ‘ERROR’ on the root logger, with exception information. If the logger has no handlers, basicConfig() is called to add a console handler with a pre-defined format.

classmethod from_file(filename, calculate_normals=True, fh=None, mode=<Mode.AUTOMATIC: 0>, speedups=True, **kwargs)

Load a mesh from a STL file

Parameters
  • filename (str) – The file to load

  • calculate_normals (bool) – Whether to update the normals

  • fh (file) – The file handle to open

  • kwargs (dict) – The same as for stl.mesh.Mesh

classmethod from_files(filenames, calculate_normals=True, mode=<Mode.AUTOMATIC: 0>, speedups=True, **kwargs)

Load multiple meshes from a STL file

Note: mode is hardcoded to ascii since binary stl files do not support the multi format

Parameters
  • filenames (list(str)) – The files to load

  • calculate_normals (bool) – Whether to update the normals

  • fh (file) – The file handle to open

  • kwargs (dict) – The same as for stl.mesh.Mesh

classmethod from_multi_file(filename, calculate_normals=True, fh=None, mode=<Mode.ASCII: 1>, speedups=True, **kwargs)

Load multiple meshes from a STL file

Note: mode is hardcoded to ascii since binary stl files do not support the multi format

Parameters
  • filename (str) – The file to load

  • calculate_normals (bool) – Whether to update the normals

  • fh (file) – The file handle to open

  • kwargs (dict) – The same as for stl.mesh.Mesh

get(k[, d]) → D[k] if k in D, else d. d defaults to None.
get_header(name)
get_mass_properties()
Evaluate and return a tuple with the following elements:
  • the volume

  • the position of the center of gravity (COG)

  • the inertia matrix expressed at the COG

Documentation can be found here: http://www.geometrictools.com/Documentation/PolyhedralMassProperties.pdf

classmethod info(*args, **kwargs)

Log a message with severity ‘INFO’ on the root logger. If the logger has no handlers, call basicConfig() to add a console handler with a pre-defined format.

is_closed()

Check the mesh is closed or not

items() → a set-like object providing a view on D's items
keys() → a set-like object providing a view on D's keys
classmethod load(fh, mode=<Mode.AUTOMATIC: 0>, speedups=True)

Load Mesh from STL file

Automatically detects binary versus ascii STL files.

Parameters
  • fh (file) – The file handle to open

  • mode (int) – Automatically detect the filetype or force binary

classmethod log(msg, *args, **kwargs)

Log ‘msg % args’ with the integer severity ‘level’ on the root logger. If the logger has no handlers, call basicConfig() to add a console handler with a pre-defined format.

logger = <Logger stl.base.BaseMesh (WARNING)>
property max_

Mesh maximum value

property min_

Mesh minimum value

property normals
property points
classmethod remove_duplicate_polygons(data, value=<RemoveDuplicates.SINGLE: 1>)
classmethod remove_empty_areas(data)
rotate(axis, theta=0, point=None)

Rotate the matrix over the given axis by the given theta (angle)

Uses the rotation_matrix() in the background.

Note

Note that the point was accidentaly inverted with the old version of the code. To get the old and incorrect behaviour simply pass -point instead of point or -numpy.array(point) if you’re passing along an array.

Parameters
  • axis (numpy.array) – Axis to rotate over (x, y, z)

  • theta (float) – Rotation angle in radians, use math.radians to convert degrees to radians if needed.

  • point (numpy.array) – Rotation point so manual translation is not required

rotate_using_matrix(rotation_matrix, point=None)
classmethod rotation_matrix(axis, theta)

Generate a rotation matrix to Rotate the matrix over the given axis by the given theta (angle)

Uses the Euler-Rodrigues formula for fast rotations.

Parameters
  • axis (numpy.array) – Axis to rotate over (x, y, z)

  • theta (float) – Rotation angle in radians, use math.radians to convert degrees to radians if needed.

save(filename, fh=None, mode=<Mode.AUTOMATIC: 0>, update_normals=True)

Save the STL to a (binary) file

If mode is AUTOMATIC an ASCII file will be written if the output is a TTY and a BINARY file otherwise.

Parameters
  • filename (str) – The file to load

  • fh (file) – The file handle to open

  • mode (int) – The mode to write, default is AUTOMATIC.

  • update_normals (bool) – Whether to update the normals

transform(matrix)

Transform the mesh with a rotation and a translation stored in a single 4x4 matrix

Parameters

matrix (numpy.array) – Transform matrix with shape (4, 4), where matrix[0:3, 0:3] represents the rotation part of the transformation matrix[0:3, 3] represents the translation part of the transformation

translate(translation)

Translate the mesh in the three directions

Parameters

translation (numpy.array) – Translation vector (x, y, z)

property units

Mesh unit vectors

update_areas(normals=None)
update_max()
update_min()
update_normals(update_areas=True)

Update the normals and areas for all points

update_units()
property v0
property v1
property v2
values() → an object providing a view on D's values
property vectors
classmethod warning(*args, **kwargs)

Log a message with severity ‘WARNING’ on the root logger. If the logger has no handlers, call basicConfig() to add a console handler with a pre-defined format.

property x
property y
property z

stl.stl module

stl.stl.BUFFER_SIZE = 4096

Amount of bytes to read while using buffered reading

class stl.stl.BaseStl(data, calculate_normals=True, remove_empty_areas=False, remove_duplicate_polygons=<RemoveDuplicates.NONE: 0>, name='', speedups=True, **kwargs)[source]

Bases: stl.base.BaseMesh

property areas

Mesh areas

property attr
check()

Check the mesh is valid or not

classmethod debug(*args, **kwargs)

Log a message with severity ‘DEBUG’ on the root logger. If the logger has no handlers, call basicConfig() to add a console handler with a pre-defined format.

dtype = dtype([('normals', '<f4', (3,)), ('vectors', '<f4', (3, 3)), ('attr', '<u2', (1,))])
classmethod error(*args, **kwargs)

Log a message with severity ‘ERROR’ on the root logger. If the logger has no handlers, call basicConfig() to add a console handler with a pre-defined format.

classmethod exception(*args, exc_info=True, **kwargs)

Log a message with severity ‘ERROR’ on the root logger, with exception information. If the logger has no handlers, basicConfig() is called to add a console handler with a pre-defined format.

classmethod from_file(filename, calculate_normals=True, fh=None, mode=<Mode.AUTOMATIC: 0>, speedups=True, **kwargs)[source]

Load a mesh from a STL file

Parameters
  • filename (str) – The file to load

  • calculate_normals (bool) – Whether to update the normals

  • fh (file) – The file handle to open

  • kwargs (dict) – The same as for stl.mesh.Mesh

classmethod from_files(filenames, calculate_normals=True, mode=<Mode.AUTOMATIC: 0>, speedups=True, **kwargs)[source]

Load multiple meshes from a STL file

Note: mode is hardcoded to ascii since binary stl files do not support the multi format

Parameters
  • filenames (list(str)) – The files to load

  • calculate_normals (bool) – Whether to update the normals

  • fh (file) – The file handle to open

  • kwargs (dict) – The same as for stl.mesh.Mesh

classmethod from_multi_file(filename, calculate_normals=True, fh=None, mode=<Mode.ASCII: 1>, speedups=True, **kwargs)[source]

Load multiple meshes from a STL file

Note: mode is hardcoded to ascii since binary stl files do not support the multi format

Parameters
  • filename (str) – The file to load

  • calculate_normals (bool) – Whether to update the normals

  • fh (file) – The file handle to open

  • kwargs (dict) – The same as for stl.mesh.Mesh

get(k[, d]) → D[k] if k in D, else d. d defaults to None.
get_header(name)[source]
get_mass_properties()
Evaluate and return a tuple with the following elements:
  • the volume

  • the position of the center of gravity (COG)

  • the inertia matrix expressed at the COG

Documentation can be found here: http://www.geometrictools.com/Documentation/PolyhedralMassProperties.pdf

classmethod info(*args, **kwargs)

Log a message with severity ‘INFO’ on the root logger. If the logger has no handlers, call basicConfig() to add a console handler with a pre-defined format.

is_closed()

Check the mesh is closed or not

items() → a set-like object providing a view on D's items
keys() → a set-like object providing a view on D's keys
classmethod load(fh, mode=<Mode.AUTOMATIC: 0>, speedups=True)[source]

Load Mesh from STL file

Automatically detects binary versus ascii STL files.

Parameters
  • fh (file) – The file handle to open

  • mode (int) – Automatically detect the filetype or force binary

classmethod log(msg, *args, **kwargs)

Log ‘msg % args’ with the integer severity ‘level’ on the root logger. If the logger has no handlers, call basicConfig() to add a console handler with a pre-defined format.

logger = <Logger stl.base.BaseMesh (WARNING)>
property max_

Mesh maximum value

property min_

Mesh minimum value

property normals
property points
classmethod remove_duplicate_polygons(data, value=<RemoveDuplicates.SINGLE: 1>)
classmethod remove_empty_areas(data)
rotate(axis, theta=0, point=None)

Rotate the matrix over the given axis by the given theta (angle)

Uses the rotation_matrix() in the background.

Note

Note that the point was accidentaly inverted with the old version of the code. To get the old and incorrect behaviour simply pass -point instead of point or -numpy.array(point) if you’re passing along an array.

Parameters
  • axis (numpy.array) – Axis to rotate over (x, y, z)

  • theta (float) – Rotation angle in radians, use math.radians to convert degrees to radians if needed.

  • point (numpy.array) – Rotation point so manual translation is not required

rotate_using_matrix(rotation_matrix, point=None)
classmethod rotation_matrix(axis, theta)

Generate a rotation matrix to Rotate the matrix over the given axis by the given theta (angle)

Uses the Euler-Rodrigues formula for fast rotations.

Parameters
  • axis (numpy.array) – Axis to rotate over (x, y, z)

  • theta (float) – Rotation angle in radians, use math.radians to convert degrees to radians if needed.

save(filename, fh=None, mode=<Mode.AUTOMATIC: 0>, update_normals=True)[source]

Save the STL to a (binary) file

If mode is AUTOMATIC an ASCII file will be written if the output is a TTY and a BINARY file otherwise.

Parameters
  • filename (str) – The file to load

  • fh (file) – The file handle to open

  • mode (int) – The mode to write, default is AUTOMATIC.

  • update_normals (bool) – Whether to update the normals

transform(matrix)

Transform the mesh with a rotation and a translation stored in a single 4x4 matrix

Parameters

matrix (numpy.array) – Transform matrix with shape (4, 4), where matrix[0:3, 0:3] represents the rotation part of the transformation matrix[0:3, 3] represents the translation part of the transformation

translate(translation)

Translate the mesh in the three directions

Parameters

translation (numpy.array) – Translation vector (x, y, z)

property units

Mesh unit vectors

update_areas(normals=None)
update_max()
update_min()
update_normals(update_areas=True)

Update the normals and areas for all points

update_units()
property v0
property v1
property v2
values() → an object providing a view on D's values
property vectors
classmethod warning(*args, **kwargs)

Log a message with severity ‘WARNING’ on the root logger. If the logger has no handlers, call basicConfig() to add a console handler with a pre-defined format.

property x
property y
property z
stl.stl.COUNT_SIZE = 4

The amount of bytes in the count field

stl.stl.HEADER_FORMAT = '{package_name} ({version}) {now} {name}'

The header format, can be safely monkeypatched. Limited to 80 characters

stl.stl.HEADER_SIZE = 80

The amount of bytes in the header field

stl.stl.MAX_COUNT = 100000000.0

The maximum amount of triangles we can read from binary files

class stl.stl.Mode[source]

Bases: enum.IntEnum

An enumeration.

ASCII = 1

Force writing ASCII

AUTOMATIC = 0

Automatically detect whether the output is a TTY, if so, write ASCII otherwise write BINARY

BINARY = 2

Force writing BINARY

stl.stl.StlMesh(filename, calculate_normals=True, fh=None, mode=<Mode.AUTOMATIC: 0>, speedups=True, **kwargs)

Load a mesh from a STL file

Parameters
  • filename (str) – The file to load

  • calculate_normals (bool) – Whether to update the normals

  • fh (file) – The file handle to open

  • kwargs (dict) – The same as for stl.mesh.Mesh