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
249
250
|
<chapter id="dcop">
<title
>Сценарии в KStars: интерфейс DCOP</title>
<para
>Одна из задач &kstars; - предоставить возможность визуализировать сложные процессы из сценариев. С помощью сценариев (скриптов) вы сможете создать <quote
>виртуальные туры</quote
> по небу, или подготовить наглядную презентацию чтобы продемонстрировать основные концепции астрономии (что особенно важно для преподавателей). Можно написать сценарий для &kstars; даже если не все желаемые функции доступны. Итак, несмотря на то, что со временем у нас будет графический интерфейс для написания сценариев, сейчас они должны быть написаны вручную. Эта глава посвящена написанию сценариев &kstars;. </para>
<para
>&kde; предоставляет необходимую инфраструктуру (framework) для сценариев - интерфейс <abbrev
>DCOP</abbrev
>. <abbrev
>DCOP</abbrev
> расшифровывается как <quote
>коммуникационный протокол рабочего стола</quote
> (<quote
>Desktop Communication Protocol</quote
>). Посредством <abbrev
>DCOP</abbrev
>, приложения &kde; могут контролироваться другими приложениями, с (удалённого) терминала, или с помощью текстового сценария. </para>
<sect1 id="dcop-interface">
<title
>Функции DCOP </title>
<para
>Интерфейс &kstars; <abbrev
>DCOP</abbrev
> содержит следующие функции: <itemizedlist>
<listitem
><para
><function
> lookTowards( const QString direction )</function
>: Центрировать экран на направление, переданное в качестве аргумента. Это может быть название любого объекта на небе, или одно из следующих слов или сокращений: zenith (или z), north (n), northeast (ne), east (e), southeast (se), south (s), southwest(sw), west(w), northwest (nw). </para
></listitem>
<listitem
><para
><function
> setRaDec( double ra, double dec )</function
>: Центрирует экран на переданные в качестве аргумента экваториальные координаты. </para
></listitem>
<listitem
><para
><function
> setAltAz(double alt, double az)</function
>: Центрирует экран на переданные в качестве аргумента горизонтальные координаты. </para
></listitem>
<listitem
><para
><function
> zoomIn()</function
>: Увеличивает изображение. </para
></listitem>
<listitem
><para
><function
> zoomOut()</function
>: Уменьшает изображение. </para
></listitem>
<listitem
><para
><function
> defaultZoom()</function
>: Устанавливает уровень увеличения = 3 (уровень по умолчанию). </para
></listitem>
<listitem
><para
><function
> setLocalTime(int yr, int mth, int day, int hr, int min, int sec)</function
>: Устанавливает определённую дату и время. </para
></listitem>
<listitem
><para
><function
> waitFor( double t )</function
>: Приостанавливает выполнение сценария на t секунд. </para
></listitem>
<listitem
><para
><function
> waitForKey( const QString k )</function
>: Приостанавливает выполнение сценария до тех пор, пока не будет нажата определённая клавиша. С помощью этой функции вы не можете определить комбинации клавиш (таких как <keycombo action="simul"
>&Ctrl;<keycap
>C</keycap
></keycombo
>); используйте простые клавиши. Укажите <quote
>space</quote
> чтобы определить пробел. </para
></listitem>
<listitem
><para
><function
> setTracking( bool track )</function
>: Включить трассировку. </para
></listitem>
<listitem
><para
><function
> changeViewOption( const QString option, const QString value )</function
>: Изменить параметр вида. Доступно множество параметров; всё что можно изменить в окне <guilabel
>Настроить &kstars;</guilabel
> может быть также изменено с помощью этой функции. Первый аргумент - название параметра (названия совпадают с названиями в конфигурационном файле <filename
>kstarsrc</filename
>), второй аргумент - новое значение. Если вы случайно введёте неправильноле значение, программа завершиться с ошибкой. </para
></listitem>
<listitem
><para
><function
> setGeoLocation( const QString city, const QString province, const QString country )</function
>: Изменить географическое местоположение на заданный город. Если такого города нет в базе данных, то ничего не произойдёт. </para
></listitem>
<listitem
><para
><function
> stop()</function
> [clock]: Остановить "часы" симуляции. </para
></listitem>
<listitem
><para
><function
> start()</function
> [clock]: Запустить "часы" симуляции. </para
></listitem>
<listitem
><para
><function
> setScale(float s)</function
> [clock]: Установить скорость "часов" симуляции. s=1.0 соответствует реальному течению времени; 2.0 в два раза быстрее, и т.д. </para
></listitem>
</itemizedlist>
</para>
</sect1>
<sect1 id="dcop-test">
<title
>Тестирование функций DCOP</title>
<para
>Вы можете вызвать функцию DCOP использую программу <application
>kdcop</application
>. Когда вы запустите <application
>kdcop</application
>, то увидите список всех запущенных приложений; если &kstars; запущен, то увидите и его. Большинство функций <abbrev
>DCOP</abbrev
> будут выведены под заголовком <quote
>KStarsInterface</quote
>, но функции, связанные с часами, будут под заголовком <quote
>clock</quote
>. Дважды щёлкните мышью на названии функции, чтобы выполнить её. Если функция требует параметров, то откроется окно, где вам предложат ввести них. </para>
</sect1>
<sect1 id="dcop-script">
<title
>Написание DCOP-сценария</title>
<para
>Функции <abbrev
>DCOP</abbrev
> могут быть вызваны и из командной строки UNIX, и также могут быть встроены в сценарий командной оболочки. Мы привели пример сценария, который переключается в экваториальные координаты, центрируется на Луну, немного увеличивает её и ускоряет часы до 1 часа в секунду. После слежения за Луной в течении 20 секунд, часы останавливаются, и изображение уменьшается. Вы можете использовать этот сценарий как шаблон для написанию других. Сначала приведём листинг этого сценария, а после объясним его отдельные части. </para>
<para>
<programlisting
>#!/bin/bash
#Сценарий KStars: Следим за Луной!
#
KSTARS=`dcopfind -a 'kstars*'`
MAIN=KStarsInterface
CLOCK=clock#1
dcop $KSTARS $MAIN changeViewOption UseAltAz false
dcop $KSTARS $MAIN lookTowards Moon
dcop $KSTARS $MAIN defaultZoom
dcop $KSTARS $MAIN zoomIn
dcop $KSTARS $MAIN zoomIn
dcop $KSTARS $MAIN zoomIn
dcop $KSTARS $MAIN zoomIn
dcop $KSTARS $MAIN zoomIn
dcop $KSTARS $CLOCK setScale 3600.
dcop $KSTARS $CLOCK start
dcop $KSTARS $MAIN waitFor 20.
dcop $KSTARS $CLOCK stop
dcop $KSTARS $MAIN defaultZoom
##
</programlisting>
</para>
<para
>Сохраните этот сценарий в файл с любым именем, которое вам нравится; я предлагаю использовать что-то информативное, например <filename
>trackmoon.kstars</filename
>. Выполните следующие команды, чтобы сделать сценарий исполняемым: <userinput
><command
>chmod</command
> <option
>a+x</option
> <parameter
>trackmoon.kstars</parameter
> </userinput
>. Сценарий будет выполнятся после команды <userinput
><command
>./trackmoon.kstars</command
></userinput
> выполненной в каталоге, который содержит этот сценарий. Помните, что сценарий будет выполняться, только если &kstars; уже запущен. Вы можете использовать в сценарии команду <command
>dcopstart</command
> чтобы запустить новый экземпляр &kstars;. </para>
<para
>А теперь объяснение сценария. Первая строка определяет файл как сценарий командной оболочки <command
>BASH</command
>. Следующие две строки <firstterm
>комментарии</firstterm
> (любая строка, начинающаяся со знака <quote
>#</quote
> - комментарий, и будет пропущена интерпретатором). Следующие три строки определяют некоторые удобные переменные, которые будут использованы далее. Переменная <varname
>KSTARS</varname
> определяет идентификатор текущего процесса &kstars; используя команду <command
>dcopfind</command
>. <varname
>MAIN</varname
> и <varname
>CLOCK</varname
> определяют два интерфейса <abbrev
>DCOP</abbrev
> связанных с &kstars;. </para>
<para
>Оставшиеся строки - непосредственные вызовы функций <abbrev
>DCOP</abbrev
>. Первая команда устанавливает отображение в экваториальных координатах, устанавливая опцию <quote
>UseAltAz</quote
> в <quote
>false</quote
> (вы можете увидеть все опции, которые использует <quote
>changeViewOption</quote
> в конфигурационном файле <filename
>kstarsrc</filename
>). Следующая команда центрирует экран на Луну, и автоматически начинается слежение. После этого мы устанавливаем уровень увеличения по умолчанию, и затем увеличиваем изображение в пять раз. Далее увеличиваем скорость хода часов до 1 часа в секунду (3600 секунд - один час), и запускаем часы (если они не были запущены до этого). Следующая команда приостанавливает исполнение сценария на 20 секунд, пока мы наблюдаем, как Луна движется по небу. И, наконец, мы останавливаем часы и устанавливаем уровень увеличения по умолчанию. </para>
<para
>Мы надеемся что вы рады возможностям написания сценариев в &kstars;. Если вы создали интересный сценарий, пожалуйста, отправьте его на <email
>kstars@30doradus.org</email
>; мы посмотрим, что он делает, и опубликуем некоторые на нашей веб-странице. Если у вас есть идеи по улучшению языка сценариев (или любой другой части &kstars;), сообщите нам по адресу <email
>kstars-devel@lists.sourceforge.net</email
>, или в wishlist на bugzilla. </para>
</sect1>
</chapter>
|