Перемещение линии в ПСК (UCS)

Автор Тема: Перемещение линии в ПСК (UCS)  (Прочитано 5669 раз)

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

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

  • ADN OPEN
  • ***
  • Сообщений: 106
  • Карма: 3
Код - C# [Выбрать]
  1. Vector3d acVec3d = startPoint.GetVectorTo(endPoint);
  2. poly.TransformBy(Matrix3d.Displacement(acVec3d));
точки Point3d startPoint, endPoint - получены в UCS, через Editor.GetPoint()
при этом при выполнении кода, полилиния смещается совсем не туда куда нужно. Как решить эту проблему?

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
Re: Перемещение линии в ПСК (UCS)
« Ответ #1 : 16-10-2020, 12:42:40 »
Очевидно работать в WCS
Код - C# [Выбрать]
  1.       Editor ed = doc.Editor;
  2.       PromptPointResult pr = ed.GetPoint(Prompt);
  3.       if (pr.Status != PromptStatus.OK) return false;
  4.       Matrix3d ucs = ed.CurrentUserCoordinateSystem;
  5.       Res = pr.Value.TransformBy(ucs);

Отмечено как Решение Павел55 18-10-2020, 16:44:03

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Перемещение линии в ПСК (UCS)
« Ответ #2 : 16-10-2020, 12:45:48 »
Преобразовать точки начала и конца по матрице преобразования UCS->WCS:
Код - C# [Выбрать]
  1. Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  2. Matrix3d matUCStoWCS = ed.CurrentUserCoordinateSystem;
  3. Point3d startPointWCS = startPoint.TransformBy(matUCStoWCS);
  4. Point3d endPointWCS = endPoint.TransformBy(matUCStoWCS);
  5. Vector3d acVec3d = startPointWCS.GetVectorTo(endPointWCS);
  6. poly.TransformBy(Matrix3d.Displacement(acVec3d));
Как-то так...
« Последнее редактирование: 16-10-2020, 18:44:04 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение