є карта з певною кількістю відрізків.
Потрібно змінити довжини усіх відрізків в n разів відносно його першої точки (при цьому масштаб карти змінювати недопустимо). Зараз змінюємо довжину кожного відрізка вручну через діалогове вікно властивостей лінії.
Чи можливо автоматизувати такий процес? можливо, скриптом?
Наперед вдячний за пропозиції.
координати нової другої точки розраховуються за неокругленими координатами колишньої другої точки (довжини результуючих відрізків можуть не бити на який сантиметр місцевості за рахунок заокруглення), та я цим не дуже переймався, отже мо хто інший підкаже, як зробити щоб в скрипті в розрахунках брали участь заокруглені координати;
координати нової другої точки розраховуються лише по Х та Y, по Z - стабільно 0, тому якщо є висоти - зважте на це;
розділювач цілої та дробової частини в мене - крапка, але вроді в коді (а також у вікні введення) врахував, системний розділювач може бути й комою (функції @Calc Numeric(“$K”), @Calc Replace(“$K”,“,”,“.”))
$SelKount=@Map.SelCount
@If $SelKount=0 then @Break Позначте відрізки, які необхідно подовжити
$K=@Dialog.Ask У скільки разів змінити довжину відрізків Default=2
$KStr=@Calc Replace("$K",",",".")
$Koef=@Calc Numeric($KStr)
$KstObj=1
$NObg=0
;
%Start
$NObg=@Map.NextSelected $NObg
$PointCount=@Map.Object[$NObg].Count
@If $PointCount<>2 then @Text.Add $NObg
@If $PointCount<>2 then @Goto %Prodovg
;$L=@Map.Object[$NObg].LineLength[1]
$XY1=@Map.Object[$NObg].Point[1]
$XY2=@Map.Object[$NObg].Point[2]
;
$X1=@StringPart 1 $XY1
$X2=@StringPart 1 $XY2
$Y1=@StringPart 2 $XY1
$Y2=@StringPart 2 $XY2
;
$X11=@Calc Numeric("$X1")
$X22=@Calc Numeric("$X2")
$DX=$X22-$X11
$X2N=$DX*$Koef
$X2Nov=$X11+$X2N
;
$Y11=@Calc Numeric("$Y1")
$Y22=@Calc Numeric("$Y2")
$DY=$Y22-$Y11
$Y2N=$DY*$Koef
$Y2Nov=$Y11+$Y2N
@Map.Object[$NObg].Delete 2
@Map.Object[$NObg].Add $X2Nov $Y2Nov 0
@Map.RefreshObject $NObg
%Prodovg
$KstObj=$KstObj+1
@if $KstObj<=$SelKount then @Goto %Start
;
$KstPolig=@Text.Count
@If $KstPolig=0 then @Goto %End
@Map.DeselectAll
$NRow=1
%Start1
$StrObg=@Text.Line[$NRow]
$ValNObg=@Calc Numeric("$StrObg")
@Map.SelectObject $ValNObg
$NRow=$NRow+1
@If $NRow<=$KstPolig then @Goto %Start1
@Dialog.Message Позначені об'єкти не є відрізками, відповідно довжину не міняли.
%End
@Window.Refresh