Author:赵志乾
Date:2024-06-27
Declaration:All Right Reserved!!!
1. 应用场景
Scale是比例尺,用于长度单位和像素之间的换算,anylogic默认为每个agent生成一个scale,且anylogic绘制动画时,均是以像素为单位。
anylogic默认的scale属性设置窗口如下:
其中,Position部分用于配置Scale的图像展示,一般无需操作;Length,pixels属性用于定义Scale图像长度,单位为像素;Scale is属性选择Defined graphically时,需设置Ruler length corresponds to属性,即Scale图像长度表示的实际长度是多少;Scale属性选择Specified explicity时,需要设置Scale属性,即直接设定每长度单位代表多少像素。
无论选择哪种设置方式,anylogic在内部都会自动将其换算为每米多少个像素,然后实例化Scale。
2. 代码解析
//*************************核心字段*************************
// 默认比例尺,每米10个像素
public static final Scale DEFAULT_SCALE = new Scale(10.0);
// 每米像素个数
private final double pixelsPerMeter;
//*************************构造方法*************************
public Scale(double pixelsPerMeter) {
this.pixelsPerMeter = pixelsPerMeter;
}
//*************************长度单位与像素间的换算************
// 每单位长度对应的像素个数
public double pixelsPerUnit(LengthUnits units) {
return this.pixelsPerMeter / LengthUnits.METER.convertTo(1.0, units);
}
// 像素个数转换为长度
public double toLengthUnits(double lengthInPixels, LengthUnits units) {
return lengthInPixels / this.pixelsPerUnit(units);
}
// 长度转换为像素个数
public double toPixels(double lengthInUnits, LengthUnits units) {
return lengthInUnits* this.pixelsPerUnit(units);
}