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

ADN Club => Revit API => Тема начата: enot от 06-12-2019, 15:31:15

Название: NewPointOnPlane
Отправлено: enot от 06-12-2019, 15:31:15

Пытаюсь получить координаты точки на плане. Смысл в том, чтобы спроецировать точку с модели на план плоскости экрана, начало которого в нижнем левом углу границ вида.

код:

Код - C# [Выбрать]
  1.  var pt = (duct.Location as LocationCurve).Curve.Evaluate(0.5, true);                
  2.                     var plane = Plane.CreateByNormalAndOrigin(doc.ActiveView.ViewDirection, doc.ActiveView.Origin);
  3.                     var planeUP = Plane.CreateByNormalAndOrigin(doc.ActiveView.ViewDirection, LeftDownModelRect);
  4.                     SketchPlane skpUP = SketchPlane.Create(doc, planeUP);
  5.                     PointOnPlane pointOnPlane = PointOnPlane.NewPointOnPlane(doc, skpUP.GetPlaneReference(), pt, plane.XVec);              
  6.                     System.Windows.MessageBox.Show(  pointOnPlane.Position.U + " " + pointOnPlane.Position.V);

проблема:
неверные координаты

Код - C# [Выбрать]
  1.  pointOnPlane.Position.U и pointOnPlane.Position.V



(https://i.postimg.cc/xN2j4ZWV/Point-On-Plane.png) (https://postimg.cc/xN2j4ZWV)
Название: Re: NewPointOnPlane
Отправлено: Александр Игнатович от 06-12-2019, 15:44:01
Задачу не понял, честно говоря, но попробую подтолкнуть, как мне кажется, в нужном направлении.

Попробуй получить
Код - C# [Выбрать]
  1. uidoc.GetOpenUIViews().First(x => x.ViewId = uidoc.ActiveGraphicalView.Id)

У него есть методы GetZoomCorners() и GetWindowRectangle()
Название: Re: NewPointOnPlane
Отправлено: enot от 06-12-2019, 15:48:04
LeftDownModelRect это модельная точка нижняя левая точка экрана, получаемая из uiview.GetZoomCorners()[0]


на основе ее создаю план, это означает что начало координат такого плана будет в точке LeftDownModelRect .

у меня есть модельная точка pt элемента . 
через PointOnPlane.NewPointOnPlane ()... я проецирую (как мне кажется) эту точку Pt на план . Теперь хочу получить координаты этой точки относительно координат нового плана через pointOnPlane.Position.U и pointOnPlane.Position.V
Название: Re: NewPointOnPlane
Отправлено: Александр Игнатович от 06-12-2019, 16:13:32
на основе ее создаю план, это означает что начало координат такого плана будет в точке LeftDownModelRect .

Это как?

через PointOnPlane.NewPointOnPlane ()... я проецирую (как мне кажется) эту точку Pt на план

правильно, "кажется".

Я до сих пор не понимаю, какую задачу ты пытаешься решить
Название: Re: NewPointOnPlane
Отправлено: enot от 06-12-2019, 16:16:18
найти смещение точки модели по X и Y относительно uiview.GetZoomCorners()[0]
Название: Re: NewPointOnPlane
Отправлено: Александр Игнатович от 06-12-2019, 16:32:00
Ну как бы
Код - C# [Выбрать]
  1. pt -  uiview.GetZoomCorners()[0]
Название: Re: NewPointOnPlane
Отправлено: Александр Игнатович от 06-12-2019, 16:34:33
Если в экранных координатах, то из uiview.GetWindowRectangle() находим ширину и высоту в пикселях, из zoom corners - ширину и высоту параллелепипеда, дальше обычной пропорцией всё решается