zoukankan      html  css  js  c++  java
  • windows 程序设计 SetPolyFillMode关于ALTERNATE、WINDING的详细解释

    看windows程序第五章GDI编程部分。一直卡壳在这里了。

    下面我来说下自己的想法。看是否对您有帮助。

    首先我们来看一个图。

    SetPolyFillMode(ALTERNATE);  // 系统默认就是这种填充模式

    如图所示:数字代表绘制图形点的先后次序。

    现在。我们先从外面假设来一条射线,(当然了。我看到很多文章。说的都是屏幕水平方向的扫描线。)

    对于这种模式。射线穿过奇条边框线时,则填充该边框线区域,穿过偶数条边框线时,则不填充。

    大家对照上图的射线。很简单的就理解了“ALTERNATE”填充模式。

    下面重点是“WINDING”填充模式:

    继续看图:

    对于射线穿过奇数边框线时,填充模式同ALTERNATE, 唯一不同的就是在穿过偶数条边框线时。要作另外的判断。

    怎么判断偶数边的时候呢?

    首先我们假想一下:在图中。垂直画一条线。向上为正。向下为负。对于WINDING填充模式。判断是否填充区域就是按照:遇到“封闭区域”偶数条边框线的时候。我们就要

    看所有边框线的方向计数了。如果边框线向上。则计数加1.如果向下。则计数减1.只有计数不等于0 的时候,才填充偶数边框线封闭区域。

    最后在附张图作最后说明:

    对于A来说。射线穿过的第一条边框线为奇数。所以按照“ALTERNATE”来填充。

    穿过第二条边框线的时候。为偶数。就要开始算边框线的方向计数了。我们可以看到第一条边框线向上。我们+1。第二条也向上。在+1;不等于0。则填充了。

    穿过第三条边框线。又是奇数。所以继续按照"ALTERNATE"来填充。

    好了。重点来了。第四条边框线出现了。也就是没有填充的D区域。我们来算下它的所有边框线的方向计数是多少。

    +1、+1、-1、-1;看到没。前两条边框线都向上。后两条都向下。最后计数等于0.就不填充该区域了。

    有了上面的解释。我们在来看《windows 程序设计》第五版 中的图,是不是很好懂了。

  • 相关阅读:
    python 去除字符串两端字符串
    python 找到列表中满足某些条件的元素
    python join函数
    Ambiguous mapping. Cannot map "***Controller" been method解决办法
    uflo2安装与配置
    uflo2概述
    Mybatis-plus中的常用注解
    Spring Cloud Eureka配置文件详解 (还没细看)
    idea安装lombok
    PowerDesigner最基础的使用方法入门学习(一)
  • 原文地址:https://www.cnblogs.com/ziolo/p/3145219.html
Copyright © 2011-2022 走看看