Программно нарисовать изображение в Anylogic

Есть ли способ программно рисовать изображения в Anylogic? Единственный метод, который я нашел до сих пор, - это добавить элемент изображения в проект, указать его изображение из файловой системы, а затем получить его из кеша во время выполнения (например, getPresentation().getPanel().getImageCache().getCachedImage( this, "/wandering_elephants/", "Altitudes.PNG", 500, 500 );) и нарисовать его.

Но это, кажется, краска в заднице, если вам нужно создавать изображения переменного размера. Я искал какой-то элемент Drawable в палитре, но, похоже, эта базовая функциональность отсутствует.


person B.Gen.Jack.O.Neill    schedule 13.04.2016    source источник
comment
не совсем уверен, к чему вы стремитесь? Чего вы хотите достичь?   -  person Benjamin    schedule 14.04.2016
comment
Мне нужно динамически рисовать фоновую карту для агентов, чтобы показать информацию о мире. Например, в примере с блуждающими слонами в Anylogic они показывают карту высот местности, сгенерированную динамически. Для этого автор использует элемент Image из палитры с каким-то пустым PNG-файлом. Затем он загружает это изображение из кеша, как указано в моем вопросе, и рисует его графику. Поэтому очевидно, что нужен какой-то общий элемент рисования. Необходимость подделать какое-то пустое изображение, а затем получить его из кеша только для того, чтобы получить возможность рисовать, кажется ужасным излишеством и отсутствием необходимой функции.   -  person B.Gen.Jack.O.Neill    schedule 14.04.2016
comment
хорошо, извините, но я все еще не совсем ясно. Есть ли несколько фоновых изображений, которые вы хотите показать в зависимости от некоторых условий модели? Потому что объект Image может содержать столько изображений, сколько вы хотите (предварительно загруженных во время разработки в свойствах). Затем вы можете переключить, какой из них должен быть видимым, обращаясь к ним по индексу. Вы пробовали это?   -  person Benjamin    schedule 14.04.2016
comment
Если у вас есть Anylogic под рукой, просто посмотрите на пример модели Бродячих слонов, точнее на процесс рендеринга ее карты (растительность, песок, вода) во время выполнения. Я, к сожалению, не знаю, как лучше описать то, что я хочу - просто какой-нибудь простой элемент, который вы можете вставить из палитры, который обеспечит возможность программного рисования без необходимости загружать какое-то фальшивое пустое изображение из кеша - как это сделано в упомянутом примере.   -  person B.Gen.Jack.O.Neill    schedule 14.04.2016
comment
посмотрел, даже не уверен, почему они вообще используют изображение. Для такого фона вы можете просто использовать повторяющиеся прямоугольники, которые вы раскрашиваете динамически. Было бы легче и по производительности.   -  person Benjamin    schedule 15.04.2016
comment
Интересно, потому что я также использовал реплицированные прямоугольники, как показано в примере Harvest Simulator. Есть ли возможность динамически добавлять больше прямоугольников во время выполнения моделирования? Например, мне нужно нарисовать лабиринт переменных размеров из блоков определенного размера. Поэтому, если пользователь решит изменить размер лабиринта во время моделирования, мне нужно будет добавить больше прямоугольников.   -  person B.Gen.Jack.O.Neill    schedule 16.04.2016


Ответы (1)


Вы можете использовать реплицированные прямоугольники. Чтобы изменить количество репликаций, используйте переменную типа int с именем numberOfReplications. Вставьте это в свойство «Репликация» вашего прямоугольника, и вы сможете динамически изменять эту переменную.

ваше здоровье

person Benjamin    schedule 18.04.2016
comment
Но как насчет ситуаций, когда вам нужно добавить больше прямоугольников в зависимости от хода моделирования или действий пользователя во время моделирования? Я считаю, что вы не можете добавить больше прямоугольников программно после запуска моделирования. - person B.Gen.Jack.O.Neill; 19.04.2016
comment
вы всегда можете создать любой объект программно, так как это всего лишь Java. Для прямоугольника отметьте anylogic.com/anylogic/help/index.jsp?topic=/ - person Benjamin; 20.04.2016
comment
Конечно, но вам нужно каким-то образом добавить его в класс главного агента, чтобы он отрисовывался и обрабатывался им. Я проверил сгенерированный код Java без каких-либо указаний на то, что это можно сделать во время выполнения с использованием предоставленного API. - person B.Gen.Jack.O.Neill; 20.04.2016
comment
Это возможно. Вам нужно добавить его в презентацию вручную, это правильно. Стоит проверить поддержку и документацию AL для этого (или сделать методом проб и ошибок), я никогда этого не помню, извините :-( - person Benjamin; 21.04.2016