Нарисуйте линию между двумя объектами - PullRequest
0 голосов
/ 02 мая 2019

Я пытаюсь написать простое приложение для рисования вершин и ребер между ними. Я успешно написал код для добавления вершин, удаления их и перемещения по виду. Но когда я попытался провести черту между ними, я столкнулся с проблемами. Многие руководства по этому вопросу устарели со старыми версиями Swift или по разработке IOS, поэтому я не нашел, как это реализовать.

Я пытался просто нарисовать линию между точками, но ничего не получалось, также заметил, что я хочу изменить координаты ребра при перетаскивании вершины.

import Cocoa

var merging = false
var mergingCoords:[CGPoint] = []

class Vertex {
    var number:Int

    init(number: Int) {
        self.number = number
    }

}

class Graph {
    var size = 0
}

class VertexView: NSBox {

    var point: CGPoint = CGPoint(x: 0, y: 0)

    required init(coder decoder: NSCoder) {
        super.init(coder: decoder)!
    }

    override init(frame frameRect: NSRect) {
        super.init(frame: frameRect)
    }

    override func mouseDown(with event: NSEvent) {
        if (merging) {
            print("Really")
            mergingCoords.append(self.point)
            if (mergingCoords.count == 2) {
                // DRAW AN EDGE
            }
        } else {
            point = event.locationInWindow
        }
    }

    override func mouseUp(with event: NSEvent) {
        if (!merging) {
            if (event.locationInWindow == point) {
                self.removeFromSuperview()
            } else {
                point = event.locationInWindow
            }
        }
    }

    override func mouseDragged(with event: NSEvent) {
        if (!merging) {
            self.frame = NSRect(x: event.locationInWindow.x - 20, y: event.locationInWindow.y - 20, width: 40, height: 40)
        }
    }

}

class ViewController: NSViewController {

    var graph: Graph = Graph()

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }

    override func viewDidAppear() {
        view.window?.makeFirstResponder(self)
    }

    override func keyDown(with event: NSEvent) {
        print(event.characters!)
        if (event.characters! == "M") {
            merging = !merging;
            mergingCoords.removeAll()
        }
        print(merging)
    }

    override var representedObject: Any? {
        didSet {
        // Update the view, if already loaded.
        }
    }

    override func mouseDown(with event: NSEvent) {
        let v = VertexView(frame: NSRect(x: event.locationInWindow.x - 20, y: event.locationInWindow.y - 20, width: 40, height: 40))
        v.boxType = NSBox.BoxType.custom
        v.point = event.locationInWindow
        v.cornerRadius = 20
        graph.size = graph.size + 1
        self.view.addSubview(v)
    }

}
...