Example #1
0
        /// <summary>
        /// Draws the numberical labels on the axis.
        /// </summary>
        /// <param name="_corners"></param>
        private void DrawAxisLabels(VertexFormat[] _corners)
        {
            pSBatch.Begin();

            List<int> hidelist = new List<int>();

            //Finds the center point of the 3d dimensional shape.
            float dist = (float)Math.Sqrt(Math.Pow((pBounds[1].X - pBounds[0].X), 2) + Math.Pow((pBounds[1].Y - pBounds[0].Y), 2));
            //Uses fancy math to find optimal camera placement.
            float pos = ((float)Math.Sin(Math.PI / 4) * dist) / (2.0f * (float)Math.Tan(Math.PI / 8));
            Vector3 vector3_pos = new Vector3(pos, pos, pos);

            float[] distance = new float[_corners.Length];
            Vector3[] WorldCorners = new Vector3[_corners.Length];

            for (int i = 0; i < distance.Length; i++)
            {
                WorldCorners[i] = Vector3.Transform(_corners[i].Position, GetWorldMatrix());
                distance[i] = Vector3.Distance(WorldCorners[i], vector3_pos);
            }

            float mindist = distance.Min();
            float maxdist = distance.Max();

            for (int i = 0; i < _corners.Length; i++)
            {
                if ((distance[i] == mindist) || (distance[i] == maxdist))
                {
                    hidelist.Add(i);
                }
            }

            for (int i = 0; i < _corners.Length; i++)
            {
                if (!hidelist.Contains(i))
                {
                    Vector2 trans = Get3Dto2DTranslation(_corners[i].Position);
                    pSBatch.DrawString(pFont, "(" + Math.Round(_corners[i].Position.X, 1) + "," + Math.Round(_corners[i].Position.Y, 1) + "," + Math.Round(_corners[i].Position.Z, 1) + ")", trans, Color.Black);
                }
            }

            pSBatch.End();
        }
Example #2
0
        private pPlaneInfo CreateBoundsPlane(Vector3 unit, float depth)
        {
            Vector3 op_vec = Vector3.One - unit;

            List<VertexFormat> Vertex = new List<VertexFormat>();
            List<Vector3> unitvectors = new List<Vector3>();
            unitvectors.AddRange(new Vector3[3] { Vector3.UnitX, Vector3.UnitY, Vector3.UnitZ });
            unitvectors.Remove(unit);

            foreach (Vector3 vec in pBounds)
            {
                Vertex.Add(new VertexFormat(Vector3.Multiply(vec, op_vec), Color.Black));
            }

            Vertex.Add(new VertexFormat(Vector3.Add(Vector3.Multiply(Vertex[0].Position, unitvectors[0]), Vector3.Multiply(Vertex[1].Position, unitvectors[1])), Color.Black));
            Vertex.Add(new VertexFormat(Vector3.Add(Vector3.Multiply(Vertex[0].Position, unitvectors[1]), Vector3.Multiply(Vertex[1].Position, unitvectors[0])), Color.Black));

            List<int> Index = new List<int>();

            for (int i = 0; i < Vertex.Count; i++)
            {
                VertexFormat VF = Vertex[i];
                for (int x = 0; x < Vertex.Count; x++)
                {
                    Vector3 TestVector = Vector3.Normalize(Vector3.Subtract(Vertex[x].Position, VF.Position));
                    if (unitvectors.Contains(Vector3.Multiply(TestVector, TestVector)))
                    {
                        Index.AddRange(new int[] { i, x });
                    }
                }
                Vertex[i] = new VertexFormat(Vector3.Add(VF.Position, Vector3.Multiply(unit, depth)), VF.Color);
            }

            pPlaneInfo PInfo = new pPlaneInfo();
            PInfo.Vertex = Vertex.ToArray();
            PInfo.Index = Index.ToArray();
            return PInfo;
        }
Example #3
0
        /// <summary>
        /// Get the corner points on the axis grid.
        /// </summary>
        /// <returns></returns>
        private VertexFormat[] GetCornerPoints()
        {
            VertexFormat[] axisform = new VertexFormat[8];
            Vector3[] unitvec = new Vector3[3] { Vector3.UnitX, Vector3.UnitY, Vector3.UnitZ };
            axisform[0] = new VertexFormat(pBounds[0], Color.Black);
            axisform[1] = new VertexFormat(pBounds[1], Color.Black);

            int count = 2;
            //Get the box vertex
            for (int i = 0; i < unitvec.Length; i++)
            {
                Vector3 unit = unitvec[i];
                Vector3 mulvec = Vector3.Subtract(Vector3.One, unit);
                axisform[count] = new VertexFormat(Vector3.Add(Vector3.Multiply(pBounds[0], mulvec), Vector3.Multiply(pBounds[1], unit)), Color.Black);
                axisform[count + 1] = new VertexFormat(Vector3.Add(Vector3.Multiply(pBounds[0], unit), Vector3.Multiply(pBounds[1], mulvec)), Color.Black);
                count += 2;
            }

            return axisform;
        }
Example #4
0
        /// <summary>
        /// Load point data into vertices and apply gradient.
        /// </summary>
        /// <param name="_args">The _args.</param>
        private void pSetUpVertices()
        {
            VertexFormat[] pVertexInfo;

            Console.WriteLine("Loading Data");
            pVertexInfo = new VertexFormat[pDataPoints.Count];

            for (int i = 0; i < pDataPoints.Count; i++)
            {
                pVertexInfo[i].Position = new Vector3(pDataPoints[i][0], pDataPoints[i][1], pDataPoints[i][2]);

                float colourz = 60 + MathHelper.Clamp(120 * ((pVertexInfo[i].Position.Z - pBounds[0].Z) / (pBounds[1].Z - pBounds[0].Z)), 0, 140);
                if (float.IsNaN(pVertexInfo[i].Position.Z) || float.IsInfinity(pVertexInfo[i].Position.Z))
                {
                    Color colour = new Color(0, 0, 0, 0);
                    pVertexInfo[i].Color = colour;
                }
                else
                {
                    Color colour = HSLtoRGB(0f, 73f / 256f, colourz / 256);
                    pVertexInfo[i].Color = colour;
                }
            }

            pVertexBuffer = new VertexBuffer(pDevice, VertexFormat.VertexDeclaration, pVertexInfo.Length, BufferUsage.WriteOnly);
            pVertexBuffer.SetData(pVertexInfo);

            pDataPoints = null;
        }