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

ADN Club => AutoCAD .NET API => Тема начата: Павел55 от 16-10-2020, 12:35:29

Название: Перемещение линии в ПСК (UCS)
Отправлено: Павел55 от 16-10-2020, 12:35:29
Код - C# [Выбрать]
  1. Vector3d acVec3d = startPoint.GetVectorTo(endPoint);
  2. poly.TransformBy(Matrix3d.Displacement(acVec3d));
точки Point3d startPoint, endPoint - получены в UCS, через Editor.GetPoint()
при этом при выполнении кода, полилиния смещается совсем не туда куда нужно. Как решить эту проблему?
Название: Re: Перемещение линии в ПСК (UCS)
Отправлено: avc от 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);
Название: Re: Перемещение линии в ПСК (UCS)
Отправлено: Александр Ривилис от 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));
Как-то так...