理解Silverlight的路径填充规则
這個可以擴展到矢量圖中路徑的填充規則,因為所有矢量圖都采用這個規則來填充封閉路徑的內部,在這里只以Silverlight為例。
在網上找了很久關于填充規則的介紹,經過了幾天的閱讀和自己理解還有親自嘗試,現在終于能說出過所以然來了,立馬分享給大家。
?
矢量路徑的填充規則有兩種方式,EvenOdd 和 NonZero,下面是我自己總結的中文解釋(挺拗口的)。
?
EvenOdd 方式是指從路徑內部到外部經過了與路徑有偶數個交叉點的那些點被認為在路徑之外,有奇數個交叉點的那些點被認為在路徑之內并且會被填充。
?
NonZero 方式是指從路徑內部到外部經過的那些路徑中從左到右和從右到左的數量不相同(差不為0)的那些點會被填充。
?
事實上并沒有那么復雜,來看一個實際的例子吧:
?
1<Path?Fill="Yellow"2??Stroke="Blue"?StrokeThickness="3"
3??Data="F1?M?420,200?L?750,200?L?460,300?L?650,100?L?550,350?L?450,150?L?700,350?L?550,150?Z"
4/>
?
?運行之后的圖形如下,頂點作了標記:
?
?
注意上圖是NonZero填充。圖中A點向外部可以看出經過了2個從左到右(3->4, 5->6,這里方向是從1到9。你也可以從9到1算方向)的路徑,但沒經過從右到左的路徑,所以這兩個值的差不為0,所以A點應該被填充。
?
下面是默認的EvenOdd填充效果:
?
?
A點向外經過了2個與路徑的交叉點,所以被認為在路徑之外,所以就不填充。你也可以向反方向畫線,但仍然是偶數個交叉點。
?
PS,Path的Data里的命令是區分大小寫的,帶坐標的命令如果是大寫,則用絕對坐標,小寫則用相對坐標,要注意噢!轉載于:https://www.cnblogs.com/shinyzhu/archive/2008/07/27/1254194.html
總結
以上是生活随笔為你收集整理的理解Silverlight的路径填充规则的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: bzoj1176: [Balkan200
- 下一篇: JMeter【第五篇】关联:5种方法