Библиотека полезных скриптов

Дякую за допомогу.
:bulb: :smiley: Натиснути Ctrl-D під час збору, якраз Те що Потрібно!

Написане було за 10 хвилин до спроби Натиснути Ctrl-D під час збору:
Потрібно із таблиці (списку) із Дирекційними кутами та промірами внести точки на карту та зібрать полігон.
У себе змінив об’єкт шару ID11340000 на шар ID10 і накидав точки теодолітного ходу на карту, але потрібно проміри внести ті що у списку, а вони не цілі числа…
Інших способів не знайшов, тому і прошу допомоги.
Зараз почитаю про варіанти у книжці.
Переглянув, але для себе нічого не знайшов з Дирекційними кутами…

Скажемо так:

  • системний розділювач змінюється в меню Пуск > Панель керування > Мова та регіональні стандарти на вкладці Регіональні параметри кнопка Налаштування вкладка Числа поле Десятковий розділювач;
  • системний розділювач визначає: кома чи крапка буде повернуто у скрипт в десяткових числах командами скрипта $x=@Map.Object[$n].Parameter[-4] та $y=@Map.Object[$n].Parameter[-3];
  • арифметичні дії виконуються у скрипті лише з десятковими числами у яких розділювач - крапка.

При системному розділювачі - кома:

  • $x та $y міститимуть коми, тому $x=@Calc Replace(“$x”,“,”,“.”) заміняє кому на крапку, однак $d=@Dialog.Ask дистанция уводиться з комою, $d=@Calc Replace(“$d”,“.”,“,”) заміняє крапку на кому і $dx=$x+$ac*$d приймає $d з комою (множення на число з комою не виконується скриптом).

При системному розділювачі - крапка:

  • $x та $y міститимуть крапки, тому $x=@Calc Replace(“$x”,“,”,“.”) залишить в числах крапки, однак $dx=@Calc Replace(“$dx”,“.”,“,”) замінить крапку на кому і @Map.AddObject 0|1|ID11340000|1|0 $dx $dy 0|1|ID11340000|1|4 $nn подаватиме в карту координати з комою (не створить Digitals об’єкт за координатами з комою, бо системний розділювач - крапка).

Одним словом, попробуйте замінити у скрипті $d=@Calc Replace(“$d”,“.”,“,”) на $d=@Calc Replace(“$d”,“,”,“.”). Тоді при системному розділювачі “кома” має працювати.

:smiley: :bulb: Дякую, замінив на $d=@Calc Replace(“$d”,“,”,“.”) - ПРАЦЮЄ!

Побудова по дир. кутах або румбах
Скрипт, звичайно “специфічний”, - нормально працює тільки на новій карті запущений перший раз.
На новій карті сворюю (ставлю) ТТХ ІD10 і “погнав” автоматом вводить дані…
Повторно запускать на цій же карті можна, але кути відкладаються вже не так (не туди)… залежність не досліджував…

Мої зміни:

  • Українська локалізація
  • В скрипту прописано шар для створення нових точок ID11 “Проектні лінії”
  • фунція “Вигляд | Показати всі” після створення точки
  • добавлена іконка

Скрипт трансформування растрів в УСК/МСК чомусь не трансформує всі растри. З декотрих - тільки невелику ділянку на краю растру. Підкажіть, в чому може бути справа?

Надішліть посилання на один з проблемних растрів нам на help@vingeo.com

Написав тиждень тому, але ніхто ніяк не відповів.

Печалька… :frowning:
Я двічі звертався електронкою 24 та 31 липня, - до цього дня поки немає повідомлення від розробників.
Можливо у віпустці :smiley:
А можливо у них немає можливості переглянути пошту… Печалька… :frowning:
Тоді потрібно іншими способами виходити на зв’язок.
Особисто мені вже не потрібно відповідати, питання вирішене але, як про це повідомить роробників ще не зняю.
Гадаю Вони поставляться з розумінням до моїх питань.

Вибачьте, з ситуацією розібрались і я забув відповісти.

Для проблемних растрів створіть World-файли за допомогою Models.exe-Архив-Экспорт(попередньо обрати діректорію з растрами та виділіти файли в середньому стовпчику). Перевірьте наявність World-файлів для усіх растрів. Видаліть елементи орієнтування з заголовків tif-файлів (кнопка Удалить в середньому стовпчику Models.exe-Архив). Все, можна запускати скрипт.

Скрипт для повороту усіх підписів виділених об’єктів вздовж виділеної лінії.
Можливо комусь знадобиться :slight_smile:

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

  1. Можливо Вам допоможе кнопка “Показ центрiв” iз включеною опцiєю “Значення висот”.
  2. Скрипт робить пошук точок з рiзними висотами i формує в кiнцевому результатi масив з координатами точок перетину, висоти в яких рiзнi. Запис формується у форматi X Y Z ID. (Правда у скриптi застосована ф-цiя EditAlign, яка добавляє точки перетину мiж об’єктами. При потребi закоментуйте рядок з вказаною ф-цiєю )

$MapCount=@MapCount @If $MapCount=0 Then @Break Не вiдкрито жодної карти $SelCount=@Map.SelCount @If $SelCount=0 Then @Break Не помiчено жодного об'єкту $Count=$SelCount $Buf=@Map.Selected.List @ExecuteMenu EditAlign @Map.DeselectAll ; масив помiчених об'єктiв @Text.Text=$Buf ; масив точок перетину @Text[1].Clear ; масив точок з рiзними висотами @Text[2].Clear ; основний цикл %CycleMain $Obj=@Text.Line[$Count] $PntCount=@Map.Object[$Obj].Count $I=1 %CyclePoint $Point=@Map.Object[$Obj].Point[$I] @Text[1].Add $Point $Obj $I=$I+1 @If $I<=$PntCount Then @Goto %CyclePoint ; $Count=$Count-1 @If $Count>0 Then @Goto %CycleMain ; сортуємо список точок для перевiрки @Text[1].Sort $PntCount=@Text[1].Count $I=1 %CycleList $MPoint=@Text[1].Line[$I] ;$MPoint=%Library.ReplaceComma $MPoint $MX=@StringPart 1 $MPoint $MY=@StringPart 2 $MPoint $MZ=@StringPart 3 $MPoint $J=$I+1 %CycleIns @If $J>$PntCount Then @Goto %NextPoint $IPoint=@Text[1].Line[$J] ;$IPoint=%Library.ReplaceComma $IPoint $IX=@StringPart 1 $IPoint $IY=@StringPart 2 $IPoint $IZ=@StringPart 3 $IPoint @If ($MX=$IX) And ($MY=$IY) And ($MZ<>$IZ) Then @Goto %AddPoint ; %NextPoint $I=$I+1 @If $I<=$PntCount Then @Goto %CycleList @Goto %PrintResult %AddPoint $EX=@Text[2].IndexOf $MPoint @If $EX>0 Then @Goto %AddSecPoint @Text[2].Add $MPoint %AddSecPoint $EX=@Text[2].IndexOf $IPoint @If $EX>0 Then @Goto %ExitAddPoint @Text[2].Add $IPoint %ExitAddPoint $J=$J+1 @Goto %CycleIns ; %PrintResult $Count=@Text[2].Count $Buf=@Text[2].Text @If $Count>0 Then @Dialog.Message $Buf ; очищення масиву @Text[2].Clear @Text[1].Clear @Text.Clear ; @Break

Знову застряг уже на першому кроці. Models на етапі експорту елементів орієнтування в .txt видає помилку “export error”.

Відкрийте цей растр в Ged.exe та надішліть інформацію(меню Растр-Свойства) про растр на help@vingeo.com.

Здравствуйте!! Никто не подскажет каким образом средствами скрипта можно открыть определенный документ word и вставить туда переменные которые заранее определены в документе (DocVariable)???

Такая функция когда-то была в программке TCPScript, очень бы хотелось такого функционала и в наших родных скриптах.

Скрипт готовит некие данные и запускает Word с созданием документа на основе шаблона Digitals\Templates\TemplateName.dot

;путь к программе $PP=@ProgramPath ;заполняем строками @Text[1].Add DocVar1=Value1 @Text[1].Add DocVar2=Value2 @Text[1].Add DocVar3=Value3 @Text[1].Add DocVar4=Value4 ;Копируем в буфер @Text[1].Copy ;или сохраняем во временный файл @Text[1].Save $PP\tempdata.txt ;запускаем Ворд с шаблоном @Run "c:\Program Files (x86)\Microsoft Office\OFFICE11\WINWORD.EXE" /t"$PP\Templates\TemplateName.dot"
В шаблоне TemplateName.dot необходимо добавить обработчик события создания документа

Скрипт формує таблицю, яка містить кадастровий номер, ПІБ чи назву землевласника, адресу ділянки, цільове призначення та площу по кожному файлу XML у вибраній папці

$Tab=@Calc char(9) $Tab=@DequoteText $Tab $WorkPapka=@Dialog.SelectFolder Виберіть папку з файлами xml для звіту @if $WorkPapka= then @break @Text[1].FolderListTree *.xml $WorkPapka $TC=@Text[1].Count @if $TC=0 then @break В папці не виявлено жодного обмінного файла xml $Len=@Calc Length("$TC") $L=@Calc Copy("$TC","$Len","1") @if $L=1 then $TCText="$TC файл" @if $L>1 then $TCText="$TC файли" @if $L>4 then $TCText="$TC файлів" @if $L=0 then $TCText="$TC файлів" $Len=$Len-1 $L2=@Calc Copy("$TC3","$Len","1") @if $L2=1 then $TCText="$TC файлів" $TCText=@DequoteText $TCText @Progress.Start $TC Обробляю... (всього $TCText) @Text[2].Add Кадастровий номер$TabПІБ (назва) землевласника$TabАдреса ділянки$TabЦП$TabПлоща $XML=0 $XMLYes=0 %LoopXML $XML=$XML+1 @Progress.StepBy 1 $FN=@Text[1].Line[$XML] $Valid=@XML.Valid $FN @if $Valid<>1 then @Text[3].Add $FN @if $Valid<>1 then @Goto %LoopXML @FileOpen $FN ;кадастровий номер $KN=@Map.XMLCadastralNumber @if $KN= then $KN=@Map.ClearShortFilename ;виділяємо ділянку @Map.DeselectAll @Map.SelectLayer ID70005 $SC=@Map.SelCount @if $SC<1 then @Text[3].Add $FN @if $SC<1 then @Goto %LoopXML ;рахуємо кількість успішно відкритих $XMLYes=$XMLYes+1 $N=@Map.SelectedObject ;дістаємо адресу ділянки $ADVse=@Map.Object[$N].Parameter[ID7000500] $AD=@XML.XPath Settlement $ADVse $ADTup=@XML.XPath ParcelAddress/StreetType $ADVse $AD4=@XML.XPath ParcelAddress/StreetName $ADVse @if $AD4=- then $AD4= @if $AD4<> then $AD=$AD, $ADTup $AD4 $AD5=@XML.XPath ParcelAddress/Building $ADVse @if $AD5=- then $AD5= @if $AD5<> then $AD=$AD, $AD5 $AD6=@XML.XPath ParcelAddress/Block $ADVse @if $AD6=- then $AD6= @if $AD6<> then $AD=$AD, $AD6 ;цільове використання $CV=@Map.Object[$N].Parameter[ID7000510] $CV=@StringPart 1 $CV ;площа $Area=@Map.Object[$N].Parameter[ID7000516] ;ПІБ чи назва землевласника $Prop=@Map.Object[$N].Parameter[ID7000520] $PrCount=@XML.NodeCount /Proprietors ProprietorInfo $Prop $Res= @if $PrCount<1 then @Goto %IgnoreProp $I=0 %StartProp $I=$I+1 @if $I>1 then $Res=$Res, $UrCount=@XML.NodeCount /Proprietors/ProprietorInfo[$I]/Authentication LegalEntity $Prop @if $UrCount=1 then @Goto %Uryd $LN=@XML.XPath /Proprietors/ProprietorInfo[$I]/Authentication/NaturalPerson/FullName/LastName $Prop $FN=@XML.XPath /Proprietors/ProprietorInfo[$I]/Authentication/NaturalPerson/FullName/FirstName $Prop $MN=@XML.XPath /Proprietors/ProprietorInfo[$I]/Authentication/NaturalPerson/FullName/MiddleName $Prop $Res=$Res$LN $FN $MN @Goto %NeUryd %Uryd $UrydName=@XML.XPath /Proprietors/ProprietorInfo[$I]/Authentication/LegalEntity/Name $Prop $Res=$Res$UrydName %NeUryd @if $I<$PrCount then @Goto %StartProp %IgnoreProp ;формуємо рядок та додаємо в таблицю @Text[2].Add $KN$Tab$Res$Tab$AD$Tab $CV$Tab $Area @CloseMap $FN $Cancel=@Progress.Canceled @if $Cancel=1 then @Goto %EndXML @if $XML<$TC then @Goto %LoopXML %EndXML @Progress.Stop @Text[2].Copy ;рахуємо файли, які не вдалося обробити $TC3=@Text[3].Count $Text= @if $TC3=0 then @Goto %AllGood $Len=@Calc Length("$TC3") $L=@Calc Copy("$TC3","$Len","1") @if $L=1 then $TCText="$TC3 файл" @if $L>1 then $TCText="$TC3 файли" @if $L>4 then $TCText="$TC3 файлів" @if $L=0 then $TCText="$TC3 файлів" $Len=$Len-1 $L2=@Calc Copy("$TC3","$Len","1") @if $L2=1 then $TCText="$TC3 файлів" $TCText=@DequoteText $TCText $Text=@Text[3].Text $Text=Не вдалося відкрити чи обробити $TCText:|$Text %AllGood @Dialog.Message Оброблено $XMLYes файлів XML. Звіт скопійовано в буфер обміну. Відкрийте таблицю Ексель чи простий блокнот та виконайте команду Вставити. ||$Text

не підсткажите скрипт копіювання всіх значень XML в інший, тобто є в діджиталі вікриті 2 XML-ля, потрібно з одного (активного чи як) вставити дані/значення всіх слоїв (XML земельна ділянка, кадастрова зона, квартал, угіддя) в інший. Дуже дякую.

на закладці Інфо є кнопка Параметри.
Відкривши перший xml, створіть шаблон.
Відкривши другий, заповніть по шаблону.

Або використайте цей скрипт (першою повина бути відкрита карта параметри якої треба скопіювати):

%1
@ActivateMap 1
@Map.DeselectAll
@Map.SelectLayer ID70000
Правка | Копировать
@Map.DeselectAll
@ActivateMap 2
@Map.DeselectAll
@Map.SelectLayer ID70000
Специальная вставка | Только параметры
@Map.DeselectAll
@ActivateMap 1
@Map.DeselectAll
@Map.SelectLayer ID70001
Правка | Копировать
@Map.DeselectAll
@ActivateMap 2
@Map.DeselectAll
@Map.SelectLayer ID70001
Специальная вставка | Только параметры
@Map.DeselectAll
@ActivateMap 1
@Map.DeselectAll
@Map.SelectLayer ID70003
Правка | Копировать
@Map.DeselectAll
@ActivateMap 2
@Map.DeselectAll
@Map.SelectLayer ID70003
Специальная вставка | Только параметры
@Map.DeselectAll
@ActivateMap 1
@Map.DeselectAll
@Map.SelectLayer ID70004
Правка | Копировать
@Map.DeselectAll
@ActivateMap 2
@Map.DeselectAll
@Map.SelectLayer ID70004
Специальная вставка | Только параметры
@Map.DeselectAll
@ActivateMap 1
@Map.DeselectAll
@Map.SelectLayer ID70005
Правка | Копировать
@Map.DeselectAll
@ActivateMap 2
@Map.DeselectAll
@Map.SelectLayer ID70005
Специальная вставка | Только параметры
@Map.DeselectAll
@FileClose
@goto %1

Можна одразу відкрити n-ну кількість XML параметри яких буде змінено як у першого файла. Скрипт недороблений але користуватися можна.

Питання: що буде, якщо папку Digitals тимати на Dropbox (чи вплине це якось на програму і як)?