Как это сделать

Необходимо примкнуть прямоугольник к точкам.Если это единичный случай, то не беда- можно подергаться.А если десятки. Кто поможет?
.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

Спасибо! Обкатаем!