aboutsummaryrefslogtreecommitdiff
path: root/src/hex-paper.ps
blob: 4a117cc359c72fd83fea4390e8435722da9e9bc1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
%!PS-Adobe-1.0
%%Title: hex-paper - part of rpgTools by Elena of Valhalla
%%Pages:1
%%BoundingBox: 0 0 596 842
%%DocumentPaperSizes: a4
%%CreationDate: 2004/10/04
%%DocumentData: Clean7Bit
%%LanguageLevel: 1
%%EndComments
%%BeginProlog
% Copyright (C) 2004 Elena Grandi
% All rights reserved.
%
% Redistribution and use in source and binary forms, with or without
% modification, are permitted provided that the following conditions are met:
%
% * Redistributions of source code must retain the above copyright
%   notice, this list of conditions and the following disclaimer.
% * Redistributions in binary form must reproduce the above copyright
%   notice, this list of conditions and the following disclaimer in the
%   documentation and/or other materials provided with the distribution.
% * Neither the name of the <organization> nor the
%   names of its contributors may be used to endorse or promote products
%   derived from this software without specific prior written permission.
%
% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
% AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
% IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
% ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
% DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
% (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
% LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
% ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
% (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
% SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

% ------ Usage ----------------------------------------------------------------

% To use this file either send it to a postscript printer, or use your 
% favourite postscript interpreter to visualize and print it.

% You can customize the result by changing the values in the Settings 
% section below (see the comments for details)

% ------ sizes ----------------------------------------------------------------
% This will allow you to give measurements in inches or millimiters
% do not change
/inch {72 mul} def
/mm {0.03937 inch mul} def

% ------ Settings -------------------------------------------------------------

% ------ Basic settings

/HexSide 24 mm def              % lenght of hexagon side (or "radius")

/LineSize 0.5 def              % lines width
/LineColo { 0.5 0.5 0.5 } def  % rgb triplet of line color
/FillColo { 1.0 1.0 1.0 } def  % rgb triplet of hexagon color
/BackColo { 1.0 1.0 1.0 } def  % rgb triplet of background color

% page size: if you change this, you should change the BoundingBox 
% in line 4 accordingly (you CAN'T use mm or inch over there) 
% Default is A4 paper ( BoundingBox: 0 0 596 842 )
/PageWidth  210 mm def
/PageHeight 297 mm def         
% alternate page sizes (with BoundingBox values) may be
% A3 paper ( BoundingBox: 0 0 842 1192)
%/PageWidth  297 mm def
%/PageHeight 420 mm def
% Letter paper ( BoundingBox: 0 0 612 792)
%/PageWidth  8.5 inch def
%/PageHeight 11 inch def

% white margins
/BorderTop 10 mm def
/BorderBottom 10 mm def
/BorderLeft 10 mm def
/BorderRight 10 mm def

% ------ Advanced settings

% spacing between consecutive hexes (hor and vert)
/HexSpaceX 0 def
/HexSpaceY 0 def
% uncomment the following line to have uniform spacing
%/HexSpaceY HexSpaceX 3 sqrt 0.5 mul mul def

% translation of the starting point of the pattern
/PattTrasX 10 mm def
/PattTrasY 10 mm def

% ------ Behaviour 

% Whether to print a line around the margins (1) or not (0)
/WillPrintBorder 1 def

% From here on you shouldn't worry about changing or configuring anything
% ------ Variables ------------------------------------------------------------

% Spacing between hexagons
/HexSpacingX HexSide 3 sqrt mul HexSpaceX add def
/RowSpacingY HexSide 1.5 mul HexSpaceY add def
/ColSpacingX HexSide 3 sqrt 0.5 mul mul HexSpaceX 2 div add def

% x y movements to get oblique sides
/HexSideX HexSide 3 sqrt 0.5 mul mul def
/HexSideY HexSide 2 div def

% number of hexagons in a row and of rows in a page
/HexRowNum PageWidth HexSpacingX div 2 add def
/HexColNum PageHeight RowSpacingY div 2 add def

% starting hexagon number in a row and row number in a page
/HexRowSta PattTrasX HexSpacingX div cvi neg 1 sub def
/HexColSta PattTrasY RowSpacingY div cvi neg 1 sub def

% ending hexagon number in a row and row number in a page
/HexRowEnd HexRowSta HexRowNum add def
/HexColEnd HexColSta HexColNum add def

% ------ Procedures -----------------------------------------------------------

% Describes the printable area (does NOT print anything)
/UsedArea {
  newpath
  BorderLeft BorderBottom moveto
  BorderLeft PageHeight BorderTop sub lineto
  PageWidth BorderRight sub PageHeight BorderTop sub lineto
  PageWidth BorderRight sub BorderBottom lineto
  closepath
} def

% Prints an hexagon in the given position 
% x y = cohordinates of bottom point of left side
/PrintHex { %stk: x y
  newpath
    moveto
    0 HexSide rlineto
    HexSideX HexSideY rlineto
    HexSideX HexSideY neg rlineto
    0 HexSide neg rlineto
    HexSideX neg HexSideY neg rlineto
    HexSideX neg HexSideY rlineto
  closepath
  gsave
    FillColo setrgbcolor 
    fill
  grestore
    LineColo setrgbcolor 
    LineSize setlinewidth 
    stroke
} def

% Prints a row in the given position
% x y = cohordinates of first hexagon in the row
/PrintRow { %stk: x y
  /RowY exch def
  /RowX exch def
  HexRowSta 1 HexRowEnd {
    HexSpacingX mul RowX add RowY PrintHex
  } for
} def

%%EndProlog
%%Page: 1

% set printing area
UsedArea clip

% print background
BackColo setrgbcolor
UsedArea fill

% print hex pattern
HexColSta 2 HexColEnd {
  /rownum exch def
  PattTrasX RowSpacingY rownum mul PattTrasY add PrintRow
  PattTrasX ColSpacingX add RowSpacingY rownum mul PattTrasY add RowSpacingY add PrintRow
} for

% print border (if WillPrintBorder is not 0 )
WillPrintBorder 0 ne {
  LineSize setlinewidth
  LineColo setrgbcolor
  UsedArea stroke
} if

showpage
%%Trailer