Change Log¶
All notable changes to this project will be documented in this file.
[Unreleased]¶
Added¶
Add
pyslm.hatching.utils.getContoursFromShapelyPolygon1374dd5373abf4232a91563cdafeb0222e2616d8Pytest Unit Testing Framework 7f5ebceecd27095f478d7fd2d178a55952236c35
Fixed¶
Formatting and Linting via Ruff and mypy c58c38d6cbcad23cc18503d00fc760a7a9c1cbd4
Changed¶
Change build script to use
pyproject.tomlfor building PySLM wheels using hatchling (#58) - cbd78b7950633c5b29db3efe5a246a49d413b280Updated build project dependency requirements to use specific version of numpy, trimesh, shapely 98f758f9488c47969afd124eb2faa7348368e6f3
Minimum version of Python is now 3.9, because 3.8 is now considered unmaintained
Removal of
setup.py7c39ad8c0ac608ccffcd28a4524409b5942fd31e
[0.6.0] - 2024-07-07¶
Added¶
Added documentation covering basic example usage for the operation of PySLM 8eee1f96f13b4b7915ea862ee643984f8e1e2f41
In
pyslm.supportadded a method for sweeping polygons along a pathsweepPolygonbased on Trimesh 7ac9e4fd771fa6abc65753c21735c1592dbc9aa1In
pyslm.supportforBlockSupportBasethat are connected directly to the baseplate are now smoothly created df2dd41e0b04160a7ed4c96f8f7c0aed71003430In
pyslm.supportadded perforated teeth to the upper and lower surfaces ofGridBlockSupport70c510cce31b0cb297873252fa72c2f67b386423In
pyslm.supportadded a method for checking the approximate intersection of a cylindrical strutcheckStrutCylinderIntersectionf2baa3383b1c01512d3a74d74af65931b14f7986In
pyslm.supportadded regions for strengthening the support on upper and lower regions of both the skin and slices inGridBlockSupport0121971813e50296e3f6d9bab0beb431067443d2In
pyslm.support.GridBlockSupportadded methods for labelling generated geometry based on the interior X,Y grid and across the skin 71fb3efd1a8376809850f83760639fa331181436In
pyslm.support.GridBlockSupportadded methods for slicing the geometry into layers and performing sorting to provide correct orientation 4c7000b604b3f231d0160312aa2cd5a170de69f1Added methods
pyslm.hatching.poly2paths,pyslm.hatching.paths2clipperandpyslm.hatching.clipper2pathsfor conversion between shapely polygons and pyclipr paths adcb371e62e45a5dbadfa46e4e5589a0f5cb28aeIn
pyslm.support.GridBlockSupportthe grid truss slices include additional face-attributesorderandtypedescribing 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 344941fdd951152b69d81e97a957fd2709251151Fixed 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.identifySupportRegionswhere supports connected to the build-plate were not self-intersected with the original mesh - f1d9c95a5921bf6070799f05fd940cc056d852b1Fixed a bug in
pyslm.analysis.getLayerGeometryTimewhere the jump distance was not correctly calculated resulting in anNaNby dividing by zero by checking the build-style jump speed is greater than zero d169b30302e79c73ea37f9759feff72784dda4e6Fixed a bug in
pyslm.analysis.getLayerGeometryTimewhere the jump delay was not added and default argument is used alternatively in the calculation 3d996ef44284959d40b81918ecfbfba4ef240d0cFixed bug in
pyslm.support.render.Canvasnot 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.supportmodule 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.plotwill now plot point geometries when included ddb7f27f6c18b6d494870e5823dbede7987e2e12In
pyslm.visaulise.plot, the method will correctly plotshapely.geometry.MultiPolygonafter the update to Shapely 2.0 99c7a475e10b9c138e061f56aa28f7780f2a5eacUpdate imports to prevent namespace polluting
In
pyslm.analysisfixed bug for build-time calculation usingpyslm.geometry.PointsGeometry7f1e42ae6b30ee157a96303fa6e0b6e5632eabfd
Changed¶
Change PySLM to use manifold library instead of pycork bad0fc0285835e998a3acdb02afa7e0ed02619ee
Change PySLM to use pyclipr library 081dede9a14357fe9fb706470a5d42e698b763a6
pyslm.visualise.plotby default only plots for a single layer 02ccc1d503580cea802d996f6d6532c2f7526c8fRemoval of custom pyclipper bindings and removing the requirement for compiling via cython f434d77c8670bbb0bf5e289d9b7d2c011a9dcc92
Cannot currently use
mergeMeshinpyslm.support.GridBlockSupportdue 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.support9ee1f6668b56e76137c3dade178dc837460fc056 0f6e29815a5d6a65789d27c49131d49486415d31Added generic abstract class
support.SupportStructurefor providing the generic infrastructure for defining support structures (e.g. block, grid, tree) and common methodsIntroduced Various Classes -
BaseSupportGeneratorandBlockSupportGeneratorfor Generating BlockSupportsIntroduced
support.geometry.extrudeFacemethod for extruding block faces with variable heightIntroduced method
support.geometry.triangualtePolygonFromPathsto triangulate polygons generated in the Support ModuleIntroduced a method
support.render.projectHeightMapfor projecting height/depth maps using OpenGL to calculate the depth map for projecting supportsIntroduced classes
GridBlockSupport,GridBlockSupportGeneratorand 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.geometryand these are used in calculations performed inpyslm.analysis55cc7e79c9e6f1f5f8b25d38dd6a48639b422fd2
Fixed¶
Fix
pyslm.analysistools to use jump speed and jump delay parameters 3bce788b5362062755e0fb7f17757b4174d1e877Fixed
plotSequentialshowing 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
fixGeometryoption 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.plotSequentialto plotLayerGeometryin sequential order with jump vectors 4a0cd56c21e35ee09ec8afdc408471e8211d057dAdded an option to modify order of scanning for hatch and contour scan vectors using
Hatching.scanContourFirstproperty. 1120ee5b041dd0cdc9eb35f507d4ba13aa9ff02eAdded a sort method -
UnidirectionalSortclass, that simply provides a pass through method to not modify scan vectors 0f2304f5f58612ca619e3f94276d38b6d85fe5e8Added a sort method -
FlipSortclass, 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 acrossLayerGeometrysScanVectorIterator- Iterate across individual Scan VectorsScanIterator- Incremental position at a fixed time
Added property
Part.extents,Part.getProjectedHullandPart.getProjectedArea4d8747fa3083c2005df8ddf6817db2f4102b84f2Method for visualising convex polygons from
ShapelyorClipperLib, 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¶
ModelValidatoruses LayerGeometry’s Model Id is used for finding the associatedModel76587c58b7240822ea3b6314a404137af3342509Contour 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 forContourGeometryAdded
ModelValidatorclass inpyslm.geometry.utilsto 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
HexagonIslandClass 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.clipContourLinesfor clipping open scan paths to fill a regionAdded an analysis method utility
getBuildStyleByIdto find theBuildStylegiven 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.getTrimeshSliceto get atrimesh.Path2Dslice from the geometry - bb2ebb9c4514a05cc1728c810deef7fc6c3239e4Added a method to find the ‘inverse’ projection of support faces
Added
visualise.visualiseOverhangfor showing overhang regionsAdded
geometry.utils.ModelValidatorfor validating the build inputs (layers, models) when exporting to a machine build fileAdded a
.gitignorefile - 498d9116dd9d91698695669d5d1309a7941e0dd9
Changed¶
Internally generateHatching() and hatch() in subclasses of
BaseHatcherto 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.getLayerTimerequires aModellistAnalysis methods use point exposure time and distance using
analysis.getLayerTimeRemoved debug messages when visualising layers
Fixed import of submodules in PySLM - 66f48fd9929d244b836583f24c087602cdc31a96
Fixed¶
Fixed
LaserMode,LaserTypeEnums to be compatible with libSLM - 52090085fd52336e2cc2181ff886a8aebbdca1efJump distance between
LayerGeometryis 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
InnerHatchRegionin the hatching submoduleIntroduce
IslandHatcherwhich re-implements the Island/Checkerboard Scan Strategy
Added a method to alternate adjacent scan vectors in the hatching module
Added a method to
generateExposurePointmethod 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:
LayerLayerGeometryModelBuildStyleHeaderHatchGeometry,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.getVectorSlicemethod by default returns a list of coord pathsPart.getVectorSlicenow returns a list ofShapely.geometry.Polygonif optional argument is passedhatching.IslandHatcherin 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.