-
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
-
191
-
192
-
193
-
194
-
195
-
196
-
197
-
198
-
199
-
200
-
201
-
202
-
203
-
204
-
205
-
206
-
207
-
208
-
209
-
210
-
211
-
212
-
213
-
214
-
215
-
216
-
217
-
218
-
219
-
220
-
221
-
222
-
223
-
224
-
225
-
226
-
227
-
228
-
229
-
230
-
231
-
232
-
233
-
234
-
235
-- Copyright 2026 Shota FUJI
--
-- This Source Code Form is subject to the terms of the Mozilla Public
-- License, v. 2.0. If a copy of the MPL was not distributed with this
-- file, You can obtain one at https://mozilla.org/MPL/2.0/.
--
-- SPDX-License-Identifier: MPL-2.0
module Template.InfoArea exposing (infoArea)
import Length exposing (toMM)
import Parameters exposing (Parameters)
import Svg exposing (..)
import Svg.Attributes as Attrs exposing (..)
import Svg.Path as Path exposing (..)
import Template.Layout.Container as Container exposing (aligned, columns, gapped, noGrow, padded, rows, withOutline)
import Template.Layout.Coordinate exposing (Request(..))
import Template.Layout.Item exposing (Item)
infoArea : Parameters -> Item msg
infoArea params =
rows
|> Container.build
[ columns
|> gapped 5
|> aligned Container.End
|> withOutline
{ color = "currentColor"
, width = 0.2
, radius = 0.3
}
|> padded 2
|> Container.build
[ scaleChcker |> noGrow
, legends params |> noGrow
, legal
]
]
scaleChcker : Item msg
scaleChcker =
{ size = { width = Exactly 10, height = Exactly 10 }
, element =
\p _ ->
let
x : Float -> String
x n =
String.fromFloat (p.x + n)
y : Float -> String
y n =
String.fromFloat (p.y + n)
in
g
[]
[ g
[ stroke "currentColor", strokeWidth "0.2" ]
[ line
[ x1 (x 0), y1 (y 8), x2 (x 0), y2 (y 10) ]
[]
, line
[ x1 (x 0), y1 (y 9), x2 (x 10), y2 (y 9) ]
[]
, line
[ x1 (x 10), y1 (y 8), x2 (x 10), y2 (y 10) ]
[]
]
, text_
[ Attrs.x (x 5)
, Attrs.y (y 7)
, fontSize "3"
, fontWeight "100"
, textAnchor "middle"
, fill "currentColor"
]
[ text "10mm" ]
]
}
legal : Item msg
legal =
rows
|> gapped 0.5
|> aligned Container.End
|> Container.build
[ Item
{ width = Exactly 33.2, height = Exactly 2 }
(\p size ->
text_
[ x (String.fromFloat p.x)
, y (String.fromFloat p.y)
, fontSize (String.fromFloat size.height)
, fontWeight "100"
, textAnchor "left"
, dominantBaseline "hanging"
, fill "currentColor"
]
[ text "© Shota FUJI, licensed under CC BY 4.0" ]
)
, Item
{ width = Exactly 61, height = Exactly 2 }
(\p size ->
text_
[ x (String.fromFloat p.x)
, y (String.fromFloat p.y)
, fontSize (String.fromFloat size.height)
, fontWeight "100"
, textAnchor "left"
, dominantBaseline "hanging"
, fill "currentColor"
]
[ text "Barlow font © 2017 The Barlow Project Authors, SIL Open Font License 1.1" ]
)
]
legends : Parameters -> Item msg
legends params =
rows
|> gapped 2
|> aligned Container.Start
|> Container.build
[ columns
|> gapped 2
|> aligned Container.Center
|> Container.build
[ Item
{ width = Exactly 8, height = Exactly 5 }
(\p size ->
Svg.path
[ Path.d
[ MoveTo Absolute ( p.x, p.y + size.height / 2 )
, HorizontalLineTo Relative size.width
]
, stroke "currentColor"
, strokeWidth (params.rendering.lineWidth |> toMM |> String.fromFloat)
]
[]
)
, Item
{ width = Exactly 12, height = Exactly 4 }
(\p size ->
text_
[ x (String.fromFloat p.x)
, y (String.fromFloat p.y)
, fontSize (String.fromFloat size.height)
, fontWeight "100"
, textAnchor "left"
, dominantBaseline "hanging"
, fill "currentColor"
]
[ text "Cut line" ]
)
]
, columns
|> gapped 2
|> aligned Container.Center
|> Container.build
[ Item
{ width = Exactly 8, height = Exactly 5 }
(\p size ->
rect
[ x (String.fromFloat p.x)
, y (String.fromFloat p.y)
, width (String.fromFloat size.width)
, height (String.fromFloat size.height)
, stroke "currentColor"
, strokeWidth "0.2"
, fill "url(#SkivingPattern)"
]
[]
)
, Item
{ width = Exactly 21, height = Exactly 4 }
(\p size ->
text_
[ x (String.fromFloat p.x)
, y (String.fromFloat p.y)
, fontSize (String.fromFloat size.height)
, fontWeight "100"
, textAnchor "left"
, dominantBaseline "hanging"
, fill "currentColor"
]
[ text "Skiving area" ]
)
]
, columns
|> gapped 2
|> aligned Container.Center
|> Container.build
[ Item
{ width = Exactly 8, height = Exactly 5 }
(\p size ->
g
[ fill "none"
, stroke "currentColor"
, strokeWidth "0.1"
]
[ Svg.path
[ Path.d
[ MoveTo Absolute ( p.x + (size.width - size.height) / 2, p.y + size.height / 2 )
, HorizontalLineTo Relative size.height
]
]
[]
, Svg.path
[ Path.d
[ MoveTo Absolute ( p.x + size.width / 2, p.y )
, VerticalLineTo Relative size.height
]
]
[]
]
)
, Item
{ width = Exactly 12, height = Exactly 4 }
(\p size ->
text_
[ x (String.fromFloat p.x)
, y (String.fromFloat p.y)
, fontSize (String.fromFloat size.height)
, fontWeight "100"
, textAnchor "left"
, dominantBaseline "hanging"
, fill "currentColor"
]
[ text "Hole center" ]
)
]
]