用户控件添加贝塞尔 曲线不显示问题

在应用过程中 在添加    
         Region myRegion = new Region(ppath);

        this.Region = myRegion;      时有时控件不显示 主要是可能单条曲线需要闭包

我们可以扩充闭包区间即可解决。


g = this.CreateGraphics();
            
            Pen pen = new Pen(Color.Blue, 4);
           

           g.DrawBezier(pen, startx, starty, con1x, con1y, con2x, con2y, endx, endy);
//
           // g.DrawBezier(pen, 200, 200, 0, 0, 0, 0, 0, 0);

            g.Dispose();


          // // GraphicsPath graphPath = new GraphicsPath();
          //  graphPath.AddBezier(startx, starty, con1x, con1y, con2x, con2y, endx, endy);

            // Create pen.
           // Pen blackPen = new Pen(Color.Blue , 3);

            // Draw graphics path to screen.
           // e.Graphics.DrawPath(blackPen, graphPath);


            Point[] myPoint=
             {
                 new Point(0, 0),
                 new Point(0 ,2),
                 new Point(endx, endy ),
                 new Point(endx-2, endy-2)
                 
             };


          GraphicsPath ppath= new GraphicsPath();

            
              ppath.StartFigure();

ppath.AddBezier(startx-2, starty-2, con1x-2, con1y-3, con2x-2, con2y-3, endx-2, endy-3);

             // ppath.AddBezier(startx, starty , con1x, con1y , con2x, con2y , endx, endy );

ppath.AddLine(endx-2, endy-3 , endx+2, endy + 3);
           //   ppath.AddLine(endx, endy , endx, endy + 3);
ppath.AddBezier(endx+2, endy+3, con2x+2 , con2y+3, con1x+2, con1y+3, startx+2, starty+3);
ppath.CloseFigure();


//ppath.AddPolygon(myPoint);


             // ppath.AddPath (0, 0,endx, endy);
           
            //ppath.AddBezier(0, 0, 0, 0, 0, 0, 100, 100);
          //  ppath.CloseFigure();
  Region myRegion = new Region(ppath);

               this.Region = myRegion;   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要在使用贝塞尔曲线的例子中添加控制点来模拟人手的鼠标相对移动,你可以通过计算贝塞尔曲线上的点来实现。以下是修改后的示例代码: ```csharp using System; using System.Drawing; using System.Threading; using System.Windows.Forms; class Program { static void Main() { // 设置初始位置 Point startPoint = new Point(Cursor.Position.X, Cursor.Position.Y); // 设置相对移动的距离 int moveX = 50; int moveY = 50; // 设置控制点 Point controlPoint = new Point(200, 300); // 模拟人手相对移动鼠标 SimulateMouseMovement(startPoint, moveX, moveY, controlPoint); // 停顿一段时间后退出程序 Thread.Sleep(2000); // 停顿2秒 } static void SimulateMouseMovement(Point startPoint, int moveX, int moveY, Point controlPoint) { // 计算目标位置 Point endPoint = new Point(startPoint.X + moveX, startPoint.Y + moveY); // 设置步长和总时间 double step = 0.01; int totalTime = 2000; for (double t = 0; t <= 1; t += step) { // 计算贝塞尔曲线上的点 double x = Math.Pow((1 - t), 2) * startPoint.X + 2 * (1 - t) * t * controlPoint.X + Math.Pow(t, 2) * endPoint.X; double y = Math.Pow((1 - t), 2) * startPoint.Y + 2 * (1 - t) * t * controlPoint.Y + Math.Pow(t, 2) * endPoint.Y; // 设置鼠标位置 Cursor.Position = new Point((int)x, (int)y); // 控制移动速度 int sleepTime = (int)(totalTime * step); Thread.Sleep(sleepTime); } // 设置最终位置 Cursor.Position = endPoint; } } ``` 在这个例子中,我们首先设置了鼠标的初始位置(`startPoint`),然后定义了相对移动的距离(`moveX`和`moveY`)和控制点(`controlPoint`)。通过使用贝塞尔曲线的计算公式,在循环中计算贝塞尔曲线上的点,并使用`Cursor.Position`属性设置鼠标位置。为了控制移动速度,我们使用`Thread.Sleep`方法暂停一段时间。 请注意,这只是一个简单的使用贝塞尔曲线添加控制点来模拟人手的鼠标相对移动的例子,你可以根据需要进行修改和扩展。同时,为了能够看到移动效果,我们在最后使用`Thread.Sleep`方法暂停程序执行2秒钟,你可以根据需要调整暂停的时间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Farmwang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值