Java Graphics 2d избегать искаженных углов Polyline - PullRequest
1 голос
/ 18 октября 2019

Я работаю над графическим интерфейсом для рисования карт метро. Линия представлена ​​станцией в виде кружков и ломаной линии, чтобы связать их. Вы можете перемещать станции с помощью мыши, и, конечно, она обновляет отображаемую карту в режиме реального времени. Моя проблема в том, что когда станции приходят под определенным углом, возникает искажение ломаной линии, а угол, созданный двумя линиями, находится вне отображения круга станции, я хотел бы знать, есть ли способ избежать этого.

скриншоты приложения с проблемой ломаной линии

вот мой код для розыгрыша полилинии

//x and y point array creation
    xPoints = new int[this.stationViews.size()];
    yPoints = new int[this.stationViews.size()];
    for (int i=0;i<this.stationViews.size();i++) {
        //fill arrays with the center point of circles representing stations
        xPoints[i] = this.stationViews.get(i).getStation().getPosX()-this.stationViews.size()/2;
        yPoints[i] = this.stationViews.get(i).getStation().getPosY()-this.stationViews.size();
    }

    //setting color
    g2D.setColor(this.line.getColor());

    //set stroke width relative to the zoom level
    int strokeWidth=5;
    if(!this.stationViews.isEmpty()) {
    if (this.stationViews.get(0).getStationSize()>14) {
        strokeWidth = this.stationViews.get(0).getStationSize()-13;
    }else {
        strokeWidth = 3;
    }
    } 
    g2D.setStroke(new BasicStroke(strokeWidth));



    //draw the polyline
    if (this.stationViews.size() >1) {
    g2D.drawPolyline(xPoints, yPoints, this.stationViews.size());
    }
    //draw the station (g2D.drawCircle)
    for (StationView stationView : stationViews) {
        stationView.affiche(g2D,this.line.getColor());
    }

спасибо за вашу помощь

1 Ответ

2 голосов
/ 18 октября 2019

Это называется митра . По-видимому, вы по умолчанию используете JOIN_MITER, sharp объединение расширенных линий в конце, которые могут указывать далеко за пределы соединения для небольших углов.

g2d.setStroke(new BasicStroke(strokeWidth,
    BasicStroke.CAP_SQUARE, BasicStroke.JOIN_ROUND, 5));

Митра Поверхность, образующая скошенный конец или край детали, где соединение создается путем разрезания двух частей под углом и их соединения.

Этотакже шапка епископа с острым верхом, отсюда и название.

...