На другой ветке прочёл разговор о сдвиге объектов.
Давным-давно написал вот такой макрос:
// Сдвиг группы объектов с базовой точкой. Рыжий Пёс, 1.12.04
// С использованием команды 6-й версии OnError 24.03.10
getpar double; // 0 - без дублирования, 1 - с дублированием
// Выбираем группу сдвигаемых объектов
OnError errLabel1; // * для 6-й версии
#SdvigObj group :
OffError; // *
OnError errLabel2; // *
// добавлено 21.12.05 -->
m=getcntobjg(SdvigObj);
defarr b[m];
k=GetArrObjg(SdvigObj,b);
Obj_color=Getcolor(b[1]); // Цвет 1-го объекта
// <--
if double
{ New_Color=226; if Obj_color==226 { New_Color=214 } } // с дублированием - жёлтые
else
{ New_Color=154; if Obj_color==154 { New_Color=142 } } // без дублирования - синие
chprop color SdvigObj done New_Color ;
get "Введите базовую точку" point missing x1,y1,z1 autosnap :
get "Введите конечную точку" point x1,y1,z1, x2,y2,z2 autosnap :
defarr v[3];
a=SysArr(54,v);
xs=x2-x1;
ys=y2-y1;
zs=z2-z1;
// Смещение в текущей плоскости проекции
if v[1]==1 { xs=0 };
if v[2]==1 { ys=0 };
if v[3]==1 { zs=0 };
if double
{ move SdvigObj done xs ys zs copy 1; explode last 2 done }
else
{ move SdvigObj done xs ys zs nocopy; explode last 1 done }
otchet="dX="+str(xs)+" | dY="+str(ys)+" | dZ="+str(zs)+" | Расстояние="+lTrim(str(sqrt(xs*xs+ys*ys+zs*zs),10, 1))+" | всего выбрано "+str(m) ;
=otchet; exit
// --> 24.03.10
errLabel1:
OffError;
exit
errLabel2:
OffError;
explode SdvigObj done
exit
// <--
- простенько и со вкусом
. Главная фишка в том, что выбранные объекты всегда смещаются в текущей видовой плоскости (если текущий вид - изометрия, то в пространстве). Бывают иногда глюки, если использовать привязку "перпендикулярно" к дуге.
Привязал его к "горячим" кнопкам и практически он заменил мне все остальные команды перемещения.