分享
查看: 699|回复: 0

[分享] 常用的排障 Api

[复制链接]

常用的排障 Api

发表于 2023-8-18 18:11:25 来自 分享 阅读模式 倒序浏览
zzv_icon699 zzr_icon0 查看全部
本帖最后由 tangan 于 2023-8-18 18:30 编辑

// 查看浏览器内核和版本号
navigator.userAgent.includes('Windows')?navigator.userAgent.includes("Win64")?console.warn(`浏览器是64位版本,Chrome内核版本号是:${/Chrome\/(\d+)/g.exec(navigator.appVersion)[1]}`):console.warn(`浏览器是32位版本,Chrome内核版本号是:${/Chrome\/(\d+)/g.exec(navigator.appVersion)[1]}`):console.warn(`运行在${navigator.userAgentData.platform},Chrome内核版本是:${/Chrome\/(\d+)/g.exec(navigator.appVersion)[1]}`)

// 在某些情况下,可能需要检测 localStorage 是否可用
if (typeof localStorage !== 'undefined') {
  // 在这里可以安全地使用 localStorage
  // 例如:localStorage.setItem('key', 'value');
  console.warn('localStorage 可用')
} else {
  // 提供备用方案,因为 localStorage 不可用
  console.warn('localStorage 不可用')
}

下面是ThingJS-X4常用的检查API:
THINGX.System.Version.version            ThingJS-X版本
THINGX.System.Version.geo                  地图uearth版本
THINGX.System.Version.thingjs             thingjs版本
THING.THEMEVERSION                         效果插件版本
THINGX.System.Version.marker             标记库版本
THING.WASM.VERSION                         加密解密模块版本信息
VideoSurveillanceManager.Version       视频模块版本信息
THING.INSTANCETOOL_VERSION         批量渲染instance模块版本信息
THING.Utils.isSupportWebGL()             是否支持WebGL

const app = THING.App.current                        app 是 ThinigJS 的主程序
const map = CMAP.getCurrentMap()                地图类对象 map => 图层管理器

uinv.disableMods = [];   模块屏蔽
X4:"业务&图层","操作集","标记","物体面板","场景控制","扩展","皮肤","业务","系统"
X3:"业务&图层","操作集","标记","物体面板","场景控制","扩展","皮肤","核心"

在线模型预览工具(链接上换模型ID即可预览):查看模型信息
https://thingdepot.uino.cn/view/ ... 9f0ad9613011886137b

const map = CMAP.getCurrentMap()                获取地球map对象
map.mapConfig                                                                获取地球配置
const app = Thing.App.current                        获取场景对象
const curLevel = app.level.current                获取当前层级
curLevel.query('xx')                                                从当前层级往下查询
const o = app.selection.objects[0]                获取选中孪生体
app.renderState.fps                                                当前层级渲染帧率
app.renderStates.calls                                        当前层级渲染次数 drawcall数量
app.lighting.mainLight.shadow                        当前层级光源设置是否开启阴影
app.renderStates.textures                                当前层级纹理贴图数量,单位:个 (使用ThingJS Debugger可看其消耗内存)

cp = app.root.defaultCampus                                获取场景默认园区
cp.builder.indexJson                                                模型信息
cp.builder.sceneJson                                                场景信息:可根据场景信息查看到场景内渲染的孪生体等内容
cp.node.getMeshes()                                                获取该对象节点下网格对象集合

// 所有节点mesh的效果标签,可根据打的标签查看其使用的效果
meshArr = cp.node.getMeshes()                        
meshArr.map(m=>m._sfStyle)                                获取mesh效果标签
mats=meshArr[0].getMaterials()                        获取某个mesh的所有材质

const ground = app.query('.Ground')[0]
ground.node.getFacesNumber()                        获取地面的面数

// 降序排列输出当前层级下所有节点mesh的面数; 比如:1棵树叶用了1万面等
var table = []
var curLevel = app.level.current
curLevel.node.getMeshes().forEach(mesh => {
    var name = mesh.name;
    var facesNum = mesh.getFacesNumber();
    table.push({name,facesNum});
})
table = _.orderBy(table,'facesNum','desc') // 降序排列
console.table(table)

instance
批处理镜像的样式分类属于Thing(也只能是Thing)
// 查看模型是否批量渲染
t = app.query('#temp')[0]   (这里注意,存下来之后就不要选中了,因为选中沟边会影响__batchState)
t.__batchState                 // running表示正在生效 pause表示暂停了(未生效) ""表示 压根不支持
t._batchTarget._batchObject    // 获取批量渲染mesh对象
t._batchTarget._batchObject.name

选择集
app.selection.objects[0]                                                                        获取当前选中的孪生体集合取第一个
app.selection.objects                                                                        获取当前选中的孪生体集合
app.selection.select(digitalTwin,[ digitalTwin])                选中指定的孪生体
app.selection.deselect(digitalTwin)                                        取消选中孪生体
app.selection.clear()                                                                        清空选择集

uinv.themeManager.changeEarthEffect('default')                移除地球效果模板
uinv.themeManager.changeEarthEffect('安德地图')                地球应用'安德地图'效果模板
uinv.themeManager.changeCampusTheme(null)                                移除园区效果模板
uinv.themeManager.changeCampusTheme('川陀_默认')                园区应用'川陀_默认'效果模板
obj._themeKey_                                                                                        获取孪生体对象当前应用的效果模版生效情景
obj.applyTheme('default')                                                                移除孪生体的效果模板
obj.applyTheme('川陀_默认')                                                                设置孪生体应用'川陀_默认'效果模板
app.skyBox                                                                                                        场景天空盒
app.background                                                                                        背景
app.lighting                                                                                                灯光
app.lighting.mainLight.shadow                                                        主光源的阴影设置是否开启
app.postEffect                                                                                        后期
环境反射贴图(以建筑外立面为例,假设下面代码中的 obj 为建筑外立面)
mesh = obj.node.getMeshes();
envMap = mesh[0].material.envMap.name;

特殊的对象
地面类型: 获取园区地面
        app.query('.Ground')[0]
        ground = app.query('.Campus')[0].ground
杂物类型(Misc):提供楼层中杂物的管理能力。杂物指没有设置用户属性的对象
        const misc = floor.misc
        console.log(misc)
合并物体(CombinedObject)
        模型合并
场景常用方法
app.pixelRatio                                                                // 像素比(0~1数值越大,渲染效果越清晰(帧率降低))
app.captureScreenshot('myScreenshot.jpg')        // 将3D渲染的画面保存成 myScreenshot.jpg图片并 下载至浏览器默认文件下载目录
app.saveFile('xx.json','text')                                // 第一个参数是文件名称,第二个参数 是文件内容,必须是字符串

包围盒
o.getOrientedBox()
o.style.orientedBoundingBox = true

// 输出当前园区地面下的所有mesh包围盒信息
cp = app.root.defaultCampus
// cp = app.query('.Campus')[0]
ground = cp.ground
meshes = ground.node.getMeshes()
// meshes.forEach(mesh=>{console.info(mesh.id,mesh.getSelfWorldAABB(),mesh,'全量2')})
meshes.forEach(mesh=>{
   console.warn(mesh.id,mesh.name,mesh)
   if(mesh.geometry.boundingSphere){
       console.warn(mesh.id,mesh.name,mesh.geometry.boundingSphere.radius,mesh.geometry.boundingSphere.center,mesh,'全量1')
   }else{
       // 有些地面有空mesh对象,需要单独处理排除,不然可能会有异常日志
       console.warn(mesh.id,mesh.name,mesh,'部分')
   }
})

// 如果发现某个对象的包围不对了,可以尝试遍历孩子,看看是不是孩子里有位置不对的对象或包围盒过大的对象
obj.children.forEach((child) => {
    const obb = child.orientedBoundingBox
    console.info(child.id, child.name, child.position, obb.size)
})

// 接口请求
fetch('http://ip:port/xxx', {
    method: "POST",
    headers: {
        "content-type": "application/json"
    },
    body: JSON.stringify({
        name: 'bocaige',
        age: 18
    })
}).then(rsp=>rsp.json()).then(res=>{
    console.trace(res,'bocaige')
})

// 插件开发相关(常用)
uinv.utils.createCss('.bocaige{ font-size: 24px!important;}','设置指定的类字体大小')    用于设置全局样式
avatar
游客~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

130700ppkpl8x3t7tt1b1t