/Rendering/Basics/Drawing/Box.cs
C# | 127 lines | 91 code | 8 blank | 28 comment | 1 complexity | fc482d3979b49e155382fad1c6b6dd9a MD5 | raw file
Possible License(s): Apache-2.0
- using Delta.Utilities.Datatypes;
-
- namespace Delta.Rendering.Basics.Drawing
- {
- /// <summary>
- /// Static box class to draw 3d boxes either with lines or as solid boxes.
- /// </summary>
- public static class Box
- {
- #region DrawOutline (Static)
- /// <summary>
- /// Draws a 3-dimensional box from start to end using "LineColor" as
- /// ambient color. Mostly used for BoundingBoxes.
- //// DrawOutline(minimum, maximum, color)
- /// </summary>
- /// <param name="minimum">Minimum</param>
- /// <param name="maximum">Maximum</param>
- /// <param name="color">Line color</param>
- public static void DrawOutline(Vector minimum, Vector maximum, Color color)
- {
-
- Vector difference = maximum - minimum;
- Vector minPlusDifference = minimum + difference;
- Vector minPlusDiffYZ =
- minimum + new Vector(0f, difference.Y, difference.Z);
- Vector minPlusDiffX = minimum + new Vector(difference.X, 0f, 0f);
- Vector minPlusDiffZ = minimum + new Vector(0f, 0f, difference.Z);
- Vector minPlusDiffY = minimum + new Vector(0f, difference.Y, 0f);
- Vector minPlusDiffXY =
- minimum + new Vector(difference.X, difference.Y, 0f);
- Vector minPlusDiffXZ =
- minimum + new Vector(difference.X, 0f, difference.Z);
-
- DrawManager drawInstance = DrawManager.Instance;
- drawInstance.Draw3DLine(ref minimum, ref minPlusDiffZ, ref color);
- drawInstance.Draw3DLine(ref minPlusDiffX, ref minPlusDiffXZ, ref color);
- drawInstance.Draw3DLine(ref minPlusDiffXY, ref minPlusDifference,
- ref color);
- drawInstance.Draw3DLine(ref minPlusDiffY, ref minPlusDiffYZ, ref color);
- drawInstance.Draw3DLine(ref minPlusDiffZ, ref minPlusDiffYZ, ref color);
- drawInstance.Draw3DLine(ref minPlusDiffZ, ref minPlusDiffXZ, ref color);
- drawInstance.Draw3DLine(ref minPlusDiffXZ, ref minPlusDifference,
- ref color);
- drawInstance.Draw3DLine(ref minPlusDiffYZ, ref minPlusDifference,
- ref color);
- drawInstance.Draw3DLine(ref minimum, ref minPlusDiffY, ref color);
- drawInstance.Draw3DLine(ref minimum, ref minPlusDiffX, ref color);
- drawInstance.Draw3DLine(ref minPlusDiffX, ref minPlusDiffXY, ref color);
- drawInstance.Draw3DLine(ref minPlusDiffY, ref minPlusDiffXY, ref color);
- }
-
- /// <summary>
- /// Draws a 3-dimensional box from start to end using "LineColor" as
- /// ambient color.
- /// </summary>
- /// <param name="minimum">Minimum</param>
- /// <param name="maximum">Maximum</param>
- /// <param name="color">Line color</param>
- /// <param name="rotation">Rotation as raw, pitch, roll</param>
- public static void DrawOutline(Vector minimum, Vector maximum, Color color,
- Vector rotation)
- {
-
- Vector difference = (maximum - minimum);
- Vector minusHalfDifference = -difference * 0.5f;
- // Bunch of vectors for all the lines, see above for details
- Vector[] vectors = new[]
- {
- minusHalfDifference + Vector.Zero,
- minusHalfDifference + new Vector(0f, 0f, difference.Z),
- minusHalfDifference + new Vector(difference.X, 0f, 0f),
- minusHalfDifference + new Vector(difference.X, 0f, difference.Z),
- minusHalfDifference + new Vector(difference.X, difference.Y, 0f),
- minusHalfDifference + new Vector(difference.X, difference.Y, difference.Z),
- minusHalfDifference + new Vector(0f, difference.Y, 0f),
- minusHalfDifference + new Vector(0f, difference.Y, difference.Z),
- minusHalfDifference + new Vector(0f, 0f, difference.Z),
- minusHalfDifference + new Vector(0f, difference.Y, difference.Z),
- minusHalfDifference + new Vector(0f, 0f, difference.Z),
- minusHalfDifference + new Vector(difference.X, 0f, difference.Z),
- minusHalfDifference + new Vector(difference.X, 0f, difference.Z),
- minusHalfDifference + new Vector(difference.X, difference.Y, difference.Z),
- minusHalfDifference + new Vector(0f, difference.Y, difference.Z),
- minusHalfDifference + new Vector(difference.X, difference.Y, difference.Z),
- minusHalfDifference + new Vector(0f, 0f, 0f),
- minusHalfDifference + new Vector(0f, difference.Y, 0f),
- minusHalfDifference + new Vector(0f, 0f, 0f),
- minusHalfDifference + new Vector(difference.X, 0f, 0f),
- minusHalfDifference + new Vector(difference.X, 0f, 0f),
- minusHalfDifference + new Vector(difference.X, difference.Y, 0f),
- minusHalfDifference + new Vector(0f, difference.Y, 0f),
- minusHalfDifference + new Vector(difference.X, difference.Y, 0f)
- };
-
- // Prepare the "raw" rotation
- Quaternion rotationQuaternion =
- Quaternion.CreateFromYawPitchRoll(rotation.X, rotation.Y, rotation.Z);
- Matrix transformMatrix = Matrix.FromQuaternion(rotationQuaternion);
-
- // And rotate and draw each vertex point as line pairs
- DrawManager drawInstance = DrawManager.Instance;
- for (int i = 0; i < vectors.Length / 2; i++)
- {
- drawInstance.Draw3DLine(
- Vector.TransformNormal(vectors[i * 2 + 0], transformMatrix) +
- minimum - minusHalfDifference,
- Vector.TransformNormal(vectors[i * 2 + 1], transformMatrix) +
- minimum - minusHalfDifference, color);
- }
- }
- #endregion
-
- #region DrawFilled (Static)
- /// <summary>
- /// Draw a filled box in 3d space.
- /// </summary>
- /// <param name="minimum">The minimum corner position.</param>
- /// <param name="maximum">The maximum corner position.</param>
- /// <param name="color">The fill color of the box.</param>
- public static void DrawFilled(Vector minimum, Vector maximum, Color color)
- {
- Vector size = maximum - minimum;
- DrawManager.Instance.DrawBox(ref minimum, ref size, ref color);
- }
- #endregion
- }
- }