From marshall@windsor.software.org Tue Feb 18 14:29:31 1992 Received: from gawain.cif.rochester.edu by uhura.cc.rochester.edu (4.1/1.16) id AA10790; Tue, 18 Feb 92 14:29:13 EST Received: from software (SOFTWARE.SOFTWARE.ORG) by gawain.cif.rochester.edu (4.1/1.15) id AA22868; Tue, 18 Feb 92 14:25:44 EST Received: by software (/\==/\ Smail3.1.25.1 #25.4) id ; Tue, 18 Feb 92 14:27 EST Received: by windsor.software.org (/\==/\ Smail3.1.25.1 #25.4) id ; Tue, 18 Feb 92 14:27 EST Message-Id: Date: Tue, 18 Feb 92 14:27 EST From: marshall@software.org (Eric Marshall) To: balloon@gawain.cif.rochester.edu Subject: PostScript code for drawing balloon sculptures Status: OR Here is some PostScript code which will allow the printing of some simple balloon sculptures. The shar file below contains the dachshund, dog, giraffe, moose, and mouse shapes. This is just a start to get things rolling. Print 'em out and let me know what you think. I'll be working on more PostScript primitives to allow more complicated shapes to be drawn. Eric Marshall Software Productivity Consortium SPC Building 2214 Rock Hill Road Herndon, VA 22070 (703) 742-7153 ARPANET: marshall@software.org ----- 8< ----- 8< ----- 8< ----- 8< ----- 8< ----- 8< ----- 8< ----- 8< ----- #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh 'bubble.ps' <<'END_OF_FILE' X%! X/inch { 72.27 0.5 mul mul } def X X/bubble_end_radius 0.5 inch def X/bubble_end_diameter bubble_end_radius 2 mul def X X/bubble { % rotation length => - X /bubble_length exch def X X rotate X X % draw the bubble capsule shape X bubble_end_radius bubble_end_radius neg moveto X bubble_length bubble_end_diameter sub 0 rlineto X currentpoint bubble_end_radius add bubble_end_radius 270 90 arc X bubble_end_diameter bubble_length sub 0 rlineto X currentpoint bubble_end_radius sub bubble_end_radius 90 270 arc closepath X X % fill in the bubble with white X gsave X 1 setgray fill X grestore X X % outline the bubble with black X stroke X X % move to the end of the bubble X bubble_length 0 translate 0 0 moveto X} bind def X X X/double_bubble { % rotation length => - X exch rotate X X dup X X % if we are pointing up, draw right bubble then left bubble X matrix currentmatrix 1 get 0 lt { X gsave X 0 bubble_end_radius 2 div neg translate X 0 exch bubble X grestore X X gsave X 0 bubble_end_radius 2 div translate X 0 exch bubble X grestore X } { X % we are pointing down, draw left bubble then right bubble X gsave X 0 bubble_end_radius 2 div translate X 0 exch bubble X grestore X X gsave X 0 bubble_end_radius 2 div neg translate X 0 exch bubble X grestore X } ifelse X X % rotate so that it looked like two /bubble's were called X 180 rotate X} bind def X X X/tail_end_radius 0.1 inch def X/tail_end_diameter tail_end_radius 2 mul def X X/tail { % rotation length => - X /tail_length exch def X X rotate X X % draw the tail shape X tail_length tail_end_diameter sub tail_end_radius moveto X tail_end_diameter tail_length sub 0 rlineto X currentpoint tail_end_radius sub tail_end_radius 90 270 arc X tail_length tail_end_diameter sub 0 rlineto X X % fill in the tail with white X gsave X 1 setgray fill X grestore X X % outline the tail with black X stroke X X % move to the start of the tail X tail_length tail_end_diameter sub 0 translate 0 0 moveto X} bind def END_OF_FILE if test 1995 -ne `wc -c <'bubble.ps'`; then echo shar: \"'bubble.ps'\" unpacked with wrong size! fi # end of 'bubble.ps' fi if test -f 'dachshund.ps' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'dachshund.ps'\" else echo shar: Extracting \"'dachshund.ps'\" \(2197 characters\) sed "s/^X//" >'dachshund.ps' <<'END_OF_FILE' X%! X/inch { 72.27 0.5 mul mul } def X X/bubble_end_radius 0.5 inch def X/bubble_end_diameter bubble_end_radius 2 mul def X X/bubble { % rotation length => - X /bubble_length exch def X X rotate X X % draw the bubble capsule shape X bubble_end_radius bubble_end_radius neg moveto X bubble_length bubble_end_diameter sub 0 rlineto X currentpoint bubble_end_radius add bubble_end_radius 270 90 arc X bubble_end_diameter bubble_length sub 0 rlineto X currentpoint bubble_end_radius sub bubble_end_radius 90 270 arc closepath X X % fill in the bubble with white X gsave X 1 setgray fill X grestore X X % outline the bubble with black X stroke X X % move to the end of the bubble X bubble_length 0 translate 0 0 moveto X} bind def X X X/double_bubble { % rotation length => - X exch rotate X X dup X X % if we are pointing up, draw right bubble then left bubble X matrix currentmatrix 1 get 0 lt { X gsave X 0 bubble_end_radius 2 div neg translate X 0 exch bubble X grestore X X gsave X 0 bubble_end_radius 2 div translate X 0 exch bubble X grestore X } { X % we are pointing down, draw left bubble then right bubble X gsave X 0 bubble_end_radius 2 div translate X 0 exch bubble X grestore X X gsave X 0 bubble_end_radius 2 div neg translate X 0 exch bubble X grestore X } ifelse X X % rotate so that it looked like two /bubble's were called X 180 rotate X} bind def X X X/tail_end_radius 0.1 inch def X/tail_end_diameter tail_end_radius 2 mul def X X/tail { % rotation length => - X /tail_length exch def X X rotate X X % draw the tail shape X tail_length tail_end_diameter sub tail_end_radius moveto X tail_end_diameter tail_length sub 0 rlineto X currentpoint tail_end_radius sub tail_end_radius 90 270 arc X tail_length tail_end_diameter sub 0 rlineto X X % fill in the tail with white X gsave X 1 setgray fill X grestore X X % outline the tail with black X stroke X X % move to the start of the tail X tail_length tail_end_diameter sub 0 translate 0 0 moveto X} bind def X X X% The basic animal shape X75 450 translate X X-45 2 inch bubble X-45 2 inch double_bubble X-90 8 inch bubble X-90 2 inch double_bubble X-45 2 inch bubble X 45 3 inch double_bubble X 45 3 inch bubble X Xshowpage END_OF_FILE if test 2197 -ne `wc -c <'dachshund.ps'`; then echo shar: \"'dachshund.ps'\" unpacked with wrong size! fi # end of 'dachshund.ps' fi if test -f 'dog.ps' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'dog.ps'\" else echo shar: Extracting \"'dog.ps'\" \(2198 characters\) sed "s/^X//" >'dog.ps' <<'END_OF_FILE' X%! X/inch { 72.27 0.5 mul mul } def X X/bubble_end_radius 0.5 inch def X/bubble_end_diameter bubble_end_radius 2 mul def X X/bubble { % rotation length => - X /bubble_length exch def X X rotate X X % draw the bubble capsule shape X bubble_end_radius bubble_end_radius neg moveto X bubble_length bubble_end_diameter sub 0 rlineto X currentpoint bubble_end_radius add bubble_end_radius 270 90 arc X bubble_end_diameter bubble_length sub 0 rlineto X currentpoint bubble_end_radius sub bubble_end_radius 90 270 arc closepath X X % fill in the bubble with white X gsave X 1 setgray fill X grestore X X % outline the bubble with black X stroke X X % move to the end of the bubble X bubble_length 0 translate 0 0 moveto X} bind def X X X/double_bubble { % rotation length => - X exch rotate X X dup X X % if we are pointing up, draw right bubble then left bubble X matrix currentmatrix 1 get 0 lt { X gsave X 0 bubble_end_radius 2 div neg translate X 0 exch bubble X grestore X X gsave X 0 bubble_end_radius 2 div translate X 0 exch bubble X grestore X } { X % we are pointing down, draw left bubble then right bubble X gsave X 0 bubble_end_radius 2 div translate X 0 exch bubble X grestore X X gsave X 0 bubble_end_radius 2 div neg translate X 0 exch bubble X grestore X } ifelse X X % rotate so that it looked like two /bubble's were called X 180 rotate X} bind def X X X/tail_end_radius 0.1 inch def X/tail_end_diameter tail_end_radius 2 mul def X X/tail { % rotation length => - X /tail_length exch def X X rotate X X % draw the tail shape X tail_length tail_end_diameter sub tail_end_radius moveto X tail_end_diameter tail_length sub 0 rlineto X currentpoint tail_end_radius sub tail_end_radius 90 270 arc X tail_length tail_end_diameter sub 0 rlineto X X % fill in the tail with white X gsave X 1 setgray fill X grestore X X % outline the tail with black X stroke X X % move to the start of the tail X tail_length tail_end_diameter sub 0 translate 0 0 moveto X} bind def X X X% The basic animal shape X150 450 translate X X-45 2 inch bubble X-45 3 inch double_bubble X-90 3 inch bubble X-90 3 inch double_bubble X-45 3 inch bubble X 45 3 inch double_bubble X 45 3 inch bubble X Xshowpage END_OF_FILE if test 2198 -ne `wc -c <'dog.ps'`; then echo shar: \"'dog.ps'\" unpacked with wrong size! fi # end of 'dog.ps' fi if test -f 'giraffe.ps' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'giraffe.ps'\" else echo shar: Extracting \"'giraffe.ps'\" \(2198 characters\) sed "s/^X//" >'giraffe.ps' <<'END_OF_FILE' X%! X/inch { 72.27 0.5 mul mul } def X X/bubble_end_radius 0.5 inch def X/bubble_end_diameter bubble_end_radius 2 mul def X X/bubble { % rotation length => - X /bubble_length exch def X X rotate X X % draw the bubble capsule shape X bubble_end_radius bubble_end_radius neg moveto X bubble_length bubble_end_diameter sub 0 rlineto X currentpoint bubble_end_radius add bubble_end_radius 270 90 arc X bubble_end_diameter bubble_length sub 0 rlineto X currentpoint bubble_end_radius sub bubble_end_radius 90 270 arc closepath X X % fill in the bubble with white X gsave X 1 setgray fill X grestore X X % outline the bubble with black X stroke X X % move to the end of the bubble X bubble_length 0 translate 0 0 moveto X} bind def X X X/double_bubble { % rotation length => - X exch rotate X X dup X X % if we are pointing up, draw right bubble then left bubble X matrix currentmatrix 1 get 0 lt { X gsave X 0 bubble_end_radius 2 div neg translate X 0 exch bubble X grestore X X gsave X 0 bubble_end_radius 2 div translate X 0 exch bubble X grestore X } { X % we are pointing down, draw left bubble then right bubble X gsave X 0 bubble_end_radius 2 div translate X 0 exch bubble X grestore X X gsave X 0 bubble_end_radius 2 div neg translate X 0 exch bubble X grestore X } ifelse X X % rotate so that it looked like two /bubble's were called X 180 rotate X} bind def X X X/tail_end_radius 0.1 inch def X/tail_end_diameter tail_end_radius 2 mul def X X/tail { % rotation length => - X /tail_length exch def X X rotate X X % draw the tail shape X tail_length tail_end_diameter sub tail_end_radius moveto X tail_end_diameter tail_length sub 0 rlineto X currentpoint tail_end_radius sub tail_end_radius 90 270 arc X tail_length tail_end_diameter sub 0 rlineto X X % fill in the tail with white X gsave X 1 setgray fill X grestore X X % outline the tail with black X stroke X X % move to the start of the tail X tail_length tail_end_diameter sub 0 translate 0 0 moveto X} bind def X X X% The basic animal shape X100 350 translate X X-45 2 inch bubble X-45 3 inch double_bubble X-90 3 inch bubble X-90 3 inch double_bubble X-45 8 inch bubble X 45 3 inch double_bubble X 45 3 inch bubble X Xshowpage END_OF_FILE if test 2198 -ne `wc -c <'giraffe.ps'`; then echo shar: \"'giraffe.ps'\" unpacked with wrong size! fi # end of 'giraffe.ps' fi if test -f 'moose.ps' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'moose.ps'\" else echo shar: Extracting \"'moose.ps'\" \(2223 characters\) sed "s/^X//" >'moose.ps' <<'END_OF_FILE' X%! X/inch { 72.27 0.5 mul mul } def X X/bubble_end_radius 0.5 inch def X/bubble_end_diameter bubble_end_radius 2 mul def X X/bubble { % rotation length => - X /bubble_length exch def X X rotate X X % draw the bubble capsule shape X bubble_end_radius bubble_end_radius neg moveto X bubble_length bubble_end_diameter sub 0 rlineto X currentpoint bubble_end_radius add bubble_end_radius 270 90 arc X bubble_end_diameter bubble_length sub 0 rlineto X currentpoint bubble_end_radius sub bubble_end_radius 90 270 arc closepath X X % fill in the bubble with white X gsave X 1 setgray fill X grestore X X % outline the bubble with black X stroke X X % move to the end of the bubble X bubble_length 0 translate 0 0 moveto X} bind def X X X/double_bubble { % rotation length => - X exch rotate X X dup X X % if we are pointing up, draw right bubble then left bubble X matrix currentmatrix 1 get 0 lt { X gsave X 0 bubble_end_radius 2 div neg translate X 0 exch bubble X grestore X X gsave X 0 bubble_end_radius 2 div translate X 0 exch bubble X grestore X } { X % we are pointing down, draw left bubble then right bubble X gsave X 0 bubble_end_radius 2 div translate X 0 exch bubble X grestore X X gsave X 0 bubble_end_radius 2 div neg translate X 0 exch bubble X grestore X } ifelse X X % rotate so that it looked like two /bubble's were called X 180 rotate X} bind def X X X/tail_end_radius 0.1 inch def X/tail_end_diameter tail_end_radius 2 mul def X X/tail { % rotation length => - X /tail_length exch def X X rotate X X % draw the tail shape X tail_length tail_end_diameter sub tail_end_radius moveto X tail_end_diameter tail_length sub 0 rlineto X currentpoint tail_end_radius sub tail_end_radius 90 270 arc X tail_length tail_end_diameter sub 0 rlineto X X % fill in the tail with white X gsave X 1 setgray fill X grestore X X % outline the tail with black X stroke X X % move to the start of the tail X tail_length tail_end_diameter sub 0 translate 0 0 moveto X} bind def X X X% The basic animal shape X150 450 translate X X-45 2 inch bubble X-45 4 inch double_bubble X-90 3 inch bubble X-90 4 inch double_bubble X-45 2 inch bubble X 90 3 inch double_bubble X 90 3 inch double_bubble X 90 2 inch bubble X Xshowpage END_OF_FILE if test 2223 -ne `wc -c <'moose.ps'`; then echo shar: \"'moose.ps'\" unpacked with wrong size! fi # end of 'moose.ps' fi if test -f 'mouse.ps' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'mouse.ps'\" else echo shar: Extracting \"'mouse.ps'\" \(2214 characters\) sed "s/^X//" >'mouse.ps' <<'END_OF_FILE' X%! X/inch { 72.27 0.5 mul mul } def X X/bubble_end_radius 0.5 inch def X/bubble_end_diameter bubble_end_radius 2 mul def X X/bubble { % rotation length => - X /bubble_length exch def X X rotate X X % draw the bubble capsule shape X bubble_end_radius bubble_end_radius neg moveto X bubble_length bubble_end_diameter sub 0 rlineto X currentpoint bubble_end_radius add bubble_end_radius 270 90 arc X bubble_end_diameter bubble_length sub 0 rlineto X currentpoint bubble_end_radius sub bubble_end_radius 90 270 arc closepath X X % fill in the bubble with white X gsave X 1 setgray fill X grestore X X % outline the bubble with black X stroke X X % move to the end of the bubble X bubble_length 0 translate 0 0 moveto X} bind def X X X/double_bubble { % rotation length => - X exch rotate X X dup X X % if we are pointing up, draw right bubble then left bubble X matrix currentmatrix 1 get 0 lt { X gsave X 0 bubble_end_radius 2 div neg translate X 0 exch bubble X grestore X X gsave X 0 bubble_end_radius 2 div translate X 0 exch bubble X grestore X } { X % we are pointing down, draw left bubble then right bubble X gsave X 0 bubble_end_radius 2 div translate X 0 exch bubble X grestore X X gsave X 0 bubble_end_radius 2 div neg translate X 0 exch bubble X grestore X } ifelse X X % rotate so that it looked like two /bubble's were called X 180 rotate X} bind def X X X/tail_end_radius 0.1 inch def X/tail_end_diameter tail_end_radius 2 mul def X X/tail { % rotation length => - X /tail_length exch def X X rotate X X % draw the tail shape X tail_length tail_end_diameter sub tail_end_radius moveto X tail_end_diameter tail_length sub 0 rlineto X currentpoint tail_end_radius sub tail_end_radius 90 270 arc X tail_length tail_end_diameter sub 0 rlineto X X % fill in the tail with white X gsave X 1 setgray fill X grestore X X % outline the tail with black X stroke X X % move to the start of the tail X tail_length tail_end_diameter sub 0 translate 0 0 moveto X} bind def X X X% The basic animal shape X150 500 translate X X-45 4 inch tail X 0 1 inch bubble X-45 1 inch double_bubble X-90 1 inch bubble X-90 1 inch double_bubble X-45 1 inch bubble X 45 1 inch double_bubble X 45 1 inch bubble X Xshowpage END_OF_FILE if test 2214 -ne `wc -c <'mouse.ps'`; then echo shar: \"'mouse.ps'\" unpacked with wrong size! fi # end of 'mouse.ps' fi echo shar: End of shell archive. exit 0