2016-04-13 8 views
0

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

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

+0

не совсем уверен, на что вы нацеливаетесь? Чего вы хотите достичь? – Benjamin

+0

Мне нужно динамически рисовать некоторые «карты» для агентов, чтобы показать информацию о мире. Например, в примере «Блуждающие слоны» в Anylogic они показывают динамическую карту местности, генерируемую динамически. Для этого автор использует элемент Image из pallete с каким-то пустым файлом PNG. Затем он загружает это изображение из кеша, как упоминалось в моем вопросе, и рисует его графику. Таким образом, очевидно, что существует необходимость в каком-то общем элементе, который можно извлечь. Необходимо подделать какое-то пустое изображение, а затем получить его из кеша только для того, чтобы получить возможность рисовать, похоже, ужасный перебор и отсутствие необходимой функции. –

+0

ОК, извините, но я все еще не совсем понятен. Есть несколько фоновых изображений, которые вы хотите показать в зависимости от некоторых условий модели? Поскольку объект Image может содержать как можно больше изображений (предварительно загруженных во время разработки в свойствах). Затем вы можете переключать, какой из них должен быть видимым, доступ к ним по индексу. Вы попробовали это? – Benjamin

ответ

0

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

ура

+0

Но как насчет ситуаций, когда вам нужно добавить больше прямоугольников на основе прогресса моделирования или ввода пользователя во время симуляции? Я думаю, вы не можете добавить больше прямоугольников программно после запуска моделирования. –

+0

вы всегда можете создавать любые объекты программно, так как это всего лишь Java. Для прямоугольника проверьте http://www.anylogic.com/anylogic/help/index.jsp?topic=/com.xj.anylogic.help/html/javadoc/com/anylogic/engine/presentation/ShapeRectangle.html – Benjamin

+0

Конечно, но вам нужно как-то добавить его в класс основного агента, чтобы он был нарисован и обработан им. Я проверил сгенерированный код Java без каких-либо указаний, что это можно сделать во время выполнения, используя предоставленный API. –