I am looking for a piece of (iLogic, VB, c#) code that can rotate the camera in the Assemblyview 30 degrees over the vertical Z-axis. Clock-wise or counter-clockwise. I don't need a transition because i need it to take screenshots of tons of products. I have found multiple pieces of code that can turn the camera, but as far as i am seeing none that have the amount of degrees turned as a input parameter. Or in which you can chose the direction in which to turn. For example:
Sub Main() RotateCamMacro() End Sub Public Sub RotateCamMacro() Dim pi As Double pi = Math.PI 'Rotation speed in Rad/Sec Dim rotSpeedRad As Double rotSpeedRad = 40 * pi / 180 'Get part document Dim doc As Document doc = ThisApplication.ActiveDocument 'Get range box center point Dim centerPoint As Point centerPoint = GetRangeBoxCenter(doc) 'Set camera orientation Call SetCameraOrientation( _ centerPoint, _ ViewOrientationTypeEnum.kIsoTopRightViewOrientation) 'Get Inventor camera Dim camera As Inventor.Camera camera = ThisApplication.ActiveView.Camera Dim totalRot As Double totalRot = 0 Dim offsetRad As Double Dim rotAxis As Vector rotAxis = ThisApplication.TransientGeometry.CreateVector(1, 0, 0) Dim upVector As UnitVector upVector = ThisApplication.TransientGeometry.CreateUnitVector(0, 1, 0) Do While (totalRot < 2 * pi) offsetRad = 0.05 * rotSpeedRad RotateCam(camera, offsetRad, rotAxis, centerPoint, upVector) totalRot = totalRot + offsetRad Loop Call SetCameraOrientation( _ centerPoint, _ ViewOrientationTypeEnum.kIsoTopRightViewOrientation) End Sub Public Function GetRangeBoxCenter(ByVal doc As Document) As Point Dim minPoint As Point minPoint = doc.ComponentDefinition.RangeBox.minPoint Dim maxPoint As Point maxPoint = doc.ComponentDefinition.RangeBox.maxPoint GetRangeBoxCenter = ThisApplication.TransientGeometry.CreatePoint( _ (minPoint.X + maxPoint.X) * 0.5, _ (minPoint.Y + maxPoint.Y) * 0.5, _ (minPoint.Z + maxPoint.Z) * 0.5) End Function Public Sub SetCameraOrientation( _ ByVal targetPoint As Point, _ ByVal viewOrientation As ViewOrientationTypeEnum) Dim camera As Inventor.Camera camera = ThisApplication.ActiveView.Camera camera.ViewOrientationType = viewOrientation camera.Target = targetPoint Call camera.Fit Call camera.ApplyWithoutTransition End Sub Public Sub RotateCam( _ camera As Camera, _ ByVal offsetRad As Double, _ rotAxis As Vector, _ center As Point, _ upVector As UnitVector) Dim matrix As Matrix matrix = ThisApplication.TransientGeometry.CreateMatrix Call matrix.SetToRotation(offsetRad, rotAxis, center) Dim newEye As Point newEye = camera.Eye Call newEye.TransformBy(matrix) camera.Eye = newEye camera.UpVector = upVector Call camera.ApplyWithoutTransition End Sub
Thank you guys in advance. I have been trying for a couple of days
Solved! Go to Solution.
Solved by Michael.Navara. Go to Solution.
This is an iLogic sample how to rotate camera around Z axis.
Sub Main()
'Get camera of active view
Dim activeView As Inventor.View = ThisApplication.ActiveView
dim cam As Camera = activeView.Camera
'Get current vector from target to eye
Dim vectorToEye as Vector = cam.Target.VectorTo(cam.Eye)
'Define rotation matrix for 30 deg around Z axis
Dim angle As Double = PI/6
Dim zAxis As Vector = ThisApplication.TransientGeometry.CreateVector(0,0,1)
Dim origin As Point = ThisApplication.TransientGeometry.CreatePoint(0,0,0)
Dim rotationMtx As Matrix = ThisApplication.TransientGeometry.CreateMatrix()
rotationMtx.SetToRotation(angle, zAxis, origin)
'Calculate new position of camera eye
vectorToEye.TransformBy(rotationMtx)
'Create new eye based on current target
dim newEye = cam.Target.Copy()
newEye.TranslateBy(vectorToEye)
cam.Eye = newEye
'Align up vector to Z axis
cam.UpVector = zAxis.AsUnitVector()
'Apply camera
cam.Apply()
'cam.ApplyWithoutTransition()
End Sub
Can't find what you're looking for? Ask the community or share your knowledge.