Programar com o KStars: A Interface de DCOP Um dos objectivos do &kstars; é possibilitar a capacidade de reproduzir comportamentos complicados num programa. Isto permitir-lhe-á criar viagens virtuais aos céus, e permitirá aos professores construírem demonstrações para aulas de modo a ilustrar certos conceitos astronómicos. Já é possível criar esses programas ('scripts') para o &kstars;, ainda que nem todas as funções desejadas tenham sido incluídas. Também, embora tenhamos eventualmente um construtor de 'scripts' gráfico, os programas poderão precisar de ser feitos à mão. Este capítulo irá explicar como criar esses 'scripts' do &kstars;. A arquitectura do &kde; fornece a plataforma necessária para as aplicações programáveis com a interface do DCOP. O DCOP significa Desktop Communication Protocol; através do DCOP, as aplicações do &kde; poderão ser controladas por outras aplicações, a partir de uma linha de comandos de terminal ou através de um ficheiro de texto. Funções DCOP A interface de DCOP do &kstars; inclui as seguintes funções: lookTowards( const TQString direccao ): Aponta o foco da visualização para uma direcção indicada pelo argumento. Este poderá ser o nome de qualquer objecto no céu ou uma das palavras de direcção: 'zenith' - zénite (ou 'z'), 'north' - norte ('n'), 'northeast' - nordeste (ne), 'east' - este ('e'), 'southeast' - sueste ('se'), 'south' - sul ('s'), 'southwest' - sudoeste ('sw'), 'west' - oeste ('w'), 'northwest' - noroeste ('nw'). setRaDec( double ar, double dec ): Aponta o foco da visualização para as coordenadas equatoriais indicadas. setAltAz(double alt, double az): Aponta o foco da visualização para as coordenadas horizontais indicadas. zoomIn(): Aumentar o nível de ampliação do ecrã. zoomOut(): Diminuir o nível de ampliação do ecrã. defaultZoom(): Repõe a visualização no nível de Zoom = 3 (o nível por omissão). setLocalTime(int ano, int mes, int dia, int hr, int min, int seg): Configura o relógio da simulação para a data e hora indicadas. waitFor( double t ): Pára durante 't' segundos antes de continuar com os comandos subsequentes do programa. waitForKey( const TQString t ): Pára a execução do programa até que o utilizador carregue na tecla indicada. Nesta altura, você não poderá indicar combinações de teclas (como o &Ctrl;C); use apenas teclas simples. Você poderá escrever space para indicar a barra de espaços. setTracking( bool seguir ): Indica se o modo de seguimento está activo ou não. changeViewOption( const TQString opcao, const TQString valor ): Ajusta uma opção de visualização. Existem dezenas de opções disponíveis; basicamente tudo o que você poderá alterar na Configurar a Janela do &kstars; poderá também aqui ser alterado. O primeiro argumento é o nome da opção (os nomes são extraídos a partir do ficheiro de configuração kstarsrc) e o segundo argumento é o valor desejado. O processador dos argumentos está desenhado para ser robusto, por isso se você lhe passar dados inválidos, ele irá falhar de forma ordeira. setGeoLocation( const TQString cidade, const TQString provincia, const TQString pais ): Muda a localização de observação para a cidade indicada. Se não existir nenhuma cidade que corresponda ao texto dos argumentos, então não acontecerá nada. stop() [relógio]: Pára o relógio da simulação. start() [relógio]: Inicia o relógio da simulação. setScale(float esc) [relógio]: Configura a taxa do relógio de simulação. O esc=1,0 significa tempo-real; o 2,0 é duas vezes mais rápido que o tempo-real, etc. Testar as Funções do DCOP Você poderá tentar as funções de DCOP muito facilmente com o programa kdcop. Quando você correr o kdcop, irá ver uma árvore com todos os programas em execução; se o &kstars; estiver a correr, ele aparecerá na lista. A maioria das funções do DCOP estão enumeradas no cabeçalho KStarsInterface, mas as funções do relógio estão definidas em clock. Se fizer duplo-click numa função qualquer, irá executá-la. Se a função precisar de argumentos, irá aparecer uma janela na qual poderá introduzir os valores. Criar um Programa de DCOP As funções do DCOP também podem ser invocadas a partir da linha de comandos do UNIX e estas poderão ser encapsuladas num programa. Iremos criar um programa de exemplo que muda para coordenadas equatoriais, aponta a visualização para a Lua, amplia um pouco e acelera o relógio para uma hora por segundo. Depois de seguir a Lua durante 20 segundos, o relógio é posto em pausa e a visualização reduz a ampliação. Você poderá usar este programa como um modelo para criar novos programas. Tentaremos listar o programa inteiro primeiro e depois explicar as suas várias componentes. #!/bin/bash #Programa do KStars: Seguir a Lua! # KSTARS=`dcopfind -a 'kstars*'` PRINCIPAL=KStarsInterface RELOGIO=relógio#1 dcop $KSTARS $PRINCIPAL changeViewOption UseAltAz false dcop $KSTARS $PRINCIPAL lookTowards Moon dcop $KSTARS $PRINCIPAL defaultZoom dcop $KSTARS $PRINCIPAL zoomIn dcop $KSTARS $PRINCIPAL zoomIn dcop $KSTARS $PRINCIPAL zoomIn dcop $KSTARS $PRINCIPAL zoomIn dcop $KSTARS $PRINCIPAL zoomIn dcop $KSTARS $RELOGIO setScale 3600. dcop $KSTARS $RELOGIO start dcop $KSTARS $PRINCIPAL waitFor 20. dcop $KSTARS $RELOGIO stop dcop $KSTARS $PRINCIPAL defaultZoom ## Grave este programa num ficheiro. O ficheiro poderá ter o nome que você desejar; nós sugerimos algo descritivo do tipo seguir_lua.kstars. Escreva então o seguinte comando para colocar o programa como executável: chmod seguir_lua.kstars . O programa poderá então ser executado em qualquer altura se escrever ./seguir_lua.kstars na pasta que contém o programa. Tenha em atenção que o programa só irá funcionar se você tiver uma instância do &kstars; já em execução. Você poderá usar o comando dcopstart num programa para lançar uma nova instância do &kstars;. Agora, a explicação do programa. A linha de topo identifica o ficheiro como um programa da linha de comandos BASH. As duas linhas seguintes são comentários (qualquer linha que comece por # é um comentário e é ignorado pela linha de comandos). As três linhas seguintes definem algumas variáveis de conveniência que serão usadas posteriormente. A variável KSTARS identifica o processo do &kstars; actualmente em execução, usando o comando dcopfind. O PRINCIPAL e o RELOGIO identificam as duas interfaces de DCOP associadas ao &kstars;. O resto do programa é a lista efectiva de chamadas de DCOP. O primeiro comando indica à visualização para usar as coordenadas equatoriais, usando a opção UseAltAz igual a false (mais uma vez, você poderá ver uma lista com todas as opções que o changeViewOption poderá usar se ver o seu ficheiro de configuração kstarsrc). O próximo comando centra a visualização na Lua, activando automaticamente o seu seguimento. É então definido o nível de zoom por omissão, seguido então de uma ampliação para 5x. De seguida, a a escala temporal do relógio é configurada para 1 hora por segundo (3 600 segundos é uma hora), dando início depois ao relógio (se não estiver já a correr). A próxima linha interrompe o programa durante 20 segundos, enquanto a Lua é seguida à medida que se mexe no céu. Finalmente, o relógio é parado e o nível de ampliação é reposto no seu valor original. Esperamos que você goste das capacidades de programação do KStars. Se você criar um programa interessante, por favor envie-nos por e-mail para kstars@30doradus.org; nós gostaríamos de ver o que você fez e poder publicar alguns programas na nossa página Web. Também, se você tiver algumas ideias sobre como melhorar a programação (ou qualquer parte do &kstars;), por favor comunique-nos isso em kstars-devel@lists.sourceforge.net ou submeta um item de desejo no 'bugzilla'.