Change Log
All notable changes to this project will be documented in this file.
[Unreleased]
Added
Fixed
Changed
[0.6.0] - 2024-07-07
Added
Added documentation covering basic example usage for the operation of PySLM 8eee1f96f13b4b7915ea862ee643984f8e1e2f41
In
pyslm.support
added a method for sweeping polygons along a pathsweepPolygon
based on Trimesh 7ac9e4fd771fa6abc65753c21735c1592dbc9aa1In
pyslm.support
forBlockSupportBase
that are connected directly to the baseplate are now smoothly created df2dd41e0b04160a7ed4c96f8f7c0aed71003430In
pyslm.support
added perforated teeth to the upper and lower surfaces ofGridBlockSupport
70c510cce31b0cb297873252fa72c2f67b386423In
pyslm.support
added a method for checking the approximate intersection of a cylindrical strutcheckStrutCylinderIntersection
f2baa3383b1c01512d3a74d74af65931b14f7986In
pyslm.support
added regions for strengthening the support on upper and lower regions of both the skin and slices inGridBlockSupport
0121971813e50296e3f6d9bab0beb431067443d2In
pyslm.support.GridBlockSupport
added methods for labelling generated geometry based on the interior X,Y grid and across the skin 71fb3efd1a8376809850f83760639fa331181436In
pyslm.support.GridBlockSupport
added methods for slicing the geometry into layers and performing sorting to provide correct orientation 4c7000b604b3f231d0160312aa2cd5a170de69f1Added methods
pyslm.hatching.poly2paths
,pyslm.hatching.paths2clipper
andpyslm.hatching.clipper2paths
for conversion between shapely polygons and pyclipr paths adcb371e62e45a5dbadfa46e4e5589a0f5cb28aeIn
pyslm.support.GridBlockSupport
the grid truss slices include additional face-attributesorder
andtype
describing their order of generation across X,Y planes. This is used for the scan order when slicing and hatching these regions
Fixed
Fixed a bug in ‘pyslm.hatching.BaseHatcher.hatch’ - internal contour is offset when needed 344941fdd951152b69d81e97a957fd2709251151
Fixed a bug in
pyslm.support.GridBlockSupport
- fixes for identifying top and bottom paths of the skin and fixed ordering during slicing - 7d4c9e1294f17334f97016c22062eccd3111b2a6Fixed a bug in
BlockSupportGenerator.identifySupportRegions
where supports connected to the build-plate were not self-intersected with the original mesh - f1d9c95a5921bf6070799f05fd940cc056d852b1Fixed a bug in
pyslm.analysis.getLayerGeometryTime
where the jump distance was not correctly calculated resulting in anNaN
by dividing by zero by checking the build-style jump speed is greater than zero d169b30302e79c73ea37f9759feff72784dda4e6Fixed a bug in
pyslm.analysis.getLayerGeometryTime
where the jump delay was not added and default argument is used alternatively in the calculation 3d996ef44284959d40b81918ecfbfba4ef240d0cFixed bug in
pyslm.support.render.Canvas
not capturing the depth correctly - 114ffa9259f844549c4aa509c5e3d4b2db4ab081Invalid projection of extruded prismatic mesh in
support.GridBlockSupportGenerator.identifySupportMethods
. Generated mesh is not automatically processed by Trimesh prior to extrusion to prevent mismatch between vertices. df2dd41e0b04160a7ed4c96f8f7c0aed71003430Fixed the
pyslm.support
module to use manifold3D library instead of pycork df2dd41e0b04160a7ed4c96f8f7c0aed71003430Updated to Trimesh version 4.0 081dede9a14357fe9fb706470a5d42e698b763a6
Update to Shapely Library version 2.0 081dede9a14357fe9fb706470a5d42e698b763a6
Fixes for IslandHatcher when processing empty regions f9ff55ecc2709c3514b1d14f815cb2620856be97
pyslm.visualise.plot
will now plot point geometries when included ddb7f27f6c18b6d494870e5823dbede7987e2e12In
pyslm.visaulise.plot
, the method will correctly plotshapely.geometry.MultiPolygon
after the update to Shapely 2.0 99c7a475e10b9c138e061f56aa28f7780f2a5eacUpdate imports to prevent namespace polluting
In
pyslm.analysis
fixed bug for build-time calculation usingpyslm.geometry.PointsGeometry
7f1e42ae6b30ee157a96303fa6e0b6e5632eabfd
Changed
Change PySLM to use manifold library instead of pycork bad0fc0285835e998a3acdb02afa7e0ed02619ee
Change PySLM to use pyclipr library 081dede9a14357fe9fb706470a5d42e698b763a6
pyslm.visualise.plot
by default only plots for a single layer 02ccc1d503580cea802d996f6d6532c2f7526c8fRemoval of custom pyclipper bindings and removing the requirement for compiling via cython f434d77c8670bbb0bf5e289d9b7d2c011a9dcc92
Cannot currently use
`mergeMesh
inpyslm.support.GridBlockSupport
due to change to the manifold boolean CSG library
[0.5.0] - 2022-04-26
Added
Added support for Mac OS X (Monterey 12.3) 3b4103bf2e01f3e7175adcf0f1bed5a429bad361
Added the Support Module:
pyslm.support
9ee1f6668b56e76137c3dade178dc837460fc056 0f6e29815a5d6a65789d27c49131d49486415d31Added generic abstract class
support.SupportStructure
for providing the generic infrastructure for defining support structures (e.g. block, grid, tree) and common methodsIntroduced Various Classes -
BaseSupportGenerator
andBlockSupportGenerator
for Generating BlockSupportsIntroduced
support.geometry.extrudeFace
method for extruding block faces with variable heightIntroduced method
support.geometry.triangualtePolygonFromPaths
to triangulate polygons generated in the Support ModuleIntroduced a method
support.render.projectHeightMap
for projecting height/depth maps using OpenGL to calculate the depth map for projecting supportsIntroduced classes
GridBlockSupport
,GridBlockSupportGenerator
and associating mapping function for generating polygon truss grid supportsIntroduced 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 inpyslm.analysis
55cc7e79c9e6f1f5f8b25d38dd6a48639b422fd2
Fixed
Fix
pyslm.analysis
tools to use jump speed and jump delay parameters 3bce788b5362062755e0fb7f17757b4174d1e877Fixed
plotSequential
showing an invalid scan vector at the end of the contour scanning c46ae70980ac652d30ce7e3a2aa6667246752744Fixed the offsetting applied to contour/border scans. An overall offset is not applied if a contour scan is not used 40fb789164aa76e25222e1c822e3462eb1c6fd82
Updated compatability for Python 3.9 01f79a6dcfb9625d05e3d12a5b1901d32324c7ca
Updated examples 639e042575e019d3b3d6f3a6272cb5f140f45606
Changed
Added soft dependency for PyQt5 in the dependencies needed for support generation 2ced797da62f9b8099c8c9f30c4ff7c6677b2b6d
[0.4.0] - 2021-07-23
Added
Added example_laser_iterator.py for demonstrating the basic use of the iterator class 0f26f4a4aa33d80769d9713157e8b675cb48a862
Added example_parametric_study.py for showing how create a design of experiment study 54dfca913b23ad71b025f5eec646f5f896b605b8
Added
fixGeometry
option added to repair polygons generated following slicingAdded various modes for polygon line simplification - including absolute and ‘line’ based on the mean edge length in the polygon. 4e6bf23cccb4ac091d44381649a11288ce495033
Added a simplification tolerance based on relative or absolute tolerance for contours 078cc554bba4c22ce1a36f682b401fb72d59f335
Added a method
visualise.plotSequential
to plotLayerGeometry
in sequential order with jump vectors 4a0cd56c21e35ee09ec8afdc408471e8211d057dAdded an option to modify order of scanning for hatch and contour scan vectors using
Hatching.scanContourFirst
property. 1120ee5b041dd0cdc9eb35f507d4ba13aa9ff02eAdded a sort method -
UnidirectionalSort
class, that simply provides a pass through method to not modify scan vectors 0f2304f5f58612ca619e3f94276d38b6d85fe5e8Added a sort method -
FlipSort
class, that flips the scan vectors 6d4c77984a25d80e9c4061860416fd75804a476fAdded an Iterator Module (
analysis/iterator.py
) for processing through the LayerScan Geometry. Various supporting classes are used for efficiently parsing across the Layer and associated Layer Geometries. This includes several classes including(
Iterator
- base classLayerGeometryIterator
- Iterate acrossLayerGeometry
sScanVectorIterator
- Iterate across individual Scan VectorsScanIterator
- Incremental position at a fixed time
Added property
Part.extents
,Part.getProjectedHull
andPart.getProjectedArea
4d8747fa3083c2005df8ddf6817db2f4102b84f2Method for visualising convex polygons from
Shapely
orClipperLib
, using Matplotlib.patches. This cannot be visualise polygons with holes - these are treated as boundaries 1bbf60298c634ea918d354f45c979aff3f4bedcc
Changed
Contour scan vectors are scanned following hatch vectors by default 1120ee5b041dd0cdc9eb35f507d4ba13aa9ff02e
Fixed
ModelValidator
uses LayerGeometry’s Model Id is used for finding the associatedModel
76587c58b7240822ea3b6314a404137af3342509Contour offset is correctly generated 8b37f5a37520b5abbace9f24e629826a3326e8bb
(BUG FIX) Final scan vector is correctly flipped e935217f13dceda55f1f514f7c8cbdac852024df
(BUG FIX) Remove debugging messages during Layer Generation fe9c31dacc8ce95d09999acd7ef83db4ff70669f
[0.3.0] - 2021-02-20
Added
Added BaseHatcher.boundaryBoundingBox() to obtain the bounding box of a collection of polygons - returned internally from PyClipper
Added a
simplifyBoundaries()
in hatching/utils.py to simplify polygons (shapely and raw coordinate boundaries using scikit image) -hatching.generateExposurePoints()
now generates forContourGeometry
Added
ModelValidator
class inpyslm.geometry.utils
to verify the input of build files generated prior to exporting in libSLM - e75b486c090b4ead712d2ddb950577e058c419e6Added example_exporting_multilayer.py showing how to export a multi-layer build using libSLM - 52090085fd52336e2cc2181ff886a8aebbdca1ef
Added example_custom_island_hatcher.py showing a method to create customised island scan
Added a
HexagonIsland
Class to demonstrate custom implementation of island regionsAdded example_build_time_analysis.py to show the processes of estimating build-time
Added example_custom_sinusoidal_hatching.py for showing custom hatch-infills - c7c1a4304dd4f2a4cdf0286385ccb68d3968ba5e
Added a method
BaseHatcher.clipContourLines
for clipping open scan paths to fill a regionAdded an analysis method utility
getBuildStyleById
to find theBuildStyle
given a model id and build style idAdded 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 atrimesh.Path2D
slice from the geometry - bb2ebb9c4514a05cc1728c810deef7fc6c3239e4Added a method to find the ‘inverse’ projection of support faces
Added
visualise.visualiseOverhang
for showing overhang regionsAdded
geometry.utils.ModelValidator
for validating the build inputs (layers, models) when exporting to a machine build fileAdded a
.gitignore
file - 498d9116dd9d91698695669d5d1309a7941e0dd9
Changed
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 ofBaseHatcher.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 aModel
listAnalysis methods use point exposure time and distance using
analysis.getLayerTime
Removed debug messages when visualising layers
Fixed import of submodules in PySLM - 66f48fd9929d244b836583f24c087602cdc31a96
Fixed
Fixed
LaserMode
,LaserType
Enums to be compatible with libSLM - 52090085fd52336e2cc2181ff886a8aebbdca1efJump distance between
LayerGeometry
is accounted for in the Analysis SubmoduleFixed visualisation of PointGeometry exposures - 135bed81bb57b867f2499311bacd7ad2d7aa67d9
Updated Documentation across the project
[0.2.1] - 2020-06-19
Fixed
Fixed the setup.py source tarball to include the PyClipper extensions.
[0.2.0] - 2020-06-17
Development branch of PySLM with new features.
Added
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 submoduleIntroduce
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 vectorsAdded 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:
3D slicing example - example_3d.py
Multi-threading example - example_3d_multithread.py
Island hatching example using new implementation - example_island_hatcher.py
Bitmap slicing of parts - example_bitmap_slice.py
A heat-map/exposure map visualisation - example_heatmap.py
Changed
Part.getVectorSlice
method by default returns a list of coord pathsPart.getVectorSlice
now returns a list ofShapely.geometry.Polygon
if optional argument is passedhatching.IslandHatcher
in the previous release is changed toBasicIslandHatcher
Fixed
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.