Координаты облака точек

Автор Тема: Координаты облака точек  (Прочитано 8740 раз)

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

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

  • ADN Club
  • ***
  • Сообщений: 214
  • Карма: 5
  • Sergey
  • Skype: sergey.s.shevtsov
Координаты облака точек
« : 16-06-2015, 17:54:14 »
Добрый день!
Возникла необходимость отслеживания изменения координат и вращения вставленного облака точек.
первым делом вставил облако точек и поместил его в нулевую координату
Код - C# [Выбрать]
  1. using (Transaction t = new Transaction(doc, "RCS Insertion")) {
  2.                     t.Start();
  3.                     PointCloudInstance pci = CreatePointCloud(doc, ofd.FileName);
  4.                     pci.Location.Move(XYZ.Zero);
  5.                     pci.Pinned = true;
  6.                                      
  7.                     t.Commit();
  8.                 }
Но дальше пришлось взять первую точку облака точек и по ней отслеживать перемещение, но проблема состоит в том, что при вращении и перемещении точки координаты перемещения неверны...
есть ли у облака точек точка относительно которой я могу определить его перемещение?
Что касается вращения я использовал Transform относительно нормали
Код - C# [Выбрать]
  1. Transform transform = pci.GetTransform();
  2.                         XYZ vectorTran = transform.OfVector(transform.BasisX);
  3.                         XYZ norm = new XYZ(1, 0, 0);
  4.                         double d1 = transform.BasisX.AngleTo(norm);
  5.                         pnts.Add(d1.ToString());
но при перемещении опять же координаты не верны.
Есть варианты попроще?
Спасибо
« Последнее редактирование: 16-06-2015, 17:58:12 от Виктор Чекалин »

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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Re: Координаты облака точек
« Ответ #1 : 16-06-2015, 18:02:24 »
при вращении и перемещении точки координаты перемещения неверны
А что имеется ввиду под словом "не верны"?
есть ли у облака точек точка относительно которой я могу определить его перемещение?
В пользовательском интерфейсе есть что то подобное?

С облаками точек мне пока не приходилось работать. Если есть возможность, отправьте мне в личку файл с точками, попробуем разобраться вместе.

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

  • ADN Club
  • ***
  • Сообщений: 214
  • Карма: 5
  • Sergey
  • Skype: sergey.s.shevtsov
Re: Координаты облака точек
« Ответ #2 : 16-06-2015, 18:16:44 »
Цитировать
А что имеется ввиду под словом "не верны"?
Если я беру координаты одной из точек облака(X,Y) и перемещаю координаты становятся (X1, Y1),которые мне нужны, но если я еще и поверну облако то координаты точки станут (X2,Y2),которые не являются верными.
Цитировать
В пользовательском интерфейсе есть что то подобное?
В пользовательском интерфейсе есть PinPoint как и у всех Insert объектов, "середина" облака точек если образно выражаться.

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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Re: Координаты облака точек
« Ответ #3 : 17-06-2015, 07:38:22 »
Сергей, попробуйте сделать поворот с помощью ElementTransformUtils.RotateElement.
По моему вы просто не верно выполнили поворот точек, с помощью кода из первого сообщения.

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

  • ADN Club
  • ***
  • Сообщений: 214
  • Карма: 5
  • Sergey
  • Skype: sergey.s.shevtsov
Re: Координаты облака точек
« Ответ #4 : 17-06-2015, 07:41:59 »
Виктор, дак мне не нужно делать поворот, мне нужно определить было ли повернуто облако и на сколько градусов, относительно первоначального положения

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

  • ADN Club
  • ***
  • Сообщений: 214
  • Карма: 5
  • Sergey
  • Skype: sergey.s.shevtsov
Re: Координаты облака точек
« Ответ #5 : 17-06-2015, 07:55:56 »
Оставил такое решение
Код - C# [Выбрать]
  1. Transform transform = pci.GetTransform();
  2.                     XYZ vectorTran = transform.OfVector(transform.BasisX);
  3.                     XYZ norm = new XYZ(1, 0, 0);
  4.                     double d1 = transform.BasisX.AngleTo(norm);
  5.                     d1 = d1 * (180 / Math.PI);
  6.  
  7.  
При этом берется угол между реальным положением облака (относительно точки вставки) и нормальным вектором.
« Последнее редактирование: 17-06-2015, 15:35:08 от shss »

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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Re: Координаты облака точек
« Ответ #6 : 17-06-2015, 14:12:22 »
Виктор, дак мне не нужно делать поворот, мне нужно определить было ли повернуто облако и на сколько градусов, относительно первоначального положения
Сергей, хорошо, что вы нашли решение, но все равно я так и не понял проблемы.
Смотрите, вы вставили облако точек. А дальше что? Поворачивали или нет? откуда мы берем первоначальное положение облака точек?


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

  • ADN Club
  • ***
  • Сообщений: 214
  • Карма: 5
  • Sergey
  • Skype: sergey.s.shevtsov
Re: Координаты облака точек
« Ответ #7 : 17-06-2015, 15:00:32 »
Цитировать
Смотрите, вы вставили облако точек.
Вставил облако точек.
Код - C# [Выбрать]
  1.  private PointCloudInstance CreatePointCloud(Document doc, string rcsPath) {
  2.             PointCloudType type = PointCloudType.Create(doc, "rcs", rcsPath);
  3.             return (PointCloudInstance.Create(doc, type.Id, Transform.Identity));
  4.         }
  5.  
При этом вставляется в Original point.
Двигаю облако в нулевую точку.
Код - C# [Выбрать]
  1. pci.Location.Move(XYZ.Zero);
теперь двигаю облако в другое место и с помощью pci.GetTransform().Origin определяю новую точку и определяю изменение положения относительно первоначальной точки.
Запоминаю первоначальный угол поворота, ну он всегда должен быть равен 0
Цитировать
Поворачивали или нет?
Разворачиваю и с помощью
Код - C# [Выбрать]
  1. Transform transform = pci.GetTransform();
  2.                     XYZ vectorTran = transform.OfVector(transform.BasisX);
  3.                     XYZ norm = new XYZ(1, 0, 0);
  4.                     double d1 = transform.BasisX.AngleTo(norm);
  5.                     d1 = d1 * (180 / Math.PI);
  6.  
определяю угол разворота относительно первоначального положения
« Последнее редактирование: 17-06-2015, 15:34:57 от shss »

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Координаты облака точек
« Ответ #8 : 17-06-2015, 15:32:55 »
shss, кто тут ленится форматировать код по правилам форума? Читайте мою подпись.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ***
  • Сообщений: 214
  • Карма: 5
  • Sergey
  • Skype: sergey.s.shevtsov
Re: Координаты облака точек
« Ответ #9 : 17-06-2015, 15:35:30 »
Александр, исправился