@soonspacejs/plugin-follow-mouse 2.13.10 → 2.13.11
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/dist/index.d.ts +34 -34
- package/dist/index.esm.js +1 -1
- package/package.json +3 -3
package/dist/index.d.ts
CHANGED
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
import { Vector3 } from 'three';
|
|
2
|
-
import SoonSpace, { IColor } from 'soonspacejs';
|
|
3
|
-
import type { BaseObject3D } from 'soonspacejs';
|
|
4
|
-
export interface StartOptions {
|
|
5
|
-
offset?: Vector3;
|
|
6
|
-
openHelper?: boolean;
|
|
7
|
-
helperColor?: IColor;
|
|
8
|
-
onPlace?: (object: BaseObject3D) => void;
|
|
9
|
-
onDone?: (objects: BaseObject3D[]) => void;
|
|
10
|
-
onBack?: (object: BaseObject3D) => void;
|
|
11
|
-
onCancel?: () => void;
|
|
12
|
-
}
|
|
13
|
-
export default class FollowMousePlugin {
|
|
14
|
-
private readonly ssp;
|
|
15
|
-
private object;
|
|
16
|
-
private objectBbox;
|
|
17
|
-
private objectSourcePosition;
|
|
18
|
-
private sceneMesh;
|
|
19
|
-
private helper;
|
|
20
|
-
private placedObject;
|
|
21
|
-
private options;
|
|
22
|
-
private mouseDownModelPosition;
|
|
23
|
-
constructor(ssp: SoonSpace);
|
|
24
|
-
start(object: BaseObject3D, options?: StartOptions): void;
|
|
25
|
-
private stop;
|
|
26
|
-
private onMouseMove;
|
|
27
|
-
private onMouseDown;
|
|
28
|
-
private onClick;
|
|
29
|
-
private onRightClick;
|
|
30
|
-
private onDblClick;
|
|
31
|
-
private onKeyUp;
|
|
32
|
-
private onPlace;
|
|
33
|
-
private onDelPrev;
|
|
34
|
-
}
|
|
1
|
+
import { Vector3 } from 'three';
|
|
2
|
+
import SoonSpace, { IColor } from 'soonspacejs';
|
|
3
|
+
import type { BaseObject3D } from 'soonspacejs';
|
|
4
|
+
export interface StartOptions {
|
|
5
|
+
offset?: Vector3;
|
|
6
|
+
openHelper?: boolean;
|
|
7
|
+
helperColor?: IColor;
|
|
8
|
+
onPlace?: (object: BaseObject3D) => void;
|
|
9
|
+
onDone?: (objects: BaseObject3D[]) => void;
|
|
10
|
+
onBack?: (object: BaseObject3D) => void;
|
|
11
|
+
onCancel?: () => void;
|
|
12
|
+
}
|
|
13
|
+
export default class FollowMousePlugin {
|
|
14
|
+
private readonly ssp;
|
|
15
|
+
private object;
|
|
16
|
+
private objectBbox;
|
|
17
|
+
private objectSourcePosition;
|
|
18
|
+
private sceneMesh;
|
|
19
|
+
private helper;
|
|
20
|
+
private placedObject;
|
|
21
|
+
private options;
|
|
22
|
+
private mouseDownModelPosition;
|
|
23
|
+
constructor(ssp: SoonSpace);
|
|
24
|
+
start(object: BaseObject3D, options?: StartOptions): void;
|
|
25
|
+
private stop;
|
|
26
|
+
private onMouseMove;
|
|
27
|
+
private onMouseDown;
|
|
28
|
+
private onClick;
|
|
29
|
+
private onRightClick;
|
|
30
|
+
private onDblClick;
|
|
31
|
+
private onKeyUp;
|
|
32
|
+
private onPlace;
|
|
33
|
+
private onDelPrev;
|
|
34
|
+
}
|
package/dist/index.esm.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Vector3 as s,Box3 as e}from"three";const t="followMouseBoxHelper";class o{constructor(t){this.ssp=t,this.mouseDownModelPosition=new s,this.object=null,this.objectBbox=new e(new s,new s),this.objectSourcePosition=new s,this.sceneMesh=[],this.helper=null,this.placedObject=[],this.options={},this.onMouseMove=this.onMouseMove.bind(this),this.onMouseDown=this.onMouseDown.bind(this),this.onClick=this.onClick.bind(this),this.onRightClick=this.onRightClick.bind(this),this.onDblClick=this.onDblClick.bind(this),this.onKeyUp=this.onKeyUp.bind(this)}start(s,e={}){this.options=e,this.object=s,this.objectBbox.setFromObject(s),this.objectSourcePosition.copy(s.position.clone()),this.sceneMesh=this.ssp.viewport.scener.intersectsList.getAll().filter(
|
|
1
|
+
import{Vector3 as s,Box3 as e}from"three";const t="followMouseBoxHelper";class o{constructor(t){this.ssp=t,this.mouseDownModelPosition=new s,this.object=null,this.objectBbox=new e(new s,new s),this.objectSourcePosition=new s,this.sceneMesh=[],this.helper=null,this.placedObject=[],this.options={},this.onMouseMove=this.onMouseMove.bind(this),this.onMouseDown=this.onMouseDown.bind(this),this.onClick=this.onClick.bind(this),this.onRightClick=this.onRightClick.bind(this),this.onDblClick=this.onDblClick.bind(this),this.onKeyUp=this.onKeyUp.bind(this)}start(s,e={}){this.options=e,this.object=s,this.objectBbox.setFromObject(s),this.objectSourcePosition.copy(s.position.clone()),this.sceneMesh=this.ssp.viewport.scener.intersectsList.getAll().filter(s=>{let e=s.visible;return s.traverseAncestors(s=>{!1===s.visible&&(e=!1)}),e});const{openHelper:o=!0,helperColor:i=16776960}=this.options;o&&"Model"===this.object.stype&&(s.updateWorldMatrix(!0,!0),this.helper=this.ssp.addBoxHelper({id:t,box:this.objectBbox,color:i}),this.ssp.signals.sceneChanged.dispatch()),s.traverse(s=>{const e=this.sceneMesh.findIndex(e=>e.uuid===s.uuid);-1!==e&&this.sceneMesh.splice(e,1)}),this.ssp.signals.mouseMove.add(this.onMouseMove),this.ssp.signals.mouseDown.add(this.onMouseDown),this.ssp.signals.click.add(this.onClick),this.ssp.signals.rightClick.add(this.onRightClick),this.ssp.signals.dblClick.add(this.onDblClick),this.ssp.signals.keyUp.add(this.onKeyUp)}stop(){var o;null===(o=this.object)||void 0===o||o.position.copy(this.objectSourcePosition.clone()),this.ssp.removeObjectById(t),this.object=null,this.objectBbox=new e(new s,new s),this.objectSourcePosition=new s,this.sceneMesh=[],this.helper=null,this.placedObject=[],this.options={},this.mouseDownModelPosition=new s,this.ssp.signals.mouseMove.remove(this.onMouseMove),this.ssp.signals.mouseDown.remove(this.onMouseDown),this.ssp.signals.click.remove(this.onClick),this.ssp.signals.dblClick.remove(this.onDblClick),this.ssp.signals.keyUp.remove(this.onKeyUp)}onMouseMove(t){if(t.preventDefault(),!this.object)return;const{offset:o=new s(1,1,1)}=this.options,i=this.ssp.viewport.getIntersects(t,this.sceneMesh),n=this.object.getWorldPosition(new s).sub(this.object.position),h=new s;let c="y";if(i.length>0){const{point:s,face:e}=i[0];if(h.copy(s.clone()),e){const{normal:s}=e;0===s.y&&0===s.z&&(1===s.x?c="x":-1===s.x&&(c="-x")),0===s.x&&0===s.z&&(1===s.y?c="y":-1===s.y&&(c="-y")),0===s.x&&0===s.y&&(1===s.z?c="z":-1===s.z&&(c="-z"))}}else h.copy(this.ssp.getPositionByOffset(t,.1));const l=h.sub(n),p=this.objectBbox.getSize(new s);switch(c){case"x":l.setX(l.x+p.x/2+o.x);break;case"-x":l.setX(l.x-p.x/2-o.x);break;case"y":l.setY(l.y+o.y);break;case"-y":l.setY(l.y-p.y-o.y);break;case"z":l.setZ(l.z+p.z/2+o.z);break;case"-z":l.setZ(l.z-p.z/2-o.z)}this.object.position.copy(l).setY(l.y),this.helper&&this.helper.box.copy(new e(new s,new s).setFromObject(this.object)),this.ssp.signals.sceneChanged.dispatch()}onMouseDown(e){this.object&&this.mouseDownModelPosition.copy(this.object.getWorldPosition(new s))}onClick(s){this.onPlace()}onRightClick(s){this.onDelPrev()}async onDblClick(s){await this.onPlace(),this.options.onDone&&this.options.onDone(this.placedObject),this.stop()}onKeyUp(s){switch(s.code){case"Backspace":this.onDelPrev();break;case"Enter":this.options.onDone&&this.options.onDone(this.placedObject),this.stop();break;case"Escape":this.options.onCancel&&this.options.onCancel(),this.stop()}}async onPlace(){var s,e,t,o;if("Model"===(null===(s=this.object)||void 0===s?void 0:s.stype))return this.ssp.cloneModel(this.object,{id:`clone_${this.object.sid}_${this.placedObject.length+1}`,position:this.mouseDownModelPosition.clone()}).then(s=>{var e,t;this.placedObject.push(s),null===(t=(e=this.options).onPlace)||void 0===t||t.call(e,s)});if("Poi"!==(null===(e=this.object)||void 0===e?void 0:e.stype))return Promise.reject("In soonspacejs: 插件(plugin-follow-mouse)传入对象类型错误,仅支持 sbm、model、poi !");{const s=this.ssp.clonePoi(this.object,{id:`clone_${this.object.sid}_${this.placedObject.length+1}`,position:this.mouseDownModelPosition.clone()});if(!s)return Promise.reject("In soonspacejs: 插件(plugin-follow-mouse)摆放 Poi 对象时错误!");this.placedObject.push(s),null===(o=(t=this.options).onPlace)||void 0===o||o.call(t,s)}}onDelPrev(){if(0===this.placedObject.length)return;const s=this.placedObject[this.placedObject.length-1];this.ssp.removeObject(s),this.placedObject.splice(this.placedObject.length-1,1),this.options.onBack&&this.options.onBack(s)}}export{o as default};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@soonspacejs/plugin-follow-mouse",
|
|
3
3
|
"pluginName": "FollowMousePlugin",
|
|
4
|
-
"version": "2.13.
|
|
4
|
+
"version": "2.13.11",
|
|
5
5
|
"description": "Scene object follow mouse plugin for SoonSpace.js",
|
|
6
6
|
"main": "dist/index.esm.js",
|
|
7
7
|
"module": "dist/index.esm.js",
|
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
],
|
|
14
14
|
"author": "xunwei",
|
|
15
15
|
"license": "UNLICENSED",
|
|
16
|
-
"gitHead": "
|
|
16
|
+
"gitHead": "08bf9efb38c291f22ca044b936fd49269c716bbb",
|
|
17
17
|
"peerDependencies": {
|
|
18
|
-
"soonspacejs": "2.13.
|
|
18
|
+
"soonspacejs": "2.13.11"
|
|
19
19
|
}
|
|
20
20
|
}
|