Необходимо примкнуть прямоугольник к точкам.Если это единичный случай, то не беда- можно подергаться.А если десятки. Кто поможет?
.zip (6.25 KB)
Я тоже ничего немогу придумать!
А тут нечего думать, надо брать и делать. Насколько я понял, нужно переместить в сторону прямоугольники.
Да необходимо переместить прямоуголники к точкам, как по X, так ипо Y.Задача решаемая, но много телодвижений.Если хотя бы режим ОРТО, как CADе.Он бы пригодился для многих задач.
А как вы сейчас решаете такую задачу?
Делаю перпендикуляры из этих точек, а потом ПЕРЕМЕЩЕНИЕ.
Думаю, задачу можно решить при помощи скрипта. Объясните, почему она такая массовая? И насколько массовая?
Решил исполнительную колонн делать в родной проге.
Есть нечто похожее. Маркируем все точки прямоугольника, а затем можем двигать весь объект ухватившись за двойной штришок на одной из линий.
Да, неплохо.Но нет захвата точек.
Ручками.
Это был бы лучший вариант.
А перемещаемый прямоугольник всегда ортогональный? Его стороны параллельны осям координат? И всегда ли это прямоугольник или может быть сложнее фигура? И какое взаимное положение точек к которым требуется переместить прямоугольник и самого прямоугольника? Всегда ли они находятся сверху и слева от прямоугольника, как было показано на рисунке?
Все отрогонально все параллельно.Точки могут быть с любой стороны.Только прямоугольник(квадрат).
как сделать чтоб в гед.ехе появилась вкладка “Уравнивание”??? А так же как можно посчитать засечку?
Заранее спасибо!!!))))))
Смотрите пример скрипта Библиотека полезных скриптов - #21 від Bondarets_Alexander. Правда здесь для упрощения принято, что точки могут быть только сверху и слева. Скрипт можно дополнить анализом положения точек, чтобы допустить их расположение с любой стороны. Если не справитесь, я помогу.
Спасибо!Все отлично!С анализом положения точек уже не справился!
В прилагаемом примере у меня все работает, создаю свои задачки - не работает.
333.dmf (179 KB)
От, підшаманив трохи. Працює незалежно від десяткового розділювача. Біда була втому, що в коді розумілось: ліва сторона прямокутника має Y менше 1 000 000, у Вас більше. Тоді в скрипті, припустим $Left=10 000 000, тоді все працює “на ура”$C=@Map.SelCount
@If $C<>3 @Break Нужно пометить прямоугольник и 2 точки, к которым требуется переместить прямоугольник
;
;получаем индексы прямоугольника и 2-х точек
$N=1
$Rect=0
$Pnt1=0
$Pnt2=0
%Start1
$C=@Map.Object[$N].Count
@If ($C=5) and ($Rect=0) then $Rect=$N
@If ($C=1) and ($Pnt1=0) then $Pnt1=$N
@If ($C=1) and ($Pnt2=0) and ($Pnt1<>$N) then $Pnt2=$N
$N=@Map.NextSelected $N
@If $N>0 @Goto %Start1
@If ($Rect=0) or ($Pnt1=0) or ($Pnt2=0) then @Break Среди помеченных не найдены прямоугольник либо точки
;
$Separator=@DecimalSeparator
;находим верхнюю и левую границы прямоугольника
;в карте не должно быть отрицательных координат!
$Top=0
$Left=10000000
$N=1
%Start2
$P=@Map.Object[$Rect].Point[$N]
$X=@StringPart 1 $P
@If $Separator=, then $X=@Calc Replace("$X",",",".",1)
$X=@DequoteText $X
$Y=@StringPart 2 $P
@If $Separator=, then $Y=@Calc Replace("$Y",",",".",1)
$Y=@DequoteText $Y
@If $X>$Top then $Top=$X
@If $Y<$Left then $Left=$Y
$N=$N+1
@If $N<5 @Goto %Start2
;
;определяем какая точка выше
$P1=@Map.Object[$Pnt1].Point[1]
$X1=@StringPart 1 $P1
@If $Separator=, then $X1=@Calc Replace("$X1",",",".",1)
$X1=@DequoteText $X1
;
$Y1=@StringPart 2 $P1
@If $Separator=, then $Y1=@Calc Replace("$Y1",",",".",1)
$Y1=@DequoteText $Y1
$P2=@Map.Object[$Pnt2].Point[1]
$X2=@StringPart 1 $P2
@If $Separator=, then $X2=@Calc Replace("$X2",",",".",1)
$X2=@DequoteText $X2
$Y2=@StringPart 2 $P2
@If $Separator=, then $Y2=@Calc Replace("$Y2",",",".",1)
$Y2=@DequoteText $Y2
;
;находим векторы перемещения прямоугольника по X и по Y
;если первая точка выше
@If $X1>=$X2 then $VX=$X1-$Top
@If $X1>=$X2 then $VY=$Left-$Y2
;если вторая точка выше
@If $X1<$X2 then $VX=$X2-$Top
@If $X1<$X2 then $VY=$Left-$Y1
;
;перемещаем прямоугольник
@Map.Undo.StartOperationGroup
$N=1
%Start3
$P=@Map.Object[$Rect].Point[$N]
$X=@StringPart 1 $P
@If $Separator=, then $X=@Calc Replace("$X",",",".",1)
$X=@DequoteText $X
$Y=@StringPart 2 $P
@If $Separator=, then $Y=@Calc Replace("$Y",",",".",1)
$Y=@DequoteText $Y
$Z=@StringPart 3 $P
$X=$X+$VX
@If $Separator=, then $X=@Calc Replace("$X",".",",",1)
$X=@DequoteText $X
$Y=$Y-$VY
@If $Separator=, then $Y=@Calc Replace("$Y",".",",",1)
$Y=@DequoteText $Y
@Map.Object[$Rect].Point[$N] $X $Y $Z
$N=$N+1
@If $N<=5 @Goto %Start3
@Map.RefreshObject $Rect
@Window.Refresh
Спасибо! Обкатаем!