/// <summary> /// Calculates an array of LineItems that describes a bounding box /// </summary> /// <param name="box"></param> /// <returns></returns> public static LineItem[] CalculateBoxLines(BoundingBoxD box) { // ZMax ZMin // 0----1 4----5 // | | | | // | | | | // 3----2 7----6 Vector3D[] corners = box.GetCorners(); var lines = new LineItem[12]; //ZMax face lines[0] = new LineItem(corners[0], corners[1]); lines[1] = new LineItem(corners[1], corners[2]); lines[2] = new LineItem(corners[2], corners[3]); lines[3] = new LineItem(corners[3], corners[0]); //ZMin face lines[4] = new LineItem(corners[4], corners[5]); lines[5] = new LineItem(corners[5], corners[6]); lines[6] = new LineItem(corners[6], corners[7]); lines[7] = new LineItem(corners[7], corners[4]); //vertical lines lines[8] = new LineItem(corners[0], corners[4]); lines[9] = new LineItem(corners[1], corners[5]); lines[10] = new LineItem(corners[2], corners[6]); lines[11] = new LineItem(corners[3], corners[7]); return(lines); }
private void DrawTransparentBox(MatrixD matrix, BoundingBoxD bb) { count++; Color color = Color.FromNonPremultiplied(new Vector4(0.1f, 0.1f, 0.1f, 0.7f)); MySimpleObjectDraw.DrawTransparentBox(ref matrix, ref bb, ref color, MySimpleObjectRasterizer.Solid, 1, 0.04f, VRage.Utils.MyStringId.GetOrCompute("HoneyComb"), null, false); Vector3D[] vertices = bb.GetCorners(); List <Line> lines = new List <Line>(); // Cuboid Outline lines.Add(new Line(vertices[0], vertices[1], false)); lines.Add(new Line(vertices[1], vertices[2], false)); lines.Add(new Line(vertices[2], vertices[3], false)); lines.Add(new Line(vertices[3], vertices[0], false)); lines.Add(new Line(vertices[0], vertices[4], false)); lines.Add(new Line(vertices[1], vertices[5], false)); lines.Add(new Line(vertices[4], vertices[5], false)); lines.Add(new Line(vertices[5], vertices[6], false)); lines.Add(new Line(vertices[6], vertices[7], false)); lines.Add(new Line(vertices[7], vertices[4], false)); lines.Add(new Line(vertices[2], vertices[6], false)); lines.Add(new Line(vertices[3], vertices[7], false)); // Crosses lines.Add(new Line(vertices[0], vertices[2], false)); lines.Add(new Line(vertices[1], vertices[3], false)); lines.Add(new Line(vertices[4], vertices[6], false)); lines.Add(new Line(vertices[5], vertices[7], false)); lines.Add(new Line(vertices[0], vertices[7], false)); lines.Add(new Line(vertices[3], vertices[4], false)); lines.Add(new Line(vertices[1], vertices[6], false)); lines.Add(new Line(vertices[2], vertices[5], false)); lines.Add(new Line(vertices[0], vertices[5], false)); lines.Add(new Line(vertices[1], vertices[4], false)); lines.Add(new Line(vertices[3], vertices[6], false)); lines.Add(new Line(vertices[2], vertices[7], false)); foreach (var item in lines) { var to = Vector3D.Transform(item.To, matrix); var from = Vector3D.Transform(item.From, matrix); var dir = Vector3D.Normalize(to - from); var length = (to - from).Length(); MyTransparentGeometry.AddLineBillboard(VRage.Utils.MyStringId.GetOrCompute("Firefly"), new Vector4(1f, 1f, 1f, 0.7f), from, dir, (float)length, 0.1f); } }