1. 概述
这段时间又开始接触切片软件了。自动支撑一直是大家都在追求的一个功能,这里写一下自己实现过的两种自动支撑,并不是最好的,作为参考提供给大家,同时作为备忘。
本文注重的是寻找到模型能够添加支撑的点,获得支撑点之后,如何添加支撑的动作,可以参考B9的添加模型方法,或者CW早期的代码添加支撑的方法,这两者是一样的。
2. 两种思路及关键算法
1. 基于三角片面中点
这种方法是先获取满足添加支撑的三角面片,然后计算三角面片的几何中点,作为可以添加支撑的点。对于三角面片十分密集的情况,我们需要使用一个hash算法来将这些点按照方格的方式来进行分类。如下图:
如上,将不同的点,根据网格来分类,每个格子对应了一个唯一的标识。
有了上述的信息后,再在每个网格中选取对应的点,或者根据格子中的点,生成新的点。
这里的hash算法,只是对二维的平面进行一个网格化分类。如下图为测试程序:
不同的点进行了网格分类之后,就可以进行多个操作了,比如做树状支撑,比如做平均,来求取对应的支撑点。 有了支撑点之后,再进行下一步的添加支撑动作。
2. 基于射线的方式
这种方法交前一种更为简单。
只需要将模型摆放成斗个角度(仰视模型),然后按照一定的规律(每间隔一定距离)依次生成一根射线,射线如果与模型相交,则求出对应的焦点,并将该点作为支撑点保存下来,再在下一步用该点生成对应的支撑结构。类似的效果如下图:
可以看到,生成的支撑是均匀间隔分布的,排列整齐:
3. hash算法来源
这个hash算法在切片软件中,对模型进行优化的过程中也有用到,优化的目的就是将重复或者距离过近的三维坐标点排除或者合成为同一个点,这样可以对STL数据进行去冗余。可以参考CuraEngine中的OptimizenModel中的相关操作来进行实现。
参考: