<?xml version="1.0" ?>
<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [

  <!ENTITY kappname "&rocs;">
  <!ENTITY package "kdeedu">
  <!ENTITY % addindex "IGNORE">
  <!ENTITY % Spanish "INCLUDE">
]>
<book lang="&language;">

<bookinfo>
<title
>El manual de &rocs;</title>
<authorgroup>
<author
><personname
> <firstname
>Tomaz</firstname
> <surname
>Canabrava</surname
> </personname
> <email
>tomaz.canabrava@gmail.com</email
> </author>
<author
><personname
> <firstname
>Andreas</firstname
> <surname
>Cord-Landwehr</surname
> </personname
> <email
>cordlandwehr@googlemail.com</email
> </author>

<othercredit role="translator"
><firstname
>Leticia</firstname
><surname
>Martín Hernández</surname
><affiliation
><address
><email
>leticia.martin@gmail.com</email
></address
></affiliation
><contrib
>Traducción</contrib
></othercredit
> <othercredit role="translator"
><firstname
>Rocío</firstname
><surname
>Gallego</surname
><affiliation
><address
><email
>traducciones@rociogallego.com</email
></address
></affiliation
><contrib
>Traducción</contrib
></othercredit
> 
</authorgroup>

<copyright
><year
>2009</year
><holder
>Tomaz Canabrava</holder
></copyright>
<copyright
><year
>2011</year
><holder
>Andreas Cord-Landwehr</holder
></copyright>

<date
>2011-12-04</date>
<releaseinfo
>1.1 &kde; 4.8</releaseinfo>

<legalnotice
>&FDLNotice;</legalnotice>

<abstract>
<para
>&rocs; es una herramienta de teoría de grafos para KDE. </para>
</abstract>

<keywordset>
<keyword
>KDE</keyword>
<keyword
>kdeedu</keyword>
<keyword
>matemáticas</keyword>
<keyword
>matemáticas</keyword>
<keyword
>grafos</keyword>
<keyword
>nodo</keyword>
<keyword
>arista</keyword>
</keywordset>

</bookinfo>

<chapter id="introduction">
<title
>Introducción</title>
<para
>&rocs; es un Entorno de desarrollo integrado de teoría de grafos para todos aquellos interesados en el diseño y el análisis de algoritmos, entre ellos,</para>
<itemizedlist>
	<listitem
><para
>los profesores universitarios que quieran demostrar los algoritmos a sus estudiantes,</para
></listitem>
	<listitem
><para
>los estudiantes que quieran entender y ver como funciona un algoritmo</para
></listitem>
	<listitem
><para
>y todos aquellos que tengan que diseñar algoritmos de grafos y necesiten una herramienta para la prueba de prototipos.</para
></listitem>
</itemizedlist>
<para
>Para todos esos usuarios, &rocs; proporciona un editor de grafos fácil de utilizar para definir grafos, un potente motor de scripts de Qt para ejecutar algoritmos y varias herramientas de asistente para configurar grafos y estructuras de datos para hacer experimentos. Así que el flujo de trabajo habitual es escribir un algoritmo, crear un grafo y ver en tiempo real cómo funciona el algoritmo en el grafo.</para>

<screenshot>
<screeninfo
>Una captura de pantalla de &rocs;.</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="rocs-screenshot.png" format="PNG"/>
</imageobject>
<textobject>
<phrase
>Una captura de pantalla de &rocs;.</phrase>
</textobject>
</mediaobject>
</screenshot>
</chapter>

<chapter id="user-interface">
<title
>La interfaz de usuario de &rocs;</title>

<sect1 id="user-interface-all">
<title
>Elementos generales de la interfaz de usuario</title>
<para
>La interfaz de usuario se divide en varias partes lógicas tal como se presentan en la captura de pantalla de más abajo. </para>
<screenshot>
	<screeninfo
>Elementos de la interfaz gráfica de usuario de &rocs;.</screeninfo>
	<mediaobject>
	<imageobject>
	<imagedata fileref="rocs-interfaces.png" format="PNG"/>
	</imageobject>
	<textobject>
	<phrase
>Elementos de la interfaz gráfica de usuario de &rocs;.</phrase>
	</textobject>
	</mediaobject>
</screenshot>
<variablelist>
<varlistentry>
	<term
>Barra de herramientas del editor visual de grafos</term>
	<listitem
><para
>para poder dibujar o modificar grafos en la pizarra el editor visual de grafos, primero es necesario seleccionar aquí una herramienta.</para
></listitem>
</varlistentry>
<varlistentry>
	<term
>Editor visual de grafos</term>
	<listitem
><para
>Esta es la parte en la que se pueden dibujar los grafos. Al hacer clic con el botón derecho en la pizarra, en los elementos de grafo o en los elementos de grafo seleccionados se abre un menú de contexto que depende de donde haya hecho clic.</para
></listitem>
</varlistentry>
<varlistentry>
	<term
>Propiedades de grafo</term>
	<listitem
><para
>Esto ofrece una lista completa de todos los grafos diferentes que hay actualmente en la pizarra del editor visual de grafos. Aquí se pueden hacer modificaciones, por ejemplo, en el nombre del grafo o en las propiedades visibles, como los nombres o los valores de los nodos, o bien definir colores predeterminados para los elementos de grafo.</para
></listitem>
</varlistentry>
<varlistentry>
	<term
>Editor de scripts</term>
	<listitem
><para
>En este editor de texto se puede escribir algoritmos en scrips Qt (para nuestros propósitos, esto es prácticamente lo mismo que el JavaScript). Se puede trabajar en varios algoritmos al mismo tiempo abriendo o creando nuevas pestañas de script en el menú principal. Si los cambios actuales de una pestaña no están grabados, aparece un símbolo con un pequeño disco.</para
></listitem>
</varlistentry>
<varlistentry>
	<term
>Depuración de errores y resultado del algoritmo</term>
	<listitem
><para
>Esta zona de texto muestra información sobre la depuración de errores, o bien el resultado del algoritmo, dependiendo de la selección de preferencias del resultado. Si el script da un error, automáticamente se selecciona el resultado de la depuración de errores. Además, el resultado de la depuración de errores también presenta mensajes sobre el resultado del programa.</para
></listitem>
</varlistentry>
<varlistentry>
	<term
>Ejecución del script</term>
	<listitem
><para
>Esta zona controla la ejecución de los algoritmos. Se puede ejecutar el script que esté abierto actualmente en el editor de scripts del grafo de la pizarra del editor visual de grafos pulsando <guiicon
>Ejecutar</guiicon
>. Mientras se ejecuta el script, se puede detener la ejecución pulsando el botón <guiicon
>Detener</guiicon
>.</para
></listitem>
</varlistentry>
</variablelist>
</sect1>

<sect1 id="user-interface-toolbars">
<title
>Barras de herramientas</title>
<para
>Hay diferentes barras de herramientas posibles para el editor visual de grafos que permiten acceder a las características con solo un clic. En las preferencias predeterminadas, se muestran las siguientes barras de herramientas:</para>
<itemizedlist>
	<listitem
><para
>Barra de herramientas principal</para
></listitem>
	<listitem
><para
>Barra de herramientas principal</para
></listitem>
</itemizedlist>

<sect2 id="user-interface-toolbars-main">
<title
>Barra de herramientas principal</title>
<para
>La <emphasis
>Barra de herramientas principal</emphasis
> se compone de las siguientes acciones. Al hacer clic en una acción, el puntero del ratón aplica dicha acción a la pizarra del editor visual de grafos:</para>
<itemizedlist>
<listitem
><para
><guilabel
>Mover</guilabel
>: para seleccionar elementos, hay dos alternativas: bien pulsar en un espacio sin utilizar en la pizarra, mantener el ratón pulsado y dibujar un rectángulo que contenga nodos o aristas para seleccionar dichos elementos, o bien hacer clic directamente en un elemento sin seleccionar para seleccionar dicho elemento. Si se pulsa un elemento seleccionado o un conjunto de elementos seleccionados, respectivamente, se pueden mover dichos elementos manteniendo el ratón pulsado y moviéndolo. También se pueden mover los elementos seleccionados mediante las teclas de flecha.</para
></listitem>
<listitem
><para
><guilabel
>Añadir nodo</guilabel
>: haga clic en cualquier posición en la pizarra del editor visual de grafos para crear un nuevo nodo que pertenezca al grafo seleccionado actualmente.</para
></listitem>
<listitem
><para
><guilabel
>Añadir arista</guilabel
>: haga clic en un nodo, mantenga pulsado el ratón y dibuje una línea hacia el otro nodo al cual apuntará la arista o el puntero. Esta acción solo se podrá realizar correctamente si el grafo actual permite añadir dicha arista (por ejemplo, en un grafo no dirigido, no se pueden añadir varias aristas entre dos nodos).</para
></listitem>
<listitem
><para
><guilabel
>Borrar</guilabel
>: haga clic en un elemento para borrarlo. Si borra un nodo, todas las aristas adyacentes también se borran.</para
></listitem>
<listitem
><para
><guilabel
>Escala</guilabel
>: haga clic en la pizarra, mantenga pulsado el botón izquierdo del ratón y dibuje un rectángulo. La pizarra mostrará aumentada la zona seleccionada. Mediante la rueda del ratón también se podrá acercar o alejar la pizarra. Haciendo doble clic con el botón izquierdo del ratón se vuelve a la escala original.</para
></listitem>
</itemizedlist>
<screenshot>
<screeninfo
>La barra de herramientas principal.</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="rocs-toolbar-main.png" format="PNG"/>
</imageobject>
<textobject>
<phrase
>La barra de herramientas principal.</phrase>
</textobject>
</mediaobject>
</screenshot>
</sect2>

<sect2 id="user-interface-toolbars-alignment">
<title
>Barra de herramientas de alineación</title>
<para
>Se puede añadir la <emphasis
>Barra de herramientas de alineación</emphasis
> adicional. Pulsar una acción en dicha barra de herramientas tiene un efecto directo sobre los nodos seleccionados actualmente:</para>
<itemizedlist>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsaligntop.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Alinear arriba</guilabel
>: alinear los nodos de forma vertical según el nodo superior. Esto solo afecta a las posiciones verticales.</para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsalignvmiddle.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Alinear al centro</guilabel
>: alinea los nodos de forma vertical según el centro de las posiciones verticales de todos los nodos seleccionados. Solo afecta a las posiciones verticales.</para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsalignbottom.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Alinear a la base</guilabel
>: alinea los nodos de forma vertical según el nodo inferior. Esto solo afecta a las posiciones verticales.</para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsalignleft.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Alinear a la izquierda</guilabel
>: alinea los nodos de forma horizontal según el nodo más a la izquierda. Esto solo afecta a las posiciones horizontales.</para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsalignhmiddle.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Alinear al centro</guilabel
>: alinea los nodos de forma horizontal según el nodo superior. Esto solo afecta a las posiciones horizontales.</para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsalignright.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Alinear a la derecha</guilabel
>: alinear los nodos de forma horizontal según el nodo más a la derecha. Esto solo afecta a las posiciones horizontales.</para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsaligncircle.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Alinear en círculo</guilabel
>: alinea los nodos en un círculo cuyo diámetro es la máxima distancia entre los nodos. Los nodos se colocan en la misma secuencia en la que se verían desde el centro de gravedad de dichos nodos.</para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsaligntree.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Minimizar aristas cruzadas</guilabel
>: aplica el algoritmo de Fruchterman-Reingold para minimizar (de forma aproximada) el número de aristas que se cruzan.</para
></listitem>
</itemizedlist>
<screenshot>
<screeninfo
>Barra de herramientas de alineación</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="rocs-toolbar-alignment.png" format="PNG"/>
</imageobject>
<textobject>
<phrase
>Barra de herramientas de alineación</phrase>
</textobject>
</mediaobject>
</screenshot>
</sect2>
</sect1>

<sect1 id="user-interface-graph-properties">
	<title
>Propiedades de grafo</title>
	<para
>En el panel lateral de la izquierda, se encuentran las opciones para cada grafo abierto. Todas estas opciones son globales para cada grafo y se pueden modificar para cada nodo y arista usando los cuadros de diálogo «Propiedades del nodo» y «Propiedades de la arista».</para>

	<itemizedlist>
	<listitem
><para
><guilabel
>Nombre</guilabel
>: este es el nombre que debe utilizar el algoritmos para acceder al grafo. </para
></listitem>
	<listitem
><para
><guilabel
>Color de los datos</guilabel
> se usa para los nodos creados recientemente; se puede modificar el color de todos los nodos actuales pulsando el botón <guilabel
>Todos</guilabel
>. </para
></listitem>
	<listitem
><para>
	  <guilabel
>Color del puntero</guilabel
> <!--FIXME color of edges?-->
	</para
></listitem>
	</itemizedlist>
	<para
>La última fila de opciones se compone de una serie de botones conmutables:</para>
	<itemizedlist>
	<listitem
><para
><guilabel
>Muestra nombres en:</guilabel
> <guilabel
>Datos</guilabel
> o <guilabel
>Punteros</guilabel
>. </para
></listitem>
	<listitem
><para
><guilabel
>Muestra valores en:</guilabel
> <guilabel
>Nodos</guilabel
> o <guilabel
>Aristas</guilabel
>. </para
></listitem>
	<!-- FIXME missing Graph Type Undirected Graph, Directed Graph, Multigraph -->
	</itemizedlist>
</sect1>
</chapter>

<chapter id="using-rocs">
<title
>Uso de &rocs;</title>
<para
>Con frecuencia, el primer paso es crear un grafo con el editor visual de grafos.Esto se puede hacer de manera manual, añadiendo nodos y conectándolos, o bien utilizando uno de los algoritmos de asistente que se pueden encontrar en<menuchoice
><guimenu
>Herramientas</guimenu
> <guimenuitem
>Generar gráfico</guimenuitem
></menuchoice
>. También hay que utilizar las herramientas de ayuda de <menuchoice
><guimenu
>Herramientas </guimenu
> <guimenuitem
> Asignar valores</guimenuitem
></menuchoice
> para asignar valores iniciales a los nodos y aristas del grafo. Finalmente, es necesario dar un nombre al grafo. Dicho nombre será el identificador que se deberá utilizar para el motor de scripts.</para>

<sect1 id="using-rocs-scripting">
<title
>Creación de scripts</title>
<para
>&rocs; utiliza un lenguaje de programación similar a JavaScript. Esto básicamente significa que la definición de variables y funciones y su uso se hacen exactamente igual que en JavaScript. Además, &rocs; proporciona un conjunto de funciones que permiten acceder a los grafos de la pizarra del editor visual de grafos y a sus elementos. </para>

<sect2
><title
>Acceso a un grafo</title>
<para
>En la interfaz de scripts, se puede acceder a un grafo simplemente escribiendo su nombre y utilizándolo como objeto con una de las siguientes funciones. Para acceder a un nodo o a una arista hay que obtener un identificador desde el objeto grafo.</para>
<variablelist>
<varlistentry>
<term
>Objetos del grafo</term>
<listitem>
<programlisting
>// functions
     array list_nodes();
     array list_edges();
     node add_node(name);
     edge add_edge(from, to);
     node node_byname(QString&amp; name);
     node begin_node();
     array end_nodes();

// variables
     bool directed
     bool automate
     string name
     string nodeDefaultColor // in HEXA
     string edgeDefaultColor  // in HEXA
</programlisting>
</listitem>
</varlistentry>

<varlistentry>
<term
>Objetos de nodo</term>
<listitem>
<programlisting
>// functions
     array adj_nodes();
     array adj_edges();
     array input_edges();
     array output_edges();
     array loop_edges();
     array connected_edges(Node *n);
     void self_remove();

// variables
    double x
    double y
    double width
    string value
    string name
    string color  // in HEXA
    bool begin
    bool end
</programlisting>
</listitem>
</varlistentry>

<varlistentry>
<term
>Objetos de arista</term>
<listitem>
<programlisting
>string color ( em hexa )
    string value
    string name
    double width
    string style ( dot, dash, dash dot, solid )

    node start();
    node  end();

    void self_remove();
</programlisting>
</listitem>
</varlistentry>
</variablelist>
</sect2>

<sect2 id="script-graph-algorithms">
<title
>Algoritmos de grafo</title>
<para
>En ocasiones, esto resulta útil si se pueden utilizar funciones para tareas habituales, como calcular la distancia más corta entre dos nodos. Actualmente, se admiten los siguientes algoritmos, los cuales se pueden invocar desde el motor de scripts con nodos del mismo grafo.</para>
<variablelist>
<varlistentry>
<term
>Cálculo del camino más corto</term>
<listitem>
	<para
>Calcula el camino más corto entre los nodos <emphasis
>inicio</emphasis
> y <emphasis
>fin</emphasis
>. Ambos nodos deben ser del mismo grafo. Este cálculo tiene en cuenta si el grafo es dirigido o no dirigido.</para>
	<funcsynopsis>
	<funcprototype
><funcdef
>array <function
>dijkstra_shortest_path</function
></funcdef
> <paramdef
>Node* <parameter
><replaceable
>start</replaceable
></parameter
></paramdef
> <paramdef
>Node* <parameter
><replaceable
>end</replaceable
></parameter
></paramdef
> </funcprototype>
	</funcsynopsis>
</listitem>
</varlistentry>
</variablelist>
</sect2>
</sect1>

<sect1 id="script-example">
<title
>Ejemplo</title>
<para
>Aquí tiene un escript sencillo que determina el color de los 4 primeros nodos en el primer grafo:</para>
<programlisting
>/* Un ejemplo sencillo que determina el color de los 4 primeros nodos en el primer grafo: */

var colors = new Array("red", "green", "blue", "yellow");

/* graphs is an array of graphs, you can access a graph by its index in the
array or by its name, so if the first graph's name is Untitled0, the following
sentence are right  */
var list1= graphs[0].list_nodes(); //  1st form.
var list2=Untitled0.list_nodes();              // 2nd form

 for ( var i = 0; i &lt; colors.length; i++){
        if (i 
> list2.length) break;
        list2[i].color = colors[i]
 }
</programlisting>
</sect1>
<sect1>
	<title
>Importar y exportar</title>
	<para
>Actualmente, &rocs; admite la importación y la exportación de los siguientes formatos de archivo:</para>
	<itemizedlist>
		<listitem
><para
>Archivos DOT, también conocidos como archivos Graphviz.</para
></listitem>
		<listitem
><para
>Archivos GML</para
></listitem>
		<listitem
><para
>Archivos de texto sin formato.</para
></listitem>
	</itemizedlist>
	<para
>Actualmente, para la mayoría de dichos tipos de archivo, solo se importan unos cuantos valores. Los valores importados incluyen los nodos y sus correspondientes conexiones, los nombres de todos los elementos, los valores también coordenadas, si se proporcionan.</para>
</sect1>
</chapter>

<chapter id="credits">
<title
>Créditos y licencia</title>

<para
>&rocs; </para>
<para
>Copyright del programa:</para>
<itemizedlist>
	<listitem
><para
>Copyright 2008 Ugo Sangiori (ugorox EN gmail.com)</para
></listitem>
	<listitem
><para
>Copyright 2009 Tomaz Canabrava (tcanabrava en kde punto org).</para
></listitem>
	<listitem
><para
>Copyright 2008-2011 Wagner Reck (wagner.reck EN gmail.com)</para
></listitem>
	<listitem
><para
>Copyright 2011 Andreas Cord-Landwehr (cordlandwehr EN googlemail.com)</para
></listitem>
</itemizedlist>

<para
>Copyright de la documentación:</para>
<itemizedlist>
	<listitem
><para
>Copyright de la documentación 2009 &Anne-Marie.Mahfouf; &Anne-Marie.Mahfouf.mail;</para
></listitem>
	<listitem
><para
>Copyright de la documentación 2009 Tomaz Canabrava (tcanabrava en kde punto org).</para
></listitem>
	<listitem
><para
>Copyright de la documentación 2011 Andreas Cord-Landwehr (cordlandwehr EN googlemail.com)</para
></listitem>
</itemizedlist>

<para
>Traducido por Leticia Martín Hernández <email
>leticia.martin@gmail.com</email
>.</para
> <para
>Traducido por Rocío Gallego<email
>traducciones@rociogallego.com </email
>.</para
> 
&underFDL; &underGPL; </chapter>

<appendix id="installation">
<title
>Instalación</title>

<sect1 id="getting-rocs">
<title
>Cómo obtener &rocs;</title>
&install.intro.documentation; </sect1>

<sect1 id="compilation">
<title
>Compilación e instalación</title>
&install.compile.documentation; </sect1>
</appendix>

&documentation.index;
</book>
<!--
Local Variables:
mode: sgml
sgml-minimize-attributes: nil
sgml-general-insert-case: lower
sgml-indent-step:0
sgml-indent-data:nil
End:
-->
