ipycanvas icon indicating copy to clipboard operation
ipycanvas copied to clipboard

How to get the new path

Open zhenzi0322 opened this issue 2 years ago • 7 comments

How to get the new path

zhenzi0322 avatar Nov 19 '22 13:11 zhenzi0322

Can you please elaborate on this issue?

martinRenou avatar Nov 22 '22 08:11 martinRenou

from ipycanvas import Canvas, Path2D

canvas = Canvas(width=350, height=350)

path1 = Path2D("M80 80 A 45 45, 0, 0, 0, 125 125 L 125 80 Z")

canvas.fill_style = "green"
canvas.fill(path1)
# Get the new path
print(canvas.get_path())

I want to get the path2d of the canvas by getting

zhenzi0322 avatar Nov 22 '22 08:11 zhenzi0322

Or save it as a new svg. svg format There are

<svg xmlns="http://www.w3.org/2000/svg" width="341.333333" height="341.333333" version="1.0" viewBox="0 0 256 256">
    <path d="M74.9 3...."/>
</svg>

zhenzi0322 avatar Nov 22 '22 08:11 zhenzi0322

You have full knowledge of the path you've given to the fill method, so you know what your hypothetical get_path method would return here, is that correct?

If what you want is to save your Path as SVG, then ipycanvas is of no help, as it does not produce any SVG.

You might want to check out this library https://github.com/cduck/drawSvg

martinRenou avatar Nov 22 '22 08:11 martinRenou

Yes. I just want to get the new path2d

zhenzi0322 avatar Nov 22 '22 09:11 zhenzi0322

What I mean is you have it already, it's path1. Or am I missing something?

martinRenou avatar Nov 22 '22 09:11 martinRenou

I am trying to put the following svg:

<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
 width="128.000000pt" height="128.000000pt" viewBox="0 0 128.000000 128.000000"
 preserveAspectRatio="xMidYMid meet">
<g transform="translate(0.000000,128.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M546 965 c-53 -19 -101 -68 -137 -140 -27 -55 -28 -60 -12 -67 50
-19 70 -10 102 47 17 30 40 59 52 66 121 64 239 -15 215 -145 -10 -52 -53 -92
-122 -111 -71 -21 -78 -27 -71 -57 5 -18 17 -26 57 -35 29 -7 67 -22 85 -33
83 -52 87 -185 6 -253 -83 -69 -207 -27 -250 86 -10 26 -13 27 -53 21 -24 -4
-45 -8 -47 -10 -8 -7 30 -99 54 -130 57 -75 181 -112 280 -85 105 28 178 128
178 245 0 91 -35 152 -111 195 -15 9 -12 14 20 41 50 42 78 103 78 174 0 94
-50 165 -139 195 -46 15 -137 13 -185 -4z"/>
</g>
</svg>

Convert to svg with only one node path in.

<svg xmlns="http://www.w3.org/2000/svg" version="1.0" viewBox="0 0 128 128">
    <path d="M74.9 32.7c0 .5-.2 1.5-.5 2.3-1.6 6.1-1.6 7 0 7 2.1 0 2 1-.1 4-1.7 2.4-3.6 15-2.2 15 .3 0 1.6-1.1 2.9-2.5 2.5-2.7 4.5-2.4 3.7.6-.3 1 .1 2.6.9 3.6.7 1 1.4 2.1 1.4 2.6 0 .9-8xxx..."/>
</svg>

CaCan't ipycanvas get the path2d data?n't ipycanvas get the path2d data?

Example:

from ipycanvas import Canvas, Path2D

canvas = Canvas(width=128, height=128)
canvas.translate(0, 128)
canvas.scale(0.10, -0.10)
canvas.fill_style = "#000000"
path = Path2D("M546 965 c-53 -19 -101 -68 -137 -140 -27 -55 -28 -60 -12 -67 50 -19 70 -10 102 47 17 30 40 59 52 66 121 64 239 -15 215 -145 -10 -52 -53 -92 -122 -111 -71 -21 -78 -27 -71 -57 5 -18 17 -26 57 -35 29 -7 67 -22 85 -33 83 -52 87 -185 6 -253 -83 -69 -207 -27 -250 86 -10 26 -13 27 -53 21 -24 -4 -45 -8 -47 -10 -8 -7 30 -99 54 -130 57 -75 181 -112 280 -85 105 28 178 128 178 245 0 91 -35 152 -111 195 -15 9 -12 14 20 41 50 42 78 103 78 174 0 94 -50 165 -139 195 -46 15 -137 13 -185 -4z")

canvas.fill(path)
# Get the new path
print(canvas.get_path())

zhenzi0322 avatar Nov 22 '22 09:11 zhenzi0322