Navisworks API : Viewpoint (Part-1)

Welcome to the sixth tutorial of Navisworks® API series, this post is to cover how to manipulate Viewpoint’s Camera, we’ll create an add-ins that move and rotate the position of the camera and finally going to save the current Viewpoint.

And this task is Lab-10 exercise from Navisworks® SDK.(figure 1.0)

So, first things first, setting up Navisworks® Add-Ins project in the visual studio, you can follow Creating Navisworks Add-Ins tutorial to set up the project. When you are ready, in the Execute method creates two variables, doc and vpoint to store Document and Viewpoint respectively. To collect Viewpoint, doc.CurrentViewpoint property returns DocumentCurrentViewpoint object and it includes a method to get a copy of the current Viewpoint object, CreateCopy() method. (figure 1.1)

figure 1.1 – Variables

We will start how to move the camera of the current viewpoint first. To do so, we collect the current position of the camera in 3D space by using its Position property, vpoint.Position . Next, create a new position (a Point3D) based on the current position X, Y, Z values. Point3D is an object represents a position in 3D space. And set new position value to the current viewpoint position and update the current viewpoint of the document. (figure 1.2)

figure 1.2 – Move Camera Position

Below is a short demo for the camera position movement. We just moved increment of +10 to “X” direction and you might notice that ViewCube doesn’t change at all. But when we rotate, it will follows the rotation.

Demo – Move Camera Position
Demo – Rotate Camera Position

For the camera rotation, viewpoint object has a property called, Rotation which returns rotation of camera from base orientation. From the rotation object, we collect the result object ,AxisAndAngleResult, by using ToAxisAndAngle method which holds the values of the current rotational axis and angle. (figure 1.3)

figure 1.3 – Axis and Angle
figure 1.4 – Rotation3D

To create a new Rotation, (figure 1.4) we can construct a new Rotation3D object (Quaternion) with a UnitVector3D (Vector with unit length and represents a direction in 3D space) and a double (angle in radians). As you can see in (figure 1.5) , we created new angle value : 10 degree in radians and a new rotational axis : UnitVector3D(0,0,1) to rotate Z axis, as two arguments for Rotation3D constructor.

figure 1.5 – Camera Rotation

To increment rotation values, we have to write a method to multiply the current rotation and new rotation values (figure 1.6) . ( Multiply method is from Navisworks SDK Lab10 sample which is the multiplication of quaternion’s components A,B,C,D. )

figure 1.6 – Multiply

Set the current viewpoint Rotation value and update the current viewpoint of the document. Finally, saved the viewpoint with a name and add to document’s savedviewpoints. (figure 1.7)

figure 1.7 – Saved Viewpoint

That’s all for this Viewpoint Part-1 tutorial, you can find the complete source code from here, Cheers!

Author: min.naung

Founder and Developer @twentytwo.space

One thought on “Navisworks API : Viewpoint (Part-1)”

  1. Do you know why the getCamera() method might always throw a System.AccessViolation on a Viewpoint. The repo code has this method call commented out – it’s not referred to here.

    Like

Leave a Reply to Jonathon Broughton Cancel reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.