この SVG ファイルを生成する Python のコードは
#encoding: utf-8 import svg from math import cos,sin,pi c = svg.Canvas(0,0,400,300) def star(x0,y0,r): t = [] for n in range(0,5): x = r*cos(pi/180*144*n) + x0 y = r*sin(pi/180*144*n) + y0 t = t + [x,y] return t t = star(100,150,50) c.polygon(t,stroke="red",fill="black;rule:nonezero") t = star(300,150,50) c.polygon(t,stroke="red",fill="black;rule:evenodd") c.close()同じ図形を複数扱いたい場合には、通常は
use
を使う。ここでは初等的な方法で書いた。(use
を使えば、ファイルサイズが小さくなる)
塗りつぶし方(fill rule)を指定している nonezero
と evenodd
に関しては
http://www.w3.org/TR/SVG/painting.html#FillRuleProperty
2つの星形を、近づけて、1つのグループにまとめ、そのグループに対して fill rule を指定してみた。
この結果を見ると、fill rule はグループ内の1つ1つの星形に独立して作用している。
これは SVG の特性である。
この SVG ファイルを生成する Python のコードは
#encoding: utf-8 import svg from math import cos,sin,pi c = svg.Canvas(0,0,400,300) def star(x0,y0,r): t = [] for n in range(0,5): x = r*cos(pi/180*144*n) + x0 y = r*sin(pi/180*144*n) + y0 t = t + [x,y] return t #g = c.group(fill="black;rule:nonezero") g = c.group(fill="black;rule:evenodd") t = star(150,150,100) g.polygon(t,stroke="red") t = star(250,150,100) g.polygon(t,stroke="red") c.close()