如何在AnyLogic运行时绘制图形对象?矩形创建后不显示怎么办?
在AnyLogic运行时添加矩形不显示的问题解决与绘图方法
嘿,我来帮你搞定这个AnyLogic的图形显示问题!你已经创建了ShapeRectangle对象,但之所以看不到,核心原因是你没把它“挂”到画布的可视化容器里——AnyLogic不会自动识别游离的图形对象,必须显式把它添加到某个可视化载体上。
一、快速修复你的代码
假设你是在Main代理里写的代码,只需要在创建矩形后加一行,把它绑定到Main的可视化根容器:
// 你的原代码 ShapeRectangle a = new ShapeRectangle(SHAPE_DRAW_2D ,true, 10, 10, 2, 0, black, black, 20, 20, 5, 0.5, LINE_STYLE_SOLID); // 关键新增:把矩形添加到当前代理的可视化树中 add(a);
要是你在其他Agent里创建,同样用add(a)就行——每个Agent都有自己的可视化容器,add()方法会把图形对象挂载进去,运行时就能看到啦。
二、AnyLogic运行时绘制图形的完整玩法
1. 通用流程:创建+挂载
所有运行时生成的图形(矩形、圆形、线条啥的)都得遵循这个逻辑:
- 第一步:用构造函数创建图形对象,按需调整参数(比如位置、颜色、尺寸)
- 第二步:调用
add(图形对象)把它加到当前代理的容器,或者指定某个父组件(比如名为myPresentation的Presentation组件):// 把图形加到指定的Presentation里 myPresentation.add(a);
2. 常用图形创建示例
给你几个常用的例子,方便参考:
- 绘制圆形:
ShapeCircle circle = new ShapeCircle(SHAPE_DRAW_2D, true, 50, 50, 0, 0, red, blue, 15, LINE_STYLE_DASHED); add(circle); - 添加动态文本标签:
ShapeText text = new ShapeText(SHAPE_DRAW_2D, "这是运行时加的文本", 100, 100, 0, black, Font.PLAIN, 12, TEXT_ALIGNMENT_CENTER); add(text);
3. 动态调整图形属性
创建完图形后,还能随时改它的样子,比如移动位置、换颜色:
// 把矩形移到新坐标 a.setX(100); a.setY(100); // 换成绿色填充 a.setFillColor(green); // 要是修改后没即时生效,就调用这个刷新 a.repaint();
4. 踩坑提醒
- 别在还没初始化的代码块里调用
add(),比如可以放在onStartup()事件、按钮点击事件里执行 - 如果是3D场景,记得把
SHAPE_DRAW_2D换成SHAPE_DRAW_3D,还要调整3D相关参数 - 图形会跟着所在Agent的位置移动,要是想固定在全局画布,就把它加到Main代理里
内容的提问来源于stack exchange,提问作者JHK
相关产品推荐
相关产品推荐

