ADN Club > Inventor API

Управление видовым кубом и направлением камеры в модели.

(1/1)

R.I.Chernov:
Доброго времени суток, уважаемые форумчане! Пытаюсь разобраться в задаче, прошу вашей помощи.

Если в двух словах, то мне необходимо написать код, который будет проверять, правильно ли направлен "вид спереди" видового куба, и если нет, то исправлять. Битый час читаю хелп, никак не могу сообразить. Как проверить текущее направление, я вроде бы понимаю, но вот как изменить?

Есть метод View.SetCurrentAsFront(), выходит, что поверни камеру в нужный ракурс, и дело сделано. Но как повернуть? Ну то есть, не пользуясь свойством Camera.ViewOrientationType, а произвольно повернуть. У меня есть вектор правильного направления камеры, ну или плоскость, на которую камера должна быть направлена, каким образом мне их использовать, чтобы эту камеру повернуть?

Как понимаю, надо колдовать изменяя Camera.UpVector и точку взгляда пользователя.  Тут же возникает вопрос: "А чем отличаются Camera.Eye и Camera.Target, и что из них за что отвечает?" В общем, я крайне запутался, буду рад любой идее, совету, догадке!

mikazakov:
В хэлпе написано
Camera.Eye - это центр вида, это наверное связано с тем вокруг какой точки вращаться в пространстве.
Camera.Target взгляд со стороны оси Z, наверное для работы с 2Д эскизами, точно не скажу.

А пример из хэлпа не рулит?

--- Код - Visual Basic [Выбрать] ---Public Sub RotateCamera()    ' Get the active camera.    Dim cam As Camera    Set cam = ThisApplication.ActiveView.Camera        Dim tg As TransientGeometry    Set tg = ThisApplication.TransientGeometry        ' Define the number of steps in the animation.    Dim steps As Integer    steps = 360        ' Define the distance between the eye and target.    Dim eyeDistance As Double    eyeDistance = 15        ' Calculate pi.    Dim pi As Double    pi = Atn(1) * 4        ' Iterate the specified number of steps.    Dim i As Integer    For i = 1 To steps        ' Calculate the x and y coordinates of the eye.        Dim x As Double        Dim y As Double        x = eyeDistance * Cos(i / steps * (2 * pi))        y = eyeDistance * Sin(i / steps * (2 * pi))                ' Set the eye with a hard coded z value.        cam.Eye = tg.CreatePoint(x, y, 3)                ' Define the up vector as positive z.        cam.UpVector = tg.CreateUnitVector(0, 0, 1)                ' Apply the current camera definition to the view.        cam.ApplyWithoutTransition    NextEnd Sub

R.I.Chernov:

--- Цитата: mikazakov от 23-03-2021, 16:21:50 ---А пример из хэлпа не рулит?
--- Конец цитаты ---
Спасибо, Михаил. Насчет примера из хелпа, я не придумал, каким образом его использовать. Они, как я понял, создают анимацию вращения на 360 градусов, преобразуя текущее положение камеры. Мне же нужно научиться устанавливать вид камеры на какую-то плоскость, по сути реализовать команду "вид на объект" из пользовательского интерфейса.

R.I.Chernov:
Походу это так вот решается:
Сначала выделяем нужную плоскость и потом

--- Код - C# [Выбрать] ---ControlDefinition oControlDef = oApp.CommandManager.ControlDefinitions["AppLookAtCmd"];oControlDef.Execute();
Сложность тока в том, что камера поворачивается с текущей позиции по кратчайшей траектории. И может получиться, что в отличие от пользовательской команды, где направление вида камеры всегда противоположно направлению нормали плоскости, тут направление камеры будет совпадать с нормалью.

Навигация

[0] Главная страница сообщений

Перейти к полной версии