【仿真建模-anylogic】动态生成辊道网络

Author:赵志乾
Date:2024-06-18
Declaration:All Right Reserved!!!

1. 常用函数

          辊道网络中可以包含多种元素,在动态生成辊道网络中,最常用到的是Conveyor元素和ConveyorCustomStation元素。本次示例仅说明Conveyor元素的动态生成,其内部对应的Java类为ConveyorPath;每个Conveyor可由若干段组成,段所对应的Java类为MarkupSegmentLine;这些类大部分都有多个构造函数,以下表格列举了常用的构造函数,其他已被官方标注为Deprecated;

函数功能
ConveyorNetwork(Agent owner, String name)构造函数,入参分别为网络的owner和网络名称;
ConveyorPath()构造函数
MarkupSegmentLine(double sx, double sy, double sz, double ex,double ey, double ez)构造函数,入参分别为起始点坐标,单位为像素;

2. 数据结构定义

{
    "points": [
        {
            "code": "",  // 点编码
            "name": "",  // 点名称
            "x": 0.0,    // 点坐标
            "y": 0.0,
            "z": 0.0
        }
    ],
    "conveyors": [
        {
            "code": "",        // 辊道编码
            "name": "",        // 辊道名称
            "pointCodes": []   // 辊道从起点至终点所经历的位置点编码列表
        }
    ]
}

3. 代码实现

// 数据对象定义
public class PointDefinition implements Serializable {
	private String code;
	private String name;
	private Double x;
	private Double y;
	private Double z;

    // setter、getter
}

public class ConveyorDefinition implements Serializable {
	private String code;
	private String name;

    // setter、getter
}

public class LayoutDefinition implements Serializable {
	private List<PointDefinition> points;
	private List<ConveyorDefinition> conveyors;
    // setter、getter
}


// 辊道动态生成
// step1: 位置点定义转map,方便后续使用
Map<String,PointDefinition> codeToPointDefinitionMap = layoutDefinition.getPoints()
	.stream()
	.collect(Collectors.toMap(PointDefinition::getCode, Function.identity(), (a,b)->b));

// step2: 定义网络对象
ConveyorNetwork conveyorNetwork = new ConveyorNetwork(this,"conveyorNetwork");

// step3: 向网络添加conveyor
for(ConveyorDefinition conveyorDefinition : layoutDefinition.getConveyors()){
	ConveyorPath conveyor = new ConveyorPath();
    
    // 每个conveyor由若干段组成
	for(int index=0; index<conveyorDefinition.getPointCodes().size()-1; index++){
		PointDefinition startPoint = codeToPointDefinitionMap.get(conveyorDefinition.getPointCodes().get(index));
		PointDefinition endPoint = codeToPointDefinitionMap.get(conveyorDefinition.getPointCodes().get(index+1));
		double startX = scale.pixelsPerUnit(METER)*startPoint.getX();
		double startY = scale.pixelsPerUnit(METER)*startPoint.getY();
		double startZ = scale.pixelsPerUnit(METER)*startPoint.getZ();
		double endX = scale.pixelsPerUnit(METER)*endPoint.getX();
		double endY = scale.pixelsPerUnit(METER)*endPoint.getY();
		double endZ = scale.pixelsPerUnit(METER)*endPoint.getZ();
		MarkupSegmentLine segment = new MarkupSegmentLine(startX, startY, startZ, endX, endY, endZ);
		conveyor.addSegment(segment);
	}
	conveyorNetwork.add(conveyor);

}

// step4: 将生成的网络添加到演示中
Level customLevel = new Level(this,"customLevel",SHAPE_DRAW_2D3D,0);
customLevel.add(conveyorNetwork);
customLevel.initialize();
presentation.add(customLevel);




  • 14
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我叫白小猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值