Аналитика http://geosystema.net/forum/ |
|
Скрипти Допоможіть будь ласка.) http://geosystema.net/forum/viewtopic.php?f=1&t=19814 |
Страница 2 из 2 |
Автор: | Руслан Пархуць [ 02 дек 2020 23:52 ] |
Заголовок сообщения: | Re: Скрипти Допоможіть будь ласка.) |
ТОВ Аспект писал(а): Як викликати скриптом вікно властивості лінії, таке як через Ctrl+D? Код: @ExecuteMenu CollectInputDistance ТОВ Аспект писал(а): Або підкажіть як маркованому відрізку змінити довжину. Код: $Obj=@Map.SelectedObject
@If $Obj=0 Then @Break $PointsCount=@Map.Object[$Obj].Count $I=1 @While $I<=$PointsCount %PointsLoop $MState=@Map.Object[$Obj].GetPointMarked $I @If $MState=0 Then @Goto %SkipPoint $D=@Map.Object[$Obj].LineLength[$I] $D=@Dialog.Ask Вкажiть потрiбну довжину лiнiї Default=$D Size=200 $A=@Map.Object[$Obj].LineAngle[$I] ; $X=@Map.Object[$Obj].Point[$I].x $Y=@Map.Object[$Obj].Point[$I].y $Z=@Map.Object[$Obj].Point[$I].z ; $X=@Calc Replace("$X",",",".") $Y=@Calc Replace("$Y",",",".") $A=@Calc Replace("$A",",",".") $D=@Calc Replace("$D",",",".") ; $Rad=$A*3.1415926535897932384626433832795028841971/180 $ACos=@Calc Cos($Rad) $DX=$X+$ACos*$D $ASin=@Calc Sin($Rad) $DY=$Y+$ASin*$D ; $Sep=@DecimalSeparator $DX=@Calc Replace("$DX",".","$Sep") $DX=@DequoteText $DX $DY=@Calc Replace("$DY",".","$Sep") $DY=@DequoteText $DY $Z=@Calc Replace("$Z",".","$Sep") $Z=@DequoteText $Z ; $P=@Assign $DX $DY $Z $I=$I+1 @Map.Object[$Obj].Point[$I]=$P @Map.RefreshObject $Obj ; $N=$I+1 @If $N>$PointsCount Then @Goto %SkipPoint $MState=@Map.Object[$Obj].GetPointMarked $N @If $MState=1 Then $I=$I-1 ; %SkipPoint $I=$I+1 %PointsLoop |
Автор: | ТОВ Аспект [ 03 дек 2020 09:30 ] |
Заголовок сообщения: | Re: Скрипти Допоможіть будь ласка.) |
Не очікував що для цього такий путь треба прокласти. Велика вам подяка за скрипт. |
Автор: | Руслан Пархуць [ 03 дек 2020 13:52 ] |
Заголовок сообщения: | Re: Скрипти Допоможіть будь ласка.) |
ТОВ Аспект писал(а): Не очікував що для цього такий путь треба прокласти. Велика вам подяка за скрипт. нема за що, трохи пiдкорегував скрипт на рахунок довжини, яку потрiбно змiнити (щоб по замовчуванню ставило iснуючу) i забрав зайве дiалогове вiкно (тестував i забув забрати). |
Автор: | zahidzem [ 03 дек 2020 20:46 ] |
Заголовок сообщения: | Re: Скрипти Допоможіть будь ласка.) |
Дуже дякую. |
Автор: | ТОВ Аспект [ 04 дек 2020 10:21 ] |
Заголовок сообщения: | Re: Скрипти Допоможіть будь ласка.) |
Вчора за допомогою скрипту з попереднього посту порадів що нарешті витягнувши ділянку в ин4 не будуть напружувати ці довгі вуси суміжників . Скрипт вчора працював сьогодні вже не працює. Прошу допомоги. Скрипт з попереднього посту знаходиться в %Script.Test.Button4 замість строки 8-9 $D=5. $L=@Map.Layers.FindByID ID70010 $File=@Map.Filename $ID=@ExtractFileExt $File @if ("$ID"=".dmf") and ("$L">"1") then $ID=70010 @if $ID=.xml then $ID=70010 @if $ID=.in4 then $ID=50000 $Nej=0 $A1=@Map.Count $CC=0 %Loop $Nej=$Nej+1 $LID=@Map.Object[$Nej].LayerID @if $LID<>$ID then @Goto %Continue $CC=$CC+1 @Map.SelectObject $Nej $B=@Map.SelectedObject $F=@Map.Object[$B].Count $F1=$F-1 @Map.Selected.MarkPoints $F1 @Map.Selected.MarkPoints $F %Script.Test.Button4 @Map.Object[$B].SetPointMarked $F1 0 @Map.Object[$B].SetPointMarked $F 0 @Map.Object[$B].Reverse @Map.Selected.MarkPoints $F1 @Map.Selected.MarkPoints $F %Script.Test.Button4 @Map.Object[$B].SetPointMarked $F1 0 @Map.Object[$B].SetPointMarked $F 0 @Map.DeselectObject $Nej %Continue @if $Nej<$A1 then @Goto %Loop Мета цього скрипту змінити довжину вусиків суміжників |
Автор: | Руслан Пархуць [ 04 дек 2020 11:06 ] |
Заголовок сообщения: | Re: Скрипти Допоможіть будь ласка.) |
ТОВ Аспект писал(а): Вчора за допомогою скрипту з попереднього посту порадів що нарешті витягнувши ділянку в ин4 не будуть напружувати ці довгі вуси суміжників . Скрипт вчора працював сьогодні вже не працює. Прошу допомоги. Цей скрипт на кнопку Код: $L=@Map.Layers.FindByID ID70010 $File=@Map.Filename $ID=@ExtractFileExt $File @if ("$ID"=".dmf") and ("$L">"1") then $ID=70010 @if $ID=.xml then $ID=70010 @if $ID=.in4 then $ID=50000 $Nej=0 $A1=@Map.Count $CC=0 %Loop $Nej=$Nej+1 $LID=@Map.Object[$Nej].LayerID @if $LID<>$ID then @Goto %Continue $CC=$CC+1 @Map.SelectObject $Nej $F=@Map.Object[$Nej].Count $F1=$F-1 ;@Map.Selected.MarkPoints $F1 ;@Map.Selected.MarkPoints $F @Map.Object[$Nej].SetPointMarked $F1 1 @Map.Object[$Nej].SetPointMarked $F 1 %Library.Sample ;%Script.Test.Button4 @Map.Object[$Nej].SetPointMarked $F1 0 @Map.Object[$Nej].SetPointMarked $F 0 @Map.Object[$Nej].Reverse ;@Map.Selected.MarkPoints $F1 ;@Map.Selected.MarkPoints $F @Map.Object[$Nej].SetPointMarked $F1 1 @Map.Object[$Nej].SetPointMarked $F 1 %Library.Sample ;%Script.Test.Button4 @Map.Object[$Nej].SetPointMarked $F1 0 @Map.Object[$Nej].SetPointMarked $F 0 @Map.DeselectObject $Nej %Continue @if $Nej<$A1 then @Goto %Loop а цей - на iншу (але прописати її в кодi, або, як зараз зроблено - в папцi Library створюєте файл sample.dsf i код записуєте в нього) Код: $Obj=@Map.SelectedObject
@If $Obj=0 Then @Break $PointsCount=@Map.Object[$Obj].Count $I=1 @While $I<=$PointsCount %PointsLoop $MState=@Map.Object[$Obj].GetPointMarked $I @If $MState=0 Then @Goto %SkipPoint ;$D=@Dialog.Ask Вкажiть потрiбну довжину лiнiї Default=10 Size=200 ; значення за замовчуванням 5 $D=5 $A=@Map.Object[$Obj].LineAngle[$I] ; $X=@Map.Object[$Obj].Point[$I].x $Y=@Map.Object[$Obj].Point[$I].y $Z=@Map.Object[$Obj].Point[$I].z ; $X=@Calc Replace("$X",",",".") $Y=@Calc Replace("$Y",",",".") $A=@Calc Replace("$A",",",".") $D=@Calc Replace("$D",",",".") ; $Rad=$A*3.1415926535897932384626433832795028841971/180 $ACos=@Calc Cos($Rad) $DX=$X+$ACos*$D $ASin=@Calc Sin($Rad) $DY=$Y+$ASin*$D ; $Sep=@DecimalSeparator ;@Dialog.Message $Sep $DX=@Calc Replace("$DX",".","$Sep") $DX=@DequoteText $DX $DY=@Calc Replace("$DY",".","$Sep") $DY=@DequoteText $DY $Z=@Calc Replace("$Z",".","$Sep") $Z=@DequoteText $Z ; $P=@Assign $DX $DY $Z $I=$I+1 @Map.Object[$Obj].Point[$I]=$P @Map.RefreshObject $Obj ; $N=$I+1 @If $N>$PointsCount Then @Goto %SkipPoint $MState=@Map.Object[$Obj].GetPointMarked $N @If $MState=1 Then $I=$I-1 ; %SkipPoint $I=$I+1 %PointsLoop |
Автор: | Руслан Пархуць [ 04 дек 2020 11:40 ] |
Заголовок сообщения: | Re: Скрипти Допоможіть будь ласка.) |
Я б зробив це трохи по iншому, без Selected. Даю повний код, але його можна спростити, перемiстивши повторюванi процедури в окрему бiблiотеку. Код: $L=@Map.Layers.FindByID ID70010
$File=@Map.Filename $ID=@ExtractFileExt $File @if ("$ID"=".dmf") and ("$L">"1") then $ID=70010 @if $ID=.xml then $ID=70010 @if $ID=.in4 then $ID=50000 $Nej=0 $A1=@Map.Count $CC=0 %Loop $Nej=$Nej+1 $LID=@Map.Object[$Nej].LayerID @if $LID<>$ID then @Goto %Continue ;$CC=$CC+1 ;@Map.SelectObject $Nej $F=@Map.Object[$Nej].Count ; перший вiдрiзок 2-1 $PT=2 ; потрiбна довжина вiдрiзка $D=5 $A=@Map.Object[$Nej].LineAngle[1] $Sep=@DecimalSeparator $A=@Calc Replace("$A",".","$Sep") $A=$A+180 ; ---------------------------------------------- ; це можна винести в окрему бiблiотеку (щоб не повторювати двiчi) ; ---------------------------------------------- $X=@Map.Object[$Nej].Point[$PT].x $Y=@Map.Object[$Nej].Point[$PT].y $Z=@Map.Object[$Nej].Point[$PT].z ; $X=@Calc Replace("$X",",",".") $Y=@Calc Replace("$Y",",",".") $A=@Calc Replace("$A",",",".") $D=@Calc Replace("$D",",",".") ; $Rad=$A*3.1415926535897932384626433832795028841971/180 $ACos=@Calc Cos($Rad) $DX=$X+$ACos*$D $ASin=@Calc Sin($Rad) $DY=$Y+$ASin*$D ; $Sep=@DecimalSeparator ;@Dialog.Message $Sep $DX=@Calc Replace("$DX",".","$Sep") $DX=@DequoteText $DX $DY=@Calc Replace("$DY",".","$Sep") $DY=@DequoteText $DY $Z=@Calc Replace("$Z",".","$Sep") $Z=@DequoteText $Z ; $P=@Assign $DX $DY $Z @Map.Object[$Nej].Point[1]=$P ; ; потрiбна довжина вiдрiзка $D=5 ; ---------------------------------------------- ; останнiй вiдрiзок N(-1)-N $PT=$F-1 $A=@Map.Object[$Nej].LineAngle[$PT] ; ---------------------------------------------- ; це можна винести в окрему бiблiотеку (щоб не повторювати двiчi) ; ---------------------------------------------- $X=@Map.Object[$Nej].Point[$PT].x $Y=@Map.Object[$Nej].Point[$PT].y $Z=@Map.Object[$Nej].Point[$PT].z ; $X=@Calc Replace("$X",",",".") $Y=@Calc Replace("$Y",",",".") $A=@Calc Replace("$A",",",".") $D=@Calc Replace("$D",",",".") ; $Rad=$A*3.1415926535897932384626433832795028841971/180 $ACos=@Calc Cos($Rad) $DX=$X+$ACos*$D $ASin=@Calc Sin($Rad) $DY=$Y+$ASin*$D ; $Sep=@DecimalSeparator ;@Dialog.Message $Sep $DX=@Calc Replace("$DX",".","$Sep") $DX=@DequoteText $DX $DY=@Calc Replace("$DY",".","$Sep") $DY=@DequoteText $DY $Z=@Calc Replace("$Z",".","$Sep") $Z=@DequoteText $Z ; $P=@Assign $DX $DY $Z @Map.Object[$Nej].Point[$F]=$P ; ---------------------------------------------- @Map.RefreshObject $Nej ; %Continue @if $Nej<$A1 then @Goto %Loop |
Автор: | ТОВ Аспект [ 04 дек 2020 13:39 ] |
Заголовок сообщения: | Re: Скрипти Допоможіть будь ласка.) |
Перемінну $D теж в бібліотеку? Якщо так то її можливо буде змінити? |
Автор: | Руслан Пархуць [ 04 дек 2020 13:55 ] | |||
Заголовок сообщения: | Re: Скрипти Допоможіть будь ласка.) | |||
ТОВ Аспект писал(а): Перемінну $D теж в бібліотеку? Якщо так то її можливо буде змінити? В бiблiотецi прописуєте на початку наступне: Код: @if $PARAMETERS= then @Break $D=@StringPart 1 $PARAMETERS i закоментовуєте рядок в кодi, де є присвоєння значення змiннiй $D, тобто: Код: ; значення за замовчуванням 5 тодi виклик бiблiотеки використовуєте наступним чином:; $D=5 Код: %Library.Sample 5 де 5-довжина вiдрiзка P.S. Привiв до порядку, в параметрi вказується ID об'єкту, номер точки (+/- напрямок , в якому змiнюється довжина (якщо вiд'ємне значення, тодi зворотнiй)) i сама довжина вiдрiзку
|
Автор: | ТОВ Аспект [ 07 дек 2020 10:00 ] |
Заголовок сообщения: | Re: Скрипти Допоможіть будь ласка.) |
Дякую за допомогу. Ваш підхід значно по краще |
Страница 2 из 2 | Часовой пояс: UTC + 2 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |