Добрий день!
Добрый день! Столкнулся с такой трудностью, два точечных объекта на концах линии определяют одним параметром “№ опоры” заданным вручную, два параметра для линии “Номер начальной опоры” и “Номер конечной опоры” - приходится задавать вручную. Подскажите пожалуйста, возможно ли как-то автоматизировать действия с параметрами для линии?
drive.google.com/open?id=1cNuzR … zghaRcndU9
Скриптом - запросто. Тільки чому в першій точці лінії - кінцева опора, а в другій точці лінії - початкова опора. Залежності немає? Тоді - ніяк, тільки вручну.
P.S. Дайте ID 18-го і 19-го параметрів шару “повітряна лінія” та ID параметра “№ опоры” точкових об’єктів.
Автоматичне присвоєння значень 18-го і 19-го параметра слід виконувати при закінченні збору лінії? Чи полілінії - для кожного її сегмента?
Дякую за відподь! Надсилаю файл для прикладу.
voha: Denys Sanitskyi:…два точечных объекта на концах линии определяют одним параметром “№ опоры” заданным вручную, два параметра для линии “Номер начальной опоры” и “Номер конечной опоры” - приходится задавать вручную. Подскажите пожалуйста, возможно ли как-то автоматизировать действия с параметрами для линии?
drive.google.com/open?id=1cNuzR … zghaRcndU9Скриптом - запросто. Тільки чому в першій точці лінії - кінцева опора, а в другій точці лінії - початкова опора. Залежності немає? Тоді - ніяк, тільки вручну.
P.S. Дайте ID 18-го і 19-го параметрів шару “повітряна лінія” та ID параметра “№ опоры” точкових об’єктів.
Автоматичне присвоєння значень 18-го і 19-го параметра слід виконувати при закінченні збору лінії? Чи полілінії - для кожного її сегмента?Дякую за відподь! Надсилаю файл для прикладу.
Спочатку це все було скріпленими полілініями, але для збільшення інформативності карти при виводі її в таблицю Excel, все було розбито на прогони між опорами і цим прогонам треба присвоїти назву - номера опор, які він з’єднує, якщо це спростить задачу то номера опор повітряної лінії можна занести в один параметр через розділовий знак.
ID Номер початкової опори - 7016
ID Номер кінцевої опори - 7017
ID № Опори - 7024
P.S. З точками трапилася помилка - в першій має бути початкова, в другій кінцева.
Denys Sanitskyi:…два точечных объекта на концах линии определяют одним параметром “№ опоры” заданным вручную, два параметра для линии “Номер начальной опоры” и “Номер конечной опоры” - приходится задавать вручную. Подскажите пожалуйста, возможно ли как-то автоматизировать действия с параметрами для линии?
drive.google.com/open?id=1cNuzR … zghaRcndU9Скриптом - запросто. Тільки чому в першій точці лінії - кінцева опора, а в другій точці лінії - початкова опора. Залежності немає? Тоді - ніяк, тільки вручну.
P.S. Дайте ID 18-го і 19-го параметрів шару “повітряна лінія” та ID параметра “№ опоры” точкових об’єктів.
Автоматичне присвоєння значень 18-го і 19-го параметра слід виконувати при закінченні збору лінії? Чи полілінії - для кожного її сегмента?
Спочатку це все було скріпленими полілініями, але для збільшення інформативності карти при виводі її в таблицю Excel, все було розбито на прогони між опорами і цим прогонам треба присвоїти назву - номера опор, які він з’єднує, якщо це спростить задачу то номера опор повітряної лінії можна занести в один параметр через розділовий знак.
ID Номер початкової опори - 7016
ID Номер кінцевої опори - 7017
ID № Опори - 7024
P.S. З точками трапилася помилка - в першій має бути початкова, в другій кінцева.
…возможно ли как-то автоматизировать действия с параметрами для линии?
drive.google.com/open?id=1cNuzR … zghaRcndU9
Перепрошую, щойно сів писати - за хв15 викладу.;Позначені - всі лінійні об'єкти, в кінцевих точках яких лежать точкові
; об'єкти, що опинились на самому верхньому плані
$CountSel=@Map.SelCount
@If $CountSel=0 then @Break Позначте всі лінійні об'єкти, номери опор яких треба присвоїти.
$SelObj=0
@Progress.Start $CountSel Виконання
;Перебір всіх позначених об'єктів
%StartSelObj
$SelObj=@Map.NextSelected $SelObj
@If $SelObj=0 then @Goto %EndProc
@Progress.StepBy
;;первірка на кількість точок (лише 2-і точки)
$CntP=@Map.Object[$SelObj].Count
@If $CntP<>2 then @Goto %StartSelObj
;;кінцеві точки лінійного об'єкта
$P1=@Map.Object[$SelObj].Point[1]
$P2=@Map.Object[$SelObj].Point[2]
;;точкові об'єкти та їхні значення параметра ID7024
$ObjP1=@Map.PointObject 0 $P1
@If $ObjP1=0 then @Goto %FindObjP2
$P7016=@Map.Object[$ObjP1].Parameter[ID7024]
@Map.Object[$SelObj].Parameter[ID7016]=$P7016
%FindObjP2
$ObjP2=@Map.PointObject 0 $P2
@If $ObjP2=0 then @Goto %StartSelObj
$P7017=@Map.Object[$ObjP2].Parameter[ID7024]
@Map.Object[$SelObj].Parameter[ID7017]=$P7017
@Goto %StartSelObj
%EndProc
@Progress.Stop
@Dialog.Message ВиконаноЗа умови, що в кінцевих точках кожного позначеного лінійного об’єкта немає точкових об’єктів відмінних від “опори”, значення параметра ID7024 вичитується з точкового об’єкта що лежить на кінцевій точці лінійного. В прикладі є точки лінійних, в яких немає точкових. Як бути? Можна дописувати. Перегляньте список значень параметрів після роботи скрипта (кнопка “Список” на вкладці “Інфо” правої панелі Digitals при активному параметрі). У списку будуть порожні значення для лінійних, кінцева точка яких не на опорі.
Denys Sanitskyi:…возможно ли как-то автоматизировать действия с параметрами для линии?
drive.google.com/open?id=1cNuzR … zghaRcndU9Перепрошую, щойно сів писати - за хв15 викладу.
;Позначені - всі лінійні об'єкти, в кінцевих точках яких лежать точкові ; об'єкти, що опинились на самому верхньому плані $CountSel=@Map.SelCount @If $CountSel=0 then @Break Позначте всі лінійні об'єкти, номери опор яких треба присвоїти. $SelObj=0 @Progress.Start $CountSel Виконання ;Перебір всіх позначених об'єктів %StartSelObj $SelObj=@Map.NextSelected $SelObj @If $SelObj=0 then @Goto %EndProc @Progress.StepBy ;;первірка на кількість точок (лише 2-і точки) $CntP=@Map.Object[$SelObj].Count @If $CntP<>2 then @Goto %StartSelObj ;;кінцеві точки лінійного об'єкта $P1=@Map.Object[$SelObj].Point[1] $P2=@Map.Object[$SelObj].Point[2] ;;точкові об'єкти та їхні значення параметра ID7024 $ObjP1=@Map.PointObject 0 $P1 @If $ObjP1=0 then @Goto %FindObjP2 $P7016=@Map.Object[$ObjP1].Parameter[ID7024] @Map.Object[$SelObj].Parameter[ID7016]=$P7016 %FindObjP2 $ObjP2=@Map.PointObject 0 $P2 @If $ObjP2=0 then @Goto %StartSelObj $P7017=@Map.Object[$ObjP2].Parameter[ID7024] @Map.Object[$SelObj].Parameter[ID7017]=$P7017 @Goto %StartSelObj %EndProc @Progress.Stop @Dialog.Message ВиконаноЗа умови, що в кінцевих точках кожного позначеного лінійного об’єкта немає точкових об’єктів відмінних від “опори”, значення параметра ID7024 вичитується з точкового об’єкта що лежить на кінцевій точці лінійного. В прикладі є точки лінійних, в яких немає точкових. Як бути? Можна дописувати. Перегляньте список значень параметрів після роботи скрипта (кнопка “Список” на вкладці “Інфо” правої панелі Digitals при активному параметрі). У списку будуть порожні значення для лінійних, кінцева точка яких не на опорі.
Велике Вам ДЯКУЮ! за скрипт. Все працює як годинник!
Доброго дня! Допоможіть будь-ласка з таким скриптом для лінії. Проблема така, потрібно передати параметр лінійного об’єкта - точковому, який лежить на другій точці лінійного, параметр лінійного - 7012, параметр точкового - 70121.
Доброго дня! Допоможіть будь-ласка з таким скриптом для лінії. Проблема така, потрібно передати параметр лінійного об’єкта - точковому, який лежить на другій точці лінійного, параметр лінійного - 7012, параметр точкового - 70121.
$C009=@Calc Char(9)
$C009=@DequoteText $C009
$LineObject=@Map.NextSelected
@If $LineObject=0 Then @Break Виберiть лiнiю
$X=@Map.Object[$LineObject].Point[2].x
$Y=@Map.Object[$LineObject].Point[2].y
$PointObject=@Map.PointObject 0 $X $Y
@If $PointObject=0 Then @Break Не знайдено точкового об'єкту в точцi $X, $Y
$Param=@Map.Object[$LineObject].Parameter[ID7012]
@Map.Object[$PointObject].Parameter[ID70121]=$Param
$Message=@Concat Лiнiйний об'єкт:,$C009,$C009,$LineObject,|,Точковий об'єкт:,$C009,$PointObject,|,Параметр,$C009,$C009,$Param
@Dialog.Message $Message
Denys Sanitskyi:Доброго дня! Допоможіть будь-ласка з таким скриптом для лінії. Проблема така, потрібно передати параметр лінійного об’єкта - точковому, який лежить на другій точці лінійного, параметр лінійного - 7012, параметр точкового - 70121.
$C009=@Calc Char(9) $C009=@DequoteText $C009 $LineObject=@Map.NextSelected @If $LineObject=0 Then @Break Виберiть лiнiю $X=@Map.Object[$LineObject].Point[2].x $Y=@Map.Object[$LineObject].Point[2].y $PointObject=@Map.PointObject 0 $X $Y @If $PointObject=0 Then @Break Не знайдено точкового об'єкту в точцi $X, $Y $Param=@Map.Object[$LineObject].Parameter[ID7012] @Map.Object[$PointObject].Parameter[ID70121]=$Param $Message=@Concat Лiнiйний об'єкт:,$C009,$C009,$LineObject,|,Точковий об'єкт:,$C009,$PointObject,|,Параметр,$C009,$C009,$Param @Dialog.Message $Message
Працює, але тільки з однією поміченою лінією. Можете зробити, будь ласка, щоб скрипт виконувався для багатьох одночасно помічених об’єктів.
Доброго дня! Допоможіть будь-ласка з таким скриптом для лінії. Проблема така, потрібно передати параметр лінійного об’єкта - точковому, який лежить на другій точці лінійного, параметр лінійного - 7012, параметр точкового - 70121.
…
Працює, але тільки з однією поміченою лінією. Можете зробити, будь ласка, щоб скрипт виконувався для багатьох одночасно помічених об’єктів.
@Dialog.WaitBox Виберiть лiнiї
$SelectedCount=@Map.SelCount
$Count=0
$LineObject=0
@While $SelectedCount>0 %LoopSelected
$LineObject=@Map.NextSelected $LineObject
$PointsCount=@Map.Object[$LineObject].Count
@If $PointsCount<2 Then @Goto %SkipSelected
$X=@Map.Object[$LineObject].Point[2].x
$Y=@Map.Object[$LineObject].Point[2].y
$PointObject=@Map.PointObject 0 $X $Y
@If $PointObject>0 Then @Goto %NextSelected
$YN=@Dialog.Confirm Не знайдено точкового об'єкту в точцi $X, $Y|Пропустити i продовжити?
@If $YN=1 Then @Goto %SkipSelected
@Break
%NextSelected
$Param=@Map.Object[$LineObject].Parameter[ID7012]
@Map.Object[$PointObject].Parameter[ID70121]=$Param
@Map.RefreshObject $PointObject
$Count=$Count+1
%SkipSelected
$SelectedCount=$SelectedCount-1
%LoopSelected
;
@Dialog.Message Готово. Оброблено $Count лiнiй
;
Дякую!
Доброго дня! Підкажіть будь ласка, чи можливо за допомого скрипту пронумерувати об’єкти в порядку збільшення довжини ліній на яких вони лежать.
Доброго дня! Підкажіть будь ласка, чи можливо за допомого скрипту пронумерувати об’єкти в порядку збільшення довжини ліній на яких вони лежать.
можна все (або майже все). Скиньте, який потрiбно отримати результат, бо з питання не зовсiм зрозумiло суть задачi.
Denys Sanitskyi:Доброго дня! Підкажіть будь ласка, чи можливо за допомого скрипту пронумерувати об’єкти в порядку збільшення довжини ліній на яких вони лежать.
можна все (або майже все). Скиньте, який потрiбно отримати результат, бо з питання не зовсiм зрозумiло суть задачi.
drive.google.com/file/d/1z3CbKa … sp=sharing
Тобто я виконую такі дії:
-створюю полілінію (вітку) від початку (ктп) в послідовності існуючої нумерації опор, потім за таким принципом наношу наступні;
-командою Правка - Добавить узлы - додаю на полілінії Опори;
-командою Инфо - Калькулятор - Последовательная нумерация - присвоюю почергово по вітках номера опорам, спочатку нумеруюючи опори на коротчих вітках.
Підкажіть, чи можливо автоматизувати скриптами процес нанесення опор і присвоєння їм номерів?
Руслан Пархуць: Denys Sanitskyi:Доброго дня! Підкажіть будь ласка, чи можливо за допомого скрипту пронумерувати об’єкти в порядку збільшення довжини ліній на яких вони лежать.
можна все (або майже все). Скиньте, який потрiбно отримати результат, бо з питання не зовсiм зрозумiло суть задачi.
drive.google.com/file/d/1z3CbKa … sp=sharing
Тобто я виконую такі дії:
-створюю полілінію (вітку) від початку (ктп) в послідовності існуючої нумерації опор, потім за таким принципом наношу наступні;
-командою Правка - Добавить узлы - додаю на полілінії Опори;
-командою Инфо - Калькулятор - Последовательная нумерация - присвоюю почергово по вітках номера опорам, спочатку нумеруюючи опори на коротчих вітках.
Підкажіть, чи можливо автоматизувати скриптами процес нанесення опор і присвоєння їм номерів?
Denys Sanitskyi: Руслан Пархуць: Denys Sanitskyi:Доброго дня! Підкажіть будь ласка, чи можливо за допомого скрипту пронумерувати об’єкти в порядку збільшення довжини ліній на яких вони лежать.
можна все (або майже все). Скиньте, який потрiбно отримати результат, бо з питання не зовсiм зрозумiло суть задачi.
drive.google.com/file/d/1z3CbKa … sp=sharing
Тобто я виконую такі дії:
-створюю полілінію (вітку) від початку (ктп) в послідовності існуючої нумерації опор, потім за таким принципом наношу наступні;
-командою Правка - Добавить узлы - додаю на полілінії Опори;
-командою Инфо - Калькулятор - Последовательная нумерация - присвоюю почергово по вітках номера опорам, спочатку нумеруюючи опори на коротчих вітках.
Підкажіть, чи можливо автоматизувати скриптами процес нанесення опор і присвоєння їм номерів?Спробуйте, чи все вiрно
; Форум (2 варiант) $DEBUG=1 $Layer=ID11293 $Parameter=ID7024 @ExecuteMenu ViewShowAll ; точковi шари [3]ID [4]назва @Text[1].Clear @Text[2].Clear ; лiнiйнi шари [3]ID [4]назва @Text[3].Clear @Text[4].Clear $LCount=@Map.Layers.Count @While $LCount>0 %LoopLayer $LParam=@Map.Layers.Get $LCount $LType=@StringPart 2 $LParam $LName=@Map.Layers.GetName $LCount $LECount=@Map.Layers.ObjectCount $LCount @If (($LType=3) Or ($LType=4)) And ($LECount>0) Then @Text[1].Add $LCount @If (($LType=3) Or ($LType=4)) And ($LECount>0) Then @Text[2].Add $LName ; @If ($LType=1) And ($LECount>0) Then @Text[3].Add $LCount @If ($LType=1) And ($LECount>0) Then @Text[4].Add $LName $LCount=$LCount-1 %LoopLayer ; $Buf=@Text[2].Text $SPoint=@Dialog.ListSelect Виберiть шар КТП|$Buf @If $SPoint= Then @Break $I=@Text[2].IndexOf $SPoint $SID=@Text[1].Line[$I] ; $Buf=@Text[4].Text $SLine=@Dialog.ListSelect Виберiть шар напрямкiв лiнiй|$Buf @If $SLine= Then @Break $I=@Text[4].IndexOf $SLine $RID=@Text[3].Line[$I] ; @Map.DeselectAll @Map.SelectLayer $SID $Buf=@Map.Selected.List @Text[1].Text=$Buf @Map.Layers.SetState $SID 3 ; @Map.DeselectAll @Map.SelectLayer $RID @ExecuteMenu spbJoin @Map.SelectLayer $RID @ExecuteMenu spbSplit @Map.SelectLayer $RID @ExecuteMenu spbFragments @Map.SelectLayer $RID $Buf=@Map.Selected.List @Text[3].Text=$Buf @Map.Layers.SetState $SID 0 @Map.DeselectAll ; ; цикл по точках $Index=1 @Text[10].Clear @Text[11].Clear $pCount=@Text[1].Count @While $pCount>0 %LoopPoints $PointObj=@Text[1].Line[$pCount] $X=@Map.Object[$PointObj].Point[1].x $Y=@Map.Object[$PointObj].Point[1].y @Text[11].Add $X $Y ; цикл по лiнiях %MainCycle @Text[5].Clear $lCount=@Text[3].Count @While $lCount>0 %LoopLines $LineObj=@Text[3].Line[$lCount] $A=@Text[10].IndexOf $LineObj @If $A>0 Then @Goto %SkipLines ; $X1=@Map.Object[$LineObj].Point[1].x $Y1=@Map.Object[$LineObj].Point[1].y ; $PtCount=@Map.Object[$LineObj].Count $X2=@Map.Object[$LineObj].Point[$PtCount].x $Y2=@Map.Object[$LineObj].Point[$PtCount].y ; @If (("$X1"<>"$X") Or ("$Y1"<>"$Y")) And (("$X2"<>"$X") Or ("$Y2"<>"$Y")) Then @Goto %SkipLines @If "$X1"="$X" Then @Goto %NextStep @Map.Object[$LineObj].Reverse %NextStep $Perim=@Map.Object[$LineObj].Parameter[-1] $Perim=%Library.ReplaceComma $Perim $Perim=$Perim/10000 $Perim=@RoundTo $Perim 6 @Text[5].Add $Perim $LineObj ; %SkipLines $lCount=$lCount-1 %LoopLines ; сортуємо i додаємо в загальний масив @Text[5].Sort $Count=@Text[5].Count $I=1 @While $I<=$Count %LoopArray $Line=@Text[5].Line[$I] $Obj=@StringPart 2 $Line @Text[10].Add $Obj $I=$I+1 %LoopArray ; $pCount=$pCount-1 %LoopPoints ; $Buf=@Text[10].Text $Count=@Text[10].Count @If $Index>$Count Then @Goto %MarkPoints $Obj=@Text[10].Line[$Index] $PtCount=@Map.Object[$Obj].Count $X=@Map.Object[$Obj].Point[$PtCount].x $Y=@Map.Object[$Obj].Point[$PtCount].y $Index=$Index+1 @Goto %MainCycle ; %MarkPoints $PointNumber=1 $Count=@Text[10].Count $I=1 @While $I<=$Count %LoopMark $Obj=@Text[10].Line[$I] $PtCount=@Map.Object[$Obj].Count $J=1 @While $J<=$PtCount %LoopMarkPoints $X=@Map.Object[$Obj].Point[$J].x $Y=@Map.Object[$Obj].Point[$J].y $Index=@Text[11].IndexOf $X $Y @If $Index>0 Then @Goto %SkipMarkPoints @Text[11].Add $X $Y $PointObj=@Map.AddObject 0|1|$Layer|1|0 $X $Y 0|1|$Layer|2|$Parameter $PointNumber|114 Проміжна з/б опора~7026:1 @Map.Object[$PointObj].CreateCaption $Parameter 0 0 1 0 3 0 @Map.RefreshObject $PointObj $PointNumber=$PointNumber+1 %SkipMarkPoints $J=$J+1 %LoopMarkPoints $I=$I+1 %LoopMark
Дякую! Все майже супер! Є тільки два нюанси:
- чи можливо зробити так щоб скрипт виконувався тільки на позначених лініях чи біля позначених об’єктах типу КТП ( ID слоя 11120)?;
- чи можливо залишити лінії в первісному вигляді, тобто не змінюючи їх скриптом?.
Дякую! Все майже супер! Є тільки два нюанси:
- чи можливо зробити так щоб скрипт виконувався тільки на позначених лініях чи біля позначених об’єктах типу КТП ( ID слоя 11120)?;
- чи можливо залишити лінії в первісному вигляді, тобто не змінюючи їх скриптом?.
Пiдкорегував попереднiй варiант для ручного вибору, коли є вiдмова в дiалозi вибору шару з лiнiями
Denys Sanitskyi:Дякую! Все майже супер! Є тільки два нюанси:
- чи можливо зробити так щоб скрипт виконувався тільки на позначених лініях чи біля позначених об’єктах типу КТП ( ID слоя 11120)?;
- чи можливо залишити лінії в первісному вигляді, тобто не змінюючи їх скриптом?.
Пiдкорегував попереднiй варiант для ручного вибору, коли є вiдмова в дiалозi вибору шару з лiнiями
drive.google.com/file/d/1FWAEkC … sp=sharing
Вибачаюсь за те що так часто Вас турбую, але в мене виникло ще декілька питань:
- можете поправити скрипт так щоб нумерація опор слідувала спочатку по вітці, а потім вже по наступній за довжиною вітці, тому що інколи є помилкові значення;
Трапляються стуації в яких на мою думку помилкові значення неминучі, допоможіть будь ласка із наступним скриптом, який би відповідав таким пунктам: - можливість задавати порядок нумерації по вітках певним параметром вітки вручну (наприклад: порядковий номер вітки);
- можливість перенумеровувати вже існуючі опори на вітках.
Руслан Пархуць: Denys Sanitskyi:Дякую! Все майже супер! Є тільки два нюанси:
- чи можливо зробити так щоб скрипт виконувався тільки на позначених лініях чи біля позначених об’єктах типу КТП ( ID слоя 11120)?;
- чи можливо залишити лінії в первісному вигляді, тобто не змінюючи їх скриптом?.
Пiдкорегував попереднiй варiант для ручного вибору, коли є вiдмова в дiалозi вибору шару з лiнiями
Вибачаюсь за те що так часто Вас турбую, але в мене виникло ще декілька питань:
- можете поправити скрипт так щоб нумерація опор слідувала спочатку по вітці, а потім вже по наступній за довжиною вітці, тому що інколи є помилкові значення;
Трапляються стуації в яких на мою думку помилкові значення неминучі, допоможіть будь ласка із наступним скриптом, який би відповідав таким пунктам:- можливість задавати порядок нумерації по вітках певним параметром вітки вручну (наприклад: порядковий номер вітки);
- можливість перенумеровувати вже існуючі опори на вітках.
Доброго дня. Зробив панель з наступними кнопками:
- Автоматична нумерацiя опор (попереднiй скрипт)
- Напiвавтоматична нумерацiя опор (новий скрипт, iнший пiдхiд)
- Корегування значення параметру (для змiни нумерацiї опор чи iнших параметрiв: +10 - додати 10 до iснуючого значення, -10 - вiдповiдно, вiдняти)
P.S. Щоб не засмiчувати форум, пропозицiї i зауваження пишiть в ЛС. Попереднiй скрипт заберу з форуму, оскiльки вiн є в даному повiдомленнi.