zoukankan      html  css  js  c++  java
  • Direct2D (31) : 命中测试 ID2D1Geometry.FillContainsPoint()、StrokeContainsPoint()


    uses Direct2D, D2D1;
    
    const
      penWidth = 25;
    var
      iGeometry: ID2D1EllipseGeometry;
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      D2DFactory.CreateEllipseGeometry(D2D1Ellipse(D2D1PointF(120, 90), 80, 50), iGeometry);
    end;
    
    procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    var
      bFill, bStroke: LongBool;
      intBool: Integer;
      str: string;
    begin
      iGeometry.FillContainsPoint(Point(X,Y), TD2DMatrix3x2F.Identity, 0, bFill);
      iGeometry.StrokeContainsPoint(Point(X,Y), penWidth, nil, TD2DMatrix3x2F.Identity, 0, bStroke);
      intBool := 0;
      Inc(intBool, Integer(bFill) shl 1);
      Inc(intBool, Integer(bStroke) shl 2);
      case intBool of
        0: str := '无命中';
        2: str := '命中椭圆';
        4: str := '命中椭圆边缘';
        6: str := '同时命中椭圆及边缘';
      end;
      Caption := str;
    end;
    
    procedure TForm1.FormPaint(Sender: TObject);
    var
      cvs: TDirect2DCanvas;
    begin
      cvs := TDirect2DCanvas.Create(Canvas, ClientRect);
      cvs.BeginDraw;
      cvs.Brush.Color := clYellow;
      cvs.FillGeometry(iGeometry);
    
      cvs.Pen.Color := clRed;
      cvs.Pen.Brush.Handle.SetOpacity(0.5);
      cvs.Pen.Width := penWidth;
      cvs.DrawGeometry(iGeometry);
    
      cvs.Pen.Brush.Handle.SetOpacity(1);
      cvs.Pen.Width := 1;
      cvs.DrawGeometry(iGeometry);
      cvs.EndDraw;
      cvs.Free;
    end;
    


    效果图:



  • 相关阅读:
    Python 实现AEC CBC 加密解密方式
    redis 发布订阅方法与缺陷
    python paramiko 传输下载文件
    Redis 配置文件
    Redis 命令
    window11 | 虚拟机vmWare安装windows11
    十万个为什么 | 文化001-为什么猜灯谜又叫做打灯谜
    ffmpeg | 常用命令使用
    ffmpeg | 常用命令使用
    Adobe系列 | Animate(01)-软件安装
  • 原文地址:https://www.cnblogs.com/del/p/2009172.html
Copyright © 2011-2022 走看看