Все про скрипти

Намудрили вы с выделением и циклом. Ваш скрипт проходится не по выделенным объектам, а сам выделяет все объекты слоя Ділянка, причем столько раз, сколько объектов этот слой содержит.

Используйте запись номеров помеченных объектов в список функцией @Map.Selected.List. Потом проходите в цикле по элементам списка и выделяйте объект по номеру. Использование данной функции можно увидеть здесь Библиотека полезных скриптов - #19 від system

При включенной “галочке” Сервис-Документы-Групповой режим кадпланы сгенерируются для всех помеченных объектов одним вызовом Документы | КадпланА3_за_межею_НП
А если необходима некая пост-обработка сгенерированного плана, то скрипт обработки целесообразно вставить в обработчик события %Events.OnAdd в dmt-шаблон для слоя Ін4_ділянка.

Есть такая функция как popCopyParameters | Скопировать значение параметра, но неясно как указать какой параметр копировать, и неясно в какой параметр вставлять значения. Может как-то по-другому это делается?

Да я б и рад все сделать правильно, но учитывая очень сжатые сроки, мне приходится мудрить. В принципе работает все быстро. Пока этого достаточно.

Как расширить рамку карты, допустим по длине на 840 пикселей (аналогично свойства карты-выбираем размер рамки) ? А то я что-то не нашел.

UPD: @Map.FrameSelected - не оно?

Именно оно, но не в пикселях, а в миллиметрах.

Ну да, по привычке написал. Спасибо.

$NSharKB=@Map.SelCount -кількість помічених об’єктів 2
$SpNKB=@Map.Selected.List -список номерів помічених об’єктів
@Dialog.Message $SpNKB -пише 6 і 14 в стовпчик (діалогове вікно)
$n=@Text[$SpNKB].Count -кількість рядків у списку помічених об’єктів
@Dialog.Message $n - пише 0 рядків
$AAA=@StringPart 1 $SpNKB -хочу перше число 6
@Dialog.Message $AAA -пише 6 і 14 в стовпчик (діалогове вікно)
Як розділити числа?

$SpNKB=@Map.Selected.List
@Text[1].Text $SpNKB
$n=@Text[1].Count
@if $n=0 then @Break Не помічено жодного об’єкта
$I=0
%Loop
$I=$I+1
$AAA=@Text[1].Line[$I]
@Dialog.Message $AAA
@if $I<$n then @Goto %Loop

$SpNKB=@Map.Selected.List
@Text[1].Text $SpNKB
$n=@Text[1].Count
@if $n=0 then @Break Не помічено жодного об’єкта
$I=0
%Loop
$I=$I+1
$AAA=@Text[1].Line[$I]
@Dialog.Message $AAA
@if $I<$n then @Goto %Loop

Дякую, дуже помогло.

Є помічений полігон. В ньому різні об’єкти різних шарів.
Як позначити тільки об’єкти всередині цього полігону і тільки одного шару?
Дякую.

інакше останній рядок текстового блоку не буде пройденим в циклі.

От блін, нема як видалити повідомлення. Все в скрипті правильно.

Скажімо, так. Реалізував через тимчасову групу.

@Map.SelectInsideSelected
@Map.Selected.AddToGroup tempgroup
@Map.DeselectAll
@Map.SelectLayer ID0
Правка | Инвертировать
@Map.Selected.RemoveFromGroup tempgroup
@Map.DeselectAll
@Map.SelectGroup tempgroup
@Map.DeleteGroup tempgroup

Дякую. Але зробив по-іншому.

Є текстовий список. Як перетворити в рядок, впритик без пробілів?
Як цей рядок перетворити в числовий вираз, щоб дало результат обчислення?
Дякую.

;список @Text[1] уже должен быть заполнен
$S=
$N=@Text[1].Count
@if $N=0 then @Break Пустой список
$I=0
%Loop
$I=$I+1
$A=@Text[1].Line[$I]
;формируем значение списка в виде строки
$S=$S$A
@if $I<$N then @Goto %Loop
;показываем результирующую строку
@Dialog.Message $S

Параметер -10 Довжини ліній. 18,20|9,64|18,20|9,64
Як видобути довжину N-ної лінії в полігоні?
Дякую.

Присоединяюсь к вопросу, тоже нужно вытянуть определенные размеры (прямоугольного объекта)

Используйте функцию

@Map.Object[$ObjNum].LineLength[$SegNum]

которая возвращает длину сегмента $SegNum для объекта $ObjNum

Може надоїв, але скажіть будь-ласка, як заокруглити число до знаку після коми?
Дякую.

Якщо числа не від’ємні, то так:

$X=1.54
$X=@Calc trunc($X*10+0.5)/10
@Dialog.Message $X