Программное создание сети

Иногда вам может понадобиться создать сеть с помощью программного кода. Обратите внимание, что такой код можно выполнить только при запуске модели, а созданную программно сеть нельзя отредактировать.

Демо модель: Create Network by Code

Рассмотрим пример создания сети, состоящей из точечного и прямоугольного узлов, соединенных с помощью пути. Агенты появляются в сети в точечном узле и движутся вдоль пути к прямоугольному узлу. Достигнув прямоугольного узла, агенты движутся к аттрактору, расположенному внутри узла.

Чтобы создать сеть программно, введите следующий Java код в качестве действия При запуске агента Main (в секции свойств Действия агента). В демо модели мы используем следующий код:

// Создание аттрактора
Attractor a = new Attractor( 25.0, 25.0, 4.7 );

// Создание прямоугольного узла
rn = new RectangularNode( this, SHAPE_DRAW_2D3D, true,
                               300.0, 250.0, 0.0, 100.0, 90.0, 0.0,

                                null, dodgerBlue, 2.0, LINE_STYLE_DASHED,
                                POSITION_CHOICE_BY_ATTRACTORS, a );


// Создание точечного узла
pn = new PointNode(this, SHAPE_DRAW_2D3D, true, 50.0, 200.0, 0.0, 1.0, dodgerBlue );

// Создание сегментов
MarkupSegmentLine ms1 = new MarkupSegmentLine(  50.0, 200.0, 0.0, 350.0, 200.0, 0.0 );
MarkupSegmentLine ms2 = new MarkupSegmentLine( 350.0, 200.0, 0.0, 350.0, 250.0, 0.0 );

// Создание путей
Path path = new Path( this, SHAPE_DRAW_2D3D, truetrue,
                                PATH_DASHEDLINE, dodgerBlue, 2.0, pn, rn, ms1, ms2 );


// Создание сети
Network n = new Network( this, "myNetwork", SHAPE_DRAW_2D3D, 0, truetrue, pn, rn, path );

// Добавление узлов / путей на презентацию
presentation.add(pn);
presentation.add(rn);
presentation.add(path);

Создание аттрактора

Сначала с помощью конструктора Attractor мы создадим аттрактор, передав в качестве аргументов X-Y координаты аттрактора и его ориентацию (угол в радианах).

Создание прямоугольного узла

Затем с помощью конструктора RectangularNode создадим прямоугольный узел. В качестве аргументов конструктора мы передаем следующие параметры:

Создание точечных узлов

Теперь мы создадим два точечных узла. Для этого мы используем конструктор PointNode, передав в качестве аргументов координаты точечного узла, радиус точки и ее цвет.

Создание сегментов разметки

Создадим два линейных сегмента разметки, которые затем объединим в один путь. Для этого мы вызовем конструктор MarkupSegmentLine, который принимает шесть аргументов: X, Y и Z-координаты начальной и конечной точек сегмента.

Создание путей

Чтобы создать путь, мы используем конструктор Path, задав для пути следующие параметры:

Создание сети

Мы указали все необходимые для создания сети элементы. В качестве аргументов конструктора Network мы передаем ссылку на агента (this), внутрь которого будет добавлена сеть, указываем имя сети ("myNetwork"), задаем режим отображения (2D, 3D или оба режима) и Z-координату сети (в нашем случае это значение равно нулю). В качестве значений аргументов isPublic и visible мы указываем true, а затем передаем ссылки на ранее созданные узлы и путь (pn, pn1, rn, path1, path2):

Network n = new Network( this, "myNetwork", SHAPE_DRAW_2D3D, 0, truetruepn, pn1, rn, path1, path2 );

Добавление элементов в группу presentation

Чтобы созданные нами элементы были видны во время выполнения модели, мы добавим их в группу presentation. Для этого мы вызываем функцию add() объекта presentation для каждого элемента сети.