OSDN Git Service

処理を簡素化
[kcd/KCD.git] / KCD / Graphics.swift
1 //
2 //  Graphics.swift
3 //  KCD
4 //
5 //  Created by Hori,Masaki on 2017/03/01.
6 //  Copyright © 2017年 Hori,Masaki. All rights reserved.
7 //
8
9 import Cocoa
10
11 extension NSBezierPath {
12     
13     convenience init(start point: NSPoint) {
14         
15         self.init()
16         move(to: point)
17     }
18 }
19
20 func polygon(_ point: () -> [NSPoint]) -> NSBezierPath? {
21     
22     return polygon(points: point())
23 }
24
25 func polygon(points: [NSPoint]) -> NSBezierPath? {
26     
27     guard points.count > 2 else { return nil }
28     
29     let path = polyline(points: points)
30     path?.close()
31     
32     return path
33 }
34
35 func polyline(_ point: () -> [NSPoint]) -> NSBezierPath? {
36     
37     return polyline(points: point())
38 }
39
40 func polyline(points: [NSPoint]) -> NSBezierPath? {
41     
42     guard points.count > 1 else { return nil }
43     
44     return points.dropFirst().reduce(NSBezierPath(start: points[0]), lineToPoint)
45 }
46
47 func lineToPoint(path: NSBezierPath, point: NSPoint) -> NSBezierPath {
48     
49     path.line(to: point)
50     return path
51 }
52
53 func multiline(_ lines: () -> [(NSPoint, NSPoint)]) -> NSBezierPath {
54     
55     return multiline(lines: lines())
56 }
57
58 func multiline(lines: [(NSPoint, NSPoint)]) -> NSBezierPath {
59     
60     return lines.reduce(NSBezierPath(), line)
61 }
62
63 func line(_ path: NSBezierPath, _ points: (NSPoint, NSPoint)) -> NSBezierPath {
64     
65     path.move(to: points.0)
66     path.line(to: points.1)
67     return path
68 }