Підкажіть, будь-ласка. Може хтось знає:
як можна у скрипті (або не в скрипті) визначити наявність в карті перетину об’єктом лінійного шару (полігон/полілінія) межі об’єкта полігонального шару (тільки полігон) На малюнку зліва - два суміжних полігони, спільна межа яких перетинається лінійним об’єктом (позначено червоним). Є скрипт, який розрізає всі лінійні по полігонам так, як на малюнку справа. Але-ж, зараза, довгенько працює, бо об’єктів багато. Хотілося би перед такою розрізкою перевірити, чи треба розрізати, чи не треба розрізати.
Це добре! Але необхідно виконати аналіз наявності перетинів виконати у скрипті. Є функція @RunControlScript Filename. Будь-який сценарій контролю записує лог-файл \Digitals\Control\Logs*.txt. Виконання сценарію контролю закінчується відкриттям вікна логу контролю.
Необхідно додати до функції параметр - виводити чи не виводити вікно “Протокол контроля”. Ця-ж пропозиція вже була тут
НА рахунок обробка події %Events.OnCollect. Якщо збираєш об’єкти кнопкою полігони не працює скрипт (шаблонами збору всьо працює), чи я щось роблю не так. Текст скрипта
%Events.OnCollect
$S=@EventObject @If $S=0 then @Break @Map.SelectObject $S
Правка | На задний план
Обробка подій додана порівняно недавно, тому треба просити розробників вдосконалювати і розширювати обробку подій. Поки обробляється подія закінчення збору об’єкта (клавіші F3, F5 - замкнути об’єкт, закінчити об’єкт).
Ще одне спостереження, стосовно функції @Map.SelectByParametersSelected. З позначеними цією функцією об’єктами неможливо виконати [ Операції з об’єктами.З’єднати ]. Лишається тільки @Map.Cut з наступною @Map.Paste. Тут ніяка @Map.CalculateRange чи @Map.Selected.Refresh не поможе.
З позначеними функцією @Map.SelectByParametersSelected об’єктами неможливо працювати в текстовому блоці. Код@Map.SelectByParametersSelected
$ListLineObj=@Map.Selected.List
@Text.Text=$ListLineObj
$CountListLineObj=@Text.Count
поверне Вам у змінну $CountListLineObj (кількість рядків у текстовому блоці) одиницю, навіть якщо @Map.SelectByParametersSelected лишить позначеними декілька об’єктів. Єдиний варіант: записати @Text.Text у файл і, знову прочитати з файла в текстовий блок. Лише так - працює.
Вітаю, шановні форумчани і розробники програми. Знову не знаю, як вирішити чергову проблему.
Створюю скрипт, який шукає по параметру PZ римські цифри і перекодовує їх в арабські. І все б добре. Але зіткнувся із проблемою, яку ніяк не можу сам вирішити. Проблема в обновленні. Ось частина скрипту для прикладу: @Map.DeselectAll @Map.SelectLayer ID20000
$PZ=@Map.Selected.GetParameter PZ
$New=@Calc Replace(“$PZ”,“XXII”,“22”,1,0)
$New=@DequoteText $New @Map.Selected.ChangeParameter id20160 $New
$New=@Calc Replace(“$PZ”,“V”,“5”,1,0)
$New=@DequoteText $New @Map.Selected.ChangeParameter id20160 $New
Якщо в тексті є арабська цифра V, то все добре працює. Але якщо є ще й XXII, то параметр PZ просто не обновляється після того, як в нього записано замість XXII 22, а подається для наступної обробки із римською цифрою. Хоча на екрані видно, як на долю секунди число міняється на арабське.
Застосовував між цими етапами і @Window.Refresh і @Map.CalculateRange, і обновляв сам виділений об’єкт, і знімав виділення, нічого не допомагає.
Чим можна застосувати зроблені зміни так, щоб при наступному зверненні до параметру PZ вони вже були?
Ось результат лог-файлу:
[size=85]$PZ=MAP.SELECTED.GETPARAMETER PZ
23:18:47.867 РС,10.10.2010,XXII сесія V скликання №534,Доброгостівська сільська рада
23:18:47.867 $New=CALC Replace(“РС,10.10.2010,XXII сесія V скликання №534,Доброгостівська сільська рада”,“XXII”,“22”,1,0)
23:18:47.867 “РС,10.10.2010,22 сесія V скликання №534,Доброгостівська сільська рада”
23:18:47.867 $New=DEQUOTETEXT “РС,10.10.2010,22 сесія V скликання №534,Доброгостівська сільська рада”
23:18:47.867 РС,10.10.2010,22 сесія V скликання №534,Доброгостівська сільська рада
23:18:47.867 MAP.SELECTED.CHANGEPARAMETER id20160 РС,10.10.2010,22 сесія V скликання №534,Доброгостівська сільська рада
23:18:47.913 1
23:18:47.913 MAP.SELECTED.REFRESH
23:18:47.963 1
23:18:47.963 $New=CALC Replace(“РС,10.10.2010,XXII сесія V скликання №534,Доброгостівська сільська рада”,“V”,“5”,1,0)
23:18:47.963 “РС,10.10.2010,XXII сесія 5 скликання №534,Доброгостівська сільська рада”
23:18:47.963 $New=DEQUOTETEXT “РС|РС,10.10.2010,XXII сесія 5 скликання №534,Доброгостівська сільська рада”
23:18:47.963 РС,10.10.2010,XXII сесія 5 скликання №534,Доброгостівська сільська рада
23:18:47.963 MAP.SELECTED.CHANGEPARAMETER id20160 РС,10.10.2010,XXII сесія 5 скликання №534,Доброгостівська сільська рада
23:18:48.010 1[/size]
В рядку кода, відзначеному зеленим: змінній $New присвоюєм значення заміни “V” на “5” у змінній “$PZ”, а в змінній “$PZ” ніхто-ж не міняв “XXII” на “22”
Значить, рядок має бути так: $New=@Calc Replace(“$New”,“V”,“5”,1,0)
Це не значить, що у Вас змінна дійсно рівна 05. Користуйтесь @OpenLog і, відповідно @CloseLog [Filename] - дивіться лог-файл.
Або пропишіть у скрипті перед @If $KodUhidd=05 then @Text[6].Add $KodUhidd рядок @Break Змінна KodUhidd має значення ‘$KodUhidd’ і запустіть. Команда @Break припинить виконання скрипта і виведе повідомлення зі значенням змінної $KodUhidd. Там побачите: 05 чи не 05.
Така проблема. Написав скрипт, який видобуває вміст параметру. Параметр з розділовими знаками-комами. Скрипт записує вміст параметру в список. Далі копіює список в буфер віндовс. Далі вставляється на лист Ексцель. В Ексцелі в клітинці все без розділових знаків, ком немає, навіть пробілів замість ком немає, все одним словом. В інших, де ком не було, а були тільки пробіли, все добре. Якось одного разу коми були. Може хто знає що це? Дякую.
Як на мене, копати треба в напрямку теми: вставка в ексель з буфера. Там кома може розглядатись як розділювач у списку. Пробуйте в екселі “спеціальна вставка”.
А стиль параметра - ‘число з комою’ чи ‘рядок’? А значення параметра має бути число з десятковим розділювачем (комою чи крапкою)? Може значення параметра у Вас розуміється як таке, що має бути рядком з комою? А в Excel у Вас має бути десяткове число, чи рядок з комою?
Ще багато можна питати. Не можна ради дати, поки не розберемось.
Якщо в Excel треба число - вибір розділювача цілої та дробової частини числа - Сервіс>Параметри… на вкладці Міжнародні поле Десятковий розділювач й опція Використовувати системні розділювачі.
В скрипті проблем не бачу: не залежно від стилю параметра, якщо мова йде за кому в значенні параметра як розділовий знак (не десятковий розділювач числа) - і в буфер, і в текстовий файл, і з буфера в Excel, ніде кома не дівається.
Найкраще, запишіть на відео проблему, тоді буде зрозуміло.DecSep.exe (1.88 MB)
Це я пробував. Ось відсилаю скрипт, копіює параметри з файлу ін4, зберігає в текстовий файл і відкриває.
Тут коми не записуються. Зверніть увагу на параметр 35, 40. Це адреси, дані в файлі через кому. Може ви побачите, що я не бачу. Дякую. skrpt.rar (3.56 KB)