Тема: Поворот вставляемого объекта

Суть:
на чертеже линия (все 3 координаты разные). На эту линию я хочу вставить объект из другуго файла. После вставки объекта его нужно повернуть таким образом, чтобы некоторя ось симметрии вставляемого объекта совпадала с указанной линией. Сам центр симметрии объекта принадлежит вышеуказанной линии.
Проблема:
обязательно ли указывать угол поворота функции либо есть иной способ, напрмер указать вектор? Не знаю какая функция это делает, подскажите пож.
Либо все-таки придется угол вычислять?

Re: Поворот вставляемого объекта

> Lanter
AcDbEntity::transformBy()
https://www.caduser.ru/forum/topic29806.html

Re: Поворот вставляемого объекта

в этом примере acedGetAngle(...) получает угол. Я же величину угла не знаю. Каким образом я могу получить угол, указав точку, но не на чертеже, а уже заранее мною заданную.

Re: Поворот вставляемого объекта

> Lanter
https://www.caduser.ru/forum/topic30560.html

Re: Поворот вставляемого объекта

> Александр Ривилис
Спасибо огромное, почему-то не нашел сразу этого примера в форуме. Видимо плохо искал.

Re: Поворот вставляемого объекта

> Lanter
Если бы я сразу понял (догадался) о чем вопрос, то дал бы эту ссылку раньше. :)

Re: Поворот вставляемого объекта

И еще один вариант (может кому полезно будет):

angle = v1.angleTo(v2,v3);

v1,v2 - векторы между которыми определяем угол;
v3 - вектор перпенд. плоскости v1,v2. Угол определяется против часовой между v1 и v2 вокруг v3.

Re: Поворот вставляемого объекта

В продолжение темы:
Берем отрезок. Все три координаты концов различные. Я проецирую данный отрезок на одну из плоскостей X-O-Z и хочу узнать угол между проекцией отрезка и осью O-Z. Это angleOnPlane(...), которая вернёт мне значение угла? Если да, то не совсем понимаю какие она параметры принимает.

Re: Поворот вставляемого объекта

Точнее если возможно, то где я могу увидеть пример работы с жанной функцией? Сам пока не нашел.

Re: Поворот вставляемого объекта

Пример может выгляжеть так:

AcGeVector3d vec(1,1,1);    
AcGePlane plane(AcGePoint3d::kOrigin, AcGeVector3d::kZAxis);
const double angle = vec.angleOnPlane(plane);

Функция честно возвратит значение угла     0,785 (если перевести в градусы это составит ровно 45°)
Все, остальное думаю понятно.

Re: Поворот вставляемого объекта

И еще, чтобы преобразовать твой отрезок в вектор, достаточно сделать так:

AcDbLine myLine;
//здесь код формирования отрезка
const AcGeVector vec = myLine().endPoint() - myLine.startPoint();

Re: Поворот вставляемого объекта

> Roman
Так как вопрос стоял о плоскости X0Z, то:

AcGePlane plane(AcGePoint3d::kOrigin, -AcGeVector3d::kYAxis);

А все остальное IMHO правильно.

Re: Поворот вставляемого объекта

P.S.: Еще немного подумал, и понял, что это все не так:

хочу узнать угол между проекцией отрезка и осью O-Z

Этот угол получить при помощи angleOnPlane(...), т.к. эта функция измерит угол между проекцией вектора на плоскость и (!!!) осью 0X этой плоскости, а по условию задачи нужен угол с осью 0Z. Поэтому:

AcGePlane plane = AcGePlane::kZXPlane; // Плоскость X0Z
vect = vect.orthoProject(plane.normal()); // Получаем проекцию вектора
double ang = vect.angleTo(AcGeVector3d::kZAxis); // Угол с осью Z

Re: Поворот вставляемого объекта

> Александр Ривилис

> Roman
Большое спасибо за помощь, все получилось.