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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
|
<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
>[email protected]</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
>[email protected]</email
> ou submeta um item de desejo no 'bugzilla'. </para>
</sect1>
</chapter>
|