-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathguidelines_calligraphy.py
145 lines (113 loc) · 3.86 KB
/
guidelines_calligraphy.py
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
# Copyright (c) 2015 Filipe Negrão
# Version 0.1
#------------------------------------------------------------
# FUNCTIONS
#------------------------------------------------------------
def draw_ruling(x,y):
spaceBetween = 1.5*cm #space between ruling lines
line((x, y), (x, y+xHeight+descender+ascender)) #vertical line
line((x, y), (lineW, y)) # descender
line((x, y+descender), (lineW, y+descender)) # baseline
line((x, y+xHeight+descender), (lineW, y+xHeight+descender)) #x-height
line((x, y+xHeight+descender+ascender), (lineW, y+xHeight+descender+ascender))
def draw_angle(angle,catop,start_x,start_y):
stroke(.5)
angleDegrees = 90-float(nib_angle)
angleRad = radians(angleDegrees)
catadj = tan(angleRad) * catop
line((start_x,start_y), (catadj+start_x, catop+start_y))
#text properties
fill(0.7)
font("Georgia")
fontSize(10)
txt = str(nib_angle)+"°"
text(txt, (x+2.5*broadNib, y+descender+xHeight/2))
def draw_squares(x,y,broadNib):
n = (xHeight+ascender+descender)/broadNib
increment=0
while n > 0:
fill(0)
if n == (xHeight+ascender+descender)/broadNib:
rect(x,y,broadNib,broadNib)
elif (n%2)==0:
rect(x,y+broadNib*increment,broadNib,broadNib)
else:
rect(x+broadNib,y+broadNib*increment,broadNib,broadNib)
increment+=1
n-=1
#------------------------------------------------------------
# SIZES
#------------------------------------------------------------
#convert cm and mm to pt
cm = 28.3465
mm = 2.83465
#paper sizes
A4w, A4h = 297*mm, 210*mm
A3w, A3h = 297*mm, 420*mm
# create a new page and define it's format
size(A4w, A4h)
#------------------------------------------------------------
# UI
#------------------------------------------------------------
Variable([
dict(name="nib_size", ui="EditText", args=dict(text="3.5")),
dict(name="nib_angle", ui="EditText", args=dict(text="30")),
dict(name="nib_angle_w", ui="Slider",
args=dict(
value=50,
minValue=10,
maxValue=200)),
dict(name="xHeight", ui="EditText", args=dict(text="3.5")),
dict(name="ascender", ui="EditText", args=dict(text="2.5")),
dict(name="descender", ui="EditText", args=dict(text="2")),
dict(name="X", ui="Slider",
args=dict(
value=2*cm,
minValue=1*cm,
maxValue=5*cm)),
dict(name="Y", ui="Slider",
args=dict(
value=2*cm,
minValue=1*cm,
maxValue=5*cm))
], globals())
#------------------------------------------------------------
# VARIABLES
#------------------------------------------------------------
#define your pen size
broadNib = float(nib_size) * mm
#define your ascender height
ascender = float(ascender) * broadNib
#define your x-height
xHeight = float(xHeight) * broadNib
#define your descender line
descender = float(descender) * broadNib
#define nib angle
nibAngle = float(nib_angle)
#define the weight of the lines considering a margin of 2cm
lineW = A4w-2*cm
#stroke color and width
stroke(0)
strokeWidth(.5)
#ruling total size
ruling = descender + xHeight + ascender
#margins
x=X
y=Y
#total nibs
n = (xHeight+ascender+descender)/broadNib
#broad nib angle's line
angleDegrees = 90-float(nib_angle)
angle = radians(angleDegrees)
#------------------------------------------------------------
# LOOPS
#------------------------------------------------------------
while A4h>=0:
spaceBetween = 1.5*cm #space between ruling lines
draw_ruling(x,y)
draw_angle(30,nib_angle_w,x,y+descender+xHeight/2)
draw_squares(x,y,broadNib)
y+=spaceBetween+xHeight+descender+ascender
A4h = A4h-ruling-spaceBetween-2*cm
# save it as pdf on the current users desktop
#saveImage(["~/Desktop/001.pdf"])