poly-extrude 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * poly-extrude v0.2.0
2
+ * poly-extrude v0.3.0
3
3
  */
4
4
  var earcut$2 = {exports: {}};
5
5
 
@@ -1457,4 +1457,1973 @@ function cylinder(point, options) {
1457
1457
  };
1458
1458
  }
1459
1459
 
1460
- export { cylinder, expandLine, extrudePolygons, extrudePolylines };
1460
+ // import * as MathUtils from './MathUtils.js';
1461
+ // code copy from https://github.com/mrdoob/three.js/blob/dev/src/math/Vector3.js
1462
+ var Vector3 = /*#__PURE__*/function () {
1463
+ function Vector3(x, y, z) {
1464
+ if (x === void 0) {
1465
+ x = 0;
1466
+ }
1467
+
1468
+ if (y === void 0) {
1469
+ y = 0;
1470
+ }
1471
+
1472
+ if (z === void 0) {
1473
+ z = 0;
1474
+ }
1475
+
1476
+ this.x = x;
1477
+ this.y = y;
1478
+ this.z = z;
1479
+ }
1480
+
1481
+ var _proto = Vector3.prototype;
1482
+
1483
+ _proto.set = function set(x, y, z) {
1484
+ if (z === undefined) z = this.z; // sprite.scale.set(x,y)
1485
+
1486
+ this.x = x;
1487
+ this.y = y;
1488
+ this.z = z;
1489
+ return this;
1490
+ } // setScalar(scalar) {
1491
+ // this.x = scalar;
1492
+ // this.y = scalar;
1493
+ // this.z = scalar;
1494
+ // return this;
1495
+ // }
1496
+ // setX(x) {
1497
+ // this.x = x;
1498
+ // return this;
1499
+ // }
1500
+ // setY(y) {
1501
+ // this.y = y;
1502
+ // return this;
1503
+ // }
1504
+ // setZ(z) {
1505
+ // this.z = z;
1506
+ // return this;
1507
+ // }
1508
+ // setComponent(index, value) {
1509
+ // switch (index) {
1510
+ // case 0: this.x = value; break;
1511
+ // case 1: this.y = value; break;
1512
+ // case 2: this.z = value; break;
1513
+ // default: throw new Error('index is out of range: ' + index);
1514
+ // }
1515
+ // return this;
1516
+ // }
1517
+ // getComponent(index) {
1518
+ // switch (index) {
1519
+ // case 0: return this.x;
1520
+ // case 1: return this.y;
1521
+ // case 2: return this.z;
1522
+ // default: throw new Error('index is out of range: ' + index);
1523
+ // }
1524
+ // }
1525
+ ;
1526
+
1527
+ _proto.clone = function clone() {
1528
+ return new this.constructor(this.x, this.y, this.z);
1529
+ };
1530
+
1531
+ _proto.copy = function copy(v) {
1532
+ this.x = v.x;
1533
+ this.y = v.y;
1534
+ this.z = v.z;
1535
+ return this;
1536
+ };
1537
+
1538
+ _proto.add = function add(v) {
1539
+ this.x += v.x;
1540
+ this.y += v.y;
1541
+ this.z += v.z;
1542
+ return this;
1543
+ };
1544
+
1545
+ _proto.addScalar = function addScalar(s) {
1546
+ this.x += s;
1547
+ this.y += s;
1548
+ this.z += s;
1549
+ return this;
1550
+ };
1551
+
1552
+ _proto.addVectors = function addVectors(a, b) {
1553
+ this.x = a.x + b.x;
1554
+ this.y = a.y + b.y;
1555
+ this.z = a.z + b.z;
1556
+ return this;
1557
+ };
1558
+
1559
+ _proto.addScaledVector = function addScaledVector(v, s) {
1560
+ this.x += v.x * s;
1561
+ this.y += v.y * s;
1562
+ this.z += v.z * s;
1563
+ return this;
1564
+ };
1565
+
1566
+ _proto.sub = function sub(v) {
1567
+ this.x -= v.x;
1568
+ this.y -= v.y;
1569
+ this.z -= v.z;
1570
+ return this;
1571
+ };
1572
+
1573
+ _proto.subScalar = function subScalar(s) {
1574
+ this.x -= s;
1575
+ this.y -= s;
1576
+ this.z -= s;
1577
+ return this;
1578
+ };
1579
+
1580
+ _proto.subVectors = function subVectors(a, b) {
1581
+ this.x = a.x - b.x;
1582
+ this.y = a.y - b.y;
1583
+ this.z = a.z - b.z;
1584
+ return this;
1585
+ };
1586
+
1587
+ _proto.multiply = function multiply(v) {
1588
+ this.x *= v.x;
1589
+ this.y *= v.y;
1590
+ this.z *= v.z;
1591
+ return this;
1592
+ };
1593
+
1594
+ _proto.multiplyScalar = function multiplyScalar(scalar) {
1595
+ this.x *= scalar;
1596
+ this.y *= scalar;
1597
+ this.z *= scalar;
1598
+ return this;
1599
+ };
1600
+
1601
+ _proto.multiplyVectors = function multiplyVectors(a, b) {
1602
+ this.x = a.x * b.x;
1603
+ this.y = a.y * b.y;
1604
+ this.z = a.z * b.z;
1605
+ return this;
1606
+ } // applyEuler(euler) {
1607
+ // return this.applyQuaternion(_quaternion.setFromEuler(euler));
1608
+ // }
1609
+ // applyAxisAngle(axis, angle) {
1610
+ // return this.applyQuaternion(_quaternion.setFromAxisAngle(axis, angle));
1611
+ // }
1612
+ // applyMatrix3(m) {
1613
+ // const x = this.x, y = this.y, z = this.z;
1614
+ // const e = m.elements;
1615
+ // this.x = e[0] * x + e[3] * y + e[6] * z;
1616
+ // this.y = e[1] * x + e[4] * y + e[7] * z;
1617
+ // this.z = e[2] * x + e[5] * y + e[8] * z;
1618
+ // return this;
1619
+ // }
1620
+ // applyNormalMatrix(m) {
1621
+ // return this.applyMatrix3(m).normalize();
1622
+ // }
1623
+ ;
1624
+
1625
+ _proto.applyMatrix4 = function applyMatrix4(m) {
1626
+ var x = this.x,
1627
+ y = this.y,
1628
+ z = this.z;
1629
+ var e = m.elements;
1630
+ var w = 1 / (e[3] * x + e[7] * y + e[11] * z + e[15]);
1631
+ this.x = (e[0] * x + e[4] * y + e[8] * z + e[12]) * w;
1632
+ this.y = (e[1] * x + e[5] * y + e[9] * z + e[13]) * w;
1633
+ this.z = (e[2] * x + e[6] * y + e[10] * z + e[14]) * w;
1634
+ return this;
1635
+ } // applyQuaternion(q) {
1636
+ // const x = this.x, y = this.y, z = this.z;
1637
+ // const qx = q.x, qy = q.y, qz = q.z, qw = q.w;
1638
+ // // calculate quat * vector
1639
+ // const ix = qw * x + qy * z - qz * y;
1640
+ // const iy = qw * y + qz * x - qx * z;
1641
+ // const iz = qw * z + qx * y - qy * x;
1642
+ // const iw = - qx * x - qy * y - qz * z;
1643
+ // // calculate result * inverse quat
1644
+ // this.x = ix * qw + iw * - qx + iy * - qz - iz * - qy;
1645
+ // this.y = iy * qw + iw * - qy + iz * - qx - ix * - qz;
1646
+ // this.z = iz * qw + iw * - qz + ix * - qy - iy * - qx;
1647
+ // return this;
1648
+ // }
1649
+ // project(camera) {
1650
+ // return this.applyMatrix4(camera.matrixWorldInverse).applyMatrix4(camera.projectionMatrix);
1651
+ // }
1652
+ // unproject(camera) {
1653
+ // return this.applyMatrix4(camera.projectionMatrixInverse).applyMatrix4(camera.matrixWorld);
1654
+ // }
1655
+ // transformDirection(m) {
1656
+ // // input: THREE.Matrix4 affine matrix
1657
+ // // vector interpreted as a direction
1658
+ // const x = this.x, y = this.y, z = this.z;
1659
+ // const e = m.elements;
1660
+ // this.x = e[0] * x + e[4] * y + e[8] * z;
1661
+ // this.y = e[1] * x + e[5] * y + e[9] * z;
1662
+ // this.z = e[2] * x + e[6] * y + e[10] * z;
1663
+ // return this.normalize();
1664
+ // }
1665
+ ;
1666
+
1667
+ _proto.divide = function divide(v) {
1668
+ this.x /= v.x;
1669
+ this.y /= v.y;
1670
+ this.z /= v.z;
1671
+ return this;
1672
+ };
1673
+
1674
+ _proto.divideScalar = function divideScalar(scalar) {
1675
+ return this.multiplyScalar(1 / scalar);
1676
+ };
1677
+
1678
+ _proto.min = function min(v) {
1679
+ this.x = Math.min(this.x, v.x);
1680
+ this.y = Math.min(this.y, v.y);
1681
+ this.z = Math.min(this.z, v.z);
1682
+ return this;
1683
+ };
1684
+
1685
+ _proto.max = function max(v) {
1686
+ this.x = Math.max(this.x, v.x);
1687
+ this.y = Math.max(this.y, v.y);
1688
+ this.z = Math.max(this.z, v.z);
1689
+ return this;
1690
+ };
1691
+
1692
+ _proto.clamp = function clamp(min, max) {
1693
+ // assumes min < max, componentwise
1694
+ this.x = Math.max(min.x, Math.min(max.x, this.x));
1695
+ this.y = Math.max(min.y, Math.min(max.y, this.y));
1696
+ this.z = Math.max(min.z, Math.min(max.z, this.z));
1697
+ return this;
1698
+ };
1699
+
1700
+ _proto.clampScalar = function clampScalar(minVal, maxVal) {
1701
+ this.x = Math.max(minVal, Math.min(maxVal, this.x));
1702
+ this.y = Math.max(minVal, Math.min(maxVal, this.y));
1703
+ this.z = Math.max(minVal, Math.min(maxVal, this.z));
1704
+ return this;
1705
+ };
1706
+
1707
+ _proto.clampLength = function clampLength(min, max) {
1708
+ var length = this.length();
1709
+ return this.divideScalar(length || 1).multiplyScalar(Math.max(min, Math.min(max, length)));
1710
+ } // floor() {
1711
+ // this.x = Math.floor(this.x);
1712
+ // this.y = Math.floor(this.y);
1713
+ // this.z = Math.floor(this.z);
1714
+ // return this;
1715
+ // }
1716
+ // ceil() {
1717
+ // this.x = Math.ceil(this.x);
1718
+ // this.y = Math.ceil(this.y);
1719
+ // this.z = Math.ceil(this.z);
1720
+ // return this;
1721
+ // }
1722
+ // round() {
1723
+ // this.x = Math.round(this.x);
1724
+ // this.y = Math.round(this.y);
1725
+ // this.z = Math.round(this.z);
1726
+ // return this;
1727
+ // }
1728
+ // roundToZero() {
1729
+ // this.x = (this.x < 0) ? Math.ceil(this.x) : Math.floor(this.x);
1730
+ // this.y = (this.y < 0) ? Math.ceil(this.y) : Math.floor(this.y);
1731
+ // this.z = (this.z < 0) ? Math.ceil(this.z) : Math.floor(this.z);
1732
+ // return this;
1733
+ // }
1734
+ // negate() {
1735
+ // this.x = -this.x;
1736
+ // this.y = -this.y;
1737
+ // this.z = -this.z;
1738
+ // return this;
1739
+ // }
1740
+ ;
1741
+
1742
+ _proto.dot = function dot(v) {
1743
+ return this.x * v.x + this.y * v.y + this.z * v.z;
1744
+ } // TODO lengthSquared?
1745
+ ;
1746
+
1747
+ _proto.lengthSq = function lengthSq() {
1748
+ return this.x * this.x + this.y * this.y + this.z * this.z;
1749
+ };
1750
+
1751
+ _proto.length = function length() {
1752
+ return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z);
1753
+ } // manhattanLength() {
1754
+ // return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z);
1755
+ // }
1756
+ ;
1757
+
1758
+ _proto.normalize = function normalize() {
1759
+ return this.divideScalar(this.length() || 1);
1760
+ };
1761
+
1762
+ _proto.setLength = function setLength(length) {
1763
+ return this.normalize().multiplyScalar(length);
1764
+ };
1765
+
1766
+ _proto.lerp = function lerp(v, alpha) {
1767
+ this.x += (v.x - this.x) * alpha;
1768
+ this.y += (v.y - this.y) * alpha;
1769
+ this.z += (v.z - this.z) * alpha;
1770
+ return this;
1771
+ };
1772
+
1773
+ _proto.lerpVectors = function lerpVectors(v1, v2, alpha) {
1774
+ this.x = v1.x + (v2.x - v1.x) * alpha;
1775
+ this.y = v1.y + (v2.y - v1.y) * alpha;
1776
+ this.z = v1.z + (v2.z - v1.z) * alpha;
1777
+ return this;
1778
+ };
1779
+
1780
+ _proto.cross = function cross(v) {
1781
+ return this.crossVectors(this, v);
1782
+ };
1783
+
1784
+ _proto.crossVectors = function crossVectors(a, b) {
1785
+ var ax = a.x,
1786
+ ay = a.y,
1787
+ az = a.z;
1788
+ var bx = b.x,
1789
+ by = b.y,
1790
+ bz = b.z;
1791
+ this.x = ay * bz - az * by;
1792
+ this.y = az * bx - ax * bz;
1793
+ this.z = ax * by - ay * bx;
1794
+ return this;
1795
+ } // projectOnVector(v) {
1796
+ // const denominator = v.lengthSq();
1797
+ // if (denominator === 0) return this.set(0, 0, 0);
1798
+ // const scalar = v.dot(this) / denominator;
1799
+ // return this.copy(v).multiplyScalar(scalar);
1800
+ // }
1801
+ // projectOnPlane(planeNormal) {
1802
+ // _vector.copy(this).projectOnVector(planeNormal);
1803
+ // return this.sub(_vector);
1804
+ // }
1805
+ // reflect(normal) {
1806
+ // // reflect incident vector off plane orthogonal to normal
1807
+ // // normal is assumed to have unit length
1808
+ // return this.sub(_vector.copy(normal).multiplyScalar(2 * this.dot(normal)));
1809
+ // }
1810
+ // angleTo(v) {
1811
+ // const denominator = Math.sqrt(this.lengthSq() * v.lengthSq());
1812
+ // if (denominator === 0) return Math.PI / 2;
1813
+ // const theta = this.dot(v) / denominator;
1814
+ // // clamp, to handle numerical problems
1815
+ // return Math.acos(MathUtils.clamp(theta, -1, 1));
1816
+ // }
1817
+ ;
1818
+
1819
+ _proto.distanceTo = function distanceTo(v) {
1820
+ return Math.sqrt(this.distanceToSquared(v));
1821
+ } // distanceToSquared(v) {
1822
+ // const dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z;
1823
+ // return dx * dx + dy * dy + dz * dz;
1824
+ // }
1825
+ // manhattanDistanceTo(v) {
1826
+ // return Math.abs(this.x - v.x) + Math.abs(this.y - v.y) + Math.abs(this.z - v.z);
1827
+ // }
1828
+ // setFromSpherical(s) {
1829
+ // return this.setFromSphericalCoords(s.radius, s.phi, s.theta);
1830
+ // }
1831
+ // setFromSphericalCoords(radius, phi, theta) {
1832
+ // const sinPhiRadius = Math.sin(phi) * radius;
1833
+ // this.x = sinPhiRadius * Math.sin(theta);
1834
+ // this.y = Math.cos(phi) * radius;
1835
+ // this.z = sinPhiRadius * Math.cos(theta);
1836
+ // return this;
1837
+ // }
1838
+ // setFromCylindrical(c) {
1839
+ // return this.setFromCylindricalCoords(c.radius, c.theta, c.y);
1840
+ // }
1841
+ // setFromCylindricalCoords(radius, theta, y) {
1842
+ // this.x = radius * Math.sin(theta);
1843
+ // this.y = y;
1844
+ // this.z = radius * Math.cos(theta);
1845
+ // return this;
1846
+ // }
1847
+ // setFromMatrixPosition(m) {
1848
+ // const e = m.elements;
1849
+ // this.x = e[12];
1850
+ // this.y = e[13];
1851
+ // this.z = e[14];
1852
+ // return this;
1853
+ // }
1854
+ // setFromMatrixScale(m) {
1855
+ // const sx = this.setFromMatrixColumn(m, 0).length();
1856
+ // const sy = this.setFromMatrixColumn(m, 1).length();
1857
+ // const sz = this.setFromMatrixColumn(m, 2).length();
1858
+ // this.x = sx;
1859
+ // this.y = sy;
1860
+ // this.z = sz;
1861
+ // return this;
1862
+ // }
1863
+ // setFromMatrixColumn(m, index) {
1864
+ // return this.fromArray(m.elements, index * 4);
1865
+ // }
1866
+ // setFromMatrix3Column(m, index) {
1867
+ // return this.fromArray(m.elements, index * 3);
1868
+ // }
1869
+ // setFromEuler(e) {
1870
+ // this.x = e._x;
1871
+ // this.y = e._y;
1872
+ // this.z = e._z;
1873
+ // return this;
1874
+ // }
1875
+ // setFromColor(c) {
1876
+ // this.x = c.r;
1877
+ // this.y = c.g;
1878
+ // this.z = c.b;
1879
+ // return this;
1880
+ // }
1881
+ ;
1882
+
1883
+ _proto.equals = function equals(v) {
1884
+ return v.x === this.x && v.y === this.y && v.z === this.z;
1885
+ };
1886
+
1887
+ _proto.fromArray = function fromArray(array, offset) {
1888
+ if (offset === void 0) {
1889
+ offset = 0;
1890
+ }
1891
+
1892
+ this.x = array[offset];
1893
+ this.y = array[offset + 1];
1894
+ this.z = array[offset + 2];
1895
+ return this;
1896
+ } // toArray(array = [], offset = 0) {
1897
+ // array[offset] = this.x;
1898
+ // array[offset + 1] = this.y;
1899
+ // array[offset + 2] = this.z;
1900
+ // return array;
1901
+ // }
1902
+ // fromBufferAttribute(attribute, index) {
1903
+ // this.x = attribute.getX(index);
1904
+ // this.y = attribute.getY(index);
1905
+ // this.z = attribute.getZ(index);
1906
+ // return this;
1907
+ // }
1908
+ ;
1909
+
1910
+ _proto.random = function random() {
1911
+ this.x = Math.random();
1912
+ this.y = Math.random();
1913
+ this.z = Math.random();
1914
+ return this;
1915
+ } // randomDirection() {
1916
+ // // Derived from https://mathworld.wolfram.com/SpherePointPicking.html
1917
+ // const u = (Math.random() - 0.5) * 2;
1918
+ // const t = Math.random() * Math.PI * 2;
1919
+ // const f = Math.sqrt(1 - u ** 2);
1920
+ // this.x = f * Math.cos(t);
1921
+ // this.y = f * Math.sin(t);
1922
+ // this.z = u;
1923
+ // return this;
1924
+ // }
1925
+ ;
1926
+
1927
+ return Vector3;
1928
+ }();
1929
+
1930
+ /* eslint-disable no-tabs */
1931
+ /**
1932
+ * PathPoint
1933
+ */
1934
+
1935
+ var PathPoint = /*#__PURE__*/function () {
1936
+ function PathPoint() {
1937
+ this.pos = new Vector3();
1938
+ this.dir = new Vector3();
1939
+ this.right = new Vector3();
1940
+ this.up = new Vector3(); // normal
1941
+
1942
+ this.dist = 0; // distance from start
1943
+
1944
+ this.widthScale = 1; // for corner
1945
+
1946
+ this.sharp = false; // marks as sharp corner
1947
+ }
1948
+
1949
+ var _proto = PathPoint.prototype;
1950
+
1951
+ _proto.lerpPathPoints = function lerpPathPoints(p1, p2, alpha) {
1952
+ this.pos.lerpVectors(p1.pos, p2.pos, alpha);
1953
+ this.dir.lerpVectors(p1.dir, p2.dir, alpha);
1954
+ this.up.lerpVectors(p1.up, p2.up, alpha);
1955
+ this.right.lerpVectors(p1.right, p2.right, alpha);
1956
+ this.dist = (p2.dist - p1.dist) * alpha + p1.dist;
1957
+ this.widthScale = (p2.widthScale - p1.widthScale) * alpha + p1.widthScale;
1958
+ };
1959
+
1960
+ _proto.copy = function copy(source) {
1961
+ this.pos.copy(source.pos);
1962
+ this.dir.copy(source.dir);
1963
+ this.up.copy(source.up);
1964
+ this.right.copy(source.right);
1965
+ this.dist = source.dist;
1966
+ this.widthScale = source.widthScale;
1967
+ };
1968
+
1969
+ return PathPoint;
1970
+ }();
1971
+
1972
+ // code copy from https://github.com/mrdoob/three.js/blob/dev/src/math/Matrix4.js
1973
+ // import { WebGLCoordinateSystem, WebGPUCoordinateSystem } from '../constants.js';
1974
+ // import { Vector3 } from './Vector3.js';
1975
+ var Matrix4 = /*#__PURE__*/function () {
1976
+ function Matrix4(n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44) {
1977
+ this.elements = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];
1978
+
1979
+ if (n11 !== undefined) {
1980
+ this.set(n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44);
1981
+ }
1982
+ }
1983
+
1984
+ var _proto = Matrix4.prototype;
1985
+
1986
+ _proto.set = function set(n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44) {
1987
+ var te = this.elements;
1988
+ te[0] = n11;
1989
+ te[4] = n12;
1990
+ te[8] = n13;
1991
+ te[12] = n14;
1992
+ te[1] = n21;
1993
+ te[5] = n22;
1994
+ te[9] = n23;
1995
+ te[13] = n24;
1996
+ te[2] = n31;
1997
+ te[6] = n32;
1998
+ te[10] = n33;
1999
+ te[14] = n34;
2000
+ te[3] = n41;
2001
+ te[7] = n42;
2002
+ te[11] = n43;
2003
+ te[15] = n44;
2004
+ return this;
2005
+ } // identity() {
2006
+ // this.set(
2007
+ // 1, 0, 0, 0,
2008
+ // 0, 1, 0, 0,
2009
+ // 0, 0, 1, 0,
2010
+ // 0, 0, 0, 1
2011
+ // );
2012
+ // return this;
2013
+ // }
2014
+ // clone() {
2015
+ // return new Matrix4().fromArray(this.elements);
2016
+ // }
2017
+ // copy(m) {
2018
+ // const te = this.elements;
2019
+ // const me = m.elements;
2020
+ // te[0] = me[0]; te[1] = me[1]; te[2] = me[2]; te[3] = me[3];
2021
+ // te[4] = me[4]; te[5] = me[5]; te[6] = me[6]; te[7] = me[7];
2022
+ // te[8] = me[8]; te[9] = me[9]; te[10] = me[10]; te[11] = me[11];
2023
+ // te[12] = me[12]; te[13] = me[13]; te[14] = me[14]; te[15] = me[15];
2024
+ // return this;
2025
+ // }
2026
+ // copyPosition(m) {
2027
+ // const te = this.elements, me = m.elements;
2028
+ // te[12] = me[12];
2029
+ // te[13] = me[13];
2030
+ // te[14] = me[14];
2031
+ // return this;
2032
+ // }
2033
+ // setFromMatrix3(m) {
2034
+ // const me = m.elements;
2035
+ // this.set(
2036
+ // me[0], me[3], me[6], 0,
2037
+ // me[1], me[4], me[7], 0,
2038
+ // me[2], me[5], me[8], 0,
2039
+ // 0, 0, 0, 1
2040
+ // );
2041
+ // return this;
2042
+ // }
2043
+ // extractBasis(xAxis, yAxis, zAxis) {
2044
+ // xAxis.setFromMatrixColumn(this, 0);
2045
+ // yAxis.setFromMatrixColumn(this, 1);
2046
+ // zAxis.setFromMatrixColumn(this, 2);
2047
+ // return this;
2048
+ // }
2049
+ // makeBasis(xAxis, yAxis, zAxis) {
2050
+ // this.set(
2051
+ // xAxis.x, yAxis.x, zAxis.x, 0,
2052
+ // xAxis.y, yAxis.y, zAxis.y, 0,
2053
+ // xAxis.z, yAxis.z, zAxis.z, 0,
2054
+ // 0, 0, 0, 1
2055
+ // );
2056
+ // return this;
2057
+ // }
2058
+ // extractRotation(m) {
2059
+ // // this method does not support reflection matrices
2060
+ // const te = this.elements;
2061
+ // const me = m.elements;
2062
+ // const scaleX = 1 / _v1.setFromMatrixColumn(m, 0).length();
2063
+ // const scaleY = 1 / _v1.setFromMatrixColumn(m, 1).length();
2064
+ // const scaleZ = 1 / _v1.setFromMatrixColumn(m, 2).length();
2065
+ // te[0] = me[0] * scaleX;
2066
+ // te[1] = me[1] * scaleX;
2067
+ // te[2] = me[2] * scaleX;
2068
+ // te[3] = 0;
2069
+ // te[4] = me[4] * scaleY;
2070
+ // te[5] = me[5] * scaleY;
2071
+ // te[6] = me[6] * scaleY;
2072
+ // te[7] = 0;
2073
+ // te[8] = me[8] * scaleZ;
2074
+ // te[9] = me[9] * scaleZ;
2075
+ // te[10] = me[10] * scaleZ;
2076
+ // te[11] = 0;
2077
+ // te[12] = 0;
2078
+ // te[13] = 0;
2079
+ // te[14] = 0;
2080
+ // te[15] = 1;
2081
+ // return this;
2082
+ // }
2083
+ // makeRotationFromEuler(euler) {
2084
+ // const te = this.elements;
2085
+ // const x = euler.x, y = euler.y, z = euler.z;
2086
+ // const a = Math.cos(x), b = Math.sin(x);
2087
+ // const c = Math.cos(y), d = Math.sin(y);
2088
+ // const e = Math.cos(z), f = Math.sin(z);
2089
+ // if (euler.order === 'XYZ') {
2090
+ // const ae = a * e, af = a * f, be = b * e, bf = b * f;
2091
+ // te[0] = c * e;
2092
+ // te[4] = -c * f;
2093
+ // te[8] = d;
2094
+ // te[1] = af + be * d;
2095
+ // te[5] = ae - bf * d;
2096
+ // te[9] = -b * c;
2097
+ // te[2] = bf - ae * d;
2098
+ // te[6] = be + af * d;
2099
+ // te[10] = a * c;
2100
+ // } else if (euler.order === 'YXZ') {
2101
+ // const ce = c * e, cf = c * f, de = d * e, df = d * f;
2102
+ // te[0] = ce + df * b;
2103
+ // te[4] = de * b - cf;
2104
+ // te[8] = a * d;
2105
+ // te[1] = a * f;
2106
+ // te[5] = a * e;
2107
+ // te[9] = -b;
2108
+ // te[2] = cf * b - de;
2109
+ // te[6] = df + ce * b;
2110
+ // te[10] = a * c;
2111
+ // } else if (euler.order === 'ZXY') {
2112
+ // const ce = c * e, cf = c * f, de = d * e, df = d * f;
2113
+ // te[0] = ce - df * b;
2114
+ // te[4] = -a * f;
2115
+ // te[8] = de + cf * b;
2116
+ // te[1] = cf + de * b;
2117
+ // te[5] = a * e;
2118
+ // te[9] = df - ce * b;
2119
+ // te[2] = -a * d;
2120
+ // te[6] = b;
2121
+ // te[10] = a * c;
2122
+ // } else if (euler.order === 'ZYX') {
2123
+ // const ae = a * e, af = a * f, be = b * e, bf = b * f;
2124
+ // te[0] = c * e;
2125
+ // te[4] = be * d - af;
2126
+ // te[8] = ae * d + bf;
2127
+ // te[1] = c * f;
2128
+ // te[5] = bf * d + ae;
2129
+ // te[9] = af * d - be;
2130
+ // te[2] = -d;
2131
+ // te[6] = b * c;
2132
+ // te[10] = a * c;
2133
+ // } else if (euler.order === 'YZX') {
2134
+ // const ac = a * c, ad = a * d, bc = b * c, bd = b * d;
2135
+ // te[0] = c * e;
2136
+ // te[4] = bd - ac * f;
2137
+ // te[8] = bc * f + ad;
2138
+ // te[1] = f;
2139
+ // te[5] = a * e;
2140
+ // te[9] = -b * e;
2141
+ // te[2] = -d * e;
2142
+ // te[6] = ad * f + bc;
2143
+ // te[10] = ac - bd * f;
2144
+ // } else if (euler.order === 'XZY') {
2145
+ // const ac = a * c, ad = a * d, bc = b * c, bd = b * d;
2146
+ // te[0] = c * e;
2147
+ // te[4] = -f;
2148
+ // te[8] = d * e;
2149
+ // te[1] = ac * f + bd;
2150
+ // te[5] = a * e;
2151
+ // te[9] = ad * f - bc;
2152
+ // te[2] = bc * f - ad;
2153
+ // te[6] = b * e;
2154
+ // te[10] = bd * f + ac;
2155
+ // }
2156
+ // // bottom row
2157
+ // te[3] = 0;
2158
+ // te[7] = 0;
2159
+ // te[11] = 0;
2160
+ // // last column
2161
+ // te[12] = 0;
2162
+ // te[13] = 0;
2163
+ // te[14] = 0;
2164
+ // te[15] = 1;
2165
+ // return this;
2166
+ // }
2167
+ // makeRotationFromQuaternion(q) {
2168
+ // return this.compose(_zero, q, _one);
2169
+ // }
2170
+ // lookAt(eye, target, up) {
2171
+ // const te = this.elements;
2172
+ // _z.subVectors(eye, target);
2173
+ // if (_z.lengthSq() === 0) {
2174
+ // // eye and target are in the same position
2175
+ // _z.z = 1;
2176
+ // }
2177
+ // _z.normalize();
2178
+ // _x.crossVectors(up, _z);
2179
+ // if (_x.lengthSq() === 0) {
2180
+ // // up and z are parallel
2181
+ // if (Math.abs(up.z) === 1) {
2182
+ // _z.x += 0.0001;
2183
+ // } else {
2184
+ // _z.z += 0.0001;
2185
+ // }
2186
+ // _z.normalize();
2187
+ // _x.crossVectors(up, _z);
2188
+ // }
2189
+ // _x.normalize();
2190
+ // _y.crossVectors(_z, _x);
2191
+ // te[0] = _x.x; te[4] = _y.x; te[8] = _z.x;
2192
+ // te[1] = _x.y; te[5] = _y.y; te[9] = _z.y;
2193
+ // te[2] = _x.z; te[6] = _y.z; te[10] = _z.z;
2194
+ // return this;
2195
+ // }
2196
+ ;
2197
+
2198
+ _proto.multiply = function multiply(m) {
2199
+ return this.multiplyMatrices(this, m);
2200
+ } // premultiply(m) {
2201
+ // return this.multiplyMatrices(m, this);
2202
+ // }
2203
+ // multiplyMatrices(a, b) {
2204
+ // const ae = a.elements;
2205
+ // const be = b.elements;
2206
+ // const te = this.elements;
2207
+ // const a11 = ae[0], a12 = ae[4], a13 = ae[8], a14 = ae[12];
2208
+ // const a21 = ae[1], a22 = ae[5], a23 = ae[9], a24 = ae[13];
2209
+ // const a31 = ae[2], a32 = ae[6], a33 = ae[10], a34 = ae[14];
2210
+ // const a41 = ae[3], a42 = ae[7], a43 = ae[11], a44 = ae[15];
2211
+ // const b11 = be[0], b12 = be[4], b13 = be[8], b14 = be[12];
2212
+ // const b21 = be[1], b22 = be[5], b23 = be[9], b24 = be[13];
2213
+ // const b31 = be[2], b32 = be[6], b33 = be[10], b34 = be[14];
2214
+ // const b41 = be[3], b42 = be[7], b43 = be[11], b44 = be[15];
2215
+ // te[0] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41;
2216
+ // te[4] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42;
2217
+ // te[8] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43;
2218
+ // te[12] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44;
2219
+ // te[1] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41;
2220
+ // te[5] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42;
2221
+ // te[9] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43;
2222
+ // te[13] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44;
2223
+ // te[2] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41;
2224
+ // te[6] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42;
2225
+ // te[10] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43;
2226
+ // te[14] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44;
2227
+ // te[3] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41;
2228
+ // te[7] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42;
2229
+ // te[11] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43;
2230
+ // te[15] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;
2231
+ // return this;
2232
+ // }
2233
+ // multiplyScalar(s) {
2234
+ // const te = this.elements;
2235
+ // te[0] *= s; te[4] *= s; te[8] *= s; te[12] *= s;
2236
+ // te[1] *= s; te[5] *= s; te[9] *= s; te[13] *= s;
2237
+ // te[2] *= s; te[6] *= s; te[10] *= s; te[14] *= s;
2238
+ // te[3] *= s; te[7] *= s; te[11] *= s; te[15] *= s;
2239
+ // return this;
2240
+ // }
2241
+ // determinant() {
2242
+ // const te = this.elements;
2243
+ // const n11 = te[0], n12 = te[4], n13 = te[8], n14 = te[12];
2244
+ // const n21 = te[1], n22 = te[5], n23 = te[9], n24 = te[13];
2245
+ // const n31 = te[2], n32 = te[6], n33 = te[10], n34 = te[14];
2246
+ // const n41 = te[3], n42 = te[7], n43 = te[11], n44 = te[15];
2247
+ // //TODO: make this more efficient
2248
+ // //( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm )
2249
+ // return (
2250
+ // n41 * (
2251
+ // + n14 * n23 * n32
2252
+ // - n13 * n24 * n32
2253
+ // - n14 * n22 * n33
2254
+ // + n12 * n24 * n33
2255
+ // + n13 * n22 * n34
2256
+ // - n12 * n23 * n34
2257
+ // ) +
2258
+ // n42 * (
2259
+ // + n11 * n23 * n34
2260
+ // - n11 * n24 * n33
2261
+ // + n14 * n21 * n33
2262
+ // - n13 * n21 * n34
2263
+ // + n13 * n24 * n31
2264
+ // - n14 * n23 * n31
2265
+ // ) +
2266
+ // n43 * (
2267
+ // + n11 * n24 * n32
2268
+ // - n11 * n22 * n34
2269
+ // - n14 * n21 * n32
2270
+ // + n12 * n21 * n34
2271
+ // + n14 * n22 * n31
2272
+ // - n12 * n24 * n31
2273
+ // ) +
2274
+ // n44 * (
2275
+ // - n13 * n22 * n31
2276
+ // - n11 * n23 * n32
2277
+ // + n11 * n22 * n33
2278
+ // + n13 * n21 * n32
2279
+ // - n12 * n21 * n33
2280
+ // + n12 * n23 * n31
2281
+ // )
2282
+ // );
2283
+ // }
2284
+ // transpose() {
2285
+ // const te = this.elements;
2286
+ // let tmp;
2287
+ // tmp = te[1]; te[1] = te[4]; te[4] = tmp;
2288
+ // tmp = te[2]; te[2] = te[8]; te[8] = tmp;
2289
+ // tmp = te[6]; te[6] = te[9]; te[9] = tmp;
2290
+ // tmp = te[3]; te[3] = te[12]; te[12] = tmp;
2291
+ // tmp = te[7]; te[7] = te[13]; te[13] = tmp;
2292
+ // tmp = te[11]; te[11] = te[14]; te[14] = tmp;
2293
+ // return this;
2294
+ // }
2295
+ // setPosition(x, y, z) {
2296
+ // const te = this.elements;
2297
+ // if (x.isVector3) {
2298
+ // te[12] = x.x;
2299
+ // te[13] = x.y;
2300
+ // te[14] = x.z;
2301
+ // } else {
2302
+ // te[12] = x;
2303
+ // te[13] = y;
2304
+ // te[14] = z;
2305
+ // }
2306
+ // return this;
2307
+ // }
2308
+ // invert() {
2309
+ // // based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm
2310
+ // const te = this.elements,
2311
+ // n11 = te[0], n21 = te[1], n31 = te[2], n41 = te[3],
2312
+ // n12 = te[4], n22 = te[5], n32 = te[6], n42 = te[7],
2313
+ // n13 = te[8], n23 = te[9], n33 = te[10], n43 = te[11],
2314
+ // n14 = te[12], n24 = te[13], n34 = te[14], n44 = te[15],
2315
+ // t11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44,
2316
+ // t12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44,
2317
+ // t13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44,
2318
+ // t14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34;
2319
+ // const det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;
2320
+ // if (det === 0) return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
2321
+ // const detInv = 1 / det;
2322
+ // te[0] = t11 * detInv;
2323
+ // te[1] = (n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44) * detInv;
2324
+ // te[2] = (n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44) * detInv;
2325
+ // te[3] = (n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43) * detInv;
2326
+ // te[4] = t12 * detInv;
2327
+ // te[5] = (n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44) * detInv;
2328
+ // te[6] = (n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44) * detInv;
2329
+ // te[7] = (n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43) * detInv;
2330
+ // te[8] = t13 * detInv;
2331
+ // te[9] = (n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44) * detInv;
2332
+ // te[10] = (n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44) * detInv;
2333
+ // te[11] = (n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43) * detInv;
2334
+ // te[12] = t14 * detInv;
2335
+ // te[13] = (n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34) * detInv;
2336
+ // te[14] = (n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34) * detInv;
2337
+ // te[15] = (n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33) * detInv;
2338
+ // return this;
2339
+ // }
2340
+ // scale(v) {
2341
+ // const te = this.elements;
2342
+ // const x = v.x, y = v.y, z = v.z;
2343
+ // te[0] *= x; te[4] *= y; te[8] *= z;
2344
+ // te[1] *= x; te[5] *= y; te[9] *= z;
2345
+ // te[2] *= x; te[6] *= y; te[10] *= z;
2346
+ // te[3] *= x; te[7] *= y; te[11] *= z;
2347
+ // return this;
2348
+ // }
2349
+ // getMaxScaleOnAxis() {
2350
+ // const te = this.elements;
2351
+ // const scaleXSq = te[0] * te[0] + te[1] * te[1] + te[2] * te[2];
2352
+ // const scaleYSq = te[4] * te[4] + te[5] * te[5] + te[6] * te[6];
2353
+ // const scaleZSq = te[8] * te[8] + te[9] * te[9] + te[10] * te[10];
2354
+ // return Math.sqrt(Math.max(scaleXSq, scaleYSq, scaleZSq));
2355
+ // }
2356
+ // makeTranslation(x, y, z) {
2357
+ // if (x.isVector3) {
2358
+ // this.set(
2359
+ // 1, 0, 0, x.x,
2360
+ // 0, 1, 0, x.y,
2361
+ // 0, 0, 1, x.z,
2362
+ // 0, 0, 0, 1
2363
+ // );
2364
+ // } else {
2365
+ // this.set(
2366
+ // 1, 0, 0, x,
2367
+ // 0, 1, 0, y,
2368
+ // 0, 0, 1, z,
2369
+ // 0, 0, 0, 1
2370
+ // );
2371
+ // }
2372
+ // return this;
2373
+ // }
2374
+ // makeRotationX(theta) {
2375
+ // const c = Math.cos(theta), s = Math.sin(theta);
2376
+ // this.set(
2377
+ // 1, 0, 0, 0,
2378
+ // 0, c, -s, 0,
2379
+ // 0, s, c, 0,
2380
+ // 0, 0, 0, 1
2381
+ // );
2382
+ // return this;
2383
+ // }
2384
+ // makeRotationY(theta) {
2385
+ // const c = Math.cos(theta), s = Math.sin(theta);
2386
+ // this.set(
2387
+ // c, 0, s, 0,
2388
+ // 0, 1, 0, 0,
2389
+ // -s, 0, c, 0,
2390
+ // 0, 0, 0, 1
2391
+ // );
2392
+ // return this;
2393
+ // }
2394
+ // makeRotationZ(theta) {
2395
+ // const c = Math.cos(theta), s = Math.sin(theta);
2396
+ // this.set(
2397
+ // c, -s, 0, 0,
2398
+ // s, c, 0, 0,
2399
+ // 0, 0, 1, 0,
2400
+ // 0, 0, 0, 1
2401
+ // );
2402
+ // return this;
2403
+ // }
2404
+ ;
2405
+
2406
+ _proto.makeRotationAxis = function makeRotationAxis(axis, angle) {
2407
+ // Based on http://www.gamedev.net/reference/articles/article1199.asp
2408
+ var c = Math.cos(angle);
2409
+ var s = Math.sin(angle);
2410
+ var t = 1 - c;
2411
+ var x = axis.x,
2412
+ y = axis.y,
2413
+ z = axis.z;
2414
+ var tx = t * x,
2415
+ ty = t * y;
2416
+ this.set(tx * x + c, tx * y - s * z, tx * z + s * y, 0, tx * y + s * z, ty * y + c, ty * z - s * x, 0, tx * z - s * y, ty * z + s * x, t * z * z + c, 0, 0, 0, 0, 1);
2417
+ return this;
2418
+ } // makeScale(x, y, z) {
2419
+ // this.set(
2420
+ // x, 0, 0, 0,
2421
+ // 0, y, 0, 0,
2422
+ // 0, 0, z, 0,
2423
+ // 0, 0, 0, 1
2424
+ // );
2425
+ // return this;
2426
+ // }
2427
+ // makeShear(xy, xz, yx, yz, zx, zy) {
2428
+ // this.set(
2429
+ // 1, yx, zx, 0,
2430
+ // xy, 1, zy, 0,
2431
+ // xz, yz, 1, 0,
2432
+ // 0, 0, 0, 1
2433
+ // );
2434
+ // return this;
2435
+ // }
2436
+ // compose(position, quaternion, scale) {
2437
+ // const te = this.elements;
2438
+ // const x = quaternion._x, y = quaternion._y, z = quaternion._z, w = quaternion._w;
2439
+ // const x2 = x + x, y2 = y + y, z2 = z + z;
2440
+ // const xx = x * x2, xy = x * y2, xz = x * z2;
2441
+ // const yy = y * y2, yz = y * z2, zz = z * z2;
2442
+ // const wx = w * x2, wy = w * y2, wz = w * z2;
2443
+ // const sx = scale.x, sy = scale.y, sz = scale.z;
2444
+ // te[0] = (1 - (yy + zz)) * sx;
2445
+ // te[1] = (xy + wz) * sx;
2446
+ // te[2] = (xz - wy) * sx;
2447
+ // te[3] = 0;
2448
+ // te[4] = (xy - wz) * sy;
2449
+ // te[5] = (1 - (xx + zz)) * sy;
2450
+ // te[6] = (yz + wx) * sy;
2451
+ // te[7] = 0;
2452
+ // te[8] = (xz + wy) * sz;
2453
+ // te[9] = (yz - wx) * sz;
2454
+ // te[10] = (1 - (xx + yy)) * sz;
2455
+ // te[11] = 0;
2456
+ // te[12] = position.x;
2457
+ // te[13] = position.y;
2458
+ // te[14] = position.z;
2459
+ // te[15] = 1;
2460
+ // return this;
2461
+ // }
2462
+ // decompose(position, quaternion, scale) {
2463
+ // const te = this.elements;
2464
+ // let sx = _v1.set(te[0], te[1], te[2]).length();
2465
+ // const sy = _v1.set(te[4], te[5], te[6]).length();
2466
+ // const sz = _v1.set(te[8], te[9], te[10]).length();
2467
+ // // if determine is negative, we need to invert one scale
2468
+ // const det = this.determinant();
2469
+ // if (det < 0) sx = -sx;
2470
+ // position.x = te[12];
2471
+ // position.y = te[13];
2472
+ // position.z = te[14];
2473
+ // // scale the rotation part
2474
+ // _m1.copy(this);
2475
+ // const invSX = 1 / sx;
2476
+ // const invSY = 1 / sy;
2477
+ // const invSZ = 1 / sz;
2478
+ // _m1.elements[0] *= invSX;
2479
+ // _m1.elements[1] *= invSX;
2480
+ // _m1.elements[2] *= invSX;
2481
+ // _m1.elements[4] *= invSY;
2482
+ // _m1.elements[5] *= invSY;
2483
+ // _m1.elements[6] *= invSY;
2484
+ // _m1.elements[8] *= invSZ;
2485
+ // _m1.elements[9] *= invSZ;
2486
+ // _m1.elements[10] *= invSZ;
2487
+ // quaternion.setFromRotationMatrix(_m1);
2488
+ // scale.x = sx;
2489
+ // scale.y = sy;
2490
+ // scale.z = sz;
2491
+ // return this;
2492
+ // }
2493
+ // makePerspective(left, right, top, bottom, near, far, coordinateSystem = WebGLCoordinateSystem) {
2494
+ // const te = this.elements;
2495
+ // const x = 2 * near / (right - left);
2496
+ // const y = 2 * near / (top - bottom);
2497
+ // const a = (right + left) / (right - left);
2498
+ // const b = (top + bottom) / (top - bottom);
2499
+ // let c, d;
2500
+ // if (coordinateSystem === WebGLCoordinateSystem) {
2501
+ // c = - (far + near) / (far - near);
2502
+ // d = (- 2 * far * near) / (far - near);
2503
+ // } else if (coordinateSystem === WebGPUCoordinateSystem) {
2504
+ // c = - far / (far - near);
2505
+ // d = (- far * near) / (far - near);
2506
+ // } else {
2507
+ // throw new Error('THREE.Matrix4.makePerspective(): Invalid coordinate system: ' + coordinateSystem);
2508
+ // }
2509
+ // te[0] = x; te[4] = 0; te[8] = a; te[12] = 0;
2510
+ // te[1] = 0; te[5] = y; te[9] = b; te[13] = 0;
2511
+ // te[2] = 0; te[6] = 0; te[10] = c; te[14] = d;
2512
+ // te[3] = 0; te[7] = 0; te[11] = - 1; te[15] = 0;
2513
+ // return this;
2514
+ // }
2515
+ // makeOrthographic(left, right, top, bottom, near, far, coordinateSystem = WebGLCoordinateSystem) {
2516
+ // const te = this.elements;
2517
+ // const w = 1.0 / (right - left);
2518
+ // const h = 1.0 / (top - bottom);
2519
+ // const p = 1.0 / (far - near);
2520
+ // const x = (right + left) * w;
2521
+ // const y = (top + bottom) * h;
2522
+ // let z, zInv;
2523
+ // if (coordinateSystem === WebGLCoordinateSystem) {
2524
+ // z = (far + near) * p;
2525
+ // zInv = - 2 * p;
2526
+ // } else if (coordinateSystem === WebGPUCoordinateSystem) {
2527
+ // z = near * p;
2528
+ // zInv = - 1 * p;
2529
+ // } else {
2530
+ // throw new Error('THREE.Matrix4.makeOrthographic(): Invalid coordinate system: ' + coordinateSystem);
2531
+ // }
2532
+ // te[0] = 2 * w; te[4] = 0; te[8] = 0; te[12] = - x;
2533
+ // te[1] = 0; te[5] = 2 * h; te[9] = 0; te[13] = - y;
2534
+ // te[2] = 0; te[6] = 0; te[10] = zInv; te[14] = - z;
2535
+ // te[3] = 0; te[7] = 0; te[11] = 0; te[15] = 1;
2536
+ // return this;
2537
+ // }
2538
+ ;
2539
+
2540
+ _proto.equals = function equals(matrix) {
2541
+ var te = this.elements;
2542
+ var me = matrix.elements;
2543
+
2544
+ for (var i = 0; i < 16; i++) {
2545
+ if (te[i] !== me[i]) return false;
2546
+ }
2547
+
2548
+ return true;
2549
+ } // fromArray(array, offset = 0) {
2550
+ // for (let i = 0; i < 16; i++) {
2551
+ // this.elements[i] = array[i + offset];
2552
+ // }
2553
+ // return this;
2554
+ // }
2555
+ // toArray(array = [], offset = 0) {
2556
+ // const te = this.elements;
2557
+ // array[offset] = te[0];
2558
+ // array[offset + 1] = te[1];
2559
+ // array[offset + 2] = te[2];
2560
+ // array[offset + 3] = te[3];
2561
+ // array[offset + 4] = te[4];
2562
+ // array[offset + 5] = te[5];
2563
+ // array[offset + 6] = te[6];
2564
+ // array[offset + 7] = te[7];
2565
+ // array[offset + 8] = te[8];
2566
+ // array[offset + 9] = te[9];
2567
+ // array[offset + 10] = te[10];
2568
+ // array[offset + 11] = te[11];
2569
+ // array[offset + 12] = te[12];
2570
+ // array[offset + 13] = te[13];
2571
+ // array[offset + 14] = te[14];
2572
+ // array[offset + 15] = te[15];
2573
+ // return array;
2574
+ // }
2575
+ ;
2576
+
2577
+ return Matrix4;
2578
+ }(); // const _v1 = new Vector3();
2579
+
2580
+ function _inheritsLoose(subClass, superClass) {
2581
+ subClass.prototype = Object.create(superClass.prototype);
2582
+ subClass.prototype.constructor = subClass;
2583
+
2584
+ _setPrototypeOf(subClass, superClass);
2585
+ }
2586
+
2587
+ function _setPrototypeOf(o, p) {
2588
+ _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {
2589
+ o.__proto__ = p;
2590
+ return o;
2591
+ };
2592
+ return _setPrototypeOf(o, p);
2593
+ }
2594
+
2595
+ // code copy from https://github.com/mrdoob/three.js/blob/dev/src/extras/core/Curve.js
2596
+ // import * as MathUtils from '../../math/MathUtils.js';
2597
+ // import { Vector2 } from '../../math/Vector2.js';
2598
+ // import { Vector3 } from '../../math/Vector3.js';
2599
+ // import { Matrix4 } from '../../math/Matrix4.js';
2600
+
2601
+ /**
2602
+ * Extensible curve object.
2603
+ *
2604
+ * Some common of curve methods:
2605
+ * .getPoint( t, optionalTarget ), .getTangent( t, optionalTarget )
2606
+ * .getPointAt( u, optionalTarget ), .getTangentAt( u, optionalTarget )
2607
+ * .getPoints(), .getSpacedPoints()
2608
+ * .getLength()
2609
+ * .updateArcLengths()
2610
+ *
2611
+ * This following curves inherit from THREE.Curve:
2612
+ *
2613
+ * -- 2D curves --
2614
+ * THREE.ArcCurve
2615
+ * THREE.CubicBezierCurve
2616
+ * THREE.EllipseCurve
2617
+ * THREE.LineCurve
2618
+ * THREE.QuadraticBezierCurve
2619
+ * THREE.SplineCurve
2620
+ *
2621
+ * -- 3D curves --
2622
+ * THREE.CatmullRomCurve3
2623
+ * THREE.CubicBezierCurve3
2624
+ * THREE.LineCurve3
2625
+ * THREE.QuadraticBezierCurve3
2626
+ *
2627
+ * A series of curves can be represented as a THREE.CurvePath.
2628
+ *
2629
+ **/
2630
+ var Curve = /*#__PURE__*/function () {
2631
+ function Curve() {
2632
+ this.type = 'Curve';
2633
+ this.arcLengthDivisions = 200;
2634
+ } // Virtual base class method to overwrite and implement in subclasses
2635
+
2636
+
2637
+ var _proto = Curve.prototype;
2638
+
2639
+ _proto.getPoint = function getPoint() {
2640
+ console.warn('THREE.Curve: .getPoint() not implemented.');
2641
+ return null;
2642
+ } // Get point at relative position in curve according to arc length
2643
+ // - u [0 .. 1]
2644
+ ;
2645
+
2646
+ _proto.getPointAt = function getPointAt(u, optionalTarget) {
2647
+ var t = this.getUtoTmapping(u);
2648
+ return this.getPoint(t, optionalTarget);
2649
+ } // Get sequence of points using getPoint( t )
2650
+ ;
2651
+
2652
+ _proto.getPoints = function getPoints(divisions) {
2653
+ if (divisions === void 0) {
2654
+ divisions = 5;
2655
+ }
2656
+
2657
+ var points = [];
2658
+
2659
+ for (var d = 0; d <= divisions; d++) {
2660
+ points.push(this.getPoint(d / divisions));
2661
+ }
2662
+
2663
+ return points;
2664
+ } // // Get sequence of points using getPointAt( u )
2665
+ // getSpacedPoints(divisions = 5) {
2666
+ // const points = [];
2667
+ // for (let d = 0; d <= divisions; d++) {
2668
+ // points.push(this.getPointAt(d / divisions));
2669
+ // }
2670
+ // return points;
2671
+ // }
2672
+ // Get total curve arc length
2673
+ ;
2674
+
2675
+ _proto.getLength = function getLength() {
2676
+ var lengths = this.getLengths();
2677
+ return lengths[lengths.length - 1];
2678
+ } // Get list of cumulative segment lengths
2679
+ ;
2680
+
2681
+ _proto.getLengths = function getLengths(divisions) {
2682
+ if (divisions === void 0) {
2683
+ divisions = this.arcLengthDivisions;
2684
+ }
2685
+
2686
+ if (this.cacheArcLengths && this.cacheArcLengths.length === divisions + 1 && !this.needsUpdate) {
2687
+ return this.cacheArcLengths;
2688
+ }
2689
+
2690
+ this.needsUpdate = false;
2691
+ var cache = [];
2692
+ var current,
2693
+ last = this.getPoint(0);
2694
+ var sum = 0;
2695
+ cache.push(0);
2696
+
2697
+ for (var p = 1; p <= divisions; p++) {
2698
+ current = this.getPoint(p / divisions);
2699
+ sum += current.distanceTo(last);
2700
+ cache.push(sum);
2701
+ last = current;
2702
+ }
2703
+
2704
+ this.cacheArcLengths = cache;
2705
+ return cache; // { sums: cache, sum: sum }; Sum is in the last element.
2706
+ } // updateArcLengths() {
2707
+ // this.needsUpdate = true;
2708
+ // this.getLengths();
2709
+ // }
2710
+ // Given u ( 0 .. 1 ), get a t to find p. This gives you points which are equidistant
2711
+ ;
2712
+
2713
+ _proto.getUtoTmapping = function getUtoTmapping(u, distance) {
2714
+ var arcLengths = this.getLengths();
2715
+ var i = 0;
2716
+ var il = arcLengths.length;
2717
+ var targetArcLength; // The targeted u distance value to get
2718
+
2719
+ if (distance) {
2720
+ targetArcLength = distance;
2721
+ } else {
2722
+ targetArcLength = u * arcLengths[il - 1];
2723
+ } // binary search for the index with largest value smaller than target u distance
2724
+
2725
+
2726
+ var low = 0,
2727
+ high = il - 1,
2728
+ comparison;
2729
+
2730
+ while (low <= high) {
2731
+ i = Math.floor(low + (high - low) / 2); // less likely to overflow, though probably not issue here, JS doesn't really have integers, all numbers are floats
2732
+
2733
+ comparison = arcLengths[i] - targetArcLength;
2734
+
2735
+ if (comparison < 0) {
2736
+ low = i + 1;
2737
+ } else if (comparison > 0) {
2738
+ high = i - 1;
2739
+ } else {
2740
+ high = i;
2741
+ break; // DONE
2742
+ }
2743
+ }
2744
+
2745
+ i = high;
2746
+
2747
+ if (arcLengths[i] === targetArcLength) {
2748
+ return i / (il - 1);
2749
+ } // we could get finer grain at lengths, or use simple interpolation between two points
2750
+
2751
+
2752
+ var lengthBefore = arcLengths[i];
2753
+ var lengthAfter = arcLengths[i + 1];
2754
+ var segmentLength = lengthAfter - lengthBefore; // determine where we are between the 'before' and 'after' points
2755
+
2756
+ var segmentFraction = (targetArcLength - lengthBefore) / segmentLength; // add that fractional amount to t
2757
+
2758
+ var t = (i + segmentFraction) / (il - 1);
2759
+ return t;
2760
+ } // Returns a unit vector tangent at t
2761
+ // In case any sub curve does not implement its tangent derivation,
2762
+ // 2 points a small delta apart will be used to find its gradient
2763
+ // which seems to give a reasonable approximation
2764
+ // getTangent(t, optionalTarget) {
2765
+ // const delta = 0.0001;
2766
+ // let t1 = t - delta;
2767
+ // let t2 = t + delta;
2768
+ // // Capping in case of danger
2769
+ // if (t1 < 0) t1 = 0;
2770
+ // if (t2 > 1) t2 = 1;
2771
+ // const pt1 = this.getPoint(t1);
2772
+ // const pt2 = this.getPoint(t2);
2773
+ // const tangent = optionalTarget || ((pt1.isVector2) ? new Vector2() : new Vector3());
2774
+ // tangent.copy(pt2).sub(pt1).normalize();
2775
+ // return tangent;
2776
+ // }
2777
+ // getTangentAt(u, optionalTarget) {
2778
+ // const t = this.getUtoTmapping(u);
2779
+ // return this.getTangent(t, optionalTarget);
2780
+ // }
2781
+ // computeFrenetFrames(segments, closed) {
2782
+ // // see http://www.cs.indiana.edu/pub/techreports/TR425.pdf
2783
+ // const normal = new Vector3();
2784
+ // const tangents = [];
2785
+ // const normals = [];
2786
+ // const binormals = [];
2787
+ // const vec = new Vector3();
2788
+ // const mat = new Matrix4();
2789
+ // // compute the tangent vectors for each segment on the curve
2790
+ // for (let i = 0; i <= segments; i++) {
2791
+ // const u = i / segments;
2792
+ // tangents[i] = this.getTangentAt(u, new Vector3());
2793
+ // }
2794
+ // // select an initial normal vector perpendicular to the first tangent vector,
2795
+ // // and in the direction of the minimum tangent xyz component
2796
+ // normals[0] = new Vector3();
2797
+ // binormals[0] = new Vector3();
2798
+ // let min = Number.MAX_VALUE;
2799
+ // const tx = Math.abs(tangents[0].x);
2800
+ // const ty = Math.abs(tangents[0].y);
2801
+ // const tz = Math.abs(tangents[0].z);
2802
+ // if (tx <= min) {
2803
+ // min = tx;
2804
+ // normal.set(1, 0, 0);
2805
+ // }
2806
+ // if (ty <= min) {
2807
+ // min = ty;
2808
+ // normal.set(0, 1, 0);
2809
+ // }
2810
+ // if (tz <= min) {
2811
+ // normal.set(0, 0, 1);
2812
+ // }
2813
+ // vec.crossVectors(tangents[0], normal).normalize();
2814
+ // normals[0].crossVectors(tangents[0], vec);
2815
+ // binormals[0].crossVectors(tangents[0], normals[0]);
2816
+ // // compute the slowly-varying normal and binormal vectors for each segment on the curve
2817
+ // for (let i = 1; i <= segments; i++) {
2818
+ // normals[i] = normals[i - 1].clone();
2819
+ // binormals[i] = binormals[i - 1].clone();
2820
+ // vec.crossVectors(tangents[i - 1], tangents[i]);
2821
+ // if (vec.length() > Number.EPSILON) {
2822
+ // vec.normalize();
2823
+ // const theta = Math.acos(MathUtils.clamp(tangents[i - 1].dot(tangents[i]), - 1, 1)); // clamp for floating pt errors
2824
+ // normals[i].applyMatrix4(mat.makeRotationAxis(vec, theta));
2825
+ // }
2826
+ // binormals[i].crossVectors(tangents[i], normals[i]);
2827
+ // }
2828
+ // // if the curve is closed, postprocess the vectors so the first and last normal vectors are the same
2829
+ // if (closed === true) {
2830
+ // let theta = Math.acos(MathUtils.clamp(normals[0].dot(normals[segments]), - 1, 1));
2831
+ // theta /= segments;
2832
+ // if (tangents[0].dot(vec.crossVectors(normals[0], normals[segments])) > 0) {
2833
+ // theta = - theta;
2834
+ // }
2835
+ // for (let i = 1; i <= segments; i++) {
2836
+ // // twist a little...
2837
+ // normals[i].applyMatrix4(mat.makeRotationAxis(tangents[i], theta * i));
2838
+ // binormals[i].crossVectors(tangents[i], normals[i]);
2839
+ // }
2840
+ // }
2841
+ // return {
2842
+ // tangents: tangents,
2843
+ // normals: normals,
2844
+ // binormals: binormals
2845
+ // };
2846
+ // }
2847
+ // clone() {
2848
+ // return new this.constructor().copy(this);
2849
+ // }
2850
+ // copy(source) {
2851
+ // this.arcLengthDivisions = source.arcLengthDivisions;
2852
+ // return this;
2853
+ // }
2854
+ // toJSON() {
2855
+ // const data = {
2856
+ // metadata: {
2857
+ // version: 4.6,
2858
+ // type: 'Curve',
2859
+ // generator: 'Curve.toJSON'
2860
+ // }
2861
+ // };
2862
+ // data.arcLengthDivisions = this.arcLengthDivisions;
2863
+ // data.type = this.type;
2864
+ // return data;
2865
+ // }
2866
+ // fromJSON(json) {
2867
+ // this.arcLengthDivisions = json.arcLengthDivisions;
2868
+ // return this;
2869
+ // }
2870
+ ;
2871
+
2872
+ return Curve;
2873
+ }();
2874
+
2875
+ /**
2876
+ * // code copy from https://github.com/mrdoob/three.js/blob/dev/src/extras/core/Interpolations.js
2877
+ * Bezier Curves formulas obtained from
2878
+ * https://en.wikipedia.org/wiki/B%C3%A9zier_curve
2879
+ */
2880
+
2881
+
2882
+ function QuadraticBezierP0(t, p) {
2883
+ var k = 1 - t;
2884
+ return k * k * p;
2885
+ }
2886
+
2887
+ function QuadraticBezierP1(t, p) {
2888
+ return 2 * (1 - t) * t * p;
2889
+ }
2890
+
2891
+ function QuadraticBezierP2(t, p) {
2892
+ return t * t * p;
2893
+ }
2894
+
2895
+ function QuadraticBezier(t, p0, p1, p2) {
2896
+ return QuadraticBezierP0(t, p0) + QuadraticBezierP1(t, p1) + QuadraticBezierP2(t, p2);
2897
+ } //
2898
+
2899
+ var QuadraticBezierCurve3 = /*#__PURE__*/function (_Curve) {
2900
+ _inheritsLoose(QuadraticBezierCurve3, _Curve);
2901
+
2902
+ function QuadraticBezierCurve3(v0, v1, v2) {
2903
+ var _this;
2904
+
2905
+ if (v0 === void 0) {
2906
+ v0 = new Vector3();
2907
+ }
2908
+
2909
+ if (v1 === void 0) {
2910
+ v1 = new Vector3();
2911
+ }
2912
+
2913
+ if (v2 === void 0) {
2914
+ v2 = new Vector3();
2915
+ }
2916
+
2917
+ _this = _Curve.call(this) || this;
2918
+ _this.isQuadraticBezierCurve3 = true;
2919
+ _this.type = 'QuadraticBezierCurve3';
2920
+ _this.v0 = v0;
2921
+ _this.v1 = v1;
2922
+ _this.v2 = v2;
2923
+ return _this;
2924
+ }
2925
+
2926
+ var _proto = QuadraticBezierCurve3.prototype;
2927
+
2928
+ _proto.getPoint = function getPoint(t, optionalTarget) {
2929
+ if (optionalTarget === void 0) {
2930
+ optionalTarget = new Vector3();
2931
+ }
2932
+
2933
+ var point = optionalTarget;
2934
+ var v0 = this.v0,
2935
+ v1 = this.v1,
2936
+ v2 = this.v2;
2937
+ point.set(QuadraticBezier(t, v0.x, v1.x, v2.x), QuadraticBezier(t, v0.y, v1.y, v2.y), QuadraticBezier(t, v0.z, v1.z, v2.z));
2938
+ return point;
2939
+ } // copy(source) {
2940
+ // super.copy(source);
2941
+ // this.v0.copy(source.v0);
2942
+ // this.v1.copy(source.v1);
2943
+ // this.v2.copy(source.v2);
2944
+ // return this;
2945
+ // }
2946
+ // toJSON() {
2947
+ // const data = super.toJSON();
2948
+ // data.v0 = this.v0.toArray();
2949
+ // data.v1 = this.v1.toArray();
2950
+ // data.v2 = this.v2.toArray();
2951
+ // return data;
2952
+ // }
2953
+ // fromJSON(json) {
2954
+ // super.fromJSON(json);
2955
+ // this.v0.fromArray(json.v0);
2956
+ // this.v1.fromArray(json.v1);
2957
+ // this.v2.fromArray(json.v2);
2958
+ // return this;
2959
+ // }
2960
+ ;
2961
+
2962
+ return QuadraticBezierCurve3;
2963
+ }(Curve);
2964
+
2965
+ /* eslint-disable no-tabs */
2966
+ var helpVec3_1 = new Vector3();
2967
+ var helpVec3_2 = new Vector3();
2968
+ var helpVec3_3 = new Vector3();
2969
+ var helpMat4 = new Matrix4();
2970
+ var helpCurve = new QuadraticBezierCurve3();
2971
+
2972
+ function _getCornerBezierCurve(last, current, next, cornerRadius, firstCorner, out) {
2973
+ var lastDir = helpVec3_1.subVectors(current, last);
2974
+ var nextDir = helpVec3_2.subVectors(next, current);
2975
+ var lastDirLength = lastDir.length();
2976
+ var nextDirLength = nextDir.length();
2977
+ lastDir.normalize();
2978
+ nextDir.normalize(); // cornerRadius can not bigger then lineDistance / 2, auto fix this
2979
+
2980
+ var v0Dist = Math.min((firstCorner ? lastDirLength / 2 : lastDirLength) * 0.999999, cornerRadius);
2981
+ out.v0.copy(current).sub(lastDir.multiplyScalar(v0Dist));
2982
+ out.v1.copy(current);
2983
+ var v2Dist = Math.min(nextDirLength / 2 * 0.999999, cornerRadius);
2984
+ out.v2.copy(current).add(nextDir.multiplyScalar(v2Dist));
2985
+ return out;
2986
+ }
2987
+ /**
2988
+ * PathPointList
2989
+ * input points to generate a PathPoint list
2990
+ */
2991
+
2992
+
2993
+ var PathPointList = /*#__PURE__*/function () {
2994
+ function PathPointList() {
2995
+ this.array = []; // path point array
2996
+
2997
+ this.count = 0;
2998
+ }
2999
+ /**
3000
+ * Set points
3001
+ * @param {THREE.Vector3[]} points key points array
3002
+ * @param {number} cornerRadius? the corner radius. set 0 to disable round corner. default is 0.1
3003
+ * @param {number} cornerSplit? the corner split. default is 10.
3004
+ * @param {number} up? force up. default is auto up (calculate by tangent).
3005
+ * @param {boolean} close? close path. default is false.
3006
+ */
3007
+
3008
+
3009
+ var _proto = PathPointList.prototype;
3010
+
3011
+ _proto.set = function set(points, cornerRadius, cornerSplit, up, close) {
3012
+ if (cornerRadius === void 0) {
3013
+ cornerRadius = 0.1;
3014
+ }
3015
+
3016
+ if (cornerSplit === void 0) {
3017
+ cornerSplit = 10;
3018
+ }
3019
+
3020
+ if (up === void 0) {
3021
+ up = null;
3022
+ }
3023
+
3024
+ if (close === void 0) {
3025
+ close = false;
3026
+ }
3027
+
3028
+ points = points.slice(0);
3029
+
3030
+ if (points.length < 2) {
3031
+ console.warn('PathPointList: points length less than 2.');
3032
+ this.count = 0;
3033
+ return;
3034
+ } // Auto close
3035
+
3036
+
3037
+ if (close && !points[0].equals(points[points.length - 1])) {
3038
+ points.push(new Vector3().copy(points[0]));
3039
+ } // Generate path point list
3040
+
3041
+
3042
+ for (var i = 0, l = points.length; i < l; i++) {
3043
+ if (i === 0) {
3044
+ this._start(points[i], points[i + 1], up);
3045
+ } else if (i === l - 1) {
3046
+ if (close) {
3047
+ // Connect end point and start point
3048
+ this._corner(points[i], points[1], cornerRadius, cornerSplit, up); // Fix start point
3049
+
3050
+
3051
+ var dist = this.array[0].dist; // should not copy dist
3052
+
3053
+ this.array[0].copy(this.array[this.count - 1]);
3054
+ this.array[0].dist = dist;
3055
+ } else {
3056
+ this._end(points[i]);
3057
+ }
3058
+ } else {
3059
+ this._corner(points[i], points[i + 1], cornerRadius, cornerSplit, up);
3060
+ }
3061
+ }
3062
+ }
3063
+ /**
3064
+ * Get distance of this path
3065
+ * @return {number}
3066
+ */
3067
+ ;
3068
+
3069
+ _proto.distance = function distance() {
3070
+ if (this.count > 0) {
3071
+ return this.array[this.count - 1].dist;
3072
+ }
3073
+
3074
+ return 0;
3075
+ };
3076
+
3077
+ _proto._getByIndex = function _getByIndex(index) {
3078
+ if (!this.array[index]) {
3079
+ this.array[index] = new PathPoint();
3080
+ }
3081
+
3082
+ return this.array[index];
3083
+ };
3084
+
3085
+ _proto._start = function _start(current, next, up) {
3086
+ this.count = 0;
3087
+
3088
+ var point = this._getByIndex(this.count);
3089
+
3090
+ point.pos.copy(current);
3091
+ point.dir.subVectors(next, current); // init start up dir
3092
+
3093
+ if (up) {
3094
+ point.up.copy(up);
3095
+ } else {
3096
+ // select an initial normal vector perpendicular to the first tangent vector
3097
+ var min = Number.MAX_VALUE;
3098
+ var tx = Math.abs(point.dir.x);
3099
+ var ty = Math.abs(point.dir.y);
3100
+ var tz = Math.abs(point.dir.z);
3101
+
3102
+ if (tx < min) {
3103
+ min = tx;
3104
+ point.up.set(1, 0, 0);
3105
+ }
3106
+
3107
+ if (ty < min) {
3108
+ min = ty;
3109
+ point.up.set(0, 1, 0);
3110
+ }
3111
+
3112
+ if (tz < min) {
3113
+ point.up.set(0, 0, 1);
3114
+ }
3115
+ }
3116
+
3117
+ point.right.crossVectors(point.dir, point.up).normalize();
3118
+ point.up.crossVectors(point.right, point.dir).normalize();
3119
+ point.dist = 0;
3120
+ point.widthScale = 1;
3121
+ point.sharp = false;
3122
+ point.dir.normalize();
3123
+ this.count++;
3124
+ };
3125
+
3126
+ _proto._end = function _end(current) {
3127
+ var lastPoint = this.array[this.count - 1];
3128
+
3129
+ var point = this._getByIndex(this.count);
3130
+
3131
+ point.pos.copy(current);
3132
+ point.dir.subVectors(current, lastPoint.pos);
3133
+ var dist = point.dir.length();
3134
+ point.dir.normalize();
3135
+ point.up.copy(lastPoint.up); // copy last up
3136
+
3137
+ var vec = helpVec3_1.crossVectors(lastPoint.dir, point.dir);
3138
+
3139
+ if (vec.length() > Number.EPSILON) {
3140
+ vec.normalize();
3141
+ var theta = Math.acos(Math.min(Math.max(lastPoint.dir.dot(point.dir), -1), 1)); // clamp for floating pt errors
3142
+
3143
+ point.up.applyMatrix4(helpMat4.makeRotationAxis(vec, theta));
3144
+ }
3145
+
3146
+ point.right.crossVectors(point.dir, point.up).normalize();
3147
+ point.dist = lastPoint.dist + dist;
3148
+ point.widthScale = 1;
3149
+ point.sharp = false;
3150
+ this.count++;
3151
+ };
3152
+
3153
+ _proto._corner = function _corner(current, next, cornerRadius, cornerSplit, up) {
3154
+ if (cornerRadius > 0 && cornerSplit > 0) {
3155
+ var lastPoint = this.array[this.count - 1];
3156
+
3157
+ var curve = _getCornerBezierCurve(lastPoint.pos, current, next, cornerRadius, this.count - 1 === 0, helpCurve);
3158
+
3159
+ var samplerPoints = curve.getPoints(cornerSplit); // TODO optimize
3160
+
3161
+ for (var f = 0; f < cornerSplit; f++) {
3162
+ this._sharpCorner(samplerPoints[f], samplerPoints[f + 1], up, f === 0 ? 1 : 0);
3163
+ }
3164
+
3165
+ if (!samplerPoints[cornerSplit].equals(next)) {
3166
+ this._sharpCorner(samplerPoints[cornerSplit], next, up, 2);
3167
+ }
3168
+ } else {
3169
+ this._sharpCorner(current, next, up, 0, true);
3170
+ }
3171
+ } // dirType: 0 - use middle dir / 1 - use last dir / 2- use next dir
3172
+ ;
3173
+
3174
+ _proto._sharpCorner = function _sharpCorner(current, next, up, dirType, sharp) {
3175
+ if (dirType === void 0) {
3176
+ dirType = 0;
3177
+ }
3178
+
3179
+ if (sharp === void 0) {
3180
+ sharp = false;
3181
+ }
3182
+
3183
+ var lastPoint = this.array[this.count - 1];
3184
+
3185
+ var point = this._getByIndex(this.count);
3186
+
3187
+ var lastDir = helpVec3_1.subVectors(current, lastPoint.pos);
3188
+ var nextDir = helpVec3_2.subVectors(next, current);
3189
+ var lastDirLength = lastDir.length();
3190
+ lastDir.normalize();
3191
+ nextDir.normalize();
3192
+ point.pos.copy(current);
3193
+
3194
+ if (dirType === 1) {
3195
+ point.dir.copy(lastDir);
3196
+ } else if (dirType === 2) {
3197
+ point.dir.copy(nextDir);
3198
+ } else {
3199
+ point.dir.addVectors(lastDir, nextDir);
3200
+ point.dir.normalize();
3201
+ }
3202
+
3203
+ if (up) {
3204
+ if (point.dir.dot(up) === 1) {
3205
+ point.right.crossVectors(nextDir, up).normalize();
3206
+ } else {
3207
+ point.right.crossVectors(point.dir, up).normalize();
3208
+ }
3209
+
3210
+ point.up.crossVectors(point.right, point.dir).normalize();
3211
+ } else {
3212
+ point.up.copy(lastPoint.up);
3213
+ var vec = helpVec3_3.crossVectors(lastPoint.dir, point.dir);
3214
+
3215
+ if (vec.length() > Number.EPSILON) {
3216
+ vec.normalize();
3217
+ var theta = Math.acos(Math.min(Math.max(lastPoint.dir.dot(point.dir), -1), 1)); // clamp for floating pt errors
3218
+
3219
+ point.up.applyMatrix4(helpMat4.makeRotationAxis(vec, theta));
3220
+ }
3221
+
3222
+ point.right.crossVectors(point.dir, point.up).normalize();
3223
+ }
3224
+
3225
+ point.dist = lastPoint.dist + lastDirLength;
3226
+
3227
+ var _cos = lastDir.dot(nextDir);
3228
+
3229
+ point.widthScale = Math.min(1 / Math.sqrt((1 + _cos) / 2), 1.415) || 1;
3230
+ point.sharp = Math.abs(_cos - 1) > 0.05 && sharp;
3231
+ this.count++;
3232
+ };
3233
+
3234
+ return PathPointList;
3235
+ }();
3236
+
3237
+ var UP = new Vector3(0, 0, 1);
3238
+ function expandPaths(lines, options) {
3239
+ options = Object.assign({}, {
3240
+ lineWidth: 1,
3241
+ cornerRadius: 0,
3242
+ cornerSplit: 10
3243
+ }, options);
3244
+ var results = lines.map(function (line) {
3245
+ var points = line.map(function (p) {
3246
+ var x = p[0],
3247
+ y = p[1],
3248
+ z = p[2];
3249
+ return new Vector3(x, y, z || 0);
3250
+ });
3251
+ var pathPointList = new PathPointList();
3252
+ pathPointList.set(points, options.cornerRadius, options.cornerSplit, UP);
3253
+ var result = generatePathVertexData(pathPointList, options);
3254
+ result.line = line;
3255
+ result.position = new Float32Array(result.points);
3256
+ result.indices = new Uint32Array(result.index);
3257
+ result.uv = new Float32Array(result.uvs);
3258
+ result.normal = new Float32Array(result.normal);
3259
+ return result;
3260
+ });
3261
+ var result = merge(results);
3262
+ result.lines = lines;
3263
+ return result;
3264
+ } // Vertex Data Generate Functions
3265
+ // code copy from https://github.com/shawn0326/three.path/blob/master/src/PathGeometry.js
3266
+
3267
+ function generatePathVertexData(pathPointList, options) {
3268
+ var width = options.lineWidth || 0.1;
3269
+ var progress = 1;
3270
+ var halfWidth = width / 2;
3271
+ var sideWidth = width;
3272
+ var totalDistance = pathPointList.distance();
3273
+ var progressDistance = progress * totalDistance;
3274
+
3275
+ if (totalDistance === 0) {
3276
+ return null;
3277
+ }
3278
+
3279
+ var sharpUvOffset = halfWidth / sideWidth; // const sharpUvOffset2 = halfWidth / totalDistance;
3280
+
3281
+ var count = 0; // modify data
3282
+
3283
+ var position = [];
3284
+ var normal = [];
3285
+ var uv = [];
3286
+ var indices = [];
3287
+ var verticesCount = 0;
3288
+ var right = new Vector3();
3289
+ var left = new Vector3(); // for sharp corners
3290
+
3291
+ var leftOffset = new Vector3();
3292
+ var rightOffset = new Vector3();
3293
+ var tempPoint1 = new Vector3();
3294
+ var tempPoint2 = new Vector3();
3295
+
3296
+ function addVertices(pathPoint) {
3297
+ var first = position.length === 0;
3298
+ var sharpCorner = pathPoint.sharp && !first;
3299
+ var uvDist = pathPoint.dist / sideWidth; // const uvDist2 = pathPoint.dist / totalDistance;
3300
+
3301
+ var dir = pathPoint.dir;
3302
+ var up = pathPoint.up;
3303
+ var _right = pathPoint.right;
3304
+
3305
+ {
3306
+ right.copy(_right).multiplyScalar(halfWidth * pathPoint.widthScale);
3307
+ }
3308
+
3309
+ {
3310
+ left.copy(_right).multiplyScalar(-halfWidth * pathPoint.widthScale);
3311
+ }
3312
+
3313
+ right.add(pathPoint.pos);
3314
+ left.add(pathPoint.pos);
3315
+
3316
+ if (sharpCorner) {
3317
+ leftOffset.fromArray(position, position.length - 6).sub(left);
3318
+ rightOffset.fromArray(position, position.length - 3).sub(right);
3319
+ var leftDist = leftOffset.length();
3320
+ var rightDist = rightOffset.length();
3321
+ var sideOffset = leftDist - rightDist;
3322
+ var longerOffset, longEdge;
3323
+
3324
+ if (sideOffset > 0) {
3325
+ longerOffset = leftOffset;
3326
+ longEdge = left;
3327
+ } else {
3328
+ longerOffset = rightOffset;
3329
+ longEdge = right;
3330
+ }
3331
+
3332
+ tempPoint1.copy(longerOffset).setLength(Math.abs(sideOffset)).add(longEdge); // eslint-disable-next-line prefer-const
3333
+
3334
+ var _cos = tempPoint2.copy(longEdge).sub(tempPoint1).normalize().dot(dir); // eslint-disable-next-line prefer-const
3335
+
3336
+
3337
+ var _len = tempPoint2.copy(longEdge).sub(tempPoint1).length(); // eslint-disable-next-line prefer-const
3338
+
3339
+
3340
+ var _dist = _cos * _len * 2;
3341
+
3342
+ tempPoint2.copy(dir).setLength(_dist).add(tempPoint1);
3343
+
3344
+ if (sideOffset > 0) {
3345
+ position.push(tempPoint1.x, tempPoint1.y, tempPoint1.z, // 6
3346
+ right.x, right.y, right.z, // 5
3347
+ left.x, left.y, left.z, // 4
3348
+ right.x, right.y, right.z, // 3
3349
+ tempPoint2.x, tempPoint2.y, tempPoint2.z, // 2
3350
+ right.x, right.y, right.z // 1
3351
+ );
3352
+ verticesCount += 6;
3353
+ indices.push(verticesCount - 6, verticesCount - 8, verticesCount - 7, verticesCount - 6, verticesCount - 7, verticesCount - 5, verticesCount - 4, verticesCount - 6, verticesCount - 5, verticesCount - 2, verticesCount - 4, verticesCount - 1);
3354
+ count += 12;
3355
+ } else {
3356
+ position.push(left.x, left.y, left.z, // 6
3357
+ tempPoint1.x, tempPoint1.y, tempPoint1.z, // 5
3358
+ left.x, left.y, left.z, // 4
3359
+ right.x, right.y, right.z, // 3
3360
+ left.x, left.y, left.z, // 2
3361
+ tempPoint2.x, tempPoint2.y, tempPoint2.z // 1
3362
+ );
3363
+ verticesCount += 6;
3364
+ indices.push(verticesCount - 6, verticesCount - 8, verticesCount - 7, verticesCount - 6, verticesCount - 7, verticesCount - 5, verticesCount - 6, verticesCount - 5, verticesCount - 3, verticesCount - 2, verticesCount - 3, verticesCount - 1);
3365
+ count += 12;
3366
+ }
3367
+
3368
+ normal.push(up.x, up.y, up.z, up.x, up.y, up.z, up.x, up.y, up.z, up.x, up.y, up.z, up.x, up.y, up.z, up.x, up.y, up.z);
3369
+ uv.push(uvDist - sharpUvOffset, 0, uvDist - sharpUvOffset, 1, uvDist, 0, uvDist, 1, uvDist + sharpUvOffset, 0, uvDist + sharpUvOffset, 1); // if (generateUv2) {
3370
+ // uv2.push(
3371
+ // uvDist2 - sharpUvOffset2, 0,
3372
+ // uvDist2 - sharpUvOffset2, 1,
3373
+ // uvDist2, 0,
3374
+ // uvDist2, 1,
3375
+ // uvDist2 + sharpUvOffset2, 0,
3376
+ // uvDist2 + sharpUvOffset2, 1
3377
+ // );
3378
+ // }
3379
+ } else {
3380
+ position.push(left.x, left.y, left.z, right.x, right.y, right.z);
3381
+ normal.push(up.x, up.y, up.z, up.x, up.y, up.z);
3382
+ uv.push(uvDist, 0, uvDist, 1); // if (generateUv2) {
3383
+ // uv2.push(
3384
+ // uvDist2, 0,
3385
+ // uvDist2, 1
3386
+ // );
3387
+ // }
3388
+
3389
+ verticesCount += 2;
3390
+
3391
+ if (!first) {
3392
+ indices.push(verticesCount - 2, verticesCount - 4, verticesCount - 3, verticesCount - 2, verticesCount - 3, verticesCount - 1);
3393
+ count += 6;
3394
+ }
3395
+ }
3396
+ }
3397
+
3398
+ var lastPoint;
3399
+
3400
+ if (progressDistance > 0) {
3401
+ for (var i = 0; i < pathPointList.count; i++) {
3402
+ var pathPoint = pathPointList.array[i];
3403
+
3404
+ if (pathPoint.dist > progressDistance) {
3405
+ var prevPoint = pathPointList.array[i - 1];
3406
+ lastPoint = new PathPoint(); // linear lerp for progress
3407
+
3408
+ var alpha = (progressDistance - prevPoint.dist) / (pathPoint.dist - prevPoint.dist);
3409
+ lastPoint.lerpPathPoints(prevPoint, pathPoint, alpha);
3410
+ addVertices(lastPoint);
3411
+ break;
3412
+ } else {
3413
+ addVertices(pathPoint);
3414
+ }
3415
+ }
3416
+ } else {
3417
+ lastPoint = pathPointList.array[0];
3418
+ }
3419
+
3420
+ return {
3421
+ points: position,
3422
+ normal: normal,
3423
+ uvs: uv,
3424
+ index: indices,
3425
+ count: count
3426
+ };
3427
+ }
3428
+
3429
+ export { cylinder, expandLine, expandPaths, extrudePolygons, extrudePolylines };