From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.io/gmane.comp.tex.context/112693 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Henning Hraban Ramm via ntg-context Newsgroups: gmane.comp.tex.context Subject: Re: Fuzzy lines Date: Fri, 3 Sep 2021 18:04:22 +0200 Message-ID: References: <5CD0C6B2-D23C-45A4-A04F-B0809EBBF501@fiee.net> Reply-To: mailing list for ConTeXt users Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.21\)) Content-Type: multipart/mixed; boundary="Apple-Mail=_B1025CE3-AF9A-4033-836A-4273025E3A79" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="23026"; mail-complaints-to="usenet@ciao.gmane.io" Cc: Henning Hraban Ramm To: mailing list for ConTeXt users Original-X-From: ntg-context-bounces@ntg.nl Fri Sep 03 18:05:08 2021 Return-path: Envelope-to: gctc-ntg-context-518@m.gmane-mx.org Original-Received: from zapf.boekplan.nl ([5.39.185.232] helo=zapf.ntg.nl) by ciao.gmane.io with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mMBgh-0005ov-Mx for gctc-ntg-context-518@m.gmane-mx.org; Fri, 03 Sep 2021 18:05:07 +0200 Original-Received: from localhost (localhost [127.0.0.1]) by zapf.ntg.nl (Postfix) with ESMTP id CBFEE2870A4; Fri, 3 Sep 2021 18:04:31 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at zapf.boekplan.nl Original-Received: from zapf.ntg.nl ([127.0.0.1]) by localhost (zapf.ntg.nl [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 81XeTj4SkXBc; Fri, 3 Sep 2021 18:04:30 +0200 (CEST) Original-Received: from zapf.ntg.nl (localhost [127.0.0.1]) by zapf.ntg.nl (Postfix) with ESMTP id 0B0EE28709B; Fri, 3 Sep 2021 18:04:30 +0200 (CEST) Original-Received: from localhost (localhost [127.0.0.1]) by zapf.ntg.nl (Postfix) with ESMTP id DB44B287080 for ; Fri, 3 Sep 2021 18:04:27 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at zapf.boekplan.nl Original-Received: from zapf.ntg.nl ([127.0.0.1]) by localhost (zapf.ntg.nl [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id sthxu9VSRlnS for ; Fri, 3 Sep 2021 18:04:25 +0200 (CEST) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=188.68.63.169; helo=relay.yourmailgateway.de; envelope-from=texml@fiee.net; receiver= Original-Received: from relay.yourmailgateway.de (relay.yourmailgateway.de [188.68.63.169]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (No client certificate requested) by zapf.ntg.nl (Postfix) with ESMTPS id CF43728707E for ; Fri, 3 Sep 2021 18:04:25 +0200 (CEST) Original-Received: from mors-relay8203.netcup.net (localhost [127.0.0.1]) by mors-relay8203.netcup.net (Postfix) with ESMTPS id 4H1N0922C9z8dc9 for ; Fri, 3 Sep 2021 16:04:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=fiee.net; s=key2; t=1630685065; bh=vYS2Tq6UKGiBM7Bi3ZjpyaMZwigKQHgzlSqwz89zKF4=; h=From:Subject:Date:References:To:In-Reply-To:From; b=AUXGycSBWsKnUF3PpNbhgbfR3g99VcO3fgopkWzX2RVUr8Z1q921yCobOcDFLcCQb 8UVQUVUmA/J5lCy2LwpHmGdOxUjTj74uTg7wUx45Y7zNqDYafI05m4GdI4i+quPBJ9 eTae/mEcuJwupEddNZDmDBkuANjVhFAjb8FeElwn6Mzi5Rh8PgNv4ioA8QyeUEWuwp TNdcPgmEd/cV26RUk1leQXZJwMmHSokGJWa2qdKnzT+DbhBMWT8CvnS5La8nDEJ5dr kE6RlrepkV6PgLrhkVLYEz+eosj76mRLGncyzXc2FFKWv7cdm+lqey8cZjfR2zmgGQ rgcl6W153Kzdw== Original-Received: from policy02-mors.netcup.net (unknown [46.38.225.35]) by mors-relay8203.netcup.net (Postfix) with ESMTPS id 4H1N091bmKz8dc8 for ; Fri, 3 Sep 2021 16:04:25 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at policy02-mors.netcup.net Original-Received: from mxf9ac.netcup.net (unknown [10.243.12.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by policy02-mors.netcup.net (Postfix) with ESMTPS id 4H1N083qxDz8sk1 for ; Fri, 3 Sep 2021 18:04:24 +0200 (CEST) Original-Received: from aretsaya.fritz.box (ipservice-092-219-045-239.092.219.pools.vodafone-ip.de [92.219.45.239]) by mxf9ac.netcup.net (Postfix) with ESMTPSA id 3743412002E for ; Fri, 3 Sep 2021 18:04:23 +0200 (CEST) Authentication-Results: mxf9ac; spf=pass (sender IP is 92.219.45.239) smtp.mailfrom=texml@fiee.net smtp.helo=aretsaya.fritz.box Received-SPF: pass (mxf9ac: connection is authenticated) In-Reply-To: X-Mailer: Apple Mail (2.3445.104.21) X-PPP-Message-ID: <163068506350.24805.11306608864860660253@mxf9ac.netcup.net> X-PPP-Vhost: fiee.net X-NC-CID: +gPTWH0gKHMaXwLQX1XHyP9XxCRuEf8sjNMponkW X-BeenThere: ntg-context@ntg.nl X-Mailman-Version: 2.1.26 Precedence: list List-Id: mailing list for ConTeXt users List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: ntg-context-bounces@ntg.nl Original-Sender: "ntg-context" Xref: news.gmane.io gmane.comp.tex.context:112693 Archived-At: --Apple-Mail=_B1025CE3-AF9A-4033-836A-4273025E3A79 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 > Am 13.05.2021 um 20:02 schrieb Henning Hraban Ramm : >=20 > Thank you, that is what I was asking for! >=20 > Unfortunately, the deviation of edge points is too big =E2=80=93 try = my attached test file. Hi Aditya et al., coming back to this: I found "fill" was not working, since do_sketchfill = didn=E2=80=99t use sketchrandomized. That was an easy fix. But I couldn=E2=80=99t fix the edge points issue: the less segments I = use, the more some of the edge points deviate (see attachment with 10 = segments; I used the setup from your theorems article). Lower left and upper right are good, what happens with the others? I just can=E2=80=99t understand the loop that splits the original path = segments: for t =3D 0 step 1/sketch_segments until 1-1/sketch_segments : ((point (t*arclength(p)) on p) = randomshifted s) .. controls ((postcontrol (t*arclength(p)) on p) = randomshifted s) and ((precontrol ((t+1/sketch_segments)*arclength(p)) on p) = randomshifted s) .. endfor Would it make sense to check if a point is an edge point (without curve = controls)? Next question: Can I apply this to \framed and TABLE lines? (Probably = only via backgrounds?) Hraban --Apple-Mail=_B1025CE3-AF9A-4033-836A-4273025E3A79 Content-Disposition: inline; filename=sketchtest2.pdf Content-Type: application/pdf; x-unix-mode=0644; name="sketchtest2.pdf" Content-Transfer-Encoding: base64 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 zKVMznTzMhpxvrBuhXQU9NOrVXWt6KdSeLJSM3I8rT5g269wXd/o/fGiLMJtGa6V/eTbx1fWb0Im Ooz9yrlXZD2fXwwfrgm/HPVuUC7OP1+PHfqr0LXrSjvA0Qs+/WiSsq6r6c/5UjUHp7zcJY0Xu4SX DDRP342bt84+nUF+XfF44pZ2qttxPfcLTx7vtCH75sD5K4a/8ecCxH7+5lXO2pXV3ojIuHp3FPFL eysCjy+a39r6rdREu6zT3flKTTpg0m8PxXXcQmI8GvnjzTfaJ69wvfrGafLMHKf8rWUXflixnutU +WZVeCPu4QWrr9XLmcejZ/hbKZ5w+yLihzfXw15w+Doca9dLT2onOn5l86Zfvl0tGuUkcS/VclSt YfWw2C+YX+m40SsvatxXH/3dzvHpzVVH/Szs27flZtejPh8vJ3uDhXx9Sq/Wn7Xk0cefTojoB+rP WTMv+qsYPJ0Y6+PRsn6aZ5eKD6YF38hI1XSk3z3nhb/+h//MNC9KwrJz+eaIcQq3WV3ftqvPl+y2 N/jBd3p6cZaPr/w48PO8KuKe8vDV5YS2j+foa0W9UTDHE3tnnPbvl7UntRY+3bHwVsyZU/ndFCl9 1b9X/aA9knFxe6m9Uztr3seTqrtE7lh1c47re+PaP4TYtfblOd6ysOTHRWDwl8rl/1e4hsD/AhGn HJkKZW5kc3RyZWFtCmVuZG9iagoxMSAwIG9iago8PCAvU3VidHlwZSAvWE1MIC9UeXBlIC9NZXRh ZGF0YSAvTGVuZ3RoIDIwNzMgPj4Kc3RyZWFtCjw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVN ME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+PHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRh LyI+PHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1z eW50YXgtbnMjIj48cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczpkYz0iaHR0cDov L3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iPjxkYzpmb3JtYXQ+YXBwbGljYXRpb24vcGRmPC9k Yzpmb3JtYXQ+PGRjOmNyZWF0b3I+PHJkZjpTZXE+PHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0 Ii8+PC9yZGY6U2VxPjwvZGM6Y3JlYXRvcj48ZGM6ZGVzY3JpcHRpb24+PHJkZjpBbHQ+PHJkZjps aSB4bWw6bGFuZz0ieC1kZWZhdWx0Ii8+PC9yZGY6QWx0PjwvZGM6ZGVzY3JpcHRpb24+PGRjOnRp dGxlPjxyZGY6QWx0PjxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+c2tldGNodGVzdDI8L3Jk ZjpsaT48L3JkZjpBbHQ+PC9kYzp0aXRsZT48L3JkZjpEZXNjcmlwdGlvbj48cmRmOkRlc2NyaXB0 aW9uIHJkZjphYm91dD0iIiB4bWxuczpwZGZ4PSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZngvMS4z LyI+PHBkZng6SUQ+c2tldGNodGVzdDIgfCAyMDIxLTA5LTAzVDE3OjQ0OjM1KzAyOjAwPC9wZGZ4 OklEPjxwZGZ4OkNvblRlWHQuSm9ibmFtZT5za2V0Y2h0ZXN0MjwvcGRmeDpDb25UZVh0LkpvYm5h bWU+PHBkZng6Q29uVGVYdC5UaW1lPjIwMjEtMDktMDMgMTc6NDQ8L3BkZng6Q29uVGVYdC5UaW1l PjxwZGZ4OkNvblRlWHQuVXJsPnd3dy5wcmFnbWEtYWRlLmNvbTwvcGRmeDpDb25UZVh0LlVybD48 cGRmeDpDb25UZVh0LlN1cHBvcnQ+Y29udGV4dGdhcmRlbi5uZXQ8L3BkZng6Q29uVGVYdC5TdXBw b3J0PjxwZGZ4OkNvblRlWHQuVmVyc2lvbj4yMDIxLjA4LjMwIDE5OjU2PC9wZGZ4OkNvblRlWHQu VmVyc2lvbj48cGRmeDpDb25UZVh0LkxNVFgvPjxwZGZ4OlRlWC5TdXBwb3J0PnR1Zy5vcmc8L3Bk Zng6VGVYLlN1cHBvcnQ+PHBkZng6THVhVGVYLlZlcnNpb24+Mi4wOTwvcGRmeDpMdWFUZVguVmVy c2lvbj48cGRmeDpMdWFUZVguRnVuY3Rpb25hbGl0eT4yMDIxMDgyMzwvcGRmeDpMdWFUZVguRnVu Y3Rpb25hbGl0eT48cGRmeDpMdWFUZVguTHVhVmVyc2lvbj41LjQ8L3BkZng6THVhVGVYLkx1YVZl cnNpb24+PHBkZng6THVhVGVYLlBsYXRmb3JtPm9zeC02NDwvcGRmeDpMdWFUZVguUGxhdGZvcm0+ PC9yZGY6RGVzY3JpcHRpb24+PHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1w PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIj48eG1wOkNyZWF0ZURhdGU+MjAyMS0wOS0w M1QxNzo0NDozNSswMjowMDwveG1wOkNyZWF0ZURhdGU+PHhtcDpDcmVhdG9yVG9vbD5MdWFNZXRh VGVYIDIuMDkgMjAyMTA4MjMgKyBDb25UZVh0IExNVFggMjAyMS4wOC4zMCAxOTo1NjwveG1wOkNy ZWF0b3JUb29sPjx4bXA6TW9kaWZ5RGF0ZT4yMDIxLTA5LTAzVDE3OjQ0OjM1KzAyOjAwPC94bXA6 TW9kaWZ5RGF0ZT48eG1wOk1ldGFkYXRhRGF0ZT4yMDIxLTA5LTAzVDE3OjQ0OjM1KzAyOjAwPC94 bXA6TWV0YWRhdGFEYXRlPjwvcmRmOkRlc2NyaXB0aW9uPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFi b3V0PSIiIHhtbG5zOnBkZj0iaHR0cDovL25zLmFkb2JlLmNvbS9wZGYvMS4zLyI+PHBkZjpLZXl3 b3Jkcy8+PHBkZjpQcm9kdWNlcj5MdWFNZXRhVGVYLTIuMDk8L3BkZjpQcm9kdWNlcj48cGRmOlRy YXBwZWQ+RmFsc2U8L3BkZjpUcmFwcGVkPjwvcmRmOkRlc2NyaXB0aW9uPjxyZGY6RGVzY3JpcHRp b24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAv bW0vIj48eG1wTU06RG9jdW1lbnRJRD51dWlkOjBmNzNmODQ2LTQ5ZTUtYjc5OS0xNDhiLTZlNDQy ZjcxMjcwNTwveG1wTU06RG9jdW1lbnRJRD48eG1wTU06SW5zdGFuY2VJRD51dWlkOjhlNmM4MWU0 LTRiYWUtYThiMC03NDkwLTZhN2VlOWMwMzk1YTwveG1wTU06SW5zdGFuY2VJRD48L3JkZjpEZXNj cmlwdGlvbj48L3JkZjpSREY+PC94OnhtcG1ldGE+PD94cGFja2V0IGVuZD0idyI/PgplbmRzdHJl YW0KZW5kb2JqCjE1IDAgb2JqCjw8IC9TdWJ0eXBlIC9DSURGb250VHlwZTBDIC9GaWx0ZXIgL0Zs YXRlRGVjb2RlIC9MZW5ndGggMzc2MyA+PgpzdHJlYW0KeAGtWAlUU9e6PiEkBzSizTFWz9Fzah1a tc7Vtr5b56t17HXAWRBlUkOYiUGBMGXaBAKEMCWBMB4GQQYFFS1ondDrtbVXWmun21dvr3LbOvTt Qzfv3bcDtXb16Vtdb72srLNWTvb+9z7f9//f/+0jIjw9CZFINMZ3w7ubNm+ZtnbdxvCwANXsOdM3 BoXEKgOi3H/uETjhJSBjj8leFsaKhXEeAuvZvwDVj5VE/YQkQCYCMg+0TCZuk3maZVJ2CMEBMHiV kUDmNY4gRNNfwFfiznB8lTfKJrpvTZJNKnP/LJATpEgkHf7S5Glz18yZMWvW679s4n/sZn14VFiA cklg+N6gVYFBqpj9MZrnbhx/RIQHISY8CQkhJUjCi/AmhhBDCRkxjPAhhhMjiBcIOUERIwkFMYp4 kRhNjCFogiHGEuMIluCIl4jxxMvEBGKiGAfCn0nEJI+BkCuJRtF40Q2PDI9H4iXii54LPPMkHpJ0 yX3pKpIks8gK8j+9SrzXeIMh5JCmoTOGZshekbXI4LC7w5DPap9Hw+tGLBzxrxfG+QBeaOGvqkUw /IZYmDGKV5JzDfmNnHCZLAMZajYienvwREZFlp0Blee4fgcZYkiayypVUnNVL6hn6u8DYxXncxXw fQQvgn++I+6bK+xUaGC0pL9XqkHREpcUzim0NsI5jKMaGHO5EkNGUgzdz5P7QcIUNgQHqnsImpnm R8BYx/Eh5BRQeJQTeLLCbC3OYs25PHAycI41BM0p5HzKAA+7eXgMLzX2Dtzhgq+5LC5xnxxaFbFS NCs6ejl6m0Fjpf7GnHoOlt0l79uU8zgXLI6VztMqp7GzoEFab85pY+EYKXyldjuaWMS5pJHu3baq SqQ3M5ODuf5KMtiQvIxVq4Quqc+rcXzf7CpR1wW45sInF8RCAlyruBzTHlHPBrf72QLzkEf16G0F fmeu0h+c7/4EvulC8/dks0lmoM9jbMDi4KAf6QCWZIMeJKaxB9ZLruxcle/PIPGCOZN22v2P7eMa AhtSPtQ0pJ5LKEz3OhVT67uJXrxl+Zt+62wndrAb3tPfNNV7mXKTAaC1QKfhkB+pAbq87Axzfg5b f0myr7F7/1cM9LxzD3pwPvBfIE74jm/jRfaf/MU/RfS9rOBJ4x4j8GcifYE5mlORl02Og2paZ0g1 prHotX4Vmi8AiSnTmJtJ13SCchaPj14CVIxqPTBH4vGdhQaNjctJzFEWhKAJ/RtHo9cFnURXCMx4 wllQ6Z4QswiE/zKhywmC8jm4o/+/JEcsWXork2vJLLJwcIFQDP+tvxjftBhyGWtWlvvmn4Qvik/z JWcyxvigwGQX3O0ETrhVLa/pgalXqMvCNDhUka3LSk816nRG9o3Id2ICmIDJ1XAJ54Q1JNXhMgPn D77/QMOQdO5ENAKNfjAViuHQdkiUcuvgaAVKkcLZuV87qpn/yEbj92dwPqgo2SXQPFyrlj+8FuuC Y13UY3gbjlC8H7uZXKYKCFwJvrWzsB6O59F4uJakQmOlpukh02YZvNQk9dGXqFaKxH+N6eyuv3KT 9XkV18/YErifV7XIIXEN7rtGfSQ4RvHk9ihQY+Lw/G9BdUwd26zalb2fmbdvtTKBM8EHUqoXcVqJ ivxLbtoOrr+U9NOC1ayKNFd2gWqG7wLGSo4n1ySBdg6uJx/fOH/lSuG29SxKetZA/Ei4Lq63ONyb eNStv113mxoJfxQoRU1E9Z75qpmH0lkTFEspHtG/rInKfwlVfQ7UMFUfAmMZXpNKU0up1UuNtkYO ziZ7W+5+nGsGpiw2VX84PYJWlWmLS0oKqliffhI/uRdeEZK98q97F3VTFTAdP/dqvaWZEzxJ6n00 1r3YVWs6Xqzi6WKnAc/YLgDjUY4avUn4QVET7YwOj4uNiHTFVtY4y8tZHyS3xQmzeJFDiBELOmGy O4VVCUDJvGXGAY8bLWFaOgXnQxI7CdmQJ2zA2WgCFrqyCTjc2Ri1FUQw09xjz+fplTgVJ6CfJAkW sy6fyck223M4OAp+anXZT1zFWYcJhPV89+/jb2rQm+pUzvTQTd/YZ0H5f6OvF0PpzcNKrMKi7ru3 xfBen1xxLITf+cc/+E5ikffbqk/QnWfSpSYHmboNJTwioTf5zcmTrblFxvR8Vm+KSlHRMcWHy8qL izGqOOtXqEW4rmp6xII/PKCAiikPkReSvTYeydHI76dBKRzS+08oZxdZFaFgXeQudmf47kNBTLBf cYeKi2g3XTxON4HLte3sieq24gam+bgmsIqr3Q3WBtM+cMlvccTfkT7U531HnwfmmwHvBh7mPk7w da39FbDf/f8B+/sZ0PGJcTDTWfHZp2r50Q/h3ms9LqpEUP274nzsJnJjdGpCEOgsYuEysgu0+Dez daF+hf7MW2t9V6ucCWXldnt5awg4wh0vO+1oYU5eDJrN7SPRbsOiNxbS1OI//D3q8p/bW047Wap6 V1ZtyAmm9ELhpxx64z3FlKUH9uzY23gajoYL8xvNOPM/gBu6RDZYIIblcIOiCxX4koO6yH/W5RI1 9EC/z8XCVKyJ1jRgSDEZkgzs8ljfMF9m/YJO+Bpc8GXrmaZzRwLLuKRgsDfaHl9e5izkr//x9ALk PWOCm+b7U6AEjq6BMivOOznmbB8Px/EwelA6qF7BgOmKUILWcA7RcGtaniSzuys3l71xqS2jNMML V5c6EoQxkduAOQZrvd2Un3KYVsdpAItwfIkQhyXy2cqGC7+GqTkNjNVPiPmRvHr+PmIlRXE52gRa k6CLc4+r6ABVzAkzMJ7AvsIWB+/y7VgK+uaI+5YPSkGUBkvBfHd5txvzIw7RAKTqk9mZqOgV2CjR 5bv7UvUxUOpWgvC9uJHNdg9tKjAm2jhLev6BHPV8ZBg9DVZIdAXAnEVXNQPngGpsx6oxwz32bJ7+ oI2Dcqwa2qzMNBtjtWQWW7jvYdP3qElyGLcvK2PLzLFlcZCEd1zdbWY7FhK3IPZJBvJf1E0dgxmj fn7MPoKkbjwHkw43JmfcmPi8mlyibh7oJThCZw/oBj24fhKFfBxnZWpOByf8SP4qCook+bg9DesZ 5PXKFDQSUfemQI+etjPOQm4FCSlPDTAkxLJUQ2j0XtV2JhIReXDLzfwWVz1XW9JSe4a50uB3OI/L jwdGDe2D8jDQcxywyCGqb4eadjF8DClF14G6FCsbUhuRvSrfKyx7aeElurb05DdQlD1DaWZTM3JA 5qDHeTRgcVIPxaaksRVKZfZBBg0LWbVZC0KbQrm68KNpJ1POaQsMFWovx5GC2HB6T9TOuat2Nn0f y+odJjOgs4x6YGAG7c3YAXtjycgotbOWHGAuKvba1dQF7Mzj9y7cHkBJmDmAUTWGaG0PtPRQoYIF KhWQmv5PJN68KypgPws/IqnmX0N+z0U2XpMEl50IuspA8odeqOAWZSjeSQ6IDmGV6n3K7YxvaENV PJdYCrLsNNxLUiscwGwrZhvL2/gOpuZxEtrsXrxZ8GoRDeqbeKBNDDADBRKNf8rMSnK+3/LFb+lO dbLwi5//6QGGORyaSq4DITUH2Mjy1qSzjL0O8Ec5vqy4CdCzcZ3L0Zq4ph5hQ4+KlztvgVsw5xYl /1UDPMgscKfnMaM1RuNugDjrJyGLhJqIxDib0wtBDqCpzZUNoMSdz5E7sCeb6p5wIVenLODglH4P //HAqE8dExYfEeTHKA85AAcashro8kMFGpYqio9LVgUdC+4839rRXcnBJcJCyfWqUxlOxudVtIWH M0sEhte65I+uweIeasRT0EVzd63VG9jr5BNT80F2mj/Xf+B/0+SlZJSjNfApGaPQ0JWvL1SqCpxq NqbsSEm1mwQnyMAUUCPbazqcTcytS7OQJ4frDC2Og769IrisRAy36hVX4poDVYdiIyOcsTVFthxL NpuZaQYAmBN09JrId/13s3qDyaindRadxdrzV0hinQ0ohb7nviqF5lJ5VceRG3DZDdCR3BHSQY1c LIQLUxWOhOrQrYEHjySwZWGhBUHM7HdWLtzYEJyXwlH3tElHNKpAekNDVK6O3Z24O2QrveIfG+Fw OPS7zlsVaRffrWUrt20H85j1acCp4ZLzUpyltD3bnlfIKk+1ABvzzfW/fFyV2nSwjmtpPgUsTJYF GLM4at7iZL0uWUsn5CUV5zosLhYtRB4KDdgbH8GqDoUlxzFzwQ9lDtBqr+J4Z01eKUN1a78Gk2M4 SPQPUfxp0a6Z05Z2vJ9rbm6qZAtdVvAB8zmUgNe557UV4BKmq0VVggc+TuNjDT5BSVPid6KhuHql kBdekFhtboG0pYF4Fl2XatFcfJp7kO08BkUM9JKi5v5xEo0ZuFh4Wzrgo25+EeY2hMO/OKfGzQRO 7gbdlEU7oGADrGNbiIalSqjFRHqyyWTkqEbCZDSCBAZ5Q4n0wd+aLuadNu2vYQMMSq2qPNHuKM+v PburfeEsNGQ7IjhE/sYIPVXPJ2l1B3tWqlN7MjtxL4eqnqmzA11vPg+n84CX5wlpVIGQiTe4RWOu i+bQi3AJ33S8y1k65mTrqZw6ZvD0FDjYRAqMxekxdHyKNj2VXbPg7YcSQ1a6NYfOtjhqMgZayLYn xpP69qzTGFHKQW80XWI2ZqUbaMPbU5ITWX9ff+0ekxfeU5MZnGC+MUp4MjpTX1RIF+fk5hWwN7/9 7CWJPRYY0+nU1MMRpoHy6cDlM3DSwCbRahdhaIO6xU9hxQ3GlBanS2eAHugy2YL9SnCYmfDS5om/ D7GgZw9AnLBMgUIwMfd62j9qMIO0clZHalNSkw/TqZnx9hTWZ9kT3+pmexJm+++3KUH4EZvXxtCa 7fuCNNFR7LHITRYMCvLcOv73bSfwuVaXWvHE7Ep55IXN7ldtZ9qKCnWG7N+aXRReoYjQpR46Qsdb E4rSWf0RkKilkTcKhhLywZdNl3LaQBw/cIjpFf2tVwzXdiiqYkqjVOqYqLCKQ2VVrtJq1kdIHNn3 oiKuVFhWBMPzckulQOYNZEPdb6NkwnjZ5J/fHP03D32lQQplbmRzdHJlYW0KZW5kb2JqCjE2IDAg b2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggNTU1ID4+CnN0cmVhbQp4AX2T3W7T MBTH7/cUR+EGJGInaSfRz0l0KzDagtqOceskTmI1sYPtLGlfjQseiVfAad1W3QApir9+5+9zbP+H N01Jog3VENKU8ZHz++cv8znA4pHzeD335uWEZuzjTtLVbrGOdpuoFzs34yuAYdNvirKgmkBT5Fz1 m5FDYhHSvum309hpMQPKOOkvb6cWM6ORk2ld9jGu6xrVHSRkiv1er4e9AAeBawhXbbkmjcvVK6ti dW6piiQrNRMc2jEJRaVHjmPFyzhpTupcoX1CKBIFblewjzptVlfDdtSvOPtRURaPA+R53cHD58fF YDZfioJwP3CXNK1yIof4krWxT1Qqk8P426GFg8TXle1kQkeCP4GPPNTtDQqyoUInKGehWUd+9911 xwofhaxuJMqtZGmmx5NjDwLP67xt/z14j+De3Jeo1YYB4THcI5gjWIjazDJ4bTIJaUbyBEQCa/od KmX0IZWiKtUbBOuMKaiF3IBpJc0pUTSGisdUgs4ofHhYrWEquIYZiyhXFFwXQFEK9kx1le6vKzGM wvkBUriNc6dfFmt39mlyt1jdId1oSISE2LwElitkyz3XZwtOSMHy7Xg2h/3Bgx9Y0i5YTFWhnbi8 l/O8BfW2FKkkZcaiozTRjMNcmBr5YRMb+xJ9qXHW9wO43Pqv1LGqKs85Kej4X+/pBNiAUih9eNn/ DXuGXR2tgZ95wzoPW+vt/YpPhjWbnnxPuXF6bSz9B+UdYZUKZW5kc3RyZWFtCmVuZG9iagoxNyAw IG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDUzNyA+PgpzdHJlYW0KeAGFlF2L 4jAUhu/9FWcvBL3o2KTazgwi+AnCzjir7rC3tYluwaalHxfC/vhN8qa6sMoUBJ+ek5PzHJJ2v33s vKnID9ILnnzayipvykR687e46HS7izxpMqnqdymFFG20eqWPMk92sqbefL1Yq7Tu6+S1Ss6NkG3W /aSZPKXqlmL2od5e/vJ+/tjs9p/e97dtnsWKcW8rT805Lj3fLNun9Vmnf5FJOkyPwuT3/+hKn7Ks 0ly9EnvyfV+/WCoxzzNjWXUGrlMatL0fUyVK1y4dTPMdIsZJpEl9ZcK/JNNDI/uYQrtLVctsrY65 e0k0HtNAt5NWdXmxMn0abEohy1SdqPeoc520a4riLE2T5NNk4goKebzupwf5HmfyutXAjGot9Iq0 vjyc2f1C+0txK8T/y2FONxeyKuJElrE63fLHeqz+hMYr/bSNSiXuZgchSh2OyW/djFnKJqZCwCaW uKXREBRYGo5AQ8QC0AgUgUJLocuMLEWuyjNiz6AXxDhoitgLaIZYCJojtgQtQC62BK1AK9DCEvNB MGLw4y4GvxAODH7hDAS/CEYMfuEc5PxgxJyfq+L8YMScHybB4BfBjzk/HwQ/7nZwfm53+E1d1/CL ppa48wuvc+NwjDBhzm9x1ObB7Q3mx+HKl/8cGHcm2uPT3q32oFPSlKU+3fYi2lNrTmiq5PW2FrlZ odd2zM9e9PbDY2iz+gusXkbhCmVuZHN0cmVhbQplbmRvYmoKMiAwIG9iago8PCAvRmlyc3QgOTEg L04gMTQgL1R5cGUgL09ialN0bSAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDEwMTQgPj4K c3RyZWFtCngBjVVtb9s2EP6+X3Hf6qCwRFLvQWAgsZvVW5xmsZMFKPqBlhhVmCwaFI3EwH787igp VrBiKwKHvLvnXvjckeLAIIQohRi4EJACjzlwBjxDRQBCRMBDCFLUCIhihEKShsBTyBCeQRbHEADn AeoyXGMBArEBi3+5uAD/crmGZ1m3CvyrFfi32uxkDf78Ejj4m+Me9Z9e7a9rKy1uc4nq2exHnqtD bat9fXS+zBM/9iYD+n8F/25xjRD1asFf7mSprvp13q9L+IYwhn9RFnkiiaKMsQQJCLmXplkSJWn2 b8jJnDojh68QZgwSlkCMTEQh0sBYDGEQIWncKWgVGDriiZNFljmnlMduDUSHJzsFcljn1wV0v8EX be98RrYo6fJ8w9KIwSvZqmvdIAMPf3xZbx4/3qzu9U42XEzvVXmopUEyl4v1sbVqt2yeNZDXF1Mo UzUlTJaFamxlj2fgI75qrTnC5LLQW4Wa9WG/r9UOEcjPbAY+ZVqoNjfV3mpD08LgnnBb6xqFmQhC XWND87rq/qRBI/DQ+TansCnS6M/l/rOqyu8W4jQAnxKQbcqzEN1rWbYQdnGurvQrdmMa4lhOBc1r gBjORYKEOMR1VSsc1agrjDS3cqf+i52llXWVXzZlrdDJXykrC2lxSOP+cEjcI7w7zogC/6kvPQze pvpnetIdspBYMSJbPBTeQMqH5/jU5Lqg7vhDd6afRyQP7OqHpkKgAhwNV+mI776SuT6ggLfw96qg HNmQooPe4R1pT9jGKiqljzY3ek90c9bJK1VUkhRpJ99JQ13ivXivWn0wOcajYKcbG5w64SzXeF/6 QcAYRudrhX1/02xMtRtnPRU61Lkx2PbeaEIIx1N1I2mmVXM27iMf6i3Vjdyquqvw9rAjRpgT1tgQ 6rR7mZAfVxviV0Sv/9CqW9288TWcuCttjjlqjb16VKatdAM+95IRpxv1ZL3f9LahMZy0fymbf7eq teLsZKZ7po2FSU49eLWlxPvZeI2yI9CmogCCCT5l2ZThkCfnYTgCPJgaJi8vL97eyHInp7JQXq53 I8RQoovisdQL6BtwHsWEMUpaNC6oaZPFOUFYxgKehPgGfWTiA2MfBhwO/sWzen5mLMzxRY3wNcQX MSxwxX0SdnIUdnKUMiYYYwH+EwpX2mcnXTCsvN+nvRx0GLHt1hDlGHPG6n1syufseVcD2cY5x/Hf 8qf9Puhkh+VdXYHEH8YOYhyD5eJd1+BvOLVg41pw7ug5Z4ymThf/RyDOfHHIlYHJzUHSlGJrpsJj 2Rl9y55Ow2APpadNSerK4uPUM54QC9sR0yT3LDhd0O0D4a6T3O9VgdfOfWVns38A6B0e9AplbmRz dHJlYW0KZW5kb2JqCjIxIDAgb2JqCjw8IC9JRCBbIDxBNzFEQUZFQjBDODlCRTJBNDVDNDE0MjRC MTZBMDk1NT4gPEE3MURBRkVCMEM4OUJFMkE0NUM0MTQyNEIxNkEwOTU1PiBdIC9JbmZvIDIwIDAg UiAvUm9vdCAxOSAwIFIgL1NpemUgMjIgL1R5cGUgL1hSZWYgL1cgWyAxIDIgMSBdIC9GaWx0ZXIg L0ZsYXRlRGVjb2RlIC9MZW5ndGggNzMgPj4Kc3RyZWFtCngBFcjLCYBAFEPRZPyOH3Aj2IEgbmzD vV3ahE1Yz9xHOIREkhLx+UaPMHoka42vwoDayxO7Q4PW2yfvv3zc8WdMmH1lFaSBBHEKZW5kc3Ry ZWFtCmVuZG9iagpzdGFydHhyZWYKMTI1NTMKJSVFT0Y= --Apple-Mail=_B1025CE3-AF9A-4033-836A-4273025E3A79 Content-Disposition: attachment; filename=mp-sketch.mp Content-Type: application/octet-stream; x-unix-mode=0644; name="mp-sketch.mp" Content-Transfer-Encoding: quoted-printable %D=20\module=0D=0A%D=20=20=20[=20=20=20=20=20=20=20file=3Dmp-sketch.mp=0D= =0A%D=20=20=20=20=20=20=20=20version=3D2021.05.13=0D=0A%D=20=20=20=20=20=20= =20=20=20=20title=3D\CONTEXT\=20\METAPOST\=20graphics,=0D=0A%D=20=20=20=20= =20=20=20subtitle=3DSketch=20drawing,=0D=0A%D=20=20=20=20=20=20=20=20=20= author=3DAditya=20Mahajan,=0D=0A%D=20=20=20=20=20=20=20=20=20=20=20= date=3D\currentdate,=0D=0A%D=20=20=20=20=20=20copyright=3D{Aditya=20= Mahajan}]=0D=0A=0D=0A%D=20This=20metapost=20module=20is=20inspired=20by=20= a=20TeX.SE=20question:=0D=0A%D=20= http://tex.stackexchange.com/q/39296/323=0D=0A%D=0D=0A%D=20I=20thought=20= that=20it=20would=20be=20fun=20to=20implement=20a=20similar=20feature=20= in=20MetaPost.=0D=0A%D=0D=0A%D=20To=20use=20this=20package=20in=20= MetaPost:=0D=0A%D=0D=0A%D=20\starttyping=0D=0A%D=20=20=20=20input=20= mp-sketch;=0D=0A%D=0D=0A%D=20=20=20=20beginfig(1)=0D=0A%D=20=20=20=20=20=20= sketchypaths;=20%=20Make=20draw=20and=20fill=20sketchy=0D=0A%D=20=20=20=20= =20=20...=0D=0A%D=20=20=20=20=20=20naturalizepaths;=20%=20Restore=20the=20= value=20of=20draw=20and=20fill=0D=0A%D=20=20=20=20=20=20...=0D=0A%D=20=20= =20=20endfig=0D=0A%D=20\stoptyping=0D=0A%D=0D=0A%D=20The=20code=20is=20= heavily=20inspired=20by=20Hans=20Hagen's=20Metafun=20macros.=0D=0A%D=0D=0A= %D=20The=20macro=20\type{sketchypaths}=20is=20modeled=20after=20= \type{visualizepaths}=20from=0D=0A%D=20\filename{mp-tool}.=0D=0A=0D=0A= def=20sketchypaths=20=3D=0D=0A=20=20=20=20let=20draw=20=3D=20sketchdraw=20= ;=0D=0A=20=20=20=20let=20fill=20=3D=20sketchfill=20;=0D=0Aenddef=20;=0D=0A= =0D=0A%D=20Check=20if=20\filename{mp-tool}=20is=20loaded=0D=0Aif=20not=20= known=20context_tool=20:=0D=0A=20=20let=20normaldraw=20=3D=20draw;=0D=0A=20= =20let=20normalfill=20=3D=20fill;=0D=0A=0D=0A=20=20def=20naturalizepaths=20= =3D=0D=0A=20=20=20=20=20=20let=20fill=20=3D=20normalfill=20;=0D=0A=20=20=20= =20=20=20let=20draw=20=3D=20normaldraw=20;=0D=0A=20=20enddef=20;=0D=0Afi=0D= =0A=0D=0A%D=20The=20variable=20\type{sketch_amount}=20determines=20the=20= amount=20of=20randomness=20in=20the=0D=0A%D=20drawing=0D=0Anumeric=20= sketch_amount;=20sketch_amount=20:=3D=200.75bp;=0D=0A=0D=0A%D=20The=20= variable=20\type{sketch_passes}=20determines=20the=20number=20of=20times=20= the=20path=0D=0A%D=20is=20drawn=0D=0Anumeric=20sketch_passes;=20= sketch_passes=20:=3D=201;=0D=0A=0D=0A%D=20Based=20on=20= \type{randomized}.=20Assumes=20p=20is=20path:=0D=0Anumeric=20= sketch_segments;=20sketch_segments=20:=3D=2020;=0D=0A=0D=0Aprimarydef=20= p=20sketchrandomized=20s=20=3D=20(=0D=0A=20=20=20=20if=20path=20p=20:=0D=0A= =20=20=20=20=20=20=20=20for=20t=20=3D=200=20step=201/sketch_segments=20= until=201-1/sketch_segments=20:=0D=0A=20=20=20=20=20=20=20=20=20=20=20=20= ((point=20=20=20=20=20=20=20(t*arclength(p))=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20on=20p)=20randomshifted=20s)=20..=20= controls=0D=0A=20=20=20=20=20=20=20=20=20=20=20=20((postcontrol=20= (t*arclength(p))=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20on=20p)=20randomshifted=20s)=20and=0D=0A=20=20=20=20=20=20=20=20=20= =20=20=20((precontrol=20=20((t+1/sketch_segments)*arclength(p))=20on=20= p)=20randomshifted=20s)=20..=0D=0A=20=20=20=20=20=20=20=20endfor=0D=0A=20= =20=20=20=20=20=20=20if=20cycle=20p=20:=0D=0A=20=20=20=20=20=20=20=20=20=20= =20=20cycle=0D=0A=20=20=20=20=20=20=20=20else=20:=0D=0A=20=20=20=20=20=20= =20=20=20=20=20=20((point=20arclength(p)=20on=20p)=20randomshifted=20s)=0D= =0A=20=20=20=20=20=20=20=20fi=0D=0A=20=20=20=20else=20:=0D=0A=20=20=20=20= =20=20=20=20p=0D=0A=20=20=20=20fi=0D=0A)=20enddef=20;=0D=0A=0D=0A=0D=0A= %D=20The=20macro=20\type{sketchdraw}=20draws=20the=20randomized=20path.=20= The=0D=0A%D=20\type{expr}=20...=20\type{text}=20trick=20is=20copied=20= from=20the=20definition=20of=0D=0A%D=20\type{drawarrow}=0D=0Adef=20= sketchdraw=20expr=20p=20=3D=0D=0A=20=20=20do_sketchdraw(p)=0D=0Aenddef;=0D= =0A=0D=0Adef=20do_sketchdraw(expr=20p)=20text=20t=20=3D=0D=0A=20=20if=20= (path=20p)=20:=0D=0A=20=20=20=20=20=20for=20i=20=3D=201=20upto=20= max(1,sketch_passes)=20:=0D=0A=20=20=20=20=20=20=20=20normaldraw=20p=0D=0A= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= sketchrandomized=20sketch_amount=0D=0A=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20withtransparency=20("multiply",=20= 1/max(1,sketch_passes))=0D=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20t=20;=0D=0A=20=20=20=20=20=20endfor;=0D=0A=20=20else=20:=0D=0A= =20=20=20=20=20=20normaldraw=20p=20t;=0D=0A=20=20fi=0D=0Aenddef;=0D=0A=0D= =0A%D=20The=20macro=20\type{sketchfill}=20randomizes=20the=20path=20= before=20filling=20it.=0D=0Adef=20sketchfill=20expr=20p=20=3D=0D=0A=20=20= do_sketchfill(p)=0D=0Aenddef=20;=0D=0A=0D=0Adef=20do_sketchfill(expr=20= p)=20text=20t=20=3D=0D=0A=20=20if=20(path=20p)=20:=0D=0A=20=20=20=20=20=20= for=20i=20=3D=201=20upto=20max(1,sketch_passes)=20:=0D=0A=20=20=20=20=20=20= =20=20normalfill=20p=0D=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20sketchrandomized=20sketch_amount=20=0D=0A=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20withtransparency=20("multiply",=20= 1/max(1,sketch_passes))=0D=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20t=20;=0D=0A=20=20=20=20=20=20endfor;=0D=0A=20=20else=20:=0D=0A= =20=20=20=20=20=20normalfill=20p=20t;=0D=0A=20=20fi=0D=0Aenddef;=0D=0A=0D= =0Aendinput;=0D=0A=0D=0A%=20Modified=20example=20from=0D=0A%=20= http://tex.loria.fr/prod-graph/zoonekynd/metapost/metapost.html=0D=0A=0D=0A= beginfig(1)=0D=0A=20=20pair=20A,B,C,O;=0D=0A=20=20A=3D(0,0);=20= B=3D(3cm,0);=20C=3D(1cm,2cm);=0D=0A=0D=0A=20=20O=20-=201/2[B,C]=20=3D=20= whatever=20*=20(B-C)=20rotated=2090;=0D=0A=20=20O=20-=201/2[A,B]=20=3D=20= whatever=20*=20(A-B)=20rotated=2090;=0D=0A=0D=0A=20=20sketchypaths;=0D=0A= =20=20sketch_amount=20:=3D=205bp;=0D=0A=20=20draw=20A--B--C--cycle;=0D=0A= =0D=0A=20=20draw=20O=20withpen=20pencircle=20scaled=204bp;=0D=0A=0D=0A=20= =20sketch_amount=20:=3D=202bp;=0D=0A=20=20draw=20fullcircle=20scaled=20= 2abs(O-A)=20shifted=20O;=0D=0Aendfig=0D=0A= --Apple-Mail=_B1025CE3-AF9A-4033-836A-4273025E3A79 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: inline X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KSWYgeW91ciBxdWVzdGlvbiBpcyBvZiBpbnRlcmVz dCB0byBvdGhlcnMgYXMgd2VsbCwgcGxlYXNlIGFkZCBhbiBlbnRyeSB0byB0aGUgV2lraSEKCm1h aWxsaXN0IDogbnRnLWNvbnRleHRAbnRnLm5sIC8gaHR0cDovL3d3dy5udGcubmwvbWFpbG1hbi9s aXN0aW5mby9udGctY29udGV4dAp3ZWJwYWdlICA6IGh0dHA6Ly93d3cucHJhZ21hLWFkZS5ubCAv IGh0dHA6Ly9jb250ZXh0LmFhbmhldC5uZXQKYXJjaGl2ZSAgOiBodHRwczovL2JpdGJ1Y2tldC5v cmcvcGhnL2NvbnRleHQtbWlycm9yL2NvbW1pdHMvCndpa2kgICAgIDogaHR0cDovL2NvbnRleHRn YXJkZW4ubmV0Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCg== --Apple-Mail=_B1025CE3-AF9A-4033-836A-4273025E3A79--