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

ADN Club => Revit API => Тема начата: enot от 02-12-2019, 16:55:36

Название: Перевод XYZ в XY
Отправлено: enot от 02-12-2019, 16:55:36
Как перевести координаты точки XYZ из модели ревит в координаты экрана XY ?
Название: Re: Перевод XYZ в XY
Отправлено: Александр Игнатович от 02-12-2019, 17:19:57
Посмотри у Джереми: https://thebuildingcoder.typepad.com/blog/2012/10/uiview-windows-coordinates-referenceintersector-and-my-own-tooltip.html. Детали с тех пор могли чуток измениться, но сам подход, скорее всего, до сих пор рабочий
Название: Re: Перевод XYZ в XY
Отправлено: enot от 02-12-2019, 17:37:37
Спасибо)
Название: Re: Перевод XYZ в XY
Отправлено: enot от 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


Название: Re: Перевод XYZ в XY
Отправлено: Александр Игнатович от 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, но это не точно
Название: Re: Перевод XYZ в XY
Отправлено: enot от 06-12-2019, 12:03:20
при вращении колеса мыши мы зуммируем вид или же перемещаем камеру в направлении ViewDirection ?
Название: Re: Перевод XYZ в XY
Отправлено: Александр Игнатович от 06-12-2019, 12:06:31
Ну вообще-то в противоположном.

Посмотри ViewOrientation3D. Там есть EyePosition, походу, ты про него сейчас спросил
Название: Re: Перевод XYZ в XY
Отправлено: Александр Игнатович от 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 видов чуток не так, см. статью
Название: Re: Перевод XYZ в XY
Отправлено: enot от 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);
Название: Re: Перевод XYZ в XY
Отправлено: Александр Игнатович от 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);

Как этот код относится к позиции камеры?
Название: Re: Перевод XYZ в XY
Отправлено: enot от 06-12-2019, 12:43:45
я имел ввиду не тот 3D вид который создается через View3D=> Camera (перспективный ?)
а обычный 3D вид
Название: Re: Перевод XYZ в XY
Отправлено: Александр Игнатович от 06-12-2019, 12:44:21
я тоже
Название: Re: Перевод XYZ в XY
Отправлено: enot от 06-12-2019, 12:46:04
почему тогда линии при взгляде сверху вниз на 3д виде создаются со смещение друг от друга, а не накладываются одна на другую?
Название: Re: Перевод XYZ в XY
Отправлено: Александр Игнатович от 06-12-2019, 12:48:56
Потому что так работают виды в изометрии