Скрипти Допоможіть будь ласка.)

Цей скрипт на кнопку

$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

Я б зробив це трохи по 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

Перемінну $D теж в бібліотеку? Якщо так то її можливо буде змінити?

В бiблiотецi прописуєте на початку наступне:

@if $PARAMETERS= then @Break $D=@StringPart 1 $PARAMETERS
i закоментовуєте рядок в кодi, де є присвоєння значення змiннiй $D, тобто:

; значення за замовчуванням 5 ; $D=5 тодi виклик бiблiотеки використовуєте наступним чином:

%Library.Sample 5

де 5-довжина вiдрiзка

P.S. Привiв до порядку, в параметрi вказується ID об’єкту, номер точки (+/- напрямок , в якому змiнюється довжина (якщо вiд’ємне значення, тодi зворотнiй)) i сама довжина вiдрiзку

Дякую за допомогу. Ваш підхід значно по краще