Боюсь, що це не допоможе. На 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
Спс за оперативный ответ ![]()
Но этот скрипт как раз и создает точку не зеленую а черную (на предыдущей картинке), т.е центр обрамляющего объект прямоугольника, а мне нужны координаты зеленой!!! файлик с участком добавил
Не хочете додавати вузол в центр об’єкта, бо важлива номерація об’єктів у сесії роботи з картою? Додайте підпис в центр об’єкта і вичитайте координати лівого верхнього кута підпису (близько біля координат центру)$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
Чи можливо виконати функцію в синхронному режимі, щоб скрипт не очікував результат від функції ![]()
Наперед дякую програмістам.
Приклад немодальної форми
[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
- Для полігона створити підписи параметра -9 номерів точок;
- Властивості підписів занести у змінну;
- Зі змінної координати лівих верхніх кутів підписів рознести в текстовий блок (в кожен рядок - окрему точку);
- При переборі точок полігона, для кожної точки полігона:
4.1. визначити координати лівого верхнього кута підпису (додавши до координат центра полігону зміщення підпису з текстового блока).
4.2. Визначити зміщення визначених в п.4.1. координат відносно координат точки полігона.
4.3. Створити підпис для точкового об’єкта (того, що в точці полігону)
4.4. Присвоїти властивості підпису, створеному в п.4.3., встановивши зміщення від центру точкового об’єкта, розраховане в п.4.2. - Видалити підписи для полігона, створені в п.1
Якось так: “чуток” кода ![]()
блин а оказывается данные подписей для номеров точек тоже можно вытащить (чисто на интуитивном уровне был уверен что нельзя). остается их только распарсить красиво ![]()
Спасибо!
Доброго дня всім.
Маю деякі спостереження, стосовно функції @Map.Parameters.LoadFromFile FileName, хочу поділитись з розробниками.
-
Карта з шарами, сортованими за назвою шару, приводиться до шаблону Normal. Функцією @Map.Parameters.LoadFromFile FileName заміняється список параметрів, далі - @Map.ReplaceTemplate Filename. Отримано карту в якій: для більшості об’єктів, не лише в одному шарі, замінились значення одного параметра на значення іншого.
1.1. Підозрюю, що проблема з сортуванням шарів у карті: після @Map.Parameters.LoadFromFile FileName, перед @Map.ReplaceTemplate Filename, сортую шари карти за ID. Результат - все “гуд”, значення параметрів - впорядку. Ну, думаю, варто просто сортувати шари в карті так, як і в шаблоні Normal.[attachment=1]YesSortLayers.exe[/attachment] Але… -
Інша карта з шарами, сортованими за назвою шару, приводиться до шаблону Normal. Функцією @Map.Parameters.LoadFromFile FileName заміняється список параметрів, далі сортую шари карти за ID і @Map.ReplaceTemplate Filename. Отримано карту в якій: для більшості об’єктів, не лише в одному шарі, замінились значення одного параметра на значення іншого.
2.1. Прибираю сортування шарів у карті - все “гуд”, значення параметрів - впорядку.[attachment=0]NoSortLayers.exe[/attachment]
Значить, зв’язок списку параметрів зі списком шарів не оновлюється функцією @Map.Parameters.LoadFromFile FileName. Якщо завантаження списку параметрів виконати вручну (з менеджера параметрів), то й сортувати шари в карті, перед заміною шаблону, немає необхідності. Значення параметрів, після заміни шаблону, лишаються такі як були.
HendLoadParam.exe
Вибачте будь-ласка, тексту багато. Питання не критичне, в скрипті можна зробити по іншому. Але скриптова функція… Якби вона працювала так, як з менеджера параметрів “завантажити з текстового файла”.
Велике дякую розробникам за постійну підтримку.
Доброго дня! Допоможіть створити скрипт який поступово буде виділяти кожний об’єкт заданого шару.