feat(All):Initial

This commit is contained in:
2025-10-04 23:36:07 +08:00
commit 2b4e5d2668
1321 changed files with 415958 additions and 0 deletions
+93
View File
@@ -0,0 +1,93 @@
declare namespace ITHREEScene {
interface SceneJSON extends import("three").SceneJSON {
object: Object3DJSONObject,
images?: Array<ImageJSON | string>;
geometries?: import("three").BufferGeometryJSON[];
textures?: import("three").TextureJSON[];
materials?: import("three").MaterialJSON[];
skeletons?: import("three").SkeletonJSON[];
animations?: import("three").AnimationClipJSON[];
}
interface Object3DJSONObject{
"uuid": string,
"type": "Scene",
"name": string,
"layers": number,
"matrix": number[],
"up": [0 | 1, 0 | 1, 0 | 1],
"background"?: string,
"environment"?: string,
"environmentType"?: "ModelViewer";
"backgroundRotation"?: [number, number, number, string],
"environmentRotation"?: [number, number, number, string],
"children"?: Array<string | import("three").Object3DJSONObject>
}
interface ImageJSON {
uuid: string;
url: import("three").SerializedImage;
}
interface MeshJSON extends import("three").MeshJSON {
images: ImageJSON[];
geometries: import("three").BufferGeometryJSON[];
textures: import("three").TextureJSON[];
materials: import("three").MaterialJSON[];
skeletons?: import("three").SkeletonJSON[];
animations?: import("three").AnimationClipJSON[];
}
}
declare interface ISceneScript {
"name": string,
"source": string
}
declare interface ISceneJson {
metadata: {},
camera: {
"metadata": {
"version": number,
"type": "Object",
"generator": "Object3D.toJSON"
},
"object": {
"uuid": string,
"type": "PerspectiveCamera",
"name": string,
"layers": number,
"matrix": number[],
"up": [0 | 1, 0 | 1, 0 | 1],
"fov": number,
"zoom": number,
"near": number,
"far": number,
"focus": number,
"aspect": number,
"filmGauge": number,
"filmOffset": number
}
},
scene: {
"uuid": string,
"metadata": {
"version": number,
"type": "Object",
"generator": "Object3D.toJSON"
},
"textures": Array<import('three').Texture>,
"images": string[],
"object": ITHREEScene.Object3DJSONObject,
"geometries"?: Array<any>,
//groupChildren?: Array<string>
},
scripts: {
[uuid: string]: ISceneScript[]
},
controls: {
state: string
},
totalZipNumber: number,
sceneInfo: IAppProject.SceneInfo,
}
+6
View File
@@ -0,0 +1,6 @@
declare namespace IScript {
interface IStruct {
name: string;
source: string;
}
}
+106
View File
@@ -0,0 +1,106 @@
/**
* 扩展three.js类型声明
*/
import * as THREE from 'three';
declare module 'three' {
interface Object3D extends THREE.Object3D{
// 是否被忽略,仅用于显示(选中、场景树、打包等都会忽略)
ignore?: boolean;
// 元数据
metaData: {
material?: string | Array<string> | THREE.Material
};
// 是否为粒子发射器代理对象
isEmitterProxy?: boolean;
// 此Object3D被操控时的代理对象
proxy?: THREE.Object3D;
// 粒子发射器
emitter?:any;
// 广告牌配置
options?:any;
// html面板
isHtmlPanel?: boolean;
isHtmlSprite?: boolean;
// 3D Tiles
isTilesGroup?: boolean;
isTiles?: boolean;
//IFC模型
isIFC?: boolean;
// CSS3D/CSS2D
element:HTMLElement;
// 当前所处模型树层级
groupLayer?:number;
// 在对象以及后代中执行的回调函数,仅对满足条件的对象执行
traverseByCondition(callback: (Object3D) => void, condition: (Object3D) => boolean):void;
// 判断 parentObj 是否是 当前对象 的任意层级祖先(包括祖父、曾祖父等)
isAncestor(parentObj:Object3D):boolean;
/* 变更的声明 */
animations: Array<THREE.AnimationAction>;
// /* 以下补充THREE.Object3D自身缺少的声明 */
// isInstancedMesh?: boolean;
// count?:number;
// instanceMatrix?: THREE.InstancedBufferAttribute;
// instanceColor?:THREE.Color;
// isBatchedMesh?:boolean;
// perObjectFrustumCulled?:boolean;
// sortObjects?:boolean;
// _drawRanges?:any;
// _reservedRanges?:any;
// _visibility?: boolean;
// _active?: boolean;
// _bounds?: any;
// _maxInstanceCount?: number;
// _maxVertexCount?: number;
// _maxIndexCount?: number;
// _geometryInitialized?: boolean;
// _geometryCount?: number;
// _matricesTexture?: THREE.Texture;
// _colorsTexture?: THREE.Texture;
// boundingSphere?: THREE.Sphere;
// boundingBox?: THREE.Box3;
// isScene?: boolean;
// material:THREE.Material | THREE.Material[];
/* 强制解决three本身类型声明产生的各种问题 */
[key:string]:any;
}
interface Camera{
isPerspectiveCamera?:boolean;
updateProjectionMatrix:() => void;
}
interface Material {
// 从另一个材质中复制相同的属性(材质类型可能不同)
copyAttr(source:THREE.Material):void;
}
interface Object3DJSONObject{
environmentType?: "ModelViewer";
environment?: string;
options?: {
[key: string]: any
}
}
interface BufferGeometry {
//BVH boundsTree 屬性
boundsTree: any;
}
}
+17
View File
@@ -0,0 +1,17 @@
declare namespace IAppConfig {
interface Shortcuts {
translate: string;
rotate: string;
scale: string;
undo: string;
focus: string;
}
interface Config {
theme: 'os' | 'dark' | 'light';
mainColor: string;
history: boolean;
shortcuts: Shortcuts;
roamingCharacter: string;
}
}
+169
View File
@@ -0,0 +1,169 @@
declare namespace IAppProject {
interface Renderer {
fps: number;
antialias: boolean;
toneMapping: import("three").ToneMapping; //number;
toneMappingExposure: number;
shadow: {
enabled: boolean;
type: import("three").ShadowMapType; //number;
};
}
interface CSM{
enabled: boolean;
fade: boolean;
maxFar: number;
mode: "practical" | "logarithmic" | "uniform";
shadowMapSize: 256 | 512 | 1024 | 2048 | 4096 | 8192 | 16384;
lightDirectionX: number;
lightDirectionY: number;
lightDirectionZ: number;
lightIntensity: number;
lightColor: string;
}
interface Effect {
enabled: boolean;
Outline: {
enabled: boolean;
edgeStrength: number;
edgeGlow: number;
edgeThickness: number;
pulsePeriod: number;
usePatternTexture: boolean;
visibleEdgeColor: string;
hiddenEdgeColor: string;
};
FXAA: {
enabled: boolean;
};
UnrealBloom: {
enabled: boolean;
threshold: number;
strength: number;
radius: number;
};
Bokeh: {
enabled: boolean;
focus: number;
aperture: number;
maxblur: number;
};
Pixelate: {
enabled: boolean;
pixelSize: number;
normalEdgeStrength: number;
depthEdgeStrength: number;
};
Halftone: {
enabled: boolean;
shape: number;
radius: number;
rotateR: number;
rotateG: number;
rotateB: number;
scatter: number;
blending: number;
blendingMode: number;
greyscale: boolean;
};
LUT:{
enabled: boolean;
lut:string;
intensity: number;
};
Afterimage:{
enabled: boolean;
damp: number;
}
}
interface Weather {
fog: {
enabled: boolean;
type: 'Fog' | 'FogExp2',
color: string;
near: number;
far: number;
density: number;
};
rain: {
enabled: boolean;
speed: number;
color: string;
size: number;
radian: number;
alpha: number;
};
snow: {
enabled: boolean;
size: number;
density: number;
speed: number;
alpha: number;
accumulation: boolean;
};
}
interface SceneInfo {
id: string;
sceneType: string;
sceneName: string;
sceneIntroduction: string;
sceneVersion: number;
projectType: number;
coverPicture: string;
hasDrawing: boolean;
zip: string,
zipSize: string,
cesiumConfig?: {
token: "",
mapType: 'satellite' | 'vector',
map: "Amap" | "Tianditu",
// 是否需要标记图
markMap: boolean,
// 底图是天地图时的天地图密匙
tiandituTk: string
};
}
interface DrawingMark {
x: number,
y: number,
w: number,
h: number,
color?:string,
modelUuid?: string,
modelPath?: string
}
interface DrawingImgInfo {
width: number,
height: number
}
interface Drawing {
isUploaded: boolean;
imgSrc:string;
isCad: boolean;
layers: ICad.DxfLayers;
isDrawingRect:boolean;
selectedRectIndex: number;
markList: DrawingMark[];
imgInfo: DrawingImgInfo;
}
interface Config {
xr: boolean;
renderer: Renderer;
csm: CSM;
effect: Effect;
weather: Weather;
}
interface Info extends Config{
sceneInfo: SceneInfo;
drawing: Drawing;
}
}
+45
View File
@@ -0,0 +1,45 @@
declare interface IDrawingMark {
x: number,
y: number,
w: number,
h: number,
color?:string,
modelUuid?: string,
modelPath?: string
}
declare interface IDrawingImgInfo {
width: number,
height: number
}
declare interface IDrawingInfo {
imgSrc:string;
markList:IDrawingMark[];
imgInfo:IDrawingImgInfo;
}
declare namespace ICad{
interface DxfLayer{
name: string,
color: number,
colorIndex: number,
frozen: boolean, // 冻结
visible: boolean,
//entities: any[]
}
interface DxfLayers{
[name:string]: DxfLayer
}
interface Data {
id:number,
fileName :string,
thumbnail:string,
filePath:string,
converterFilePath:string,
conversionStatus :number,
createTime :string,
}
}
+13
View File
@@ -0,0 +1,13 @@
declare namespace IPlugin{
interface Item {
// 插件名称
name:string;
// 插件icon
icon:string;
// 插件ems js地址
src?:string;
}
// 内置插件相关声明...
}
+33
View File
@@ -0,0 +1,33 @@
declare namespace IBillboard {
interface options {
name: string;
position: number[],
image:{
url?:string,
visible:boolean,
width:number,
height:number,
rotate:number,
margin:number,
position:string,
top:boolean,
},
text:{
value:string,
visible:boolean,
fontSize:number,
fontColor:string,
fontFamily?:string,
fontWeight:string | number,
fontStyle:string,
lineGap:number,
padding:number,
align:string,
baseline:string,
strokeWidth:number,
strokeColor:string,
fill:boolean,
fillColor:string,
}
}
}
+257
View File
@@ -0,0 +1,257 @@
declare namespace IParticle {
interface Config {
attr: {
position: { x: number, y: number, z: number },
rotation: { x: number, y: number, z: number },
scale: number,
// 总发射次数
totalEmitTimes: number;
// 发射器的阻尼系数
damping: number;
// 发射器的寿命(ms)
life: number;
// 发射粒子的数量范围
numPan: {
min: number;
max: number;
},
// 每次粒子发射之间的时间间隔(s)
timePan: {
a: number;
b: number;
}
},
init: {
// 粒子质量
mass: {
min: number;
max: number;
// 确定是否对质量值进行平均
center: boolean;
isEnabled: boolean;
},
// 粒子的生命值属性
life: {
min: number;
max: number;
center: boolean;
isEnabled: boolean;
},
// 粒子的半径属性
radius: {
width: number;
height: number;
center: boolean;
isEnabled: boolean;
},
// 粒子的旋转属性
rotation: {
x: number;
y: number;
z: number;
useEmitterRotation: boolean;
isEnabled: boolean;
},
// 粒子起始区域(从此区域中随机设置初始化粒子的起始位置属性)
position: {
isEnabled: boolean;
// 可生成起始粒子的区域
zone: BoxZone | LineZone | MeshZone | PointZone | SphereZone | null
},
// 粒子的速度属性
velocity: {
isEnabled: boolean;
velocity: RadialVelocity | PolarVelocity | VectorVelocity | null
}
// 粒子主体
body: {
isEnabled: boolean;
body: {
// 粒子的形状,Sprite | Mesh | Point
type: 'Sprite' | 'Mesh' | 'Point';
uuid: string;
} | null;
}
},
// 行为类(behaviours)负责管理粒子在被发射之后的行为。也就是说,粒子在被发射出来之后,它的运动轨迹、速度变化、颜色变化等行为特征是由这些行为类来控制和管理的
behaviour: {
// 随时间改变粒子颜色的行为。
color: {
colorA: number | string;
colorB: number | string;
life: number;
easing: string;
isEnabled: boolean;
},
// 缩放粒子的行为
scale: {
scaleA: number;
scaleB: number;
life: number;
easing: string;
isEnabled: boolean;
},
// 对粒子应用阿尔法转换效果的行为
alpha: {
alphaA: number;
alphaB: number;
life: number;
easing: string;
isEnabled: boolean;
},
// 迫使粒子沿特定轴线运动的行为,fx,fy,fz在计算时会 * 100
force: {
fx: number;
fy: number;
fz: number;
life: number;
easing: string;
isEnabled: boolean;
},
// 旋转粒子的行为
rotate: {
x: number;
y: number;
z: number;
life: number;
easing: string;
isEnabled: boolean;
},
// 导致粒子在三维空间中随机坐标漂移的行为
randomDrift: {
driftX: number;
driftY: number;
driftZ: number;
delay: number;
life: number;
easing: string;
isEnabled: boolean;
},
// 使粒子弹起的行为
spring: {
x: number;
y: number;
z: number;
// 弹跳系数
spring: number;
// 弹跳摩擦
friction: number;
life: number;
easing: string;
isEnabled: boolean;
},
// 使粒子被吸引到目标位置的行为
attraction:{
x: number;
y: number;
z: number;
force: number;
radius: number;
life: number;
easing: string;
isEnabled: boolean;
},
// 使粒子远离与其碰撞的其他粒子的行为
collision:{
useMass: boolean;
life: number;
easing: string;
isEnabled: boolean;
}
},
}
interface Object3DJSON {
uuid: string;
type: string;
name: string;
// 粒子发射器JSON
emitter: {
// 粒子发射器配置
config: Config;
// 粒子发射器系统名称
system: string;
// 粒子发射器用到的初始化器类型
useInitializers: string[];
// 粒子发射器初始化器对象中用到的Sprite或Mesh JSON
bodyObjectJSON: import('three').Object3DJSON | null;
// 粒子发射器用到的行为类型
useBehaviours: string[];
};
children: [];
}
// 盒型区域
interface BoxZone {
type: 'BoxZone';
depth: number;
height: number;
width: number;
x: number;
y: number;
z: number;
}
// 线性区域
interface LineZone {
type: 'LineZone';
x1: number;
x2: number;
y1: number;
y2: number;
z1: number;
z2: number;
}
// 网格(Mesh)区域
interface MeshZone {
type: 'MeshZone';
mesh: any;
scale: number;
}
// 点区域
interface PointZone {
type: 'PointZone';
x: number;
y: number;
z: number;
}
// 球区域
interface SphereZone {
type: 'SphereZone';
radius: number;
x: number;
y: number;
z: number;
}
// 径向速度:物体在其半径矢量方向上的速度分量
interface RadialVelocity {
type: 'RadialVelocity';
radius: number;
x: number;
y: number;
z: number;
theta: number;
}
// 极坐标速度
interface PolarVelocity {
type: 'PolarVelocity';
radius: number;
theta: number;
phi: number;
tha: number;
}
// 矢量速度
interface VectorVelocity {
type: 'VectorVelocity';
x: number;
y: number;
z: number;
theta: number;
}
}
+25
View File
@@ -0,0 +1,25 @@
declare namespace ITiles{
interface options{
// tiles地址
url:string;
// tiles group名称
name?:string;
// 加载的3d tiles由于坐标原因,一般不在原点。此配置项为true则重置回原点
reset2origin?:boolean;
// 是否开启tiles的debug模式
debug?:boolean;
// 目标屏幕空间误差(以像素为单位)
errorTarget?: number;
// LRU缓存:TilesRenderer 的实用程序类,用于跟踪当前使用的项目,以便渲染的项目不会被卸载
LRUCache?:{
// 缓存项的最大数量。如果当前缓存项的数量等于此值,则无法再缓存任何项
maxSize?:number;
// 缓存项的最小数量。超过此数量,若缓存数据未被使用,则会将其卸载。
minSize?:number;
// 最大缓存大小(以字节为单位)。如果当前缓存的字节数等于此值,则无法再缓存任何项目。
maxBytesSize?:number;
// 最小缓存大小(以字节数为单位)。超过此大小的缓存数据(如果未使用)将被卸载。
minBytesSize?:number;
}
}
}
+6
View File
@@ -0,0 +1,6 @@
declare interface IPreviewSetting {
container?: HTMLElement;
hdr?: string;
request?:IViewerRequest;
control:IViewerControl
}
+33
View File
@@ -0,0 +1,33 @@
declare interface IViewerGrid {
enabled:boolean;
color: number | string;
row:number;
column:number;
}
declare interface IViewerControl {
minAzimuthAngle:number;
maxAzimuthAngle: number;
minDistance: number;
maxDistance:number;
maxPolarAngle:number;
minPolarAngle:number;
maxZoom:number;
minZoom:number;
dollySpeed:number;
dollyToCursor:boolean;
}
declare interface IViewerRequest {
baseUrl?:string;
}
declare interface IViewerSetting {
container?: HTMLElement;
hdr?: string;
enableEdit?: boolean;
enableScript?: boolean;
request?:IViewerRequest;
grid:IViewerGrid;
control:IViewerControl
}
+1
View File
@@ -0,0 +1 @@
/// <reference types="vite/client" />