Аналитика

Цифровая фотограмметрия, картография и землеустройство
Текущее время: 27 апр 2024 14:30

Часовой пояс: UTC + 2 часа




Начать новую тему Ответить на тему  [ Сообщений: 1236 ]  На страницу Пред.  1 ... 32, 33, 34, 35, 36, 37, 38 ... 83  След.
Автор Сообщение
 Заголовок сообщения: Re: Все про скрипти
СообщениеДобавлено: 31 мар 2015 21:52 
Гуру
Гуру

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


Вложения:
Noname1.rar [1.03 Кб]
Скачиваний: 238
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Все про скрипти
СообщениеДобавлено: 31 мар 2015 22:38 
Гуру
Гуру

Зарегистрирован:
06 июн 2010 06:35
Сообщения: 823
Откуда: Ліспроект Володимир Вовчанський
Denidz писал(а):
...Как с помощью скрипта (без функции добавить узлы-центр объектов) получить координаты центра объекта? (зеленая точка на картинке)
Не хочете додавати вузол в центр об'єкта, бо важлива номерація об'єктів у сесії роботи з картою? Додайте підпис в центр об'єкта і вичитайте координати лівого верхнього кута підпису (близько біля координат центру)
Код:
$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


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Все про скрипти
СообщениеДобавлено: 01 апр 2015 08:23 
Гуру
Гуру

Зарегистрирован:
14 окт 2010 16:40
Сообщения: 265
Не знал про функцию addnodes. просто делал так
@SendChars <CR>
[ Операції з об'єктами.Додати вузли ]
предварительно выбрав центры объектов (корявый способ).
Вопрос закрыт. Большое спасибо за помощь!
П.с. первый способ интересный.


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Все про скрипти
СообщениеДобавлено: 03 апр 2015 10:42 
Гуру
Гуру

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

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


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Все про скрипти
СообщениеДобавлено: 06 апр 2015 08:42 
Гуру
Гуру

Зарегистрирован:
18 апр 2007 11:55
Сообщения: 2298
Откуда: Vinnytsia
Приклад немодальної форми
Вложение:
TestDLLForm.zip [551.62 Кб]
Скачиваний: 250


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

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

_________________
Команда разработчиков Digitals
(наш e-mail и ICQ находятся в меню Помощь|О программе)
Новичкам сюда | Новые возможности программы | Купить Digitals


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Все про скрипти
СообщениеДобавлено: 11 апр 2015 22:38 
Гуру
Гуру

Зарегистрирован:
14 окт 2010 16:40
Сообщения: 265
А можно ли к этому скрипту прикрутить еще "чуток" кода, чтоб при создании точечных объектов в узлах полигона их подписи выносились аналогично если бы мы взяли полигон и для его параметра -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


Вложения:
Noname3.dmf [5 Кб]
Скачиваний: 370
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Все про скрипти
СообщениеДобавлено: 12 апр 2015 10:44 
Гуру
Гуру

Зарегистрирован:
06 июн 2010 06:35
Сообщения: 823
Откуда: Ліспроект Володимир Вовчанський
Denidz писал(а):
А можно ли к этому скрипту прикрутить еще "чуток" кода, чтоб при создании точечных объектов в узлах полигона их подписи выносились аналогично если бы мы взяли полигон и для его параметра -9 (номера точек) создали подписи с параметром "номера точек".
1. Для полігона створити підписи параметра -9 номерів точок;
2. Властивості підписів занести у змінну;
3. Зі змінної координати лівих верхніх кутів підписів рознести в текстовий блок (в кожен рядок - окрему точку);
4. При переборі точок полігона, для кожної точки полігона:
4.1. визначити координати лівого верхнього кута підпису (додавши до координат центра полігону зміщення підпису з текстового блока).
4.2. Визначити зміщення визначених в п.4.1. координат відносно координат точки полігона.
4.3. Створити підпис для точкового об'єкта (того, що в точці полігону)
4.4. Присвоїти властивості підпису, створеному в п.4.3., встановивши зміщення від центру точкового об'єкта, розраховане в п.4.2.
5. Видалити підписи для полігона, створені в п.1

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


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Все про скрипти
СообщениеДобавлено: 12 апр 2015 12:03 
Гуру
Гуру

Зарегистрирован:
14 окт 2010 16:40
Сообщения: 265
:D блин а оказывается данные подписей для номеров точек тоже можно вытащить (чисто на интуитивном уровне был уверен что нельзя). остается их только распарсить красиво :D
Спасибо!


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Все про скрипти
СообщениеДобавлено: 12 апр 2015 21:13 
Гуру
Гуру

Зарегистрирован:
06 июн 2010 06:35
Сообщения: 823
Откуда: Ліспроект Володимир Вовчанський
Доброго дня всім.
Маю деякі спостереження, стосовно функції @Map.Parameters.LoadFromFile FileName, хочу поділитись з розробниками.

1. Карта з шарами, сортованими за назвою шару, приводиться до шаблону Normal. Функцією @Map.Parameters.LoadFromFile FileName заміняється список параметрів, далі - @Map.ReplaceTemplate Filename. Отримано карту в якій: для більшості об'єктів, не лише в одному шарі, замінились значення одного параметра на значення іншого.
1.1. Підозрюю, що проблема з сортуванням шарів у карті: після @Map.Parameters.LoadFromFile FileName, перед @Map.ReplaceTemplate Filename, сортую шари карти за ID. Результат - все "гуд", значення параметрів - впорядку. Ну, думаю, варто просто сортувати шари в карті так, як і в шаблоні Normal.
Вложение:
YesSortLayers.exe [1.78 Мб]
Скачиваний: 318
Але...

2. Інша карта з шарами, сортованими за назвою шару, приводиться до шаблону Normal. Функцією @Map.Parameters.LoadFromFile FileName заміняється список параметрів, далі сортую шари карти за ID і @Map.ReplaceTemplate Filename. Отримано карту в якій: для більшості об'єктів, не лише в одному шарі, замінились значення одного параметра на значення іншого.
2.1. Прибираю сортування шарів у карті - все "гуд", значення параметрів - впорядку.
Вложение:
NoSortLayers.exe [5.86 Мб]
Скачиваний: 551

Значить, зв'язок списку параметрів зі списком шарів не оновлюється функцією @Map.Parameters.LoadFromFile FileName. Якщо завантаження списку параметрів виконати вручну (з менеджера параметрів), то й сортувати шари в карті, перед заміною шаблону, немає необхідності. Значення параметрів, після заміни шаблону, лишаються такі як були.
HendLoadParam.exe

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

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


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Все про скрипти
СообщениеДобавлено: 19 апр 2015 13:55 
Эксперт
Эксперт

Зарегистрирован:
09 сен 2014 19:26
Сообщения: 97
Доброго дня! Допоможіть створити скрипт який поступово буде виділяти кожний об'єкт заданого шару.


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Все про скрипти
СообщениеДобавлено: 19 апр 2015 22:07 
Гуру
Гуру

Зарегистрирован:
18 апр 2007 11:55
Сообщения: 2298
Откуда: Vinnytsia
sergykydr писал(а):
Доброго дня! Допоможіть створити скрипт який поступово буде виділяти кожний об'єкт заданого шару.

;Перевіряємо чи є відкрита карта
$AM=@ActivateMap
@if $AM=0 then @Break Відкрийте карту
;Знаходимо кількість об'єктів в карті
$MC=@Map.Count
;Знімаємо помітку з усіх об'єктів
@Map.DeselectAll
;Початок циклу
$I=0
%Loop
;Збільшуємо номер об'єкта
$I=$I+1
;Знаходимо ID шару
$LID=@Map.Object[$I].LayerID
;Якщо ID шару не співпадає, то переходимо до умові продовження циклу
@if $LID<>12000000 then @Goto %Continue
;Помічаємо об'єкт
@Map.SelectObject $I
;Наступна команда працює тільки з російськомовним інтерфейсом
Вид | Показать помеченные
;Щось робимо з поміченим об'єктом
@Dialog.InfoBox Щось робимо з поміченим об'єктом
;Знімаємо помітку з об'єкту
@Map.DeselectObject $I
%Continue
;Переходимо на початок циклу, якщо об'єкт не останній
@if $I<$MC then @Goto %Loop

_________________
Команда разработчиков Digitals
(наш e-mail и ICQ находятся в меню Помощь|О программе)
Новичкам сюда | Новые возможности программы | Купить Digitals


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Все про скрипти
СообщениеДобавлено: 20 апр 2015 20:35 
Эксперт
Эксперт

Зарегистрирован:
09 сен 2014 19:26
Сообщения: 97
Dmitry_Zolotar Дякую за допомогу, працює!)


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Все про скрипти
СообщениеДобавлено: 25 май 2015 06:59 
Гуру
Гуру

Зарегистрирован:
06 июн 2010 06:35
Сообщения: 823
Откуда: Ліспроект Володимир Вовчанський
Доброго дня всім.
Щодо діалога вибору шарів зі списку, є в мене деяке побажання.

Діалог вибору шарів зі списку (пункт меню Вибрати | Шари, або внутрішнє ім'я функції EditSelectLayers), при появі на екрані, має позначеним принаймні один пункт в списку шарів. Якщо в списку один-єдиний шар - він виглядає як вибраний зі списку, тому так і хочеться просто натиснути "ОК" для вибору.
Насправді, якщо ви не виберете лівою кнопкою миші один-єдиний у списку шар а натиснете зразу "ОК", отримаєте помилку "List index out of bounds (-1)".

Прошу розробників, якщо можна, поправити функцію EditSelectLayers так, щоб пункт під курсором на замовчування, вважався вибраним. Якщо в списку буде декілька пунктів, то позначку з першого можна буде зняти.

Дякую.


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Все про скрипти
СообщениеДобавлено: 08 июн 2015 10:18 
Гуру
Гуру

Зарегистрирован:
02 апр 2013 15:28
Сообщения: 177
Доброго дня!
Підскажіть як в діалоговому вікні отримати адресу, кадастровий номер та інше, земельної ділянки з відкритого ХМЛ? Як зробити "абзац" щоб кожен параметр починався з нового рядка?

пробував так
$N=@Map.SelectedObject
$AD=@Map.Object[$N].Parameter[ID7000500]
$CV=@Map.Object[$N].Parameter[ID7000510]
@Dialog.Message Адреса ділянки $AD, Цільове використання $CV;
%End


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Все про скрипти
СообщениеДобавлено: 08 июн 2015 13:36 
Эксперт
Эксперт

Зарегистрирован:
21 мар 2013 14:12
Сообщения: 94
Міцного здоров'я всім!

Пане klaid, для отримання адекватної інфрормації рекомендував би користуватися функціями @XML.XPath.

Приклад для ПІБ:

;параметр, де міститься ПІБ.
$Proprietor=@Map.Object[$ObjNumb].Parameter[ID7000520]
;шляхи для @XML.XPath
$L=/Proprietors/ProprietorInfo/Authentication/NaturalPerson/FullName/LastName
$F=/Proprietors/ProprietorInfo/Authentication/NaturalPerson/FullName/FirstName
$M=/Proprietors/ProprietorInfo/Authentication/NaturalPerson/FullName/MiddleName
;безпосередньо функція @XML.XPath
$LastName=@XML.XPath $L $Proprietor
$FirstName=@XML.XPath $F $Proprietor
$MiddleName=@XML.XPath $M $Proprietor
;Результуюче значення
$FullName=$LastName $FirstName $MiddleName
@Dialog.Message $FullName
;-----------

Щодо "абзацу", використайте можливості функції @Text[N].....
І загальний результат (як на мене), краще представити в табличці, через @Map.Object [N].TableText=Text[N].text .

Можливо є й простіші шляхи, та мені (в міру моїх знань) вони не відомі.

Дякую.


Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 1236 ]  На страницу Пред.  1 ... 32, 33, 34, 35, 36, 37, 38 ... 83  След.

Часовой пояс: UTC + 2 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 453


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB