7.1. 颗粒对象

使用RTDEM,用户只需要提供建模颗粒或容器的STL文件即可。

7.1.1. STL文件

用户可以通过第三方软件获得建模对象的STL文件。需要注意的是,STL文件中三角面片的法向需要是有效接触一侧。比如,STL文件一般会默认给出颗粒表面外法向,如 图 7.1 。如果STL文件法向是相反方向,用户则需要进行相应处理。比如,由单层面片构成的容器,我们需要容器内侧为有效接触方向。如果用户需要容器内外两侧均为有效接触方向,即颗粒既能与容器内壁产生有效接触又能与容器外侧产生有效接触,那么用户需要提供类似壳体的STL文件。也就是说,容器内壁和外侧是由不同三角面片定义。

../_images/meshgeo.png

图 7.1 颗粒表面外法向

7.1.2. 颗粒形状模板

用户导入一个STL文件,即为颗粒提供一个形状模板。依据该模板,用户可以等比例放大或缩小颗粒,而不需要准备额外的颗粒STL文件。利用该颗粒模板,用户可以方便生成基于该形状的级配颗粒。如果用户需要生成不同形状颗粒,则需要提供不同的颗粒模板。以下为通过 Banana-lowResol.stl 文件生成若干香蕉颗粒的示例:

 1# 构建对象
 2poly=PolyhedronData()
 3# 设置颗粒的位置和方向
 4poly.setPosOri( pos,  ori)
 5# 载入形状文件并进行缩放,缩放系数0.002,等到的即为形状模板
 6poly.loadSTL("./Banana-lowResol.stl", 0.002)
 7# 计算基本的几何信息,包括体积、惯性矩等
 8poly.computGeometry()
 9# 获得形状模板的AABB用于查验
10span = poly.bounds.span()
11print(span)
12# 是否基于形状模板进行颗粒缩放
13#poly.setScaleFactors(np.array( scales ))
14# 把该组颗粒加到模拟数据中
15sim.pdata.addObject(poly)

7.1.3. 示例颗粒形状

示例管理器中提供了若干颗粒STL文件共用户参考,比如有香蕉、例子、砂子等 ( 图 7.2图 7.1)。

../_images/bananapear.png

图 7.2 颗粒STL文件:(a) 香蕉;(b) 梨子