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