Introduction

The PostScript programming language is designed to describe the layout of graphics and text on the printed page. This website provides online utilities that show examples in actual practice.

2.21.2010

Polar Plotting :: Archimedean Spiral

postscript postscript_math-polar-archimedean-spiral

Example : Polar Plotting - Archimedean Spiral

polar-archimedean-spiral

    %!
    newpath
    300 700 translate 
    0 0 moveto
    
    /span 1 def
    /t -360 def
    /r { t 1 mul} def
    /x { t cos r mul 0.8 mul} def
    /y { t sin r mul 0.8 mul} def
    x y moveto
    720 {/t t span add def
    x y lineto } repeat
    stroke
    
    showpage
    

postscript postscript_math-polar-archimedean-spiral

2.06.2010

Math :: cos

postscript postscript_math-cos

Example : Math cos

postscript

    %!
    newpath
    100 600 translate 
    0 0 moveto
    
    /span 1 def
    /x 0 def
    /y { x cos 100 mul} def
    x y moveto
    360 {/x x span add def
    x y lineto } repeat
    stroke
    
    showpage
    

postscript postscript_math-cos

Math :: sin

postscript postscript_math-sin

Example : Math sin

postscript_math-sin

    %!
    newpath
    100 600 translate 
    0 0 moveto
    
    /span 1 def
    /x 0 def
    /y { x sin 100 mul} def
    360 {/x x span add def
    x y lineto } repeat
    stroke
    
    showpage
    

postscript postscript_math-sin

2.05.2010

Polar Plotting :: Folium

postscript postscript_math-polar-folium

Example : Polar Plotting - Folium

math-polar-folium

    %!
    newpath
    250 600 translate 
    0 0 moveto
    
    /span 1 def
    /t 0 def
    /r { t 5 mul sin} def
    /x { t cos r mul 180 mul} def
    /y { t sin r mul 180 mul} def
    360 {/t t span add def
    x y lineto } repeat
    stroke
    
    showpage
    

postscript postscript_math-polar-folium

Parametric Plotting :: Asteroid

postscript postscript_math-parametric-asteroid

Example : Parametric Plotting - Asteroid

math-parametric-asteroid

    %!
    newpath
    300 600 translate 
    0 0 moveto
    
    /span 1 def
    /t 0 def
    /u { t cos 3 exp 180 mul} def
    /v { t sin 3 exp 180 mul} def
    u v moveto
    360 {/t t span add def
    u v lineto } repeat
    stroke
    
    showpage
    

postscript postscript_math-parametric-asteroid

10.31.2009

Operator :: X Y L SQUARE

postscript postscript_def-square

PostScript :: CAD Operator - SQUARE

Operator :: X Y L SQUARE

Define :

/SQUARE {
 2 index 2 index moveto  % X Y rmoveto
 0 index 2 div 0 rmoveto % L/2 0 rmoveto
 0 index 2 div 0 exch rmoveto % 0 L/2 rmoveto
 0 index neg 0 rlineto % -L 0 rlineto
 0 index neg 0 exch rlineto % 0 -L rlineto
 0 index 0 rlineto % +L 0 rlineto
 0 index 0 exch rlineto % 0 +L rlineto
 clear
 } def

Detail :

X Y L SQUARE
                      STACK
                 3 2 1 0
                   X Y L

 2 index    X Y L X
 2 index 2 index  X Y L X Y
 2 index 2 index moveto  X Y L -> X Y moveto

 0 index   X Y L L
 0 index 2 div   X Y L L/2
 0 index 2 div 0       X Y L L/2 0
 0 index 2 div 0 rmoveto X Y L -> L/2 0 rmoveto

 0 index 2 div 0       X Y L L/2 0
 0 index 2 div 0 exch       X Y L 0 L/2
 0 index 2 div 0 exch rmoveto    X Y L -> 0 L/2 rmoveto

 ..
 0 index neg 0 rlineto  X Y L -> -L 0 rlineto
 ..
 0 index neg 0 exch rlineto X Y L ->  0 -L rlineto
 ..
 0 index 0 rlineto  X Y L ->  L 0 rlineto
 ..
 0 index 0 exch rlineto  X Y L ->  0 L rlineto
 clear

Example : CAD Operator - SQUARE

square

%!
/inch {72 mul} def
/cm {inch 2.54 div } def
/mm {cm 10 div } def

/SQUARE {
 2 index 2 index moveto
 0 index 2 div 0 rmoveto
 0 index 2 div 0 exch rmoveto
 0 index neg 0 rlineto
 0 index neg 0 exch rlineto
 0 index 0 rlineto
 0 index 0 exch rlineto
 clear
 } def

/HCenterLine {
 0 0 moveto
 -80 mm 10 mm 80 mm {
 0 moveto 
 -5 mm 0 rmoveto 
 +1 mm 0 rlineto 
 +1 mm 0 rmoveto 
 +6 mm 0 rlineto 
 } 
 for
 0 0 moveto
 } def

/VCenterLine {
 0 0 moveto
 -80 mm 10 mm 80 mm {
 0 exch moveto 
 0 -5 mm rmoveto 
 0 +1 mm rlineto 
 0 +1 mm rmoveto 
 0 +6 mm rlineto 
 } 
 for
 0 0 moveto
 } def

/MainView {
0 mm 0 mm 10 mm SQUARE
10 mm 10 mm 40 mm SQUARE
} def

newpath
320 600 translate 
0 0 moveto
HCenterLine
VCenterLine
MainView

stroke
showpage

postscript postscript_def-square

10.25.2009

CAD Example :: CYLINDER

postscript postscript_cad-cylinder

PostScript :: CAD Example - CYLINDER

Example : CYLINDER

cylinder

%!
/inch {72 mul} def
/cm {inch 2.54 div } def
/mm {cm 10 div } def

/VisibleLine { 0.25 mm setlinewidth [] 0 setdash } def
/CentreLine { 0.13 mm setlinewidth [12 3 0.5 3] 0 setdash } def

/RECTANGLE {
 1 index 1 index moveto
 3 index 1 index lineto
 3 index 3 index lineto
 1 index 3 index lineto
 1 index 1 index lineto
 clear
 } def

/CIRCLE {
 2 index 2 index moveto
 0 index 0 rmoveto
 0 360 arc
 clear
 } def

/HCenterLine {
0 0 moveto +50 mm 0 rlineto 
0 0 moveto -50 mm 0 rlineto 
 } def

/VCenterLine {
0 0 moveto 0 +50 mm rlineto 
0 0 moveto 0 -50 mm rlineto 
 } def

/FrontView {
40 mm 20 mm -20 mm -20 mm RECTANGLE
} def

/SideView {
0 mm 0 mm 20 mm CIRCLE
} def

newpath
400 600 translate 
0 0 moveto
HCenterLine CentreLine stroke
FrontView VisibleLine stroke


-250 0 translate 
0 0 moveto
HCenterLine CentreLine stroke
VCenterLine CentreLine stroke
SideView VisibleLine stroke

showpage

postscript postscript_cad-cylinder

CAD Example :: DISC

postscript postscript_cad-disc

PostScript :: CAD Example - DISC

Example : CAD Example - DISC

disc

%!
/inch {72 mul} def
/cm {inch 2.54 div } def
/mm {cm 10 div } def

/RECTANGLE {
 1 index 1 index moveto
 3 index 1 index lineto
 3 index 3 index lineto
 1 index 3 index lineto
 1 index 1 index lineto
 clear
 } def

/CIRCLE {
 2 index 2 index moveto
 0 index 0 rmoveto
 0 360 arc
 clear
 } def

/HCenterLine {
-50 mm 0 rmoveto
100 mm 0 rlineto
-50 mm 0 rmoveto
 } def

/VCenterLine {
0 -50 mm rmoveto
0 100 mm rlineto
0 -50 mm rmoveto
 } def

/FrontView {
0 mm 0 mm 40 mm CIRCLE
} def

/SideView {
-5 mm -40 mm 5 mm 40 mm RECTANGLE
} def

newpath
400 600 translate 
0 0 moveto
HCenterLine
VCenterLine
FrontView

-200 0 translate 
0 0 moveto
HCenterLine
SideView

stroke
showpage

postscript postscript_cad-disc

8.07.2009

PostScript :: setlinewidth

postscript postscript_setlinewidth

Operator: W setlinewidth

This operator sets the width of all lines to be stroked to width W, which must be specified in points.

Example:

setlinewidth

    %!
    newpath
    100 700 translate
    
    0 0 moveto 
    1 setlinewidth
    400 0 rlineto
    stroke
    
    0 -100 moveto 
    15 setlinewidth
    400 0 rlineto
    stroke
    
    showpage
    

postscript postscript_setlinewidth

8.06.2009

IMAGE :: Drawing Bitmap Images

postscript postscript_image

PostScript :: IMAGE - Drawing Bitmap Images

Operator: width height bpp data image

This operator draws a grayscale image in the unit square from (0,0) to (1, 1). The source information is a raster image width pixels wide by height pixels high. Each pixel is represented by bpp bits. The data operand can be a number of things, but is usually a procedure that returns a string of bytes with the grayscale data each time it is called. The procedure will be called repeatedly until all pixels have been processed. The image is processed from left-to-right, top-to-bottom.

Example:

Drawing Bitmap Images

    %!
    100 400 translate
    10 10 scale
    26 34 scale
    26 34 8 [26 0 0 -34 0 34]
    {<
    ffffffffffffffffffffffffffffffffffffffffffffffffffff
    ff000000000000000000000000000000000000ffffffffffffff
    ff00efefefefefefefefefefefefefefefef0000ffffffffffff
    ff00efefefefefefefefefefefefefefefef00ce00ffffffffff
    ff00efefefefefefefefefefefefefefefef00cece00ffffffff
    ff00efefefefefefefefefefefefefefefef00cecece00ffffff
    ff00efefefefefefefefefefefefefefefef00cececece00ffff
    ff00efefefefefefefefefefefefefefefef00000000000000ff
    ff00efefefefefefefefefefefefefefefefefefefefefef00ff
    ff00efefefefefefefefefefefefefefefefefefefefefef00ff
    ff00efefefefefefefefefefefefefefefefefefefefefef00ff
    ff00efef000000ef000000ef000000ef0000ef0000efefef00ff
    ff00efefefefefefefefefefefefefefefefefefefefefef00ff
    ff00efefefefefefefefefefefefefefefefefefefefefef00ff
    ff00efef000000ef00000000ef00000000ef000000efefef00ff
    ff00efefefefefefefefefefefefefefefefefefefefefef00ff
    ff00efefefefefefefefefefefefefefefefefefefefefef00ff
    ff00efef0000ef00000000000000ef000000ef0000efefef00ff
    ff00efefefefefefefefefefefefefefefefefefefefefef00ff
    ff00efefefefefefefefefefefefefefefefefefefefefef00ff
    ff00efefefefefefefefefefefefefefefefefefefefefef00ff
    ff00efefefefefefefefefefefefefefefefefefefefefef00ff
    ff00efefefefefefefefefefefefefefefefefefefefefef00ff
    ff00efefefefefefefefefefefefefefefefefefefefefef00ff
    ff00efefefefefefefefefefefefefefefefefefefefefef00ff
    ff00efefefefefefefefefefefefefefefefefefefefefef00ff
    ff00efefefefefefefefefefefefefefefefefefefefefef00ff
    ff00efefefefefefefefefefefefefefefefefefefefefef00ff
    ff00efefefefefefefefefefefefefefefefefefefefefef00ff
    ff00efefefefefefefefefefefefefefefefefefefefefef00ff
    ff00efefefefefefefefefefefefefefefefefefefefefef00ff
    ff00efefefefefefefefefefefefefefefefefefefefefef00ff
    ff000000000000000000000000000000000000000000000000ff
    ffffffffffffffffffffffffffffffffffffffffffffffffffff
    >}
    image
    showpage
    

postscript postscript_image

8.05.2009

LINETO

postscript postscript_lineto

Operator: X Y lineto

This operator adds a line into the path. The line is from the current point to the point X Y. After the line is added to the path, the current point is set to X Y.

Example:

postscript_lineto

    %!
    newpath
    72 360 moveto
    216 360 lineto
    stroke
    showpage
    

postscript postscript_lineto

7.29.2009

SETDASH :: Drawing Dotted Line / Broken Line

postscript postscript_setdash

PostScript :: SETDASH - Drawing Dotted Line / Broken Line

Operator: [a b c d ...] w setdash

sets the dash pattern parameter

Example:

a dash pattern

    %!
    newpath
    100 700 translate
    
    0 0 moveto 
    [8 8] 0 setdash
    400 0 rlineto
    stroke
    
    0 -100 moveto 
    [] 0 setdash
    400 0 rlineto
    stroke
    
    showpage
    

postscript postscript_setdash

7.28.2009

ARC

postscript postscript_arc

Operator: X Y r ang1 ang2 arc

The arc operator draws an arc of some number of degrees, with a given radius and center. The arc is generated by sweeping a line segment of length r, and tied at the point X Y, in a counter-clockwise direction from an angle ang1 to an angle ang2.

Example:

postscript

    %!
    newpath
    150 500 100 0 270 arc
    15 setlinewidth
    stroke
    showpage
    

postscript postscript_arc

7.18.2009

Structural Formula :: Benzene

postscript postscript_benzene

Example : Structural Formula - Benzene Ring

Structural Formula - Benzene Ring

%!
/inch {72 mul} def
/cm {inch 2.54 div } def
/sin30 {0.5 cm} def
/cos30 {0.8660254038 cm} def
/irsin30 {ir 0.5 mul } def
/ircos30 {ir 0.8660254038 mul } def
/ir 0.8 cm def

/ArOut {
0 1 cm moveto
5 {cos30 sin30 lineto
-60 rotate} repeat
closepath
-60 rotate
0 ir moveto} def

/Ar3 {
ArOut
3 {ircos30 irsin30 lineto
-60 rotate
ircos30 irsin30 moveto
-60 rotate} repeat 0 0 moveto} def

/Benzene {
Ar3} def

newpath
200 600 translate 
0 0 moveto 
Benzene
stroke
showpage

postscript postscript_benzene