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();
Сложность тока в том, что камера поворачивается с текущей позиции по кратчайшей траектории. И может получиться, что в отличие от пользовательской команды, где направление вида камеры всегда противоположно направлению нормали плоскости, тут направление камеры будет совпадать с нормалью.
Навигация
Перейти к полной версии