@babylonjs/core 8.3.0 → 8.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Animations/animation.d.ts +4 -0
- package/Animations/animation.js +22 -13
- package/Animations/animation.js.map +1 -1
- package/Animations/animation.optimizations.d.ts +31 -0
- package/Animations/animation.optimizations.js +41 -0
- package/Animations/animation.optimizations.js.map +1 -0
- package/Animations/index.d.ts +1 -0
- package/Animations/index.js +1 -0
- package/Animations/index.js.map +1 -1
- package/Animations/pathCursor.js +3 -1
- package/Animations/pathCursor.js.map +1 -1
- package/Animations/runtimeAnimation.d.ts +3 -1
- package/Animations/runtimeAnimation.js +127 -116
- package/Animations/runtimeAnimation.js.map +1 -1
- package/Audio/audioSceneComponent.js +4 -4
- package/Audio/audioSceneComponent.js.map +1 -1
- package/Behaviors/Meshes/attachToBoxBehavior.js +6 -6
- package/Behaviors/Meshes/attachToBoxBehavior.js.map +1 -1
- package/Behaviors/Meshes/fadeInOutBehavior.js +3 -2
- package/Behaviors/Meshes/fadeInOutBehavior.js.map +1 -1
- package/Behaviors/Meshes/multiPointerScaleBehavior.js +6 -4
- package/Behaviors/Meshes/multiPointerScaleBehavior.js.map +1 -1
- package/Behaviors/Meshes/sixDofDragBehavior.js +3 -2
- package/Behaviors/Meshes/sixDofDragBehavior.js.map +1 -1
- package/Bones/skeleton.js +6 -6
- package/Bones/skeleton.js.map +1 -1
- package/Cameras/Inputs/followCameraKeyboardMoveInput.js +2 -2
- package/Cameras/Inputs/followCameraKeyboardMoveInput.js.map +1 -1
- package/Cameras/VR/vrExperienceHelper.js +2 -2
- package/Cameras/VR/vrExperienceHelper.js.map +1 -1
- package/Cameras/arcRotateCamera.js +6 -2
- package/Cameras/arcRotateCamera.js.map +1 -1
- package/Cameras/camera.js +2 -2
- package/Cameras/camera.js.map +1 -1
- package/Cameras/deviceOrientationCamera.js +3 -2
- package/Cameras/deviceOrientationCamera.js.map +1 -1
- package/Collisions/gpuPicker.d.ts +1 -0
- package/Collisions/gpuPicker.js +9 -0
- package/Collisions/gpuPicker.js.map +1 -1
- package/Debug/axesViewer.js +3 -2
- package/Debug/axesViewer.js.map +1 -1
- package/Debug/directionalLightFrustumViewer.js +4 -4
- package/Debug/directionalLightFrustumViewer.js.map +1 -1
- package/Debug/physicsViewer.js +7 -6
- package/Debug/physicsViewer.js.map +1 -1
- package/Debug/skeletonViewer.js +4 -4
- package/Debug/skeletonViewer.js.map +1 -1
- package/Engines/Native/nativeInterfaces.d.ts +6 -7
- package/Engines/Native/nativeInterfaces.js.map +1 -1
- package/Engines/Processors/shaderCodeNode.js +2 -2
- package/Engines/Processors/shaderCodeNode.js.map +1 -1
- package/Engines/abstractEngine.d.ts +1 -0
- package/Engines/abstractEngine.js +14 -8
- package/Engines/abstractEngine.js.map +1 -1
- package/Engines/constants.d.ts +27 -5
- package/Engines/constants.js +27 -5
- package/Engines/constants.js.map +1 -1
- package/Engines/engine.js +8 -8
- package/Engines/engine.js.map +1 -1
- package/Engines/nativeEngine.js +13 -27
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/webgpuEngine.js +6 -2
- package/Engines/webgpuEngine.js.map +1 -1
- package/FlowGraph/Blocks/Data/Transformers/flowGraphJsonPointerParserBlock.js +2 -2
- package/FlowGraph/Blocks/Data/Transformers/flowGraphJsonPointerParserBlock.js.map +1 -1
- package/FlowGraph/Blocks/Data/flowGraphDataSwitchBlock.js +3 -2
- package/FlowGraph/Blocks/Data/flowGraphDataSwitchBlock.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.js +3 -2
- package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphSendCustomEventBlock.js +2 -2
- package/FlowGraph/Blocks/Event/flowGraphSendCustomEventBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphSwitchBlock.js +3 -2
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphSwitchBlock.js.map +1 -1
- package/FlowGraph/flowGraphAsyncExecutionBlock.js +5 -3
- package/FlowGraph/flowGraphAsyncExecutionBlock.js.map +1 -1
- package/FlowGraph/flowGraphBlock.js +3 -2
- package/FlowGraph/flowGraphBlock.js.map +1 -1
- package/FlowGraph/flowGraphCoordinator.js +10 -6
- package/FlowGraph/flowGraphCoordinator.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js +2 -2
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -1
- package/FrameGraph/Node/nodeRenderGraphBlock.js +5 -4
- package/FrameGraph/Node/nodeRenderGraphBlock.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/depthOfFieldMergeTask.js +4 -3
- package/FrameGraph/Tasks/PostProcesses/depthOfFieldMergeTask.js.map +1 -1
- package/Gamepads/gamepadManager.js +2 -2
- package/Gamepads/gamepadManager.js.map +1 -1
- package/Gizmos/axisDragGizmo.js +3 -2
- package/Gizmos/axisDragGizmo.js.map +1 -1
- package/Gizmos/axisScaleGizmo.js +6 -4
- package/Gizmos/axisScaleGizmo.js.map +1 -1
- package/Gizmos/boundingBoxGizmo.js +28 -26
- package/Gizmos/boundingBoxGizmo.js.map +1 -1
- package/Gizmos/cameraGizmo.js +6 -3
- package/Gizmos/cameraGizmo.js.map +1 -1
- package/Gizmos/gizmo.js +11 -10
- package/Gizmos/gizmo.js.map +1 -1
- package/Gizmos/gizmoManager.js +16 -12
- package/Gizmos/gizmoManager.js.map +1 -1
- package/Gizmos/lightGizmo.js +3 -2
- package/Gizmos/lightGizmo.js.map +1 -1
- package/Gizmos/planeDragGizmo.js +3 -2
- package/Gizmos/planeDragGizmo.js.map +1 -1
- package/Gizmos/planeRotationGizmo.js +3 -2
- package/Gizmos/planeRotationGizmo.js.map +1 -1
- package/Gizmos/positionGizmo.js +41 -28
- package/Gizmos/positionGizmo.js.map +1 -1
- package/Gizmos/rotationGizmo.js +26 -18
- package/Gizmos/rotationGizmo.js.map +1 -1
- package/Gizmos/scaleGizmo.js +47 -32
- package/Gizmos/scaleGizmo.js.map +1 -1
- package/Layers/effectLayerSceneComponent.js +4 -4
- package/Layers/effectLayerSceneComponent.js.map +1 -1
- package/Layers/layerSceneComponent.js +4 -4
- package/Layers/layerSceneComponent.js.map +1 -1
- package/LensFlares/lensFlareSystemSceneComponent.js +4 -4
- package/LensFlares/lensFlareSystemSceneComponent.js.map +1 -1
- package/Lights/Shadows/shadowGenerator.js +3 -3
- package/Lights/Shadows/shadowGenerator.js.map +1 -1
- package/Lights/light.js +4 -4
- package/Lights/light.js.map +1 -1
- package/Loading/Plugins/babylonFileLoader.js +54 -46
- package/Loading/Plugins/babylonFileLoader.js.map +1 -1
- package/Loading/loadingScreen.js +4 -3
- package/Loading/loadingScreen.js.map +1 -1
- package/Loading/sceneLoader.js +15 -12
- package/Loading/sceneLoader.js.map +1 -1
- package/Materials/Node/Blocks/Dual/currentScreenBlock.js +9 -3
- package/Materials/Node/Blocks/Dual/currentScreenBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js +11 -0
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
- package/Materials/Node/Blocks/Input/inputBlock.js +18 -31
- package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
- package/Materials/Node/Blocks/baseMathBlock.js +3 -1
- package/Materials/Node/Blocks/baseMathBlock.js.map +1 -1
- package/Materials/Node/Blocks/customBlock.js +53 -43
- package/Materials/Node/Blocks/customBlock.js.map +1 -1
- package/Materials/Node/Enums/nodeMaterialModes.d.ts +3 -1
- package/Materials/Node/Enums/nodeMaterialModes.js +2 -0
- package/Materials/Node/Enums/nodeMaterialModes.js.map +1 -1
- package/Materials/Node/nodeMaterial.d.ts +5 -0
- package/Materials/Node/nodeMaterial.js +33 -20
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/Node/nodeMaterialBlock.js +7 -4
- package/Materials/Node/nodeMaterialBlock.js.map +1 -1
- package/Materials/Node/nodeMaterialBuildState.d.ts +13 -2
- package/Materials/Node/nodeMaterialBuildState.js +72 -7
- package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
- package/Materials/Node/nodeMaterialDefault.d.ts +5 -0
- package/Materials/Node/nodeMaterialDefault.js +28 -0
- package/Materials/Node/nodeMaterialDefault.js.map +1 -1
- package/Materials/Textures/cubeTexture.js +3 -1
- package/Materials/Textures/cubeTexture.js.map +1 -1
- package/Materials/Textures/videoTexture.js +5 -4
- package/Materials/Textures/videoTexture.js.map +1 -1
- package/Materials/materialDefines.js +3 -1
- package/Materials/materialDefines.js.map +1 -1
- package/Materials/multiMaterial.js +3 -1
- package/Materials/multiMaterial.js.map +1 -1
- package/Materials/shaderMaterial.js +3 -2
- package/Materials/shaderMaterial.js.map +1 -1
- package/Meshes/Compression/dracoEncoder.js +2 -2
- package/Meshes/Compression/dracoEncoder.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +8 -8
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
- package/Meshes/GreasedLine/greasedLineMesh.js +6 -6
- package/Meshes/GreasedLine/greasedLineMesh.js.map +1 -1
- package/Meshes/GreasedLine/greasedLineRibbonMesh.js +4 -3
- package/Meshes/GreasedLine/greasedLineRibbonMesh.js.map +1 -1
- package/Meshes/Node/Blocks/mathBlock.js +3 -1
- package/Meshes/Node/Blocks/mathBlock.js.map +1 -1
- package/Meshes/Node/nodeGeometryBlock.js +8 -5
- package/Meshes/Node/nodeGeometryBlock.js.map +1 -1
- package/Meshes/abstractMesh.js +2 -2
- package/Meshes/abstractMesh.js.map +1 -1
- package/Meshes/geodesicMesh.js +2 -2
- package/Meshes/geodesicMesh.js.map +1 -1
- package/Meshes/mesh.js +6 -6
- package/Meshes/mesh.js.map +1 -1
- package/Meshes/mesh.vertexData.functions.js +11 -10
- package/Meshes/mesh.vertexData.functions.js.map +1 -1
- package/Meshes/mesh.vertexData.subdivide.js +10 -10
- package/Meshes/mesh.vertexData.subdivide.js.map +1 -1
- package/Meshes/meshSimplification.js +10 -10
- package/Meshes/meshSimplification.js.map +1 -1
- package/Meshes/meshUtils.js +6 -3
- package/Meshes/meshUtils.js.map +1 -1
- package/Meshes/polygonMesh.js +10 -10
- package/Meshes/polygonMesh.js.map +1 -1
- package/Misc/PerformanceViewer/performanceViewerCollector.js +4 -4
- package/Misc/PerformanceViewer/performanceViewerCollector.js.map +1 -1
- package/Misc/arrayTools.js +2 -2
- package/Misc/arrayTools.js.map +1 -1
- package/Misc/asyncLock.js +9 -9
- package/Misc/asyncLock.js.map +1 -1
- package/Misc/basis.js +4 -2
- package/Misc/basis.js.map +1 -1
- package/Misc/deepCopier.js +3 -2
- package/Misc/deepCopier.js.map +1 -1
- package/Misc/deepMerger.js +3 -2
- package/Misc/deepMerger.js.map +1 -1
- package/Misc/fileTools.js +4 -4
- package/Misc/fileTools.js.map +1 -1
- package/Misc/greasedLineTools.js +14 -13
- package/Misc/greasedLineTools.js.map +1 -1
- package/Misc/logger.js +3 -2
- package/Misc/logger.js.map +1 -1
- package/Misc/observable.extensions.js +4 -4
- package/Misc/observable.extensions.js.map +1 -1
- package/Misc/sceneSerializer.js +5 -4
- package/Misc/sceneSerializer.js.map +1 -1
- package/Misc/snapshotRenderingHelper.js +3 -1
- package/Misc/snapshotRenderingHelper.js.map +1 -1
- package/Misc/tags.js +2 -2
- package/Misc/tags.js.map +1 -1
- package/Misc/trajectoryClassifier.js +8 -8
- package/Misc/trajectoryClassifier.js.map +1 -1
- package/Particles/IParticleSystem.d.ts +1 -1
- package/Particles/IParticleSystem.js.map +1 -1
- package/Particles/baseParticleSystem.d.ts +11 -3
- package/Particles/baseParticleSystem.js +37 -3
- package/Particles/baseParticleSystem.js.map +1 -1
- package/Particles/gpuParticleSystem.js +1 -14
- package/Particles/gpuParticleSystem.js.map +1 -1
- package/Particles/particle.js +2 -2
- package/Particles/particle.js.map +1 -1
- package/Particles/particleSystem.js +15 -13
- package/Particles/particleSystem.js.map +1 -1
- package/Particles/thinParticleSystem.js +3 -16
- package/Particles/thinParticleSystem.js.map +1 -1
- package/Physics/physicsHelper.js +18 -14
- package/Physics/physicsHelper.js.map +1 -1
- package/Physics/v1/Plugins/ammoJSPlugin.js +10 -8
- package/Physics/v1/Plugins/ammoJSPlugin.js.map +1 -1
- package/Physics/v1/Plugins/cannonJSPlugin.js +13 -8
- package/Physics/v1/Plugins/cannonJSPlugin.js.map +1 -1
- package/Physics/v1/Plugins/oimoJSPlugin.js +9 -8
- package/Physics/v1/Plugins/oimoJSPlugin.js.map +1 -1
- package/Physics/v1/physicsEngine.js +4 -4
- package/Physics/v1/physicsEngine.js.map +1 -1
- package/Physics/v1/physicsImpostor.js +10 -21
- package/Physics/v1/physicsImpostor.js.map +1 -1
- package/Physics/v2/Plugins/havokPlugin.js +12 -10
- package/Physics/v2/Plugins/havokPlugin.js.map +1 -1
- package/Physics/v2/ragdoll.js +4 -4
- package/Physics/v2/ragdoll.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js +3 -2
- package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderEffect.js +8 -6
- package/PostProcesses/RenderPipeline/postProcessRenderEffect.js.map +1 -1
- package/PostProcesses/depthOfFieldMergePostProcess.js +4 -3
- package/PostProcesses/depthOfFieldMergePostProcess.js.map +1 -1
- package/Rendering/GlobalIllumination/giRSMManager.js +6 -6
- package/Rendering/GlobalIllumination/giRSMManager.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.js +14 -14
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js +14 -12
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js.map +1 -1
- package/Rendering/iblCdfGenerator.js +4 -4
- package/Rendering/iblCdfGenerator.js.map +1 -1
- package/Rendering/objectRenderer.js +2 -2
- package/Rendering/objectRenderer.js.map +1 -1
- package/Rendering/reflectiveShadowMap.js +7 -5
- package/Rendering/reflectiveShadowMap.js.map +1 -1
- package/Sprites/spriteMap.js +2 -2
- package/Sprites/spriteMap.js.map +1 -1
- package/XR/features/WebXRAbstractFeature.js +2 -2
- package/XR/features/WebXRAbstractFeature.js.map +1 -1
- package/XR/features/WebXRAnchorSystem.js +4 -4
- package/XR/features/WebXRAnchorSystem.js.map +1 -1
- package/XR/features/WebXRBackgroundRemover.js +3 -1
- package/XR/features/WebXRBackgroundRemover.js.map +1 -1
- package/XR/features/WebXRControllerMovement.js +6 -3
- package/XR/features/WebXRControllerMovement.js.map +1 -1
- package/XR/features/WebXRControllerPhysics.js +12 -7
- package/XR/features/WebXRControllerPhysics.js.map +1 -1
- package/XR/features/WebXRControllerPointerSelection.js +12 -7
- package/XR/features/WebXRControllerPointerSelection.js.map +1 -1
- package/XR/features/WebXRControllerTeleportation.js +11 -7
- package/XR/features/WebXRControllerTeleportation.js.map +1 -1
- package/XR/features/WebXRDepthSensing.js +6 -6
- package/XR/features/WebXRDepthSensing.js.map +1 -1
- package/XR/features/WebXRHandTracking.js +60 -24
- package/XR/features/WebXRHandTracking.js.map +1 -1
- package/XR/features/WebXRHitTest.js +4 -4
- package/XR/features/WebXRHitTest.js.map +1 -1
- package/XR/features/WebXRImageTracking.js +2 -2
- package/XR/features/WebXRImageTracking.js.map +1 -1
- package/XR/features/WebXRLayers.js +2 -2
- package/XR/features/WebXRLayers.js.map +1 -1
- package/XR/features/WebXRNearInteraction.js +12 -7
- package/XR/features/WebXRNearInteraction.js.map +1 -1
- package/XR/features/WebXRRawCameraAccess.js +9 -4
- package/XR/features/WebXRRawCameraAccess.js.map +1 -1
- package/XR/features/WebXRSpaceWarp.js +2 -2
- package/XR/features/WebXRSpaceWarp.js.map +1 -1
- package/XR/motionController/webXRAbstractMotionController.js +19 -8
- package/XR/motionController/webXRAbstractMotionController.js.map +1 -1
- package/XR/motionController/webXRGenericMotionController.js +2 -2
- package/XR/motionController/webXRGenericMotionController.js.map +1 -1
- package/XR/motionController/webXRHTCViveMotionController.js +5 -4
- package/XR/motionController/webXRHTCViveMotionController.js.map +1 -1
- package/XR/motionController/webXRMicrosoftMixedRealityController.js +9 -6
- package/XR/motionController/webXRMicrosoftMixedRealityController.js.map +1 -1
- package/XR/motionController/webXRMotionControllerManager.js +4 -4
- package/XR/motionController/webXRMotionControllerManager.js.map +1 -1
- package/XR/motionController/webXROculusTouchMotionController.js +5 -4
- package/XR/motionController/webXROculusTouchMotionController.js.map +1 -1
- package/XR/motionController/webXRProfiledMotionController.js +15 -10
- package/XR/motionController/webXRProfiledMotionController.js.map +1 -1
- package/XR/webXRCamera.js +3 -2
- package/XR/webXRCamera.js.map +1 -1
- package/XR/webXREnterExitUI.js +5 -4
- package/XR/webXREnterExitUI.js.map +1 -1
- package/XR/webXRExperienceHelper.js +2 -2
- package/XR/webXRExperienceHelper.js.map +1 -1
- package/XR/webXRFeaturesManager.js +10 -7
- package/XR/webXRFeaturesManager.js.map +1 -1
- package/XR/webXRInput.js +8 -8
- package/XR/webXRInput.js.map +1 -1
- package/XR/webXRInputSource.js +4 -1
- package/XR/webXRInputSource.js.map +1 -1
- package/XR/webXRRenderTargetTextureProvider.js +3 -1
- package/XR/webXRRenderTargetTextureProvider.js.map +1 -1
- package/assetContainer.js +156 -135
- package/assetContainer.js.map +1 -1
- package/node.js +2 -2
- package/node.js.map +1 -1
- package/package.json +1 -1
- package/scene.js +18 -11
- package/scene.js.map +1 -1
package/Meshes/geodesicMesh.js
CHANGED
|
@@ -682,7 +682,7 @@ export class GeodesicData extends PolyhedronData {
|
|
|
682
682
|
this.adjacentFaces = [];
|
|
683
683
|
for (let m = 0; m < map.length; m++) {
|
|
684
684
|
goldbergPolyhedronData.face[m] = this.setOrder(m, map[m].concat([]));
|
|
685
|
-
map[m]
|
|
685
|
+
for (const el of map[m]) {
|
|
686
686
|
cx = 0;
|
|
687
687
|
cy = 0;
|
|
688
688
|
cz = 0;
|
|
@@ -694,7 +694,7 @@ export class GeodesicData extends PolyhedronData {
|
|
|
694
694
|
cz += vertex[2];
|
|
695
695
|
}
|
|
696
696
|
goldbergPolyhedronData.vertex[el] = [cx / 3, cy / 3, cz / 3];
|
|
697
|
-
}
|
|
697
|
+
}
|
|
698
698
|
}
|
|
699
699
|
return goldbergPolyhedronData;
|
|
700
700
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geodesicMesh.js","sourceRoot":"","sources":["../../../../dev/core/src/Meshes/geodesicMesh.ts"],"names":[],"mappings":"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","sourcesContent":["import { Vector3, TmpVectors } from \"../Maths/math.vector\";\r\nimport { HighestCommonFactor } from \"../Maths/math.scalar.functions\";\r\nimport { PHI } from \"../Maths/math.constants\";\r\nimport { _IsoVector } from \"../Maths/math.isovector\";\r\n\r\n/**\r\n * Class representing data for one face OAB of an equilateral icosahedron\r\n * When O is the isovector (0, 0), A is isovector (m, n)\r\n * @internal\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class _PrimaryIsoTriangle {\r\n //properties\r\n public m: number;\r\n public n: number;\r\n public cartesian: Vector3[] = [];\r\n public vertices: _IsoVector[] = [];\r\n public max: number[] = [];\r\n public min: number[] = [];\r\n public vecToidx: { [key: string]: number };\r\n public vertByDist: { [key: string]: number[] };\r\n public closestTo: number[][] = [];\r\n\r\n public innerFacets: string[][] = [];\r\n public isoVecsABOB: _IsoVector[][] = [];\r\n public isoVecsOBOA: _IsoVector[][] = [];\r\n public isoVecsBAOA: _IsoVector[][] = [];\r\n public vertexTypes: number[][] = [];\r\n\r\n public coau: number;\r\n public cobu: number;\r\n public coav: number;\r\n public cobv: number;\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public IDATA: PolyhedronData = new PolyhedronData(\r\n \"icosahedron\",\r\n \"Regular\",\r\n [\r\n [0, PHI, -1],\r\n [-PHI, 1, 0],\r\n [-1, 0, -PHI],\r\n [1, 0, -PHI],\r\n [PHI, 1, 0],\r\n [0, PHI, 1],\r\n [-1, 0, PHI],\r\n [-PHI, -1, 0],\r\n [0, -PHI, -1],\r\n [PHI, -1, 0],\r\n [1, 0, PHI],\r\n [0, -PHI, 1],\r\n ],\r\n [\r\n [0, 2, 1],\r\n [0, 3, 2],\r\n [0, 4, 3],\r\n [0, 5, 4],\r\n [0, 1, 5],\r\n [7, 6, 1],\r\n [8, 7, 2],\r\n [9, 8, 3],\r\n [10, 9, 4],\r\n [6, 10, 5],\r\n [2, 7, 1],\r\n [3, 8, 2],\r\n [4, 9, 3],\r\n [5, 10, 4],\r\n [1, 6, 5],\r\n [11, 6, 7],\r\n [11, 7, 8],\r\n [11, 8, 9],\r\n [11, 9, 10],\r\n [11, 10, 6],\r\n ]\r\n );\r\n\r\n /**\r\n * Creates the PrimaryIsoTriangle Triangle OAB\r\n * @param m an integer\r\n * @param n an integer\r\n */\r\n\r\n //operators\r\n public setIndices() {\r\n let indexCount = 12; // 12 vertices already assigned\r\n const vecToidx: { [key: string]: number } = {}; //maps iso-vectors to indexCount;\r\n const m = this.m;\r\n const n = this.n;\r\n let g = m; // hcf of m, n when n != 0\r\n let m1 = 1;\r\n let n1 = 0;\r\n if (n !== 0) {\r\n g = HighestCommonFactor(m, n);\r\n }\r\n m1 = m / g;\r\n n1 = n / g;\r\n\r\n let fr: number | string; //face to the right of current face\r\n let rot: number | string; //rotation about which vertex for fr\r\n let O: number;\r\n let A: number;\r\n let B: number;\r\n const oVec: _IsoVector = _IsoVector.Zero();\r\n const aVec = new _IsoVector(m, n);\r\n const bVec = new _IsoVector(-n, m + n);\r\n const oaVec: _IsoVector = _IsoVector.Zero();\r\n const abVec: _IsoVector = _IsoVector.Zero();\r\n const obVec: _IsoVector = _IsoVector.Zero();\r\n let verts: number[] = [];\r\n let idx: string;\r\n let idxR: string;\r\n let isoId: string;\r\n let isoIdR: string;\r\n\r\n const closestTo: number[][] = [];\r\n const vDist = this.vertByDist;\r\n\r\n const matchIdx = (f: number, fr: number, isoId: string, isoIdR: string) => {\r\n idx = f + \"|\" + isoId;\r\n idxR = fr + \"|\" + isoIdR;\r\n if (!(idx in vecToidx || idxR in vecToidx)) {\r\n vecToidx[idx] = indexCount;\r\n vecToidx[idxR] = indexCount;\r\n indexCount++;\r\n } else if (idx in vecToidx && !(idxR in vecToidx)) {\r\n vecToidx[idxR] = vecToidx[idx];\r\n } else if (idxR in vecToidx && !(idx in vecToidx)) {\r\n vecToidx[idx] = vecToidx[idxR];\r\n }\r\n if (vDist[isoId][0] > 2) {\r\n closestTo[vecToidx[idx]] = [-vDist[isoId][0], vDist[isoId][1], vecToidx[idx]];\r\n } else {\r\n closestTo[vecToidx[idx]] = [verts[vDist[isoId][0]], vDist[isoId][1], vecToidx[idx]];\r\n }\r\n };\r\n\r\n this.IDATA.edgematch = [\r\n [1, \"B\"],\r\n [2, \"B\"],\r\n [3, \"B\"],\r\n [4, \"B\"],\r\n [0, \"B\"],\r\n [10, \"O\", 14, \"A\"],\r\n [11, \"O\", 10, \"A\"],\r\n [12, \"O\", 11, \"A\"],\r\n [13, \"O\", 12, \"A\"],\r\n [14, \"O\", 13, \"A\"],\r\n [0, \"O\"],\r\n [1, \"O\"],\r\n [2, \"O\"],\r\n [3, \"O\"],\r\n [4, \"O\"],\r\n [19, \"B\", 5, \"A\"],\r\n [15, \"B\", 6, \"A\"],\r\n [16, \"B\", 7, \"A\"],\r\n [17, \"B\", 8, \"A\"],\r\n [18, \"B\", 9, \"A\"],\r\n ];\r\n\r\n /***edges AB to OB***** rotation about B*/\r\n for (let f = 0; f < 20; f++) {\r\n //f current face\r\n\r\n verts = this.IDATA.face[f];\r\n O = verts[2];\r\n A = verts[1];\r\n B = verts[0];\r\n\r\n isoId = oVec.x + \"|\" + oVec.y;\r\n idx = f + \"|\" + isoId;\r\n if (!(idx in vecToidx)) {\r\n vecToidx[idx] = O;\r\n closestTo[O] = [verts[vDist[isoId][0]], vDist[isoId][1]];\r\n }\r\n\r\n isoId = aVec.x + \"|\" + aVec.y;\r\n idx = f + \"|\" + isoId;\r\n if (!(idx in vecToidx)) {\r\n vecToidx[idx] = A;\r\n closestTo[A] = [verts[vDist[isoId][0]], vDist[isoId][1]];\r\n }\r\n\r\n isoId = bVec.x + \"|\" + bVec.y;\r\n idx = f + \"|\" + isoId;\r\n if (!(idx in vecToidx)) {\r\n vecToidx[idx] = B;\r\n closestTo[B] = [verts[vDist[isoId][0]], vDist[isoId][1]];\r\n }\r\n\r\n //for edge vertices\r\n fr = <number>this.IDATA.edgematch[f][0];\r\n rot = <string>this.IDATA.edgematch[f][1];\r\n if (rot === \"B\") {\r\n for (let i = 1; i < g; i++) {\r\n abVec.x = m - i * (m1 + n1);\r\n abVec.y = n + i * m1;\r\n obVec.x = -i * n1;\r\n obVec.y = i * (m1 + n1);\r\n isoId = abVec.x + \"|\" + abVec.y;\r\n isoIdR = obVec.x + \"|\" + obVec.y;\r\n matchIdx(f, fr, isoId, isoIdR);\r\n }\r\n }\r\n\r\n if (rot === \"O\") {\r\n for (let i = 1; i < g; i++) {\r\n obVec.x = -i * n1;\r\n obVec.y = i * (m1 + n1);\r\n oaVec.x = i * m1;\r\n oaVec.y = i * n1;\r\n isoId = obVec.x + \"|\" + obVec.y;\r\n isoIdR = oaVec.x + \"|\" + oaVec.y;\r\n matchIdx(f, fr, isoId, isoIdR);\r\n }\r\n }\r\n\r\n fr = <number>this.IDATA.edgematch[f][2];\r\n rot = <string>this.IDATA.edgematch[f][3];\r\n if (rot && rot === \"A\") {\r\n for (let i = 1; i < g; i++) {\r\n oaVec.x = i * m1;\r\n oaVec.y = i * n1;\r\n abVec.x = m - (g - i) * (m1 + n1); //reversed for BA\r\n abVec.y = n + (g - i) * m1; //reversed for BA\r\n isoId = oaVec.x + \"|\" + oaVec.y;\r\n isoIdR = abVec.x + \"|\" + abVec.y;\r\n matchIdx(f, fr, isoId, isoIdR);\r\n }\r\n }\r\n\r\n for (let i = 0; i < this.vertices.length; i++) {\r\n isoId = this.vertices[i].x + \"|\" + this.vertices[i].y;\r\n idx = f + \"|\" + isoId;\r\n if (!(idx in vecToidx)) {\r\n vecToidx[idx] = indexCount++;\r\n if (vDist[isoId][0] > 2) {\r\n closestTo[vecToidx[idx]] = [-vDist[isoId][0], vDist[isoId][1], vecToidx[idx]];\r\n } else {\r\n closestTo[vecToidx[idx]] = [verts[vDist[isoId][0]], vDist[isoId][1], vecToidx[idx]];\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.closestTo = closestTo;\r\n this.vecToidx = vecToidx;\r\n }\r\n\r\n public calcCoeffs() {\r\n const m = this.m;\r\n const n = this.n;\r\n const thirdR3 = Math.sqrt(3) / 3;\r\n\r\n const LSQD = m * m + n * n + m * n;\r\n\r\n this.coau = (m + n) / LSQD;\r\n this.cobu = -n / LSQD;\r\n this.coav = (-thirdR3 * (m - n)) / LSQD;\r\n this.cobv = (thirdR3 * (2 * m + n)) / LSQD;\r\n }\r\n\r\n public createInnerFacets() {\r\n const m = this.m;\r\n const n = this.n;\r\n for (let y = 0; y < n + m + 1; y++) {\r\n for (let x = this.min[y]; x < this.max[y] + 1; x++) {\r\n if (x < this.max[y] && x < this.max[y + 1] + 1) {\r\n this.innerFacets.push([\"|\" + x + \"|\" + y, \"|\" + x + \"|\" + (y + 1), \"|\" + (x + 1) + \"|\" + y]);\r\n }\r\n if (y > 0 && x < this.max[y - 1] && x + 1 < this.max[y] + 1) {\r\n this.innerFacets.push([\"|\" + x + \"|\" + y, \"|\" + (x + 1) + \"|\" + y, \"|\" + (x + 1) + \"|\" + (y - 1)]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n public edgeVecsABOB() {\r\n const m = this.m;\r\n const n = this.n;\r\n\r\n const B = new _IsoVector(-n, m + n);\r\n\r\n for (let y = 1; y < m + n; y++) {\r\n const point = new _IsoVector(this.min[y], y);\r\n const prev = new _IsoVector(this.min[y - 1], y - 1);\r\n const next = new _IsoVector(this.min[y + 1], y + 1);\r\n const pointR = point.clone();\r\n const prevR = prev.clone();\r\n const nextR = next.clone();\r\n\r\n pointR.rotate60About(B);\r\n prevR.rotate60About(B);\r\n nextR.rotate60About(B);\r\n\r\n const maxPoint = new _IsoVector(this.max[pointR.y], pointR.y);\r\n const maxPrev = new _IsoVector(this.max[pointR.y - 1], pointR.y - 1);\r\n const maxLeftPrev = new _IsoVector(this.max[pointR.y - 1] - 1, pointR.y - 1);\r\n\r\n if (pointR.x !== maxPoint.x || pointR.y !== maxPoint.y) {\r\n if (pointR.x !== maxPrev.x) {\r\n // type2\r\n //up\r\n this.vertexTypes.push([1, 0, 0]);\r\n this.isoVecsABOB.push([point, maxPrev, maxLeftPrev]);\r\n //down\r\n this.vertexTypes.push([1, 0, 0]);\r\n this.isoVecsABOB.push([point, maxLeftPrev, maxPoint]);\r\n } else if (pointR.y === nextR.y) {\r\n // type1\r\n //up\r\n this.vertexTypes.push([1, 1, 0]);\r\n this.isoVecsABOB.push([point, prev, maxPrev]);\r\n //down\r\n this.vertexTypes.push([1, 0, 1]);\r\n this.isoVecsABOB.push([point, maxPrev, next]);\r\n } else {\r\n // type 0\r\n //up\r\n this.vertexTypes.push([1, 1, 0]);\r\n this.isoVecsABOB.push([point, prev, maxPrev]);\r\n //down\r\n this.vertexTypes.push([1, 0, 0]);\r\n this.isoVecsABOB.push([point, maxPrev, maxPoint]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n public mapABOBtoOBOA() {\r\n const point = new _IsoVector(0, 0);\r\n for (let i = 0; i < this.isoVecsABOB.length; i++) {\r\n const temp = [];\r\n for (let j = 0; j < 3; j++) {\r\n point.x = this.isoVecsABOB[i][j].x;\r\n point.y = this.isoVecsABOB[i][j].y;\r\n if (this.vertexTypes[i][j] === 0) {\r\n point.rotateNeg120(this.m, this.n);\r\n }\r\n temp.push(point.clone());\r\n }\r\n this.isoVecsOBOA.push(temp);\r\n }\r\n }\r\n\r\n public mapABOBtoBAOA() {\r\n const point = new _IsoVector(0, 0);\r\n for (let i = 0; i < this.isoVecsABOB.length; i++) {\r\n const temp = [];\r\n for (let j = 0; j < 3; j++) {\r\n point.x = this.isoVecsABOB[i][j].x;\r\n point.y = this.isoVecsABOB[i][j].y;\r\n if (this.vertexTypes[i][j] === 1) {\r\n point.rotate120(this.m, this.n);\r\n }\r\n temp.push(point.clone());\r\n }\r\n this.isoVecsBAOA.push(temp);\r\n }\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public MapToFace(faceNb: number, geodesicData: PolyhedronData) {\r\n const F = this.IDATA.face[faceNb];\r\n const oidx = F[2];\r\n const aidx = F[1];\r\n const bidx = F[0];\r\n\r\n const O = Vector3.FromArray(this.IDATA.vertex[oidx]);\r\n const A = Vector3.FromArray(this.IDATA.vertex[aidx]);\r\n const B = Vector3.FromArray(this.IDATA.vertex[bidx]);\r\n\r\n const OA = A.subtract(O);\r\n const OB = B.subtract(O);\r\n\r\n const x: Vector3 = OA.scale(this.coau).add(OB.scale(this.cobu));\r\n const y: Vector3 = OA.scale(this.coav).add(OB.scale(this.cobv));\r\n\r\n const mapped = [];\r\n\r\n let idx: string;\r\n let tempVec: Vector3 = TmpVectors.Vector3[0];\r\n for (let i = 0; i < this.cartesian.length; i++) {\r\n tempVec = x.scale(this.cartesian[i].x).add(y.scale(this.cartesian[i].y)).add(O);\r\n mapped[i] = [tempVec.x, tempVec.y, tempVec.z];\r\n idx = faceNb + \"|\" + this.vertices[i].x + \"|\" + this.vertices[i].y;\r\n geodesicData.vertex[this.vecToidx[idx]] = [tempVec.x, tempVec.y, tempVec.z];\r\n }\r\n }\r\n\r\n //statics\r\n /**Creates a primary triangle\r\n * @internal\r\n */\r\n\r\n public build(m: number, n: number) {\r\n const vertices: _IsoVector[] = [];\r\n\r\n const O: _IsoVector = _IsoVector.Zero();\r\n const A: _IsoVector = new _IsoVector(m, n);\r\n const B: _IsoVector = new _IsoVector(-n, m + n);\r\n vertices.push(O, A, B);\r\n\r\n //max internal isoceles triangle vertices\r\n for (let y = n; y < m + 1; y++) {\r\n for (let x = 0; x < m + 1 - y; x++) {\r\n vertices.push(new _IsoVector(x, y));\r\n }\r\n }\r\n\r\n //shared vertices along edges when needed\r\n if (n > 0) {\r\n const g = HighestCommonFactor(m, n);\r\n const m1 = m / g;\r\n const n1 = n / g;\r\n\r\n for (let i = 1; i < g; i++) {\r\n vertices.push(new _IsoVector(i * m1, i * n1)); //OA\r\n vertices.push(new _IsoVector(-i * n1, i * (m1 + n1))); //OB\r\n vertices.push(new _IsoVector(m - i * (m1 + n1), n + i * m1)); // AB\r\n }\r\n\r\n //lower rows vertices and their rotations\r\n const ratio = m / n;\r\n for (let y = 1; y < n; y++) {\r\n for (let x = 0; x < y * ratio; x++) {\r\n vertices.push(new _IsoVector(x, y));\r\n vertices.push(new _IsoVector(x, y).rotate120(m, n));\r\n vertices.push(new _IsoVector(x, y).rotateNeg120(m, n));\r\n }\r\n }\r\n }\r\n //order vertices by x and then y\r\n vertices.sort((a, b) => {\r\n return a.x - b.x;\r\n });\r\n\r\n vertices.sort((a, b) => {\r\n return a.y - b.y;\r\n });\r\n\r\n const min = new Array<number>(m + n + 1);\r\n const max = new Array<number>(m + n + 1);\r\n for (let i = 0; i < min.length; i++) {\r\n min[i] = Infinity;\r\n max[i] = -Infinity;\r\n }\r\n\r\n let y: number = 0;\r\n let x: number = 0;\r\n\r\n const len: number = vertices.length;\r\n for (let i = 0; i < len; i++) {\r\n x = vertices[i].x;\r\n y = vertices[i].y;\r\n min[y] = Math.min(x, min[y]);\r\n max[y] = Math.max(x, max[y]);\r\n }\r\n\r\n //calculates the distance of a vertex from a given primary vertex\r\n const distFrom = (vert: _IsoVector, primVert: string) => {\r\n const v = vert.clone();\r\n if (primVert === \"A\") {\r\n v.rotateNeg120(m, n);\r\n }\r\n if (primVert === \"B\") {\r\n v.rotate120(m, n);\r\n }\r\n if (v.x < 0) {\r\n return v.y;\r\n }\r\n return v.x + v.y;\r\n };\r\n\r\n const cartesian: Vector3[] = [];\r\n const distFromO: number[] = [];\r\n const distFromA: number[] = [];\r\n const distFromB: number[] = [];\r\n const vertByDist: { [key: string]: number[] } = {};\r\n const vertData: number[][] = [];\r\n let closest: number = -1;\r\n let dist: number = -1;\r\n for (let i = 0; i < len; i++) {\r\n cartesian[i] = vertices[i].toCartesianOrigin(new _IsoVector(0, 0), 0.5);\r\n distFromO[i] = distFrom(vertices[i], \"O\");\r\n distFromA[i] = distFrom(vertices[i], \"A\");\r\n distFromB[i] = distFrom(vertices[i], \"B\");\r\n\r\n if (distFromO[i] === distFromA[i] && distFromA[i] === distFromB[i]) {\r\n closest = 3;\r\n dist = distFromO[i];\r\n } else if (distFromO[i] === distFromA[i]) {\r\n closest = 4;\r\n dist = distFromO[i];\r\n } else if (distFromA[i] === distFromB[i]) {\r\n closest = 5;\r\n dist = distFromA[i];\r\n } else if (distFromB[i] === distFromO[i]) {\r\n closest = 6;\r\n dist = distFromO[i];\r\n }\r\n if (distFromO[i] < distFromA[i] && distFromO[i] < distFromB[i]) {\r\n closest = 2;\r\n dist = distFromO[i];\r\n }\r\n if (distFromA[i] < distFromO[i] && distFromA[i] < distFromB[i]) {\r\n closest = 1;\r\n dist = distFromA[i];\r\n }\r\n if (distFromB[i] < distFromA[i] && distFromB[i] < distFromO[i]) {\r\n closest = 0;\r\n dist = distFromB[i];\r\n }\r\n vertData.push([closest, dist, vertices[i].x, vertices[i].y]);\r\n }\r\n\r\n vertData.sort((a, b) => {\r\n return a[2] - b[2];\r\n });\r\n vertData.sort((a, b) => {\r\n return a[3] - b[3];\r\n });\r\n vertData.sort((a, b) => {\r\n return a[1] - b[1];\r\n });\r\n vertData.sort((a, b) => {\r\n return a[0] - b[0];\r\n });\r\n\r\n for (let v = 0; v < vertData.length; v++) {\r\n vertByDist[vertData[v][2] + \"|\" + vertData[v][3]] = [vertData[v][0], vertData[v][1], v];\r\n }\r\n\r\n this.m = m;\r\n this.n = n;\r\n this.vertices = vertices;\r\n this.vertByDist = vertByDist;\r\n this.cartesian = cartesian;\r\n this.min = min;\r\n this.max = max;\r\n\r\n return this;\r\n }\r\n}\r\n\r\n/** Builds Polyhedron Data\r\n * @internal\r\n */\r\n\r\nexport class PolyhedronData {\r\n /**\r\n * @internal\r\n */\r\n public edgematch: (number | string)[][];\r\n\r\n constructor(\r\n /**\r\n * The name of the polyhedron\r\n */\r\n public name: string,\r\n /**\r\n * The category of the polyhedron\r\n */\r\n public category: string,\r\n /**\r\n * vertex data\r\n */\r\n public vertex: number[][],\r\n /**\r\n * face data\r\n */\r\n public face: number[][]\r\n ) {}\r\n}\r\n\r\n/**\r\n * This class Extends the PolyhedronData Class to provide measures for a Geodesic Polyhedron\r\n */\r\nexport class GeodesicData extends PolyhedronData {\r\n /**\r\n * @internal\r\n */\r\n public override edgematch: (number | string)[][];\r\n /**\r\n * @internal\r\n */\r\n public adjacentFaces: number[][];\r\n /**\r\n * @internal\r\n */\r\n public sharedNodes: number;\r\n /**\r\n * @internal\r\n */\r\n public poleNodes: number;\r\n /**\r\n * @internal\r\n */\r\n public innerToData(face: number, primTri: _PrimaryIsoTriangle) {\r\n for (let i = 0; i < primTri.innerFacets.length; i++) {\r\n this.face.push(primTri.innerFacets[i].map((el) => primTri.vecToidx[face + el]));\r\n }\r\n }\r\n /**\r\n * @internal\r\n */\r\n public mapABOBtoDATA(faceNb: number, primTri: _PrimaryIsoTriangle) {\r\n const fr = primTri.IDATA.edgematch[faceNb][0];\r\n for (let i = 0; i < primTri.isoVecsABOB.length; i++) {\r\n const temp = [];\r\n for (let j = 0; j < 3; j++) {\r\n if (primTri.vertexTypes[i][j] === 0) {\r\n temp.push(faceNb + \"|\" + primTri.isoVecsABOB[i][j].x + \"|\" + primTri.isoVecsABOB[i][j].y);\r\n } else {\r\n temp.push(fr + \"|\" + primTri.isoVecsABOB[i][j].x + \"|\" + primTri.isoVecsABOB[i][j].y);\r\n }\r\n }\r\n this.face.push([primTri.vecToidx[temp[0]], primTri.vecToidx[temp[1]], primTri.vecToidx[temp[2]]]);\r\n }\r\n }\r\n /**\r\n * @internal\r\n */\r\n public mapOBOAtoDATA(faceNb: number, primTri: _PrimaryIsoTriangle) {\r\n const fr = primTri.IDATA.edgematch[faceNb][0];\r\n for (let i = 0; i < primTri.isoVecsOBOA.length; i++) {\r\n const temp = [];\r\n for (let j = 0; j < 3; j++) {\r\n if (primTri.vertexTypes[i][j] === 1) {\r\n temp.push(faceNb + \"|\" + primTri.isoVecsOBOA[i][j].x + \"|\" + primTri.isoVecsOBOA[i][j].y);\r\n } else {\r\n temp.push(fr + \"|\" + primTri.isoVecsOBOA[i][j].x + \"|\" + primTri.isoVecsOBOA[i][j].y);\r\n }\r\n }\r\n this.face.push([primTri.vecToidx[temp[0]], primTri.vecToidx[temp[1]], primTri.vecToidx[temp[2]]]);\r\n }\r\n }\r\n /**\r\n * @internal\r\n */\r\n public mapBAOAtoDATA(faceNb: number, primTri: _PrimaryIsoTriangle) {\r\n const fr = primTri.IDATA.edgematch[faceNb][2];\r\n for (let i = 0; i < primTri.isoVecsBAOA.length; i++) {\r\n const temp = [];\r\n for (let j = 0; j < 3; j++) {\r\n if (primTri.vertexTypes[i][j] === 1) {\r\n temp.push(faceNb + \"|\" + primTri.isoVecsBAOA[i][j].x + \"|\" + primTri.isoVecsBAOA[i][j].y);\r\n } else {\r\n temp.push(fr + \"|\" + primTri.isoVecsBAOA[i][j].x + \"|\" + primTri.isoVecsBAOA[i][j].y);\r\n }\r\n }\r\n this.face.push([primTri.vecToidx[temp[0]], primTri.vecToidx[temp[1]], primTri.vecToidx[temp[2]]]);\r\n }\r\n }\r\n /**\r\n * @internal\r\n */\r\n public orderData(primTri: _PrimaryIsoTriangle) {\r\n const nearTo: number[][][] = [];\r\n for (let i = 0; i < 13; i++) {\r\n nearTo[i] = [];\r\n }\r\n const close: number[][] = primTri.closestTo;\r\n for (let i = 0; i < close.length; i++) {\r\n if (close[i][0] > -1) {\r\n if (close[i][1] > 0) {\r\n nearTo[close[i][0]].push([i, close[i][1]]);\r\n }\r\n } else {\r\n nearTo[12].push([i, close[i][0]]);\r\n }\r\n }\r\n\r\n const near: number[] = [];\r\n for (let i = 0; i < 12; i++) {\r\n near[i] = i;\r\n }\r\n let nearIndex = 12;\r\n for (let i = 0; i < 12; i++) {\r\n nearTo[i].sort((a: number[], b: number[]) => {\r\n return a[1] - b[1];\r\n });\r\n for (let j = 0; j < nearTo[i].length; j++) {\r\n near[nearTo[i][j][0]] = nearIndex++;\r\n }\r\n }\r\n\r\n for (let j = 0; j < nearTo[12].length; j++) {\r\n near[nearTo[12][j][0]] = nearIndex++;\r\n }\r\n\r\n for (let i = 0; i < this.vertex.length; i++) {\r\n this.vertex[i].push(near[i]);\r\n }\r\n\r\n this.vertex.sort((a, b) => {\r\n return a[3] - b[3];\r\n });\r\n\r\n for (let i = 0; i < this.vertex.length; i++) {\r\n this.vertex[i].pop();\r\n }\r\n\r\n for (let i = 0; i < this.face.length; i++) {\r\n for (let j = 0; j < this.face[i].length; j++) {\r\n this.face[i][j] = near[this.face[i][j]];\r\n }\r\n }\r\n\r\n this.sharedNodes = nearTo[12].length;\r\n this.poleNodes = this.vertex.length - this.sharedNodes;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public setOrder(m: number, faces: number[]) {\r\n const adjVerts: number[] = [];\r\n const dualFaces: number[] = [];\r\n let face: number = <number>faces.pop();\r\n dualFaces.push(face);\r\n let index = this.face[face].indexOf(m);\r\n index = (index + 2) % 3;\r\n let v = this.face[face][index];\r\n adjVerts.push(v);\r\n let f = 0;\r\n while (faces.length > 0) {\r\n face = faces[f];\r\n if (this.face[face].indexOf(v) > -1) {\r\n // v is a vertex of face f\r\n index = (this.face[face].indexOf(v) + 1) % 3;\r\n v = this.face[face][index];\r\n adjVerts.push(v);\r\n dualFaces.push(face);\r\n faces.splice(f, 1);\r\n f = 0;\r\n } else {\r\n f++;\r\n }\r\n }\r\n this.adjacentFaces.push(adjVerts);\r\n return dualFaces;\r\n }\r\n /**\r\n * @internal\r\n */\r\n public toGoldbergPolyhedronData(): PolyhedronData {\r\n const goldbergPolyhedronData: PolyhedronData = new PolyhedronData(\"GeoDual\", \"Goldberg\", [], []);\r\n goldbergPolyhedronData.name = \"GD dual\";\r\n const verticesNb: number = this.vertex.length;\r\n const map = new Array(verticesNb);\r\n for (let v = 0; v < verticesNb; v++) {\r\n map[v] = [];\r\n }\r\n for (let f = 0; f < this.face.length; f++) {\r\n for (let i = 0; i < 3; i++) {\r\n map[this.face[f][i]].push(f);\r\n }\r\n }\r\n let cx = 0;\r\n let cy = 0;\r\n let cz = 0;\r\n let face = [];\r\n let vertex = [];\r\n this.adjacentFaces = [];\r\n for (let m = 0; m < map.length; m++) {\r\n goldbergPolyhedronData.face[m] = this.setOrder(m, map[m].concat([]));\r\n map[m].forEach((el: number) => {\r\n cx = 0;\r\n cy = 0;\r\n cz = 0;\r\n face = this.face[el];\r\n for (let i = 0; i < 3; i++) {\r\n vertex = this.vertex[face[i]];\r\n cx += vertex[0];\r\n cy += vertex[1];\r\n cz += vertex[2];\r\n }\r\n goldbergPolyhedronData.vertex[el] = [cx / 3, cy / 3, cz / 3];\r\n });\r\n }\r\n return goldbergPolyhedronData;\r\n }\r\n\r\n //statics\r\n /**Builds the data for a Geodesic Polyhedron from a primary triangle\r\n * @param primTri the primary triangle\r\n * @internal\r\n */\r\n\r\n public static BuildGeodesicData(primTri: _PrimaryIsoTriangle) {\r\n const geodesicData = new GeodesicData(\r\n \"Geodesic-m-n\",\r\n \"Geodesic\",\r\n [\r\n [0, PHI, -1],\r\n [-PHI, 1, 0],\r\n [-1, 0, -PHI],\r\n [1, 0, -PHI],\r\n [PHI, 1, 0],\r\n [0, PHI, 1],\r\n [-1, 0, PHI],\r\n [-PHI, -1, 0],\r\n [0, -PHI, -1],\r\n [PHI, -1, 0],\r\n [1, 0, PHI],\r\n [0, -PHI, 1],\r\n ],\r\n []\r\n );\r\n\r\n primTri.setIndices();\r\n primTri.calcCoeffs();\r\n primTri.createInnerFacets();\r\n primTri.edgeVecsABOB();\r\n primTri.mapABOBtoOBOA();\r\n primTri.mapABOBtoBAOA();\r\n\r\n for (let f = 0; f < primTri.IDATA.face.length; f++) {\r\n primTri.MapToFace(f, geodesicData);\r\n geodesicData.innerToData(f, primTri);\r\n if (primTri.IDATA.edgematch[f][1] === \"B\") {\r\n geodesicData.mapABOBtoDATA(f, primTri);\r\n }\r\n if (primTri.IDATA.edgematch[f][1] === \"O\") {\r\n geodesicData.mapOBOAtoDATA(f, primTri);\r\n }\r\n if (primTri.IDATA.edgematch[f][3] === \"A\") {\r\n geodesicData.mapBAOAtoDATA(f, primTri);\r\n }\r\n }\r\n\r\n geodesicData.orderData(primTri);\r\n const radius = 1;\r\n geodesicData.vertex = geodesicData.vertex.map(function (el) {\r\n const a = el[0];\r\n const b = el[1];\r\n const c = el[2];\r\n const d = Math.sqrt(a * a + b * b + c * c);\r\n el[0] *= radius / d;\r\n el[1] *= radius / d;\r\n el[2] *= radius / d;\r\n return el;\r\n });\r\n\r\n return geodesicData;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"geodesicMesh.js","sourceRoot":"","sources":["../../../../dev/core/src/Meshes/geodesicMesh.ts"],"names":[],"mappings":"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","sourcesContent":["import { Vector3, TmpVectors } from \"../Maths/math.vector\";\r\nimport { HighestCommonFactor } from \"../Maths/math.scalar.functions\";\r\nimport { PHI } from \"../Maths/math.constants\";\r\nimport { _IsoVector } from \"../Maths/math.isovector\";\r\n\r\n/**\r\n * Class representing data for one face OAB of an equilateral icosahedron\r\n * When O is the isovector (0, 0), A is isovector (m, n)\r\n * @internal\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class _PrimaryIsoTriangle {\r\n //properties\r\n public m: number;\r\n public n: number;\r\n public cartesian: Vector3[] = [];\r\n public vertices: _IsoVector[] = [];\r\n public max: number[] = [];\r\n public min: number[] = [];\r\n public vecToidx: { [key: string]: number };\r\n public vertByDist: { [key: string]: number[] };\r\n public closestTo: number[][] = [];\r\n\r\n public innerFacets: string[][] = [];\r\n public isoVecsABOB: _IsoVector[][] = [];\r\n public isoVecsOBOA: _IsoVector[][] = [];\r\n public isoVecsBAOA: _IsoVector[][] = [];\r\n public vertexTypes: number[][] = [];\r\n\r\n public coau: number;\r\n public cobu: number;\r\n public coav: number;\r\n public cobv: number;\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public IDATA: PolyhedronData = new PolyhedronData(\r\n \"icosahedron\",\r\n \"Regular\",\r\n [\r\n [0, PHI, -1],\r\n [-PHI, 1, 0],\r\n [-1, 0, -PHI],\r\n [1, 0, -PHI],\r\n [PHI, 1, 0],\r\n [0, PHI, 1],\r\n [-1, 0, PHI],\r\n [-PHI, -1, 0],\r\n [0, -PHI, -1],\r\n [PHI, -1, 0],\r\n [1, 0, PHI],\r\n [0, -PHI, 1],\r\n ],\r\n [\r\n [0, 2, 1],\r\n [0, 3, 2],\r\n [0, 4, 3],\r\n [0, 5, 4],\r\n [0, 1, 5],\r\n [7, 6, 1],\r\n [8, 7, 2],\r\n [9, 8, 3],\r\n [10, 9, 4],\r\n [6, 10, 5],\r\n [2, 7, 1],\r\n [3, 8, 2],\r\n [4, 9, 3],\r\n [5, 10, 4],\r\n [1, 6, 5],\r\n [11, 6, 7],\r\n [11, 7, 8],\r\n [11, 8, 9],\r\n [11, 9, 10],\r\n [11, 10, 6],\r\n ]\r\n );\r\n\r\n /**\r\n * Creates the PrimaryIsoTriangle Triangle OAB\r\n * @param m an integer\r\n * @param n an integer\r\n */\r\n\r\n //operators\r\n public setIndices() {\r\n let indexCount = 12; // 12 vertices already assigned\r\n const vecToidx: { [key: string]: number } = {}; //maps iso-vectors to indexCount;\r\n const m = this.m;\r\n const n = this.n;\r\n let g = m; // hcf of m, n when n != 0\r\n let m1 = 1;\r\n let n1 = 0;\r\n if (n !== 0) {\r\n g = HighestCommonFactor(m, n);\r\n }\r\n m1 = m / g;\r\n n1 = n / g;\r\n\r\n let fr: number | string; //face to the right of current face\r\n let rot: number | string; //rotation about which vertex for fr\r\n let O: number;\r\n let A: number;\r\n let B: number;\r\n const oVec: _IsoVector = _IsoVector.Zero();\r\n const aVec = new _IsoVector(m, n);\r\n const bVec = new _IsoVector(-n, m + n);\r\n const oaVec: _IsoVector = _IsoVector.Zero();\r\n const abVec: _IsoVector = _IsoVector.Zero();\r\n const obVec: _IsoVector = _IsoVector.Zero();\r\n let verts: number[] = [];\r\n let idx: string;\r\n let idxR: string;\r\n let isoId: string;\r\n let isoIdR: string;\r\n\r\n const closestTo: number[][] = [];\r\n const vDist = this.vertByDist;\r\n\r\n const matchIdx = (f: number, fr: number, isoId: string, isoIdR: string) => {\r\n idx = f + \"|\" + isoId;\r\n idxR = fr + \"|\" + isoIdR;\r\n if (!(idx in vecToidx || idxR in vecToidx)) {\r\n vecToidx[idx] = indexCount;\r\n vecToidx[idxR] = indexCount;\r\n indexCount++;\r\n } else if (idx in vecToidx && !(idxR in vecToidx)) {\r\n vecToidx[idxR] = vecToidx[idx];\r\n } else if (idxR in vecToidx && !(idx in vecToidx)) {\r\n vecToidx[idx] = vecToidx[idxR];\r\n }\r\n if (vDist[isoId][0] > 2) {\r\n closestTo[vecToidx[idx]] = [-vDist[isoId][0], vDist[isoId][1], vecToidx[idx]];\r\n } else {\r\n closestTo[vecToidx[idx]] = [verts[vDist[isoId][0]], vDist[isoId][1], vecToidx[idx]];\r\n }\r\n };\r\n\r\n this.IDATA.edgematch = [\r\n [1, \"B\"],\r\n [2, \"B\"],\r\n [3, \"B\"],\r\n [4, \"B\"],\r\n [0, \"B\"],\r\n [10, \"O\", 14, \"A\"],\r\n [11, \"O\", 10, \"A\"],\r\n [12, \"O\", 11, \"A\"],\r\n [13, \"O\", 12, \"A\"],\r\n [14, \"O\", 13, \"A\"],\r\n [0, \"O\"],\r\n [1, \"O\"],\r\n [2, \"O\"],\r\n [3, \"O\"],\r\n [4, \"O\"],\r\n [19, \"B\", 5, \"A\"],\r\n [15, \"B\", 6, \"A\"],\r\n [16, \"B\", 7, \"A\"],\r\n [17, \"B\", 8, \"A\"],\r\n [18, \"B\", 9, \"A\"],\r\n ];\r\n\r\n /***edges AB to OB***** rotation about B*/\r\n for (let f = 0; f < 20; f++) {\r\n //f current face\r\n\r\n verts = this.IDATA.face[f];\r\n O = verts[2];\r\n A = verts[1];\r\n B = verts[0];\r\n\r\n isoId = oVec.x + \"|\" + oVec.y;\r\n idx = f + \"|\" + isoId;\r\n if (!(idx in vecToidx)) {\r\n vecToidx[idx] = O;\r\n closestTo[O] = [verts[vDist[isoId][0]], vDist[isoId][1]];\r\n }\r\n\r\n isoId = aVec.x + \"|\" + aVec.y;\r\n idx = f + \"|\" + isoId;\r\n if (!(idx in vecToidx)) {\r\n vecToidx[idx] = A;\r\n closestTo[A] = [verts[vDist[isoId][0]], vDist[isoId][1]];\r\n }\r\n\r\n isoId = bVec.x + \"|\" + bVec.y;\r\n idx = f + \"|\" + isoId;\r\n if (!(idx in vecToidx)) {\r\n vecToidx[idx] = B;\r\n closestTo[B] = [verts[vDist[isoId][0]], vDist[isoId][1]];\r\n }\r\n\r\n //for edge vertices\r\n fr = <number>this.IDATA.edgematch[f][0];\r\n rot = <string>this.IDATA.edgematch[f][1];\r\n if (rot === \"B\") {\r\n for (let i = 1; i < g; i++) {\r\n abVec.x = m - i * (m1 + n1);\r\n abVec.y = n + i * m1;\r\n obVec.x = -i * n1;\r\n obVec.y = i * (m1 + n1);\r\n isoId = abVec.x + \"|\" + abVec.y;\r\n isoIdR = obVec.x + \"|\" + obVec.y;\r\n matchIdx(f, fr, isoId, isoIdR);\r\n }\r\n }\r\n\r\n if (rot === \"O\") {\r\n for (let i = 1; i < g; i++) {\r\n obVec.x = -i * n1;\r\n obVec.y = i * (m1 + n1);\r\n oaVec.x = i * m1;\r\n oaVec.y = i * n1;\r\n isoId = obVec.x + \"|\" + obVec.y;\r\n isoIdR = oaVec.x + \"|\" + oaVec.y;\r\n matchIdx(f, fr, isoId, isoIdR);\r\n }\r\n }\r\n\r\n fr = <number>this.IDATA.edgematch[f][2];\r\n rot = <string>this.IDATA.edgematch[f][3];\r\n if (rot && rot === \"A\") {\r\n for (let i = 1; i < g; i++) {\r\n oaVec.x = i * m1;\r\n oaVec.y = i * n1;\r\n abVec.x = m - (g - i) * (m1 + n1); //reversed for BA\r\n abVec.y = n + (g - i) * m1; //reversed for BA\r\n isoId = oaVec.x + \"|\" + oaVec.y;\r\n isoIdR = abVec.x + \"|\" + abVec.y;\r\n matchIdx(f, fr, isoId, isoIdR);\r\n }\r\n }\r\n\r\n for (let i = 0; i < this.vertices.length; i++) {\r\n isoId = this.vertices[i].x + \"|\" + this.vertices[i].y;\r\n idx = f + \"|\" + isoId;\r\n if (!(idx in vecToidx)) {\r\n vecToidx[idx] = indexCount++;\r\n if (vDist[isoId][0] > 2) {\r\n closestTo[vecToidx[idx]] = [-vDist[isoId][0], vDist[isoId][1], vecToidx[idx]];\r\n } else {\r\n closestTo[vecToidx[idx]] = [verts[vDist[isoId][0]], vDist[isoId][1], vecToidx[idx]];\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.closestTo = closestTo;\r\n this.vecToidx = vecToidx;\r\n }\r\n\r\n public calcCoeffs() {\r\n const m = this.m;\r\n const n = this.n;\r\n const thirdR3 = Math.sqrt(3) / 3;\r\n\r\n const LSQD = m * m + n * n + m * n;\r\n\r\n this.coau = (m + n) / LSQD;\r\n this.cobu = -n / LSQD;\r\n this.coav = (-thirdR3 * (m - n)) / LSQD;\r\n this.cobv = (thirdR3 * (2 * m + n)) / LSQD;\r\n }\r\n\r\n public createInnerFacets() {\r\n const m = this.m;\r\n const n = this.n;\r\n for (let y = 0; y < n + m + 1; y++) {\r\n for (let x = this.min[y]; x < this.max[y] + 1; x++) {\r\n if (x < this.max[y] && x < this.max[y + 1] + 1) {\r\n this.innerFacets.push([\"|\" + x + \"|\" + y, \"|\" + x + \"|\" + (y + 1), \"|\" + (x + 1) + \"|\" + y]);\r\n }\r\n if (y > 0 && x < this.max[y - 1] && x + 1 < this.max[y] + 1) {\r\n this.innerFacets.push([\"|\" + x + \"|\" + y, \"|\" + (x + 1) + \"|\" + y, \"|\" + (x + 1) + \"|\" + (y - 1)]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n public edgeVecsABOB() {\r\n const m = this.m;\r\n const n = this.n;\r\n\r\n const B = new _IsoVector(-n, m + n);\r\n\r\n for (let y = 1; y < m + n; y++) {\r\n const point = new _IsoVector(this.min[y], y);\r\n const prev = new _IsoVector(this.min[y - 1], y - 1);\r\n const next = new _IsoVector(this.min[y + 1], y + 1);\r\n const pointR = point.clone();\r\n const prevR = prev.clone();\r\n const nextR = next.clone();\r\n\r\n pointR.rotate60About(B);\r\n prevR.rotate60About(B);\r\n nextR.rotate60About(B);\r\n\r\n const maxPoint = new _IsoVector(this.max[pointR.y], pointR.y);\r\n const maxPrev = new _IsoVector(this.max[pointR.y - 1], pointR.y - 1);\r\n const maxLeftPrev = new _IsoVector(this.max[pointR.y - 1] - 1, pointR.y - 1);\r\n\r\n if (pointR.x !== maxPoint.x || pointR.y !== maxPoint.y) {\r\n if (pointR.x !== maxPrev.x) {\r\n // type2\r\n //up\r\n this.vertexTypes.push([1, 0, 0]);\r\n this.isoVecsABOB.push([point, maxPrev, maxLeftPrev]);\r\n //down\r\n this.vertexTypes.push([1, 0, 0]);\r\n this.isoVecsABOB.push([point, maxLeftPrev, maxPoint]);\r\n } else if (pointR.y === nextR.y) {\r\n // type1\r\n //up\r\n this.vertexTypes.push([1, 1, 0]);\r\n this.isoVecsABOB.push([point, prev, maxPrev]);\r\n //down\r\n this.vertexTypes.push([1, 0, 1]);\r\n this.isoVecsABOB.push([point, maxPrev, next]);\r\n } else {\r\n // type 0\r\n //up\r\n this.vertexTypes.push([1, 1, 0]);\r\n this.isoVecsABOB.push([point, prev, maxPrev]);\r\n //down\r\n this.vertexTypes.push([1, 0, 0]);\r\n this.isoVecsABOB.push([point, maxPrev, maxPoint]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n public mapABOBtoOBOA() {\r\n const point = new _IsoVector(0, 0);\r\n for (let i = 0; i < this.isoVecsABOB.length; i++) {\r\n const temp = [];\r\n for (let j = 0; j < 3; j++) {\r\n point.x = this.isoVecsABOB[i][j].x;\r\n point.y = this.isoVecsABOB[i][j].y;\r\n if (this.vertexTypes[i][j] === 0) {\r\n point.rotateNeg120(this.m, this.n);\r\n }\r\n temp.push(point.clone());\r\n }\r\n this.isoVecsOBOA.push(temp);\r\n }\r\n }\r\n\r\n public mapABOBtoBAOA() {\r\n const point = new _IsoVector(0, 0);\r\n for (let i = 0; i < this.isoVecsABOB.length; i++) {\r\n const temp = [];\r\n for (let j = 0; j < 3; j++) {\r\n point.x = this.isoVecsABOB[i][j].x;\r\n point.y = this.isoVecsABOB[i][j].y;\r\n if (this.vertexTypes[i][j] === 1) {\r\n point.rotate120(this.m, this.n);\r\n }\r\n temp.push(point.clone());\r\n }\r\n this.isoVecsBAOA.push(temp);\r\n }\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public MapToFace(faceNb: number, geodesicData: PolyhedronData) {\r\n const F = this.IDATA.face[faceNb];\r\n const oidx = F[2];\r\n const aidx = F[1];\r\n const bidx = F[0];\r\n\r\n const O = Vector3.FromArray(this.IDATA.vertex[oidx]);\r\n const A = Vector3.FromArray(this.IDATA.vertex[aidx]);\r\n const B = Vector3.FromArray(this.IDATA.vertex[bidx]);\r\n\r\n const OA = A.subtract(O);\r\n const OB = B.subtract(O);\r\n\r\n const x: Vector3 = OA.scale(this.coau).add(OB.scale(this.cobu));\r\n const y: Vector3 = OA.scale(this.coav).add(OB.scale(this.cobv));\r\n\r\n const mapped = [];\r\n\r\n let idx: string;\r\n let tempVec: Vector3 = TmpVectors.Vector3[0];\r\n for (let i = 0; i < this.cartesian.length; i++) {\r\n tempVec = x.scale(this.cartesian[i].x).add(y.scale(this.cartesian[i].y)).add(O);\r\n mapped[i] = [tempVec.x, tempVec.y, tempVec.z];\r\n idx = faceNb + \"|\" + this.vertices[i].x + \"|\" + this.vertices[i].y;\r\n geodesicData.vertex[this.vecToidx[idx]] = [tempVec.x, tempVec.y, tempVec.z];\r\n }\r\n }\r\n\r\n //statics\r\n /**Creates a primary triangle\r\n * @internal\r\n */\r\n\r\n public build(m: number, n: number) {\r\n const vertices: _IsoVector[] = [];\r\n\r\n const O: _IsoVector = _IsoVector.Zero();\r\n const A: _IsoVector = new _IsoVector(m, n);\r\n const B: _IsoVector = new _IsoVector(-n, m + n);\r\n vertices.push(O, A, B);\r\n\r\n //max internal isoceles triangle vertices\r\n for (let y = n; y < m + 1; y++) {\r\n for (let x = 0; x < m + 1 - y; x++) {\r\n vertices.push(new _IsoVector(x, y));\r\n }\r\n }\r\n\r\n //shared vertices along edges when needed\r\n if (n > 0) {\r\n const g = HighestCommonFactor(m, n);\r\n const m1 = m / g;\r\n const n1 = n / g;\r\n\r\n for (let i = 1; i < g; i++) {\r\n vertices.push(new _IsoVector(i * m1, i * n1)); //OA\r\n vertices.push(new _IsoVector(-i * n1, i * (m1 + n1))); //OB\r\n vertices.push(new _IsoVector(m - i * (m1 + n1), n + i * m1)); // AB\r\n }\r\n\r\n //lower rows vertices and their rotations\r\n const ratio = m / n;\r\n for (let y = 1; y < n; y++) {\r\n for (let x = 0; x < y * ratio; x++) {\r\n vertices.push(new _IsoVector(x, y));\r\n vertices.push(new _IsoVector(x, y).rotate120(m, n));\r\n vertices.push(new _IsoVector(x, y).rotateNeg120(m, n));\r\n }\r\n }\r\n }\r\n //order vertices by x and then y\r\n vertices.sort((a, b) => {\r\n return a.x - b.x;\r\n });\r\n\r\n vertices.sort((a, b) => {\r\n return a.y - b.y;\r\n });\r\n\r\n const min = new Array<number>(m + n + 1);\r\n const max = new Array<number>(m + n + 1);\r\n for (let i = 0; i < min.length; i++) {\r\n min[i] = Infinity;\r\n max[i] = -Infinity;\r\n }\r\n\r\n let y: number = 0;\r\n let x: number = 0;\r\n\r\n const len: number = vertices.length;\r\n for (let i = 0; i < len; i++) {\r\n x = vertices[i].x;\r\n y = vertices[i].y;\r\n min[y] = Math.min(x, min[y]);\r\n max[y] = Math.max(x, max[y]);\r\n }\r\n\r\n //calculates the distance of a vertex from a given primary vertex\r\n const distFrom = (vert: _IsoVector, primVert: string) => {\r\n const v = vert.clone();\r\n if (primVert === \"A\") {\r\n v.rotateNeg120(m, n);\r\n }\r\n if (primVert === \"B\") {\r\n v.rotate120(m, n);\r\n }\r\n if (v.x < 0) {\r\n return v.y;\r\n }\r\n return v.x + v.y;\r\n };\r\n\r\n const cartesian: Vector3[] = [];\r\n const distFromO: number[] = [];\r\n const distFromA: number[] = [];\r\n const distFromB: number[] = [];\r\n const vertByDist: { [key: string]: number[] } = {};\r\n const vertData: number[][] = [];\r\n let closest: number = -1;\r\n let dist: number = -1;\r\n for (let i = 0; i < len; i++) {\r\n cartesian[i] = vertices[i].toCartesianOrigin(new _IsoVector(0, 0), 0.5);\r\n distFromO[i] = distFrom(vertices[i], \"O\");\r\n distFromA[i] = distFrom(vertices[i], \"A\");\r\n distFromB[i] = distFrom(vertices[i], \"B\");\r\n\r\n if (distFromO[i] === distFromA[i] && distFromA[i] === distFromB[i]) {\r\n closest = 3;\r\n dist = distFromO[i];\r\n } else if (distFromO[i] === distFromA[i]) {\r\n closest = 4;\r\n dist = distFromO[i];\r\n } else if (distFromA[i] === distFromB[i]) {\r\n closest = 5;\r\n dist = distFromA[i];\r\n } else if (distFromB[i] === distFromO[i]) {\r\n closest = 6;\r\n dist = distFromO[i];\r\n }\r\n if (distFromO[i] < distFromA[i] && distFromO[i] < distFromB[i]) {\r\n closest = 2;\r\n dist = distFromO[i];\r\n }\r\n if (distFromA[i] < distFromO[i] && distFromA[i] < distFromB[i]) {\r\n closest = 1;\r\n dist = distFromA[i];\r\n }\r\n if (distFromB[i] < distFromA[i] && distFromB[i] < distFromO[i]) {\r\n closest = 0;\r\n dist = distFromB[i];\r\n }\r\n vertData.push([closest, dist, vertices[i].x, vertices[i].y]);\r\n }\r\n\r\n vertData.sort((a, b) => {\r\n return a[2] - b[2];\r\n });\r\n vertData.sort((a, b) => {\r\n return a[3] - b[3];\r\n });\r\n vertData.sort((a, b) => {\r\n return a[1] - b[1];\r\n });\r\n vertData.sort((a, b) => {\r\n return a[0] - b[0];\r\n });\r\n\r\n for (let v = 0; v < vertData.length; v++) {\r\n vertByDist[vertData[v][2] + \"|\" + vertData[v][3]] = [vertData[v][0], vertData[v][1], v];\r\n }\r\n\r\n this.m = m;\r\n this.n = n;\r\n this.vertices = vertices;\r\n this.vertByDist = vertByDist;\r\n this.cartesian = cartesian;\r\n this.min = min;\r\n this.max = max;\r\n\r\n return this;\r\n }\r\n}\r\n\r\n/** Builds Polyhedron Data\r\n * @internal\r\n */\r\n\r\nexport class PolyhedronData {\r\n /**\r\n * @internal\r\n */\r\n public edgematch: (number | string)[][];\r\n\r\n constructor(\r\n /**\r\n * The name of the polyhedron\r\n */\r\n public name: string,\r\n /**\r\n * The category of the polyhedron\r\n */\r\n public category: string,\r\n /**\r\n * vertex data\r\n */\r\n public vertex: number[][],\r\n /**\r\n * face data\r\n */\r\n public face: number[][]\r\n ) {}\r\n}\r\n\r\n/**\r\n * This class Extends the PolyhedronData Class to provide measures for a Geodesic Polyhedron\r\n */\r\nexport class GeodesicData extends PolyhedronData {\r\n /**\r\n * @internal\r\n */\r\n public override edgematch: (number | string)[][];\r\n /**\r\n * @internal\r\n */\r\n public adjacentFaces: number[][];\r\n /**\r\n * @internal\r\n */\r\n public sharedNodes: number;\r\n /**\r\n * @internal\r\n */\r\n public poleNodes: number;\r\n /**\r\n * @internal\r\n */\r\n public innerToData(face: number, primTri: _PrimaryIsoTriangle) {\r\n for (let i = 0; i < primTri.innerFacets.length; i++) {\r\n this.face.push(primTri.innerFacets[i].map((el) => primTri.vecToidx[face + el]));\r\n }\r\n }\r\n /**\r\n * @internal\r\n */\r\n public mapABOBtoDATA(faceNb: number, primTri: _PrimaryIsoTriangle) {\r\n const fr = primTri.IDATA.edgematch[faceNb][0];\r\n for (let i = 0; i < primTri.isoVecsABOB.length; i++) {\r\n const temp = [];\r\n for (let j = 0; j < 3; j++) {\r\n if (primTri.vertexTypes[i][j] === 0) {\r\n temp.push(faceNb + \"|\" + primTri.isoVecsABOB[i][j].x + \"|\" + primTri.isoVecsABOB[i][j].y);\r\n } else {\r\n temp.push(fr + \"|\" + primTri.isoVecsABOB[i][j].x + \"|\" + primTri.isoVecsABOB[i][j].y);\r\n }\r\n }\r\n this.face.push([primTri.vecToidx[temp[0]], primTri.vecToidx[temp[1]], primTri.vecToidx[temp[2]]]);\r\n }\r\n }\r\n /**\r\n * @internal\r\n */\r\n public mapOBOAtoDATA(faceNb: number, primTri: _PrimaryIsoTriangle) {\r\n const fr = primTri.IDATA.edgematch[faceNb][0];\r\n for (let i = 0; i < primTri.isoVecsOBOA.length; i++) {\r\n const temp = [];\r\n for (let j = 0; j < 3; j++) {\r\n if (primTri.vertexTypes[i][j] === 1) {\r\n temp.push(faceNb + \"|\" + primTri.isoVecsOBOA[i][j].x + \"|\" + primTri.isoVecsOBOA[i][j].y);\r\n } else {\r\n temp.push(fr + \"|\" + primTri.isoVecsOBOA[i][j].x + \"|\" + primTri.isoVecsOBOA[i][j].y);\r\n }\r\n }\r\n this.face.push([primTri.vecToidx[temp[0]], primTri.vecToidx[temp[1]], primTri.vecToidx[temp[2]]]);\r\n }\r\n }\r\n /**\r\n * @internal\r\n */\r\n public mapBAOAtoDATA(faceNb: number, primTri: _PrimaryIsoTriangle) {\r\n const fr = primTri.IDATA.edgematch[faceNb][2];\r\n for (let i = 0; i < primTri.isoVecsBAOA.length; i++) {\r\n const temp = [];\r\n for (let j = 0; j < 3; j++) {\r\n if (primTri.vertexTypes[i][j] === 1) {\r\n temp.push(faceNb + \"|\" + primTri.isoVecsBAOA[i][j].x + \"|\" + primTri.isoVecsBAOA[i][j].y);\r\n } else {\r\n temp.push(fr + \"|\" + primTri.isoVecsBAOA[i][j].x + \"|\" + primTri.isoVecsBAOA[i][j].y);\r\n }\r\n }\r\n this.face.push([primTri.vecToidx[temp[0]], primTri.vecToidx[temp[1]], primTri.vecToidx[temp[2]]]);\r\n }\r\n }\r\n /**\r\n * @internal\r\n */\r\n public orderData(primTri: _PrimaryIsoTriangle) {\r\n const nearTo: number[][][] = [];\r\n for (let i = 0; i < 13; i++) {\r\n nearTo[i] = [];\r\n }\r\n const close: number[][] = primTri.closestTo;\r\n for (let i = 0; i < close.length; i++) {\r\n if (close[i][0] > -1) {\r\n if (close[i][1] > 0) {\r\n nearTo[close[i][0]].push([i, close[i][1]]);\r\n }\r\n } else {\r\n nearTo[12].push([i, close[i][0]]);\r\n }\r\n }\r\n\r\n const near: number[] = [];\r\n for (let i = 0; i < 12; i++) {\r\n near[i] = i;\r\n }\r\n let nearIndex = 12;\r\n for (let i = 0; i < 12; i++) {\r\n nearTo[i].sort((a: number[], b: number[]) => {\r\n return a[1] - b[1];\r\n });\r\n for (let j = 0; j < nearTo[i].length; j++) {\r\n near[nearTo[i][j][0]] = nearIndex++;\r\n }\r\n }\r\n\r\n for (let j = 0; j < nearTo[12].length; j++) {\r\n near[nearTo[12][j][0]] = nearIndex++;\r\n }\r\n\r\n for (let i = 0; i < this.vertex.length; i++) {\r\n this.vertex[i].push(near[i]);\r\n }\r\n\r\n this.vertex.sort((a, b) => {\r\n return a[3] - b[3];\r\n });\r\n\r\n for (let i = 0; i < this.vertex.length; i++) {\r\n this.vertex[i].pop();\r\n }\r\n\r\n for (let i = 0; i < this.face.length; i++) {\r\n for (let j = 0; j < this.face[i].length; j++) {\r\n this.face[i][j] = near[this.face[i][j]];\r\n }\r\n }\r\n\r\n this.sharedNodes = nearTo[12].length;\r\n this.poleNodes = this.vertex.length - this.sharedNodes;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public setOrder(m: number, faces: number[]) {\r\n const adjVerts: number[] = [];\r\n const dualFaces: number[] = [];\r\n let face: number = <number>faces.pop();\r\n dualFaces.push(face);\r\n let index = this.face[face].indexOf(m);\r\n index = (index + 2) % 3;\r\n let v = this.face[face][index];\r\n adjVerts.push(v);\r\n let f = 0;\r\n while (faces.length > 0) {\r\n face = faces[f];\r\n if (this.face[face].indexOf(v) > -1) {\r\n // v is a vertex of face f\r\n index = (this.face[face].indexOf(v) + 1) % 3;\r\n v = this.face[face][index];\r\n adjVerts.push(v);\r\n dualFaces.push(face);\r\n faces.splice(f, 1);\r\n f = 0;\r\n } else {\r\n f++;\r\n }\r\n }\r\n this.adjacentFaces.push(adjVerts);\r\n return dualFaces;\r\n }\r\n /**\r\n * @internal\r\n */\r\n public toGoldbergPolyhedronData(): PolyhedronData {\r\n const goldbergPolyhedronData: PolyhedronData = new PolyhedronData(\"GeoDual\", \"Goldberg\", [], []);\r\n goldbergPolyhedronData.name = \"GD dual\";\r\n const verticesNb: number = this.vertex.length;\r\n const map = new Array(verticesNb);\r\n for (let v = 0; v < verticesNb; v++) {\r\n map[v] = [];\r\n }\r\n for (let f = 0; f < this.face.length; f++) {\r\n for (let i = 0; i < 3; i++) {\r\n map[this.face[f][i]].push(f);\r\n }\r\n }\r\n let cx = 0;\r\n let cy = 0;\r\n let cz = 0;\r\n let face = [];\r\n let vertex = [];\r\n this.adjacentFaces = [];\r\n for (let m = 0; m < map.length; m++) {\r\n goldbergPolyhedronData.face[m] = this.setOrder(m, map[m].concat([]));\r\n for (const el of map[m]) {\r\n cx = 0;\r\n cy = 0;\r\n cz = 0;\r\n face = this.face[el];\r\n for (let i = 0; i < 3; i++) {\r\n vertex = this.vertex[face[i]];\r\n cx += vertex[0];\r\n cy += vertex[1];\r\n cz += vertex[2];\r\n }\r\n goldbergPolyhedronData.vertex[el] = [cx / 3, cy / 3, cz / 3];\r\n }\r\n }\r\n return goldbergPolyhedronData;\r\n }\r\n\r\n //statics\r\n /**Builds the data for a Geodesic Polyhedron from a primary triangle\r\n * @param primTri the primary triangle\r\n * @internal\r\n */\r\n\r\n public static BuildGeodesicData(primTri: _PrimaryIsoTriangle) {\r\n const geodesicData = new GeodesicData(\r\n \"Geodesic-m-n\",\r\n \"Geodesic\",\r\n [\r\n [0, PHI, -1],\r\n [-PHI, 1, 0],\r\n [-1, 0, -PHI],\r\n [1, 0, -PHI],\r\n [PHI, 1, 0],\r\n [0, PHI, 1],\r\n [-1, 0, PHI],\r\n [-PHI, -1, 0],\r\n [0, -PHI, -1],\r\n [PHI, -1, 0],\r\n [1, 0, PHI],\r\n [0, -PHI, 1],\r\n ],\r\n []\r\n );\r\n\r\n primTri.setIndices();\r\n primTri.calcCoeffs();\r\n primTri.createInnerFacets();\r\n primTri.edgeVecsABOB();\r\n primTri.mapABOBtoOBOA();\r\n primTri.mapABOBtoBAOA();\r\n\r\n for (let f = 0; f < primTri.IDATA.face.length; f++) {\r\n primTri.MapToFace(f, geodesicData);\r\n geodesicData.innerToData(f, primTri);\r\n if (primTri.IDATA.edgematch[f][1] === \"B\") {\r\n geodesicData.mapABOBtoDATA(f, primTri);\r\n }\r\n if (primTri.IDATA.edgematch[f][1] === \"O\") {\r\n geodesicData.mapOBOAtoDATA(f, primTri);\r\n }\r\n if (primTri.IDATA.edgematch[f][3] === \"A\") {\r\n geodesicData.mapBAOAtoDATA(f, primTri);\r\n }\r\n }\r\n\r\n geodesicData.orderData(primTri);\r\n const radius = 1;\r\n geodesicData.vertex = geodesicData.vertex.map(function (el) {\r\n const a = el[0];\r\n const b = el[1];\r\n const c = el[2];\r\n const d = Math.sqrt(a * a + b * b + c * c);\r\n el[0] *= radius / d;\r\n el[1] *= radius / d;\r\n el[2] *= radius / d;\r\n return el;\r\n });\r\n\r\n return geodesicData;\r\n }\r\n}\r\n"]}
|
package/Meshes/mesh.js
CHANGED
|
@@ -941,9 +941,9 @@ export class Mesh extends AbstractMesh {
|
|
|
941
941
|
if (!this._geometry) {
|
|
942
942
|
const result = [];
|
|
943
943
|
if (this._delayInfo) {
|
|
944
|
-
this._delayInfo
|
|
944
|
+
for (const kind of this._delayInfo) {
|
|
945
945
|
result.push(kind);
|
|
946
|
-
}
|
|
946
|
+
}
|
|
947
947
|
}
|
|
948
948
|
return result;
|
|
949
949
|
}
|
|
@@ -2304,10 +2304,10 @@ export class Mesh extends AbstractMesh {
|
|
|
2304
2304
|
else {
|
|
2305
2305
|
this._delayLoadingFunction(JSON.parse(data), this);
|
|
2306
2306
|
}
|
|
2307
|
-
this.instances
|
|
2307
|
+
for (const instance of this.instances) {
|
|
2308
2308
|
instance.refreshBoundingInfo();
|
|
2309
2309
|
instance._syncSubMeshes();
|
|
2310
|
-
}
|
|
2310
|
+
}
|
|
2311
2311
|
this.delayLoadState = 1;
|
|
2312
2312
|
scene.removePendingData(this);
|
|
2313
2313
|
}, () => { }, scene.offlineProvider, getBinaryData);
|
|
@@ -3863,7 +3863,7 @@ export class Mesh extends AbstractMesh {
|
|
|
3863
3863
|
static MinMax(meshes) {
|
|
3864
3864
|
let minVector = null;
|
|
3865
3865
|
let maxVector = null;
|
|
3866
|
-
|
|
3866
|
+
for (const mesh of meshes) {
|
|
3867
3867
|
const boundingInfo = mesh.getBoundingInfo();
|
|
3868
3868
|
const boundingBox = boundingInfo.boundingBox;
|
|
3869
3869
|
if (!minVector || !maxVector) {
|
|
@@ -3874,7 +3874,7 @@ export class Mesh extends AbstractMesh {
|
|
|
3874
3874
|
minVector.minimizeInPlace(boundingBox.minimumWorld);
|
|
3875
3875
|
maxVector.maximizeInPlace(boundingBox.maximumWorld);
|
|
3876
3876
|
}
|
|
3877
|
-
}
|
|
3877
|
+
}
|
|
3878
3878
|
if (!minVector || !maxVector) {
|
|
3879
3879
|
return {
|
|
3880
3880
|
min: Vector3.Zero(),
|