public static float GetClipPlanePosition(ClipPlaneType plane) { float pos = 0; switch(plane) { case ClipPlaneType.XMIN: pos = clipVertices[24].Position.X; break; case ClipPlaneType.XPLUS: pos = clipVertices[16].Position.X; break; case ClipPlaneType.YMIN: pos = clipVertices[8].Position.Y; break; case ClipPlaneType.YPLUS: pos = clipVertices[0].Position.Y; break; case ClipPlaneType.ZMIN: pos = clipVertices[32].Position.Z; break; case ClipPlaneType.ZPLUS: pos = clipVertices[40].Position.Z; break; } return pos; }
/// <summary> /// Przesuwa płaszczyzny obcinające /// </summary> /// <param name="plane">Która płaszczyzna jest przesuwana</param> /// <param name="value">Wartość przesunięcia w jednostkach sceny</param> public void ShiftClipPlane(ClipPlaneType plane, float value) { int i = -1; switch(plane) { case ClipPlaneType.XMIN: i = 16; break; case ClipPlaneType.XPLUS: i = 24; break; case ClipPlaneType.YMIN: i = 0; break; case ClipPlaneType.YPLUS: i = 8; break; case ClipPlaneType.ZMIN: i = 40; break; case ClipPlaneType.ZPLUS: i = 32; break; } int j = i + 8; if(i == 0) { float newValue = clipVertices[i].Position.Y + value; if(newValue < clipVertices[i + 8].Position.Y) { value = clipVertices[i + 8].Position.Y - clipVertices[i].Position.Y; } for(; i < j; ++i) { clipVertices[i].Position.Y += value; } } else if(i == 8) { float newValue = clipVertices[i].Position.Y + value; if(newValue > clipVertices[i - 8].Position.Y) { value = clipVertices[i - 8].Position.Y - clipVertices[i].Position.Y; } for(; i < j; ++i) { clipVertices[i].Position.Y += value; } } else if(i == 16) { float newValue = clipVertices[i].Position.X + value; if(newValue < clipVertices[i + 8].Position.X) { value = clipVertices[i + 8].Position.X - clipVertices[i].Position.X; } for(; i < j; ++i) { clipVertices[i].Position.X += value; } } else if(i == 24) { float newValue = clipVertices[i].Position.X + value; if(newValue > clipVertices[i - 8].Position.X) { value = clipVertices[i - 8].Position.X - clipVertices[i].Position.X; } for(; i < j; ++i) { clipVertices[i].Position.X += value; } } else if(i == 32) { float newValue = clipVertices[i].Position.Z + value; if(newValue > clipVertices[i + 8].Position.Z) { value = clipVertices[i + 8].Position.Z - clipVertices[i].Position.Z; } for(; i < j; ++i) { clipVertices[i].Position.Z += value; } } else if(i == 40) { float newValue = clipVertices[i].Position.Z + value; if(newValue < clipVertices[i - 8].Position.Z) { value = clipVertices[i - 8].Position.Z - clipVertices[i].Position.Z; } for(; i < j; ++i) { clipVertices[i].Position.Z += value; } } }