Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

build time estimation for support structures #59

Open
QuentinoPersonal66 opened this issue Jan 21, 2025 · 2 comments
Open

build time estimation for support structures #59

QuentinoPersonal66 opened this issue Jan 21, 2025 · 2 comments
Assignees
Labels
help wanted Extra attention is needed

Comments

@QuentinoPersonal66
Copy link

Hi,

I was trying to estimate the build time for part with supports ( generated with PySLM). The support were first exported with ( taking the base of the tutorial)

'''
meshSupports = []

for supportBlock in supportBlockRegions:
supportBlock.mergeMesh = False
supportBlock.useSupportSkin = True
meshSupports.append(supportBlock.geometry())

FullMeshSupport = trimesh.util.concatenate(meshSupports)
FullMeshSupport.export(STL.split(".")[0] + '_overhangSupport_Full.stl')
'''

However, when I try to use the resulting stl file to estimate the build time ( from the tutoriel example_build_time_analysis.py) I get the following error

'''
WARNING:root:The geometry for FrameGuide is not watertight
JEB_101_ROTATED_overhangSupport_Full.stl
Beginning Slicing
C:\Users\E129000\AppData\Local\anaconda3\envs\PYSLM\Lib\site-packages\shapely\predicates.py:526: RuntimeWarning: invalid value encountered in contains
return lib.contains(a, b, **kwargs)
C:\Users\E129000\AppData\Local\anaconda3\envs\PYSLM\Lib\site-packages\shapely\predicates.py:526: RuntimeWarning: divide by zero encountered in contains
return lib.contains(a, b, **kwargs)
C:\Users\E129000\AppData\Local\anaconda3\envs\PYSLM\Lib\site-packages\shapely\constructive.py:180: RuntimeWarning: divide by zero encountered in buffer
return lib.buffer(
C:\Users\E129000\AppData\Local\anaconda3\envs\PYSLM\Lib\site-packages\shapely\predicates.py:526: RuntimeWarning: divide by zero encountered in contains
return lib.contains(a, b, **kwargs)
C:\Users\E129000\AppData\Local\anaconda3\envs\PYSLM\Lib\site-packages\shapely\predicates.py:526: RuntimeWarning: divide by zero encountered in contains
return lib.contains(a, b, **kwargs)
multiprocessing.pool.RemoteTraceback:
"""
Traceback (most recent call last):
File "C:\Users\E129000\AppData\Local\anaconda3\envs\PYSLM\Lib\multiprocessing\pool.py", line 125, in worker
result = (True, func(*args, **kwds))
^^^^^^^^^^^^^^^^^^^
File "C:\Users\E129000\AppData\Local\anaconda3\envs\PYSLM\Lib\multiprocessing\pool.py", line 48, in mapstar
return list(map(*args))
^^^^^^^^^^^^^^^^
File "C:\Users\E129000\OneDrive - RMIT University\Documents\Codes\CADs\JEB_Dataset\Supports\TRUSS\ComputeBuildTimeEstimate.py", line 35, in calculateLayer
solidPart = d['part']
~^^^^^^^^
File "", line 2, in getitem
File "C:\Users\E129000\AppData\Local\anaconda3\envs\PYSLM\Lib\multiprocessing\managers.py", line 828, in _callmethod
kind, result = conn.recv()
^^^^^^^^^^^
File "C:\Users\E129000\AppData\Local\anaconda3\envs\PYSLM\Lib\multiprocessing\connection.py", line 250, in recv
buf = self._recv_bytes()
^^^^^^^^^^^^^^^^^^
File "C:\Users\E129000\AppData\Local\anaconda3\envs\PYSLM\Lib\multiprocessing\connection.py", line 334, in _recv_bytes
return self._get_more_data(ov, maxsize)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\E129000\AppData\Local\anaconda3\envs\PYSLM\Lib\multiprocessing\connection.py", line 353, in _get_more_data
assert left > 0
^^^^^^^^
AssertionError
"""

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "C:\Users\E129000\OneDrive - RMIT University\Documents\Codes\CADs\JEB_Dataset\Supports\TRUSS\ComputeBuildTimeEstimate.py", line 150, in
main()
File "C:\Users\E129000\OneDrive - RMIT University\Documents\Codes\CADs\JEB_Dataset\Supports\TRUSS\ComputeBuildTimeEstimate.py", line 82, in main
layers = p.map(calculateLayer, processList)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\E129000\AppData\Local\anaconda3\envs\PYSLM\Lib\multiprocessing\pool.py", line 367, in map
return self._map_async(func, iterable, mapstar, chunksize).get()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\E129000\AppData\Local\anaconda3\envs\PYSLM\Lib\multiprocessing\pool.py", line 774, in get
raise self._value
AssertionError
'''

I would be keen to share stl file of the object and the supports, but apparently it is not possible to do so here...

@drlukeparry drlukeparry self-assigned this Jan 21, 2025
@drlukeparry drlukeparry added the help wanted Extra attention is needed label Jan 21, 2025
@drlukeparry
Copy link
Owner

From your issue request, it is not fully clear how you are slicing and the hatching the supports structures you have generated.

You need to separately slice the generated support structures, rather than operating on the meshes separately. Using the pyslm.support.GridBlockSuppor.slice() method will produce contours in sequential order that correspond to the boundaries/contours of the grid truss support structures. The can form LayerGeometry features that can form Layer structures. This correctly accounts for having the correct sequential scan order and jumping order which is more accurately calculated.

Upon having the Layer structure, this may be used with pyslm.analysis.getLayerTime in order to calculate the total build time as documented previously within the PySLM examples.

Alternatively, an approximate scan time is proportional to the surface area of the grid-truss support structure, given these represent single scan paths, rather than a solid-infill.

@QuentinoPersonal66
Copy link
Author

Hi Luke.

Thank your for your support on this topic.
I was trying to hatch and slice the supports using the example script for build time estimation, which does not run successful because support meshes obtained as indicated are not watertight.
I will try the approach that you suggest, but the workaround I found is to

  1. Compute area of support structures and convert it to a volume by multiplying by a beam thickness.
  2. Obtain the actual volume fraction of the support structure by comparing to the volume of the block supports.

Now I am trying to find a way to use to estimate the build time of the support using the .stl file of the block supports.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
help wanted Extra attention is needed
Projects
Status: No status
Development

No branches or pull requests

2 participants