Nota Técnica #17

Agosto de 2016
por Grant MacKinnon

A maioria dos usuários está familiarizada com a criação de seus próprios atributos dentro de objetos de um modelo Aimsun. Estes serão normalmente números ou strings, mas também é possível adicionar uma coluna a um objeto onde um valor é retornado com base em algum Código Python, permitindo que um valor seja calculado em tempo real.

Um exemplo simples é aquele que coloca uma etiqueta em um movimento para dizer se é Esquerda, Em Frente, Direita ou Retorno em U.

Aimsun Python function attribute Showing the attribute in the networkClick to enlarge: Showing the attribute in the network
Primeiro poderíamos criar esta coluna usando o Editor de Tipos (selecionando o tipo de objeto relevante na janela Tipos), depois adicionando uma nova coluna de Coluna Tipo Função, neste caso uma que retorna uma string como resultado.

Aimsu Python function attribute Showing the attribute in the networkCriar a coluna utilizando o Editor de Tipos
A função precisa conter uma função Python com assinatura do formato:


def eval_attr(object):

que retorna um valor com o resultado. Aqui está o código que armazenamos dentro da coluna


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

No entanto, podemos criar tudo isso a partir de um script que cria a coluna e preenche o código. O código para criar a coluna diretamente a partir de um script Python é o seguinte:


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 contém a definição da função.