Перевод XYZ в XY

Автор Тема: Перевод XYZ в XY  (Прочитано 5342 раз)

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

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Перевод XYZ в XY
« : 02-12-2019, 16:55:36 »
Как перевести координаты точки XYZ из модели ревит в координаты экрана XY ?

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Перевод XYZ в XY
« Ответ #1 : 02-12-2019, 17:19:57 »
Посмотри у Джереми: https://thebuildingcoder.typepad.com/blog/2012/10/uiview-windows-coordinates-referenceintersector-and-my-own-tooltip.html. Детали с тех пор могли чуток измениться, но сам подход, скорее всего, до сих пор рабочий

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: Перевод XYZ в XY
« Ответ #2 : 02-12-2019, 17:37:37 »
Спасибо)

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: Перевод XYZ в XY
« Ответ #3 : 06-12-2019, 11:23:04 »
В чем различие ViewOrigin
из справки
Цитировать
Returns the origin of the screen.


и GetZoomCorners() ?
Цитировать
Gets the corners of the view's rectangle. The two points that define the corners of the view's rectangle in model coordinates.

При приближении/отдалении вида колесиком мышки у ViewOrigin  ничего не меняется (как будто вид просто зуммируется а экран на месте),
а у GetZoomCorners() координаты меняются , как будто экран (камера) перемещается в направлении ViewDirection



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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Перевод XYZ в XY
« Ответ #4 : 06-12-2019, 11:39:31 »
Ремарки в документации читал?

Цитировать
The origin of a plan view is not meaningful.

Вообще, если речь про 3D-виды, рекомендую вот эту статью почитать http://help.autodesk.com/view/RVT/2016/ENU/?guid=GUID-A7FA8DBC-830E-482D-9B66-147399524442

Для 3D видов Origin вида похож на Target point, но это не точно

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: Перевод XYZ в XY
« Ответ #5 : 06-12-2019, 12:03:20 »
при вращении колеса мыши мы зуммируем вид или же перемещаем камеру в направлении ViewDirection ?

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Перевод XYZ в XY
« Ответ #6 : 06-12-2019, 12:06:31 »
Ну вообще-то в противоположном.

Посмотри ViewOrientation3D. Там есть EyePosition, походу, ты про него сейчас спросил

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Перевод XYZ в XY
« Ответ #7 : 06-12-2019, 12:13:48 »
Так, я понял, в принципе, как view.Orientation, так и view.EyePosition при зуме не меняются, по крайней мере, для видов изометрических, что, в принципе, логично, view.GetOrientation в данном случае определяет плоскость проекции 3D модели для генерации картинки на мониторе. В свою очередь zoom определяется соотношением CropBox и Outline

Цитировать
View.CropBox.Max.X(Y) / View.OutLine.Max.X(Y) == View.CropBox.Min.X(Y) / View.OutLine.Min.X(Y) == View.Scale

Для perspective видов чуток не так, см. статью

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: Перевод XYZ в XY
« Ответ #8 : 06-12-2019, 12:34:27 »
О ViewOrientation3D надо почитать...

при вращении колеса мыши камера (при слове камера я наверное только запутал) действительно перемещается в направлении взгляда.

если на 3d (вид не перспективный)  виде запустить код ниже  до вращения колеса и после то будет  сверху видно что линии сместились

       
Код - C# [Выбрать]
  1.             IList<XYZ> corners = uiview.GetZoomCorners();
  2.                     var plane = Plane.CreateByNormalAndOrigin(doc.ActiveView.ViewDirection, doc.ActiveView.Origin);
  3.                     SketchPlane skp = SketchPlane.Create(doc, plane);
  4.                     doc.Create.NewModelCurve(Line.CreateBound(corners[0], corners[1]), skp);

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Перевод XYZ в XY
« Ответ #9 : 06-12-2019, 12:38:17 »
при вращении колеса мыши камера действительно перемещается в направлении взгляда.

Нет, можешь Lookup-ом посмотреть. + в заблокированных видах зум возможен, позиция камеры не меняется, изменяются только SectionBox / Outline пропорционально.

            IList<XYZ> corners = uiview.GetZoomCorners();
                    var plane = Plane.CreateByNormalAndOrigin(doc.ActiveView.ViewDirection, doc.ActiveView.Origin);
                    SketchPlane skp = SketchPlane.Create(doc, plane);
                    doc.Create.NewModelCurve(Line.CreateBound(corners[0], corners[1]), skp);

Как этот код относится к позиции камеры?

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: Перевод XYZ в XY
« Ответ #10 : 06-12-2019, 12:43:45 »
я имел ввиду не тот 3D вид который создается через View3D=> Camera (перспективный ?)
а обычный 3D вид

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Перевод XYZ в XY
« Ответ #11 : 06-12-2019, 12:44:21 »
я тоже

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: Перевод XYZ в XY
« Ответ #12 : 06-12-2019, 12:46:04 »
почему тогда линии при взгляде сверху вниз на 3д виде создаются со смещение друг от друга, а не накладываются одна на другую?

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Перевод XYZ в XY
« Ответ #13 : 06-12-2019, 12:48:56 »
Потому что так работают виды в изометрии