Питання до розробників:
чи можна, щоб функція IDRenumberingID1 (вона ж ID | Перенумерація), застосована у скрипті, не відновлювала оновлення карти на екрані, заборонене скриптовою функцією @Map.BeginUpdate?
Так і не має можливості обробити подію OnCollect в картах, в яких створення об’єкта супроводжується появою вікна прогресу “Polygons creating” класу TFormProgress. Вказане вікно видається на екран при створенні полігонального об’єкта, що є вкладеним у батьківський збірний або складний полігон.
Відмовитись від складних та збірних полігонів, чи відмовитись від обробки події OnCollect?
Карту ProblemOnCollect.dmf для демонстрації проблеми відправив на help@vingeo.com
Додано скриптову функцію @Map.RenumberIDs[LastUsedID]. Функція перенумеровує айді об’єктів, аргумент LastUsedID задає початок відліку, за замовчуванням LastUsedID дорівнює нулю, тобто нумерація починається з одиниці.
Однак: якщо оновлення карти на екрані попередньо у скрипті заборонене, функція @Map.Undo.Undo (як єдина команда що відмінить перетворення збірного полігона в петлю після визначення типу полігона), відновлює оновлення карти на екрані.
Нема за що! Все вiрно - положення точок внутрiшнього контуру вiдносно зовнiшнього (найбiльшого по площi, тобто першого контуру). Впевнений, що дана функцiя буде корисною i в iнших випадках, не тiльки для визначення типу полiгону.
Чому функція @Map.Object[1].LineLength[1] прив’язана до опції Сервіс-Налаштування-закладка Вигляд-Число десяткових знаків?
Це викликає розходження довжини лінії, яка отримана функцією з реальною довжиною лінії на карті.
Наприклад, є в мене лінія довжиною 31,4947 (це число завжди чотиризначне, якщо його переглядати через контекстне меню маркованої лінії). На карті воно відображається як 31,49
Але якщо в опції Число десяткових знаків стоїть значення менше, ніж 4, наприклад 3, то функція @Map.Object[1].LineLength[1] поверне число 31,495. А округливши його до двох знаків (щоб було ідентично довжинам ліній на карті), отримаємо вже 31.50!
Виходить, щоб довжини були ідентичні, треба щоб опція Число десяткових знаків завжди дорівнювала числу 4. Значення Авто також не підходить, перевіряв.
Але тоді таблиці з координатами виходять дуже громіздкі з непотрібними нулями.
Чи не можна дану функцію якось відв’язати від даної опції? Або ж додайте функцію, яка дозволяє міняти опцію Число десяткових знаків на період використання функції @Map.Object[1].LineLength[1]
До речі, якщо в значенні Число десяткових знаків поставити Авто, то в шаблонах dmt каталог координат взагалі виходить без цифр після коми. Це якщо формувати через Сервіс-Документи.
Контекстне меню маркованої лінії - єдине місце де довжина лінії розраховується без попереднього заокруглення координат, в т.ч. для того щоб можна було змінити цю довжину.
В решті випадків - спочатку попереднє заокруглення координат точок до необхідної кількості знаків(Сервіс-Налаштування-Вигляд-Точність периметру), розрахунок довжини, заокруглення довжини згідно маски параметра “Довжини ліній” (за замовчуванням - 2 знаки). Додатково
Якщо контекстне меню маркованої лінії - це єдине місце, де довжини ліній розраховуються без попереднього заокруглення координат, то чому тоді в параметрі Довжини ліній якщо в його масці задаю замість двох чотири знаки після коми, значення повністю ідентичне як в контекстному меню лінії? Ідентичне воно і коли вставити на карту таблицю довжин ліній.
Інше воно тільки тоді,коли отримане функцією @Map.Object[1].LineLength[1]
В контекстному меню лінії значення довжини - 31,4947, в параметрі Довжини ліній, в підписах довжин ліній на карті та в таблиці довжин ліній виходить так само 31,4947. Це коли маска параметра 4 знаки пілся коми. Якщо маска параметра 2 знаки - 31.49
Виходить, що параметр Довжини ліній показує довжини також без округлення координат?
А от скриптовою функцією @Map.Object[1].LineLength[1] вже виходить 31,50. Тобто, виглядає так, що якраз скриптова функція вираховує довжини ліній вже пілся округлення координат. А в параметрі Довжини ліній вписується значення ще до округлення? Ну або навпаки. Але тоді насправді і в контекстному меню значення довжини вже округлених координат. В такому разі чому ж тоді в скриптовій функції вони так само не округлюються?
Точність периметру в налаштуваннях програми в мене виставлено в 3 знаки, число десяткових знаків також 3.
Якщо я міняю точність периметра на 2 знаки, тоді по даному числу функцією @Map.Object[1].LineLength[1] вже отримую 31,49.
Але тоді починають творитися дивні речі з іншими цифрами.
Тоді інша лінія, яка мала довжину на карті 24.73 (конт.меню - 24.7340) скриптовою функцією виходить аж 24,74
Якщо зміна налаштувань точності периметра впливає тільки на значення, яке отримане скриптовою функцією, то виглядає на те, що програма справді показує довжини без округлення координат (!)
Добитися ідентичних значень в параметрі Довжини ліній та результаті функції @Map.Object[1].LineLength[1] можна тільки поставивши Число десяткових знаків 4 або 2. Хоч я завжди думав, що дана опція впливає тільки на відображення каталогу на карті. Як вона може впливати на отриманий результат скриптової функції? Чому скриптова функція не бере в рохрахунки реальну довжину лінії, а ту, яка відображається на плані?
Пробував також задавати 4 знаки в Точності периметра - результат той самий що і при трьох. Тільки якщо ставлю 4 або 2 знаки в Число десяткових знаків - тоді все гуд з відповідністю скриптової функції та параметра Довжини ліній. Але мені треба щоб в таблицях координат було 3 знаки.
додайте, будь ласка, функцію, яка дозволить міняти число десяткових знаків на закладці вигляд, бо не знаю, як по-іншому вийти з ситуації, що склалася.
До речі, проблема проявляється не тільки в розходженні довжин ліній, а й у розходженні координат точок, отриманих скриптовими функціями і отриманих через просту вставку таблиці координат на карту. З цього приводу вже й відмову дав реєстратор.
Коли ставлю округлення до двох знаків після коми, то тоді виходить невідповідність паперових носіїв із електронними. А ставити в електронному варіанті також 2 знаки після коми - це не вихід, бо тоді вилазить маса інших проблем із накладками і розходженнями площ.
Можна ще перевести повністю програму на 4 знаки після коми, але і тут не все так просто, бо це треба в кожній програмі міняти маску параметра X. Інакше в других програмах буде обрізати координати.