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

Боюсь, що це не допоможе. На Windows 7 або Windows 8 пробуйте писати так:$FileName=@Dialog.SaveFile *.dmf D:\ @Map.SaveToFile $FileName Тобто вказувати не повну назву файла, а шлях до файла. Назву файла слід вказувати в діалозі без розширення.

Напевно всеж таки програма не підтримує якусь з цих функцій, адже build від 13.03.2014. Коли буде змога спробую на новенькому ged.

нічого подібного. В мене Windows 7, пробував на Windows 8, все ідеально працює

Це добре, що у Вас Windows 8. В зв’язку з цим хочу просити попробувати @Dialog.OpenFile Filter Filename, а зміст фрази “Unknown file format” я би розумів як “Не розпізнаний формат файла”. Обидві скриптові функції “старі” як Digitals, і причина помилки, як на мене, не може бути у версії 2014 року.

Ось, запрацювало.) що не так досі не зрозумів, 2 дні прописував цей код і бачив оту помилку, чомусь вирішив ще й в третій день спробувати і працює

Чи можливо скриптом міняти властивості шару типу “Таблиця”, наприклад висоту рядка.

Міцного здоров’я всім!!!
Зробив на деякі шаблони документів “швидку кнопочку”, але після створення шаблону в папці дігітала все збивається і визивається не той шаблон, як зробити шоб такого не було??

Використовуйте @ExecuteDocument

Добрый день! Как с помощью скрипта (без функции добавить узлы-центр объектов) получить координаты центра объекта? (зеленая точка на картинке)

$SO=@Map.SelectedObject
$X=@Map.Object[$SO].Parameter[-4]
$Y=@Map.Object[$SO].Parameter[-3]
$NO=@Map.NewObject 1
@Map.Object[$NO].Point[1] $X $Y 0
@Map.RefreshObject $NO
@Window.Refresh

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

Не хочете додавати вузол в центр об’єкта, бо важлива номерація об’єктів у сесії роботи з картою? Додайте підпис в центр об’єкта і вичитайте координати лівого верхнього кута підпису (близько біля координат центру)$SO=@Map.SelectedObject @Map.Selected.CreateCaptions 0 0 0 0 0 0 0 $Capt=@Map.Object[$SO].Caption[0] $DX=@StringPart 1 $Capt $DY=@StringPart 2 $Capt $X=@Map.Object[$SO].Parameter[-4] $X=@Calc Numeric("$X") $Y=@Map.Object[$SO].Parameter[-3] $Y=@Calc Numeric("$Y") $XPos=$X+$DX $YPos=$Y+$DY @Map.Selected.RemoveCaptions 0 $NO=@Map.NewObject 1 @Map.Object[$NO].Point[1] $XPos $YPos 0 @Map.RefreshObject $NO @Window.Refresh А чому не додати точковий об’єкт, вичитати координати і видалити об’єкт?$SO=@Map.SelectedObject $A=@Map.AddNodes 1 4 $Node=@Map.SelectedObject $XPos=@Map.Object[$Node].Parameter[-4] $YPos=@Map.Object[$Node].Parameter[-3] @Map.Selected.Delete $NO=@Map.NewObject 1 @Map.Object[$NO].Point[1] $XPos $YPos 0 @Map.RefreshObject $NO @Window.RefreshОт, різниця між першим і другим способом залежить, мабуть, від розміру підпису. В мене склала
64 5532074.600 3266233.530 0.000
64 5532074.605 3266233.538 0.000

Не знал про функцию addnodes. просто делал так
@SendChars
[ Операції з об’єктами.Додати вузли ]
предварительно выбрав центры объектов (корявый способ).
Вопрос закрыт. Большое спасибо за помощь!
П.с. первый способ интересный.

Доброго дня всім.
От, хочу спитати на тему Функция DLLExec в скриптах Digitals для выполнения функций пользователя из динамических библиотек. Якщо зі скрипта-1 викликати функцію з формою - скрипт буде чекати, поки функція не поверне результат. Тобто, форма - модальна.

Що буде робити Digitals, якщо на формі є кнопка, на яку прописано код, що дає команду Digitals запустити скрипт-2 :question: Чи можливо виконати функцію в синхронному режимі, щоб скрипт не очікував результат від функції :question:
Наперед дякую програмістам.

Приклад немодальної форми
[attachment=0]TestDLLForm.zip[/attachment]

В Сервис-Настройки-Главная-Исполнение команд по TCP/IP -Порт для соединений - повинна бути “галочка” та порт 1067.

Скрипт, який викликає форму

$PP=@ProgramPath $S=@DLLExec $PP\DLL\TestFormDLL.CreateInputForm blablabla @Dialog.InfoBox 3000 Скрипт продолжил исполнение, получив от предыдущей команды ответ:$S

А можно ли к этому скрипту прикрутить еще “чуток” кода, чтоб при создании точечных объектов в узлах полигона их подписи выносились аналогично если бы мы взяли полигон и для его параметра -9 (номера точек) создали подписи с параметром “номера точек”. Долго мучался та к и не получилось чего-то аналогичного, для простых полигонов сделал а вот для сложных сделать “тямы” не хватает.
что я понимаю под сложным полигоном прилагаю в файле (т.е. полигон у которого сильно смещен центр от центра описывающего его прямоугольника)

ИСХОДНЫЙ СКРИПТ
Создание точечных объектов в узлах полигонов и вынесение подписей точек

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

;номер слоя точечных объектов, которые буду добавлены в каждый узел полигона
$PointsLayerID=70001
;номер параметра, в который будет помещено имя узла
$NameParamID=7000100
;начальный номер
$Start=1
;шаг нумерации
$Step=1
;префикс имен узлов (может быть пустая строка)
$Res=@Dialog.Ask Задайте префикс и через пробел суффикс для имен точек Size=250
$Prefix=@StringPart 1 $Res
$Suffix=@StringPart 2 $Res
;проверяем правильность заданных ID
$PointsLayer=@Map.Layers.FindByID $PointsLayerID
@if $PointsLayer=0 then @Break Точечный слой $PointsLayerID не найден
$NameParam=@Map.Parameters.FindByID $NameParamID
@if $NameParam=0 then @Break Параметр $NameParamID не найден
$SelCount=@Map.SelCount
@if $SelCount=0 then @Break Пометьте объекты для подписывания точек
;цикл по помеченным объектам
$Obj=0
%ObjLoop
$Obj=@Map.NextSelected $Obj
;все помеченные объекты пройдены, останавливаем скрипт
@if $Obj=0 then @Break
;цикл по точкам объекта
$Pnt=1
$PntCount=@Map.Object[$Obj].Count
%PntLoop
;координаты текущей точки
$P=@Map.Object[$Obj].Point[$Pnt]
;создаем точечный объект с данными координатами
$PntObj=@Map.NewObject $PointsLayer
@Map.Object[$PntObj].Point[1] $P
;получаем номер точки
$Number=@Concat $Prefix,$Start,$Suffix
$Start=$Start+$Step
;заносим номер точки в значение параметра
@Map.Object[$PntObj].Parameter[$NameParam] $Number
;создаем подпись
@Map.Object[$PntObj].CreateCaption $NameParam 0 0 0 0 0 0
@Map.RefreshObject $PntObj
$Pnt=$Pnt+1
;последнюю точку полигона пропускаем
@if $Pnt<$PntCount then @Goto %PntLoop
@Goto %ObjLoop
@Window.Refresh

  1. Для полігона створити підписи параметра -9 номерів точок;
  2. Властивості підписів занести у змінну;
  3. Зі змінної координати лівих верхніх кутів підписів рознести в текстовий блок (в кожен рядок - окрему точку);
  4. При переборі точок полігона, для кожної точки полігона:
    4.1. визначити координати лівого верхнього кута підпису (додавши до координат центра полігону зміщення підпису з текстового блока).
    4.2. Визначити зміщення визначених в п.4.1. координат відносно координат точки полігона.
    4.3. Створити підпис для точкового об’єкта (того, що в точці полігону)
    4.4. Присвоїти властивості підпису, створеному в п.4.3., встановивши зміщення від центру точкового об’єкта, розраховане в п.4.2.
  5. Видалити підписи для полігона, створені в п.1

Якось так: “чуток” кода :wink:

:smiley: блин а оказывается данные подписей для номеров точек тоже можно вытащить (чисто на интуитивном уровне был уверен что нельзя). остается их только распарсить красиво :smiley:
Спасибо!

Доброго дня всім.
Маю деякі спостереження, стосовно функції @Map.Parameters.LoadFromFile FileName, хочу поділитись з розробниками.

  1. Карта з шарами, сортованими за назвою шару, приводиться до шаблону Normal. Функцією @Map.Parameters.LoadFromFile FileName заміняється список параметрів, далі - @Map.ReplaceTemplate Filename. Отримано карту в якій: для більшості об’єктів, не лише в одному шарі, замінились значення одного параметра на значення іншого.
    1.1. Підозрюю, що проблема з сортуванням шарів у карті: після @Map.Parameters.LoadFromFile FileName, перед @Map.ReplaceTemplate Filename, сортую шари карти за ID. Результат - все “гуд”, значення параметрів - впорядку. Ну, думаю, варто просто сортувати шари в карті так, як і в шаблоні Normal.[attachment=1]YesSortLayers.exe[/attachment] Але…

  2. Інша карта з шарами, сортованими за назвою шару, приводиться до шаблону Normal. Функцією @Map.Parameters.LoadFromFile FileName заміняється список параметрів, далі сортую шари карти за ID і @Map.ReplaceTemplate Filename. Отримано карту в якій: для більшості об’єктів, не лише в одному шарі, замінились значення одного параметра на значення іншого.
    2.1. Прибираю сортування шарів у карті - все “гуд”, значення параметрів - впорядку.[attachment=0]NoSortLayers.exe[/attachment]
    Значить, зв’язок списку параметрів зі списком шарів не оновлюється функцією @Map.Parameters.LoadFromFile FileName. Якщо завантаження списку параметрів виконати вручну (з менеджера параметрів), то й сортувати шари в карті, перед заміною шаблону, немає необхідності. Значення параметрів, після заміни шаблону, лишаються такі як були.
    HendLoadParam.exe

Вибачте будь-ласка, тексту багато. Питання не критичне, в скрипті можна зробити по іншому. Але скриптова функція… Якби вона працювала так, як з менеджера параметрів “завантажити з текстового файла”.

Велике дякую розробникам за постійну підтримку.

Доброго дня! Допоможіть створити скрипт який поступово буде виділяти кожний об’єкт заданого шару.