@galacean/effects-plugin-editor-gizmo 0.0.1-alpha.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/README.md ADDED
@@ -0,0 +1,13 @@
1
+ # Galacean Effects Editor Gizmo Plugin
2
+
3
+ ## 本地开发
4
+
5
+ ### 开始开发
6
+
7
+ ``` bash
8
+ # demo
9
+ pnpm --filter @galacean/effects-plugin-editor-gizmo dev
10
+ ```
11
+
12
+ > 浏览器打开: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,121 @@
1
+ import type { GeometryDrawMode, HitTestCustomParams, Mesh, SpriteMesh, Texture, Triangle } from '@galacean/effects';
2
+ import { spec, Transform, VFXItem } from '@galacean/effects';
3
+ import { GizmoSubType } from './define';
4
+ type mat4 = spec.mat4;
5
+ type vec3 = spec.vec3;
6
+ /**
7
+ * 包围盒类型
8
+ */
9
+ export declare enum BoundingType {
10
+ box = 0,
11
+ sphere = 1,
12
+ triangle = 2,
13
+ line = 3
14
+ }
15
+ /**
16
+ * 线条包围盒类型
17
+ */
18
+ export interface GizmoItemBoundingLine {
19
+ type: BoundingType.line;
20
+ points: [vec3, vec3];
21
+ width: number;
22
+ }
23
+ /**
24
+ * 立方体包围盒类型
25
+ */
26
+ export interface GizmoItemBoundingBox {
27
+ type: BoundingType.box;
28
+ center?: vec3;
29
+ size: vec3;
30
+ }
31
+ /**
32
+ * 球体包围盒类型
33
+ */
34
+ export interface GizmoItemBoundingSphere {
35
+ type: BoundingType.sphere;
36
+ center?: vec3;
37
+ radius: number;
38
+ }
39
+ /**
40
+ * 三角数组包围盒类型
41
+ */
42
+ export interface GizmoItemBoundingTriangle {
43
+ type: BoundingType.triangle;
44
+ triangles: Triangle[];
45
+ backfaceCulling?: boolean;
46
+ }
47
+ export type GizmoItemBounding = GizmoItemBoundingBox | GizmoItemBoundingSphere | GizmoItemBoundingTriangle | GizmoItemBoundingLine;
48
+ /**
49
+ *
50
+ */
51
+ export declare class GizmoVFXItem extends VFXItem<Mesh | undefined> {
52
+ duration: number;
53
+ target: number;
54
+ subType: GizmoSubType;
55
+ color: vec3;
56
+ renderMode: GeometryDrawMode;
57
+ depthTest?: boolean;
58
+ size: any;
59
+ contents?: Map<Mesh, Transform>;
60
+ targetItem?: VFXItem<any>;
61
+ boundingMap: Map<string, GizmoItemBounding>;
62
+ hitBounding?: {
63
+ key: string;
64
+ position: vec3;
65
+ };
66
+ mat: mat4;
67
+ wireframeMesh?: Mesh;
68
+ spriteMesh?: SpriteMesh;
69
+ private engine;
70
+ get type(): spec.ItemType;
71
+ set type(t: spec.ItemType);
72
+ set content(content: Mesh | undefined);
73
+ get content(): Mesh | undefined;
74
+ onConstructed(options: {
75
+ content: {
76
+ options: any;
77
+ transform?: any;
78
+ };
79
+ }): void;
80
+ /**
81
+ * 获取默认绘制模式
82
+ * @returns 绘制模式常量
83
+ */
84
+ getDefaultRenderMode(): GeometryDrawMode;
85
+ /**
86
+ * 获取默认尺寸
87
+ * @returns 几何体尺寸
88
+ */
89
+ getDefaultSize(): {};
90
+ createModelContent(item: VFXItem<any>, meshesToAdd: Mesh[]): void;
91
+ createParticleContent(item: VFXItem<any>, meshesToAdd: Mesh[]): void;
92
+ /**
93
+ * 创建 BoundingBox 几何体模型
94
+ * @param item - VFXItem
95
+ * @param meshesToAdd - 插件缓存的 Mesh 数组
96
+ */
97
+ createBoundingBoxContent(item: VFXItem<any>, meshesToAdd: Mesh[]): void;
98
+ /**
99
+ * 创建基础几何体模型
100
+ * @param item - VFXItem
101
+ * @param meshesToAdd - 插件缓存的 Mesh 数组
102
+ * @param subType - GizmoSubType 类型
103
+ */
104
+ createBasicContent(item: VFXItem<Mesh | undefined>, meshesToAdd: Mesh[], subType: GizmoSubType, iconTextures?: Map<string, Texture>): void;
105
+ /**
106
+ * 创建组合几何体模型
107
+ * @param item - VFXItem
108
+ * @param meshesToAdd - 插件缓存的 Mesh 数组
109
+ * @param subType - GizmoSubType 类型
110
+ * @param iconTextures - XYZ 图标纹理(viewHelper 专用)
111
+ */
112
+ createCombinationContent(item: VFXItem<Mesh | undefined>, meshesToAdd: Mesh[], subType: GizmoSubType, iconTextures?: Map<string, Texture>): void;
113
+ onItemUpdate(): void;
114
+ updateRenderData(): void;
115
+ /**
116
+ * 射线检测算法
117
+ * @returns 包含射线检测算法回调方法的参数
118
+ */
119
+ getHitTestParams(): void | HitTestCustomParams;
120
+ }
121
+ export {};
@@ -0,0 +1,6 @@
1
+ export declare const version: string;
2
+ import { GizmoVFXItem } from './gizmo-vfx-item';
3
+ import { GizmoSubType } from './define';
4
+ import { GeometryType, createGeometry } from './geometry';
5
+ export { DirectionLightData } from './geometry/direction-light';
6
+ export { GizmoSubType, GeometryType, createGeometry, GizmoVFXItem, };