NewPointOnPlane

Автор Тема: NewPointOnPlane  (Прочитано 4299 раз)

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

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
NewPointOnPlane
« : 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





Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: NewPointOnPlane
« Ответ #1 : 06-12-2019, 15:44:01 »
Задачу не понял, честно говоря, но попробую подтолкнуть, как мне кажется, в нужном направлении.

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

У него есть методы GetZoomCorners() и GetWindowRectangle()

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: NewPointOnPlane
« Ответ #2 : 06-12-2019, 15:48:04 »
LeftDownModelRect это модельная точка нижняя левая точка экрана, получаемая из uiview.GetZoomCorners()[0]


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

у меня есть модельная точка pt элемента . 
через PointOnPlane.NewPointOnPlane ()... я проецирую (как мне кажется) эту точку Pt на план . Теперь хочу получить координаты этой точки относительно координат нового плана через pointOnPlane.Position.U и pointOnPlane.Position.V

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: NewPointOnPlane
« Ответ #3 : 06-12-2019, 16:13:32 »
на основе ее создаю план, это означает что начало координат такого плана будет в точке LeftDownModelRect .

Это как?

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

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

Я до сих пор не понимаю, какую задачу ты пытаешься решить

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: NewPointOnPlane
« Ответ #4 : 06-12-2019, 16:16:18 »
найти смещение точки модели по X и Y относительно uiview.GetZoomCorners()[0]

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: NewPointOnPlane
« Ответ #5 : 06-12-2019, 16:32:00 »
Ну как бы
Код - C# [Выбрать]
  1. pt -  uiview.GetZoomCorners()[0]

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: NewPointOnPlane
« Ответ #6 : 06-12-2019, 16:34:33 »
Если в экранных координатах, то из uiview.GetWindowRectangle() находим ширину и высоту в пикселях, из zoom corners - ширину и высоту параллелепипеда, дальше обычной пропорцией всё решается