Arquitetura do Aimsun Next¶
Aimsun Next é dividido em duas partes principais: o Kernel e a UI. O Kernel contém todas as classes que fazem parte do domínio da aplicação. A UI contém todas as classes necessárias para implementar a interface do usuário (como diálogos, gavetas, controles…). No paradigma Model-View-Controller, o Kernel contém o Model e a UI contém a View e o Controller.
O domínio de aplicação do Aimsun Next é transporte. O sistema foi projetado para dar suporte a aplicações relacionadas a transporte (como simuladores de tráfego, problemas de localização ou modelos de alocação). Essa especialização do modelo oferece ao desenvolvedor facilidades não encontradas em outros sistemas mais gerais, como ruas/rodovias, matrizes OD, planos de controle e informações de topologia. Ele também oferece suporte a aplicações GIS gerais (como a capacidade de importar shapefiles, adicionar informações semânticas a esses arquivos gráficos usando consultas de banco de dados ou representar qualquer atributo de qualquer objeto do modelo de diversas formas). Em qualquer caso, o objetivo do Aimsun Next não é substituir um GIS, mas oferecer todas as funcionalidades GIS de que um engenheiro de tráfego precisará, porém em um ambiente mais focado.
O Kernel¶
O Kernel é dividido em três componentes principais:
- Classes genéricas não gráficas
- Classes gráficas genéricas
- Classes de transporte (tanto gráfico quanto não gráfico).
As classes genéricas definem os fundamentos básicos do Aimsun Next. As classes de transporte são construídas usando essas classes básicas.
Em particular, as classes genéricas oferecem:
- Um ambiente extensível ao qual novos plug-ins podem ser adicionados para fornecer mais funcionalidades (seja adicionando novas classes, novos editores, novos atributos etc., ou alterando as classes disponíveis).
- Desfazer e Refazer Ilimitados.
- Armazenamento e restauração do modelo em um arquivo.
- Representação gráfica 2D e 3D.
- Suporte à internacionalização.
- Suporte multiplataforma.
Classes Genéricas Não Gráficas ¶
A figura abaixo mostra as principais classes não gráficas do Kernel.

As classes base são:
- GKSystem: Uma classe singleton (existe apenas uma instância desta classe) que contém dados comuns a qualquer documento em uma sessão, sendo estes principalmente os tipos, os plug-ins e os filtros; isso significa que quaisquer dois documentos carregados no Aimsun Next podem conter dados diferentes, mas compartilharão os mesmos tipos.
- GKModel: Uma classe que armazena dados de documentos.
- GKObject: Uma classe herdada por qualquer objeto no sistema (gráfico ou não).
Para acessar a instância única de GKSystem, o seguinte código é usado:
system = GKSystem.getSystem();
Todo o modelo de dados é organizado em torno da classe GKModel. Essa classe contém todos os dados em um modelo - nesse contexto, um modelo é um documento. Por exemplo, um mapa CAD de uma cidade será o documento, ou modelo, em uma aplicação CAD.
Cada vez que um novo documento é criado ou aberto, uma instância de GKModel é criada. Cada vez que o documento é salvo em disco, todos os dados no GKModel são salvos.
O modelo ativo pode ser acessado usando a variável modelo que é inicializada automaticamente para referenciar o modelo ativo:
model = GKSystem.getSystem().getActiveModel()
Um modelo é uma coleção de instâncias de GKObject (na verdade, de subclasses de GKObject). Uma linha, uma via, uma matriz OD etc. são todas instâncias de uma subclasse de GKObject. Uma instância de um GKObject tem um tipo e um identificador de modelo único, que é atribuído quando o objeto é criado pela primeira vez e é imutável durante a vida do objeto.
O modelo mantém todos os dados em um catálogo (uma instância de GKCatalog). Esse catálogo mantém os dados organizados por tipo (classe) e identificador (único). Objetos dentro do catálogo podem ser acessados iterando sobre objetos de um determinado tipo, conforme mostrado usando código como:
for s in type.values():
print "ID: %i Name: %s" % (s.getId(), s.getName())
Isso é expandido posteriormente no Exemplo Básico de Scripting.
Cada instância de um objeto tem um GKType que contém informações de tipo. Uma instância de GKType é compartilhada entre todos os objetos do mesmo tipo. Esta classe contém informações sobre o nome da classe (um nome interno usado para identificar exclusivamente a classe e um nome externo a ser apresentado ao usuário) e todos os atributos visíveis.
Plug-ins¶
Plug-ins são DLLs (no Windows) ou bibliotecas compartilhadas (em UNIX/LINUX e MacOS X) que são carregadas quando o Aimsun Next é iniciado e que implementam novas funcionalidades. O microssimulador e o mesossimulador são dois exemplos de plug-ins. Um plug-in é sempre uma subclasse de GKPlugin.
Filtros¶
Filtros são classes usadas para importar e exportar dados para ou de um modelo do Aimsun. Eles são instâncias de GKFilter. Exemplos de filtros incluem aqueles para importação e exportação DXF, importação de ESRI Shapefiles ou exportação HTML.
Organização de Objetos Não Gráficos¶
Objetos não gráficos são organizados em pastas (instâncias de GKFolder), agrupados por tipo ou funcionalidade. Essa organização aparece na Janela do Projeto. Cada pasta tem um nome interno usado para identificá-la de forma única e um nome externo a ser apresentado ao usuário. Use o nome interno para localizar uma pasta, por exemplo, ao adicionar um novo objeto.
Classes Gráficas Genéricas¶
A próxima figura mostra as principais classes gráficas do Kernel. GKGeoObject é a classe da qual herda qualquer classe gráfica, enquanto GKGeoModel é um contêiner para todos os objetos gráficos.

As classes gráficas básicas são:
- GKDPoint para pontos únicos.
- GKPolyline para uma coleção de segmentos conectados.
- GKPolygon para polilinhas fechadas.
- GKBezierCurve para curvas de Bezier.
Como esses objetos são desenhados é responsabilidade dos desenhadores definidos no código da UI. No entanto, os dados para uma representação genérica são armazenados usando as classes GKViewMode e GKViewModeStyle. Essas classes contêm modificações sobre como os pontos, linhas, curvas e polígonos serão desenhados com base nos valores de alguns de seus atributos. Elas contêm, por exemplo, instruções para os desenhadores desenharem uma linha em vermelho quando o comprimento for inferior a 20 metros.
Organização de Objetos Gráficos¶
Os objetos gráficos são organizados em camadas (instâncias de GKLayer). Uma camada pode conter um ou mais objetos de qualquer tipo. Uma camada pode manter objetos de diferentes tipos, mas normalmente será usada para agrupar objetos do mesmo tipo. As camadas também são usadas nas vistas 2D para priorizar a ordem de desenho (o que é desenhado sobre o quê).
As camadas são armazenadas no modelo geográfico. Um objeto gráfico estará no modelo geográfico, mas outra referência a ele é colocada no catálogo do modelo. Se o usuário decidir ocultar um objeto gráfico, uma possível solução será removê-lo do modelo geográfico ou, mais precisamente, da camada que o contém. Para excluir um objeto gráfico, ele deve ser removido tanto da camada quanto do catálogo.
Classes de transporte¶
As classes de transporte são construídas sobre as classes genéricas. A figura abaixo mostra as principais classes gráficas de transporte: seções (chamadas de links em outras aplicações), nós, movimentos de conversão, centroides e rotas.

Tanto as seções quanto os movimentos de conversão são curvas de Bezier. Um nó tem uma posição, mas também possui uma geometria complexa (um conjunto de polígonos) definida pela geometria de seus movimentos de conversão.
Uma rota é uma coleção ordenada de seções, enquanto uma linha de transporte público adiciona informações para paradas.
Aimsun Next também inclui classes de transporte não gráficas:
- Matrizes OD, estados de tráfego (demanda baseada em fluxos de entrada e proporções de conversão).
- planos de controle.
- ações de gestão de tráfego etc.
módulos Python¶
Um subconjunto de classes é disponibilizado para scripting por meio de um conjunto de módulos Python. Eles fornecem bindings Python para os objetos e métodos C++ originais.
No início de cada script, todos os módulos que fornecem acesso às classes que serão usadas devem ser importados. Por exemplo, para usar os recursos da modelagem macroscópica em um script, use o código a seguir
from PyMacroToolPlugin import *
PyANGKernel e PyANGGui são importados automaticamente durante a inicialização do ambiente de scripting, portanto não precisam ser listados novamente em scripts que serão executados a partir do Aimsun Next. Eles fornecem todas as funções fundamentais da Plataforma Aimsun Next. Isso significa que, para edição do modelo, nenhuma outra importação é necessária.
Classes incluídas em diferentes módulos Python ¶
| Módulo | Classes | Funcionalidade |
|---|---|---|
| PyANGKernel | classes GK* (exceto GKAimsunExtension e GKGuiSystem) | "" |
| PyANGGui | GAnyObjectChooser, GAnyObjectChooser Editor, GDrawer, GDrawerHit, GEditor, GGui, GKGUISystem, , GView, G2DDrawer, G2DView, GViewWindow, G2DViewWindow, G2DViewLayer | "" |
| PyANGDTA | DTAManager, DTASimulator, DTACentroid, DTAPossiblePath, DTASection, DTATurning, DTAUserClass, DTAVehicleType, DTAIterativeSimulationResultData | Simuladores dinâmicos |
| PyMacroKernelPlugin | MacroExperiment, MacroScenario, CMacroStatsManager, MacroIterationInfo, MacroExperimentParams, CMacroSection, CMacroTurning, MacroModelPlugin, CMacroConnection, CMacroUserClass, MacroScenarioOutputData, CMacroTrajectory | Kernel Macroscópico |
| PyMacroToolPlugin | MacroTraversalPars, MacroTraversal, MacroToolsPlugin, DetectorLocation | Ferramentas Macroscópicas |
| PyFrankWolfe | CFrankWolfeParams | Frank&Wolfe |
| PyMacroAdjustmentPlugin | MacroAdjustment, MacroAdjustmentExperiment, MacroAdjustmentPlugin, MacroAdjustmentScenario, MacroAdjustmentScenarioParams,MacroAdjustmentScenarioUserClassParams, PerCentroidData, PerVehData,ODMaxDeviation | Ajuste Macroscópico |
| PyMacroPTPlugin | MacroPTStop, MacroPublicLine, MacroPTSection, MacroPTStation | Alocação de Transporte Público |
| PyPTAdjustmentPlugin | MacroPTAdjustmentExperiment, MacroPTAdjustmentResult, AdjustmentMeasurementContextPT, PTResultObservation | Ajuste de Transporte Público |
| PyLandUsePlugin | GKGenerationAttractionFactor, GKGenerationAttractionData, GKGenerationAttractionScenario, GKGenerationAttractionCentroidType, GKTimePeriod, GKTransportationMode, GKTimePeriodNewCmd, GKGenerationAttractionDataSet, CentroidGenerationAttractionData, ExternalData, CentroidDistributionData, GKDistributionDataSet, GenerationAttractionOutput, GKGenerationAttractionExperiment, GKDistributionCentroidType, GKParkingCentroidType, GKGenerationAttractionDataSetAttributeNewCmd | Modelagem de Demanda de Viagens |
| PyANGConsole | ANGConsole | Console do Aimsun Next |
| PyANGApp | ANGApp | Carregar o Aimsun Next a partir do Python |