コード例 #1
0
        /// <summary>
        /// Is point hit by U, V coordinates
        /// </summary>
        /// <returns></returns>
        private bool IsHitByUV(Vertex v, Point p)
        {
            Point     s = Math2DTools.GetUV(v);
            Rectangle r = new Rectangle(new Point(s.X - 5, s.Y - 5), new Size(10, 10));

            return(r.Contains(p));
        }
コード例 #2
0
        /// <summary>
        /// Move
        /// </summary>
        /// <param name="p"></param>
        public void Move(Point p, int?vID)
        {
            if (vID == null)
            {
                return;
            }

            controlPoints[vID.Value] = Math2DTools.GetXY(p);
        }
コード例 #3
0
        /// <summary>
        /// Draw method
        /// </summary>
        /// <param name="g">Grahpics context</param>
        public void Draw(Graphics g)
        {
            // draw the actual bezier curve points
            List <Vertex> bcp = DeCasteljau.Points(controlPoints, 0.01);

            if (bcp == null)
            {
                return;
            }

            // draw interconnections between control points
            for (int i = 0; i < controlPoints.Count - 1; i++)
            {
                g.DrawLine(Pens.Black, Math2DTools.GetUV(controlPoints[i]), Math2DTools.GetUV(controlPoints[i + 1]));
            }

            // draw draw control points
            using (var f = new Font("Arial", 10))
            {
                Rectangle rect = new Rectangle(new Point(Math2DTools.GetUV(controlPoints[0]).X - 5, Math2DTools.GetUV(controlPoints[0]).Y - 5), new Size(10, 10));
                g.FillRectangle(Brushes.Green, rect);
                g.DrawRectangle(Pens.Black, rect);
                g.DrawString("V start", f, Brushes.Black, new Point(rect.X + 10, rect.Y + 10));

                rect = new Rectangle(new Point(Math2DTools.GetUV(controlPoints[controlPoints.Count - 1]).X - 5, Math2DTools.GetUV(controlPoints[controlPoints.Count - 1]).Y - 5), new Size(10, 10));
                g.FillRectangle(Brushes.Green, rect);
                g.DrawRectangle(Pens.Black, rect);
                g.DrawString("V end", f, Brushes.Black, new Point(rect.X + 10, rect.Y + 10));

                for (int i = 1; i < controlPoints.Count - 1; i++)
                {
                    rect = new Rectangle(new Point(Math2DTools.GetUV(controlPoints[i]).X - 5, Math2DTools.GetUV(controlPoints[i]).Y - 5), new Size(10, 10));
                    g.FillRectangle(Brushes.DarkOrange, rect);
                    g.DrawRectangle(Pens.Black, rect);
                    g.DrawString("C" + i.ToString(), f, Brushes.Black, new Point(rect.X + 10, rect.Y + 10));
                }
            }

            // draw red dots of points of bezier curve
            foreach (var p in bcp)
            {
                var transformedPoint = Math2DTools.GetUV(p);
                g.FillRectangle(Brushes.Red, new Rectangle(transformedPoint.X, transformedPoint.Y, 2, 2));
            }
        }
コード例 #4
0
        /// <summary>
        /// Draw
        /// </summary>
        /// <param name="g">Graphics object</param>
        public void Draw(Graphics g)
        {
            bool first = true;

            foreach (var abscissa in indexBuffer)
            {
                using (Pen p = new Pen(Color.Red, 2))
                {
                    var pStart = Math2DTools.GetUV(vertexBuffer[abscissa.PointStartID]);
                    var pEnd   = Math2DTools.GetUV(vertexBuffer[abscissa.PointEndID]);

                    if (first)
                    {
                        first = false;
                        g.DrawLine(p, pStart, pEnd);
                    }
                    else
                    {
                        p.Color = Color.Black;
                        g.DrawLine(p, pStart, pEnd);
                    }
                }
            }
        }
コード例 #5
0
 /// <summary>
 /// Apply transformation matrices
 /// </summary>
 public void ApplyTransformations(Matrix3x3 t)
 {
     vertexBuffer = Math2DTools.ApplyTransform(ref vertexBufferOrig, t);
 }