|
|
|
|
<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>
|
|
|
|
|
|