diff --git a/docs/Class_Camera.html b/docs/Class_Camera.html
index 8e1b5fe..2a4873f 100644
--- a/docs/Class_Camera.html
+++ b/docs/Class_Camera.html
@@ -54,6 +54,7 @@
diff --git a/docs/Class_EdgeSettings.html b/docs/Class_EdgeSettings.html
index 114443c..18de4f8 100644
--- a/docs/Class_EdgeSettings.html
+++ b/docs/Class_EdgeSettings.html
@@ -54,6 +54,7 @@
diff --git a/docs/Class_EmbeddedViewer.html b/docs/Class_EmbeddedViewer.html
index c19751f..50fdd21 100644
--- a/docs/Class_EmbeddedViewer.html
+++ b/docs/Class_EmbeddedViewer.html
@@ -54,6 +54,7 @@
diff --git a/docs/Class_EnvironmentSettings.html b/docs/Class_EnvironmentSettings.html
index 50edb2c..b386ee3 100644
--- a/docs/Class_EnvironmentSettings.html
+++ b/docs/Class_EnvironmentSettings.html
@@ -54,6 +54,7 @@
diff --git a/docs/Class_InputFile.html b/docs/Class_InputFile.html
index 336742c..7d04b19 100644
--- a/docs/Class_InputFile.html
+++ b/docs/Class_InputFile.html
@@ -54,6 +54,7 @@
diff --git a/docs/Class_RGBAColor.html b/docs/Class_RGBAColor.html
index 1f983bf..439b0ce 100644
--- a/docs/Class_RGBAColor.html
+++ b/docs/Class_RGBAColor.html
@@ -54,6 +54,7 @@
diff --git a/docs/Class_RGBColor.html b/docs/Class_RGBColor.html
index d1807a8..a84e934 100644
--- a/docs/Class_RGBColor.html
+++ b/docs/Class_RGBColor.html
@@ -54,6 +54,7 @@
diff --git a/docs/Enum_FileSource.html b/docs/Enum_FileSource.html
index b78e8e1..0da93f6 100644
--- a/docs/Enum_FileSource.html
+++ b/docs/Enum_FileSource.html
@@ -54,6 +54,7 @@
diff --git a/docs/Enum_NavigationMode.html b/docs/Enum_NavigationMode.html
new file mode 100644
index 0000000..ef929ff
--- /dev/null
+++ b/docs/Enum_NavigationMode.html
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+
+ Online 3D Viewer - NavigationMode
+
+
+
+
+
+
+
+
+
+
+
+
+
NavigationMode
+
Camera navigation mode.
+
Values
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Enum_ProjectionMode.html b/docs/Enum_ProjectionMode.html
index 8e5c56e..ac16d06 100644
--- a/docs/Enum_ProjectionMode.html
+++ b/docs/Enum_ProjectionMode.html
@@ -54,6 +54,7 @@
diff --git a/docs/Function_Init3DViewerElements.html b/docs/Function_Init3DViewerElements.html
index cc284f6..52cc1f2 100644
--- a/docs/Function_Init3DViewerElements.html
+++ b/docs/Function_Init3DViewerElements.html
@@ -54,6 +54,7 @@
diff --git a/docs/Function_Init3DViewerFromFileList.html b/docs/Function_Init3DViewerFromFileList.html
index b301539..e616494 100644
--- a/docs/Function_Init3DViewerFromFileList.html
+++ b/docs/Function_Init3DViewerFromFileList.html
@@ -54,6 +54,7 @@
diff --git a/docs/Function_Init3DViewerFromUrlList.html b/docs/Function_Init3DViewerFromUrlList.html
index a830b4c..c10a233 100644
--- a/docs/Function_Init3DViewerFromUrlList.html
+++ b/docs/Function_Init3DViewerFromUrlList.html
@@ -54,6 +54,7 @@
diff --git a/docs/Function_SetExternalLibLocation.html b/docs/Function_SetExternalLibLocation.html
index a26d884..c4b786a 100644
--- a/docs/Function_SetExternalLibLocation.html
+++ b/docs/Function_SetExternalLibLocation.html
@@ -54,6 +54,7 @@
diff --git a/docs/Page_ContributionGuidelines.html b/docs/Page_ContributionGuidelines.html
index 83bfa2d..af7200d 100644
--- a/docs/Page_ContributionGuidelines.html
+++ b/docs/Page_ContributionGuidelines.html
@@ -54,6 +54,7 @@
diff --git a/docs/Page_EnvironmentSetup.html b/docs/Page_EnvironmentSetup.html
index 385bdba..778cc00 100644
--- a/docs/Page_EnvironmentSetup.html
+++ b/docs/Page_EnvironmentSetup.html
@@ -54,6 +54,7 @@
diff --git a/docs/Page_Installation.html b/docs/Page_Installation.html
index c1b42e3..52f4bf0 100644
--- a/docs/Page_Installation.html
+++ b/docs/Page_Installation.html
@@ -54,6 +54,7 @@
diff --git a/docs/Page_MigrationGuide.html b/docs/Page_MigrationGuide.html
index 58f79f6..4ee3d48 100644
--- a/docs/Page_MigrationGuide.html
+++ b/docs/Page_MigrationGuide.html
@@ -54,6 +54,7 @@
diff --git a/docs/Page_Usage.html b/docs/Page_Usage.html
index 47fe392..3bd74a7 100644
--- a/docs/Page_Usage.html
+++ b/docs/Page_Usage.html
@@ -54,6 +54,7 @@
diff --git a/docs/index.html b/docs/index.html
index 4aeeccb..5ba0670 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -54,6 +54,7 @@
diff --git a/source/engine/main.js b/source/engine/main.js
index 27dafe1..0420924 100644
--- a/source/engine/main.js
+++ b/source/engine/main.js
@@ -65,7 +65,7 @@ import { ParameterListBuilder, ParameterListParser, CreateUrlBuilder, CreateUrlP
import { ModelToThreeConversionParams, ModelToThreeConversionOutput, ThreeConversionStateHandler, ThreeNodeTree, ConvertModelToThreeObject } from './threejs/threeconverter.js';
import { ThreeModelLoader } from './threejs/threemodelloader.js';
import { ThreeColorConverter, ThreeLinearToSRGBColorConverter, ThreeSRGBToLinearColorConverter, HasHighpDriverIssue, GetShadingType, ConvertThreeColorToColor, ConvertColorToThreeColor, ConvertThreeGeometryToMesh, DisposeThreeObjects, ShadingType } from './threejs/threeutils.js';
-import { Camera, CameraIsEqual3D, ProjectionMode } from './viewer/camera.js';
+import { Camera, CameraIsEqual3D, NavigationMode, ProjectionMode } from './viewer/camera.js';
import { GetIntegerFromStyle, GetDomElementExternalWidth, GetDomElementExternalHeight, GetDomElementInnerDimensions, GetDomElementClientCoordinates, CreateDomElement, AddDomElement, AddDiv, ClearDomElement, InsertDomElementBefore, InsertDomElementAfter, ShowDomElement, IsDomElementVisible, SetDomElementWidth, SetDomElementHeight, GetDomElementOuterWidth, GetDomElementOuterHeight, SetDomElementOuterWidth, SetDomElementOuterHeight, CreateDiv } from './viewer/domutils.js';
import { EmbeddedViewer, Init3DViewerFromUrlList, Init3DViewerFromFileList, Init3DViewerElements } from './viewer/embeddedviewer.js';
import { MouseInteraction, TouchInteraction, ClickDetector, Navigation, NavigationType } from './viewer/navigation.js';
@@ -296,6 +296,7 @@ export {
ShadingType,
Camera,
CameraIsEqual3D,
+ NavigationMode,
ProjectionMode,
GetIntegerFromStyle,
GetDomElementExternalWidth,
diff --git a/source/engine/viewer/camera.js b/source/engine/viewer/camera.js
index 60a5b84..809ebfb 100644
--- a/source/engine/viewer/camera.js
+++ b/source/engine/viewer/camera.js
@@ -1,6 +1,18 @@
import { CoordIsEqual3D } from '../geometry/coord3d.js';
import { IsEqual } from '../geometry/geometry.js';
+/**
+ * Camera navigation mode.
+ * @enum
+ */
+export const NavigationMode =
+{
+ /** Fixed up vector. */
+ FixedUpVector : 1,
+ /** Free orbit. */
+ FreeOrbit : 2
+};
+
/**
* Camera projection mode.
* @enum
diff --git a/source/engine/viewer/navigation.js b/source/engine/viewer/navigation.js
index 9a6fb7b..898518a 100644
--- a/source/engine/viewer/navigation.js
+++ b/source/engine/viewer/navigation.js
@@ -2,7 +2,7 @@ import { Coord2D, CoordDistance2D, SubCoord2D } from '../geometry/coord2d.js';
import { CoordDistance3D, CrossVector3D, SubCoord3D, VectorAngle3D } from '../geometry/coord3d.js';
import { DegRad, IsGreater, IsLower, IsZero } from '../geometry/geometry.js';
import { ParabolicTweenFunction, TweenCoord3D } from '../geometry/tween.js';
-import { CameraIsEqual3D } from './camera.js';
+import { CameraIsEqual3D, NavigationMode } from './camera.js';
import { GetDomElementClientCoordinates } from './domutils.js';
export class MouseInteraction
@@ -241,7 +241,7 @@ export class Navigation
this.canvas = canvas;
this.camera = camera;
this.callbacks = callbacks;
- this.fixUpVector = true;
+ this.navigationMode = NavigationMode.FixedUpVector;
this.mouse = new MouseInteraction ();
this.touch = new TouchInteraction ();
@@ -282,14 +282,14 @@ export class Navigation
this.onContext = onContext;
}
- IsFixUpVector ()
+ GetNavigationMode ()
{
- return this.fixUpVector;
+ return this.navigationMode;
}
- SetFixUpVector (isFixUpVector)
+ SetNavigationMode (navigationMode)
{
- this.fixUpVector = isFixUpVector;
+ this.navigationMode = navigationMode;
}
GetCamera ()
@@ -522,14 +522,14 @@ export class Navigation
let viewDirection = SubCoord3D (this.camera.center, this.camera.eye).Normalize ();
let horizontalDirection = CrossVector3D (viewDirection, this.camera.up).Normalize ();
- if (this.fixUpVector) {
+ if (this.navigationMode === NavigationMode.FixedUpVector) {
let originalAngle = VectorAngle3D (viewDirection, this.camera.up);
let newAngle = originalAngle + radAngleY;
if (IsGreater (newAngle, 0.0) && IsLower (newAngle, Math.PI)) {
this.camera.eye.Rotate (horizontalDirection, -radAngleY, this.camera.center);
}
this.camera.eye.Rotate (this.camera.up, -radAngleX, this.camera.center);
- } else {
+ } else if (this.navigationMode === NavigationMode.FreeOrbit) {
let verticalDirection = CrossVector3D (horizontalDirection, viewDirection).Normalize ();
this.camera.eye.Rotate (horizontalDirection, -radAngleY, this.camera.center);
this.camera.eye.Rotate (verticalDirection, -radAngleX, this.camera.center);
diff --git a/source/engine/viewer/viewer.js b/source/engine/viewer/viewer.js
index bb9d191..9c3a443 100644
--- a/source/engine/viewer/viewer.js
+++ b/source/engine/viewer/viewer.js
@@ -2,7 +2,7 @@ import { Coord3D, CoordDistance3D, SubCoord3D } from '../geometry/coord3d.js';
import { DegRad, Direction, IsEqual } from '../geometry/geometry.js';
import { ColorComponentToFloat } from '../model/color.js';
import { ShadingType } from '../threejs/threeutils.js';
-import { Camera, ProjectionMode } from './camera.js';
+import { Camera, NavigationMode, ProjectionMode } from './camera.js';
import { GetDomElementInnerDimensions } from './domutils.js';
import { Navigation } from './navigation.js';
import { ShadingModel } from './shadingmodel.js';
@@ -353,16 +353,16 @@ export class Viewer
this.Render ();
}
- IsFixUpVector ()
+ GetNavigationMode ()
{
- return this.navigation.IsFixUpVector ();
+ return this.navigation.GetNavigationMode ();
}
- SetFixUpVector (isFixUpVector)
+ SetNavigationMode (navigationMode)
{
let oldCamera = this.navigation.GetCamera ();
- let newCamera = this.upVector.SetFixed (isFixUpVector, oldCamera);
- this.navigation.SetFixUpVector (isFixUpVector);
+ let newCamera = this.upVector.SetFixed (navigationMode === NavigationMode.FixedUpVector, oldCamera);
+ this.navigation.SetNavigationMode (navigationMode);
if (newCamera !== null) {
this.navigation.MoveCamera (newCamera, this.settings.animationSteps);
}
diff --git a/source/website/website.js b/source/website/website.js
index 2163a4d..bddf998 100644
--- a/source/website/website.js
+++ b/source/website/website.js
@@ -1,7 +1,7 @@
import { GetFileExtension, TransformFileHostUrls } from '../engine/io/fileutils.js';
import { InputFilesFromFileObjects, InputFilesFromUrls } from '../engine/import/importerfiles.js';
import { ImportErrorCode, ImportSettings } from '../engine/import/importer.js';
-import { ProjectionMode } from '../engine/viewer/camera.js';
+import { NavigationMode, ProjectionMode } from '../engine/viewer/camera.js';
import { RGBColor } from '../engine/model/color.js';
import { Viewer } from '../engine/viewer/viewer.js';
import { AddDiv, AddDomElement, ShowDomElement, SetDomElementOuterHeight, CreateDomElement, GetDomElementOuterWidth, GetDomElementOuterHeight } from '../engine/viewer/domutils.js';
@@ -675,9 +675,9 @@ export class Website
AddSeparator (this.toolbar, ['only_full_width', 'only_on_model']);
AddRadioButton (this.toolbar, ['fix_up_on', 'fix_up_off'], ['Fixed up vector', 'Free orbit'], 0, ['only_full_width', 'only_on_model'], (buttonIndex) => {
if (buttonIndex === 0) {
- this.viewer.SetFixUpVector (true);
+ this.viewer.SetNavigationMode (NavigationMode.FixedUpVector);
} else if (buttonIndex === 1) {
- this.viewer.SetFixUpVector (false);
+ this.viewer.SetNavigationMode (NavigationMode.FreeOrbit);
}
});
AddSeparator (this.toolbar, ['only_full_width', 'only_on_model']);