Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Алексей (IdeaSoft) от 12-12-2016, 12:03:39

Название: Наклонить 3dSolid
Отправлено: Алексей (IdeaSoft) от 12-12-2016, 12:03:39
Подскажите, есть объект 3dsolid
Делаю так:
Код - C# [Выбрать]
  1. SweepOptionsBuilder sob = new SweepOptionsBuilder();
  2.                 sob.Align = SweepOptionsAlignOption.AlignSweepEntityToPath;
  3.                 sob.Bank = true;
  4. Entity ProfEnt, AxisEnt; // объекты профиля и оси, вдоль которой делается тело
  5. ...
  6. Solid3d sol = new Solid3d();
  7. sol.CreateSweptSolid(ProfEnt, AxisEnt, sob.ToSweepOptions())
;

А мне нужно наклонить солид (как показано на рисунке)
Как это сделать?

(https://s24.postimg.org/bs6if4l7l/3d_body_naklon.jpg) (https://postimg.org/image/bs6if4l7l/)
Название: Re: Наклонить 3dSolid
Отправлено: avc от 12-12-2016, 12:15:35
Я бы просто вытянул и слайсом отрезал торцы
Название: Re: Наклонить 3dSolid
Отправлено: Алексей (IdeaSoft) от 12-12-2016, 12:22:44
Я бы просто вытянул и слайсом отрезал торцы
У меня тоже была такая идея вытянуть
Солид и подрезать с краев.
На счет вытянуть мне понятно - я могу просто объект сделать немного длиннее.
А вот подрезать - мне в голову приходит только
способ применить логическую операцию с другим объектом.

Но может быть есть что-то проще?
Название: Re: Наклонить 3dSolid
Отправлено: avc от 12-12-2016, 12:25:39
Или сначала 2 профиля наклонить, а потом между ними вытянуть. В интфейсе работает через _Loft, в API - не знаю.
Название: Re: Наклонить 3dSolid
Отправлено: avc от 12-12-2016, 12:27:16
А вот подрезать
Slolid3d.Slice(Plane)
Название: Re: Наклонить 3dSolid
Отправлено: Алексей (IdeaSoft) от 12-12-2016, 13:45:20
Спасибо, подрезать получилось!
Сделал так

Код - C# [Выбрать]
  1.   Line Ln; // линия оси солида
  2. ...
  3.   Vector3d VZ = new Vector3d(0, 0, 1);
  4.   Vector2d v2d = new Vector2d(Ln.EndPoint.X - Ln.StartPoint.X,
  5.                               Ln.EndPoint.Y - Ln.StartPoint.Y);
  6.   sol.Slice(new Plane(Ln.EndPoint, VZ,
  7.                       new Vector3d(v2d.GetPerpendicularVector().X,
  8.                                   v2d.GetPerpendicularVector().Y, 0)));


             
Название: Re: Наклонить 3dSolid
Отправлено: Александр Ривилис от 12-12-2016, 15:37:52
Похоже я не понял постановку задачи. Нужно было повернуть 3DSOLID относительно оси, по которой он выдавливался?
Тогда всё очень просто:
Код - C# [Выбрать]
  1. Matrix3d mat = Matrix3d.Rotation(ang, // угол поворота в радианах
  2.                                      AxisEnt.StartPoint - AxisEnt.EndPoint, // вектор оси
  3.                                      AxisEnt.StartPoint // Базовая точка
  4.                                     );
  5. sol.TransformBy(mat);
Название: Re: Наклонить 3dSolid
Отправлено: Алексей (IdeaSoft) от 12-12-2016, 16:26:57
Похоже я не понял постановку задачи
Нет не нужно его поворачивать просто наклонить.
Нужно деформировать тело наклонив его.
Был прямоугольник, а стал - параллелограмм в виде с боку.


Название: Re: Наклонить 3dSolid
Отправлено: Александр Ривилис от 12-12-2016, 17:12:25
Нужно деформировать тело наклонив его.
Вот так и нужно писать! :)