From 203a657c8a65416ccb6ceb185bfdecc5cce3f942 Mon Sep 17 00:00:00 2001 From: Ryan Oldenburg Date: Thu, 18 Feb 2021 16:40:35 -0600 Subject: [PATCH] drawPolygon --- README.md | 23 ++++++++++------------- examples/blur.nim | 6 +----- examples/shadow.nim | 22 ++++++++++------------ src/pixie.nim | 22 ++++++++++++++++++++++ src/pixie/paths.nim | 3 +++ tests/images/drawPolygon.png | Bin 0 -> 1446 bytes tests/images/masks/drawPolygon.png | Bin 0 -> 854 bytes tests/test_images_draw.nim | 11 +++++++++++ tests/test_masks.nim | 5 +++++ 9 files changed, 62 insertions(+), 30 deletions(-) create mode 100644 tests/images/drawPolygon.png create mode 100644 tests/images/masks/drawPolygon.png diff --git a/README.md b/README.md index 3b81851..53be7ab 100644 --- a/README.md +++ b/README.md @@ -78,32 +78,29 @@ image.fillPath( ### Shadow [examples/shadow.nim](examples/shadow.nim) ```nim -var p: Path -p.polygon(100, 100, 70, sides = 8) -p.closePath() +let polygonImage = newImage(200, 200) +polygonImage.drawPolygon( + vec2(100, 100), + 70, + sides = 8, + rgba(255, 255, 255, 255) +) -var polyImage = newImage(200, 200) -polyImage.fillPath(p, rgba(255, 255, 255, 255)) - -image.draw(polyImage.shadow( +image.draw(polygonImage.shadow( offset = vec2(2, 2), spread = 2, blur = 10, color = rgba(0, 0, 0, 200) )) -image.draw(polyImage) +image.draw(polygonImage) ``` ![example output](examples/shadow.png) ### Blur [examples/blur.nim](examples/blur.nim) ```nim -var p: Path -p.polygon(100, 100, 70, sides = 6) -p.closePath() - let mask = newMask(200, 200) -mask.fillPath(p) +mask.drawPolygon(vec2(100, 100), 70, sides = 6) blur.blur(20) blur.draw(mask, blendMode = bmMask) diff --git a/examples/blur.nim b/examples/blur.nim index 53d48a1..e9889fd 100644 --- a/examples/blur.nim +++ b/examples/blur.nim @@ -7,12 +7,8 @@ let image.fill(rgba(255, 255, 255, 255)) -var p: Path -p.polygon(100, 100, 70, sides = 6) -p.closePath() - let mask = newMask(200, 200) -mask.fillPath(p) +mask.drawPolygon(vec2(100, 100), 70, sides = 6) blur.blur(20) blur.draw(mask, blendMode = bmMask) diff --git a/examples/shadow.nim b/examples/shadow.nim index a85c0f1..52c0d33 100644 --- a/examples/shadow.nim +++ b/examples/shadow.nim @@ -1,24 +1,22 @@ import pixie -let - trees = readImage("examples/data/trees.png") - image = newImage(200, 200) - +let image = newImage(200, 200) image.fill(rgba(255, 255, 255, 255)) -var p: Path -p.polygon(100, 100, 70, sides = 8) -p.closePath() +let polygonImage = newImage(200, 200) +polygonImage.drawPolygon( + vec2(100, 100), + 70, + sides = 8, + rgba(255, 255, 255, 255) +) -var polyImage = newImage(200, 200) -polyImage.fillPath(p, rgba(255, 255, 255, 255)) - -image.draw(polyImage.shadow( +image.draw(polygonImage.shadow( offset = vec2(2, 2), spread = 2, blur = 10, color = rgba(0, 0, 0, 200) )) -image.draw(polyImage) +image.draw(polygonImage) image.writeFile("examples/shadow.png") diff --git a/src/pixie.nim b/src/pixie.nim index a757b2e..f8b4caf 100644 --- a/src/pixie.nim +++ b/src/pixie.nim @@ -151,3 +151,25 @@ proc drawCircle*( var path: Path path.ellipse(center, radius, radius) mask.fillPath(path) + +proc drawPolygon*( + image: Image, + pos: Vec2, + size: float32, + sides: int, + color: ColorRGBA, + blendMode = bmNormal +) = + var path: Path + path.polygon(pos, size, sides) + image.fillPath(path, color, wrNonZero, blendMode) + +proc drawPolygon*( + mask: Mask, + pos: Vec2, + size: float32, + sides: int +) = + var path: Path + path.polygon(pos, size, sides) + mask.fillPath(path) diff --git a/src/pixie/paths.nim b/src/pixie/paths.nim index e6737a5..e5ae49f 100644 --- a/src/pixie/paths.nim +++ b/src/pixie/paths.nim @@ -462,6 +462,9 @@ proc polygon*(path: var Path, x, y, size: float32, sides: int) = y + size * sin(side.float32 * 2.0 * PI / sides.float32) ) +proc polygon*(path: var Path, pos: Vec2, size: float32, sides: int) {.inline.} = + path.polygon(pos.x, pos.y, size, sides) + proc commandsToShapes*(path: Path): seq[seq[Vec2]] = ## Converts SVG-like commands to line segments. diff --git a/tests/images/drawPolygon.png b/tests/images/drawPolygon.png new file mode 100644 index 0000000000000000000000000000000000000000..7f2ba6c914f02ab2b8270bc64e956982dd239fc7 GIT binary patch literal 1446 zcmb8veK->c90zd1VsT^gwnKZltjx*grB+>+wV0Qd#;U0lF%~8-$L8gFjCsq;yc?q= z(IJP7o|ZxwhMRX_BM!CnjR4V5d1oP{XwN+|*?#6|Xp`9(xF(e8EQjK{6Dt zXPtmyse38Hx|DHQ8s9LKYhdCPzV!M?E5pA2=5FMzTZ&5o!nPZUT9k)k*{lP%1>Geq zD{OM>da0#_OB%(0cY@wCyPu|zyf) zIYnEjb~^V01DFC8%4y5$m7Ip8u#Q8$A5oduw#KCi53M6Oz(>%KiP_PR6vr7It2Ouz zIM}f7F2_>P3J%3qFD$|lFDq21k<_;Yue7{)$vof9h zv6mhBs+%gRHlUep+~!7!!XQJBIW+z0Gj0z+21L}@6{A32HG{QJGWo_qf+n&TsAvQ> ztOFJWQ}f=V=7$)eD0<^^YBI@!<;wNX$>oQvMzYt@{Hn(@1q{20r23 zvTXVVRw^^+hF4_Yj1SdbeSZN8v1iQB3 z;)2Dlj029vMVQsO`)S$IDwR$z)aNW$l|@b3jXP$n632RQYZ9l}qQIRFyi^tYSBl9- z4(T*X0g>i$RtOkI#|I!l6-qQ81)rJk-`N-*4uX}?WSSSj&b21K`}6>J+DWG7CjD@@ z4jj`SXxz_%qyvx@cTZ5XX#ycz$Q!y$w1tpRn2u7n1V1a33^BmU(BqC|%tJr@OaYr^ zqeN3qn63MHLoOKxOasJDC-_&Rn5%rQn1JcWL(bPB1LIy`PVL-%&NPnpW<+>swdqU6 zMHBtLmFw!oMV&SYU+T^orJ~t5dvL&?_;=wD-M+O*p5v*@E%e^i`}M~uA7Cs|(kW2@ zHOE44v<*Blqg6q!F~*nQJg$_L|0x##h}|smzAioD)CqiZ?P*3QC~+aCfjQ)uH{Ko& z(zwO#weRW~4}k|2X?Qx*zN(J5C#rwGw1wQLO?bioaFY$UudKQgvRh6oYI3{f>-r9- zm%9Th4u@)wan+}fWiq0xsJ1uY(6S(%8YHtJqswqC{+RD@sb=(|%n4UKP)>|UfF9k9 z>=G>n^;no^v0acmfr{7wvGsK->bf*4=2K+POz)fIHAA?*QDLb|ex^Ny=4pXCw6mj6 z%dCrduV-g<&v)IOZ`OH|2NJBSTN9u4K5Vaa@RiC1U+w?|qzhCuJdLl=Kh}0%P#BrF z)h1KryL8;x!mcZjT#>wkn%{#20~sSlN=|Tc05JW~eUO#J1tpgy50tSCWBFapnWQu6*&rgOd7Z>HUfK0w^{fS^J$XCocOKBW3E-lvA>+m` z-QzQ6RMJR%?LlP~3G{!N2x(J1-4%v}`8b-c@@+c(=h?~uF_*P8J{C>h^;gdBED`?% HcZ2m01Ll_! literal 0 HcmV?d00001 diff --git a/tests/images/masks/drawPolygon.png b/tests/images/masks/drawPolygon.png new file mode 100644 index 0000000000000000000000000000000000000000..089d0d30c701a6ec650263ef27db4164dbef2948 GIT binary patch literal 854 zcmV-c1F8IpP)eJ0-ZRll`+J!=YyIo|d#yRlIcI0G ze}FboLXS%cJuW5mxRlW2QbLbQ2|X?){;P47eLh3cJt7>Pcw9?@F7hm%)+m{0Ov0q` zprONYeecDSF@&8sALhoCD89BCG#5i?a$#Fch?8r7f+rUdnH0C#7IhSxf)Oe${!Kay z>3RcO;Vt6>N6^Xc6L_hK`@@iV06?2$hnzr-m6GOpYtV!?IaX~dDV)DvQ)$vnAn1Ou%5)zx&Y=86Mq0y3&{K02P$Bb4|5rFSO)6?nFeb%0WeO!pl?2b$Eb1(b3OOPlmIfZh_!l}nFn!m(N6 zgb&Hcu$}{I4-#WFDLhEbeXEKu zMTSQBUSfcE!UlHa8wyFfkK#hYgnc|L|Ck!BO7Ssue6He zlk%&>)WY_}1reNnN+jt{*t>mluXEwLG+yWC$7-k*#_O~tk6P0Oi;LJ?#Oj?zdyp>Su|LcOtcW{dBWFp(TaYp)=_Aoe`e+j+^thDJ<5EJ8O9?$L gCG@zI(Bo3#4`1M|fS(Lm^#A|>07*qoM6N<$g4tq+QUCw| literal 0 HcmV?d00001 diff --git a/tests/test_images_draw.nim b/tests/test_images_draw.nim index 216b74b..a553d84 100644 --- a/tests/test_images_draw.nim +++ b/tests/test_images_draw.nim @@ -86,3 +86,14 @@ block: rgba(255, 255, 0, 255) ) image.writeFile("tests/images/drawEllipse.png") + +block: + let image = newImage(100, 100) + image.fill(rgba(0, 255, 255, 255)) + image.drawPolygon( + vec2(50, 50), + 30, + 6, + rgba(255, 255, 0, 255) + ) + image.writeFile("tests/images/drawPolygon.png") diff --git a/tests/test_masks.nim b/tests/test_masks.nim index 24a391a..5818291 100644 --- a/tests/test_masks.nim +++ b/tests/test_masks.nim @@ -125,3 +125,8 @@ block: let mask = newMask(100, 100) mask.drawEllipse(vec2(50, 50), 20, 10) writeFile("tests/images/masks/drawEllipse.png", mask.encodePng()) + +block: + let mask = newMask(100, 100) + mask.drawPolygon(vec2(50, 50), 30, 6) + writeFile("tests/images/masks/drawPolygon.png", mask.encodePng())