From eaee4b6769bfe30268783fe04ca21aadd5f32c4f Mon Sep 17 00:00:00 2001 From: Alex Nichol Date: Mon, 8 Jul 2024 13:36:38 +0200 Subject: [PATCH] shadow_text: start working on path generation --- .../experiments/shadow_text/draw_path.html | 100 ++++++++++++++++++ examples/experiments/shadow_text/main.go | 45 ++++++++ examples/experiments/shadow_text/path.json.gz | Bin 0 -> 1589 bytes 3 files changed, 145 insertions(+) create mode 100644 examples/experiments/shadow_text/draw_path.html create mode 100644 examples/experiments/shadow_text/main.go create mode 100644 examples/experiments/shadow_text/path.json.gz diff --git a/examples/experiments/shadow_text/draw_path.html b/examples/experiments/shadow_text/draw_path.html new file mode 100644 index 0000000..29cafe8 --- /dev/null +++ b/examples/experiments/shadow_text/draw_path.html @@ -0,0 +1,100 @@ + + + + + + + + Draw Shape with Cursor and Touch + + + + + + + + + \ No newline at end of file diff --git a/examples/experiments/shadow_text/main.go b/examples/experiments/shadow_text/main.go new file mode 100644 index 0000000..f2c0a9e --- /dev/null +++ b/examples/experiments/shadow_text/main.go @@ -0,0 +1,45 @@ +package main + +import ( + "compress/gzip" + "encoding/json" + "io" + "os" + + "github.com/unixpickle/essentials" + "github.com/unixpickle/model3d/model2d" +) + +func main() { + path := LoadPath() + path = path.Decimate(100) + path.SmoothSq(20) + path.SavePathSVG("path.svg") +} + +func LoadPath() *model2d.Mesh { + f, err := os.Open("path.json.gz") + essentials.Must(err) + defer f.Close() + r, err := gzip.NewReader(f) + essentials.Must(err) + data, err := io.ReadAll(r) + essentials.Must(err) + + var path []struct { + X float64 `json:"x"` + Y float64 `json:"y"` + } + essentials.Must(json.Unmarshal(data, &path)) + + res := model2d.NewMesh() + for i, point := range path { + if i > 0 { + res.Add(&model2d.Segment{ + model2d.XY(path[i-1].X, path[i-1].Y), + model2d.XY(point.X, point.Y), + }) + } + } + return res +} diff --git a/examples/experiments/shadow_text/path.json.gz b/examples/experiments/shadow_text/path.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..bd6ef1583ccad70c026c8dddcb92499b198d6de4 GIT binary patch literal 1589 zcmV-52Fm##iwFpi&5LFL18`wACxWE7Y=xUv$RZ*s1oA?GUUH9YB9dBUqe!(7s6LmcR=fu85L=2g(c{v)+}9znZ@vE9U|(uA z>adnrKjK`iPcu+qC$Y};L$06aiKM=>;5=LDJ8xnzDL?`!l)yUe8>wSqC5Z*4^CC`n zm)>KX0z*4C3K%mlyx6?1cY9h8SoSssyGgGj~d!%N1({m zp)}56aC5+D~lLI^auCkci64AW|5heik2 zDx-jmI9wh&;u?*X+dv@5OiRaHBfd=O7{m%Wv>x{fBC=J@CZ3cMTN0R+sY8^+Twe2C z=7=rxE7a_%EkQDP3|S)(cSvx?AiDuW2->v{>�L>QXlY>`EXmyriv<^nBqv5FT-+ zZv(a>&|#N`DbKZ>0xI)G!jY7vpVsPFK6Tc3Krwv37N`@SES)N!=J0K+5)HkF6F_G& zr-GEM+mC>DF+!tlS4T^|CI=p4H zXENK^g~;dv5Q9`oncb*FX}d59>5)vL73`v#4-@WC%yPvcaB z*eHb70HCHJpP08-zO`MI+=F#_t-)7J((|-tDG_GNax;nMw>cH*x=VAXi!>OwykDR+ z>XwlK=*6txXMu9-p#hNRPXc!I9py!M2E!H;AC%sa0n~)y0WwHmU-DD|mPlPUGD$ZX zDuX0|q`LGDgzwt&rt-A6YsNB3ZkEW9>@i=SX&R=VNT_V^;Q*n&sJP$~GBT)yyIW#E zqY19p9z}MLK>g7JJ>;D&wu=kkKrZc1gk-tQ_^3#p3XO6T8VJpuB+QS>5cye<{SBRy z#p<#2LugUT&CQxru{L)FeT^ehvypn$dLUCKBNqA~jSv#XX5~hbH>*ohVlZqZeTtye zGK@$vlqWHL4iZsjPLhQFm-b-uh0vJ(sS^S;ccnEnrw@Y9Fqj=KDzn zkkxVlbLpz(LL8E2T#)OucA9x$(lM9u+yxz$tC(c8>31Qu-$-C@DgAIE9?{=V{MPVc zRL1xs67QO|cqGUkGD|N)TARURZsPMgYN4yiZEU^?_P*Tv5z>`jCM#}|uU(egq$@BI zkQc-0Pljvh^k-E;VZR5rk;Gwyj%;>%bmM1q&9*~L(u>|lz#B1k!@ zE5fSjKCH;YrBCHoG8BE7`^9QHb+1sYs+hL{wE=%v3D!$1Bvl)*pu}o@5rnhku%B>W zPYsq5ghg0Ni@pe>^Lhtu!6q5_!EXAl;BFO;Xu>O6zhV|Q$gU7c4Cy26McI(~oyFA9 zT|SLnD??DdJ{gq{$>dUa!dhkq%k*#PG)z<)-eCl9DG5atXcjd-JhN$6iz~h^sNp2j+qeF27XS?LTUr!WM2AVmeZUQ z%cBlyHJgS=cBkR7NTsYf4EM?@atE7i$aiu$p}EZ622NAW(=>v`pPoiaz*}DVHoVEy z$n8M5Imu}?`9Vg>R{%{WQ#vx5{2-&s*dtkl8;jsP%WyRf^Nli`MU!8Ol(tEtpR{}S zNM?D@XRoZ%sXYaKtDQ|qlb?qRWP~RFeo!OypUC+?wMuJpYCxQOn z=7&)QZ=l=!?4oYGThp_lgtH%>$}u4X%e0)1*F3ZJlP{#j$qu3GKdFQAJr1cLrlaU2 ndl(Bg`GuF`D4HNri5n(E?k1BW`}^CozWn(gp5etcJvaaWG}aZB literal 0 HcmV?d00001