@galacean/effects-plugin-editor-gizmo 0.0.0-experimental-downgrade624-20240904

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/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ MIT LICENSE
2
+
3
+ Copyright (c) 2019-present Ant Group Co., Ltd. https://www.antgroup.com/
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,13 @@
1
+ # Galacean Effects Editor Gizmo Plugin
2
+
3
+ ## Development
4
+
5
+ ### Getting Started
6
+
7
+ ``` bash
8
+ # demo
9
+ pnpm --filter @galacean/effects-plugin-editor-gizmo dev
10
+ ```
11
+
12
+ > Open in browser: http://localhost:8081/demo/index.html
13
+
@@ -0,0 +1,7 @@
1
+ export declare const color: {
2
+ xAxisColor: number[];
3
+ yAxisColor: number[];
4
+ zAxisColor: number[];
5
+ };
6
+ export declare const renderMode: 4;
7
+ export declare const axisIconMap: Map<string, string>;
@@ -0,0 +1,37 @@
1
+ import type { GeometryDrawMode, spec } from '@galacean/effects';
2
+ export interface GizmoVFXItemOptions {
3
+ target: number;
4
+ subType: GizmoSubType;
5
+ renderMode?: GeometryDrawMode;
6
+ type: 'editor-gizmo';
7
+ color: spec.vec3;
8
+ size?: number;
9
+ depthTest?: boolean;
10
+ }
11
+ export declare const GizmoVFXItemType: spec.ItemType;
12
+ /**
13
+ * Gizmo 类型
14
+ */
15
+ export declare enum GizmoSubType {
16
+ particleEmitter = 1,
17
+ modelWireframe = 2,
18
+ box = 3,
19
+ sphere = 4,
20
+ cylinder = 5,
21
+ cone = 6,
22
+ torus = 7,
23
+ sprite = 8,
24
+ plane = 9,
25
+ rotation = 10,
26
+ translation = 11,
27
+ scale = 12,
28
+ viewHelper = 13,
29
+ camera = 14,
30
+ frustum = 15,
31
+ light = 16,
32
+ directionLight = 17,
33
+ pointLight = 18,
34
+ spotLight = 19,
35
+ boundingBox = 20,
36
+ floorGrid = 21
37
+ }
@@ -0,0 +1,10 @@
1
+ import { GeometryData } from './geometry';
2
+ export declare class BoxGeometryData extends GeometryData {
3
+ /**
4
+ *
5
+ * @param width
6
+ * @param height
7
+ * @param depth
8
+ */
9
+ constructor(width?: number, height?: number, depth?: number);
10
+ }
@@ -0,0 +1,17 @@
1
+ import { CylinderGeometryData } from './cylinder';
2
+ /**
3
+ *
4
+ */
5
+ export declare class ConeGeometryData extends CylinderGeometryData {
6
+ /**
7
+ *
8
+ * @param radius
9
+ * @param height
10
+ * @param radialSegments
11
+ * @param heightSegments
12
+ * @param openEnded
13
+ * @param thetaStart
14
+ * @param thetaLength
15
+ */
16
+ constructor(radius?: number, height?: number, radialSegments?: number, heightSegments?: number, openEnded?: boolean, thetaStart?: number, thetaLength?: number);
17
+ }
@@ -0,0 +1,18 @@
1
+ import { GeometryData } from './geometry';
2
+ /**
3
+ *
4
+ */
5
+ export declare class CylinderGeometryData extends GeometryData {
6
+ /**
7
+ *
8
+ * @param radiusTop
9
+ * @param radiusBottom
10
+ * @param height
11
+ * @param radialSegments
12
+ * @param heightSegments
13
+ * @param openEnded
14
+ * @param thetaStart
15
+ * @param thetaLength
16
+ */
17
+ constructor(radiusTop?: number, radiusBottom?: number, height?: number, radialSegments?: number, heightSegments?: number, openEnded?: boolean, thetaStart?: number, thetaLength?: number);
18
+ }
@@ -0,0 +1,17 @@
1
+ import { GeometryData } from './geometry';
2
+ /**
3
+ * 方向光造型数据
4
+ * lines
5
+ */
6
+ export declare class DirectionLightData extends GeometryData {
7
+ /**
8
+ * 构造函数
9
+ * @param radius - 圆半径
10
+ * @param length - 光线长度
11
+ * @param segments - 圆精度
12
+ * @param linesNumber - 光线数量
13
+ * @param thetaStart - 起始弧度
14
+ * @param thetaLength - 终止弧度
15
+ */
16
+ constructor(radius?: number, length?: number, segments?: number, linesNumber?: number, thetaStart?: number, thetaLength?: number);
17
+ }
@@ -0,0 +1,13 @@
1
+ import { GeometryData } from './geometry';
2
+ /**
3
+ * 地板线边框造型数据
4
+ * lines
5
+ */
6
+ export declare class FloorLineEdgeGeometryData extends GeometryData {
7
+ /**
8
+ *
9
+ * @param sideLength
10
+ * @param parts
11
+ */
12
+ constructor(sideLength?: number, parts?: number);
13
+ }
@@ -0,0 +1,14 @@
1
+ import { GeometryData } from './geometry';
2
+ /**
3
+ * 地板线造型数据
4
+ * lines
5
+ */
6
+ export declare class FloorLineGeometryData extends GeometryData {
7
+ /**
8
+ *
9
+ * @param sideLength
10
+ * @param parts
11
+ * @param subparts
12
+ */
13
+ constructor(sideLength?: number, parts?: number, subparts?: number);
14
+ }
@@ -0,0 +1,17 @@
1
+ import type { spec } from '@galacean/effects';
2
+ import { GeometryData } from './geometry';
3
+ /**
4
+ *
5
+ */
6
+ export declare class FrustumGeometryData extends GeometryData {
7
+ /**
8
+ *
9
+ * @param position
10
+ * @param rotation
11
+ * @param fov
12
+ * @param aspect
13
+ * @param near
14
+ * @param far
15
+ */
16
+ constructor(position: spec.vec3, rotation: spec.vec3, fov: number, aspect: number, near: number, far: number);
17
+ }
@@ -0,0 +1,45 @@
1
+ /**
2
+ * 基础几何数据[抽象类,不可以直接用来初始化]
3
+ */
4
+ export declare abstract class GeometryData {
5
+ points: number[];
6
+ uvs: number[];
7
+ normals: number[];
8
+ indices: number[];
9
+ /**
10
+ * 构件 XY 平面圆(圆心为(0, 0, z))
11
+ * @param radius - 圆半径
12
+ * @param z - z 值
13
+ * @param segments - 圆精度
14
+ * @param thetaStart - 起始弧度
15
+ * @param thetaLength - 终止弧度
16
+ * @param startIndex - 索引起始值
17
+ * @param points - 点数据
18
+ * @param indices - 索引数据
19
+ */
20
+ createXYPlaneCircle(radius: number, z: number, segments: number, thetaStart: number, thetaLength: number, startIndex: number, points: number[], indices: number[]): void;
21
+ /**
22
+ * 构件 XZ 平面圆(圆心为(0, y, 0))
23
+ * @param radius - 圆半径
24
+ * @param y - y 值
25
+ * @param segments - 圆精度
26
+ * @param thetaStart - 起始弧度
27
+ * @param thetaLength - 终止弧度
28
+ * @param startIndex - 索引起始值
29
+ * @param points - 点数据
30
+ * @param indices - 索引数据
31
+ */
32
+ createXZPlaneCircle(radius: number, y: number, segments: number, thetaStart: number, thetaLength: number, startIndex: number, points: number[], indices: number[]): void;
33
+ /**
34
+ * 构件 YZ 平面圆(圆心为(x, 0, 0))
35
+ * @param radius - 圆半径
36
+ * @param x - x 值
37
+ * @param segments - 圆精度
38
+ * @param thetaStart - 起始弧度
39
+ * @param thetaLength - 终止弧度
40
+ * @param startIndex - 索引起始值
41
+ * @param points - 点数据
42
+ * @param indices - 索引数据
43
+ */
44
+ createYZPlaneCircle(radius: number, x: number, segments: number, thetaStart: number, thetaLength: number, startIndex: number, points: number[], indices: number[]): void;
45
+ }
@@ -0,0 +1,43 @@
1
+ import type { Engine, GeometryDrawMode, spec } from '@galacean/effects';
2
+ import { Geometry } from '@galacean/effects';
3
+ /**
4
+ * 几何体类型
5
+ */
6
+ export declare enum GeometryType {
7
+ Box = 0,
8
+ Sphere = 1,
9
+ Cylinder = 2,
10
+ Cone = 3,
11
+ Torus = 4,
12
+ Frustum = 5,
13
+ Sprite = 6,
14
+ Plane = 7,
15
+ DirectionLight = 8,
16
+ SpotLight = 9,
17
+ PointLight = 10,
18
+ FloorGrid = 11
19
+ }
20
+ /**
21
+ * 几何体参数
22
+ */
23
+ export interface MeshOption {
24
+ size: any;
25
+ color?: spec.vec3;
26
+ renderMode: GeometryDrawMode;
27
+ depthTest?: boolean;
28
+ name?: string;
29
+ alpha?: number;
30
+ }
31
+ /**
32
+ * 合并多个几何体数据
33
+ * @param geometries - 几何体数据数组
34
+ * @returns 合并后的几何体数据
35
+ */
36
+ /**
37
+ * 创建几何体对象
38
+ * @param type - 几何体类型
39
+ * @param size - 几何体尺寸
40
+ * @param renderMode - 绘制模式:`gl.TRIANGLES`、`gl.LINES`
41
+ * @returns
42
+ */
43
+ export declare function createGeometry(engine: Engine, type: GeometryType, size: Record<string, any>, renderMode?: GeometryDrawMode): Geometry;
@@ -0,0 +1,14 @@
1
+ import { GeometryData } from './geometry';
2
+ /**
3
+ *
4
+ */
5
+ export declare class PlaneGeometryData extends GeometryData {
6
+ /**
7
+ *
8
+ * @param width
9
+ * @param height
10
+ * @param widthSegments
11
+ * @param heightSegments
12
+ */
13
+ constructor(width?: number, height?: number, widthSegments?: number, heightSegments?: number);
14
+ }
@@ -0,0 +1,15 @@
1
+ import { GeometryData } from './geometry';
2
+ /**
3
+ * 点光源造型数据
4
+ * lines
5
+ */
6
+ export declare class PointLightData extends GeometryData {
7
+ /**
8
+ * 构造函数
9
+ * @param range - 光照范围
10
+ * @param segments - 圆精度
11
+ * @param thetaStart - 起始弧度
12
+ * @param thetaLength - 终止弧度
13
+ */
14
+ constructor(range?: number, segments?: number, thetaStart?: number, thetaLength?: number);
15
+ }
@@ -0,0 +1,17 @@
1
+ import { GeometryData } from './geometry';
2
+ /**
3
+ *
4
+ */
5
+ export declare class SphereGeometryData extends GeometryData {
6
+ /**
7
+ *
8
+ * @param radius
9
+ * @param widthSegments
10
+ * @param heightSegments
11
+ * @param phiStart
12
+ * @param phiLength
13
+ * @param thetaStart
14
+ * @param thetaLength
15
+ */
16
+ constructor(radius?: number, widthSegments?: number, heightSegments?: number, phiStart?: number, phiLength?: number, thetaStart?: number, thetaLength?: number);
17
+ }
@@ -0,0 +1,16 @@
1
+ import { GeometryData } from './geometry';
2
+ /**
3
+ * 聚光灯造型数据
4
+ * lines
5
+ */
6
+ export declare class SpotLightData extends GeometryData {
7
+ /**
8
+ * 构造函数
9
+ * @param range - 光线范围
10
+ * @param spotAngle - 光线范围[角度]
11
+ * @param segments - 圆精度
12
+ * @param thetaStart - 起始弧度
13
+ * @param thetaLength - 终止弧度
14
+ */
15
+ constructor(range?: number, spotAngle?: number, segments?: number, thetaStart?: number, thetaLength?: number);
16
+ }
@@ -0,0 +1,15 @@
1
+ import { GeometryData } from './geometry';
2
+ /**
3
+ *
4
+ */
5
+ export declare class TorusGeometryData extends GeometryData {
6
+ /**
7
+ *
8
+ * @param radius
9
+ * @param tube
10
+ * @param radialSegments
11
+ * @param tubularSegments
12
+ * @param arc
13
+ */
14
+ constructor(radius?: number, tube?: number, radialSegments?: number, tubularSegments?: number, arc?: number);
15
+ }
@@ -0,0 +1,19 @@
1
+ import type { Composition, Mesh, RenderFrame, Scene, VFXItem } from '@galacean/effects';
2
+ import { AbstractPlugin, RenderPass } from '@galacean/effects';
3
+ import { GizmoVFXItem } from './gizmo-vfx-item';
4
+ export declare class EditorGizmoPlugin extends AbstractPlugin {
5
+ meshToAdd: Mesh[];
6
+ meshToRemove: Mesh[];
7
+ order: number;
8
+ static prepareResource(scene: Scene): Promise<any>;
9
+ static onPlayerDestroy(): void;
10
+ onCompositionConstructed(composition: Composition, scene: Scene): void;
11
+ onCompositionReset(composition: Composition): void;
12
+ onCompositionItemLifeBegin(composition: Composition, item: VFXItem<any>): void;
13
+ onCompositionItemRemoved(composition: Composition, item: VFXItem<any>): void;
14
+ removeGizmoItem(composition: Composition, gizmoVFXItem: GizmoVFXItem): void;
15
+ prepareRenderFrame(composition: Composition, renderFrame: RenderFrame): boolean;
16
+ getBehindRenderPass(pipeline: RenderFrame): RenderPass;
17
+ getEditorRenderPass(pipeline: RenderFrame): RenderPass;
18
+ getFrontRenderPass(pipeline: RenderFrame): RenderPass;
19
+ }
@@ -0,0 +1,124 @@
1
+ import type { GeometryDrawMode, HitTestCustomParams, Mesh, SpriteMesh, Texture } from '@galacean/effects';
2
+ import { spec, Transform, VFXItem, math } from '@galacean/effects';
3
+ import { GizmoSubType } from './define';
4
+ type vec3 = spec.vec3;
5
+ type TriangleLike = math.TriangleLike;
6
+ type Vector3 = math.Vector3;
7
+ declare const Vector3: typeof math.Vector3;
8
+ /**
9
+ * 包围盒类型
10
+ */
11
+ export declare enum BoundingType {
12
+ box = 0,
13
+ sphere = 1,
14
+ triangle = 2,
15
+ line = 3
16
+ }
17
+ /**
18
+ * 线条包围盒类型
19
+ */
20
+ export interface GizmoItemBoundingLine {
21
+ type: BoundingType.line;
22
+ points: [Vector3, Vector3];
23
+ width: number;
24
+ }
25
+ /**
26
+ * 立方体包围盒类型
27
+ */
28
+ export interface GizmoItemBoundingBox {
29
+ type: BoundingType.box;
30
+ center?: Vector3;
31
+ size: Vector3;
32
+ }
33
+ /**
34
+ * 球体包围盒类型
35
+ */
36
+ export interface GizmoItemBoundingSphere {
37
+ type: BoundingType.sphere;
38
+ center?: Vector3;
39
+ radius: number;
40
+ }
41
+ /**
42
+ * 三角数组包围盒类型
43
+ */
44
+ export interface GizmoItemBoundingTriangle {
45
+ type: BoundingType.triangle;
46
+ triangles: TriangleLike[];
47
+ backfaceCulling?: boolean;
48
+ }
49
+ export type GizmoItemBounding = GizmoItemBoundingBox | GizmoItemBoundingSphere | GizmoItemBoundingTriangle | GizmoItemBoundingLine;
50
+ /**
51
+ *
52
+ */
53
+ export declare class GizmoVFXItem extends VFXItem<Mesh | undefined> {
54
+ duration: number;
55
+ target: number;
56
+ subType: GizmoSubType;
57
+ color: vec3;
58
+ renderMode: GeometryDrawMode;
59
+ depthTest?: boolean;
60
+ size: any;
61
+ contents?: Map<Mesh, Transform>;
62
+ targetItem?: VFXItem<any>;
63
+ boundingMap: Map<string, GizmoItemBounding>;
64
+ hitBounding?: {
65
+ key: string;
66
+ position: Vector3;
67
+ };
68
+ mat: math.Matrix4;
69
+ wireframeMesh?: Mesh;
70
+ wireframeMeshes: Mesh[];
71
+ spriteMesh?: SpriteMesh;
72
+ private engine;
73
+ get type(): spec.ItemType;
74
+ set type(t: spec.ItemType);
75
+ set content(content: Mesh | undefined);
76
+ get content(): Mesh | undefined;
77
+ onConstructed(options: {
78
+ content: {
79
+ options: any;
80
+ transform?: any;
81
+ };
82
+ }): void;
83
+ /**
84
+ * 获取默认绘制模式
85
+ * @returns 绘制模式常量
86
+ */
87
+ getDefaultRenderMode(): GeometryDrawMode;
88
+ /**
89
+ * 获取默认尺寸
90
+ * @returns 几何体尺寸
91
+ */
92
+ getDefaultSize(): {};
93
+ createModelContent(item: VFXItem<any>, meshesToAdd: Mesh[]): void;
94
+ createParticleContent(item: VFXItem<any>, meshesToAdd: Mesh[]): void;
95
+ /**
96
+ * 创建 BoundingBox 几何体模型
97
+ * @param item - VFXItem
98
+ * @param meshesToAdd - 插件缓存的 Mesh 数组
99
+ */
100
+ createBoundingBoxContent(item: VFXItem<any>, meshesToAdd: Mesh[]): void;
101
+ /**
102
+ * 创建基础几何体模型
103
+ * @param item - VFXItem
104
+ * @param meshesToAdd - 插件缓存的 Mesh 数组
105
+ * @param subType - GizmoSubType 类型
106
+ */
107
+ createBasicContent(item: VFXItem<Mesh | undefined>, meshesToAdd: Mesh[], subType: GizmoSubType, iconTextures?: Map<string, Texture>): void;
108
+ /**
109
+ * 创建组合几何体模型
110
+ * @param item - VFXItem
111
+ * @param meshesToAdd - 插件缓存的 Mesh 数组
112
+ * @param subType - GizmoSubType 类型
113
+ * @param iconTextures - XYZ 图标纹理(viewHelper 专用)
114
+ */
115
+ createCombinationContent(item: VFXItem<Mesh | undefined>, meshesToAdd: Mesh[], subType: GizmoSubType, iconTextures?: Map<string, Texture>): void;
116
+ onItemUpdate(): void;
117
+ updateRenderData(): void;
118
+ /**
119
+ * 射线检测算法
120
+ * @returns 包含射线检测算法回调方法的参数
121
+ */
122
+ getHitTestParams(): void | HitTestCustomParams;
123
+ }
124
+ export {};
@@ -0,0 +1,6 @@
1
+ import { GizmoVFXItem } from './gizmo-vfx-item';
2
+ import { GizmoSubType } from './define';
3
+ import { GeometryType, createGeometry } from './geometry';
4
+ export { DirectionLightData } from './geometry/direction-light';
5
+ export { GizmoSubType, GeometryType, createGeometry, GizmoVFXItem, };
6
+ export declare const version: string;