|  | 
 
| 
for i, z in enumerate(z_levels):
x
马上注册,结交更多好友,享用更多功能^_^您需要 登录 才可以下载或查看,没有账号?立即注册  # 创建画布
 canvas = np.zeros((512, 512), dtype=np.uint8)
 
 # 遍历三角面片并进行切片
 for triangle in mesh_data.vectors:
 above = np.any(triangle[:, 2] > z)
 below = np.any(triangle[:, 2] < z + layer_height)
 
 if above and below:
 indices = np.where((triangle[:, 2] > z) != (triangle[:, 2] < z + layer_height))[0]
 
 if len(indices) >= 2:
 tri_vertices = triangle[indices][:, :2]
 tri_vertices = (tri_vertices * scale_factor).astype(int)  # 使用缩放因子而不是固定的100
 
 # 绘制轮廓
 cv2.drawContours(canvas, [tri_vertices], -1, 255, thickness=cv2.FILLED)
 
 # 保存缩略图
 slices.append(canvas)
 
 return slices
 
 只有above和below同时满足才能执行if语句 也就是顶点必然在当前层 这样的话(triangle[:, 2] > z) != (triangle[:, 2] < z + layer_height)不应该一定为false吗
 
 
在这段代码中,如果一个三角面片同时存在于当前层的上面和下面,那么它就会被切成两部分。在这种情况下, (triangle[:, 2] > z) != (triangle[:, 2] < z + layer_height) 的值将为 True 。因此, if len(indices) >= 2  条件成立,该三角面片将被切成两部分,并且只有其中一部分将被绘制。
 如果一个三角面片完全包含在当前层中,则  above  和  below  都将为  True ,但  (triangle[:, 2] > z) != (triangle[:, 2] < z + layer_height)  的值将为  False ,因为三角面片的所有顶点都在当前层中。在这种情况下,该三角面片将不会被切成两部分,并且不会被绘制。
 
 因此, (triangle[:, 2] > z) != (triangle[:, 2] < z + layer_height) 的值不一定为  False ,它取决于当前三角面片的位置关系。
 | 
 |