|
@@ -13,7 +13,13 @@ import {
|
|
|
Scene,
|
|
|
} from "@/store";
|
|
|
import type { Emitter } from "mitt";
|
|
|
-import { TaggingPositionType } from "@/api";
|
|
|
+import {
|
|
|
+ AnimationModel,
|
|
|
+ AnimationModelAction,
|
|
|
+ AnimationModelFrame,
|
|
|
+ AnimationModelPath,
|
|
|
+ TaggingPositionType,
|
|
|
+} from "@/api";
|
|
|
export enum SettingResourceType {
|
|
|
map = "map",
|
|
|
color = "color",
|
|
@@ -42,7 +48,7 @@ export type SceneModel = ToChangeAPI<SceneModelAttrs> & {
|
|
|
enterRotateMode: () => void;
|
|
|
enterMoveMode: () => void;
|
|
|
leaveTransform: () => void;
|
|
|
- getDefaultRotation: () => SceneLocalPos
|
|
|
+ getDefaultRotation: () => SceneLocalPos;
|
|
|
enterAlignment: () => void;
|
|
|
leaveAlignment: () => void;
|
|
|
enterScaleSet: () => ScaleSet;
|
|
@@ -95,8 +101,8 @@ export interface CameraComeToProps {
|
|
|
dur?: number;
|
|
|
modelId?: FuseModel["id"];
|
|
|
distance?: 1 | 2 | 3;
|
|
|
- maxDis?:number
|
|
|
- isFlyToTag?: boolean
|
|
|
+ maxDis?: number;
|
|
|
+ isFlyToTag?: boolean;
|
|
|
}
|
|
|
|
|
|
export type CalcPathProps = [
|
|
@@ -164,8 +170,8 @@ export interface SDK {
|
|
|
switchScene: (
|
|
|
scene: { type: SceneType; num: string } | null
|
|
|
) => Promise<void>;
|
|
|
- startAddSth: () => void
|
|
|
- endAddSth: () => void
|
|
|
+ startAddSth: () => void;
|
|
|
+ endAddSth: () => void;
|
|
|
addModel: (props: AddModelProps) => SceneModel;
|
|
|
setCameraFov: (fov: number) => void;
|
|
|
enableMap(dom: HTMLDivElement, latlng: number[]): void;
|
|
@@ -182,7 +188,9 @@ export interface SDK {
|
|
|
getPositionByScreen: (
|
|
|
screenPos: ScreenLocalPos,
|
|
|
modelId?: FuseModel["id"]
|
|
|
- ) => (ScenePos & { worldPos: SceneLocalPos, localNormal: SceneLocalPos }) | null;
|
|
|
+ ) =>
|
|
|
+ | (ScenePos & { worldPos: SceneLocalPos; localNormal: SceneLocalPos })
|
|
|
+ | null;
|
|
|
getScreenByPosition: (
|
|
|
localPos: SceneLocalPos,
|
|
|
modelId?: FuseModel["id"]
|
|
@@ -190,7 +198,7 @@ export interface SDK {
|
|
|
screenshot: (width: number, height: number) => Promise<string>;
|
|
|
getPose: () => Pose;
|
|
|
comeTo: (pos: CameraComeToProps) => void;
|
|
|
-
|
|
|
+
|
|
|
enterSceneGuide: (data: SceneGuidePath[]) => SceneGuide;
|
|
|
|
|
|
drawMeasure<T extends StoreMeasure["type"]>(
|
|
@@ -200,39 +208,41 @@ export interface SDK {
|
|
|
): Measure<T>;
|
|
|
startMeasure<T extends StoreMeasure["type"]>(type: T): StartMeasure<T>;
|
|
|
|
|
|
- createTagging: (props: Tagging3DProps) => Tagging3D
|
|
|
+ createTagging: (props: Tagging3DProps) => Tagging3D;
|
|
|
+
|
|
|
+ createPath: (props: PathProps) => Path;
|
|
|
|
|
|
- createPath: (props: PathProps) => Path
|
|
|
+ createAnimationGroup: () => AnimationGroup
|
|
|
}
|
|
|
|
|
|
export type PathProps = {
|
|
|
// 线段名称
|
|
|
- name: string,
|
|
|
+ name: string;
|
|
|
// 是否显示名称,
|
|
|
- showName: boolean,
|
|
|
+ showName: boolean;
|
|
|
// 文字大小
|
|
|
- fontSize: number,
|
|
|
+ fontSize: number;
|
|
|
// 是否显示方向,
|
|
|
- showDirection: boolean,
|
|
|
+ showDirection: boolean;
|
|
|
// 方向是否反向
|
|
|
- reverseDirection: boolean,
|
|
|
+ reverseDirection: boolean;
|
|
|
line: {
|
|
|
- width: number,
|
|
|
- color: string,
|
|
|
- altitudeAboveGround: number
|
|
|
- position?: SceneLocalPos,
|
|
|
- modelId?: string
|
|
|
- },
|
|
|
+ width: number;
|
|
|
+ color: string;
|
|
|
+ altitudeAboveGround: number;
|
|
|
+ position?: SceneLocalPos;
|
|
|
+ modelId?: string;
|
|
|
+ };
|
|
|
points: {
|
|
|
// 点位名称
|
|
|
- name: string,
|
|
|
- position: SceneLocalPos,
|
|
|
- modelId: string,
|
|
|
- }[]
|
|
|
-}
|
|
|
+ name: string;
|
|
|
+ position: SceneLocalPos;
|
|
|
+ modelId: string;
|
|
|
+ }[];
|
|
|
+};
|
|
|
export type Path = {
|
|
|
bus: Emitter<{
|
|
|
- activePoint: number
|
|
|
+ activePoint: number;
|
|
|
// 标注点击事件
|
|
|
click: void;
|
|
|
// 鼠标移入标注事件
|
|
@@ -241,67 +251,69 @@ export type Path = {
|
|
|
leave: void;
|
|
|
// 线段坐标更改事件
|
|
|
linePositionChange: {
|
|
|
- pos: SceneLocalPos,
|
|
|
- modelId: string
|
|
|
- }
|
|
|
- focus: boolean
|
|
|
+ pos: SceneLocalPos;
|
|
|
+ modelId: string;
|
|
|
+ };
|
|
|
+ focus: boolean;
|
|
|
// 路径点位置变更
|
|
|
- changePoints: PathProps['points']
|
|
|
- drawed: void
|
|
|
+ changePoints: PathProps["points"];
|
|
|
+ drawed: void;
|
|
|
}>;
|
|
|
- changeDirection: ( show: boolean, reverse: boolean ) => void
|
|
|
- changeFontSize: (fontSize: number) => void
|
|
|
- focus: (f: boolean) => void
|
|
|
+ changeDirection: (show: boolean, reverse: boolean) => void;
|
|
|
+ changeFontSize: (fontSize: number) => void;
|
|
|
+ focus: (f: boolean) => void;
|
|
|
highlight: (f: boolean) => void;
|
|
|
- changeVisibilityRange: (range: number) => void
|
|
|
- changePointName: (index: number, name: string) => void
|
|
|
+ changeVisibilityRange: (range: number) => void;
|
|
|
+ changePointName: (index: number, name: string) => void;
|
|
|
// 飞向路径
|
|
|
- fly: () => void,
|
|
|
+ fly: () => void;
|
|
|
// 更改路径点
|
|
|
- changePathPoints: (points: Omit<PathProps['points'][number], 'name'>[]) => void
|
|
|
+ changePathPoints: (
|
|
|
+ points: Omit<PathProps["points"][number], "name">[]
|
|
|
+ ) => void;
|
|
|
// 播放路径,相机沿着路径运动,传入播放完毕回调
|
|
|
- play: (playedHandler: () => void) => void
|
|
|
+ play: (playedHandler: () => void) => void;
|
|
|
// 停止播放路径
|
|
|
- pause: () => void
|
|
|
+ pause: () => void;
|
|
|
// 是否可编辑
|
|
|
- changeCanEdit: (canMove: boolean) => void
|
|
|
- deletePoint: (index: number) => void
|
|
|
- changeEditMode: (editMode: boolean) => void
|
|
|
+ changeCanEdit: (canMove: boolean) => void;
|
|
|
+ deletePoint: (index: number) => void;
|
|
|
+ changeEditMode: (editMode: boolean) => void;
|
|
|
// 可见性
|
|
|
- visibility: (visibility: boolean) => void
|
|
|
+ visibility: (visibility: boolean) => void;
|
|
|
// 气泡是否可见
|
|
|
- visibilityName: (visibility: boolean) => void
|
|
|
+ visibilityName: (visibility: boolean) => void;
|
|
|
// 更改标题气泡属性
|
|
|
- changeLine: (props: Partial<PathProps['line']>) => void
|
|
|
+ changeLine: (props: Partial<PathProps["line"]>) => void;
|
|
|
// 更改标题气泡属性
|
|
|
- changeName: (name: string) => void
|
|
|
+ changeName: (name: string) => void;
|
|
|
// 线段销毁
|
|
|
- destroy: () => void
|
|
|
-}
|
|
|
+ destroy: () => void;
|
|
|
+};
|
|
|
|
|
|
export type Tagging3DProps = {
|
|
|
- lineHeight: number
|
|
|
- fontSize: number,
|
|
|
+ lineHeight: number;
|
|
|
+ fontSize: number;
|
|
|
// 标题
|
|
|
- title: string
|
|
|
+ title: string;
|
|
|
// 标注类型 2d | 3d
|
|
|
- type: TaggingPositionType,
|
|
|
+ type: TaggingPositionType;
|
|
|
// 模型id
|
|
|
- modelId: string,
|
|
|
+ modelId: string;
|
|
|
// 贴地射线获取的位置
|
|
|
- position: SceneLocalPos
|
|
|
- normal: SceneLocalPos
|
|
|
+ position: SceneLocalPos;
|
|
|
+ normal: SceneLocalPos;
|
|
|
// 是否可以移动
|
|
|
- canMove: boolean,
|
|
|
+ canMove: boolean;
|
|
|
// 贴地图片url
|
|
|
- image: string
|
|
|
-
|
|
|
+ image: string;
|
|
|
+
|
|
|
// 贴地图片的变换
|
|
|
mat: {
|
|
|
- scale: number,
|
|
|
- rotation: number,
|
|
|
- }
|
|
|
-}
|
|
|
+ scale: number;
|
|
|
+ rotation: number;
|
|
|
+ };
|
|
|
+};
|
|
|
export type Tagging3D = {
|
|
|
bus: Emitter<{
|
|
|
// 标注点击事件
|
|
@@ -311,44 +323,139 @@ export type Tagging3D = {
|
|
|
// 鼠标移出标注事件
|
|
|
leave: void;
|
|
|
// 位置变更
|
|
|
- changePosition: {pos: SceneLocalPos, modelId: string, normal: SceneLocalPos}
|
|
|
+ changePosition: {
|
|
|
+ pos: SceneLocalPos;
|
|
|
+ modelId: string;
|
|
|
+ normal: SceneLocalPos;
|
|
|
+ };
|
|
|
}>;
|
|
|
- changePosition: (position: {
|
|
|
- modelId: string,
|
|
|
+ changePosition: (position: {
|
|
|
+ modelId: string;
|
|
|
// 贴地射线获取的位置
|
|
|
- position: SceneLocalPos
|
|
|
- normal: SceneLocalPos
|
|
|
- }) => void
|
|
|
- changeFontSize: (fontSize: number) => void
|
|
|
- changeLineHeight: (lineHeight: number) => void
|
|
|
+ position: SceneLocalPos;
|
|
|
+ normal: SceneLocalPos;
|
|
|
+ }) => void;
|
|
|
+ changeFontSize: (fontSize: number) => void;
|
|
|
+ changeLineHeight: (lineHeight: number) => void;
|
|
|
// 设置标题
|
|
|
- changeTitle: (title: string) => void
|
|
|
+ changeTitle: (title: string) => void;
|
|
|
// 标题是否可见
|
|
|
- visibilityTitle: (visibility: boolean) => void
|
|
|
+ visibilityTitle: (visibility: boolean) => void;
|
|
|
// 更改可拖拽移动
|
|
|
- changeCanMove: (canMove: boolean) => void
|
|
|
+ changeCanMove: (canMove: boolean) => void;
|
|
|
// 获取图标中心三维坐标
|
|
|
- getImageCenter: () => SceneLocalPos
|
|
|
+ getImageCenter: () => SceneLocalPos;
|
|
|
// 更改图标
|
|
|
- changeImage: (url: string) => void
|
|
|
+ changeImage: (url: string) => void;
|
|
|
// 标注可见性
|
|
|
- visibility: (visibility: boolean) => void
|
|
|
+ visibility: (visibility: boolean) => void;
|
|
|
// 标注图片变换,传入变换
|
|
|
- changeMat: (props: Tagging3DProps['mat']) => void
|
|
|
+ changeMat: (props: Tagging3DProps["mat"]) => void;
|
|
|
// 更改热点类型
|
|
|
- changeType: (val: TaggingPositionType) => void
|
|
|
+ changeType: (val: TaggingPositionType) => void;
|
|
|
// 距离相机位置
|
|
|
- getCameraDisSquared: () => number
|
|
|
+ getCameraDisSquared: () => number;
|
|
|
// 标注销毁
|
|
|
- destory: () => void
|
|
|
-}
|
|
|
+ destory: () => void;
|
|
|
+};
|
|
|
+
|
|
|
+// 动画组对象
|
|
|
+export type AnimationGroup = {
|
|
|
+ // 播放
|
|
|
+ play: () => void;
|
|
|
+ // 暂停
|
|
|
+ pause: () => void;
|
|
|
+ // 添加动画模型
|
|
|
+ addAnimationModel: (data: AnimationModel) => AnimationModel3D;
|
|
|
+
|
|
|
+ // 设置当前时间, 单位为秒
|
|
|
+ setCurrentTime: (s: number) => void
|
|
|
+};
|
|
|
+
|
|
|
+export type AnimationModel3D = {
|
|
|
+ // 销毁动画模型
|
|
|
+ destory: () => void;
|
|
|
+ // 更改动画模型可见性
|
|
|
+ visibility: (show: boolean) => void;
|
|
|
+ // 更改动画可见范围 不传为全局可见
|
|
|
+ changeVisibilityRange: (range?: number) => void;
|
|
|
+ // 更改模型名称
|
|
|
+ changeTitle: (name: string) => void;
|
|
|
+ // 更改名称字体大小
|
|
|
+ changeFontSize: (size: number) => void;
|
|
|
+ // 更改名称可见性
|
|
|
+ visibilityTitle: (show: boolean) => void;
|
|
|
+
|
|
|
+ // 添加模型帧
|
|
|
+ addFrame: (frame: AnimationModelFrame) => AnimationModelFrame3D;
|
|
|
+ // 添加模型动作
|
|
|
+ addAction: (frame: AnimationModelAction) => AnimationModelAction3D;
|
|
|
+ // 添加模型路径
|
|
|
+ addPath: (frame: Omit<AnimationModelPath, 'pathId'> & {path: Path}) => AnimationModelPath3D;
|
|
|
+
|
|
|
+ // 获取当前模型旁白出现的适合位置,传入旁边dom的宽高,返回像素位置
|
|
|
+ getCurrentSubtitlePixel: (size: {width: number, height: number}) => {x: number, y: number}
|
|
|
+ // 获取当前时间改模型的姿态
|
|
|
+ getCurrentMat: () => {
|
|
|
+ position?: SceneLocalPos;
|
|
|
+ scale?: number;
|
|
|
+ rotation?: SceneLocalPos;
|
|
|
+ originPosition?: SceneLocalPos
|
|
|
+ }
|
|
|
+ // 设置当前操控模式, translate rotate scale originTranslate
|
|
|
+ setCurrentMode: (mode?: string) => void
|
|
|
+};
|
|
|
+
|
|
|
+export type AnimationModelFrame3D = {
|
|
|
+ // 销毁动画模型帧
|
|
|
+ destory: () => void;
|
|
|
+ // 修改帧播放时间 单位为秒
|
|
|
+ changeTime: (s: number) => void
|
|
|
+ // 动画帧姿态修改数据
|
|
|
+ bus: Emitter<{
|
|
|
+ matChange: {
|
|
|
+ position?: SceneLocalPos;
|
|
|
+ scale?: number;
|
|
|
+ rotation?: SceneLocalPos;
|
|
|
+ originPosition?: SceneLocalPos
|
|
|
+ };
|
|
|
+ }>;
|
|
|
+};
|
|
|
+
|
|
|
+export type AnimationModelAction3D = {
|
|
|
+ // 销毁动画模型动作
|
|
|
+ destory: () => void;
|
|
|
+ // 修改动作播放时间 单位为秒
|
|
|
+ changeTime: (s: number) => void
|
|
|
+ // 修改动作幅度
|
|
|
+ changeAmplitude: (n: number) => void
|
|
|
+ // 修改动作速度
|
|
|
+ changeSpeed: (n: number) => void
|
|
|
+ // 修改动持续时间 单位为秒
|
|
|
+ changeDuration: (n: number) => void
|
|
|
+};
|
|
|
+
|
|
|
+
|
|
|
+export type AnimationModelPath3D = {
|
|
|
+ // 销毁动画模型路径
|
|
|
+ destory: () => void;
|
|
|
+ // 修改路径 传入参数为你之前返回的路径对象
|
|
|
+ changePath: (path: Path) => void
|
|
|
+ // 修改播放是否要反向
|
|
|
+ changeReverse: (reverse: boolean) => void
|
|
|
+ // 修改路径播放时间 单位为秒
|
|
|
+ changeTime: (s: number) => void
|
|
|
+ // 修改路径续时间 单位为秒
|
|
|
+ changeDuration: (n: number) => void
|
|
|
+};
|
|
|
+
|
|
|
|
|
|
export let sdk: SDK;
|
|
|
export type InialSDKProps = {
|
|
|
- laserRoot?: string
|
|
|
- ossRoot?: string
|
|
|
- laserOSSRoot?: string
|
|
|
- panoOSSRoot?: string
|
|
|
+ laserRoot?: string;
|
|
|
+ ossRoot?: string;
|
|
|
+ laserOSSRoot?: string;
|
|
|
+ panoOSSRoot?: string;
|
|
|
layout: HTMLDivElement;
|
|
|
scenes: Scene[];
|
|
|
lonlat?: number[];
|