MicroCity内置的LUA函数

Author Avatar
huuhghhgyg 9月 23, 2022
  • 在其它设备中阅读本文章

物流信息管理课程MicroCity学习笔记

Lua的小特性:集合

虽然Lua里面把它自己的数组称作table,但是我认为这个数据结构更类似于Python的集合或者json,里面可以存储任何东西,不受结构约束。

collection = {{"a", 1, 2}, "abc", {2, 3}}

如果需要查询数组的长度,只需要在数组名前面添加#即可得到

list = {1, 2, 3, 4, 5}
for i=1,#list do
    print(list[i])
end

Lua的数组(集合)下标从1开始,不同于C类语言的0

MicroCity的内置函数

为什么要写这个?因为MicroCity自带的编辑器相比较于“现代”的编辑器来说还是不够好用(如VSCode等)。我已经遇到了很多同学自己无法解决,找我排除代码中存在的问题。而这些问题98%都是由于语法问题,如缺少关键字(如endthen等)。但是我用VSCode,Lua插件一般都会直接给我自动补全。就算有什么问题也会高亮,或者使用快捷键格式化代码的时候也能看出问题。

我认为,相比于更加现代的编辑器,MicroCity自带的编辑器“ScriptEditor”由于语法问题的标示不明显、格式化代码功能缺失等使用便利性上的问题,特别是对于Lua语言不熟练的新手,造成代码编写的错误率更高。

说明:也许其中提到的功能存在于内在编辑器中,但是我反正是没有找到。

对于我个人来说,VSCode的操作快捷键和各种特性我已经很熟悉,所以我也更倾向于使用VSCode编写Lua语言的脚本。但是对于使用VSCode编写适用于MicroCity运行的Lua脚本(.mcs)而言,由于MicroCity内置了一些函数,无法在VSCode上高亮显示,因此需要特别整理出来方便日后使用。

常用函数

这里的函数不是全集,只是我用了多少就写多少😂
全部图形函数及使用方法参见 MicroCity文档(英文) 4.3 Shapes And Tables

在本页中浏览可以使用右上角的目录列表快速转到对应函数。

图形

函数 作用
Open 打开图形文件,并获取图形文件对象
Update 刷新图形

Open

Open("路径"),返回图形文件对象。

countryObject = Open("countries.shp")

Update

Update([图形对象]),刷新图形对象,显示最新的图形。

Update(countryGRD)

矢量图

函数 作用
GetRecCount 获取图形文件中记录的图形对象个数
GetShape 从图形文件对象中获取图形对象
GetPartCount 获取对应图形对象分为多少个部分
GetPointCount 获取对应图形对象(部分)有多少个点
GetPointXY 获取图形对象指定部分、指定点编号的XY坐标
GetValue 获取图形对象的属性值
SetValue 设置图形对象的属性值
GetShapeLen 获取图形对象的长度
GetDistance 获取坐标点之间的距离

GetRecCount

GetRecCount([图形文件对象]),返回图形文件中记录的图形对象个数。

countryNum = GetRecCount(countriesObject)

GetShape

GetShape([图形文件对象], [图形对象编号]),返回对应的图形对象。

China = GetShape(countries, 31)

GetPartCount

GetPartCount([图形对象]),返回对应图形对象有多少个部分。

part_num_of_China = GetPartCount(China)

GetPointCount

GetPointCount([图形对象(部分)], [图形部分编号]),返回此部分图形的点的总数。

point_num = GetPointCount(China, i)

GetPointXY

GetPointXY([图形对象], [图形部分点编号], [图形部分]),返回对应点的X坐标和Y坐标。形式为x,y

local x,y = GetPointXY(country, pointIndex, partIndex)

GetValue

GetaValue([图形对象], "属性名"),返回对应图形对象的属性值。

name = GetValue(country, "NAME")

SetValue

设置图形对象的属性值。也可以是对应图形表中的值。

函数重载:

-- 对单个图形对象进行属性设置
SetValue([图形对象], [设置值], "属性名")
SetValue([图形对象], [设置值1], "属性名1", [设置值2], "属性值2", ...)

-- 设置图形文件对象中固定编号(index)对象的属性值(Shapes中包含有多个图形对象)
SetValue (Shapes, [设置值], "属性名", [index])
-- 也可以设置多个编号的同一个属性名为同一个值
SetValue (Shapes, [设置值], "属性名", [index1], [index2], ...)

使用实例

SetValue(shape, 0, "W") --设置图形的W(表中)属性值为0

GetShapeLen

返回图形的长度

函数重载:

GetShapeLen([图形])
GetShapeLen([图形1], [图形2], ...)

使用实例

local len = GetShapeLen(route) --获取线路(line形状)的长度

GetDistance

根据坐标值返回坐标点的长度。如果输入了多个坐标点,则返回每两对点之间的距离。(x1,y1), (x2,y2), (x3,y3)

GetDistance(x1, y1, x2, y2 [, x3, y3, ...])

栅格图

函数 作用
ShapeToGrid 将矢量图转化为栅格图
GetGridMaxXY 返回栅格图形的最大X和Y坐标
GetValue 获取栅格图指定点的值
SetValue 设置栅格图指定点的值

ShapeToGrid

ShapeToGrid([栅格图形对象], [矢量图形对象], "表属性名称"),将矢量图形转化为栅格图形,栅格图形中的点填充为表中属性对应值

ShapeToGrid(countryGridObject, countryShapeObject, "Population") --矢量图形转化为栅格图形,填充值为表中的Population列对应值

GetGridMaxXY

GetGridMaxXY([栅格图形对象]),返回栅格图形的XMax坐标和YMax坐标(最大坐标)。

local XMax, YMax = GetGridMaxXY(gridObject)

GetValue

GetValue([栅格图形对象], x, y),返回栅格图指定xy坐标点上的值

value = GetValue(gridObject, x, y)

SetValue

SetValue([栅格图形对象], [设置值], x, y),将栅格图形上指定xy坐标点的值更改为“设置值”。

SetValue(gridObject, 0, x, y) --将(x,y)点的值设为0

MicroCity文档和更多学习笔记已经整合到MicroCity笔记中,并在其中提供搜索功能。请参阅:

link
本文链接:
发文时间
9月 23, 2022
请遵循协议