<para>Puede informar sobre los problemas que encuentre en &kig; utilizando la herramienta de información de fallos (<menuchoice><guimenu>Ayuda</guimenu><guimenuitem>Informar de fallo</guimenuitem></menuchoice>), o contactar conmigo en <email>toscano.pino@tiscali.it</email>. </para>
<para>Como &kig; soporta macros y la construcción de locus, es posible definir macros relativamente avanzadas. Si ha creado una macro interesante, que podría resultar útil para otras personas, puede enviármelo por correo a <email>toscano.pino@tiscali.it</email>, y lo incluiré en la distribución (si lo hace, se licenciará en base a los términos de la licencia de &kig;, la <ulink url="http://www.gnu.org/licenses/licenses.html#GPL">GPL</ulink>, por lo que otros usuarios podrán utilizarlo y adaptarlo libremente). </para>
<para>Seleccione <menuchoice><guimenu>Objetos</guimenu> <guisubmenu>Puntos</guisubmenu><guimenuitem>Punto</guimenuitem></menuchoice> o pulse el botón adecuado en la barra de herramientas. Podrá construir un punto pulsando en la posición deseada de la ventana.</para> <note><para>En realidad, esto funciona de la misma forma que la construcción de otros objetos: pulsar en la entrada del menú o botón de la barra de herramientas correspondiente y seleccionar los elementos necesarios para la construcción final del objeto.</para></note>
<para>Como la construcción de puntos es bastante habitual, solo necesitará pulsar en cualquier lugar de la pantalla con el &MMB; para crearlo, sin necesidad de ir al menú o al botón. </para>
<para>Puede construir puntos mientras está construyendo otros objetos en el fondo, seleccionándolos opcionalmente para el objeto que está construyendo. Para obtener más información, consulte <xref linkend="constructing-other-objects"/>. </para>
<para>Para construir objetos diferentes a los puntos, normalmente hay que seleccionar la entrada apropiada en el menú <guimenu>Objetos</guimenu>, o pulsar en uno de los botones de la barra de herramientas. </para>
<para>Ésto iniciará la construcción de un nuevo objeto del tipo elegido. Todos estos tipos requieren argumentos. Por ejemplo, si selecciona un círculo utilizando el centro y un punto, deberá proporcionar dos puntos: uno para el centro y otro para el punto del círculo. </para>
<para>Estos argumentos también son objetos, que puede seleccionar, solo tiene que pulsar sobre ellos. Cuando mueva el cursor sobre un argumento que desee utilizar para construir un objeto, se mostrará una imagen preliminar con el aspecto final. Para los objetos que requieren puntos como argumentos, puede construir un nuevo punto en la posición actual del cursor pulsando el &LMB;. </para>
<para>Siempre es posible cancelar la construcción de un nuevo objeto pulsando la tecla &Esc; o pulsando el botón <guiicon>Detener</guiicon> (octágono rojo con una «X») sobre la barra de herramientas. </para>
<para>Un objeto quedará seleccionado si se pulsa sobre él con el ratón, anulando cualquier selección anterior. Si no desea que ocurra esto último, mantenga pulsada la tecla &Ctrl; al realizar la nueva selección. </para>
<para>Es posible seleccionar todos los objetos de una zona pulsando sobre una zona vacía de la pantalla y arrastrando el cursor del ratón para que forme un rectángulo alrededor del área deseada. Salvo que se mantenga pulsada la tecla &Ctrl;, como en el caso anterior también queda anulada cualquier selección previa. </para>
<para>Cuando tenga más de un objeto bajo el ratón, puede decidir con facilidad qué objeto seleccionar o añadir a la selección actual. Pulse con el &LMB;, mientras mantiene pulsada la tecla &Shift;, para que aparezca un menú con todos los objetos bajo el ratón. A continuación podrá seleccionar el objeto que desee. Como se indicó anteriormente, el comportamiento de la tecla &Ctrl; afectará a la selección. </para>
<para>Para mover objetos primero hay que <link linkend="selecting-objects">seleccionarlos</link>. </para>
<para>Una vez que haya seleccionado los objetos que desee mover, puede comenzar la operación manteniendo el &LMB; pulsado sobre ellos y arrastrándolos hasta la nueva posición. Cuando termine, basta con que suelte el &LMB;. </para>
<note><para>Para algunos tipos de objetos (especialmente cuando están definidos por locus complicados) puede resultar lento en equipos antiguos. Esto es desgraciadamente, inevitable, dado el número de cálculos necesarios. </para></note> <note><para>Si pulsa sobre uno de los objetos seleccionados con el &RMB;, y selecciona <guimenuitem>Mover</guimenuitem>, al desplazar el ratón moverá el objeto. Cuando el objeto se mueva a la posición deseada, otra pulsación del &LMB; detendrá el movimiento del objeto.</para></note>
<para>Para eliminar objetos primero hay que <link linkend="selecting-objects">seleccionarlos</link>, y después realizar una de estas operaciones: <itemizedlist>
<para>Pulsar con el botón <mousebutton>derecho</mousebutton> del ratón sobre uno de los objetos, y seleccionar <menuchoice><guimenuitem>Eliminar</guimenuitem></menuchoice> en el <link linkend="objects-context-menus">menú contextual</link> que aparece. </para>
<para>En &kig; es posible ocultar objetos. Esto se hace seleccionando los objetos, pulsando con el botón &RMB; y seleccionando <guimenuitem>Ocultar</guimenuitem> en el <link linkend="objects-context-menus">menú contextual</link> que aparece. </para>
<para>Para volver a mostrar los objetos, utilice <menuchoice><guimenu>Editar</guimenu><guimenuitem>Mostrar todo...</guimenuitem></menuchoice> Ésto mostrará todos los objetos ocultos. </para>
<para>La visión nocturna es una forma particular de trabajar con objetos ocultos. Cuando tenga que mover o cambiar algo en uno o más objetos pero sin mostrar todos los objetos ocultos, la visión nocturna le ayudará. </para>
<para>Básicamente, le permite ver los objetos ocultos como si estuvieran visibles, de forma que pueda manipularlos como lo haría normalmente. En el modo de visión nocturna, los objetos ocultos se harán visibles, pero con un color gris. </para>
<para>Para cambiar el modo de visión nocturna, utilice <menuchoice><guimenu>Preferencias</guimenu><guimenuitem>Usar lentes infrarrojos</guimenuitem></menuchoice>. </para>
<para>En &kig;, puede deshacer casi cualquier cambio que haga en el documento. Solo necesita utilizar los botones <guiicon>deshacer</guiicon>/<guiicon>rehacer</guiicon> en la barra de herramientas, o los accesos rápidos adecuados. </para>
<para>&kig; también tiene un modo de pantalla completa. Para utilizarlo, pulse el correspondiente botón de la barra de herramientas, o seleccione <menuchoice><guimenu>Preferencias</guimenu><guimenuitem>Modo de pantalla completa</guimenuitem></menuchoice>. </para>
<para>Para dejar el modo de pantalla completa, pulse el &RMB; en cualquier lugar de la pantalla en que no haya ningún objeto, y seleccione <guimenuitem>Salir del modo de pantalla completa</guimenuitem>, o pulse la tecla &Esc;. </para>
<para>&kig; soporta un gran número de tipos de objetos. Por favor, tenga en cuenta que no todos los tipos de objetos se muestran en las barras de herramientas: existen algunos objetos que solo puede construir a través del menú <guimenu>Objetos</guimenu> de la barra de menú. Por supuesto, como en cualquier aplicación de &kde;, los contenidos de las barras de herramientas son configurables. Pruebe la opción <menuchoice><guimenu>Preferencias</guimenu><guimenuitem>Configurar barras de herramientas...</guimenuitem></menuchoice> si desea realizar ésto. </para>
<para>&kig; tiene menús contextuales para sus objetos. Basta pulsar con el &RMB; sobre uno de ellos para mostrarlo. Existen varias opciones para construir otros objetos, establecer colores, ocultar, mover y eliminar objetos. Algunos objetos tienen sus propias opciones (⪚ es posible redefinir ciertos puntos obligatorios en una línea en la que antes no estaban, &etc;). Estas opciones deberían ser suficientemente intuitivas. </para>
<para>Al pulsar con el botón <mousebutton>derecho</mousebutton> en el documento (&ie;, no sobre un objeto) aparecerá un menú que puede utilizar para comenzar a construir un objeto nuevo, cambiar el sistema de coordenadas utilizado, mostrar objetos ocultos, e incluso aumentar o reducir el documento. </para>
<para>Una de las características más avanzadas de &kig; es su soporte para macros. Ésto le permite definir nuevos tipos de objetos a partir de otros que ya estén definidos. </para>
<para>Por ejemplo: Suponga que desea realizar un macro para construir un círculo a partir de tres puntos. Debería introducir tres puntos, y a continuación construir algunas perpendiculares y puntos medios para hallar el centro. Ahora podrá utilizar la orden «Circunferencia a partir de tres puntos» (utilizando uno de los puntos como punto para esta orden). La siguiente imagen debería aclarar ésto un poco: </para>
<para>A continuación deberá definir la macro. Seleccione <guimenuitem>Nuevo macro</guimenuitem> en el menú <guimenu>Tipos</guimenu>, o pulse en el botón de la barra de herramientas. Aparecerá un asistente, indicándole que seleccione los objetos dados. En nuestro ejemplo serán esos tres puntos. Así que seleccione los tres puntos (pulse sobre ellos para seleccionarlos y una segunda vez para quitar la selección) y pulse el botón <guibutton>Siguiente</guibutton> para continuar. Finalmente seleccione los últimos objetos (sólo el círculo en nuestro ejemplo). </para>
<para>Una vez hecho ésto, pulse el botón <guibutton>Siguiente</guibutton> para continuar. Introduzca un nombre y, opcionalmente, una descripción del nuevo tipo, y pulse el botón <guibutton>Finalizar</guibutton>. Su macro estará terminada. </para>
<para>Para utilizar el nuevo tipo de macro, pulse su botón en la barra de herramientas o selecciónelo en el menú <guimenu>Objetos</guimenu>. Construir un macro objeto es como construir cualquier otro objeto. </para>
<para>Como ha visto en el capítulo anterior, &kig; le permite crear sus propios objetos. &kig; también se asegura de que una vez que haya creado un objeto, se guarde al salir y se cargue en el nuevo inicio del programa. No es necesario que cargue o guarde manualmente las definiciones de macros. Sin embargo, &kig; le permite hacer más cosas con los macros. Si selecciona <menuchoice><guimenu>Tipos</guimenu><guimenuitem>Administrar tipos...</guimenuitem></menuchoice> en el menú, verá un diálogo en el que podrá editar los tipos. Ésto le permite modificar los tipos existentes, eliminar los tipos que no vaya a utilizar más, exportarlos y cargarlos de un archivo. </para>
<para>&kig; le permite añadir etiquetas de texto a una construcción. Son muy útiles para mostrar nombres, explicaciones u otro texto en las construcciones. &kig; también puede mostrar información disponible sobre objetos (dicho de otro modo, «propiedades»). </para>
<para>Para construir una etiqueta de texto, basta con que pulse en el botón <guibutton>Etiqueta de texto</guibutton> en la barra de herramientas de &kig; o seleccione <menuchoice><guimenu>Objetos</guimenu><guisubmenu>Otros</guisubmenu><guimenuitem>Etiqueta de texto</guimenuitem> </menuchoice> en la barra de menú. </para>
<para>Lo siguiente que debe hacer es seleccionar una ubicación para la etiqueta de texto. También puede seleccionar una ubicación aleatoria en la pantalla, o decidir «asociar» la etiqueta a un objeto. </para>
<para>Después de que haya seleccionado dónde colocar la etiqueta, la etiqueta de texto aparecerá. Aquí, podrá teclear el texto que desee que aparezca en la nueva etiqueta, tras lo cual deberá pulsar <guibutton>Finalizar</guibutton>. Ahora debería ver la etiqueta en su documento. </para>
<para>El ejemplo anterior era sencillo, y limitado solo al texto. Sin embargo, también existe soporte para mostrar información variable sobre los objetos en una etiqueta (⪚ puede construir una etiqueta con el texto «Este segmento tiene una longitud de %1 unidades.» donde <token>%1</token> se reemplazará dinámicamente con la longitud del segmento específico). </para>
<para>Para hacerlo, introduzca un texto con un número de ubicadores ( <token>%1</token>, <token>%2</token>, &etc;) integrados. A continuación pulse el botón <guibutton>Siguiente</guibutton> para continuar. Si desea cambiar el texto o las variables posteriormente, puede volver hacia atrás utilizando el botón <guibutton>Atrás</guibutton>. </para>
<para>El asistente mostrará ahora el texto introducido con los ubicadores sustituidos por algo como <guilabel>argumento 1</guilabel>. Para seleccionar la propiedad conectada a un determinado argumento debe pulsar primero sobre el argumento en cuestión. A continuación pulse sobre el objeto que necesite y que tiene esta propiedad, y seleccione la propiedad en el menú que aparezca. En el ejemplo anterior, debería pulsar sobre <guilabel>argumento 1</guilabel>, después sobre el segmento adecuado de la ventana principal de &kig;, y seleccionar la propiedad <guilabel>Longitud</guilabel>. A continuación, puede rellenar el resto de las partes de la variable, o seleccionar otra propiedad de las ya configuradas si desea modificarlas. Cuando esté listo, pulse el botón <guibutton>Finalizar</guibutton> para completar la construcción de la etiqueta de texto. </para>
<para>&kig; soporta el uso de locus. Un locus se define matemáticamente como el conjunto de todos los puntos o líneas que satisfacen o están determinados por condiciones específicas, como en «el locus de los puntos equidistantes a un punto dado es un círculo». Eche un vistazo a un ejemplo sobre el uso de locus en &kig;: </para>
<para>Considere la siguiente construcción geométrica: Dibujamos un círculo, y un punto que se mueva únicamente a lo largo de su circunferencia (construya este punto situando el cursor en un círculo y pulsando el &MMB;. Si intenta mover el punto resultante, verá que no puede moverse fuera del círculo). A continuación, dibujamos un segmento desde este punto al centro del círculo, y el punto medio de este segmento. </para>
<para>Ahora, si se mueve al punto que está contenido en el círculo, verá que el segundo punto se moverá con él. Si mantuviera un lápiz en el segundo punto, y se moviera el primero alrededor del círculo completo, se dibujaría un círculo nuevo, con la mitad de tamaño que el otro. La ruta que el segundo punto seguiría mientras el primero se mueve alrededor del círculo, sería su locus. </para>
<para>En realidad, construir el locus de un punto es muy simple. Pulse el botón <guiicon>locus</guiicon> en la barra de herramientas, o seleccione <menuchoice><guimenu>Objetos</guimenu><guisubmenu>Otros</guisubmenu> <guimenuitem>Locus</guimenuitem> </menuchoice> en la barra de menú. A continuación seleccione el punto contenido como punto en movimiento (aparecerá el texto <guilabel>Punto que se mueve</guilabel> que podrá mover con el cursor), y el otro es el punto dependiente. Entonces se dibujará el locus del punto dependiente. </para>
<para>&kig; permite crear sus propios tipos personalizados en lenguaje Python. Ésta es una característica muy avanzada, y sólo conozco otro programa de geometría interactiva con una funcionalidad similar (el programa &drgeo; de <acronym>GNOME</acronym>). </para>
<para>Los scripts Python en &kig; básicamente le permiten crear sus propios objetos a partir de objetos padre. Por ejemplo, si es profesor de matemáticas, y tiene una extravagante forma de calcular un punto interesante en una cónica, en lugar de liarse con complejas construcciones y macros, puede escribir código en Python para calcular el punto y &kig; se lo mostrará. </para>
<para>Suponga que no sabe que &kig; tiene construído el tipo «Punto medio», y desea mostrar el punto medio de dos puntos dados. Puede pulsar el botón <guibutton>Script de Python</guibutton> en la barra de herramientas, o seleccionar <menuchoice><guimenu>Objetos</guimenu><guisubmenu>Otros</guisubmenu><guimenuitem>Script de Python</guimenuitem></menuchoice> en la barra de menú. Se le presentará un asistente con el que comenzar. </para>
<para>Lo primero que tiene que hacer es seleccionar los argumentos para el objeto del script. En nuestro ejemplo, los dos puntos de los que desea mostrar el punto medio. Selecciónelos en la ventana principal de &kig;, y pulse <guibutton>Siguiente</guibutton> para continuar. </para>
<para>Ahora se mostrará un cuadro de edición de texto en el que podrá introducir el código para su objeto del script. En este lugar estarán situados el código de la plantilla de y algunos comentarios. Es importante estar seguro de que su código es un código Python válido. Aquellos familiarizados con Python sabrán que estamos definiendo una función de Python llamada <function>calc</function>. Es necesario para adherirse a las reglas de Python para la definición de funciones. Por ejemplo, cada línea de la función debería comenzar con un <keysym>Tabulador</keysym>. La primera que no comience con un <keysym>tabulador</keysym> finalizará la definición de la función. </para>
<para>La función de Python que queremos definir se llama <function>calc</function>, y en nuestro caso acepta dos argumentos. Éstos son los objetos seleccionados como argumento en la pantalla anterior. Necesitará tantos argumentos como haya seleccionado. Estos se llamarán <parameter>arg1</parameter> y <parameter>arg2</parameter>, pero puede cambiar sus nombres por otros que tengan un significado. </para>
<para>En la función, puede realizar todos los cálculos que considere necesarios utilizando los dos argumentos si los necesita. Debería devolver el objeto que desee definir. En nuestro caso, este es un objeto <classname>Point</classname> (punto). Los dos argumentos también son objetos <classname>Point</classname>, y podemos utilizar la función <function>Point.coordinate()</function> para definir las coordenadas de los dos puntos dados. </para>
<para>Los cálculos necesarios en nuestro ejemplo son muy simples, añada los dos conjuntos de coordenadas y divida el nuevo conjunto por dos. A continuación construiremos un punto nuevo utilizando el resultado. El código Python necesario es:</para>
<para>Si pulsa el botón <guibutton>Finalizar</guibutton>, el nuevo objeto aparecerá en el documento de &kig;. Si mueve uno de los puntos, el punto creado se moverá sobre él. Se pueden construir objetos mucho más potentes de esta forma: pruébelos. </para>
<para>Todos los objetos en &kig; pueden utilizarse en el código Python. Como se vió anteriormente, los puntos son de la clase <classname>Punto</classname>, y puede utilizar ⪚ el método <function>Point.coordinate()</function>. También puede devolver cualquier tipo de objeto, no solo uno de la clase <classname>Point</classname>. Existen muchos más métodos y clases disponibles en el código Python de &kig;, y se proporciona una referencia mucho más completa <ulink url="http://edu.kde.org/kig/manual/scripting-api/index.html"> en el sitio web de &kig;</ulink>. </para>
<para>&kig; es una aplicación de código abierto. Esto significa que es libre de utilizarse y modificarse de acuerdo a los deseos de cada cual. La distribución de &kig; está sujeta a algunas restricciones, básicamente que todos debemos tener los mismos derechos de utilización de &kig;, incluyendo cualquier modificación que se realice. </para>
<para>Los programas de software libre se desarrollan con un espíritu muy abierto, y sus desarrolladores normalmente responden bien a los comentarios de los usuarios. Por lo tanto, si tiene preguntas, quejas o cualquier comentario sobre &kig;, por favor hágaselo saber al autor en <email>toscano.pino@tiscali.it</email>. </para>
<para>&kig; es una aplicación KPart, lo que significa que es posible empotrarla en otro programa de &kde;. Si abre un archivo <literal role="extension">.kig</literal> en &konqueror;, es posible que se abra directamente en la pantalla de &konqueror;, en vez de iniciar una aplicación externa. </para>
<para>Trabajar con &kig; debería resultar bastante sencillo. La construcción de objetos es sencilla e interactiva, mostrándose los resultados preliminares, &kig;. El desplazamiento, selección y construcción de todo funcionará como se espera. El soporte de deshacer debería ser muy intuitivo. </para>
<para>&kig; soporta la definición de macros de una manera sencilla. Estos objetos se presentan ante el usuario como objetos normales. Se guardan al salir del programa y se cargan al volver a iniciarlo, de forma que no se pierden al salir. Puede administrar estos objetos en el diálogo del <guilabel>Administrador de tipos</guilabel> (vea <xref linkend="working-with-types"/>). Puede exportarlos a archivos, importarlos desde archivos, editarlos y eliminarlos. </para>
<para>&kig; le permite exportar un archivo &kig; a algunos formatos interesantes, como imágenes, archivos <application>XFig</application> y <application>LaTeX</application>, e imágenes vectoriales <acronym>SVG</acronym>. Esto resulta bastante útil, ya que no todos los programas soportan, de momento, el formato de &kig;. </para>
<para>&kig; pretende ser compatible con sus competidores. Por eso soporta el formato de archivo de &kgeo;, el formato de archivo de &kseg;, parcialmente los formatos de &drgeo; y &cabri;, asimismo, se está trabajando en otros formatos. </para>
<para>&kig; es <ulink url="http://www.gnu.org/philosophy/philosophy.html#AboutFreeSoftware">Software libre</ulink>. Eso significa que su código fuente se distribuye libremente y está disponible en Internet, de forma que cualquiera pueda utilizarlo, leerlo, modificarlo y distribuirlo. Yo trabajo en ello como afición, y así he aprendido mucho sobre programación, C++, &kde;/&Qt;, matemáticas, colaboración en software y proyectos de código abierto. </para>
<para>El motivo de este capítulo es aclararle al usuario los derechos que le proporciona la licencia de &kig;. Como en todo el software libre, puede (y se le recomienda) solucionar los problemas que encuentre durante el uso, añadir las opciones que falten, distribuir su programa modificado, y enviármelas a <email>toscano.pino@tiscali.it</email>, para que pueda incorporarlas a la próxima versión para el disfrute del resto de usuarios. Personalmente no tengo ningún interés económico en este proyecto. </para>
<para>Si tiene dudas sobre sus derechos de uso de este programa, o de los derechos de las personas a utilizar las modificaciones que haga sobre el mismo, &etc; puede leer la licencia. La encontrará en el archivo <filename>COPYING</filename> en el árbol de archivos del código fuente de &kig; o en la pestaña de <guilabel>licencia del diálogo</guilabel> en el diálogo <guilabel>Acerca de Kig</guilabel>. </para>
<para>Toda ayuda será bienvenida. Si no le gustan los iconos, o piensa que el manual necesita una actualización, o tiene un macro fantástico que desea compartir con el mundo, no dude en ponerse en contacto conmigo. Por favor, tenga en cuenta que toda contribución será distribuida bajo los términos de la licencia &GNU; <acronym>GPL</acronym>, cuyos términos puede encontrar en el el archivo <filename>COPYING</filename> del árbol del código fuente de &kig;, y en el capítulo <link linkend="credits">Créditos y licencias</link> de este manual. </para>