sergeypetrovi4:
Благодарствую. Немножко доработав:
$NomSel=0
%Start
@ActivateMap 1
@Map.SelectLayerByName Ділянка
$NomSel=@Map.NextSelected $NomSel
@If $NomSel=0 then @Break Пройдено всі позначені об’єкти
@Map.DeselectAll
@Map.Object [$NomSel].Select
Документы | КадпланА3_за_межею_НП
@Goto %Start
Получил нужный результат. Теперь скрипт проходится по каждому участку и делает его выборку отдельно от всех (т.к. при выделенных всех участках диджиталс всеравно делал кадпланы на все сразу, и тогда вообще получалась каша)
Намудрили вы с выделением и циклом. Ваш скрипт проходится не по выделенным объектам, а сам выделяет все объекты слоя Ділянка, причем столько раз, сколько объектов этот слой содержит.
Используйте запись номеров помеченных объектов в список функцией @Map.Selected.List . Потом проходите в цикле по элементам списка и выделяйте объект по номеру. Использование данной функции можно увидеть здесь Библиотека полезных скриптов - #19 від system
При включенной “галочке” Сервис-Документы-Групповой режим кадпланы сгенерируются для всех помеченных объектов одним вызовом Документы | КадпланА3_за_межею_НП
А если необходима некая пост-обработка сгенерированного плана, то скрипт обработки целесообразно вставить в обработчик события %Events.OnAdd в dmt-шаблон для слоя Ін4_ділянка.
Есть такая функция как popCopyParameters | Скопировать значение параметра , но неясно как указать какой параметр копировать, и неясно в какой параметр вставлять значения. Может как-то по-другому это делается?
sergeypetrovi4:
Благодарствую. Немножко доработав:
$NomSel=0
%Start
@ActivateMap 1
@Map.SelectLayerByName Ділянка
$NomSel=@Map.NextSelected $NomSel
@If $NomSel=0 then @Break Пройдено всі позначені об’єкти
@Map.DeselectAll
@Map.Object [$NomSel].Select
Документы | КадпланА3_за_межею_НП
@Goto %Start
Получил нужный результат. Теперь скрипт проходится по каждому участку и делает его выборку отдельно от всех (т.к. при выделенных всех участках диджиталс всеравно делал кадпланы на все сразу, и тогда вообще получалась каша)
Намудрили вы с выделением и циклом. Ваш скрипт проходится не по выделенным объектам, а сам выделяет все объекты слоя Ділянка, причем столько раз, сколько объектов этот слой содержит.
Используйте запись номеров помеченных объектов в список функцией @Map.Selected.List . Потом проходите в цикле по элементам списка и выделяйте объект по номеру. Использование данной функции можно увидеть здесь Библиотека полезных скриптов - #19 від system
Да я б и рад все сделать правильно, но учитывая очень сжатые сроки, мне приходится мудрить . В принципе работает все быстро. Пока этого достаточно.
Как расширить рамку карты, допустим по длине на 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
Дякую, дуже помогло.
Є помічений полігон. В ньому різні об’єкти різних шарів.
Як позначити тільки об’єкти всередині цього полігону і тільки одного шару?
Дякую.
system
29.09.2013 09:23:30
212
інакше останній рядок текстового блоку не буде пройденим в циклі.
От блін, нема як видалити повідомлення. Все в скрипті правильно.
Скажімо, так. Реалізував через тимчасову групу.
@Map.SelectInsideSelected
@Map.Selected.AddToGroup tempgroup
@Map.DeselectAll
@Map.SelectLayer ID0
Правка | Инвертировать
@Map.Selected.RemoveFromGroup tempgroup
@Map.DeselectAll
@Map.SelectGroup tempgroup
@Map.DeleteGroup tempgroup
Скажімо, так. Реалізував через тимчасову групу.
@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-ної лінії в полігоні?
Дякую.
Ivan0000:
Параметер -10 Довжини ліній. 18,20|9,64|18,20|9,64
Як видобути довжину N-ної лінії в полігоні?
Дякую.
Присоединяюсь к вопросу, тоже нужно вытянуть определенные размеры (прямоугольного объекта)
Ivan0000:
Параметер -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