@react-three/drei 7.20.1 → 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/Instances.cjs.js +1 -1
- package/core/Instances.js +1 -1
- 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 +5 -5
package/core/Instances.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"),a=require("react-merge-refs"),
|
|
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"),a=require("react-merge-refs"),c=require("react-composer"),u=require("../helpers/Position.cjs.js");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function s(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 i=o(e),l=s(t),f=s(r),d=o(a),m=o(c);let y,p;const x=f.createContext(null),b=new l.Matrix4,h=new l.Matrix4,g=new l.Matrix4,M=new l.Color,v=new l.Vector3,w=new l.Quaternion,j=new l.Vector3,A=f.forwardRef((({context:e,children:t,...r},a)=>{f.useMemo((()=>n.extend({Position:u.Position})),[]);const c=f.useRef(),{subscribe:o}=f.useContext(e||x);return f.useLayoutEffect((()=>o(c)),[]),f.createElement("position",i.default({ref:d.default([a,c])},r),t)})),E=f.forwardRef((({children:e,range:t,limit:r=1e3,frames:a=1/0,...c},u)=>{const[{context:o,instance:s}]=f.useState((()=>{const e=f.createContext(null);return{context:e,instance:f.forwardRef(((t,r)=>f.createElement(A,i.default({context:e},t,{ref:r}))))}})),m=f.useRef(null),[E,O]=f.useState([]),[[q,P]]=f.useState((()=>{const e=new Float32Array(16*r);for(y=0;y<r;y++)g.identity().toArray(e,16*y);return[e,new Float32Array([...new Array(3*r)].map((()=>1)))]}));f.useLayoutEffect((()=>{m.current.count=m.current.instanceMatrix.updateRange.count=m.current.instanceColor.updateRange.count=Math.min(r,void 0!==t?t:r,E.length)}),[E,t]),f.useEffect((()=>{m.current.instanceMatrix.needsUpdate=!0}));let _=0;n.useFrame((e=>{if(a===1/0||_<a){for(m.current.updateMatrix(),m.current.updateMatrixWorld(),b.copy(m.current.matrixWorld).invert(),y=0;y<E.length;y++)p=E[y].current,p.matrixWorld.decompose(v,w,j),h.compose(v,w,j).premultiply(b),h.equals(g.fromArray(q,16*y))||(h.toArray(q,16*y),m.current.instanceMatrix.needsUpdate=!0),p.color.equals(M.fromArray(P,3*y))||(p.color.toArray(P,3*y),m.current.instanceColor.needsUpdate=!0);_++}}));const C=f.useMemo((()=>{const e={};for(y=0;y<E.length;y++){var t;Object.assign(e,null==(t=E[y].current)?void 0:t.__r3f.handlers)}return Object.keys(e).reduce(((e,t)=>({...e,[t]:e=>{var r,n,a;const c=null==(r=E[e.instanceId])?void 0:r.current;return null==c||null==(n=c.__r3f)||null==(a=n.handlers)?void 0:a[t]({...e,object:c})}})),{})}),[e,E]),R=f.useMemo((()=>({subscribe:e=>(O((t=>[...t,e])),()=>O((t=>t.filter((t=>t.current!==e.current)))))})),[]);return f.createElement("instancedMesh",i.default({matrixAutoUpdate:!1,ref:d.default([u,m]),args:[null,null,0]},C,c),f.createElement("instancedBufferAttribute",{attach:"instanceMatrix",count:q.length/16,array:q,itemSize:16,usage:l.DynamicDrawUsage}),f.createElement("instancedBufferAttribute",{attach:"instanceColor",count:P.length/3,array:P,itemSize:3,usage:l.DynamicDrawUsage}),"function"==typeof e?f.createElement(o.Provider,{value:R},e(s)):f.createElement(x.Provider,{value:R},e))}));exports.Instance=A,exports.Instances=E,exports.Merged=function({meshes:e,children:t,...r}){const n=Array.isArray(e);if(!n)for(const t of Object.keys(e))e[t].isMesh||delete e[t];return f.createElement(m.default,{components:(n?e:Object.values(e)).map((({geometry:e,material:t})=>f.createElement(E,i.default({key:e.uuid,geometry:e,material:t},r))))},(r=>n?t(...r):t(Object.keys(e).filter((t=>e[t].isMesh)).reduce(((e,t,n)=>({...e,[t]:r[n]})),{}))))};
|
package/core/Instances.js
CHANGED
|
@@ -153,7 +153,7 @@ function Merged({
|
|
|
153
153
|
}) {
|
|
154
154
|
const isArray = Array.isArray(meshes); // Filter out meshes from collections, which may contain non-meshes
|
|
155
155
|
|
|
156
|
-
if (!isArray) for (
|
|
156
|
+
if (!isArray) for (const key of Object.keys(meshes)) if (!meshes[key].isMesh) delete meshes[key];
|
|
157
157
|
return /*#__PURE__*/React.createElement(Composer, {
|
|
158
158
|
components: (isArray ? meshes : Object.values(meshes)).map(({
|
|
159
159
|
geometry,
|
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 };
|