Repast:为不同的边缘设置不同的颜色

Repast: set different color for different edges

我的供应链模型中有两种边:demand_links 和 supply_links。 所有链接的默认颜色都是灰色。但是我想在每次更改 demand_link 的属性时将 demand_links 的颜色更改为红色(注意:边缘是通过边缘创建者自定义边缘代理)。如何做到这一点?

下面是我的简单测试代码,但没有用。

    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)

对于以这种方式设置链接样式,您应该遵循 Zombies_Demo 模型中 zombies.style.LinkStyle class 中的示例。 class 的相关部分如下所示:

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()));
    }

}

并且您可以使用这样的 class 网络(而不是代理)样式。