示例#1
0
        /// <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);
            }
        }