Repast: установить разные цвета для разных краев - PullRequest
2 голосов
/ 21 сентября 2019

В моей модели цепочки поставок есть два типа ребер: demand_links и supply_links.цвет по умолчанию серый для всех ссылок.Но я хочу изменить цвет request_links на красный каждый раз, когда изменяется атрибут demand_link (Примечание: ребро - это пользовательский агент ребра через создателя ребра).Как это сделать?

Ниже приведены мои коды для простого теста, и он не работает.

    public class EdgeStyle2D extends DefaultStyleOGL2D {

    @Override
    public Color getColor(Object o){

//      if (((CustomEdge) o).getCurrent_dl() == 1) {
//          return Color.RED;       
//      }
//      else {
//          return Color.BLACK;
//      }


        if (o instanceof Distributor) 
            return Color.YELLOW;


        return null;
    }

}

Я получаю ошибку при инициализации.

Caused by: java.lang.ClassCastException: class supplyChainSystem.EdgeStyle2D cannot be cast to class repast.simphony.visualizationOGL2D.EdgeStyleOGL2D (supplyChainSystem.EdgeStyle2D and repast.simphony.visualizationOGL2D.EdgeStyleOGL2D are in unnamed module of loader repast.simphony.plugin.ExtendablePluginClassLoader @61af1510)

1 Ответ

3 голосов
/ 21 сентября 2019

Для оформления ссылок таким способом вы должны следовать примеру в классе zombies.style.LinkStyle в модели Zombies_Demo.Вот как выглядят соответствующие части этого класса:

public class LinkStyle implements EdgeStyleOGL2D {

    public Color getColor(RepastEdge<?> edge) {
        BaseLink<?> link = (BaseLink<?>) edge;
        return ReLogoSupport.lookupColor(link.getColor());
    }

    public int getLineWidth(RepastEdge<?> edge) {
        return (int) (Math.abs(edge.getWeight()));
    }

}

И вы бы использовали такой класс для стиля сети (в отличие от агента).

...