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

%!
/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