@hatiolab/things-scene 10.0.0-beta.26 → 10.0.0-beta.27
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-types/components/geometry/snap-guide.d.ts +45 -0
- package/dist-types/components/geometry/snap-guide.d.ts.map +1 -0
- package/dist-types/layer/index.d.ts +1 -0
- package/dist-types/layer/index.d.ts.map +1 -1
- package/dist-types/layer/snap-guide-layer.d.ts +23 -0
- package/dist-types/layer/snap-guide-layer.d.ts.map +1 -0
- package/package.json +1 -1
- package/things-scene-min.js +12 -12
- package/things-scene-min.js.map +1 -1
- package/things-scene.mjs +3 -3
- package/things-scene.mjs.map +1 -1
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { BOUNDS } from '../../interfaces/types.js';
|
|
2
|
+
export interface SnapGuideLine {
|
|
3
|
+
axis: 'x' | 'y';
|
|
4
|
+
position: number;
|
|
5
|
+
from: number;
|
|
6
|
+
to: number;
|
|
7
|
+
}
|
|
8
|
+
export interface SnapResult {
|
|
9
|
+
dx: number;
|
|
10
|
+
dy: number;
|
|
11
|
+
guides: SnapGuideLine[];
|
|
12
|
+
}
|
|
13
|
+
export declare const EMPTY_RESULT: SnapResult;
|
|
14
|
+
/**
|
|
15
|
+
* 드래그 시작 시 1회 구축하는 스냅 인덱스.
|
|
16
|
+
* 형제 컴포넌트의 모든 edge를 정렬된 배열로 보관하여
|
|
17
|
+
* dragmove마다 O(log N) 이진탐색으로 스냅을 계산한다.
|
|
18
|
+
*/
|
|
19
|
+
export declare class SnapIndex {
|
|
20
|
+
private xEdges;
|
|
21
|
+
private yEdges;
|
|
22
|
+
constructor(otherBounds: BOUNDS[]);
|
|
23
|
+
get empty(): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* O(log N) 스냅 계산
|
|
26
|
+
*/
|
|
27
|
+
calculateSnap(movingBounds: BOUNDS, diffx: number, diffy: number, threshold: number): SnapResult;
|
|
28
|
+
/**
|
|
29
|
+
* 정렬된 edge 배열에서 myValues 각각에 대해
|
|
30
|
+
* threshold 이내 가장 가까운 매칭을 이진탐색으로 찾는다.
|
|
31
|
+
* O(3 * log N) = O(log N)
|
|
32
|
+
*/
|
|
33
|
+
private findBestSnap;
|
|
34
|
+
/**
|
|
35
|
+
* 이진탐색으로 target에 가장 가까운 edge를 찾고,
|
|
36
|
+
* threshold 이내이면 같은 값의 모든 edge를 수집한다.
|
|
37
|
+
*/
|
|
38
|
+
private searchNearest;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* 하위호환: 기존 테스트용 함수형 API.
|
|
42
|
+
* 내부적으로 SnapIndex를 생성하여 계산한다.
|
|
43
|
+
*/
|
|
44
|
+
export declare function calculateSnap(movingBounds: BOUNDS, otherBounds: BOUNDS[], diffx: number, diffy: number, threshold?: number): SnapResult;
|
|
45
|
+
//# sourceMappingURL=snap-guide.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snap-guide.d.ts","sourceRoot":"","sources":["../../../src/components/geometry/snap-guide.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAElD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,GAAG,GAAG,GAAG,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;CACX;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,aAAa,EAAE,CAAA;CACxB;AAED,eAAO,MAAM,YAAY,EAAE,UAAyC,CAAA;AAYpE;;;;GAIG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,MAAM,CAAa;gBAEf,WAAW,EAAE,MAAM,EAAE;IAgCjC,IAAI,KAAK,YAER;IAED;;OAEG;IACH,aAAa,CACX,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,GAChB,UAAU;IAgEb;;;;OAIG;IACH,OAAO,CAAC,YAAY;IA6BpB;;;OAGG;IACH,OAAO,CAAC,aAAa;CAqDtB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EAAE,EACrB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,SAAS,GAAE,MAAU,GACpB,UAAU,CAIZ"}
|
|
@@ -5,4 +5,5 @@ export { default as AddLayer } from './add-layer.js';
|
|
|
5
5
|
export { default as SelectionLayer } from './selection-layer.js';
|
|
6
6
|
export { default as ModelingLayer } from './modeling-layer.js';
|
|
7
7
|
export { default as ScrollLayer } from './scroll-layer.js';
|
|
8
|
+
export { default as SnapGuideLayer } from './snap-guide-layer.js';
|
|
8
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/layer/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAChE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,mBAAmB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/layer/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAChE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,uBAAuB,CAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { SnapResult } from '../components/geometry/snap-guide.js';
|
|
2
|
+
import Layer from './layer.js';
|
|
3
|
+
export default class SnapGuideLayer extends Layer {
|
|
4
|
+
private _snapResult;
|
|
5
|
+
get pointerEvents(): string;
|
|
6
|
+
get capturable(): boolean;
|
|
7
|
+
contains(_x: number, _y: number): boolean;
|
|
8
|
+
get snapResult(): SnapResult | null;
|
|
9
|
+
set snapResult(result: SnapResult | null);
|
|
10
|
+
clear(): void;
|
|
11
|
+
get eventMap(): {
|
|
12
|
+
'(root)': {
|
|
13
|
+
'model-layer': {
|
|
14
|
+
change: (after: any) => void;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
onchange_root_model(after: any): void;
|
|
19
|
+
private syncTransform;
|
|
20
|
+
ready(): Promise<void>;
|
|
21
|
+
render(ctx: CanvasRenderingContext2D): void;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=snap-guide-layer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snap-guide-layer.d.ts","sourceRoot":"","sources":["../../src/layer/snap-guide-layer.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAA;AAEtE,OAAO,KAAK,MAAM,YAAY,CAAA;AAM9B,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,KAAK;IAC/C,OAAO,CAAC,WAAW,CAA0B;IAE7C,IAAI,aAAa,WAEhB;IAED,IAAI,UAAU,YAEb;IAED,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM;IAI/B,IAAI,UAAU,IAAI,UAAU,GAAG,IAAI,CAElC;IAED,IAAI,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,EAGvC;IAED,KAAK;IAOL,IAAI,QAAQ;;;gCAUe,GAAG;;;MAF7B;IAED,mBAAmB,CAAC,KAAK,EAAE,GAAG;IAM9B,OAAO,CAAC,aAAa;IAUf,KAAK;IAKX,MAAM,CAAC,GAAG,EAAE,wBAAwB;CA4BrC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hatiolab/things-scene",
|
|
3
|
-
"version": "10.0.0-beta.
|
|
3
|
+
"version": "10.0.0-beta.27",
|
|
4
4
|
"description": "A high-performance 2D/3D scene graph library for building interactive visual editors, combining HTML5 Canvas and Three.js to enable facility visualization, data-driven animations, and real-time monitoring dashboards",
|
|
5
5
|
"main": "things-scene-min.js",
|
|
6
6
|
"module": "things-scene.mjs",
|