Denidz писал(а):
Добрый день. Можно ли с помощью скрипта делать подписи длин сторон полигона, только те которые отвечают какому-либо условию? например выводить только те длины которые больше 1 м. В командах связанных с caption вроде бы ничего подобного нет.
Можна, але iз застосуванням всiх вiдомих менi можливостей програми
В даному випадку лiнiї L < 20 не пiдписуються.
Код:
$Sel=@Map.SelCount
@if $Sel=0 then @break Виберiть елементи
$Obj=@Map.NextSelected
$C1=@Calc Char(1)
$C2=@Calc Char(2)
$C3=@Calc Char(3)
$C1=@DequoteText $C1
$C2=@DequoteText $C2
$C3=@DequoteText $C3
;
$Buf=@Map.GetObjectParamBuf $Obj
; пошук шару для довжин лiнiй -10
$Pos=@Calc Pos($C1-10$C3,"$Buf")
@If $Pos=0 Then @Goto %ErrCaptionShow
$BufS=@Calc Copy("$Buf",1,$Pos-1)
$Buf=@Calc Delete("$Buf",1,$Pos-1)
$BufS=@DequoteText $BufS
$Buf=@DequoteText $Buf
;
$Pos=@Calc Pos("L257","$Buf")
$Pos=@DequoteText $Pos
@If $Pos=0 Then @Goto %ErrCaptionShow
$Pos=$Pos+1
;
$Count=@Map.Object[$Obj].Count
$I=1
%Cycle
$LineLen=@Map.Object[$Obj].LineLength[$I]
;-------------------------------------------------------------------------------
; умова(и)
;-------------------------------------------------------------------------------
@If ($LineLen>20) Then @Goto %Next
;-------------------------------------------------------------------------------
$Buf=@Calc Insert(Delete("$Buf",$Pos,3),"385",$Pos)
$Buf=@DequoteText $Buf
%Next
$Pos=$Pos+4
;
$I=$I+1
@If $I<$Count Then @Goto %Cycle
$Buf=@Calc <addword>$BufS$Buf$C2
$Buf=@Calc Replace("$Buf","<addword>","$C1")
;
$Buf=@DequoteText $Buf
;
@Map.SetObjectParamBuf $Obj|$Buf
@Map.RefreshObject $Obj
@Goto %End
;
%ErrCaptionShow
@Dialog.Message Створiть пiдписи довжин лiнiй для об'єкту
%End