fun paint()

in code/richediting/src/main/kotlin/org/fbme/ide/richediting/adapters/ecc/ECTransitionPathPainter.kt [17:73]


    fun paint(graphics: Graphics, drawArrow: Boolean) {
        val g = graphics as Graphics2D
        val s = path.source
        val t = path.target
        val c = path.centre
        g.stroke = BasicStroke(2.5.toFloat())

        // от такого надо избавляться, иначе координата поедет
        if (!(s == t && s == c)) {
            if (s == t) {
                val cx1 = (c.x + s.x) / 2.0 - 30
                val cy1 = (c.y + s.y) / 2.0 - 30
                g.draw(ECTransitionUtils.fromPath(s, c, cx1, cy1))
                val cx2 = (c.x + s.x) / 2.0 + 30
                val cy2 = (c.y + s.y) / 2.0 + 30
                val curve: QuadCurve2D = ECTransitionUtils.fromPath(c, t, cx2, cy2)
                g.draw(ECTransitionUtils.fromPath(s, c, cx2, cy2))
                val sat = AffineTransform()
                var parameter = 0.6
                val arrowPoint = ECTransitionUtils.getPointFromParameter(parameter, curve)
                parameter += 0.01
                var arrowPoint2 = ECTransitionUtils.getPointFromParameter(parameter, curve)
                while (findDistance(arrowPoint, arrowPoint2) < 10) {
                    parameter += 0.01
                    arrowPoint2 = ECTransitionUtils.getPointFromParameter(parameter, curve)
                }
                sat.translate(arrowPoint.x.toDouble(), arrowPoint.y.toDouble())
                sat.rotate((arrowPoint2.x - arrowPoint.x).toDouble(), (arrowPoint2.y - arrowPoint.y).toDouble())
                graphics.fill(ARROW_SHAPE.createTransformedShape(sat))
            } else {
                val curve: QuadCurve2D = ECTransitionUtils.fromPath(s, t, c.x.toDouble(), c.y.toDouble())
                g.draw(curve)
                val hoverGraphics = graphics.create() as Graphics2D
                hoverGraphics.color = MPSColors.YELLOW.darker()
                if (cursor == ECTransitionCursor.SOURCE || cursor == ECTransitionCursor.TARGET) {
                    hoverGraphics.draw(curve)
                }
                val sat = AffineTransform()
                var parameter = 0.96
                var arrowPoint = ECTransitionUtils.getPointFromParameter(parameter, curve)
                while (parameter < 0.995 && findDistance(arrowPoint, t) > 30) {
                    parameter += 0.005
                    arrowPoint = ECTransitionUtils.getPointFromParameter(parameter, curve)
                }
                while (parameter > 0.5 && findDistance(arrowPoint, t) < 15) {
                    parameter -= 0.01
                    arrowPoint = ECTransitionUtils.getPointFromParameter(parameter, curve)
                }
                sat.translate(arrowPoint.x.toDouble(), arrowPoint.y.toDouble())
                sat.rotate((t.x - arrowPoint.x).toDouble(), (t.y - arrowPoint.y).toDouble())
                graphics.fill(createArrow(findDistance(arrowPoint, t)).createTransformedShape(sat))

                // или тут можно так:
//                drawEdgesFromCircle(graphics, g, s, c, t);
            }
        }
    }