ООО "ЛесИС" - ГИС TOPOL-L для лесного хозяйства, лесоустройства и арендаторов лесного фонда
ООО "ЛесИС" - ГИС TOPOL-L для лесного хозяйства, лесоустройства и арендаторов лесного фонда
lesis@ya.ru
+7(916)615-42-77

ФОРУМ ТЕХПОДДЕРЖКИ ГИС TOPOL-L

Объявление

Для участия в работе закрытой, технической части форума нужно быть пользователем ГИС TopoL-L2 (10.0) и Зарегистрироваться!

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



Макросы, Язык ToPas

Сообщений 1 страница 7 из 7

1

Где можно по подробней найдти информацию по этому языку? Знает ли ToPas оператор Case?

2

mrac3 написал(а):

Где можно по подробней найдти информацию по этому языку?

К сожалению, информации очень мало, так как он не предполагался разработчиками в качестве самостоятельного инструмента пользователя.

Все что есть в чешской документации это вот этот текст:

Наименьшая значимая единица текста в выражениях или программах ToPas является символ. Символы образуют идентификаторы, ключевые слова и константы. Символы разделяются любым количеством разделителей.

Специальные символы - это символы или пары символов с одним или несколькими фиксированными значениями. Специальные символы ToPas включают следующие символы:
+ - * / ( ) [ ] = , $ @ % . ! ~ : & < > <= <> >= ; :=
Их нельзя использовать для идентификации.

Идентификатор используется для обозначения констант, переменных, имен внешних баз данных и баз данных графических объектов, внутренних функций, атрибутов графических объектов, необязательных элементов таблицы и символических имен связей между внешними базами данных.
Идентификатор - это символьная строка, которая должна начинаться с буквы (символы a..z и A..Z) или подчеркивания (_) и может содержать буквы, цифры (символы 0..9) и символ подчеркивания. ToPas (идентификаторы, ключевые слова) не чувствителен к регистру. Некоторые идентификаторы имеют специальную функцию и считаются ключевыми словами.

Обзор ключевых слов:

    and             begin           block           boolean
    calcvalue       const           database        datum
    description     div             do              double
    downto          else            end             for
    false           if              list            longint
    mod             not             noinit          of
    or              parameter       readparam       repeat
    shl             shr             string          then
    to              true            until           var
    while           write           writeln         xor

Константные значения включают целые числа, действительные числа, строки, логические значения и константы типа даты.

Пробелы, разрывы строк и комментарии считаются разделителями.

Комментарий - любой текст, заключенный в составные скобки ({}).

Длина строки программы в ToPas не должна превышать 255 символов.

Ну и конкретные примеры по всей документации, дословно переводить которую смыла не было.
Поэтому мы изначально ориентировались на использование и корректировку готовых образцов, а также построитель запросов.

mrac3 написал(а):

Знает ли ToPas оператор Case?

В списке его нет, но, возможно, Дмитрий Александрович уточнит или предложит более развернутый список функций.
Изначально, в его основу закладывались конструкции языка Паскаль - Topol+Paskal= ToPas. Не исключено, что можно использовать больше функций чем заявлено.

3

mrac3 написал(а):

Знает ли ToPas оператор Case?

В дополнение к тому, что написал Сергей Петрович: простой совет - попробуйте, если выдаст ошибку что не знает такого, значит нельзя. ToPas - очень простой макроязык, использующий синтаксис, близкий Паскалю, но это не Паскаль. А имеющиеся описания обычно отстают от дополнений, вносимых в язык. Выделить специальных сотрудников, которые бы занимались только документацией, у коллег возможности нет.

4

Написал макрос для раскраски карты по ландшафтным характеристикам, стал проверять, работает неправильно. Например: @1.4.1.PARAMID = 2101, @1.4.1.PARAMETR =12, должен присвоить ResultValue1 := '12',  а он присваивает 11; т.е.   выражение <if (@1.4.1.PARAMETR:N) = 11 then>дает "TRUE", почему не пойму, все перепробовал, хотел  оператор IF заменить на Case он не понимает. Может посмотрите код подскажите где ошибка?

Код макроса

var
      ResultValue : string;
      ResultValue1 : string;
      ResultValue2 : string;
      ResultValue3 : string;
      ResultValue4 : string;
      ResultValue5 : string;
      ResultValue6 : string;
      ResultValue7 : string;
       
begin   
if @1.4.1.PARAMID = 2101 then

begin                             
if (@1.4.1.PARAMETR:N) = 11 then ResultValue1 := '11' else
if (@1.4.1.PARAMETR:N) = 12 then ResultValue1 := '12' else
if (@1.4.1.PARAMETR:N) = 21 then ResultValue1 := '21' else
if (@1.4.1.PARAMETR:N) = 22 then ResultValue1 := '22' else
if (@1.4.1.PARAMETR:N) = 31 then ResultValue1 := '31' else
if (@1.4.1.PARAMETR:N) = 32 then ResultValue1 := '32' else
if (@1.4.1.PARAMETR:N) = 33 then ResultValue1 := '33'           
end;
              
if @1.4.1.PARAMID = 2102 then

begin
if (@1.4.1.PARAMETR:N) = 1 then ResultValue2 := '1' else
if (@1.4.1.PARAMETR:N) = 2 then ResultValue2 := '2' else
if (@1.4.1.PARAMETR:N) = 3 then ResultValue2 := '3'
end;

if @1.4.1.PARAMID = 2103 then

begin
if (@1.4.1.PARAMETR:N) = 3 then ResultValue3 := '3' else
if (@1.4.1.PARAMETR:N) = 2 then ResultValue3 := '2' else
if (@1.4.1.PARAMETR:N) = 1 then ResultValue3 := '1' else
ResultValue3 :='0'
end
else ResultValue3 :='0';
   
if @1.4.1.PARAMID = 2104 then

begin
if (@1.4.1.PARAMETR:N) = 4 then ResultValue4 := '4' else
if (@1.4.1.PARAMETR:N) = 3 then ResultValue4 := '3' else
if (@1.4.1.PARAMETR:N) = 2 then ResultValue4 := '2' else
if (@1.4.1.PARAMETR:N) = 1 then ResultValue4 := '1' else
ResultValue4 :='0'
end
else ResultValue4 :='0';
     
if @1.4.1.PARAMID = 2105 then

begin
if (@1.4.1.PARAMETR:N) = 4 then ResultValue5 := '4' else
if (@1.4.1.PARAMETR:N) = 3 then ResultValue5 := '3' else
if (@1.4.1.PARAMETR:N) = 2 then ResultValue5 := '2' else
ResultValue5 :='0'
end
else ResultValue5 :='0';
   
if @1.4.1.PARAMID = 2106 then

begin
if (@1.4.1.PARAMETR:N) = 4 then ResultValue6 := '4' else
if (@1.4.1.PARAMETR:N) = 3 then ResultValue6 := '3' else
if (@1.4.1.PARAMETR:N) = 2 then ResultValue6 := '2' else
ResultValue6 :='0'
end
else ResultValue6 :='0';

if @1.4.1.PARAMID = 2107 then

begin
if (@1.4.1.PARAMETR:N) = 1 then ResultValue7 := '1' else
if (@1.4.1.PARAMETR:N) = 2 then ResultValue7 := '2' else
if (@1.4.1.PARAMETR:N) = 3 then ResultValue7 := '3' else
if (@1.4.1.PARAMETR:N) = 4 then ResultValue7 := '4' else
if (@1.4.1.PARAMETR:N) = 5 then ResultValue7 := '5' else
ResultValue7 :='0'
end
else ResultValue7 :='0';
                                   
ResultValue := ResultValue1 + ResultValue2 + ResultValue3 + ResultValue4 + ResultValue5 + ResultValue6 + ResultValue7;
end.

5

Основная ваша ошибка в том, что @1.4.1.PARAMID возвращает в общем случае не одно значение, а множество всех значений PARAMID, то есть не longint, а тип list of longint. Чтобы получить правильные данные, нужно либо использовать функцию SELECT, либо загрузить результаты в два списка и в цикле синхронно их анализировать. Опишите подробнее "словами", что Вам нужно, и я попробую предложить Вам решение.

6

Добрый день. Подскажите пожалуйста как добавить новые породы в ToPas и редактор библиотеки стилей, например береза желтая, так чтобы она раскрашивалась на плане лесонасаждений.
http://forumupload.ru/uploads/0017/fb/db/215/t975070.jpg

Пост написан 08.06.2022 11:10:54

7

Елена написал(а):

добавить новые породы в ToPas

Дублируете в файле d:\LesIS\_Les\ToPas\PlanL2.tps соседнюю пару определений, самую близкую по классификационному коду и откорректировать коды. На примере деморегиона взят код 2026* как наиболее близкий к Б каменной по НСИ (хотя по классификатору должен быть 2028*), а код окраски - как у мягколиственных берез 302.
  else if poroda = 2025 then
    ResultValue := '225' { вяз }
  else if poroda = 2026 then
    ResultValue := '302' { береза }

Елена написал(а):

редактор библиотеки стилей

Если подходящего по цвету знака нет или нужен набор с цветом, отличным от имеющихся, то пример работы с библиотеками (кажется линейных символов) есть в видеоуроках:
Создание и редактирование библиотек условных знаков. 1.4МБ
По аналогии открываете библиотеку, например, d:\LesIS\__Sis\LesIS_2.sli, копируете наиболее близкие по цвету знаки и редактируете их. Меняете по правой кнопке на ячейке ее цвет и штриховку, ставите ID по аналогии с другими породами и логикой их определения в ToPas файле.
Создайте копию библиотеки и пробуйте... пробуйте... пробуйте. Пока не получите нужный результат. Это единственный способ обучения.




Почтовый адрес для ЗАКАЗНЫХ писем:
С.П.Грешнов, +7(916)615-42-77, 108832, А/Я №1
НЕ ИСПОЛЬЗОВАТЬ курьерскую доставку!!!
E-Mail: lesis@ya.ru
Вопросы общего характера:
+7(916)615-42-77
РОССИЙСКАЯ ФЕДЕРАЦИЯ
Общество с ограниченной ответственностью "ЛЕСИС"
ОГРН: 1035007204902, ИНН: 5036046400, КПП: 503601001