1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
<chapter id="dcop">
<title>Programar com o KStars: A Interface de DCOP</title>
<para>Um dos objectivos do &kstars; é possibilitar a capacidade de reproduzir comportamentos complicados num programa. Isto permitir-lhe-á criar <quote>viagens virtuais</quote> 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;. </para>
<para>A arquitectura do &kde; fornece a plataforma necessária para as aplicações programáveis com a interface do <abbrev>DCOP</abbrev>. O <abbrev>DCOP</abbrev> significa <quote>Desktop Communication Protocol</quote>; através do <abbrev>DCOP</abbrev>, 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. </para>
<sect1 id="dcop-interface">
<title>Funções DCOP</title>
<para>A interface de <abbrev>DCOP</abbrev> do &kstars; inclui as seguintes funções: <itemizedlist>
<listitem><para><function> lookTowards( const QString direccao )</function>: 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'). </para></listitem>
<listitem><para><function> setRaDec( double ar, double dec )</function>: Aponta o foco da visualização para as coordenadas equatoriais indicadas. </para></listitem>
<listitem><para><function> setAltAz(double alt, double az)</function>: Aponta o foco da visualização para as coordenadas horizontais indicadas. </para></listitem>
<listitem><para><function> zoomIn()</function>: Aumentar o nível de ampliação do ecrã. </para></listitem>
<listitem><para><function> zoomOut()</function>: Diminuir o nível de ampliação do ecrã. </para></listitem>
<listitem><para><function> defaultZoom()</function>: Repõe a visualização no nível de Zoom = 3 (o nível por omissão). </para></listitem>
<listitem><para><function> setLocalTime(int ano, int mes, int dia, int hr, int min, int seg)</function>: Configura o relógio da simulação para a data e hora indicadas. </para></listitem>
<listitem><para><function> waitFor( double t )</function>: Pára durante 't' segundos antes de continuar com os comandos subsequentes do programa. </para></listitem>
<listitem><para><function> waitForKey( const QString t )</function>: 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 <keycombo action="simul">&Ctrl;<keycap>C</keycap></keycombo>); use apenas teclas simples. Você poderá escrever <quote>space</quote> para indicar a barra de espaços. </para></listitem>
<listitem><para><function> setTracking( bool seguir )</function>: Indica se o modo de seguimento está activo ou não. </para></listitem>
<listitem><para><function> changeViewOption( const QString opcao, const QString valor )</function>: Ajusta uma opção de visualização. Existem dezenas de opções disponíveis; basicamente tudo o que você poderá alterar na <guilabel>Configurar a Janela do &kstars;</guilabel> 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 <filename>kstarsrc</filename>) 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. </para></listitem>
<listitem><para><function> setGeoLocation( const QString cidade, const QString provincia, const QString pais )</function>: 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. </para></listitem>
<listitem><para><function> stop()</function> [relógio]: Pára o relógio da simulação. </para></listitem>
<listitem><para><function> start()</function> [relógio]: Inicia o relógio da simulação. </para></listitem>
<listitem><para><function> setScale(float esc)</function> [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. </para></listitem>
</itemizedlist>
</para>
</sect1>
<sect1 id="dcop-test">
<title>Testar as Funções do DCOP</title>
<para>Você poderá tentar as funções de DCOP muito facilmente com o programa <application>kdcop</application>. Quando você correr o <application>kdcop</application>, 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 <abbrev>DCOP</abbrev> estão enumeradas no cabeçalho <quote>KStarsInterface</quote>, mas as funções do relógio estão definidas em <quote>clock</quote>. 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. </para>
</sect1>
<sect1 id="dcop-script">
<title>Criar um Programa de DCOP</title>
<para>As funções do <abbrev>DCOP</abbrev> 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. </para>
<para>
<programlisting>#!/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
##
</programlisting>
</para>
<para>Grave este programa num ficheiro. O ficheiro poderá ter o nome que você desejar; nós sugerimos algo descritivo do tipo <filename>seguir_lua.kstars</filename>. Escreva então o seguinte comando para colocar o programa como executável: <userinput><command>chmod</command> <option>a+x</option> <parameter>seguir_lua.kstars</parameter> </userinput>. O programa poderá então ser executado em qualquer altura se escrever <userinput><command>./seguir_lua.kstars</command></userinput> 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 <command>dcopstart</command> num programa para lançar uma nova instância do &kstars;. </para>
<para>Agora, a explicação do programa. A linha de topo identifica o ficheiro como um programa da linha de comandos <command>BASH</command>. As duas linhas seguintes são <firstterm>comentários</firstterm> (qualquer linha que comece por <quote>#</quote> é 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 <varname>KSTARS</varname> identifica o processo do &kstars; actualmente em execução, usando o comando <command>dcopfind</command>. O <varname>PRINCIPAL</varname> e o <varname>RELOGIO</varname> identificam as duas interfaces de <abbrev>DCOP</abbrev> associadas ao &kstars;. </para>
<para>O resto do programa é a lista efectiva de chamadas de <abbrev>DCOP</abbrev>. O primeiro comando indica à visualização para usar as coordenadas equatoriais, usando a opção <quote>UseAltAz</quote> igual a <quote>false</quote> (mais uma vez, você poderá ver uma lista com todas as opções que o <quote>changeViewOption</quote> poderá usar se ver o seu ficheiro de configuração <filename>kstarsrc</filename>). 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. </para>
<para>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 <email>kstars@30doradus.org</email>; 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 <email>kstars-devel@lists.sourceforge.net</email> ou submeta um item de desejo no 'bugzilla'. </para>
</sect1>
</chapter>
|