Запрос на функцию

А тепер поближче

зобр.3

Чекаю ваших відгуків! Особливість такої виноски те що в полі не потрібно гортати купу листів та бистрота підготовки, саме на цю підготовку в мене пішло 20 хв (приблизно), тобто координати стнацій в мене були вже відомі!

Жду ваших питань, критеріїв і т. д. і т. п. Дуже хочу побачить як такий об’єм буде виглядать у вашому варіанті і скільки це у вас займе часу? :smiley: Особливо хочу почути думку Піпи :smiley:

Відео на тему

Круто! :smiley: Я 3 рази передививсь, буду пробувать! Трохи багато операцій :cry: Я теж якось зроблю ролік, може й ви якось спростите виноску :question:
P.S. А проектні точки я можу задать в ручному режимі? Щоб потім в журналі не пригать!

А Ви можете скинуть відео, як створюється “Викопіюваня”?

Чого воно у Вас все як не для пользователя? Деякі прості речі такими далекими путями робляться!

Перепрошую - вставляюсь в тему. Скажіть будь-ласка, чи є функція передачі управління (в тому числі фокуса) іншій програмі (вікну) з посиланням результату виконання скрипта (наприклад скрипта обробки події) на порт TCP/IP? Така функція заставила би Digitals останнім кроком скрипта активувати вікно зовнішньої програми (для прикладу Excel).
Треба забезпечити роботу Digitals паралельно з відображенням результатів у Excel, і зворотньо. Якщо сервер - Digitals, клієнт - Excel, а між ними налагоджено потоковий канал зв’язку, якою функцією забезпечити чисто передачу даних з Digitals в Excel?

Ніяк не можу знайти функції @Map.Parameters.Delete Code, чи є така? Довго шукав у списку - ась!

Нужна функция, аналог Map.SortByParameter ParameterIndex +/- для слоев (Map.SortByLayer LayerIndex +/-).

Непонятно что она должна делать.
Что значит посортировать все объекты на карте по одному указанному в LayerIndex слою?
Если вы хотите сортировать объекты карты по значению ID их слоев, то это можно сделать через Map.SortByParameter -7 (служебный параметр -7 содержит ID слоя объекта).
Также можно сортировать по имени слоя, если использовать Map.SortByParameter -5.

А она точно нужна? :slight_smile:
Дело в том что при удалении параметра из середины списка слетит вся их последовательная нумерация и доступные слоям параметры перепутаются. Так что удалять можно будет разве что свои, добавленные в конец списка, параметры.

Дякую, розібрався. Мова йшла дійсно за останні у списку параметри. Справа в тому, що, зовнішня програма має очистити і заповнити (оновити) значення окремих параметрів усих об’єктів шару. Всі відповідні для цього функції працюють з селектованими об’єктами, а воно, якось, не дуже гарно получається при автоматизації. Мабуть треба якось відключити на певний час оновлення екрану. От і спало на думку - спочатку видалити параметри, а потім добавити. Але якщо так - хай так.

Питання тепер в іншому. Як повернути порядковий номер шару в карті за відомими назвою шару або його ID? Всі функції для роботи з шаром ідентифікують його за порядковим номером у списку шарів. Але як бути, коли не відомо - є вже шар в карті чи нема? Аналізуєм список шарів карти (@Map.Layers.List) за назвою або ID, якщо шару нема - додаємо в хвіст списку (@Map.Layers.Add Code Type Name) вказавши ID, тип і назву. Отримуєм порядковий номер і працюємо з шаром за порядковим номером. А якщо шар з такою назвою та ID в карті вже є - треба дізнатись порядковий номер за відомим іменем або ID, інакше до функцій стосовно шарів не підходь? Як варіант є @Map.ReplaceTemplate Filename, де Filename - карта з заздалегідь спланованим порядком шарів у списку. Буду пробувати.

Лучше сделайте свою функцию которая перебирает весь список слоев, используя функции:

@Map.Layers.Count
@Map.Layers.Get Number

и возвращает номер слоя с заданным ID, или 0, если такой слой не найден.

Функции работают не только по индексу, но и по ID. Для этого вместо индекса нужно подставить строку вида IDXXXXX, где XXXXX это код слоя. Но узнать, существует ли слой с определенным кодом действительно невозможно. Кроме как перебирать, как уже советовали, в скрипте все слои в поисках нужного номера. Но мы можем добавить готовую функцию. Что-то вроде @Map.Layers.IDToIndex, которая вернет номер слоя с указанным кодом (или 0 если такой слой не найден). Ну и аналогичную для параметров.

Варіант перебору можливий тільки у скрипті. До теми наступне.
Я хочу використати канал зв’язку Excel-Digitals, використовуючи ws2_32.dll, але не уявляю собі що таке багатопоточність (надіюсь “розгребу” функцію для прослуховування отриманих від Digitals-а відповідей). Задумано використати скрипти автозапуску:

  1. Excel в процедурі автозапуску при внесенні даних посилає команду в Digitals виконати скрипт записаний для кнопки панелі інструментів, результатом роботи якого (скрипта) буде, наприклад, створення полігону з координатами вказаними в Excel), та закінчує процедуру. Функції запуску скрипта через натискання кнопки панелі інструментів немає, але посилання відповідного віконного повідомлення в дочірнє вікно (кнопку) вікна верхнього рівня (панелі інструментів) ініціювало б натискання цієї кнопки. Тут доступність різного набору кнопок з різними скриптами мала б забезпечитись наявністю відповідного файла *.tlb
  2. При виникненні події вказаній в скрипті прикріпленому до активовованої кнопки панелі інструментів Digitals-a, скрипт виконується, а дані (як результат виконання скрипта) відповідною функцією (якої також немає) відсилаються на порт TCP/IP (на сокет Excel, який прослуховується). При отриманні відповіді, Excel виконує відповідні розрахунки та відображає результат.

Функція @Map.Layers.IDToIndex, як на мене, згодилася б по-любому при роботі з різними версіями карт і різними шарами чи параметрами, а як що до описаного вище?

Якщо цей хід реальний - треба відповідні функції, якщо це маячня - буду шукати щось інше.

А так Слабо? :wink:

как 2 факса отослать :wink:
.exe (283 KB)

Дааааа, это было круто. Мне бы такую панельку… :smiley:

и мне тоже. ну если будете делиться))))

А тут багато землевпорядників та геодезистів? Таке відчуття шо тут одні програмісти!! В мене багато питань по створеню шаблонів :question: