drlukeparry/pyslm

GitHub: drlukeparry/pyslm

PySLM 是一个用于增材制造和选择性激光熔融的 Python 库,提供切片、填充、支撑生成及机器文件导出等完整预处理功能。

Stars: 186 | Forks: 34

# 用于选择性激光熔融和增材制造的 PySLM Python 库 .. image:: https://github.com/drlukeparry/pyslm/raw/dev/docs/images/pyslm.png :alt: PySLM - 用于增材制造和 3D 打印的库,包括选择性激光熔融 |ci-badge| |rtd-badge| |pypi-badge| |license-badge| |pepy-badge| |python-badge| |py-version-badge| .. |ci-badge| image:: https://img.shields.io/github/actions/workflow/status/drlukeparry/PySLM/ci.yml :alt: GitHub Actions Workflow Status .. |rtd-badge| image:: https://readthedocs.org/projects/pyslm/badge/?version=latest :target: https://pyslm.readthedocs.io/en/latest/?badge=latest :alt: Documentation Status .. |pypi-badge| image:: https://badge.fury.io/py/PythonSLM.svg :target: https://badge.fury.io/py/PythonSLM .. |license-badge| image:: https://img.shields.io/github/license/drlukeparry/pyslm :alt: GitHub License .. |pepy-badge| image:: https://static.pepy.tech/personalized-badge/pythonslm?period=total&units=international_system&left_color=black&right_color=orange&left_text=Downloads :target: https://pepy.tech/project/pythonslm .. |python-badge| image:: https://img.shields.io/badge/Made%20with-Python-1f425f.svg :target: https://www.python.org/ .. |py-version-badge| image:: https://img.shields.io/pypi/pyversions/pythonslm.svg :target: https://pypi.python.org/pypi/pythonslm/ PySLM 是一个 Python 库,用于支持增材制造或 3D 打印中构建文件的开发和生成,特别是学术界和工业界常用的选择性激光熔融 (SLM)、直接金属激光烧结 (DMLS) 平台。其核心功能旨在包括切片、填充和支撑生成,并为可用的平台提供与二进制构建文件格式的接口。该库由核心类构建而成,可提供生成系统上使用的扫描向量的基本功能,并可作为原型设计和开发新算法的构建模块。 该库提供了用于增材制造的设计工具,包括切片、填充、支撑生成及相关分析工具(例如悬垂分析、构建时间估算)。 PySLM 基于 `Trimesh `_ v4.0 构建以进行网格处理和操作,并通过 `Pyclipr `_ 使用 `Clipper 2 `_ 库提供的多边形裁剪和偏移功能,两者结合用于提供多边形的切片与操作,例如所用扫描向量的偏移和裁剪。 该库的目标是提供一套实用的工具集,用于对新型预处理方法进行原型设计,以在学术环境中 aid 增材制造工艺的研究与开发。这些工具旨在补充实验和分析研究,从而丰富对该工艺的科学理解。这包括来自实验和工艺中传感器的数据融合,同时通过提供对工艺更精细的控制来增强工艺能力。此外,该库的开源性质旨在告知并教育那些对增材制造中准备刀具路径的底层算法感兴趣的人。 ## 当前功能 PySLM 正在构建一套核心功能集,旨在提供基本模块,主要用于生成扫描路径和附加设计功能,这些功能通常用于通过在区域内生成一系列扫描向量来整合材料的 AM 和 3D 打印系统(SLM/SLS/SLA)。 **切片:** * 通过 `Trimesh `_ 库支持对三角网格进行切片。 * 2D 层边界的简化 * 适用于 SLA、DLP、Inkjet 系统的位图切片 **填充:** 提供以下操作是为了方便开发选择性激光熔融中的新型扫描策略: * 轮廓和边界的偏移 * 线条和填充向量的修剪(按顺序排列和排序) 以下扫描策略已作为 AM 平台的参考实现: * 标准“交替”填充 * 条纹扫描策略 * 岛状或棋盘格扫描策略 **支撑结构生成** PySLM 提供了用于识别和生成适用于 SLM 和其他 AM 工艺的支撑结构的底层工具和框架。提供的工具可根据网格和连接信息识别悬垂区域,也可使用基于投影的方法。该投影方法利用 GPU GLSL 着色器提供高效的射线追踪方法。使用 `Manifold `_ 布尔 CSG 库,提供了一种提取体积支撑区域精确定义的算法。这些区域根据与网格的自交进行分割。从这些体积中,可以生成适用于基于 SLM 工艺的多孔网格桁架结构。 .. image:: https://github.com/drlukeparry/pyslm/raw/dev/docs/images/pyslmSupportStructures.png :alt: PySLM 中可用的工具,用于定位 3D 打印的悬垂区域和支撑区域,并生成体积块支撑以及适用于 SLM 的基于网格桁架的支撑结构。 :width: 80% :align: center * 从带有可选连接信息的网格中提取悬垂表面 * 基于投影的块状和桁架支撑结构生成 * 使用 OpenGL 光线追踪方法从悬垂区域生成 3D 相交支撑体积 * 生成适用于金属 AM 工艺的支撑体积的桁架网格 * 用于支撑连接的穿孔齿 * 使用 `Manifold `_ CSG 库生成精确的支撑体积 **可视化:** 可以使用 ``Matplotlib`` 可视化激光扫描向量。可以显示扫描向量的顺序以辅助开发扫描策略,还可以显示与每个扫描向量相关的长度、激光参数信息等附加信息。 .. image:: https://github.com/drlukeparry/pyslm/raw/dev/docs/images/pyslmVisualisationTools.png :alt: PySLM 中用于可视化和分析 SLM 中使用的扫描向量集合的工具。 :width: 80% :align: center * 扫描向量图(包括底层的 BuildStyle 信息和属性) * 曝光点可视化 * 曝光(有效热量)图生成 * 悬垂可视化 **分析:** * 构建时间估算工具 * 基于扫描策略和几何形状 * 基于 LayerGeometry 的时间估算 * 适用于模拟研究的迭代器(扫描向量和曝光点) **导出到机器文件:** 目前,正在通过一个名为 `libSLM `_ 的支持库提供转换为商业机器构建平台的能力。这是一个 C++ 库,支持在各种商业机器构建文件中进行高效的导入和导出。在个人的支持下,开发了以下机器构建文件格式。 * Renishaw MTT (**.mtt**), * DMG Mori Realizer (**.rea**), * CLI/CLI+ & .ilt (**.cli**/**.ilt**), * EOS SLI formats (**.sli**) * SLM Solutions (**.slm**). 如果您想支持实现自定义格式,请提交一个 `请求 `_。 了解更多信息,请查看最新的 `发布说明 `_。 ## 安装 目前在 Windows、Mac OS X 和 Linux 环境上支持安装。使用 PySLM 的前置条件可以通过 PyPi 和/或 Anaconda 发行版安装。 .. code:: bash ``` conda install -c conda-forge shapely, Rtree, networkx, scikit-image conda install trimesh ``` 如果您有兴趣使用支撑生成模块,则需要安装一些额外的依赖项。这些对于 PySLM 的核心功能(如切片和填充)不是必需的。这些功能需要通过 `vispy `_ 运行正常的 OpenGL 环境 —— PyQt5 模块目前为此提供了 OpenGL 后端,目前在所有主要平台上均受支持。 .. code:: bash ``` pip install vispy pyqt5 triangle pyclipr manifold3d mapbox-earcut ``` 可以使用 PyPi 存储库中预构建的 Python 包来安装 PySLM。此外,为了与商业 L-PBF 系统交互,用户可以选择安装 libSLM。请注意,用户应联系作者请求机器构建文件翻译器,因为如果没有可用的机器构建文件翻译器,目前无法安装它。 .. code:: bash ``` pip install PythonSLM ``` 或者,也可以直接从源代码编译 PySLM。对于 PySLM 版本 (>v0.6),整个库现在完全使用 Python 专门编写,因此不需要单独的编译器基础设施(cython)。 .. code:: bash ``` git clone https://github.com/drlukeparry/pyslm.git && cd ./pyslm pip install . ``` ## 用法 下面的基本示例展示了从 STL 网格生成单层是多么简单,该过程使用条纹扫描策略生成填充,该策略通常在一些商业系统上使用,以限制区域内生成的最大扫描向量长度。 .. code:: python ``` import pyslm import pyslm.visualise from pyslm import hatching as hatching # 导入零件并将几何体设置为 STL 文件 (frameGuide.stl) solidPart = pyslm.Part('myFrameGuide') solidPart.setGeometry('../models/frameGuide.stl') # 设置切片层位置 z = 23. # 创建一个 StripeHatcher 对象以执行任何 hatching 操作 myHatcher = hatching.StripeHatcher() myHatcher.stripeWidth = 5.0 # [mm] # 设置在 Hatcher 内生成的基础 hatching 参数 myHatcher.hatchAngle = 10 # [°] myHatcher.volumeOffsetHatch = 0.08 # [mm] myHatcher.spotCompensation = 0.06 # [mm] myHatcher.numInnerContours = 2 myHatcher.numOuterContours = 1 # 在 Z 处对物体进行切片并获取边界 geomSlice = solidPart.getVectorSlice(z) # 执行 hatching 操作 layer = myHatcher.hatch(geomSlice) # 绘制生成的层几何体 pyslm.visualise.plot(layer, plot3D=False, plotOrderLine=True) # plotArrows=True) ``` 此处的脚本输出结果如下所示 .. image:: https://github.com/drlukeparry/pyslm/raw/dev/docs/images/stripe_scan_strategy_example.png :width: 50% :align: center :alt: PySLM - 3D 打印中采用的条纹扫描策略图解 如需进一步指导,请查看 `examples `_ 中提供的文档示例。
标签:3D打印, 切片, 增材制造, 逆向工具, 选择性激光熔化