From 34a64b5d838eab58213f73d1ccd3d5227556311d Mon Sep 17 00:00:00 2001 From: kovacsv Date: Sat, 14 Oct 2023 07:58:28 +0200 Subject: [PATCH] Introduce NavigationMode enum. --- docs/Class_Camera.html | 1 + docs/Class_EdgeSettings.html | 1 + docs/Class_EmbeddedViewer.html | 1 + docs/Class_EnvironmentSettings.html | 1 + docs/Class_InputFile.html | 1 + docs/Class_RGBAColor.html | 1 + docs/Class_RGBColor.html | 1 + docs/Enum_FileSource.html | 1 + docs/Enum_NavigationMode.html | 83 +++++++++++++++++++++ docs/Enum_ProjectionMode.html | 1 + docs/Function_Init3DViewerElements.html | 1 + docs/Function_Init3DViewerFromFileList.html | 1 + docs/Function_Init3DViewerFromUrlList.html | 1 + docs/Function_SetExternalLibLocation.html | 1 + docs/Page_ContributionGuidelines.html | 1 + docs/Page_EnvironmentSetup.html | 1 + docs/Page_Installation.html | 1 + docs/Page_MigrationGuide.html | 1 + docs/Page_Usage.html | 1 + docs/index.html | 1 + source/engine/main.js | 3 +- source/engine/viewer/camera.js | 12 +++ source/engine/viewer/navigation.js | 16 ++-- source/engine/viewer/viewer.js | 12 +-- source/website/website.js | 6 +- 25 files changed, 133 insertions(+), 18 deletions(-) create mode 100644 docs/Enum_NavigationMode.html 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

+
+FixedUpVector +
+
+
Fixed up vector.
+
+
+FreeOrbit +
+
+
Free orbit.
+
+ +
+ + + + 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']);