Поворот стены относительно центра

Автор Тема: Поворот стены относительно центра  (Прочитано 3861 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн shssАвтор темы

  • ADN Club
  • ***
  • Сообщений: 214
  • Карма: 5
  • Sergey
  • Skype: sergey.s.shevtsov
Добрый день!
Написал функцию поворота стены:
Код - C# [Выбрать]
  1.  Location position = wall.Location as Location;
  2. if (null != position) {
  3. XYZ axisStart = new XYZ(sp.X, sp.Y, 0);
  4. XYZ axisEnd = new XYZ(sp.X, sp.Y, 1);
  5. Line axis = Line.CreateBound(axisStart, axisEnd);
  6. position.Rotate(axis, a);
  7. }
  8.  
Но поворот происходит относительно начальной точки стены.
Есть ли возможность произвести поворот относительно серединной точки линии стены?

Оффлайн shssАвтор темы

  • ADN Club
  • ***
  • Сообщений: 214
  • Карма: 5
  • Sergey
  • Skype: sergey.s.shevtsov
Re: Поворот стены относительно центра
« Ответ #1 : 06-09-2016, 10:05:39 »
Не дождался ответа:)
Решил сделать не красиво, но эффективно:
Код - C# [Выбрать]
  1. Location position = wall.Location as Location;
  2. if (null != position) {
  3.    XYZ axisStart = new XYZ(sp.X, sp.Y, 0);
  4.    XYZ axisEnd = new XYZ(sp.X, sp.Y, 1);
  5.    Line axis = Line.CreateBound(axisStart, axisEnd);
  6.    position.Rotate(axis, a/2);
  7. }
  8. position = wall.Location as Location;
  9. if (null != position) {
  10.    XYZ axisStart = new XYZ(ep.X, ep.Y, 0);
  11.    XYZ axisEnd = new XYZ(ep.X, ep.Y, 1);
  12.    Line axis = Line.CreateBound(axisEnd, axisStart);
  13.     position.Rotate(axis, -a / 2);
  14. }
  15.  

Оффлайн Виктор Чекалин

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Re: Поворот стены относительно центра
« Ответ #2 : 06-09-2016, 12:17:17 »
Сергей, собственно мысль верная. При повороте нужно задать линию, относительно которой происходит вращение. Центральную линию можно получить из геометрии стены на сколько я помню. Но твое решение тоже работает, если не брать во внимание тот факт, что центральная линия не всегда является центром стены.
Кстати откуда берутся координаты sp и ep? не из BoundingBox? В этом случае можно столкнуться с неожиданным поведением для повернутой относительно XY стены, как описано тут/

Да, и еще. Обрати внимание на класс ElementTransformUtils, а именно на ElementTransformUtils.Rotate. Он, конечно фактически сделает то же самое, но более универсальный.

Оффлайн shssАвтор темы

  • ADN Club
  • ***
  • Сообщений: 214
  • Карма: 5
  • Sergey
  • Skype: sergey.s.shevtsov
Re: Поворот стены относительно центра
« Ответ #3 : 06-09-2016, 21:28:33 »
Да, Виктор, верно центральная линия не всегда через центр стены проходит, но для вычисления типа центровой линии (Location line) я использую толщину стены и направление рисования стены (Curve), sp и ep - это и есть начало и конец LocationCurve стены и стараюсь обходить BoundingBox  в свое время знатно помучался с ним.