@ifiwas/standard-view 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.prettierignore +67 -0
- package/.prettierrc +12 -0
- package/CHANGELOG.md +42 -0
- package/LICENSE +8 -0
- package/README.md +199 -0
- package/debug-storybook.log +179 -0
- package/declarations.d.ts +17 -0
- package/dist/standard-view.es.js +9522 -0
- package/dist/standard-view.es.js.map +1 -0
- package/dist/standard-view.umd.js +41 -0
- package/dist/standard-view.umd.js.map +1 -0
- package/fonts/gentilis.bold.typeface.json +1 -0
- package/fonts/gentilis.typeface.json +1 -0
- package/fonts/helvetiker.bold.typeface.json +1 -0
- package/fonts/helvetiker.typeface.json +1 -0
- package/fonts/optimer.bold.typeface.json +1 -0
- package/fonts/optimer.typeface.json +1 -0
- package/images.d.ts +7 -0
- package/index.js +10 -0
- package/lib/controls/OrbitControls.d.ts +9 -0
- package/lib/controls/OrbitControls.js +761 -0
- package/lib/controls/index.d.ts +1 -0
- package/lib/controls/index.js +18 -0
- package/lib/groups/Arrow.d.ts +19 -0
- package/lib/groups/Arrow.js +134 -0
- package/lib/groups/Axis.d.ts +20 -0
- package/lib/groups/Axis.js +147 -0
- package/lib/groups/BoundingBox.d.ts +9 -0
- package/lib/groups/BoundingBox.js +143 -0
- package/lib/groups/Camera.d.ts +32 -0
- package/lib/groups/Camera.js +477 -0
- package/lib/groups/Capsule.d.ts +9 -0
- package/lib/groups/Capsule.js +112 -0
- package/lib/groups/FBX.d.ts +9 -0
- package/lib/groups/FBX.js +213 -0
- package/lib/groups/GLTF.d.ts +9 -0
- package/lib/groups/GLTF.js +198 -0
- package/lib/groups/Group.d.ts +63 -0
- package/lib/groups/Group.js +426 -0
- package/lib/groups/OBJ.d.ts +11 -0
- package/lib/groups/OBJ.js +252 -0
- package/lib/groups/PCD.d.ts +9 -0
- package/lib/groups/PCD.js +82 -0
- package/lib/groups/Path.d.ts +19 -0
- package/lib/groups/Path.js +160 -0
- package/lib/groups/index.d.ts +11 -0
- package/lib/groups/index.js +91 -0
- package/lib/index.d.ts +6 -0
- package/lib/index.js +298 -0
- package/lib/lights/AmbientLight.d.ts +8 -0
- package/lib/lights/AmbientLight.js +37 -0
- package/lib/lights/DirectionalLight.d.ts +8 -0
- package/lib/lights/DirectionalLight.js +43 -0
- package/lib/lights/HemisphereLight.d.ts +13 -0
- package/lib/lights/HemisphereLight.js +108 -0
- package/lib/lights/LightWithShadows.d.ts +24 -0
- package/lib/lights/LightWithShadows.js +188 -0
- package/lib/lights/PointLight.d.ts +9 -0
- package/lib/lights/PointLight.js +47 -0
- package/lib/lights/RectAreaLight.d.ts +13 -0
- package/lib/lights/RectAreaLight.js +177 -0
- package/lib/lights/SpotLight.d.ts +10 -0
- package/lib/lights/SpotLight.js +49 -0
- package/lib/lights/index.d.ts +6 -0
- package/lib/lights/index.js +48 -0
- package/lib/primitives/Box.d.ts +6 -0
- package/lib/primitives/Box.js +43 -0
- package/lib/primitives/Circle.d.ts +10 -0
- package/lib/primitives/Circle.js +85 -0
- package/lib/primitives/Cylinder.d.ts +15 -0
- package/lib/primitives/Cylinder.js +180 -0
- package/lib/primitives/Label.d.ts +18 -0
- package/lib/primitives/Label.js +189 -0
- package/lib/primitives/Line.d.ts +19 -0
- package/lib/primitives/Line.js +173 -0
- package/lib/primitives/Mesh.d.ts +72 -0
- package/lib/primitives/Mesh.js +642 -0
- package/lib/primitives/Plane.d.ts +7 -0
- package/lib/primitives/Plane.js +47 -0
- package/lib/primitives/Polygon.d.ts +8 -0
- package/lib/primitives/Polygon.js +75 -0
- package/lib/primitives/Quad.d.ts +9 -0
- package/lib/primitives/Quad.js +110 -0
- package/lib/primitives/Sphere.d.ts +14 -0
- package/lib/primitives/Sphere.js +92 -0
- package/lib/primitives/Text.d.ts +20 -0
- package/lib/primitives/Text.js +285 -0
- package/lib/primitives/Triangle.d.ts +8 -0
- package/lib/primitives/Triangle.js +83 -0
- package/lib/primitives/index.d.ts +12 -0
- package/lib/primitives/index.js +90 -0
- package/lib/shaders/index.d.ts +0 -0
- package/lib/shaders/index.js +2 -0
- package/lib/types/three-jsx.d.js +5 -0
- package/lib/utils/constants.js +181 -0
- package/lib/utils/events.d.ts +22 -0
- package/lib/utils/events.js +98 -0
- package/lib/utils/hooks.d.ts +8 -0
- package/lib/utils/hooks.js +96 -0
- package/lib/utils/index.d.ts +3 -0
- package/lib/utils/index.js +110 -0
- package/lib/utils/interfaces.d.ts +9 -0
- package/lib/utils/interfaces.js +5 -0
- package/lib/utils/math.d.ts +12 -0
- package/lib/utils/math.js +31 -0
- package/lib/utils/performance.d.ts +7 -0
- package/lib/utils/performance.js +114 -0
- package/lib/utils/styles.js +10 -0
- package/lib/utils/util.d.ts +76 -0
- package/lib/utils/util.js +290 -0
- package/lib/views/ContextBridge.d.ts +23 -0
- package/lib/views/ContextBridge.js +98 -0
- package/lib/views/SceneCamera.d.ts +7 -0
- package/lib/views/SceneCamera.js +52 -0
- package/lib/views/SetBackground.d.ts +9 -0
- package/lib/views/SetBackground.js +90 -0
- package/lib/views/SetControls.d.ts +19 -0
- package/lib/views/SetControls.js +173 -0
- package/lib/views/SetRenderer.d.ts +25 -0
- package/lib/views/SetRenderer.js +66 -0
- package/lib/views/SetShadows.d.ts +7 -0
- package/lib/views/SetShadows.js +48 -0
- package/lib/views/View3D.d.ts +21 -0
- package/lib/views/View3D.js +289 -0
- package/lib/views/ViewContext.d.ts +23 -0
- package/lib/views/ViewContext.js +55 -0
- package/lib/views/index.d.ts +2 -0
- package/lib/views/index.js +20 -0
- package/netlify.toml +15 -0
- package/package.json +110 -0
- package/tsconfig.json +42 -0
- package/tsconfig.prod.json +3 -0
- package/tsconfig.test.json +6 -0
- package/vite.config.ts +37 -0
|
@@ -0,0 +1,426 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports["default"] = void 0;
|
|
8
|
+
exports.generateGroupProps = generateGroupProps;
|
|
9
|
+
var React = _interopRequireWildcard(require("react"));
|
|
10
|
+
var THREE = _interopRequireWildcard(require("three"));
|
|
11
|
+
var _constants = require("../utils/constants");
|
|
12
|
+
var _ViewContext = require("../views/ViewContext");
|
|
13
|
+
var _math = require("../utils/math");
|
|
14
|
+
var _events = require("../utils/events");
|
|
15
|
+
var _util = require("../utils/util");
|
|
16
|
+
var _excluded = ["position", "scale", "rotation", "eulerOrder", "roll", "quaternion", "normal", "materialType", "view3DEnvMap", "color", "hoverColor", "opacity", "transparent", "wireframe", "edges", "edgeColor", "edgeThresholdAngle", "side", "groupMember", "castShadow", "receiveShadow", "animation", "state", "onClick", "onDoubleClick", "onWheel", "onPointerUp", "onPointerDown", "onPointerOver", "onPointerOut", "onPointerMove", "hoverable", "mousePropagation", "clickSensitivity", "ignoreMouseEvents", "children"],
|
|
17
|
+
_excluded2 = ["position", "scale", "rotation", "normal", "roll", "quaternion", "animation", "state", "onClick", "onDoubleClick", "onWheel", "onPointerUp", "onPointerDown", "onPointerMove", "onPointerOver", "onPointerOut", "mousePropagation", "clickSensitivity", "ignoreMouseEvents"]; // Group.tsx
|
|
18
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
19
|
+
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
20
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
21
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
22
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
23
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
24
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
25
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
26
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
27
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
28
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
29
|
+
function _construct(t, e, r) { if (_isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments); var o = [null]; o.push.apply(o, e); var p = new (t.bind.apply(t, o))(); return r && _setPrototypeOf(p, r.prototype), p; }
|
|
30
|
+
function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
|
|
31
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
32
|
+
function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
|
|
33
|
+
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
34
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
35
|
+
function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
|
|
36
|
+
function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
|
|
37
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
38
|
+
function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
|
|
39
|
+
function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
|
|
40
|
+
var useState = React.useState,
|
|
41
|
+
useEffect = React.useEffect,
|
|
42
|
+
useRef = React.useRef,
|
|
43
|
+
useContext = React.useContext,
|
|
44
|
+
useCallback = React.useCallback,
|
|
45
|
+
useMemo = React.useMemo,
|
|
46
|
+
memo = React.memo,
|
|
47
|
+
forwardRef = React.forwardRef;
|
|
48
|
+
/**
|
|
49
|
+
* Group
|
|
50
|
+
*
|
|
51
|
+
* In Standard View, Group is a wrapper of @react-three/fiber/three.js's group.
|
|
52
|
+
* This component allows composing children components into one large
|
|
53
|
+
* manipulatable mesh-like component. This is useful for creating 3D assets
|
|
54
|
+
* comprised of many pieces and then perform transformations and animations
|
|
55
|
+
* on the whole asset.
|
|
56
|
+
*
|
|
57
|
+
* Group will extract away the group properties for the group manipulations
|
|
58
|
+
* at a group level.
|
|
59
|
+
*/
|
|
60
|
+
var Group = forwardRef(function Group(_ref, ref) {
|
|
61
|
+
var _ref$position = _ref.position,
|
|
62
|
+
position = _ref$position === void 0 ? [0, 0, 0] : _ref$position,
|
|
63
|
+
_ref$scale = _ref.scale,
|
|
64
|
+
scale = _ref$scale === void 0 ? [1, 1, 1] : _ref$scale,
|
|
65
|
+
_ref$rotation = _ref.rotation,
|
|
66
|
+
rotation = _ref$rotation === void 0 ? [0, 0, 0] : _ref$rotation,
|
|
67
|
+
_ref$eulerOrder = _ref.eulerOrder,
|
|
68
|
+
eulerOrder = _ref$eulerOrder === void 0 ? _constants.EULER_ORDERS.XYZ : _ref$eulerOrder,
|
|
69
|
+
_ref$roll = _ref.roll,
|
|
70
|
+
roll = _ref$roll === void 0 ? 0 : _ref$roll,
|
|
71
|
+
quaternion = _ref.quaternion,
|
|
72
|
+
_ref$normal = _ref.normal,
|
|
73
|
+
normal = _ref$normal === void 0 ? _constants.DEFAULT_NORMAL : _ref$normal,
|
|
74
|
+
materialType = _ref.materialType,
|
|
75
|
+
view3DEnvMap = _ref.view3DEnvMap,
|
|
76
|
+
color = _ref.color,
|
|
77
|
+
hoverColor = _ref.hoverColor,
|
|
78
|
+
opacity = _ref.opacity,
|
|
79
|
+
transparent = _ref.transparent,
|
|
80
|
+
wireframe = _ref.wireframe,
|
|
81
|
+
edges = _ref.edges,
|
|
82
|
+
edgeColor = _ref.edgeColor,
|
|
83
|
+
edgeThresholdAngle = _ref.edgeThresholdAngle,
|
|
84
|
+
side = _ref.side,
|
|
85
|
+
_ref$groupMember = _ref.groupMember,
|
|
86
|
+
groupMember = _ref$groupMember === void 0 ? false : _ref$groupMember,
|
|
87
|
+
castShadow = _ref.castShadow,
|
|
88
|
+
receiveShadow = _ref.receiveShadow,
|
|
89
|
+
animation = _ref.animation,
|
|
90
|
+
state = _ref.state,
|
|
91
|
+
onClick = _ref.onClick,
|
|
92
|
+
onDoubleClick = _ref.onDoubleClick,
|
|
93
|
+
onWheel = _ref.onWheel,
|
|
94
|
+
onPointerUp = _ref.onPointerUp,
|
|
95
|
+
onPointerDown = _ref.onPointerDown,
|
|
96
|
+
onPointerOver = _ref.onPointerOver,
|
|
97
|
+
onPointerOut = _ref.onPointerOut,
|
|
98
|
+
onPointerMove = _ref.onPointerMove,
|
|
99
|
+
_ref$hoverable = _ref.hoverable,
|
|
100
|
+
hoverable = _ref$hoverable === void 0 ? true : _ref$hoverable,
|
|
101
|
+
_ref$mousePropagation = _ref.mousePropagation,
|
|
102
|
+
mousePropagation = _ref$mousePropagation === void 0 ? false : _ref$mousePropagation,
|
|
103
|
+
_ref$clickSensitivity = _ref.clickSensitivity,
|
|
104
|
+
clickSensitivity = _ref$clickSensitivity === void 0 ? 250 : _ref$clickSensitivity,
|
|
105
|
+
_ref$ignoreMouseEvent = _ref.ignoreMouseEvents,
|
|
106
|
+
ignoreMouseEvents = _ref$ignoreMouseEvent === void 0 ? false : _ref$ignoreMouseEvent,
|
|
107
|
+
children = _ref.children,
|
|
108
|
+
otherProps = _objectWithoutProperties(_ref, _excluded);
|
|
109
|
+
// Canvas Properties
|
|
110
|
+
var canvasProps = useContext(_ViewContext.ViewContext);
|
|
111
|
+
|
|
112
|
+
// Rotation
|
|
113
|
+
var _quaternion = useMemo(function updateQuaternion() {
|
|
114
|
+
// Normal
|
|
115
|
+
// @ts-ignore:T2345 // spread
|
|
116
|
+
var normalVec = _construct(THREE.Vector3, _toConsumableArray(normal)).normalize();
|
|
117
|
+
var normalQ = new THREE.Quaternion().setFromUnitVectors(_constants.DEFAULT_NORMAL_VEC3, normalVec);
|
|
118
|
+
|
|
119
|
+
// Rotation / Quaternion
|
|
120
|
+
var rotationQ = new THREE.Quaternion();
|
|
121
|
+
if (quaternion == null) {
|
|
122
|
+
// Convert Euler Rotation to Quaternion
|
|
123
|
+
// @ts-ignore:T2345 // spread
|
|
124
|
+
var _eulerOrder = eulerOrder.toUpperCase();
|
|
125
|
+
_eulerOrder = _constants.EULER_ORDERS[_eulerOrder] ? _eulerOrder : _constants.EULER_ORDERS.XYZ;
|
|
126
|
+
var euler = _construct(THREE.Euler, _toConsumableArray(rotation).concat([_eulerOrder]));
|
|
127
|
+
rotationQ = new THREE.Quaternion().setFromEuler(euler);
|
|
128
|
+
} else {
|
|
129
|
+
rotationQ = (0, _util.toQuaternion)(quaternion);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// Roll
|
|
133
|
+
var rollQ = new THREE.Quaternion().setFromAxisAngle(_constants.DEFAULT_NORMAL_VEC3, roll);
|
|
134
|
+
|
|
135
|
+
// q = normalQ * rotationQ * rollQ
|
|
136
|
+
var q = new THREE.Quaternion(); // Identity
|
|
137
|
+
q.premultiply(rollQ);
|
|
138
|
+
q.premultiply(rotationQ);
|
|
139
|
+
q.premultiply(normalQ);
|
|
140
|
+
return q;
|
|
141
|
+
}, [quaternion, rotation, eulerOrder, normal, roll]);
|
|
142
|
+
|
|
143
|
+
// Scale
|
|
144
|
+
var _scale = useMemo(function updateScale() {
|
|
145
|
+
// Invalid Scale Warning
|
|
146
|
+
if (!Array.isArray(scale) || scale.length !== 3) {
|
|
147
|
+
/* eslint-disable-next-line no-console */
|
|
148
|
+
console.warn("[Mesh] scale must be a 3x1 array of numbers! scale: ".concat(scale));
|
|
149
|
+
|
|
150
|
+
// @ts-ignore:T2345 // spread
|
|
151
|
+
return [1, 1, 1];
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// Handle Zero Scale Input
|
|
155
|
+
if (!scale[0] || !scale[1] || !scale[2] || Math.abs(scale[0]) < _math.EPS || Math.abs(scale[1]) < _math.EPS || Math.abs(scale[2]) < _math.EPS) {
|
|
156
|
+
/* eslint-disable-next-line no-console */
|
|
157
|
+
console.warn("[Mesh] scale elements must be non-zero! scale: ".concat(scale));
|
|
158
|
+
return scale.map(function (value) {
|
|
159
|
+
return Math.max(value, _math.EPS);
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
return scale;
|
|
163
|
+
}, [scale]);
|
|
164
|
+
|
|
165
|
+
// Color
|
|
166
|
+
var _useState = useState(color),
|
|
167
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
168
|
+
_color = _useState2[0],
|
|
169
|
+
setColor = _useState2[1];
|
|
170
|
+
useEffect(function updateColor() {
|
|
171
|
+
setColor(color);
|
|
172
|
+
}, [color]);
|
|
173
|
+
|
|
174
|
+
// Ref
|
|
175
|
+
var groupRef = useRef(null); // Hooks must be deterministic
|
|
176
|
+
var group = ref || groupRef;
|
|
177
|
+
|
|
178
|
+
// State
|
|
179
|
+
var _useState3 = useState(state != null ? _objectSpread({
|
|
180
|
+
lastClickTime: 0
|
|
181
|
+
}, state) : {
|
|
182
|
+
lastClickTime: 0
|
|
183
|
+
}),
|
|
184
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
185
|
+
_state = _useState4[0],
|
|
186
|
+
setState = _useState4[1];
|
|
187
|
+
|
|
188
|
+
// ignoreMouseEvents
|
|
189
|
+
var _ignoreMouseEvents = useMemo(function updateIgnoreMouseEvents() {
|
|
190
|
+
return ignoreMouseEvents || groupMember && !hoverColor && !onClick && !onDoubleClick && !onPointerOver && !onPointerOut && !onPointerDown && !onPointerUp && !onPointerMove && !onWheel;
|
|
191
|
+
}, [ignoreMouseEvents, groupMember, hoverColor, onClick, onDoubleClick, onPointerOver, onPointerOut, onPointerDown, onPointerUp, onPointerMove, onWheel]);
|
|
192
|
+
|
|
193
|
+
// ---------------------- //
|
|
194
|
+
// ----- Events ----- //
|
|
195
|
+
// ---------------------- //
|
|
196
|
+
// Event Props
|
|
197
|
+
var eventProps = useMemo(function updateEventProps() {
|
|
198
|
+
return _objectSpread({
|
|
199
|
+
mesh: group,
|
|
200
|
+
group: group,
|
|
201
|
+
state: _state,
|
|
202
|
+
setState: setState
|
|
203
|
+
}, canvasProps);
|
|
204
|
+
}, [group, _state, setState, canvasProps]);
|
|
205
|
+
|
|
206
|
+
// Click Props
|
|
207
|
+
var clickProps = useMemo(function updateClickProps() {
|
|
208
|
+
return {
|
|
209
|
+
mousePropagation: mousePropagation,
|
|
210
|
+
clickSensitivity: clickSensitivity,
|
|
211
|
+
group: group,
|
|
212
|
+
eventProps: eventProps,
|
|
213
|
+
onClick: onClick,
|
|
214
|
+
onDoubleClick: onDoubleClick
|
|
215
|
+
};
|
|
216
|
+
}, [mousePropagation, clickSensitivity, group, eventProps, onClick, onDoubleClick]);
|
|
217
|
+
|
|
218
|
+
// onPointerOver
|
|
219
|
+
var _onPointerOver = useCallback(function onHoverOver(e) {
|
|
220
|
+
// Mouse Propagation
|
|
221
|
+
(0, _events.checkPropagation)(e, mousePropagation);
|
|
222
|
+
if (hoverable) {
|
|
223
|
+
if (hoverColor != null) {
|
|
224
|
+
setColor(hoverColor);
|
|
225
|
+
}
|
|
226
|
+
if (onPointerOver) {
|
|
227
|
+
onPointerOver(eventProps);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}, [onPointerOver, hoverColor, hoverable, eventProps, mousePropagation]);
|
|
231
|
+
|
|
232
|
+
// onPointerOut
|
|
233
|
+
var _onPointerOut = useCallback(function onHoverOut(e) {
|
|
234
|
+
// Mouse Propagation
|
|
235
|
+
(0, _events.checkPropagation)(e, mousePropagation);
|
|
236
|
+
if (hoverable) {
|
|
237
|
+
if (hoverColor != null) {
|
|
238
|
+
setColor(color);
|
|
239
|
+
}
|
|
240
|
+
if (onPointerOut) {
|
|
241
|
+
onPointerOut(eventProps);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}, [onPointerOut, color, hoverColor, hoverable, eventProps, mousePropagation]);
|
|
245
|
+
|
|
246
|
+
// onPointerDown
|
|
247
|
+
var _onPointerDown = useCallback(function onMouseDown(e) {
|
|
248
|
+
// Mouse Propagation
|
|
249
|
+
(0, _events.checkPropagation)(e, mousePropagation);
|
|
250
|
+
if (onPointerDown) {
|
|
251
|
+
onPointerDown(eventProps);
|
|
252
|
+
}
|
|
253
|
+
}, [onPointerDown, mousePropagation, eventProps]);
|
|
254
|
+
|
|
255
|
+
// onPointerUp
|
|
256
|
+
var _onPointerUp = useCallback(function onMouseUp(e) {
|
|
257
|
+
// Mouse Propagation
|
|
258
|
+
(0, _events.checkPropagation)(e, mousePropagation);
|
|
259
|
+
if (onPointerUp) {
|
|
260
|
+
onPointerUp(eventProps);
|
|
261
|
+
}
|
|
262
|
+
}, [onPointerUp, mousePropagation, eventProps]);
|
|
263
|
+
|
|
264
|
+
// onPointerMove
|
|
265
|
+
var _onPointerMove = useCallback(function onMouseMove(e) {
|
|
266
|
+
// Mouse Propagation
|
|
267
|
+
(0, _events.checkPropagation)(e, mousePropagation);
|
|
268
|
+
if (onPointerMove) {
|
|
269
|
+
onPointerMove(eventProps);
|
|
270
|
+
}
|
|
271
|
+
}, [onPointerMove, mousePropagation, eventProps]);
|
|
272
|
+
|
|
273
|
+
// onWheel
|
|
274
|
+
var _onWheel = useCallback(function onScroll(e) {
|
|
275
|
+
// Mouse Propagation
|
|
276
|
+
(0, _events.checkPropagation)(e, mousePropagation);
|
|
277
|
+
if (onWheel) {
|
|
278
|
+
onWheel(eventProps);
|
|
279
|
+
}
|
|
280
|
+
}, [onWheel, mousePropagation, eventProps]);
|
|
281
|
+
|
|
282
|
+
// onClick + onDoubleClick
|
|
283
|
+
var _onClick = useCallback((0, _events.handleClick)(clickProps), [clickProps]);
|
|
284
|
+
|
|
285
|
+
// ------------------------- //
|
|
286
|
+
// ----- Animation ----- //
|
|
287
|
+
// ------------------------- //
|
|
288
|
+
// Animation Function
|
|
289
|
+
var _animation = useCallback(function onAnimation() {
|
|
290
|
+
// @ts-ignore:TS2339 current does not exist for group
|
|
291
|
+
if (animation && group.current) {
|
|
292
|
+
animation(eventProps);
|
|
293
|
+
}
|
|
294
|
+
}, [group, animation, eventProps]);
|
|
295
|
+
|
|
296
|
+
// Child Props
|
|
297
|
+
var childProps = useMemo(function updateChildProps() {
|
|
298
|
+
var props = {
|
|
299
|
+
groupMember: true
|
|
300
|
+
};
|
|
301
|
+
var potentialChildProps = {
|
|
302
|
+
color: _color,
|
|
303
|
+
view3DEnvMap: view3DEnvMap,
|
|
304
|
+
materialType: materialType,
|
|
305
|
+
transparent: transparent,
|
|
306
|
+
opacity: opacity,
|
|
307
|
+
side: side,
|
|
308
|
+
wireframe: wireframe,
|
|
309
|
+
castShadow: castShadow,
|
|
310
|
+
receiveShadow: receiveShadow,
|
|
311
|
+
edges: edges,
|
|
312
|
+
edgeColor: edgeColor,
|
|
313
|
+
edgeThresholdAngle: edgeThresholdAngle
|
|
314
|
+
};
|
|
315
|
+
Object.entries(potentialChildProps).map(function (_ref2) {
|
|
316
|
+
var _ref3 = _slicedToArray(_ref2, 2),
|
|
317
|
+
key = _ref3[0],
|
|
318
|
+
value = _ref3[1];
|
|
319
|
+
if (value != null) {
|
|
320
|
+
// check != null to catch 0
|
|
321
|
+
props[key] = value;
|
|
322
|
+
}
|
|
323
|
+
return null;
|
|
324
|
+
});
|
|
325
|
+
return props;
|
|
326
|
+
}, [_color, view3DEnvMap, materialType, side, transparent, opacity, castShadow, receiveShadow, wireframe, edges, edgeColor, edgeThresholdAngle]);
|
|
327
|
+
return (
|
|
328
|
+
/*#__PURE__*/
|
|
329
|
+
// @ts-ignore:TS2322
|
|
330
|
+
React.createElement("group", _extends({
|
|
331
|
+
ref: group
|
|
332
|
+
// Geometry
|
|
333
|
+
,
|
|
334
|
+
position: position,
|
|
335
|
+
scale: _scale,
|
|
336
|
+
quaternion: _quaternion
|
|
337
|
+
// Event Functions
|
|
338
|
+
,
|
|
339
|
+
onPointerOver: _ignoreMouseEvents ? undefined : _onPointerOver,
|
|
340
|
+
onPointerOut: _ignoreMouseEvents ? undefined : _onPointerOut,
|
|
341
|
+
onPointerDown: _ignoreMouseEvents ? undefined : _onPointerDown,
|
|
342
|
+
onPointerUp: _ignoreMouseEvents ? undefined : _onPointerUp,
|
|
343
|
+
onPointerMove: _ignoreMouseEvents ? undefined : _onPointerMove,
|
|
344
|
+
onWheel: _ignoreMouseEvents ? undefined : _onWheel,
|
|
345
|
+
onClick: _ignoreMouseEvents ? undefined : _onClick
|
|
346
|
+
}, otherProps), animation && /*#__PURE__*/React.createElement(_events.AnimationComponent, {
|
|
347
|
+
animation: _animation
|
|
348
|
+
}), children && React.Children.map(children, function (child) {
|
|
349
|
+
if (!child) {
|
|
350
|
+
return null;
|
|
351
|
+
}
|
|
352
|
+
return /*#__PURE__*/React.cloneElement(child, childProps);
|
|
353
|
+
}))
|
|
354
|
+
);
|
|
355
|
+
});
|
|
356
|
+
var GroupMemo = memo(Group);
|
|
357
|
+
GroupMemo.displayName = "Group";
|
|
358
|
+
var _default = exports["default"] = GroupMemo;
|
|
359
|
+
/**
|
|
360
|
+
* Generate Group Props
|
|
361
|
+
*
|
|
362
|
+
* For shapes composed of multiple primitives, like the Capsule,
|
|
363
|
+
* the meshes are grouped together. In order to rotate, scale,
|
|
364
|
+
* translate, and animate the entire group rather than each individual primitive,
|
|
365
|
+
* the group properties are extracted out and nulled for the primitives.
|
|
366
|
+
*
|
|
367
|
+
* Other properties, such as material related properties are passed down
|
|
368
|
+
* so the appearance of the group is uniform.
|
|
369
|
+
*
|
|
370
|
+
* @param {any} props
|
|
371
|
+
* @returns {GroupProps}
|
|
372
|
+
*/
|
|
373
|
+
function generateGroupProps(/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
374
|
+
props) {
|
|
375
|
+
/* eslint-enable @typescript-eslint/no-explicit-any */
|
|
376
|
+
var _props$position = props.position,
|
|
377
|
+
position = _props$position === void 0 ? [0, 0, 0] : _props$position,
|
|
378
|
+
_props$scale = props.scale,
|
|
379
|
+
scale = _props$scale === void 0 ? [1, 1, 1] : _props$scale,
|
|
380
|
+
_props$rotation = props.rotation,
|
|
381
|
+
rotation = _props$rotation === void 0 ? [0, 0, 0] : _props$rotation,
|
|
382
|
+
_props$normal = props.normal,
|
|
383
|
+
normal = _props$normal === void 0 ? _constants.DEFAULT_NORMAL : _props$normal,
|
|
384
|
+
_props$roll = props.roll,
|
|
385
|
+
roll = _props$roll === void 0 ? 0 : _props$roll,
|
|
386
|
+
quaternion = props.quaternion,
|
|
387
|
+
animation = props.animation,
|
|
388
|
+
state = props.state,
|
|
389
|
+
onClick = props.onClick,
|
|
390
|
+
onDoubleClick = props.onDoubleClick,
|
|
391
|
+
onWheel = props.onWheel,
|
|
392
|
+
onPointerUp = props.onPointerUp,
|
|
393
|
+
onPointerDown = props.onPointerDown,
|
|
394
|
+
onPointerMove = props.onPointerMove,
|
|
395
|
+
onPointerOver = props.onPointerOver,
|
|
396
|
+
onPointerOut = props.onPointerOut,
|
|
397
|
+
mousePropagation = props.mousePropagation,
|
|
398
|
+
clickSensitivity = props.clickSensitivity,
|
|
399
|
+
ignoreMouseEvents = props.ignoreMouseEvents,
|
|
400
|
+
cleanedProps = _objectWithoutProperties(props, _excluded2);
|
|
401
|
+
var groupProps = {
|
|
402
|
+
position: position,
|
|
403
|
+
scale: scale,
|
|
404
|
+
rotation: rotation,
|
|
405
|
+
normal: normal,
|
|
406
|
+
roll: roll,
|
|
407
|
+
quaternion: quaternion,
|
|
408
|
+
animation: animation,
|
|
409
|
+
state: state,
|
|
410
|
+
onClick: onClick,
|
|
411
|
+
onDoubleClick: onDoubleClick,
|
|
412
|
+
onWheel: onWheel,
|
|
413
|
+
onPointerUp: onPointerUp,
|
|
414
|
+
onPointerDown: onPointerDown,
|
|
415
|
+
onPointerMove: onPointerMove,
|
|
416
|
+
onPointerOver: onPointerOver,
|
|
417
|
+
onPointerOut: onPointerOut,
|
|
418
|
+
mousePropagation: mousePropagation,
|
|
419
|
+
clickSensitivity: clickSensitivity,
|
|
420
|
+
ignoreMouseEvents: ignoreMouseEvents
|
|
421
|
+
};
|
|
422
|
+
return {
|
|
423
|
+
cleanedProps: cleanedProps,
|
|
424
|
+
groupProps: groupProps
|
|
425
|
+
};
|
|
426
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { GroupProps } from "./Group";
|
|
3
|
+
interface OBJProps extends GroupProps {
|
|
4
|
+
objPath: string;
|
|
5
|
+
objURL: string;
|
|
6
|
+
mtlPath?: string;
|
|
7
|
+
mtlURL?: string;
|
|
8
|
+
resourcePath?: string;
|
|
9
|
+
}
|
|
10
|
+
declare const OBJMemo: React.NamedExoticComponent<OBJProps>;
|
|
11
|
+
export default OBJMemo;
|