Python:从函数到属性

技术注解 #17

2016年8月
作者:Grant MacKinnon

大多数用户都熟悉在Aimsun模型的目标中创建自己的属性。 这些通常是数字或字符串,但也有可能在一个目标中添加一个列,根据一些Python代码返回一个值,允许一个值被即时计算。

一个简单的例子是,在转弯处放置一个标签字母,说明它是左转、直行、右转还是调头。



Aimsun Python函数属性 显示网络中的属性

点击放大:显示网络中的属性


首先,我们可以使用类型编辑器创建这个列(通过从类型窗口中选择相关的目标类型),然后添加一个新的列:类型函数列,在这种情况下,一个返回字符串作为结果的列。



Aimsu Python函数属性 显示网络中的属性

点击放大:使用类型编辑器创建列


该函数需要包含一个Python函数,其形式为:

def eval_attr(object):

其返回一个带有结果的值。

以下是我们存储在该列中的代码

def determineTurningLetterForAngle(angle):
	dirString = ""
	if abs(angle)<30.0: dirString+="T" elif abs(angle)>150.0:< dirString+="U" elif angle>0.0:
		dirString+="L"
	else:
		dirString+="R"
	return dirString

def retrieveTurningLetterForTurning(turning):
	angle = turning.calcAngleSections()
	directionString = determineTurningLetterForAngle(angle)
	return directionString
	
def eval_attr(object):
	res = retrieveTurningLetterForTurning(object)
	return res


然而,我们可以通过一个脚本来创建这一切,该脚本可以创建列,并填充代码。
直接从Python脚本中设置列的代码如下:


def main():
	turnLetterAttr = model.getColumn("GKTurning::TurnLetter")
	if turnLetterAttr == None:
		turningType = model.getType("GKTurning")
		turnLetterAttr = 
turningType.addColumn("GKTurning::TurnLetter","TurnLetter", 
GKColumn.String, GKColumn.ePython)
	turnLetterAttr.setPythonCode(PYTHON_CODE_STRING)

main()

PYTHON_CODE_STRING 包含该函数的定义。

下载用于创建转向分类标签的Python脚本

  • 有问题吗? 请联系我们。

    我们在这里提供帮助!

  • 有问题吗? 请联系我们。

    我们在这里提供帮助!

分享