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

ADN Club => AutoCAD .NET API => Тема начата: simson43 от 14-08-2019, 14:15:44

Название: поместить содержимое видового экрана в центр
Отправлено: simson43 от 14-08-2019, 14:15:44
Добрый день!

Пишу через COM следующий код
Код - C# [Выбрать]
  1. var vp = doc.PaperSpace.AddPViewport(new[] { 0.0, 0.0, 0.0 }, 200, 200);
  2. vp.Target = new[] { 0.0, 0.0, 0.0 };
  3. vp.Direction = new[] { 0.0, 0.0, 0.0 };

и получается что центр фигуры (координаты ее центра в модели 0,0,0) не совпадает с центром видового экрана, при чем смещение непостоянное
возможно проблема с системами координат?
как все таки поместить фигуру в центр видового экрана?
Название: Re: поместить содержимое видового экрана в центр
Отправлено: simson43 от 14-08-2019, 14:17:36
 :)
Название: Re: поместить содержимое видового экрана в центр
Отправлено: Александр Пекшев aka Modis от 14-08-2019, 14:20:52
Zooming to a window or entity inside AutoCAD with .NET (https://www.keanw.com/2008/06/zooming-to-a-wi.html)
Название: Re: поместить содержимое видового экрана в центр
Отправлено: simson43 от 14-08-2019, 14:36:30
Спасибо большое!
Название: Re: поместить содержимое видового экрана в центр
Отправлено: Александр Ривилис от 14-08-2019, 14:59:18
vp.Direction = new[] { 0.0, 0.0, 0.0 };
Это как? Нулевой вектор?
Ну и думаю, что нужно задать vp.Center
Название: Re: поместить содержимое видового экрана в центр
Отправлено: Александр Ривилис от 14-08-2019, 15:08:23
Это может быть интересным (особенно метод ZoomCenter):
Код - C# [Выбрать]
  1. // using System.Reflection;
  2. public class Zoom
  3. {
  4.     public static void ZoomWindow(Point3d p1, Point3d p2)
  5.     {
  6.         object acad = Application.AcadApplication;
  7.         object[] pts = { p1.ToArray(), p2.ToArray() };
  8.         acad.GetType().InvokeMember("ZoomWindow", BindingFlags.DeclaredOnly | BindingFlags.Public |
  9.              BindingFlags.Instance | BindingFlags.InvokeMethod, null, acad, pts);
  10.     }
  11.     public static void ZoomExtents()
  12.     {
  13.         object acad = Application.AcadApplication;
  14.         acad.GetType().InvokeMember("ZoomExtents", BindingFlags.DeclaredOnly | BindingFlags.Public |
  15.              BindingFlags.Instance | BindingFlags.InvokeMethod, null, acad, null);
  16.     }
  17.     public static void ZoomScaled(double scale, int zoomScaleType)
  18.     {
  19.         // zoomScaleType :
  20.         //    acZoomScaledAbsolute  = 0
  21.         //    acZoomScaledRelative  = 1
  22.         //    acZoomScaledRelativePSpace  = 2
  23.         object acad = Application.AcadApplication;
  24.         acad.GetType().InvokeMember("ZoomScaled", BindingFlags.DeclaredOnly | BindingFlags.Public |
  25.              BindingFlags.Instance | BindingFlags.InvokeMethod, null, acad, new object[] { scale, zoomScaleType });
  26.     }
  27.     public static void ZoomCenter(Point3d pt, double magnitude)
  28.     {
  29.         object acad = Application.AcadApplication;
  30.         acad.GetType().InvokeMember("ZoomCenter", BindingFlags.DeclaredOnly | BindingFlags.Public |
  31.              BindingFlags.Instance | BindingFlags.InvokeMethod, null, acad, new object[] { pt.ToArray(), magnitude });
  32.     }
  33. }
Название: Re: поместить содержимое видового экрана в центр
Отправлено: simson43 от 14-08-2019, 15:53:42
vp.Direction = new[] { 0.0, 0.0, 0.0 };
Это как? Нулевой вектор?
Ну и думаю, что нужно задать vp.Center
Это я экспериментировал. Разницы не заметил между этим и 0,0,1
А центр ведь в конструкторе задается