Some improvements for the Cage to avoid black lines on perimeter of the cage. GeometryUtils: pointInTriangle() - QPointF p() is the position of the top-left corner of the voxel. - depending how the lines of the triangle are defined, it is possible for the voxel to be almost contained in the triangle but with the top-left corner being outside. - now check all 4 corners of the voxel as the test for inside the triangle. TriangleWarp.h: - srcP.toPoint() does rounding to nearest integer (corner of voxel). - QPoint( std::floor(srcP.x()), std::floor(srcP.y()) rounds to the nearest top-left corner of voxel. - this is a bit tricky as to which test to use for inside the bounding rectangle. - maybe should round to nearest centroid of voxel? - the effect can be a shift/translation of 1/2 voxel that we see sometimes. - I added bilinear interpolation for the Cage but the experiment has been disabled. - floor() should be more compatible with integerMoveOnly=true.