|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
for i, z in enumerate(z_levels):
# 创建画布
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 ,它取决于当前三角面片的位置关系。
|
|