%!PS-Adobe-3.1 % New Meowrrr Puss De Resistance meow1a.psl % ============================================================== % Copyright c 2019 by Don Lancaster & Synergetics, Box 809, Thatcher, AZ, 85552 % (928) 428-4073 Email: don@tinaja.com Website: http://www.tinaja.com % Consulting services available http://www.tinaja.com/info01.html % All commercial rights and all electronic media rights ~fully~ reserved. % Linking usually welcome. Reposting expressly forbidden. Version 1.1 % A revision of our older Meowwr Puss De Resistance that shows how to % use a triple JPEG-Grid-New Code layering to trace a document into % "raw" PostScript to create ultra compact, clean, sharp, colorized, and % simple text-searchible new code. % A gonzo tutorial is found at https://www.tinaja.com/glib/gonzotut.pdf % A PostScript Reference Manual at % % https://www.adobe.com/content/dam/acom/en/devnet/actionscript/articles/PLRM.pdf % A PostScript Video at https://www.youtube.com/watch?v=C_tWW560tAE % Please verify applicability and suitability to Google Drive ( as well, % as "real" Distiller and GhostScript )for any new insertions. % Fancy apps may require Distiller command line run as //acrodist /F . % At present, your output code is easily made triple Distiller-GoogleDrive-GhostScript % compatible. But the tracing program itself is not yet Google Drive compatible. % IMPORTANT: Change these two lines to switch betweeen tracing code and any result! /want_to_trace { false } store /want_to_see_grid {false} store %%////// Extracted Gonzo Utilities ////// /mt {moveto} def /li {lineto} def /rm {rmoveto} def /rl {rlineto} def /ct {curveto} def /cp {closepath} def /f {fill} def /pd {0 exch neg rl} def /pr { 0 rl} def /pu {0 exch rl} def /pl {neg 0 rl} def /line1 {.06 dup setlinewidth 5 mul /erase exch def} def /line2 {.12 dup setlinewidth 5 mul /erase exch def} def /line3 {.18 dup setlinewidth 5 mul /erase exch def} def /thingridlines {0} def /setgrid { /blocksize exch def translate % simplified blocksize dup scale} def /showgrid {gsave /vblocks exch def /hblocks exch def thingridlines setlinewidth [{0 0 moveto 0 vblocks rlineto stroke} 1 hblocks 1 add] xrpt [{0 0 moveto hblocks 0 rlineto stroke} 1 vblocks 1 add] yrpt fatterborder { gsave newpath 0 0.96 blocksize div dtransform round idtransform setlinewidth pop 2 setlinecap 0 0 moveto hblocks 0 rlineto 0 vblocks rlineto hblocks neg 0 rlineto closepath stroke grestore} if fat5 { gsave newpath 0 0.48 blocksize div dtransform round idtransform setlinewidth pop mark {5 0 moveto 0 vblocks rlineto stroke} 5 hblocks 5 div cvi] xrpt mark {0 5 moveto hblocks 0 rlineto stroke} 5 vblocks 5 div cvi] yrpt grestore} if fatter10 { gsave 18 setwebtint % emphasize here newpath 0 0.96 blocksize div dtransform round idtransform setlinewidth pop mark {10 0 moveto 0 vblocks rlineto stroke} 10 hblocks 10 div cvi] xrpt mark {0 10 moveto hblocks 0 rlineto stroke} 10 vblocks 10 div cvi] yrpt grestore} if grestore} def /fatterborder {true } store /fat5 {true} store /fatter10 { true} store /showdots { false } store /dot { showdots { currentpoint newpath 0.150 0 360 arc fill }if} def /mdot { mt dot} def /random {rand 65536 div 32768 div mul cvi} def % as in -- 6 random -- /gonzofont {dup type cvlit /arraytype eq {exch findfont exch makefont} {exch findfont exch scalefont} ifelse setfont mark /spacewidth ( ) stringwidth pop /cstretch cvx /add cvx /sstretch cvx /add cvx /def cvx currentfont dup backcdict exch (F?) dup 1 14 index (xxxxx) cvs 4 get put put /setfont cvx ] cvx def} def 50 dict /backcdict exch def % used "backwards" during compiling to get % fontname given the "made" font dictionary /cstretch 0 store /sstretch 0 store % repeats [ proc distance trips] xrpt /xrpt{gsave aload pop /trips exch def /dist exch def /rproc exch def trips { gsave rproc grestore dist 0 translate } repeat grestore} def /yrpt{gsave aload pop /trips exch def /dist exch def /rproc exch def trips { gsave rproc grestore 0 dist translate } repeat grestore} def % timing utilities. use stopwatchon and stopwatchoff for simple % one shot timing. For multiple time totals, use resettimer % starttimer stoptimer ... starttimer stoptimer reporttimer /mergestr {2 copy length exch length add string dup dup 4 3 roll 4 index length exch putinterval 3 1 roll exch 0 exch putinterval} def /stopwatchoff {stoptimer reporttimer} def % for single shots /stopwatchon {resettimer starttimer} def % for single shots /reporttimer {mytime 1000 div (\rElapsed time: ) print 20 string cvs print ( seconds.\r) print flush} def % to host /resettimer {/mytime 0 def} def % reset timer /starttimer {usertime /mytimenow exch def} def % add to time so far /stoptimer {usertime mytimenow sub /mytime exch mytime add def} def % for multiple timing intervals % curvetrace - creates a smooth curved path from a data point list. % enter with currentpoint set and absolute array. % 0 0 as initial data appends path; any other values % creates new path /curvetrace {/curvelist exch def tension 0 eq {/tension .000001 def} if curvelist length 3 div 1 sub cvi /#triads exch def /ptr 0 def firstpoint morepoint} def /tension 2.83301 def % default value for best fit SLIGHTLY REVISED! /showtick false def % don't show points /ticklen 15 def % length of ticks /tickhead ticklen 4 div def /prvx { curvelist ptr 3 sub get } def /curx { curvelist ptr get } def /prvy { curvelist ptr 2 sub get } def /cury { curvelist ptr 1 add get } def /prva { curvelist ptr 1 sub get } def /cura { curvelist ptr 2 add get 180 sub} def /showtic1 { showtick true eq {gsave currentpoint newpath translate cura 180 add rotate ticklen neg 2 div 0 moveto ticklen 0 rlineto tickhead neg dup rlineto tickhead dup rlineto tickhead dup neg exch rlineto 0 setlinewidth stroke 0 ticklen neg 2 div moveto 0 ticklen rlineto stroke grestore} if }def /firstpoint { curx cury 2 copy abs exch abs add 0 eq {pop pop currentpoint curvelist exch 1 exch put curvelist exch 0 exch put}{moveto} ifelse showtic1 /ptr ptr 3 add def}def /morepoint {#triads { curx prvx sub dup mul cury prvy sub dup mul add sqrt tension div /zdist exch def prva cos zdist mul prvx add prva sin zdist mul prvy add cura cos zdist mul curx add cura sin zdist mul cury add curx cury curveto showtic1 /ptr ptr 3 add def} repeat} def /showtick false def % insert image proc /jpegimageprocwithlink { % hoffset voffset hres vres urlfrom urlto save /snap2 exch def /inurllink exch store % grab link filename /infilename exch store % grab passed pix file /photoscale exch store /vpixels exch store /hpixels exch store % (\nvpixels = )print vpixels == % (\nhpixels = )print hpixels == % (\photoscale = ) print photoscale == % (\ninurllink = ) print inurllink == % (\ninfilemane = ) print infilename == translate % adjust position for final figure ??? inurllink setareaurl % autolink sizing /DeviceRGB setcolorspace % pick color model 0 0 translate % set page position hpixels vpixels scale % magnify unit square photoscale dup scale /infile infilename (r) file def % establish input read file /Data {infile /DCTDecode filter} def % define a data source << % start image dicationary /ImageType 1 % always one /Width hpixels % JPEG width in pixels /Height vpixels % JPEG height in pixels /ImageMatrix [hpixels 0 0 vpixels neg 0 vpixels ] /DataSource Data % proc to get filtered JPEG /BitsPerComponent 8 % color resolution /Decode [0 1 0 1 0 1] % per red book 4.10 >> image % call the image operator ypos snap2 restore /ypos exch def } def /setareaurl { % for auto include routine /cururlname exch store mark % start pdfmark /Rect [ 0 0 hpixels photoscale mul vpixels photoscale mul ] /Border [ 0 0 0] % [0 0 0 ] = none; [0 0 2] = debug /Color [ .7 0 0 ] /Action <> /Subtype /Link /ANN % annotation type pdfmark % call pdf operators } def % ///////// (A) WEB FRIENDLY COLOR UTILITIES ///////////// % tintmat is a self-generating list of 216 triple color values /webtintmat [ 0 1 5 { /a exch store 0 1 5 { /b exch store 0 1 5 { 5 div b 5 div a 5 div }for } for } for ] def % setwebtint accepts a color number 0 to 215 and then % sets the PostScript color generator for later use... /setwebtint { abs cvi 216 cvi mod % restrict range webtintmat exch 3 mul 3 getinterval % get values from table aload pop setrgbcolor} def % and set them % The blocks are arranged as red to the right, green % up in order of increasing blue. % Some "pure color" sequences are % red: 0 1 2 3 4 5 % orange: 0 7 8 15 16 23 (sort of) % yellow: 0 7 14 21 28 35 % green: 0 6 12 18 24 30 % aqua: 0 42 84 126 168 210 % blue: 0 36 72 108 144 180 % magenta: 0 37 74 111 148 185 % purple 0 73 73 110 147 183 (sort of) % gray 0 43 86 129 172 215 % ///////////// DEMO /ypos 0 store % ////////////////////// want_to_trace { % code used by tracing program but not yet Google Drive compatible /imagelocaldirectory (C:/Users/don/Desktop/canal/images/) store % sin fwd slashes for win /imageremotedirectory (http://www.tinaja.com/canal/images/) store % sin fwd slashes for chrome /imageurl imageremotedirectory (prep1.jpg) mergestr store % goto remote image /imagelocalsource imagelocaldirectory (prep1.jpg) mergestr store /imagelocalsource (C:/Users/don/Desktop/google_drive/Meowrrr/meowwr1a.jpg) store gsave 60 20 % page translate ( data for jpegimageprocwithlink ) 1033 1453 % hpixels and vpixels 0.45 % photoscale imagelocalsource % local jpg source imageurl % image url on clickthru jpegimageprocwithlink grestore } if /black {0 setwebtint} store /ypos 0 store % ////////////////////// 30 setwebtint % this puts a grid between tracer and tracee 50 50 10 setgrid want_to_see_grid { 50 62 showgrid % uncomment to show grid during tracing } if 0 setwebtint /bodycolor { 137 setwebtint } store % global color changes /darkerbodycolor { 59 setwebtint} store /stripecolor {45 setwebtint } store /debugcolor {5 setwebtint } store /batcolor { 212 setwebtint } store /batedgecolor { 192 setwebtint} store /glovecolor { 215 setwebtint } store /black {0 setwebtint} store /white {215 setwebtint } store /darkgrey { 86 setwebtint } store /heavyline {0.24 setlinewidth} store /lighterline {0.17 setlinewidth} store 1 setlinecap 1 setlinejoin % //// back arm ///// gsave [11.6 35 47 % main back arm outline 13.0 38 95 % cusp 13.0 38 60 % portions get overwritten below 15.5 39.7 0 20.7 34 -90 20 32 180 18.5 33 115 15.5 36 180 12 34.7 -150 ] curvetrace gsave darkerbodycolor fill grestore stripecolor heavyline stroke grestore % rear arm stripes [13.3 38.3 -55 % leftmost 13.8 36.2 -100 % cusp 13.8 36.2 60 14.5 39.5 115 ] curvetrace stripecolor fill [15.3 39.6 135 % center 15.5 36.8 -90 % cusp 15.5 36.8 65 16.8 39.5 100 ] curvetrace stripecolor fill [ 18 39 140 % right arm 17 36.7 -120 % cusp 17 36.7 60 18.4 37.2 45 ] curvetrace stripecolor fill % //// rear ear //// [28 44 41 % rear ear outline 33 46 26 % cusp 33 46 -55 31.7 41 -120 ] curvetrace gsave darkerbodycolor fill grestore heavyline stripecolor stroke [29.8 43.1 60 % white portion 32.6 45 45 % cusp 32.6 45 -90 31 41.8 -150] curvetrace gsave white fill grestore stripecolor heavyline stroke % ////////////// tail area ////////////// % body colored tail portion bodycolor gsave [ 31.3 20.0 10 34.7 26 98 34.2 27.6 106 % cusp 34.2 27.6 -10 37.4 21.2 -102 34.1 16.1 -150 ] curvetrace gsave bodycolor fill grestore % comment until stripes are finished stripecolor lighterline stroke grestore stripecolor % set for group % tail stripes, lowest first gsave % lowest tail stripe 34.5 16.6 mt [34.7 16.6 110 33.0 19.8 130 % cusp 33.0 19.8 16 36.4 18.0 -120 ] curvetrace f grestore gsave % next higher 37.1 19.0 mt [37.1 19.0 120 34.6 21.5 150 % cusp 34.6 21.5 35 37.7 21.7 -36 ] curvetrace fill grestore gsave % third tail stripe from bottom 37.5 23.3 mt [37.5 23.1 150 35.6 23.7 150 % cusp 35.6 23.7 40 37.2 24.7 35 ] curvetrace fill grestore gsave % top tail stripe 36.7 25.4 mt [36.8 25.2 175 35.5 25.2 175 % cusp 35.5 25.2 80 35.8 26.7 80 36.5 26 -55 ] curvetrace fill grestore % tail edge overlay gsave [ 31.3 20.0 9 % left main tail 34.8 26 99 30.4 29.3 185 % cusp 30.4 29.3 62 35.3 29.0 -43 37.7 24.0 -86 % far right 34.3 16.0 -150 ] curvetrace heavyline stroke % main left leg 25.3 25.3 mt [25.3 25.3 -47 31.1 20 -45 35.8 11 -87 33.5 6.5 180 30.8 8 115 28.5 12 120 27 15.7 90 % cusp 27 15.7 -90 27.3 14.1 -75 % cusp 27.3 14.1 160 21 23.2 96 ] curvetrace gsave bodycolor fill grestore stripecolor heavyline stroke % /// left leg stripes gsave % lowest left leg stripe 35.3 8.2 mt [35.3 8.2 200 31.8 9.2 130 % cusp 31.8 9.2 -14 35.9 10.8 45 35.7 9 95 ] curvetrace f grestore gsave % second up left leg stripe 35.8 11.8 mt [35.8 11.8 200 30.4 12.8 150 % cusp 30.4 12.8 0 35.2 14.0 30 ] curvetrace f grestore gsave % third up left leg stripe 34.8 15.2 mt [34.8 15.2 -150 28.3 15.7 170 % cusp 28.3 15.7 35 33.8 16.9 -20 ] curvetrace f grestore gsave % fourth up left leg stripe 32.2 18.8 mt [32.2 18.8 -160 26.8 17 -160 % cusp 26.8 17 65 30.2 20.7 40 ] curvetrace f grestore gsave % fifth up left leg stripe 30 21 mt [30 21 -160 24.3 18.7 -150 % cusp 24.3 18.7 70 28.3 22.5 30 ] curvetrace f grestore gsave % top left leg stripe 27.7 23 mt [27.7 23 -155 22.8 20.7 -150 % cusp 22.8 20.7 65 26.3 24.4 40 ] curvetrace f grestore % left foot heavyline 1 setlinejoin 1 setlinecap gsave % lowest 31.6 6.8 mt [ 31.6 6.8 -125 34 2.2 -25 38.8 2.6 80 35.4 4.9 180 ] curvetrace stroke 38.9 2.7 mt % middle left toe [ 38.9 2.6 -17 40.4 3.7 90 38.3 5.7 155 0 ] curvetrace stroke 40.6 3.4 mt % top of left foot [ 40.6 3.4 -10 41.8 4.3 90 38 7 180 35.2 7.3 170] curvetrace stroke grestore % //// right foot gsave 20 6.4 mt % right toe, etc [20 6.4 -155 17 6 -170 14.7 3.9 -90 15.8 2.1 18 ] curvetrace stroke 17.6 5.1 mt % middle toe [17.6 5.1 -150 15.8 2.4 -90 17.4 1.5 20] curvetrace stroke 19.1 4.7 mt % left toe ( as seen from the cat ) [19.1 4.7 -160 17.3 2.2 -90 19 1 0 23 2.9 30 25.4 4.3 45 25.2 6.8 165] curvetrace stroke grestore % //// right body main gsave 15.8 23.9 mt % right body patch [ 15.8 23.9 -20 17 23.6 -10 % cusp 17 23.6 -76 18 18 -75 17 20 110 ] curvetrace gsave bodycolor fill grestore lighterline stripecolor stroke grestore 15.8 23.8 mt % right body heavy line [ 15.8 23.8 -80 17.9 18 -60 % cusp 19.7 15.2 -45 28.4 12 35 ] curvetrace heavyline stripecolor stroke grestore % ///////////// right leg ///////// gsave 19.7 15.2 mt [ 19.7 15.2 -45 28.4 12 35 % cusp 28.4 12 -145 23.1 8.6 -155 % cusp 23.1 8.6 23 24.8 9.4 20 % cusp 24.8 9.4 -65 25.2 7 -90 23.4 5.5 180 18 10 90 19.7 15.2 65 ] curvetrace gsave bodycolor fill grestore heavyline stripecolor stroke grestore % right leg bottom stripe 21.8 5.8 mt [21.8 5.8 60 22.6 7.8 82 % cusp 22.6 7.8 155 19.7 6.9 -135 ] curvetrace stripecolor fill 18.5 8 mt % right leg mid stripe [ 18.5 8 0 21.4 9.5 60 % cusp 21.4 9.5 150 18.2 10.8 135 18 9 -70 ] curvetrace stripecolor fill 18.3 12 mt % right leg top stripe [ 18.3 12 -40 22 11 0 % cusp 22 11 150 19 13.8 150 ] curvetrace stripecolor fill 15.7 28.1 mt % upper right chest lightline and body fill [15.7 28.1 85 18.5 32.8 15 19.8 33 20 % cusp 19.8 33 75 20.3 34.8 80 % end heavy 21 34.2 -45 % cusp 21 34.2 -120 20.3 32.2 -135 18.0 30 -109 17.2 27.7 -87 % cusp 17.2 27.7 0 16.5 27.7 160 ] curvetrace gsave bodycolor fill grestore lighterline stroke gsave 15.7 28.1 mt % upper right chest heavyline [15.7 28.1 85 18.5 32.8 15 19.8 33 20 % cusp 19.8 33 75 20.3 34.8 80] curvetrace heavyline stroke grestore % bat bottom area 8.6 28.6 moveto % bat bottom [ 8.6 28.6 170 6.9 27.5 -90 8.9 26.3 0 10.3 27.3 90 8.6 28.6 180] curvetrace gsave batcolor fill grestore batedgecolor stroke %%%%%%%%%%%%% 7.6 30.8 mt % lower bat shaft [7.8 30.8 -90 7.6 27.6 -90 % cusp 7.6 27.6 -50 9.6 27.6 75 10.1 29.9 75 9.8 30.6 110] curvetrace gsave batcolor fill grestore batedgecolor stroke 7 32.6 mt % hand bat overlay overwrites lowest finger [7 32.6 -180 6.6 31.8 -90 7.8 31 -30 9.9 30.4 -25] curvetrace stripecolor heavyline stroke [ 7.4 38.7 -100 % second finger down 7.2 37.5 -90 8.7 36 0 10 36.5 20 ] curvetrace heavyline stroke [7.3 32.2 125 % left second finger up 6.5 33.7 90 6.8 34.2 10] curvetrace heavyline stroke [7.2 33.7 150 % left third finger up 7.2 35.8 55] curvetrace heavyline stroke 10.8 36 mt % left fourth finger up [10.8 36 -105 8.5 34.6 180 7.3 37 60] curvetrace heavyline stroke gsave 11.7 12 moveto [11.7 32.1 85 % left thumb 11.2 33.4 150 ] curvetrace stripecolor heavyline stroke [11.7 33 mt 11.7 33 75 12 34 90 10.5 35.4 185] curvetrace stripecolor heavyline stroke grestore gsave 8.6 39.6 mt % top bat [8.6 39.6 85 9.7 58 85 12.5 60.3 0 14.9 57 -100 11.2 39 -100 ] curvetrace gsave batcolor fill grestore batedgecolor stroke 10 39 mt % top finger over bat [ 10 39.2 180 8.7 39.5 150] curvetrace stripecolor stroke 8.4 40.5 mt [8.6 40.5 -205 7.3 39.1 -90 10 37.6 0 ] curvetrace stripecolor stroke 13 38 mt % thumb bat overlay [13 38 97 11 40.1 -175 10 38 -90 10.5 36 0 11.8 38 80] curvetrace gsave glovecolor fill grestore stripecolor stroke 11 58 moveto % top bat highlight [10.8 58 -30 14.1 57.8 35 ] curvetrace batedgecolor stroke % ///// left arm 9.7 30.6 mt % body fill [9.7 30.6 80 11.7 32 -10 % cusp 11.7 32 -45 16.4 27.8 -12 20.8 27.7 0 % cusp 20.8 27.7 67 24 31.2 0 25.8 27.5 -90 23.5 23.8 -150 20.5 23.2 180 15 24.3 150 9.7 30.6 110 ] curvetrace bodycolor fill % left arm stripes gsave 10.1 29.6 mt % leftmost arm stripe [ 10.1 29.6 35 12.8 30.1 0 % cusp 12.8 30.1 -145 10.6 28.7 -145 ] curvetrace stripecolor fill grestore gsave 11.6 27.4 mt % second leftmost arm stripe [11.6 27.4 50 14.1 28.6 0 % cusp 14.1 28.6 -150 12.8 26 -100 ] curvetrace stripecolor fill grestore gsave 13.8 25.1 mt % third leftmost arm stripe [13.8 25.1 50 15.6 26.9 50 % cusp 15.6 26.9 -90 15 24.3 -120 ] curvetrace stripecolor fill grestore gsave 16 23.9 mt % fourth leftmost arm stripe [16.1 23.9 65 17.1 26.5 70 % cusp 17.1 26.5 -40 17.8 23.3 -90 ] curvetrace stripecolor fill grestore gsave 19.1 23.2 mt % fifth leftmost arm stripe [19.1 23.2 70 19.7 26.1 110 % cusp 19.7 26.1 -40 21 23.2 -90 ] curvetrace stripecolor fill grestore gsave 22.5 23.3 mt % sixth leftmost arm stripe [22.5 23.3 110 21.7 25.6 110 % cusp 21.7 25.6 -30 24 24 -90 ] curvetrace stripecolor fill grestore gsave 25 25 mt % seventh leftmost arm stripe [25 25 150 23.0 27.0 100 % cusp 23.0 27.0 0 25.9 27.3 -60 ] curvetrace stripecolor fill grestore gsave 25.8 28.4 mt % eighth leftmost arm stripe [25.8 28.4 170 23.0 28.4 170 % cusp 23.0 28.7 50 25.3 30.2 10 ] curvetrace stripecolor fill grestore 9.7 30.6 mt % outline [9.7 30.6 80 11.7 32 -10 % cusp 11.7 32 -45 16.4 27.8 -12 20.8 27.7 0 % cusp 20.8 27.7 67 24 31.2 0 25.8 27.5 -90 23.5 23.8 -150 20.5 23.2 180 15 24.3 150 9.7 30.8 110 ] curvetrace heavyline stripecolor stroke %%%%%%%%%%% head outline %%%%% % facefill has three parts. Code changes twice on edit! [17 40.6 -77 % left outer code from main outer 19.1 36 -59 20.8 34.2 -50 % cusp 21 34.3 135 % nose divider from above 23.0 37.8 -5 26.8 34.5 0 29.2 35 0 30 34 0 31.5 35 0 32.3 33.4 -90 % cusp 32.3 33.4 78 % and back to the facefill 32.7 34.9 90 32 36 154 % cusp 32 36 75 31 42 130 25 44.8 -180 22 43 -160 18.2 40.9 -170 % cusp 18.2 40.9 170 17 40.6 150 ] curvetrace true { bodycolor fill}{newpath} ifelse % false if editing [17 40.6 -77 % main outer head 19.1 36 -59 23 32.9 -40 26.6 31.1 0 % chin bottom 30.1 32 27 32.7 34.9 90 32 36 154 % cusp 32 36 75 31 42 130 25 44.8 -180 22 43 -160 18.2 40.9 190 17 40.6 -150 ] curvetrace heavyline stripecolor stroke [ 21 34.3 135 % nose divider 23.0 37.7 -5 26.8 34.6 0 29.2 35 0 30 34 0 31.5 35 0 32.3 33.4 -90 ] curvetrace lighterline stripecolor stroke %%%%%%%%%%%%%% % eyes [25.7 39.2 -47 % right eye group 29.2 36.4 -20 % cusp 29.2 36.4 -155 27.5 35.6 175 26.1 38.8 90] curvetrace gsave white fill grestore stripecolor stroke [28 37 -110 % cat's right eye 27.5 36 -90 % cusp 27.5 36 20 28.8 36.5 45] curvetrace stripecolor fill [32.3 38.2 -145 % left eye group 30.5 36.4 -95 31.3 36.3 0 32.1 37 60 ] curvetrace gsave white fill grestore stripecolor stroke [ 32.3 37.8 -150 % left eye 31.5 37 -100 % cusp 31.5 37 -70 32.3 37.1 20 ] curvetrace stripecolor fill %%%%%%%%%%%% 24.3 31.9 mt % left neck detail 24 31.2 lineto stripecolor stroke 26.3 40.6 mt % eyebrows [26.3 40.6 25 28 39.5 -48 29.2 38.3 5 % cusp 29.2 38.3 -160 27.4 39 115 26.3 40.6 145 ] curvetrace stripecolor fill 32 40 moveto % right eyebrow [32 40 -125 30.6 38 -135 % cusp 30.6 38 25 32 39.3 90 32 40 100 ] curvetrace stripecolor fill % //////////// whiskers 21.7 31.3 mt % bot left [21.7 31.3 28 28 33.1 2] curvetrace darkgrey lighterline stroke 21.3 32.3 mt % mid left [21.3 32.3 26 28.3 33.4 -5] curvetrace lighterline stroke 21.3 33.3 mt % top left [21.4 33.4 23 28.5 33.8 -12 ] curvetrace lighterline stroke 31.1 33.4 mt % bottom right [31.1 33.4 -7 37.2 33.5 5 ] curvetrace lighterline stroke 31.5 34 mt % mid right whisker [31.5 34 11 37 34.8 15] curvetrace lighterline stroke 31.8 34.5 mt % top right whisker [31.8 34.5 20 36.9 35.8 28] curvetrace lighterline stroke % ////// grin and nose //// 21.9 36.2 mt % upper left grin [ 21.9 36.2 25 24.3 36 -25 ] curvetrace darkgrey heavyline stroke [23.1 36.4 -70 % smile 26.4 32.1 -5 29.8 33.4 65 % cusp 29.8 33.4 -125 30.2 32.3 -10 ] curvetrace darkgrey heavyline stroke 29.5 33.7 mt % nose [29.5 33.7 90 30 34.7 0 30.9 34.2 -90 29.8 33.3 180 29.5 33.7 90 ] curvetrace darkgrey fill % /// ears [22.8 40.9 150 % near outline 26.2 47.9 37 % cusp 26.2 47.9 -63 27.4 42.3 -85 ] curvetrace gsave darkerbodycolor fill grestore stripecolor heavyline stroke [23.6 41.1 90 % inside front 25.8 46.9 60 % cusp 25.8 46.9 -70 26.7 42.0 -70 % cusp 26.7 42.0 -150 23.6 41.1 183] curvetrace gsave white fill grestore lighterline stripecolor stroke [22.9 40.9 20 % near ear bottom left 23.5 41.1 20] curvetrace lighterline stripecolor stroke [26.8 42.0 20 % near ear bottom right 27.3 42.2 20] curvetrace lighterline stripecolor stroke % head stripes [ 18.2 41 -80 % leftmost head stripe 19.8 38 -65 % cusp 19.8 38 105 19.4 41.2 95 18.2 41 180] curvetrace stripecolor fill [19.8 41.8 -50 % second from left 21.3 39.2 -55 % cusp 21.3 39.2 85 21.3 42.7 100] curvetrace stripecolor fill [27.5 44.3 -80 % third from left 27.7 42.8 -90 27.8 41.3 -90 % cusp 27.8 41.3 60 28.5 44 -100 ] curvetrace stripecolor fill [ 29.1 43.7 -80 % fourth from left 29 40.7 -90 % cusp 29 40.7 70 30 43 100 ] curvetrace stripecolor fill [ 30.5 42.4 80 % fifth from left 30.6 40.4 -90 % cusp 30.6 40.4 45 31.3 42 90 ] curvetrace stripecolor fill % //////////// showpage %EOF