@anov/3d 0.0.2 → 0.0.4-alpha.1

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.
@@ -0,0 +1,16 @@
1
+ import type { Intersection, Mesh, Object3D, Raycaster } from 'three';
2
+ import type { CubeEventType, EventHandleFn } from '../type';
3
+ declare type RaycastFnType = (raycaster: Raycaster, intersects: Intersection[]) => void;
4
+ interface EventPrototype {
5
+ natureEventMap: Map<CubeEventType, EventHandleFn[]>;
6
+ entered: boolean;
7
+ handleBubble: (object3d: Object3D | undefined) => void;
8
+ cancelAncestorsBubble: (object3d: Object3D | undefined) => void;
9
+ raycast: RaycastFnType;
10
+ }
11
+ /**
12
+ * process mesh created by the loader, eg: gltf, fbx ...
13
+ * this mesh not support raycaster, so we need to process it
14
+ */
15
+ declare const provideEventPrototype: (raycast: RaycastFnType, mesh: Mesh) => EventPrototype;
16
+ export default provideEventPrototype;
@@ -0,0 +1,38 @@
1
+ import { getObject3dAncestorsNodes } from "../utils";
2
+ import Group from "./group";
3
+ /**
4
+ * process mesh created by the loader, eg: gltf, fbx ...
5
+ * this mesh not support raycaster, so we need to process it
6
+ */
7
+ var provideEventPrototype = function provideEventPrototype(raycast, mesh) {
8
+ var oldRaycast = raycast;
9
+ var ctx = mesh;
10
+ var eventPrototype = {
11
+ natureEventMap: new Map(),
12
+ entered: false,
13
+ handleBubble: function handleBubble(object3d) {
14
+ if (object3d) {
15
+ var ancestorObject3d = getObject3dAncestorsNodes(object3d, function (object3d) {
16
+ return object3d instanceof Group;
17
+ });
18
+ for (var i = 0; i < ancestorObject3d.length; i++) ancestorObject3d[i].raycastGroup();
19
+ }
20
+ },
21
+ cancelAncestorsBubble: function cancelAncestorsBubble(object3d) {
22
+ if (object3d) {
23
+ var ancestorObject3d = getObject3dAncestorsNodes(object3d, function (object3d) {
24
+ return object3d instanceof Group;
25
+ });
26
+ for (var i = 0; i < ancestorObject3d.length; i++) ancestorObject3d[i].cancel();
27
+ }
28
+ },
29
+ raycast: function raycast(raycaster, intersects) {
30
+ oldRaycast(raycaster, intersects);
31
+ var intersect = intersects[0];
32
+ var object = intersect && intersect.object;
33
+ if (object && object.id === ctx.id) ctx.handleBubble(ctx);else ctx.cancelAncestorsBubble(ctx);
34
+ }
35
+ };
36
+ return eventPrototype;
37
+ };
38
+ export default provideEventPrototype;
@@ -1,9 +1,9 @@
1
- import type { Intersection, Object3D } from 'three';
1
+ import type { Object3D } from 'three';
2
2
  import { Group as TGroup } from 'three';
3
3
  import type { CubeEventType, EventHandleFn } from '../type';
4
4
  declare class Group extends TGroup {
5
5
  private natureEventMap;
6
- private object3d;
6
+ private entered;
7
7
  constructor();
8
8
  /**
9
9
  * add model
@@ -15,13 +15,13 @@ declare class Group extends TGroup {
15
15
  * @param type
16
16
  * @param handlefn
17
17
  */
18
- addNatureEventListener<T extends CubeEventType>(type: T, handlefn: EventHandleFn<T>): void;
18
+ addNatureEventListener<T extends CubeEventType>(type: T, handlefn: EventHandleFn): void;
19
19
  /**
20
20
  * removeNatureEventListener
21
21
  * @param type
22
22
  * @param handlefn
23
23
  */
24
- removeNatureEventListener<T extends CubeEventType>(type: T, handlefn: EventHandleFn<T>): void;
24
+ removeNatureEventListener<T extends CubeEventType>(type: T, handlefn: EventHandleFn): void;
25
25
  /**
26
26
  * removeAllNatureEventListener
27
27
  */
@@ -45,9 +45,13 @@ declare class Group extends TGroup {
45
45
  */
46
46
  private handlePointerleave;
47
47
  /**
48
- * raycastGroup
48
+ * raycast group
49
49
  * handle intersect event
50
50
  */
51
- raycastGroup(intersets: Intersection<Object3D<Event>>[]): void;
51
+ raycastGroup(): void;
52
+ /**
53
+ * cancel bubbling
54
+ */
55
+ cancel(): void;
52
56
  }
53
57
  export default Group;
@@ -24,7 +24,7 @@ var Group = /*#__PURE__*/function (_TGroup) {
24
24
  _classCallCheck(this, Group);
25
25
  _this = _super.call(this);
26
26
  _defineProperty(_assertThisInitialized(_this), "natureEventMap", new Map());
27
- _defineProperty(_assertThisInitialized(_this), "object3d", []);
27
+ _defineProperty(_assertThisInitialized(_this), "entered", false);
28
28
  globalObjectManage.addCatch(_assertThisInitialized(_this));
29
29
  return _this;
30
30
  }
@@ -37,7 +37,6 @@ var Group = /*#__PURE__*/function (_TGroup) {
37
37
  key: "addModel",
38
38
  value: function addModel(object) {
39
39
  _get(_getPrototypeOf(Group.prototype), "add", this).call(this, object);
40
- this.object3d.push(object);
41
40
  }
42
41
 
43
42
  /**
@@ -85,11 +84,12 @@ var Group = /*#__PURE__*/function (_TGroup) {
85
84
  }, {
86
85
  key: "handleClick",
87
86
  value: function handleClick(natureEvent) {
87
+ var _this2 = this;
88
88
  if (!globalObjectManage.triggerClick) return;
89
89
 
90
90
  // get nature event
91
91
  natureEvent.forEach(function (handlefn) {
92
- // handlefn(this)
92
+ handlefn(_this2);
93
93
  });
94
94
  }
95
95
 
@@ -101,8 +101,9 @@ var Group = /*#__PURE__*/function (_TGroup) {
101
101
  }, {
102
102
  key: "handlePointerMove",
103
103
  value: function handlePointerMove(natureEvent) {
104
+ var _this3 = this;
104
105
  natureEvent.forEach(function (handlefn) {
105
- // handlefn(this)
106
+ handlefn(_this3);
106
107
  });
107
108
  }
108
109
 
@@ -114,20 +115,41 @@ var Group = /*#__PURE__*/function (_TGroup) {
114
115
  }, {
115
116
  key: "handlePointerleave",
116
117
  value: function handlePointerleave() {
118
+ var _this4 = this;
117
119
  var pointerleaveCallback = this.natureEventMap.get('pointerleave');
118
120
  pointerleaveCallback && pointerleaveCallback.length > 0 && pointerleaveCallback.forEach(function (handlefn) {
119
- // handlefn(this)
121
+ handlefn(_this4);
120
122
  });
121
123
  }
122
124
 
123
125
  /**
124
- * raycastGroup
126
+ * raycast group
125
127
  * handle intersect event
126
128
  */
127
129
  }, {
128
130
  key: "raycastGroup",
129
- value: function raycastGroup(intersets) {
130
- console.log('raycastGroup', intersets);
131
+ value: function raycastGroup() {
132
+ var clickCallback = this.natureEventMap.get('click');
133
+ var pointerupCallback = this.natureEventMap.get('pointerup');
134
+ var pointerdownCallback = this.natureEventMap.get('pointerdown');
135
+ var pointermoveCallback = this.natureEventMap.get('pointermove');
136
+ this.entered = true;
137
+ clickCallback && clickCallback.length > 0 && this.handleClick(clickCallback);
138
+ pointerupCallback && pointerupCallback.length > 0 && this.handleClick(pointerupCallback);
139
+ pointerdownCallback && pointerdownCallback.length > 0 && this.handleClick(pointerdownCallback);
140
+ pointermoveCallback && pointermoveCallback.length > 0 && this.handlePointerMove(pointermoveCallback);
141
+ }
142
+
143
+ /**
144
+ * cancel bubbling
145
+ */
146
+ }, {
147
+ key: "cancel",
148
+ value: function cancel() {
149
+ if (this.entered) {
150
+ this.handlePointerleave();
151
+ this.entered = false;
152
+ }
131
153
  }
132
154
  }]);
133
155
  return Group;
@@ -10,13 +10,13 @@ declare class Mesh extends TMesh {
10
10
  * @param type
11
11
  * @param handlefn
12
12
  */
13
- addNatureEventListener<T extends CubeEventType>(type: T, handlefn: EventHandleFn<T>): void;
13
+ addNatureEventListener<T extends CubeEventType>(type: T, handlefn: EventHandleFn): void;
14
14
  /**
15
15
  * removeNatureEventListener
16
16
  * @param type
17
17
  * @param handlefn
18
18
  */
19
- removeNatureEventListener<T extends CubeEventType>(type: T, handlefn: EventHandleFn<T>): void;
19
+ removeNatureEventListener<T extends CubeEventType>(type: T, handlefn: EventHandleFn): void;
20
20
  /**
21
21
  * removeAllNatureEventListener
22
22
  */
@@ -39,6 +39,16 @@ declare class Mesh extends TMesh {
39
39
  * @param natureEvent
40
40
  */
41
41
  private handlePointerleave;
42
+ /**
43
+ * handle bubbling 伪冒泡,仅触发上层group事件
44
+ * @param object3d
45
+ */
46
+ private handleBubble;
47
+ /**
48
+ * emit parent group mouseleave event
49
+ * @param object3d
50
+ */
51
+ private cancelAncestorsBubble;
42
52
  /**
43
53
  * handle mesh raycaster
44
54
  * @param raycaster
package/dist/core/mesh.js CHANGED
@@ -15,6 +15,8 @@ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key i
15
15
  function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
16
16
  function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
17
17
  import { Mesh as TMesh } from 'three';
18
+ import { getObject3dAncestorsNodes } from "../utils";
19
+ import Group from "./group";
18
20
  import globalObjectManage from "./global/global";
19
21
  var Mesh = /*#__PURE__*/function (_TMesh) {
20
22
  _inherits(Mesh, _TMesh);
@@ -111,6 +113,36 @@ var Mesh = /*#__PURE__*/function (_TMesh) {
111
113
  });
112
114
  }
113
115
 
116
+ /**
117
+ * handle bubbling 伪冒泡,仅触发上层group事件
118
+ * @param object3d
119
+ */
120
+ }, {
121
+ key: "handleBubble",
122
+ value: function handleBubble(object3d) {
123
+ if (object3d) {
124
+ var ancestorObject3d = getObject3dAncestorsNodes(object3d, function (object3d) {
125
+ return object3d instanceof Group;
126
+ });
127
+ for (var i = 0; i < ancestorObject3d.length; i++) ancestorObject3d[i].raycastGroup();
128
+ }
129
+ }
130
+
131
+ /**
132
+ * emit parent group mouseleave event
133
+ * @param object3d
134
+ */
135
+ }, {
136
+ key: "cancelAncestorsBubble",
137
+ value: function cancelAncestorsBubble(object3d) {
138
+ if (object3d) {
139
+ var ancestorObject3d = getObject3dAncestorsNodes(object3d, function (object3d) {
140
+ return object3d instanceof Group;
141
+ });
142
+ for (var i = 0; i < ancestorObject3d.length; i++) ancestorObject3d[i].cancel();
143
+ }
144
+ }
145
+
114
146
  /**
115
147
  * handle mesh raycaster
116
148
  * @param raycaster
@@ -119,14 +151,16 @@ var Mesh = /*#__PURE__*/function (_TMesh) {
119
151
  }, {
120
152
  key: "raycast",
121
153
  value: function raycast(raycaster, intersects) {
122
- if (this.natureEventMap.size === 0) return;
123
154
  _get(_getPrototypeOf(Mesh.prototype), "raycast", this).call(this, raycaster, intersects);
155
+ var intersect = intersects[0];
156
+ var object = intersect && intersect.object;
157
+ object === this && this.handleBubble(this);
158
+ if (object !== this) this.cancelAncestorsBubble(this);
159
+ if (this.natureEventMap.size === 0) return;
124
160
  var clickCallback = this.natureEventMap.get('click');
125
161
  var pointerupCallback = this.natureEventMap.get('pointerup');
126
162
  var pointerdownCallback = this.natureEventMap.get('pointerdown');
127
163
  var pointermoveCallback = this.natureEventMap.get('pointermove');
128
- var intersect = intersects[0];
129
- var object = intersect && intersect.object;
130
164
  if (object === this) {
131
165
  this.entered = true;
132
166
  clickCallback && clickCallback.length > 0 && this.handleClick(clickCallback, intersect);
@@ -9,15 +9,16 @@ declare class ModelLoader {
9
9
  * @param onError
10
10
  * @returns
11
11
  */
12
- loadGLTF(url: string, onLoad?: (result: GLTF) => GLTF, onProgress?: (event: ProgressEvent) => void, onError?: (event: ErrorEvent) => void): Promise<unknown>;
12
+ loadGLTF(url: string, openEvents?: boolean, onLoad?: (result: GLTF) => GLTF, onProgress?: (event: ProgressEvent) => void, onError?: (event: ErrorEvent) => void): Promise<GLTF>;
13
13
  /**
14
14
  * fbx model loader
15
15
  * @param url
16
+ * @param openEvents 是否打开事件传播
16
17
  * @param onLoad
17
18
  * @param onProgress
18
19
  * @param onError
19
20
  */
20
- loadFbx(url: string, onLoad?: (result: Group) => Group, onProgress?: (event: ProgressEvent) => void, onError?: (event: ErrorEvent) => void): Promise<unknown>;
21
+ loadFbx(url: string, openEvents?: boolean, onLoad?: (result: Group) => Group, onProgress?: (event: ProgressEvent) => void, onError?: (event: ErrorEvent) => void): Promise<Group>;
21
22
  /**
22
23
  * parse fbx buffer
23
24
  * @param buffer
@@ -7,6 +7,19 @@ function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input ==
7
7
  import { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader';
8
8
  import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader';
9
9
  import { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader';
10
+ import { getAllMeshChildren } from "../utils";
11
+ import provideEventPrototype from "./events";
12
+
13
+ /**
14
+ * inject event prototype fn
15
+ * @param object3d
16
+ */
17
+ var injectEventPrototype = function injectEventPrototype(object3d) {
18
+ var allMesh = getAllMeshChildren(object3d);
19
+ allMesh.forEach(function (mesh) {
20
+ Object.assign(mesh, provideEventPrototype(mesh.raycast.bind(mesh), mesh));
21
+ });
22
+ };
10
23
  var ModelLoader = /*#__PURE__*/function () {
11
24
  function ModelLoader() {
12
25
  _classCallCheck(this, ModelLoader);
@@ -22,7 +35,11 @@ var ModelLoader = /*#__PURE__*/function () {
22
35
  * @param onError
23
36
  * @returns
24
37
  */
25
- function loadGLTF(url, onLoad, onProgress, onError) {
38
+ function loadGLTF(url) {
39
+ var openEvents = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
40
+ var onLoad = arguments.length > 2 ? arguments[2] : undefined;
41
+ var onProgress = arguments.length > 3 ? arguments[3] : undefined;
42
+ var onError = arguments.length > 4 ? arguments[4] : undefined;
26
43
  var loader = new GLTFLoader();
27
44
  var dracoLoader = new DRACOLoader();
28
45
 
@@ -35,6 +52,7 @@ var ModelLoader = /*#__PURE__*/function () {
35
52
  loader.setDRACOLoader(dracoLoader);
36
53
  return new Promise(function (resolve, reject) {
37
54
  loader.load(url, function (gltf) {
55
+ if (openEvents) injectEventPrototype(gltf.scene);
38
56
  onLoad ? resolve(onLoad(gltf)) : resolve(gltf);
39
57
  }, function (xhr) {
40
58
  onProgress && onProgress(xhr);
@@ -48,16 +66,22 @@ var ModelLoader = /*#__PURE__*/function () {
48
66
  /**
49
67
  * fbx model loader
50
68
  * @param url
69
+ * @param openEvents 是否打开事件传播
51
70
  * @param onLoad
52
71
  * @param onProgress
53
72
  * @param onError
54
73
  */
55
74
  }, {
56
75
  key: "loadFbx",
57
- value: function loadFbx(url, onLoad, onProgress, onError) {
76
+ value: function loadFbx(url) {
77
+ var openEvents = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
78
+ var onLoad = arguments.length > 2 ? arguments[2] : undefined;
79
+ var onProgress = arguments.length > 3 ? arguments[3] : undefined;
80
+ var onError = arguments.length > 4 ? arguments[4] : undefined;
58
81
  var fbxLoader = new FBXLoader();
59
82
  return new Promise(function (resolve, reject) {
60
83
  fbxLoader.load(url, function (fbx) {
84
+ if (openEvents) injectEventPrototype(fbx);
61
85
  onLoad ? resolve(onLoad(fbx)) : resolve(fbx);
62
86
  }, function (xhr) {
63
87
  onProgress && onProgress(xhr);
@@ -1,4 +1,4 @@
1
- import type { Color, ColorRepresentation, Object3D, ToneMapping } from 'three';
1
+ import type { Color, ColorRepresentation, ToneMapping } from 'three';
2
2
  import { AmbientLight, Raycaster, Scene as TScene, Vector3, WebGLRenderer } from 'three';
3
3
  import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';
4
4
  import Cssrenderer from './cssRenderer';
@@ -65,7 +65,7 @@ interface CutoutAreaType {
65
65
  width: number;
66
66
  height: number;
67
67
  }
68
- declare class Scene {
68
+ declare class SceneControl {
69
69
  private opts;
70
70
  private pointer;
71
71
  scene: TScene | null;
@@ -133,7 +133,7 @@ declare class Scene {
133
133
  * scene add object3d
134
134
  * @param object3d
135
135
  */
136
- add(object3d: Object3D): void;
136
+ add(object3d: any): void;
137
137
  /**
138
138
  * update raycaster
139
139
  */
@@ -172,4 +172,4 @@ declare class Scene {
172
172
  private updateRenderForCut;
173
173
  destroy(): void;
174
174
  }
175
- export default Scene;
175
+ export default SceneControl;
@@ -5,7 +5,7 @@ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _d
5
5
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
6
6
  function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
7
7
  function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
8
- import { ACESFilmicToneMapping, AmbientLight, CubeTextureLoader, Raycaster, Scene as TScene, Vector2, Vector3, WebGLRenderer } from 'three';
8
+ import { ACESFilmicToneMapping, AmbientLight, CubeTextureLoader, Group, Line, Raycaster, Scene as TScene, Vector2, Vector3, WebGLRenderer } from 'three';
9
9
  import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';
10
10
  import * as TWEEN from '@tweenjs/tween.js';
11
11
  import { emitter } from "../utils";
@@ -14,11 +14,11 @@ import Cssrenderer from "./cssRenderer";
14
14
  import globalControl from "./global/globalControl";
15
15
  import globalObjectManage from "./global/global";
16
16
  import { PerspectiveCamera } from "./camera";
17
- var Scene = /*#__PURE__*/function () {
17
+ var SceneControl = /*#__PURE__*/function () {
18
18
  /** 裁剪相关 */
19
19
 
20
- function Scene(opts) {
21
- _classCallCheck(this, Scene);
20
+ function SceneControl(opts) {
21
+ _classCallCheck(this, SceneControl);
22
22
  _defineProperty(this, "opts", {});
23
23
  _defineProperty(this, "pointer", new Vector2());
24
24
  _defineProperty(this, "scene", null);
@@ -48,7 +48,7 @@ var Scene = /*#__PURE__*/function () {
48
48
  /**
49
49
  * init default scene components
50
50
  */
51
- _createClass(Scene, [{
51
+ _createClass(SceneControl, [{
52
52
  key: "defaultInit",
53
53
  value: function defaultInit() {
54
54
  var _this$opts$background, _this$opts$background2;
@@ -242,17 +242,9 @@ var Scene = /*#__PURE__*/function () {
242
242
 
243
243
  // need expand
244
244
  var object3ds = this.scene.children.filter(function (item) {
245
- return item instanceof Mesh;
245
+ return item instanceof Mesh || item instanceof Group || item instanceof Line;
246
246
  });
247
- this.raycaster.intersectObjects(object3ds, (_raycasterOps$recursi = raycasterOps.recursive) !== null && _raycasterOps$recursi !== void 0 ? _raycasterOps$recursi : false);
248
-
249
- // group的拾取,构建一个mesh?
250
-
251
- // const intersects = this.raycaster!.intersectObjects(this.scene!.children, false)
252
- // globalObjectManage.groupCatch.forEach((group) => {
253
- // if (intersects.length > 0)
254
- // group.raycastGroup(intersects as Intersection<Object3D<Event>>[])
255
- // })
247
+ this.raycaster.intersectObjects(object3ds, (_raycasterOps$recursi = raycasterOps.recursive) !== null && _raycasterOps$recursi !== void 0 ? _raycasterOps$recursi : true);
256
248
  }
257
249
  }, {
258
250
  key: "getPointerPosition",
@@ -384,6 +376,6 @@ var Scene = /*#__PURE__*/function () {
384
376
  });
385
377
  }
386
378
  }]);
387
- return Scene;
379
+ return SceneControl;
388
380
  }();
389
- export default Scene;
381
+ export default SceneControl;
package/dist/export.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import Scene from './core/scene';
1
+ import SceneControl from './core/scene';
2
2
  import Mesh from './core/mesh';
3
3
  import Group from './core/group';
4
4
  import { PerspectiveCamera } from './core/camera';
@@ -36,6 +36,5 @@ declare const use: {
36
36
  };
37
37
  };
38
38
  export * from 'three';
39
- export { Scene as TScene } from 'three';
40
39
  export * from './threeCell';
41
- export { Scene, Mesh, Group, PerspectiveCamera, ModelLoader, TransformControls, createControlLine, createLabel, ModelType, Direction, createTransformControls, utils, dom, use, globalObjectManage, };
40
+ export { SceneControl, Mesh, Group, PerspectiveCamera, ModelLoader, TransformControls, createControlLine, createLabel, ModelType, Direction, createTransformControls, utils, dom, use, globalObjectManage, };
package/dist/export.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /* eslint-disable import/export */
2
- import Scene from "./core/scene";
2
+ import SceneControl from "./core/scene";
3
3
  import Mesh from "./core/mesh";
4
4
  import Group from "./core/group";
5
5
  import { PerspectiveCamera } from "./core/camera";
@@ -32,6 +32,5 @@ var use = {
32
32
  useScene: useScene
33
33
  };
34
34
  export * from 'three';
35
- export { Scene as TScene } from 'three';
36
35
  export * from "./threeCell";
37
- export { Scene, Mesh, Group, PerspectiveCamera, ModelLoader, TransformControls, createControlLine, createLabel, ModelType, Direction, createTransformControls, utils, dom, use, globalObjectManage };
36
+ export { SceneControl, Mesh, Group, PerspectiveCamera, ModelLoader, TransformControls, createControlLine, createLabel, ModelType, Direction, createTransformControls, utils, dom, use, globalObjectManage };
package/dist/type.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- import type { Intersection } from 'three';
2
- import type Mesh from './core/mesh';
1
+ import type { Intersection, Object3D } from 'three';
3
2
  export declare type CubeEventType = 'click' | 'pointerup' | 'pointerdown' | 'pointermove' | 'pointerleave';
4
- export declare type EventHandleFn<T> = (event: Mesh, intersect?: Intersection) => void;
3
+ export declare type EventHandleFn = (event: Object3D, intersect?: Intersection) => void;
@@ -32,7 +32,13 @@ export declare const getAncestorsNodes: <T extends Node>(array: T[], targetId: s
32
32
  * @param object3d
33
33
  * @returns
34
34
  */
35
- export declare const getObject3dAncestorsNodes: (object3d: Object3D) => Object3D<import("three").Event>[];
35
+ export declare const getObject3dAncestorsNodes: (object3d: Object3D, filter?: ((object3d: Object3D) => boolean) | undefined) => Object3D<import("three").Event>[];
36
+ /**
37
+ * get all mesh children, maybe also need line, but not now
38
+ * @param object3d
39
+ * @returns
40
+ */
41
+ export declare const getAllMeshChildren: (object3d: Object3D) => Object3D<import("three").Event>[];
36
42
  /**
37
43
  * handle small hump
38
44
  * @param camelCaseString
@@ -40,16 +40,35 @@ export var getAncestorsNodes = function getAncestorsNodes(array, targetId) {
40
40
  * @param object3d
41
41
  * @returns
42
42
  */
43
- export var getObject3dAncestorsNodes = function getObject3dAncestorsNodes(object3d) {
43
+ export var getObject3dAncestorsNodes = function getObject3dAncestorsNodes(object3d, filter) {
44
44
  var ancestorsNodes = [];
45
45
  var currentObject3d = object3d;
46
46
  while (currentObject3d.parent) {
47
- ancestorsNodes.push(currentObject3d.parent);
47
+ if (filter) filter(currentObject3d.parent) && ancestorsNodes.push(currentObject3d.parent);else ancestorsNodes.push(currentObject3d.parent);
48
48
  currentObject3d = currentObject3d.parent;
49
49
  }
50
50
  return ancestorsNodes;
51
51
  };
52
52
 
53
+ /**
54
+ * get all mesh children, maybe also need line, but not now
55
+ * @param object3d
56
+ * @returns
57
+ */
58
+ export var getAllMeshChildren = function getAllMeshChildren(object3d) {
59
+ var children = [];
60
+ var run = function run(object3d) {
61
+ if (object3d.children.length === 0) return;
62
+ for (var i = 0; i < object3d.children.length; i++) {
63
+ var child = object3d.children[i];
64
+ if (child.type === 'Mesh') children.push(child);
65
+ run(child);
66
+ }
67
+ };
68
+ run(object3d);
69
+ return children;
70
+ };
71
+
53
72
  /**
54
73
  * handle small hump
55
74
  * @param camelCaseString