Стосовно функції для зміни значень параметрів в файлі Ged.ini.
Підтримую запит на функцію. Такий-собі аналог функції API для роботи з файлами ініціалізації . Значення параметрів будуть вступати в силу при наступному запуску Digitals
Шановні розробники. Прошу Вас, будь-ласка, дайте відповідь на питання: чи можливо забезпечити повноцінну заборону оновлення карти на екрані функцією @Map.BeginUpdate тоді, коли скрипт “натикається” на функцію @Map.SplitMultiPolygon
Для прикладу - короткий опис скрипта, що забезпечує “правильність” створення складних полігонів (тих, які містять дірки). В скрипті відбувається перебір всіх полігональних об’єктів карти (2-3 тисячі штук) з прогресом. Для кожного з полігонів:
якщо об’єкт - збірний полігон, застосовується @Map.SplitMultiPolygon - роз’єднати збірний;
для кожного з роз’єднаних застосовується @ExecuteMenu SpbSplit - розділити складний;
для всіх розділених в пункті 2 застосовується @ExecuteMenu spbCombine - складний полігон;
для всіх роз’єднаних в пункті 1 застосовується @ExecuteMenu spbJoin - з’єднати в збірний.
Щоб не спостерігати на протязі 4-ох хвилин блимання карти на екрані, можна відкрити й активувати порожню карту на час виконання скрипта (тоді оновлюватиметься тільки прогрес, рядок стану і права панель). Але-ж функція @ExecuteMenu працює тільки з активною картою?
Может ли кто-то помочь возникла потребность в номерации участков карти по списку
;Читаем текст с файла @Text[1].Load D:\классификатор.txt
;Помещаем 2 строку в переменую I
$I=2
;В переменую К помещаем кол-во строк файла
$K=@Text[1].Count
;Старт цикла
%Start
;Задаем условие для перехода по строкам
$I=$I+1
;Задаем условие если $I=$K то прекращаем цикл @If $I=$K then @Break
;В переменую $z заносим соответсвующую строку из файл
$z=@Text[1].line[$I]
;Помечаем обьекты которые есть в карте и соответсвуют файлу @Map.SelectByParameters 1|61=$z
;Ссылка перехода @Goto %Start
Перебор участков с их последующим выделением я прописал можно ли как-то выполнять их номерацию (Автономерация вправо-вниз)
;Читаем текст с файла, в переменую К помещаем кол-во строк файла
$K=@Text[1].Load D:\классификатор.txt
;Присвоюєм значення змінній
$I=0
;Старт цикла
%Start
;Задаем условие для перехода по строкам
$I=$I+1
;Задаем условие если $I>$K то прекращаем цикл
@If $I>$K then @Break
;В переменую $z заносим соответсвующую строку из файл
$z=@Text[1].line[$I]
;Помечаем обьекты которые есть в карте и соответсвуют файлу
@Map.SelectByParameters 1|61=$z
;Ссылка перехода
@Goto %Start
В такому випадку читаються всі рядки текстового файла классификатор.txt, з першого до останнього.
[/code]В такому випадку читаються всі рядки текстового файла классификатор.txt, з першого до останнього.
[/quote]
Да но когда скрипт читает строки текстового файла он помещает эту строку в пременую $z которая в свою очередь попадает в функцию @Map.SelectByParameters 1|61=$z тоесть помечает участки на карте которые соотвествуют строке текстового файла \классификатор.txt\ и далее нужно пронумеровать помеченые участки в каком либо параметре /Автонумерация вправо-вниз\ и сделать ето нужно поочередно. Например:
;По текстовому файлу прочитали первую строку и занесли в переменую $z
;Подставили $z @Map.SelectByParameters 1|61=$z
;Нашли и пометили 5 совпадающих участков
;Эти участки пронумеровали /Автонумерация вправо-вниз\ начиная с 1
;По текстовому файлу прочитали вторую строку и занесли в переменую $z
;Подставили $z @Map.SelectByParameters 1|61=$z
;Нашли и пометили 19 совпадающих участков
;Эти участки пронумеровали /Автонумерация вправо-вниз\ начиная с №пследнего прунумерованого участка+1 тоесть с 6
И так нужно пронумеровать все участки карты
;Читаем текст с файла, в переменую К помещаем кол-во строк файла
$K=@Text[1].Load D:\классификатор.txt
;Присвоюєм значення змінній
$I=0
;На всяк-випадок знімаєм позначку з усіх
@Map.DeselectAll
;Старт цикла
%Start
;Задаем условие для перехода по строкам
$I=$I+1
;Задаем условие если $I>$K то прекращаем цикл
@If $I>$K then @Break
;В переменую $z заносим соответсвующую строку из файл
$z=@Text[1].line[$I]
;Помечаем обьекты которые есть в карте и соответсвуют файлу
@Map.SelectByParameters 1|61=$z
;Робим активним параметр 62 (для прикладу - 62)
@SendChars <ESC>
@Dialog.EditParameter 62
;Визначаєм перше доступне значення параметра 62
$MaxParam=@Map.MaxParameterValue 62
;;якщо в жодного об'єкта немає заповненого значення параметра 62 - перше доступне значення 1
@If $MaxParam= then $MaxParam=0
@If $MaxParam= then @Goto %YesNumber
;;визначаєм десятковий розділювач системи
$Separ=@DecimalSeparator
;;якщо десятковий розділювач кома - відділяєм цілу частину, інакше число сприймається як рядок
@If $Separ=, then $MaxParam=@StringPart 1,$MaxParam
;;перше доступне значення - наступне після максимального
%YesNumber
$MaxParam=$MaxParam+1
;Номеруєм позначені в активному параметрі 62 [popCalculator|Автонумерація (вниз)]
@SendChars $MaxParam<CR>
@ExecuteMenu Autonumberingrightdown1
;На всяк-випадок знімаєм позначку з усіх
@Map.DeselectAll
;Ссылка перехода
@Goto %Start
[code]
Спасибо работает только
Первые участки с целевым 01 Землі сільськогосподарського призначення нумерует правильно (строка 1 класификатора)(номерует с 1 до 39);
Далее проверяет целевые 01.01 и так далее (ненаходит) доходит до 02.01 находит номерует но выдает нете номера начинает 4040, 4041, 4042 и т.д. когда доходит до целевого 14.02 выдает такие цифры 4791479247914851, 4791479247914852, а всего участков в даной карте 1146. тоесть последний номер должен быть 1146.
Большое спасибо за помощь
От, тепер працює$Separ=@DecimalSeparator
$K=@Text[1].Load D:\классификатор.txt
$I=1
@SelectTab 3
@Map.DeselectAll
$Asc=@Dialog.WaitBox Позначте одну з ділянок, активуйте поле значення параметра 1, в якому має бути номер ділянки, на вкладці 'Інфо'
@If $Asc=0 then @Break Перервано користувачем
@Map.BeginUpdate
@Progress.Start $K Номерую ділянки
%Start
$I=$I+1
@If $I>$K then @Progress.Stop
@If $I>$K then @Map.EndUpdate
@If $I>$K then @Break Заномеровано ділянки
@Progress.StepBy
$z=@Text[1].line[$I]
@Map.SelectByParameters 1|61=$z
$Selcount=@Map.SelCount
@If $Selcount=0 then @Goto %Start
$MaxParam=@Map.MaxParameterValue 1
@If $MaxParam= then $ValParam=0
@If $MaxParam= then @Goto %YesNumber
@If $Separ=, then $ValParam=@StringPart 1,$MaxParam else $ValParam=$MaxParam
%YesNumber
$ValParam=$ValParam+1
@Map.EndUpdate
@SendChars $ValParam<CR>
@ExecuteMenu Autonumberingrightdown1
@Map.BeginUpdate
@Map.DeselectAll
@Goto %StartДовгенько мучився з нестабільною роботою . Дивно, чомусь прокол з функцією @Dialog.EditParameter ParamIndex, що у скрипті активувала параметр 1 для введення. Номерація ділянок вниз виконується в активному, на момент номерації, параметрі. Вихід один: активувати параметр 1 в ході очікування скрипта.
Помітив що, якщо включена заборона оновлення карти, не посилається повідомлення $ValParam наступному діалоговому вікну: @SendChars $ValParam @ExecuteMenu Autonumberingrightdown1
Прикріпив відео Demo.exe (1.04 MB)
ув. разработчики, у меня вопрос по функции “Загрузка из Интернет”:
возможно ли получить информацию по участкам при загрузке публичной кадастровой карты не клацая на каждый отдельно, а как-то автоматизировать этот процес.
Просто нужна информация с большого количества участков, а клацать каждый не весьма приятное и быстрое занятие
буду благодарен за помощь
Ребята помогите пожалуйста можна ли при помощи скриптов реализовать проверку слоев на карте
Например: Проверить наличие слоев Квартал, Дилянка , Угодие есть ли они на карте. я сделал ето так @Map.SelectLayer id10000
$K=@Map.SelCount @if $K=0 then @Break Отсутствует слой квартал Остановлено @Map.DeselectAll @Map.SelectLayer id20000
$D=@Map.SelCount @if $D=0 then @Break Отсутствует слой ділянка Остановлено @Map.DeselectAll @Map.SelectLayer id30000
Можна ли реализовать ето по другому?