Change Log

All notable changes to this project will be documented in this file.


[0.5.0] - 2022-04-26


  • Added support for Mac OS X (Monterey 12.3) 3b4103bf2e01f3e7175adcf0f1bed5a429bad361

  • Added the Support Module: 9ee1f6668b56e76137c3dade178dc837460fc056 0f6e29815a5d6a65789d27c49131d49486415d31

    • Added generic abstract class support.SupportStructure for providing the generic infrastructure for defining support structures (e.g. block, grid, tree) and common methods

    • Introduced Various Classes - BaseSupportGenerator and BlockSupportGenerator for Generating BlockSupports

    • Introduced support.geometry.extrudeFace method for extruding block faces with variable height

    • Introduced method support.geometry.triangualtePolygonFromPaths to triangulate polygons generated in the Support Module

    • Introduced a method support.render.projectHeightMap for projecting height/depth maps using OpenGL to calculate the depth map for projecting supports

    • Introduced classes GridBlockSupport, GridBlockSupportGenerator and associating mapping function for generating polygon truss grid supports

    • Introduced classes for identifying and generating conforming support volume

    • Self-intersecting support volumes are generated via the pycork library e438bef493553b18dd1ee5031a226d04b63a5c67

  • Added point delay and jump speed in pyslm.geometry and these are used in calculations performed in pyslm.analysis 55cc7e79c9e6f1f5f8b25d38dd6a48639b422fd2



[0.4.0] - 2021-07-23




[0.3.0] - 2021-02-20


  • Added BaseHatcher.boundaryBoundingBox() to obtain the bounding box of a collection of polygons - returned internally from PyClipper

  • Added a simplifyBoundaries() in hatching/ to simplify polygons (shapely and raw coordinate boundaries using scikit image) -hatching.generateExposurePoints() now generates for ContourGeometry

  • Added ModelValidator class in pyslm.geometry.utils to verify the input of build files generated prior to exporting in libSLM - e75b486c090b4ead712d2ddb950577e058c419e6

  • Added showing how to export a multi-layer build using libSLM - 52090085fd52336e2cc2181ff886a8aebbdca1ef

  • Added showing a method to create customised island scan

  • Added a HexagonIsland Class to demonstrate custom implementation of island regions

  • Added to show the processes of estimating build-time

  • Added for showing custom hatch-infills - c7c1a4304dd4f2a4cdf0286385ccb68d3968ba5e

  • Added a method BaseHatcher.clipContourLines for clipping open scan paths to fill a region

  • Added an analysis method utility getBuildStyleById to find the BuildStyle given a model id and build style id

  • Added a method in plotLayer to visualise the scan vector properties (e.g. length)

  • Added properties for geometry class to be compatible with libSLM 0.2.2 - providing multi-laser compatibility

  • Added the method Part.getTrimeshSlice to get a trimesh.Path2D slice from the geometry - bb2ebb9c4514a05cc1728c810deef7fc6c3239e4

  • Added a method to find the ‘inverse’ projection of support faces

  • Added visualise.visualiseOverhang for showing overhang regions

  • Added geometry.utils.ModelValidator for validating the build inputs (layers, models) when exporting to a machine build file

  • Added a .gitignore file - 498d9116dd9d91698695669d5d1309a7941e0dd9


  • Internally generateHatching() and hatch() in subclasses of BaseHatcher to generate the internal hatch geometry to use multiple boundaries to ensure that the subregion generation sorting covers the global region.

  • Internally BaseHatcher.boundaryBoundingBox() is called instead of BaseHatcher.polygonBoundingBox()

  • Removed the for loop which previously iterate across boundaries.

  • Updated IslandHatcher to use this behaviour

  • Updated BaseHatcher to use static members where possible

  • Analysis method analysis.getLayerTime requires a Model list

  • Analysis methods use point exposure time and distance using analysis.getLayerTime

  • Removed debug messages when visualising layers

  • Fixed import of submodules in PySLM - 66f48fd9929d244b836583f24c087602cdc31a96


[0.2.1] - 2020-06-19


  • Fixed the source tarball to include the PyClipper extensions.

[0.2.0] - 2020-06-17

Development branch of PySLM with new features.


  • Added transformations to the Part class so that these can be translated, rotated, scaled efficiently on demand

    • Updates on the geometry are cached when geometry method is called.

    • Method included to drop the part to the platform

  • Added an enhanced version and higher performance of generated clippable island regions.

    • Introduced InnerHatchRegion in the hatching submodule

    • Introduce IslandHatcher which re-implements the Island/Checkerboard Scan Strategy

  • Added a method to alternate adjacent scan vectors in the hatching module

  • Added a method to generateExposurePoint method in the hatching submodule to create exposure points from scan vectors

  • Added a Geometry Submodule in pyslm.geometry

    • libSLM Python Extension Library is used if available

    • A set of native compatible Python classes are available if libSLM is not available

    • Classes include:

      • Layer

      • LayerGeometry

      • Model

      • BuildStyle

      • Header

      • HatchGeometry, ContourGeometry, PointsGeometry

  • Added an Analysis Module in pyslm.analysis:

    • Total length of all the scan vectors across a layer

    • Total jump length between scan vectors across all vectors

    • Total scan time across a layer

  • Added a method to generate bitmap slices from a single image is included in Part

  • Added a Visualise Submodule in pyslm.visualise

    • Introduced a method to visualise a collection of shapely polygons

    • Introduced a method to generate a heatmap based on a set of exposure points in a layer

    • Introduced an updated method to plot layerGeometry

      • Plot scan order

      • Plot arrow direction

      • Plot the layers correctly in 3D

  • Introduced several new examples:


  • Part.getVectorSlice method by default returns a list of coord paths

  • Part.getVectorSlice now returns a list of Shapely.geometry.Polygon if optional argument is passed

  • hatching.IslandHatcher in the previous release is changed to BasicIslandHatcher


  • Further changes and improvements to the overall documentation.

  • Updated requirements.txt to ensure documentation can correctly build on readthedocs

[0.1.0] - 2020-05-08

The first release of PySLM in its distributed packaged form via PyPi. This release includes basic slicing and hatching using a custom version of PyClipper built internally using setuptools.