Библиотека полезных скриптов

Построение перпендикуляров от точечных объектов до ближайшего сегмента полилинии

Скрипт использует новую функцию

@Map.PerpendicularToNearestLine FromPoint ToObj PerpendicularLayer [Reverse]

которая строит перпендикуляр из точки FromPoint (X Y Z) до ближайшего сегмента полилинии ToObj. Перпендикуляр помещается в слой PerpendicularLayer. Если задано Reverse, тогда направление перпендикуляра обратное - от полилинии до точки FromPoint.

;слой куда будут помещены построенные отрезки
$PerpLayer=3
$N=@Map.SelCount
@if $N<>1 then @Break Выделите полилинию
;выбираем слой точек от которых строятся отрезки
$Layers=@Map.Layers.List
$PntLayer=@Dialog.ListSelect Выберите точечный слой|$Layers
$PntLayer=@StringPart 1 $PntLayer
;полилиния к которой строятся отрезки
$Poly=@Map.NextSelected 0
$N=@Map.Count + 1
;цикл по всем объектам карты
%Start
$N=$N-1
@if $N<1 then @Goto %Stop
$IsDeleted=@Map.Object[$N].Deleted
@if $IsDeleted then @Goto %Start
;слой текущего объекта
$Lay=@Map.Object[$N].LayerID
@if $Lay<>$PntLayer then @Goto %Start
;найден точечный объект
$Pnt=@Map.Object[$N].Point[1]
@Map.PerpendicularToNearestLine $Pnt $Poly $PerpLayer Reverse
@Goto %Start
%Stop
@Map.CalculateRange
@Window.Refresh

Test.dmf (2.79 KB)