<sect1>
<title
>API de criação de scripts da infraestrutura de grafos</title>

<para
>A janela de estrutura de dados permite o acesso de configuração das opções específicas da infraestrutura de Grafos. Use o <guilabel
>Tipo de grafo</guilabel
> para selecionar o tipo do grafo. O significado destes tipos é o seguinte: </para>
<itemizedlist>
    <listitem
><para
><guilabel
>Grafo</guilabel
>: Um grafo em que as mesmas arestas (relacionadas com os pontos de origem e destino) não podem existir várias vezes. </para
></listitem>
    <listitem
><para
><guilabel
>Multigrafo</guilabel
>: Um grafo no qual são permitidas várias arestas entre os mesmos nós (no que diz respeito aos pontos de origem e destino). </para
></listitem>
</itemizedlist>

<sect2>
<title
>Estrutura de dados do grafo</title>
<para
>Um objeto de grafo armazena as informações de uma estrutura de dados do tipo <quote
>Grafo</quote
>. </para>

<sect3>
<title
>Propriedades</title>
<itemizedlist>

    <listitem>
        <para
><emphasis
>name</emphasis
> : </para>
        <para
>O nome único desta estrutura de dados.</para>
    </listitem>

</itemizedlist>
</sect3>

<sect3>
<title
>Métodos</title>
<variablelist>

    <varlistentry>
    <term
>nodes()</term>
    <listitem>
        <para
>Devolve uma lista com todos os nós no grafo.</para>
    <funcsynopsis
><funcprototype
><funcdef
>array <function
>nodes</function
></funcdef
> <paramdef
></paramdef
> </funcprototype>
    </funcsynopsis>
    </listitem>
    </varlistentry>

    <varlistentry>
    <term
>nodes(tipo)</term>
    <listitem>
        <para
>Devolve uma lista com todos os nós no grafo do tipo indicado.</para>
    <funcsynopsis
><funcprototype
><funcdef
>array <function
>nodes</function
></funcdef
> <paramdef
>int <parameter
><replaceable
>tipo</replaceable
></parameter
></paramdef
> </funcprototype>
    </funcsynopsis>
    </listitem>
    </varlistentry>

    <varlistentry>
    <term
>edges()</term>
    <listitem>
        <para
>Devolve uma lista com todas as arestas do grafo.</para>
    <funcsynopsis
><funcprototype
><funcdef
>array <function
>edges</function
></funcdef
> <paramdef
></paramdef
> </funcprototype>
    </funcsynopsis>
    </listitem>
    </varlistentry>

    <varlistentry>
    <term
>edges(tipo)</term>
    <listitem>
        <para
>Devolve uma lista com todas as arestas no grafo do tipo indicado.</para>
    <funcsynopsis
><funcprototype
><funcdef
>array <function
>edges</function
></funcdef
> <paramdef
>int <parameter
><replaceable
>tipo</replaceable
></parameter
></paramdef
> </funcprototype>
    </funcsynopsis>
    </listitem>
    </varlistentry>

    <varlistentry>
    <term
>createNode(tipo)</term>
    <listitem>
        <para
>Cria um novo nó do tipo indicado e devolve o nó criado. Se o tipo não estiver registrado, nenhum nó será criado.</para>
    <funcsynopsis
><funcprototype
><funcdef
>GraphNode <function
>createNode</function
></funcdef
> <paramdef
>int <parameter
><replaceable
>tipo</replaceable
></parameter
></paramdef
> </funcprototype>
    </funcsynopsis>
    </listitem>
    </varlistentry>

    <varlistentry>
    <term
>createNode()</term>
    <listitem>
        <para
>Cria um novo nó com o tipo padrão e devolve o nó criado.</para>
    <funcsynopsis
><funcprototype
><funcdef
>GraphNode <function
>createNode</function
></funcdef
> <paramdef
></paramdef
> </funcprototype>
    </funcsynopsis>
    </listitem>
    </varlistentry>

    <varlistentry>
    <term
>createEdge(de, para, tipo)</term>
    <listitem>
        <para
>Cria uma aresta do nó "de" até o nó "para" do tipo indicado e devolve a aresta criada. Se o tipo não estiver registrado, nenhuma aresta será criada.</para>
    <funcsynopsis
><funcprototype
><funcdef
>GraphEdge <function
>createEdge</function
></funcdef
> <paramdef
>GraphNode <parameter
><replaceable
>de</replaceable
></parameter
></paramdef
> <paramdef
>GraphNode <parameter
><replaceable
>para</replaceable
></parameter
></paramdef
> <paramdef
>int <parameter
><replaceable
>tipo</replaceable
></parameter
></paramdef
> </funcprototype>
    </funcsynopsis>
    </listitem>
    </varlistentry>

    <varlistentry>
    <term
>createEdge(de, para)</term>
    <listitem>
        <para
>Cria uma aresta do nó "de" até o nó "para" do tipo indicado e devolve a aresta criada.</para>
    <funcsynopsis
><funcprototype
><funcdef
>GraphEdge <function
>createEdge</function
></funcdef
> <paramdef
>GraphNode <parameter
><replaceable
>de</replaceable
></parameter
></paramdef
> <paramdef
>GraphNode <parameter
><replaceable
>para</replaceable
></parameter
></paramdef
> </funcprototype>
    </funcsynopsis>
    </listitem>
    </varlistentry>

    <varlistentry>
    <term
>distances(de)</term>
    <listitem>
        <para
>Devolve uma lista com as durações de caminho mais curto a partir deste nó até todos os outros nós no grafo.</para>
    <funcsynopsis
><funcprototype
><funcdef
>Array <function
>distances</function
></funcdef
> <paramdef
>GraphNode <parameter
><replaceable
>de</replaceable
></parameter
></paramdef
> </funcprototype>
    </funcsynopsis>
    </listitem>
    </varlistentry>

</variablelist>
</sect3>
</sect2>

<sect2>
<title
>Nó do grafo</title>
<para
>Um nó é o elemento de dados de um grafo. </para>

<sect3>
<title
>Propriedades</title>
<itemizedlist>

    <listitem>
        <para
><emphasis
>width</emphasis
> : </para>
        <para
>O tamanho deste elemento de dados.</para>
    </listitem>

    <listitem>
        <para
><emphasis
>x</emphasis
> : </para>
        <para
>A coordenada X deste elemento de dados.</para>
    </listitem>

    <listitem>
        <para
><emphasis
>y</emphasis
> : </para>
        <para
>A coordenada Y deste elemento de dados.</para>
    </listitem>

    <listitem>
        <para
><emphasis
>id</emphasis
> : </para>
        <para
>O identificador único deste elemento de dados.</para>
    </listitem>

    <listitem>
        <para
><emphasis
>color</emphasis
> : </para>
        <para
>A cor deste elemento de dados, indicada como um valor hexadecimal.</para>
    </listitem>
</itemizedlist>
</sect3>

<sect3>
<title
>Métodos</title>
<variablelist>

    <varlistentry>
    <term
>neighbors()</term>
    <listitem>
        <para
>Devolve uma lista de todos os nós ligados a este nó. Este método respeita se as arestas são direcionais.</para>
    <funcsynopsis
><funcprototype
><funcdef
>array <function
>neighbors</function
></funcdef
> <paramdef
></paramdef
> </funcprototype>
    </funcsynopsis>
    </listitem>
    </varlistentry>

    <varlistentry>
    <term
>edges()</term>
    <listitem>
        <para
>Devolve uma lista com todas as arestas (de entrada e saída) deste nó.</para>
    <funcsynopsis
><funcprototype
><funcdef
>array <function
>edges</function
></funcdef
> <paramdef
></paramdef
> </funcprototype>
    </funcsynopsis>
    </listitem>
    </varlistentry>

    <varlistentry>
    <term
>edges(tipo)</term>
    <listitem>
        <para
>Devolve uma lista com todas as arestas (de entrada e saída) deste nó e com um tipo indicado.</para>
    <funcsynopsis
><funcprototype
><funcdef
>array <function
>edges</function
></funcdef
> <paramdef
>int <parameter
><replaceable
>tipo</replaceable
></parameter
></paramdef
> </funcprototype>
    </funcsynopsis>
    </listitem>
    </varlistentry>

    <varlistentry>
    <term
>inEdges()</term>
    <listitem>
        <para
>Devolve uma lista com as arestas de entrada deste nó.</para>
    <funcsynopsis
><funcprototype
><funcdef
>array <function
>inEdges</function
></funcdef
> <paramdef
></paramdef
> </funcprototype>
    </funcsynopsis>
    </listitem>
    </varlistentry>

    <varlistentry>
    <term
>inEdges(tipo)</term>
    <listitem>
        <para
>Devolve uma lista com todas as arestas de entrada deste nó com um tipo indicado.</para>
    <funcsynopsis
><funcprototype
><funcdef
>array <function
>inEdges</function
></funcdef
> <paramdef
>int <parameter
><replaceable
>tipo</replaceable
></parameter
></paramdef
> </funcprototype>
    </funcsynopsis>
    </listitem>
    </varlistentry>

    <varlistentry>
    <term
>outEdges()</term>
    <listitem>
        <para
>Devolve uma lista com todas as arestas de saída deste nó.</para>
    <funcsynopsis
><funcprototype
><funcdef
>array <function
>outEdges</function
></funcdef
> <paramdef
></paramdef
> </funcprototype>
    </funcsynopsis>
    </listitem>
    </varlistentry>

    <varlistentry>
    <term
>outEdges(tipo)</term>
    <listitem>
        <para
>Devolve uma lista com todas as arestas de saída deste nó com um tipo indicado.</para>
    <funcsynopsis
><funcprototype
><funcdef
>array <function
>outEdges</function
></funcdef
> <paramdef
>int <parameter
><replaceable
>tipo</replaceable
></parameter
></paramdef
> </funcprototype>
    </funcsynopsis>
    </listitem>
    </varlistentry>

    <varlistentry>
    <term
>edgesTo(destino)</term>
    <listitem>
        <para
>Devolve uma lista com todas as tarefas desde este nó até o nó indicado.</para>
    <funcsynopsis
><funcprototype
><funcdef
>array <function
>edgesTo</function
></funcdef
> <paramdef
>GraphNode <parameter
><replaceable
>destino</replaceable
></parameter
></paramdef
> </funcprototype>
    </funcsynopsis>
    </listitem>
    </varlistentry>
</variablelist>
</sect3>
</sect2>


<sect2>
<title
>Aresta do grafo</title>
<para
>Uma Edge (aresta) é a ligação entre dois GraphNodes (nós do grafo). As arestas podem ser direcionais ou não, dependendo do seu tipo. </para>

<sect3>
<title
>Propriedades</title>
<itemizedlist>
    <listitem>
        <para
><emphasis
>width</emphasis
> : </para>
        <para
>Largura da ligação.</para>
    </listitem>

    <listitem>
        <para
><emphasis
>directed</emphasis
> : </para>
        <para
>Se for verdadeiro, a ligação é direcional. Caso contrário, não é direcional.</para>
    </listitem>

    <listitem>
        <para
><emphasis
>from</emphasis
> : </para>
        <para
>Início da ligação.</para>
    </listitem>

    <listitem>
        <para
><emphasis
>to</emphasis
> : </para>
        <para
>Fim da ligação</para>
    </listitem>

    <listitem>
        <para
><emphasis
>color</emphasis
> : </para>
        <para
>ID do tipo de ligação.</para>
    </listitem>
</itemizedlist>
</sect3>


<sect3>
<title
>Métodos</title>
<variablelist>

    <varlistentry>
    <term
>remove()</term>
    <listitem>
        <para
>Remove esta ligação.</para>
    <funcsynopsis
><funcprototype
><funcdef
>void <function
>remove</function
></funcdef
> <paramdef
></paramdef
> </funcprototype>
    </funcsynopsis>
    </listitem>
    </varlistentry>

    <varlistentry>
    <term
>add_property(nome, valor)</term>
    <listitem>
        <para
>Adiciona uma nova propriedade à ligação.</para>
    <funcsynopsis
><funcprototype
><funcdef
>void <function
>add_property</function
></funcdef
> <paramdef
>string <parameter
><replaceable
>nome</replaceable
></parameter
></paramdef
> <paramdef
>string <parameter
><replaceable
>valor</replaceable
></parameter
></paramdef
> </funcprototype>
    </funcsynopsis>
    </listitem>
    </varlistentry>

    <varlistentry>
    <term
>remove_property(nome)</term>
    <listitem>
        <para
>Remove uma propriedade existente da ligação.</para>
    <funcsynopsis
><funcprototype
><funcdef
>void <function
>remove_property</function
></funcdef
> <paramdef
>string <parameter
><replaceable
>nome</replaceable
></parameter
></paramdef
> </funcprototype>
    </funcsynopsis>
    </listitem>
    </varlistentry>

</variablelist>
</sect3>
</sect2>

</sect1>
