@react-three/drei 7.20.4 → 7.20.5
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/core/Segments.cjs.js +1 -1
- package/core/Segments.d.ts +19 -4
- package/core/Segments.js +35 -42
- package/index.cjs.js +1 -1
- package/package.json +1 -1
package/core/Segments.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("three"),r=require("react"),n=require("@react-three/fiber"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("three"),r=require("react"),n=require("react-merge-refs"),o=require("@react-three/fiber"),i=require("three-stdlib");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function a(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var c=s(e),u=a(t),l=a(r),f=s(n);const m=l.createContext(null),d=e=>e instanceof u.Vector3?e.toArray():e,b=l.forwardRef(((e,t)=>{const{limit:r=1e3,lineWidth:n=1,children:s,...a}=e,[f,b]=l.useState([]),[h]=l.useState((()=>new i.Line2)),[v]=l.useState((()=>new i.LineMaterial)),[p]=l.useState((()=>new i.LineSegmentsGeometry)),[w]=l.useState((()=>new u.Vector2(512,512))),[S]=l.useState((()=>Array(6*r).fill(0))),[g]=l.useState((()=>Array(6*r).fill(0))),j=l.useMemo((()=>({subscribe:e=>(b((t=>[...t,e])),()=>b((t=>t.filter((t=>t.current!==e.current)))))})),[]);return o.useFrame((()=>{for(let o=0;o<r;o++){var e;const r=null==(e=f[o])?void 0:e.current,i=r?d(r.start):[0,0,0],s=r?d(r.end):[0,0,0],a=r?(n=r.color)instanceof u.Color?n.toArray():n:[1,1,1];for(var t=0;t<3;t++)S[6*o+t]=i[t],S[6*o+t+3]=s[t],g[6*o+t]=a[t],g[6*o+t+3]=a[t]}var n;p.setColors(g),p.setPositions(S),h.computeLineDistances()})),l.createElement("primitive",{object:h,ref:t},l.createElement("primitive",{object:p,attach:"geometry"}),l.createElement("primitive",c.default({object:v,attach:"material",vertexColors:!0,resolution:w,linewidth:n},a)),l.createElement(m.Provider,{value:j},s))}));class h{constructor(){this.color=new u.Color("white"),this.start=new u.Vector3(0,0,0),this.end=new u.Vector3(0,0,0)}}const v=l.forwardRef(((e,t)=>{const r=l.useContext(m);if(!r)throw"Segment must used inside Segments component.";const n=l.useRef();return l.useMemo((()=>o.extend({SegmentObject:h})),[]),l.useLayoutEffect((()=>r.subscribe(n)),[]),l.createElement("segmentObject",c.default({ref:f.default([n,t])},e))}));exports.Segment=v,exports.Segments=b;
|
package/core/Segments.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as THREE from 'three';
|
|
2
2
|
import * as React from 'react';
|
|
3
|
+
import { ReactThreeFiber } from '@react-three/fiber';
|
|
3
4
|
import { Line2 } from 'three-stdlib';
|
|
4
5
|
declare type SegmentsProps = {
|
|
5
6
|
limit?: number;
|
|
@@ -7,10 +8,24 @@ declare type SegmentsProps = {
|
|
|
7
8
|
children: React.ReactNode;
|
|
8
9
|
};
|
|
9
10
|
declare type Segment = {
|
|
10
|
-
start: THREE.Vector3
|
|
11
|
-
end: THREE.Vector3
|
|
12
|
-
color?: THREE.Color
|
|
11
|
+
start: THREE.Vector3;
|
|
12
|
+
end: THREE.Vector3;
|
|
13
|
+
color?: THREE.Color;
|
|
13
14
|
};
|
|
15
|
+
declare type SegmentProps = JSX.IntrinsicElements['segmentObject'] & Segment;
|
|
14
16
|
declare const Segments: React.ForwardRefExoticComponent<SegmentsProps & React.RefAttributes<Line2>>;
|
|
15
|
-
declare
|
|
17
|
+
declare global {
|
|
18
|
+
namespace JSX {
|
|
19
|
+
interface IntrinsicElements {
|
|
20
|
+
segmentObject: ReactThreeFiber.Object3DNode<SegmentObject, typeof SegmentObject>;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
declare class SegmentObject {
|
|
25
|
+
color: THREE.Color;
|
|
26
|
+
start: THREE.Vector3;
|
|
27
|
+
end: THREE.Vector3;
|
|
28
|
+
constructor();
|
|
29
|
+
}
|
|
30
|
+
declare const Segment: React.ForwardRefExoticComponent<Pick<SegmentProps, "attach" | "attachArray" | "attachObject" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "color" | "onClick" | "onContextMenu" | "onDoubleClick" | "onPointerDown" | "onPointerMove" | "onPointerUp" | "onPointerCancel" | "onPointerEnter" | "onPointerLeave" | "onPointerOver" | "onPointerOut" | "onWheel" | "onPointerMissed" | "end" | "start"> & React.RefAttributes<Segment>>;
|
|
16
31
|
export { Segments, Segment };
|
package/core/Segments.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import _extends from '@babel/runtime/helpers/esm/extends';
|
|
2
2
|
import * as THREE from 'three';
|
|
3
3
|
import * as React from 'react';
|
|
4
|
-
import
|
|
4
|
+
import mergeRefs from 'react-merge-refs';
|
|
5
|
+
import { useFrame, extend } from '@react-three/fiber';
|
|
5
6
|
import { Line2, LineMaterial, LineSegmentsGeometry } from 'three-stdlib';
|
|
6
7
|
|
|
7
8
|
const context = /*#__PURE__*/React.createContext(null);
|
|
@@ -22,8 +23,8 @@ const Segments = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {
|
|
|
22
23
|
const [material] = React.useState(() => new LineMaterial());
|
|
23
24
|
const [geometry] = React.useState(() => new LineSegmentsGeometry());
|
|
24
25
|
const [resolution] = React.useState(() => new THREE.Vector2(512, 512));
|
|
25
|
-
const [positions] = React.useState(() => Array(limit).fill(0));
|
|
26
|
-
const [colors] = React.useState(() => Array(limit).fill(
|
|
26
|
+
const [positions] = React.useState(() => Array(limit * 6).fill(0));
|
|
27
|
+
const [colors] = React.useState(() => Array(limit * 6).fill(0));
|
|
27
28
|
const api = React.useMemo(() => ({
|
|
28
29
|
subscribe: ref => {
|
|
29
30
|
setSegments(segments => [...segments, ref]);
|
|
@@ -31,24 +32,22 @@ const Segments = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {
|
|
|
31
32
|
}
|
|
32
33
|
}), []);
|
|
33
34
|
useFrame(() => {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
segments.forEach((segmentRef, i) => {
|
|
37
|
-
const segment = segmentRef.current;
|
|
35
|
+
for (let i = 0; i < limit; i++) {
|
|
36
|
+
var _segments$i;
|
|
38
37
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
38
|
+
const segment = (_segments$i = segments[i]) == null ? void 0 : _segments$i.current;
|
|
39
|
+
const segmentStart = segment ? arrPos(segment.start) : [0, 0, 0];
|
|
40
|
+
const segmentEnd = segment ? arrPos(segment.end) : [0, 0, 0];
|
|
41
|
+
const segmentColor = segment ? arrColor(segment.color) : [1, 1, 1]; //console.log(segmentStart, segmentEnd, segmentColor)
|
|
43
42
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
}
|
|
43
|
+
for (var j = 0; j < 3; j++) {
|
|
44
|
+
positions[i * 6 + j] = segmentStart[j];
|
|
45
|
+
positions[i * 6 + j + 3] = segmentEnd[j];
|
|
46
|
+
colors[i * 6 + j] = segmentColor[j];
|
|
47
|
+
colors[i * 6 + j + 3] = segmentColor[j];
|
|
50
48
|
}
|
|
51
|
-
}
|
|
49
|
+
}
|
|
50
|
+
|
|
52
51
|
geometry.setColors(colors);
|
|
53
52
|
geometry.setPositions(positions);
|
|
54
53
|
line.computeLineDistances();
|
|
@@ -69,33 +68,27 @@ const Segments = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {
|
|
|
69
68
|
value: api
|
|
70
69
|
}, children));
|
|
71
70
|
});
|
|
71
|
+
|
|
72
|
+
class SegmentObject {
|
|
73
|
+
constructor() {
|
|
74
|
+
this.color = new THREE.Color('white');
|
|
75
|
+
this.start = new THREE.Vector3(0, 0, 0);
|
|
76
|
+
this.end = new THREE.Vector3(0, 0, 0);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
}
|
|
80
|
+
|
|
72
81
|
const Segment = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {
|
|
73
|
-
const {
|
|
74
|
-
start,
|
|
75
|
-
end,
|
|
76
|
-
color
|
|
77
|
-
} = props;
|
|
78
82
|
const api = React.useContext(context);
|
|
79
83
|
if (!api) throw 'Segment must used inside Segments component.';
|
|
80
|
-
const ref = React.useRef(
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
React.
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
start && Object.assign(currRef.current, {
|
|
89
|
-
start
|
|
90
|
-
});
|
|
91
|
-
end && Object.assign(currRef.current, {
|
|
92
|
-
end
|
|
93
|
-
});
|
|
94
|
-
color && Object.assign(currRef.current, {
|
|
95
|
-
color
|
|
96
|
-
});
|
|
97
|
-
}, [start, end, color]);
|
|
98
|
-
return null;
|
|
84
|
+
const ref = React.useRef();
|
|
85
|
+
React.useMemo(() => extend({
|
|
86
|
+
SegmentObject
|
|
87
|
+
}), []);
|
|
88
|
+
React.useLayoutEffect(() => api.subscribe(ref), []);
|
|
89
|
+
return /*#__PURE__*/React.createElement("segmentObject", _extends({
|
|
90
|
+
ref: mergeRefs([ref, forwardedRef])
|
|
91
|
+
}, props));
|
|
99
92
|
});
|
|
100
93
|
|
|
101
94
|
export { Segment, Segments };
|