three-stdlib 2.15.0 → 2.15.2
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/animation/AnimationClipCreator.js +32 -52
- package/animation/AnimationClipCreator.mjs +57 -0
- package/animation/CCDIKSolver.js +66 -161
- package/animation/CCDIKSolver.mjs +234 -0
- package/animation/MMDAnimationHelper.js +150 -341
- package/animation/MMDAnimationHelper.mjs +514 -0
- package/animation/MMDPhysics.js +154 -361
- package/animation/MMDPhysics.mjs +769 -0
- package/cameras/CinematicCamera.js +67 -77
- package/cameras/CinematicCamera.mjs +129 -0
- package/controls/ArcballControls.js +544 -1449
- package/controls/ArcballControls.mjs +1737 -0
- package/controls/DeviceOrientationControls.js +52 -97
- package/controls/DeviceOrientationControls.mjs +74 -0
- package/controls/DragControls.js +85 -187
- package/controls/DragControls.mjs +172 -0
- package/controls/FirstPersonControls.js +123 -193
- package/controls/FirstPersonControls.mjs +220 -0
- package/controls/FlyControls.js +82 -152
- package/controls/FlyControls.mjs +239 -0
- package/controls/OrbitControls.js +232 -481
- package/controls/OrbitControls.mjs +731 -0
- package/controls/PointerLockControls.js +63 -99
- package/controls/PointerLockControls.mjs +88 -0
- package/controls/TrackballControls.js +211 -383
- package/controls/TrackballControls.mjs +481 -0
- package/controls/TransformControls.js +575 -782
- package/controls/TransformControls.mjs +1068 -0
- package/controls/experimental/CameraControls.js +329 -609
- package/controls/experimental/CameraControls.mjs +673 -0
- package/csm/CSM.js +47 -108
- package/csm/CSM.mjs +244 -0
- package/csm/CSMFrustum.js +14 -29
- package/csm/CSMFrustum.mjs +75 -0
- package/csm/CSMHelper.js +20 -34
- package/csm/CSMHelper.mjs +114 -0
- package/csm/CSMShader.js +7 -11
- package/csm/CSMShader.mjs +251 -0
- package/curves/CurveExtras.js +73 -115
- package/curves/CurveExtras.mjs +224 -0
- package/curves/NURBSCurve.js +15 -43
- package/curves/NURBSCurve.mjs +35 -0
- package/curves/NURBSSurface.js +11 -27
- package/curves/NURBSSurface.mjs +28 -0
- package/curves/NURBSUtils.js +54 -203
- package/curves/NURBSUtils.mjs +226 -0
- package/deprecated/Geometry.js +191 -486
- package/deprecated/Geometry.mjs +966 -0
- package/effects/AnaglyphEffect.js +95 -60
- package/effects/AnaglyphEffect.mjs +120 -0
- package/effects/AsciiEffect.js +80 -110
- package/effects/AsciiEffect.mjs +173 -0
- package/effects/OutlineEffect.js +121 -204
- package/effects/OutlineEffect.mjs +295 -0
- package/effects/ParallaxBarrierEffect.js +39 -38
- package/effects/ParallaxBarrierEffect.mjs +64 -0
- package/effects/PeppersGhostEffect.js +19 -68
- package/effects/PeppersGhostEffect.mjs +85 -0
- package/effects/StereoEffect.js +12 -16
- package/effects/StereoEffect.mjs +32 -0
- package/environments/RoomEnvironment.js +52 -47
- package/environments/RoomEnvironment.mjs +78 -0
- package/exporters/ColladaExporter.js +115 -241
- package/exporters/ColladaExporter.mjs +299 -0
- package/exporters/DRACOExporter.js +67 -121
- package/exporters/DRACOExporter.mjs +132 -0
- package/exporters/GLTFExporter.js +463 -1014
- package/exporters/GLTFExporter.mjs +1381 -0
- package/exporters/MMDExporter.js +44 -102
- package/exporters/MMDExporter.mjs +102 -0
- package/exporters/OBJExporter.js +78 -140
- package/exporters/OBJExporter.mjs +166 -0
- package/exporters/PLYExporter.js +93 -154
- package/exporters/PLYExporter.mjs +278 -0
- package/exporters/STLExporter.js +30 -81
- package/exporters/STLExporter.mjs +129 -0
- package/exporters/USDZExporter.js +84 -144
- package/exporters/USDZExporter.mjs +328 -0
- package/geometries/BoxLineGeometry.js +7 -14
- package/geometries/BoxLineGeometry.mjs +45 -0
- package/geometries/ConvexGeometry.js +15 -24
- package/geometries/ConvexGeometry.mjs +29 -0
- package/geometries/DecalGeometry.js +108 -162
- package/geometries/DecalGeometry.mjs +184 -0
- package/geometries/LightningStrike.js +101 -294
- package/geometries/LightningStrike.mjs +547 -0
- package/geometries/ParametricGeometries.js +26 -76
- package/geometries/ParametricGeometries.mjs +129 -0
- package/geometries/ParametricGeometry.js +24 -48
- package/geometries/ParametricGeometry.mjs +63 -0
- package/geometries/RoundedBoxGeometry.js +33 -64
- package/geometries/RoundedBoxGeometry.mjs +91 -0
- package/geometries/TeapotGeometry.js +1434 -174
- package/geometries/TeapotGeometry.mjs +1557 -0
- package/geometries/TextGeometry.js +9 -17
- package/geometries/TextGeometry.mjs +23 -0
- package/helpers/LightProbeHelper.js +53 -21
- package/helpers/LightProbeHelper.mjs +72 -0
- package/helpers/PositionalAudioHelper.js +23 -30
- package/helpers/PositionalAudioHelper.mjs +68 -0
- package/helpers/RectAreaLightHelper.js +17 -33
- package/helpers/RectAreaLightHelper.mjs +44 -0
- package/helpers/VertexNormalsHelper.js +20 -41
- package/helpers/VertexNormalsHelper.mjs +54 -0
- package/helpers/VertexTangentsHelper.js +18 -36
- package/helpers/VertexTangentsHelper.mjs +45 -0
- package/index.d.ts +54 -0
- package/index.js +968 -333
- package/index.mjs +968 -0
- package/interactive/SelectionBox.js +31 -46
- package/interactive/SelectionBox.mjs +137 -0
- package/interactive/SelectionHelper.js +16 -21
- package/interactive/SelectionHelper.mjs +54 -0
- package/libs/MeshoptDecoder.js +147 -58
- package/libs/MeshoptDecoder.mjs +210 -0
- package/libs/MotionControllers.js +66 -208
- package/libs/MotionControllers.mjs +261 -0
- package/lights/LightProbeGenerator.js +40 -96
- package/lights/LightProbeGenerator.mjs +145 -0
- package/lights/RectAreaLightUniformsLib.js +32842 -9
- package/lights/RectAreaLightUniformsLib.mjs +32842 -0
- package/lines/Line2.js +9 -12
- package/lines/Line2.mjs +13 -0
- package/lines/LineGeometry.js +7 -19
- package/lines/LineGeometry.mjs +44 -0
- package/lines/LineMaterial.js +51 -89
- package/lines/LineMaterial.mjs +539 -0
- package/lines/LineSegments2.js +56 -165
- package/lines/LineSegments2.mjs +202 -0
- package/lines/LineSegmentsGeometry.js +29 -71
- package/lines/LineSegmentsGeometry.mjs +124 -0
- package/lines/Wireframe.js +15 -29
- package/lines/Wireframe.mjs +31 -0
- package/lines/WireframeGeometry2.js +8 -9
- package/lines/WireframeGeometry2.mjs +13 -0
- package/loaders/3DMLoader.js +234 -469
- package/loaders/3DMLoader.mjs +802 -0
- package/loaders/3MFLoader.js +340 -555
- package/loaders/3MFLoader.mjs +837 -0
- package/loaders/AMFLoader.js +114 -219
- package/loaders/AMFLoader.mjs +284 -0
- package/loaders/AssimpLoader.js +328 -725
- package/loaders/AssimpLoader.mjs +1396 -0
- package/loaders/BVHLoader.js +94 -200
- package/loaders/BVHLoader.mjs +207 -0
- package/loaders/BasisTextureLoader.js +229 -357
- package/loaders/BasisTextureLoader.mjs +474 -0
- package/loaders/ColladaLoader.js +932 -1522
- package/loaders/ColladaLoader.mjs +2403 -0
- package/loaders/DDSLoader.js +42 -108
- package/loaders/DDSLoader.mjs +148 -0
- package/loaders/DRACOLoader.js +103 -210
- package/loaders/DRACOLoader.mjs +340 -0
- package/loaders/EXRLoader.js +461 -809
- package/loaders/EXRLoader.mjs +1351 -0
- package/loaders/FBXLoader.js +842 -1397
- package/loaders/FBXLoader.mjs +2362 -0
- package/loaders/FontLoader.js +33 -66
- package/loaders/FontLoader.mjs +111 -0
- package/loaders/GCodeLoader.js +63 -111
- package/loaders/GCodeLoader.mjs +141 -0
- package/loaders/GLTFLoader.js +771 -1484
- package/loaders/GLTFLoader.mjs +2316 -0
- package/loaders/HDRCubeTextureLoader.js +45 -50
- package/loaders/HDRCubeTextureLoader.mjs +77 -0
- package/loaders/KMZLoader.js +42 -55
- package/loaders/KMZLoader.mjs +75 -0
- package/loaders/KTX2Loader.js +229 -362
- package/loaders/KTX2Loader.mjs +427 -0
- package/loaders/KTXLoader.js +37 -99
- package/loaders/KTXLoader.mjs +87 -0
- package/loaders/LDrawLoader.js +313 -746
- package/loaders/LDrawLoader.mjs +1409 -0
- package/loaders/LUT3dlLoader.js +50 -62
- package/loaders/LUT3dlLoader.mjs +100 -0
- package/loaders/LUTCubeLoader.js +45 -56
- package/loaders/LUTCubeLoader.mjs +104 -0
- package/loaders/LWOLoader.js +227 -339
- package/loaders/LWOLoader.mjs +625 -0
- package/loaders/LottieLoader.js +36 -38
- package/loaders/LottieLoader.mjs +47 -0
- package/loaders/MD2Loader.js +248 -91
- package/loaders/MD2Loader.mjs +359 -0
- package/loaders/MDDLoader.js +25 -45
- package/loaders/MDDLoader.mjs +58 -0
- package/loaders/MMDLoader.js +359 -795
- package/loaders/MMDLoader.mjs +998 -0
- package/loaders/MTLLoader.js +91 -201
- package/loaders/MTLLoader.mjs +280 -0
- package/loaders/NRRDLoader.js +182 -263
- package/loaders/NRRDLoader.mjs +401 -0
- package/loaders/NodeMaterialLoader.js +121 -14
- package/loaders/NodeMaterialLoader.mjs +146 -0
- package/loaders/OBJLoader.js +161 -283
- package/loaders/OBJLoader.mjs +487 -0
- package/loaders/PCDLoader.js +145 -164
- package/loaders/PCDLoader.mjs +248 -0
- package/loaders/PDBLoader.js +45 -63
- package/loaders/PDBLoader.mjs +246 -0
- package/loaders/PLYLoader.js +106 -203
- package/loaders/PLYLoader.mjs +317 -0
- package/loaders/PRWMLoader.js +73 -110
- package/loaders/PRWMLoader.mjs +160 -0
- package/loaders/PVRLoader.js +32 -93
- package/loaders/PVRLoader.mjs +131 -0
- package/loaders/RGBELoader.js +96 -233
- package/loaders/RGBELoader.mjs +244 -0
- package/loaders/RGBMLoader.js +344 -514
- package/loaders/RGBMLoader.mjs +998 -0
- package/loaders/STLLoader.js +59 -165
- package/loaders/STLLoader.mjs +190 -0
- package/loaders/SVGLoader.js +481 -851
- package/loaders/SVGLoader.mjs +1709 -0
- package/loaders/TDSLoader.js +137 -527
- package/loaders/TDSLoader.mjs +480 -0
- package/loaders/TGALoader.js +94 -205
- package/loaders/TGALoader.mjs +285 -0
- package/loaders/TTFLoader.js +58 -79
- package/loaders/TTFLoader.mjs +131 -0
- package/loaders/TiltLoader.js +129 -167
- package/loaders/TiltLoader.mjs +373 -0
- package/loaders/VOXLoader.js +320 -84
- package/loaders/VOXLoader.mjs +431 -0
- package/loaders/VRMLLoader.js +786 -1268
- package/loaders/VRMLLoader.mjs +2093 -0
- package/loaders/VRMLoader.js +23 -31
- package/loaders/VRMLoader.mjs +38 -0
- package/loaders/VTKLoader.js +219 -407
- package/loaders/VTKLoader.mjs +646 -0
- package/loaders/XLoader.js +1083 -1259
- package/loaders/XLoader.mjs +1258 -0
- package/loaders/XYZLoader.js +28 -34
- package/loaders/XYZLoader.mjs +60 -0
- package/loaders/lwo/IFFParser.js +238 -492
- package/loaders/lwo/IFFParser.mjs +697 -0
- package/loaders/lwo/LWO2Parser.js +176 -279
- package/loaders/lwo/LWO2Parser.mjs +327 -0
- package/loaders/lwo/LWO3Parser.js +160 -247
- package/loaders/lwo/LWO3Parser.mjs +298 -0
- package/math/Capsule.js +56 -43
- package/math/Capsule.mjs +100 -0
- package/math/ColorConverter.js +18 -32
- package/math/ColorConverter.mjs +51 -0
- package/math/ConvexHull.js +515 -739
- package/math/ConvexHull.mjs +574 -0
- package/math/ImprovedNoise.js +282 -32
- package/math/ImprovedNoise.mjs +302 -0
- package/math/Lut.js +51 -35
- package/math/Lut.mjs +135 -0
- package/math/MeshSurfaceSampler.js +25 -68
- package/math/MeshSurfaceSampler.mjs +107 -0
- package/math/OBB.js +91 -152
- package/math/OBB.mjs +235 -0
- package/math/Octree.js +76 -139
- package/math/Octree.mjs +278 -0
- package/math/SimplexNoise.js +217 -238
- package/math/SimplexNoise.mjs +425 -0
- package/misc/ConvexObjectBreaker.js +79 -185
- package/misc/ConvexObjectBreaker.mjs +292 -0
- package/misc/GPUComputationRenderer.js +69 -194
- package/misc/GPUComputationRenderer.mjs +171 -0
- package/misc/Gyroscope.js +16 -22
- package/misc/Gyroscope.mjs +35 -0
- package/misc/MD2Character.js +52 -74
- package/misc/MD2Character.mjs +162 -0
- package/misc/MD2CharacterComplex.js +112 -163
- package/misc/MD2CharacterComplex.mjs +328 -0
- package/misc/MorphAnimMesh.js +20 -28
- package/misc/MorphAnimMesh.mjs +40 -0
- package/misc/MorphBlendMesh.js +45 -69
- package/misc/MorphBlendMesh.mjs +179 -0
- package/misc/ProgressiveLightmap.js +70 -187
- package/misc/ProgressiveLightmap.mjs +166 -0
- package/misc/RollerCoaster.js +106 -135
- package/misc/RollerCoaster.mjs +346 -0
- package/misc/TubePainter.js +74 -92
- package/misc/TubePainter.mjs +123 -0
- package/misc/Volume.js +108 -270
- package/misc/Volume.mjs +244 -0
- package/misc/VolumeSlice.js +34 -122
- package/misc/VolumeSlice.mjs +106 -0
- package/misc/WebGL.js +37 -34
- package/misc/WebGL.mjs +74 -0
- package/modifiers/CurveModifier.js +46 -151
- package/modifiers/CurveModifier.mjs +182 -0
- package/modifiers/EdgeSplitModifier.js +46 -90
- package/modifiers/EdgeSplitModifier.mjs +162 -0
- package/modifiers/SimplifyModifier.js +77 -202
- package/modifiers/SimplifyModifier.mjs +282 -0
- package/modifiers/TessellateModifier.js +65 -90
- package/modifiers/TessellateModifier.mjs +206 -0
- package/nodes/Nodes.js +274 -140
- package/nodes/Nodes.mjs +400 -0
- package/nodes/ShaderNode.js +296 -196
- package/nodes/ShaderNode.mjs +408 -0
- package/nodes/accessors/BufferNode.js +4 -8
- package/nodes/accessors/BufferNode.mjs +15 -0
- package/nodes/accessors/CameraNode.js +20 -25
- package/nodes/accessors/CameraNode.mjs +44 -0
- package/nodes/accessors/CubeTextureNode.js +14 -26
- package/nodes/accessors/CubeTextureNode.mjs +42 -0
- package/nodes/accessors/MaterialNode.js +43 -53
- package/nodes/accessors/MaterialNode.mjs +71 -0
- package/nodes/accessors/MaterialReferenceNode.js +3 -6
- package/nodes/accessors/MaterialReferenceNode.mjs +14 -0
- package/nodes/accessors/ModelNode.js +3 -5
- package/nodes/accessors/ModelNode.mjs +9 -0
- package/nodes/accessors/ModelViewProjectionNode.js +14 -13
- package/nodes/accessors/ModelViewProjectionNode.mjs +24 -0
- package/nodes/accessors/NormalNode.js +40 -39
- package/nodes/accessors/NormalNode.mjs +62 -0
- package/nodes/accessors/Object3DNode.js +40 -50
- package/nodes/accessors/Object3DNode.mjs +76 -0
- package/nodes/accessors/PointUVNode.js +5 -9
- package/nodes/accessors/PointUVNode.mjs +13 -0
- package/nodes/accessors/PositionNode.js +42 -41
- package/nodes/accessors/PositionNode.mjs +65 -0
- package/nodes/accessors/ReferenceNode.js +10 -17
- package/nodes/accessors/ReferenceNode.mjs +37 -0
- package/nodes/accessors/ReflectNode.js +23 -26
- package/nodes/accessors/ReflectNode.mjs +43 -0
- package/nodes/accessors/SkinningNode.js +46 -48
- package/nodes/accessors/SkinningNode.mjs +58 -0
- package/nodes/accessors/TextureNode.js +14 -29
- package/nodes/accessors/TextureNode.mjs +54 -0
- package/nodes/accessors/UVNode.js +5 -11
- package/nodes/accessors/UVNode.mjs +23 -0
- package/nodes/core/ArrayUniformNode.js +3 -7
- package/nodes/core/ArrayUniformNode.mjs +14 -0
- package/nodes/core/AttributeNode.js +5 -12
- package/nodes/core/AttributeNode.mjs +30 -0
- package/nodes/core/BypassNode.js +5 -12
- package/nodes/core/BypassNode.mjs +22 -0
- package/nodes/core/CodeNode.js +4 -12
- package/nodes/core/CodeNode.mjs +28 -0
- package/nodes/core/ConstNode.js +3 -7
- package/nodes/core/ConstNode.mjs +14 -0
- package/nodes/core/ContextNode.js +3 -8
- package/nodes/core/ContextNode.mjs +22 -0
- package/nodes/core/ExpressionNode.js +5 -9
- package/nodes/core/ExpressionNode.mjs +19 -0
- package/nodes/core/FunctionCallNode.js +6 -15
- package/nodes/core/FunctionCallNode.mjs +37 -0
- package/nodes/core/FunctionNode.js +10 -25
- package/nodes/core/FunctionNode.mjs +56 -0
- package/nodes/core/InputNode.js +12 -23
- package/nodes/core/InputNode.mjs +38 -0
- package/nodes/core/Node.js +35 -75
- package/nodes/core/Node.mjs +139 -0
- package/nodes/core/NodeAttribute.js +2 -4
- package/nodes/core/NodeAttribute.mjs +10 -0
- package/nodes/core/NodeBuilder.js +110 -224
- package/nodes/core/NodeBuilder.mjs +395 -0
- package/nodes/core/NodeCode.js +4 -7
- package/nodes/core/NodeCode.mjs +11 -0
- package/nodes/core/NodeFrame.js +9 -12
- package/nodes/core/NodeFrame.mjs +35 -0
- package/nodes/core/NodeFunctionInput.js +3 -5
- package/nodes/core/NodeFunctionInput.mjs +13 -0
- package/nodes/core/NodeKeywords.js +5 -16
- package/nodes/core/NodeKeywords.mjs +44 -0
- package/nodes/core/NodeUniform.js +3 -7
- package/nodes/core/NodeUniform.mjs +18 -0
- package/nodes/core/NodeUtils.js +39 -43
- package/nodes/core/NodeUtils.mjs +57 -0
- package/nodes/core/NodeVar.js +2 -4
- package/nodes/core/NodeVar.mjs +10 -0
- package/nodes/core/NodeVary.js +2 -4
- package/nodes/core/NodeVary.mjs +10 -0
- package/nodes/core/PropertyNode.js +4 -10
- package/nodes/core/PropertyNode.mjs +21 -0
- package/nodes/core/TempNode.js +5 -11
- package/nodes/core/TempNode.mjs +25 -0
- package/nodes/core/UniformNode.js +4 -10
- package/nodes/core/UniformNode.mjs +23 -0
- package/nodes/core/VarNode.js +3 -11
- package/nodes/core/VarNode.mjs +31 -0
- package/nodes/core/VaryNode.js +6 -15
- package/nodes/core/VaryNode.mjs +30 -0
- package/nodes/core/constants.js +20 -7
- package/nodes/core/constants.mjs +24 -0
- package/nodes/display/ColorSpaceNode.js +34 -38
- package/nodes/display/ColorSpaceNode.mjs +63 -0
- package/nodes/display/NormalMapNode.js +35 -53
- package/nodes/display/NormalMapNode.mjs +54 -0
- package/nodes/fog/FogNode.js +5 -9
- package/nodes/fog/FogNode.mjs +15 -0
- package/nodes/fog/FogRangeNode.js +5 -9
- package/nodes/fog/FogRangeNode.mjs +17 -0
- package/nodes/functions/BSDFs.js +61 -118
- package/nodes/functions/BSDFs.mjs +64 -0
- package/nodes/lights/LightContextNode.js +14 -23
- package/nodes/lights/LightContextNode.mjs +35 -0
- package/nodes/lights/LightNode.js +27 -31
- package/nodes/lights/LightNode.mjs +58 -0
- package/nodes/lights/LightsNode.js +9 -28
- package/nodes/lights/LightsNode.mjs +59 -0
- package/nodes/loaders/NodeLoader.js +27 -42
- package/nodes/loaders/NodeLoader.mjs +66 -0
- package/nodes/loaders/NodeMaterialLoader.js +4 -10
- package/nodes/loaders/NodeMaterialLoader.mjs +24 -0
- package/nodes/loaders/NodeObjectLoader.js +9 -19
- package/nodes/loaders/NodeObjectLoader.mjs +40 -0
- package/nodes/materials/LineBasicNodeMaterial.js +5 -10
- package/nodes/materials/LineBasicNodeMaterial.mjs +27 -0
- package/nodes/materials/Materials.js +14 -17
- package/nodes/materials/Materials.mjs +28 -0
- package/nodes/materials/MeshBasicNodeMaterial.js +5 -10
- package/nodes/materials/MeshBasicNodeMaterial.mjs +28 -0
- package/nodes/materials/MeshStandardNodeMaterial.js +5 -8
- package/nodes/materials/MeshStandardNodeMaterial.mjs +41 -0
- package/nodes/materials/NodeMaterial.js +20 -36
- package/nodes/materials/NodeMaterial.mjs +64 -0
- package/nodes/materials/PointsNodeMaterial.js +5 -10
- package/nodes/materials/PointsNodeMaterial.mjs +30 -0
- package/nodes/math/CondNode.js +11 -23
- package/nodes/math/CondNode.mjs +38 -0
- package/nodes/math/MathNode.js +98 -142
- package/nodes/math/MathNode.mjs +163 -0
- package/nodes/math/OperatorNode.js +24 -46
- package/nodes/math/OperatorNode.mjs +103 -0
- package/nodes/procedural/CheckerNode.js +13 -19
- package/nodes/procedural/CheckerNode.mjs +21 -0
- package/nodes/utils/ArrayElementNode.js +4 -8
- package/nodes/utils/ArrayElementNode.mjs +19 -0
- package/nodes/utils/ConvertNode.js +3 -8
- package/nodes/utils/ConvertNode.mjs +25 -0
- package/nodes/utils/JoinNode.js +7 -11
- package/nodes/utils/JoinNode.mjs +26 -0
- package/nodes/utils/MatcapUVNode.js +8 -11
- package/nodes/utils/MatcapUVNode.mjs +16 -0
- package/nodes/utils/OscNode.js +27 -33
- package/nodes/utils/OscNode.mjs +50 -0
- package/nodes/utils/SplitNode.js +6 -20
- package/nodes/utils/SplitNode.mjs +45 -0
- package/nodes/utils/SpriteSheetUVNode.js +23 -23
- package/nodes/utils/SpriteSheetUVNode.mjs +40 -0
- package/nodes/utils/TimerNode.js +20 -24
- package/nodes/utils/TimerNode.mjs +44 -0
- package/objects/GroundProjectedEnv.js +22 -37
- package/objects/GroundProjectedEnv.mjs +130 -0
- package/objects/Lensflare.js +86 -156
- package/objects/Lensflare.mjs +262 -0
- package/objects/LightningStorm.js +38 -102
- package/objects/LightningStorm.mjs +110 -0
- package/objects/MarchingCubes.js +150 -303
- package/objects/MarchingCubes.mjs +457 -0
- package/objects/Reflector.js +50 -72
- package/objects/Reflector.mjs +166 -0
- package/objects/ReflectorForSSRPass.js +80 -131
- package/objects/ReflectorForSSRPass.mjs +247 -0
- package/objects/ReflectorRTT.js +6 -7
- package/objects/ReflectorRTT.mjs +10 -0
- package/objects/Refractor.js +64 -106
- package/objects/Refractor.mjs +178 -0
- package/objects/ShadowMesh.js +8 -17
- package/objects/ShadowMesh.mjs +41 -0
- package/objects/Sky.js +119 -80
- package/objects/Sky.mjs +124 -0
- package/objects/Water.js +83 -127
- package/objects/Water.mjs +235 -0
- package/objects/Water2.js +72 -108
- package/objects/Water2.mjs +252 -0
- package/offscreen/jank.js +10 -14
- package/offscreen/jank.mjs +27 -0
- package/offscreen/offscreen.js +4 -5
- package/offscreen/offscreen.mjs +5 -0
- package/offscreen/scene.js +45 -48
- package/offscreen/scene.mjs +52 -0
- package/package.json +3 -3
- package/physics/AmmoPhysics.js +30 -71
- package/physics/AmmoPhysics.mjs +165 -0
- package/postprocessing/AdaptiveToneMappingPass.js +97 -123
- package/postprocessing/AdaptiveToneMappingPass.mjs +221 -0
- package/postprocessing/AfterimagePass.js +28 -49
- package/postprocessing/AfterimagePass.mjs +55 -0
- package/postprocessing/BloomPass.js +43 -69
- package/postprocessing/BloomPass.mjs +90 -0
- package/postprocessing/BokehPass.js +39 -69
- package/postprocessing/BokehPass.mjs +76 -0
- package/postprocessing/ClearPass.js +10 -25
- package/postprocessing/ClearPass.mjs +27 -0
- package/postprocessing/CubeTexturePass.js +28 -27
- package/postprocessing/CubeTexturePass.mjs +49 -0
- package/postprocessing/DotScreenPass.js +24 -32
- package/postprocessing/DotScreenPass.mjs +40 -0
- package/postprocessing/EffectComposer.js +39 -86
- package/postprocessing/EffectComposer.mjs +139 -0
- package/postprocessing/FilmPass.js +25 -30
- package/postprocessing/FilmPass.mjs +42 -0
- package/postprocessing/GlitchPass.js +38 -61
- package/postprocessing/GlitchPass.mjs +75 -0
- package/postprocessing/HalftonePass.js +19 -39
- package/postprocessing/HalftonePass.mjs +44 -0
- package/postprocessing/LUTPass.js +13 -38
- package/postprocessing/LUTPass.mjs +136 -0
- package/postprocessing/MaskPass.js +19 -38
- package/postprocessing/MaskPass.mjs +60 -0
- package/postprocessing/OutlinePass.js +135 -277
- package/postprocessing/OutlinePass.mjs +438 -0
- package/postprocessing/Pass.js +20 -44
- package/postprocessing/Pass.mjs +37 -0
- package/postprocessing/RenderPass.js +13 -36
- package/postprocessing/RenderPass.mjs +48 -0
- package/postprocessing/RenderPixelatedPass.js +44 -58
- package/postprocessing/RenderPixelatedPass.mjs +199 -0
- package/postprocessing/SAOPass.js +154 -189
- package/postprocessing/SAOPass.mjs +282 -0
- package/postprocessing/SMAAPass.js +64 -84
- package/postprocessing/SMAAPass.mjs +112 -0
- package/postprocessing/SSAARenderPass.js +121 -69
- package/postprocessing/SSAARenderPass.mjs +170 -0
- package/postprocessing/SSAOPass.js +123 -172
- package/postprocessing/SSAOPass.mjs +265 -0
- package/postprocessing/SSRPass.js +211 -280
- package/postprocessing/SSRPass.mjs +432 -0
- package/postprocessing/SavePass.js +20 -25
- package/postprocessing/SavePass.mjs +37 -0
- package/postprocessing/ShaderPass.js +14 -30
- package/postprocessing/ShaderPass.mjs +39 -0
- package/postprocessing/TAARenderPass.js +42 -61
- package/postprocessing/TAARenderPass.mjs +88 -0
- package/postprocessing/TexturePass.js +21 -22
- package/postprocessing/TexturePass.mjs +39 -0
- package/postprocessing/UnrealBloomPass.js +105 -213
- package/postprocessing/UnrealBloomPass.mjs +220 -0
- package/renderers/CSS2DRenderer.js +44 -56
- package/renderers/CSS2DRenderer.mjs +112 -0
- package/renderers/CSS3DRenderer.js +53 -86
- package/renderers/CSS3DRenderer.mjs +133 -0
- package/renderers/Projector.js +107 -274
- package/renderers/Projector.mjs +511 -0
- package/renderers/SVGRenderer.js +72 -182
- package/renderers/SVGRenderer.mjs +306 -0
- package/renderers/nodes/accessors/CameraNode.js +29 -40
- package/renderers/nodes/accessors/CameraNode.mjs +63 -0
- package/renderers/nodes/accessors/ModelNode.js +28 -37
- package/renderers/nodes/accessors/ModelNode.mjs +61 -0
- package/renderers/nodes/accessors/ModelViewProjectionNode.js +10 -23
- package/renderers/nodes/accessors/ModelViewProjectionNode.mjs +21 -0
- package/renderers/nodes/accessors/NormalNode.js +35 -45
- package/renderers/nodes/accessors/NormalNode.mjs +61 -0
- package/renderers/nodes/accessors/PositionNode.js +18 -19
- package/renderers/nodes/accessors/PositionNode.mjs +30 -0
- package/renderers/nodes/accessors/UVNode.js +5 -10
- package/renderers/nodes/accessors/UVNode.mjs +13 -0
- package/renderers/nodes/core/AttributeNode.js +5 -14
- package/renderers/nodes/core/AttributeNode.mjs +35 -0
- package/renderers/nodes/core/InputNode.js +4 -14
- package/renderers/nodes/core/InputNode.mjs +31 -0
- package/renderers/nodes/core/Node.js +7 -17
- package/renderers/nodes/core/Node.mjs +34 -0
- package/renderers/nodes/core/NodeAttribute.js +3 -6
- package/renderers/nodes/core/NodeAttribute.mjs +10 -0
- package/renderers/nodes/core/NodeBuilder.js +87 -154
- package/renderers/nodes/core/NodeBuilder.mjs +243 -0
- package/renderers/nodes/core/NodeFrame.js +9 -12
- package/renderers/nodes/core/NodeFrame.mjs +35 -0
- package/renderers/nodes/core/NodeSlot.js +2 -3
- package/renderers/nodes/core/NodeSlot.mjs +10 -0
- package/renderers/nodes/core/NodeUniform.js +4 -9
- package/renderers/nodes/core/NodeUniform.mjs +18 -0
- package/renderers/nodes/core/NodeVary.js +4 -7
- package/renderers/nodes/core/NodeVary.mjs +11 -0
- package/renderers/nodes/core/VaryNode.js +6 -12
- package/renderers/nodes/core/VaryNode.mjs +22 -0
- package/renderers/nodes/core/constants.js +16 -13
- package/renderers/nodes/core/constants.mjs +22 -0
- package/renderers/nodes/inputs/ColorNode.js +5 -11
- package/renderers/nodes/inputs/ColorNode.mjs +11 -0
- package/renderers/nodes/inputs/FloatNode.js +5 -11
- package/renderers/nodes/inputs/FloatNode.mjs +11 -0
- package/renderers/nodes/inputs/Matrix3Node.js +7 -13
- package/renderers/nodes/inputs/Matrix3Node.mjs +12 -0
- package/renderers/nodes/inputs/Matrix4Node.js +7 -13
- package/renderers/nodes/inputs/Matrix4Node.mjs +12 -0
- package/renderers/nodes/inputs/TextureNode.js +7 -15
- package/renderers/nodes/inputs/TextureNode.mjs +20 -0
- package/renderers/nodes/inputs/Vector2Node.js +5 -11
- package/renderers/nodes/inputs/Vector2Node.mjs +11 -0
- package/renderers/nodes/inputs/Vector3Node.js +7 -13
- package/renderers/nodes/inputs/Vector3Node.mjs +12 -0
- package/renderers/nodes/inputs/Vector4Node.js +7 -13
- package/renderers/nodes/inputs/Vector4Node.mjs +12 -0
- package/renderers/nodes/math/MathNode.js +20 -30
- package/renderers/nodes/math/MathNode.mjs +55 -0
- package/renderers/nodes/math/OperatorNode.js +4 -20
- package/renderers/nodes/math/OperatorNode.mjs +42 -0
- package/renderers/nodes/utils/SwitchNode.js +4 -9
- package/renderers/nodes/utils/SwitchNode.mjs +20 -0
- package/renderers/nodes/utils/TimerNode.js +5 -10
- package/renderers/nodes/utils/TimerNode.mjs +14 -0
- package/renderers/webgpu/WebGPU.js +14 -16
- package/renderers/webgpu/WebGPU.mjs +24 -0
- package/renderers/webgpu/WebGPUAttributes.js +16 -23
- package/renderers/webgpu/WebGPUAttributes.mjs +69 -0
- package/renderers/webgpu/WebGPUBackground.js +13 -30
- package/renderers/webgpu/WebGPUBackground.mjs +61 -0
- package/renderers/webgpu/WebGPUBinding.js +4 -7
- package/renderers/webgpu/WebGPUBinding.mjs +14 -0
- package/renderers/webgpu/WebGPUBindings.js +21 -57
- package/renderers/webgpu/WebGPUBindings.mjs +155 -0
- package/renderers/webgpu/WebGPUComputePipelines.js +14 -25
- package/renderers/webgpu/WebGPUComputePipelines.mjs +44 -0
- package/renderers/webgpu/WebGPUGeometries.js +5 -15
- package/renderers/webgpu/WebGPUGeometries.mjs +41 -0
- package/renderers/webgpu/WebGPUInfo.js +3 -8
- package/renderers/webgpu/WebGPUInfo.mjs +46 -0
- package/renderers/webgpu/WebGPUObjects.js +5 -10
- package/renderers/webgpu/WebGPUObjects.mjs +25 -0
- package/renderers/webgpu/WebGPUProperties.js +5 -11
- package/renderers/webgpu/WebGPUProperties.mjs +22 -0
- package/renderers/webgpu/WebGPURenderLists.js +20 -36
- package/renderers/webgpu/WebGPURenderLists.mjs +119 -0
- package/renderers/webgpu/WebGPURenderPipelines.js +260 -387
- package/renderers/webgpu/WebGPURenderPipelines.mjs +545 -0
- package/renderers/webgpu/WebGPURenderer.js +124 -262
- package/renderers/webgpu/WebGPURenderer.mjs +574 -0
- package/renderers/webgpu/WebGPUSampledTexture.js +18 -31
- package/renderers/webgpu/WebGPUSampledTexture.mjs +40 -0
- package/renderers/webgpu/WebGPUSampler.js +7 -12
- package/renderers/webgpu/WebGPUSampler.mjs +15 -0
- package/renderers/webgpu/WebGPUStorageBuffer.js +7 -12
- package/renderers/webgpu/WebGPUStorageBuffer.mjs +15 -0
- package/renderers/webgpu/WebGPUTextureRenderer.js +5 -11
- package/renderers/webgpu/WebGPUTextureRenderer.mjs +23 -0
- package/renderers/webgpu/WebGPUTextureUtils.js +29 -40
- package/renderers/webgpu/WebGPUTextureUtils.mjs +98 -0
- package/renderers/webgpu/WebGPUTextures.js +186 -333
- package/renderers/webgpu/WebGPUTextures.mjs +484 -0
- package/renderers/webgpu/WebGPUUniform.js +25 -51
- package/renderers/webgpu/WebGPUUniform.mjs +81 -0
- package/renderers/webgpu/WebGPUUniformsGroup.js +32 -72
- package/renderers/webgpu/WebGPUUniformsGroup.mjs +176 -0
- package/renderers/webgpu/constants.js +190 -181
- package/renderers/webgpu/constants.mjs +230 -0
- package/renderers/webgpu/nodes/ShaderLib.js +2 -2
- package/renderers/webgpu/nodes/ShaderLib.mjs +42 -0
- package/renderers/webgpu/nodes/WebGPUNodeBuilder.js +53 -124
- package/renderers/webgpu/nodes/WebGPUNodeBuilder.mjs +165 -0
- package/renderers/webgpu/nodes/WebGPUNodeUniform.js +17 -31
- package/renderers/webgpu/nodes/WebGPUNodeUniform.mjs +73 -0
- package/renderers/webgpu/nodes/WebGPUNodeUniformsGroup.js +8 -9
- package/renderers/webgpu/nodes/WebGPUNodeUniformsGroup.mjs +15 -0
- package/renderers/webgpu/nodes/WebGPUNodes.js +7 -45
- package/renderers/webgpu/nodes/WebGPUNodes.mjs +40 -0
- package/shaders/ACESFilmicToneMappingShader.js +44 -24
- package/shaders/ACESFilmicToneMappingShader.mjs +48 -0
- package/shaders/AfterimageShader.js +28 -18
- package/shaders/AfterimageShader.mjs +32 -0
- package/shaders/BasicShader.js +9 -7
- package/shaders/BasicShader.mjs +12 -0
- package/shaders/BleachBypassShader.js +31 -15
- package/shaders/BleachBypassShader.mjs +35 -0
- package/shaders/BlendShader.js +26 -19
- package/shaders/BlendShader.mjs +30 -0
- package/shaders/BokehShader.js +98 -36
- package/shaders/BokehShader.mjs +106 -0
- package/shaders/BokehShader2.js +261 -90
- package/shaders/BokehShader2.mjs +269 -0
- package/shaders/BrightnessContrastShader.js +28 -19
- package/shaders/BrightnessContrastShader.mjs +32 -0
- package/shaders/ColorCorrectionShader.js +26 -22
- package/shaders/ColorCorrectionShader.mjs +30 -0
- package/shaders/ColorifyShader.js +24 -16
- package/shaders/ColorifyShader.mjs +28 -0
- package/shaders/ConvolutionShader.js +40 -36
- package/shaders/ConvolutionShader.mjs +55 -0
- package/shaders/CopyShader.js +21 -13
- package/shaders/CopyShader.mjs +25 -0
- package/shaders/DOFMipMapShader.js +28 -21
- package/shaders/DOFMipMapShader.mjs +32 -0
- package/shaders/DepthLimitedBlurShader.js +85 -40
- package/shaders/DepthLimitedBlurShader.mjs +114 -0
- package/shaders/DigitalGlitch.js +74 -46
- package/shaders/DigitalGlitch.mjs +78 -0
- package/shaders/DotScreenShader.js +35 -27
- package/shaders/DotScreenShader.mjs +39 -0
- package/shaders/FXAAShader.js +1094 -19
- package/shaders/FXAAShader.mjs +1098 -0
- package/shaders/FilmShader.js +38 -52
- package/shaders/FilmShader.mjs +42 -0
- package/shaders/FocusShader.js +51 -24
- package/shaders/FocusShader.mjs +55 -0
- package/shaders/FreiChenShader.js +57 -24
- package/shaders/FreiChenShader.mjs +61 -0
- package/shaders/FresnelShader.js +43 -22
- package/shaders/FresnelShader.mjs +47 -0
- package/shaders/GammaCorrectionShader.js +19 -11
- package/shaders/GammaCorrectionShader.mjs +23 -0
- package/shaders/GodRaysShader.js +103 -94
- package/shaders/GodRaysShader.mjs +146 -0
- package/shaders/HalftoneShader.js +208 -65
- package/shaders/HalftoneShader.mjs +212 -0
- package/shaders/HorizontalBlurShader.js +7 -23
- package/shaders/HorizontalBlurShader.mjs +43 -0
- package/shaders/HorizontalTiltShiftShader.js +33 -21
- package/shaders/HorizontalTiltShiftShader.mjs +37 -0
- package/shaders/HueSaturationShader.js +37 -21
- package/shaders/HueSaturationShader.mjs +41 -0
- package/shaders/KaleidoShader.js +30 -22
- package/shaders/KaleidoShader.mjs +34 -0
- package/shaders/LuminosityHighPassShader.js +33 -27
- package/shaders/LuminosityHighPassShader.mjs +37 -0
- package/shaders/LuminosityShader.js +21 -11
- package/shaders/LuminosityShader.mjs +25 -0
- package/shaders/MirrorShader.js +31 -16
- package/shaders/MirrorShader.mjs +35 -0
- package/shaders/NormalMapShader.js +27 -23
- package/shaders/NormalMapShader.mjs +31 -0
- package/shaders/ParallaxShader.js +107 -48
- package/shaders/ParallaxShader.mjs +113 -0
- package/shaders/PixelShader.js +24 -16
- package/shaders/PixelShader.mjs +28 -0
- package/shaders/RGBShiftShader.js +26 -22
- package/shaders/RGBShiftShader.mjs +30 -0
- package/shaders/SAOShader.js +132 -48
- package/shaders/SAOShader.mjs +144 -0
- package/shaders/SMAAShader.js +256 -135
- package/shaders/SMAAShader.mjs +272 -0
- package/shaders/SSAOShader.js +153 -81
- package/shaders/SSAOShader.mjs +172 -0
- package/shaders/SSRShader.js +32 -87
- package/shaders/SSRShader.mjs +324 -0
- package/shaders/SepiaShader.js +25 -15
- package/shaders/SepiaShader.mjs +29 -0
- package/shaders/SobelOperatorShader.js +40 -29
- package/shaders/SobelOperatorShader.mjs +44 -0
- package/shaders/SubsurfaceScatteringShader.js +53 -39
- package/shaders/SubsurfaceScatteringShader.mjs +59 -0
- package/shaders/TechnicolorShader.js +20 -13
- package/shaders/TechnicolorShader.mjs +24 -0
- package/shaders/ToneMapShader.js +44 -28
- package/shaders/ToneMapShader.mjs +48 -0
- package/shaders/ToonShader.js +172 -96
- package/shaders/ToonShader.mjs +188 -0
- package/shaders/TriangleBlurShader.js +32 -23
- package/shaders/TriangleBlurShader.mjs +36 -0
- package/shaders/UnpackDepthRGBAShader.js +22 -14
- package/shaders/UnpackDepthRGBAShader.mjs +26 -0
- package/shaders/VerticalBlurShader.js +7 -23
- package/shaders/VerticalBlurShader.mjs +44 -0
- package/shaders/VerticalTiltShiftShader.js +33 -21
- package/shaders/VerticalTiltShiftShader.mjs +37 -0
- package/shaders/VignetteShader.js +24 -28
- package/shaders/VignetteShader.mjs +28 -0
- package/shaders/VolumeShader.js +174 -77
- package/shaders/VolumeShader.mjs +178 -0
- package/shaders/WaterRefractionShader.js +38 -6
- package/shaders/WaterRefractionShader.mjs +57 -0
- package/shaders/types.js +1 -1
- package/{custom.d.js → shaders/types.mjs} +0 -0
- package/textures/FlakesTexture.js +8 -10
- package/textures/FlakesTexture.mjs +30 -0
- package/types/helpers.js +3 -2
- package/types/helpers.mjs +4 -0
- package/utils/BufferGeometryUtils.js +251 -325
- package/utils/BufferGeometryUtils.mjs +570 -0
- package/utils/GeometryCompressionUtils.js +241 -239
- package/utils/GeometryCompressionUtils.mjs +547 -0
- package/utils/GeometryUtils.js +41 -94
- package/utils/GeometryUtils.mjs +108 -0
- package/utils/RoughnessMipmapper.js +38 -82
- package/utils/RoughnessMipmapper.mjs +213 -0
- package/utils/SceneUtils.js +15 -20
- package/utils/SceneUtils.mjs +36 -0
- package/utils/ShadowMapViewer.js +49 -95
- package/utils/ShadowMapViewer.mjs +114 -0
- package/utils/SkeletonUtils.js +74 -165
- package/utils/SkeletonUtils.mjs +292 -0
- package/utils/UVsDebug.js +32 -62
- package/utils/UVsDebug.mjs +85 -0
- package/utils/WorkerPool.js +13 -33
- package/utils/WorkerPool.mjs +62 -0
- package/webxr/ARButton.js +72 -98
- package/webxr/ARButton.mjs +119 -0
- package/webxr/OculusHandModel.js +18 -37
- package/webxr/OculusHandModel.mjs +71 -0
- package/webxr/OculusHandPointerModel.js +58 -80
- package/webxr/OculusHandPointerModel.mjs +207 -0
- package/webxr/Text2D.js +37 -19
- package/webxr/Text2D.mjs +31 -0
- package/webxr/VRButton.js +59 -90
- package/webxr/VRButton.mjs +105 -0
- package/webxr/XRControllerModelFactory.js +58 -116
- package/webxr/XRControllerModelFactory.mjs +146 -0
- package/webxr/XREstimatedLight.js +39 -66
- package/webxr/XREstimatedLight.mjs +126 -0
- package/webxr/XRHandMeshModel.js +40 -29
- package/webxr/XRHandMeshModel.mjs +73 -0
- package/webxr/XRHandModelFactory.js +28 -31
- package/webxr/XRHandModelFactory.mjs +61 -0
- package/webxr/XRHandPrimitiveModel.js +41 -27
- package/webxr/XRHandPrimitiveModel.mjs +68 -0
- package/BufferGeometryUtils-1a7a235c.js +0 -655
- package/BufferGeometryUtils-971dfde3.js +0 -1
- package/Nodes-4f766d71.js +0 -471
- package/Nodes-9aa16d74.js +0 -1
- package/animation/AnimationClipCreator.cjs.js +0 -1
- package/animation/CCDIKSolver.cjs.js +0 -1
- package/animation/MMDAnimationHelper.cjs.js +0 -1
- package/animation/MMDPhysics.cjs.js +0 -1
- package/cameras/CinematicCamera.cjs.js +0 -1
- package/controls/ArcballControls.cjs.js +0 -1
- package/controls/DeviceOrientationControls.cjs.js +0 -1
- package/controls/DragControls.cjs.js +0 -1
- package/controls/FirstPersonControls.cjs.js +0 -1
- package/controls/FlyControls.cjs.js +0 -1
- package/controls/OrbitControls.cjs.js +0 -1
- package/controls/PointerLockControls.cjs.js +0 -1
- package/controls/TrackballControls.cjs.js +0 -1
- package/controls/TransformControls.cjs.js +0 -1
- package/controls/experimental/CameraControls.cjs.js +0 -1
- package/csm/CSM.cjs.js +0 -1
- package/csm/CSMFrustum.cjs.js +0 -1
- package/csm/CSMHelper.cjs.js +0 -1
- package/csm/CSMShader.cjs.js +0 -1
- package/curves/CurveExtras.cjs.js +0 -1
- package/curves/NURBSCurve.cjs.js +0 -1
- package/curves/NURBSSurface.cjs.js +0 -1
- package/curves/NURBSUtils.cjs.js +0 -1
- package/custom.d.cjs.js +0 -1
- package/deprecated/Geometry.cjs.js +0 -1
- package/effects/AnaglyphEffect.cjs.js +0 -1
- package/effects/AsciiEffect.cjs.js +0 -1
- package/effects/OutlineEffect.cjs.js +0 -1
- package/effects/ParallaxBarrierEffect.cjs.js +0 -1
- package/effects/PeppersGhostEffect.cjs.js +0 -1
- package/effects/StereoEffect.cjs.js +0 -1
- package/environments/RoomEnvironment.cjs.js +0 -1
- package/exporters/ColladaExporter.cjs.js +0 -1
- package/exporters/DRACOExporter.cjs.js +0 -1
- package/exporters/GLTFExporter.cjs.js +0 -1
- package/exporters/MMDExporter.cjs.js +0 -1
- package/exporters/OBJExporter.cjs.js +0 -1
- package/exporters/PLYExporter.cjs.js +0 -1
- package/exporters/STLExporter.cjs.js +0 -1
- package/exporters/USDZExporter.cjs.js +0 -1
- package/geometries/BoxLineGeometry.cjs.js +0 -1
- package/geometries/ConvexGeometry.cjs.js +0 -1
- package/geometries/DecalGeometry.cjs.js +0 -1
- package/geometries/LightningStrike.cjs.js +0 -1
- package/geometries/ParametricGeometries.cjs.js +0 -1
- package/geometries/ParametricGeometry.cjs.js +0 -1
- package/geometries/RoundedBoxGeometry.cjs.js +0 -1
- package/geometries/TeapotGeometry.cjs.js +0 -1
- package/geometries/TextGeometry.cjs.js +0 -1
- package/helpers/LightProbeHelper.cjs.js +0 -1
- package/helpers/PositionalAudioHelper.cjs.js +0 -1
- package/helpers/RectAreaLightHelper.cjs.js +0 -1
- package/helpers/VertexNormalsHelper.cjs.js +0 -1
- package/helpers/VertexTangentsHelper.cjs.js +0 -1
- package/index.cjs.js +0 -1
- package/interactive/InteractiveGroup.cjs.js +0 -1
- package/interactive/InteractiveGroup.d.ts +0 -5
- package/interactive/InteractiveGroup.js +0 -87
- package/interactive/SelectionBox.cjs.js +0 -1
- package/interactive/SelectionHelper.cjs.js +0 -1
- package/libs/MeshoptDecoder.cjs.js +0 -1
- package/libs/MotionControllers.cjs.js +0 -1
- package/lights/LightProbeGenerator.cjs.js +0 -1
- package/lights/RectAreaLightUniformsLib.cjs.js +0 -1
- package/lines/Line2.cjs.js +0 -1
- package/lines/LineGeometry.cjs.js +0 -1
- package/lines/LineMaterial.cjs.js +0 -1
- package/lines/LineSegments2.cjs.js +0 -1
- package/lines/LineSegmentsGeometry.cjs.js +0 -1
- package/lines/Wireframe.cjs.js +0 -1
- package/lines/WireframeGeometry2.cjs.js +0 -1
- package/loaders/3DMLoader.cjs.js +0 -1
- package/loaders/3MFLoader.cjs.js +0 -1
- package/loaders/AMFLoader.cjs.js +0 -1
- package/loaders/AssimpLoader.cjs.js +0 -1
- package/loaders/BVHLoader.cjs.js +0 -1
- package/loaders/BasisTextureLoader.cjs.js +0 -1
- package/loaders/ColladaLoader.cjs.js +0 -1
- package/loaders/DDSLoader.cjs.js +0 -1
- package/loaders/DRACOLoader.cjs.js +0 -1
- package/loaders/EXRLoader.cjs.js +0 -1
- package/loaders/FBXLoader.cjs.js +0 -1
- package/loaders/FontLoader.cjs.js +0 -1
- package/loaders/GCodeLoader.cjs.js +0 -1
- package/loaders/GLTFLoader.cjs.js +0 -1
- package/loaders/HDRCubeTextureLoader.cjs.js +0 -1
- package/loaders/KMZLoader.cjs.js +0 -1
- package/loaders/KTX2Loader.cjs.js +0 -1
- package/loaders/KTXLoader.cjs.js +0 -1
- package/loaders/LDrawLoader.cjs.js +0 -1
- package/loaders/LUT3dlLoader.cjs.js +0 -1
- package/loaders/LUTCubeLoader.cjs.js +0 -1
- package/loaders/LWOLoader.cjs.js +0 -1
- package/loaders/LottieLoader.cjs.js +0 -1
- package/loaders/MD2Loader.cjs.js +0 -1
- package/loaders/MDDLoader.cjs.js +0 -1
- package/loaders/MMDLoader.cjs.js +0 -1
- package/loaders/MTLLoader.cjs.js +0 -1
- package/loaders/NRRDLoader.cjs.js +0 -1
- package/loaders/NodeMaterialLoader.cjs.js +0 -1
- package/loaders/OBJLoader.cjs.js +0 -1
- package/loaders/PCDLoader.cjs.js +0 -1
- package/loaders/PDBLoader.cjs.js +0 -1
- package/loaders/PLYLoader.cjs.js +0 -1
- package/loaders/PRWMLoader.cjs.js +0 -1
- package/loaders/PVRLoader.cjs.js +0 -1
- package/loaders/RGBELoader.cjs.js +0 -1
- package/loaders/RGBMLoader.cjs.js +0 -1
- package/loaders/STLLoader.cjs.js +0 -1
- package/loaders/SVGLoader.cjs.js +0 -1
- package/loaders/TDSLoader.cjs.js +0 -1
- package/loaders/TGALoader.cjs.js +0 -1
- package/loaders/TTFLoader.cjs.js +0 -1
- package/loaders/TiltLoader.cjs.js +0 -1
- package/loaders/VOXLoader.cjs.js +0 -1
- package/loaders/VRMLLoader.cjs.js +0 -1
- package/loaders/VRMLoader.cjs.js +0 -1
- package/loaders/VTKLoader.cjs.js +0 -1
- package/loaders/XLoader.cjs.js +0 -1
- package/loaders/XYZLoader.cjs.js +0 -1
- package/loaders/lwo/IFFParser.cjs.js +0 -1
- package/loaders/lwo/LWO2Parser.cjs.js +0 -1
- package/loaders/lwo/LWO3Parser.cjs.js +0 -1
- package/math/Capsule.cjs.js +0 -1
- package/math/ColorConverter.cjs.js +0 -1
- package/math/ConvexHull.cjs.js +0 -1
- package/math/ImprovedNoise.cjs.js +0 -1
- package/math/Lut.cjs.js +0 -1
- package/math/MeshSurfaceSampler.cjs.js +0 -1
- package/math/OBB.cjs.js +0 -1
- package/math/Octree.cjs.js +0 -1
- package/math/SimplexNoise.cjs.js +0 -1
- package/misc/ConvexObjectBreaker.cjs.js +0 -1
- package/misc/GPUComputationRenderer.cjs.js +0 -1
- package/misc/Gyroscope.cjs.js +0 -1
- package/misc/MD2Character.cjs.js +0 -1
- package/misc/MD2CharacterComplex.cjs.js +0 -1
- package/misc/MorphAnimMesh.cjs.js +0 -1
- package/misc/MorphBlendMesh.cjs.js +0 -1
- package/misc/ProgressiveLightmap.cjs.js +0 -1
- package/misc/RollerCoaster.cjs.js +0 -1
- package/misc/TubePainter.cjs.js +0 -1
- package/misc/Volume.cjs.js +0 -1
- package/misc/VolumeSlice.cjs.js +0 -1
- package/misc/WebGL.cjs.js +0 -1
- package/modifiers/CurveModifier.cjs.js +0 -1
- package/modifiers/EdgeSplitModifier.cjs.js +0 -1
- package/modifiers/SimplifyModifier.cjs.js +0 -1
- package/modifiers/TessellateModifier.cjs.js +0 -1
- package/nodes/Nodes.cjs.js +0 -1
- package/nodes/ShaderNode.cjs.js +0 -1
- package/nodes/accessors/BufferNode.cjs.js +0 -1
- package/nodes/accessors/CameraNode.cjs.js +0 -1
- package/nodes/accessors/CubeTextureNode.cjs.js +0 -1
- package/nodes/accessors/MaterialNode.cjs.js +0 -1
- package/nodes/accessors/MaterialReferenceNode.cjs.js +0 -1
- package/nodes/accessors/ModelNode.cjs.js +0 -1
- package/nodes/accessors/ModelViewProjectionNode.cjs.js +0 -1
- package/nodes/accessors/NormalNode.cjs.js +0 -1
- package/nodes/accessors/Object3DNode.cjs.js +0 -1
- package/nodes/accessors/PointUVNode.cjs.js +0 -1
- package/nodes/accessors/PositionNode.cjs.js +0 -1
- package/nodes/accessors/ReferenceNode.cjs.js +0 -1
- package/nodes/accessors/ReflectNode.cjs.js +0 -1
- package/nodes/accessors/SkinningNode.cjs.js +0 -1
- package/nodes/accessors/TextureNode.cjs.js +0 -1
- package/nodes/accessors/UVNode.cjs.js +0 -1
- package/nodes/core/ArrayUniformNode.cjs.js +0 -1
- package/nodes/core/AttributeNode.cjs.js +0 -1
- package/nodes/core/BypassNode.cjs.js +0 -1
- package/nodes/core/CodeNode.cjs.js +0 -1
- package/nodes/core/ConstNode.cjs.js +0 -1
- package/nodes/core/ContextNode.cjs.js +0 -1
- package/nodes/core/ExpressionNode.cjs.js +0 -1
- package/nodes/core/FunctionCallNode.cjs.js +0 -1
- package/nodes/core/FunctionNode.cjs.js +0 -1
- package/nodes/core/InputNode.cjs.js +0 -1
- package/nodes/core/Node.cjs.js +0 -1
- package/nodes/core/NodeAttribute.cjs.js +0 -1
- package/nodes/core/NodeBuilder.cjs.js +0 -1
- package/nodes/core/NodeCode.cjs.js +0 -1
- package/nodes/core/NodeFrame.cjs.js +0 -1
- package/nodes/core/NodeFunction.cjs.js +0 -1
- package/nodes/core/NodeFunction.js +0 -17
- package/nodes/core/NodeFunctionInput.cjs.js +0 -1
- package/nodes/core/NodeKeywords.cjs.js +0 -1
- package/nodes/core/NodeParser.cjs.js +0 -1
- package/nodes/core/NodeParser.js +0 -8
- package/nodes/core/NodeUniform.cjs.js +0 -1
- package/nodes/core/NodeUtils.cjs.js +0 -1
- package/nodes/core/NodeVar.cjs.js +0 -1
- package/nodes/core/NodeVary.cjs.js +0 -1
- package/nodes/core/PropertyNode.cjs.js +0 -1
- package/nodes/core/TempNode.cjs.js +0 -1
- package/nodes/core/UniformNode.cjs.js +0 -1
- package/nodes/core/VarNode.cjs.js +0 -1
- package/nodes/core/VaryNode.cjs.js +0 -1
- package/nodes/core/constants.cjs.js +0 -1
- package/nodes/display/ColorSpaceNode.cjs.js +0 -1
- package/nodes/display/NormalMapNode.cjs.js +0 -1
- package/nodes/fog/FogNode.cjs.js +0 -1
- package/nodes/fog/FogRangeNode.cjs.js +0 -1
- package/nodes/functions/BSDFs.cjs.js +0 -1
- package/nodes/functions/PhysicalMaterialFunctions.cjs.js +0 -1
- package/nodes/functions/PhysicalMaterialFunctions.js +0 -57
- package/nodes/lights/LightContextNode.cjs.js +0 -1
- package/nodes/lights/LightNode.cjs.js +0 -1
- package/nodes/lights/LightsNode.cjs.js +0 -1
- package/nodes/loaders/NodeLoader.cjs.js +0 -1
- package/nodes/loaders/NodeMaterialLoader.cjs.js +0 -1
- package/nodes/loaders/NodeObjectLoader.cjs.js +0 -1
- package/nodes/materials/LineBasicNodeMaterial.cjs.js +0 -1
- package/nodes/materials/Materials.cjs.js +0 -1
- package/nodes/materials/MeshBasicNodeMaterial.cjs.js +0 -1
- package/nodes/materials/MeshStandardNodeMaterial.cjs.js +0 -1
- package/nodes/materials/NodeMaterial.cjs.js +0 -1
- package/nodes/materials/PointsNodeMaterial.cjs.js +0 -1
- package/nodes/math/CondNode.cjs.js +0 -1
- package/nodes/math/MathNode.cjs.js +0 -1
- package/nodes/math/OperatorNode.cjs.js +0 -1
- package/nodes/parsers/GLSLNodeFunction.cjs.js +0 -1
- package/nodes/parsers/GLSLNodeFunction.js +0 -101
- package/nodes/parsers/GLSLNodeParser.cjs.js +0 -1
- package/nodes/parsers/GLSLNodeParser.js +0 -13
- package/nodes/parsers/WGSLNodeFunction.cjs.js +0 -1
- package/nodes/parsers/WGSLNodeFunction.js +0 -71
- package/nodes/parsers/WGSLNodeParser.cjs.js +0 -1
- package/nodes/parsers/WGSLNodeParser.js +0 -13
- package/nodes/procedural/CheckerNode.cjs.js +0 -1
- package/nodes/utils/ArrayElementNode.cjs.js +0 -1
- package/nodes/utils/ConvertNode.cjs.js +0 -1
- package/nodes/utils/JoinNode.cjs.js +0 -1
- package/nodes/utils/MatcapUVNode.cjs.js +0 -1
- package/nodes/utils/OscNode.cjs.js +0 -1
- package/nodes/utils/SplitNode.cjs.js +0 -1
- package/nodes/utils/SpriteSheetUVNode.cjs.js +0 -1
- package/nodes/utils/TimerNode.cjs.js +0 -1
- package/objects/GroundProjectedEnv.cjs.js +0 -1
- package/objects/Lensflare.cjs.js +0 -1
- package/objects/LightningStorm.cjs.js +0 -1
- package/objects/MarchingCubes.cjs.js +0 -1
- package/objects/Reflector.cjs.js +0 -1
- package/objects/ReflectorForSSRPass.cjs.js +0 -1
- package/objects/ReflectorRTT.cjs.js +0 -1
- package/objects/Refractor.cjs.js +0 -1
- package/objects/ShadowMesh.cjs.js +0 -1
- package/objects/Sky.cjs.js +0 -1
- package/objects/Water.cjs.js +0 -1
- package/objects/Water2.cjs.js +0 -1
- package/offscreen/jank.cjs.js +0 -1
- package/offscreen/offscreen.cjs.js +0 -1
- package/offscreen/scene.cjs.js +0 -1
- package/physics/AmmoPhysics.cjs.js +0 -1
- package/postprocessing/AdaptiveToneMappingPass.cjs.js +0 -1
- package/postprocessing/AfterimagePass.cjs.js +0 -1
- package/postprocessing/BloomPass.cjs.js +0 -1
- package/postprocessing/BokehPass.cjs.js +0 -1
- package/postprocessing/ClearPass.cjs.js +0 -1
- package/postprocessing/CubeTexturePass.cjs.js +0 -1
- package/postprocessing/DotScreenPass.cjs.js +0 -1
- package/postprocessing/EffectComposer.cjs.js +0 -1
- package/postprocessing/FilmPass.cjs.js +0 -1
- package/postprocessing/GlitchPass.cjs.js +0 -1
- package/postprocessing/HalftonePass.cjs.js +0 -1
- package/postprocessing/LUTPass.cjs.js +0 -1
- package/postprocessing/MaskPass.cjs.js +0 -1
- package/postprocessing/OutlinePass.cjs.js +0 -1
- package/postprocessing/Pass.cjs.js +0 -1
- package/postprocessing/RenderPass.cjs.js +0 -1
- package/postprocessing/RenderPixelatedPass.cjs.js +0 -1
- package/postprocessing/SAOPass.cjs.js +0 -1
- package/postprocessing/SMAAPass.cjs.js +0 -1
- package/postprocessing/SSAARenderPass.cjs.js +0 -1
- package/postprocessing/SSAOPass.cjs.js +0 -1
- package/postprocessing/SSRPass.cjs.js +0 -1
- package/postprocessing/SavePass.cjs.js +0 -1
- package/postprocessing/ShaderPass.cjs.js +0 -1
- package/postprocessing/TAARenderPass.cjs.js +0 -1
- package/postprocessing/TexturePass.cjs.js +0 -1
- package/postprocessing/UnrealBloomPass.cjs.js +0 -1
- package/renderers/CSS2DRenderer.cjs.js +0 -1
- package/renderers/CSS3DRenderer.cjs.js +0 -1
- package/renderers/Projector.cjs.js +0 -1
- package/renderers/SVGRenderer.cjs.js +0 -1
- package/renderers/nodes/accessors/CameraNode.cjs.js +0 -1
- package/renderers/nodes/accessors/ModelNode.cjs.js +0 -1
- package/renderers/nodes/accessors/ModelViewProjectionNode.cjs.js +0 -1
- package/renderers/nodes/accessors/NormalNode.cjs.js +0 -1
- package/renderers/nodes/accessors/PositionNode.cjs.js +0 -1
- package/renderers/nodes/accessors/UVNode.cjs.js +0 -1
- package/renderers/nodes/core/AttributeNode.cjs.js +0 -1
- package/renderers/nodes/core/InputNode.cjs.js +0 -1
- package/renderers/nodes/core/Node.cjs.js +0 -1
- package/renderers/nodes/core/NodeAttribute.cjs.js +0 -1
- package/renderers/nodes/core/NodeBuilder.cjs.js +0 -1
- package/renderers/nodes/core/NodeFrame.cjs.js +0 -1
- package/renderers/nodes/core/NodeSlot.cjs.js +0 -1
- package/renderers/nodes/core/NodeUniform.cjs.js +0 -1
- package/renderers/nodes/core/NodeVary.cjs.js +0 -1
- package/renderers/nodes/core/VaryNode.cjs.js +0 -1
- package/renderers/nodes/core/constants.cjs.js +0 -1
- package/renderers/nodes/inputs/ColorNode.cjs.js +0 -1
- package/renderers/nodes/inputs/FloatNode.cjs.js +0 -1
- package/renderers/nodes/inputs/Matrix3Node.cjs.js +0 -1
- package/renderers/nodes/inputs/Matrix4Node.cjs.js +0 -1
- package/renderers/nodes/inputs/TextureNode.cjs.js +0 -1
- package/renderers/nodes/inputs/Vector2Node.cjs.js +0 -1
- package/renderers/nodes/inputs/Vector3Node.cjs.js +0 -1
- package/renderers/nodes/inputs/Vector4Node.cjs.js +0 -1
- package/renderers/nodes/math/MathNode.cjs.js +0 -1
- package/renderers/nodes/math/OperatorNode.cjs.js +0 -1
- package/renderers/nodes/utils/SwitchNode.cjs.js +0 -1
- package/renderers/nodes/utils/TimerNode.cjs.js +0 -1
- package/renderers/webgpu/WebGPU.cjs.js +0 -1
- package/renderers/webgpu/WebGPUAttributes.cjs.js +0 -1
- package/renderers/webgpu/WebGPUBackground.cjs.js +0 -1
- package/renderers/webgpu/WebGPUBinding.cjs.js +0 -1
- package/renderers/webgpu/WebGPUBindings.cjs.js +0 -1
- package/renderers/webgpu/WebGPUComputePipelines.cjs.js +0 -1
- package/renderers/webgpu/WebGPUGeometries.cjs.js +0 -1
- package/renderers/webgpu/WebGPUInfo.cjs.js +0 -1
- package/renderers/webgpu/WebGPUObjects.cjs.js +0 -1
- package/renderers/webgpu/WebGPUProperties.cjs.js +0 -1
- package/renderers/webgpu/WebGPURenderLists.cjs.js +0 -1
- package/renderers/webgpu/WebGPURenderPipelines.cjs.js +0 -1
- package/renderers/webgpu/WebGPURenderer.cjs.js +0 -1
- package/renderers/webgpu/WebGPUSampledTexture.cjs.js +0 -1
- package/renderers/webgpu/WebGPUSampler.cjs.js +0 -1
- package/renderers/webgpu/WebGPUStorageBuffer.cjs.js +0 -1
- package/renderers/webgpu/WebGPUTextureRenderer.cjs.js +0 -1
- package/renderers/webgpu/WebGPUTextureUtils.cjs.js +0 -1
- package/renderers/webgpu/WebGPUTextures.cjs.js +0 -1
- package/renderers/webgpu/WebGPUUniform.cjs.js +0 -1
- package/renderers/webgpu/WebGPUUniformsGroup.cjs.js +0 -1
- package/renderers/webgpu/constants.cjs.js +0 -1
- package/renderers/webgpu/nodes/ShaderLib.cjs.js +0 -1
- package/renderers/webgpu/nodes/WebGPUNodeBuilder.cjs.js +0 -1
- package/renderers/webgpu/nodes/WebGPUNodeUniform.cjs.js +0 -1
- package/renderers/webgpu/nodes/WebGPUNodeUniformsGroup.cjs.js +0 -1
- package/renderers/webgpu/nodes/WebGPUNodes.cjs.js +0 -1
- package/shaders/ACESFilmicToneMappingShader.cjs.js +0 -1
- package/shaders/AfterimageShader.cjs.js +0 -1
- package/shaders/BasicShader.cjs.js +0 -1
- package/shaders/BleachBypassShader.cjs.js +0 -1
- package/shaders/BlendShader.cjs.js +0 -1
- package/shaders/BokehShader.cjs.js +0 -1
- package/shaders/BokehShader2.cjs.js +0 -1
- package/shaders/BrightnessContrastShader.cjs.js +0 -1
- package/shaders/ColorCorrectionShader.cjs.js +0 -1
- package/shaders/ColorifyShader.cjs.js +0 -1
- package/shaders/ConvolutionShader.cjs.js +0 -1
- package/shaders/CopyShader.cjs.js +0 -1
- package/shaders/DOFMipMapShader.cjs.js +0 -1
- package/shaders/DepthLimitedBlurShader.cjs.js +0 -1
- package/shaders/DigitalGlitch.cjs.js +0 -1
- package/shaders/DotScreenShader.cjs.js +0 -1
- package/shaders/FXAAShader.cjs.js +0 -1
- package/shaders/FilmShader.cjs.js +0 -1
- package/shaders/FocusShader.cjs.js +0 -1
- package/shaders/FreiChenShader.cjs.js +0 -1
- package/shaders/FresnelShader.cjs.js +0 -1
- package/shaders/GammaCorrectionShader.cjs.js +0 -1
- package/shaders/GodRaysShader.cjs.js +0 -1
- package/shaders/HalftoneShader.cjs.js +0 -1
- package/shaders/HorizontalBlurShader.cjs.js +0 -1
- package/shaders/HorizontalTiltShiftShader.cjs.js +0 -1
- package/shaders/HueSaturationShader.cjs.js +0 -1
- package/shaders/KaleidoShader.cjs.js +0 -1
- package/shaders/LuminosityHighPassShader.cjs.js +0 -1
- package/shaders/LuminosityShader.cjs.js +0 -1
- package/shaders/MirrorShader.cjs.js +0 -1
- package/shaders/NormalMapShader.cjs.js +0 -1
- package/shaders/ParallaxShader.cjs.js +0 -1
- package/shaders/PixelShader.cjs.js +0 -1
- package/shaders/RGBShiftShader.cjs.js +0 -1
- package/shaders/SAOShader.cjs.js +0 -1
- package/shaders/SMAAShader.cjs.js +0 -1
- package/shaders/SSAOShader.cjs.js +0 -1
- package/shaders/SSRShader.cjs.js +0 -1
- package/shaders/SepiaShader.cjs.js +0 -1
- package/shaders/SobelOperatorShader.cjs.js +0 -1
- package/shaders/SubsurfaceScatteringShader.cjs.js +0 -1
- package/shaders/TechnicolorShader.cjs.js +0 -1
- package/shaders/ToneMapShader.cjs.js +0 -1
- package/shaders/ToonShader.cjs.js +0 -1
- package/shaders/TriangleBlurShader.cjs.js +0 -1
- package/shaders/UnpackDepthRGBAShader.cjs.js +0 -1
- package/shaders/VerticalBlurShader.cjs.js +0 -1
- package/shaders/VerticalTiltShiftShader.cjs.js +0 -1
- package/shaders/VignetteShader.cjs.js +0 -1
- package/shaders/VolumeShader.cjs.js +0 -1
- package/shaders/WaterRefractionShader.cjs.js +0 -1
- package/shaders/index.cjs.js +0 -1
- package/shaders/index.d.ts +0 -54
- package/shaders/index.js +0 -53
- package/shaders/types.cjs.js +0 -1
- package/textures/FlakesTexture.cjs.js +0 -1
- package/types/helpers.cjs.js +0 -1
- package/types/shared.cjs.js +0 -1
- package/types/shared.js +0 -1
- package/types/utils.cjs.js +0 -1
- package/types/utils.js +0 -1
- package/utils/BufferGeometryUtils.cjs.js +0 -1
- package/utils/GeometryCompressionUtils.cjs.js +0 -1
- package/utils/GeometryUtils.cjs.js +0 -1
- package/utils/LDrawUtils.cjs.js +0 -1
- package/utils/LDrawUtils.d.ts +0 -5
- package/utils/LDrawUtils.js +0 -144
- package/utils/RoughnessMipmapper.cjs.js +0 -1
- package/utils/SceneUtils.cjs.js +0 -1
- package/utils/ShadowMapViewer.cjs.js +0 -1
- package/utils/SkeletonUtils.cjs.js +0 -1
- package/utils/UVsDebug.cjs.js +0 -1
- package/utils/WorkerPool.cjs.js +0 -1
- package/webxr/ARButton.cjs.js +0 -1
- package/webxr/OculusHandModel.cjs.js +0 -1
- package/webxr/OculusHandPointerModel.cjs.js +0 -1
- package/webxr/Text2D.cjs.js +0 -1
- package/webxr/VRButton.cjs.js +0 -1
- package/webxr/XRControllerModelFactory.cjs.js +0 -1
- package/webxr/XREstimatedLight.cjs.js +0 -1
- package/webxr/XRHandMeshModel.cjs.js +0 -1
- package/webxr/XRHandModelFactory.cjs.js +0 -1
- package/webxr/XRHandPrimitiveModel.cjs.js +0 -1
package/loaders/SVGLoader.js
CHANGED
|
@@ -1,134 +1,113 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
|
+
const THREE = require("three");
|
|
4
|
+
class SVGLoader extends THREE.Loader {
|
|
4
5
|
constructor(manager) {
|
|
5
|
-
super(manager);
|
|
6
|
-
|
|
7
|
-
this.
|
|
8
|
-
|
|
9
|
-
this.defaultUnit = 'px';
|
|
6
|
+
super(manager);
|
|
7
|
+
this.defaultDPI = 90;
|
|
8
|
+
this.defaultUnit = "px";
|
|
10
9
|
}
|
|
11
|
-
|
|
12
10
|
load(url, onLoad, onProgress, onError) {
|
|
13
11
|
const scope = this;
|
|
14
|
-
const loader = new FileLoader(scope.manager);
|
|
12
|
+
const loader = new THREE.FileLoader(scope.manager);
|
|
15
13
|
loader.setPath(scope.path);
|
|
16
14
|
loader.setRequestHeader(scope.requestHeader);
|
|
17
15
|
loader.setWithCredentials(scope.withCredentials);
|
|
18
|
-
loader.load(
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
16
|
+
loader.load(
|
|
17
|
+
url,
|
|
18
|
+
function(text) {
|
|
19
|
+
try {
|
|
20
|
+
onLoad(scope.parse(text));
|
|
21
|
+
} catch (e) {
|
|
22
|
+
if (onError) {
|
|
23
|
+
onError(e);
|
|
24
|
+
} else {
|
|
25
|
+
console.error(e);
|
|
26
|
+
}
|
|
27
|
+
scope.manager.itemError(url);
|
|
26
28
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
},
|
|
30
|
+
onProgress,
|
|
31
|
+
onError
|
|
32
|
+
);
|
|
31
33
|
}
|
|
32
|
-
|
|
33
34
|
parse(text) {
|
|
34
35
|
const scope = this;
|
|
35
|
-
|
|
36
36
|
function parseNode(node, style) {
|
|
37
|
-
if (node.nodeType !== 1)
|
|
37
|
+
if (node.nodeType !== 1)
|
|
38
|
+
return;
|
|
38
39
|
const transform = getNodeTransform(node);
|
|
39
40
|
let traverseChildNodes = true;
|
|
40
41
|
let path = null;
|
|
41
|
-
|
|
42
42
|
switch (node.nodeName) {
|
|
43
|
-
case
|
|
43
|
+
case "svg":
|
|
44
44
|
break;
|
|
45
|
-
|
|
46
|
-
case 'style':
|
|
45
|
+
case "style":
|
|
47
46
|
parseCSSStylesheet(node);
|
|
48
47
|
break;
|
|
49
|
-
|
|
50
|
-
case 'g':
|
|
48
|
+
case "g":
|
|
51
49
|
style = parseStyle(node, style);
|
|
52
50
|
break;
|
|
53
|
-
|
|
54
|
-
case 'path':
|
|
51
|
+
case "path":
|
|
55
52
|
style = parseStyle(node, style);
|
|
56
|
-
if (node.hasAttribute(
|
|
53
|
+
if (node.hasAttribute("d"))
|
|
54
|
+
path = parsePathNode(node);
|
|
57
55
|
break;
|
|
58
|
-
|
|
59
|
-
case 'rect':
|
|
56
|
+
case "rect":
|
|
60
57
|
style = parseStyle(node, style);
|
|
61
58
|
path = parseRectNode(node);
|
|
62
59
|
break;
|
|
63
|
-
|
|
64
|
-
case 'polygon':
|
|
60
|
+
case "polygon":
|
|
65
61
|
style = parseStyle(node, style);
|
|
66
62
|
path = parsePolygonNode(node);
|
|
67
63
|
break;
|
|
68
|
-
|
|
69
|
-
case 'polyline':
|
|
64
|
+
case "polyline":
|
|
70
65
|
style = parseStyle(node, style);
|
|
71
66
|
path = parsePolylineNode(node);
|
|
72
67
|
break;
|
|
73
|
-
|
|
74
|
-
case 'circle':
|
|
68
|
+
case "circle":
|
|
75
69
|
style = parseStyle(node, style);
|
|
76
70
|
path = parseCircleNode(node);
|
|
77
71
|
break;
|
|
78
|
-
|
|
79
|
-
case 'ellipse':
|
|
72
|
+
case "ellipse":
|
|
80
73
|
style = parseStyle(node, style);
|
|
81
74
|
path = parseEllipseNode(node);
|
|
82
75
|
break;
|
|
83
|
-
|
|
84
|
-
case 'line':
|
|
76
|
+
case "line":
|
|
85
77
|
style = parseStyle(node, style);
|
|
86
78
|
path = parseLineNode(node);
|
|
87
79
|
break;
|
|
88
|
-
|
|
89
|
-
case 'defs':
|
|
80
|
+
case "defs":
|
|
90
81
|
traverseChildNodes = false;
|
|
91
82
|
break;
|
|
92
|
-
|
|
93
|
-
case 'use':
|
|
83
|
+
case "use":
|
|
94
84
|
style = parseStyle(node, style);
|
|
95
85
|
const usedNodeId = node.href.baseVal.substring(1);
|
|
96
86
|
const usedNode = node.viewportElement.getElementById(usedNodeId);
|
|
97
|
-
|
|
98
87
|
if (usedNode) {
|
|
99
88
|
parseNode(usedNode, style);
|
|
100
89
|
} else {
|
|
101
90
|
console.warn("SVGLoader: 'use node' references non-existent node id: " + usedNodeId);
|
|
102
91
|
}
|
|
103
|
-
|
|
104
92
|
break;
|
|
105
|
-
|
|
93
|
+
default:
|
|
106
94
|
}
|
|
107
|
-
|
|
108
95
|
if (path) {
|
|
109
|
-
if (style.fill !==
|
|
96
|
+
if (style.fill !== void 0 && style.fill !== "none") {
|
|
110
97
|
path.color.setStyle(style.fill);
|
|
111
98
|
}
|
|
112
|
-
|
|
113
99
|
transformPath(path, currentTransform);
|
|
114
100
|
paths.push(path);
|
|
115
|
-
path.userData = {
|
|
116
|
-
node: node,
|
|
117
|
-
style: style
|
|
118
|
-
};
|
|
101
|
+
path.userData = { node, style };
|
|
119
102
|
}
|
|
120
|
-
|
|
121
103
|
if (traverseChildNodes) {
|
|
122
104
|
const nodes = node.childNodes;
|
|
123
|
-
|
|
124
105
|
for (let i = 0; i < nodes.length; i++) {
|
|
125
106
|
parseNode(nodes[i], style);
|
|
126
107
|
}
|
|
127
108
|
}
|
|
128
|
-
|
|
129
109
|
if (transform) {
|
|
130
110
|
transformStack.pop();
|
|
131
|
-
|
|
132
111
|
if (transformStack.length > 0) {
|
|
133
112
|
currentTransform.copy(transformStack[transformStack.length - 1]);
|
|
134
113
|
} else {
|
|
@@ -136,136 +115,127 @@ class SVGLoader extends Loader {
|
|
|
136
115
|
}
|
|
137
116
|
}
|
|
138
117
|
}
|
|
139
|
-
|
|
140
118
|
function parsePathNode(node) {
|
|
141
|
-
const path = new ShapePath();
|
|
142
|
-
const point = new Vector2();
|
|
143
|
-
const control = new Vector2();
|
|
144
|
-
const firstPoint = new Vector2();
|
|
119
|
+
const path = new THREE.ShapePath();
|
|
120
|
+
const point = new THREE.Vector2();
|
|
121
|
+
const control = new THREE.Vector2();
|
|
122
|
+
const firstPoint = new THREE.Vector2();
|
|
145
123
|
let isFirstPoint = true;
|
|
146
124
|
let doSetFirstPoint = false;
|
|
147
|
-
const d = node.getAttribute(
|
|
148
|
-
|
|
125
|
+
const d = node.getAttribute("d");
|
|
149
126
|
const commands = d.match(/[a-df-z][^a-df-z]*/gi);
|
|
150
|
-
|
|
151
127
|
for (let i = 0, l = commands.length; i < l; i++) {
|
|
152
128
|
const command = commands[i];
|
|
153
129
|
const type = command.charAt(0);
|
|
154
|
-
const
|
|
155
|
-
|
|
130
|
+
const data2 = command.substr(1).trim();
|
|
156
131
|
if (isFirstPoint === true) {
|
|
157
132
|
doSetFirstPoint = true;
|
|
158
133
|
isFirstPoint = false;
|
|
159
134
|
}
|
|
160
|
-
|
|
161
135
|
let numbers;
|
|
162
|
-
|
|
163
136
|
switch (type) {
|
|
164
|
-
case
|
|
165
|
-
numbers = parseFloats(
|
|
166
|
-
|
|
137
|
+
case "M":
|
|
138
|
+
numbers = parseFloats(data2);
|
|
167
139
|
for (let j = 0, jl = numbers.length; j < jl; j += 2) {
|
|
168
140
|
point.x = numbers[j + 0];
|
|
169
141
|
point.y = numbers[j + 1];
|
|
170
142
|
control.x = point.x;
|
|
171
143
|
control.y = point.y;
|
|
172
|
-
|
|
173
144
|
if (j === 0) {
|
|
174
145
|
path.moveTo(point.x, point.y);
|
|
175
146
|
} else {
|
|
176
147
|
path.lineTo(point.x, point.y);
|
|
177
148
|
}
|
|
178
|
-
|
|
179
|
-
|
|
149
|
+
if (j === 0)
|
|
150
|
+
firstPoint.copy(point);
|
|
180
151
|
}
|
|
181
|
-
|
|
182
152
|
break;
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
numbers = parseFloats(data);
|
|
186
|
-
|
|
153
|
+
case "H":
|
|
154
|
+
numbers = parseFloats(data2);
|
|
187
155
|
for (let j = 0, jl = numbers.length; j < jl; j++) {
|
|
188
156
|
point.x = numbers[j];
|
|
189
157
|
control.x = point.x;
|
|
190
158
|
control.y = point.y;
|
|
191
159
|
path.lineTo(point.x, point.y);
|
|
192
|
-
if (j === 0 && doSetFirstPoint === true)
|
|
160
|
+
if (j === 0 && doSetFirstPoint === true)
|
|
161
|
+
firstPoint.copy(point);
|
|
193
162
|
}
|
|
194
|
-
|
|
195
163
|
break;
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
numbers = parseFloats(data);
|
|
199
|
-
|
|
164
|
+
case "V":
|
|
165
|
+
numbers = parseFloats(data2);
|
|
200
166
|
for (let j = 0, jl = numbers.length; j < jl; j++) {
|
|
201
167
|
point.y = numbers[j];
|
|
202
168
|
control.x = point.x;
|
|
203
169
|
control.y = point.y;
|
|
204
170
|
path.lineTo(point.x, point.y);
|
|
205
|
-
if (j === 0 && doSetFirstPoint === true)
|
|
171
|
+
if (j === 0 && doSetFirstPoint === true)
|
|
172
|
+
firstPoint.copy(point);
|
|
206
173
|
}
|
|
207
|
-
|
|
208
174
|
break;
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
numbers = parseFloats(data);
|
|
212
|
-
|
|
175
|
+
case "L":
|
|
176
|
+
numbers = parseFloats(data2);
|
|
213
177
|
for (let j = 0, jl = numbers.length; j < jl; j += 2) {
|
|
214
178
|
point.x = numbers[j + 0];
|
|
215
179
|
point.y = numbers[j + 1];
|
|
216
180
|
control.x = point.x;
|
|
217
181
|
control.y = point.y;
|
|
218
182
|
path.lineTo(point.x, point.y);
|
|
219
|
-
if (j === 0 && doSetFirstPoint === true)
|
|
183
|
+
if (j === 0 && doSetFirstPoint === true)
|
|
184
|
+
firstPoint.copy(point);
|
|
220
185
|
}
|
|
221
|
-
|
|
222
186
|
break;
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
numbers = parseFloats(data);
|
|
226
|
-
|
|
187
|
+
case "C":
|
|
188
|
+
numbers = parseFloats(data2);
|
|
227
189
|
for (let j = 0, jl = numbers.length; j < jl; j += 6) {
|
|
228
|
-
path.bezierCurveTo(
|
|
190
|
+
path.bezierCurveTo(
|
|
191
|
+
numbers[j + 0],
|
|
192
|
+
numbers[j + 1],
|
|
193
|
+
numbers[j + 2],
|
|
194
|
+
numbers[j + 3],
|
|
195
|
+
numbers[j + 4],
|
|
196
|
+
numbers[j + 5]
|
|
197
|
+
);
|
|
229
198
|
control.x = numbers[j + 2];
|
|
230
199
|
control.y = numbers[j + 3];
|
|
231
200
|
point.x = numbers[j + 4];
|
|
232
201
|
point.y = numbers[j + 5];
|
|
233
|
-
if (j === 0 && doSetFirstPoint === true)
|
|
202
|
+
if (j === 0 && doSetFirstPoint === true)
|
|
203
|
+
firstPoint.copy(point);
|
|
234
204
|
}
|
|
235
|
-
|
|
236
205
|
break;
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
numbers = parseFloats(data);
|
|
240
|
-
|
|
206
|
+
case "S":
|
|
207
|
+
numbers = parseFloats(data2);
|
|
241
208
|
for (let j = 0, jl = numbers.length; j < jl; j += 4) {
|
|
242
|
-
path.bezierCurveTo(
|
|
209
|
+
path.bezierCurveTo(
|
|
210
|
+
getReflection(point.x, control.x),
|
|
211
|
+
getReflection(point.y, control.y),
|
|
212
|
+
numbers[j + 0],
|
|
213
|
+
numbers[j + 1],
|
|
214
|
+
numbers[j + 2],
|
|
215
|
+
numbers[j + 3]
|
|
216
|
+
);
|
|
243
217
|
control.x = numbers[j + 0];
|
|
244
218
|
control.y = numbers[j + 1];
|
|
245
219
|
point.x = numbers[j + 2];
|
|
246
220
|
point.y = numbers[j + 3];
|
|
247
|
-
if (j === 0 && doSetFirstPoint === true)
|
|
221
|
+
if (j === 0 && doSetFirstPoint === true)
|
|
222
|
+
firstPoint.copy(point);
|
|
248
223
|
}
|
|
249
|
-
|
|
250
224
|
break;
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
numbers = parseFloats(data);
|
|
254
|
-
|
|
225
|
+
case "Q":
|
|
226
|
+
numbers = parseFloats(data2);
|
|
255
227
|
for (let j = 0, jl = numbers.length; j < jl; j += 4) {
|
|
256
228
|
path.quadraticCurveTo(numbers[j + 0], numbers[j + 1], numbers[j + 2], numbers[j + 3]);
|
|
257
229
|
control.x = numbers[j + 0];
|
|
258
230
|
control.y = numbers[j + 1];
|
|
259
231
|
point.x = numbers[j + 2];
|
|
260
232
|
point.y = numbers[j + 3];
|
|
261
|
-
if (j === 0 && doSetFirstPoint === true)
|
|
233
|
+
if (j === 0 && doSetFirstPoint === true)
|
|
234
|
+
firstPoint.copy(point);
|
|
262
235
|
}
|
|
263
|
-
|
|
264
236
|
break;
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
numbers = parseFloats(data);
|
|
268
|
-
|
|
237
|
+
case "T":
|
|
238
|
+
numbers = parseFloats(data2);
|
|
269
239
|
for (let j = 0, jl = numbers.length; j < jl; j += 2) {
|
|
270
240
|
const rx = getReflection(point.x, control.x);
|
|
271
241
|
const ry = getReflection(point.y, control.y);
|
|
@@ -274,133 +244,141 @@ class SVGLoader extends Loader {
|
|
|
274
244
|
control.y = ry;
|
|
275
245
|
point.x = numbers[j + 0];
|
|
276
246
|
point.y = numbers[j + 1];
|
|
277
|
-
if (j === 0 && doSetFirstPoint === true)
|
|
247
|
+
if (j === 0 && doSetFirstPoint === true)
|
|
248
|
+
firstPoint.copy(point);
|
|
278
249
|
}
|
|
279
|
-
|
|
280
250
|
break;
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
numbers = parseFloats(data, [3, 4], 7);
|
|
284
|
-
|
|
251
|
+
case "A":
|
|
252
|
+
numbers = parseFloats(data2, [3, 4], 7);
|
|
285
253
|
for (let j = 0, jl = numbers.length; j < jl; j += 7) {
|
|
286
|
-
|
|
287
|
-
|
|
254
|
+
if (numbers[j + 5] == point.x && numbers[j + 6] == point.y)
|
|
255
|
+
continue;
|
|
288
256
|
const start = point.clone();
|
|
289
257
|
point.x = numbers[j + 5];
|
|
290
258
|
point.y = numbers[j + 6];
|
|
291
259
|
control.x = point.x;
|
|
292
260
|
control.y = point.y;
|
|
293
|
-
parseArcCommand(
|
|
294
|
-
|
|
261
|
+
parseArcCommand(
|
|
262
|
+
path,
|
|
263
|
+
numbers[j],
|
|
264
|
+
numbers[j + 1],
|
|
265
|
+
numbers[j + 2],
|
|
266
|
+
numbers[j + 3],
|
|
267
|
+
numbers[j + 4],
|
|
268
|
+
start,
|
|
269
|
+
point
|
|
270
|
+
);
|
|
271
|
+
if (j === 0 && doSetFirstPoint === true)
|
|
272
|
+
firstPoint.copy(point);
|
|
295
273
|
}
|
|
296
|
-
|
|
297
274
|
break;
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
numbers = parseFloats(data);
|
|
301
|
-
|
|
275
|
+
case "m":
|
|
276
|
+
numbers = parseFloats(data2);
|
|
302
277
|
for (let j = 0, jl = numbers.length; j < jl; j += 2) {
|
|
303
278
|
point.x += numbers[j + 0];
|
|
304
279
|
point.y += numbers[j + 1];
|
|
305
280
|
control.x = point.x;
|
|
306
281
|
control.y = point.y;
|
|
307
|
-
|
|
308
282
|
if (j === 0) {
|
|
309
283
|
path.moveTo(point.x, point.y);
|
|
310
284
|
} else {
|
|
311
285
|
path.lineTo(point.x, point.y);
|
|
312
286
|
}
|
|
313
|
-
|
|
314
|
-
|
|
287
|
+
if (j === 0)
|
|
288
|
+
firstPoint.copy(point);
|
|
315
289
|
}
|
|
316
|
-
|
|
317
290
|
break;
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
numbers = parseFloats(data);
|
|
321
|
-
|
|
291
|
+
case "h":
|
|
292
|
+
numbers = parseFloats(data2);
|
|
322
293
|
for (let j = 0, jl = numbers.length; j < jl; j++) {
|
|
323
294
|
point.x += numbers[j];
|
|
324
295
|
control.x = point.x;
|
|
325
296
|
control.y = point.y;
|
|
326
297
|
path.lineTo(point.x, point.y);
|
|
327
|
-
if (j === 0 && doSetFirstPoint === true)
|
|
298
|
+
if (j === 0 && doSetFirstPoint === true)
|
|
299
|
+
firstPoint.copy(point);
|
|
328
300
|
}
|
|
329
|
-
|
|
330
301
|
break;
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
numbers = parseFloats(data);
|
|
334
|
-
|
|
302
|
+
case "v":
|
|
303
|
+
numbers = parseFloats(data2);
|
|
335
304
|
for (let j = 0, jl = numbers.length; j < jl; j++) {
|
|
336
305
|
point.y += numbers[j];
|
|
337
306
|
control.x = point.x;
|
|
338
307
|
control.y = point.y;
|
|
339
308
|
path.lineTo(point.x, point.y);
|
|
340
|
-
if (j === 0 && doSetFirstPoint === true)
|
|
309
|
+
if (j === 0 && doSetFirstPoint === true)
|
|
310
|
+
firstPoint.copy(point);
|
|
341
311
|
}
|
|
342
|
-
|
|
343
312
|
break;
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
numbers = parseFloats(data);
|
|
347
|
-
|
|
313
|
+
case "l":
|
|
314
|
+
numbers = parseFloats(data2);
|
|
348
315
|
for (let j = 0, jl = numbers.length; j < jl; j += 2) {
|
|
349
316
|
point.x += numbers[j + 0];
|
|
350
317
|
point.y += numbers[j + 1];
|
|
351
318
|
control.x = point.x;
|
|
352
319
|
control.y = point.y;
|
|
353
320
|
path.lineTo(point.x, point.y);
|
|
354
|
-
if (j === 0 && doSetFirstPoint === true)
|
|
321
|
+
if (j === 0 && doSetFirstPoint === true)
|
|
322
|
+
firstPoint.copy(point);
|
|
355
323
|
}
|
|
356
|
-
|
|
357
324
|
break;
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
numbers = parseFloats(data);
|
|
361
|
-
|
|
325
|
+
case "c":
|
|
326
|
+
numbers = parseFloats(data2);
|
|
362
327
|
for (let j = 0, jl = numbers.length; j < jl; j += 6) {
|
|
363
|
-
path.bezierCurveTo(
|
|
328
|
+
path.bezierCurveTo(
|
|
329
|
+
point.x + numbers[j + 0],
|
|
330
|
+
point.y + numbers[j + 1],
|
|
331
|
+
point.x + numbers[j + 2],
|
|
332
|
+
point.y + numbers[j + 3],
|
|
333
|
+
point.x + numbers[j + 4],
|
|
334
|
+
point.y + numbers[j + 5]
|
|
335
|
+
);
|
|
364
336
|
control.x = point.x + numbers[j + 2];
|
|
365
337
|
control.y = point.y + numbers[j + 3];
|
|
366
338
|
point.x += numbers[j + 4];
|
|
367
339
|
point.y += numbers[j + 5];
|
|
368
|
-
if (j === 0 && doSetFirstPoint === true)
|
|
340
|
+
if (j === 0 && doSetFirstPoint === true)
|
|
341
|
+
firstPoint.copy(point);
|
|
369
342
|
}
|
|
370
|
-
|
|
371
343
|
break;
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
numbers = parseFloats(data);
|
|
375
|
-
|
|
344
|
+
case "s":
|
|
345
|
+
numbers = parseFloats(data2);
|
|
376
346
|
for (let j = 0, jl = numbers.length; j < jl; j += 4) {
|
|
377
|
-
path.bezierCurveTo(
|
|
347
|
+
path.bezierCurveTo(
|
|
348
|
+
getReflection(point.x, control.x),
|
|
349
|
+
getReflection(point.y, control.y),
|
|
350
|
+
point.x + numbers[j + 0],
|
|
351
|
+
point.y + numbers[j + 1],
|
|
352
|
+
point.x + numbers[j + 2],
|
|
353
|
+
point.y + numbers[j + 3]
|
|
354
|
+
);
|
|
378
355
|
control.x = point.x + numbers[j + 0];
|
|
379
356
|
control.y = point.y + numbers[j + 1];
|
|
380
357
|
point.x += numbers[j + 2];
|
|
381
358
|
point.y += numbers[j + 3];
|
|
382
|
-
if (j === 0 && doSetFirstPoint === true)
|
|
359
|
+
if (j === 0 && doSetFirstPoint === true)
|
|
360
|
+
firstPoint.copy(point);
|
|
383
361
|
}
|
|
384
|
-
|
|
385
362
|
break;
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
numbers = parseFloats(data);
|
|
389
|
-
|
|
363
|
+
case "q":
|
|
364
|
+
numbers = parseFloats(data2);
|
|
390
365
|
for (let j = 0, jl = numbers.length; j < jl; j += 4) {
|
|
391
|
-
path.quadraticCurveTo(
|
|
366
|
+
path.quadraticCurveTo(
|
|
367
|
+
point.x + numbers[j + 0],
|
|
368
|
+
point.y + numbers[j + 1],
|
|
369
|
+
point.x + numbers[j + 2],
|
|
370
|
+
point.y + numbers[j + 3]
|
|
371
|
+
);
|
|
392
372
|
control.x = point.x + numbers[j + 0];
|
|
393
373
|
control.y = point.y + numbers[j + 1];
|
|
394
374
|
point.x += numbers[j + 2];
|
|
395
375
|
point.y += numbers[j + 3];
|
|
396
|
-
if (j === 0 && doSetFirstPoint === true)
|
|
376
|
+
if (j === 0 && doSetFirstPoint === true)
|
|
377
|
+
firstPoint.copy(point);
|
|
397
378
|
}
|
|
398
|
-
|
|
399
379
|
break;
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
numbers = parseFloats(data);
|
|
403
|
-
|
|
380
|
+
case "t":
|
|
381
|
+
numbers = parseFloats(data2);
|
|
404
382
|
for (let j = 0, jl = numbers.length; j < jl; j += 2) {
|
|
405
383
|
const rx = getReflection(point.x, control.x);
|
|
406
384
|
const ry = getReflection(point.y, control.y);
|
|
@@ -409,325 +387,257 @@ class SVGLoader extends Loader {
|
|
|
409
387
|
control.y = ry;
|
|
410
388
|
point.x = point.x + numbers[j + 0];
|
|
411
389
|
point.y = point.y + numbers[j + 1];
|
|
412
|
-
if (j === 0 && doSetFirstPoint === true)
|
|
390
|
+
if (j === 0 && doSetFirstPoint === true)
|
|
391
|
+
firstPoint.copy(point);
|
|
413
392
|
}
|
|
414
|
-
|
|
415
393
|
break;
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
numbers = parseFloats(data, [3, 4], 7);
|
|
419
|
-
|
|
394
|
+
case "a":
|
|
395
|
+
numbers = parseFloats(data2, [3, 4], 7);
|
|
420
396
|
for (let j = 0, jl = numbers.length; j < jl; j += 7) {
|
|
421
|
-
|
|
422
|
-
|
|
397
|
+
if (numbers[j + 5] == 0 && numbers[j + 6] == 0)
|
|
398
|
+
continue;
|
|
423
399
|
const start = point.clone();
|
|
424
400
|
point.x += numbers[j + 5];
|
|
425
401
|
point.y += numbers[j + 6];
|
|
426
402
|
control.x = point.x;
|
|
427
403
|
control.y = point.y;
|
|
428
|
-
parseArcCommand(
|
|
429
|
-
|
|
404
|
+
parseArcCommand(
|
|
405
|
+
path,
|
|
406
|
+
numbers[j],
|
|
407
|
+
numbers[j + 1],
|
|
408
|
+
numbers[j + 2],
|
|
409
|
+
numbers[j + 3],
|
|
410
|
+
numbers[j + 4],
|
|
411
|
+
start,
|
|
412
|
+
point
|
|
413
|
+
);
|
|
414
|
+
if (j === 0 && doSetFirstPoint === true)
|
|
415
|
+
firstPoint.copy(point);
|
|
430
416
|
}
|
|
431
|
-
|
|
432
417
|
break;
|
|
433
|
-
|
|
434
|
-
case
|
|
435
|
-
case 'z':
|
|
418
|
+
case "Z":
|
|
419
|
+
case "z":
|
|
436
420
|
path.currentPath.autoClose = true;
|
|
437
|
-
|
|
438
421
|
if (path.currentPath.curves.length > 0) {
|
|
439
|
-
// Reset point to beginning of Path
|
|
440
422
|
point.copy(firstPoint);
|
|
441
423
|
path.currentPath.currentPoint.copy(point);
|
|
442
424
|
isFirstPoint = true;
|
|
443
425
|
}
|
|
444
|
-
|
|
445
426
|
break;
|
|
446
|
-
|
|
447
427
|
default:
|
|
448
428
|
console.warn(command);
|
|
449
|
-
}
|
|
450
|
-
|
|
451
|
-
|
|
429
|
+
}
|
|
452
430
|
doSetFirstPoint = false;
|
|
453
431
|
}
|
|
454
|
-
|
|
455
432
|
return path;
|
|
456
433
|
}
|
|
457
|
-
|
|
458
434
|
function parseCSSStylesheet(node) {
|
|
459
|
-
if (!node.sheet || !node.sheet.cssRules || !node.sheet.cssRules.length)
|
|
460
|
-
|
|
435
|
+
if (!node.sheet || !node.sheet.cssRules || !node.sheet.cssRules.length)
|
|
436
|
+
return;
|
|
461
437
|
for (let i = 0; i < node.sheet.cssRules.length; i++) {
|
|
462
438
|
const stylesheet = node.sheet.cssRules[i];
|
|
463
|
-
if (stylesheet.type !== 1)
|
|
464
|
-
|
|
465
|
-
|
|
439
|
+
if (stylesheet.type !== 1)
|
|
440
|
+
continue;
|
|
441
|
+
const selectorList = stylesheet.selectorText.split(/,/gm).filter(Boolean).map((i2) => i2.trim());
|
|
466
442
|
for (let j = 0; j < selectorList.length; j++) {
|
|
467
443
|
stylesheets[selectorList[j]] = Object.assign(stylesheets[selectorList[j]] || {}, stylesheet.style);
|
|
468
444
|
}
|
|
469
445
|
}
|
|
470
446
|
}
|
|
471
|
-
/**
|
|
472
|
-
* https://www.w3.org/TR/SVG/implnote.html#ArcImplementationNotes
|
|
473
|
-
* https://mortoray.com/2017/02/16/rendering-an-svg-elliptical-arc-as-bezier-curves/ Appendix: Endpoint to center arc conversion
|
|
474
|
-
* From
|
|
475
|
-
* rx ry x-axis-rotation large-arc-flag sweep-flag x y
|
|
476
|
-
* To
|
|
477
|
-
* aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation
|
|
478
|
-
*/
|
|
479
|
-
|
|
480
|
-
|
|
481
447
|
function parseArcCommand(path, rx, ry, x_axis_rotation, large_arc_flag, sweep_flag, start, end) {
|
|
482
448
|
if (rx == 0 || ry == 0) {
|
|
483
|
-
// draw a line if either of the radii == 0
|
|
484
449
|
path.lineTo(end.x, end.y);
|
|
485
450
|
return;
|
|
486
451
|
}
|
|
487
|
-
|
|
488
|
-
x_axis_rotation = x_axis_rotation * Math.PI / 180; // Ensure radii are positive
|
|
489
|
-
|
|
452
|
+
x_axis_rotation = x_axis_rotation * Math.PI / 180;
|
|
490
453
|
rx = Math.abs(rx);
|
|
491
|
-
ry = Math.abs(ry);
|
|
492
|
-
|
|
493
|
-
const
|
|
494
|
-
const dy2 = (start.y - end.y) / 2.0;
|
|
454
|
+
ry = Math.abs(ry);
|
|
455
|
+
const dx2 = (start.x - end.x) / 2;
|
|
456
|
+
const dy2 = (start.y - end.y) / 2;
|
|
495
457
|
const x1p = Math.cos(x_axis_rotation) * dx2 + Math.sin(x_axis_rotation) * dy2;
|
|
496
|
-
const y1p = -Math.sin(x_axis_rotation) * dx2 + Math.cos(x_axis_rotation) * dy2;
|
|
497
|
-
|
|
458
|
+
const y1p = -Math.sin(x_axis_rotation) * dx2 + Math.cos(x_axis_rotation) * dy2;
|
|
498
459
|
let rxs = rx * rx;
|
|
499
460
|
let rys = ry * ry;
|
|
500
461
|
const x1ps = x1p * x1p;
|
|
501
|
-
const y1ps = y1p * y1p;
|
|
502
|
-
|
|
462
|
+
const y1ps = y1p * y1p;
|
|
503
463
|
const cr = x1ps / rxs + y1ps / rys;
|
|
504
|
-
|
|
505
464
|
if (cr > 1) {
|
|
506
|
-
// scale up rx,ry equally so cr == 1
|
|
507
465
|
const s = Math.sqrt(cr);
|
|
508
466
|
rx = s * rx;
|
|
509
467
|
ry = s * ry;
|
|
510
468
|
rxs = rx * rx;
|
|
511
469
|
rys = ry * ry;
|
|
512
470
|
}
|
|
513
|
-
|
|
514
471
|
const dq = rxs * y1ps + rys * x1ps;
|
|
515
472
|
const pq = (rxs * rys - dq) / dq;
|
|
516
473
|
let q = Math.sqrt(Math.max(0, pq));
|
|
517
|
-
if (large_arc_flag === sweep_flag)
|
|
474
|
+
if (large_arc_flag === sweep_flag)
|
|
475
|
+
q = -q;
|
|
518
476
|
const cxp = q * rx * y1p / ry;
|
|
519
|
-
const cyp = -q * ry * x1p / rx;
|
|
520
|
-
|
|
477
|
+
const cyp = -q * ry * x1p / rx;
|
|
521
478
|
const cx = Math.cos(x_axis_rotation) * cxp - Math.sin(x_axis_rotation) * cyp + (start.x + end.x) / 2;
|
|
522
|
-
const cy = Math.sin(x_axis_rotation) * cxp + Math.cos(x_axis_rotation) * cyp + (start.y + end.y) / 2;
|
|
523
|
-
|
|
479
|
+
const cy = Math.sin(x_axis_rotation) * cxp + Math.cos(x_axis_rotation) * cyp + (start.y + end.y) / 2;
|
|
524
480
|
const theta = svgAngle(1, 0, (x1p - cxp) / rx, (y1p - cyp) / ry);
|
|
525
481
|
const delta = svgAngle((x1p - cxp) / rx, (y1p - cyp) / ry, (-x1p - cxp) / rx, (-y1p - cyp) / ry) % (Math.PI * 2);
|
|
526
482
|
path.currentPath.absellipse(cx, cy, rx, ry, theta, theta + delta, sweep_flag === 0, x_axis_rotation);
|
|
527
483
|
}
|
|
528
|
-
|
|
529
484
|
function svgAngle(ux, uy, vx, vy) {
|
|
530
485
|
const dot = ux * vx + uy * vy;
|
|
531
486
|
const len = Math.sqrt(ux * ux + uy * uy) * Math.sqrt(vx * vx + vy * vy);
|
|
532
|
-
let ang = Math.acos(Math.max(-1, Math.min(1, dot / len)));
|
|
533
|
-
|
|
534
|
-
|
|
487
|
+
let ang = Math.acos(Math.max(-1, Math.min(1, dot / len)));
|
|
488
|
+
if (ux * vy - uy * vx < 0)
|
|
489
|
+
ang = -ang;
|
|
535
490
|
return ang;
|
|
536
491
|
}
|
|
537
|
-
/*
|
|
538
|
-
* According to https://www.w3.org/TR/SVG/shapes.html#RectElementRXAttribute
|
|
539
|
-
* rounded corner should be rendered to elliptical arc, but bezier curve does the job well enough
|
|
540
|
-
*/
|
|
541
|
-
|
|
542
|
-
|
|
543
492
|
function parseRectNode(node) {
|
|
544
|
-
const x = parseFloatWithUnits(node.getAttribute(
|
|
545
|
-
const y = parseFloatWithUnits(node.getAttribute(
|
|
546
|
-
const rx = parseFloatWithUnits(node.getAttribute(
|
|
547
|
-
const ry = parseFloatWithUnits(node.getAttribute(
|
|
548
|
-
const w = parseFloatWithUnits(node.getAttribute(
|
|
549
|
-
const h = parseFloatWithUnits(node.getAttribute(
|
|
550
|
-
// https://spencermortensen.com/articles/bezier-circle/
|
|
551
|
-
|
|
493
|
+
const x = parseFloatWithUnits(node.getAttribute("x") || 0);
|
|
494
|
+
const y = parseFloatWithUnits(node.getAttribute("y") || 0);
|
|
495
|
+
const rx = parseFloatWithUnits(node.getAttribute("rx") || node.getAttribute("ry") || 0);
|
|
496
|
+
const ry = parseFloatWithUnits(node.getAttribute("ry") || node.getAttribute("rx") || 0);
|
|
497
|
+
const w = parseFloatWithUnits(node.getAttribute("width"));
|
|
498
|
+
const h = parseFloatWithUnits(node.getAttribute("height"));
|
|
552
499
|
const bci = 1 - 0.551915024494;
|
|
553
|
-
const path = new ShapePath();
|
|
554
|
-
|
|
555
|
-
path.moveTo(x + rx, y); // top right
|
|
556
|
-
|
|
500
|
+
const path = new THREE.ShapePath();
|
|
501
|
+
path.moveTo(x + rx, y);
|
|
557
502
|
path.lineTo(x + w - rx, y);
|
|
558
|
-
|
|
559
503
|
if (rx !== 0 || ry !== 0) {
|
|
560
504
|
path.bezierCurveTo(x + w - rx * bci, y, x + w, y + ry * bci, x + w, y + ry);
|
|
561
|
-
}
|
|
562
|
-
|
|
563
|
-
|
|
505
|
+
}
|
|
564
506
|
path.lineTo(x + w, y + h - ry);
|
|
565
|
-
|
|
566
507
|
if (rx !== 0 || ry !== 0) {
|
|
567
508
|
path.bezierCurveTo(x + w, y + h - ry * bci, x + w - rx * bci, y + h, x + w - rx, y + h);
|
|
568
|
-
}
|
|
569
|
-
|
|
570
|
-
|
|
509
|
+
}
|
|
571
510
|
path.lineTo(x + rx, y + h);
|
|
572
|
-
|
|
573
511
|
if (rx !== 0 || ry !== 0) {
|
|
574
512
|
path.bezierCurveTo(x + rx * bci, y + h, x, y + h - ry * bci, x, y + h - ry);
|
|
575
|
-
}
|
|
576
|
-
|
|
577
|
-
|
|
513
|
+
}
|
|
578
514
|
path.lineTo(x, y + ry);
|
|
579
|
-
|
|
580
515
|
if (rx !== 0 || ry !== 0) {
|
|
581
516
|
path.bezierCurveTo(x, y + ry * bci, x + rx * bci, y, x + rx, y);
|
|
582
517
|
}
|
|
583
|
-
|
|
584
518
|
return path;
|
|
585
519
|
}
|
|
586
|
-
|
|
587
520
|
function parsePolygonNode(node) {
|
|
588
521
|
function iterator(match, a, b) {
|
|
589
522
|
const x = parseFloatWithUnits(a);
|
|
590
523
|
const y = parseFloatWithUnits(b);
|
|
591
|
-
|
|
592
524
|
if (index === 0) {
|
|
593
525
|
path.moveTo(x, y);
|
|
594
526
|
} else {
|
|
595
527
|
path.lineTo(x, y);
|
|
596
528
|
}
|
|
597
|
-
|
|
598
529
|
index++;
|
|
599
530
|
}
|
|
600
|
-
|
|
601
531
|
const regex = /(-?[\d\.?]+)[,|\s](-?[\d\.?]+)/g;
|
|
602
|
-
const path = new ShapePath();
|
|
532
|
+
const path = new THREE.ShapePath();
|
|
603
533
|
let index = 0;
|
|
604
|
-
node.getAttribute(
|
|
534
|
+
node.getAttribute("points").replace(regex, iterator);
|
|
605
535
|
path.currentPath.autoClose = true;
|
|
606
536
|
return path;
|
|
607
537
|
}
|
|
608
|
-
|
|
609
538
|
function parsePolylineNode(node) {
|
|
610
539
|
function iterator(match, a, b) {
|
|
611
540
|
const x = parseFloatWithUnits(a);
|
|
612
541
|
const y = parseFloatWithUnits(b);
|
|
613
|
-
|
|
614
542
|
if (index === 0) {
|
|
615
543
|
path.moveTo(x, y);
|
|
616
544
|
} else {
|
|
617
545
|
path.lineTo(x, y);
|
|
618
546
|
}
|
|
619
|
-
|
|
620
547
|
index++;
|
|
621
548
|
}
|
|
622
|
-
|
|
623
549
|
const regex = /(-?[\d\.?]+)[,|\s](-?[\d\.?]+)/g;
|
|
624
|
-
const path = new ShapePath();
|
|
550
|
+
const path = new THREE.ShapePath();
|
|
625
551
|
let index = 0;
|
|
626
|
-
node.getAttribute(
|
|
552
|
+
node.getAttribute("points").replace(regex, iterator);
|
|
627
553
|
path.currentPath.autoClose = false;
|
|
628
554
|
return path;
|
|
629
555
|
}
|
|
630
|
-
|
|
631
556
|
function parseCircleNode(node) {
|
|
632
|
-
const x = parseFloatWithUnits(node.getAttribute(
|
|
633
|
-
const y = parseFloatWithUnits(node.getAttribute(
|
|
634
|
-
const r = parseFloatWithUnits(node.getAttribute(
|
|
635
|
-
const subpath = new Path();
|
|
557
|
+
const x = parseFloatWithUnits(node.getAttribute("cx") || 0);
|
|
558
|
+
const y = parseFloatWithUnits(node.getAttribute("cy") || 0);
|
|
559
|
+
const r = parseFloatWithUnits(node.getAttribute("r") || 0);
|
|
560
|
+
const subpath = new THREE.Path();
|
|
636
561
|
subpath.absarc(x, y, r, 0, Math.PI * 2);
|
|
637
|
-
const path = new ShapePath();
|
|
562
|
+
const path = new THREE.ShapePath();
|
|
638
563
|
path.subPaths.push(subpath);
|
|
639
564
|
return path;
|
|
640
565
|
}
|
|
641
|
-
|
|
642
566
|
function parseEllipseNode(node) {
|
|
643
|
-
const x = parseFloatWithUnits(node.getAttribute(
|
|
644
|
-
const y = parseFloatWithUnits(node.getAttribute(
|
|
645
|
-
const rx = parseFloatWithUnits(node.getAttribute(
|
|
646
|
-
const ry = parseFloatWithUnits(node.getAttribute(
|
|
647
|
-
const subpath = new Path();
|
|
567
|
+
const x = parseFloatWithUnits(node.getAttribute("cx") || 0);
|
|
568
|
+
const y = parseFloatWithUnits(node.getAttribute("cy") || 0);
|
|
569
|
+
const rx = parseFloatWithUnits(node.getAttribute("rx") || 0);
|
|
570
|
+
const ry = parseFloatWithUnits(node.getAttribute("ry") || 0);
|
|
571
|
+
const subpath = new THREE.Path();
|
|
648
572
|
subpath.absellipse(x, y, rx, ry, 0, Math.PI * 2);
|
|
649
|
-
const path = new ShapePath();
|
|
573
|
+
const path = new THREE.ShapePath();
|
|
650
574
|
path.subPaths.push(subpath);
|
|
651
575
|
return path;
|
|
652
576
|
}
|
|
653
|
-
|
|
654
577
|
function parseLineNode(node) {
|
|
655
|
-
const x1 = parseFloatWithUnits(node.getAttribute(
|
|
656
|
-
const y1 = parseFloatWithUnits(node.getAttribute(
|
|
657
|
-
const x2 = parseFloatWithUnits(node.getAttribute(
|
|
658
|
-
const y2 = parseFloatWithUnits(node.getAttribute(
|
|
659
|
-
const path = new ShapePath();
|
|
578
|
+
const x1 = parseFloatWithUnits(node.getAttribute("x1") || 0);
|
|
579
|
+
const y1 = parseFloatWithUnits(node.getAttribute("y1") || 0);
|
|
580
|
+
const x2 = parseFloatWithUnits(node.getAttribute("x2") || 0);
|
|
581
|
+
const y2 = parseFloatWithUnits(node.getAttribute("y2") || 0);
|
|
582
|
+
const path = new THREE.ShapePath();
|
|
660
583
|
path.moveTo(x1, y1);
|
|
661
584
|
path.lineTo(x2, y2);
|
|
662
585
|
path.currentPath.autoClose = false;
|
|
663
586
|
return path;
|
|
664
|
-
}
|
|
665
|
-
|
|
666
|
-
|
|
587
|
+
}
|
|
667
588
|
function parseStyle(node, style) {
|
|
668
|
-
style = Object.assign({}, style);
|
|
669
|
-
|
|
589
|
+
style = Object.assign({}, style);
|
|
670
590
|
let stylesheetStyles = {};
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
const classSelectors = node.getAttribute('class').split(/\s/).filter(Boolean).map(i => i.trim());
|
|
674
|
-
|
|
591
|
+
if (node.hasAttribute("class")) {
|
|
592
|
+
const classSelectors = node.getAttribute("class").split(/\s/).filter(Boolean).map((i) => i.trim());
|
|
675
593
|
for (let i = 0; i < classSelectors.length; i++) {
|
|
676
|
-
stylesheetStyles = Object.assign(stylesheetStyles, stylesheets[
|
|
594
|
+
stylesheetStyles = Object.assign(stylesheetStyles, stylesheets["." + classSelectors[i]]);
|
|
677
595
|
}
|
|
678
596
|
}
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
stylesheetStyles = Object.assign(stylesheetStyles, stylesheets['#' + node.getAttribute('id')]);
|
|
597
|
+
if (node.hasAttribute("id")) {
|
|
598
|
+
stylesheetStyles = Object.assign(stylesheetStyles, stylesheets["#" + node.getAttribute("id")]);
|
|
682
599
|
}
|
|
683
|
-
|
|
684
600
|
function addStyle(svgName, jsName, adjustFunction) {
|
|
685
|
-
if (adjustFunction ===
|
|
601
|
+
if (adjustFunction === void 0) {
|
|
686
602
|
adjustFunction = function copy(v) {
|
|
687
|
-
if (v.startsWith(
|
|
603
|
+
if (v.startsWith("url"))
|
|
604
|
+
console.warn("SVGLoader: url access in attributes is not implemented.");
|
|
688
605
|
return v;
|
|
689
606
|
};
|
|
690
607
|
}
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
if (stylesheetStyles[svgName])
|
|
694
|
-
|
|
608
|
+
if (node.hasAttribute(svgName))
|
|
609
|
+
style[jsName] = adjustFunction(node.getAttribute(svgName));
|
|
610
|
+
if (stylesheetStyles[svgName])
|
|
611
|
+
style[jsName] = adjustFunction(stylesheetStyles[svgName]);
|
|
612
|
+
if (node.style && node.style[svgName] !== "")
|
|
613
|
+
style[jsName] = adjustFunction(node.style[svgName]);
|
|
695
614
|
}
|
|
696
|
-
|
|
697
615
|
function clamp(v) {
|
|
698
616
|
return Math.max(0, Math.min(1, parseFloatWithUnits(v)));
|
|
699
617
|
}
|
|
700
|
-
|
|
701
618
|
function positive(v) {
|
|
702
619
|
return Math.max(0, parseFloatWithUnits(v));
|
|
703
620
|
}
|
|
704
|
-
|
|
705
|
-
addStyle(
|
|
706
|
-
addStyle(
|
|
707
|
-
addStyle(
|
|
708
|
-
addStyle(
|
|
709
|
-
addStyle(
|
|
710
|
-
addStyle(
|
|
711
|
-
addStyle(
|
|
712
|
-
addStyle(
|
|
713
|
-
addStyle(
|
|
714
|
-
addStyle(
|
|
715
|
-
addStyle('visibility', 'visibility');
|
|
621
|
+
addStyle("fill", "fill");
|
|
622
|
+
addStyle("fill-opacity", "fillOpacity", clamp);
|
|
623
|
+
addStyle("fill-rule", "fillRule");
|
|
624
|
+
addStyle("opacity", "opacity", clamp);
|
|
625
|
+
addStyle("stroke", "stroke");
|
|
626
|
+
addStyle("stroke-opacity", "strokeOpacity", clamp);
|
|
627
|
+
addStyle("stroke-width", "strokeWidth", positive);
|
|
628
|
+
addStyle("stroke-linejoin", "strokeLineJoin");
|
|
629
|
+
addStyle("stroke-linecap", "strokeLineCap");
|
|
630
|
+
addStyle("stroke-miterlimit", "strokeMiterLimit", positive);
|
|
631
|
+
addStyle("visibility", "visibility");
|
|
716
632
|
return style;
|
|
717
|
-
}
|
|
718
|
-
|
|
719
|
-
|
|
633
|
+
}
|
|
720
634
|
function getReflection(a, b) {
|
|
721
635
|
return a - (b - a);
|
|
722
|
-
}
|
|
723
|
-
|
|
724
|
-
|
|
636
|
+
}
|
|
725
637
|
function parseFloats(input, flags, stride) {
|
|
726
|
-
if (typeof input !==
|
|
727
|
-
throw new TypeError(
|
|
728
|
-
}
|
|
729
|
-
|
|
730
|
-
|
|
638
|
+
if (typeof input !== "string") {
|
|
639
|
+
throw new TypeError("Invalid input: " + typeof input);
|
|
640
|
+
}
|
|
731
641
|
const RE = {
|
|
732
642
|
SEPARATOR: /[ \t\r\n\,.\-+]/,
|
|
733
643
|
WHITESPACE: /[ \t\r\n]/,
|
|
@@ -737,138 +647,107 @@ class SVGLoader extends Loader {
|
|
|
737
647
|
COMMA: /,/,
|
|
738
648
|
EXP: /e/i,
|
|
739
649
|
FLAGS: /[01]/
|
|
740
|
-
};
|
|
741
|
-
|
|
650
|
+
};
|
|
742
651
|
const SEP = 0;
|
|
743
652
|
const INT = 1;
|
|
744
653
|
const FLOAT = 2;
|
|
745
654
|
const EXP = 3;
|
|
746
655
|
let state = SEP;
|
|
747
656
|
let seenComma = true;
|
|
748
|
-
let number =
|
|
749
|
-
exponent = '';
|
|
657
|
+
let number = "", exponent = "";
|
|
750
658
|
const result = [];
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
const error = new SyntaxError('Unexpected character "' + current + '" at index ' + i + '.');
|
|
659
|
+
function throwSyntaxError(current2, i, partial) {
|
|
660
|
+
const error = new SyntaxError('Unexpected character "' + current2 + '" at index ' + i + ".");
|
|
754
661
|
error.partial = partial;
|
|
755
662
|
throw error;
|
|
756
663
|
}
|
|
757
|
-
|
|
758
664
|
function newNumber() {
|
|
759
|
-
if (number !==
|
|
760
|
-
if (exponent ===
|
|
665
|
+
if (number !== "") {
|
|
666
|
+
if (exponent === "")
|
|
667
|
+
result.push(Number(number));
|
|
668
|
+
else
|
|
669
|
+
result.push(Number(number) * Math.pow(10, Number(exponent)));
|
|
761
670
|
}
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
exponent = '';
|
|
671
|
+
number = "";
|
|
672
|
+
exponent = "";
|
|
765
673
|
}
|
|
766
|
-
|
|
767
674
|
let current;
|
|
768
675
|
const length = input.length;
|
|
769
|
-
|
|
770
676
|
for (let i = 0; i < length; i++) {
|
|
771
|
-
current = input[i];
|
|
772
|
-
|
|
677
|
+
current = input[i];
|
|
773
678
|
if (Array.isArray(flags) && flags.includes(result.length % stride) && RE.FLAGS.test(current)) {
|
|
774
679
|
state = INT;
|
|
775
680
|
number = current;
|
|
776
681
|
newNumber();
|
|
777
682
|
continue;
|
|
778
|
-
}
|
|
779
|
-
|
|
780
|
-
|
|
683
|
+
}
|
|
781
684
|
if (state === SEP) {
|
|
782
|
-
// eat whitespace
|
|
783
685
|
if (RE.WHITESPACE.test(current)) {
|
|
784
686
|
continue;
|
|
785
|
-
}
|
|
786
|
-
|
|
787
|
-
|
|
687
|
+
}
|
|
788
688
|
if (RE.DIGIT.test(current) || RE.SIGN.test(current)) {
|
|
789
689
|
state = INT;
|
|
790
690
|
number = current;
|
|
791
691
|
continue;
|
|
792
692
|
}
|
|
793
|
-
|
|
794
693
|
if (RE.POINT.test(current)) {
|
|
795
694
|
state = FLOAT;
|
|
796
695
|
number = current;
|
|
797
696
|
continue;
|
|
798
|
-
}
|
|
799
|
-
|
|
800
|
-
|
|
697
|
+
}
|
|
801
698
|
if (RE.COMMA.test(current)) {
|
|
802
699
|
if (seenComma) {
|
|
803
700
|
throwSyntaxError(current, i, result);
|
|
804
701
|
}
|
|
805
|
-
|
|
806
702
|
seenComma = true;
|
|
807
703
|
}
|
|
808
|
-
}
|
|
809
|
-
|
|
810
|
-
|
|
704
|
+
}
|
|
811
705
|
if (state === INT) {
|
|
812
706
|
if (RE.DIGIT.test(current)) {
|
|
813
707
|
number += current;
|
|
814
708
|
continue;
|
|
815
709
|
}
|
|
816
|
-
|
|
817
710
|
if (RE.POINT.test(current)) {
|
|
818
711
|
number += current;
|
|
819
712
|
state = FLOAT;
|
|
820
713
|
continue;
|
|
821
714
|
}
|
|
822
|
-
|
|
823
715
|
if (RE.EXP.test(current)) {
|
|
824
716
|
state = EXP;
|
|
825
717
|
continue;
|
|
826
|
-
}
|
|
827
|
-
|
|
828
|
-
|
|
718
|
+
}
|
|
829
719
|
if (RE.SIGN.test(current) && number.length === 1 && RE.SIGN.test(number[0])) {
|
|
830
720
|
throwSyntaxError(current, i, result);
|
|
831
721
|
}
|
|
832
|
-
}
|
|
833
|
-
|
|
834
|
-
|
|
722
|
+
}
|
|
835
723
|
if (state === FLOAT) {
|
|
836
724
|
if (RE.DIGIT.test(current)) {
|
|
837
725
|
number += current;
|
|
838
726
|
continue;
|
|
839
727
|
}
|
|
840
|
-
|
|
841
728
|
if (RE.EXP.test(current)) {
|
|
842
729
|
state = EXP;
|
|
843
730
|
continue;
|
|
844
|
-
}
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
if (RE.POINT.test(current) && number[number.length - 1] === '.') {
|
|
731
|
+
}
|
|
732
|
+
if (RE.POINT.test(current) && number[number.length - 1] === ".") {
|
|
848
733
|
throwSyntaxError(current, i, result);
|
|
849
734
|
}
|
|
850
|
-
}
|
|
851
|
-
|
|
852
|
-
|
|
735
|
+
}
|
|
853
736
|
if (state === EXP) {
|
|
854
737
|
if (RE.DIGIT.test(current)) {
|
|
855
738
|
exponent += current;
|
|
856
739
|
continue;
|
|
857
740
|
}
|
|
858
|
-
|
|
859
741
|
if (RE.SIGN.test(current)) {
|
|
860
|
-
if (exponent ===
|
|
742
|
+
if (exponent === "") {
|
|
861
743
|
exponent += current;
|
|
862
744
|
continue;
|
|
863
745
|
}
|
|
864
|
-
|
|
865
746
|
if (exponent.length === 1 && RE.SIGN.test(exponent)) {
|
|
866
747
|
throwSyntaxError(current, i, result);
|
|
867
748
|
}
|
|
868
749
|
}
|
|
869
|
-
}
|
|
870
|
-
|
|
871
|
-
|
|
750
|
+
}
|
|
872
751
|
if (RE.WHITESPACE.test(current)) {
|
|
873
752
|
newNumber();
|
|
874
753
|
state = SEP;
|
|
@@ -888,16 +767,11 @@ class SVGLoader extends Loader {
|
|
|
888
767
|
} else {
|
|
889
768
|
throwSyntaxError(current, i, result);
|
|
890
769
|
}
|
|
891
|
-
}
|
|
892
|
-
|
|
893
|
-
|
|
770
|
+
}
|
|
894
771
|
newNumber();
|
|
895
772
|
return result;
|
|
896
|
-
}
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
const units = ['mm', 'cm', 'in', 'pt', 'pc', 'px']; // Conversion: [ fromUnit ][ toUnit ] (-1 means dpi dependent)
|
|
900
|
-
|
|
773
|
+
}
|
|
774
|
+
const units = ["mm", "cm", "in", "pt", "pc", "px"];
|
|
901
775
|
const unitConversion = {
|
|
902
776
|
mm: {
|
|
903
777
|
mm: 1,
|
|
@@ -943,14 +817,11 @@ class SVGLoader extends Loader {
|
|
|
943
817
|
px: 1
|
|
944
818
|
}
|
|
945
819
|
};
|
|
946
|
-
|
|
947
820
|
function parseFloatWithUnits(string) {
|
|
948
|
-
let theUnit =
|
|
949
|
-
|
|
950
|
-
if (typeof string === 'string' || string instanceof String) {
|
|
821
|
+
let theUnit = "px";
|
|
822
|
+
if (typeof string === "string" || string instanceof String) {
|
|
951
823
|
for (let i = 0, n = units.length; i < n; i++) {
|
|
952
824
|
const u = units[i];
|
|
953
|
-
|
|
954
825
|
if (string.endsWith(u)) {
|
|
955
826
|
theUnit = u;
|
|
956
827
|
string = string.substring(0, string.length - u.length);
|
|
@@ -958,164 +829,121 @@ class SVGLoader extends Loader {
|
|
|
958
829
|
}
|
|
959
830
|
}
|
|
960
831
|
}
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
if (theUnit === 'px' && scope.defaultUnit !== 'px') {
|
|
965
|
-
// Conversion scale from pixels to inches, then to default units
|
|
966
|
-
scale = unitConversion['in'][scope.defaultUnit] / scope.defaultDPI;
|
|
832
|
+
let scale = void 0;
|
|
833
|
+
if (theUnit === "px" && scope.defaultUnit !== "px") {
|
|
834
|
+
scale = unitConversion["in"][scope.defaultUnit] / scope.defaultDPI;
|
|
967
835
|
} else {
|
|
968
836
|
scale = unitConversion[theUnit][scope.defaultUnit];
|
|
969
|
-
|
|
970
837
|
if (scale < 0) {
|
|
971
|
-
|
|
972
|
-
scale = unitConversion[theUnit]['in'] * scope.defaultDPI;
|
|
838
|
+
scale = unitConversion[theUnit]["in"] * scope.defaultDPI;
|
|
973
839
|
}
|
|
974
840
|
}
|
|
975
|
-
|
|
976
841
|
return scale * parseFloat(string);
|
|
977
|
-
}
|
|
978
|
-
|
|
979
|
-
|
|
842
|
+
}
|
|
980
843
|
function getNodeTransform(node) {
|
|
981
|
-
if (!(node.hasAttribute(
|
|
844
|
+
if (!(node.hasAttribute("transform") || node.nodeName === "use" && (node.hasAttribute("x") || node.hasAttribute("y")))) {
|
|
982
845
|
return null;
|
|
983
846
|
}
|
|
984
|
-
|
|
985
847
|
const transform = parseNodeTransform(node);
|
|
986
|
-
|
|
987
848
|
if (transformStack.length > 0) {
|
|
988
849
|
transform.premultiply(transformStack[transformStack.length - 1]);
|
|
989
850
|
}
|
|
990
|
-
|
|
991
851
|
currentTransform.copy(transform);
|
|
992
852
|
transformStack.push(transform);
|
|
993
853
|
return transform;
|
|
994
854
|
}
|
|
995
|
-
|
|
996
855
|
function parseNodeTransform(node) {
|
|
997
|
-
const transform = new Matrix3();
|
|
998
|
-
const
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
const
|
|
1002
|
-
const ty = parseFloatWithUnits(node.getAttribute('y'));
|
|
856
|
+
const transform = new THREE.Matrix3();
|
|
857
|
+
const currentTransform2 = tempTransform0;
|
|
858
|
+
if (node.nodeName === "use" && (node.hasAttribute("x") || node.hasAttribute("y"))) {
|
|
859
|
+
const tx = parseFloatWithUnits(node.getAttribute("x"));
|
|
860
|
+
const ty = parseFloatWithUnits(node.getAttribute("y"));
|
|
1003
861
|
transform.translate(tx, ty);
|
|
1004
862
|
}
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
const transformsTexts = node.getAttribute('transform').split(')');
|
|
1008
|
-
|
|
863
|
+
if (node.hasAttribute("transform")) {
|
|
864
|
+
const transformsTexts = node.getAttribute("transform").split(")");
|
|
1009
865
|
for (let tIndex = transformsTexts.length - 1; tIndex >= 0; tIndex--) {
|
|
1010
866
|
const transformText = transformsTexts[tIndex].trim();
|
|
1011
|
-
if (transformText ===
|
|
1012
|
-
|
|
867
|
+
if (transformText === "")
|
|
868
|
+
continue;
|
|
869
|
+
const openParPos = transformText.indexOf("(");
|
|
1013
870
|
const closeParPos = transformText.length;
|
|
1014
|
-
|
|
1015
871
|
if (openParPos > 0 && openParPos < closeParPos) {
|
|
1016
872
|
const transformType = transformText.substr(0, openParPos);
|
|
1017
873
|
const array = parseFloats(transformText.substr(openParPos + 1, closeParPos - openParPos - 1));
|
|
1018
|
-
|
|
1019
|
-
|
|
874
|
+
currentTransform2.identity();
|
|
1020
875
|
switch (transformType) {
|
|
1021
|
-
case
|
|
876
|
+
case "translate":
|
|
1022
877
|
if (array.length >= 1) {
|
|
1023
878
|
const tx = array[0];
|
|
1024
879
|
let ty = tx;
|
|
1025
|
-
|
|
1026
880
|
if (array.length >= 2) {
|
|
1027
881
|
ty = array[1];
|
|
1028
882
|
}
|
|
1029
|
-
|
|
1030
|
-
currentTransform.translate(tx, ty);
|
|
883
|
+
currentTransform2.translate(tx, ty);
|
|
1031
884
|
}
|
|
1032
|
-
|
|
1033
885
|
break;
|
|
1034
|
-
|
|
1035
|
-
case 'rotate':
|
|
886
|
+
case "rotate":
|
|
1036
887
|
if (array.length >= 1) {
|
|
1037
888
|
let angle = 0;
|
|
1038
889
|
let cx = 0;
|
|
1039
|
-
let cy = 0;
|
|
1040
|
-
|
|
890
|
+
let cy = 0;
|
|
1041
891
|
angle = -array[0] * Math.PI / 180;
|
|
1042
|
-
|
|
1043
892
|
if (array.length >= 3) {
|
|
1044
|
-
// Center x, y
|
|
1045
893
|
cx = array[1];
|
|
1046
894
|
cy = array[2];
|
|
1047
|
-
}
|
|
1048
|
-
|
|
1049
|
-
|
|
895
|
+
}
|
|
1050
896
|
tempTransform1.identity().translate(-cx, -cy);
|
|
1051
897
|
tempTransform2.identity().rotate(angle);
|
|
1052
898
|
tempTransform3.multiplyMatrices(tempTransform2, tempTransform1);
|
|
1053
899
|
tempTransform1.identity().translate(cx, cy);
|
|
1054
|
-
|
|
900
|
+
currentTransform2.multiplyMatrices(tempTransform1, tempTransform3);
|
|
1055
901
|
}
|
|
1056
|
-
|
|
1057
902
|
break;
|
|
1058
|
-
|
|
1059
|
-
case 'scale':
|
|
903
|
+
case "scale":
|
|
1060
904
|
if (array.length >= 1) {
|
|
1061
905
|
const scaleX = array[0];
|
|
1062
906
|
let scaleY = scaleX;
|
|
1063
|
-
|
|
1064
907
|
if (array.length >= 2) {
|
|
1065
908
|
scaleY = array[1];
|
|
1066
909
|
}
|
|
1067
|
-
|
|
1068
|
-
currentTransform.scale(scaleX, scaleY);
|
|
910
|
+
currentTransform2.scale(scaleX, scaleY);
|
|
1069
911
|
}
|
|
1070
|
-
|
|
1071
912
|
break;
|
|
1072
|
-
|
|
1073
|
-
case 'skewX':
|
|
913
|
+
case "skewX":
|
|
1074
914
|
if (array.length === 1) {
|
|
1075
|
-
|
|
915
|
+
currentTransform2.set(1, Math.tan(array[0] * Math.PI / 180), 0, 0, 1, 0, 0, 0, 1);
|
|
1076
916
|
}
|
|
1077
|
-
|
|
1078
917
|
break;
|
|
1079
|
-
|
|
1080
|
-
case 'skewY':
|
|
918
|
+
case "skewY":
|
|
1081
919
|
if (array.length === 1) {
|
|
1082
|
-
|
|
920
|
+
currentTransform2.set(1, 0, 0, Math.tan(array[0] * Math.PI / 180), 1, 0, 0, 0, 1);
|
|
1083
921
|
}
|
|
1084
|
-
|
|
1085
922
|
break;
|
|
1086
|
-
|
|
1087
|
-
case 'matrix':
|
|
923
|
+
case "matrix":
|
|
1088
924
|
if (array.length === 6) {
|
|
1089
|
-
|
|
925
|
+
currentTransform2.set(array[0], array[2], array[4], array[1], array[3], array[5], 0, 0, 1);
|
|
1090
926
|
}
|
|
1091
|
-
|
|
1092
927
|
break;
|
|
1093
928
|
}
|
|
1094
929
|
}
|
|
1095
|
-
|
|
1096
|
-
transform.premultiply(currentTransform);
|
|
930
|
+
transform.premultiply(currentTransform2);
|
|
1097
931
|
}
|
|
1098
932
|
}
|
|
1099
|
-
|
|
1100
933
|
return transform;
|
|
1101
934
|
}
|
|
1102
|
-
|
|
1103
935
|
function transformPath(path, m) {
|
|
1104
936
|
function transfVec2(v2) {
|
|
1105
937
|
tempV3.set(v2.x, v2.y, 1).applyMatrix3(m);
|
|
1106
938
|
v2.set(tempV3.x, tempV3.y);
|
|
1107
939
|
}
|
|
1108
|
-
|
|
1109
940
|
const isRotated = isTransformRotated(m);
|
|
1110
941
|
const subPaths = path.subPaths;
|
|
1111
|
-
|
|
1112
942
|
for (let i = 0, n = subPaths.length; i < n; i++) {
|
|
1113
943
|
const subPath = subPaths[i];
|
|
1114
944
|
const curves = subPath.curves;
|
|
1115
|
-
|
|
1116
945
|
for (let j = 0; j < curves.length; j++) {
|
|
1117
946
|
const curve = curves[j];
|
|
1118
|
-
|
|
1119
947
|
if (curve.isLineCurve) {
|
|
1120
948
|
transfVec2(curve.v1);
|
|
1121
949
|
transfVec2(curve.v2);
|
|
@@ -1130,9 +958,8 @@ class SVGLoader extends Loader {
|
|
|
1130
958
|
transfVec2(curve.v2);
|
|
1131
959
|
} else if (curve.isEllipseCurve) {
|
|
1132
960
|
if (isRotated) {
|
|
1133
|
-
console.warn(
|
|
961
|
+
console.warn("SVGLoader: Elliptic arc or ellipse rotation or skewing is not implemented.");
|
|
1134
962
|
}
|
|
1135
|
-
|
|
1136
963
|
tempV2.set(curve.aX, curve.aY);
|
|
1137
964
|
transfVec2(tempV2);
|
|
1138
965
|
curve.aX = tempV2.x;
|
|
@@ -1143,54 +970,41 @@ class SVGLoader extends Loader {
|
|
|
1143
970
|
}
|
|
1144
971
|
}
|
|
1145
972
|
}
|
|
1146
|
-
|
|
1147
973
|
function isTransformRotated(m) {
|
|
1148
974
|
return m.elements[1] !== 0 || m.elements[3] !== 0;
|
|
1149
975
|
}
|
|
1150
|
-
|
|
1151
976
|
function getTransformScaleX(m) {
|
|
1152
977
|
const te = m.elements;
|
|
1153
978
|
return Math.sqrt(te[0] * te[0] + te[1] * te[1]);
|
|
1154
979
|
}
|
|
1155
|
-
|
|
1156
980
|
function getTransformScaleY(m) {
|
|
1157
981
|
const te = m.elements;
|
|
1158
982
|
return Math.sqrt(te[3] * te[3] + te[4] * te[4]);
|
|
1159
|
-
}
|
|
1160
|
-
|
|
1161
|
-
|
|
983
|
+
}
|
|
1162
984
|
const paths = [];
|
|
1163
985
|
const stylesheets = {};
|
|
1164
986
|
const transformStack = [];
|
|
1165
|
-
const tempTransform0 = new Matrix3();
|
|
1166
|
-
const tempTransform1 = new Matrix3();
|
|
1167
|
-
const tempTransform2 = new Matrix3();
|
|
1168
|
-
const tempTransform3 = new Matrix3();
|
|
1169
|
-
const tempV2 = new Vector2();
|
|
1170
|
-
const tempV3 = new Vector3();
|
|
1171
|
-
const currentTransform = new Matrix3();
|
|
1172
|
-
const xml = new DOMParser().parseFromString(text,
|
|
1173
|
-
|
|
987
|
+
const tempTransform0 = new THREE.Matrix3();
|
|
988
|
+
const tempTransform1 = new THREE.Matrix3();
|
|
989
|
+
const tempTransform2 = new THREE.Matrix3();
|
|
990
|
+
const tempTransform3 = new THREE.Matrix3();
|
|
991
|
+
const tempV2 = new THREE.Vector2();
|
|
992
|
+
const tempV3 = new THREE.Vector3();
|
|
993
|
+
const currentTransform = new THREE.Matrix3();
|
|
994
|
+
const xml = new DOMParser().parseFromString(text, "image/svg+xml");
|
|
1174
995
|
parseNode(xml.documentElement, {
|
|
1175
|
-
fill:
|
|
996
|
+
fill: "#000",
|
|
1176
997
|
fillOpacity: 1,
|
|
1177
998
|
strokeOpacity: 1,
|
|
1178
999
|
strokeWidth: 1,
|
|
1179
|
-
strokeLineJoin:
|
|
1180
|
-
strokeLineCap:
|
|
1000
|
+
strokeLineJoin: "miter",
|
|
1001
|
+
strokeLineCap: "butt",
|
|
1181
1002
|
strokeMiterLimit: 4
|
|
1182
1003
|
});
|
|
1183
|
-
const data = {
|
|
1184
|
-
paths: paths,
|
|
1185
|
-
xml: xml.documentElement
|
|
1186
|
-
}; // console.log( paths );
|
|
1187
|
-
|
|
1004
|
+
const data = { paths, xml: xml.documentElement };
|
|
1188
1005
|
return data;
|
|
1189
1006
|
}
|
|
1190
|
-
|
|
1191
1007
|
static createShapes(shapePath) {
|
|
1192
|
-
// Param shapePath: a shapepath as returned by the parse function of this class
|
|
1193
|
-
// Returns Shape object
|
|
1194
1008
|
const BIGNUMBER = 999999999;
|
|
1195
1009
|
const IntersectionLocationType = {
|
|
1196
1010
|
ORIGIN: 0,
|
|
@@ -1205,7 +1019,6 @@ class SVGLoader extends Loader {
|
|
|
1205
1019
|
loc: IntersectionLocationType.ORIGIN,
|
|
1206
1020
|
t: 0
|
|
1207
1021
|
};
|
|
1208
|
-
|
|
1209
1022
|
function findEdgeIntersection(a0, a1, b0, b1) {
|
|
1210
1023
|
const x1 = a0.x;
|
|
1211
1024
|
const x2 = a1.x;
|
|
@@ -1220,150 +1033,104 @@ class SVGLoader extends Loader {
|
|
|
1220
1033
|
const denom = (y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1);
|
|
1221
1034
|
const t1 = nom1 / denom;
|
|
1222
1035
|
const t2 = nom2 / denom;
|
|
1223
|
-
|
|
1224
1036
|
if (denom === 0 && nom1 !== 0 || t1 <= 0 || t1 >= 1 || t2 < 0 || t2 > 1) {
|
|
1225
|
-
//1. lines are parallel or edges don't intersect
|
|
1226
1037
|
return null;
|
|
1227
1038
|
} else if (nom1 === 0 && denom === 0) {
|
|
1228
|
-
//2. lines are colinear
|
|
1229
|
-
//check if endpoints of edge2 (b0-b1) lies on edge1 (a0-a1)
|
|
1230
1039
|
for (let i = 0; i < 2; i++) {
|
|
1231
|
-
classifyPoint(i === 0 ? b0 : b1, a0, a1);
|
|
1232
|
-
|
|
1040
|
+
classifyPoint(i === 0 ? b0 : b1, a0, a1);
|
|
1233
1041
|
if (classifyResult.loc == IntersectionLocationType.ORIGIN) {
|
|
1234
1042
|
const point = i === 0 ? b0 : b1;
|
|
1235
|
-
return {
|
|
1236
|
-
x: point.x,
|
|
1237
|
-
y: point.y,
|
|
1238
|
-
t: classifyResult.t
|
|
1239
|
-
};
|
|
1043
|
+
return { x: point.x, y: point.y, t: classifyResult.t };
|
|
1240
1044
|
} else if (classifyResult.loc == IntersectionLocationType.BETWEEN) {
|
|
1241
1045
|
const x = +(x1 + classifyResult.t * (x2 - x1)).toPrecision(10);
|
|
1242
1046
|
const y = +(y1 + classifyResult.t * (y2 - y1)).toPrecision(10);
|
|
1243
|
-
return {
|
|
1244
|
-
x: x,
|
|
1245
|
-
y: y,
|
|
1246
|
-
t: classifyResult.t
|
|
1247
|
-
};
|
|
1047
|
+
return { x, y, t: classifyResult.t };
|
|
1248
1048
|
}
|
|
1249
1049
|
}
|
|
1250
|
-
|
|
1251
1050
|
return null;
|
|
1252
1051
|
} else {
|
|
1253
|
-
//3. edges intersect
|
|
1254
1052
|
for (let i = 0; i < 2; i++) {
|
|
1255
1053
|
classifyPoint(i === 0 ? b0 : b1, a0, a1);
|
|
1256
|
-
|
|
1257
1054
|
if (classifyResult.loc == IntersectionLocationType.ORIGIN) {
|
|
1258
1055
|
const point = i === 0 ? b0 : b1;
|
|
1259
|
-
return {
|
|
1260
|
-
x: point.x,
|
|
1261
|
-
y: point.y,
|
|
1262
|
-
t: classifyResult.t
|
|
1263
|
-
};
|
|
1056
|
+
return { x: point.x, y: point.y, t: classifyResult.t };
|
|
1264
1057
|
}
|
|
1265
1058
|
}
|
|
1266
|
-
|
|
1267
1059
|
const x = +(x1 + t1 * (x2 - x1)).toPrecision(10);
|
|
1268
1060
|
const y = +(y1 + t1 * (y2 - y1)).toPrecision(10);
|
|
1269
|
-
return {
|
|
1270
|
-
x: x,
|
|
1271
|
-
y: y,
|
|
1272
|
-
t: t1
|
|
1273
|
-
};
|
|
1061
|
+
return { x, y, t: t1 };
|
|
1274
1062
|
}
|
|
1275
1063
|
}
|
|
1276
|
-
|
|
1277
1064
|
function classifyPoint(p, edgeStart, edgeEnd) {
|
|
1278
1065
|
const ax = edgeEnd.x - edgeStart.x;
|
|
1279
1066
|
const ay = edgeEnd.y - edgeStart.y;
|
|
1280
1067
|
const bx = p.x - edgeStart.x;
|
|
1281
1068
|
const by = p.y - edgeStart.y;
|
|
1282
1069
|
const sa = ax * by - bx * ay;
|
|
1283
|
-
|
|
1284
1070
|
if (p.x === edgeStart.x && p.y === edgeStart.y) {
|
|
1285
1071
|
classifyResult.loc = IntersectionLocationType.ORIGIN;
|
|
1286
1072
|
classifyResult.t = 0;
|
|
1287
1073
|
return;
|
|
1288
1074
|
}
|
|
1289
|
-
|
|
1290
1075
|
if (p.x === edgeEnd.x && p.y === edgeEnd.y) {
|
|
1291
1076
|
classifyResult.loc = IntersectionLocationType.DESTINATION;
|
|
1292
1077
|
classifyResult.t = 1;
|
|
1293
1078
|
return;
|
|
1294
1079
|
}
|
|
1295
|
-
|
|
1296
1080
|
if (sa < -Number.EPSILON) {
|
|
1297
1081
|
classifyResult.loc = IntersectionLocationType.LEFT;
|
|
1298
1082
|
return;
|
|
1299
1083
|
}
|
|
1300
|
-
|
|
1301
1084
|
if (sa > Number.EPSILON) {
|
|
1302
1085
|
classifyResult.loc = IntersectionLocationType.RIGHT;
|
|
1303
1086
|
return;
|
|
1304
1087
|
}
|
|
1305
|
-
|
|
1306
1088
|
if (ax * bx < 0 || ay * by < 0) {
|
|
1307
1089
|
classifyResult.loc = IntersectionLocationType.BEHIND;
|
|
1308
1090
|
return;
|
|
1309
1091
|
}
|
|
1310
|
-
|
|
1311
1092
|
if (Math.sqrt(ax * ax + ay * ay) < Math.sqrt(bx * bx + by * by)) {
|
|
1312
1093
|
classifyResult.loc = IntersectionLocationType.BEYOND;
|
|
1313
1094
|
return;
|
|
1314
1095
|
}
|
|
1315
|
-
|
|
1316
1096
|
let t;
|
|
1317
|
-
|
|
1318
1097
|
if (ax !== 0) {
|
|
1319
1098
|
t = bx / ax;
|
|
1320
1099
|
} else {
|
|
1321
1100
|
t = by / ay;
|
|
1322
1101
|
}
|
|
1323
|
-
|
|
1324
1102
|
classifyResult.loc = IntersectionLocationType.BETWEEN;
|
|
1325
1103
|
classifyResult.t = t;
|
|
1326
1104
|
}
|
|
1327
|
-
|
|
1328
1105
|
function getIntersections(path1, path2) {
|
|
1329
1106
|
const intersectionsRaw = [];
|
|
1330
1107
|
const intersections = [];
|
|
1331
|
-
|
|
1332
1108
|
for (let index = 1; index < path1.length; index++) {
|
|
1333
1109
|
const path1EdgeStart = path1[index - 1];
|
|
1334
1110
|
const path1EdgeEnd = path1[index];
|
|
1335
|
-
|
|
1336
1111
|
for (let index2 = 1; index2 < path2.length; index2++) {
|
|
1337
1112
|
const path2EdgeStart = path2[index2 - 1];
|
|
1338
1113
|
const path2EdgeEnd = path2[index2];
|
|
1339
1114
|
const intersection = findEdgeIntersection(path1EdgeStart, path1EdgeEnd, path2EdgeStart, path2EdgeEnd);
|
|
1340
|
-
|
|
1341
|
-
|
|
1115
|
+
if (intersection !== null && intersectionsRaw.find(
|
|
1116
|
+
(i) => i.t <= intersection.t + Number.EPSILON && i.t >= intersection.t - Number.EPSILON
|
|
1117
|
+
) === void 0) {
|
|
1342
1118
|
intersectionsRaw.push(intersection);
|
|
1343
|
-
intersections.push(new Vector2(intersection.x, intersection.y));
|
|
1119
|
+
intersections.push(new THREE.Vector2(intersection.x, intersection.y));
|
|
1344
1120
|
}
|
|
1345
1121
|
}
|
|
1346
1122
|
}
|
|
1347
|
-
|
|
1348
1123
|
return intersections;
|
|
1349
1124
|
}
|
|
1350
|
-
|
|
1351
1125
|
function getScanlineIntersections(scanline, boundingBox, paths) {
|
|
1352
|
-
const center = new Vector2();
|
|
1126
|
+
const center = new THREE.Vector2();
|
|
1353
1127
|
boundingBox.getCenter(center);
|
|
1354
1128
|
const allIntersections = [];
|
|
1355
|
-
paths.forEach(path => {
|
|
1356
|
-
// check if the center of the bounding box is in the bounding box of the paths.
|
|
1357
|
-
// this is a pruning method to limit the search of intersections in paths that can't envelop of the current path.
|
|
1358
|
-
// if a path envelops another path. The center of that oter path, has to be inside the bounding box of the enveloping path.
|
|
1129
|
+
paths.forEach((path) => {
|
|
1359
1130
|
if (path.boundingBox.containsPoint(center)) {
|
|
1360
1131
|
const intersections = getIntersections(scanline, path.points);
|
|
1361
|
-
intersections.forEach(p => {
|
|
1362
|
-
allIntersections.push({
|
|
1363
|
-
identifier: path.identifier,
|
|
1364
|
-
isCW: path.isCW,
|
|
1365
|
-
point: p
|
|
1366
|
-
});
|
|
1132
|
+
intersections.forEach((p) => {
|
|
1133
|
+
allIntersections.push({ identifier: path.identifier, isCW: path.isCW, point: p });
|
|
1367
1134
|
});
|
|
1368
1135
|
}
|
|
1369
1136
|
});
|
|
@@ -1372,148 +1139,114 @@ class SVGLoader extends Loader {
|
|
|
1372
1139
|
});
|
|
1373
1140
|
return allIntersections;
|
|
1374
1141
|
}
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
_fillRule = 'nonzero';
|
|
1142
|
+
function isHoleTo(simplePath, allPaths, scanlineMinX2, scanlineMaxX2, _fillRule) {
|
|
1143
|
+
if (_fillRule === null || _fillRule === void 0 || _fillRule === "") {
|
|
1144
|
+
_fillRule = "nonzero";
|
|
1379
1145
|
}
|
|
1380
|
-
|
|
1381
|
-
const centerBoundingBox = new Vector2();
|
|
1146
|
+
const centerBoundingBox = new THREE.Vector2();
|
|
1382
1147
|
simplePath.boundingBox.getCenter(centerBoundingBox);
|
|
1383
|
-
const scanline = [new Vector2(
|
|
1148
|
+
const scanline = [new THREE.Vector2(scanlineMinX2, centerBoundingBox.y), new THREE.Vector2(scanlineMaxX2, centerBoundingBox.y)];
|
|
1384
1149
|
const scanlineIntersections = getScanlineIntersections(scanline, simplePath.boundingBox, allPaths);
|
|
1385
1150
|
scanlineIntersections.sort((i1, i2) => {
|
|
1386
1151
|
return i1.point.x - i2.point.x;
|
|
1387
1152
|
});
|
|
1388
1153
|
const baseIntersections = [];
|
|
1389
1154
|
const otherIntersections = [];
|
|
1390
|
-
scanlineIntersections.forEach(
|
|
1391
|
-
if (
|
|
1392
|
-
baseIntersections.push(
|
|
1155
|
+
scanlineIntersections.forEach((i2) => {
|
|
1156
|
+
if (i2.identifier === simplePath.identifier) {
|
|
1157
|
+
baseIntersections.push(i2);
|
|
1393
1158
|
} else {
|
|
1394
|
-
otherIntersections.push(
|
|
1159
|
+
otherIntersections.push(i2);
|
|
1395
1160
|
}
|
|
1396
1161
|
});
|
|
1397
|
-
const firstXOfPath = baseIntersections[0].point.x;
|
|
1398
|
-
|
|
1162
|
+
const firstXOfPath = baseIntersections[0].point.x;
|
|
1399
1163
|
const stack = [];
|
|
1400
1164
|
let i = 0;
|
|
1401
|
-
|
|
1402
1165
|
while (i < otherIntersections.length && otherIntersections[i].point.x < firstXOfPath) {
|
|
1403
1166
|
if (stack.length > 0 && stack[stack.length - 1] === otherIntersections[i].identifier) {
|
|
1404
1167
|
stack.pop();
|
|
1405
1168
|
} else {
|
|
1406
1169
|
stack.push(otherIntersections[i].identifier);
|
|
1407
1170
|
}
|
|
1408
|
-
|
|
1409
1171
|
i++;
|
|
1410
1172
|
}
|
|
1411
|
-
|
|
1412
1173
|
stack.push(simplePath.identifier);
|
|
1413
|
-
|
|
1414
|
-
if (_fillRule === 'evenodd') {
|
|
1174
|
+
if (_fillRule === "evenodd") {
|
|
1415
1175
|
const isHole = stack.length % 2 === 0 ? true : false;
|
|
1416
1176
|
const isHoleFor = stack[stack.length - 2];
|
|
1417
|
-
return {
|
|
1418
|
-
|
|
1419
|
-
isHole: isHole,
|
|
1420
|
-
for: isHoleFor
|
|
1421
|
-
};
|
|
1422
|
-
} else if (_fillRule === 'nonzero') {
|
|
1423
|
-
// check if path is a hole by counting the amount of paths with alternating rotations it has to cross.
|
|
1177
|
+
return { identifier: simplePath.identifier, isHole, for: isHoleFor };
|
|
1178
|
+
} else if (_fillRule === "nonzero") {
|
|
1424
1179
|
let isHole = true;
|
|
1425
1180
|
let isHoleFor = null;
|
|
1426
1181
|
let lastCWValue = null;
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
const identifier = stack[i];
|
|
1430
|
-
|
|
1182
|
+
for (let i2 = 0; i2 < stack.length; i2++) {
|
|
1183
|
+
const identifier2 = stack[i2];
|
|
1431
1184
|
if (isHole) {
|
|
1432
|
-
lastCWValue = allPaths[
|
|
1185
|
+
lastCWValue = allPaths[identifier2].isCW;
|
|
1433
1186
|
isHole = false;
|
|
1434
|
-
isHoleFor =
|
|
1435
|
-
} else if (lastCWValue !== allPaths[
|
|
1436
|
-
lastCWValue = allPaths[
|
|
1187
|
+
isHoleFor = identifier2;
|
|
1188
|
+
} else if (lastCWValue !== allPaths[identifier2].isCW) {
|
|
1189
|
+
lastCWValue = allPaths[identifier2].isCW;
|
|
1437
1190
|
isHole = true;
|
|
1438
1191
|
}
|
|
1439
1192
|
}
|
|
1440
|
-
|
|
1441
|
-
return {
|
|
1442
|
-
identifier: simplePath.identifier,
|
|
1443
|
-
isHole: isHole,
|
|
1444
|
-
for: isHoleFor
|
|
1445
|
-
};
|
|
1193
|
+
return { identifier: simplePath.identifier, isHole, for: isHoleFor };
|
|
1446
1194
|
} else {
|
|
1447
1195
|
console.warn('fill-rule: "' + _fillRule + '" is currently not implemented.');
|
|
1448
1196
|
}
|
|
1449
|
-
}
|
|
1450
|
-
// TODO
|
|
1451
|
-
// check intersecting paths
|
|
1452
|
-
// TODO
|
|
1453
|
-
// prepare paths for hole detection
|
|
1454
|
-
|
|
1455
|
-
|
|
1197
|
+
}
|
|
1456
1198
|
let identifier = 0;
|
|
1457
1199
|
let scanlineMinX = BIGNUMBER;
|
|
1458
1200
|
let scanlineMaxX = -BIGNUMBER;
|
|
1459
|
-
let simplePaths = shapePath.subPaths.map(p => {
|
|
1201
|
+
let simplePaths = shapePath.subPaths.map((p) => {
|
|
1460
1202
|
const points = p.getPoints();
|
|
1461
1203
|
let maxY = -BIGNUMBER;
|
|
1462
1204
|
let minY = BIGNUMBER;
|
|
1463
1205
|
let maxX = -BIGNUMBER;
|
|
1464
|
-
let minX = BIGNUMBER;
|
|
1465
|
-
|
|
1206
|
+
let minX = BIGNUMBER;
|
|
1466
1207
|
for (let i = 0; i < points.length; i++) {
|
|
1467
|
-
const
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
maxY = p.y;
|
|
1208
|
+
const p2 = points[i];
|
|
1209
|
+
if (p2.y > maxY) {
|
|
1210
|
+
maxY = p2.y;
|
|
1471
1211
|
}
|
|
1472
|
-
|
|
1473
|
-
|
|
1474
|
-
minY = p.y;
|
|
1212
|
+
if (p2.y < minY) {
|
|
1213
|
+
minY = p2.y;
|
|
1475
1214
|
}
|
|
1476
|
-
|
|
1477
|
-
|
|
1478
|
-
maxX = p.x;
|
|
1215
|
+
if (p2.x > maxX) {
|
|
1216
|
+
maxX = p2.x;
|
|
1479
1217
|
}
|
|
1480
|
-
|
|
1481
|
-
|
|
1482
|
-
minX = p.x;
|
|
1218
|
+
if (p2.x < minX) {
|
|
1219
|
+
minX = p2.x;
|
|
1483
1220
|
}
|
|
1484
|
-
}
|
|
1485
|
-
|
|
1486
|
-
|
|
1221
|
+
}
|
|
1487
1222
|
if (scanlineMaxX <= maxX) {
|
|
1488
1223
|
scanlineMaxX = maxX + 1;
|
|
1489
1224
|
}
|
|
1490
|
-
|
|
1491
1225
|
if (scanlineMinX >= minX) {
|
|
1492
1226
|
scanlineMinX = minX - 1;
|
|
1493
1227
|
}
|
|
1494
|
-
|
|
1495
1228
|
return {
|
|
1496
1229
|
curves: p.curves,
|
|
1497
|
-
points
|
|
1498
|
-
isCW: ShapeUtils.isClockWise(points),
|
|
1230
|
+
points,
|
|
1231
|
+
isCW: THREE.ShapeUtils.isClockWise(points),
|
|
1499
1232
|
identifier: identifier++,
|
|
1500
|
-
boundingBox: new Box2(new Vector2(minX, minY), new Vector2(maxX, maxY))
|
|
1233
|
+
boundingBox: new THREE.Box2(new THREE.Vector2(minX, minY), new THREE.Vector2(maxX, maxY))
|
|
1501
1234
|
};
|
|
1502
1235
|
});
|
|
1503
|
-
simplePaths = simplePaths.filter(sp => sp.points.length > 1);
|
|
1504
|
-
|
|
1505
|
-
|
|
1236
|
+
simplePaths = simplePaths.filter((sp) => sp.points.length > 1);
|
|
1237
|
+
const isAHole = simplePaths.map(
|
|
1238
|
+
(p) => isHoleTo(p, simplePaths, scanlineMinX, scanlineMaxX, shapePath.userData.style.fillRule)
|
|
1239
|
+
);
|
|
1506
1240
|
const shapesToReturn = [];
|
|
1507
|
-
simplePaths.forEach(p => {
|
|
1241
|
+
simplePaths.forEach((p) => {
|
|
1508
1242
|
const amIAHole = isAHole[p.identifier];
|
|
1509
|
-
|
|
1510
1243
|
if (!amIAHole.isHole) {
|
|
1511
|
-
const shape = new Shape();
|
|
1244
|
+
const shape = new THREE.Shape();
|
|
1512
1245
|
shape.curves = p.curves;
|
|
1513
|
-
const holes = isAHole.filter(h => h.isHole && h.for === p.identifier);
|
|
1514
|
-
holes.forEach(h => {
|
|
1246
|
+
const holes = isAHole.filter((h) => h.isHole && h.for === p.identifier);
|
|
1247
|
+
holes.forEach((h) => {
|
|
1515
1248
|
const hole = simplePaths[h.identifier];
|
|
1516
|
-
const path = new Path();
|
|
1249
|
+
const path = new THREE.Path();
|
|
1517
1250
|
path.curves = hole.curves;
|
|
1518
1251
|
shape.holes.push(path);
|
|
1519
1252
|
});
|
|
@@ -1522,19 +1255,12 @@ class SVGLoader extends Loader {
|
|
|
1522
1255
|
});
|
|
1523
1256
|
return shapesToReturn;
|
|
1524
1257
|
}
|
|
1525
|
-
|
|
1526
1258
|
static getStrokeStyle(width, color, lineJoin, lineCap, miterLimit) {
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
// Returns style object
|
|
1533
|
-
width = width !== undefined ? width : 1;
|
|
1534
|
-
color = color !== undefined ? color : '#000';
|
|
1535
|
-
lineJoin = lineJoin !== undefined ? lineJoin : 'miter';
|
|
1536
|
-
lineCap = lineCap !== undefined ? lineCap : 'butt';
|
|
1537
|
-
miterLimit = miterLimit !== undefined ? miterLimit : 4;
|
|
1259
|
+
width = width !== void 0 ? width : 1;
|
|
1260
|
+
color = color !== void 0 ? color : "#000";
|
|
1261
|
+
lineJoin = lineJoin !== void 0 ? lineJoin : "miter";
|
|
1262
|
+
lineCap = lineCap !== void 0 ? lineCap : "butt";
|
|
1263
|
+
miterLimit = miterLimit !== void 0 ? miterLimit : 4;
|
|
1538
1264
|
return {
|
|
1539
1265
|
strokeColor: color,
|
|
1540
1266
|
strokeWidth: width,
|
|
@@ -1543,98 +1269,74 @@ class SVGLoader extends Loader {
|
|
|
1543
1269
|
strokeMiterLimit: miterLimit
|
|
1544
1270
|
};
|
|
1545
1271
|
}
|
|
1546
|
-
|
|
1547
1272
|
static pointsToStroke(points, style, arcDivisions, minDistance) {
|
|
1548
|
-
// Generates a stroke with some witdh around the given path.
|
|
1549
|
-
// The path can be open or closed (last point equals to first point)
|
|
1550
|
-
// Param points: Array of Vector2D (the path). Minimum 2 points.
|
|
1551
|
-
// Param style: Object with SVG properties as returned by SVGLoader.getStrokeStyle(), or SVGLoader.parse() in the path.userData.style object
|
|
1552
|
-
// Params arcDivisions: Arc divisions for round joins and endcaps. (Optional)
|
|
1553
|
-
// Param minDistance: Points closer to this distance will be merged. (Optional)
|
|
1554
|
-
// Returns BufferGeometry with stroke triangles (In plane z = 0). UV coordinates are generated ('u' along path. 'v' across it, from left to right)
|
|
1555
1273
|
const vertices = [];
|
|
1556
1274
|
const normals = [];
|
|
1557
1275
|
const uvs = [];
|
|
1558
|
-
|
|
1559
1276
|
if (SVGLoader.pointsToStrokeWithBuffers(points, style, arcDivisions, minDistance, vertices, normals, uvs) === 0) {
|
|
1560
1277
|
return null;
|
|
1561
1278
|
}
|
|
1562
|
-
|
|
1563
|
-
|
|
1564
|
-
geometry.setAttribute(
|
|
1565
|
-
geometry.setAttribute(
|
|
1566
|
-
geometry.setAttribute('uv', new Float32BufferAttribute(uvs, 2));
|
|
1279
|
+
const geometry = new THREE.BufferGeometry();
|
|
1280
|
+
geometry.setAttribute("position", new THREE.Float32BufferAttribute(vertices, 3));
|
|
1281
|
+
geometry.setAttribute("normal", new THREE.Float32BufferAttribute(normals, 3));
|
|
1282
|
+
geometry.setAttribute("uv", new THREE.Float32BufferAttribute(uvs, 2));
|
|
1567
1283
|
return geometry;
|
|
1568
1284
|
}
|
|
1569
|
-
|
|
1570
1285
|
static pointsToStrokeWithBuffers(points, style, arcDivisions, minDistance, vertices, normals, uvs, vertexOffset) {
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
const
|
|
1578
|
-
const
|
|
1579
|
-
const
|
|
1580
|
-
const
|
|
1581
|
-
const
|
|
1582
|
-
const
|
|
1583
|
-
const
|
|
1584
|
-
const
|
|
1585
|
-
const
|
|
1586
|
-
const
|
|
1587
|
-
const
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
const nextPointR = new Vector2();
|
|
1592
|
-
const innerPoint = new Vector2();
|
|
1593
|
-
const outerPoint = new Vector2();
|
|
1594
|
-
arcDivisions = arcDivisions !== undefined ? arcDivisions : 12;
|
|
1595
|
-
minDistance = minDistance !== undefined ? minDistance : 0.001;
|
|
1596
|
-
vertexOffset = vertexOffset !== undefined ? vertexOffset : 0; // First ensure there are no duplicated points
|
|
1597
|
-
|
|
1286
|
+
const tempV2_1 = new THREE.Vector2();
|
|
1287
|
+
const tempV2_2 = new THREE.Vector2();
|
|
1288
|
+
const tempV2_3 = new THREE.Vector2();
|
|
1289
|
+
const tempV2_4 = new THREE.Vector2();
|
|
1290
|
+
const tempV2_5 = new THREE.Vector2();
|
|
1291
|
+
const tempV2_6 = new THREE.Vector2();
|
|
1292
|
+
const tempV2_7 = new THREE.Vector2();
|
|
1293
|
+
const lastPointL = new THREE.Vector2();
|
|
1294
|
+
const lastPointR = new THREE.Vector2();
|
|
1295
|
+
const point0L = new THREE.Vector2();
|
|
1296
|
+
const point0R = new THREE.Vector2();
|
|
1297
|
+
const currentPointL = new THREE.Vector2();
|
|
1298
|
+
const currentPointR = new THREE.Vector2();
|
|
1299
|
+
const nextPointL = new THREE.Vector2();
|
|
1300
|
+
const nextPointR = new THREE.Vector2();
|
|
1301
|
+
const innerPoint = new THREE.Vector2();
|
|
1302
|
+
const outerPoint = new THREE.Vector2();
|
|
1303
|
+
arcDivisions = arcDivisions !== void 0 ? arcDivisions : 12;
|
|
1304
|
+
minDistance = minDistance !== void 0 ? minDistance : 1e-3;
|
|
1305
|
+
vertexOffset = vertexOffset !== void 0 ? vertexOffset : 0;
|
|
1598
1306
|
points = removeDuplicatedPoints(points);
|
|
1599
1307
|
const numPoints = points.length;
|
|
1600
|
-
if (numPoints < 2)
|
|
1308
|
+
if (numPoints < 2)
|
|
1309
|
+
return 0;
|
|
1601
1310
|
const isClosed = points[0].equals(points[numPoints - 1]);
|
|
1602
1311
|
let currentPoint;
|
|
1603
1312
|
let previousPoint = points[0];
|
|
1604
1313
|
let nextPoint;
|
|
1605
1314
|
const strokeWidth2 = style.strokeWidth / 2;
|
|
1606
1315
|
const deltaU = 1 / (numPoints - 1);
|
|
1607
|
-
let u0 = 0,
|
|
1608
|
-
u1;
|
|
1316
|
+
let u0 = 0, u1;
|
|
1609
1317
|
let innerSideModified;
|
|
1610
1318
|
let joinIsOnLeftSide;
|
|
1611
1319
|
let isMiter;
|
|
1612
1320
|
let initialJoinIsOnLeftSide = false;
|
|
1613
1321
|
let numVertices = 0;
|
|
1614
1322
|
let currentCoordinate = vertexOffset * 3;
|
|
1615
|
-
let currentCoordinateUV = vertexOffset * 2;
|
|
1616
|
-
|
|
1323
|
+
let currentCoordinateUV = vertexOffset * 2;
|
|
1617
1324
|
getNormal(points[0], points[1], tempV2_1).multiplyScalar(strokeWidth2);
|
|
1618
1325
|
lastPointL.copy(points[0]).sub(tempV2_1);
|
|
1619
1326
|
lastPointR.copy(points[0]).add(tempV2_1);
|
|
1620
1327
|
point0L.copy(lastPointL);
|
|
1621
1328
|
point0R.copy(lastPointR);
|
|
1622
|
-
|
|
1623
1329
|
for (let iPoint = 1; iPoint < numPoints; iPoint++) {
|
|
1624
|
-
currentPoint = points[iPoint];
|
|
1625
|
-
|
|
1330
|
+
currentPoint = points[iPoint];
|
|
1626
1331
|
if (iPoint === numPoints - 1) {
|
|
1627
1332
|
if (isClosed) {
|
|
1628
|
-
// Skip duplicated initial point
|
|
1629
1333
|
nextPoint = points[1];
|
|
1630
1334
|
} else {
|
|
1631
|
-
nextPoint =
|
|
1335
|
+
nextPoint = void 0;
|
|
1632
1336
|
}
|
|
1633
1337
|
} else {
|
|
1634
1338
|
nextPoint = points[iPoint + 1];
|
|
1635
|
-
}
|
|
1636
|
-
|
|
1637
|
-
|
|
1339
|
+
}
|
|
1638
1340
|
const normal1 = tempV2_1;
|
|
1639
1341
|
getNormal(previousPoint, currentPoint, normal1);
|
|
1640
1342
|
tempV2_3.copy(normal1).multiplyScalar(strokeWidth2);
|
|
@@ -1642,27 +1344,22 @@ class SVGLoader extends Loader {
|
|
|
1642
1344
|
currentPointR.copy(currentPoint).add(tempV2_3);
|
|
1643
1345
|
u1 = u0 + deltaU;
|
|
1644
1346
|
innerSideModified = false;
|
|
1645
|
-
|
|
1646
|
-
if (nextPoint !== undefined) {
|
|
1647
|
-
// Normal of next segment in tempV2_2
|
|
1347
|
+
if (nextPoint !== void 0) {
|
|
1648
1348
|
getNormal(currentPoint, nextPoint, tempV2_2);
|
|
1649
1349
|
tempV2_3.copy(tempV2_2).multiplyScalar(strokeWidth2);
|
|
1650
1350
|
nextPointL.copy(currentPoint).sub(tempV2_3);
|
|
1651
1351
|
nextPointR.copy(currentPoint).add(tempV2_3);
|
|
1652
1352
|
joinIsOnLeftSide = true;
|
|
1653
1353
|
tempV2_3.subVectors(nextPoint, previousPoint);
|
|
1654
|
-
|
|
1655
1354
|
if (normal1.dot(tempV2_3) < 0) {
|
|
1656
1355
|
joinIsOnLeftSide = false;
|
|
1657
1356
|
}
|
|
1658
|
-
|
|
1659
|
-
|
|
1357
|
+
if (iPoint === 1)
|
|
1358
|
+
initialJoinIsOnLeftSide = joinIsOnLeftSide;
|
|
1660
1359
|
tempV2_3.subVectors(nextPoint, currentPoint);
|
|
1661
1360
|
tempV2_3.normalize();
|
|
1662
|
-
const dot = Math.abs(normal1.dot(tempV2_3));
|
|
1663
|
-
|
|
1361
|
+
const dot = Math.abs(normal1.dot(tempV2_3));
|
|
1664
1362
|
if (dot !== 0) {
|
|
1665
|
-
// Compute inner and outer segment intersections
|
|
1666
1363
|
const miterSide = strokeWidth2 / dot;
|
|
1667
1364
|
tempV2_3.multiplyScalar(-miterSide);
|
|
1668
1365
|
tempV2_4.subVectors(currentPoint, previousPoint);
|
|
@@ -1673,16 +1370,13 @@ class SVGLoader extends Loader {
|
|
|
1673
1370
|
tempV2_4.divideScalar(segmentLengthPrev);
|
|
1674
1371
|
tempV2_6.subVectors(nextPoint, currentPoint);
|
|
1675
1372
|
const segmentLengthNext = tempV2_6.length();
|
|
1676
|
-
tempV2_6.divideScalar(segmentLengthNext);
|
|
1677
|
-
|
|
1373
|
+
tempV2_6.divideScalar(segmentLengthNext);
|
|
1678
1374
|
if (tempV2_4.dot(innerPoint) < segmentLengthPrev && tempV2_6.dot(innerPoint) < segmentLengthNext) {
|
|
1679
1375
|
innerSideModified = true;
|
|
1680
1376
|
}
|
|
1681
|
-
|
|
1682
1377
|
outerPoint.copy(tempV2_5).add(currentPoint);
|
|
1683
1378
|
innerPoint.add(currentPoint);
|
|
1684
1379
|
isMiter = false;
|
|
1685
|
-
|
|
1686
1380
|
if (innerSideModified) {
|
|
1687
1381
|
if (joinIsOnLeftSide) {
|
|
1688
1382
|
nextPointR.copy(innerPoint);
|
|
@@ -1692,41 +1386,30 @@ class SVGLoader extends Loader {
|
|
|
1692
1386
|
currentPointL.copy(innerPoint);
|
|
1693
1387
|
}
|
|
1694
1388
|
} else {
|
|
1695
|
-
// The segment triangles are generated here if there was overlapping
|
|
1696
1389
|
makeSegmentTriangles();
|
|
1697
1390
|
}
|
|
1698
|
-
|
|
1699
1391
|
switch (style.strokeLineJoin) {
|
|
1700
|
-
case
|
|
1392
|
+
case "bevel":
|
|
1701
1393
|
makeSegmentWithBevelJoin(joinIsOnLeftSide, innerSideModified, u1);
|
|
1702
1394
|
break;
|
|
1703
|
-
|
|
1704
|
-
|
|
1705
|
-
// Segment triangles
|
|
1706
|
-
createSegmentTrianglesWithMiddleSection(joinIsOnLeftSide, innerSideModified); // Join triangles
|
|
1707
|
-
|
|
1395
|
+
case "round":
|
|
1396
|
+
createSegmentTrianglesWithMiddleSection(joinIsOnLeftSide, innerSideModified);
|
|
1708
1397
|
if (joinIsOnLeftSide) {
|
|
1709
1398
|
makeCircularSector(currentPoint, currentPointL, nextPointL, u1, 0);
|
|
1710
1399
|
} else {
|
|
1711
1400
|
makeCircularSector(currentPoint, nextPointR, currentPointR, u1, 1);
|
|
1712
1401
|
}
|
|
1713
|
-
|
|
1714
1402
|
break;
|
|
1715
|
-
|
|
1716
|
-
case
|
|
1717
|
-
case 'miter-clip':
|
|
1403
|
+
case "miter":
|
|
1404
|
+
case "miter-clip":
|
|
1718
1405
|
default:
|
|
1719
1406
|
const miterFraction = strokeWidth2 * style.strokeMiterLimit / miterLength2;
|
|
1720
|
-
|
|
1721
1407
|
if (miterFraction < 1) {
|
|
1722
|
-
|
|
1723
|
-
if (style.strokeLineJoin !== 'miter-clip') {
|
|
1408
|
+
if (style.strokeLineJoin !== "miter-clip") {
|
|
1724
1409
|
makeSegmentWithBevelJoin(joinIsOnLeftSide, innerSideModified, u1);
|
|
1725
1410
|
break;
|
|
1726
1411
|
} else {
|
|
1727
|
-
|
|
1728
|
-
createSegmentTrianglesWithMiddleSection(joinIsOnLeftSide, innerSideModified); // Miter-clip join triangles
|
|
1729
|
-
|
|
1412
|
+
createSegmentTrianglesWithMiddleSection(joinIsOnLeftSide, innerSideModified);
|
|
1730
1413
|
if (joinIsOnLeftSide) {
|
|
1731
1414
|
tempV2_6.subVectors(outerPoint, currentPointL).multiplyScalar(miterFraction).add(currentPointL);
|
|
1732
1415
|
tempV2_7.subVectors(outerPoint, nextPointL).multiplyScalar(miterFraction).add(nextPointL);
|
|
@@ -1754,9 +1437,7 @@ class SVGLoader extends Loader {
|
|
|
1754
1437
|
}
|
|
1755
1438
|
}
|
|
1756
1439
|
} else {
|
|
1757
|
-
// Miter join segment triangles
|
|
1758
1440
|
if (innerSideModified) {
|
|
1759
|
-
// Optimized segment + join triangles
|
|
1760
1441
|
if (joinIsOnLeftSide) {
|
|
1761
1442
|
addVertex(lastPointR, u0, 1);
|
|
1762
1443
|
addVertex(lastPointL, u0, 0);
|
|
@@ -1772,14 +1453,12 @@ class SVGLoader extends Loader {
|
|
|
1772
1453
|
addVertex(innerPoint, u1, 0);
|
|
1773
1454
|
addVertex(outerPoint, u1, 1);
|
|
1774
1455
|
}
|
|
1775
|
-
|
|
1776
1456
|
if (joinIsOnLeftSide) {
|
|
1777
1457
|
nextPointL.copy(outerPoint);
|
|
1778
1458
|
} else {
|
|
1779
1459
|
nextPointR.copy(outerPoint);
|
|
1780
1460
|
}
|
|
1781
1461
|
} else {
|
|
1782
|
-
// Add extra miter join triangles
|
|
1783
1462
|
if (joinIsOnLeftSide) {
|
|
1784
1463
|
addVertex(currentPointL, u1, 0);
|
|
1785
1464
|
addVertex(outerPoint, u1, 0);
|
|
@@ -1796,51 +1475,37 @@ class SVGLoader extends Loader {
|
|
|
1796
1475
|
addVertex(nextPointR, u1, 1);
|
|
1797
1476
|
}
|
|
1798
1477
|
}
|
|
1799
|
-
|
|
1800
1478
|
isMiter = true;
|
|
1801
1479
|
}
|
|
1802
|
-
|
|
1803
1480
|
break;
|
|
1804
1481
|
}
|
|
1805
1482
|
} else {
|
|
1806
|
-
// The segment triangles are generated here when two consecutive points are collinear
|
|
1807
1483
|
makeSegmentTriangles();
|
|
1808
1484
|
}
|
|
1809
1485
|
} else {
|
|
1810
|
-
// The segment triangles are generated here if it is the ending segment
|
|
1811
1486
|
makeSegmentTriangles();
|
|
1812
1487
|
}
|
|
1813
|
-
|
|
1814
1488
|
if (!isClosed && iPoint === numPoints - 1) {
|
|
1815
|
-
// Start line endcap
|
|
1816
1489
|
addCapGeometry(points[0], point0L, point0R, joinIsOnLeftSide, true, u0);
|
|
1817
|
-
}
|
|
1818
|
-
|
|
1819
|
-
|
|
1490
|
+
}
|
|
1820
1491
|
u0 = u1;
|
|
1821
1492
|
previousPoint = currentPoint;
|
|
1822
1493
|
lastPointL.copy(nextPointL);
|
|
1823
1494
|
lastPointR.copy(nextPointR);
|
|
1824
1495
|
}
|
|
1825
|
-
|
|
1826
1496
|
if (!isClosed) {
|
|
1827
|
-
// Ending line endcap
|
|
1828
1497
|
addCapGeometry(currentPoint, currentPointL, currentPointR, joinIsOnLeftSide, false, u1);
|
|
1829
1498
|
} else if (innerSideModified && vertices) {
|
|
1830
|
-
// Modify path first segment vertices to adjust to the segments inner and outer intersections
|
|
1831
1499
|
let lastOuter = outerPoint;
|
|
1832
1500
|
let lastInner = innerPoint;
|
|
1833
|
-
|
|
1834
1501
|
if (initialJoinIsOnLeftSide !== joinIsOnLeftSide) {
|
|
1835
1502
|
lastOuter = innerPoint;
|
|
1836
1503
|
lastInner = outerPoint;
|
|
1837
1504
|
}
|
|
1838
|
-
|
|
1839
1505
|
if (joinIsOnLeftSide) {
|
|
1840
1506
|
if (isMiter || initialJoinIsOnLeftSide) {
|
|
1841
1507
|
lastInner.toArray(vertices, 0 * 3);
|
|
1842
1508
|
lastInner.toArray(vertices, 3 * 3);
|
|
1843
|
-
|
|
1844
1509
|
if (isMiter) {
|
|
1845
1510
|
lastOuter.toArray(vertices, 1 * 3);
|
|
1846
1511
|
}
|
|
@@ -1849,57 +1514,45 @@ class SVGLoader extends Loader {
|
|
|
1849
1514
|
if (isMiter || !initialJoinIsOnLeftSide) {
|
|
1850
1515
|
lastInner.toArray(vertices, 1 * 3);
|
|
1851
1516
|
lastInner.toArray(vertices, 3 * 3);
|
|
1852
|
-
|
|
1853
1517
|
if (isMiter) {
|
|
1854
1518
|
lastOuter.toArray(vertices, 0 * 3);
|
|
1855
1519
|
}
|
|
1856
1520
|
}
|
|
1857
1521
|
}
|
|
1858
1522
|
}
|
|
1859
|
-
|
|
1860
|
-
return numVertices; // -- End of algorithm
|
|
1861
|
-
// -- Functions
|
|
1862
|
-
|
|
1523
|
+
return numVertices;
|
|
1863
1524
|
function getNormal(p1, p2, result) {
|
|
1864
1525
|
result.subVectors(p2, p1);
|
|
1865
1526
|
return result.set(-result.y, result.x).normalize();
|
|
1866
1527
|
}
|
|
1867
|
-
|
|
1868
1528
|
function addVertex(position, u, v) {
|
|
1869
1529
|
if (vertices) {
|
|
1870
1530
|
vertices[currentCoordinate] = position.x;
|
|
1871
1531
|
vertices[currentCoordinate + 1] = position.y;
|
|
1872
1532
|
vertices[currentCoordinate + 2] = 0;
|
|
1873
|
-
|
|
1874
1533
|
if (normals) {
|
|
1875
1534
|
normals[currentCoordinate] = 0;
|
|
1876
1535
|
normals[currentCoordinate + 1] = 0;
|
|
1877
1536
|
normals[currentCoordinate + 2] = 1;
|
|
1878
1537
|
}
|
|
1879
|
-
|
|
1880
1538
|
currentCoordinate += 3;
|
|
1881
|
-
|
|
1882
1539
|
if (uvs) {
|
|
1883
1540
|
uvs[currentCoordinateUV] = u;
|
|
1884
1541
|
uvs[currentCoordinateUV + 1] = v;
|
|
1885
1542
|
currentCoordinateUV += 2;
|
|
1886
1543
|
}
|
|
1887
1544
|
}
|
|
1888
|
-
|
|
1889
1545
|
numVertices += 3;
|
|
1890
1546
|
}
|
|
1891
|
-
|
|
1892
1547
|
function makeCircularSector(center, p1, p2, u, v) {
|
|
1893
|
-
// param p1, p2: Points in the circle arc.
|
|
1894
|
-
// p1 and p2 are in clockwise direction.
|
|
1895
1548
|
tempV2_1.copy(p1).sub(center).normalize();
|
|
1896
1549
|
tempV2_2.copy(p2).sub(center).normalize();
|
|
1897
1550
|
let angle = Math.PI;
|
|
1898
1551
|
const dot = tempV2_1.dot(tempV2_2);
|
|
1899
|
-
if (Math.abs(dot) < 1)
|
|
1552
|
+
if (Math.abs(dot) < 1)
|
|
1553
|
+
angle = Math.abs(Math.acos(dot));
|
|
1900
1554
|
angle /= arcDivisions;
|
|
1901
1555
|
tempV2_3.copy(p1);
|
|
1902
|
-
|
|
1903
1556
|
for (let i = 0, il = arcDivisions - 1; i < il; i++) {
|
|
1904
1557
|
tempV2_4.copy(tempV2_3).rotateAround(center, angle);
|
|
1905
1558
|
addVertex(tempV2_3, u, v);
|
|
@@ -1907,12 +1560,10 @@ class SVGLoader extends Loader {
|
|
|
1907
1560
|
addVertex(center, u, 0.5);
|
|
1908
1561
|
tempV2_3.copy(tempV2_4);
|
|
1909
1562
|
}
|
|
1910
|
-
|
|
1911
1563
|
addVertex(tempV2_4, u, v);
|
|
1912
1564
|
addVertex(p2, u, v);
|
|
1913
1565
|
addVertex(center, u, 0.5);
|
|
1914
1566
|
}
|
|
1915
|
-
|
|
1916
1567
|
function makeSegmentTriangles() {
|
|
1917
1568
|
addVertex(lastPointR, u0, 1);
|
|
1918
1569
|
addVertex(lastPointL, u0, 0);
|
|
@@ -1921,38 +1572,31 @@ class SVGLoader extends Loader {
|
|
|
1921
1572
|
addVertex(currentPointL, u1, 1);
|
|
1922
1573
|
addVertex(currentPointR, u1, 0);
|
|
1923
1574
|
}
|
|
1924
|
-
|
|
1925
|
-
|
|
1926
|
-
|
|
1927
|
-
// Optimized segment + bevel triangles
|
|
1928
|
-
if (joinIsOnLeftSide) {
|
|
1929
|
-
// Path segments triangles
|
|
1575
|
+
function makeSegmentWithBevelJoin(joinIsOnLeftSide2, innerSideModified2, u) {
|
|
1576
|
+
if (innerSideModified2) {
|
|
1577
|
+
if (joinIsOnLeftSide2) {
|
|
1930
1578
|
addVertex(lastPointR, u0, 1);
|
|
1931
1579
|
addVertex(lastPointL, u0, 0);
|
|
1932
1580
|
addVertex(currentPointL, u1, 0);
|
|
1933
1581
|
addVertex(lastPointR, u0, 1);
|
|
1934
1582
|
addVertex(currentPointL, u1, 0);
|
|
1935
|
-
addVertex(innerPoint, u1, 1);
|
|
1936
|
-
|
|
1583
|
+
addVertex(innerPoint, u1, 1);
|
|
1937
1584
|
addVertex(currentPointL, u, 0);
|
|
1938
1585
|
addVertex(nextPointL, u, 0);
|
|
1939
1586
|
addVertex(innerPoint, u, 0.5);
|
|
1940
1587
|
} else {
|
|
1941
|
-
// Path segments triangles
|
|
1942
1588
|
addVertex(lastPointR, u0, 1);
|
|
1943
1589
|
addVertex(lastPointL, u0, 0);
|
|
1944
1590
|
addVertex(currentPointR, u1, 1);
|
|
1945
1591
|
addVertex(lastPointL, u0, 0);
|
|
1946
1592
|
addVertex(innerPoint, u1, 0);
|
|
1947
|
-
addVertex(currentPointR, u1, 1);
|
|
1948
|
-
|
|
1593
|
+
addVertex(currentPointR, u1, 1);
|
|
1949
1594
|
addVertex(currentPointR, u, 1);
|
|
1950
1595
|
addVertex(nextPointR, u, 0);
|
|
1951
1596
|
addVertex(innerPoint, u, 0.5);
|
|
1952
1597
|
}
|
|
1953
1598
|
} else {
|
|
1954
|
-
|
|
1955
|
-
if (joinIsOnLeftSide) {
|
|
1599
|
+
if (joinIsOnLeftSide2) {
|
|
1956
1600
|
addVertex(currentPointL, u, 0);
|
|
1957
1601
|
addVertex(nextPointL, u, 0);
|
|
1958
1602
|
addVertex(currentPoint, u, 0.5);
|
|
@@ -1963,10 +1607,9 @@ class SVGLoader extends Loader {
|
|
|
1963
1607
|
}
|
|
1964
1608
|
}
|
|
1965
1609
|
}
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
if (joinIsOnLeftSide) {
|
|
1610
|
+
function createSegmentTrianglesWithMiddleSection(joinIsOnLeftSide2, innerSideModified2) {
|
|
1611
|
+
if (innerSideModified2) {
|
|
1612
|
+
if (joinIsOnLeftSide2) {
|
|
1970
1613
|
addVertex(lastPointR, u0, 1);
|
|
1971
1614
|
addVertex(lastPointL, u0, 0);
|
|
1972
1615
|
addVertex(currentPointL, u1, 0);
|
|
@@ -1995,28 +1638,22 @@ class SVGLoader extends Loader {
|
|
|
1995
1638
|
}
|
|
1996
1639
|
}
|
|
1997
1640
|
}
|
|
1998
|
-
|
|
1999
|
-
function addCapGeometry(center, p1, p2, joinIsOnLeftSide, start, u) {
|
|
2000
|
-
// param center: End point of the path
|
|
2001
|
-
// param p1, p2: Left and right cap points
|
|
1641
|
+
function addCapGeometry(center, p1, p2, joinIsOnLeftSide2, start, u) {
|
|
2002
1642
|
switch (style.strokeLineCap) {
|
|
2003
|
-
case
|
|
1643
|
+
case "round":
|
|
2004
1644
|
if (start) {
|
|
2005
1645
|
makeCircularSector(center, p2, p1, u, 0.5);
|
|
2006
1646
|
} else {
|
|
2007
1647
|
makeCircularSector(center, p1, p2, u, 0.5);
|
|
2008
1648
|
}
|
|
2009
|
-
|
|
2010
1649
|
break;
|
|
2011
|
-
|
|
2012
|
-
case 'square':
|
|
1650
|
+
case "square":
|
|
2013
1651
|
if (start) {
|
|
2014
1652
|
tempV2_1.subVectors(p1, center);
|
|
2015
1653
|
tempV2_2.set(tempV2_1.y, -tempV2_1.x);
|
|
2016
1654
|
tempV2_3.addVectors(tempV2_1, tempV2_2).add(center);
|
|
2017
|
-
tempV2_4.subVectors(tempV2_2, tempV2_1).add(center);
|
|
2018
|
-
|
|
2019
|
-
if (joinIsOnLeftSide) {
|
|
1655
|
+
tempV2_4.subVectors(tempV2_2, tempV2_1).add(center);
|
|
1656
|
+
if (joinIsOnLeftSide2) {
|
|
2020
1657
|
tempV2_3.toArray(vertices, 1 * 3);
|
|
2021
1658
|
tempV2_4.toArray(vertices, 0 * 3);
|
|
2022
1659
|
tempV2_4.toArray(vertices, 3 * 3);
|
|
@@ -2030,9 +1667,8 @@ class SVGLoader extends Loader {
|
|
|
2030
1667
|
tempV2_2.set(tempV2_1.y, -tempV2_1.x);
|
|
2031
1668
|
tempV2_3.addVectors(tempV2_1, tempV2_2).add(center);
|
|
2032
1669
|
tempV2_4.subVectors(tempV2_2, tempV2_1).add(center);
|
|
2033
|
-
const vl = vertices.length;
|
|
2034
|
-
|
|
2035
|
-
if (joinIsOnLeftSide) {
|
|
1670
|
+
const vl = vertices.length;
|
|
1671
|
+
if (joinIsOnLeftSide2) {
|
|
2036
1672
|
tempV2_3.toArray(vertices, vl - 1 * 3);
|
|
2037
1673
|
tempV2_4.toArray(vertices, vl - 2 * 3);
|
|
2038
1674
|
tempV2_4.toArray(vertices, vl - 4 * 3);
|
|
@@ -2042,38 +1678,32 @@ class SVGLoader extends Loader {
|
|
|
2042
1678
|
tempV2_4.toArray(vertices, vl - 4 * 3);
|
|
2043
1679
|
}
|
|
2044
1680
|
}
|
|
2045
|
-
|
|
1681
|
+
break;
|
|
1682
|
+
case "butt":
|
|
1683
|
+
default:
|
|
2046
1684
|
break;
|
|
2047
1685
|
}
|
|
2048
1686
|
}
|
|
2049
|
-
|
|
2050
|
-
function removeDuplicatedPoints(points) {
|
|
2051
|
-
// Creates a new array if necessary with duplicated points removed.
|
|
2052
|
-
// This does not remove duplicated initial and ending points of a closed path.
|
|
1687
|
+
function removeDuplicatedPoints(points2) {
|
|
2053
1688
|
let dupPoints = false;
|
|
2054
|
-
|
|
2055
|
-
|
|
2056
|
-
if (points[i].distanceTo(points[i + 1]) < minDistance) {
|
|
1689
|
+
for (let i = 1, n = points2.length - 1; i < n; i++) {
|
|
1690
|
+
if (points2[i].distanceTo(points2[i + 1]) < minDistance) {
|
|
2057
1691
|
dupPoints = true;
|
|
2058
1692
|
break;
|
|
2059
1693
|
}
|
|
2060
1694
|
}
|
|
2061
|
-
|
|
2062
|
-
|
|
1695
|
+
if (!dupPoints)
|
|
1696
|
+
return points2;
|
|
2063
1697
|
const newPoints = [];
|
|
2064
|
-
newPoints.push(
|
|
2065
|
-
|
|
2066
|
-
|
|
2067
|
-
|
|
2068
|
-
newPoints.push(points[i]);
|
|
1698
|
+
newPoints.push(points2[0]);
|
|
1699
|
+
for (let i = 1, n = points2.length - 1; i < n; i++) {
|
|
1700
|
+
if (points2[i].distanceTo(points2[i + 1]) >= minDistance) {
|
|
1701
|
+
newPoints.push(points2[i]);
|
|
2069
1702
|
}
|
|
2070
1703
|
}
|
|
2071
|
-
|
|
2072
|
-
newPoints.push(points[points.length - 1]);
|
|
1704
|
+
newPoints.push(points2[points2.length - 1]);
|
|
2073
1705
|
return newPoints;
|
|
2074
1706
|
}
|
|
2075
1707
|
}
|
|
2076
|
-
|
|
2077
1708
|
}
|
|
2078
|
-
|
|
2079
|
-
export { SVGLoader };
|
|
1709
|
+
exports.SVGLoader = SVGLoader;
|