Аналитика http://geosystema.net/forum/ |
|
Все про скрипти http://geosystema.net/forum/viewtopic.php?f=1&t=2809 |
Страница 71 из 83 |
Автор: | voha [ 26 мар 2020 20:12 ] |
Заголовок сообщения: | Re: Все про скрипти |
Завдяки постійній підтримці та вдосконаленню функціональних можливостей програми, за що - велике дякую розробникам, з'являються нові та модифікуються розроблені раніше скриптові функції. Так, за період з 05.02 по 26.03 розроблені: @EventPoint - повертає координати точки події у скрипті контролю (ймовірно - у скрипті обробки події: координати точки об'єкта, зміна координат якої викликала подію OnChange; координати точки в карті, в якій клацнули мишею для позначення об'єкта, що викликало подію OnSelect... і т.д); @Map.CheckSharedBorder ObjIndex1 ObjIndex2 LayerID1 LayerID2 ... - перевіряє спільну границю двох полігонів на співпадання з границями об'єктів інших шарів (повертає 1 - якщо хоча б один лінійний фрагмент спільної границі двох полігонів лежить на границі хоча б одного об'єкта у шарі LayerID1 LayerID2 ... або 0 - якщо такого фрагмента немає?) тут я нюхом чую, що ця функція одна - робить ту ж роботу, що й увесь мій, до жалю складний, функціональний скрипт; @Map.Layers.RemoveCyrillic - видаляє кириличні символи із назв шарів; @Map.Object[N].GoogleBLCode - повертає широту/довготу об'єкта у форматі Google Maps (координати в псевдо-Меркатора центра чи центроїда?); @Map.Object[N].IndexOfPoint - (повертає індекс - "номер" точки об'єкта N, яка ...?); @Map.Object[N].PointList Mask [Datum] - повертає форматований список координат об'єкта (Mask - було би добре мати приклад маски форматування списку, і ще - чи список можна/варто присвоїти в @Text.Text?); @Map.Parameters.RemoveCyrillic - видаляє кириличні символи із назв параметрів; @PrintSettings DuplexON AutoOrientON BufferON - повертає/встановлює налаштування друку 0/1/*; @Map.Object[N].Path X Y / Distance (build 43902) - повертає довжину шляху вздовж границі об'єкта від першої точки до точки X Y, або координати точки X Y від довжини шляху; модифіковані: @Map.NearestObject Range IgnoreObj X Y Z [LayerID1 LayerID2 ...] (build 43916) - повертає номер найближчого до точки X Y Z об'єкта в межах відстані Range (Range=0 - на будь-якій відстані). Об'єкт з номером IgnoreObj не шукається, а при наявності числового значення ID шару/шарів LayerID1 LayerID2 ... пошук найближчого виконується лише серед об'єктів у вказаних шарах; @Map.MinObjectDistance Object1 Object2 or Object1 X Y [Z] (build 43916) - повертає мінімальну 2D відстань між об'єктами Object1 та Object2, або відстань від точки X Y [Z] до об'єкта Object1; @Map.ParameterValuesList ParamIndex [LayerIndex] [Filter] - повертає список значень параметра ParamIndex всіх об'єктів, яким він доступний, або лише об'єктів у шарі LayerIndex (Filter - ймовірно обмежує множину об'єктів, значення параметра ParamIndex яких будуть у списку?) Питання по функціях виділені курсивом. Я от що подумав: ці функції замовляють користувачі, які мають необхідність автоматизувати рутинні операції або вирішувати задачі ГІС аналізу а отримавши бажане - користуються собі "мовчки". Як би так самоорганізуватись, щоб: додали розробники функцію - а замовник тут-таки виклав особливості роботи з функцією. Краще грає в шахи той, хто знає як ходять фігури |
Автор: | voha [ 27 мар 2020 10:08 ] |
Заголовок сообщения: | Re: Все про скрипти |
Доброго дня. Маю чергове прохання до розробників щодо роботи скриптової функції @Map.PerpendicularToNearestLine FromPoint ToObj SegmObjLayer [Reverse]. Bondarets Alexander писал(а): Построение перпендикуляров от точечных объектов до ближайшего сегмента полилинии Скрипт использует новую функцию @Map.PerpendicularToNearestLine FromPoint ToObj PerpendicularLayer [Reverse] которая строит перпендикуляр из точки FromPoint (X Y Z) до ближайшего сегмента полилинии ToObj. Насправді трохи не так: "Создает объект из 2х точек. Первая точка FromPoint, вторая точка лежит на ближайшем сегменте объекта ToObj" Вложение: PerpendicularToNearestLine.bmp [ 144.54 Кб | Просмотров: 7773 ] Чи можна поправити функцію, щоб будувались дійсно тільки перпендикуляри, а результат функції був 1 - якщо перпендикуляр був побудований і 0 - якщо такий побудувати не вдалося? І ще. Стосовно аргумента [Reverse] В скриптовій функції @Map.NearestObject Range IgnoreObj X Y Z [LayerID1 LayerID2 ...] аргументи LayerID1 LayerID2 ... - ID шарів, об'єкти в яких шукаються. Однак правильний результат функція повертає лише якщо вказано виключно числові значення (наприклад: "35", а не "ID35"). Та ж сама @Map.PerpendicularToNearestLine FromPoint ToObj PerpendicularLayer [Reverse]: якщо має аргумент PerpendicularLayer рівним 35, сприймає його як порядковий номер шару в менеджері шарів, якщо ID35 - як ID шару. @Map.NearestObject мала би сприймати ID шару так, як і решта функцій. |
Автор: | VictorR [ 29 мар 2020 23:22 ] |
Заголовок сообщения: | Re: Все про скрипти |
Підкажіть як змінити текст за допомогою скрипта. Наприклад на карті є окремий обєкт "текст" я його виділяю, а далі якою фунцією скористатися щоб підставити необхідне мені значення? і ще підкажіть функцію яка виконує команду "перемещение с разворотом". Дякую! |
Автор: | voha [ 30 мар 2020 00:02 ] |
Заголовок сообщения: | Re: Все про скрипти |
VictorR писал(а): Підкажіть як змінити текст за допомогою скрипта. Наприклад на карті є окремий обєкт "текст" я його виділяю, а далі якою фунцією скористатися щоб підставити необхідне мені значення? @ExecuteMenu EditObject (те ж, що і меню Правка | Властивості об'єкта...). Об'єкт зі стилем "Таблиця" повинен бути позначеним. Значить так - фрагмент коду:Код: ;Вставити текстовий блок, де ID110 - шар зі стилем "Таблиця" $TableObj=@Map.NewObject ID110 ;Розміщення блока тексту в точці $P @Map.Object[$TableObj].Point[1] $P ;Присвоєння тексту $Text @Map.Object[$TableObj].TableText $Text ;Промальовування на екрані @Map.RefreshObject $TableObj ;Отримання властивостей текстового блоку, редагування тексту і т.д. @ExecuteMenu EditObject VictorR писал(а): і ще підкажіть функцію яка виконує команду "перемещение с разворотом" Якщо на форумі: Сдвиг с разворотом, тоді @ExecuteMenu spbMove (те ж, що й кнопка [ Режим конструювання.Переміщення ]), або@Map.Object[N].MoveTo X Y [Z] - переміщення об'єкта в точку X Y [z]; @ExecuteMenu ToolsRotate (те ж, що й меню Сервіс | Розворот...). |
Автор: | VictorR [ 30 мар 2020 18:57 ] |
Заголовок сообщения: | Re: Все про скрипти |
voha Дякую за підказки! трохи розібрався. |
Автор: | voha [ 04 апр 2020 20:49 ] |
Заголовок сообщения: | Re: Все про скрипти |
Доброї пори доби. Маю таке питання: як можна "назавжди" в карті ідентифікувати окремі точки об'єктів? Наприклад - точки, які були вставлені в результаті суміщення з сусідніми. Чи можна для цього використати статус точки? Dmitry_Zolotar писал(а): Первое значение - статус точки, битовая маска, содержащая информацию о маркированности, видимости точек и некоторая другая информация. Є сумніви, адже маркування точки встановлює маску 64, є ще маска 8... Чи можна встановити окремим точкам, наприклад - маску "1", і вона не буде змінюватись автоматом... і буде записана в карті... і можна будь-коли "виловити" точки з цією маскою?P.S. Дослідним шляхом встановив: призначення своєї маски (наприклад "1") окремим точкам об'єкта, дозволяє ідентифікувати (відрізнити) ці точки від інших в подальшій роботі з об'єктом. Маркування, або інші операції, які викликають системну зміну їхніх масок, лише додають присвоєну скриптом маску до системної маски. Отже: в будь-якому випадку можна отримати встановлену скриптом маску точки, помноживши на 8 залишок від ділення маски на 8 Дякую за увагу. |
Автор: | fendak [ 08 апр 2020 13:29 ] |
Заголовок сообщения: | Re: Все про скрипти |
Провів інвентаризацію скриптових функцій. За майже 4 роки в програму додали майже 80 новий функцій: Обробка подій %Events.OnPaint - скролінг (прокрутка мишкою) карти %Events.OnCollectionLayerChange - зміна шару для збору @EventObjectsList - повертає список номерів об'єктів для останньої події Управління скриптом @Dialog.Error Text - Виводить вікно з важливим текстовим повідомленням (з червоним хрестиком і відповідним звуком) @Dialog.Warning Text - те саме, що в попередньому пункті @Beep - подає звуковий сигнал @ExecuteDocumentFromFile DMTTemplateName - формує звіт по DMT-шаблоні з можливістю викликати шаблон, який знаходиться за межами самої програми. DMTTemplateName - повний шлях до розміщення шаблону @IterateSelectedObjects Scriptname - повторює скрипт для кожного виділеного об'єкта карти, передаючи його номер, як параметр Карта @InsertFragment DestinationFilename - вставляє фрагмент карти, видобутий по id (Карта - Порівняти) в карту-приємника (Destination) @Map.DeleteThematicLayers - видаляє тематичний вигляд @Map.RemovePasswords PW1|PW2|... - видаляє задані паролі з карти @Map.Scale NewScale [0/1 0/1] - змінює машстаб карти (необов'язкові параметри включають масштабування УЗ і підписів) @Map.SetAOI - встановлює робочу зону карти за виділеними об'єктами @SourceMap - повертає номер поточної карти для Сервіс/Документи Система координат @DatumList - повертає список назв датумів із файлу Datums.ini Управл. об'єктами карти @Map.CollectedObject - повертає номер поточного об'єкта, який збирається @Map.DeleteObject Number - видаляє вказаний об'єкт @Map.Object[N].GetMinMax - повертає розмах об'єкта у вигляді "MinX MinY MinZ MaxX MaxY MaxZ" @Map.Object[N].OverlayList [Layer] - повертає список усіх об'єктів, які спавпадають із вказаним (або тільки в конкретному шарі) @Map.RenumberIDs [LastUsedID] - переприсвоює id об'єктам, починаючи з LastUsedID Геометрія об'єктів @Map.DeleteOverlays - видалає точки, що співпадають в об'єктах інших шарів @Map.GeneralizeObject ObjectIndex [Accuracymm] - виконує генералізацію (видалення точок на рівних лініях) об'єкта з точністю Accuracymm @Map.IntersectionWithLayer ObjectIndex LayerIndex - створює об'єкт-пересічення з об'єктами заданого шару @Map.Object[N].Center - повертає координати центру об'єкта @Map.Object[N].Centroid - повертає координати центроїда об'єкта @Map.Object[N].ClosedComplex - повертає 1 - якщо об'єкт N складний полігон і 0 - якщо не складний полігон @Map.Object[N].GoogleBLCode - повертає довготу/широту об'єкта у форматі Google Maps @Map.Object[N].Path X Y / Distance - повертає довжину шляху вздовж об'єкта до точки ХУ, або точку ХУ по довжині шляху @Map.Object[N].PointList Mask [Datum] - повертає форматований список координат об'єкта @Map.Selected.ToStrip Width [0/1 - buffer] - перетворює виділені об'єкти в смуги заданої ширини (чи буферну зону - дод. параметр 1) @Map.Selected.Rotate Angle - розвертає виділені об'єкти на вказаний кут @Map.SplitMultiPolygon N - розбиває складний полігон на окремі Групування об'єктів @Map.GroupList - повретає список усіх груп карти @ShowGroup GroupName - виводить вікно із списком усіх об'єктів групи Пікети @Map.InsertPointsToSelectedPolygons Layer HorizStep VertStep Chess RotationAngle HorizShift VertShift - додає точки у виділені полігони @Map.Object[N].Node PointNumber [Layer] - повертає номер пікета, який співпадає з точкою об'єкта Шари @Map.ExcludePolygonLayers ID1 ID2 ... - виключає вказані шари із створення полігонів Параметри @Map.CompareParameters Index1 Index2 ... - порівнює значення параметрів об'єктів, повертаючи 1, якщо усі вони співпадають @Map.DBFNamesFromID - додає до назви параметрів /DBF:НазваПоля на базі їх ID @Map.Parameters.Name Number - повертає назву параметра @Map.Parameters.RemoveCyrillic - видаляє символи кирилицею із назви параметра @Map.ReplaceParameterValues ParamIndex TextFile - замінює по текстовому файлу в певному параметрі значення лівої колонки на значення правої колонки (в текстовому файлі колонки мають розділятися знаком табуляції) Підписи @Map.CaptionToContour ObjectIndex CaptionIndex - садить підписи на контур об'єкта (наприклад, горизонталі) @Map.CreateBuildingCaptions PCap PLink LLink - створює підписи номерів будинків Умовні знаки @Map.LayerSymbolFromZoom LayerIndex Zoom1:SymIndex1 Zoom2:SymIndex2 ... - змінює умовний знак шару залежно від масштабу на екрані @Map.Symbols.Rescale Coefficient - змінює розмір усіх умовних знаків (множиться на Coefficient) @Map.SymbolsToObjects - перетворює символізовані полілінії у звичайні Растри @AutoPyramid 0/1 - Включає/відключає запит на побудову пірамід в растрах @GetImageDatum RasterFileName - повертає поточний датум орієнтованого растру @GetImageBitsPerPixel RasterFileName - повертає розмір пікселя растру (на землі, в метрах) @GetImageGSD RasterFileName - повертає розмір пікселя растру (на землі, в метрах) @Map.GetPixel X Y Z [Channel] - повертає значення RGB пікселя у вказаних координатах для відкритого растру @Map.ParentRaster Number [ParentLayer] - повертає номер растрового зображення, всередині якого знаходиться об'єкт @Map.SaveSelectedImageGrounds - зберігає внутрішню рамку растру в список його опорних точок @SetDefaultImageDatum DatumName - присвоює датум за замовчуванням для растрових зображень без датуму @SetImageDatum DatumName FileName - присвоює зорієнтованому растру його поточний датум Файли та папки @Map.FragmentFilename - повертає повну назву файлу карти з суфіксом поточної дати і часу @Map.MainFilename - повертає повну назву карти без суфіксу, відокремленого символом _ @ChangeDASRasterName Suffix Filename - Змінює назву файлу вигляду *-N.tif на *-F.tif/*-B.tif/etc 3d та ЦМР @Map.CalculateZ X Y [ParamIndex] - повертає інтерпольовану висоту чи значення заданого параметра в точці Х У @Map.AutomaticBreaklines [LayerIndex] - будує структурні (характерні) лінії по горизонталях @Map.FilterSpotheights LayerIndex MinHeightInterval [ShowInfo] - видаляє сусідні пікети з різницею по Z менше ніж MinHeightInterval @Map.SlopeDirection X Y - визначає напрямок насхилу в будь-якій точці карти Робота з текстом @Assign - присвоює змінній значення текстового рядка без спроби вирахувати вирази @Map.CreateExplication - створює експлікацію угідь @Map.PrepareForestTable ObjNumber - готує текст таблиці промірів лісного виділу @Map.ReplaceTableVariables - сканує текст таблиць і замінює змінні їх значеннями @Random [Range] - повертає випадкове число від 0 до Range. Якщо Range не задано - то випадково повертає 0 або 1 @Text[N].KeyValue FindStr - читає значення за ключом такого вигляду: ключ<tab>значення @ToDate DateString - повертає числове значення дати по її символьному увленні, або поточну дату Управління самою програмою @Halt - примусово завершує роботу програми @Hardlock - повертає номер ключа ліцензії програми @MainWindowPos [Left Top Width Height] - читає та змінює розмір і положення головного вікна Digitals @MenuChecked MenuItemName - повертає стан пунтку меню (1 - виділений, 2 - ні) @MenuState InternalName - повертає 1, якщо меню виділене або кнопка натиснута за внутрішньою назвою пункту @PrintSettings DuplexON AutoOrientON BufferON - повертає/встановлює налаштування друку @Window.GotoXYZ X Y [Z] - встановлює курсор (марку) у позицію XYZ Вихід за межі програми @DayOfWeek - повертає поточний номер дня тижня, починаючи від неділі @HTTP.Get URL - викликає URLадресу і виводить текстовий результат сторінки @Map.GetYandexMapInfo X Y [Lang] - завантажує найближчу адресу з Yandex maps @Map.Selected.GoogleElevation GoogleAPIKey - дістає висоти виділених об'єктів зі сервісу Google Elevation @SendDebugReport - відправляє розробникам звіт виправлення і пов'язані з ним файли Але є ще кілька функцій, які не мають опису і значення яких мені не зрозуміле: @Map.AdjustCaptions - ніби впорядкування підписів, але з яким принципом? @Map.FromPLG - ? @Map.Lock - закриває вміст карти? За яким приципом? Візуально нічого не знаходжу в результаті. @Map.Object[N].Filter [MinDistance] - ніби фільтрує об'єкти, але за яким принципом? Є функція @Map.SlopeDirection X Y - визначає напрямок насхилу в будь-якій точці карти. Не можу зрозуміти, що це за напрямок? У якій системі координат? Це ніби й не вертикальний кут і не напрямок від азимуту. Що за цифру повертає дана функція? При запуску функції @Map.CreateExplication видає помилку: CounsilExplCols.txt - не знайдено. Де взяти цей файл? і ще не зрозуміла роль одної старої функції: @Map.MovePoints про неї уже запитували, але відповіді так і не було. |
Автор: | voha [ 08 апр 2020 14:29 ] |
Заголовок сообщения: | Re: Все про скрипти |
@Map.SlopeDirection X Y - повертає дирекційний кут напрямку максимального ухилу місцевості (максимального кута нахилу) у точці X Y. Результат - кут у вигляді десяткового числа. З такого кута я визначав експозицію схилу; @Map.MovePoints - переміщує передостанній позначений точковий об'єкт на останній позначений точковий об'єкт; @Map.AdjustCaptions - зміщує підписи в карті таким чином, щоб уникнути накладання рамки підпису (ballon) на границю будь-якого об'єкта карти (вказане накладання існує, якщо границя об'єкта перетинає рамку підпису у двох точках - відтинає від рамки частину її площини). Таким чином, не зміщуються підписи, рамки яких накладаються одна на іншу, містять кінцеву точку лінійного об'єкта або точковий об'єкт. Крім того: @Map.Object[N].IndexOfPoint X Y - шукає точку об'єкта N, яка має координати X Y (повертає номер точки або 0 - якщо такої не знайдено). Координата Z ігнорується, навіть якщо така вказана. Лишаються: @Map.FromPLG - ? @Map.Lock - закриває вміст карти? За яким приципом? Візуально нічого не знаходжу в результаті. @Map.Object[N].Filter [MinDistance] - ніби фільтрує об'єкти, але за яким принципом? При запуску функції @Map.CreateExplication видає помилку: CounsilExplCols.txt - не знайдено. Де взяти цей файл? |
Автор: | VictorR [ 09 апр 2020 10:33 ] |
Заголовок сообщения: | Re: Все про скрипти |
fendak,voha Дякую, дуже корисна інформація! Побажання до розробників: було б не погано створити окремий текстовий довідник, з усіма функціями, їх описом та можливістью пошуку функії за описовим запитом. Нагадайте будь ласка функцію яка присвоює виконання скрипту окремій клавіші на клавіатурі |
Автор: | voha [ 09 апр 2020 11:42 ] |
Заголовок сообщения: | Re: Все про скрипти |
VictorR писал(а): ...створити окремий текстовий довідник, з усіма функціями, їх описом та можливістью пошуку функії за описовим запитом... Думаю це - справа самих користувачів, і робити це варто на аркуші MS Excel - і пошук є, і додавати функції легко. Скоро викладу такий файлик, станом на таке-то число.VictorR писал(а): Нагадайте будь ласка функцію яка присвоює виконання скрипту окремій клавіші на клавіатурі Призначити гарячу клавішу інструментальному скрипту.Відтепер (з 9 квітня 2020 р., 8:33:28 - build 43930) інструментальний скрипт, в якому є дублі міток, не запускається (і це - добре). Функціональний скрипт, що містить дублі міток, будучи викликаний з інструментального скрипта, дає помилку виконання Duplicate label з посиланням на викликаючий скрипт (і це - правильно, необхідно виправити помилку логіки скриптувальника). |
Автор: | fendak [ 09 апр 2020 14:05 ] |
Заголовок сообщения: | Re: Все про скрипти |
voha писал(а): Відтепер (з 9 квітня 2020 р., 8:33:28 - build 43930) інструментальний скрипт, в якому є дублі міток, не запускається (і це - добре). Функціональний скрипт, що містить дублі міток, будучи викликаний з інструментального скрипта, дає помилку виконання Duplicate label з посиланням на викликаючий скрипт (і це - правильно, необхідно виправити помилку логіки скриптувальника). Це не помилки логіки скриптувальників (!), а технічні помилки. І це, на мій погляд, НЕПРАВИЛЬНО З БОКУ РОЗРОБНИКІВ. Спочатку скрипти працювали за одними правилами. Тепер правила змінили і в багатьох скрипти просто перестали через це працювати. Доведеться тепер багатьом не оновлювати свої програми, а працювати на старих версіях. Бо я усім за раз не зможу оновити скрипти. VictorR писал(а): ...створити окремий текстовий довідник, з усіма функціями, їх описом та можливістью пошуку функії за описовим запитом... VictorR, на сайті http://digitals.at.ua я виклав повний опис майже усіх скриптових функцій із зручним структуруванням за їх призначенням українською мовою. Можете скопіювати їх в ексель і шукати. |
Автор: | voha [ 09 апр 2020 15:29 ] |
Заголовок сообщения: | Re: Все про скрипти |
fendak писал(а): Це не помилки логіки скриптувальників (!), а технічні помилки. І це, на мій погляд, НЕПРАВИЛЬНО З БОКУ РОЗРОБНИКІВ. Хочу вияснити що таке "технічні помилки", але ніяк не вдається. Дядько Google каже, наприклад: Виды ошибок и основные принципы отладки, або ще Класифікація помилок і методи їхнього пошуку.fendak писал(а): Спочатку скрипти працювали за одними правилами. Тепер правила змінили і в багатьох скрипти просто перестали через це працювати. Скрипт працює за тими правилами, які ви написали: якщо те - то на мітку ТАКУ, якщо не те - то на мітку ІНШУ. А якщо у ВАШОМУ скрипті мітка ТАКА=ІНША, то це лише ВАША ПОМИЛКА, а не розробників скриптових функцій, що викликаються командами ВАШОГО скрипта.fendak писал(а): Доведеться тепер багатьом не оновлювати свої програми, а працювати на старих версіях. Бо я усім за раз не зможу оновити скрипти Вибачайте, пане Миколо. Думаю скоріше доведеться вам оновлювати скрипти. Хай не за раз, і не за два. А втім - це залежить від користувачів, які ними користуються. Одне я знаю точно - свої скрипти просто необхідно відлагоджувати... і супроводжувати... щоб ними користувались. Ніхто ж не каже "давайте приберемо необхідність компілювати програмний код (в Delphi), а то при компіляції мого коду воно, гадость така, видає що в мене якась помилка в коді" . А за додану розробниками можливість виявлення помилки логіки алгоритму - жирний +. |
Автор: | fendak [ 09 апр 2020 17:43 ] |
Заголовок сообщения: | Re: Все про скрипти |
Під технічною розумію помилку, яка ніяк не впливає на роботоздатність скрипту (не впливала, поки не оновили Digitals) Ось наприклад: $MC=@Map.Layers.Count $N=0 %PochatokSSh3 $N=$N+1 %PochatokSSh3 $Status=@Map.Layers.GetAttributes $N $Status=@StringPart 7 $Status Тут друга мітка %PochatokSSh3 не грала абсолютно ніякої ролі. І так би собі й було надалі, але ні, бо комусь це стало дуже заважати. Просто при створенні скрипту вийшло таке упущення. Якби зразу програма це виявляла якось - то ніяких проблем би не було. Але програма ж зразу це не виявляла. А тепер раптом розробникам захотілося, щоб вона це виявляла. Не гарно получається просто. Я це перероблю. Потрачу час, але перероблю усім. Але просто так не робиться. Я не вчився на програміста, а самоучка. Тому, роблячи скрипти, виходжу тільки з того, щоб вони працювали. Тестую їх на різноманітних випадках. І досі вони усі працювали. А те, що в коді вийшла ось така чисто технічна помилка - не побачив, бо вона не заважала. А перевіряти код на те, як він грамотно написаний з точки зору підручників з програмування - це не моє. Та й на скільки знаю, щоб писати скрипти не обов'язково бути великим програмістом. Для цього скрипти в програмі і передбачені, щоб можна спрощено зробити те, що потрібно. Я здогадуюся, чому для вас Voha, цей плюс такий жирний. То й користуйтеся вашим плюсом. А для мене це більше мінус, думаю, як і для багатьох інших користувачів. Ладно, додали таку перевірку на дублювання міток. Не знаю хто конкретно це додав. Але хоч би по людськи це зробили якось. А то в половини користувачів видає помилку про дублювання міток, а в половини скрипт просто ніяк не реагує на запуск. І думай-гадай, що з ним не так. Можна ж було зробити, щоб хоч нормально інформувало користувачів, в чому причина того, що скрипт не запускається. Але кому це потрібно. |
Автор: | voha [ 09 апр 2020 20:23 ] |
Заголовок сообщения: | Re: Все про скрипти |
fendak писал(а): Тут друга мітка %PochatokSSh3 не грала абсолютно ніякої ролі. І так би собі й було надалі, але ні, бо комусь це стало дуже заважати. Просто при створенні скрипту вийшло таке упущення. Правильно. Тільки не "стало заважати", а таки конкретно дошкуляло: сам не один раз мусив аналізувати тисячі рядків лог-файла (ще не вмерла надія на режим відлагодження скриптів зі ScriptDebugger=1 в константах), щоб виловити помилку логіки алгоритму. Дублі міток спричиняли переходи не на ту гілку, на яку треба. Але в мене не було "порожніх" міток! Якщо була мітка - були й команди, що виконувались тоді, коли за логікою не повинні були виконуватись.fendak писал(а): Якби зразу програма це виявляла якось - то ніяких проблем би не було. Але програма ж зразу це не виявляла. А тепер раптом розробникам захотілося, щоб вона це виявляла. Не гарно получається просто. Я це перероблю. Потрачу час, але перероблю усім. Але просто так не робиться. Добре, коли людина думає не лише про себе. Погодьтесь нарешті, це полегшить роботу з розробкою іншим, хто також пише скрипти. І надалі, у нових скриптах, забезпечить відсутність помилок логіки алгоритму. Почитайте, будь-ласка, за посиланням у пості вище - це критичні помилки, які важко виявити.fendak писал(а): Я не вчився на програміста, а самоучка. Тому, роблячи скрипти, виходжу тільки з того, щоб вони працювали. Тестую їх на різноманітних випадках. І досі вони усі працювали. А те, що в коді вийшла ось така чисто технічна помилка - не побачив, бо вона не заважала. А перевіряти код на те, як він грамотно написаний з точки зору підручників з програмування - це не моє. Та й на скільки знаю, щоб писати скрипти не обов'язково бути великим програмістом. Для цього скрипти в програмі і передбачені, щоб можна спрощено зробити те, що потрібно. Все правильно, Миколо. І я також не вчився на програміста: складання скрипта - це ж не справа рук навіть середнього рівня програміста. І не треба бути класним програмістом, щоб зрозуміти: скрипт - це послідовність виконання команд. Послідовність ця визначається у скрипті переходами на мітки, і якщо є дві чи більше міток з однаковою назвою - то і послідовність виконання є помилковою (або одна гілка "мертва", а значить - сміття). То байка, якщо сміття закоментоване символом ";", але ж для помпутера символ "%" щось таки має означати? Чи у вашому випадку - нехай не означає? Так означає? Чи не означає? Для скрипта "%" - спеціальний символ переходу на таку-то послідовність дій, незалежно від того програміст перед компом, чи землевпорядник!fendak писал(а): Я здогадуюся, чому для вас Voha, цей плюс такий жирний. То й користуйтеся вашим плюсом. А для мене це більше мінус, думаю, як і для багатьох інших користувачів. Так можна ж почути програмістів, а поки - що ми маємо:- для прикладу в ліспроекті: беремось складати цифрову карту, а не хочемо розібратись із типами об'єктів цієї карти, бо це вже бач ГІС (вища наука); - беремося складати послідовність - а не хочемо робити це послідовно, бо це вже бач супер високого рівня "програмування". Послідовність ця називається алгоритмом, а слово "алгоритм" ще в школі вчать, і до програмування вищого рівня від алгоритму - як "до неба рачки". Я жодним чином не беруся когось оцінювати та порівнювати. З ким мені ще про скрипти? Мабуть карантин впливає. fendak писал(а): ...А то в половини користувачів видає помилку про дублювання міток, а в половини скрипт просто ніяк не реагує на запуск. І думай-гадай, що з ним не так. Можна ж було зробити, щоб хоч нормально інформувало користувачів, в чому причина того, що скрипт не запускається. Але кому це потрібно. Те, що скрипт не запускається, лише підтверджує серйозність вашої помилки. А як цей ящик по вашому має виконати послідовність, якщо вона не визначена? Вимушений ще раз констатувати факт: інструментальний скрипт, в якому є дублі міток, не запускається. Функціональний скрипт, що містить дублі міток, будучи викликаний з інструментального скрипта, дає помилку виконання Duplicate label з посиланням на викликаючий скрипт.Думаю нам дискусію слід припинити, поза як поняття алгоритму (послідовності виконання операцій) ні вам, ні мені, ні будь-кому іншому не змінити. Як на мене - гарна була дискусія, предметна. |
Автор: | Dmitry_Zolotar [ 13 апр 2020 09:55 ] |
Заголовок сообщения: | Re: Все про скрипти |
voha писал(а): Лишаються: @Map.FromPLG - ? @Map.Lock - закриває вміст карти? За яким приципом? Візуально нічого не знаходжу в результаті. @Map.Object[N].Filter [MinDistance] - ніби фільтрує об'єкти, але за яким принципом? При запуску функції @Map.CreateExplication видає помилку: CounsilExplCols.txt - не знайдено. Де взяти цей файл? @Map.FromPLG - PLG - польський текстовий формат, містить інфо по пікетам, а-ля DAT-файл. @Map.Lock - закриває вміст скриптів карти від дебагера. @Map.Object[N].Filter [MinDistance] - в об'єкті видаляє відрізки меньші ніж MinDistance @Map.CreateExplication - Створює експлікацію 15-зем на основі xlt-шаблону. |
Страница 71 из 83 | Часовой пояс: UTC + 2 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |