Шановні! Підкажіть, будь ласка. Як можна досягнути оновлення інформації у списку шарів[attachment=0]Qestion.JPG[/attachment]Наприклад: коли скриптом створюється шар в карті, не хочеться визначати перший доступний його ID, тому створюється шар з ID=0 а Digitals сам присвоює ID доданому шару. От тільки значення присвоєного ID шару стає відомим тільки після запуску менеджера шарів.
Як би так обійтися без @ExecuteMenu MapLayersз функцією оновлення списку шарів
Дякую за код.
Воно то так можна, однак далі з доданим шаром працювати у скрипті - ще цікавіше :
позначені об’єкти карти переводяться у доданий шар функцією @Map.Selected.ChangeLayer
функція @Map.Layers.ObjectCount, застосована до вказаного шару повертає 0
Блін! Після @Map.Layers.ObjectCount запускаю вікно статус шарів - у шарі є об’єкти, а @Map.Layers.ObjectCount повертає НУЛЬ.
Тільки після вікна “статус шарів” @Map.Layers.ObjectCount поверне вам кількість об’єктів у шарі, а без нього - НУЛЬ.
Знаєте що мусив додати в скрипт, щоб був порядок?
;Вікно | Статус шарів
@ExecuteMenu WindowLayerStatus
;Вікно | Статус шарів
@ExecuteMenu WindowLayerStatusІ сміх, і гріх. Порядком надоїло “надягати майку через ноги”.
Я не бачу інших варіантів, як тільки аби розробники таки додали функцію оновлення списку шарів.
Коротенький скрипт, який демонструє проблему;Створити нову карту на Normal
@FileNew Нова карта /Template=Normal.dmf
;Визначити новий доступний ID
$Lay=@Map.Layers.List
@Text.Text=$Lay
$Count=@Text.Count
$Max=@Text.Line[1]
$Max=@StringPart 1 $Max
%Cycle
$Val=@Text.Line[$Count]
$Val=@StringPart 1 $Val
@If "$Val">"$Max" Then $Max=$Val
$Count=$Count-1
@If $Count>0 Then @Goto %Cycle
$Max=$Max+1
;Додати новий шар стилю Полігон/Полілінія
$NumLay=@Map.Layers.Add $Max 1 Доданий шар
;Зібрати кілька лінійних об'єктів у шарі на замовчування
@Map.SetCollectionLayer ID0
@CollectionTemplate 5
@SelectTab 1
@Dialog.WaitBox Зберіть об'єкти в шарі "DefaultLayer" і тисніть "Прордовжити"
@Map.SelectAll
;Змінити шар зібраних об'єктів на "Доданий шар"
@Map.Selected.ChangeLayer ID$Max
;УСІ МОЖЛИВІ ОНОВЛЕННЯ ЕКРАНУ ТА ПЕРЕРАХУНОК РОЗМАХУ КАРТИ
@Window.Refresh
@Map.CalculateRange
;Визначення кількості об'єктів у доданому шарі
$CountObj=@Map.Layers.ObjectCount $NumLay
@Dialog.Message Кількість об'єктів, повернута функцією Map.Layers.ObjectCount, якогось дідька рівна $CountObj
;ВИКЛИК ВІКНА "СТАТУС ШАРІВ"
@ExecuteMenu WindowLayerStatus
;ВИЗНАЧЕННЯ КІЛЬКОСТІ ОБ'ЄКТІВ У ДОДАНОМУ ШАРІ
$CountObj=@Map.Layers.ObjectCount $NumLay
@Dialog.Message Кількість об'єктів, повернута функцією Map.Layers.ObjectCount після відображення вікна "Статус шарів" - "$CountObj"
;ЗАКРИВАННЯ ВІКНА "СТАТУС ШАРІВ"
@ExecuteMenu WindowLayerStatusзапустіть, будь-ласка, за виключеного вікна “статус шарів”.
На диво, коли я в приведений мною код вставив @Map.RedefineLayers -7, і в мене @Map.Layers.ObjectCount стала повертати кількість об’єктів.
Навіть якщо знову видалити @Map.RedefineLayers -7 з наведеного коду і перезапустити Digitals - працює все ОК.
Не годиться лише @Map.RedefineLayers -7 в “справжньому” скрипті на “справжній” карті, оскільки “После переопределения слоев по значению какого-либо параметра, те объекты, значения данного параметра у которых одинаковы, будут сгруппированы в один слой. Имя слоя берется из значения параметра.” Як далі давати раду з усіма об’єктами у перепризначених, створених командою @Map.RedefineLayers і доданих в шаблон карти, шарах?
Не знаю як у стандартному Normal-і, але в лісових картах службовий параметр -7 має тип “текстовий рядок”. Ймовірно через це min/max не можна застосовувати до P[-7].
P.S. Ну все! Вилікував скрипт. Принаймні у себе на компі:
Добрый день. Как можно реализовать возможность добавления в шаблон кадастровый план каталога координат с двумя системами одновременно (СК63 и УСК2000).
Доброго дня! Підкажіть будь-ласка, як зі скрипту запустити Reports.exe певний шаблон. В мене чомусь так не працює, пише що буде завантажений тестовий режим.
@Run $PrPath\Reports.exe -t$PrPath\Templates\TehDoc_Khodienkov.fr3
P.S. Само собою змінна $PrPath в коді визначена як системна папка
Можливо буфер обміну пустий? Попередньо потрібно в буфер копіювати дані.
Додайте в початок скрипту строку @OpenLog
в кінець скрипту строки @CloseLog x:\log.txt @Run x:\log.txt
можливо лог виконання скрипту надасть відповідь
Дякую, дійсно буфер пустий.
А можливо ще хтось підкаже, як через скрипт завантажити карти з інтернету (Кадастрова карта, Снимки и карты, В рамку карты, увеличение 17, ск63(3))
Використовуйте функцію @Map.SelectLayerNumbers, де Numbers-відповідно номер шару, але я Вам раджу замість порядкового номеру забивати ID шару, так надійніше.
Додайте у скрипт перед завантаженням дiалог WaitBox
; @ExecuteMenu LoadFromInet //це за бажанням, я не ставлю в кодi @Dialog.WaitBox Завантажте необхiдний растр i натиснiть “Продовжити”
Доброго вечора. Є потреба після умовного оператора If виконати послідовність дій. Як правильно зробити - писати все в одному рядку після умови, чи можна якось виділити then/else. Debaginng-у немає, не можу зрозуміти як правильно.