理解Silverlight的路径填充规则
這個(gè)可以擴(kuò)展到矢量圖中路徑的填充規(guī)則,因?yàn)樗惺噶繄D都采用這個(gè)規(guī)則來填充封閉路徑的內(nèi)部,在這里只以Silverlight為例。
在網(wǎng)上找了很久關(guān)于填充規(guī)則的介紹,經(jīng)過了幾天的閱讀和自己理解還有親自嘗試,現(xiàn)在終于能說出過所以然來了,立馬分享給大家。
?
矢量路徑的填充規(guī)則有兩種方式,EvenOdd 和 NonZero,下面是我自己總結(jié)的中文解釋(挺拗口的)。
?
EvenOdd 方式是指從路徑內(nèi)部到外部經(jīng)過了與路徑有偶數(shù)個(gè)交叉點(diǎn)的那些點(diǎn)被認(rèn)為在路徑之外,有奇數(shù)個(gè)交叉點(diǎn)的那些點(diǎn)被認(rèn)為在路徑之內(nèi)并且會被填充。
?
NonZero 方式是指從路徑內(nèi)部到外部經(jīng)過的那些路徑中從左到右和從右到左的數(shù)量不相同(差不為0)的那些點(diǎn)會被填充。
?
事實(shí)上并沒有那么復(fù)雜,來看一個(gè)實(shí)際的例子吧:
?
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/>
?
?運(yùn)行之后的圖形如下,頂點(diǎn)作了標(biāo)記:
?
?
注意上圖是NonZero填充。圖中A點(diǎn)向外部可以看出經(jīng)過了2個(gè)從左到右(3->4, 5->6,這里方向是從1到9。你也可以從9到1算方向)的路徑,但沒經(jīng)過從右到左的路徑,所以這兩個(gè)值的差不為0,所以A點(diǎn)應(yīng)該被填充。
?
下面是默認(rèn)的EvenOdd填充效果:
?
?
A點(diǎn)向外經(jīng)過了2個(gè)與路徑的交叉點(diǎn),所以被認(rèn)為在路徑之外,所以就不填充。你也可以向反方向畫線,但仍然是偶數(shù)個(gè)交叉點(diǎn)。
?
PS,Path的Data里的命令是區(qū)分大小寫的,帶坐標(biāo)的命令如果是大寫,則用絕對坐標(biāo),小寫則用相對坐標(biāo),要注意噢!轉(zhuǎn)載于:https://www.cnblogs.com/shinyzhu/archive/2008/07/27/1254194.html
總結(jié)
以上是生活随笔為你收集整理的理解Silverlight的路径填充规则的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: bzoj1176: [Balkan200
- 下一篇: JMeter【第五篇】关联:5种方法