AnyLogi c - есть ли способ преобразовать Node из network.nodes () в Rect angular Node? - PullRequest
0 голосов
/ 05 мая 2020

Я хочу динамически добавлять каждый Rect angular Node из моей сети в конкретную коллекцию при запуске моделирования. Я делаю это, потому что у меня будет более 1000 узлов, и добавление их вручную нежелательно.

Каждый из этих узлов назван в соответствии с соглашением и начинается с «полосы» или «сетки».

Если это «дорожка», то она добавляется к одной коллекции, а «сетка» - к другой.

В настоящее время я использую код:

for (Node n : network.nodes()) {
    String layoutIdentifier = n.getName().split("_")[0];
    if (layoutIdentifier.equals("lane")) {
        laneNodes.add(n);
        traceln(n);
         //Lane newLane = add_lanes(n);
    } else if (layoutIdentifier.equals("grid")) {
        gridNodes.add(n);
    }
}

Это работает нормально и добавляет их в коллекции как узлы, но я действительно хотел добавить их в коллекции узлов Rect angular (каковы они есть), поскольку мне нужно использовать этот тип в моих агентах.

Я пробовал этот код (изменение Node на RectangularNode):

for (RectangularNode n : network.nodes()) {
    String layoutIdentifier = n.getName().split("_")[0];
    if (layoutIdentifier.equals("lane")) {
        laneNodes.add(n);
        traceln(n);
         //Lane newLane = add_lanes(n);
    } else if (layoutIdentifier.equals("grid")) {
        gridNodes.add(n);
    }
}

, но появляется ошибка Несоответствие типов: невозможно преобразовать из типа элемента Node в RectangularNode. Местоположение: pbl_congestion_simulation / Main - Тип агента

Есть ли способ преобразовать узел в RectangularNode? Или лучший способ пройти через все узлы в сети и добавить их как узлы Rect angular в их коллекции?

Я вижу, что узлы обозначаются как com.anylogi c .engine.markup. RectangularNode@293cc7d0 поэтому надеялся, что часть RectangularNode будет доступна.

большое спасибо.

1 Ответ

0 голосов
/ 05 мая 2020

Ваш первый код в порядке, у вас может быть коллекция с элементами типа RectangularNode, и единственное, что вам нужно изменить в этом коде, это:

laneNodes.add((RectangularNode)n);
gridNodes.add((RectangularNode)n);

Вы можете преобразовать узел в прямоугольник angular node, но не наоборот, поэтому ваш второй код не работает.

Если у вас есть другие узлы в сети, которые не являются прямыми angular узлами, вы можете что-то добавить вот так:

if(n.getClass().equals(RectangularNode.class))
     laneNodes.add((RectangularNode)n);
...