@stampgis/webrtc 1.0.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/StampRtti.ts","../src/StampUtil.ts","../src/loader.ts","../src/index.ts"],"sourcesContent":["export enum STAMP_RTTI {\n //图层\n SE_RTTI_DEM_LAYER = 101,\n SE_RTTI_DOM_LAYER = 102,\n SE_RTTI_BUILDING_LAYER = 103,\n SE_RTTI_BLOCK_LAYER = 104,\n SE_RTTI_BILLBOARD_LAYER = 105,\n SE_RTTI_MATCH_MODEL_LAYER = 106,\n SE_RTTI_POI_LAYER = 107,\n SE_RTTI_VECTOR_LAYER = 108,\n SE_RTTI_GIS_VECTOR_LAYER = 109,\n SE_RTTI_GIS_POI_LAYER = 110,\n SE_RTTI_OBLIQUE_PHOTO_LAYER = 111,\n SE_RTTI_ANNOTATION_LAYER = 112,\n SE_RTTI_PIPELINE_LAYER = 114,\n SE_RTTI_FOLDER_LAYER = 115,\n SE_RTTI_POWER_LAYER = 116,\n SE_RTTI_PROJECT_LAYER = 117,\n SE_RTTI_EDIT_LAYER = 118,\n SE_RTTI_EDIT_POWER_LAYER = 119,\n SE_RTTI_WMS_LAYER = 120,\n SE_RTTI_WMTS_LAYER = 121,\n SE_RTTI_MAP_LAYER = 122,\n SE_RTTI_WMS_SUB_LAYER = 123,\n SE_RTTI_MAPSERVER_LAYER = 124,\n SE_RTTI_EDIT_MAP_LAYER = 125,\n SE_RTTI_EDIT_PIPELINE_LAYER = 126,\n SE_RTTI_EDIT_GEOLOGY_LAYER = 127,\n SE_RTTI_VECTOR_TILE_LAYER = 128,\n SE_RTTI_EDIT_MAP_RASTER_LAYER = 129,\n SE_RTTI_MODEL_LOD_LAYER = 130,\n SE_RTTI_TILE_BLOCK_LAYER = 131,\n SE_RTTI_EDIT_MAP_POI_LAYER = 132,\n SE_RTTI_VECTOR_RIVER_LAYER = 133,\n SE_RTTI_POINT_CLOUD_LAYER = 134,\n SE_RTTI_GRID_GEOLOGY_LAYER = 135,\n SE_RTTI_BIM_LAYER = 136,\n SE_RTTI_WIND_FOLIAGE_LAYER = 137,\n SE_RTTI_LIGHT_LAYER = 138,\n SE_RTTI_UE_MODEL_LAYER = 139,\n\n // 北斗网格\n SE_RTTI_BEIDOU_GRID_LAYER = 146,\n SE_RTTI_BEIDOU_GRID_LAYER_PATH = 147,\n\n //观察视角\n SE_GLOBE_OBSERVER = 150,\n\n // 标绘对象\n SE_RTTI_ELEMENT_BOX = 202,\n SE_RTTI_ELEMENT_CYLINDER = 203,\n SE_RTTI_ELEMENT_CONE = 204,\n SE_RTTI_ELEMENT_PRISM = 205,\n SE_RTTI_ELEMENT_PYRAMID = 206,\n SE_RTTI_ELEMENT_VOLUME = 207,\n SE_RTTI_ELEMENT_MODEL_SET = 208,\n SE_RTTI_ELEMENT_ICON = 209,\n SE_RTTI_ELEMENT_SIGNAL_SPHERE = 210,\n SE_RTTI_ELEMENT_POLYGON = 211,\n SE_RTTI_ELEMENT_POINTS = 212,\n\n SE_RTTI_ELEMENT_MESH = 213,\n SE_RTTI_ELEMENT_SLOPE_ARROW = 214,\n SE_RTTI_ELEMENT_VIEW_SHED = 215,\n SE_RTTI_ELEMENT_SPHERE = 216,\n SE_RTTI_ELEMENT_SIMPLE_BILLBOARD = 217,\n SE_RTTI_ELEMENT_SPHERE_PYRAMID = 218,\n SE_RTTI_ELEMENT_SEMISPHERE = 219,\n SE_RTTI_ELEMENT_LINE = 220,\n SE_RTTI_ELEMENT_TILE_MESH = 221,\n SE_RTTI_ELEMENT_MODEL = 222,\n SE_RTTI_EDIT_MODEL = 223,\n SE_RTTI_ELEMENT_PARAPET = 224,\n SE_RTTI_ELEMENT_SLOPE = 225,\n SE_RTTI_ELEMENT_WATER = 226,\n SE_RTTI_ELEMENT_CIRCLE = 227,\n SE_RTTI_ELEMENT_SECTOR = 228,\n SE_RTTI_ELEMENT_CURVE = 229,\n SE_RTTI_ELEMENT_CURVE_CLOSE = 230,\n SE_RTTI_ELEMENT_CURVE_POLYGON = 231,\n SE_RTTI_ELEMENT_LIGHT_CONE = 232,\n SE_RTTI_ELEMENT_TRUMPET = 233,\n SE_RTTI_ELEMENT_FLOW_LINE = 234,\n SE_RTTI_EDIT_UE_MODEL = 235,\n SE_RTTI_ELEMENT_UE_WATER = 236,\n SE_RTTI_ELEMENT_ADVERTISING_BOARD = 237,\n SE_RTTI_ELEMENT_ELLIPSE = 243,\n SE_RTTI_ELEMENT_GRID = 244, //晕渲图\n SE_RTTI_ELEMENT_TEXTURE_POLYGON = 245,\n SE_RTTI_ELEMENT_PARTICLE = 246,\n SE_RTTI_ELEMENT_CAMERA = 247,\n SE_RTTI_EDIT_POWERTOWER = 248,\n SE_RTTI_EDIT_POWERLINE = 249,\n SE_RTTI_ELEMENT_PLOT_SARROW = 250,\n SE_RTTI_ELEMENT_PLOT_EQUAL_SARROW = 251,\n SE_RTTI_ELEMENT_PLOT_TAIL_SARROW = 252,\n SE_RTTI_ELEMENT_PLOT_CUSTOM_ARROW = 253,\n SE_RTTI_ELEMENT_PLOT_CUSTOM_TAIL_ARROW = 254,\n SE_RTTI_ELEMENT_PLOT_DOUBLE_ARROW = 255,\n SE_RTTI_ELEMENT_PLOT_XARROW = 256,\n SE_RTTI_ELEMENT_PLOT_TRIANGLE_FLAG = 257,\n SE_RTTI_ELEMENT_PLOT_RECT_FLAG = 258,\n SE_RTTI_ELEMENT_PLOT_CURVE_FLAG = 259,\n SE_RTTI_ELEMENT_PLOT_ASSEMBLY_AREA = 260,\n SE_RTTI_PEN_STYLE = 261,\n SE_RTTI_BRUSH_STYLE = 262,\n SE_RTTI_ICON_STYLE = 263,\n SE_RTTI_SYMBOL_STYLE = 264,\n SE_RTTI_SIMPLE_LINE_STYLE = 268,\n SE_RTTI_SIMPLE_POLYGON_STYLE = 269,\n SE_RTTI_SIMPLE_BUILDING = 280,\n SE_RTTI_BUILDING_ROOF_PARAPET = 281,\n SE_RTTI_ELEMENT_SOIL_LAYER = 282,\n SE_RTTI_ELEMENT_DRILL_HOLE = 283,\n SE_RTTI_ELEMENT_SLOPE_POLYGON = 284,\n SE_RTTI_ELEMENT_PLOT_EQUAL_SARROW_CLOSE = 285,\n SE_RTTI_ELEMENT_CIRCLE_CONTAINER = 286,\n SE_RTTI_ELEMENT_SQUARE_CONTAINER = 287,\n SE_RTTI_ELEMENT_CIRCLE_JOINT = 288,\n SE_RTTI_ELEMENT_SQUARE_JOINT = 289,\n SE_RTTI_ELEMENT_CIRCLE_WELL = 290,\n SE_RTTI_ELEMENT_SQUARE_WELL = 291,\n SE_RTTI_ELEMENT_SEWAGE_WELL = 292,\n SE_RTTI_ELEMENT_CIRCLE_WELL_PLATE = 293,\n SE_RTTI_ELEMENT_SQUARE_WELL_PLATE = 294,\n SE_RTTI_ELEMENT_SQUARE_TRENCH = 295,\n SE_RTTI_ELEMENT_SQUARE_TRENCH_PLATE = 296,\n SE_RTTI_ELEMENT_PIPELINE_ROOM = 297,\n SE_RTTI_ELEMENT_PIPELINE_MATCHMODEL = 298,\n SE_RTTI_ELEMENT_PIPELINE_POI = 299,\n SE_RTTI_DYNAMIC_OBJECT = 300,\n SE_RTTI_COMMON_DYNAMIC_MODEL = 301,\n SE_RTTI_EDIT_ELEMENT_SOIL_OBJECT = 302,\n SE_RTTI_EDIT_ELEMENT_DRILL_HOLE = 303,\n SE_RTTI_EDIT_ELEMENT_COLOR_TABLE = 304,\n SE_RTTI_EDIT_ELEMENT_ENTITY = 305,\n SE_RTTI_EDIT_GEOLOGY_CONTOUR = 306,\n SE_RTTI_EDIT_ELEMENT_DRILL_ICON = 307,\n SE_RTTI_ELEMENT_CURRENT = 308, //洋流\n SE_RTTI_ELEMENT_HEAT_MAP_3D = 309,\n SE_RTTI_ELEMENT_TEXTURE_SYMBOL = 320, //纹理多边形\n SE_RTTI_ELEMENT_GREATWALL_LINE = 321,\n SE_RTTI_ELEMENT_WIRENET_LINE = 322,\n SE_RTTI_ELEMENT_SYMBOL_3D = 323,\n SE_RTTI_ELEMENT_CORDON = 324,\n SE_RTTI_ELEMENT_ELECTRIC_WALL = 325,\n SE_RTTI_ELEMENT_DYNAMIC_WALL = 327,\n SE_RTTI_ELEMENT_HALO_WALL = 328,\n SE_RTTI_ELEMENT_ARROW_FLOWLINE = 329,\n SE_RTTI_ELEMENT_UE_ICON = 330,\n SE_RTTI_ELEMENT_TRAFFIC_FLOW_LINE = 333,//车流线\n SE_RTTI_ELEMENT_OD_LINE = 334,//OD线\n SE_RTTI_ELEMENT_OD_LINE_CIRCLE = 336,//OD线圆\n SE_RTTI_ELEMENT_SPLINE_FLOW_LINE = 335,//样条车流线\n SE_RTTI_D3D9_MESH_SUBSET = 405,\n SE_RTTI_GEOMETRY_MESH_SUBSET = 406,\n SE_RTTI_X_MEHS = 407,\n SE_RTTI_GRID_GEOLOGY_MESH = 408,\n SE_RTTI_ELEMENT_ALTITUDE_DIFFERNCE_POLYGON = 411,\n SE_RTTI_ELEMENT_CONTOUR_POLYGON = 412,\n SE_RTTI_ELEMENT_HEAT_MAP_POLYGON = 413,\n SE_RTTI_ELEMENT_VOLUME_WATER = 414,\n SE_RTTI_POLYGON_SUBMERGING = 415,\n SE_RTTI_ELEMENT_POLYGON_MESH = 416,\n SE_RTTI_ELEMENT_GAS_SPREAD = 417,\n SE_RTTI_ELEMENT_LIQUID_SPREAD = 418,\n SE_RTTI_STATION_PASS = 501,\n SE_RTTI_STATION_LOOKAT = 502,\n SE_RTTI_STATION_SURROUND = 503,\n SE_RTTI_STATION_ROUTE = 504,\n SE_RTTI_TRACK = 560,\n SE_RTTI_PIPELINE_AREA = 563,\n SE_RTTI_PIPELINE_LINE = 564,\n SE_RTTI_PIPELINE_POINT = 565,\n SE_RTTI_PIPELINE_DANGER = 566,\n SE_RTTI_PIPELINE_CHECK_POINT = 567,\n SE_RTTI_ELEMENT_SLOPE_DIRECTION_POLYGON = 568,\n SE_RTTI_ELEMENT_AUTO_CAMERA = 569,\n SE_RTTI_ELEMENT_WAVE = 570,\n SE_RTTI_ELEMENT_RIVER = 571,\n SE_RTTI_ELEMENT_LIGHT = 572,\n SE_RTTI_SCENE_CONTROLLER = 573,\n SE_RTTI_EDIT_POWERLINE_2D = 574,\n SE_RTTI_EDIT_POWERLINE_3D = 575,\n SE_RTTI_EDIT_POWERLINE_SPACER = 576,\n\n SE_RTTI_ELEMENT_ICON_WEBUI = 999, //webUI文字标注\n}\n","// @ts-nocheck\nimport { STAMP_RTTI } from \"./StampRtti\";\nimport JSZip from \"jszip\";\nimport { saveAs } from \"file-saver\";\ndeclare const StampAPI: any;\nconst StampUtil = new (class {\n highlightGuid = \"\";\n highlightGuidArr: Array<string> = [];\n submergePolygon = null as any;\n earthToolTipMap = [] as any;\n contourPointIconsGuid = [] as any; //等高线标注对象GUID\n contourLineElementGuid = \"\";\n bestPathIconList = [] as any; //最优路径起点终点标注\n lineSightIconList = [] as any; //通视分析起点终点标注\n insolationIconList = [] as any;\n recordedChunks = [] as any;\n mediaRecorder = null as any;\n webUIRootGuid = \"\";\n webUIItems = [] as any;\n libaxIndex = 0;\n screen_num = 1;\n gpsTrackMap = {} as any;\n projectModelLayerMap = {} as any; //工程和模型图层映射关系\n layerData = [] as any; //图层列表\n _maskScreenExGuid: string | null = null;\n\n async initProjectModelLayerMap() {\n this.projectModelLayerMap = {};\n for (let i = 0; i < this.layerData.length; i++) {\n if (!this.projectModelLayerMap[this.layerData[i].guid]) {\n this.projectModelLayerMap[this.layerData[i].guid] = {};\n }\n const projectInfo = (await StampUtil.getProjectInfo(\n this.layerData[i].guid\n )) as any;\n const layers = (await StampUtil.getModelLayerids(\n this.layerData[i].sub_layers\n )) as any;\n //North South East West\n this.projectModelLayerMap[this.layerData[i].guid] = {\n lonlatBox: projectInfo.Rect,\n layers: layers,\n };\n }\n }\n /**\n * 获取地球对象实例\n *\n * @returns {any} 地球对象实例,根据libaxIndex返回不同的实例\n * @description 根据libaxIndex值返回对应的地球对象实例,支持多屏幕显示\n * @example\n * // 获取默认地球对象\n * const earth = StampUtil.getLibax();\n */\n getLibax() {\n if (this.libaxIndex == 0) {\n return StampAPI.lib_ax;\n } else if (this.libaxIndex == 1) {\n return StampAPI.lib_ax1;\n } else if (this.libaxIndex == 2) {\n return StampAPI.lib_ax2;\n }\n return StampAPI.lib_ax;\n }\n\n //#region 基础接口\n /**\n * 生成全球唯一GUID\n *\n * @returns {string} 生成的GUID字符串,格式为xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\n * @description 使用随机数生成符合标准格式的GUID\n * @example\n * // 生成一个新的GUID\n * const guid = StampUtil.createGuid();\n * // 输出类似: \"550e8400-e29b-41d4-a716-446655440000\"\n */\n createGuid() {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(\n /[xy]/g,\n function (c) {\n const r = (Math.random() * 16) | 0;\n const v = c === \"x\" ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n }\n );\n }\n /**\n * 对象深拷贝\n *\n * @param {any} obj 要拷贝的对象\n * @returns {any} 拷贝后的新对象\n * @description 递归复制对象的所有属性,包括嵌套对象和数组\n * @example\n * // 深拷贝一个对象\n * const original = { a: 1, b: { c: 2 } };\n * const copy = StampUtil.deepCopy(original);\n * // 修改拷贝对象不会影响原对象\n * copy.b.c = 3;\n * console.log(original.b.c); // 输出: 2\n */\n deepCopy(obj: any) {\n let objClone = null as any;\n if (Array.isArray(obj)) {\n objClone = [];\n } else {\n objClone = {};\n }\n if (obj && typeof obj === \"object\") {\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n // 判断ojb子元素是否为对象,如果是,递归复制\n if (obj[key] && typeof obj[key] === \"object\") {\n objClone[key] = StampUtil.deepCopy(obj[key]) as any;\n } else {\n // 如果不是,简单复制\n objClone[key] = obj[key] as any;\n }\n }\n }\n }\n return objClone;\n }\n /**\n * 日期格式转时间格式:HH:MM:SS\n *\n * @param {Date} dateTime 日期对象\n * @returns {string} 格式化后的时间字符串,格式为HH:MM:SS\n * @description 将Date对象转换为小时:分钟:秒的时间格式\n * @example\n * // 格式化当前时间\n * const now = new Date();\n * const timeStr = StampUtil.formatDateTime(now);\n * // 输出类似: \"14:30:45\"\n */\n formatDateTime(dateTime: Date) {\n const hour = dateTime.getHours();\n let hourStr = hour.toString();\n if (hour < 10) {\n hourStr = \"0\" + hour;\n }\n const minute = dateTime.getMinutes();\n let minuteStr = minute.toString();\n if (minute < 10) {\n minuteStr = \"0\" + minute;\n }\n const second = dateTime.getSeconds();\n let secondStr = second.toString();\n if (second < 10) {\n secondStr = \"0\" + second;\n }\n return hourStr + \":\" + minuteStr + \":\" + secondStr;\n }\n /**\n * 获取图片URL\n *\n * @param {string} name 图片文件名\n * @returns {string} 完整的图片URL路径\n * @description 根据图片文件名生成完整的URL路径\n * @example\n * // 获取图片URL\n * const imageUrl = StampUtil.getImageUrl(\"icon.png\");\n * // 输出类似: \"http://localhost:8080/images/icon.png\"\n */\n getImageUrl(name: string) {\n return `${window.location.origin}${window.location.pathname}images/${name}`;\n }\n //#endregion\n\n //#region 环境变量\n\n /**\n * 获取应用程序根目录\n *\n * @returns {Promise<any>} 返回包含根目录信息的Promise\n * @description 获取exe所在的目录路径\n * @example\n * // 获取应用程序根目录\n * StampUtil.getRootPath().then((path) => {\n * console.log('应用程序根目录:', path);\n * });\n */\n getRootPath() {\n return new Promise((resolve) => {\n const handler = StampUtil.getLibax().handlers.get(\n StampAPI.LibAx.StampPixelStreamingHandleType.StampType_Environment\n );\n handler.interface.get_root_path();\n const onEnvironmentGet = handler.interface.OnEnvironmentGet;\n handler.interface.OnEnvironmentGet = function (data: any) {\n handler.interface.OnEnvironmentGet = onEnvironmentGet;\n resolve(data);\n };\n });\n }\n\n /**\n * 修改地图信息显示设置\n *\n * @param {Object} [params] 配置参数\n * @param {number} [params.width_ratio=0.01] 绘制区域左上角距窗口左上角距离占屏幕大小长宽比,-1使用默认位置加绘制黑色背景\n * @param {number} [params.height_ratio=0.8] 绘制区域左上角距窗口左上角距离占屏幕大小高度比\n * @param {number} [params.font_color=0xffff0000] 字体颜色,全透表示不显示\n * @param {number} [params.font_width=20] 字体宽度,默认是10\n * @param {number} [params.font_height=20] 字体高度\n * @description 修改地图下方信息显示的位置、颜色和大小\n * @example\n * // 修改信息显示位置和颜色\n * StampUtil.changeInfomation({\n * width_ratio: 0.1,\n * height_ratio: 0.9,\n * font_color: 0xff00ff00,\n * font_width: 16,\n * font_height: 16\n * });\n */\n changeInfomation(params?: any) {\n const environment_interface = StampUtil.getLibax().environment_interface;\n const width_ratio = params.width_ratio || 0.01; // 绘制区域左上角距窗口左上角距离占屏幕大小长宽比,-1使用默认位置加绘制黑色背景,指定位置后黑色背景不画\n const height_ratio = params.height_ratio || 0.8;\n const font_color = params.font_color || 0xffff0000; // 全透表示不显示\n const font_width = params.font_width || 20; // 默认是10\n const font_height = params.font_height || 20;\n environment_interface.set_info_position_color_size(\n width_ratio,\n height_ratio,\n font_color,\n font_width,\n font_height\n );\n }\n\n /**\n * 设置草图模式\n *\n * @param {Object} params 配置参数\n * @param {boolean} params.draftEffectEnable 是否启用草图效果\n * @param {boolean} params.isColorMode 是否启用彩色模式\n * @param {boolean} params.onlyBuilding 是否只针对建筑\n * @description 设置场景的草图显示效果\n * @example\n * // 启用草图模式\n * StampUtil.draftEffect({\n * draftEffectEnable: true,\n * isColorMode: false,\n * onlyBuilding: true\n * });\n */\n draftEffect(params: any) {\n const draft_effect_enable = params.draftEffectEnable;\n const is_color_mode = params.isColorMode;\n const only_building = params.onlyBuilding; //区分地形跟模型\n const environment_interface = StampUtil.getLibax().environment_interface;\n environment_interface.draft_effect(\n draft_effect_enable,\n is_color_mode,\n only_building\n );\n }\n\n /**\n * 设置模型纹理显示\n *\n * @param {string} layerid 图层guid\n * @param {boolean} bShowTexture true: 去掉纹理 / false:显示纹理\n * @description 控制模型是否显示纹理\n * @example\n * // 去掉模型纹理\n * StampUtil.removeTexture('layer_guid', true);\n *\n * // 显示模型纹理\n * StampUtil.removeTexture('layer_guid', false);\n */\n removeTexture(layerid: string, bShowTexture: boolean) {\n const params = [layerid, bShowTexture];\n const layer_manager_interface = StampAPI.LibAx.layer_manager_interface(\n StampUtil.getLibax()\n );\n layer_manager_interface.set_use_default_texture(params);\n }\n\n /**\n * 控制高亮描边效果\n *\n * @param {boolean} outlineEnable 是否开启高亮描边\n * @param {number} [color=0xffe8ff80] 描边颜色,默认值为0xffe8ff80\n * @param {number} [width=2] 描边宽度,默认值为2\n * @description 开启或关闭模型的高亮描边效果\n * @example\n * // 开启高亮描边\n * StampUtil.outline(true, 0xffff0000, 3);\n *\n * // 关闭高亮描边\n * StampUtil.outline(false);\n */\n outline(outlineEnable: boolean, color = 0xffe8ff80, width = 2) {\n const environment_interface = StampAPI.LibAx.environment_interface(\n StampUtil.getLibax()\n );\n environment_interface.outline(outlineEnable, color, width);\n }\n\n /**\n * 设置伽马校色\n *\n * @param {boolean} value 是否开启伽马校色\n * @description 开启或关闭伽马校色功能\n * @example\n * // 开启伽马校色\n * StampUtil.setGamma(true);\n *\n * // 关闭伽马校色\n * StampUtil.setGamma(false);\n */\n setGamma(value: boolean) {\n const environment_interface = StampAPI.LibAx.environment_interface(\n StampUtil.getLibax()\n );\n environment_interface.set_tonemap_gamma(value);\n }\n\n /**\n * 获取伽马校色状态\n *\n * @returns {Promise<boolean>} 返回伽马校色状态的Promise\n * @description 获取当前伽马校色的开启状态\n * @example\n * // 获取伽马校色状态\n * StampUtil.getGamma().then((status) => {\n * console.log('伽马校色状态:', status);\n * });\n */\n getGamma() {\n return new Promise((resolve) => {\n const environment_interface = StampUtil.getLibax().environment_interface;\n environment_interface.OnEnvironmentGet = function (data: any) {\n resolve(data.TonemapGamma);\n };\n environment_interface.get_tonemap_gamma();\n });\n }\n\n /**\n * 设置高亮颜色\n *\n * @param {number} highlightColor 高亮颜色\n * @param {number} emissiveColor 光晕颜色\n * @param {number} [continueTime=7] 高亮持续时间,默认值为7秒\n * @param {number} [intervalTime=0.5] 高亮闪烁间隔时间,默认值为0.5秒\n * @description 设置模型高亮显示的颜色和闪烁效果\n * @example\n * // 设置高亮颜色\n * StampUtil.setHighlightColor(0xffff0000, 0xff00ff00, 5, 0.3);\n */\n setHighlightColor(\n highlightColor: number,\n emissiveColor: number,\n continueTime = 7,\n intervalTime = 0.5\n ) {\n const environment_interface = StampUtil.getLibax().environment_interface;\n environment_interface.set_highlight_color(\n highlightColor,\n emissiveColor,\n continueTime,\n intervalTime\n );\n }\n /**\n * 获取地形透明度\n *\n * @returns {Promise<number>} 返回地形透明度的Promise,值范围为0-100\n * @description 获取当前地形的透明度设置\n * @example\n * // 获取地形透明度\n * StampUtil.getTerrainTransparent().then((transparency) => {\n * console.log('地形透明度:', transparency);\n * });\n */\n getTerrainTransparent() {\n return new Promise((resolve) => {\n const environment_interface = StampUtil.getLibax().environment_interface;\n environment_interface.OnEnvironmentGet = function (data: any) {\n resolve(\n Math.round((parseFloat(data.terrain_transparency) * 100) / 255)\n );\n };\n environment_interface.get_terrain_pransparency();\n });\n }\n\n /**\n * 设置地形透明度\n *\n * @param {number} value 透明度值,范围为0-100\n * @description 设置地形的透明度,会应用到所有屏幕\n * @example\n * // 设置地形透明度为50%\n * StampUtil.setTerrainTransparent(50);\n */\n setTerrainTransparent(value: number) {\n let screenArr = [StampAPI.lib_ax];\n if (this.screen_num == 2) {\n screenArr = [StampAPI.lib_ax, StampAPI.lib_ax1];\n } else if (this.screen_num == 3) {\n screenArr = [StampAPI.lib_ax, StampAPI.lib_ax1, StampAPI.lib_ax2];\n }\n for (let i = 0; i < screenArr.length; i++) {\n const environment_interface = screenArr[i].environment_interface;\n environment_interface.set_terrain_pransparency((value * 255) / 100);\n }\n }\n\n /**\n * 获取编码器质量参数\n *\n * @returns {Promise<any>} 返回编码器质量参数的Promise\n * @description 获取当前编码器的质量设置\n * @example\n * // 获取编码器质量参数\n * StampUtil.getEncoderQp().then((params) => {\n * console.log('编码器质量参数:', params);\n * });\n */\n getEncoderQp() {\n return new Promise((resolve) => {\n const environment_interface = StampUtil.getLibax().environment_interface;\n environment_interface.OnEnvironmentGet = function (data: any) {\n resolve(data);\n };\n environment_interface.get_encoder_qp();\n });\n }\n\n /**\n * 设置编码器质量参数\n *\n * @param {Array<number>} value 质量参数数组,范围为0-51\n * @description 设置编码器的质量参数\n * @example\n * // 设置编码器质量参数\n * StampUtil.setEncoderQp([20, 30]);\n */\n setEncoderQp(value: any) {\n const environment_interface = StampAPI.lib_ax.environment_interface;\n environment_interface.set_encoder_qp(value[0], value[1]); // 0-51 范围\n }\n\n /**\n * 设置图层是否开启倾斜阴影\n *\n * @param {any} curentLayer 图层对象或guid\n * @param {boolean} is_cast_shadow 是否开启阴影\n * @description 控制指定图层是否开启倾斜阴影效果\n * @example\n * // 开启图层阴影\n * StampUtil.setCastShadow('layer_guid', true);\n *\n * // 关闭图层阴影\n * StampUtil.setCastShadow('layer_guid', false);\n */\n setCastShadow(curentLayer: any, is_cast_shadow: boolean) {\n if (curentLayer == undefined) {\n return;\n }\n const layer_manager_interface = StampAPI.LibAx.layer_manager_interface(\n StampUtil.getLibax()\n );\n const params = [curentLayer, is_cast_shadow];\n layer_manager_interface.set_layer_is_cast_shadow(params);\n }\n /**\n * 获取图层倾斜阴影状态\n *\n * @param {any} curentLayer 图层对象或guid\n * @returns {Promise<boolean>} 返回阴影状态的Promise\n * @description 获取指定图层的倾斜阴影开启状态\n * @example\n * // 获取图层阴影状态\n * StampUtil.getCastShadow('layer_guid').then((status) => {\n * console.log('图层阴影状态:', status);\n * });\n */\n getCastShadow(curentLayer: any) {\n return new Promise((resolve) => {\n const layer_manager_interface = StampAPI.LibAx.layer_manager_interface(\n StampUtil.getLibax()\n );\n if (curentLayer == undefined) {\n return;\n }\n layer_manager_interface.OnGetLayerIsCastShadow = function (data: any) {\n if (data.is_cast_shadow != undefined) {\n resolve(data.is_cast_shadow);\n }\n };\n layer_manager_interface.get_layer_is_cast_shadow(curentLayer);\n });\n }\n\n /**\n * 设置模型透明度\n *\n * @param {any} curentLayer 图层对象或guid\n * @param {number} transparency 透明度值,范围为0-100\n * @description 设置指定模型图层的透明度\n * @example\n * // 设置模型透明度为50%\n * StampUtil.setLayerTransparency('layer_guid', 50);\n */\n setLayerTransparency(curentLayer: any, transparency: number) {\n if (curentLayer == undefined) {\n return;\n }\n const layer_manager_interface = StampAPI.LibAx.layer_manager_interface(\n StampUtil.getLibax()\n );\n const params = [curentLayer, transparency / 100];\n layer_manager_interface.set_layer_transparency(params);\n }\n\n /**\n * 获取模型透明度\n *\n * @param {any} currentLayer 图层对象或guid\n * @returns {Promise<number>} 返回透明度值的Promise\n * @description 获取指定模型图层的透明度设置\n * @example\n * // 获取模型透明度\n * StampUtil.getLayerTransparent('layer_guid').then((transparency) => {\n * console.log('模型透明度:', transparency);\n * });\n */\n getLayerTransparent(currentLayer: any) {\n return new Promise((resolve) => {\n const layer_manager_interface = StampAPI.LibAx.layer_manager_interface(\n StampUtil.getLibax()\n );\n layer_manager_interface.OnGetLayerTransparency = function (data: any) {\n resolve(data.transparency);\n };\n layer_manager_interface.get_layer_transparency(currentLayer);\n });\n }\n\n /**\n * 设置模型 Lift 动画参数\n *\n * @param {any} guid 模型guid\n * @param {number} fixedOffset 固定偏移值\n * @param {number} speed 动画速度\n * @param {number} minValue 最小值\n * @param {number} maxValue 最大值\n * @description 设置模型的 Lift 动画效果参数\n * @example\n * // 设置模型 Lift 动画参数\n * StampUtil.setLiftAnimationParam('model_guid', 0, 1, -10, 10);\n */\n setLiftAnimationParam(\n guid: any,\n fixedOffset: number,\n speed: number,\n minValue: number,\n maxValue: number\n ) {\n const layer_manager_interface = StampAPI.LibAx.layer_manager_interface(\n StampUtil.getLibax()\n );\n layer_manager_interface.set_lift_animation_param(\n guid,\n fixedOffset,\n speed,\n minValue,\n maxValue\n );\n }\n\n /**\n * 设置瓦片透明度\n *\n * @param {any} curentLayer 瓦片图层对象或guid\n * @param {number} transparency 透明度值,范围为0-100\n * @description 设置指定瓦片图层的透明度\n * @example\n * // 设置瓦片透明度为50%\n * StampUtil.setTilesTransparency('tile_layer_guid', 50);\n */\n setTilesTransparency(curentLayer: any, transparency: number) {\n if (curentLayer == undefined) {\n return;\n }\n const vector_tile_layer_interface =\n StampAPI.LibAx.vector_tile_layer_interface(StampUtil.getLibax());\n const params = [curentLayer, parseInt(((transparency / 100) * 255) as any)];\n vector_tile_layer_interface.set_alpha(params);\n }\n\n /**\n * 获取瓦片透明度\n *\n * @param {any} currentLayer 瓦片图层对象或guid\n * @returns {Promise<number>} 返回透明度值的Promise,范围为0-1\n * @description 获取指定瓦片图层的透明度设置\n * @example\n * // 获取瓦片透明度\n * StampUtil.getTilesTransparency('tile_layer_guid').then((transparency) => {\n * console.log('瓦片透明度:', transparency);\n * });\n */\n getTilesTransparency(currentLayer: any) {\n return new Promise((resolve) => {\n const vector_tile_layer_interface =\n StampAPI.LibAx.vector_tile_layer_interface(StampUtil.getLibax());\n vector_tile_layer_interface.OnRespondGet = function (data: any) {\n resolve(data.alpha / 255);\n };\n vector_tile_layer_interface.get_alpha(currentLayer);\n });\n }\n\n /**\n * 设置天气特效\n * @param index (\n * 0:雨,\n 1:雨夹电\n 2:雨夹电夹风\n 3:雪\n 4:雪夹风\n 5:电\n 6:雾\n * )\n */\n /**\n * 设置天气特效\n *\n * @param {number} index 天气类型索引:\n * 0:雨,\n * 1:雨夹电\n * 2:雨夹电夹风\n * 3:雪\n * 4:雪夹风\n * 5:电\n * 6:雾\n * @description 设置场景的天气特效\n * @example\n * // 设置下雨特效\n * StampUtil.startWeatherEffects(0);\n *\n * // 设置下雪特效\n * StampUtil.startWeatherEffects(3);\n */\n startWeatherEffects(index: any) {\n const weather_interface = StampAPI.LibAx.weather_interface(\n StampUtil.getLibax()\n );\n weather_interface.start_weather(index);\n }\n\n /**\n * 设置天气特效强度\n *\n * @param {number} value 特效强度值\n * @returns {Promise<number>} 返回处理后的强度值\n * @description 设置天气特效的强度大小\n * @example\n * // 设置天气特效强度\n * StampUtil.setEffectValue(3).then((value) => {\n * console.log('天气特效强度:', value);\n * });\n */\n setEffectValue(value: number) {\n return new Promise((resolve) => {\n const weather_interface = StampAPI.LibAx.weather_interface(\n StampUtil.getLibax()\n );\n value = value % 5;\n weather_interface.set_effect_value(value);\n resolve(value);\n });\n }\n\n /**\n * 停止天气特效\n *\n * @description 停止当前正在播放的天气特效\n * @example\n * // 停止天气特效\n * StampUtil.stopWeather();\n */\n stopWeather = function () {\n const weather_interface = StampAPI.LibAx.weather_interface(\n StampUtil.getLibax()\n );\n weather_interface.stop_weather();\n };\n\n /**\n * 设置地下模式\n *\n * @param {boolean} value 是否开启地下模式\n * @description 控制是否进入地下模式\n * @example\n * // 开启地下模式\n * StampUtil.setUnderground(true);\n *\n * // 关闭地下模式\n * StampUtil.setUnderground(false);\n */\n setUnderground(value: boolean) {\n const global_control_interface =\n StampUtil.getLibax().global_control_interface;\n const params = [value];\n global_control_interface.underground_mode(params);\n }\n\n /**\n * 获取工程信息\n *\n * @param {string} layerid 工程guid\n * @returns {Promise<any>} 返回工程信息的Promise\n * @description 获取指定工程的详细信息\n * @example\n * // 获取工程信息\n * StampUtil.getProjectInfo('project_guid').then((info) => {\n * console.log('工程信息:', info);\n * });\n */\n getProjectInfo(layerid: string) {\n return new Promise((resolve) => {\n const stamp_frame = StampUtil.getLibax().stamp_frame;\n stamp_frame.set_current_project(layerid);\n stamp_frame.OnGetProjectProperty = (data: any) => {\n resolve(data);\n };\n stamp_frame.GetProjectPropertyCommand(layerid);\n });\n }\n\n /**\n * 设置POI鼠标悬停事件\n *\n * @param {Function} hoverFunc 鼠标悬停时的回调函数\n * @param {Function} unHoverFunc 鼠标离开时的回调函数\n * @description 设置POI(兴趣点)的鼠标悬停和离开事件处理函数\n * @example\n * // 设置POI悬停事件\n * StampUtil.setPOIHoverEvent(\n * (data) => {\n * console.log('鼠标悬停在POI上:', data);\n * },\n * (data) => {\n * console.log('鼠标离开POI:', data);\n * }\n * );\n */\n setPOIHoverEvent(hoverFunc: any, unHoverFunc: any) {\n const stamp_frame = StampUtil.getLibax().stamp_frame;\n stamp_frame.OnPOIHover = function (data: any) {\n typeof hoverFunc == \"function\" && hoverFunc(data);\n };\n stamp_frame.OnPOILeave = function (data: any) {\n typeof unHoverFunc == \"function\" && unHoverFunc(data);\n };\n }\n //#endregion\n\n //#region 灯光接口\n\n /**\n * 获取地球场景灯光效果参数\n *\n * @param {boolean} [isSun=true] 是否获取太阳光参数\n * @returns {Promise<Object>} 返回包含所有灯光效果参数的Promise\n * @description 获取地球场景的灯光、天空、大气、雾、曝光和体积云等效果参数\n * @example\n * // 获取地球场景灯光效果参数\n * StampUtil.getUELight().then((params) => {\n * console.log('场景灯光效果参数:', params);\n * });\n */\n async getUELight(isSun = true) {\n //未保存入库就取系统默认值\n const directionalLight = (await StampUtil.getDirectionalLightInfo(\n isSun\n )) as any;\n const skyLight = (await StampUtil.getSkyLight()) as any;\n const skyAtmosphere = (await StampUtil.getSkyAtmosphere()) as any;\n const fog = (await StampUtil.getFogData()) as any;\n const postprocessing = (await StampUtil.getPostprocessingData()) as any;\n const cloudData = (await StampUtil.getCloudData()) as any;\n if (skyAtmosphere && skyAtmosphere.rayleighScatteringScale) {\n skyAtmosphere.rayleighScatteringScale = Number(\n Math.round(skyAtmosphere.rayleighScatteringScale * 10000) / 10000\n );\n }\n if (fog && fog.fogDensity) {\n fog.fogDensity = Number(Math.round(fog.fogDensity * 10000) / 10000);\n }\n const gamma = (await StampUtil.getGamma()) as any;\n const viewSetting = {\n directionalLight,\n skyLight,\n skyAtmosphere,\n fog,\n postprocessing,\n cloudData,\n gamma: gamma == 1,\n };\n return viewSetting;\n }\n\n /**\n * 设置地球场景灯光效果参数\n *\n * @param {Object} viewSetting 灯光效果参数对象\n * @param {Object} [viewSetting.directionalLight] 方向光参数\n * @param {Object} [viewSetting.skyLight] 天空光参数\n * @param {Object} [viewSetting.skyAtmosphere] 天空大气参数\n * @param {Object} [viewSetting.fog] 雾气参数\n * @param {Object} [viewSetting.postprocessing] 曝光参数\n * @param {Object} [viewSetting.cloudData] 体积云参数\n * @param {boolean} [viewSetting.gamma] 伽马校色设置\n * @description 设置地球场景的灯光、天空、大气、雾、曝光和体积云等效果参数\n * @example\n * // 设置地球场景灯光效果参数\n * StampUtil.setUELight({\n * directionalLight: {\n * intensity: 5,\n * lightColor: 4294967295,\n * isSun: true,\n * shadowAmount: 0.75\n * },\n * skyLight: {\n * intensity: 1\n * },\n * fog: {\n * fogDensity: 0.001\n * }\n * });\n */\n setUELight(viewSetting: any) {\n //场景光\n StampUtil.setDirectionalLight(viewSetting.directionalLight);\n\n //天空灯\n StampUtil.setSkyLight(viewSetting.skyLight);\n\n //雾气\n StampUtil.setFogData(viewSetting.fog);\n\n //天空大气\n StampUtil.setSkyAtmosphere(viewSetting.skyAtmosphere);\n\n //曝光\n StampUtil.setPostprocessingData(viewSetting.postprocessing);\n\n //体积云\n StampUtil.setCloudData(viewSetting.cloudData);\n\n if (viewSetting.gamma != undefined) {\n StampUtil.setGamma(viewSetting.gamma);\n }\n }\n\n /**\n * 获取方向光参数\n *\n * @param {boolean} isSun 是否为太阳光\n * @returns {Promise<Object>} 返回方向光参数的Promise\n * @description 获取场景中方向光(如太阳光)的详细参数\n * @example\n * // 获取太阳光参数\n * StampUtil.getDirectionalLightInfo(true).then((params) => {\n * console.log('太阳光参数:', params);\n * });\n *\n * // 获取其他方向光参数\n * StampUtil.getDirectionalLightInfo(false).then((params) => {\n * console.log('方向光参数:', params);\n * });\n */\n getDirectionalLightInfo(isSun: boolean) {\n return new Promise((resolve) => {\n const directional_light_interface =\n StampUtil.getLibax().directional_light_interface;\n directional_light_interface.OnDirectionalLightGet = function (data: any) {\n directional_light_interface.OnDirectionalLightGet = undefined;\n resolve(data);\n };\n directional_light_interface.get_directional_light(isSun);\n });\n }\n\n /**\n * 设置方向光参数\n *\n * @param {Object} lightData 方向光参数对象\n * @param {number} lightData.intensity 光强度\n * @param {number} lightData.lightColor 光颜色\n * @param {boolean} lightData.isSun 是否为太阳光\n * @param {number} lightData.shadowAmount 阴影强度\n * @description 设置场景中方向光(如太阳光)的参数\n * @example\n * // 设置太阳光参数\n * StampUtil.setDirectionalLight({\n * intensity: 5,\n * lightColor: 4294967295,\n * isSun: true,\n * shadowAmount: 0.75\n * });\n */\n setDirectionalLight(lightData: any) {\n StampUtil.getLibax().directional_light_interface.set_directional_light_data(\n lightData\n );\n }\n\n setDirectionalLightTest(lightData: any) {\n StampUtil.getLibax().directional_light_interface.set_directional_light_data_for_test(\n lightData\n );\n }\n\n /**\n * 设置阴影强度\n *\n * @param {number} iIndex 阴影强度值\n * @param {boolean} [isSun=true] 是否为太阳光\n * @description 设置方向光的阴影强度\n * @example\n * // 设置太阳光阴影强度\n * StampUtil.setShadowAmount(0.75, true);\n *\n * // 设置其他方向光阴影强度\n * StampUtil.setShadowAmount(0.5, false);\n */\n setShadowAmount(iIndex: number, isSun = true) {\n StampUtil.setDirectionalLight({\n isSun: isSun,\n shadowAmount: iIndex,\n });\n }\n\n /**\n * 设置高光范围\n *\n * @param {number} [value=0.07619] 高光范围值,默认值为0.07619\n * @param {boolean} [isSun=true] 是否为太阳光\n * @description 设置方向光的高光范围\n * @example\n * // 设置太阳光高光范围\n * StampUtil.setSpecularScale(0.1, true);\n *\n * // 设置其他方向光高光范围\n * StampUtil.setSpecularScale(0.05, false);\n */\n setSpecularScale(value = 0.07619, isSun = true) {\n StampUtil.setDirectionalLight({\n isSun: isSun,\n speculaScale: value,\n });\n }\n /**\n * 设置是否开启光照阴影\n *\n * @param {boolean} bValue 是否开启阴影\n * @param {boolean} [isSun=true] 是否为太阳光\n * @description 设置方向光是否开启阴影效果\n * @example\n * // 开启太阳光阴影\n * StampUtil.setLightShadow(true, true);\n *\n * // 关闭其他方向光阴影\n * StampUtil.setLightShadow(false, false);\n */\n setLightShadow(bValue: boolean, isSun = true) {\n StampUtil.setDirectionalLight({\n isSun: isSun,\n castShadows: bValue,\n });\n }\n\n /**\n * 设置光照强度\n *\n * @param {number} [value=0.4] 光照强度值,范围为0~1,默认值为0.4\n * @param {boolean} [isSun=true] 是否为太阳光\n * @description 设置方向光的光照强度\n * @example\n * // 设置太阳光强度\n * StampUtil.setLightIntensity(0.6, true);\n *\n * // 设置其他方向光强度\n * StampUtil.setLightIntensity(0.3, false);\n */\n setLightIntensity(value = 0.4, isSun = true) {\n StampUtil.setDirectionalLight({\n isSun: isSun,\n intensity: value,\n });\n }\n\n /**\n * 设置光源颜色\n *\n * @param {number} color 光源颜色值\n * @param {boolean} [isSun=true] 是否为太阳光\n * @description 设置方向光的颜色\n * @example\n * // 设置太阳光颜色为白色\n * StampUtil.setLightColor(0xffffff, true);\n *\n * // 设置其他方向光颜色为红色\n * StampUtil.setLightColor(0xff0000, false);\n */\n setLightColor(color: number, isSun = true) {\n StampUtil.setDirectionalLight({\n isSun: isSun,\n lightColor: color,\n });\n }\n\n /**\n * 设置大气太阳光\n *\n * @param {boolean} isSunLight 是否开启大气太阳光\n * @param {boolean} [isSun=true] 是否为太阳光\n * @description 设置方向光是否影响大气效果\n * @example\n * // 开启大气太阳光效果\n * StampUtil.setAtmosphereSunLight(true, true);\n *\n * // 关闭大气太阳光效果\n * StampUtil.setAtmosphereSunLight(false, true);\n */\n setAtmosphereSunLight(isSunLight: boolean, isSun = true) {\n StampUtil.setDirectionalLight({\n isSun: isSun,\n atmosphereSunlight: isSunLight,\n });\n }\n\n setAtmosphereSunDiskColorScale(colorScale: any, isSun = true) {\n StampUtil.setDirectionalLight({\n isSun: isSun,\n atmosphereSunDiskColorScale: colorScale,\n });\n }\n\n /**\n * 设置光源角度\n *\n * @param {number} angle 光源角度值\n * @param {boolean} [isSun=true] 是否为太阳光\n * @description 设置方向光的角度\n * @example\n * // 设置太阳光角度\n * StampUtil.setLightSourceAngle(45, true);\n *\n * // 设置其他方向光角度\n * StampUtil.setLightSourceAngle(90, false);\n */\n setLightSourceAngle(angle: number, isSun = true) {\n StampUtil.setDirectionalLight({\n isSun: isSun,\n lightSourceAngle: angle,\n });\n }\n\n /**\n * 设置光源软角\n *\n * @param {number} softAngle 光源软角值\n * @param {boolean} [isSun=true] 是否为太阳光\n * @description 设置方向光的软角,控制阴影边缘的模糊程度\n * @example\n * // 设置太阳光软角\n * StampUtil.setLightSourceSoftAngle(5, true);\n *\n * // 设置其他方向光软角\n * StampUtil.setLightSourceSoftAngle(10, false);\n */\n setLightSourceSoftAngle(softAngle: number, isSun = true) {\n StampUtil.setDirectionalLight({\n isSun: isSun,\n lightSourceSoftAngle: softAngle,\n });\n }\n\n /**\n * 设置是否使用色温\n *\n * @param {boolean} isUse 是否使用色温\n * @param {boolean} [isSun=true] 是否为太阳光\n * @description 设置方向光是否使用色温\n * @example\n * // 开启色温\n * StampUtil.setUseTemperature(true, true);\n *\n * // 关闭色温\n * StampUtil.setUseTemperature(false, true);\n */\n setUseTemperature(isUse: boolean, isSun = true) {\n StampUtil.setDirectionalLight({\n isSun: isSun,\n useTemperature: isUse,\n });\n }\n\n /**\n * 设置光源温度\n *\n * @param {number} temperature 光源温度值\n * @param {boolean} [isSun=true] 是否为太阳光\n * @description 设置方向光的色温\n * @example\n * // 设置太阳光色温\n * StampUtil.setTemperature(6500, true);\n *\n * // 设置其他方向光色温\n * StampUtil.setTemperature(5000, false);\n */\n setTemperature(temperature: number, isSun = true) {\n StampUtil.setDirectionalLight({\n isSun: isSun,\n temperature: temperature,\n });\n }\n\n /**\n * 设置是否影响场景\n *\n * @param {boolean} isAffect 是否影响场景\n * @param {boolean} [isSun=true] 是否为太阳光\n * @description 设置方向光是否影响场景\n * @example\n * // 开启方向光影响场景\n * StampUtil.setAffectsWorld(true, true);\n *\n * // 关闭方向光影响场景\n * StampUtil.setAffectsWorld(false, true);\n */\n setAffectsWorld(isAffect: boolean, isSun = true) {\n StampUtil.setDirectionalLight({\n isSun: isSun,\n affectsWorld: isAffect,\n });\n }\n\n /**\n * 设置间接光强度\n *\n * @param {number} value 间接光强度值\n * @param {boolean} [isSun=true] 是否为太阳光\n * @description 设置方向光的间接光强度\n * @example\n * // 设置太阳光间接光强度\n * StampUtil.setIndirectLightingIntensity(1.0, true);\n *\n * // 设置其他方向光间接光强度\n * StampUtil.setIndirectLightingIntensity(0.5, false);\n */\n setIndirectLightingIntensity(value: number, isSun = true) {\n StampUtil.setDirectionalLight({\n isSun: isSun,\n indirectLightingIntensity: value,\n });\n }\n\n /**\n * 设置体积散射强度\n *\n * @param {number} value 体积散射强度值\n * @param {boolean} [isSun=true] 是否为太阳光\n * @description 设置方向光的体积散射强度\n * @example\n * // 设置太阳光体积散射强度\n * StampUtil.setVolumetricScatteringIntensity(1.0, true);\n *\n * // 设置其他方向光体积散射强度\n * StampUtil.setVolumetricScatteringIntensity(0.5, false);\n */\n setVolumetricScatteringIntensity(value: number, isSun = true) {\n StampUtil.setDirectionalLight({\n isSun: isSun,\n volumetricScatteringIntensity: value,\n });\n }\n\n /**\n * 设置是否在云上投射阴影\n *\n * @param {boolean} isOnCloud 是否在云上投射阴影\n * @param {boolean} [isSun=true] 是否为太阳光\n * @description 设置方向光是否在云上投射阴影\n * @example\n * // 开启在云上投射阴影\n * StampUtil.setCastShadowsOnClouds(true, true);\n *\n * // 关闭在云上投射阴影\n * StampUtil.setCastShadowsOnClouds(false, true);\n */\n setCastShadowsOnClouds(isOnCloud: boolean, isSun = true) {\n StampUtil.setDirectionalLight({\n isSun: isSun,\n castShadowsOnClouds: isOnCloud,\n });\n }\n\n /**\n * 设置是否在大气上投射阴影\n *\n * @param {boolean} isOnAtmosphere 是否在大气上投射阴影\n * @param {boolean} [isSun=true] 是否为太阳光\n * @description 设置方向光是否在大气上投射阴影\n * @example\n * // 开启在大气上投射阴影\n * StampUtil.setCastShadowsOnAtmosphere(true, true);\n *\n * // 关闭在大气上投射阴影\n * StampUtil.setCastShadowsOnAtmosphere(false, true);\n */\n setCastShadowsOnAtmosphere(isOnAtmosphere: boolean, isSun = true) {\n StampUtil.setDirectionalLight({\n isSun: isSun,\n castShadowsOnAtmosphere: isOnAtmosphere,\n });\n }\n\n /**\n * 设置是否投射云阴影\n *\n * @param {boolean} isCloudShadow 是否投射云阴影\n * @param {boolean} [isSun=true] 是否为太阳光\n * @description 设置方向光是否投射云阴影\n * @example\n * // 开启投射云阴影\n * StampUtil.setCastCloudShadows(true, true);\n *\n * // 关闭投射云阴影\n * StampUtil.setCastCloudShadows(false, true);\n */\n setCastCloudShadows(isCloudShadow: boolean, isSun = true) {\n StampUtil.setDirectionalLight({\n isSun: isSun,\n castCloudShadows: isCloudShadow,\n });\n }\n\n /**\n * 设置云散射强度范围\n *\n * @param {number} color 云散射强度值\n * @param {boolean} [isSun=true] 是否为太阳光\n * @description 设置方向光的云散射强度范围\n * @example\n * // 设置太阳光云散射强度\n * StampUtil.setCloudScatteredLuminanceScale(1.0, true);\n *\n * // 设置其他方向光云散射强度\n * StampUtil.setCloudScatteredLuminanceScale(0.5, false);\n */\n setCloudScatteredLuminanceScale(color: number, isSun = true) {\n StampUtil.setDirectionalLight({\n isSun: isSun,\n cloudScatteredLuminanceScale: color,\n });\n }\n\n /**\n * 设置可移动光源的动态阴影距离\n *\n * @param {number} value 阴影显示距离值\n * @param {boolean} [isSun=true] 是否为太阳光\n * @description 设置可移动光源的动态阴影显示距离\n * @example\n * // 设置太阳光动态阴影距离\n * StampUtil.setDynamicShadowDistanceMovableLight(1000, true);\n *\n * // 设置其他方向光动态阴影距离\n * StampUtil.setDynamicShadowDistanceMovableLight(500, false);\n */\n setDynamicShadowDistanceMovableLight(value: number, isSun = true) {\n StampUtil.setDirectionalLight({\n isSun: isSun,\n dynamicShadowDistanceMovableLight: value,\n });\n }\n\n /**\n * 设置阴影距离消失参数\n *\n * @param {number} value 阴影距离消失参数值\n * @param {boolean} [isSun=true] 是否为太阳光\n * @description 设置阴影距离的淡出比例\n * @example\n * // 设置太阳光阴影距离消失参数\n * StampUtil.setShadowDistanceFadeoutFraction(0.5, true);\n *\n * // 设置其他方向光阴影距离消失参数\n * StampUtil.setShadowDistanceFadeoutFraction(0.3, false);\n */\n setShadowDistanceFadeoutFraction(value: number, isSun = true) {\n StampUtil.setDirectionalLight({\n isSun: isSun,\n shadowDistanceFadeoutFraction: value,\n });\n }\n\n //#endregion\n\n //#region 天空效果参数\n /**\n * 设置天空灯参数\n *\n * @param {Object} data 天空灯参数对象\n * @param {number} [data.intensity=1] 天空光强度\n * @param {number} [data.lightColor=4294967295] 天空光颜色\n * @param {boolean} [data.useDefault=true] 是否使用默认设置\n * @description 设置场景中天空灯的参数\n * @example\n * // 设置天空灯参数\n * StampUtil.setSkyLight({\n * intensity: 1,\n * lightColor: 4294967295,\n * useDefault: true\n * });\n */\n setSkyLight(data: any) {\n StampUtil.getLibax().sky_light_interface.set_sky_light_data(data);\n }\n\n /**\n * 获取天空灯参数\n *\n * @returns {Promise<Object>} 返回天空灯参数的Promise\n * @description 获取场景中天空灯的详细参数\n * @example\n * // 获取天空灯参数\n * StampUtil.getSkyLight().then((params) => {\n * console.log('天空灯参数:', params);\n * });\n */\n getSkyLight() {\n return new Promise((resolve) => {\n const sky_light_interface = StampUtil.getLibax().sky_light_interface;\n sky_light_interface.OnSkyLightGet = function (data: any) {\n resolve(data);\n };\n sky_light_interface.get_sky_light();\n });\n }\n\n /**\n * 设置是否开启实时捕获\n *\n * @param {boolean} bValue 是否开启实时捕获\n * @description 设置天空光是否开启实时捕获\n * @example\n * // 开启实时捕获\n * StampUtil.setRealTimeCapture(true);\n *\n * // 关闭实时捕获\n * StampUtil.setRealTimeCapture(false);\n */\n setRealTimeCapture(bValue: boolean) {\n StampUtil.setSkyLight({\n isRealTimeCapture: bValue,\n });\n }\n\n /**\n * 设置天空光源类型\n *\n * @param {number} value 光源类型值\n * @description 设置天空光的光源类型\n * @example\n * // 设置天空光源类型\n * StampUtil.setSourceType(0);\n */\n setSourceType(value: number) {\n StampUtil.setSkyLight({\n sourceType: value,\n });\n }\n\n /**\n * 设置天空光强度\n *\n * @param {number} value 天空光强度值\n * @description 设置天空光的强度\n * @example\n * // 设置天空光强度\n * StampUtil.setIntensity(1.0);\n */\n setIntensity(value: number) {\n StampUtil.setSkyLight({\n intensity: value,\n });\n }\n\n /**\n * 设置天空光颜色\n *\n * @param {number} color 天空光颜色值\n * @description 设置天空光的颜色\n * @example\n * // 设置天空光颜色为白色\n * StampUtil.setSkyLightColor(0xffffff);\n *\n * // 设置天空光颜色为蓝色\n * StampUtil.setSkyLightColor(0x0000ff);\n */\n setSkyLightColor(color: number) {\n StampUtil.setSkyLight({\n lightColor: color,\n });\n }\n\n /**\n * 设置天空光是否影响场景\n *\n * @param {boolean} bValue 是否影响场景\n * @description 设置天空光是否影响场景\n * @example\n * // 开启天空光影响场景\n * StampUtil.setSkyAffectWorld(true);\n *\n * // 关闭天空光影响场景\n * StampUtil.setSkyAffectWorld(false);\n */\n setSkyAffectWorld(bValue: boolean) {\n StampUtil.setSkyLight({\n affectWorld: bValue,\n });\n }\n\n /**\n * 设置天空光是否投射阴影\n *\n * @param {boolean} bValue 是否投射阴影\n * @description 设置天空光是否投射阴影\n * @example\n * // 开启天空光投射阴影\n * StampUtil.setCastShadows(true);\n *\n * // 关闭天空光投射阴影\n * StampUtil.setCastShadows(false);\n */\n setCastShadows(bValue: boolean) {\n StampUtil.setSkyLight({\n castShadows: bValue,\n });\n }\n\n /**\n * 设置天空光间接光照强度\n *\n * @param {number} value 间接光照强度值\n * @description 设置天空光的间接光照强度\n * @example\n * // 设置天空光间接光照强度\n * StampUtil.setSkyIndirectLightingIntensity(1.0);\n */\n setSkyIndirectLightingIntensity(value: number) {\n StampUtil.setSkyLight({\n indirectLightIntensity: value,\n });\n }\n\n /**\n * 设置天空光体积散射强度\n *\n * @param {number} value 体积散射强度值\n * @description 设置天空光的体积散射强度\n * @example\n * // 设置天空光体积散射强度\n * StampUtil.setSkyVolumetricScatteringIntensity(1.0);\n */\n setSkyVolumetricScatteringIntensity(value: number) {\n StampUtil.setSkyLight({\n volumetricScatteringIntensity: value,\n });\n }\n\n /**\n * 低半球是否使用纯色\n * @param bValue\n */\n setLowerHemisphereIsBlack(bValue: boolean) {\n StampUtil.setSkyLight({\n lowerHemisphereIsBlack: bValue,\n });\n }\n\n /**\n * 低半球纯色颜色\n * @param rgbaColor\n */\n setLowerHemisphereColor(\n rgbaColor = {\n x: 0.003,\n y: 0.003,\n z: 0.003,\n w: 1.0,\n }\n ) {\n StampUtil.setSkyLight({\n lowerHemisphereColor: rgbaColor,\n });\n }\n\n //#endregion\n\n //#region 大气参数设置\n /**\n * 设置天空大气参数\n *\n * @param {Object} skyAtmosphere 天空大气参数对象\n * @param {boolean} [skyAtmosphere.visibility=true] 大气可见性\n * @param {Object} [skyAtmosphere.rayleighScattering] 瑞利散射参数\n * @param {number} [skyAtmosphere.rayleighScattering.x=0.175] 瑞利散射X分量\n * @param {number} [skyAtmosphere.rayleighScattering.y=0.410] 瑞利散射Y分量\n * @param {number} [skyAtmosphere.rayleighScattering.z=1] 瑞利散射Z分量\n * @param {number} [skyAtmosphere.rayleighScattering.w=1] 瑞利散射W分量\n * @param {number} [skyAtmosphere.rayleighScatteringScale=0.016] 瑞利散射缩放\n * @param {Object} [skyAtmosphere.mieScattering] 米氏散射参数\n * @param {number} [skyAtmosphere.mieScattering.x=1] 米氏散射X分量\n * @param {number} [skyAtmosphere.mieScattering.y=1] 米氏散射Y分量\n * @param {number} [skyAtmosphere.mieScattering.z=1] 米氏散射Z分量\n * @param {number} [skyAtmosphere.mieScattering.w=1] 米氏散射W分量\n * @param {number} [skyAtmosphere.mieScatteringScale=0.004] 米氏散射缩放\n * @param {boolean} [skyAtmosphere.useDefault=true] 是否使用默认设置\n * @description 设置天空大气的详细参数\n * @example\n * // 设置天空大气参数\n * StampUtil.setSkyAtmosphere({\n * visibility: true,\n * rayleighScattering: {\n * x: 0.175,\n * y: 0.410,\n * z: 1,\n * w: 1\n * },\n * rayleighScatteringScale: 0.016,\n * mieScattering: {\n * x: 1,\n * y: 1,\n * z: 1,\n * w: 1\n * },\n * mieScatteringScale: 0.004,\n * useDefault: true\n * });\n */\n setSkyAtmosphere(skyAtmosphere: any) {\n StampUtil.getLibax().sky_light_interface.set_sky_atmosphere_data(\n skyAtmosphere\n );\n }\n\n /**\n * 获取天空大气参数\n *\n * @returns {Promise<Object>} 返回天空大气参数的Promise\n * @description 获取场景中天空大气的详细参数\n * @example\n * // 获取天空大气参数\n * StampUtil.getSkyAtmosphere().then((params) => {\n * console.log('天空大气参数:', params);\n * });\n */\n getSkyAtmosphere() {\n return new Promise((resolve) => {\n const sky_light_interface = StampUtil.getLibax().sky_light_interface;\n sky_light_interface.OnSkyAtmosphereGet = function (data: any) {\n resolve(data);\n };\n sky_light_interface.get_sky_atmosphere();\n });\n }\n /**\n * 设置大气可见性\n *\n * @param {boolean} [value=true] 大气可见性\n * @description 设置大气的可见性\n * @example\n * // 开启大气可见性\n * StampUtil.setAtmosphereVisibility(true);\n *\n * // 关闭大气可见性\n * StampUtil.setAtmosphereVisibility(false);\n */\n setAtmosphereVisibility(value = true) {\n const skyAtmosphere = {\n atmosphereVisibility: value,\n };\n StampUtil.setSkyAtmosphere(skyAtmosphere);\n }\n /**\n * 设置大气可见高度\n *\n * @param {number} [value=0.1] 大气可见高度值\n * @description 设置大气的可见高度\n * @example\n * // 设置大气可见高度\n * StampUtil.setAerialPerspectiveStartDepth(0.1);\n */\n setAerialPerspectiveStartDepth(value = 0.10000000149011612) {\n const skyAtmosphere = {\n aerialPerspectiveStartDepth: value,\n };\n StampUtil.setSkyAtmosphere(skyAtmosphere);\n }\n /**\n * 设置空中透视视图距离比例\n *\n * @param {number} [value=1] 空中透视视图距离比例值\n * @description 设置空中透视的视图距离比例\n * @example\n * // 设置空中透视视图距离比例\n * StampUtil.setAerialPerspectiveViewDistanceScale(1);\n */\n setAerialPerspectiveViewDistanceScale(value = 1) {\n const skyAtmosphere = {\n aerialPerspectiveViewDistanceScale: value,\n };\n StampUtil.setSkyAtmosphere(skyAtmosphere);\n }\n /**\n * 设置大气高度\n *\n * @param {number} [value=60] 大气高度值\n * @description 设置大气的高度\n * @example\n * // 设置大气高度\n * StampUtil.setAtmosphereHeight(60);\n */\n setAtmosphereHeight(value = 60) {\n const skyAtmosphere = {\n atmosphereHeight: value,\n };\n StampUtil.setSkyAtmosphere(skyAtmosphere);\n }\n /**\n * 设置多重散射因子\n *\n * @param {number} [value=1] 多重散射因子值\n * @description 设置大气的多重散射因子\n * @example\n * // 设置多重散射因子\n * StampUtil.setMultiScatteringFactor(1);\n */\n setMultiScatteringFactor(value = 1) {\n const skyAtmosphere = {\n multiScatteringFactor: value,\n };\n StampUtil.setSkyAtmosphere(skyAtmosphere);\n }\n /**\n * 设置底部半径\n *\n * @param {number} [value=6378.137] 底部半径值\n * @description 设置大气的底部半径\n * @example\n * // 设置底部半径\n * StampUtil.setBottomRadius(6378.137);\n */\n setBottomRadius(value = 6378.13720703125) {\n const skyAtmosphere = {\n bottomRadius: value,\n };\n StampUtil.setSkyAtmosphere(skyAtmosphere);\n }\n /**\n * 设置地面反照率\n *\n * @param {number} [value=4289374890] 地面反照率值\n * @description 设置大气的地面反照率\n * @example\n * // 设置地面反照率\n * StampUtil.setGroundAlbedo(4289374890);\n */\n setGroundAlbedo(value = 4289374890) {\n const skyAtmosphere = {\n groundAlbedo: value,\n };\n StampUtil.setSkyAtmosphere(skyAtmosphere);\n }\n /**\n * 设置光线样本计数比例\n *\n * @param {number} [value=1] 光线样本计数比例值\n * @description 设置大气的光线样本计数比例\n * @example\n * // 设置光线样本计数比例\n * StampUtil.setRaceSampleCountScale(1);\n */\n setRaceSampleCountScale(value = 1) {\n const skyAtmosphere = {\n raceSampleCountScale: value,\n };\n StampUtil.setSkyAtmosphere(skyAtmosphere);\n }\n /**\n * 设置瑞利散射标度\n *\n * @param {number} [value=0.04] 瑞利散射标度值\n * @description 设置大气的瑞利散射标度\n * @example\n * // 设置瑞利散射标度\n * StampUtil.setRayleighScatteringScale(0.04);\n */\n setRayleighScatteringScale(value = 0.03999999910593033) {\n const skyAtmosphere = {\n rayleighScatteringScale: value,\n };\n StampUtil.setSkyAtmosphere(skyAtmosphere);\n }\n /**\n * 设置瑞利散射颜色\n *\n * @param {Object} [value] 瑞利散射颜色对象\n * @param {number} [value.x=0.17] 瑞利散射颜色X分量\n * @param {number} [value.y=0.409] 瑞利散射颜色Y分量\n * @param {number} [value.z=1] 瑞利散射颜色Z分量\n * @param {number} [value.w=1] 瑞利散射颜色W分量\n * @description 设置大气的瑞利散射颜色\n * @example\n * // 设置瑞利散射颜色\n * StampUtil.setRayleighScatteringColor({\n * x: 0.17,\n * y: 0.409,\n * z: 1,\n * w: 1\n * });\n */\n setRayleighScatteringColor(\n value = {\n x: 0.17000000178813934,\n y: 0.4092339873313904,\n z: 1,\n w: 1,\n }\n ) {\n const skyAtmosphere = {\n rayleighScattering: value,\n };\n StampUtil.setSkyAtmosphere(skyAtmosphere);\n }\n /**\n * 设置瑞利指数分布\n *\n * @param {number} [value=8] 瑞利指数分布值\n * @description 设置大气的瑞利指数分布\n * @example\n * // 设置瑞利指数分布\n * StampUtil.setRayleighExponentialDistribution(8);\n */\n setRayleighExponentialDistribution(value = 8) {\n const skyAtmosphere = {\n rayleighExponentialDistribution: value,\n };\n StampUtil.setSkyAtmosphere(skyAtmosphere);\n }\n\n /**\n * 设置米氏散射标度\n *\n * @param {number} [value=0.04] 米氏散射标度值\n * @description 设置大气的米氏散射标度\n * @example\n * // 设置米氏散射标度\n * StampUtil.setMieScatteringScale(0.04);\n */\n setMieScatteringScale(value = 0.03999999910593033) {\n const skyAtmosphere = {\n mieScatteringScale: value,\n };\n StampUtil.setSkyAtmosphere(skyAtmosphere);\n }\n /**\n * 设置米氏散射颜色\n *\n * @param {Object} [value] 米氏散射颜色对象\n * @param {number} [value.x=0.17] 米氏散射颜色X分量\n * @param {number} [value.y=0.409] 米氏散射颜色Y分量\n * @param {number} [value.z=1] 米氏散射颜色Z分量\n * @param {number} [value.w=1] 米氏散射颜色W分量\n * @description 设置大气的米氏散射颜色\n * @example\n * // 设置米氏散射颜色\n * StampUtil.setMieScatteringColor({\n * x: 0.17,\n * y: 0.409,\n * z: 1,\n * w: 1\n * });\n */\n setMieScatteringColor(\n value = {\n x: 0.17000000178813934,\n y: 0.4092339873313904,\n z: 1,\n w: 1,\n }\n ) {\n const skyAtmosphere = {\n mieScattering: value,\n };\n StampUtil.setSkyAtmosphere(skyAtmosphere);\n }\n /**\n * 设置米氏吸收标度\n *\n * @param {number} [value=0.000444] 米氏吸收标度值\n * @description 设置大气的米氏吸收标度\n * @example\n * // 设置米氏吸收标度\n * StampUtil.setMieAbsorptionScale(0.000444);\n */\n setMieAbsorptionScale(value = 0.0004440000047907233) {\n const skyAtmosphere = {\n mieAbsorptionScale: value,\n };\n StampUtil.setSkyAtmosphere(skyAtmosphere);\n }\n /**\n * 设置米氏吸收颜色\n *\n * @param {Object} [value] 米氏吸收颜色对象\n * @param {number} [value.x=1] 米氏吸收颜色X分量\n * @param {number} [value.y=1] 米氏吸收颜色Y分量\n * @param {number} [value.z=1] 米氏吸收颜色Z分量\n * @param {number} [value.w=1] 米氏吸收颜色W分量\n * @description 设置大气的米氏吸收颜色\n * @example\n * // 设置米氏吸收颜色\n * StampUtil.setMieAbsorptionColor({\n * x: 1,\n * y: 1,\n * z: 1,\n * w: 1\n * });\n */\n setMieAbsorptionColor(\n value = {\n x: 1,\n y: 1,\n z: 1,\n w: 1,\n }\n ) {\n const skyAtmosphere = {\n mieAbsorption: value,\n };\n StampUtil.setSkyAtmosphere(skyAtmosphere);\n }\n\n /**\n * 设置米氏各向异性\n *\n * @param {number} [value=0.75] 米氏各向异性值\n * @description 设置大气的米氏各向异性\n * @example\n * // 设置米氏各向异性\n * StampUtil.setMieAnisotropy(0.75);\n */\n setMieAnisotropy(value = 0.75) {\n const skyAtmosphere = {\n mieAnisotropy: value,\n };\n StampUtil.setSkyAtmosphere(skyAtmosphere);\n }\n /**\n * 设置米氏指数分布\n *\n * @param {number} [value=1.2] 米氏指数分布值\n * @description 设置大气的米氏指数分布\n * @example\n * // 设置米氏指数分布\n * StampUtil.setMieExponentialDistribution(1.2);\n */\n setMieExponentialDistribution(value = 1.2000000476837158) {\n const skyAtmosphere = {\n mieExponentialDistribution: value,\n };\n StampUtil.setSkyAtmosphere(skyAtmosphere);\n }\n\n /**\n * 设置其他吸收标度\n *\n * @param {number} [value=0.002] 其他吸收标度值\n * @description 设置大气的其他吸收标度\n * @example\n * // 设置其他吸收标度\n * StampUtil.setOtherAbsorptionScale(0.002);\n */\n setOtherAbsorptionScale(value = 0.0020000000949949026) {\n const skyAtmosphere = {\n otherAbsorptionnScale: value,\n };\n StampUtil.setSkyAtmosphere(skyAtmosphere);\n }\n /**\n *其他吸收颜色\n * @param value\n */\n setOtherAbsorptionColor(\n value = {\n x: 0.7667340040206909,\n y: 1,\n z: 0,\n w: 1,\n }\n ) {\n const skyAtmosphere = {\n otherAbsorptionn: value,\n };\n StampUtil.setSkyAtmosphere(skyAtmosphere);\n }\n /**\n *天空亮度因子\n * @param value\n */\n setSkyLuminanceFactorColor(\n value = {\n x: 1,\n y: 1,\n z: 1,\n w: 1,\n }\n ) {\n const skyAtmosphere = {\n skyLuminanceFactor: value,\n };\n StampUtil.setSkyAtmosphere(skyAtmosphere);\n }\n /**\n *高度雾贡献\n * @param value\n */\n setHeightFogContribution(value = 2.875) {\n const skyAtmosphere = {\n heightFogContribution: value,\n };\n StampUtil.setSkyAtmosphere(skyAtmosphere);\n }\n /**\n *透射率最小光仰角\n * @param value\n */\n setTransmittanceMinLightElevationAngle(value = -90) {\n const skyAtmosphere = {\n transmittanceMinLightElevationAngle: value,\n };\n StampUtil.setSkyAtmosphere(skyAtmosphere);\n }\n\n /**\n *其他帐篷分布\n * @param value\n */\n setOtherTentDistribution(\n value = {\n x: 25,\n y: 1,\n z: 15,\n }\n ) {\n const skyAtmosphere = {\n otherTentDistribution: value,\n };\n StampUtil.setSkyAtmosphere(skyAtmosphere);\n }\n\n //#endregion\n\n //#region 雾参数设置\n /**\n * 设置雾参数统一接口\n * @param fog 格式参考 {\n \"fogDensity\": 0,\n \"fogHeightFalloff\": 0.10000000149011612,\n \"visibility\": false,\n \"useDefault\": true,\n \"fogMaxOpacity\": 1\n }\n */\n setFogData(fog: any) {\n const exponential_height_fog_interface =\n StampUtil.getLibax().exponential_height_fog_interface;\n exponential_height_fog_interface.set_fog_data(fog);\n }\n\n /**\n * 获取雾参数信息\n * @returns\n */\n getFogData() {\n return new Promise((resolve) => {\n const exponential_height_fog_interface =\n StampUtil.getLibax().exponential_height_fog_interface;\n exponential_height_fog_interface.OnExponentialHeightFogGet = function (\n data: any\n ) {\n resolve(data);\n };\n exponential_height_fog_interface.get_exponential_height_fog();\n });\n }\n\n /**\n * 设置雾密度\n * @param value\n */\n setFogDensity(value = 0.02) {\n const fog = {\n fogDensity: value,\n };\n StampUtil.setFogData(fog);\n }\n\n /**\n * 设置雾高度衰减\n * @param value\n */\n setHeightFalloff(value = 0.2) {\n const fog = {\n fogHeightFalloff: value,\n };\n StampUtil.setFogData(fog);\n }\n\n /**\n * 设置雾可见性\n * @param bValue\n */\n setFogVisibility(bValue: boolean) {\n const fog = {\n visibility: bValue,\n };\n StampUtil.setFogData(fog);\n }\n\n /**\n * 设置雾可见高度\n * @param value\n */\n setFogVisibleHeight(value = 1) {\n const fog = {\n visibleHeight: value,\n };\n StampUtil.setFogData(fog);\n }\n\n /**\n *\n * @param value\n */\n setSecondFogDensity(value = 0) {\n const fog = {\n secondFogDensity: value,\n };\n StampUtil.setFogData(fog);\n }\n\n /**\n *\n * @param value\n */\n setSecondFogHeightFallOff(value = 0.20000000298023224) {\n const fog = {\n secondFogHeightFallOff: value,\n };\n StampUtil.setFogData(fog);\n }\n /**\n *\n * @param value\n */\n setSecondFogHeightOffset(value = 0) {\n const fog = {\n secondFogHeightOffset: value,\n };\n StampUtil.setFogData(fog);\n }\n /**\n *\n * @param value\n */\n setFogMaxOpacity(value = 1) {\n const fog = {\n fogMaxOpacity: value,\n };\n StampUtil.setFogData(fog);\n }\n /**\n *\n * @param value\n */\n setStartDistance(value = 1) {\n const fog = {\n startDistance: value,\n };\n StampUtil.setFogData(fog);\n }\n /**\n *\n * @param value\n */\n setVolumetricFogDistance(value = 6000) {\n const fog = {\n volumetricFogDistance: value,\n };\n StampUtil.setFogData(fog);\n }\n /**\n *\n * @param value\n */\n setEnableVolumetricFog(value = true) {\n const fog = {\n enableVolumetricFog: value,\n };\n StampUtil.setFogData(fog);\n }\n\n //#endregion\n\n //#region 曝光参数设置\n /**\n * 获取曝光参数信息\n * @returns\n */\n getPostprocessingData() {\n return new Promise((resolve) => {\n const postprocessing_interface = StampAPI.LibAx.postprocessing_interface(\n StampUtil.getLibax()\n );\n postprocessing_interface.OnPostprocessingGet = function (data: any) {\n resolve(data);\n };\n postprocessing_interface.get_postprocessing();\n });\n }\n\n /**\n * 设置曝光参数统一接口\n * @param postprocessing\n */\n setPostprocessingData(postprocessing: any) {\n return new Promise((resolve) => {\n const postprocessing_interface = StampAPI.LibAx.postprocessing_interface(\n StampUtil.getLibax()\n );\n postprocessing_interface.OnPostprocessingGet = function (data: any) {\n resolve(data);\n };\n postprocessing_interface.set_postprocessing_data(postprocessing);\n });\n }\n\n /**\n * 是否开启曝光\n * @param value\n */\n setAutoExposure(value = true) {\n const autoExposure = {\n autoExposure: value,\n };\n StampUtil.setPostprocessingData(autoExposure);\n }\n\n /**\n * 曝光偏移\n * @param value\n */\n setAutoExposureBias(value = 1) {\n const autoExposureBias = {\n autoExposureBias: value,\n };\n StampUtil.setPostprocessingData(autoExposureBias);\n }\n\n /**\n * 白平衡温度\n * @param value\n */\n setWhiteTemp(value = 1) {\n const params = {\n whiteTemp: value,\n };\n StampUtil.setPostprocessingData(params);\n }\n\n /**\n * 阴影距离系数\n * @param value\n */\n setShadowDistanceScale(value: number) {\n const shadowDistanceScale = {\n shadowDistanceScale: value,\n };\n StampUtil.setPostprocessingData(shadowDistanceScale);\n }\n\n /**\n * 是否开启虚拟阴影\n * @param value\n */\n setShadowVirtualEnable(value: boolean) {\n const shadowVirtualEnable = {\n shadowVirtualEnable: value,\n };\n StampUtil.setPostprocessingData(shadowVirtualEnable);\n }\n\n /**\n * 白色色调\n * @param value\n */\n setWhiteTint(value = 1.0) {\n const params = {\n whiteTint: value,\n };\n StampUtil.setPostprocessingData(params);\n }\n /**\n * 斜面\n * @param value\n */\n setFilmSlope(value = 1.0) {\n const params = {\n filmSlope: value,\n };\n StampUtil.setPostprocessingData(params);\n }\n /**\n * 深色\n * @param value\n */\n setFilmToe(value = 1.0) {\n const params = {\n filmToe: value,\n };\n StampUtil.setPostprocessingData(params);\n }\n /**\n * 亮色\n * @param value\n */\n setFilmShoulder(value = 1.0) {\n const params = {\n filmShoulder: value,\n };\n StampUtil.setPostprocessingData(params);\n }\n /**\n * 黑色截断值\n * @param value\n */\n setFilmBlackClip(value = 1.0) {\n const params = {\n filmBlackClip: value,\n };\n StampUtil.setPostprocessingData(params);\n }\n /**\n * 白色截断值\n * @param value\n */\n setFilmWhiteClip(value = 1.0) {\n const params = {\n filmWhiteClip: value,\n };\n StampUtil.setPostprocessingData(params);\n }\n //#endregion\n\n //#region\n /**\n * 体积云参数\n */\n getCloudData() {\n return new Promise((resolve) => {\n const volumetric_cloud_interface =\n StampUtil.getLibax().volumetric_cloud_interface;\n volumetric_cloud_interface.OnVolumetricCloudGet = function (data: any) {\n resolve(data);\n };\n volumetric_cloud_interface.get_volumetric_cloud();\n });\n }\n /**\n * 云参数设置 \n * @params 格式参考 {\n \"layerBottomAltitude\": 5,\n \"layerHeight\": 12,\n \"tracingMaxDistance\": 6,\n \"visibility\": 0,\n \"visibleHeight\": 5\n }\n */\n setCloudData(params: any) {\n return new Promise((resolve) => {\n const volumetric_cloud_interface =\n StampUtil.getLibax().volumetric_cloud_interface;\n volumetric_cloud_interface.OnVolumetricCloudGet = function (data: any) {\n resolve(data);\n };\n volumetric_cloud_interface.set_cloud_data(params);\n });\n }\n //#endregion\n //#region 视角操作\n touchScreenScale(scale = 1) {\n const environment_interface = StampUtil.getLibax().environment_interface;\n environment_interface.touch_screen_scale(scale);\n }\n /**\n * 放大\n */\n enlarge() {\n StampUtil.getLibax().global_control_interface.zoom_in(0.33);\n }\n /**\n * 缩小\n */\n reduce() {\n StampUtil.getLibax().global_control_interface.zoom_out(-0.5);\n }\n\n /**\n * 全球视角\n */\n globalView() {\n StampUtil.getLibax().global_control_interface.resume();\n }\n\n /**\n * 指北\n */\n northView() {\n StampUtil.getLibax().global_control_interface.north_view();\n }\n\n /**\n * 顶视\n */\n topView() {\n StampUtil.getLibax().global_control_interface.top_view();\n }\n\n /**\n * 顶北\n */\n northTopView() {\n StampUtil.getLibax().global_control_interface.north_top_view();\n }\n\n /**\n * 视角停止\n */\n stopView() {\n StampUtil.getLibax().global_control_interface.stop();\n try {\n StampAPI.lib_ax1.earthDomElement &&\n StampAPI.lib_ax1.global_control_interface.stop();\n StampAPI.lib_ax2.earthDomElement &&\n StampAPI.lib_ax2.global_control_interface.stop();\n } catch (ex) {}\n }\n\n /**\n * 碰撞\n */\n intersectMode(bOpen: boolean) {\n const params = [bOpen];\n StampUtil.getLibax().global_control_interface.intersect_mode(params);\n }\n /**\n * 旋转\n */\n surroundControlEx(value = 0.2) {\n const params = [value];\n StampUtil.getLibax().global_control_interface.surround_control_ex(params);\n }\n /**\n * 右屏旋转 (是三屏的时候为中间屏幕)\n * @param value\n */\n surroundControlEx2(value = 0.2) {\n const params = [value];\n StampAPI.lib_ax1.global_control_interface.surround_control_ex(params);\n }\n /**\n * 右屏旋转\n * @param value\n */\n surroundControlEx3(value = 0.2) {\n const params = [value];\n StampAPI.lib_ax2.global_control_interface.surround_control_ex(params);\n }\n /**\n * 飞行定位\n * @param longitude 经度(度)\n * @param latitude 纬度(度)\n * @param altitude 高程(度)\n * @param head 朝向角(度)\n * @param pitch 俯仰角(度)\n * @param rotate 旋转角(度)\n * @param range 距离(米)\n * @param time 时间(秒)\n */\n flytoLookat(\n longitude: number,\n latitude: number,\n altitude: number,\n head: number,\n pitch: number,\n rotate: number,\n range: number,\n time = 3\n ) {\n StampUtil.getLibax().global_control_interface.fly_to_lookat(\n longitude,\n latitude,\n altitude,\n head,\n pitch,\n rotate,\n range,\n time\n );\n }\n\n /**\n * 直接定位\n * @param longitude 经度(度)\n * @param latitude 纬度(度)\n * @param altitude 高程(度)\n * @param head 朝向角(度)\n * @param pitch 俯仰角(度)\n * @param rotate 旋转角(度)\n * @param range 距离(米)\n */\n gotoLookat(\n longitude: number,\n latitude: number,\n altitude: number,\n head: number,\n pitch: number,\n rotate: number,\n range: number\n ) {\n StampUtil.getLibax().global_control_interface.go_to_lookat([\n longitude,\n latitude,\n altitude,\n head,\n pitch,\n rotate,\n range,\n ]);\n }\n\n /**\n * 飞行到经纬度范围\n * @param lonlatBox 矩形框范围\n */\n flytoElement(guid: any) {\n const elementObj = this.getElementById(guid);\n if (!elementObj) {\n return;\n }\n if (elementObj.rings || elementObj.points || elementObj.location) {\n let points = [];\n if (elementObj.points) {\n points = elementObj.points;\n } else if (elementObj.location) {\n points = [elementObj.location];\n } else if (elementObj.rings) {\n points = elementObj.rings[0].ring;\n }\n const lonlatBox = {\n minX: 0,\n maxX: 0,\n minY: 0,\n maxY: 0,\n };\n for (let i = 0; i < points.length; i++) {\n lonlatBox.minX =\n lonlatBox.minX == 0\n ? parseFloat(points[i].x)\n : Math.min(parseFloat(points[i].x), lonlatBox.minX);\n lonlatBox.maxX =\n lonlatBox.maxX == 0\n ? parseFloat(points[i].x)\n : Math.max(parseFloat(points[i].x), lonlatBox.maxX);\n lonlatBox.minY =\n lonlatBox.minY == 0\n ? parseFloat(points[i].y)\n : Math.min(parseFloat(points[i].y), lonlatBox.minY);\n lonlatBox.maxY =\n lonlatBox.maxY == 0\n ? parseFloat(points[i].y)\n : Math.max(parseFloat(points[i].y), lonlatBox.maxY);\n }\n this.flytoLonLatBox(lonlatBox);\n } else if (elementObj.longitude) {\n this.flytoLookat(\n elementObj.longitude,\n elementObj.latitude,\n elementObj.altitude,\n 0,\n 90,\n 0,\n 100,\n 3\n );\n }\n }\n\n /**\n * 飞行到经纬度范围\n * @param lonlatBox 矩形框范围\n */\n async flytoLonLatBox(lonlatBox: any, minHeight = 100) {\n const minX = lonlatBox.minX,\n minY = lonlatBox.minY,\n maxX = lonlatBox.maxX,\n maxY = lonlatBox.maxY;\n const width = (maxX - minX) / 2;\n const heigth = (maxY - minY) / 2;\n const lon = (maxX + minX) / 2;\n const lat = (maxY + minY) / 2;\n let maxHeight = 0;\n if (lonlatBox.maxHeight) {\n maxHeight = lonlatBox.maxHeight;\n } else {\n const points: any = await StampUtil.getBatchAltitude([\n {\n x: (minX + maxX) / 2,\n y: (minY + maxY) / 2,\n z: 0,\n },\n ]);\n maxHeight = points[0].z;\n }\n const rangeX =\n ((width / 180) * Math.PI * 6378137) / Math.tan((22.5 / 180) * Math.PI);\n const rangeY =\n ((heigth / 180) * Math.PI * 6378137) / Math.tan((22.5 / 180) * Math.PI);\n const global_control_interface =\n StampUtil.getLibax().global_control_interface;\n global_control_interface.fly_to_lookat(\n lon,\n lat,\n maxHeight,\n 0,\n 90,\n 0,\n Math.max(rangeX, rangeY, minHeight),\n 3\n );\n }\n\n /**\n * 飞行到点集合\n * @param points 点集合\n */\n flytoPoints(points: any) {\n const lonlatBox = {\n minX: 0,\n maxX: 0,\n minY: 0,\n maxY: 0,\n };\n for (let i = 0; i < points.length; i++) {\n lonlatBox.minX =\n lonlatBox.minX == 0\n ? parseFloat(points[i].x)\n : Math.min(parseFloat(points[i].x), lonlatBox.minX);\n lonlatBox.maxX =\n lonlatBox.maxX == 0\n ? parseFloat(points[i].x)\n : Math.max(parseFloat(points[i].x), lonlatBox.maxX);\n lonlatBox.minY =\n lonlatBox.minY == 0\n ? parseFloat(points[i].y)\n : Math.min(parseFloat(points[i].y), lonlatBox.minY);\n lonlatBox.maxY =\n lonlatBox.maxY == 0\n ? parseFloat(points[i].y)\n : Math.max(parseFloat(points[i].y), lonlatBox.maxY);\n }\n this.flytoLonLatBox(lonlatBox);\n }\n\n /**\n * 获取摄像机经纬度位置和角度信息\n * @returns\n */\n getPose() {\n return new Promise((resolve) => {\n const globe_observer_interface =\n StampUtil.getLibax().globe_observer_interface;\n globe_observer_interface.oldOnGetPoseFinished =\n globe_observer_interface.OnGetPoseFinished;\n globe_observer_interface.OnGetPoseFinished = (data: any) => {\n globe_observer_interface.OnGetPoseFinished =\n globe_observer_interface.oldOnGetPoseFinished;\n resolve(data);\n };\n globe_observer_interface.get_pose();\n });\n }\n\n /**\n * 获取目标点经纬度位置\n * @returns\n */\n getTargetPose() {\n return new Promise((resolve) => {\n const globe_observer_interface =\n StampUtil.getLibax().globe_observer_interface;\n globe_observer_interface.oldOnGetTargetPoseFinished =\n globe_observer_interface.OnGetTargetPoseFinished; //保存原方法\n globe_observer_interface.OnGetTargetPoseFinished = (data: any) => {\n globe_observer_interface.OnGetTargetPoseFinished =\n globe_observer_interface.oldOnGetTargetPoseFinished; //还原原方法\n resolve(data);\n };\n globe_observer_interface.get_target_pose();\n });\n }\n\n /**\n * 获取摄像机经纬度位置\n * @returns\n */\n getOriginPose() {\n return new Promise((resolve) => {\n const globe_observer_interface =\n StampUtil.getLibax().globe_observer_interface;\n globe_observer_interface.oldOnGetOriginPoseFinished =\n globe_observer_interface.OnGetOriginPoseFinished; //保存原方法\n globe_observer_interface.OnGetOriginPoseFinished = (data: any) => {\n globe_observer_interface.OnGetOriginPoseFinished =\n globe_observer_interface.oldOnGetOriginPoseFinished; //还原原方法\n resolve(data);\n };\n globe_observer_interface.get_origin_pose();\n });\n }\n\n /**\n * 添加div卡片\n * @param param\n */\n addEarthToolTip(\n param = {\n guid: StampUtil.createGuid(), //唯一编码guid,传空的话会给默认值\n divid: \"testMoveDiv\", //气泡窗体ID\n Longitude: 0, //经度\n Latitude: 0, //纬度\n Altitude: 0, //高程\n position: 0, //0: 左上角对齐,1:左下角对齐;2:右上角对齐;3:右下角对齐;4:上下左右居中对齐\n }\n ) {\n param.guid = param.guid || StampUtil.createGuid();\n const pos_guid = param.guid;\n const params = [1, pos_guid];\n params.push(param.Longitude);\n params.push(param.Latitude);\n params.push(param.Altitude);\n const globe_observer_interface =\n StampUtil.getLibax().globe_observer_interface;\n globe_observer_interface.OnToScreen = (data: any) => {\n if (data.positions == undefined || data.positions.length <= 0) {\n return;\n }\n const len = data.positions.length;\n for (let i = 0; i < len; ++i) {\n const pos =\n StampUtil.getLibax().player.streaming.onScreenKeyboardHelper.unquantizeAndDenormalizeUnsigned(\n data.positions[i].x,\n data.positions[i].y\n );\n const elementparam = StampUtil.earthToolTipMap[data.positions[i].guid];\n if (!elementparam) {\n continue; //不存在直接返回\n }\n const divElement = document.getElementById(\n StampUtil.earthToolTipMap[data.positions[i].guid].divid\n ) as HTMLElement;\n divElement.style.position = \"absolute\";\n switch (elementparam.position) {\n case 0: //左上\n divElement.style.left = pos.x + \"px\";\n divElement.style.top = pos.y + \"px\";\n break;\n case 1: //左下\n divElement.style.left = pos.x + \"px\";\n divElement.style.top = pos.y - divElement.offsetHeight + \"px\";\n break;\n case 2: //右上\n divElement.style.left = pos.x - divElement.offsetWidth + \"px\";\n divElement.style.top = pos.y + \"px\";\n break;\n case 3: //右下\n divElement.style.left = pos.x - divElement.offsetWidth + \"px\";\n divElement.style.top = pos.y - divElement.offsetHeight + \"px\";\n break;\n case 4: //居中\n divElement.style.left = pos.x - divElement.offsetWidth / 2 + \"px\";\n divElement.style.top = pos.y - divElement.offsetHeight / 2 + \"px\";\n break;\n default:\n break;\n }\n\n if (pos.x <= 0 || pos.y <= 0) {\n divElement.style.visibility = \"hidden\";\n } else {\n divElement.style.visibility = \"visible\";\n }\n }\n };\n globe_observer_interface.get_screen_pose(params);\n StampUtil.earthToolTipMap[param.guid] = param;\n return param;\n }\n\n /**\n * 删除div卡片\n * @param guid\n */\n deleteEarthToolTip(guid: string) {\n if (undefined != guid) {\n const params = [2, guid];\n const globe_observer_interface =\n StampUtil.getLibax().globe_observer_interface;\n globe_observer_interface.get_screen_pose(params);\n }\n }\n\n /**\n * 删除所有div卡片\n */\n deleteEarthToolTipAll() {\n const params = [3];\n const globe_observer_interface =\n StampUtil.getLibax().globe_observer_interface;\n globe_observer_interface.get_screen_pose(params);\n }\n\n //#endregion\n\n //#region 坐标转换\n /**\n * 平面转经纬度\n * @param x\n * @param y\n * @returns\n */\n transToSphr(x: number, y: number, z = 0.0) {\n return new Promise((resolve) => {\n const query_interface = StampAPI.LibAx.query_interface(\n StampUtil.getLibax()\n );\n const OnTransFinished = function (data: any) {\n query_interface.OnTransFinished = undefined;\n if (data && data[\"results:\"] && data[\"results:\"].length > 0) {\n resolve(data[\"results:\"][0]);\n } else {\n const obj = {\n lon: data.results[0],\n lat: data.results[1],\n alt: data.results[2],\n };\n resolve(obj);\n }\n };\n query_interface.OnTransFinished = OnTransFinished;\n query_interface.trans_to_sphr([x, y, z]);\n });\n }\n\n //经纬度转平面\n transToXy(lon: number, lat: number, alt = 0.0) {\n return new Promise((resolve) => {\n const query_interface = StampAPI.LibAx.query_interface(\n StampUtil.getLibax()\n );\n const OnTransFinished = function (data: any) {\n query_interface.OnTransFinished = undefined;\n if (data && data[\"results:\"] && data[\"results:\"].length > 0) {\n resolve(data[\"results:\"][0]);\n } else {\n const obj = {\n X: data.results[0],\n Y: data.results[1],\n Z: data.results[2],\n };\n resolve(obj);\n }\n };\n query_interface.OnTransFinished = OnTransFinished;\n query_interface.trans_to_XY([lon, lat, alt]);\n });\n }\n\n /**\n * 批量转换 经纬度转平面\n * @param value [lon,lat,alt,lon,lat,alt,...]\n * @returns\n */\n batchTransToXy(value: any) {\n return new Promise((resolve) => {\n const query_interface = StampAPI.LibAx.query_interface(\n StampUtil.getLibax()\n );\n const OnTransFinished = function (data: any) {\n query_interface.OnTransFinished = undefined;\n if (data && data[\"results\"]) {\n resolve(data[\"results\"]);\n } else {\n resolve(data);\n }\n };\n query_interface.OnTransFinished = OnTransFinished;\n query_interface.trans_to_XY(value);\n });\n }\n\n /**\n * 批量转换 平面转经纬度\n * @param value [x,y,z,x,y,z,...]\n * @returns\n */\n batchTransToSphr(value: any) {\n return new Promise((resolve) => {\n const query_interface = StampAPI.LibAx.query_interface(\n StampUtil.getLibax()\n );\n const OnTransFinished = function (data: any) {\n query_interface.OnTransFinished = undefined;\n if (data && data[\"results\"]) {\n resolve(data[\"results\"]);\n } else {\n resolve(data);\n }\n };\n query_interface.OnTransFinished = OnTransFinished;\n query_interface.trans_to_sphr(value);\n });\n }\n // 屏幕转经纬度\n screenToLoc(leftPx: number, topPx: number) {\n return new Promise((resolve: any) => {\n const globe_observer_interface =\n StampUtil.getLibax().globe_observer_interface;\n const coord =\n StampUtil.getLibax().player.webRtcController.coordinateConverter.normalizeAndQuantizeUnsigned(\n leftPx,\n topPx\n );\n globe_observer_interface.OnPickFinished = function (data: any) {\n globe_observer_interface.OnPickFinished = undefined;\n resolve(data);\n };\n globe_observer_interface.pick(coord.x, coord.y, 4095);\n });\n }\n // 经纬度转屏幕\n locToScreen(data: any) {\n return new Promise((resolve: any) => {\n const globe_observer_interface =\n StampUtil.getLibax().globe_observer_interface;\n const pos_guid = StampUtil.createGuid();\n const params = [1, pos_guid];\n params.push(data.Longitude);\n params.push(data.Latitude);\n params.push(data.Altitude);\n\n globe_observer_interface.OnToScreen = function (data: any) {\n if (data.positions == undefined || data.positions.length <= 0) {\n return;\n }\n const len = data.positions.length;\n for (let i = 0; i < len; ++i) {\n if (pos_guid == data.positions[i].guid) {\n const pos =\n StampUtil.getLibax().player.streaming.onScreenKeyboardHelper.unquantizeAndDenormalizeUnsigned(\n data.positions[i].x,\n data.positions[i].y\n );\n resolve(pos);\n }\n }\n };\n globe_observer_interface.get_screen_pose(params);\n });\n }\n /**\n * 初始化空间参考文件\n * @param spatialFilePath\n * @returns\n */\n async initDatum(spatialFilePath: any) {\n return new Promise((resolve) => {\n const query_interface = StampAPI.LibAx.query_interface(\n StampUtil.getLibax()\n );\n const OnTransFinished = function (data: any) {\n query_interface.OnTransFinished = undefined;\n resolve(data);\n };\n query_interface.OnTransFinished = OnTransFinished;\n query_interface.init_datum(spatialFilePath);\n });\n }\n\n /**\n * 根据两个点的经纬度坐标和中心位置信息,计算相对坐标\n * @param lon 经度\n * @param lat 纬度\n * @param alt 高程\n * @param heading 朝向\n * @param tilt 俯仰\n * @param roll 旋转\n * @param scaleX 缩放X\n * @param scaleY 缩放Y\n * @param scaleZ 缩放Z\n * @param linePoints 线段的起终点坐标\n * @returns\n */\n transformSphrericalToCartesion(\n lon: any,\n lat: any,\n alt: any,\n heading: any,\n tilt: any,\n roll: any,\n scaleX: any,\n scaleY: any,\n scaleZ: any,\n linePoints: any\n ) {\n return new Promise((resolve) => {\n const geometry_algorithm_interface =\n StampUtil.getLibax().geometry_algorithm_interface;\n geometry_algorithm_interface.OnGeometryAlgorithmFinished = function (\n res: any\n ) {\n geometry_algorithm_interface.OnGeometryAlgorithmFinished = () => {};\n if (res.result == \"success\") {\n geometry_algorithm_interface.OnGeometryAlgorithmFinished = function (\n data: any\n ) {\n geometry_algorithm_interface.OnGeometryAlgorithmFinished = () => {};\n resolve(data);\n };\n geometry_algorithm_interface.transform_sphrerical_to_cartesion(\n linePoints\n );\n }\n };\n geometry_algorithm_interface.set_pose(\n lon,\n lat,\n alt,\n heading,\n tilt,\n roll,\n scaleX,\n scaleY,\n scaleZ\n );\n });\n }\n\n /**\n * 根据两个点的相对坐标和偏移后的中心位置信息,计算出经纬度坐标\n * @param lon 经度\n * @param lat 纬度\n * @param alt 高程\n * @param heading 朝向\n * @param tilt 俯仰\n * @param roll 旋转\n * @param scaleX 缩放X\n * @param scaleY 缩放Y\n * @param scaleZ 缩放Z\n * @param linePoints 线段的起终点相对坐标\n * @returns\n */\n transformCartesionToSphrerical(\n lon: any,\n lat: any,\n alt: any,\n heading: any,\n tilt: any,\n roll: any,\n scaleX: any,\n scaleY: any,\n scaleZ: any,\n linePoints: any\n ) {\n return new Promise((resolve) => {\n const geometry_algorithm_interface =\n StampUtil.getLibax().geometry_algorithm_interface;\n geometry_algorithm_interface.OnGeometryAlgorithmFinished = function (\n res: any\n ) {\n geometry_algorithm_interface.OnGeometryAlgorithmFinished = () => {};\n if (res.result == \"success\") {\n geometry_algorithm_interface.OnGeometryAlgorithmFinished = function (\n data: any\n ) {\n geometry_algorithm_interface.OnGeometryAlgorithmFinished = () => {};\n resolve(data);\n };\n geometry_algorithm_interface.transform_cartesion_to_sphrerical(\n linePoints\n );\n }\n };\n geometry_algorithm_interface.set_pose(\n lon,\n lat,\n alt,\n heading,\n tilt,\n roll,\n scaleX,\n scaleY,\n scaleZ\n );\n });\n }\n //#endregion\n\n //#region 飞行路径\n\n /**\n * 获取运动物体列表\n * @returns\n */\n getDynamicList() {\n return new Promise((resolve) => {\n const dynamic_system_interface =\n StampUtil.getLibax().dynamic_system_interface;\n if (dynamic_system_interface.dynamic_list == undefined) {\n dynamic_system_interface.OnDynamicListLoaded = function (data: any) {\n dynamic_system_interface.OnDynamicListLoaded = undefined;\n dynamic_system_interface.dynamic_list = data;\n resolve(data);\n };\n dynamic_system_interface.apply_dynamic_list();\n } else {\n const data = dynamic_system_interface.dynamic_list;\n resolve(data);\n }\n });\n }\n\n /**\n * 获取路径列表\n * @returns\n */\n getTrackList() {\n return new Promise((resolve) => {\n const track_interface = StampUtil.getLibax().track_interface;\n track_interface.OnTrackListLoaded = function (data: any) {\n track_interface.OnTrackListLoaded = undefined;\n resolve(data);\n };\n track_interface.apply_track_list();\n });\n }\n\n /**\n * 创建路径\n * @param name\n * @returns\n */\n createTrack(name = \"路径\", params: any) {\n return new Promise((resolve, reject) => {\n const track_interface = StampUtil.getLibax().track_interface;\n track_interface.OnTrackLoaded = function (data: any) {\n track_interface.OnTrackLoaded = undefined;\n const shape_creator_interface =\n StampUtil.getLibax().shape_creator_interface;\n shape_creator_interface.OnShapeCreated = undefined;\n shape_creator_interface.clear();\n const pointsArr = [];\n data.stations[0].Yaw = Number(params.yaw);\n data.stations[0].Pitch = Number(params.pitch);\n data.stations[0].FlyHeight = Number(params.height);\n if (data.stations[0].Children.length < 3) {\n reject(\"飞行点不能少于三个\");\n return;\n }\n for (let i = 0; i < data.stations[0].Children.length; i++) {\n pointsArr.push(data.stations[0].Children[i].Longitude);\n pointsArr.push(data.stations[0].Children[i].Latitude);\n pointsArr.push(data.stations[0].Children[i].Altitude);\n data.stations[0].Children[i].FlyHeight = Number(params.height);\n data.stations[0].Children[i].Tilt = Number(params.yaw);\n data.stations[0].Children[i].Heading = Number(params.pitch);\n data.stations[0].Children[i].Speed = Number(params.speed);\n }\n const points = pointsArr.join(\",\");\n const guid = data.guid;\n StampUtil.createTrackFromJson(guid, data);\n resolve({ points, guid });\n };\n track_interface.create_track(name);\n });\n }\n\n createTrackFromJson(trackId: string, trackJson: any, isFlyTrack = true) {\n return new Promise((resolve) => {\n const track_interface = StampUtil.getLibax().track_interface;\n track_interface.OnTrackLoaded = function (data: any) {\n track_interface.OnTrackLoaded = undefined;\n track_interface.commit_changes_track(data.guid, isFlyTrack); //千万记得要commit,不然无法生成路径\n resolve(data);\n };\n track_interface.load_track(trackId, JSON.stringify(trackJson));\n });\n }\n\n /**\n * 加载路径\n * @param id 路径guid\n */\n loadTrack(id: string) {\n const track_interface = StampUtil.getLibax().track_interface;\n // track_interface.OnTrackLoaded = function (data: any) {\n //\n // };\n track_interface.load_track(id);\n }\n\n /**\n * 卸载路径(内存)\n * @param id 路径guid\n */\n unloadTrack(id: string) {\n const track_interface = StampUtil.getLibax().track_interface;\n track_interface.unload_track(id);\n }\n\n /**\n * 删除路径(硬盘:暂未用到)\n * @param trackId\n */\n deleteTrack(trackId: string) {\n const track_interface = StampUtil.getLibax().track_interface;\n track_interface.delete_track(trackId);\n }\n\n /**\n * 开始飞行\n * @param trackId 路径GUID\n * @param dynamicId 运动物体GUID\n * @param observerType 人称视角:1:第一人称,3:第三人称,4:自由模式\n */\n playTrack(\n trackId: string,\n dynamicId: string,\n observerType = 3,\n callback: any\n ) {\n const dynamic_system_interface =\n StampUtil.getLibax().dynamic_system_interface;\n dynamic_system_interface.OnLoadDynamicObject = function (data: any) {\n dynamic_system_interface.OnLoadDynamicObject = undefined;\n const track_interface = StampUtil.getLibax().track_interface;\n track_interface.OnTrackFinished = function (data: any) {\n dynamic_system_interface.unload_dynamic_object(data.bind);\n typeof callback == \"function\" && callback(trackId);\n };\n track_interface.play_track(trackId, data.guid, observerType, false);\n };\n dynamic_system_interface.load_dynamic_object(dynamicId);\n }\n\n /**\n * 飞行过程中修改视角模式\n * @param guid 路径guid\n * @param type 1:第一人称 3:第三人称 4:自由视角模式\n */\n setTrackFollowType(guid: string, type: number) {\n const track_interface = StampAPI.getLibax().dynamic_system_interface;\n track_interface.set_main_track(guid, type);\n }\n\n /**\n * 暂停飞行\n * @param trackId 路径GUID\n */\n pauseTrack(trackId: string) {\n const track_interface = StampUtil.getLibax().track_interface;\n track_interface.pause_track(trackId);\n }\n\n /**\n * 继续飞行\n * @param trackId 路径GUID\n */\n resumeTrack(trackId: string) {\n const track_interface = StampUtil.getLibax().track_interface;\n track_interface.resume_track(trackId);\n }\n\n /**\n * 停止飞行\n * @param trackId 路径GUID\n */\n stopTrack(trackId: string) {\n const track_interface = StampUtil.getLibax().track_interface;\n track_interface.stop_track(trackId);\n }\n\n showTrack(trackId: string, visible: boolean) {\n const track_interface = StampUtil.getLibax().track_interface;\n typeof track_interface.set_track_visible == \"function\" &&\n track_interface.set_track_visible(trackId, visible);\n }\n\n /**\n * 跟随track\n */\n initFollowTrack(options: any) {\n const track_interface = StampUtil.getLibax().track_interface;\n track_interface.init_follow_track(\n options.guid,\n options.heading,\n options.tilt,\n options.range_scale,\n options.time\n );\n }\n\n /**\n * 飞行视频录制\n */\n videoRecorder(trackId: any, name: string) {\n return new Promise(async (resolve) => {\n let isSuccess = false;\n const video_recorder_control = StampAPI.LibAx.video_recorder_control(\n StampUtil.getLibax()\n );\n const stamp_frame = StampUtil.getLibax().stamp_frame;\n video_recorder_control.OnBeginCaptureFinished = function (data: any) {\n if (data.result == \"success\") {\n const total_frame_count = parseInt(data.totalFrameCount);\n let curr_frame = 1;\n stamp_frame.OnDownloadFinished = function () {\n if (curr_frame < total_frame_count) {\n video_recorder_control.capture_frame(\n curr_frame / total_frame_count\n );\n curr_frame++;\n } else {\n isSuccess = true;\n video_recorder_control.end_capture();\n }\n };\n }\n };\n video_recorder_control.OnEndCaptureFinished = function (data: any) {\n const arrayBuffer = new ArrayBuffer(data.length);\n const bufTmp = new Uint8ClampedArray(arrayBuffer);\n bufTmp.set(data);\n const dv = new DataView(arrayBuffer);\n let offset = 0;\n dv.getUint32(offset, true); //获取长度\n offset += 4;\n const imageBuf = bufTmp.slice(offset).buffer;\n const fileName = StampUtil.saveFile(imageBuf, name);\n resolve(isSuccess);\n };\n const track_id = trackId; // track guid\n const rootPath = (await StampUtil.getRootPath()) as any; //rootPath.root_path +\n const video_path = rootPath.root_path + name; // 保存路径,如果是服务器路径会保存到数据服务器C:\\\\test.h264\n const nResolution = 0; // 视频分辨率, 0 = 1080P, 1= 720P, 2 = DVD, 3 = SVGA, 4 = VGA\n const nFramePerSecond = 30; // 帧率\n const waite_time = -1; // 下载最长等待时间,默认60秒,负数时不重新设置\n const save_local = true; // 是否本地路径,服务器路径设为false\n video_recorder_control.begin_capture(\n track_id,\n video_path,\n nResolution,\n nFramePerSecond,\n waite_time,\n save_local\n );\n });\n }\n /**\n * 停止录制\n */\n endCapture() {\n const video_recorder_control = StampAPI.LibAx.video_recorder_control(\n StampUtil.getLibax()\n );\n video_recorder_control.end_capture();\n }\n\n /**\n * 视点漫游\n * @param viewpoints\n * @param index\n * @param callback\n * @returns\n */\n playViewPointRoam(roamObj: any) {\n roamObj.viewPointIndex = 0;\n roamObj.isPause = false;\n roamObj.isStop = false;\n this.flytoViewPointRoam(roamObj);\n }\n\n flytoViewPointRoam(roamObj: any) {\n if (roamObj.timeoutVal) {\n clearTimeout(roamObj.timeoutVal);\n roamObj.timeoutVal = null;\n }\n if (roamObj.viewPointIndex == undefined) {\n roamObj.viewPointIndex = 0;\n }\n const viewpoints = roamObj.points;\n let index = roamObj.viewPointIndex;\n if (index >= viewpoints.length) {\n typeof roamObj.callbackFinished == \"function\" &&\n roamObj.callbackFinished();\n return;\n }\n if (roamObj.isPause || roamObj.isStop) {\n //暂停\n return;\n }\n StampUtil.flytoLookat(\n viewpoints[index].longitude,\n viewpoints[index].latitude,\n viewpoints[index].altitude,\n viewpoints[index].heading,\n viewpoints[index].tilt,\n viewpoints[index].roll,\n 0,\n viewpoints[index].flyTime\n );\n roamObj.viewPointIndex++;\n roamObj.timeoutVal = setTimeout(() => {\n roamObj.timeoutVal = null;\n index = roamObj.viewPointIndex;\n if (index >= viewpoints.length) {\n typeof roamObj.callbackFinished == \"function\" &&\n roamObj.callbackFinished();\n return;\n }\n if (roamObj.isPause || roamObj.isStop) {\n //暂停\n return;\n }\n StampUtil.flytoViewPointRoam(roamObj);\n }, (viewpoints[index].flyTime + viewpoints[index].intervalTime) * 1000);\n }\n\n pauseViewPointRoam(roamObj: any) {\n roamObj.isPause = true;\n if (roamObj.timeoutVal) {\n clearTimeout(roamObj.timeoutVal);\n roamObj.timeoutVal = null;\n }\n }\n\n resumeViewPointRoam(roamObj: any) {\n roamObj.isPause = false;\n this.flytoViewPointRoam(roamObj);\n }\n\n stopViewPointRoam(roamObj: any) {\n roamObj.isPause = false;\n roamObj.viewPointIndex = 0;\n roamObj.isStop = true;\n if (roamObj.timeoutVal) {\n clearTimeout(roamObj.timeoutVal);\n roamObj.timeoutVal = null;\n }\n }\n //#endregion\n\n //#region 瓦片配色\n /**\n * 获取layer数\n * @param guid 图层guid\n * @returns\n */\n getSubLayerNums(guid: any) {\n return new Promise((resolve) => {\n const vector_tile_layer_interface =\n StampAPI.LibAx.vector_tile_layer_interface(StampUtil.getLibax());\n const params = [guid];\n vector_tile_layer_interface.OnRespondGet = function (data: any) {\n vector_tile_layer_interface.OnRespondGet = undefined;\n resolve(data);\n };\n vector_tile_layer_interface.get_sub_layer_num(params);\n });\n }\n\n getSubLayer(guid: any, index = 0) {\n return new Promise((resolve) => {\n const vector_tile_layer_interface =\n StampAPI.LibAx.vector_tile_layer_interface(StampUtil.getLibax());\n const params = [guid, index];\n vector_tile_layer_interface.OnRespondGet = function (data: any) {\n vector_tile_layer_interface.OnRespondGet = undefined;\n resolve(data);\n };\n vector_tile_layer_interface.get_sub_layers(params);\n });\n }\n\n setSubLayers(guid: any, count = 1) {\n const vector_tile_layer_interface =\n StampAPI.LibAx.vector_tile_layer_interface(StampUtil.getLibax());\n const params = [guid, count];\n vector_tile_layer_interface.set_sub_layers(params);\n }\n\n setSubLayerVisible(guid: any, index = 0, bShow: boolean, lib = 1) {\n let stamp_frame = null;\n if (lib == 0) {\n stamp_frame = StampAPI.lib_ax1;\n } else if (lib == 1) {\n stamp_frame = StampAPI.lib_ax;\n } else if (lib == 2) {\n stamp_frame = StampAPI.lib_ax2;\n }\n const vector_tile_layer_interface =\n StampAPI.LibAx.vector_tile_layer_interface(stamp_frame);\n const params = [guid, index, bShow];\n vector_tile_layer_interface.set_sub_layer_visible(params);\n }\n\n /**\n * 获取class数\n * @param guid 图层guid\n * @returns\n */\n getClassNums(guid: any, layerInd = 0) {\n return new Promise((resolve) => {\n const vector_tile_layer_interface =\n StampAPI.LibAx.vector_tile_layer_interface(StampUtil.getLibax());\n const params = [guid];\n vector_tile_layer_interface.OnRespondGet = function (data: any) {\n vector_tile_layer_interface.OnRespondGet = undefined;\n resolve(data);\n };\n vector_tile_layer_interface.get_class_nums(params);\n });\n }\n\n /**\n * 插入class\n * @param guid 图层guid\n * @param index 类索引\n * @param count 类数量\n * @returns\n */\n insertClass(guid: any, index = -1, count = 1) {\n const vector_tile_layer_interface =\n StampAPI.LibAx.vector_tile_layer_interface(StampUtil.getLibax());\n const params = [guid, index, count];\n vector_tile_layer_interface.insert_class(params);\n }\n\n /**\n * 移除class\n * @param guid 图层guid\n * @param index 类索引\n * @param count 类数量\n * @returns\n */\n removeClass(guid: any, index = 0, count = 1) {\n const vector_tile_layer_interface =\n StampAPI.LibAx.vector_tile_layer_interface(StampUtil.getLibax());\n const params = [guid, index, count];\n vector_tile_layer_interface.remove_class(params);\n }\n\n /**\n * 获取矢量瓦片数据类型\n * @param guid 图层guid\n * @returns\n */\n getDataType = function (guid: any) {\n return new Promise((resolve) => {\n const vector_tile_layer_interface =\n StampAPI.LibAx.vector_tile_layer_interface(StampUtil.getLibax());\n\n const params = [guid];\n vector_tile_layer_interface.OnRespondGet = function (data: any) {\n vector_tile_layer_interface.OnRespondGet = undefined;\n resolve(data);\n };\n vector_tile_layer_interface.get_data_type(params);\n });\n };\n\n /**\n * 获取矢量瓦片图层样式文件路径\n * @param guid 图层guid\n * @returns\n */\n async getMapFile(guid: any) {\n return new Promise((resolve) => {\n const vector_tile_layer_interface =\n StampAPI.LibAx.vector_tile_layer_interface(StampUtil.getLibax());\n\n const params = [guid];\n vector_tile_layer_interface.OnRespondGet = function (data: any) {\n vector_tile_layer_interface.OnRespondGet = undefined;\n resolve(data);\n };\n vector_tile_layer_interface.get_map_file(params);\n });\n }\n\n /**\n * 保存矢量瓦片图层样式文件\n * @param guid 图层guid\n * @param file 样式文件路径\n * @returns\n */\n saveMap(guid: any, file = \"\") {\n return new Promise((resolve) => {\n const vector_tile_layer_interface =\n StampAPI.LibAx.vector_tile_layer_interface(StampUtil.getLibax());\n const params = [guid, file, 0]; // 0 代表不使用filedownload服务, 1代表使用\n vector_tile_layer_interface.OnRespondGet = function (data: any) {\n vector_tile_layer_interface.OnRespondGet = undefined;\n resolve(data.upload_file_paths);\n };\n vector_tile_layer_interface.save_map(params);\n });\n }\n\n getClientFile(path: string) {\n return new Promise((resolve) => {\n const vector_tile_layer_interface =\n StampAPI.LibAx.vector_tile_layer_interface(StampUtil.getLibax());\n vector_tile_layer_interface.OnRespondGet = function (data: any) {\n vector_tile_layer_interface.OnRespondGet = undefined;\n resolve(data);\n };\n vector_tile_layer_interface.get_ms_upload_file(path);\n });\n }\n\n /**\n * 刷新样式\n * @param guid 图层guid\n * @returns\n */\n refreshClasses(guid: any) {\n const ms_class_obj_interface = StampAPI.LibAx.ms_class_obj_interface(\n StampUtil.getLibax()\n );\n const params = [guid];\n ms_class_obj_interface.refresh(params);\n }\n\n /**\n * 设置样式\n * @param params 样式参数(注意有固定顺序)\n * @returns\n */\n setStyle(params: any) {\n const ms_class_obj_interface = StampAPI.LibAx.ms_class_obj_interface(\n StampUtil.getLibax()\n );\n ms_class_obj_interface.set_style(params);\n }\n\n /**\n * 批量修改样式\n * @param params 样式参数\n */\n batchSetClassesAndRefresh(params: any) {\n const ms_class_obj_interface = StampAPI.LibAx.ms_class_obj_interface(\n StampUtil.getLibax()\n );\n ms_class_obj_interface.batch_set_classes_and_refresh(params);\n }\n\n /**\n * 获取样式\n * @param guid 图层guid\n * @param index 类索引\n * @returns\n */\n async getStyle(guid: any, index = 0) {\n return new Promise((resolve) => {\n const ms_class_obj_interface = StampAPI.LibAx.ms_class_obj_interface(\n StampUtil.getLibax()\n );\n\n const params = [guid, index];\n ms_class_obj_interface.OnRespondGet = function (data: any) {\n ms_class_obj_interface.OnRespondGet = undefined;\n resolve(data);\n };\n ms_class_obj_interface.get_style(params);\n });\n }\n\n /**\n * 设置样式类表达式\n * @param guid 图层guid\n * @param index 类索引\n * @param expression 表达式\n * @returns\n */\n setExpression(guid: any, index = 0, expression = \"\") {\n const ms_class_obj_interface = StampAPI.LibAx.ms_class_obj_interface(\n StampUtil.getLibax()\n );\n const params = [guid, index, expression];\n ms_class_obj_interface.set_expression(params);\n }\n\n /**\n * 获取样式类表达式\n * @param guid 图层guid\n * @param index 类索引\n * @returns\n */\n async getExpression(guid: any, index = 0) {\n return new Promise((resolve) => {\n const ms_class_obj_interface = StampAPI.LibAx.ms_class_obj_interface(\n StampUtil.getLibax()\n );\n\n const params = [guid, index];\n ms_class_obj_interface.OnRespondGet = function (data: any) {\n ms_class_obj_interface.OnRespondGet = undefined;\n resolve(data);\n };\n ms_class_obj_interface.get_expression(params);\n });\n }\n\n /**\n * 获取样式类标注样式数量\n * @param guid 图层guid\n * @param index 类索引\n * @returns\n */\n async getLabelNums(guid: any, index = 0) {\n return new Promise((resolve) => {\n const ms_class_obj_interface = StampAPI.LibAx.ms_class_obj_interface(\n StampUtil.getLibax()\n );\n\n const params = [guid, index];\n ms_class_obj_interface.OnRespondGet = function (data: any) {\n ms_class_obj_interface.OnRespondGet = undefined;\n resolve(data);\n };\n ms_class_obj_interface.get_label_nums(params);\n });\n }\n\n /**\n * 获取样式类某个标注样式\n * @param guid 图层guid\n * @param index 类索引\n * @param subInd 标注样式索引\n * @returns\n */\n async getLabel(guid: any, index = 0, subInd = 0) {\n return new Promise((resolve) => {\n const ms_class_obj_interface = StampAPI.LibAx.ms_class_obj_interface(\n StampUtil.getLibax()\n );\n\n const params = [guid, index, subInd];\n ms_class_obj_interface.OnRespondGet = function (data: any) {\n ms_class_obj_interface.OnRespondGet = undefined;\n resolve(data);\n };\n ms_class_obj_interface.get_label(params);\n });\n }\n\n /**\n * 新增样式类标注样式\n * @param params 样式参数(注意有固定顺序)\n * @returns\n */\n addLabel(params: any) {\n const ms_class_obj_interface = StampAPI.LibAx.ms_class_obj_interface(\n StampUtil.getLibax()\n );\n ms_class_obj_interface.add_label(params);\n }\n\n //#endregion\n\n //#region 楼块配色\n /**\n * 获取矢量楼块图层样式\n * @param guid 图层guid\n * @returns\n */\n async getTileblockStyle(guid: any) {\n return new Promise((resolve) => {\n const tile_block_style_interface =\n StampAPI.LibAx.tile_block_style_interface(StampUtil.getLibax());\n\n const params = [guid];\n tile_block_style_interface.OnRespondGet = function (data: any) {\n tile_block_style_interface.OnRespondGet = undefined;\n resolve(data);\n };\n tile_block_style_interface.get_tileblock_style(params);\n });\n }\n\n /**\n * 设置矢量楼块图层样式\n * @param params 样式参数(注意有固定顺序)\n * @returns\n */\n setTileblockStyle(params: any) {\n const tile_block_style_interface =\n StampAPI.LibAx.tile_block_style_interface(StampUtil.getLibax());\n tile_block_style_interface.set_tileblock_style(params);\n }\n\n /**\n * 清除矢量楼块图层样式字段值\n * @param guid 图层guid\n * @returns\n */\n clearFieldValueProperty(guid: any) {\n const tile_block_style_interface =\n StampAPI.LibAx.tile_block_style_interface(StampUtil.getLibax());\n\n const params = [guid];\n tile_block_style_interface.clear_field_value_property(params);\n }\n\n /**\n * 保存矢量楼块图层样式\n * @param guid 图层guid\n * @param file 样式文件路径\n * @returns\n */\n saveStyle(guid: any, file = \"\") {\n return new Promise((resolve) => {\n const tile_block_style_interface =\n StampAPI.LibAx.tile_block_style_interface(StampUtil.getLibax());\n tile_block_style_interface.OnRespondGet = function (data: any) {\n resolve(data);\n };\n const params = [guid, file, 0];\n tile_block_style_interface.save_style(params);\n });\n }\n\n /**\n * 刷新矢量楼块图层样式\n * @param guid\n */\n refreshTileBlockStyle(guid: string) {\n const params = [guid];\n StampUtil.getLibax().tile_block_style_interface.refresh_style(params);\n }\n //#endregion\n\n //#region 查询模块\n /**\n * 属性查询\n * 属性查询pick的全集是0xfff\n 去mapserver的话是0x7ff\n #define SE_INTERSECT_NONE 0x0000\n #define SE_INTERSECT_TERRAIN 0x0001\n #define SE_INTERSECT_ELEMENT 0x0002\n #define SE_INTERSECT_BUILDING 0x0004\n #define SE_INTERSECT_BLOCK 0x0008\n #define SE_INTERSECT_MATCH_MODEL 0x0010\n #define SE_INTERSECT_POI 0x0020\n #define SE_INTERSECT_VECTOR 0x0040\n #define SE_INTERSECT_ANNOTATION 0x0080\n #define SE_INTERSECT_BILLBOARD 0x0100\n #define SE_INTERSECT_POINTCLOUD 0x0200\n #define SE_INTERSECT_VECTORTILE 0x0400\n #define SE_INTERSECT_ARCGISMAPSERVER 0x0800\n * \n * @returns\n */\n pickQueryEx(pickDataType = 2047, callbackSuccess: any, callbackCancel: any) {\n if (!StampAPI.isLayerInit) {\n //如果未初始化图层,则需要先初始化图层\n StampUtil.getLayerData();\n }\n StampUtil.clearHighlightObj();\n const query_interface = StampUtil.getLibax().query_interface;\n const layer_manager_interface = StampAPI.LibAx.layer_manager_interface(\n StampUtil.getLibax()\n );\n let position: any = null;\n query_interface.OnPickObject = function (data: any) {\n StampUtil.clearHighlightObj();\n if (!data.guid) {\n if (position) {\n StampUtil.screenToLoc(position.x, position.y).then((res: any) => {\n position = {\n x: res.lon,\n y: res.lat,\n z: res.alt,\n };\n typeof callbackSuccess == \"function\" &&\n callbackSuccess(position, true);\n });\n }\n } else {\n typeof callbackSuccess == \"function\" && callbackSuccess(data);\n }\n };\n query_interface.OnPickObjectEx = async function (data: any) {\n StampUtil.clearHighlightObj();\n if (data.length > 0) {\n for (let i = 0; i < data.length; i++) {\n if (!data[i].is_bim) {\n //矢量瓦片图层查询修改了key的结果,这里前端兼容处理了下\n if (\n data[i].key &&\n data[i].key &&\n data[i].key.Json &&\n data[i].key.Json.Result &&\n data[i].key.Json.Result.Record\n ) {\n let record = data[i].key.Json.Result.Record;\n if (Array.isArray(record)) {\n record = record[0];\n }\n data[i].key = record;\n }\n if (data[i].query_result) {\n StampUtil.setElementVisible(data[i].highlight, false);\n StampUtil.highlightGuidArr.push(data[i].highlight); //方便后续清除高亮\n }\n } else {\n const layer_guid = data[i].parent_layer;\n const keys = data[i].highlight;\n\n const is_flash = true;\n layer_manager_interface.set_bim_lock(layer_guid, true);\n layer_manager_interface.set_bim_highlight(\n layer_guid,\n keys,\n true,\n 0xffff0000,\n is_flash\n );\n layer_manager_interface.set_bim_lock(layer_guid, false);\n StampUtil.highlightGuidArr.push(layer_guid + \"|\" + keys); //方便后续清除高亮\n }\n }\n } else {\n if (position) {\n await StampUtil.screenToLoc(position.x, position.y).then(\n (res: any) => {\n position = {\n x: res.lon,\n y: res.lat,\n z: res.alt,\n };\n }\n );\n typeof callbackSuccess == \"function\" &&\n callbackSuccess(position, true);\n return;\n }\n }\n typeof callbackSuccess == \"function\" && callbackSuccess(data);\n };\n query_interface.pick_object_ex(pickDataType);\n const earth =\n StampUtil.getLibax().player.webRtcController.videoPlayer.videoElement;\n earth.onclick = (e: any) => {\n position = {\n x: e.x,\n y: e.y,\n };\n };\n earth.oncontextmenu = () => {\n earth.oncontextmenu = null;\n query_interface.OnPickObject = undefined;\n query_interface.OnPickObjectEx = undefined;\n query_interface.finish_pick();\n typeof callbackCancel == \"function\" && callbackCancel();\n StampUtil.setMouseCursor();\n };\n }\n\n /**\n * 属性查询\n * @returns\n */\n pickQueryEx1(callbackSuccess: any, callbackCancel: any) {\n if (!StampAPI.isLayerInit) {\n //如果未初始化图层,则需要先初始化图层\n StampUtil.getLayerData();\n }\n StampUtil.clearHighlightObj1();\n const query_interface = StampAPI.lib_ax.query_interface;\n query_interface.OnPickObject = function (data: any) {\n StampUtil.clearHighlightObj1();\n typeof callbackSuccess == \"function\" && callbackSuccess(data);\n };\n query_interface.OnPickObjectEx = function (data: any) {\n StampUtil.clearHighlightObj1();\n typeof callbackSuccess == \"function\" && callbackSuccess(data);\n if (data.length > 0) {\n StampUtil.showHighlightObj1(data[0].highlight);\n }\n };\n query_interface.pick_object_ex(4095);\n const earth =\n StampAPI.lib_ax.player.webRtcController.videoPlayer.videoElement;\n earth.oncontextmenu = () => {\n earth.oncontextmenu = null;\n query_interface.OnPickObject = undefined;\n query_interface.OnPickObjectEx = undefined;\n query_interface.finish_pick();\n typeof callbackCancel == \"function\" && callbackCancel();\n StampUtil.setMouseCursor();\n };\n }\n\n /**\n * 清除高亮\n */\n clearHighlightObj1() {\n try {\n if (StampUtil.highlightGuid) {\n const element_interface = StampAPI.lib_ax.element_interface;\n // element_interface.highlight_element([StampUtil.highlightGuid, 0]); //取消高亮\n element_interface.delete_element(StampUtil.highlightGuid); //清除结果数据\n StampUtil.highlightGuid = \"\";\n }\n } catch (ex) {}\n }\n\n /**\n * 高亮pick对象\n */\n showHighlightObj1(guid: string) {\n StampUtil.highlightGuid = guid;\n if (StampUtil.highlightGuid) {\n const element_interface = StampAPI.lib_ax.element_interface;\n element_interface.highlight_element([StampUtil.highlightGuid, 1]); //高亮\n }\n }\n\n /**\n * 根据线生成缓冲面\n */\n createBuffer(data: any, bufferPolygonParams: any = false) {\n return new Promise((resolve) => {\n const geometry_algorithm_interface =\n StampUtil.getLibax().geometry_algorithm_interface;\n const is_element = false;\n const toptype = data.toptype || 0;\n const num = 36;\n const bufferDir = data.bufferType || 0;\n const v_points = [] as any;\n const shadow = data.shadow || 0;\n const byPolygon = data.byPolygon || 0; //0是线 1是面\n for (let i = 0; i < data.Points.length; ++i) {\n v_points.push({\n x: data.Points[i].x,\n y: data.Points[i].y,\n z: data.Points[i].z,\n });\n }\n geometry_algorithm_interface.OnGeometryAlgorithmFinished = (\n _data: any\n ) => {\n const points = [] as any;\n if (_data != undefined && _data.Polygon != undefined) {\n geometry_algorithm_interface.OnGeometryAlgorithmFinished = undefined;\n for (let i = 0; i < _data.Polygon.length; i++) {\n points.push({\n x: _data.Polygon[i][0],\n y: _data.Polygon[i][1],\n z: _data.Polygon[i][2],\n });\n }\n if (!bufferPolygonParams) {\n //不生成缓冲面\n resolve({ points });\n } else {\n //生成缓冲面\n const params = {\n guid: bufferPolygonParams[\"guid\"] || StampUtil.createGuid(),\n points: points,\n action: \"add\",\n shadow: bufferPolygonParams[\"shadow\"] || shadow,\n linewidth: bufferPolygonParams[\"linewidth\"] || 1,\n linecolor: bufferPolygonParams[\"linecolor\"] || \"#ffff0000\",\n fillcolor: bufferPolygonParams[\"fillcolor\"] || \"#2500ff00\",\n selectable:\n bufferPolygonParams.selectable == undefined\n ? true\n : bufferPolygonParams.selectable,\n editable:\n bufferPolygonParams.editable == undefined\n ? true\n : bufferPolygonParams.editable,\n } as any;\n for (const itemKey in bufferPolygonParams) {\n params[itemKey] = bufferPolygonParams[itemKey];\n }\n StampUtil.createElementPolygonParams(params).then((res) => {\n resolve(res);\n });\n }\n }\n };\n\n if (!byPolygon) {\n geometry_algorithm_interface.create_polygon_buffer_from_polyline(\n is_element,\n v_points,\n data.radius,\n toptype,\n num,\n bufferDir\n );\n } else {\n geometry_algorithm_interface.create_polygon_buffer_from_polygon(\n is_element,\n v_points,\n data.radius,\n toptype,\n num,\n bufferDir\n );\n }\n });\n }\n\n /**\n * 关闭鼠标拾取状态\n */\n closePick() {\n const query_interface = StampUtil.getLibax().query_interface;\n query_interface.OnPickObject = undefined;\n query_interface.OnPickObjectEx = undefined;\n query_interface.finish_pick();\n const shape_creator_interface =\n StampUtil.getLibax().shape_creator_interface;\n shape_creator_interface.OnShapeCreated = undefined;\n shape_creator_interface.clear();\n const earth =\n StampAPI.lib_ax.player.webRtcController.videoPlayer.videoElement;\n earth && (earth.oncontextmenu = null);\n }\n\n /**\n * 绘制点\n * @returns 返回拾取点坐标\n */\n createPoint(callbackCancel: any) {\n const earth =\n StampUtil.getLibax().player.webRtcController.videoPlayer.videoElement;\n const shape_creator_interface =\n StampUtil.getLibax().shape_creator_interface;\n earth.oncontextmenu = () => {\n earth.oncontextmenu = null;\n shape_creator_interface.OnShapeCreated = undefined;\n shape_creator_interface.clear();\n typeof callbackCancel == \"function\" && callbackCancel();\n };\n StampUtil.clearShapeCreator();\n return new Promise((resolve) => {\n shape_creator_interface.OnShapeCreated = function (data: any) {\n shape_creator_interface.OnShapeCreated = undefined;\n shape_creator_interface.clear();\n earth.oncontextmenu = null;\n resolve(data);\n };\n shape_creator_interface.create_point();\n });\n }\n\n /**\n * 绘制圆\n * @returns 返回圆心半径等信息\n */\n createCircle() {\n StampUtil.clearShapeCreator();\n return new Promise((resolve) => {\n const shape_creator_interface =\n StampUtil.getLibax().shape_creator_interface;\n shape_creator_interface.OnShapeCreated = function (data: any) {\n shape_creator_interface.OnShapeCreated = undefined;\n StampUtil.setMouseCursor(0);\n if (data.Radius == 0) {\n StampUtil.clearShapeCreator();\n }\n resolve(data);\n };\n shape_creator_interface.create_circle(0x99009900, 0xffff0000, 1);\n });\n }\n /**\n * 绘制线\n * @returns 返回线点串\n */\n createLine(callbackCancel: any) {\n const earth =\n StampUtil.getLibax().player.webRtcController.videoPlayer.videoElement;\n earth.oncontextmenu = () => {\n earth.oncontextmenu = null;\n typeof callbackCancel == \"function\" && callbackCancel();\n };\n StampUtil.clearShapeCreator();\n return new Promise((resolve) => {\n const shape_creator_interface =\n StampUtil.getLibax().shape_creator_interface;\n shape_creator_interface.OnShapeCreated = function (data: any) {\n earth.oncontextmenu = null;\n StampUtil.setMouseCursor(0);\n resolve(data);\n };\n shape_creator_interface.create_line();\n });\n }\n\n /**\n * 绘制多段线\n * @returns 返回线点串\n */\n createPolyline(\n params = {\n lineWidth: 1,\n lineColor: 0xccff0000,\n },\n callbackCancel: any = null\n ) {\n const earth =\n StampUtil.getLibax().player.webRtcController.videoPlayer.videoElement;\n earth.oncontextmenu = () => {\n earth.oncontextmenu = null;\n typeof callbackCancel == \"function\" && callbackCancel();\n };\n StampUtil.clearShapeCreator();\n return new Promise((resolve) => {\n const shape_creator_interface =\n StampUtil.getLibax().shape_creator_interface;\n shape_creator_interface.OnShapeCreated = function (data: any) {\n earth.oncontextmenu = null;\n StampUtil.setMouseCursor(0);\n resolve(data);\n };\n shape_creator_interface.create_polyline(\n params.lineWidth,\n params.lineColor\n );\n });\n }\n\n /**\n * 绘制多边形\n * @returns 返回多边形点串\n */\n createPolygon(\n params = {\n fillcolor: 0xcc009900, //填充色\n linecolor: 0xffff0000, //线颜色\n shadow: 5, //0正常/1贴地/5贴地贴模型\n }\n ) {\n StampUtil.clearShapeCreator();\n return new Promise((resolve) => {\n const shape_creator_interface =\n StampUtil.getLibax().shape_creator_interface;\n shape_creator_interface.OnShapeCreated = function (data: any) {\n shape_creator_interface.OnShapeCreated = undefined;\n StampUtil.setMouseCursor(0);\n if (!data || !data.Points || data.Points.length < 3) {\n StampUtil.clearShapeCreator(); //清除\n }\n resolve(data);\n };\n shape_creator_interface.create_polygon(\n params.fillcolor,\n params.linecolor,\n params.shadow,\n 1\n );\n });\n }\n\n /**\n * 绘制矩形框\n * @returns 返回多边形点串\n */\n createRectangle(\n params = {\n fillcolor: 0xcc009900, //填充色\n linecolor: 0xffff0000, //线颜色\n linewidth: 1, //线宽\n }\n ) {\n StampUtil.clearShapeCreator();\n return new Promise((resolve) => {\n const shape_creator_interface =\n StampUtil.getLibax().shape_creator_interface;\n shape_creator_interface.OnShapeCreated = function (data: any) {\n shape_creator_interface.OnShapeCreated = undefined;\n StampUtil.setMouseCursor(0);\n if (!data || !data.Points || data.Points.length < 3) {\n StampUtil.clearShapeCreator(); //清除\n }\n resolve(data);\n };\n shape_creator_interface.create_rectangle(\n params.fillcolor || 0xcc009900,\n params.linecolor || 0xffff0000,\n params.linewidth || 1\n );\n });\n }\n\n /**\n * 绘制扇形\n * @returns 返回扇形点串\n */\n createSector(\n params = {\n fov: 60,\n }\n ) {\n StampUtil.clearShapeCreator();\n return new Promise((resolve) => {\n const shape_creator_interface =\n StampUtil.getLibax().shape_creator_interface;\n shape_creator_interface.OnShapeCreated = function (data: any) {\n shape_creator_interface.OnShapeCreated = undefined;\n StampUtil.setMouseCursor(0);\n if (!data || !data.Points || data.Points.length < 2) {\n StampUtil.clearShapeCreator(); //清除\n }\n resolve(data);\n };\n shape_creator_interface.create_sector(params.fov);\n });\n }\n\n /*\n 坐标查询\n */\n coordinateQuery(callback: any, callbackCancel: any) {\n const shape_creator_interface =\n StampUtil.getLibax().shape_creator_interface;\n shape_creator_interface.OnShapeCreated = (data: any) => {\n typeof callback == \"function\" && callback(data);\n };\n shape_creator_interface.create_point();\n const earth =\n StampAPI.lib_ax.player.webRtcController.videoPlayer.videoElement;\n earth.oncontextmenu = () => {\n earth.oncontextmenu = null;\n StampUtil.closePick();\n typeof callbackCancel == \"function\" && callbackCancel();\n };\n }\n\n double_params_pack_data(descriptor: any, message_format_id: any) {\n const raw = new StampAPI.raw_buffer(descriptor, message_format_id);\n for (let i = 2; i < descriptor.length; i++) {\n raw.writeFloat64(descriptor[i]);\n }\n\n return raw.ValidData();\n }\n\n /**\n * 清除高亮\n */\n clearHighlightObj() {\n try {\n if (StampUtil.highlightGuidArr.length > 0) {\n const element_interface = StampUtil.getLibax().element_interface;\n const layer_manager_interface = StampAPI.LibAx.layer_manager_interface(\n StampUtil.getLibax()\n );\n\n for (let i = 0; i < StampUtil.highlightGuidArr.length; i++) {\n const index = StampUtil.highlightGuidArr[i].indexOf(\"|\");\n if (index < 0) {\n element_interface.highlight_element([\n StampUtil.highlightGuidArr[i],\n 0,\n ]); //取消高亮\n // element_interface.delete_element(StampUtil.highlightGuidArr[i]); //清除结果数据\n } else {\n const index = StampUtil.highlightGuidArr[i].indexOf(\"|\");\n const layer_guid = StampUtil.highlightGuidArr[i].substring(\n 0,\n index\n );\n const keys = StampUtil.highlightGuidArr[i].substring(\n index + 1,\n StampUtil.highlightGuidArr[i].length\n );\n layer_manager_interface.set_bim_lock(layer_guid, true);\n layer_manager_interface.set_bim_highlight(\n layer_guid,\n keys,\n false,\n 0xffff0000,\n true\n );\n layer_manager_interface.set_bim_lock(layer_guid, false);\n }\n }\n StampUtil.highlightGuidArr = [];\n }\n } catch (ex) {}\n }\n\n clearHighlightObjEx() {\n try {\n if (StampUtil.highlightGuidArr.length > 0) {\n const element_interface = StampUtil.getLibax().element_interface;\n const layer_manager_interface = StampAPI.LibAx.layer_manager_interface(\n StampUtil.getLibax()\n );\n\n for (let i = 0; i < StampUtil.highlightGuidArr.length; i++) {\n const index = StampUtil.highlightGuidArr[i].indexOf(\"|\");\n if (index < 0) {\n element_interface.highlight_element([\n StampUtil.highlightGuidArr[i],\n 0,\n ]); //取消高亮\n element_interface.delete_element(StampUtil.highlightGuidArr[i]); //清除结果数据\n } else {\n const index = StampUtil.highlightGuidArr[i].indexOf(\"|\");\n const layer_guid = StampUtil.highlightGuidArr[i].substring(\n 0,\n index\n );\n const keys = StampUtil.highlightGuidArr[i].substring(\n index + 1,\n StampUtil.highlightGuidArr[i].length\n );\n layer_manager_interface.set_bim_lock(layer_guid, true);\n layer_manager_interface.set_bim_highlight(\n layer_guid,\n keys,\n false,\n 0xffff0000,\n true\n );\n layer_manager_interface.set_bim_lock(layer_guid, false);\n }\n }\n StampUtil.highlightGuidArr = [];\n }\n } catch (ex) {}\n }\n\n /**\n * 停止高亮\n */\n stopHighlightObj() {\n try {\n if (StampUtil.highlightGuidArr.length > 0) {\n const element_interface = StampUtil.getLibax().element_interface;\n const layer_manager_interface = StampAPI.LibAx.layer_manager_interface(\n StampUtil.getLibax()\n );\n\n for (let i = 0; i < StampUtil.highlightGuidArr.length; i++) {\n const index = StampUtil.highlightGuidArr[i].indexOf(\"|\");\n if (index < 0) {\n element_interface.highlight_element([\n StampUtil.highlightGuidArr[i],\n 0,\n ]); //取消高亮\n StampUtil.setElementVisible(StampUtil.highlightGuidArr[i], false);\n } else {\n const layer_guid = StampUtil.highlightGuidArr[i].substring(\n 0,\n index\n );\n const keys = StampUtil.highlightGuidArr[i].substring(\n index + 1,\n StampUtil.highlightGuidArr[i].length\n );\n layer_manager_interface.set_bim_lock(layer_guid, true);\n layer_manager_interface.set_bim_highlight(\n layer_guid,\n keys,\n false,\n 0xffff0000,\n true\n );\n layer_manager_interface.set_bim_lock(layer_guid, false);\n }\n }\n }\n } catch (ex) {}\n }\n\n /**\n * 高亮pick对象\n */\n showHighlightObj(guid: string) {\n if (StampUtil.highlightGuidArr.indexOf(guid) == -1) {\n StampUtil.highlightGuidArr.push(guid);\n }\n\n try {\n if (StampUtil.highlightGuidArr.length > 0) {\n const element_interface = StampUtil.getLibax().element_interface;\n const layer_manager_interface = StampAPI.LibAx.layer_manager_interface(\n StampUtil.getLibax()\n );\n for (let i = 0; i < StampUtil.highlightGuidArr.length; i++) {\n if (StampUtil.highlightGuidArr[i] == guid) {\n const index = StampUtil.highlightGuidArr[i].indexOf(\"|\");\n\n if (index < 0) {\n StampUtil.setElementVisible(StampUtil.highlightGuidArr[i], true);\n element_interface.highlight_element([\n StampUtil.highlightGuidArr[i],\n 1,\n ]); //高亮\n } else {\n const layer_guid = StampUtil.highlightGuidArr[i].substring(\n 0,\n index\n );\n const keys = StampUtil.highlightGuidArr[i].substring(\n index + 1,\n StampUtil.highlightGuidArr[i].length\n );\n layer_manager_interface.set_bim_lock(layer_guid, true);\n layer_manager_interface.set_bim_highlight(\n layer_guid,\n keys,\n true,\n 0xffff0000,\n true\n );\n layer_manager_interface.set_bim_lock(layer_guid, false);\n }\n }\n }\n }\n } catch (ex) {}\n }\n\n /**\n * 高亮pick对象\n */\n showHighlightObj2(guid: string) {\n const element_interface = StampUtil.getLibax().element_interface;\n element_interface.highlight_element([guid, 1]); //高亮\n }\n\n // /**\n // * 停止高亮\n // */\n // stopHighlightObj2(guid: string) {\n // element_interface.highlight_element([guid, 0]); //取消高亮\n // }\n\n /**\n * (以当前姿态和距离)飞行定位对象\n * @param guid\n */\n flytoObj(guid: string) {\n StampUtil.getLibax().element_interface.FlyToByGuidCommand(guid);\n }\n /**\n * 高亮pick对象\n */\n showHighlightBySearch(\n url: string,\n layerid: string,\n seid: string,\n sename: string\n ) {\n return new Promise((resolve) => {\n const query_interface = StampUtil.getLibax().query_interface;\n query_interface.OnPickObjectEx = function (data: any) {\n query_interface.OnPickObjectEx = undefined;\n const len = data.length;\n if (len > 0) {\n StampUtil.showHighlightObj(data[0].highlight);\n }\n resolve(data);\n };\n query_interface.search_by_filter(layerid, sename, seid, url);\n });\n }\n /*\n * 批量高亮\n */\n showHighlightBySearchBat(\n guid: string,\n key: string,\n color: number,\n isFlash = true,\n isClearLast = true\n ) {\n const layer_manager_interface = StampAPI.LibAx.layer_manager_interface(\n StampUtil.getLibax()\n );\n const highlightColor = color || parseInt(\"0xFFFF0000\");\n\n layer_manager_interface.show_highlight_by_search(\n guid,\n key,\n highlightColor,\n isFlash,\n isClearLast\n );\n }\n\n /**\n * 停止批量高亮\n * @param guid 图层guid\n */\n clearHighlight = function (guid: string) {\n const layer_manager_interface = StampAPI.LibAx.layer_manager_interface(\n StampUtil.getLibax()\n );\n layer_manager_interface.clear_highlight(guid);\n };\n\n //#endregion\n\n //#region 图层相关接口\n /**\n * @params 1取lib_ax 0取lib_ax1\n * 获取图层列表\n */\n getLayerData(lib = 1) {\n return new Promise((resolve) => {\n let stamp_frame;\n if (lib == 1) {\n stamp_frame = StampUtil.getLibax().stamp_frame;\n } else if (lib == 0) {\n stamp_frame = StampAPI.lib_ax1.stamp_frame;\n } else if (lib == 2) {\n stamp_frame = StampAPI.lib_ax2.stamp_frame;\n }\n stamp_frame.init_layer_control = async function (jsonData: any) {\n if (jsonData.sub_layers) {\n jsonData.sub_layers = StampUtil.filterLayerData(jsonData.sub_layers);\n }\n //jsonData为图层树JSON对象\n const returnType = (await StampUtil.setLayerSearchReturnType(\n jsonData.sub_layers\n )) as any;\n if (returnType && returnType.length > 0) {\n const query_interface = StampUtil.getLibax().query_interface;\n query_interface.OnSetSuccess = function (res: any) {\n query_interface.OnSetSuccess = undefined;\n };\n query_interface.SetParamReturnTypeBatch(returnType);\n }\n StampUtil.layerData = jsonData.sub_layers;\n StampAPI.isLayerInit = true;\n resolve(jsonData);\n };\n stamp_frame.GetLayersCommand();\n });\n }\n filterLayerData(layerArr: any) {\n if (layerArr.length <= 0) {\n return [];\n }\n const resLayerArr: any = [];\n for (let i = 0; i < layerArr.length; i++) {\n if (\n layerArr[i] &&\n (layerArr[i].rtti == STAMP_RTTI.SE_RTTI_PROJECT_LAYER ||\n layerArr[i].rtti == STAMP_RTTI.SE_RTTI_FOLDER_LAYER)\n ) {\n //工程或文件夹\n const tmpArr = this.filterLayerData(layerArr[i].sub_layers);\n layerArr[i].sub_layers = tmpArr;\n resLayerArr.push(layerArr[i]);\n } else if (layerArr[i].is_show_layer != \"false\") {\n //图层,显示在界面上\n resLayerArr.push(layerArr[i]);\n }\n }\n return resLayerArr;\n }\n updateLayerData(layerArr: any, layer: any) {\n for (let i = 0; i < layerArr.length; i++) {\n if (layerArr[i].sub_layers && layerArr[i].sub_layers.length > 0) {\n this.updateLayerData(layerArr[i].sub_layers, layer);\n } else {\n if (layerArr[i].guid == layer.guid) {\n layerArr[i] = layer;\n }\n }\n }\n }\n /**\n * 设置查询返回数据类型:4为json\n * @param layerArr 图层数组\n */\n async setLayerSearchReturnType(layerArr: any) {\n let returnType: Array<any> = [];\n for (let i = 0; i < layerArr.length; i++) {\n if (layerArr[i].sub_layers && layerArr[i].sub_layers.length > 0) {\n const tmpReturnType = (await StampUtil.setLayerSearchReturnType(\n layerArr[i].sub_layers\n )) as any;\n if (tmpReturnType && tmpReturnType.length > 0) {\n returnType = returnType.concat(tmpReturnType);\n }\n } else {\n if (\n layerArr[i].rtti == STAMP_RTTI.SE_RTTI_MODEL_LOD_LAYER ||\n layerArr[i].rtti == STAMP_RTTI.SE_RTTI_BIM_LAYER ||\n layerArr[i].rtti == STAMP_RTTI.SE_RTTI_BUILDING_LAYER ||\n layerArr[i].rtti == STAMP_RTTI.SE_RTTI_MATCH_MODEL_LAYER ||\n layerArr[i].rtti == STAMP_RTTI.SE_RTTI_VECTOR_LAYER ||\n layerArr[i].rtti == STAMP_RTTI.SE_RTTI_UE_MODEL_LAYER ||\n layerArr[i].rtti == STAMP_RTTI.SE_RTTI_PIPELINE_LAYER ||\n layerArr[i].rtti == STAMP_RTTI.SE_RTTI_OBLIQUE_PHOTO_LAYER\n ) {\n if (layerArr[i].rtti == STAMP_RTTI.SE_RTTI_VECTOR_LAYER) {\n const layerType = (await StampUtil.getDataType(\n layerArr[i].guid\n )) as any;\n if (layerType.data_type == \"Point\") {\n returnType.push(layerArr[i].guid, 1);\n continue;\n }\n }\n returnType.push(layerArr[i].guid, 4);\n }\n }\n }\n return returnType;\n }\n\n /**\n * 获取DEM图层id集合\n * @param layerArr\n * @returns\n */\n getDemLayerids(layerArr: any) {\n let demArr = [] as any;\n for (let i = 0; i < layerArr.length; i++) {\n if (layerArr[i].sub_layers && layerArr[i].sub_layers.length > 0) {\n const demids = StampUtil.getDemLayerids(layerArr[i].sub_layers) as any;\n demArr = demArr.concat(demids);\n } else {\n if (\n layerArr[i].rtti == STAMP_RTTI.SE_RTTI_DEM_LAYER &&\n layerArr[i].visible\n ) {\n demArr.push(layerArr[i].guid);\n }\n }\n }\n return demArr;\n }\n\n /**\n * 获取DEM图层对象集合\n * @param layerArr\n * @returns\n */\n getDemLayers(layerArr: any) {\n let demArr = [] as any;\n for (let i = 0; i < layerArr.length; i++) {\n if (layerArr[i].sub_layers && layerArr[i].sub_layers.length > 0) {\n const demArrTmp = StampUtil.getDemLayers(layerArr[i].sub_layers) as any;\n demArr = demArr.concat(demArrTmp);\n } else {\n if (\n layerArr[i].rtti == STAMP_RTTI.SE_RTTI_DEM_LAYER &&\n layerArr[i].visible\n ) {\n demArr.push(layerArr[i]);\n }\n }\n }\n return demArr;\n }\n\n getVectorLayers(layerArr: any) {\n let demArr = [] as any;\n for (let i = 0; i < layerArr.length; i++) {\n if (\n layerArr[i].rtti &&\n layerArr[i].rtti == STAMP_RTTI.SE_RTTI_VECTOR_TILE_LAYER\n ) {\n let flag = false;\n if (layerArr[i].sub_layers && layerArr[i].sub_layers.length > 0) {\n for (let j = 0; j < layerArr[i].sub_layers.length; j++) {\n if (layerArr[i].sub_layers[j].visible) {\n flag = true;\n break;\n }\n }\n } else {\n flag = layerArr[i].visible;\n }\n if (flag) {\n demArr.push(layerArr[i]);\n }\n } else if (layerArr[i].sub_layers && layerArr[i].sub_layers.length > 0) {\n const demArrTmp = StampUtil.getVectorLayers(\n layerArr[i].sub_layers\n ) as any;\n demArr = demArr.concat(demArrTmp);\n }\n }\n return demArr;\n }\n\n /**\n * 图层数据的显示隐藏\n * @param {*} guid 图层的guid,上面获取图层列表的接口里面取到的guid\n * @param {*} bShow true/false 显示/隐藏\n */\n setLayerVisible(guid: string, bShow: boolean, lib = 1) {\n let stamp_frame;\n if (lib == 1) {\n stamp_frame = StampUtil.getLibax().stamp_frame;\n } else if (lib == 0) {\n stamp_frame = StampAPI.lib_ax1.stamp_frame;\n } else if (lib == 2) {\n stamp_frame = StampAPI.lib_ax2.stamp_frame;\n }\n stamp_frame?.ChangeVisibilityByGuidCommand(guid, bShow);\n }\n\n /**\n * 绘制图像的显示和隐藏\n * @param node\n * @param isVisible\n */\n setElementVisible(guid: string, isVisible: boolean) {\n for (let i = 0; i < this.webUIItems.length; i++) {\n if (\n this.webUIItems[i].guid == guid &&\n this.webUIItems[i].type == STAMP_RTTI.SE_RTTI_ELEMENT_ICON_WEBUI\n ) {\n //webui隐藏有问题,先用删除重建替代\n if (isVisible) {\n this.webUIItems[i].isdelete &&\n this.createIconWebUI(this.webUIItems[i]);\n this.webUIItems[i].isdelete = false;\n } else {\n this.removeWebUI(this.webUIItems[i].parentGuid);\n this.webUIItems[i].isdelete = true;\n }\n return;\n }\n }\n const element_interface = StampUtil.getLibax().element_interface;\n element_interface.visible_element([guid, Number(isVisible)]);\n }\n /**\n * 图层数据的定位\n * @param {*} guid 图层的guid,上面获取图层列表的接口里面取到的guid\n */\n flytoLayer(guid: string, lib = 1) {\n let stamp_frame;\n if (lib == 1) {\n stamp_frame = StampUtil.getLibax().stamp_frame;\n } else if (lib == 0) {\n stamp_frame = StampAPI.lib_ax1.stamp_frame;\n } else if (lib == 2) {\n stamp_frame = StampAPI.lib_ax2.stamp_frame;\n }\n const layer = this.getLayerByGuid(this.layerData, guid);\n if (layer) {\n const viewpointStr = layer.view_point;\n if (viewpointStr) {\n const longitude = viewpointStr.split(\",\")[0];\n const latitude = viewpointStr.split(\",\")[1];\n const altitude = viewpointStr.split(\",\")[2];\n const heading = viewpointStr.split(\",\")[3];\n const tilt = viewpointStr.split(\",\")[4];\n const roll = viewpointStr.split(\",\")[5];\n this.flytoLookat(\n longitude,\n latitude,\n altitude,\n heading,\n tilt,\n roll,\n 0,\n 3\n );\n return;\n }\n }\n stamp_frame.FlyToByLayerGuidCommand(guid);\n }\n\n /**\n * 根据guid获取图层对象\n * @param layerArr\n * @param guid\n * @returns\n */\n getLayerByGuid(layerArr: any, guid: string) {\n let retValue = null as any;\n for (let i = 0; i < layerArr.length; i++) {\n if (layerArr[i].guid == guid) {\n return layerArr[i];\n }\n if (\n layerArr[i].sub_layers &&\n layerArr[i].sub_layers.length > 0 &&\n layerArr[i].rtti !== 114\n ) {\n retValue = StampUtil.getLayerByGuid(layerArr[i].sub_layers, guid);\n if (retValue) {\n return retValue;\n }\n }\n }\n return retValue;\n }\n\n /**\n * 创建临时图层\n * @param options\n */\n createTempLayer(options: any) {\n const layer_manager_interface = StampAPI.LibAx.layer_manager_interface(\n StampAPI.lib_ax\n );\n const stamp_frame = StampAPI.LibAx.stamp_frame(StampAPI.lib_ax);\n layer_manager_interface.OnCreateFinished = function (data: any) {\n stamp_frame.ChangeVisibilityByGuidCommand(data.guid, 1);\n };\n layer_manager_interface.create_layer(options);\n }\n\n getCheckLayers(layerArr: any) {\n let returnArr: Array<any> = [];\n for (let i = 0; i < layerArr.length; i++) {\n if (\n layerArr[i].sub_layers &&\n layerArr[i].sub_layers.length > 0 &&\n layerArr[i].rtti !== 114\n ) {\n const tmpLayerArr = StampUtil.getCheckLayers(layerArr[i].sub_layers);\n if (tmpLayerArr && tmpLayerArr.length > 0) {\n returnArr = returnArr.concat(tmpLayerArr);\n }\n } else {\n if (layerArr[i].visible) {\n returnArr.push(layerArr[i].guid);\n }\n }\n }\n return returnArr;\n }\n\n setLayerVisibleStatus(layerArr: Array<any>, checkedLayers: Array<string>) {\n for (let i = 0; i < layerArr.length; i++) {\n if (layerArr[i].sub_layers && layerArr[i].sub_layers.length > 0) {\n StampUtil.setLayerVisibleStatus(layerArr[i].sub_layers, checkedLayers);\n } else {\n StampUtil.setLayerVisible(\n layerArr[i].src_guid,\n checkedLayers.indexOf(layerArr[i].src_guid) != -1\n );\n }\n }\n }\n\n createVectorTileLayer(params: any) {\n return new Promise((resolve) => {\n const element_interface = StampUtil.getLibax().element_interface;\n const layer_manager_interface =\n StampUtil.getLibax().layer_manager_interface;\n layer_manager_interface.OnCreateFinished = (data: any) => {\n element_interface.visible_element([data.guid, 1]);\n resolve(data.guid);\n };\n const obj = {} as any;\n //common\n obj.guid = params.guid;\n obj.name = params.name;\n obj.rtti = STAMP_RTTI.SE_RTTI_VECTOR_TILE_LAYER;\n obj.north = params.north;\n obj.south = params.south;\n obj.east = params.east;\n obj.west = params.west;\n obj.min = params.min;\n obj.max = params.max;\n obj.httpLink = params.httpLink;\n\n obj.gisLink = params.gisLink;\n obj.minLevel = params.minLevel; ////界面配置\n obj.maxLevel = params.maxLevel; ////界面配置\n obj.priority = 1; //界面配置\n obj.outFormat = \"PBF\";\n obj.mapfile = params.mapfile;\n obj.geometryType = params.type; //\"Line\";//\"Polygon\";\n obj.ShadowType = params.ShadowType; //\"Terrain\"////界面配置\n layer_manager_interface.create_layer(obj);\n });\n }\n\n createModelLodLayer(params: any) {\n return new Promise((resolve) => {\n const element_interface = StampUtil.getLibax().element_interface;\n const layer_manager_interface =\n StampUtil.getLibax().layer_manager_interface;\n layer_manager_interface.OnCreateFinished = (data: any) => {\n // layer_manager_interface.refresh_layer(data.guid);\n element_interface.visible_element([data.guid, 1]);\n resolve(data.guid);\n };\n const obj = {} as any;\n //common\n obj.guid = params.guid;\n obj.name = params.name;\n obj.rtti = STAMP_RTTI.SE_RTTI_MODEL_LOD_LAYER;\n obj.north = params.north;\n obj.south = params.south;\n obj.east = params.east;\n obj.west = params.west;\n obj.min = params.min;\n obj.max = params.max;\n obj.httpLink = params.httpLink;\n\n //model lod\n obj.gisLink = params.gisLink;\n obj.isUnderground = params.isUnderground;\n obj.minHeight = params.minHeight; //the same as Height in data.data,when <Height>1</Height>, minHeight = 0; when <Height>1,21</Height>, minHeight = 1\n obj.maxHeight = params.maxHeight; //the same as Height in data.data\n obj.minLevel = params.minLevel;\n obj.maxLevel = params.maxLevel;\n obj.dataType = params.dataType;\n obj.origin = params.origin;\n obj.altitudeOffset = params.altitudeOffset;\n layer_manager_interface.create_layer(obj);\n });\n }\n\n updateLayer(guid: any) {\n const layer_manager_interface = StampAPI.LibAx.layer_manager_interface(\n StampUtil.getLibax()\n );\n layer_manager_interface.refresh_layer(guid);\n }\n\n /**\n * 【倾斜图层】设置图层是否是地面模型\n * @param guid 【倾斜图层】GUID\n * @param isGround 0:非地面模型 1:地面模型\n */\n setLayerIsGround(guid: any, isGround: any) {\n const layer_manager_interface = StampAPI.LibAx.layer_manager_interface(\n StampUtil.getLibax()\n );\n layer_manager_interface.set_play_is_ground([guid, isGround]);\n }\n\n /**\n * 获取图层优先级\n * @param guid 图层guid\n * @returns\n */\n getLayerPriority(guid: any) {\n return new Promise((resolve) => {\n const layer_manager_interface = StampAPI.LibAx.layer_manager_interface(\n StampUtil.getLibax()\n );\n layer_manager_interface.OnGetLayerPriority = function (data: any) {\n resolve(data);\n };\n layer_manager_interface.get_layer_priority(guid);\n });\n }\n\n /**\n * 设置图层优先级\n * @param guid 图层guid\n * @param priority 优先级:0/1/2/3/4/5/6/7/8/9/10等等\n */\n setLayerPriority(guid: any, priority: any) {\n const layer_manager_interface = StampAPI.LibAx.layer_manager_interface(\n StampUtil.getLibax()\n );\n const params = [guid, priority];\n layer_manager_interface.set_layer_priority(params);\n }\n //#endregion\n\n //#region 量算分析接口\n /**\n * 转换映射:量算结果中返回的measureType对应中文名\n * @param {*} type 量算类型枚举值\n */\n commandTypeToName(type: number) {\n switch (type) {\n case 0:\n return \"水平距离\";\n case 1:\n return \"垂直距离\";\n case 2:\n return \"地表距离\";\n case 3:\n return \"空间距离\";\n case 4:\n return \"水平面积\";\n case 5:\n return \"空间面积\";\n case 6:\n return \"垂直面积\";\n case 7:\n return \"平面角度\";\n default:\n return \"测量结果\";\n }\n }\n\n /**\n * 转换映射:量算结果中返回的单位unit对应中文名\n * @param {*} unit 单位unit枚举值\n */\n measureUnitTypeToName(unit: number) {\n switch (unit) {\n case 0:\n return \"米\";\n case 1:\n return \"千米\";\n case 2:\n return \"平方米\";\n case 3:\n return \"平方千米\";\n case 4:\n return \"分钟\";\n case 5:\n return \"°\";\n default:\n return \"\";\n }\n }\n\n /**\n * 量算:水平距离\n */\n measureHorizontalDist(fontSize = 16, fontColor = 0xffffffff) {\n // this.clearMeasure();\n return new Promise((resolve) => {\n const handler = StampUtil.getLibax().handlers.get(\n StampAPI.LibAx.StampPixelStreamingHandleType.StampType_Measure\n ); //获取量算分析的操作对象\n const measure_interface = StampAPI.LibAx.measure_interface(\n StampUtil.getLibax()\n );\n const fontInfo = [fontSize, fontSize, fontColor]; //文字字体大小,预留参数,暂未用到\n measure_interface.OnMeasureFinished = (data: any) => {\n data.measureType = this.commandTypeToName(data.measureType);\n data.unit = this.measureUnitTypeToName(data.unit);\n resolve(data);\n };\n measure_interface.measure(\n handler.CommandType.MeasureCommand_HorizontalDist,\n fontInfo\n ); //开启水平距离的量算操作\n });\n }\n\n /**\n * 量算:垂直距离\n */\n measureVerticalDist(fontSize = 16, fontColor = 0xffffffff) {\n this.clearMeasure();\n return new Promise((resolve) => {\n const handler = StampUtil.getLibax().handlers.get(\n StampAPI.LibAx.StampPixelStreamingHandleType.StampType_Measure\n ); //获取量算分析的操作对象\n const measure_interface = StampAPI.LibAx.measure_interface(\n StampUtil.getLibax()\n );\n const fontInfo = [fontSize, fontSize, fontColor]; //文字字体大小,预留参数,暂未用到\n measure_interface.OnMeasureFinished = (data: any) => {\n //量算分析返回结果的回调事件\n data.measureType = this.commandTypeToName(data.measureType);\n data.unit = this.measureUnitTypeToName(data.unit);\n resolve(data);\n };\n measure_interface.measure(\n handler.CommandType.MeasureCommand_VerticalDist,\n fontInfo\n ); //开启垂直距离的量算操作\n });\n }\n\n /**\n * 量算:三角测量\n */\n measureSpatialRightAngle(fontSize = 16, fontColor = 0xffffffff) {\n this.clearMeasure();\n return new Promise((resolve) => {\n const handler = StampUtil.getLibax().handlers.get(\n StampAPI.LibAx.StampPixelStreamingHandleType.StampType_Measure\n ); //获取量算分析的操作对象\n const measure_interface = StampAPI.LibAx.measure_interface(\n StampUtil.getLibax()\n );\n const fontInfo = [fontSize, fontSize, fontColor]; //文字字体大小,预留参数,暂未用到\n measure_interface.OnMeasureFinished = (data: any) => {\n //量算分析返回结果的回调事件\n data.measureType = this.commandTypeToName(data.measureType);\n data.unit = this.measureUnitTypeToName(data.unit);\n resolve(data);\n };\n measure_interface.measure(\n handler.CommandType.MeasureCommand_SpatialRightAngle,\n fontInfo\n ); //开启垂直距离的量算操作\n });\n }\n\n /**\n * 量算:地表距离\n */\n measureSurfaceDist(fontSize = 16, fontColor = 0xffffffff) {\n this.clearMeasure();\n return new Promise((resolve) => {\n const handler = StampUtil.getLibax().handlers.get(\n StampAPI.LibAx.StampPixelStreamingHandleType.StampType_Measure\n ); //获取量算分析的操作对象\n const measure_interface = StampAPI.LibAx.measure_interface(\n StampUtil.getLibax()\n );\n const fontInfo = [fontSize, fontSize, fontColor]; //文字字体大小,预留参数,暂未用到\n measure_interface.OnMeasureFinished = (data: any) => {\n //量算分析返回结果的回调事件\n data.measureType = this.commandTypeToName(data.measureType);\n data.unit = this.measureUnitTypeToName(data.unit);\n resolve(data);\n };\n measure_interface.measure(\n handler.CommandType.MeasureCommand_SurfaceDist,\n fontInfo\n );\n });\n }\n\n /**\n * 量算:空间距离\n */\n measureSpaceDist(fontSize = 16, fontColor = 0xffffffff) {\n const self = this;\n this.clearMeasure();\n return new Promise((resolve) => {\n const handler = StampUtil.getLibax().handlers.get(\n StampAPI.LibAx.StampPixelStreamingHandleType.StampType_Measure\n ); //获取量算分析的操作对象\n const measure_interface = StampAPI.LibAx.measure_interface(\n StampUtil.getLibax()\n );\n const fontInfo = [fontSize, fontSize, fontColor]; //文字字体大小,预留参数,暂未用到\n measure_interface.OnMeasureFinished = function (data: any) {\n //量算分析返回结果的回调事件\n data.measureType = self.commandTypeToName(data.measureType);\n data.unit = self.measureUnitTypeToName(data.unit);\n resolve(data);\n }.bind(this);\n measure_interface.measure(\n handler.CommandType.MeasureCommand_SpaceDist,\n fontInfo\n );\n });\n }\n\n /**\n * 量算:水平面积\n */\n measureHorizontalProjectionArea(fontSize = 16, fontColor = 0xffffffff) {\n const self = this;\n this.clearMeasure();\n return new Promise((resolve) => {\n const handler = StampUtil.getLibax().handlers.get(\n StampAPI.LibAx.StampPixelStreamingHandleType.StampType_Measure\n ); //获取量算分析的操作对象\n const measure_interface = StampAPI.LibAx.measure_interface(\n StampUtil.getLibax()\n );\n const fontInfo = [fontSize, fontSize, fontColor]; //文字字体大小,预留参数,暂未用到\n measure_interface.OnMeasureFinished = function (data: any) {\n //量算分析返回结果的回调事件\n data.measureType = self.commandTypeToName(data.measureType);\n data.unit = self.measureUnitTypeToName(data.unit);\n resolve(data);\n }.bind(this);\n measure_interface.measure(\n handler.CommandType.MeasureCommand_HorizontalProjectionArea,\n fontInfo\n );\n });\n }\n\n /**\n * 量算:空间面积\n */\n measureSpaceArea(fontSize = 16, fontColor = 0xffffffff) {\n const self = this;\n this.clearMeasure();\n return new Promise((resolve) => {\n const handler = StampUtil.getLibax().handlers.get(\n StampAPI.LibAx.StampPixelStreamingHandleType.StampType_Measure\n ); //获取量算分析的操作对象\n const measure_interface = StampAPI.LibAx.measure_interface(\n StampUtil.getLibax()\n );\n const fontInfo = [fontSize, fontSize, fontColor]; //文字字体大小,预留参数,暂未用到\n measure_interface.OnMeasureFinished = function (data: any) {\n //量算分析返回结果的回调事件\n data.measureType = self.commandTypeToName(data.measureType);\n data.unit = self.measureUnitTypeToName(data.unit);\n resolve(data);\n }.bind(this);\n measure_interface.measure(\n handler.CommandType.MeasureCommand_SpaceArea,\n fontInfo\n );\n });\n }\n\n /**\n * 量算:立面面积(垂直面积)\n */\n measureVerticalArea(fontSize = 16, fontColor = 0xffffffff) {\n const self = this;\n this.clearMeasure();\n return new Promise((resolve) => {\n const handler = StampUtil.getLibax().handlers.get(\n StampAPI.LibAx.StampPixelStreamingHandleType.StampType_Measure\n ); //获取量算分析的操作对象\n const measure_interface = StampAPI.LibAx.measure_interface(\n StampUtil.getLibax()\n );\n const fontInfo = [fontSize, fontSize, fontColor]; //文字字体大小,预留参数,暂未用到\n measure_interface.OnMeasureFinished = function (data: any) {\n //量算分析返回结果的回调事件\n data.measureType = self.commandTypeToName(data.measureType);\n data.unit = self.measureUnitTypeToName(data.unit);\n resolve(data);\n }.bind(this);\n measure_interface.measure(\n handler.CommandType.MeasureCommand_VerticalArea,\n fontInfo\n );\n });\n }\n\n /**\n * 量算:地表面积----比较特殊,不知道为啥放在分析接口里面,清除也要调分析接口的清除\n */\n analysisSurfaceArea(fontSize = 16, fontColor = 0xffffffff) {\n this.clearMeasure();\n return new Promise((resolve) => {\n const analysis_interface = StampAPI.LibAx.analysis_interface(\n StampUtil.getLibax()\n );\n const fontInfo = [fontSize, fontSize, fontColor]; //文字字体大小,预留参数,暂未用到\n analysis_interface.OnPixelStreamingSurfaceArea = function (data: any) {\n //量算分析返回结果的回调事件\n const result = {\n measureType: \"地表面积\",\n result: data.terrainSurfaceArea,\n unit: \"平方米\",\n };\n resolve(result);\n }.bind(this);\n analysis_interface.analysisSurfaceArea(fontInfo);\n });\n }\n\n /**\n * 量算:平面角度\n */\n measurePlaneAngle(fontSize = 16, fontColor = 0xffffffff) {\n const self = this;\n this.clearMeasure();\n return new Promise((resolve) => {\n const handler = StampUtil.getLibax().handlers.get(\n StampAPI.LibAx.StampPixelStreamingHandleType.StampType_Measure\n ); //获取量算分析的操作对象\n const measure_interface = StampAPI.LibAx.measure_interface(\n StampUtil.getLibax()\n );\n const fontInfo = [fontSize, fontSize, fontColor]; //文字字体大小,预留参数,暂未用到\n measure_interface.OnMeasureFinished = function (data: any) {\n //量算分析返回结果的回调事件\n data.measureType = self.commandTypeToName(data.measureType);\n data.unit = self.measureUnitTypeToName(data.unit);\n resolve(data);\n }.bind(this);\n measure_interface.measure(\n handler.CommandType.MeasureCommand_PlaneAngle,\n fontInfo\n );\n });\n }\n\n /**\n * 清除所有量算辅助线信息\n */\n clearMeasure() {\n const measure_interface = StampUtil.getLibax().measure_interface;\n measure_interface.clear();\n StampUtil.clearAnalysisResult();\n }\n /**\n * 只清除量算\n */\n clearOnlyMeasure() {\n const measure_interface = StampUtil.getLibax().measure_interface;\n measure_interface.clear();\n }\n\n //#endregion\n\n //#region 空间分析\n /**\n * 全球等高线\n * @param stride 等高线间隔(米)\n * @param lineColor 线颜色\n */\n setGlobalContour(stride = 10, lineColor = 0xffffff00) {\n const environment_interface = StampUtil.getLibax().environment_interface;\n environment_interface.set_global_contour_param(stride, lineColor);\n environment_interface.set_global_terrain_project_type(0); //0代表等高线\n environment_interface.set_global_terrain_project(true);\n }\n\n /**\n * 全球坡度图\n */\n setGlobalSlope(\n gradeColor: Array<any> = [\n { grade: 0.0, color: 0x00ff00 },\n { grade: 41.0, color: 0xffff00 },\n { grade: 82.0, color: 0xff0000 },\n ]\n ) {\n const environment_interface = StampUtil.getLibax().environment_interface;\n environment_interface.set_global_slope_param(90, gradeColor);\n environment_interface.set_global_terrain_project_type(1); //1代表坡度图\n environment_interface.set_global_terrain_project(true);\n }\n\n /**\n * 全球汇水分析\n */\n setGlobalSlopeDirection(arrowColor = 0xccffff00) {\n const environment_interface = StampUtil.getLibax().environment_interface;\n environment_interface.set_global_slope_direction_param(arrowColor);\n environment_interface.set_global_terrain_project_type(2); //2代表汇水分析\n environment_interface.set_global_terrain_project(true);\n }\n\n /**\n * 关闭全球分析效果\n */\n cancelGlobalEffect() {\n const environment_interface = StampUtil.getLibax().environment_interface;\n environment_interface.set_global_terrain_project(false);\n }\n /**\n * 地形路径\n */\n bestPath(\n params: any = {\n interval: 2,\n climbLimited: 20,\n descentLimited: 20,\n points: [],\n linecolor: \"#ffff0000\",\n layerids: \"\",\n }\n ) {\n return new Promise(async (resolve) => {\n //标注起点和终点\n const startIcon = (await StampUtil.createIconParams({\n Text: \"起点\",\n points: [params.points[0]],\n })) as any;\n const endIcon = (await StampUtil.createIconParams({\n Text: \"终点\",\n points: [params.points[1]],\n })) as any;\n StampUtil.bestPathIconList.push(startIcon);\n StampUtil.bestPathIconList.push(endIcon);\n const analysis_interface = StampUtil.getLibax().analysis_interface;\n analysis_interface.OnBestPath = async function (data: any) {\n if (data && data.bestline) {\n //目前缺少点串\n StampUtil.createElementLineParams({\n action: \"modify\", //修改\n guid: data.bestline,\n linewidth: 1,\n linecolor: params.linecolor, //修改颜色\n });\n }\n resolve(data);\n };\n //最安全下山路线\n //最优路径接口\n analysis_interface.best_path(\n params.climbLimited,\n params.descentLimited,\n params.interval,\n 1,\n params.points,\n params.layerids\n );\n });\n }\n\n //#region 等高线\n /**\n * 等高线分析\n */\n analysisContourPolygon(params: any) {\n return new Promise((resolve) => {\n const analysis_interface = StampUtil.getLibax().analysis_interface;\n const shape_creator_interface =\n StampUtil.getLibax().shape_creator_interface;\n const element_interface = StampUtil.getLibax().element_interface;\n analysis_interface.OnCreateContourPolygon = function (data: any) {\n shape_creator_interface.clear();\n const userdataObj = {\n type: STAMP_RTTI.SE_RTTI_ELEMENT_CONTOUR_POLYGON,\n name: \"contour\",\n guid: data.guid,\n Stride: params.Stride,\n Color: params.Color,\n lableDes: params.lableDes,\n InfoColor: params.InfoColor,\n fontWidth: 12,\n fontHeight: 12,\n lableBaseHeight: 1,\n };\n element_interface.modify_element(userdataObj);\n StampUtil.contourLineElementGuid = data.guid;\n resolve(data);\n };\n analysis_interface.OnContourProcessFinish = function (data: any) {\n // 返回等高线信息\n // StampUtil.createContourIcon(\n // params.lableDes,\n // params.lablesColor,\n // data.Contour\n // );\n };\n const points = [] as any; // 范围,不赋值会自动调用多边形构建工具\n analysis_interface.createContourPolygon(points);\n });\n }\n\n /**\n * 创建等高线标注对象\n * @param lableDes\n * @param lablesColor\n * @param contour\n * @returns\n */\n async createContourIcon(lableDes: any, lablesColor: any, contour: any) {\n StampUtil.clearContourPointIcon(); //删除之前标会对象contourPointIconsGuid\n if (contour.length == 0) {\n return;\n }\n\n const heightArr = [];\n for (let i = 0; i < contour.length; i++) {\n const linePoints = contour[i];\n for (let j = 0; j < linePoints.length; j++) {\n //获取所有的高度\n const v_pos = linePoints[j];\n const v_height = v_pos.Z.toFixed(2);\n if (heightArr.indexOf(v_height) == -1) {\n heightArr.push(v_height);\n }\n }\n }\n //排序\n heightArr.sort(function (a, b) {\n if (parseFloat(a) > parseFloat(b)) {\n return -1;\n } else if (parseFloat(a) < parseFloat(b)) {\n return 1;\n } else {\n return 0;\n }\n });\n\n for (let i = 0; i < contour.length; i++) {\n const linePoints = contour[i];\n //获取所有的高度\n const v_pos = linePoints[0];\n const v_height = v_pos.Z.toFixed(2);\n\n for (let j = 0; j < heightArr.length; j = j + lableDes) {\n if (v_height == heightArr[j]) {\n //传入标注颜色,标注线经纬度\n const params = {\n points: [\n {\n x: v_pos.X,\n y: v_pos.Y,\n z: v_pos.Z,\n },\n ],\n Text: Number(v_height).toString(),\n TextColor: parseInt(lablesColor),\n action: \"add\",\n };\n const obj = (await StampUtil.createIconParams(params)) as any;\n StampUtil.contourPointIconsGuid.push(obj.guid); //保存创建的标绘guid方便后续删除\n break;\n }\n }\n }\n }\n\n /**\n * 清除等高线标注\n */\n clearContourPointIcon() {\n for (let i = 0; i < StampUtil.contourPointIconsGuid.length; i++) {\n StampUtil.deleteAnalysisRes(StampUtil.contourPointIconsGuid[i].guid);\n }\n StampUtil.contourPointIconsGuid = [];\n }\n\n /**\n * 清除等高线和标注结果\n */\n clearContourResult() {\n StampUtil.clearContourPointIcon();\n if (StampUtil.contourLineElementGuid) {\n StampUtil.deleteAnalysisRes(StampUtil.contourLineElementGuid);\n StampUtil.contourLineElementGuid = \"\";\n }\n }\n\n //#endregion\n\n /**\n * 淹没分析\n */\n analysisSubmerge(\n submergeParams = {\n type: 0, //淹没分析类型:0:点源淹没;1:流域淹没分析;2:面域淹没分析\n bottomHeight: 10, //水底高程\n waterDeep: 5, //水深\n frequency: 10, //升高频率:10次/秒\n perHeight: 0.1, //每次上升高度: 0.1米/次\n showSide: true, //显示侧面\n radius: 10, //缓冲半径:流域分析和面域分析中用到\n }\n ) {\n return new Promise((resolve) => {\n switch (submergeParams.type) {\n case 0: {\n StampUtil.analysisSubmergePoint(submergeParams).then((res) => {\n resolve(res);\n });\n break;\n }\n case 1: {\n StampUtil.analysisSubmergePolyline(submergeParams).then((res) => {\n resolve(res);\n });\n break;\n }\n case 2: {\n StampUtil.analysisSubmergePolygon(submergeParams).then((res) => {\n resolve(res);\n });\n break;\n }\n default: {\n break;\n }\n }\n });\n }\n\n /**\n * 淹没分析:点源淹没\n * @param submergeParams\n */\n analysisSubmergePoint(submergeParams: any) {\n return new Promise((resolve) => {\n StampUtil.clearAnalysisResult();\n const shape_creator_interface =\n StampUtil.getLibax().shape_creator_interface;\n shape_creator_interface.OnShapeCreated = (data: any) => {\n StampUtil.onShapeCreatedSubmerge(data, submergeParams).then(\n (res: any) => {\n res.points = data;\n resolve(res);\n }\n );\n };\n const fillcolor = 0xcc0b4b41;\n const linecolor = 0xccff0000;\n shape_creator_interface.create_circle(fillcolor, linecolor);\n });\n }\n\n /**\n * 淹没分析:流域淹没分析\n * @param submergeParams\n */\n async analysisSubmergePolyline(submergeParams: any) {\n return new Promise((resolve) => {\n StampUtil.clearAnalysisResult();\n StampUtil.createPolyline(\n {\n lineWidth: 2,\n lineColor: 0xccff0000,\n },\n null\n ).then((data: any) => {\n StampUtil.onShapeCreatedSubmerge(data, submergeParams).then(\n (res: any) => {\n res.points = data.Points;\n resolve(res);\n }\n );\n });\n });\n }\n\n /**\n * 淹没分析:面域淹没分析\n * @param submergeParams\n */\n analysisSubmergePolygon(submergeParams: any) {\n return new Promise((resolve) => {\n StampUtil.clearAnalysisResult();\n StampUtil.createPolygon().then((data: any) => {\n StampUtil.getLibax().shape_creator_interface.clear();\n StampUtil.onShapeCreatedSubmerge(data, submergeParams).then(\n (res: any) => {\n res.points = data.Points;\n resolve(res);\n }\n );\n });\n });\n }\n\n /**\n * 淹没分析:绘制完成事件\n * @param data\n * @param submergeParams\n */\n onShapeCreatedSubmerge(data: any, submergeParams: any) {\n return new Promise((resolve) => {\n const shape_creator_interface =\n StampUtil.getLibax().shape_creator_interface;\n shape_creator_interface.clear();\n shape_creator_interface.OnShapeCreated = undefined;\n const geometry_algorithm_interface =\n StampUtil.getLibax().geometry_algorithm_interface;\n geometry_algorithm_interface.OnGeometryAlgorithmFinished = (\n data: any\n ) => {\n StampUtil.onGeometryAlgorithmFinished(data, submergeParams);\n };\n const points = [] as any;\n let radius = submergeParams.radius;\n switch (submergeParams.type) {\n case 0: {\n const is_element = false;\n const step = 24;\n const param = [\n is_element,\n step,\n data.Radius,\n data.Longitude,\n data.Latitude,\n submergeParams.bottomHeight,\n ];\n geometry_algorithm_interface.create_polygon_from_circle(param);\n\n points.push(data.Longitude, data.Latitude, data.Altitude);\n radius = data.Radius;\n break;\n }\n case 1: {\n const is_element = false;\n const toptype = 1;\n const num = 36;\n const bufferDir = 0;\n const v_points = [] as any;\n for (let i = 0, len = data.Points.length; i < len; ++i) {\n v_points.push({\n x: data.Points[i].X,\n y: data.Points[i].Y,\n z: submergeParams.bottomHeight,\n });\n points.push(data.Points[i].X);\n points.push(data.Points[i].Y);\n points.push(data.Points[i].Z);\n }\n geometry_algorithm_interface.create_polygon_buffer_from_polyline(\n is_element,\n v_points,\n submergeParams.radius,\n toptype,\n num,\n bufferDir\n );\n break;\n }\n case 2: {\n const is_element = false;\n const coordUnit = 1;\n const v_points = [] as any;\n for (let i = 0, len = data.Points.length; i < len; ++i) {\n v_points.push({\n x: data.Points[i].X,\n y: data.Points[i].Y,\n z: submergeParams.bottomHeight,\n });\n points.push(data.Points[i].X);\n points.push(data.Points[i].Y);\n points.push(data.Points[i].Z);\n }\n if (data.Points.length > 0) {\n points.push(data.Points[0].X);\n points.push(data.Points[0].Y);\n points.push(data.Points[0].Z);\n }\n geometry_algorithm_interface.create_parallel_polygon(\n is_element,\n v_points,\n 0,\n coordUnit\n );\n break;\n }\n default: {\n break;\n }\n }\n const param = [] as any;\n StampUtil.getLayerData().then((res: any) => {\n const demArr = StampUtil.getDemLayerids(res.sub_layers);\n param.push(submergeParams.type == 0);\n param.push(submergeParams.bottomHeight + submergeParams.waterDeep);\n param.push(radius);\n param.push(true);\n param.push(demArr.join(\",\"));\n param.push(points);\n StampUtil.analysisSubmergeMission(param).then((result) => {\n resolve(result);\n });\n });\n });\n }\n\n /**\n * 淹没分析获取结果淹没面积\n * @param param\n * @returns\n */\n analysisSubmergeMission(param: any) {\n return new Promise((resolve) => {\n const analysis_interface = StampUtil.getLibax().analysis_interface;\n analysis_interface.OnSubMergingResult = (data: any) => {\n analysis_interface.clear();\n analysis_interface.OnSubMergingResult = undefined;\n resolve(data);\n };\n analysis_interface.analysisSubmerging(param);\n });\n }\n change_flow = function (guid: string, isFlow: boolean) {\n if (guid !== \"\") {\n const v_param = {\n guid: guid,\n enableFlow: isFlow,\n textureUrl:\n window.location.origin +\n window.location.pathname +\n \"images/flow/flow.jpg\",\n };\n const layer_manager_interface = StampAPI.LibAx.layer_manager_interface(\n StampUtil.getLibax()\n );\n layer_manager_interface.change_block_flow(v_param);\n }\n };\n /**\n * 淹没分析:生成多边形完成事件\n * @param data\n * @param submergeParams\n */\n onGeometryAlgorithmFinished(data: any, submergeParams: any) {\n const geometry_algorithm_interface =\n StampUtil.getLibax().geometry_algorithm_interface;\n geometry_algorithm_interface.OnGeometryAlgorithmFinished = undefined;\n if (data != undefined && data.Polygon != undefined) {\n const len = data.Polygon.length;\n const coordinates = [];\n for (let i = 0; i < len; ++i) {\n for (let j = 0; j < 2; ++j) {\n coordinates.push(data.Polygon[i][j]);\n }\n coordinates.push(submergeParams.bottomHeight);\n }\n\n if (coordinates.length >= 9) {\n StampUtil.createSubmergePolygonParams(coordinates, submergeParams);\n }\n }\n }\n\n /**\n * 淹没分析:创建多边形淹没体\n * @param coordinates\n * @param submergeParams\n */\n createSubmergePolygonParams(coordinates: any, submergeParams: any) {\n debugger;\n const speed = submergeParams.perHeight * submergeParams.frequency;\n const times = submergeParams.waterDeep / speed;\n const userdataObj = {} as any;\n userdataObj.type = 415;\n userdataObj.name = \"submerge\";\n userdataObj.guid = StampUtil.createGuid();\n userdataObj.selectable = 0;\n userdataObj.editable = 0;\n userdataObj.parent = 0;\n userdataObj.fillcolor = \"#FF0B4B41\";\n userdataObj.watercolor = \"#FF095889\";\n userdataObj.action = \"add\";\n userdataObj.ShowSide = submergeParams.showSide;\n userdataObj.Wave = 100;\n userdataObj.BottomHeight = submergeParams.bottomHeight;\n userdataObj.TopHeight =\n submergeParams.bottomHeight + submergeParams.waterDeep;\n userdataObj.Time = times;\n let params = [userdataObj];\n params = params.concat(coordinates);\n\n StampUtil.submergePolygon = userdataObj;\n const element_interface = StampUtil.getLibax().element_interface;\n element_interface.OldOnAdded = element_interface.OnAdded;\n element_interface.OnAdded = () => {\n element_interface.OnAdded = element_interface.OldOnAdded;\n };\n element_interface.create_polygon_params(params);\n if (StampUtil.submergePolygon) {\n const analysis_interface = StampUtil.getLibax().analysis_interface;\n analysis_interface.analysisDynamicSubmerging([\n StampUtil.submergePolygon.guid,\n ]);\n }\n }\n /**\n * 临山天际线分析用坐标和半径创建圆后返回点串信息\n */\n analysisLsSkyline(params: any) {\n return new Promise((resolve: any) => {\n const geometry_algorithm_interface =\n StampUtil.getLibax().geometry_algorithm_interface;\n geometry_algorithm_interface.OnGeometryAlgorithmFinished = (\n data: any\n ) => {\n resolve(data);\n };\n\n const is_element = false;\n const step = 36;\n const Radius = params.radius;\n const Longitude = params.points[0].x;\n const Latitude = params.points[0].y;\n const alt = params.points[0].z;\n const param = [is_element, step, Radius, Longitude, Latitude, alt];\n geometry_algorithm_interface.create_polygon_from_circle(param);\n });\n }\n /**\n *\n * @param params\n * @returns\n */\n getPolygonFromCircle(\n params: any = {\n radius: 1,\n center: { x: 0, y: 0, z: 0 },\n step: 36,\n }\n ) {\n return new Promise((resolve: any) => {\n const geometry_algorithm_interface =\n StampUtil.getLibax().geometry_algorithm_interface;\n geometry_algorithm_interface.OnGeometryAlgorithmFinished = (\n data: any\n ) => {\n resolve(data);\n };\n const is_element = false;\n const step = params.step || 36;\n const Radius = params.radius || 1;\n const Longitude = params.center.x;\n const Latitude = params.center.y;\n const alt = params.center.z;\n const param = [is_element, step, Radius, Longitude, Latitude, alt];\n geometry_algorithm_interface.create_polygon_from_circle(param);\n });\n }\n /**\n * 剖切分析\n * @param vertical\n * @param types\n * @param poly\n * @param callBack\n */\n clipScene(\n vertical: number,\n types: number,\n poly: Array<any>,\n center: any = null,\n heading: any = null,\n axis: any = null,\n callBack: Function = () => {}\n ) {\n const measure_interface = StampAPI.LibAx.measure_interface(\n StampUtil.getLibax()\n );\n measure_interface.clipScene(!vertical, types, poly, center, heading, axis); //vertical, types, poly, center, heading, axis\n const handler = StampUtil.getLibax().handlers.get(\n StampAPI.LibAx.StampPixelStreamingHandleType.StampType_Measure\n );\n handler.interface.oldOnMeasureFinished =\n handler.interface.OnMeasureFinished;\n handler.interface.OnMeasureFinished = (data: any) => {\n handler.interface.OnMeasureFinished =\n handler.interface.oldOnMeasureFinished;\n StampUtil.clearMeasure();\n typeof callBack == \"function\" && callBack();\n };\n }\n\n /**\n * 获取当前剖切参数\n * @returns\n */\n getClipScenePose() {\n return new Promise((resolve) => {\n const handler = StampUtil.getLibax().handlers.get(\n StampAPI.LibAx.StampPixelStreamingHandleType.StampType_Measure\n );\n handler.interface.oldOnMeasureFinished =\n handler.interface.OnMeasureFinished;\n handler.interface.OnMeasureFinished = (data: any) => {\n handler.interface.OnMeasureFinished =\n handler.interface.oldOnMeasureFinished;\n resolve(data);\n };\n handler.interface.MeasureGetClipScenePose();\n });\n }\n\n /**\n * 定向剖切\n */\n fixedClipScene() {\n const measure_interface = StampAPI.LibAx.measure_interface(\n StampUtil.getLibax()\n );\n const vertical = false;\n const types = 31;\n const thres = -15;\n const line = [] as any;\n const poly = undefined;\n measure_interface.fixedClipScene(vertical, types, thres, line, poly);\n }\n //获取日照时间\n async calculateSunriseAndSunset(params: any) {\n return new Promise((resolve: any) => {\n const geometry_algorithm_interface =\n StampAPI.LibAx.geometry_algorithm_interface(StampUtil.getLibax());\n geometry_algorithm_interface.OnGeometryAlgorithmFinished = function (\n data: any\n ) {\n geometry_algorithm_interface.OnGeometryAlgorithmFinished = undefined;\n resolve(data);\n };\n geometry_algorithm_interface.calculate_sunrise_and_sunset(...params);\n });\n }\n\n calcDate(time: number) {\n const hour = Math.floor(time);\n const minute = Math.floor((time - hour) * 60);\n const second = Math.floor(((time - hour) * 60 - minute) * 60);\n return {\n hour,\n minute,\n second,\n };\n }\n\n /**\n * 设置白天时长\n * @param sunrise 计算得到的朝霞时间\n * @param sunset 计算得到的晚霞时间\n */\n setDayDuration(sunrise: number, sunset: number) {\n const sun_rise = this.calcDate(sunrise);\n const sun_set = this.calcDate(sunset);\n\n StampUtil.getLibax().environment_interface.set_day_duration([\n sun_rise.hour,\n sun_set.hour,\n sun_rise.minute,\n sun_set.minute,\n ]);\n }\n\n setDayTime(\n year: number,\n month: number,\n day: number,\n lon: number,\n lat: number,\n sunriseHour: number,\n sunsetHour: number\n ) {\n return new Promise((resolve) => {\n const timeArr = [] as any;\n //计算场景经纬度当前时间的日照时长\n StampUtil.calculateSunriseAndSunset([year, month, day, lon, lat]).then(\n (res: any) => {\n //设置白天日照时长\n StampUtil.setDayDuration(res.Sunrise, res.Sunset);\n\n const sunRise = StampUtil.calcDate(res.Sunrise);\n const sunSet = StampUtil.calcDate(res.Sunset);\n const sunRiseHourTmp = Math.floor(\n parseFloat(sunriseHour.toString()) / 2\n ); //朝霞小时部分\n const sunRiseMinuteTmp =\n ((parseFloat(sunriseHour.toString()) / 2) % 1) * 60; //朝霞分钟部分\n const sunSetHourTmp = Math.floor(\n parseFloat(sunsetHour.toString()) / 2\n );\n const sunSetMinuteTmp =\n ((parseFloat(sunsetHour.toString()) / 2) % 1) * 60;\n let dateTime = new Date(\n year,\n month - 1,\n day,\n sunRise.hour - sunRiseHourTmp, //白天-1\n sunRise.minute - sunRiseMinuteTmp,\n sunRise.second\n );\n timeArr.push(StampUtil.formatDateTime(dateTime)); //朝霞开始时间\n dateTime = new Date(\n year,\n month - 1,\n day,\n sunRise.hour + sunRiseHourTmp,\n sunRise.minute + sunRiseMinuteTmp,\n sunRise.second\n );\n timeArr.push(StampUtil.formatDateTime(dateTime)); //白天开始时间\n dateTime = new Date(\n year,\n month - 1,\n day,\n sunSet.hour - sunSetHourTmp,\n sunSet.minute - sunSetMinuteTmp,\n sunSet.second\n );\n timeArr.push(StampUtil.formatDateTime(dateTime)); //晚霞开始时间\n dateTime = new Date(\n year,\n month - 1,\n day,\n sunSet.hour + sunSetHourTmp,\n sunSet.minute + sunSetMinuteTmp,\n sunSet.second\n );\n timeArr.push(StampUtil.formatDateTime(dateTime)); //夜晚开始时间\n resolve(timeArr);\n }\n );\n });\n }\n\n /**\n * 日照分析\n * @param param\n * @returns\n */\n measureInsolation(param: any) {\n return new Promise((resolve: any) => {\n const handler = StampUtil.getLibax().handlers.get(\n StampAPI.LibAx.StampPixelStreamingHandleType.StampType_Measure\n );\n const measure_interface = StampAPI.LibAx.measure_interface(\n StampUtil.getLibax()\n );\n handler.interface.oldOnMeasureFinished =\n handler.interface.OnMeasureFinished;\n handler.interface.OnMeasureFinished = async (data: any) => {\n const handler = StampUtil.getLibax().handlers.get(\n StampAPI.LibAx.StampPixelStreamingHandleType.StampType_Measure\n );\n handler.interface.OnMeasureFinished =\n handler.interface.oldOnMeasureFinished;\n let result = parseInt(data.result);\n if (data.measureType == 9) {\n result = data.result * 60;\n }\n data.result = Math.round(result);\n let point = null;\n if (data.points.length >= 2) {\n //手绘,取第二个点\n point = data.points[1];\n } else if (param.length >= 16 && param[15].length >= 6) {\n //参数化,取第二个点\n point = {\n x: param[15][3],\n y: param[15][4],\n z: param[15][5],\n };\n }\n if (point) {\n const textIcon = (await StampUtil.createIconParams({\n Text: `日照时长:${data.result}分钟`,\n points: [point],\n FontSize: 16,\n })) as any;\n StampUtil.insolationIconList.push(textIcon);\n }\n resolve(data);\n };\n measure_interface.insolation(param);\n });\n }\n /**\n * 坡度图\n * @param param\n * @returns\n */\n analysisSlopePolygon(param: any) {\n const analysis_interface = StampUtil.getLibax().analysis_interface; //获取分析功能接口\n return new Promise((resolve: any) => {\n // analysis_interface.OnAnalysisFinished = undefined;\n //清除上一次的分析结果\n StampUtil.clearAnalysisResult();\n analysis_interface.OnCreateSlopePolygon = function (data: any) {\n console.log(data);\n StampUtil.getLibax().shape_creator_interface.clear();\n const userdataObj = {} as any;\n userdataObj.type = 284;\n userdataObj.name = \"slope\";\n userdataObj.guid = data.guid;\n userdataObj.Transparent = 200;\n userdataObj.Grade = param;\n const element_interface = StampAPI.LibAx.element_interface(\n StampUtil.getLibax()\n );\n element_interface.modify_element(userdataObj);\n resolve(data.guid);\n };\n const points = [\n /*{ x: 117.17361607737925, y: 34.25653553875457, z: 0 },\n { x: 117.1735770088304, y: 34.255618880659824, z: 0 },\n { x: 117.17512731369878, y: 34.25558015878003, z: 0 },\n { x: 117.17493294215454, y: 34.25650302330519, z: 0 }*/\n ] as any; // 范围,不赋值会自动调用多边形构建工具\n analysis_interface.createSlopePolygon(points);\n });\n }\n /**\n * 汇水分析\n * @param colorTrans\n * @param trans\n * @returns\n */\n analysisSlopeDirectionPolygon(colorTrans: string) {\n const analysis_interface = StampAPI.LibAx.analysis_interface(\n StampUtil.getLibax()\n ); //获取分析功能接口\n StampUtil.clearAnalysisResult();\n return new Promise((resolve: any) => {\n analysis_interface.OnCreateSlopeDirectionPolygon = function (data: any) {\n const shape_creator_interface = StampAPI.LibAx.shape_creator_interface(\n StampUtil.getLibax()\n );\n shape_creator_interface.clear();\n const userdataObj = {} as any;\n userdataObj.type = 568;\n userdataObj.name = \"slope_direction\";\n userdataObj.guid = data.guid;\n userdataObj.linecolor = colorTrans;\n userdataObj.linewidth = 1.0;\n userdataObj.fillcolor = colorTrans;\n userdataObj.arrowcolor = colorTrans;\n const element_interface = StampAPI.LibAx.element_interface(\n StampUtil.getLibax()\n );\n element_interface.modify_element(userdataObj);\n resolve(data.guid);\n };\n const points = [\n /*{ x: 117.17361607737925, y: 34.25653553875457, z: 0 },\n { x: 117.1735770088304, y: 34.255618880659824, z: 0 },\n { x: 117.17512731369878, y: 34.25558015878003, z: 0 },\n { x: 117.17493294215454, y: 34.25650302330519, z: 0 }*/\n ] as any; // 范围,不赋值会自动调用多边形构建工具\n analysis_interface.createSlopeDirectionPolygon(points);\n });\n }\n /**\n * 热力图\n * @param dataHeat\n */\n analysisHeatMapPolygon(dataHeat: any) {\n const analysis_interface = StampUtil.getLibax().analysis_interface; //获取分析功能接口\n return new Promise((resolve: any) => {\n analysis_interface.OnCreateHeatMapPolygon = function (data: any) {\n const userdataObj = {} as any;\n userdataObj.type = dataHeat.is3D\n ? STAMP_RTTI.SE_RTTI_ELEMENT_HEAT_MAP_3D\n : STAMP_RTTI.SE_RTTI_ELEMENT_HEAT_MAP_POLYGON; //; //\n userdataObj.name = dataHeat.name;\n userdataObj.guid = data.guid;\n userdataObj.Radius = dataHeat.radius;\n userdataObj.Density = 200;\n userdataObj.Altitude = 0.03;\n userdataObj.Weight = 100;\n userdataObj.AltitudeType = 1;\n userdataObj.DataPath = dataHeat.DataPath;\n userdataObj.PtData = dataHeat.Points;\n userdataObj.size = 0;\n userdataObj.Grade = dataHeat.Grade;\n StampUtil.getLibax().element_interface.modify_element(userdataObj);\n resolve(data.guid);\n };\n analysis_interface.createHeatMapPolygon(dataHeat.is3D);\n });\n }\n\n /**\n * 显示淹没水体侧面\n * @param bShow\n */\n showSubmergeSide(bShow: boolean) {\n if (StampUtil.submergePolygon) {\n const element_interface = StampUtil.getLibax().element_interface;\n element_interface.OldOnAdded = element_interface.OnAdded;\n element_interface.OnAdded = () => {};\n StampUtil.submergePolygon.ShowSide = bShow;\n StampUtil.submergePolygon.action = \"modify\"; //modify参数类似\n const params = [StampUtil.submergePolygon];\n element_interface.modify_element(params);\n }\n }\n\n /**\n * 通视分析:OK\n */\n analysisLineSight(\n params = {\n startHeight: 1.8,\n endHeight: 0,\n localServiceType: 3,\n layers: \"\",\n points: [] as Array<any>,\n } as any,\n callbackLine: any = null\n ) {\n return new Promise((resolve) => {\n StampUtil.clearAnalysisResult();\n const startHeight = params.startHeight || 1.8; //起始点高度(人眼高度)\n const endHeight = params.endHeight || 0.0; //结束点高度\n const localServiceType = params.localServiceType || 3; //1:onlyService通过服务分析; 2:onlyLocal通过本地加载数据分析; 3:localService通过本地加载数据和服务共同分析\n const layers = params.layers || \"\";\n const points = params.points || [];\n const paramsObj: Array<any> = [\n startHeight,\n endHeight,\n localServiceType,\n layers,\n ];\n if (points.length > 0) {\n const pointsArr: Array<number> = [];\n for (let i = 0; i < points.length; i++) {\n pointsArr.push(points[i].x, points[i].y, points[i].z);\n }\n paramsObj.push(pointsArr);\n }\n const analysis_interface = StampAPI.LibAx.analysis_interface(\n StampUtil.getLibax()\n );\n analysis_interface.OnAnalysisFinished = function (data: any) {\n analysis_interface.OnAnalysisFinished = undefined;\n analysis_interface.OnFaild = undefined;\n resolve(data);\n };\n analysis_interface.OnFaild = function (data: any) {\n analysis_interface.OnAnalysisFinished = undefined;\n analysis_interface.OnFaild = undefined;\n };\n analysis_interface.OnPixelStreamingLineSight = function (data: any) {\n const pointArr = data.coords;\n const points = [];\n for (let i = 0; i < pointArr.length; i += 3) {\n points.push({\n x: pointArr[i],\n y: pointArr[i + 1],\n z: pointArr[i + 2],\n });\n }\n StampUtil.createLineSightIcon(points);\n typeof callbackLine == \"function\" &&\n callbackLine([points[0], points[points.length - 1]]);\n };\n analysis_interface.analysisLineSight(paramsObj);\n });\n }\n\n async createLineSightIcon(points: Array<any>) {\n if (StampUtil.lineSightIconList.length == 0) {\n const startIcon = (await StampUtil.createIconParams({\n Text: \"起点\",\n points: [points[0]],\n FontSize: 16,\n })) as any;\n StampUtil.lineSightIconList.push(startIcon);\n }\n const index = StampUtil.lineSightIconList.length;\n const endIcon = (await StampUtil.createIconParams({\n Text: \"终点\" + index,\n points: [points[2]],\n FontSize: 16,\n })) as any;\n StampUtil.lineSightIconList.push(endIcon);\n }\n\n /**\n * 通视分析:显示高度\n */\n showLineSightHeight() {\n const analysis_interface = StampUtil.getLibax().analysis_interface;\n analysis_interface.createLineSightHeightLimit();\n }\n\n /**\n * 可视域分析:OK\n */\n analysisViewShed(\n params = {\n fov: 53,\n height: 1.8,\n shadowColor: 0xffff0000,\n noShadowColor: 0xff00ff00,\n bShowAssitantCone: false,\n Longitude: Number.MAX_VALUE,\n Latitude: Number.MAX_VALUE,\n Altitude: Number.MAX_VALUE,\n Heading: Number.MAX_VALUE,\n Tilt: Number.MAX_VALUE,\n Roll: Number.MAX_VALUE,\n Radius: Number.MAX_VALUE,\n }\n ) {\n return new Promise(async (resolve) => {\n const fov = params.fov || 53; //视域角度(度)\n const height = params.height || 1.8; //起始点高度(人眼高度:米)\n const shadowColor = params.shadowColor || 0xffff0000; //不可见区域颜色:16进制,前两位是透明度,后面6位是颜色值\n const noShadowColor = params.noShadowColor || 0xff00ff00; //可见区域颜色:16进制,前两位是透明度,后面6位是颜色值\n const bShowAssitantCone = params.bShowAssitantCone || false;\n const paramsObj = [\n fov,\n height,\n shadowColor,\n noShadowColor,\n bShowAssitantCone,\n params.Longitude,\n params.Latitude,\n params.Altitude,\n params.Heading,\n params.Tilt,\n params.Roll,\n params.Radius,\n ];\n const analysis_interface = StampAPI.LibAx.analysis_interface(\n StampUtil.getLibax()\n );\n analysis_interface.OnAnalysisFinished = function (data: any) {\n analysis_interface.OnAnalysisFinished = undefined;\n analysis_interface.OnFaild = undefined;\n resolve(data);\n };\n analysis_interface.analysisViewShed(paramsObj);\n });\n }\n\n /**\n * 获取运动物体列表\n * @returns\n */\n getDynamicViewedList() {\n return new Promise((resolve) => {\n const handler = StampUtil.getLibax().handlers.get(\n StampAPI.LibAx.StampPixelStreamingHandleType\n .StampType_DynamicSystemInterface\n );\n\n handler.interface.apply_dynamic_list();\n handler.interface.OldOnDynamicListLoaded =\n handler.interface.OnDynamicListLoaded;\n handler.interface.OnDynamicListLoaded = function (dynamicList: any) {\n handler.interface.OnDynamicListLoaded =\n handler.interface.OldOnDynamicListLoaded;\n resolve(dynamicList);\n };\n });\n }\n\n /**\n * 动态视域分析:OK\n */\n analysisDynamicViewShed(\n params = {\n dynamicGuid: \"\",\n hFov: 120,\n vFov: 120,\n radius: 100,\n shadowColor: 0xffff0000,\n noShadowColor: 0xff00ff00,\n pathHeight: 0,\n modelHeight: 1.5,\n speed: 1.0,\n bShowAssitantCone: false,\n },\n callback: any\n ) {\n return new Promise((resolve) => {\n const dynamicGuid = params.dynamicGuid;\n const hFov = params.hFov || 120; //水平视域角度(度)\n const vFov = params.vFov || 120; //垂直视域角度(度)\n const radius = params.radius || 100; //视域半径(米)\n const shadowColor = params.shadowColor || 0xffff0000; //不可见区域颜色:16进制,前两位是透明度,后面6位是颜色值\n const noShadowColor = params.noShadowColor || 0xff00ff00; //可见区域颜色:16进制,前两位是透明度,后面6位是颜色值\n const pathHeight = params.pathHeight || 0; //路径高度(大于0表示在空中飞行)\n const modelHeight = params.modelHeight || 1.5; //模型高度(人眼高度:米)\n const speed = params.speed || 1.0; //移动速度(米/秒)\n const bShowAssitantCone = params.bShowAssitantCone || false;\n const play_immediate = false;\n const paramsObj = [\n dynamicGuid,\n hFov,\n vFov,\n radius,\n shadowColor,\n noShadowColor,\n pathHeight,\n modelHeight,\n speed,\n bShowAssitantCone,\n play_immediate, //是否立即播放\n false,\n ];\n StampUtil.getLibax().analysis_interface.analysisDynamicViewShed(\n paramsObj\n );\n const handlerTrackInterface = StampUtil.getLibax().handlers.get(\n StampAPI.LibAx.StampPixelStreamingHandleType.StampType_TrackInterface\n );\n StampUtil.getLibax().analysis_interface.OnCreateViewShedFinish =\n function (data1: any) {\n if (typeof callback == \"function\") {\n callback();\n }\n };\n const oldTrackFinished = handlerTrackInterface.interface.OnTrackFinished;\n handlerTrackInterface.interface.OnCreateViewShedFinish = function (\n data: any\n ) {\n handlerTrackInterface.interface.OnTrackFinished = oldTrackFinished;\n const dynamic_system_interface =\n StampAPI.LibAx.dynamic_system_interface(StampUtil.getLibax());\n dynamic_system_interface.unload_dynamic_object(data.bind); //移除运动对象\n resolve(data);\n };\n });\n }\n analysisDynamicViewShedPlay() {\n return new Promise((resolve) => {\n StampUtil.getLibax().analysis_interface.analysisDynamicViewShedPlay();\n const handlerTrackInterface = StampUtil.getLibax().handlers.get(\n StampAPI.LibAx.StampPixelStreamingHandleType.StampType_TrackInterface\n );\n\n const oldTrackFinished = handlerTrackInterface.interface.OnTrackFinished;\n handlerTrackInterface.interface.OnTrackFinished = function (data: any) {\n handlerTrackInterface.interface.OnTrackFinished = oldTrackFinished;\n const dynamic_system_interface =\n StampAPI.LibAx.dynamic_system_interface(StampUtil.getLibax());\n dynamic_system_interface.unload_dynamic_object(data.bind);\n resolve(data);\n };\n });\n }\n analysisDynamicViewShedPause() {\n StampUtil.getLibax().analysis_interface.analysisDynamicViewShedPause();\n }\n\n analysisDynamicViewShedResume() {\n StampUtil.getLibax().analysis_interface.analysisDynamicViewShedResume();\n }\n\n analysisDynamicViewShedStop() {\n StampUtil.getLibax().analysis_interface.analysisDynamicViewShedStop();\n }\n\n /**\n * 开敞度分析\n * @param params 传参\n * {\n * height: 1.8,\n * radius: 50,\n * frameColor,\n * fillColor,\n * precision,\n * renderMode,\n * visibleMode\n * }\n * @returns\n */\n analysisViewDome(params: any) {\n return new Promise((resolve: any) => {\n const analysis_interface = StampUtil.getLibax().analysis_interface;\n const height = params.height || 1.8; //人视点距地高度\n const radius = params.radius || 50; //观察半径\n const frameColor = params.frameColor || 0xcc00ff00; //线框色\n const fillColor = params.fillColor || 0xccff0000; //填充色\n const precision = params.precision || 2; //精度(0:低精度;1:中精度;2:高精度)\n const renderMode = params.renderMode == undefined ? 0 : params.renderMode; //渲染模式(0:线框;1:填充;2:线框 + 填充)\n const visibleMode =\n params.visibleMode == undefined ? 0 : params.visibleMode; //0:输出可视部分;1:输出不可视部分\n StampUtil.createPoint(() => {\n resolve(null);\n }).then((res: any) => {\n analysis_interface.analysisViewDome([\n 0, //0:外面传入点;1:内部绘制点\n res.Longitude,\n res.Latitude,\n res.Altitude,\n height,\n radius,\n frameColor,\n fillColor,\n precision,\n renderMode,\n visibleMode,\n ]);\n resolve(res);\n });\n });\n }\n /**\n * 挖填方分析:OK\n */\n analysisClipTerrain(\n params = {\n alt: 5, //开挖高程:基准高程 - 开挖深度\n layerids: [],\n addModel: false,\n sideTexturePath: \"\",\n bottomTexturePath: \"\",\n }\n ) {\n this.clearTerrainResult();\n return new Promise((resolve) => {\n StampUtil.createPolygon().then((data: any) => {\n StampUtil.getLibax().shape_creator_interface.clear();\n if (data.Points == undefined || data.Points.length < 3) {\n return;\n }\n const terrain_manager_interface =\n StampAPI.LibAx.terrain_manager_interface(StampUtil.getLibax());\n const pointsArr = [] as any;\n const points = [];\n for (let i = 0; i < data.Points.length; i++) {\n points.push({\n x: data.Points[i].X,\n y: data.Points[i].Y,\n z: params.alt,\n });\n }\n pointsArr.push(points);\n const polygon = pointsArr;\n terrain_manager_interface.clip_terrain_by_polygon(polygon);\n const addModel = params.addModel;\n if (addModel) {\n //添加辅助模型\n StampUtil.addClipModel({\n points: points,\n useDom: false,\n sideTexturePath: params.sideTexturePath,\n bottomTexturePath: params.bottomTexturePath,\n }).then((res: any) => {\n resolve({\n modelGuid: res.guid,\n pointsArr,\n });\n });\n } else {\n resolve({\n modelGuid: \"\",\n pointsArr,\n });\n }\n });\n });\n }\n\n /**\n * 沿路开挖\n */\n analysisExcavationRoad(\n params = {\n alt: 5,\n layerids: [],\n addModel: false,\n data: [] as any,\n sideTexturePath: \"\",\n bottomTexturePath: \"\",\n }\n ) {\n this.clearTerrainResult();\n return new Promise((resolve) => {\n const terrain_manager_interface =\n StampAPI.LibAx.terrain_manager_interface(StampUtil.getLibax());\n const pointsArr = [] as any;\n const points = [];\n for (let i = 0; i < params.data.length - 1; i++) {\n points.push({\n x: params.data[i].x,\n y: params.data[i].y,\n z: params.alt,\n });\n }\n pointsArr.push(points);\n const polygon = pointsArr;\n terrain_manager_interface.clip_terrain_by_polygon(polygon);\n const addModel = params.addModel;\n if (addModel) {\n //添加辅助模型\n StampUtil.addClipModel({\n points: points,\n useDom: false,\n sideTexturePath: params.sideTexturePath,\n bottomTexturePath: params.bottomTexturePath,\n }).then((res: any) => {\n resolve({\n modelGuid: res.guid,\n pointsArr,\n });\n });\n } else {\n resolve({\n modelGuid: \"\",\n pointsArr,\n });\n }\n });\n }\n\n /**\n * 增加辅助模型(开挖接口修改暂时不用了)\n * @param points 点串\n * @param useDom 是否采用DOM贴图(true:地形平整;false:开挖生成辅助模型)\n * @returns\n */\n addClipModel(\n params: any = {\n points: [],\n useDom: false,\n sideTexturePath: \"\",\n bottomTexturePath: \"\",\n }\n ) {\n return new Promise((resolve) => {\n const terrain_manager_interface =\n StampAPI.LibAx.terrain_manager_interface(StampUtil.getLibax());\n const pointsArr = [];\n for (let i = 0; i < params.points.length; i++) {\n pointsArr.push({\n x: params.points[i].x,\n y: params.points[i].y,\n z: params.points[i].z,\n });\n }\n const thickness = 0.4;\n const level_max = 11;\n const name = \"ClipModel\";\n const flat_bottom = true;\n const use_dom = params.useDom;\n const url =\n window.location.origin + window.location.pathname + \"images/analysis/\";\n if (!params.sideTexturePath) {\n params.sideTexturePath = url + \"profile.jpg\";\n }\n if (!params.bottomTexturePath) {\n params.bottomTexturePath = url + \"bottom.jpg\";\n }\n terrain_manager_interface.OnTerrainManagerResult = function (data: any) {\n resolve(data);\n terrain_manager_interface.OnTerrainManagerResult = undefined;\n };\n terrain_manager_interface.generate_clip_model(\n pointsArr,\n name,\n params.sideTexturePath,\n params.bottomTexturePath,\n thickness,\n level_max,\n flat_bottom,\n use_dom\n );\n });\n }\n /**\n *矢量面开挖\n */\n clipByPoints(\n params = {\n points: [] as any,\n layerids: \"\",\n alt: 0, //开挖绝对高程\n // addModel: false,\n sideTexturePath: \"\",\n bottomTexturePath: \"\",\n }\n ) {\n return new Promise((resolve) => {\n const terrain_manager_interface =\n StampUtil.getLibax().terrain_manager_interface;\n const pointsArr = [];\n for (let i = 0; i < params.points.length; i++) {\n const points = [];\n for (let j = 0; j < params.points[i].length; j++) {\n points.push({\n x: params.points[i][j].x,\n y: params.points[i][j].y,\n z: params.alt,\n });\n }\n pointsArr.push(points);\n }\n terrain_manager_interface.clip_terrain_by_polygon(pointsArr);\n resolve(pointsArr);\n });\n }\n //批量获取高程\n getBatchAltitude(points: any, layerids: any = []) {\n return new Promise(async (resolve) => {\n const measure_interface = StampUtil.getLibax().measure_interface;\n const layers = layerids ? layerids.join(\",\") : \"\";\n measure_interface.OnMeasureFinished = function (data: any) {\n resolve(data?.points);\n };\n measure_interface.getBatchAltitude([layers, points]);\n });\n }\n\n /**\n * 批量创建部件\n * @param\n * @returns\n */\n createBatch(params: any) {\n return new Promise((resolve: any) => {\n const element_interface = StampUtil.getLibax().element_interface;\n element_interface.create_batch(params);\n for (let i = 0; i < params.length; i++) {\n element_interface.userdataArr.push(params[i][0]);\n }\n element_interface.OnAdded = (treeData: any) => {\n element_interface.OnAdded = undefined;\n resolve(treeData);\n };\n });\n }\n /**\n * 清除地形开挖结果\n */\n clearTerrainResult() {\n const terrain_manager_interface = StampAPI.LibAx.terrain_manager_interface(\n StampUtil.getLibax()\n );\n terrain_manager_interface.clear();\n }\n\n /**\n * 地形平整\n */\n terrainSmooth(alt = 0) {\n return new Promise((resolve) => {\n StampUtil.createPolygon().then((data: any) => {\n StampUtil.getLibax().shape_creator_interface.clear();\n if (data.Points == undefined || data.Points.length < 3) {\n resolve(\"至少绘制3个点\");\n return;\n }\n\n const terrain_manager_interface =\n StampUtil.getLibax().terrain_manager_interface;\n const pointsArr = [];\n const points = [];\n for (let i = 0; i < data.Points.length; i++) {\n points.push({\n x: data.Points[i].X,\n y: data.Points[i].Y,\n z: alt,\n });\n }\n pointsArr.push(points);\n const polygon = pointsArr;\n const b_use_dom = true;\n const url =\n window.location.origin +\n window.location.pathname +\n \"images/analysis/\";\n const sideTexturePath = url + \"profile.jpg\";\n const bottomTexturePath = url + \"bottom.jpg\";\n terrain_manager_interface.clip_terrain_by_polygon(\n polygon,\n true, //需要填充内容\n sideTexturePath, //侧面纹理路径url\n bottomTexturePath, //底部纹理路径url\n Number(alt), //平整高程\n b_use_dom //\n );\n\n resolve(data);\n });\n });\n }\n /*\n *显示地形\n */\n terrainSmoothByPoints(points: Array<Array<any>>, alts: Array<number>) {\n const terrain_manager_interface = StampAPI.LibAx.terrain_manager_interface(\n StampUtil.getLibax()\n );\n const pointsArr = [];\n for (let i = 0; i < points.length; i++) {\n const item = points[i];\n const _points = [];\n for (let j = 0; j < item.length; j++) {\n _points.push({\n x: item[j].x,\n y: item[j].y,\n z: alts.length > i ? alts[i] : alts[alts.length - 1],\n });\n }\n pointsArr.push(_points);\n }\n const polygon = pointsArr;\n const b_use_dom = true;\n terrain_manager_interface.clip_terrain_by_polygon(\n polygon,\n true, //是否填充辅助模型(侧壁和底部)\n \"\",\n \"\",\n alts,\n b_use_dom //辅助模型是否使用影像纹理\n );\n }\n\n /**\n * 光影控制\n * @param year\n * @param month\n * @param day\n * @param hour\n * @param minute\n * @param second\n * @param timeDiffer 时差多少小时\n */\n analysisShinning(\n year: number,\n month: number,\n day: number,\n hour: number,\n minute: number,\n second: number,\n timeDiffer = 0,\n isRealSolarTime = false\n ) {\n let dateTime;\n if (isRealSolarTime) {\n dateTime = new Date(\n year,\n month - 1,\n day,\n hour + timeDiffer,\n minute,\n second\n );\n } else {\n dateTime = new Date(year, month - 1, day, hour, minute, second);\n }\n\n StampUtil.getLibax().environment_interface.set_sun_data_time([\n dateTime.getFullYear(),\n dateTime.getMonth() + 1,\n dateTime.getDate(),\n dateTime.getHours(),\n dateTime.getMinutes(),\n dateTime.getSeconds(),\n isRealSolarTime,\n ]);\n }\n\n /**\n *退红线分析\n */\n analysisRedLine(\n params = {\n distance: 5,\n color: 0xfffffb00,\n points: [] as any,\n toptype: 1,\n direction: 0,\n }\n ) {\n return new Promise((resolve) => {\n const distance = params.distance || 5;\n const color = params.color || 0xfffffb00;\n const points = params.points || [];\n const toptype = params.toptype || 1;\n const direction = params.direction || 0;\n let paramsObj = [];\n if (params.points && params.points.length) {\n const coordinates = [];\n for (let i = 0; i < points.length; i++) {\n coordinates.push(points[i].x, points[i].y, points[i].z);\n }\n paramsObj = [distance, color, toptype, direction, coordinates];\n } else {\n paramsObj = [distance, color, toptype, direction];\n }\n const analysis_interface = StampAPI.LibAx.analysis_interface(\n StampUtil.getLibax()\n );\n analysis_interface.OnAnalysisFinished = function (data: any) {\n analysis_interface.OnAnalysisFinished = undefined;\n analysis_interface.OnFaild = undefined;\n resolve(data);\n };\n StampUtil.getLibax().analysis_interface.analysisRedLine(paramsObj);\n });\n }\n /**\n *天际线\n */\n analysisSkyline() {\n const color = 0xffff0000;\n const widthType = 2;\n const params = [color, widthType];\n const analysis_interface = StampAPI.LibAx.analysis_interface(\n StampUtil.getLibax()\n );\n analysis_interface.analysisSkyline(params);\n }\n /**\n *立面分析\n */\n analysisVerticalFace(\n params = {\n verticalFaceHeight: 20,\n distance: 600,\n deep: 10,\n showDem: 0,\n points: [] as Array<any>,\n }\n ) {\n return new Promise((resolve) => {\n const verticalFaceHeight = params.verticalFaceHeight || 20;\n const distance = params.distance || 600;\n const deep = params.deep || 10;\n const showDem = params.showDem || 0;\n const points = params.points || [];\n const otherParams: any = {};\n if (points.length > 0) {\n otherParams.coordinates = [] as Array<any>;\n for (let i = 0; i < points.length; i++) {\n otherParams.coordinates.push(points[i].x, points[i].y, points[i].z);\n }\n }\n const paramsObj = [\n verticalFaceHeight,\n distance,\n deep,\n showDem,\n otherParams,\n ];\n const analysis_interface = StampAPI.LibAx.analysis_interface(\n StampUtil.getLibax()\n );\n analysis_interface.OnAnalysisFinished = function (data: any) {\n resolve(true);\n analysis_interface.OnAnalysisFinished = undefined;\n analysis_interface.OnFaild = undefined;\n };\n analysis_interface.analysisVerticalFace(paramsObj);\n });\n }\n /**\n *立面分析获取高度\n */\n getAnalysisVerticalFaceHeight() {\n return new Promise((resolve) => {\n const handler = StampUtil.getLibax().handlers.get(\n StampAPI.LibAx.StampPixelStreamingHandleType.StampType_Measure\n );\n handler.interface.measure(\n handler.CommandType.MeasureCommand_VerticalDist,\n [8, 8]\n );\n const oldOnMeasureFinished = handler.interface.OnMeasureFinished;\n handler.interface.OnMeasureFinished = function (data: any) {\n handler.interface.OnMeasureFinished = oldOnMeasureFinished;\n StampUtil.clearAnalysisResult();\n resolve(data);\n };\n });\n }\n\n /**\n * 立面分析出图\n */\n analysisVerticalFaceExportImage() {\n return new Promise((resolve) => {\n const analysis_interface = StampUtil.getLibax().analysis_interface;\n analysis_interface.OnVerticalFaceImageSuccess = function (data: any) {\n const arrayBuffer = new ArrayBuffer(data.length);\n const bufTmp = new Uint8ClampedArray(arrayBuffer);\n bufTmp.set(data);\n const dv = new DataView(arrayBuffer);\n let offset = 0;\n dv.getUint32(offset, true); //获取width\n offset += 4;\n dv.getUint32(offset, true); //获取height\n offset += 4;\n const imageBuf = bufTmp.slice(offset);\n const fileName = StampUtil.savePng(imageBuf);\n resolve(fileName);\n };\n StampUtil.getRootPath().then((res: any) => {\n const param = res.root_path + \"temp\\\\skyline.png\";\n analysis_interface.analysisVerticalFaceExportImage(param);\n });\n });\n }\n /**\n * 保存图片\n * @param data\n */\n savePng(data: any) {\n // dada 表示要转换的字符串数据,type 表示要转换的数据格式\n const blob = new Blob([data], {\n type: \"application/octet-stream\",\n });\n // 根据 blob生成 url链接\n const objectURL = URL.createObjectURL(blob);\n\n // 创建一个 a 标签Tag\n const aTag = document.createElement(\"a\");\n // 设置文件的下载地址\n aTag.href = objectURL;\n // 设置保存后的文件名称\n aTag.download = \"立面分析.png\";\n // 给 a 标签添加点击事件\n aTag.click();\n // 释放一个之前已经存在的、通过调用 URL.createObjectURL() 创建的 URL 对象。\n // 当你结束使用某个 URL 对象之后,应该通过调用这个方法来让浏览器知道不用在内存中继续保留对这个文件的引用了。\n window.URL.revokeObjectURL(objectURL);\n return aTag.download;\n }\n\n /**\n * 文件下载\n * @param data 二进制数据流\n * @param fileName 文件名\n * @returns\n */\n saveFile(\n data: ArrayBuffer | Uint8Array | Uint8ClampedArray,\n fileName: string\n ) {\n const blob = new Blob([data], {\n type: \"application/octet-stream\",\n });\n // 根据 blob生成 url链接\n const objectURL = URL.createObjectURL(blob);\n\n // 创建一个 a 标签Tag\n const aTag = document.createElement(\"a\");\n // 设置文件的下载地址\n aTag.href = objectURL;\n // 设置保存后的文件名称\n aTag.download = fileName;\n // 给 a 标签添加点击事件\n aTag.click();\n // 释放一个之前已经存在的、通过调用 URL.createObjectURL() 创建的 URL 对象。\n // 当你结束使用某个 URL 对象之后,应该通过调用这个方法来让浏览器知道不用在内存中继续保留对这个文件的引用了。\n window.URL.revokeObjectURL(objectURL);\n return aTag.download;\n }\n\n /**\n * 获取白天时长\n * @returns\n */\n getDayDuration() {\n return new Promise((resolve) => {\n const environment_interface = StampUtil.getLibax().environment_interface;\n environment_interface.oldOnEnvironmentGet =\n environment_interface.OnEnvironmentGet; //暂时保存旧回调方法\n environment_interface.OnEnvironmentGet = function (data: any) {\n environment_interface.OnEnvironmentGet =\n environment_interface.oldOnEnvironmentGet; //成功后还原旧回调方法\n resolve(data);\n };\n environment_interface.get_day_duration();\n });\n }\n\n /**\n * 时间数字转时分秒\n * @param timeNum\n * @returns\n */\n getHMSTime(timeNum: number) {\n const hour = Math.floor(timeNum);\n const minute = Math.floor((timeNum - hour) * 60);\n const second = Math.floor(\n ((timeNum - hour) * 60 - Math.floor((timeNum - hour) * 60)) * 60\n );\n return {\n hour,\n minute,\n second,\n };\n }\n\n /**\n * 获取朝霞和晚霞时间\n * @returns\n */\n getRosyDawnAndEveningGlowTime(year: number, month: number, day: number) {\n return new Promise((resolve) => {\n const environment_interface = StampUtil.getLibax().environment_interface;\n environment_interface.oldOnEnvironmentGet =\n environment_interface.OnEnvironmentGet; //暂时保存旧回调方法\n environment_interface.OnEnvironmentGet = function (data: any) {\n environment_interface.OnEnvironmentGet =\n environment_interface.oldOnEnvironmentGet; //成功后还原旧回调方法\n const timeArr = [];\n let hms = StampUtil.getHMSTime(data.first_light_time);\n let dateTime = new Date(\n year,\n month - 1,\n day,\n hms.hour,\n hms.minute,\n hms.second\n );\n timeArr.push(StampUtil.formatDateTime(dateTime)); //朝霞开始时间\n hms = StampUtil.getHMSTime(data.rosy_dawn_time);\n dateTime = new Date(\n year,\n month - 1,\n day,\n hms.hour,\n hms.minute,\n hms.second\n );\n timeArr.push(StampUtil.formatDateTime(dateTime)); //白天开始时间\n hms = StampUtil.getHMSTime(data.evening_glow_time);\n dateTime = new Date(\n year,\n month - 1,\n day,\n hms.hour,\n hms.minute,\n hms.second\n );\n timeArr.push(StampUtil.formatDateTime(dateTime)); //晚霞开始时间\n hms = StampUtil.getHMSTime(data.twilight_time);\n dateTime = new Date(\n year,\n month - 1,\n day,\n hms.hour,\n hms.minute,\n hms.second\n );\n timeArr.push(StampUtil.formatDateTime(dateTime)); //夜晚开始时间\n resolve(timeArr);\n };\n environment_interface.get_rosy_dawn_and_evening_glow_time();\n });\n }\n\n /**\n * 碰撞分析:是否开启碰撞状态:OK\n */\n analysisIntersectMode(bOpen: boolean) {\n const params = [bOpen]; // 是否开启碰撞,值域: true/false\n StampUtil.getLibax().global_contro_interface.intersect_mode(params);\n }\n\n /**\n * 限高分析:OK\n */\n analysisHeightLimit(\n params = {\n height: 60,\n speed: 5,\n heightPolygonColor: 0x88ffdc89,\n buildingColor: 0x88ff0000,\n points: [] as any,\n }\n ) {\n return new Promise((resolve) => {\n const height = params.height || 60; //限高高度\n const speed = params.speed || 5; //上升速度 单位:米/秒\n const heightPolygonColor = params.heightPolygonColor || 0x88ffdc89; //限高面颜色\n const buildingColor = params.buildingColor || 0x88ff0000; //超高建筑颜色\n const points = params.points || [];\n const coordinates = [];\n for (let i = 0; i < points.length; i++) {\n coordinates.push(points[i].x, points[i].y, points[i].z);\n }\n const paramsObj = [\n height,\n speed,\n buildingColor,\n heightPolygonColor,\n coordinates,\n ];\n const analysis_interface = StampAPI.LibAx.analysis_interface(\n StampUtil.getLibax()\n );\n analysis_interface.OnAnalysisFinished = function (data: any) {\n analysis_interface.OnAnalysisFinished = undefined;\n analysis_interface.OnFaild = undefined;\n resolve(data);\n };\n StampUtil.getLibax().analysis_interface.analysisHeightLimit(paramsObj);\n });\n }\n\n /**\n * 按照搜索结果限高分析:未测试\n * @param params\n * @returns\n */\n analysisHeightLimitByModel(\n params = {\n layers: \"\", //图层guid,guid,guid\n searchUrl: \"\", //对象搜索URL\n height: 60,\n speed: 5,\n heightPolygonColor: 0x88ffdc89,\n buildingColor: 0x88ff0000,\n points: [] as any,\n }\n ) {\n this.clearAnalysisResult();\n return new Promise((resolve, reject) => {\n const analysis_interface = StampUtil.getLibax().analysis_interface;\n analysis_interface.OnAnalysisFinished = (data: any) => {\n analysis_interface.OnAnalysisFinished = undefined;\n analysis_interface.OnFaild = undefined;\n resolve(data);\n };\n analysis_interface.OnFaild = () => {\n analysis_interface.OnAnalysisFinished = undefined;\n analysis_interface.OnFaild = undefined;\n reject();\n };\n\n const layers = params.layers || \"\"; // 格式:\"guid,guid,guid\"\n const url = params.searchUrl || \"\"; // 搜索url\n const height = params.height || 0;\n const speed = params.speed || 5;\n const heightPolygonColor = params.heightPolygonColor || 0x88ffdc89;\n const buildingColor = params.buildingColor || 0x88ff0000;\n const coordinates = params.points || [];\n const paramObj = [\n layers,\n url,\n height,\n speed,\n heightPolygonColor,\n buildingColor,\n coordinates,\n ];\n analysis_interface.analysisHeightLimitByModel(paramObj);\n });\n }\n\n /**\n * 视野分析:定点观察\n */\n fixedPointObserve(height: number, callbackPose: any = null) {\n return new Promise((resolve) => {\n const shape_creator_interface =\n StampUtil.getLibax().shape_creator_interface;\n const analysis_interface = StampUtil.getLibax().analysis_interface;\n shape_creator_interface.OnShapeCreated = (data: any) => {\n shape_creator_interface.clear();\n shape_creator_interface.OnShapeCreated = undefined;\n analysis_interface.OnAnalysisFinished = (res: any) => {\n analysis_interface.OnAnalysisFinished = undefined;\n resolve(res);\n };\n analysis_interface.analysisFixedPointObserve([\n data.Longitude,\n data.Latitude,\n data.Altitude,\n data.Heading,\n data.Tilt,\n data.Roll,\n ]);\n typeof callbackPose == \"function\" && callbackPose(data);\n };\n shape_creator_interface.create_pose([height]);\n });\n }\n\n /**\n * 视野分析:定点观察(参数化)\n * @param pose\n */\n fixedPointObserveParams(pose: any) {\n const analysis_interface = StampUtil.getLibax().analysis_interface;\n analysis_interface.OnAnalysisFinished = undefined;\n analysis_interface.analysisFixedPointObserve([\n pose.Longitude,\n pose.Latitude,\n pose.Altitude,\n pose.Heading,\n pose.Tilt,\n pose.Roll,\n ]);\n }\n\n /**\n * 关闭选择状态,回到浏览状态\n */\n closeSelectState() {\n const element_interface = StampUtil.getLibax().element_interface;\n const handler = StampUtil.getLibax().handlers.get(\n StampAPI.LibAx.StampPixelStreamingHandleType.StampType_Element\n );\n handler.interface.OnGetSelectSet = null;\n element_interface.ObjectEdit(handler.CommandType.ElementCommand_Browser);\n StampUtil.setMouseCursor();\n }\n\n setMouseCursor(isFlag = 0) {\n switch (isFlag) {\n case 1: //正常浏览,手爪松手状态\n StampUtil.getLibax().LibAx.Cursor.normal = \"url(cursor/1.cur),default\";\n StampUtil.getLibax().LibAx.Cursor.edit = \"crosshair\";\n StampUtil.getLibax().LibAx.Cursor.reset();\n break;\n case 2: //拖拽:鼠标按下,手爪握拳状态\n StampUtil.getLibax().LibAx.Cursor.normal = \"url(cursor/2.cur),default\";\n StampUtil.getLibax().LibAx.Cursor.update();\n break;\n case 3: //拾取:箭头\n StampUtil.getLibax().LibAx.Cursor.normal = \"default\";\n StampUtil.getLibax().LibAx.Cursor.update();\n break;\n case 4: //十字\n StampUtil.getLibax().LibAx.Cursor.set_edit();\n StampUtil.getLibax().LibAx.Cursor.update();\n break;\n case 5: //箭头\n StampUtil.getLibax().LibAx.Cursor.set_select();\n StampUtil.getLibax().LibAx.Cursor.update();\n break;\n default: //正常状态\n StampUtil.getLibax().LibAx.Cursor.normal = \"url(cursor/1.cur),default\";\n StampUtil.getLibax().LibAx.Cursor.edit = \"crosshair\";\n StampUtil.getLibax().LibAx.Cursor.reset();\n break;\n }\n }\n\n /**\n * 清除分析结果\n */\n clearAnalysisResult() {\n const analysis_interface = StampAPI.LibAx.analysis_interface(\n StampUtil.getLibax()\n );\n analysis_interface.clear();\n\n StampUtil.closeSelectState();\n\n const shape_creator_interface =\n StampUtil.getLibax().shape_creator_interface;\n shape_creator_interface.clear();\n\n //清除淹没分析结果\n if (StampUtil.submergePolygon != null) {\n StampUtil.deleteAnalysisRes(StampUtil.submergePolygon.guid);\n StampUtil.submergePolygon = null;\n }\n\n //清除等高线\n StampUtil.clearContourResult();\n\n //清除最优路径信息\n if (StampUtil.bestPathIconList && StampUtil.bestPathIconList.length > 0) {\n for (let i = 0; i < StampUtil.bestPathIconList.length; i++) {\n StampUtil.deleteAnalysisRes(StampUtil.bestPathIconList[i].guid);\n }\n StampUtil.bestPathIconList = [];\n }\n //清除通视分析信息\n if (StampUtil.lineSightIconList && StampUtil.lineSightIconList.length > 0) {\n for (let i = 0; i < StampUtil.lineSightIconList.length; i++) {\n StampUtil.deleteAnalysisRes(StampUtil.lineSightIconList[i].guid);\n }\n StampUtil.lineSightIconList = [];\n }\n if (\n StampUtil.insolationIconList &&\n StampUtil.insolationIconList.length > 0\n ) {\n for (let i = 0; i < StampUtil.insolationIconList.length; i++) {\n StampUtil.deleteAnalysisRes(StampUtil.insolationIconList[i].guid);\n }\n StampUtil.insolationIconList = [];\n }\n }\n //#endregion\n\n //#region 海洋\n\n //#region oceanology海洋插件\n /**\n * 创建海洋效果\n * @param point 基准位置\n * @returns\n */\n createOceanology(point: any) {\n return new Promise((resolve) => {\n const param = [\n \"oceanology_infinite_ocean_test\",\n point.x,\n point.y,\n point.z,\n ];\n const oceanology_interface = StampAPI.LibAx.oceanology_interface(\n StampUtil.getLibax()\n );\n oceanology_interface.OnOceanology = function (data: any) {\n oceanology_interface.OnOceanology = function (data: any) {};\n resolve(data);\n };\n oceanology_interface.create_oceanology_infinite_ocean(param);\n });\n }\n\n /**\n * 海洋参数统一设置\n * @param params\n */\n setOceanologySetting(params: any) {\n params.underwater && StampUtil.setOceanologyUnderwater(params.underwater);\n params.bubbles && StampUtil.setOceanologyBubbles(params.bubbles);\n params.quadTree && StampUtil.setOceanologyQuadTree(params.quadTree);\n params.shorelineWetness &&\n StampUtil.setOceanologyShorelineWetness(params.shorelineWetness);\n params.gerstnerWaves &&\n StampUtil.setOceanologyGerstnerWaves(params.gerstnerWaves);\n params.surfaceScattering &&\n StampUtil.setOceanologySurfaceScattering(params.surfaceScattering);\n params.caustics && StampUtil.setOceanologyCaustics(params.caustics);\n params.foam && StampUtil.setOceanologyFoam(params.foam);\n }\n\n /**\n * 海洋显示开关\n * @param guid 海洋唯一编码\n * @param visible 是否可见\n * @returns\n */\n setOceanologyVisible(visible: boolean) {\n return new Promise((resolve) => {\n const param = [\"oceanology_infinite_ocean_test\", visible];\n const oceanology_interface = StampAPI.LibAx.oceanology_interface(\n StampUtil.getLibax()\n );\n oceanology_interface.OnOceanology = function (data: any) {\n oceanology_interface.OnOceanology = function (data: any) {};\n resolve(data);\n };\n oceanology_interface.set_scene_actor_visible(param);\n });\n }\n\n /**\n * 移除海洋效果\n * @returns\n */\n removeOceanology() {\n return new Promise((resolve) => {\n const param = [\"oceanology_infinite_ocean_test\"];\n const oceanology_interface = StampAPI.LibAx.oceanology_interface(\n StampUtil.getLibax()\n );\n oceanology_interface.OnOceanology = function (data: any) {\n oceanology_interface.OnOceanology = function (data: any) {};\n resolve(data);\n };\n oceanology_interface.remove_scene_actor(param);\n });\n }\n\n /**\n * 海洋地下水体参数设置\n */\n setOceanologyUnderwater(params: any) {\n return new Promise((resolve) => {\n const param = [\n \"oceanology_infinite_ocean_test\", // string m_name;\n params.underwaterMode != undefined ? params.underwaterMode : 0, // uint8 m_underwater_mode; // Underwater0; Volumetric Fog1;\n params.atmosphereLighting != undefined\n ? params.atmosphereLighting\n : 25.0, // double m_atmosphere_lighting;\n params.bandOffset != undefined ? params.bandOffset : 0.5, // double m_band_offset;\n params.bandOpacity != undefined ? params.bandOpacity : 1.0, // double m_band_opacity;\n params.bandWidth != undefined ? params.bandWidth : 1.0, // double m_band_width;\n params.darknessFadeDepth != undefined ? params.darknessFadeDepth : 1.0, // double m_darkness_fade_depth;\n params.deepColorDistance != undefined ? params.deepColorDistance : 0.85, // double m_deep_color_distance;\n params.depthColorAbsorption != undefined\n ? params.depthColorAbsorption\n : 1.5, // double m_depth_color_absorption;\n params.distortionIntensity != undefined\n ? params.distortionIntensity\n : 0.05, // double m_distortion_intensity;\n params.distortionScale != undefined ? params.distortionScale : 0.5, // double m_distortion_scale;\n params.distortionSpeed != undefined ? params.distortionSpeed : 0.25, // double m_distortion_speed; // DistortionSpeed\n params.fogDensity != undefined ? params.fogDensity : 1.0, // double m_fog_density; // FogDensity\n params.sunPower != undefined ? params.sunPower : 6.0, // double m_sun_power; // SunPower\n params.underwaterLightDepth != undefined\n ? params.underwaterLightDepth\n : 50000.0, // double m_underwater_light_depth; //UnderwaterLightDepth\n params.underwaterNoLightDepth != undefined\n ? params.underwaterNoLightDepth\n : 100000.0, // double m_underwater_no_light_depth; // UnderwaterNoLightDepth\n params.vignetteDark != undefined ? params.vignetteDark : 1.5, // double m_vignette_dark; // VignetteDark\n params.vignetteDistortion != undefined\n ? params.vignetteDistortion\n : 0.05, // double m_vignette_distortion; // VignetteDistortion\n params.vignetteEdge != undefined ? params.vignetteEdge : 1.0, // double m_vignette_edge; // VignetteEdge\n params.waterLineColorIntensity != undefined\n ? params.waterLineColorIntensity\n : 4.0, // double m_water_line_color_intensity; // WaterLineColorIntensity\n params.waterLineDistanceFalloff != undefined\n ? params.waterLineDistanceFalloff\n : -0.015, // double m_water_line_distance_falloff; // WaterLineDistanceFalloff\n params.waterLineRefraction != undefined\n ? params.waterLineRefraction\n : 0.005, // double m_water_line_refraction; // WaterLineRefraction\n params.waterLineRefractionWidth != undefined\n ? params.waterLineRefractionWidth\n : 0.5, // double m_water_line_refraction_width; // WaterLineRefractionWidth\n params.wetAlpha != undefined ? params.wetAlpha : 0.2, // double m_wet_alpha; // Wet Alpha\n params.wetHardness != undefined ? params.wetHardness : 0.25, // double m_wet_hardness; // Wet Hardness\n params.wetLocation != undefined ? params.wetLocation : 0.0, // double m_wet_location; // Wet Location\n params.wetRadius != undefined ? params.wetRadius : 1.0, // double m_wet_radius; // Wet Radius\n params.exponentialFogColorHigh != undefined\n ? [\n params.exponentialFogColorHigh.r,\n params.exponentialFogColorHigh.g,\n params.exponentialFogColorHigh.b,\n params.exponentialFogColorHigh.a,\n ]\n : [0.002797, 0.015643, 0.035, 1.0], // FLinearColor m_exponential_fog_color_high; // ExponentialFogColorHigh\n params.exponentialFogColorLow != undefined\n ? [\n params.exponentialFogColorLow.r,\n params.exponentialFogColorLow.g,\n params.exponentialFogColorLow.b,\n params.exponentialFogColorLow.a,\n ]\n : [0.0, 0.035, 0.02553, 1.0], // FLinearColor m_exponential_fog_color_low; // ExponentialFogColorLow\n params.sceneColorDeep != undefined\n ? [\n params.sceneColorDeep.r,\n params.sceneColorDeep.g,\n params.sceneColorDeep.b,\n params.sceneColorDeep.a,\n ]\n : [0.138695, 1.0, 0.715861, 1.0], // FLinearColor m_scene_color_deep; // SceneColorDeep\n params.sceneColorShallow != undefined\n ? [\n params.sceneColorShallow.r,\n params.sceneColorShallow.g,\n params.sceneColorShallow.b,\n params.sceneColorShallow.a,\n ]\n : [1.0, 1.0, 1.0, 1.0], // FLinearColor m_scene_color_shallow; // SceneColorShallow\n ];\n const oceanology_interface = StampAPI.LibAx.oceanology_interface(\n StampUtil.getLibax()\n );\n oceanology_interface.OnOceanology = function (data: any) {\n oceanology_interface.OnOceanology = function (data: any) {};\n resolve(data);\n };\n oceanology_interface.set_oceanology_underwater(param);\n });\n }\n\n /**\n * 裁剪海洋海浪效果\n * @param param 裁剪参数\n * {\n * type: 裁剪类型:0-保留内部,1-保留外部\n * pixelSize:分辨率\n * points: 裁剪多边形点串\n * }\n */\n setOceanologyCoastlinePolygonCutMask(param: any) {\n const rectPoints = [];\n if (param.points && param.points.length > 0) {\n for (let i = 0; i < param.points.length; i++) {\n rectPoints.push(param.points[i].x, param.points[i].y);\n }\n }\n const params = [\n \"surface_coastline_test\", //海洋名称唯一值\n param.type == undefined ? 0 : param.type, // 1 保留外部 0保留内部\n param.pixelSize || 1024, //分辨率\n rectPoints, //[117.17316249304416, 34.257038266973836, 117.17316251620466, 34.255235289663695, 117.17533387882213, 34.255235289663695, 117.17533390198260, 34.257038266973829] // 设置为空数组代表不裁切\n ];\n const oceanology_interface = StampAPI.LibAx.oceanology_interface(\n StampUtil.getLibax()\n );\n oceanology_interface.set_oceanology_coastline_polygon_cut_mask(params);\n }\n\n /**\n * 设置气泡\n */\n setOceanologyBubbles(params: any) {\n return new Promise((resolve) => {\n const param = [\n \"oceanology_infinite_ocean_test\",\n params.enableBubbles != undefined ? params.enableBubbles : 0, // uint8 m_enable_bubbles; // Enable Bubbles 0 1 2(Disable;Enable;Enable On Interaction)\n params.bubbleSpawnCount != undefined ? params.bubbleSpawnCount : 1000, // int32 m_bubble_spawn_count; // Bubble Spawn Count\n params.bubbleSpeed != undefined ? params.bubbleSpeed : 1.0, // double m_bubble_speed; // Bubble Speed\n ];\n const oceanology_interface = StampAPI.LibAx.oceanology_interface(\n StampUtil.getLibax()\n );\n oceanology_interface.OnOceanology = function (data: any) {\n oceanology_interface.OnOceanology = function (data: any) {};\n resolve(data);\n };\n oceanology_interface.set_oceanology_bubbles(param);\n });\n }\n\n /**\n * 设置四叉树\n */\n setOceanologyQuadTree(params: any) {\n return new Promise((resolve) => {\n const param = [\n \"oceanology_infinite_ocean_test\",\n params.tileSize != undefined ? params.tileSize : 2400.0, // float m_tile_size;\n params.extentInTiles != undefined\n ? [params.extentInTiles.x, params.extentInTiles.y]\n : [64, 64], // UE:: Math:: TIntVector2 < int32 > m_extent_in_tiles;\n params.tessellationFactor != undefined ? params.tessellationFactor : 6, // int32 m_tessellation_factor;\n params.lodScale != undefined ? params.lodScale : 1.0, // float m_lod_scale;\n params.forceUpdateCount != undefined ? params.forceUpdateCount : 10, // int32 m_force_update_count;\n params.checkForUpdateInterval != undefined\n ? params.checkForUpdateInterval\n : 0.0, // float m_check_for_update_interval;\n params.maxWaveHeightMultiplier != undefined\n ? params.maxWaveHeightMultiplier\n : 5000.0, // double m_max_wave_height_multiplier;\n params.useFarMesh != undefined ? params.useFarMesh : 1, // uint8 m_use_far_mesh;\n params.farDistanceMeshExtent != undefined\n ? params.farDistanceMeshExtent\n : 200000.0, // float m_far_distance_mesh_extent;\n params.farDistanceCenterMeshExtent != undefined\n ? params.farDistanceCenterMeshExtent\n : 1.0, // float m_far_distance_center_mesh_extent;\n params.farDistanceMeshHeightOffset != undefined\n ? params.farDistanceMeshHeightOffset\n : -10, // float m_far_distance_mesh_height_offset;\n ];\n const oceanology_interface = StampAPI.LibAx.oceanology_interface(\n StampUtil.getLibax()\n );\n oceanology_interface.OnOceanology = function (data: any) {\n oceanology_interface.OnOceanology = function (data: any) {};\n resolve(data);\n };\n oceanology_interface.set_oceanology_quad_tree(param);\n });\n }\n\n /**\n * 设置海岸线湿度\n */\n setOceanologyShorelineWetness(params: any) {\n return new Promise((resolve) => {\n const param = [\n \"oceanology_infinite_ocean_test\",\n params.enableWetness != undefined ? params.enableWetness : 1, // uint8 m_enable_wetness;\n params.bandOpacity != undefined ? params.bandOpacity : 10.0, // double m_band_opacity;\n params.moistureMetallic != undefined ? params.moistureMetallic : 0.75, // double m_moisture_metallic;\n params.moistureRoughness != undefined ? params.moistureRoughness : 0.1, // double m_moisture_roughness;\n params.wetHardness != undefined ? params.wetHardness : -10.0, // double m_wet_hardness;\n params.wetLocation != undefined ? params.wetLocation : 0.0, // double m_wet_location;\n params.wetRadius != undefined ? params.wetRadius : 400.0, // double m_wet_radius;\n ];\n const oceanology_interface = StampAPI.LibAx.oceanology_interface(\n StampUtil.getLibax()\n );\n oceanology_interface.OnOceanology = function (data: any) {\n oceanology_interface.OnOceanology = function (data: any) {};\n resolve(data);\n };\n oceanology_interface.set_oceanology_shoreline_wetness(param);\n });\n }\n\n /**\n * 设置格斯特纳波浪\n */\n setOceanologyGerstnerWaves(params: any) {\n return new Promise((resolve) => {\n const param = [\n \"oceanology_infinite_ocean_test\",\n params.summarize != undefined ? params.summarize : 1, // FString m_summarize; //Waves_4 Waves_8(默认) Waves_12 Waves_16 Waves_20\n params.size != undefined ? params.size : 8.0, // double m_size; // m\n params.overallLength != undefined ? params.overallLength : 1.0, // double m_overall_length;\n params.globalAmplitude != undefined ? params.globalAmplitude : 1.0, // double m_global_amplitude;\n params.globalSpeed != undefined ? params.globalSpeed : 1.0, // double m_global_speed;\n params.choppiness != undefined ? params.choppiness : 3.0, // double m_choppiness;\n params.globalWaveDirection != undefined\n ? params.globalWaveDirection\n : 1.0, // double m_global_wave_direction;\n\n // base offset\n params.amplitude != undefined ? params.amplitude : 80.0, //double m_amplitude;\n params.steepness != undefined ? params.steepness : 1.0, //double m_steepness;\n params.speed != undefined ? params.speed : 1500.0, //double m_Speed;\n params.waveLength != undefined ? params.waveLength : 16384.0, //double m_waveLength;\n params.direction != undefined ? params.direction : 0.4, //double m_direction;\n params.directionOffset != undefined ? params.directionOffset : 0.5, //double m_direction_offset;\n params.directionOffset2 != undefined ? params.directionOffset2 : 0.75, //double m_direction_offset2;\n\n // Σ1\n params.amplitude1 != undefined ? params.amplitude1 : 50.0, //double m_amplitude1;\n params.steepness1 != undefined ? params.steepness1 : 1.0, //double m_steepness1;\n params.speed1 != undefined ? params.speed1 : 1000.0, //double m_Speed1;\n params.waveLength1 != undefined ? params.waveLength1 : 8192.0, //double m_waveLength1;\n params.direction1 != undefined ? params.direction1 : 0.425, //double m_direction1;\n\n // Σ2\n params.amplitude2 != undefined ? params.amplitude2 : 20.0, //double m_amplitude2;\n params.steepness2 != undefined ? params.steepness2 : 1.0, //double m_steepness2;\n params.speed2 != undefined ? params.speed2 : 1000.0, //double m_Speed2;\n params.waveLength2 != undefined ? params.waveLength2 : 4096.0, //double m_waveLength2;\n params.direction2 != undefined ? params.direction2 : 0.45, //double m_direction2;\n\n // Σ3\n params.amplitude3 != undefined ? params.amplitude3 : 10.0, //double m_amplitude3;\n params.steepness3 != undefined ? params.steepness3 : 1.0, //double m_steepness3;\n params.speed3 != undefined ? params.speed3 : 500.0, //double m_Speed3;\n params.waveLength3 != undefined ? params.waveLength3 : 2048.0, //double m_waveLength3;\n params.direction3 != undefined ? params.direction3 : 0.475, //double m_direction3;\n\n // Σ4\n params.amplitude4 != undefined ? params.amplitude4 : 5.0, //double m_amplitude4;\n params.steepness4 != undefined ? params.steepness4 : 1.0, //double m_steepness4;\n params.speed4 != undefined ? params.speed4 : 250, //double m_Speed4;\n params.waveLength4 != undefined ? params.waveLength4 : 1024.0, //double m_waveLength4;\n params.direction4 != undefined ? params.direction4 : 0.5, //double m_direction4;\n ];\n const oceanology_interface = StampAPI.LibAx.oceanology_interface(\n StampUtil.getLibax()\n );\n oceanology_interface.OnOceanology = function (data: any) {\n oceanology_interface.OnOceanology = function (data: any) {};\n resolve(data);\n };\n oceanology_interface.set_oceanology_gerstner_waves(param);\n });\n }\n\n /**\n * 设置表面闪射\n */\n setOceanologySurfaceScattering(params: any) {\n return new Promise((resolve) => {\n const param = [\n \"oceanology_infinite_ocean_test\",\n params.cameraVectorPower != undefined ? params.cameraVectorPower : 2.0, //double m_camera_vector_power; // CameraVectorPower\n params.fadeLengthScattering != undefined\n ? params.fadeLengthScattering\n : 600000.0, //double m_fade_length_scattering; // FadeLengthScattering\n params.fadeOffsetScattering != undefined\n ? params.fadeOffsetScattering\n : 1000.0, //double m_fade_offset_scattering; // FadeOffsetScattering\n params.phaseGHigh != undefined ? params.phaseGHigh : 0.4, //double m_phase_g_high; // PhaseGHigh;\n params.phaseGLow != undefined ? params.phaseGLow : 0.75, //double m_phase_g_low; // PhaseGLow\n params.scatterBoost != undefined ? params.scatterBoost : 10.0, //double m_scatter_boost; // ScatterBoost\n params.surfaceScatteringExponential != undefined\n ? params.surfaceScatteringExponential\n : 1.0, //double m_surface_scattering_exponential; // SurfaceScatteringExponential\n params.surfaceScatteringIntensity != undefined\n ? params.surfaceScatteringIntensity\n : 2.0, //double m_surface_scattering_intensity; //SurfaceScatteringIntensity\n params.surfaceScatteringPower != undefined\n ? params.surfaceScatteringPower\n : 5.0, //double m_surface_scattering_power; // SurfaceScatteringPower\n params.surfaceScatteringRefractMax != undefined\n ? params.surfaceScatteringRefractMax\n : 0.5, //double m_surface_scattering_refract_max; // SurfaceScatteringRefractMax;\n params.surfaceScatteringRefractMin != undefined\n ? params.surfaceScatteringRefractMin\n : 1.0, //double m_surface_scattering_refract_min; //SurfaceScatteringRefractMin\n params.topDownExp != undefined ? params.topDownExp : 2.0, //double m_top_down_exp; //TopDownExp\n params.waterFresnelExponenth != undefined\n ? params.waterFresnelExponenth\n : 20.0, //double m_water_fresnel_exponenth; // Water Fresnel Exponenth\n params.waterFresnelRoughness != undefined\n ? params.waterFresnelRoughness\n : 0.2, //double m_water_fresnel_roughness; // Water Fresnel Roughness\n params.waterFresnelSpecular != undefined\n ? params.waterFresnelSpecular\n : 0.225, //double m_water_fresnel_specular; // Water Fresnel Specular\n params.waterRoughness != undefined ? params.waterRoughness : 0.05, //double m_water_roughness;// Water Roughness\n params.waterSpecular != undefined ? params.waterSpecular : 0.1125, //double m_water_specular;// Water Specular\n params.absorption != undefined\n ? [\n params.absorption.r,\n params.absorption.g,\n params.absorption.b,\n params.absorption.a,\n ]\n : [19.999998, 30.0, 25.0, 25.0], //FLinearColor m_absorption; // Absorption\n params.absorptionFar != undefined\n ? [\n params.absorptionFar.r,\n params.absorptionFar.g,\n params.absorptionFar.b,\n params.absorptionFar.a,\n ]\n : [10.000002, 134.999985, 200.0, 35.0], //FLinearColor m_absorption_far;// Absorption Far\n params.scattering != undefined\n ? [\n params.scattering.r,\n params.scattering.g,\n params.scattering.b,\n params.scattering.a,\n ]\n : [0.003677, 0.124772, 0.223228, 1.0], //FLinearColor m_scattering; //Scattering\n params.scatteringFar != undefined\n ? [\n params.scatteringFar.r,\n params.scatteringFar.g,\n params.scatteringFar.b,\n params.scatteringFar.a,\n ]\n : [0.0, 0.25, 0.3, 0.05], //FLinearColor m_scattering_far; // Scattering Far\n ];\n const oceanology_interface = StampAPI.LibAx.oceanology_interface(\n StampUtil.getLibax()\n );\n oceanology_interface.OnOceanology = function (data: any) {\n oceanology_interface.OnOceanology = function (data: any) {};\n resolve(data);\n };\n oceanology_interface.set_oceanology_surface_scattering(param);\n });\n }\n\n /**\n * 设置焦散\n */\n setOceanologyCaustics(params: any) {\n return new Promise((resolve) => {\n const param = [\n \"oceanology_infinite_ocean_test\",\n params.causticsBrightness != undefined\n ? params.causticsBrightness\n : 10.0, //double m_caustics_brightness; // CausticsBrightness\n params.causticsFadeInDistance != undefined\n ? params.causticsFadeInDistance\n : 1000.0, //double m_caustics_fade_in_distance; // CausticsFadeInDistance\n params.causticsScale != undefined ? params.causticsScale : 16.0, //double m_caustics_scale; // CausticsScale\n params.fadeDistance != undefined ? params.fadeDistance : 1.0, //double m_fade_distance; // FadeDistance\n params.lightParallax != undefined ? params.lightParallax : 1.0, //double m_light_parallax; //LightParallax\n params.multiplyRefraction != undefined\n ? params.multiplyRefraction\n : 1.333, //double m_multiply_refraction;// MultiplyRefraction\n ];\n const oceanology_interface = StampAPI.LibAx.oceanology_interface(\n StampUtil.getLibax()\n );\n oceanology_interface.OnOceanology = function (data: any) {\n oceanology_interface.OnOceanology = function (data: any) {};\n resolve(data);\n };\n oceanology_interface.set_oceanology_caustics(param);\n });\n }\n\n /**\n * 设置泡沫\n */\n setOceanologyFoam(params: any) {\n return new Promise((resolve) => {\n const param = [\n \"oceanology_infinite_ocean_test\",\n params.foamDistortionIntensity != undefined\n ? params.foamDistortionIntensity\n : 30.0, //double m_foam_distortion_intensity; //FoamDistortionIntensity\n params.foamDistortionScale != undefined\n ? params.foamDistortionScale\n : 1.0, //double m_foam_distortion_scale; // FoamDistortionScale\n params.foamDistortionSpeed != undefined\n ? params.foamDistortionSpeed\n : 0.5, //double m_foam_distortion_speed; //FoamDistortionSpeed\n params.foamNormals != undefined ? params.foamNormals : 1.0, //double m_foam_normals; //FoamNormals\n params.UVBubbles != undefined ? params.UVBubbles : 2.0, //double m_uv_bubbles; // UVBubbles\n params.UVFoam != undefined ? params.UVFoam : 32.0, //double m_uv_foam; //UVFoam\n params.bubblesNormals != undefined ? params.bubblesNormals : 1.0, //double m_bubbles_normals; // BubblesNormals\n ];\n const oceanology_interface = StampAPI.LibAx.oceanology_interface(\n StampUtil.getLibax()\n );\n oceanology_interface.OnOceanology = function (data: any) {\n oceanology_interface.OnOceanology = function (data: any) {};\n resolve(data);\n };\n oceanology_interface.set_oceanology_foam(param);\n });\n }\n //#endregion\n\n //#region FluildFlux插件的海洋\n /**\n * 创建FluildFlux海洋\n */\n createOceanologyFluidFlux(point: any) {\n return new Promise((resolve) => {\n const param = [\n \"oceanology_fluid_flux_test\",\n \"surface_coastline_test\",\n \"ocean_wave_test\",\n point.x,\n point.y,\n Number(point.m),\n Number(point.z),\n ];\n const oceanology_interface = StampAPI.LibAx.oceanology_interface(\n StampUtil.getLibax()\n );\n oceanology_interface.OnOceanology = function (data: any) {\n oceanology_interface.OnOceanology = function (data: any) {};\n resolve(data);\n };\n oceanology_interface.create_oceanology_fluid_flux(param);\n });\n }\n\n /**\n * FluildFlux海洋参数统一设置\n * @param params\n */\n setOceanologyFluidFluxSetting(params: any) {\n params.coastlineDomain &&\n StampUtil.setOceanologyCoastlineDomain(params.coastlineDomain);\n params.coastline && StampUtil.setOceanologyCoastline(params.coastline);\n params.coastlineColorPreset &&\n StampUtil.setOceanologyCoastlineColorPreset(params.coastlineColorPreset);\n params.coastlineColorPresetData &&\n StampUtil.setOceanologyCoastlineColorPresetData(\n params.coastlineColorPresetData\n );\n params.oceanWaveShoreWater &&\n StampUtil.setOceanologyOceanWaveShoreWater(params.oceanWaveShoreWater);\n params.oceanWaveDistantWater &&\n StampUtil.setOceanologyOceanWaveDistantWater(\n params.oceanWaveDistantWater\n );\n }\n\n /**\n * 移除FluildFlux海洋\n */\n removeFluidFluxSceneActor() {\n const oceanology_interface = StampAPI.LibAx.oceanology_interface(\n StampUtil.getLibax()\n );\n oceanology_interface.remove_scene_actor([\"oceanology_fluid_flux_test\"]);\n oceanology_interface.remove_scene_actor([\"surface_coastline_test\"]);\n oceanology_interface.remove_scene_actor([\"ocean_wave_test\"]);\n }\n\n /**\n * 设置coastline_domain\n */\n setOceanologyCoastlineDomain(params: any) {\n return new Promise((resolve) => {\n const param = [\n \"surface_coastline_test\",\n params.affectWorld != undefined && !params.affectWorld ? 0 : 1, //uint8 m_affect_world;\n params.areaResolution != undefined\n ? [params.areaResolution.x, params.areaResolution.y]\n : [512, 512], //UE:: Math:: TIntVector2 < int32 > m_area_resolution;\n params.areaWorldSize != undefined\n ? [params.areaWorldSize.x, params.areaWorldSize.y]\n : [2.56, 2.56], //FVector2D m_area_world_size;\n params.areaWorldPixelSize != undefined\n ? params.areaWorldPixelSize * 100\n : 500, //int32 m_area_world_pixel_size;\n params.areaWorldHeight != undefined\n ? params.areaWorldHeight * 100\n : 10000.0, //double m_area_world_height;\n params.coastlineMaxWidth != undefined\n ? params.coastlineMaxWidth * 100\n : 4000.0, //double m_coastline_max_width;\n params.distanceFieldFullPrecision != undefined\n ? params.distanceFieldFullPrecision\n : 1, //uint8 m_distance_field_full_precision;\n params.maxTileSize != undefined ? params.maxTileSize : 300, //int32 m_max_tile_size;\n ];\n const oceanology_interface = StampAPI.LibAx.oceanology_interface(\n StampUtil.getLibax()\n );\n oceanology_interface.OnOceanology = function (data: any) {\n oceanology_interface.OnOceanology = function (data: any) {};\n resolve(data);\n };\n oceanology_interface.set_oceanology_coastline_domain(param);\n });\n }\n\n /**\n * 设置coastline\n */\n setOceanologyCoastline(params: any) {\n return new Promise((resolve) => {\n const param = [\n \"surface_coastline_test\",\n params.surfaceMeshMode != undefined ? params.surfaceMeshMode : 5, //uint8 m_surface_mesh_mode; 0 Invisible_ExternalMesh, 1 Domaian_GeneratedMesh 2 Domaian_SurfaceMesh 3 DomaianDivide_Instanced 4 InfiniteGrid_Instanced 5 InfiniteGrid_Niagara\n params.surfaceMeshDensity != undefined ? params.surfaceMeshDensity : 3, // 0 Plane_Custom 1 Plane_16*16 2 Plane_32*32 3 Plane_64*64 4 Plane_128*128 5 Plane_256*256 6 Plane_512*512 7 Plane_1024*1024\n params.coastlineDomainSize != undefined\n ? [\n params.coastlineDomainSize.x,\n params.coastlineDomainSize.y,\n params.coastlineDomainSize.z,\n ]\n : [256000.0, 256000.0, 10000.0], //FVector3d m_coastline_domain_size;\n params.infiniteGridLevelsOver != undefined\n ? params.infiniteGridLevelsOver\n : 5, //int32 m_infinite_grid_levels_over;\n params.infiniteGridLevelsUnder != undefined\n ? params.infiniteGridLevelsUnder\n : 2, //int32 m_infinite_grid_levels_under;\n params.infiniteGridMeshScale != undefined\n ? params.infiniteGridMeshScale\n : 14.0, //double m_infinite_grid_mesh_scale;\n params.infiniteGridBoundsScale != undefined\n ? params.infiniteGridBoundsScale\n : 100.0, //uint8 m_generate_edge_padding;\n params.underwaterVisibility != undefined\n ? params.underwaterVisibility\n : 0, // uint8 m_underwater_visibility 地下水体显示方式 0 AutomaticDection 1 AlwaysVisible 2 AlwaysInvisible 3 InsideContainer\n ];\n const oceanology_interface = StampAPI.LibAx.oceanology_interface(\n StampUtil.getLibax()\n );\n oceanology_interface.OnOceanology = function (data: any) {\n oceanology_interface.OnOceanology = function (data: any) {};\n resolve(data);\n };\n oceanology_interface.set_oceanology_coastline(param);\n });\n }\n\n /**\n * 设置颜色预设资源\n */\n setOceanologyCoastlineColorPreset(params: any) {\n return new Promise((resolve) => {\n const param = [\n params.guid || \"surface_coastline_test\",\n params.type != undefined ? params.type : 1, //uint8 m_type; // 0 Base Color Preset默认值(CP_OceanBlue_01.CP_OceanBlue_01) 1 Shore Color Preset默认值(CP_ShoreGreen_05.CP_ShoreGreen_05) 2 Painter Color Preset默认值(CP_ShoreDirt_01.CP_ShoreDirt_01)\n `/Engine/FluidFlux/Surface/Templates/Color/${\n params.presetAssetName != undefined\n ? params.presetAssetName + \".\" + params.presetAssetName\n : \"CP_OceanBlue_01.CP_OceanBlue_01\"\n }`, //FString m_preset_asset_name; Engine/Content/FluidFlux/Surface/Templates/Color/目录下的资源\n ];\n const oceanology_interface = StampAPI.LibAx.oceanology_interface(\n StampUtil.getLibax()\n );\n oceanology_interface.OnOceanology = function (data: any) {\n oceanology_interface.OnOceanology = function (data: any) {};\n resolve(data);\n };\n oceanology_interface.set_oceanology_coastline_color_preset(param);\n });\n }\n\n /**\n * 获取颜色资源参数值\n */\n getOceanologyCoastlineColorPresetData(assetName: string) {\n return new Promise((resolve) => {\n const param = [\n `/Engine/FluidFlux/Surface/Templates/Color/${\n assetName != undefined\n ? assetName + \".\" + assetName\n : \"CP_OceanBlue_01.CP_OceanBlue_01\"\n }`, // m_asset_name\n ];\n const oceanology_interface = StampAPI.LibAx.oceanology_interface(\n StampUtil.getLibax()\n );\n oceanology_interface.OnOceanology = function (data: any) {\n oceanology_interface.OnOceanology = function (data: any) {};\n resolve(data);\n };\n oceanology_interface.get_oceanology_coastline_color_preset_data(param);\n });\n }\n\n /**\n * 设置颜色资源参数\n */\n setOceanologyCoastlineColorPresetData(params: any) {\n return new Promise((resolve) => {\n const param = [\n \"surface_coastline_test\",\n params.type != undefined ? params.type : 0, //uint8 m_type; // 0 Base Color Preset默认值(CP_OceanBlue_01.CP_OceanBlue_01) 1 Shore Color Preset默认值(CP_ShoreGreen_05.CP_ShoreGreen_05) 2 Painter Color Preset默认值(CP_ShoreDirt_01.CP_ShoreDirt_01)\n params.clarity != undefined ? params.clarity : 1.0, //double m_clarity;// \"Clarity\"\n params.scattering != undefined\n ? [\n params.scattering.r,\n params.scattering.g,\n params.scattering.b,\n params.scattering.a,\n ]\n : [0.6, 1.0, 1.0, 0.00003], //FLinearColor m_scattering;\n params.absorption != undefined\n ? [\n params.absorption.r,\n params.absorption.g,\n params.absorption.b,\n params.absorption.a,\n ]\n : [120.0, 250.0, 350.0, 4.0], //FLinearColor m_absorption;\n params.overlay != undefined\n ? [\n params.overlay.r,\n params.overlay.g,\n params.overlay.b,\n params.overlay.a,\n ]\n : [0.117708, 0.294268, 0.470833, 0.0], //FLinearColor m_overlay;\n params.behind != undefined\n ? [params.behind.r, params.behind.g, params.behind.b, params.behind.a]\n : [1.0, 1.2, 1.15, 0.65], //FLinearColor m_behind;\n params.phaseG != undefined ? params.phaseG : 0.0, //double m_phaseG; // \"PhaseG\"\n ];\n const oceanology_interface = StampAPI.LibAx.oceanology_interface(\n StampUtil.getLibax()\n );\n oceanology_interface.OnOceanology = function (data: any) {\n oceanology_interface.OnOceanology = function (data: any) {};\n resolve(data);\n };\n oceanology_interface.set_oceanology_coastline_color_preset_data(param);\n });\n }\n\n /**\n * 设置wave_shore_water\n */\n setOceanologyOceanWaveShoreWater(params: any) {\n return new Promise((resolve) => {\n const param = [\n \"ocean_wave_test\",\n params.waveProfileSize != undefined\n ? params.waveProfileSize * 100\n : 500.0, //double m_wave_profile_size;\n params.waveMovementSpeed != undefined ? params.waveMovementSpeed : 0.29, //double m_wave_movement_speed;\n params.waveAnimationSpeed != undefined\n ? params.waveAnimationSpeed\n : 0.65, //double m_wave_animation_speed;\n params.waveProfileAreaWidth != undefined\n ? params.waveProfileAreaWidth\n : 0.5, //double m_wave_profile_area_width;\n params.waveProfileAreaBlend != undefined\n ? params.waveProfileAreaBlend\n : 4.0, //double m_wave_profile_area_blend;\n params.waveAnimationDistance != undefined\n ? params.waveAnimationDistance\n : 2.37, //double m_wave_animation_distance;\n params.shoreGroundPrediction != undefined\n ? params.shoreGroundPrediction\n : 250.0, //double m_shore_ground_prediction;\n params.shoreColorDistance != undefined\n ? params.shoreColorDistance\n : 20000.0, //double m_shore_color_distance;\n params.shoreColorHeight != undefined ? params.shoreColorHeight : 1600.0, //double m_shore_color_height;\n ];\n const oceanology_interface = StampAPI.LibAx.oceanology_interface(\n StampUtil.getLibax()\n );\n oceanology_interface.OnOceanology = function (data: any) {\n oceanology_interface.OnOceanology = function (data: any) {};\n resolve(data);\n };\n oceanology_interface.set_oceanology_ocean_wave_shore_water(param);\n });\n }\n\n /**\n * 设置wave_distant_water\n */\n setOceanologyOceanWaveDistantWater(params: any) {\n return new Promise((resolve) => {\n const param = [\n \"ocean_wave_test\",\n params.oceanWaveLength != undefined\n ? params.oceanWaveLength * 100\n : 11500.0, //double m_ocean_wave_length;\n params.oceanWaveChoppiness != undefined\n ? params.oceanWaveChoppiness\n : 1.5, //double m_ocean_wave_choppiness;\n params.oceanWaveHeight != undefined\n ? params.oceanWaveHeight * 100\n : 230.0, //double m_ocean_wave_height;\n params.oceanWaveOffset != undefined ? params.oceanWaveOffset : 0.0, //double m_ocean_wave_offset;\n params.oceanWaveWindDirection != undefined\n ? [params.oceanWaveWindDirection.x, params.oceanWaveWindDirection.y]\n : [-150.0, 50], //FVector2D m_ocean_wave_wind_direction;\n params.oceanWaveWindPush != undefined\n ? params.oceanWaveWindPush\n : 0.003, //double m_ocean_wave_wind_push;\n params.oceanWaveAnimationSpeed != undefined\n ? params.oceanWaveAnimationSpeed\n : 0.25, //double m_ocean_wave_animation_speed;\n ];\n const oceanology_interface = StampAPI.LibAx.oceanology_interface(\n StampUtil.getLibax()\n );\n oceanology_interface.OnOceanology = function (data: any) {\n oceanology_interface.OnOceanology = function (data: any) {};\n resolve(data);\n };\n oceanology_interface.set_oceanology_ocean_wave_distant_water(param);\n });\n }\n //#endregion\n\n //#region FluildFlux插件的淹没模拟\n /**\n * 淹没模拟\n * @param modifierName 水源名称(唯一 可以使用GUID)\n * @param simulationName 仿真名称(唯一 可以使用GUID)\n * @param surfaceName 水面名称(唯一 可以使用GUID)\n * @param waterLocation 水源位置\n * @param simulationLocation 仿真模拟矩形范围的中心点位置 : 注意水源\n */\n createOceanologySubmergedAnalysis(\n modifierName: string,\n simulationName: string,\n surfaceName: string,\n waterLocation: any,\n simulationLocation: any\n ) {\n return new Promise((resolve) => {\n const param = [\n modifierName, // 水源名称\n simulationName, // 仿真名称\n surfaceName, // 仿真引用的水面(该actor坐标必须与flux_simulation一样,下面直接会引用flux_simulation坐标)\n waterLocation.x,\n waterLocation.y,\n waterLocation.z, // 水源位置\n simulationLocation.x,\n simulationLocation.y,\n simulationLocation.z, // 仿真位置\n ];\n const oceanology_interface = StampAPI.LibAx.oceanology_interface(\n StampUtil.getLibax()\n );\n oceanology_interface.OnOceanology = async function (data: any) {\n oceanology_interface.OnOceanology = function (data: any) {};\n // StampUtil.setFluxSimulationState(1);//1代表开始\n resolve(data);\n };\n oceanology_interface.create_oceanology_submerged_analysis(param);\n });\n }\n\n setOceanologySubmergedScale(modifierName: string, scale: any) {\n const param = [\n modifierName, // 水源名称\n scale.x,\n scale.y,\n scale.z, // 水源缩放\n ];\n const oceanology_interface = StampAPI.LibAx.oceanology_interface(\n StampUtil.getLibax()\n );\n oceanology_interface.set_actor_scale(param);\n }\n\n setOceanologySubmergedRotate(modifierName: string, rotate: any) {\n const param = [\n modifierName, // 水源名称\n rotate.x,\n rotate.y,\n rotate.z, // 水源缩放\n ];\n const oceanology_interface = StampAPI.LibAx.oceanology_interface(\n StampUtil.getLibax()\n );\n oceanology_interface.set_actor_rotation(param);\n }\n\n /**\n * FluildFlux淹没参数设置\n * @param params\n */\n async setOceanSubmergedSetting(\n modifierName: string,\n simulationName: string,\n params: any,\n selectParam: any = null\n ) {\n switch (selectParam) {\n case \"fluxModifierSource\":\n params.fluxModifierSource &&\n (await StampUtil.setFluxModifierSource(\n modifierName,\n params.fluxModifierSource\n ));\n break;\n case \"fluxSimulationPreview\":\n params.fluxSimulationPreview &&\n (await StampUtil.setFluxSimulationPreview(\n simulationName,\n params.fluxSimulationPreview\n ));\n break;\n case \"fluxSimulationTime\":\n params.fluxSimulationTime &&\n (await StampUtil.setFluxSimulationTime(\n simulationName,\n params.fluxSimulationTime\n ));\n break;\n case \"fluxSimulationDomain\":\n params.fluxSimulationDomain &&\n (await StampUtil.setFluxSimulationDomain(\n simulationName,\n params.fluxSimulationDomain\n ));\n break;\n case \"fluxSimulationPhysics\":\n params.fluxSimulationPhysics &&\n (await StampUtil.setFluxSimulationPhysics(\n simulationName,\n params.fluxSimulationPhysics\n ));\n break;\n case \"fluxSimulationFoam\":\n params.fluxSimulationFoam &&\n (await StampUtil.setFluxSimulationFoam(\n simulationName,\n params.fluxSimulationFoam\n ));\n break;\n case \"fluxSimulationWetmap\":\n params.fluxSimulationWetmap &&\n (await StampUtil.setFluxSimulationWetmap(\n simulationName,\n params.fluxSimulationWetmap\n ));\n break;\n default:\n params.fluxModifierSource &&\n (await StampUtil.setFluxModifierSource(\n modifierName,\n params.fluxModifierSource\n ));\n params.fluxSimulationPreview &&\n (await StampUtil.setFluxSimulationPreview(\n simulationName,\n params.fluxSimulationPreview\n ));\n params.fluxSimulationTime &&\n (await StampUtil.setFluxSimulationTime(\n simulationName,\n params.fluxSimulationTime\n ));\n params.fluxSimulationDomain &&\n (await StampUtil.setFluxSimulationDomain(\n simulationName,\n params.fluxSimulationDomain\n ));\n params.fluxSimulationPhysics &&\n (await StampUtil.setFluxSimulationPhysics(\n simulationName,\n params.fluxSimulationPhysics\n ));\n params.fluxSimulationFoam &&\n (await StampUtil.setFluxSimulationFoam(\n simulationName,\n params.fluxSimulationFoam\n ));\n params.fluxSimulationWetmap &&\n (await StampUtil.setFluxSimulationWetmap(\n simulationName,\n params.fluxSimulationWetmap\n ));\n break;\n }\n }\n\n /**\n * 清除淹没模拟\n */\n clearOceanologySubmerged(\n modifierName: string,\n simulationName: string,\n surfaceName: string\n ) {\n const oceanology_interface = StampAPI.LibAx.oceanology_interface(\n StampUtil.getLibax()\n );\n oceanology_interface.remove_scene_actor([modifierName]);\n oceanology_interface.remove_scene_actor([simulationName]);\n oceanology_interface.remove_scene_actor([surfaceName]);\n }\n\n /**\n * 添加水源(额外添加水源-暂不用)\n */\n addFluxModifierSource(params: any) {\n return new Promise((resolve) => {\n const param = [\n \"flux_modifier_source2\", //FString m_actor_name;\n params.point.x,\n params.point.y,\n params.point.z, //vector_3d m_water_source_center;\n params.volume != undefined ? params.volume : 0.1, //double m_volume;\n params.velocity != undefined ? params.velocity : [0.0, 0.0], //FVector2D m_velocity;\n params.shape != undefined ? params.shape : 2, //uint8 m_shape; // Fill Circle Rect\n params.mode != undefined ? params.mode : 2, //uint8 m_mode; // Add Set Adjust\n params.edge != undefined ? params.edge : 12.0, //double m_edge;\n params.intensity != undefined ? params.intensity : 1.0, //double m_intensity;\n params.duration != undefined ? params.duration : -1.0, //double m_duration;\n params.sortPriority != undefined ? params.sortPriority : 1000, //int32 m_sort_priority;\n ];\n const oceanology_interface = StampAPI.LibAx.oceanology_interface(\n StampUtil.getLibax()\n );\n oceanology_interface.OnOceanology = async function (data: any) {\n oceanology_interface.OnOceanology = function (data: any) {};\n resolve(data);\n };\n oceanology_interface.add_flux_modifier_source(param);\n });\n }\n\n /**\n * 设置水源参数\n */\n setFluxModifierSource(modifierName: string, params: any) {\n return new Promise((resolve) => {\n const param = [\n modifierName, //\"flux_modifier_source\",//FString m_actor_name;\n params.volume != undefined ? params.volume : 0.1, //double m_volume;\n params.velocity != undefined\n ? [params.velocity.x, params.velocity.y]\n : [0.0, 0.0], //FVector2D m_velocity;\n params.shape != undefined ? params.shape : 2, //uint8 m_shape; // Fill Circle Rect\n params.mode != undefined ? params.mode : 2, //uint8 m_mode; // Add Set Adjust\n params.edge != undefined ? params.edge : 12.0, //double m_edge;\n params.intensity != undefined ? params.intensity : 1.0, //double m_intensity;\n params.duration != undefined ? params.duration : -1.0, //double m_duration;\n params.sortPriority != undefined ? params.sortPriority : 1000, //int32 m_sort_priority;\n ];\n const oceanology_interface = StampAPI.LibAx.oceanology_interface(\n StampUtil.getLibax()\n );\n oceanology_interface.OnOceanology = async function (data: any) {\n oceanology_interface.OnOceanology = function (data: any) {};\n resolve(data);\n };\n\n oceanology_interface.set_flux_modifier_source(param);\n });\n }\n\n /**\n * 设置水源重新仿真\n */\n setFluxModifierSourceRestartSimulation(modifierName: string) {\n const param = [modifierName];\n const oceanology_interface = StampAPI.LibAx.oceanology_interface(\n StampUtil.getLibax()\n );\n oceanology_interface.set_flux_modifier_source_restart_simulation(param);\n }\n\n /**\n * 设置仿真state\n * @param state [0:stop 1:start 2:reset]\n */\n setFluxSimulationState(simulationName: string, state: number) {\n return new Promise((resolve) => {\n const param = [\n simulationName, //\"flux_simulation\",\n state, // 0 stop 1 start 2 reset\n ];\n const oceanology_interface = StampAPI.LibAx.oceanology_interface(\n StampUtil.getLibax()\n );\n oceanology_interface.OnOceanology = async function (data: any) {\n oceanology_interface.OnOceanology = function (data: any) {};\n resolve(data);\n };\n oceanology_interface.set_flux_simulation_state(param);\n });\n }\n\n /**\n * 设置仿真preview\n */\n setFluxSimulationPreview(simulationName: string, params: any) {\n return new Promise((resolve) => {\n const param = [\n simulationName, // \"flux_simulation\",\n params.simulationPreviewDuration != undefined\n ? params.simulationPreviewDuration\n : 160.0, // double m_simulation_preview_duration;\n params.simulationPreviewFramerate != undefined\n ? params.simulationPreviewFramerate\n : 250, // double m_Simulation_preview_framerate;\n params.heightmapUpdateFrequency != undefined\n ? params.heightmapUpdateFrequency\n : 0.4, // double m_heightmap_update_frequency;\n ];\n const oceanology_interface = StampAPI.LibAx.oceanology_interface(\n StampUtil.getLibax()\n );\n oceanology_interface.OnOceanology = async function (data: any) {\n oceanology_interface.OnOceanology = function (data: any) {};\n resolve(data);\n };\n oceanology_interface.set_flux_simulation_preview(param);\n });\n }\n\n /**\n * 设置仿真time\n */\n setFluxSimulationTime(simulationName: string, params: any) {\n return new Promise((resolve) => {\n const param = [\n simulationName, // \"flux_simulation\",\n params.iterationsPerSecond != undefined\n ? params.iterationsPerSecond\n : 120, //int32 m_iterations_per_second; // \"IterationsPerSecond\"\n params.iterationsPerFrameMax != undefined\n ? params.iterationsPerFrameMax\n : 3, //int32 m_iterations_per_frame_max; // Iterations Per Frame Max\n params.maxIterationsAccumulatedMax != undefined\n ? params.maxIterationsAccumulatedMax\n : 4, //int32 m_max_iterations_accumulated_max; // MaxIterations Accumulated Max\n params.simulationDeltaTime != undefined\n ? params.simulationDeltaTime\n : 0.17, //double m_simulation_delta_time; // \"SimulationDeltaTime\"\n params.runtimeCaptureDelay != undefined\n ? params.runtimeCaptureDelay\n : 0.0, //double m_runtime_capture_delay; //Runtime Capture Delay\n params.simulationDuration != undefined\n ? params.simulationDuration\n : -1.0, //double m_simulation_duration; // Simulation Duration\n ];\n const oceanology_interface = StampAPI.LibAx.oceanology_interface(\n StampUtil.getLibax()\n );\n oceanology_interface.OnOceanology = async function (data: any) {\n oceanology_interface.OnOceanology = function (data: any) {};\n resolve(data);\n };\n oceanology_interface.set_flux_simulation_time(param);\n });\n }\n\n /**\n * 设置仿真domain\n */\n setFluxSimulationDomain(simulationName: string, params: any) {\n return new Promise((resolve) => {\n // var lonlatBox = {\n // minLon: 0,\n // maxLon: 0,\n // minLat: 0,\n // maxLat: 0\n // }\n // for (var i = 0; i < points.length; i++) {\n // lonlatBox.minLon = lonlatBox.minLon == 0 ? points[i].x : Math.min(lonlatBox.minLon, points[i].x);\n // lonlatBox.minLat = lonlatBox.minLat == 0 ? points[i].y : Math.min(lonlatBox.minLat, points[i].y);\n // lonlatBox.maxLon = lonlatBox.maxLon == 0 ? points[i].x : Math.max(lonlatBox.maxLon, points[i].x);\n // lonlatBox.maxLat = lonlatBox.maxLat == 0 ? points[i].y : Math.max(lonlatBox.maxLat, points[i].y);\n // }\n // var pointLeftTop = {\n // x: lonlatBox.minLon,\n // y: lonlatBox.minLat,\n // z: 0\n // }\n // var pointRightTop = {\n // x: lonlatBox.maxLon,\n // y: lonlatBox.minLat,\n // z: 0\n // }\n // var pointLeftBottom = {\n // x: lonlatBox.minLon,\n // y: lonlatBox.maxLat,\n // z: 0\n // }\n // var width = StampUtil.calcPointDistance(pointLeftTop, pointRightTop);\n // var height = StampUtil.calcPointDistance(pointLeftTop, pointLeftBottom);\n // var widthPix = Math.round(width * 100 / 2);\n // var heightPix = Math.round(height * 100 / 2);\n const param = [\n simulationName, //\"flux_simulation\",\n params.heightWetFloatPrecision != undefined\n ? params.heightWetFloatPrecision\n : 1, //uint8 m_height_wet_float_precision; // \"HeightWetFloatPrecision\" 0 false 1 true\n params.areaResolution != undefined\n ? [params.areaResolution.x, params.areaResolution.y]\n : [512, 512], //UE:: Math:: TIntVector2 < int32 > m_area_resolution;// \"AreaResolution\"\n params.areaWorldSize != undefined\n ? [params.areaWorldSize.x, params.areaWorldSize.y]\n : [204.8, 204.8], //FVector2D m_area_world_size; // \"AreaWorldSize(m)\" 仿真区域多少米宽高\n params.areaWorldBlend != undefined\n ? [\n params.areaWorldBlend.x,\n params.areaWorldBlend.y,\n params.areaWorldBlend.z,\n params.areaWorldBlend.m,\n ]\n : [0.0, 0.0, 0.0, 0.0], //UE:: Math:: TVector4 < float > m_area_world_blend;\n params.areaWorldPixelSize != undefined\n ? params.areaWorldPixelSize * 100\n : 40.0, //double m_area_world_pixel_size; //Area World Pixel Size\n params.areaWorldHeight != undefined\n ? params.areaWorldHeight * 100\n : 1250.0, //double m_area_world_height;\n params.referencePlane != undefined ? params.referencePlane : 0.25, //double m_reference_plane;\n params.slopeScale != undefined ? params.slopeScale : 35.0, //double m_slope_scale;\n ];\n const oceanology_interface = StampAPI.LibAx.oceanology_interface(\n StampUtil.getLibax()\n );\n oceanology_interface.OnOceanology = function (data: any) {\n oceanology_interface.OnOceanology = function (data: any) {};\n resolve(data);\n };\n\n oceanology_interface.set_flux_simulation_domain(param);\n });\n }\n\n /**\n * 设置仿真physics\n */\n setFluxSimulationPhysics(simulationName: string, params: any) {\n return new Promise((resolve) => {\n const param = [\n simulationName, // \"flux_simulation\",\n params.gravity != undefined ? params.gravity : 9.807, //double m_gravity; // Gravity\n params.damping != undefined ? params.damping : 0.02, //double m_damping; // Damping\n params.friction != undefined ? params.friction : 0.0002, //double m_friction; //Friction\n params.velocityLimit != undefined ? params.velocityLimit : 10.0, //double m_velocity_limit; // Velocity Limit\n params.accelerationLimit != undefined ? params.accelerationLimit : 16.0, //double m_acceleration_limit;// Acceleration Limit\n params.fluidTransportLimit != undefined\n ? params.fluidTransportLimit\n : 500.0, //double m_fluid_transport_limit; //Fluid Transport Limit\n params.modifiersVelocityScale != undefined\n ? params.modifiersVelocityScale\n : 1.0, //double m_modifiers_velocity_scale; // Modifiers Velocity Scale\n params.overshootingBlend != undefined ? params.overshootingBlend : 0.3, //double m_overshooting_blend; // Overshooting Blend\n params.overshootingEdge != undefined ? params.overshootingEdge : 2.0, //double m_overshooting_edge; // Overshooting Edge\n ];\n const oceanology_interface = StampAPI.LibAx.oceanology_interface(\n StampUtil.getLibax()\n );\n oceanology_interface.OnOceanology = function (data: any) {\n oceanology_interface.OnOceanology = function (data: any) {};\n resolve(data);\n };\n oceanology_interface.set_flux_simulation_physics(param);\n });\n }\n\n /**\n * 设置仿真foam\n */\n setFluxSimulationFoam(simulationName: string, params: any) {\n return new Promise((resolve) => {\n const param = [\n simulationName, // \"flux_simulation\",\n params.foamFadeSpeed != undefined ? params.foamFadeSpeed : 0.0015, //double m_foam_fade_speed;// Foam Fade Speed\n params.foamShallowDepth != undefined ? params.foamShallowDepth : 400.0, //double m_foam_shallow_depth;// Foam Shallow Depth\n params.foamShallowGenerate != undefined\n ? params.foamShallowGenerate\n : 0.1, //double m_foam_shallow_generate; // Foam Shallow Generate\n params.foamWaveGenerate != undefined ? params.foamWaveGenerate : 0.0, //double m_foam_wave_generate;// Foam Wave Generate\n ];\n const oceanology_interface = StampAPI.LibAx.oceanology_interface(\n StampUtil.getLibax()\n );\n oceanology_interface.OnOceanology = function (data: any) {\n oceanology_interface.OnOceanology = function (data: any) {};\n resolve(data);\n };\n oceanology_interface.set_flux_simulation_foam(param);\n });\n }\n\n /**\n * 设置仿真wetmap\n */\n setFluxSimulationWetmap(simulationName: string, params: any) {\n return new Promise((resolve) => {\n const param = [\n simulationName, //\"flux_simulation\",\n params.wetmapDryingSpeed != undefined ? params.wetmapDryingSpeed : 0.1, //double m_wetmap_drying_speed;// Wetmap Drying Speed\n params.wetmapDryingDelay != undefined ? params.wetmapDryingDelay : 0.5, //double m_wetmap_drying_delay;// Wetmap Drying Delay\n params.evaporationHeight != undefined\n ? params.evaporationHeight\n : 0.001, //double m_evaporation_height;// Evaporation Height\n params.surfaceSmoothing != undefined ? params.surfaceSmoothing : 0.3, //double m_surface_smoothing;// Surface Smoothing\n ];\n const oceanology_interface = StampAPI.LibAx.oceanology_interface(\n StampUtil.getLibax()\n );\n oceanology_interface.OnOceanology = function (data: any) {\n oceanology_interface.OnOceanology = function (data: any) {};\n resolve(data);\n };\n oceanology_interface.set_flux_simulation_wetmap(param);\n });\n }\n\n addWaterSourceDetect(param: any) {\n const oceanology_interface = StampAPI.LibAx.oceanology_interface(\n StampUtil.getLibax()\n );\n oceanology_interface.add_water_source_detect(param);\n }\n\n getWaterSourceDetectState(param: any) {\n return new Promise((resolve) => {\n const oceanology_interface = StampAPI.LibAx.oceanology_interface(\n StampUtil.getLibax()\n );\n oceanology_interface.OnOceanology = function (data: any) {\n oceanology_interface.OnOceanology = function (data: any) {};\n resolve(data);\n };\n oceanology_interface.get_water_source_detect_state(param);\n });\n }\n\n removeWaterSourceDetect(params: any) {\n const oceanology_interface = StampAPI.LibAx.oceanology_interface(\n StampUtil.getLibax()\n );\n\n for (let i = 0; i < params.length; i++) {\n oceanology_interface.remove_scene_actor([params[i]]);\n }\n }\n\n addSufaceMeshGenerator(params: any) {\n return new Promise((resolve) => {\n const oceanology_interface = StampAPI.LibAx.oceanology_interface(\n StampUtil.getLibax()\n );\n oceanology_interface.OnOceanology = function (data: any) {\n oceanology_interface.OnOceanology = function (data: any) {};\n resolve(data);\n };\n oceanology_interface.add_water_source_detect(params);\n });\n }\n\n getSubmergedAnalysisInfo(params: any) {\n return new Promise((resolve) => {\n const oceanology_interface = StampAPI.LibAx.oceanology_interface(\n StampUtil.getLibax()\n );\n oceanology_interface.OnOceanology = function (data: any) {\n oceanology_interface.OnOceanology = function (data: any) {};\n resolve(data);\n };\n oceanology_interface.get_submerged_analysis_info(params);\n });\n }\n //#endregion\n\n // #region 赤潮模拟\n addFluxWorldBrush(param: any) {\n const oceanology_interface = StampAPI.LibAx.oceanology_interface(\n StampUtil.getLibax()\n );\n oceanology_interface.add_flux_world_brush(param);\n }\n\n addFluxWorldPainter(point: any) {\n const oceanology_interface = StampAPI.LibAx.oceanology_interface(\n StampUtil.getLibax()\n );\n\n const param = [1, \"flux_world_painter\", point];\n oceanology_interface.add_flux_world_painter(param);\n }\n\n setFluxWorldBrush = function (polygon: any, uOffset = 0, vOffset = 0) {\n const rectPoints = [];\n if (polygon && polygon.length > 0) {\n for (let i = 0; i < polygon.length; i++) {\n rectPoints.push(polygon[i].x, polygon[i].y);\n }\n }\n\n const oceanology_interface = StampAPI.LibAx.oceanology_interface(\n StampUtil.getLibax()\n );\n\n const param = [\n \"flux_world_brush\", // 名字\n 1.0, // TargetValue 0-1代表强度值 // 这个用来模拟海浪赤潮(严重中等一般)\n 1.0, // BlendAdditive 0-1代表强度值\n 1.0, // ShapeHardness 0-1000代表画刷边缘淡化系数\n 1.0, // ShapeRoundness 0-1形状曲率 0 方形 1 圆形\n 0, // Canvas 0-2(BP_FluxColorPainter, BP_FluxCoastErase, BP_FluxWaveScale)\n rectPoints,\n uOffset,\n vOffset,\n ];\n\n oceanology_interface.set_flux_world_brush(param);\n };\n\n setFluxWorldPainter = function (width: number, height: number, size: number) {\n const oceanology_interface = StampAPI.LibAx.oceanology_interface(\n StampUtil.getLibax()\n );\n const param = [\n \"flux_world_painter\", // 名字\n width, // AreaResolution 区域分辨率Int\n height, // AreaResolution 区域分辨率Int\n size, // AreaPixelSize 每个像素的大小 cm\n ];\n\n oceanology_interface.set_flux_world_painter(param);\n };\n\n setScenePainterActor() {\n const oceanology_interface = StampAPI.LibAx.oceanology_interface(\n StampUtil.getLibax()\n );\n\n const param = [\"surface_coastline_test\", \"flux_world_painter\"];\n oceanology_interface.set_scene_painter_actor(param);\n }\n\n removePainterActor(param: any) {\n const oceanology_interface = StampAPI.LibAx.oceanology_interface(\n StampUtil.getLibax()\n );\n oceanology_interface.remove_scene_actor([\"flux_world_painter\"]);\n for (let i = 0; i < param.length; i++) {\n oceanology_interface.remove_scene_actor([param[i]]);\n }\n }\n\n // #endregion\n\n //#endregion\n\n //#region 视频模块\n /**\n * 获取GB28181摄像头列表\n */\n getCameraList(serverip: string) {\n return new Promise((resolve) => {\n const gb28181_camera_manager_interface =\n StampAPI.LibAx.gb28181_camera_manager_interface(StampUtil.getLibax());\n gb28181_camera_manager_interface.OnGB28181DeviceInfo = function (\n data: any\n ) {\n resolve(data);\n };\n const params = [serverip, \"Json\"];\n gb28181_camera_manager_interface.query_gb28181_device_info(params);\n });\n }\n\n /**\n * 创建摄像头对象\n * @param {*} params [摄像头依附对象GUID, 摄像头名称, RTSP服务路径, 摄像头mesh模型路径, 遮罩层路径, gb28181设备ID, gb28181服务路径, 协议类型, 摄像头索引数, 反投影开关(true/false),\n * 是否TCP协议(true/false), 坐标位置, 视域角度, 宽高比例, 旋转变换, 缩放变换, 偏移变换, 是否地下可见(false/true), 是否显示视锥体(false/true)]\n * // [parent_guid, name, rtsp_url, mesh_url, mask_url, gb28181_play_device_id, gb28181_server_url, protocol, camera_number, enable_camera_shot,\n * // use_tcp, location, fov, aspect, rotation, scale, offset, underground]\n * // params = [\"\", \"test_camera\", \"\", \"\", \"\", \"\", \"\", 0, 0, true, true, { x: 117.17524674654867, y: 34.25533320256773, z: 31.76893295580873 }, 45, 0.5, { x: 0, y: 0, z: 0 },\n * // \t{ x: 1, y: 1, z: 1 }, { x: 0, y: 0, z: 0 }, false, false];\n * @returns\n */\n createCamera(params: any) {\n return new Promise(async (resolve) => {\n const camera_interface = StampAPI.LibAx.camera_interface(StampAPI.lib_ax);\n camera_interface.OnCameraCreatedOrUpdate = function (data: any) {\n resolve(data);\n };\n const parentGuid = params.parentGuid || StampUtil.createGuid(); //父图层guid\n const elementId = params.guid || StampUtil.createGuid(); //摄像头对象guid\n const name = params.name || \"\"; //test_camera\n const rtsp_url = params.rtspUrl || \"\"; //RTSP服务路径\n const rootPath = (await StampUtil.getRootPath()) as any;\n const mesh_url = params.meshUrl || rootPath.root_path + \"res\\\\camera.x\"; //摄像头mesh模型路径\n let mask_url = params.maskUrl || rootPath.root_path + \"res\\\\mask.png\"; //\"E:\\\\SVN\\\\PRD\\\\ActiveX\\\\Stamp_64\\\\root\\\\res\\\\mask.png\"; //遮罩层路径\n if (mask_url == \"null\") {\n mask_url = rootPath.root_path + \"res\\\\mask.png\";\n }\n const gb28181_play_device_id = params.DeviceID || \"\"; //gb28181设备ID\n const gb28181_server_url = params.serviceUrl || \"\"; //gb28181服务路径\n const protocol = params.cameraType != 0 ? 1 : 0; //协议类型0:rtsp; 1:gb28181\n const camera_number = 0; //摄像头索引数\n const enable_camera_shot = params.enableCameraShot || false; //反投影开关\n const enable_media_stream = params.enableMediaStream || false; //是否播放窗口视频流\n const enable_scene_media_stream =\n params.enableCameraSceneMediaStream || false; //是否投射到场景视频流\n const use_tcp = params.useTcp || false; //是否TCP协议\n const pos = params.location || { x: 0, y: 0, z: 0 }; //坐标位置\n const fov = params.fov || 45; //视域角度\n const aspect = params.aspect || 4.0 / 3.0; //宽高比例\n const farPlane = params.farPlane || 10; //可视投影距离\n const rotation = params.rotation ||\n params.rotaion || { x: 90, y: 0, z: 0 }; //旋转变换\n const scale = params.scale || { x: 1, y: 1, z: 1 }; //缩放变换\n const offset = params.offset || { x: 0, y: 0, z: 0 }; //偏移变换\n const underground = false; //是否地下可见\n const enableFrustum =\n params.enableFrustum == undefined ? true : params.enableFrustum;\n const windowPosX = params.windowPosX || 0;\n const windowPosY = params.windowPosY || 0;\n const windowWidth = params.windowWidth || 0;\n const windowHeight = params.windowHeight || 0;\n const pointColor = params.pointColor || 0x55ffff00;\n const lineColor = params.lineColor || 0x55ff0000;\n const fillColor = params.fillColor || 0x1900ff00;\n const projectColor = params.projectColor || 0x3032ff32;\n const paramsObj = [\n parentGuid,\n elementId,\n name,\n rtsp_url,\n mesh_url,\n mask_url,\n gb28181_play_device_id,\n gb28181_server_url,\n protocol,\n camera_number,\n enable_camera_shot,\n enable_media_stream,\n enable_scene_media_stream,\n use_tcp,\n pos,\n fov,\n aspect,\n farPlane,\n rotation,\n scale,\n offset,\n underground,\n enableFrustum,\n windowPosX,\n windowPosY,\n windowWidth,\n windowHeight,\n pointColor,\n lineColor,\n fillColor,\n projectColor,\n ];\n camera_interface.create(paramsObj);\n });\n }\n getTerrainAltitude(lon: any, lat: any) {\n return new Promise((resolve) => {\n const measure_interface = StampAPI.LibAx.measure_interface(\n StampUtil.getLibax()\n );\n measure_interface.MeasureTerrainAltitude(lon, lat);\n measure_interface.OnMeasureFinished = function (data: any) {\n resolve(data.result);\n };\n });\n }\n\n /**\n * 更新摄像头信息\n * @param {*} params 摄像头参数数组:[摄像头GUID, 摄像头名称, RTSP服务路径, 摄像头mesh模型路径, 遮罩层路径, 经纬度坐标位置]\n * @returns\n */\n updateCamera(params: any) {\n if (params.guid) {\n StampUtil.deleteElement(params.guid);\n }\n return new Promise((resolve) => {\n // [guid, name, rtsp_url, mesh_url, mask_url, location]\n //params = [\"\", \"\", \"\", \"\", \"\", { x: 117.17524674654867, y: 34.25533320256773, z: 31.76893295580873 }];\n const camera_interface = StampAPI.LibAx.camera_interface(\n StampUtil.getLibax()\n );\n camera_interface.OnCameraCreatedOrUpdate = function (data: any) {\n resolve(data);\n };\n camera_interface.update(params);\n });\n }\n\n /**\n * 更新摄像头小窗口位置和大小\n * @param params\n * @returns\n */\n updateCameraWindow(\n params = {\n guid: \"\",\n windowPosX: 0,\n windowPosY: 0,\n windowWidth: 0,\n windowHeight: 0,\n }\n ) {\n return new Promise((resolve) => {\n const camera_interface = StampAPI.LibAx.camera_interface(\n StampUtil.getLibax()\n );\n camera_interface.OnCameraCreatedOrUpdate = function (data: any) {\n resolve(data);\n };\n const paramsArr = [\n params.guid,\n params.windowPosX,\n params.windowPosY,\n params.windowWidth,\n params.windowHeight,\n ];\n camera_interface.element_camera_update_window(paramsArr);\n });\n }\n\n /**\n * 设置摄像头小窗口可见性\n * @param cameraGuid 摄像头guid\n * @param visible 是否可见\n * @returns\n */\n setCameraWindowVisible(cameraGuid: string, visible: boolean) {\n return new Promise((resolve) => {\n const camera_interface = StampAPI.LibAx.camera_interface(\n StampUtil.getLibax()\n );\n camera_interface.OnCameraCreatedOrUpdate = function (data: any) {\n resolve(data);\n };\n const paramsArr = [cameraGuid, visible];\n camera_interface.element_camera_window_visible(paramsArr);\n });\n }\n /**\n * 视频截图\n * @param {*} params 摄像头guid\n * @returns\n */\n cameraScreenshot(params: any) {\n const value = [params.guid];\n return new Promise((resolve) => {\n const camera_interface = StampAPI.LibAx.camera_interface(\n StampUtil.getLibax()\n );\n camera_interface.OnCameraWindowScreenShot = function (data: any) {\n const arrayBuffer = new ArrayBuffer(data.length);\n const bufTmp = new Uint8ClampedArray(arrayBuffer);\n bufTmp.set(data);\n // const dv = new DataView(arrayBuffer);\n // let offset = 0;\n // dv.getUint32(offset, true); //获取width\n // offset += 4;\n // dv.getUint32(offset, true); //获取height\n // offset += 4;\n // const imageBuf = bufTmp.slice(offset);\n // resolve(imageBuf);\n resolve(bufTmp);\n };\n camera_interface.element_camera_window_screen_shot(value);\n });\n }\n\n setFov(guid: string, fov: number) {\n const params = [guid, fov];\n const camera_interface = StampAPI.LibAx.camera_interface(\n StampUtil.getLibax()\n );\n camera_interface.set_fov(params);\n }\n\n enableFrustum(guid: string, enable: boolean) {\n const params = [guid, enable];\n const camera_interface = StampAPI.LibAx.camera_interface(\n StampUtil.getLibax()\n );\n camera_interface.enable_frustum_visible(params);\n }\n\n /**\n * 开启窗口视频播放\n * @param guid\n * @param enable\n */\n enableMediaStream(guid: string, enable: boolean) {\n const params = [guid, enable];\n const camera_interface = StampAPI.LibAx.camera_interface(\n StampUtil.getLibax()\n );\n camera_interface.rtsp_connect_or_stop(params);\n }\n\n /**\n * 开启场景投影视频播放\n * @param guid\n * @param enable\n */\n enableSceneMediaStream(guid: string, enable: boolean) {\n const params = [guid, enable];\n const camera_interface = StampAPI.LibAx.camera_interface(\n StampUtil.getLibax()\n );\n camera_interface.enable_scene_media_stream(params);\n }\n\n /**\n * 关闭指定摄像头\n * @param layerGuid 摄像头图层guid\n * @param guid 摄像头guid\n * @returns\n */\n closeCamera(layerGuid: string, guid: string) {\n return new Promise((resolve) => {\n const camera_interface = StampAPI.LibAx.camera_interface(\n StampUtil.getLibax()\n );\n camera_interface.OnCameraCreatedOrUpdate = function (data: any) {\n resolve(data);\n };\n const params = [layerGuid, guid];\n camera_interface.destroy_camera(params);\n });\n }\n\n /**\n * 关闭所有摄像头\n * @param layerGuid 摄像头图层guid\n * @returns\n */\n closeCameraAll(layerGuid: string) {\n return new Promise((resolve) => {\n const camera_interface = StampAPI.LibAx.camera_interface(\n StampUtil.getLibax()\n );\n camera_interface.OnCameraCreatedOrUpdate = function (data: any) {\n resolve(data);\n };\n const params = [layerGuid];\n camera_interface.destroy_all(params);\n });\n }\n //#endregion\n\n //#region 标绘功能接口\n //#region 公共接口\n /**\n * 公共标绘:创建异步回调\n * @param userdataObj\n * @returns\n */\n createElement(userdataObj: any) {\n return new Promise((resolve: any) => {\n const element_interface = StampUtil.getLibax().element_interface;\n element_interface.OnAdded = (obj: any) => {\n element_interface.OnAdded = undefined;\n resolve(obj);\n };\n userdataObj.ShapeToolLineWidth = 2.0;\n userdataObj.ShapeToolLineColor = \"#ffff0000\";\n userdataObj.ShapeToolFillColor = \"#44009900\";\n console.log(userdataObj);\n element_interface.create_element(userdataObj);\n userdataObj.action = \"add\";\n StampUtil.addToUserDataArr(userdataObj);\n });\n }\n\n /**\n * 公共参数化:创建进入的回调函数\n * @param data\n * @returns\n */\n createElementParams(userData: any, data: any) {\n return new Promise((resolve: any) => {\n const element_interface = StampUtil.getLibax().element_interface;\n StampUtil.addToUserDataArr(userData); //添加到userdataArr,否则不进回调\n element_interface.OnAdded = (treeData: any) => {\n element_interface.OnAdded = undefined;\n if (treeData.area) {\n data.area = treeData.area;\n }\n if (treeData.length) {\n data.length = treeData.length;\n }\n resolve(data);\n };\n });\n }\n\n /**\n * 添加到userdataArr\n * @param data\n */\n addToUserDataArr(data: any) {\n let isFind = false;\n const element_interface = StampUtil.getLibax().element_interface;\n for (let i = 0; i < element_interface.userdataArr.length; i++) {\n if (element_interface.userdataArr[i].guid == data.guid) {\n isFind = true;\n break;\n }\n }\n if (!isFind) {\n element_interface.userdataArr.push(data);\n }\n }\n\n /**\n * 清除绘制辅助信息\n */\n clearShapeCreator() {\n const shape_creator_interface =\n StampUtil.getLibax().shape_creator_interface;\n shape_creator_interface.OnShapeCreated = undefined;\n shape_creator_interface.clear();\n }\n\n /**\n * element对象可见距离的范围(多少千米到多少千米之间可见)\n * @param guid\n * @param minVisibleHeight\n * @param maxVisibleHeight\n */\n setElementVisibleRange(\n guid: string,\n minVisibleHeight: number,\n maxVisibleHeight: number\n ) {\n const element_interface = StampUtil.getLibax().element_interface;\n element_interface.visible_range_element([\n guid,\n minVisibleHeight || 0,\n maxVisibleHeight || 1000000,\n ]);\n }\n //#endregion\n\n //#region 二维标绘\n\n handleEndEnclosure() {\n const environment_interface = StampUtil.getLibax()?.environment_interface;\n environment_interface.right_button_click();\n }\n\n /**\n * 标绘:创建多边形\n * @param userdataObj\n * @returns\n */\n createElementPolygon(\n userdataObj: any = {\n guid: StampUtil.createGuid(),\n type: STAMP_RTTI.SE_RTTI_ELEMENT_POLYGON,\n name: \"polygon\",\n action: \"add\", //add:添加 modify:修改\n click: \"true\",\n desc: \"多边形\", //对象描述信息\n linewidth: 1,\n linecolor: \"#CCFFFF00\", //填充色:前两位是透明度,后面6位是填充色\n fillcolor: \"#CCFF0000\",\n shadow: 1, //渲染模式 0:正常 1:贴地 5:贴模型\n drawOrder: 1, //渲染顺序\n selectable: 1,\n editable: 1,\n }\n ) {\n return StampUtil.createElement(userdataObj);\n }\n\n createControlElementVisbile(params: any) {\n if (params.action == \"modify\") {\n return false;\n }\n const element_interface = StampUtil.getLibax().element_interface;\n if (params.type == STAMP_RTTI.SE_RTTI_ELEMENT_ICON_WEBUI) {\n //WEBUI\n for (let i = 0; i < this.webUIItems.length; i++) {\n if (this.webUIItems[i].guid == params.guid) {\n if (params.visible == undefined) {\n params.visible = true;\n }\n if (!this.webUIItems[i].isdelete) {\n //已存在未删除,则无需重新创建\n return true;\n } else {\n //已删除,则需要重新创建\n return false;\n }\n }\n }\n } else {\n for (let i = 0; i < element_interface.userdataArr.length; i++) {\n if (element_interface.userdataArr[i].guid == params.guid) {\n if (params.visible == undefined) {\n params.visible = true;\n }\n StampUtil.setElementVisible(params.guid, params.visible);\n return true;\n }\n }\n }\n\n return false;\n }\n /**\n * 参数化:创建或修改多边形\n * @param params\n * @returns\n */\n createElementPolygonParams(params: any) {\n console.log(params.name, params.points);\n if (!params.guid) {\n params.guid = StampUtil.createGuid();\n }\n const element_interface = StampUtil.getLibax().element_interface;\n if (StampUtil.createControlElementVisbile(params)) {\n //判断如果已存在,直接显示即可\n return new Promise((resolve) => {\n resolve(params);\n });\n }\n //需要将后台服务参数转为接口参数\n let paramObj = [\n {\n guid: params.guid,\n name: params.name?.toString() || \"\",\n type: Number(params.type) || STAMP_RTTI.SE_RTTI_ELEMENT_POLYGON,\n desc: params.description || \"\",\n linewidth: params.linewidth || 1,\n action: \"modify\",\n fillcolor: params.fillcolor || \"#CCFF0000\",\n linecolor: params.linecolor || \"#CCFFFF00\",\n shadow: params.shadow == undefined ? 1 : Number(params.shadow),\n selectable:\n params.selectable == undefined ? 1 : Number(params.selectable),\n editable: params.editable == undefined ? 1 : Number(params.editable),\n drawOrder: Number(params.drawOrder) || 0,\n visible: params.visible == undefined || Number(params.visible),\n },\n ] as any;\n\n const innerArr = [0];\n if (params.points && params.points.length > 0) {\n const pointsArr = [];\n for (let i = 0; i < params.points.length; i++) {\n pointsArr.push(params.points[i].x);\n pointsArr.push(params.points[i].y);\n pointsArr.push(params.points[i].z);\n }\n paramObj = paramObj.concat(pointsArr);\n innerArr[0]++;\n innerArr.push(pointsArr.length);\n }\n if (params.pointsIn && params.pointsIn.length > 0) {\n innerArr[0] += params.pointsIn.length;\n for (let i = 0; i < params.pointsIn.length; i++) {\n const pointsArr = [];\n for (let j = 0; j < params.pointsIn[i].length; j++) {\n pointsArr.push(params.pointsIn[i][j].x);\n pointsArr.push(params.pointsIn[i][j].y);\n pointsArr.push(params.pointsIn[i][j].z);\n }\n paramObj = paramObj.concat(pointsArr);\n innerArr.push(pointsArr.length);\n }\n paramObj.push(innerArr);\n }\n\n if (params.action == \"modify\") {\n element_interface.modify_element(paramObj);\n } else {\n element_interface.create_polygon_params(paramObj);\n }\n return StampUtil.createElementParams(paramObj[0], params);\n }\n\n /**\n * 标绘:创建折线\n */\n createElementLine(\n userdataObj = {\n guid: StampUtil.createGuid(),\n type: 220,\n name: \"line\",\n action: \"add\", //add:添加 modify:修改\n click: \"true\",\n desc: \"直线\", //对象描述信息\n linewidth: 1,\n linecolor: \"#CCFFFF00\",\n shadow: 1, //渲染模式 0:正常 1:贴地 5:贴模型\n arrow: 0, //显示箭头:0:无箭头;1:三角形箭头;2:伞状箭头\n selectable: 1,\n editable: 1,\n drawOrder: 1, //渲染顺序\n underground: 1,\n } as any\n ) {\n return StampUtil.createElement(userdataObj);\n }\n\n /**\n * 参数化:创建折线\n * @param params\n * @returns\n */\n createElementLineParams(params: any) {\n if (!params.guid) {\n params.guid = StampUtil.createGuid();\n }\n const element_interface = StampUtil.getLibax().element_interface;\n if (StampUtil.createControlElementVisbile(params)) {\n //判断如果已存在,直接显示即可\n return new Promise((resolve) => {\n resolve(params);\n });\n }\n let paramObj = [\n {\n guid: params.guid,\n name: params.name?.toString() || \"\",\n type: 220,\n desc: params.description || \"\",\n linewidth: params.linewidth || 1,\n action: \"modify\",\n linecolor: params.linecolor || \"#ffffffff\",\n arrow: params.arrow || 0,\n shadow: params.shadow == undefined ? 1 : Number(params.shadow),\n selectable:\n params.selectable == undefined ? 1 : Number(params.selectable),\n editable: params.editable == undefined ? 1 : Number(params.editable),\n drawOrder: Number(params.drawOrder) || 0,\n visible: params.visible == undefined || Number(params.visible),\n underground:\n params.underground == undefined || Number(params.underground),\n },\n ] as any;\n if (params.points && params.points.length > 0) {\n const pointsArr = [];\n for (let i = 0; i < params.points.length; i++) {\n pointsArr.push(params.points[i].x);\n pointsArr.push(params.points[i].y);\n pointsArr.push(params.points[i].z);\n }\n paramObj = paramObj.concat(pointsArr);\n }\n if (params.action == \"modify\") {\n element_interface.modify_element(paramObj);\n } else {\n element_interface.create_polygon_params(paramObj);\n }\n return StampUtil.createElementParams(paramObj[0], params);\n }\n\n /**\n * 标绘:创建曲线\n */\n createElementCurve(\n userdataObj = {\n guid: StampUtil.createGuid(),\n type: 229,\n name: \"line\",\n action: \"add\", //add:添加 modify:修改\n click: \"true\",\n desc: \"曲线\", //对象描述信息\n linewidth: 1,\n linecolor: \"#CCFFFF00\", //填充色:前两位是透明度,后面6位是填充色\n fillcolor: \"#CCFF0000\",\n shadow: 1, //渲染模式 0:正常 1:贴地 5:贴模型\n selectable: 1,\n editable: 1,\n drawOrder: 1, //渲染顺序\n }\n ) {\n return StampUtil.createElement(userdataObj);\n }\n\n /**\n * 参数化:创建曲线\n * @param params\n * @returns\n */\n createElementCurveParams(params: any) {\n if (!params.guid) {\n params.guid = StampUtil.createGuid();\n }\n const element_interface = StampUtil.getLibax().element_interface;\n if (StampUtil.createControlElementVisbile(params)) {\n //判断如果已存在,直接显示即可\n return new Promise((resolve) => {\n resolve(params);\n });\n }\n //需要将后台服务参数转为接口参数\n let paramObj = [\n {\n guid: params.guid,\n name: params.name || \"\",\n type: Number(params.type) || STAMP_RTTI.SE_RTTI_ELEMENT_CURVE,\n desc: params.description || \"\",\n linewidth: params.linewidth || 1,\n action: \"modify\",\n linecolor: params.linecolor || \"#CCFFFF00\",\n arrow: Number(params.arrow) || 0,\n shadow: params.shadow == undefined ? 1 : Number(params.shadow),\n selectable:\n params.selectable == undefined ? 1 : Number(params.selectable),\n editable: params.editable == undefined ? 1 : Number(params.editable),\n drawOrder: Number(params.drawOrder),\n visible: params.visible == undefined || Number(params.visible),\n },\n ] as any;\n const pointsArr = [];\n for (let i = 0; i < params.points.length; i++) {\n pointsArr.push(params.points[i].x);\n pointsArr.push(params.points[i].y);\n pointsArr.push(params.points[i].z);\n }\n paramObj = paramObj.concat(pointsArr);\n if (params.action == \"modify\") {\n element_interface.modify_element(paramObj);\n } else {\n element_interface.create_polygon_params(paramObj);\n }\n return StampUtil.createElementParams(paramObj[0], params);\n }\n\n /**\n * 标绘:创建圆\n */\n createElementCircle(\n userdataObj = {\n guid: StampUtil.createGuid(),\n type: 227,\n name: \"circle\",\n action: \"add\", //add:添加 modify:修改\n click: \"true\",\n desc: \"圆\", //对象描述信息\n linewidth: 1,\n linecolor: \"#CCFFFF00\",\n fillcolor: \"#CCFF0000\",\n shadow: 1, //渲染模式 0:正常 1:贴地 5:贴模型\n selectable: 1,\n editable: 1,\n drawOrder: 1, //渲染顺序\n }\n ) {\n return StampUtil.createElement(userdataObj);\n }\n /**\n * 参数化:创建圆\n * @param params\n * @returns\n */\n createElementCircleParams(params: any) {\n if (!params.guid) {\n params.guid = StampUtil.createGuid();\n }\n const element_interface = StampUtil.getLibax().element_interface;\n if (StampUtil.createControlElementVisbile(params)) {\n //判断如果已存在,直接显示即可\n return new Promise((resolve) => {\n resolve(params);\n });\n }\n const paramObj = [\n {\n guid: params.guid,\n name: params.name || \"\",\n type: params.type || 227,\n action: \"modify\",\n desc: params.description || \"\",\n radius: params.radius || 1,\n linewidth: params.linewidth || 1,\n fillcolor: params.fillcolor || \"#CCFF0000\",\n linecolor: params.linecolor || \"#CCFFFF00\",\n shadow: params.shadow == undefined ? 1 : Number(params.shadow), //0:正常 1:贴地 5:贴模型\n underground: params.underground == undefined ? 1 : params.underground,\n selectable:\n params.selectable == undefined ? 1 : Number(params.selectable),\n editable: params.editable == undefined ? 1 : Number(params.editable),\n visible: params.visible == undefined || Number(params.visible),\n },\n params.points[0].x,\n params.points[0].y,\n params.points[0].z,\n 0,\n 0,\n 0,\n 1,\n 1,\n 1,\n ] as any;\n paramObj[0].points = params.points;\n if (params.action == \"modify\") {\n element_interface.modify_element(paramObj);\n } else {\n element_interface.create_box_params(paramObj);\n }\n return StampUtil.createElementParams(paramObj[0], params);\n }\n\n /**\n * 标绘:创建警戒线\n */\n createElementGuardLine(\n userdataObj = {\n guid: StampUtil.createGuid(),\n type: 324,\n name: \"polygon\",\n action: \"add\", //add:添加 modify:修改或参数化创建\n click: \"true\",\n poleTexturePath: \"\",\n bannerTexturePath: \"\",\n selectable: 1,\n editable: 1,\n visible: true,\n desc: \"警戒线\", //对象描述信息\n } as any\n ) {\n return StampUtil.createElement(userdataObj);\n }\n createElementGuardLineParams(params: any) {\n if (!params.guid) {\n params.guid = StampUtil.createGuid();\n }\n const element_interface = StampUtil.getLibax().element_interface;\n if (StampUtil.createControlElementVisbile(params)) {\n //判断如果已存在,直接显示即可\n return new Promise((resolve) => {\n resolve(params);\n });\n }\n //需要将后台服务参数转为接口参数\n let paramObj = [\n {\n guid: params.guid || StampUtil.createGuid(), //params.id ||\n name: params.name || \"\",\n type: Number(params.type) || 324,\n action: \"modify\",\n columnRadius: params.columnRadius,\n columnHeight: params.columnHeight,\n bannerWidth: params.bannerWidth,\n bannerHeight: params.bannerHeight,\n selectable:\n params.selectable == undefined ? 1 : Number(params.selectable),\n editable: params.editable == undefined ? 1 : Number(params.editable),\n visible: params.visible == undefined || Number(params.visible),\n desc: params.description || \"\",\n poleTexturePath: params.poleTexturePath,\n bannerTexturePath: params.bannerTexturePath,\n },\n ] as any;\n const pointsArr = [];\n for (let i = 0; i < params.points.length; i++) {\n pointsArr.push(params.points[i].x);\n pointsArr.push(params.points[i].y);\n pointsArr.push(params.points[i].z);\n }\n paramObj = paramObj.concat(pointsArr);\n if (params.action == \"modify\") {\n element_interface.modify_element(paramObj);\n } else {\n element_interface.create_polygon_params(paramObj);\n }\n return StampUtil.createElementParams(paramObj[0], params);\n }\n /**\n *\n * @param param 插值间距, 距离dem距离, 折线点\n */\n calculatePolylineAddInterpolation(param: any) {\n const geometry_algorithm_interface =\n StampUtil.getLibax().geometry_algorithm_interface;\n return new Promise((resolve: any, reject: any) => {\n geometry_algorithm_interface.OnGeometryAlgorithmFinished = function (\n data: any\n ) {\n resolve(data);\n };\n geometry_algorithm_interface.calculate_polyline_add_interpolation(param);\n });\n }\n /**\n * 标绘:创建动态线\n */\n\n async createElementFlowline(\n userdataObj = {\n guid: StampUtil.createGuid(),\n type: 234,\n name: \"polygon\",\n action: \"add\", //add:添加 modify:修改\n speed: 1,\n split: 5,\n radius: 0.1,\n desc: \"动态线\", //对象描述信息\n selectable: 1,\n editable: 1,\n visible: true,\n texturePath: \"\",\n } as any\n ) {\n const result = (await StampUtil.createElement(userdataObj)) as any;\n result.action = \"modify\";\n result.points = result.rings[0].ring;\n if (result.points.length < 2) {\n return \"\";\n } else {\n if (result.shadow) {\n //贴地需要采样后重新创建\n await StampUtil.deleteElement(result.guid);\n result.action = \"add\"; //参数化创建\n result.guid = StampUtil.createGuid();\n result.samplingInterval = 2;\n result.height = 0.5;\n const resultFlowLine = await StampUtil.createElementFlowlineParams(\n result\n );\n return resultFlowLine;\n } else {\n return result;\n }\n }\n }\n /**\n * 参数化:创建流动线\n * @param params\n * @returns\n */\n async createElementFlowlineParams(params: any) {\n if (!params.guid) {\n params.guid = StampUtil.createGuid();\n }\n const element_interface = StampUtil.getLibax().element_interface;\n if (StampUtil.createControlElementVisbile(params)) {\n //判断如果已存在,直接显示即可\n return new Promise((resolve) => {\n resolve(params);\n });\n }\n //需要将后台服务参数转为接口参数\n let paramObj = [\n {\n guid: params.guid || StampUtil.createGuid(),\n name: params.name || \"\",\n type: Number(params.type) || STAMP_RTTI.SE_RTTI_ELEMENT_FLOW_LINE,\n action: \"modify\",\n speed: params.speed || 10,\n split: params.split || 8,\n radius: params.radius || 2,\n desc: params.description || \"\",\n linewidth: params.linewidth || 0.05,\n // shadow: params.shadow == undefined ? 1 : Number(params.shadow),\n selectable:\n params.selectable == undefined ? 1 : Number(params.selectable),\n editable: params.editable == undefined ? 1 : Number(params.editable),\n visible: params.visible == undefined || Number(params.visible),\n texturePath: params.texturePath,\n },\n ] as any;\n let cyPoints = params.points;\n if (params.shadow) {\n // 贴地(采样)\n const pointArr = [];\n for (let i = 0; i < params.points.length; i++) {\n pointArr.push(\n params.points[i].x,\n params.points[i].y,\n params.points[i].z\n );\n }\n cyPoints = await StampUtil.calculatePolylineAddInterpolation([\n params.samplingInterval || 2,\n params.height || 0.5,\n pointArr,\n ]);\n const cyPointObj = [] as any;\n for (let j = 0; j < cyPoints.Line.length; j++) {\n cyPointObj.push({\n x: cyPoints.Line[j][0],\n y: cyPoints.Line[j][1],\n z: cyPoints.Line[j][2],\n });\n }\n cyPoints = cyPointObj;\n }\n const pointsArr = [];\n for (let i = 0; i < cyPoints.length; i++) {\n pointsArr.push(cyPoints[i].x);\n pointsArr.push(cyPoints[i].y);\n pointsArr.push(cyPoints[i].z);\n }\n paramObj = paramObj.concat(pointsArr);\n if (params.action == \"modify\") {\n element_interface.modify_element(paramObj);\n } else {\n element_interface.create_polygon_params(paramObj);\n }\n return (await StampUtil.createElementParams(paramObj[0], params)) as any;\n }\n /**\n * 标绘:创建光晕线\n */\n createElementHaloWall(\n userdataObj = {\n guid: StampUtil.createGuid(),\n type: 328,\n name: \"halowall\",\n action: \"add\", //add:添加 modify:修改\n radius: 1,\n color: \"#ffff0000\",\n factor: 250,\n shadow: 1,\n desc: \"光晕线\", //对象描述信息\n selectable: 1,\n editable: 1,\n visible: true,\n drawOrder: 1, //渲染顺序\n } as any\n ) {\n return new Promise((resolve) => {\n this.createPolyline(\n {\n lineWidth: 2,\n lineColor: 0xffff0000,\n },\n null\n ).then((res: any) => {\n if (!res || !res.Points) {\n return;\n }\n const params = [userdataObj];\n const points = [];\n for (let i = 0; i < res.Points.length; i++) {\n points.push({\n x: res.Points[i].X,\n y: res.Points[i].Y,\n z: res.Points[i].Z,\n });\n params.push(res.Points[i].X, res.Points[i].Y, res.Points[i].Z);\n }\n const element_interface = StampAPI.LibAx.element_interface(\n StampUtil.getLibax()\n );\n element_interface.OldOnAdded = element_interface.OnAdded;\n element_interface.OnAdded = (data: any) => {\n element_interface.OnAdded = element_interface.OldOnAdded;\n resolve(data);\n };\n element_interface.create_halo_wall_params(params);\n userdataObj.points = points;\n StampUtil.addToUserDataArr(userdataObj);\n });\n });\n }\n /**\n * 参数化:创建光晕线\n * @param params\n * @returns\n */\n createElementHaloWallParams(params: any) {\n if (!params.guid) {\n params.guid = StampUtil.createGuid();\n }\n const element_interface = StampUtil.getLibax().element_interface;\n if (StampUtil.createControlElementVisbile(params)) {\n //判断如果已存在,直接显示即可\n return new Promise((resolve) => {\n resolve(params);\n });\n }\n //需要将后台服务参数转为接口参数\n let paramObj = [\n {\n guid: params.guid || StampUtil.createGuid(),\n name: params.name || \"\",\n type: Number(params.type) || STAMP_RTTI.SE_RTTI_ELEMENT_HALO_WALL,\n action: \"modify\",\n color: params.color || \"#ffff0000\",\n shadow: params.shadow == undefined ? 1 : Number(params.shadow),\n radius: params.radius || 1,\n factor: params.factor || 250,\n desc: params.description || \"\",\n selectable:\n params.selectable == undefined ? 1 : Number(params.selectable),\n editable: params.editable == undefined ? 1 : Number(params.editable),\n visible: params.visible == undefined || Number(params.visible),\n drawOrder: 1, //渲染顺序\n },\n ] as any;\n const pointsArr = [];\n for (let i = 0; i < params.points.length; i++) {\n pointsArr.push(params.points[i].x);\n pointsArr.push(params.points[i].y);\n pointsArr.push(params.points[i].z);\n }\n paramObj = paramObj.concat(pointsArr);\n if (params.action == \"modify\") {\n element_interface.modify_element(paramObj);\n } else {\n element_interface.create_halo_wall_params(paramObj);\n }\n return StampUtil.createElementParams(paramObj[0], params);\n }\n /**\n * 标绘:创建动态水面\n */\n createElementDynamicWater(\n userdataObj = {\n guid: StampUtil.createGuid(),\n type: STAMP_RTTI.SE_RTTI_ELEMENT_WATER,\n name: \"polygon\",\n action: \"add\", //add:添加 modify:修改\n fillcolor: 0xcc0d331e,\n waterWave: 8,\n waterSpeedX: 1.0,\n waterSpeedY: 2.0,\n waterSpeedZ: 3.0,\n desc: \"\", //对象描述信息\n selectable: 1,\n editable: 1,\n }\n ) {\n userdataObj.fillcolor = 0xcc0d331e;\n return StampUtil.createElement(userdataObj);\n }\n createElementDynamicWaterParams(params: any) {\n if (!params.guid) {\n params.guid = StampUtil.createGuid();\n }\n const element_interface = StampUtil.getLibax().element_interface;\n if (StampUtil.createControlElementVisbile(params)) {\n //判断如果已存在,直接显示即可\n return new Promise((resolve) => {\n resolve(params);\n });\n }\n //需要将后台服务参数转为接口参数\n let paramObj = [\n {\n guid: params.guid || StampUtil.createGuid(), //params.id ||\n name: params.name || \"\",\n type: Number(params.type) || STAMP_RTTI.SE_RTTI_ELEMENT_WATER,\n action: \"modify\",\n fillcolor: 0xcc0d331e, //params.fillcolor,\n waterWave: 8,\n waterSpeedX: 1.0,\n waterSpeedY: 2.0,\n waterSpeedZ: 3.0,\n // waterWave: params.waterWave,\n // waterSpeedX: params.waterSpeedX,\n // waterSpeedY: params.waterSpeedY,\n // waterSpeedZ: params.waterSpeedZ,\n selectable:\n params.selectable == undefined ? 1 : Number(params.selectable),\n editable: params.editable == undefined ? 1 : Number(params.editable),\n visible: params.visible == undefined || Number(params.visible),\n },\n ] as any;\n const pointsArr = [];\n for (let i = 0; i < params.points.length; i++) {\n pointsArr.push(params.points[i].x);\n pointsArr.push(params.points[i].y);\n pointsArr.push(params.points[i].z);\n }\n paramObj = paramObj.concat(pointsArr);\n if (params.action == \"modify\") {\n element_interface.modify_element(paramObj);\n } else {\n element_interface.create_polygon_params(paramObj);\n }\n return StampUtil.createElementParams(paramObj[0], params);\n }\n\n // 标绘:创建符号标注\n createIcon(\n params = {\n guid: StampUtil.createGuid(),\n name: \"\",\n type: 209,\n action: \"add\",\n NormalUrl: \"\",\n HighlightUrl: \"\",\n Text: \"icon\",\n RenderMode: 0,\n TextFormat: 0x100,\n ShowHandle: 0,\n HandleType: 0,\n HandleHeight: 2,\n BackgroundColor: 0xccff0000,\n FrameColor: 0xccff0000,\n HandleColor: 0xccffff00,\n TextColor: 0xccffff00,\n TextHorizontalScale: 1.0,\n TextVerticalScale: 1.0,\n ShowBackground: 0,\n ShowFrame: 0,\n Separator: \"\",\n LineSize: 20,\n selectable: 1,\n editable: 1,\n FontSize: 16,\n FontIsTop: false,\n }\n ) {\n params.LineSize = params.LineSize || 20;\n return StampUtil.createElement(params);\n }\n\n createIconParams(params: any) {\n if (!params.guid) {\n params.guid = StampUtil.createGuid();\n }\n const element_interface = StampUtil.getLibax().element_interface;\n if (StampUtil.createControlElementVisbile(params)) {\n //判断如果已存在,直接显示即可\n return new Promise((resolve) => {\n resolve(params);\n });\n }\n //需要将后台服务参数转为接口参数\n const paramObj = [\n {\n guid: params.guid || StampUtil.createGuid(), //params.id ||\n name: params.name?.toString() || \"\",\n type: Number(params.type) || 209,\n action: params.action || \"modify\",\n NormalUrl: params.NormalUrl || \"\",\n HighlightUrl: params.HighlightUrl || \"\",\n Text: params.Text || params.text || \"\",\n RenderMode: params.RenderMode || 0,\n TextFormat: params.TextFormat || 0x100,\n ShowHandle: params.ShowHandle || 0,\n HandleType: params.HandleType || 0,\n HandleHeight: params.HandleHeight || params.handleheight || 2,\n HandleColor: params.HandleColor || 0xccffffff,\n TextColor: params.TextColor || 0xccffffff,\n TextHorizontalScale: Number(params.TextHorizontalScale) || 1.0,\n TextVerticalScale: Number(params.TextVerticalScale) || 1.0,\n ShowBackground: params.ShowBackground || 0,\n ShowFrame: params.ShowFrame || 0,\n BackgroundColor: params.BackgroundColor || 0xccffffff,\n FrameColor: params.FrameColor || 0xccffffff,\n Separator: params.Separator || \"\",\n selectable:\n params.selectable == undefined ? 1 : Number(params.selectable),\n editable: params.editable == undefined ? 1 : Number(params.editable),\n LineSize: params.LineSize == 0 ? 0 : params.LineSize || 100,\n FontStyle: params.FontStyle || \"Black\", //默认黑体\n FontSize: params.FontSize || 16, //默认大小10\n FontIsTop: params.FontIsTop || false, //默认在右侧\n visible: params.visible == undefined ? true : params.visible,\n intersectable: params.intersectable || false, //是否可相交,默认不可相交\n CanvasTexture: params.CanvasTexture || null, //canvas纹理\n CanvasWidth: params.CanvasWidth || 256,\n CanvasHeight: params.CanvasHeight || 256,\n IsOcclusionTest: params.IsOcclusionTest || false, //是否开启遮挡测试,默认不开启\n IconWidth: params.IconWidth,\n IconHeight: params.IconHeight,\n //字体:\n //\"Regular\"\n //\"Italic\"\n //\"Bold\"\n //\"BoldItalic\"\n //\"BoldCondensed\"\n //\"BoldCondensedItalic\"\n //\"Black\"\n //\"BlackItalic\"\n //\"Medium\"\n //\"Light\"\n //\"VeryLight\"\n //\"Mono\"\n },\n params.points[0].x,\n params.points[0].y,\n params.points[0].z,\n 0,\n 0,\n 0,\n 1,\n 1,\n 1,\n ] as any;\n params.rotaion = {\n x: 0,\n y: 0,\n z: 0,\n };\n params.scale = {\n x: 1,\n y: 1,\n z: 1,\n };\n // if (params.canvasData) {\n // paramObj[0].CanvasTexture = params.canvasData;\n // }\n\n // if(params.CanvasWidth){\n // paramObj[0].CanvasWidth = params.CanvasWidth;\n // }\n\n // if(params.CanvasHeight){\n // paramObj[0].CanvasHeight = params.CanvasHeight;\n // }\n\n if (params.action == \"modify\") {\n element_interface.modify_element(paramObj);\n } else {\n element_interface.create_icon_params(paramObj);\n }\n element_interface.visible_range_element([paramObj[0].guid, 0, 1000]);\n return StampUtil.createElementParams(paramObj[0], params);\n }\n\n /**\n * 创建广告牌\n * @param param\n * @returns\n */\n createAdvertisingBoard(\n params: any = {\n action: \"add\",\n BoardWidth: 256,\n BoardHeight: 256,\n HandleHeight: 2,\n ShowHandle: false,\n ShowFrame: false,\n BackgroundColor: 0xffffffee,\n Items: [\n {\n StartPosX: 5,\n StartPosY: 5,\n Text: \"\",\n TextColor: 0xffff0000,\n TextSize: 20,\n Font: \"Bold\",\n },\n ],\n }\n ) {\n return new Promise((resolve) => {\n const shape_creator_interface =\n StampUtil.getLibax().shape_creator_interface;\n shape_creator_interface.OnShapeCreated = (data: any) => {\n shape_creator_interface.OnShapeCreated = null;\n shape_creator_interface.clear();\n params.points = [\n {\n x: data.Longitude,\n y: data.Latitude,\n z: data.Altitude,\n },\n ];\n StampUtil.createAdvertisingBoardParams(params).then((res) => {\n resolve(params);\n });\n };\n shape_creator_interface.create_point();\n });\n }\n /**\n * 标绘:参数化创建广告牌\n * @param params\n * @returns\n */\n createAdvertisingBoardParams(\n params: any = {\n action: \"add\",\n BoardWidth: 256,\n BoardHeight: 256,\n HandleHeight: 2,\n ShowHandle: false,\n ShowFrame: false,\n BackgroundColor: 0xffffffee,\n Items: [\n {\n StartPosX: 5,\n StartPosY: 5,\n Text: \"\",\n TextColor: 0xffff0000,\n TextSize: 20,\n Font: \"Bold\",\n },\n ],\n points: [\n {\n x: 0,\n y: 0,\n z: 0,\n },\n ],\n }\n ) {\n if (!params.guid) {\n params.guid = StampUtil.createGuid();\n }\n const element_interface = StampUtil.getLibax().element_interface;\n if (StampUtil.createControlElementVisbile(params)) {\n //判断如果已存在,直接显示即可\n return new Promise((resolve) => {\n resolve(params);\n });\n }\n const textArr = params.Items;\n const advertising_board_parameter = {\n BoardWidth: parseFloat(params.BoardWidth) || 256, //宽度px\n BoardHeight: parseFloat(params.BoardHeight) || 256, //高度px\n RenderMode: 1,\n HandleHeight: parseFloat(params.HandleHeight) || 20, //扯线高度\n ShowHandle: !!params.ShowHandle, //是否显示扯线\n ShowFrame: !!params.ShowFrame, //是否显示边框\n BackgroundColor: params.BackgroundColor || 0x80101010, //背景颜色,默认白色,不知道为啥不能用0xffffffff\n Items: [] as Array<any>, //显示内容\n };\n if (textArr && textArr.length > 0) {\n for (let i = 0; i < textArr.length; i++) {\n advertising_board_parameter.Items.push({\n Type: 0, //0:文字\n StartPosX: textArr[i].StartPosX || 5, //显示位置X\n StartPosY: textArr[i].StartPosY || 5, //显示位置Y\n Text: textArr[i].Text || \"\", //显示文字\n TextColor: textArr[i].TextColor || 0xccffffff, //文字颜色,默认红色\n TextSize: textArr[i].TextSize || 20, //文字大小\n TextMode: 1,\n Font: textArr[i].Font || \"Bold\", //文字样式\n });\n }\n }\n const paramObj = [\n {\n type: Number(params.type) || 237,\n name: params.name || \"adver\",\n guid: params.guid || StampUtil.createGuid(),\n selectable:\n params.selectable == undefined ? 1 : Number(params.selectable),\n editable: params.editable == undefined ? 1 : Number(params.editable),\n action: \"modify\",\n params: JSON.stringify(advertising_board_parameter),\n },\n params.points[0].x,\n params.points[0].y,\n params.points[0].z,\n 0,\n 0,\n 0,\n 1,\n 1,\n 1,\n ];\n\n if (params.action == \"modify\") {\n element_interface.modify_element(paramObj);\n } else {\n element_interface.create_advertising_board_params(paramObj);\n }\n return StampUtil.createElementParams(paramObj[0], params);\n }\n /**\n * 晕渲图\n * @param userdataObj\n * @returns\n */\n createOceanGrid(userdataObj: any) {\n const paramObj = [\n {\n guid: StampUtil.createGuid(),\n type: STAMP_RTTI.SE_RTTI_ELEMENT_GRID,\n name: \"element_grid\",\n action: \"add\", //add:添加 modify:修改\n selectable: 0,\n editable: 0,\n visible: 1,\n dataPath:\n \"e:\\\\PRD\\\\StampUE\\\\root\\\\ocen\\\\CA20201229\\\\final\\\\CA20201229.meta\",\n minLevel: 3,\n maxLevel: 18,\n altitude: 0,\n altitudeScale: 1000,\n loadTableName: userdataObj.loadTableName || \"THETA\",\n loadLayerIndex: userdataObj.loadLayerIndex || 0,\n },\n ];\n return StampUtil.createElement(paramObj[0]);\n }\n /**\n * 参数创建晕渲图\n * @param userdataObj\n * @returns\n */\n createOceanGridParams(params: any) {\n if (!params.guid) {\n params.guid = StampUtil.createGuid();\n }\n const element_interface = StampUtil.getLibax().element_interface;\n if (StampUtil.createControlElementVisbile(params)) {\n //判断如果已存在,直接显示即可\n return new Promise((resolve) => {\n resolve(params);\n });\n }\n //需要将后台服务参数转为接口参数\n const paramObj = [\n {\n guid: params.guid,\n name: params.name || \"\",\n type: Number(params.type) || STAMP_RTTI.SE_RTTI_ELEMENT_GRID,\n desc: params.description || \"\",\n action: \"modify\",\n selectable:\n params.selectable == undefined ? 1 : Number(params.selectable),\n editable: params.editable == undefined ? 1 : Number(params.editable),\n drawOrder: Number(params.drawOrder) || 0,\n visible: params.visible == undefined || Number(params.visible),\n dataPath:\n \"e:\\\\PRD\\\\StampUE\\\\root\\\\ocen\\\\CA20201229\\\\final\\\\CA20201229.meta\",\n minLevel: 3,\n maxLevel: 18,\n altitude: 0,\n altitudeScale: 1000,\n loadTableName: params.loadTableName || \"THETA\",\n loadLayerIndex: params.loadLayerIndex || 0,\n },\n ] as any;\n\n if (params.action == \"modify\") {\n element_interface.modify_element(paramObj);\n } else {\n element_interface.create_polygon_params(paramObj);\n }\n return StampUtil.createElementParams(paramObj[0], params);\n }\n /**\n * 洋流\n * @param userdataObj\n * @returns\n */\n createOceanCurrent(params: any) {\n const userdataObj = {\n type: STAMP_RTTI.SE_RTTI_ELEMENT_CURRENT,\n name: \"element_ocean_current\",\n guid: StampUtil.createGuid(),\n action: \"add\",\n selectable: 0,\n editable: 0,\n visible: 1,\n dataPath:\n \"e:\\\\PRD\\\\StampUE\\\\root\\\\ocen\\\\CA20201229_Speed\\\\final\\\\CA20201229.meta\",\n minLevel: 3,\n maxLevel: 15,\n altitude: 70,\n altitudeScale: 10,\n particleSize: 65536,\n speedFactor: 180,\n is_2d: false,\n loadTableName: \"Speed\",\n customMinValue: 0.0,\n customMaxValue: 0.00007,\n } as any;\n\n if (userdataObj.is_2d) {\n userdataObj.loadLayerIndex = 0;\n } else {\n userdataObj.loadLayerStart = 0;\n userdataObj.loadLayerEnd = 49;\n }\n userdataObj.use_clip_rect = true;\n userdataObj.use_depth_mode = true;\n\n return StampUtil.createElement(userdataObj);\n }\n\n /**\n * 参数创建洋流\n * @param userdataObj\n * @returns\n */\n createOceanCurrentParams(params: any) {\n if (!params.guid) {\n params.guid = StampUtil.createGuid();\n }\n const element_interface = StampUtil.getLibax().element_interface;\n if (StampUtil.createControlElementVisbile(params)) {\n //判断如果已存在,直接显示即可\n return new Promise((resolve) => {\n resolve(params);\n });\n }\n //需要将后台服务参数转为接口参数\n const paramObj = [\n {\n guid: params.guid,\n name: params.name || \"\",\n type: Number(params.type) || STAMP_RTTI.SE_RTTI_ELEMENT_CURRENT,\n desc: params.description || \"\",\n action: \"modify\",\n selectable:\n params.selectable == undefined ? 1 : Number(params.selectable),\n editable: params.editable == undefined ? 1 : Number(params.editable),\n drawOrder: Number(params.drawOrder) || 0,\n visible: params.visible == undefined || Number(params.visible),\n dataPath:\n \"e:\\\\PRD\\\\StampUE\\\\root\\\\ocen\\\\CA20201229_Speed\\\\final\\\\CA20201229.meta\",\n minLevel: 3,\n maxLevel: 15,\n altitude: 70,\n altitudeScale: 10,\n particleSize: 65536,\n speedFactor: 180,\n is_2d: params.is_2d || false,\n loadTableName: \"Speed\",\n customMinValue: 0.0,\n customMaxValue: 0.00007,\n },\n ] as any;\n if (paramObj.is_2d) {\n paramObj.loadLayerIndex = 0;\n } else {\n paramObj.loadLayerStart = 0;\n paramObj.loadLayerEnd = 49;\n }\n paramObj.use_clip_rect = true;\n paramObj.use_depth_mode = true;\n if (params.action == \"modify\") {\n element_interface.modify_element(paramObj);\n } else {\n element_interface.create_polygon_params(paramObj);\n }\n return StampUtil.createElementParams(paramObj[0], params);\n }\n //#endregion\n\n //#region 军事标绘\n /* \n 标绘:创建简单箭头\n */\n createElementsArrow(\n userdataObj = {\n guid: StampUtil.createGuid(),\n type: 250,\n name: \"sArrow\",\n action: \"add\", //add:添加 modify:修改\n click: \"true\",\n desc: \"简单箭头\", //对象描述信息\n linewidth: 1,\n linecolor: \"#CCFFFF00\", //填充色:前两位是透明度,后面6位是填充色\n fillcolor: \"#CCFF0000\",\n shadow: 1, //渲染模式 0:正常 1:贴地 5:贴模型\n selectable: 1,\n editable: 1,\n drawOrder: 1, //渲染顺序\n }\n ) {\n return StampUtil.createElement(userdataObj);\n }\n createElementsArrowParams(params: any) {\n if (!params.guid) {\n params.guid = StampUtil.createGuid();\n }\n const element_interface = StampUtil.getLibax().element_interface;\n if (StampUtil.createControlElementVisbile(params)) {\n //判断如果已存在,直接显示即可\n return new Promise((resolve) => {\n resolve(params);\n });\n }\n //需要将后台服务参数转为接口参数\n let paramObj = [\n {\n guid: params.guid || StampUtil.createGuid(), //params.id ||\n name: params.name || \"\",\n type: Number(params.type) || 250,\n desc: params.description || \"\",\n linewidth: params.linewidth || 1,\n linecolor: params.linecolor || \"#CCFFFF00\",\n fillcolor: params.fillcolor || \"#CCFF0000\",\n action: \"modify\",\n shadow: params.shadow == undefined ? 1 : Number(params.shadow),\n selectable:\n params.selectable == undefined ? 1 : Number(params.selectable),\n editable: params.editable == undefined ? 1 : Number(params.editable),\n drawOrder: Number(params.drawOrder),\n visible: params.visible == undefined || Number(params.visible),\n },\n ] as any;\n const pointsArr = [];\n for (let i = 0; i < params.points.length; i++) {\n pointsArr.push(params.points[i].x);\n pointsArr.push(params.points[i].y);\n pointsArr.push(params.points[i].z);\n }\n paramObj = paramObj.concat(pointsArr);\n if (params.action == \"modify\") {\n element_interface.modify_element(paramObj);\n } else {\n element_interface.create_polygon_params(paramObj);\n }\n return StampUtil.createElementParams(paramObj[0], params);\n }\n /* \n 标绘:创建直箭头\n */\n createElementequalSArrow(\n userdataObj = {\n guid: StampUtil.createGuid(),\n type: 251,\n name: \"equalSArrow\",\n action: \"add\", //add:添加 modify:修改\n click: \"true\",\n desc: \"直箭头\", //对象描述信息\n linewidth: 1,\n linecolor: \"#CCFFFF00\", //填充色:前两位是透明度,后面6位是填充色\n fillcolor: \"#CCFF0000\",\n shadow: 1, //渲染模式 0:正常 1:贴地 5:贴模型\n selectable: 1,\n editable: 1,\n drawOrder: 1, //渲染顺序\n }\n ) {\n return StampUtil.createElement(userdataObj);\n }\n createElementequalSArrowParams(params: any) {\n if (!params.guid) {\n params.guid = StampUtil.createGuid();\n }\n const element_interface = StampUtil.getLibax().element_interface;\n if (StampUtil.createControlElementVisbile(params)) {\n //判断如果已存在,直接显示即可\n return new Promise((resolve) => {\n resolve(params);\n });\n }\n //需要将后台服务参数转为接口参数\n let paramObj = [\n {\n guid: params.guid || StampUtil.createGuid(), //params.id ||\n name: params.name || \"\",\n type: Number(params.type) || 251,\n desc: params.description || \"\",\n linewidth: params.linewidth || 1,\n linecolor: params.linecolor || \"#CCFFFF00\",\n fillcolor: params.fillcolor || \"#CCFF0000\",\n action: \"modify\",\n shadow: params.shadow == undefined ? 1 : Number(params.shadow),\n selectable:\n params.selectable == undefined ? 1 : Number(params.selectable),\n editable: params.editable == undefined ? 1 : Number(params.editable),\n drawOrder: Number(params.drawOrder),\n visible: params.visible == undefined || Number(params.visible),\n },\n ] as any;\n const pointsArr = [];\n for (let i = 0; i < params.points.length; i++) {\n pointsArr.push(params.points[i].x);\n pointsArr.push(params.points[i].y);\n pointsArr.push(params.points[i].z);\n }\n paramObj = paramObj.concat(pointsArr);\n if (params.action == \"modify\") {\n element_interface.modify_element(paramObj);\n } else {\n element_interface.create_polygon_params(paramObj);\n }\n return StampUtil.createElementParams(paramObj[0], params);\n }\n /* \n 标绘:创建燕尾箭头\n */\n createElementtailSArrow(\n userdataObj = {\n guid: StampUtil.createGuid(),\n type: 252,\n name: \"tailSArrow\",\n action: \"add\", //add:添加 modify:修改\n click: \"true\",\n desc: \"燕尾箭头\", //对象描述信息\n linewidth: 1,\n linecolor: \"#CCFFFF00\", //填充色:前两位是透明度,后面6位是填充色\n fillcolor: \"#CCFF0000\",\n shadow: 1, //渲染模式 0:正常 1:贴地 5:贴模型\n selectable: 1,\n editable: 1,\n drawOrder: 1, //渲染顺序\n }\n ) {\n return StampUtil.createElement(userdataObj);\n }\n createElementtailSArrowParams(params: any) {\n if (!params.guid) {\n params.guid = StampUtil.createGuid();\n }\n const element_interface = StampUtil.getLibax().element_interface;\n if (StampUtil.createControlElementVisbile(params)) {\n //判断如果已存在,直接显示即可\n return new Promise((resolve) => {\n resolve(params);\n });\n }\n //需要将后台服务参数转为接口参数\n let paramObj = [\n {\n guid: params.guid || StampUtil.createGuid(), //params.id ||\n name: params.name || \"\",\n type: Number(params.type) || 252,\n desc: params.description || \"\",\n linewidth: params.linewidth || 1,\n linecolor: params.linecolor || \"#CCFFFF00\",\n fillcolor: params.fillcolor || \"#CCFF0000\",\n action: \"modify\",\n shadow: params.shadow == undefined ? 1 : Number(params.shadow),\n selectable:\n params.selectable == undefined ? 1 : Number(params.selectable),\n editable: params.editable == undefined ? 1 : Number(params.editable),\n drawOrder: Number(params.drawOrder),\n visible: params.visible == undefined || Number(params.visible),\n },\n ] as any;\n const pointsArr = [];\n for (let i = 0; i < params.points.length; i++) {\n pointsArr.push(params.points[i].x);\n pointsArr.push(params.points[i].y);\n pointsArr.push(params.points[i].z);\n }\n paramObj = paramObj.concat(pointsArr);\n if (params.action == \"modify\") {\n element_interface.modify_element(paramObj);\n } else {\n element_interface.create_polygon_params(paramObj);\n }\n return StampUtil.createElementParams(paramObj[0], params);\n }\n /* \n 标绘:创建自定义箭头\n */\n createElementcustomArrow(\n userdataObj = {\n guid: StampUtil.createGuid(),\n type: 253,\n name: \"customArrow\",\n action: \"add\", //add:添加 modify:修改\n click: \"true\",\n desc: \"自定义箭头\", //对象描述信息\n linewidth: 1,\n linecolor: \"#CCFFFF00\", //填充色:前两位是透明度,后面6位是填充色\n fillcolor: \"#CCFF0000\",\n shadow: 1, //渲染模式 0:正常 1:贴地 5:贴模型\n selectable: 1,\n editable: 1,\n drawOrder: 1, //渲染顺序\n }\n ) {\n return StampUtil.createElement(userdataObj);\n }\n createElementcustomArrowParams(params: any) {\n if (!params.guid) {\n params.guid = StampUtil.createGuid();\n }\n const element_interface = StampUtil.getLibax().element_interface;\n if (StampUtil.createControlElementVisbile(params)) {\n //判断如果已存在,直接显示即可\n return new Promise((resolve) => {\n resolve(params);\n });\n }\n //需要将后台服务参数转为接口参数\n let paramObj = [\n {\n guid: params.guid || StampUtil.createGuid(), //params.id ||\n name: params.name || \"\",\n type: Number(params.type) || 253,\n desc: params.description || \"\",\n linewidth: params.linewidth || 1,\n linecolor: params.linecolor || \"#CCFFFF00\",\n fillcolor: params.fillcolor || \"#CCFF0000\",\n action: \"modify\",\n shadow: params.shadow == undefined ? 1 : Number(params.shadow),\n selectable:\n params.selectable == undefined ? 1 : Number(params.selectable),\n editable: params.editable == undefined ? 1 : Number(params.editable),\n drawOrder: Number(params.drawOrder),\n visible: params.visible == undefined || Number(params.visible),\n },\n ] as any;\n const pointsArr = [];\n for (let i = 0; i < params.points.length; i++) {\n pointsArr.push(params.points[i].x);\n pointsArr.push(params.points[i].y);\n pointsArr.push(params.points[i].z);\n }\n paramObj = paramObj.concat(pointsArr);\n if (params.action == \"modify\") {\n element_interface.modify_element(paramObj);\n } else {\n element_interface.create_polygon_params(paramObj);\n }\n return StampUtil.createElementParams(paramObj[0], params);\n }\n /* \n 标绘:创建自定义燕尾箭头\n */\n createElementcustomTailArrow(\n userdataObj = {\n guid: StampUtil.createGuid(),\n type: 254,\n name: \"customTailArrow\",\n action: \"add\", //add:添加 modify:修改\n click: \"true\",\n desc: \"自定义燕尾箭头\", //对象描述信息\n linewidth: 1,\n linecolor: \"#CCFFFF00\", //填充色:前两位是透明度,后面6位是填充色\n fillcolor: \"#CCFF0000\",\n shadow: 1, //渲染模式 0:正常 1:贴地 5:贴模型\n selectable: 1,\n editable: 1,\n drawOrder: 1, //渲染顺序\n }\n ) {\n return StampUtil.createElement(userdataObj);\n }\n createElementcustomTailArrowParams(params: any) {\n if (!params.guid) {\n params.guid = StampUtil.createGuid();\n }\n const element_interface = StampUtil.getLibax().element_interface;\n if (StampUtil.createControlElementVisbile(params)) {\n //判断如果已存在,直接显示即可\n return new Promise((resolve) => {\n resolve(params);\n });\n }\n //需要将后台服务参数转为接口参数\n let paramObj = [\n {\n guid: params.guid || StampUtil.createGuid(), //params.id ||\n name: params.name || \"\",\n type: Number(params.type) || 254,\n desc: params.description || \"\",\n linewidth: params.linewidth || 1,\n linecolor: params.linecolor || \"#CCFFFF00\",\n fillcolor: params.fillcolor || \"#CCFF0000\",\n action: \"modify\",\n shadow: params.shadow == undefined ? 1 : Number(params.shadow),\n selectable:\n params.selectable == undefined ? 1 : Number(params.selectable),\n editable: params.editable == undefined ? 1 : Number(params.editable),\n drawOrder: Number(params.drawOrder),\n visible: params.visible == undefined || Number(params.visible),\n },\n ] as any;\n const pointsArr = [];\n for (let i = 0; i < params.points.length; i++) {\n pointsArr.push(params.points[i].x);\n pointsArr.push(params.points[i].y);\n pointsArr.push(params.points[i].z);\n }\n paramObj = paramObj.concat(pointsArr);\n if (params.action == \"modify\") {\n element_interface.modify_element(paramObj);\n } else {\n element_interface.create_polygon_params(paramObj);\n }\n return StampUtil.createElementParams(paramObj[0], params);\n }\n /* \n 标绘:创建双箭头\n */\n createElementdoubleArrow(\n userdataObj = {\n guid: StampUtil.createGuid(),\n type: 255,\n name: \"doubleArrow\",\n action: \"add\", //add:添加 modify:修改\n click: \"true\",\n desc: \"自定义双箭头\", //对象描述信息\n linewidth: 1,\n linecolor: \"#CCFFFF00\", //填充色:前两位是透明度,后面6位是填充色\n fillcolor: \"#CCFF0000\",\n shadow: 1, //渲染模式 0:正常 1:贴地 5:贴模型\n selectable: true,\n editable: true,\n drawOrder: 1, //渲染顺序\n }\n ) {\n return StampUtil.createElement(userdataObj);\n }\n createElementdoubleArrowParams(params: any) {\n if (!params.guid) {\n params.guid = StampUtil.createGuid();\n }\n const element_interface = StampUtil.getLibax().element_interface;\n if (StampUtil.createControlElementVisbile(params)) {\n //判断如果已存在,直接显示即可\n return new Promise((resolve) => {\n resolve(params);\n });\n }\n //需要将后台服务参数转为接口参数\n let paramObj = [\n {\n guid: params.guid || StampUtil.createGuid(), //params.id ||\n name: params.name || \"\",\n type: Number(params.type) || 255,\n desc: params.description || \"\",\n linewidth: params.linewidth || 1,\n linecolor: params.linecolor || \"#CCFFFF00\",\n fillcolor: params.fillcolor || \"#CCFF0000\",\n action: \"modify\",\n shadow: params.shadow == undefined ? 1 : Number(params.shadow),\n selectable:\n params.selectable == undefined ? 1 : Number(params.selectable),\n editable: params.editable == undefined ? 1 : Number(params.editable),\n drawOrder: Number(params.drawOrder),\n visible: params.visible == undefined || Number(params.visible),\n },\n ] as any;\n const pointsArr = [];\n for (let i = 0; i < params.points.length; i++) {\n pointsArr.push(params.points[i].x);\n pointsArr.push(params.points[i].y);\n pointsArr.push(params.points[i].z);\n }\n paramObj = paramObj.concat(pointsArr);\n if (params.action == \"modify\") {\n element_interface.modify_element(paramObj);\n } else {\n element_interface.create_polygon_params(paramObj);\n }\n return StampUtil.createElementParams(paramObj[0], params);\n }\n /* \n 标绘:创建多箭头\n */\n createElementxArrow(\n userdataObj = {\n guid: StampUtil.createGuid(),\n type: 256,\n name: \"xArrow\",\n action: \"add\", //add:添加 modify:修改\n click: \"true\",\n desc: \"多箭头\", //对象描述信息\n linewidth: 1,\n linecolor: \"#CCFFFF00\", //填充色:前两位是透明度,后面6位是填充色\n fillcolor: \"#CCFF0000\",\n shadow: 1, //渲染模式 0:正常 1:贴地 5:贴模型\n selectable: true,\n editable: true,\n drawOrder: 1, //渲染顺序\n }\n ) {\n return StampUtil.createElement(userdataObj);\n }\n createElementxArrowParams(params: any) {\n if (!params.guid) {\n params.guid = StampUtil.createGuid();\n }\n const element_interface = StampUtil.getLibax().element_interface;\n if (StampUtil.createControlElementVisbile(params)) {\n //判断如果已存在,直接显示即可\n return new Promise((resolve) => {\n resolve(params);\n });\n }\n //需要将后台服务参数转为接口参数\n let paramObj = [\n {\n guid: params.guid || StampUtil.createGuid(), //params.id ||\n name: params.name || \"\",\n type: Number(params.type) || 256,\n desc: params.description || \"\",\n linewidth: params.linewidth || 1,\n linecolor: params.linecolor || \"#CCFFFF00\",\n fillcolor: params.fillcolor || \"#CCFF0000\",\n action: \"modify\",\n shadow: params.shadow == undefined ? 1 : Number(params.shadow),\n selectable:\n params.selectable == undefined ? 1 : Number(params.selectable),\n editable: params.editable == undefined ? 1 : Number(params.editable),\n drawOrder: Number(params.drawOrder),\n visible: params.visible == undefined || Number(params.visible),\n },\n ] as any;\n const pointsArr = [];\n for (let i = 0; i < params.points.length; i++) {\n pointsArr.push(params.points[i].x);\n pointsArr.push(params.points[i].y);\n pointsArr.push(params.points[i].z);\n }\n paramObj = paramObj.concat(pointsArr);\n if (params.action == \"modify\") {\n element_interface.modify_element(paramObj);\n } else {\n element_interface.create_polygon_params(paramObj);\n }\n return StampUtil.createElementParams(paramObj[0], params);\n }\n /* \n 标绘:创建集结地域\n */\n createElementassemblyArea(\n userdataObj = {\n guid: StampUtil.createGuid(),\n type: 260,\n name: \"assemblyArea\",\n action: \"add\", //add:添加 modify:修改\n click: \"true\",\n desc: \"集结地域\", //对象描述信息\n linewidth: 1,\n linecolor: \"#CCFFFF00\", //填充色:前两位是透明度,后面6位是填充色\n fillcolor: \"#CCFF0000\",\n selectable: true,\n editable: true,\n shadow: 1,\n drawOrder: 1, //渲染顺序\n }\n ) {\n return StampUtil.createElement(userdataObj);\n }\n createElementassemblyAreaParams(params: any) {\n if (!params.guid) {\n params.guid = StampUtil.createGuid();\n }\n\n const element_interface = StampUtil.getLibax().element_interface;\n if (StampUtil.createControlElementVisbile(params)) {\n //判断如果已存在,直接显示即可\n return new Promise((resolve) => {\n resolve(params);\n });\n }\n //需要将后台服务参数转为接口参数\n let paramObj = [\n {\n guid: params.guid || StampUtil.createGuid(), //params.id ||\n name: params.name || \"\",\n type: Number(params.type) || 260,\n desc: params.description || \"\",\n linewidth: params.linewidth || 1,\n linecolor: params.linecolor || \"#CCFFFF00\",\n fillcolor: params.fillcolor || \"#CCFF0000\",\n action: \"modify\",\n shadow: params.shadow == undefined ? 1 : Number(params.shadow),\n selectable:\n params.selectable == undefined ? 1 : Number(params.selectable),\n editable: params.editable == undefined ? 1 : Number(params.editable),\n drawOrder: Number(params.drawOrder),\n visible: params.visible == undefined || Number(params.visible),\n },\n ] as any;\n const pointsArr = [];\n for (let i = 0; i < params.points.length; i++) {\n pointsArr.push(params.points[i].x);\n pointsArr.push(params.points[i].y);\n pointsArr.push(params.points[i].z);\n }\n paramObj = paramObj.concat(pointsArr);\n if (params.action == \"modify\") {\n element_interface.modify_element(paramObj);\n } else {\n element_interface.create_polygon_params(paramObj);\n }\n return StampUtil.createElementParams(paramObj[0], params);\n }\n /* \n 标绘:创建直角旗标\n */\n createElementrightAngleFlag(\n userdataObj = {\n guid: StampUtil.createGuid(),\n type: 258,\n name: \"rightAngleFlag\",\n action: \"add\", //add:添加 modify:修改\n click: \"true\",\n desc: \"直角旗标\", //对象描述信息\n linewidth: 1,\n linecolor: \"#CCFFFF00\", //填充色:前两位是透明度,后面6位是填充色\n fillcolor: \"#CCFF0000\",\n selectable: true,\n editable: true,\n drawOrder: 1, //渲染顺序\n }\n ) {\n return StampUtil.createElement(userdataObj);\n }\n createElementrightAngleFlagParams(params: any) {\n if (!params.guid) {\n params.guid = StampUtil.createGuid();\n }\n const element_interface = StampUtil.getLibax().element_interface;\n if (StampUtil.createControlElementVisbile(params)) {\n //判断如果已存在,直接显示即可\n return new Promise((resolve) => {\n resolve(params);\n });\n }\n //需要将后台服务参数转为接口参数\n\n let paramObj = [\n {\n guid: params.guid || StampUtil.createGuid(), //params.id ||\n name: params.name || \"\",\n type: Number(params.type) || 258,\n desc: params.description || \"\",\n linewidth: params.linewidth || 1,\n linecolor: params.linecolor || \"#CCFFFF00\",\n action: \"modify\",\n fillcolor: params.fillcolor || \"#CCFF0000\",\n selectable:\n params.selectable == undefined ? 1 : Number(params.selectable),\n editable: params.editable == undefined ? 1 : Number(params.editable),\n drawOrder: Number(params.drawOrder),\n visible: params.visible == undefined || Number(params.visible),\n },\n ] as any;\n const pointsArr = [];\n for (let i = 0; i < params.points.length; i++) {\n pointsArr.push(params.points[i].x);\n pointsArr.push(params.points[i].y);\n pointsArr.push(params.points[i].z);\n }\n paramObj = paramObj.concat(pointsArr);\n if (params.action == \"modify\") {\n element_interface.modify_element(paramObj);\n } else {\n element_interface.create_polygon_params(paramObj);\n }\n return StampUtil.createElementParams(paramObj[0], params);\n }\n /* \n 标绘:创建三角旗标\n */\n createElementtriangleFlag(\n userdataObj = {\n guid: StampUtil.createGuid(),\n type: 257,\n name: \"triangleFlag\",\n action: \"add\", //add:添加 modify:修改\n click: \"true\",\n desc: \"三角旗标\", //对象描述信息\n linewidth: 1,\n linecolor: \"#CCFFFF00\", //填充色:前两位是透明度,后面6位是填充色\n fillcolor: \"#CCFF0000\",\n selectable: true,\n editable: true,\n drawOrder: 1, //渲染顺序\n }\n ) {\n return StampUtil.createElement(userdataObj);\n }\n createElementtriangleFlagParams(params: any) {\n if (!params.guid) {\n params.guid = StampUtil.createGuid();\n }\n\n const element_interface = StampUtil.getLibax().element_interface;\n if (StampUtil.createControlElementVisbile(params)) {\n //判断如果已存在,直接显示即可\n return new Promise((resolve) => {\n resolve(params);\n });\n }\n //需要将后台服务参数转为接口参数\n let paramObj = [\n {\n guid: params.guid || StampUtil.createGuid(), //params.id ||\n name: params.name || \"\",\n type: Number(params.type) || 257,\n desc: params.description || \"\",\n linewidth: params.linewidth || 1,\n linecolor: params.linecolor || \"#CCFFFF00\",\n fillcolor: params.fillcolor || \"#CCFF0000\",\n action: \"modify\",\n selectable:\n params.selectable == undefined ? 1 : Number(params.selectable),\n editable: params.editable == undefined ? 1 : Number(params.editable),\n drawOrder: Number(params.drawOrder),\n visible: params.visible == undefined || Number(params.visible),\n },\n ] as any;\n const pointsArr = [];\n for (let i = 0; i < params.points.length; i++) {\n pointsArr.push(params.points[i].x);\n pointsArr.push(params.points[i].y);\n pointsArr.push(params.points[i].z);\n }\n paramObj = paramObj.concat(pointsArr);\n if (params.action == \"modify\") {\n element_interface.modify_element(paramObj);\n } else {\n element_interface.create_polygon_params(paramObj);\n }\n return StampUtil.createElementParams(paramObj[0], params);\n }\n /* \n 标绘:创建曲线旗标\n */\n createElementcurveFlag(\n userdataObj = {\n guid: StampUtil.createGuid(),\n type: 259,\n name: \"curveFlag\",\n action: \"add\", //add:添加 modify:修改\n click: \"true\",\n desc: \"曲线旗标\", //对象描述信息\n linewidth: 1,\n linecolor: \"#CCFFFF00\", //填充色:前两位是透明度,后面6位是填充色\n fillcolor: \"#CCFF0000\",\n selectable: true,\n editable: true,\n drawOrder: 1, //渲染顺序\n }\n ) {\n return StampUtil.createElement(userdataObj);\n }\n createElementcurveFlagParams(params: any) {\n if (!params.guid) {\n params.guid = StampUtil.createGuid();\n }\n const element_interface = StampUtil.getLibax().element_interface;\n if (StampUtil.createControlElementVisbile(params)) {\n //判断如果已存在,直接显示即可\n return new Promise((resolve) => {\n resolve(params);\n });\n }\n //需要将后台服务参数转为接口参数\n let paramObj = [\n {\n guid: params.guid || StampUtil.createGuid(), //params.id ||\n name: params.name || \"\",\n type: Number(params.type) || 259,\n desc: params.description || \"\",\n linewidth: params.linewidth || 1,\n linecolor: params.linecolor || \"#CCFFFF00\",\n fillcolor: params.fillcolor || \"#CCFF0000\",\n action: \"modify\",\n selectable:\n params.selectable == undefined ? 1 : Number(params.selectable),\n editable: params.editable == undefined ? 1 : Number(params.editable),\n drawOrder: Number(params.drawOrder),\n visible: params.visible == undefined || Number(params.visible),\n },\n ] as any;\n const pointsArr = [];\n for (let i = 0; i < params.points.length; i++) {\n pointsArr.push(params.points[i].x);\n pointsArr.push(params.points[i].y);\n pointsArr.push(params.points[i].z);\n }\n paramObj = paramObj.concat(pointsArr);\n if (params.action == \"modify\") {\n element_interface.modify_element(paramObj);\n } else {\n element_interface.create_polygon_params(paramObj);\n }\n return StampUtil.createElementParams(paramObj[0], params);\n }\n //#endregion\n\n //#region 几何标绘\n /**\n * 标绘:创建立体多边形\n * @param userdataObj\n * @returns\n */\n createElementVolume(\n userdataObj = {\n guid: StampUtil.createGuid(),\n type: 207,\n name: \"volume\",\n action: \"add\", //add:添加 modify:修改\n click: \"true\",\n desc: \"\", //对象描述信息\n fillcolor: \"#CCFF0000\",\n linecolor: \"#FFFFFFFF\",\n linewidth: 0, //0:不绘制 其他值:线宽\n heightValue: 1,\n bottom: \"\",\n top: \"\",\n sidewall: \"\",\n isBottomFlat: true, //底部纯平\n selectable: true, //可选择\n editable: true, //可编辑\n } as any\n ) {\n userdataObj.is_bottom_flat =\n userdataObj.isBottomFlat == undefined ? true : userdataObj.isBottomFlat; //默认值给true 底部为平的\n userdataObj.texturePath = [\n userdataObj.bottom || \"\",\n userdataObj.top || \"\",\n userdataObj.sidewall || \"\",\n ];\n return StampUtil.createElement(userdataObj);\n }\n\n /**\n * 参数化:创建立体多边形\n * @param params\n * @returns\n */\n createElementVolumeParams(params: any) {\n if (!params.guid) {\n params.guid = StampUtil.createGuid();\n }\n const element_interface = StampUtil.getLibax().element_interface;\n if (StampUtil.createControlElementVisbile(params)) {\n //判断如果已存在,直接显示即可\n return new Promise((resolve) => {\n resolve(params);\n });\n }\n //需要将后台服务参数转为接口参数\n const paramObj = [\n {\n guid: params.guid || StampUtil.createGuid(),\n name: params.name || \"\",\n action: \"modify\", //add:添加 modify:修改\n type: Number(params.type) || 207,\n desc: params.description || \"\",\n fillcolor: params.fillcolor,\n linecolor: params.linecolor || \"#FFFFFFFF\",\n linewidth: params.linewidth || 0, //0:不绘制 其他值:线宽\n is_bottom_flat:\n params.isBottomFlat == undefined ? true : params.isBottomFlat,\n selectable:\n params.selectable == undefined ? 1 : Number(params.selectable),\n editable: params.editable == undefined ? 1 : Number(params.editable),\n visible: params.visible == undefined || Number(params.visible),\n heightValue: params.heightValue,\n texturePath: [\n params.bottom || \"\",\n params.top || \"\",\n params.sidewall || \"\",\n ],\n },\n ] as any;\n for (let i = 0; i < params.points.length; i++) {\n paramObj.push(params.points[i].x);\n paramObj.push(params.points[i].y);\n paramObj.push(params.points[i].z);\n }\n\n if (params.action == \"modify\") {\n element_interface.modify_element(paramObj);\n } else {\n element_interface.create_polygon_params(paramObj);\n }\n return StampUtil.createElementParams(paramObj[0], params);\n }\n\n /**\n * 标绘:创建球体\n * @param userdataObj\n * @returns\n */\n createElementSphere(\n userdataObj = {\n guid: StampUtil.createGuid(),\n type: 216,\n name: \"sphere\",\n action: \"add\", //add:添加 modify:修改\n click: \"true\",\n desc: \"\", //对象描述信息\n fillcolor: \"#CCFF0000\",\n selectable: 1,\n editable: 1,\n } as any\n ) {\n userdataObj.texturePath = [userdataObj.sidewall];\n return StampUtil.createElement(userdataObj);\n }\n\n /**\n * 参数化:创建球体\n * @param params\n * @returns\n */\n createElementSphereParams(params: any) {\n if (!params.guid) {\n params.guid = StampUtil.createGuid();\n }\n const element_interface = StampUtil.getLibax().element_interface;\n if (StampUtil.createControlElementVisbile(params)) {\n //判断如果已存在,直接显示即可\n return new Promise((resolve) => {\n resolve(params);\n });\n }\n const paramObj = [\n {\n guid: params.guid || StampUtil.createGuid(),\n name: params.name || \"\",\n type: params.type || 216,\n action: \"modify\",\n desc: params.description || \"\",\n radius: params.radius || 0,\n fillcolor: params.fillcolor,\n selectable:\n params.selectable == undefined ? 1 : Number(params.selectable),\n editable: params.editable == undefined ? 1 : Number(params.editable),\n visible:\n params.visible == undefined || params.visible == \"true\"\n ? true\n : !!params.visible,\n },\n params.points[0].x,\n params.points[0].y,\n params.points[0].z,\n 0,\n 0,\n 0,\n 1,\n 1,\n 1,\n ] as any;\n paramObj[0].texturePath = [params.sidewall];\n paramObj[0].points = params.points;\n if (params.action == \"modify\") {\n element_interface.modify_element(paramObj);\n } else {\n element_interface.create_box_params(paramObj);\n }\n return StampUtil.createElementParams(paramObj[0], params);\n }\n\n /**\n * 标绘:创建立方体\n * @param userdataObj\n * @returns\n */\n createElementBox(\n userdataObj = {\n guid: StampUtil.createGuid(),\n type: 202,\n name: \"box\",\n action: \"add\", //add:添加 modify:修改\n click: \"true\",\n desc: \"立方体\", //对象描述信息\n fillcolor: \"#CCFF0000\",\n selectable: 1,\n editable: 1,\n drawOrder: 1, //渲染顺序\n } as any\n ) {\n userdataObj.texturePath = [\n userdataObj.bottom,\n userdataObj.top,\n userdataObj.sidewall,\n ];\n return StampUtil.createElement(userdataObj);\n }\n\n /**\n * 参数化:创建立方体\n * @param params\n * @returns\n */\n async createElementBoxParams(params: any) {\n if (!params.guid) {\n params.guid = StampUtil.createGuid();\n }\n const element_interface = StampUtil.getLibax().element_interface;\n if (StampUtil.createControlElementVisbile(params)) {\n //判断如果已存在,直接显示即可\n return new Promise((resolve) => {\n resolve(params);\n });\n }\n const paramObj = [\n {\n guid: params.guid || StampUtil.createGuid(),\n name: params.name || \"\",\n action: \"modify\",\n type: Number(params.type) || STAMP_RTTI.SE_RTTI_ELEMENT_BOX,\n desc: params.description || \"\",\n fillcolor: params.fillcolor,\n heightValue: Number(params.heightValue || params.height) || 1,\n widthValue: Number(params.widthValue || params.width) || 1,\n longValue: Number(params.longValue || params.long) || 1,\n selectable:\n params.selectable == undefined ? 1 : Number(params.selectable),\n editable: params.editable == undefined ? 1 : Number(params.editable),\n visible:\n params.visible == undefined || params.visible == \"true\"\n ? true\n : !!params.visible,\n texturePath: [],\n },\n params.points[0].x,\n params.points[0].y,\n params.points[0].z,\n 0,\n 0,\n 0,\n 1,\n 1,\n 1,\n ] as any;\n paramObj[0].texturePath = [params.bottom, params.top, params.sidewall];\n paramObj[0].points = params.points;\n if (params.action == \"modify\") {\n element_interface.modify_element(paramObj);\n } else {\n element_interface.create_box_params(paramObj);\n }\n return await StampUtil.createElementParams(paramObj[0], params);\n }\n\n /**\n * 标绘:创建圆柱\n * @param userdataObj\n * @returns\n */\n createElementCylinder(\n userdataObj = {\n guid: StampUtil.createGuid(),\n type: 203,\n name: \"cylinder\",\n action: \"add\", //add:添加 modify:修改\n click: \"true\",\n desc: \"\", //对象描述信息\n fillcolor: \"#CCFF0000\",\n bottomRadius: 1,\n heightValue: 1,\n selectable: 1,\n editable: 1,\n } as any\n ) {\n userdataObj.texturePath = [\n userdataObj.bottom,\n userdataObj.top,\n userdataObj.sidewall,\n ];\n return StampUtil.createElement(userdataObj);\n }\n\n /**\n * 参数化:创建圆柱\n * @param params\n * @returns\n */\n createElementCylinderParams(params: any) {\n if (!params.guid) {\n params.guid = StampUtil.createGuid();\n }\n const element_interface = StampUtil.getLibax().element_interface;\n if (StampUtil.createControlElementVisbile(params)) {\n //判断如果已存在,直接显示即可\n return new Promise((resolve) => {\n resolve(params);\n });\n }\n const paramObj = [\n {\n guid: params.guid || StampUtil.createGuid(),\n name: params.name || \"\",\n type: params.type || 203,\n action: \"modify\",\n desc: params.description || \"\",\n bottomRadius: params.bottomRadius || 1,\n heightValue: params.heightValue || 1,\n fillcolor: params.fillcolor,\n selectable:\n params.selectable == undefined ? 1 : Number(params.selectable),\n editable: params.editable == undefined ? 1 : Number(params.editable),\n visible: params.visible == undefined || Number(params.visible),\n texturePath: [params.bottom, params.top, params.sidewall],\n },\n params.points[0].x,\n params.points[0].y,\n params.points[0].z,\n 0,\n 0,\n 0,\n 1,\n 1,\n 1,\n ] as any;\n paramObj[0].points = params.points;\n if (params.action == \"modify\") {\n element_interface.modify_element(paramObj);\n } else {\n element_interface.create_box_params(paramObj);\n }\n return StampUtil.createElementParams(paramObj[0], params);\n }\n\n /**\n * 标绘:创建圆锥\n * @param userdataObj\n * @returns\n */\n createElementCone(\n userdataObj = {\n guid: StampUtil.createGuid(),\n type: 204,\n name: \"cone\",\n action: \"add\", //add:添加 modify:修改\n click: \"true\",\n desc: \"\", //对象描述信息\n fillcolor: \"#CCFF0000\",\n bottomRadius: 1,\n topRadius: 0,\n heightValue: 1,\n selectable: 1,\n editable: 1,\n } as any\n ) {\n userdataObj.texturePath = [\n userdataObj.bottom,\n userdataObj.top,\n userdataObj.sidewall,\n ];\n return StampUtil.createElement(userdataObj);\n }\n\n /**\n * 参数化:创建圆锥\n * @param params\n * @returns\n */\n createElementConeParams(params: any) {\n if (!params.guid) {\n params.guid = StampUtil.createGuid();\n }\n const element_interface = StampUtil.getLibax().element_interface;\n if (StampUtil.createControlElementVisbile(params)) {\n //判断如果已存在,直接显示即可\n return new Promise((resolve) => {\n resolve(params);\n });\n }\n const paramObj = [\n {\n guid: params.guid || StampUtil.createGuid(),\n name: params.name || \"\",\n type: params.type || 204,\n action: \"modify\",\n desc: params.description || \"\",\n bottomRadius: params.bottomRadius || 1,\n topRadius: params.topRadius || 0,\n heightValue: params.heightValue || 1,\n fillcolor: params.fillcolor,\n selectable:\n params.selectable == undefined ? 1 : Number(params.selectable),\n editable: params.editable == undefined ? 1 : Number(params.editable),\n visible: params.visible == undefined || Number(params.visible),\n texturePath: [params.bottom, params.top, params.sidewall],\n },\n params.points[0].x,\n params.points[0].y,\n params.points[0].z,\n 0,\n 0,\n 0,\n 1,\n 1,\n 1,\n ] as any;\n paramObj[0].points = params.points;\n if (params.action == \"modify\") {\n element_interface.modify_element(paramObj);\n } else {\n element_interface.create_box_params(paramObj);\n }\n return StampUtil.createElementParams(paramObj[0], params);\n }\n\n /**\n * 标绘:创建棱柱\n * @param userdataObj\n * @returns\n */\n createElementPrism(\n userdataObj = {\n guid: StampUtil.createGuid(),\n type: 205,\n name: \"prism\",\n action: \"add\", //add:添加 modify:修改\n click: \"true\",\n desc: \"\", //对象描述信息\n fillcolor: \"#CCFF0000\", //填充色:前两位是透明度,后面6位是填充色\n heightValue: 1,\n bottomRadius: 1,\n sides: 5,\n selectable: 1,\n editable: 1,\n } as any\n ) {\n userdataObj.texturePath = [\n userdataObj.bottom,\n userdataObj.top,\n userdataObj.sidewall,\n ];\n return StampUtil.createElement(userdataObj);\n }\n\n /**\n * 参数化:创建棱柱\n * @param params\n * @returns\n */\n createElementPrismParams(params: any) {\n if (!params.guid) {\n params.guid = StampUtil.createGuid();\n }\n const element_interface = StampUtil.getLibax().element_interface;\n if (StampUtil.createControlElementVisbile(params)) {\n //判断如果已存在,直接显示即可\n return new Promise((resolve) => {\n resolve(params);\n });\n }\n //需要将后台服务参数转为接口参数\n const paramObj = [\n {\n guid: params.guid || StampUtil.createGuid(), //params.id ||\n name: params.name || \"\",\n type: Number(params.type) || 205,\n desc: params.description || \"\",\n action: \"modify\",\n fillcolor: params.fillcolor,\n heightValue: Number(params.heightValue) || 1,\n bottomRadius: params.bottomRadius || 1,\n sides: params.sides || 5,\n selectable:\n params.selectable == undefined ? 1 : Number(params.selectable),\n editable: params.editable == undefined ? 1 : Number(params.editable),\n visible: params.visible == undefined || Number(params.visible),\n texturePath: [params.bottom, params.top, params.sidewall],\n },\n params.points[0].x,\n params.points[0].y,\n params.points[0].z,\n 0,\n 0,\n 0,\n 1,\n 1,\n 1,\n ] as any;\n paramObj[0].points = params.points;\n if (params.action == \"modify\") {\n element_interface.modify_element(paramObj);\n } else {\n element_interface.create_box_params(paramObj);\n }\n return StampUtil.createElementParams(paramObj[0], params);\n }\n\n /**\n * 标绘:创建棱锥\n * @param userdataObj\n * @returns\n */\n createElementPyramid(\n userdataObj = {\n guid: StampUtil.createGuid(),\n type: 206,\n name: \"pyramid\",\n action: \"add\", //add:添加 modify:修改\n click: \"true\",\n desc: \"\", //对象描述信息\n fillcolor: \"#CCFF0000\", //填充色:前两位是透明度,后面6位是填充色\n heightValue: 5,\n bottomRadius: 1,\n topRadius: 1,\n sides: 5,\n selectable: 1,\n editable: 1,\n } as any\n ) {\n userdataObj.texturePath = [\n userdataObj.bottom,\n userdataObj.top,\n userdataObj.sidewall,\n ];\n return StampUtil.createElement(userdataObj);\n }\n\n /**\n * 参数化:创建棱锥\n * @param params\n * @returns\n */\n createElementPyramidParams(params: any) {\n if (!params.guid) {\n params.guid = StampUtil.createGuid();\n }\n const element_interface = StampUtil.getLibax().element_interface;\n if (StampUtil.createControlElementVisbile(params)) {\n //判断如果已存在,直接显示即可\n return new Promise((resolve) => {\n resolve(params);\n });\n }\n\n //需要将后台服务参数转为接口参数\n const paramObj = [\n {\n guid: params.guid || StampUtil.createGuid(), //params.id ||\n name: params.name || \"\",\n type: Number(params.type) || 206,\n desc: params.description || \"\",\n fillcolor: params.fillcolor,\n action: \"modify\",\n heightValue: Number(params.heightValue) || 1,\n bottomRadius: params.bottomRadius || 1,\n topRadius: params.topRadius || 1,\n sides: params.sides || 5,\n selectable:\n params.selectable == undefined ? 1 : Number(params.selectable),\n editable: params.editable == undefined ? 1 : Number(params.editable),\n visible: params.visible == undefined || Number(params.visible),\n texturePath: [params.bottom, params.top, params.sidewall],\n showUnderground:\n params.showUnderground == undefined ? true : params.showUnderground,\n noCombile: params.noCombile == undefined ? false : params.noCombile,\n },\n params.points[0].x,\n params.points[0].y,\n params.points[0].z,\n 0,\n 0,\n 0,\n 1,\n 1,\n 1,\n ] as any;\n paramObj[0].points = params.points;\n if (params.action == \"modify\") {\n element_interface.modify_element(paramObj);\n } else {\n element_interface.create_box_params(paramObj);\n }\n return StampUtil.createElementParams(paramObj[0], params);\n }\n //#endregion\n\n //#region 动态特效\n /**\n * 标绘:创建动态特效\n * @param param {longitude,latitude,altitude, type, name, guid, scale}\n * @returns\n */\n createElementDynamic(param: any) {\n return new Promise((resolve: any) => {\n const shape_creator_interface =\n StampUtil.getLibax().shape_creator_interface;\n shape_creator_interface.OnShapeCreated = (data1: any) => {\n shape_creator_interface.OnShapeCreated = null;\n shape_creator_interface.clear();\n const particle_system_interface =\n StampAPI.LibAx.particle_system_interface(StampUtil.getLibax());\n particle_system_interface.OnParticleCreated = (data2: any) => {\n data2.type = param.type;\n data2.scale = param.scale || {\n x: 1,\n y: 1,\n z: 1,\n };\n particle_system_interface.scale([\n data2.scale.x,\n data2.scale.y,\n data2.scale.z,\n data2.guid,\n ]);\n resolve(data2);\n const element_interface = StampUtil.getLibax().element_interface;\n element_interface.userdataArr.push(data2);\n };\n particle_system_interface.create([\n data1.Longitude,\n data1.Latitude,\n parseFloat(data1.Altitude),\n param.type,\n param.name,\n ]);\n };\n shape_creator_interface.create_point();\n });\n }\n /**\n * 参数化:创建动态特效\n * @param params {guid,name,type,longitude,latitude,altitude}\n * @returns\n */\n createElementDynamicParams(params: any) {\n if (!params.guid) {\n params.guid = StampUtil.createGuid();\n }\n if (!params.scale) {\n //创建动态特效时\n params.scale = {\n x: 1,\n y: 1,\n z: 1,\n };\n }\n return new Promise((resolve) => {\n const particle_system_interface =\n StampUtil.getLibax().particle_system_interface;\n particle_system_interface.OnParticleCreated = (data: any) => {\n data.points = params.points;\n data.type = params.type;\n data.scale = params.scale || {\n x: 1,\n y: 1,\n z: 1,\n };\n if (data.scale) {\n particle_system_interface.scale([\n data.scale.x,\n data.scale.y,\n data.scale.z,\n data.guid,\n ]);\n }\n if (data.name.indexOf(\"\\u0000\") != -1) {\n data.name = data.name.slice(0, data.name.indexOf(\"\\u0000\"));\n }\n resolve(data);\n const element_interface = StampUtil.getLibax().element_interface;\n for (let i = 0; i < element_interface.userdataArr.length; i++) {\n if (element_interface.userdataArr[i].guid == params.guid) {\n element_interface.userdataArr.splice(i, 1);\n break;\n }\n }\n element_interface.userdataArr.push(data);\n };\n const paramsObj = [\n params.points[0].x,\n params.points[0].y,\n params.points[0].z,\n params.type,\n params.name,\n params.guid,\n ] as any;\n particle_system_interface.create(paramsObj);\n });\n }\n /**\n * 标绘:创建直向双箭头,虚线,虚线双箭头,虚线单箭头,曲线双箭头\n * @param param\n * @returns\n */\n createElementNewDimension(\n userdataObj = {\n guid: StampUtil.createGuid(),\n type: 320,\n name: \"\",\n action: \"add\", //add:添加 modify:修改\n click: \"true\",\n gemoRtti: \"\",\n symbolId: \"\",\n linewidth: 5,\n linecolor: \"#CCFFFF00\", //填充色:前两位是透明度,后面6位是填充色\n fillcolor: \"#CCFFFF00\",\n shadow: 1, //渲染模式 0:正常 1:贴地 5:贴模型\n drawOrder: 1, //渲染顺序\n selectable: 1,\n editable: 1,\n } as any\n ) {\n userdataObj.linecolor = userdataObj.linecolor || \"#CCFFFF00\";\n userdataObj.linewidth = Number(userdataObj.linewidth) || 5;\n return StampUtil.createElement(userdataObj);\n }\n\n /**\n * 参数化:创建直向双箭头,虚线,虚线双箭头,虚线单箭头,曲线双箭头\n * @param params\n * @returns\n */\n createElementNewDimensionParams(params: any) {\n if (!params.guid) {\n params.guid = StampUtil.createGuid();\n }\n const element_interface = StampUtil.getLibax().element_interface;\n if (StampUtil.createControlElementVisbile(params)) {\n //判断如果已存在,直接显示即可\n return new Promise((resolve) => {\n resolve(params);\n });\n }\n const linewidth = Number(params.linewidth) || 5;\n //需要将后台服务参数转为接口参数\n let paramObj = [\n {\n guid: params.guid || StampUtil.createGuid(), //params.id ||\n name: params.name || \"\",\n type: Number(params.type) || 320,\n desc: params.description || \"\",\n linecolor: params.linecolor || \"#CCFFFF00\",\n linewidth: Number(linewidth),\n fillcolor: params.fillcolor || \"#CCFF0000\",\n action: \"modify\",\n symbolId: params.symbolId || \"\",\n geomRtti: params.geomRtti || 220,\n shadow: 0,\n selectable:\n params.selectable == undefined ? 1 : Number(params.selectable),\n editable: params.editable == undefined ? 1 : Number(params.editable),\n drawOrder: Number(params.drawOrder),\n visible: params.visible == undefined || Number(params.visible),\n },\n ] as any;\n const pointsArr = [];\n for (let i = 0; i < params.points.length; i++) {\n pointsArr.push(params.points[i].x);\n pointsArr.push(params.points[i].y);\n pointsArr.push(params.points[i].z); //\n }\n paramObj = paramObj.concat(pointsArr);\n if (params.action == \"modify\") {\n element_interface.modify_element(paramObj);\n } else {\n element_interface.create_polygon_params(paramObj);\n }\n return StampUtil.createElementParams(paramObj[0], params);\n }\n /**\n * 标绘:创建虚线多边形\n * @param param\n */\n createElementDashedPolygon(\n userdataObj = {\n guid: StampUtil.createGuid(),\n type: 320,\n name: \"\",\n action: \"add\", //add:添加 modify:修改\n click: \"true\",\n gemoRtti: \"\",\n symbolId: \"\",\n width: -1,\n desc: \"\", //对象描述信息\n linewidth: 1,\n linecolor: \"#CCFFFF00\", //填充色:前两位是透明度,后面6位是填充色\n fillcolor: \"#CCFFFF00\",\n shadow: 1, //渲染模式 0:正常 1:贴地 5:贴模型\n drawOrder: 1, //渲染顺序\n selectable: 1,\n editable: 1,\n }\n ) {\n return StampUtil.createElement(userdataObj);\n }\n\n /**\n * 参数化:创建虚线多边形\n * @param params\n * @returns\n */\n createElementDashedPolygonParams(params: any) {\n if (!params.guid) {\n params.guid = StampUtil.createGuid();\n }\n const element_interface = StampUtil.getLibax().element_interface;\n if (StampUtil.createControlElementVisbile(params)) {\n //判断如果已存在,直接显示即可\n return new Promise((resolve) => {\n resolve(params);\n });\n }\n //需要将后台服务参数转为接口参数\n let paramObj = [\n {\n guid: params.guid || StampUtil.createGuid(), //params.id ||\n name: params.name || \"\",\n type: Number(params.type) || 320,\n desc: params.description || \"\",\n linecolor: params.linecolor || \"#CCFFFF00\",\n width: params.width || params.linewidth || 1,\n fillcolor: params.fillcolor || \"#CCFF0000\",\n action: \"modify\",\n symbolId: params.symbolId || \"\",\n geomRtti: params.geomRtti || STAMP_RTTI.SE_RTTI_ELEMENT_POLYGON, //多边形\n shadow: params.shadow == undefined ? 1 : Number(params.shadow),\n selectable:\n params.selectable == undefined ? 1 : Number(params.selectable),\n editable: params.editable == undefined ? 1 : Number(params.editable),\n drawOrder: Number(params.drawOrder),\n visible: params.visible == undefined || Number(params.visible),\n },\n ] as any;\n const pointsArr = [];\n for (let i = 0; i < params.points.length; i++) {\n pointsArr.push(params.points[i].x);\n pointsArr.push(params.points[i].y);\n pointsArr.push(params.points[i].z);\n }\n paramObj = paramObj.concat(pointsArr);\n if (params.action == \"modify\") {\n element_interface.modify_element(paramObj);\n } else {\n element_interface.create_polygon_params(paramObj);\n }\n return StampUtil.createElementParams(paramObj[0], params);\n }\n /**\n * 标绘:创建纹理多边形\n * @param param\n */\n createElementTexturePolygon(\n userdataObj = {\n guid: StampUtil.createGuid(),\n type: STAMP_RTTI.SE_RTTI_ELEMENT_TEXTURE_SYMBOL,\n name: \"\",\n action: \"add\", //add:添加 modify:修改\n click: \"true\",\n gemoRtti: STAMP_RTTI.SE_RTTI_ELEMENT_POLYGON,\n symbolId: \"texturePolygon\",\n width: -1,\n desc: \"\", //对象描述信息\n linewidth: 1,\n linecolor: \"#CCFFFF00\", //填充色:前两位是透明度,后面6位是填充色\n fillcolor: \"#CCFFFF00\",\n shadow: 1, //渲染模式 0:正常 1:贴地 5:贴模型\n drawOrder: 1, //渲染顺序\n selectable: 1,\n editable: 1,\n texturePath: \"\",\n }\n ) {\n return StampUtil.createElement(userdataObj);\n }\n\n /**\n * 参数化:创建纹理多边形\n * @param params\n * @returns\n */\n createElementTexturePolygonParams(params: any) {\n if (!params.guid) {\n params.guid = StampUtil.createGuid();\n }\n const element_interface = StampUtil.getLibax().element_interface;\n if (StampUtil.createControlElementVisbile(params)) {\n //判断如果已存在,直接显示即可\n return new Promise((resolve) => {\n resolve(params);\n });\n }\n //需要将后台服务参数转为接口参数\n let paramObj = [\n {\n guid: params.guid || StampUtil.createGuid(), //params.id ||\n name: params.name || \"\",\n type: Number(params.type) || STAMP_RTTI.SE_RTTI_ELEMENT_TEXTURE_SYMBOL,\n desc: params.description || \"\",\n linecolor: params.linecolor || \"#CCFFFF00\",\n width: params.width || params.linewidth || 1,\n fillcolor: params.fillcolor || \"#CCFF0000\",\n texturePath: params.texturePath || \"\",\n action: \"modify\",\n symbolId: params.symbolId || \"texturePolygon\",\n geomRtti: params.geomRtti || STAMP_RTTI.SE_RTTI_ELEMENT_POLYGON, //多边形\n shadow: params.shadow == undefined ? 1 : Number(params.shadow),\n selectable:\n params.selectable == undefined ? 1 : Number(params.selectable),\n editable: params.editable == undefined ? 1 : Number(params.editable),\n drawOrder: Number(params.drawOrder),\n visible: params.visible == undefined || Number(params.visible),\n },\n ] as any;\n const pointsArr = [];\n for (let i = 0; i < params.points.length; i++) {\n pointsArr.push(params.points[i].x);\n pointsArr.push(params.points[i].y);\n pointsArr.push(params.points[i].z);\n }\n paramObj = paramObj.concat(pointsArr);\n if (params.action == \"modify\") {\n element_interface.modify_element(paramObj);\n } else {\n element_interface.create_polygon_params(paramObj);\n }\n return StampUtil.createElementParams(paramObj[0], params);\n }\n /**\n * 创建警报环\n * @param param\n */\n createAlarmRing(param: any) {\n return new Promise((resolve: any) => {\n const shape_creator_interface =\n StampUtil.getLibax().shape_creator_interface;\n shape_creator_interface.OnShapeCreated = (data: any) => {\n shape_creator_interface.OnShapeCreated = null;\n shape_creator_interface.clear();\n data.Altitude += 0.2; //抬高一点\n const userDataObj = [\n {\n guid: param.guid,\n type: param.type,\n name: param.name,\n action: param.action,\n color: param.fillcolor,\n ringCountFactor: param.ringCountFactor,\n speed: Number(param.speed) ? Number(param.speed) : 1.0,\n radius: Number(param.radius) ? Number(param.radius) : 2.0,\n editable: 1,\n selectable: 1,\n },\n data.Longitude,\n data.Latitude,\n data.Altitude,\n 0,\n 0,\n 0,\n 1,\n 1,\n 1,\n ];\n const params = StampUtil.deepCopy(userDataObj[0]);\n params.points = [\n { x: data.Longitude, y: data.Latitude, z: data.Altitude },\n ];\n resolve(params);\n const element_interface = StampAPI.LibAx.element_interface(\n StampUtil.getLibax()\n );\n element_interface.userdataArr.push(params);\n element_interface.create_alarm_ring_params(userDataObj);\n };\n shape_creator_interface.create_point();\n });\n }\n /**\n * 参数化创建警报环\n * @param params{guid,type,points,name,color,action}\n */\n createAlarmRingParams(params: any) {\n if (!params.guid) {\n params.guid = StampUtil.createGuid();\n }\n const element_interface = StampAPI.LibAx.element_interface(\n StampUtil.getLibax()\n );\n if (StampUtil.createControlElementVisbile(params)) {\n //判断如果已存在,直接显示即可\n return new Promise((resolve) => {\n resolve(params);\n });\n }\n const paramObj = [\n {\n guid: params.guid || StampUtil.createGuid(), //params.id ||\n name: params.name || \"\",\n type: Number(params.type) || 241,\n color: params.fillcolor, //\"#ffff0000\"\n action: \"modify\",\n radius: params.radius || 2.0,\n selectable:\n params.selectable == undefined ? 1 : Number(params.selectable),\n editable: params.editable == undefined ? 1 : Number(params.editable),\n speed: params.speed || 1.0,\n ringCountFactor: params.ringCountFactor || 1.0,\n },\n params.points[0].x,\n params.points[0].y,\n params.points[0].z,\n 0,\n 0,\n 0,\n 1,\n 1,\n 1,\n ] as any;\n paramObj[0].points = params.points;\n if (params.action == \"modify\") {\n element_interface.modify_element(paramObj);\n } else {\n element_interface.create_alarm_ring_params(paramObj);\n }\n return StampUtil.createElementParams(paramObj[0], params);\n }\n /**\n * 创建动态扫描\n * @param param\n */\n createDynamicScan(param: any) {\n return new Promise((resolve: any) => {\n const shape_creator_interface =\n StampUtil.getLibax().shape_creator_interface;\n shape_creator_interface.OnShapeCreated = (data: any) => {\n shape_creator_interface.OnShapeCreated = null;\n shape_creator_interface.clear();\n const userDataObj = [\n {\n guid: param.guid,\n type: param.type,\n name: param.name,\n action: param.action,\n color: param.fillcolor, //\"#ff0000\"\n reverse: param.arrow,\n speed: param.speed,\n size: [data.Radius, data.Radius, 1000], //中心点的半边长[30.0,30.0,1000]\n scanType: param.typemesh,\n editable: 1,\n selectable: 1,\n },\n data.Longitude,\n data.Latitude,\n data.Altitude,\n 0,\n 0,\n 0,\n 1,\n 1,\n 1,\n ];\n const params = StampUtil.deepCopy(userDataObj[0]);\n params.points = [\n { x: data.Longitude, y: data.Latitude, z: data.Altitude },\n ];\n params.radius = data.Radius;\n resolve(params);\n const element_interface = StampAPI.LibAx.element_interface(\n StampUtil.getLibax()\n );\n element_interface.userdataArr.push(params);\n element_interface.create_dynamic_scan_params(userDataObj);\n };\n shape_creator_interface.create_circle(0x1e009900, 0xccffff00);\n });\n }\n /**\n * 参数化创建动态扫描\n * @param params{guid,type,points,name,color,action}\n */\n createDynamicScanParams(params: any) {\n if (!params.guid) {\n params.guid = StampUtil.createGuid();\n }\n const element_interface = StampAPI.LibAx.element_interface(\n StampUtil.getLibax()\n );\n if (StampUtil.createControlElementVisbile(params)) {\n //判断如果已存在,直接显示即可\n return new Promise((resolve) => {\n resolve(params);\n });\n }\n const paramObj = [\n {\n guid: params.guid || StampUtil.createGuid(), //params.id ||\n name: params.name || \"\",\n type: Number(params.type) || 239,\n color: params.fillcolor, //\"#ff0000\"\n action: \"modify\",\n size: params.radius\n ? [params.radius, params.radius, 1000]\n : [30, 30, 1000],\n speed: params.speed || 1.0,\n selectable:\n params.selectable == undefined ? 1 : Number(params.selectable),\n editable: params.editable == undefined ? 1 : Number(params.editable),\n reverse: params.arrow || 0,\n scanType: params.typemesh || 0,\n },\n params.points[0].x,\n params.points[0].y,\n params.points[0].z,\n 0,\n 0,\n 0,\n 1,\n 1,\n 1,\n ] as any;\n paramObj[0].points = params.points;\n if (params.action == \"modify\") {\n element_interface.modify_element(paramObj);\n } else {\n element_interface.create_dynamic_scan_params(paramObj);\n }\n return StampUtil.createElementParams(paramObj[0], params);\n }\n /**\n * 创建动态扩散\n * @param param\n */\n createDynamicSpread(param: any) {\n return new Promise((resolve: any) => {\n const shape_creator_interface =\n StampUtil.getLibax().shape_creator_interface;\n shape_creator_interface.OnShapeCreated = (data: any) => {\n shape_creator_interface.OnShapeCreated = null;\n shape_creator_interface.clear();\n const userDataObj = [\n {\n guid: param.guid,\n type: param.type,\n name: param.name,\n action: param.action,\n color: [param.linecolor, param.framecolor, param.fillcolor],\n speed: param.speed,\n size: [data.Radius, data.Radius, 1000], //中心点的半边长[30.0,30.0,1000]\n selectable: 1,\n editable: 1,\n },\n data.Longitude,\n data.Latitude,\n data.Altitude,\n 0,\n 0,\n 0,\n 1,\n 1,\n 1,\n ];\n const params = StampUtil.deepCopy(userDataObj[0]);\n params.points = [\n { x: data.Longitude, y: data.Latitude, z: data.Altitude },\n ];\n params.radius = data.Radius;\n params.fillcolor = param.fillcolor;\n params.linecolor = param.linecolor;\n params.framecolor = param.framecolor;\n resolve(params);\n const element_interface = StampAPI.LibAx.element_interface(\n StampUtil.getLibax()\n );\n element_interface.userdataArr.push(params);\n element_interface.create_dynamic_spread_params(userDataObj);\n };\n shape_creator_interface.create_circle(0x1e009900, 0xccffff00);\n });\n }\n /**\n * 参数化创建动态扩散\n * @param params{guid,type,points,name,color,action}\n */\n createDynamicSpreadParams(params: any) {\n if (!params.guid) {\n params.guid = StampUtil.createGuid();\n }\n const element_interface = StampAPI.LibAx.element_interface(\n StampUtil.getLibax()\n );\n if (StampUtil.createControlElementVisbile(params)) {\n //判断如果已存在,直接显示即可\n return new Promise((resolve) => {\n resolve(params);\n });\n }\n const paramObj = [\n {\n guid: params.guid || StampUtil.createGuid(), //params.id ||\n name: params.name || \"\",\n type: Number(params.type) || 240,\n color: [params.linecolor, params.framecolor, params.fillcolor], //\"#ffff0000\"\n action: \"modify\",\n selectable:\n params.selectable == undefined ? 1 : Number(params.selectable),\n editable: params.editable == undefined ? 1 : Number(params.editable),\n size: params.radius\n ? [params.radius, params.radius, 1000]\n : [30, 30, 1000],\n speed: params.speed || 1.0,\n },\n params.points[0].x,\n params.points[0].y,\n params.points[0].z,\n 0,\n 0,\n 0,\n 1,\n 1,\n 1,\n ] as any;\n paramObj[0].points = params.points;\n if (params.action == \"modify\") {\n element_interface.modify_element(paramObj);\n } else {\n element_interface.create_dynamic_spread_params(paramObj);\n }\n return StampUtil.createElementParams(paramObj[0], params);\n }\n /**\n * 创建光电墙\n * @param param\n */\n createPhotoElectricWall(param: any) {\n return new Promise((resolve: any) => {\n const shape_creator_interface =\n StampUtil.getLibax().shape_creator_interface;\n shape_creator_interface.OnShapeCreated = (data: any) => {\n shape_creator_interface.OnShapeCreated = null;\n shape_creator_interface.clear();\n let userDataObj = [\n {\n guid: param.guid || StampUtil.createGuid(),\n type: param.type || STAMP_RTTI.SE_RTTI_ELEMENT_ELECTRIC_WALL,\n name: param.name || \"\",\n action: param.action || \"add\",\n color: param.fillcolor || \"#ffff0000\", //\"#ffff0000\",\n speed: param.speed || 1.0,\n radius: Number(param.radius) || 5,\n reverse: param.arrow || 0,\n intersectable: false,\n visibleHeight: param.visibleHeight || 1000000,\n displayType: param.displayType || 0,\n backgroundAlpha: param.backgroundAlpha || 0.5,\n lightningAlpha: param.lightningAlpha || 0.5,\n selectable:\n param.selectable == undefined ? 1 : Number(param.selectable),\n editable: param.editable == undefined ? 1 : Number(param.editable),\n visible: param.visible == undefined || Number(param.visible),\n },\n ] as any;\n const params = StampUtil.deepCopy(userDataObj[0]);\n params.points = [];\n const pointsArr = [];\n for (let i = 0; i < data.Points.length; i++) {\n pointsArr.push(data.Points[i].X);\n pointsArr.push(data.Points[i].Y);\n pointsArr.push(data.Points[i].Z + 1);\n const point = {\n x: data.Points[i].X,\n y: data.Points[i].Y,\n z: data.Points[i].Z + 1,\n };\n params.points.push(point);\n }\n userDataObj = userDataObj.concat(pointsArr);\n resolve(params);\n const element_interface = StampUtil.getLibax().element_interface;\n element_interface.userdataArr.push(params);\n element_interface.create_photo_electric_wall_params(userDataObj);\n };\n shape_creator_interface.create_polyline(1, 0xccff0000);\n });\n }\n /**\n * 参数化创建光电墙\n * @param params{guid,type,points,name,color,action}\n */\n async createPhotoElectricWallParams(params: any) {\n debugger;\n // console.log(params.points);\n // if (params.points.length > 500) {\n // let coordinateArr = [];\n // for (let i = 0; i < params.points.length; i++) {\n // coordinateArr.push(\n // params.points[i].x,\n // params.points[i].y,\n // params.points[i].z\n // );\n // }\n // coordinateArr = (\n // (await StampUtil.douglasPeuckerSimplification(\n // coordinateArr,\n // 1e-1\n // )) as any\n // ).Line;\n // params.points = [];\n // for (let i = 0; i < coordinateArr.length; i++) {\n // params.points.push({\n // x: coordinateArr[i][0],\n // y: coordinateArr[i][1],\n // z: coordinateArr[i][2],\n // });\n // }\n // }\n // console.log(params.points);\n if (!params.guid) {\n params.guid = StampUtil.createGuid();\n }\n const element_interface = StampUtil.getLibax().element_interface;\n if (StampUtil.createControlElementVisbile(params)) {\n //判断如果已存在,直接显示即可\n return new Promise((resolve) => {\n resolve(params);\n });\n }\n let paramObj = [\n {\n guid: params.guid || StampUtil.createGuid(), //params.id ||\n name: params.name || \"\",\n type: Number(params.type) || STAMP_RTTI.SE_RTTI_ELEMENT_ELECTRIC_WALL,\n color: params.fillcolor || params.color || \"#ffff0000\", //\"#ffff0000\"\n action: \"modify\",\n selectable:\n params.selectable == undefined ? 1 : Number(params.selectable),\n editable: params.editable == undefined ? 1 : Number(params.editable),\n speed: params.speed || 1.0,\n radius: params.radius || 5,\n reverse: params.arrow || 0,\n intersectable: false,\n visibleHeight: params.visibleHeight || 1000000, //可视距离\n displayType: params.displayType || 0, // 0 水平 1 竖直\n backgroundAlpha: params.backgroundAlpha || 0.5,\n lightningAlpha: params.lightningAlpha || 0.5,\n visible: params.visible == undefined || Number(params.visible),\n },\n ] as any;\n const pointsArr = [];\n for (let i = 0; i < params.points.length; i++) {\n pointsArr.push(params.points[i].x);\n pointsArr.push(params.points[i].y);\n pointsArr.push(params.points[i].z);\n }\n paramObj = paramObj.concat(pointsArr);\n paramObj[0].points = params.points;\n if (params.action == \"modify\") {\n element_interface.modify_element(paramObj);\n } else {\n element_interface.create_photo_electric_wall_params(paramObj);\n }\n return StampUtil.createElementParams(paramObj[0], params);\n }\n\n /**\n * 创建动态墙体\n * @param param\n */\n createDynamicWall(param: any) {\n return new Promise((resolve: any) => {\n const shape_creator_interface =\n StampUtil.getLibax().shape_creator_interface;\n shape_creator_interface.OnShapeCreated = (data: any) => {\n shape_creator_interface.OnShapeCreated = null;\n shape_creator_interface.clear();\n let userDataObj = [\n {\n guid: param.guid || StampUtil.createGuid(),\n type: param.type || STAMP_RTTI.SE_RTTI_ELEMENT_DYNAMIC_WALL,\n name: param.name || \"\",\n action: param.action || \"add\",\n color: param.color || \"#ffff0000\",\n speed: param.speed || 1.0,\n radius: Number(param.radius) || 5,\n reverse: param.reverse || 0,\n intersectable: false,\n displayType: param.displayType || 0,\n sliderCount: param.sliderCount || 2.0,\n sliderSizeFactor: param.sliderSizeFactor || 0.1,\n alpha: param.alpha || 0.5,\n selectable:\n param.selectable == undefined ? 1 : Number(param.selectable),\n editable: param.editable == undefined ? 1 : Number(param.editable),\n visible: param.visible == undefined || Number(param.visible),\n },\n ] as any;\n if (param.displayType == \"2\") {\n userDataObj[0].backgroundColor = userDataObj[0].color;\n }\n const params = StampUtil.deepCopy(userDataObj[0]);\n params.points = [];\n const pointsArr = [];\n for (let i = 0; i < data.Points.length; i++) {\n pointsArr.push(data.Points[i].X);\n pointsArr.push(data.Points[i].Y);\n pointsArr.push(data.Points[i].Z + 1);\n const point = {\n x: data.Points[i].X,\n y: data.Points[i].Y,\n z: data.Points[i].Z + 1,\n };\n params.points.push(point);\n }\n userDataObj = userDataObj.concat(pointsArr);\n resolve(params);\n const element_interface = StampUtil.getLibax().element_interface;\n element_interface.userdataArr.push(params);\n element_interface.create_dynamic_wall_params(userDataObj);\n };\n shape_creator_interface.create_polyline(1, 0xccff0000);\n });\n }\n /**\n * 参数化创建动态墙体\n * @param params{guid,type,points,name,color,action}\n */\n createDynamicWallParams(params: any) {\n if (!params.guid) {\n params.guid = StampUtil.createGuid();\n }\n const element_interface = StampUtil.getLibax().element_interface;\n if (StampUtil.createControlElementVisbile(params)) {\n //判断如果已存在,直接显示即可\n return new Promise((resolve) => {\n resolve(params);\n });\n }\n let paramObj = [\n {\n guid: params.guid || StampUtil.createGuid(),\n type: params.type || STAMP_RTTI.SE_RTTI_ELEMENT_DYNAMIC_WALL,\n name: params.name || \"\",\n action: params.action || \"add\",\n color: params.color || \"#ffff0000\",\n speed: params.speed || 1.0,\n radius: Number(params.radius) || 5,\n reverse: params.reverse || 0,\n intersectable: false,\n displayType: params.displayType || 0,\n sliderCount: params.sliderCount || 2.0,\n sliderSizeFactor: params.sliderSizeFactor || 0.1,\n alpha: params.alpha || 0.5,\n selectable:\n params.selectable == undefined ? 1 : Number(params.selectable),\n editable: params.editable == undefined ? 1 : Number(params.editable),\n visible: params.visible == undefined || Number(params.visible),\n },\n ] as any;\n if (params.displayType == \"2\") {\n paramObj[0][\"backgroundColor\"] = paramObj[0][\"color\"];\n }\n const pointsArr = [];\n for (let i = 0; i < params.points.length; i++) {\n pointsArr.push(params.points[i].x);\n pointsArr.push(params.points[i].y);\n pointsArr.push(params.points[i].z);\n }\n paramObj = paramObj.concat(pointsArr);\n paramObj[0].points = params.points;\n if (params.action == \"modify\") {\n element_interface.modify_element(paramObj);\n } else {\n element_interface.create_dynamic_wall_params(paramObj);\n }\n return StampUtil.createElementParams(paramObj[0], params);\n }\n //#endregion\n\n //#region 模型标绘\n /**\n * 标绘:创建模型对象\n * @param params\n * @returns\n */\n createElementModel(\n userdataObj = {\n type: STAMP_RTTI.SE_RTTI_ELEMENT_MODEL,\n guid: StampUtil.createGuid(),\n name: \"\",\n action: \"add\",\n meshLink: \"\",\n typeMesh: 0,\n }\n ) {\n return StampUtil.createElement(userdataObj);\n }\n\n /**\n * 参数化:创建模型对象\n * @param params\n * @returns\n */\n createElementModelParams(params: any) {\n if (!params.guid) {\n params.guid = StampUtil.createGuid();\n }\n const paramObj = [\n {\n guid: params.guid,\n name: params.name || \"\",\n type: params.type || STAMP_RTTI.SE_RTTI_ELEMENT_MODEL,\n action: \"modify\",\n desc: params.description || \"\",\n typeMesh: params.typeMesh || 0,\n meshLink: params.meshLink || \"\",\n selectable:\n params.selectable == undefined ? 1 : Number(params.selectable),\n editable: params.editable == undefined ? 1 : Number(params.editable),\n visible: params.visible == undefined || Number(params.visible),\n },\n params.points[0].x,\n params.points[0].y,\n params.points[0].z,\n 0,\n 0,\n 0,\n 1,\n 1,\n 1,\n ] as any;\n const element_interface = StampUtil.getLibax().element_interface;\n if (StampUtil.createControlElementVisbile(params)) {\n //判断如果已存在,直接显示即可\n return new Promise((resolve) => {\n resolve(params);\n });\n }\n paramObj[0].points = params.points;\n if (params.action == \"modify\") {\n element_interface.modify_element(paramObj);\n } else {\n element_interface.create_box_params(paramObj);\n }\n return StampUtil.createElementParams(paramObj[0], params);\n }\n\n //#endregion\n\n //#region 符号标绘\n /**\n * 标绘:获取点符号\n * @param lib\n * @returns\n */\n async getMarkerSymbols(lib: any) {\n return new Promise((resolve) => {\n const ms_symbol_library_interface =\n StampAPI.LibAx.ms_symbol_library_interface(StampUtil.getLibax());\n const params = [lib];\n ms_symbol_library_interface.get_marker_symbols(params);\n ms_symbol_library_interface.OnRespondGet = function (data: any) {\n ms_symbol_library_interface.OnRespondGet = undefined;\n resolve(data);\n };\n });\n }\n /**\n * 标绘:获取面符号\n * @param lib\n * @returns\n */\n async getFillSymbols(lib: any) {\n return new Promise((resolve) => {\n const ms_symbol_library_interface =\n StampAPI.LibAx.ms_symbol_library_interface(StampUtil.getLibax());\n const params = [lib];\n ms_symbol_library_interface.get_fill_symbols(params);\n ms_symbol_library_interface.OnRespondGet = function (data: any) {\n resolve(data);\n };\n });\n }\n\n /**\n * 标绘:获取线符号\n * @param lib\n * @returns\n */\n async getLineSymbols(lib: any) {\n return new Promise((resolve) => {\n const ms_symbol_library_interface =\n StampAPI.LibAx.ms_symbol_library_interface(StampUtil.getLibax());\n const params = [lib];\n ms_symbol_library_interface.get_line_symbols(params);\n ms_symbol_library_interface.OnRespondGet = function (data: any) {\n resolve(data);\n };\n });\n }\n\n /**\n * 标绘:获取标注符号\n * @param lib\n * @returns\n */\n async getLabelSymbols(lib: any) {\n return new Promise((resolve) => {\n const ms_symbol_library_interface =\n StampAPI.LibAx.ms_symbol_library_interface(StampUtil.getLibax());\n const params = [lib];\n ms_symbol_library_interface.get_label_symbols(params);\n ms_symbol_library_interface.OnRespondGet = function (data: any) {\n resolve(data);\n };\n });\n }\n\n colorObj2Num(color: any) {\n if (!color) {\n return 0xffffffff;\n }\n let red = color[1].toString(16);\n let green = color[2].toString(16);\n let blue = color[3].toString(16);\n let alpha = color[0].toString(16);\n if (red.length < 2) {\n red = \"0\" + red;\n }\n if (green.length < 2) {\n green = \"0\" + green;\n }\n if (blue.length < 2) {\n blue = \"0\" + blue;\n }\n if (alpha.length < 2) {\n alpha = \"0\" + alpha;\n }\n return Number(\"0x\" + alpha + red + green + blue);\n }\n\n readWString(data: any) {\n const arrayBuffer = new ArrayBuffer(data.length);\n const bufTmp = new Uint8Array(arrayBuffer);\n bufTmp.set(data);\n const dv = new DataView(arrayBuffer);\n let temp = 0;\n let str = \"\";\n let cursor = 0;\n while (cursor != data.length) {\n temp = dv.getUint16(cursor, true);\n cursor += 2;\n if (temp != 0) str += String.fromCharCode(temp);\n else break;\n }\n const imageBuf = bufTmp.slice(cursor);\n\n const base64 = btoa(String.fromCharCode(...imageBuf));\n return \"data:image/png;base64,\" + base64;\n }\n\n /**\n * 标绘:获取缩略图\n * @param lib\n * @returns\n */\n async getPreview(lib: any, id: any, width: any, height: any) {\n return new Promise((resolve) => {\n const ms_symbol_library_interface =\n StampAPI.LibAx.ms_symbol_library_interface(StampUtil.getLibax());\n const params = [lib, id, width, height, 1, false];\n ms_symbol_library_interface.get_symbol_preview_by_id(params);\n ms_symbol_library_interface.OnRespondPreview = function (data: any) {\n const symbol = StampUtil.readWString(data);\n resolve(symbol);\n };\n });\n }\n\n /**\n * 标绘:获取样式缩略图\n * @param lib\n * @returns\n */\n async getStylePreview(style: any, width: any, height: any) {\n return new Promise((resolve) => {\n const ms_symbol_library_interface =\n StampAPI.LibAx.ms_symbol_library_interface(StampUtil.getLibax());\n const params = [\n style.symbol_library_name\n ? style.symbol_library_name\n : style.library_name,\n style.symbol_id,\n width,\n height,\n 1,\n style.isLocal ? style.isLocal : false,\n StampUtil.colorObj2Num(style.color),\n style.outline_width,\n StampUtil.colorObj2Num(style.outline_color),\n StampUtil.colorObj2Num(style.font_color),\n style.font_name ? style.font_name : \"微软雅黑\",\n style.bold ? style.bold : false,\n style.italic ? style.italic : false,\n style.font_size ? style.font_size : 16,\n ];\n ms_symbol_library_interface.get_symbol_preview_by_id_and_style(params);\n ms_symbol_library_interface.OnRespondPreview = function (data: any) {\n const symbol = StampUtil.readWString(data);\n resolve(symbol);\n };\n });\n }\n\n //#endregion\n\n //#region 标绘操作相关\n /**\n * 修改element位置\n * @param params\n * @returns\n */\n modifyPosition(\n params: any = {\n guid: \"\",\n isMultiPoint: false, //true:多点模式;false:单点模式\n points: [],\n }\n ) {\n return new Promise((resolve) => {\n const element_interface = StampUtil.getLibax().element_interface;\n element_interface.OnStatus = (data: any) => {\n element_interface.OnStatus = null;\n resolve(data);\n };\n const paramObj = [params.guid, params.isMultiPoint ? 1 : 0];\n if (params.isMultiPoint) {\n //数组模式\n for (let i = 0; i < params.points.length; i++) {\n paramObj.push(\n params.points[i].x,\n params.points[i].y,\n params.points[i].z\n );\n }\n } else {\n paramObj.push(\n params.points[0].x,\n params.points[0].y,\n params.points[0].z,\n 0,\n 0,\n 0,\n 1,\n 1,\n 1\n );\n }\n element_interface.modify_position(paramObj);\n });\n }\n\n deleteAnalysisRes(guid: string) {\n const element_interface = StampUtil.getLibax().element_interface;\n element_interface.delete_element(guid);\n }\n\n /**\n * 根据guid删除标绘对象\n * @param guid\n */\n deleteElement(guid: string) {\n let timeoutValue: any = null;\n return new Promise((resolve) => {\n const element_interface = StampUtil.getLibax().element_interface;\n element_interface.OnStatus = (data: any) => {\n element_interface.OnStatus = null;\n if (timeoutValue) {\n clearTimeout(timeoutValue);\n }\n resolve(data);\n };\n for (let i = 0; i < this.webUIItems.length; i++) {\n if (\n this.webUIItems[i].guid == guid &&\n this.webUIItems[i].type == STAMP_RTTI.SE_RTTI_ELEMENT_ICON_WEBUI\n ) {\n this.removeWebUI(this.webUIItems[i].parentGuid);\n this.webUIItems.splice(i, 1);\n resolve(null);\n return;\n }\n }\n element_interface.delete_element(guid);\n for (let i = 0; i < element_interface.userdataArr.length; i++) {\n if (element_interface.userdataArr[i].guid == guid) {\n element_interface.userdataArr.splice(i, 1);\n break;\n }\n }\n timeoutValue = setTimeout(() => {\n resolve(null);\n }, 2000);\n });\n }\n\n /**\n * 根据guid查找标绘对象\n * @param guid\n * @returns\n */\n getElementById(guid: string) {\n const element_interface = StampUtil.getLibax().element_interface;\n for (let i = 0; i < element_interface.userdataArr.length; i++) {\n if (element_interface.userdataArr[i].guid == guid) {\n if (\n element_interface.userdataArr[i].rings &&\n element_interface.userdataArr[i].rings.length > 0 &&\n element_interface.userdataArr[i].rings[0].ring\n ) {\n element_interface.userdataArr[i].points =\n element_interface.userdataArr[i].rings[0].ring;\n }\n\n return element_interface.userdataArr[i];\n }\n }\n for (let i = 0; i < this.webUIItems.length; i++) {\n if (\n this.webUIItems[i].guid == guid &&\n this.webUIItems[i].type == STAMP_RTTI.SE_RTTI_ELEMENT_ICON_WEBUI\n ) {\n return this.webUIItems[i];\n }\n }\n return null;\n }\n\n /**\n * 获取所有标绘对象\n * @returns 所有标绘对象\n */\n getSelectObj() {\n const element_interface = StampUtil.getLibax().element_interface;\n return element_interface.userdataArr;\n }\n //#endregion\n\n //#region nc接口\n modifyElement(userdataObj: any) {\n return new Promise((resolve: any) => {\n const element_interface = StampUtil.getLibax().element_interface;\n\n element_interface.modify_element(userdataObj);\n\n StampUtil.addToUserDataArr(userdataObj);\n });\n }\n\n nextOceanGrid = function (guid: any) {\n return new Promise((resolve) => {\n const analysis_interface = StampAPI.LibAx.analysis_interface(\n StampUtil.getLibax()\n );\n analysis_interface.OnNextGridWall = function (data: any) {\n analysis_interface.OnNextGridWall = undefined;\n resolve(data?.guids || null);\n };\n analysis_interface.next_grid_wall(guid, 1000);\n });\n };\n //#endregion\n //#endregion\n\n //#region 编辑模块接口\n /**\n * 抽稀点\n * @param 点串\n */\n douglasPeuckerSimplification(params: any, minLength = 1e-4) {\n return new Promise((resolve) => {\n const geometry_algorithm_interface =\n StampUtil.getLibax().geometry_algorithm_interface;\n geometry_algorithm_interface.OnGeometryAlgorithmFinished = function (\n data: any\n ) {\n resolve(data);\n };\n geometry_algorithm_interface.douglas_peucker_simplification([\n minLength,\n params,\n ]);\n });\n }\n /**\n * 根据guid选择element对象\n * @param guid\n */\n selectByGuid(guid: string) {\n const element_interface = StampUtil.getLibax().element_interface;\n element_interface.SelectByGuid(guid);\n }\n /**\n * 编辑:选择\n */\n select(callback: any) {\n const element_interface = StampUtil.getLibax().element_interface;\n const handler = StampUtil.getLibax().handlers.get(\n StampAPI.LibAx.StampPixelStreamingHandleType.StampType_Element\n );\n handler.interface.OnGetSelectSet = (data: any) => {\n if (data && data.guids && data.guids.length > 0) {\n typeof callback == \"function\" && callback(data.guids);\n } else {\n typeof callback == \"function\" && callback([]);\n }\n };\n element_interface.ObjectEdit(handler.CommandType.ElementCommand_Pick);\n const earth =\n StampUtil.getLibax().player.webRtcController.videoPlayer.videoElement;\n earth.oncontextmenu = () => {\n earth.oncontextmenu = null;\n StampUtil.closeSelectState();\n StampUtil.closePick();\n };\n }\n\n /**\n * 编辑:移动\n */\n move(callback: any) {\n const handler = StampUtil.getLibax().handlers.get(\n StampAPI.LibAx.StampPixelStreamingHandleType.StampType_Element\n );\n const element_interface = StampAPI.LibAx.element_interface(\n StampUtil.getLibax()\n );\n handler.interface.OnGetSelectSet = (data: any) => {\n debugger;\n };\n element_interface.ObjectEdit(handler.CommandType.ElementCommand_Move);\n element_interface.OnPositionChanged = (data: any) => {\n if (data && data.selectSet && data.selectSet.length > 0) {\n typeof callback == \"function\" && callback(data);\n }\n };\n }\n\n /**\n * 移动\n * @param {*} x x方向移动距离(度)如:0.001\n * @param {*} y y方向移动距离(度)如:0.001\n * @param {*} z z方向移动距离(米)(注意:如果是贴地的,那就向上移动不了)\n */\n moveByParams(x = 0, y = 0, z = 0) {\n const params = [x, y, z, 0, 0, 0, 1, 1, 1];\n const element_interface = StampAPI.LibAx.element_interface(\n StampUtil.getLibax()\n );\n element_interface.transform_offset(params);\n }\n\n /**\n * 移动指定guid的标绘对象\n * @param guids 标绘guid集合\n * @param x\n * @param y\n * @param z\n */\n moveByGuid(guids: Array<string>, x = 0, y = 0, z = 0) {\n const params = [guids.join(\",\"), x, y, z, 0, 0, 0, 1, 1, 1];\n const element_interface = StampAPI.LibAx.element_interface(\n StampUtil.getLibax()\n );\n element_interface.transform_offset_by_guid(params);\n }\n\n /**\n * 编辑:旋转\n */\n rotate(callback: any) {\n const handler = StampUtil.getLibax().handlers.get(\n StampAPI.LibAx.StampPixelStreamingHandleType.StampType_Element\n );\n const element_interface = StampAPI.LibAx.element_interface(\n StampUtil.getLibax()\n );\n element_interface.ObjectEdit(handler.CommandType.ElementCommand_Rotate);\n element_interface.OnPositionChanged = (data: any) => {\n if (data && data.selectSet && data.selectSet.length > 0) {\n typeof callback == \"function\" && callback(data);\n }\n };\n }\n\n /**\n * 旋转\n * @param {*} x x方向旋转角度(度)\n * @param {*} y y方向旋转角度(度)\n * @param {*} z z方向旋转角度(度)\n */\n rotateByParams(x = 0, y = 0, z = 0) {\n const params = [0, 0, 0, x, y, z, 1, 1, 1];\n const element_interface = StampAPI.LibAx.element_interface(\n StampUtil.getLibax()\n );\n element_interface.transform_offset(params);\n }\n\n /**\n * 旋转指定guid的标绘对象\n * @param guids 标绘guid集合\n * @param x\n * @param y\n * @param z\n */\n rotateByGuid(guids: Array<string>, x = 0, y = 0, z = 0) {\n const params = [guids.join(\",\"), 0, 0, 0, x, y, z, 1, 1, 1];\n const element_interface = StampAPI.LibAx.element_interface(\n StampUtil.getLibax()\n );\n element_interface.transform_offset_by_guid(params);\n }\n\n /**\n * 编辑:缩放\n */\n scale(callback: any) {\n const handler = StampUtil.getLibax().handlers.get(\n StampAPI.LibAx.StampPixelStreamingHandleType.StampType_Element\n );\n const element_interface = StampAPI.LibAx.element_interface(\n StampUtil.getLibax()\n );\n element_interface.ObjectEdit(handler.CommandType.ElementCommand_Scale);\n element_interface.OnPositionChanged = (data: any) => {\n if (data && data.selectSet && data.selectSet.length > 0) {\n typeof callback == \"function\" && callback(data);\n }\n };\n }\n /**\n * 缩放\n * @param {*} x x方向缩放系数\n * @param {*} y y方向缩放系数\n * @param {*} z z方向缩放系数\n */\n scaleByParams(x = 1, y = 1, z = 1) {\n const params = [0, 0, 0, 0, 0, 0, x, y, z];\n const element_interface = StampAPI.LibAx.element_interface(\n StampUtil.getLibax()\n );\n element_interface.transform_offset(params);\n }\n\n /**\n * 缩放指定guid的标绘对象\n * @param guids 标绘guid集合\n * @param x\n * @param y\n * @param z\n */\n scaleByGuid(guids: Array<string>, x = 0, y = 0, z = 0) {\n const params = [guids.join(\",\"), 0, 0, 0, 0, 0, 0, x, y, z];\n const element_interface = StampAPI.LibAx.element_interface(\n StampUtil.getLibax()\n );\n element_interface.transform_offset_by_guid(params);\n }\n\n /**\n * 编辑:删除\n */\n delete(callback: any) {\n const element_interface = StampAPI.LibAx.element_interface(\n StampUtil.getLibax()\n );\n const handler = StampUtil.getLibax().handlers.get(\n StampAPI.LibAx.StampPixelStreamingHandleType.StampType_Element\n );\n handler.interface.OnGetSelectSet = (data: any) => {\n if (data && data.guids && data.guids.length > 0) {\n for (let i = 0; i < data.guids.length; i++) {\n StampUtil.deleteElement(data.guids[i]);\n }\n }\n StampUtil.closeSelectState();\n typeof callback == \"function\" && callback(data.guids);\n };\n element_interface.ObjectEdit(\n handler.CommandType.ElementCommand_GetSelectSet\n );\n }\n\n /**\n * 编辑:贴地\n */\n toGround(callback: any) {\n const handler = StampUtil.getLibax().handlers.get(\n StampAPI.LibAx.StampPixelStreamingHandleType.StampType_Element\n );\n const element_interface = StampUtil.getLibax().element_interface;\n element_interface.ObjectEdit(\n handler.CommandType.ElementCommand_ClampTerrain\n );\n element_interface.OnPositionChanged = (data: any) => {\n if (data && data.selectSet && data.selectSet.length > 0) {\n typeof callback == \"function\" && callback(data);\n }\n };\n }\n /**\n * 编辑:克隆\n */\n toClone(callback: any) {\n const handler = StampUtil.getLibax().handlers.get(\n StampAPI.LibAx.StampPixelStreamingHandleType.StampType_Element\n );\n const element_interface = StampAPI.LibAx.element_interface(\n StampUtil.getLibax()\n );\n handler.interface.OnGetSelectSet = (data: any) => {\n StampUtil.closeSelectState();\n StampUtil.closePick();\n if (data && data.guids && data.guids.length > 0) {\n element_interface.OnAdded = (res: any) => {\n StampUtil.addToUserDataArr(res);\n typeof callback == \"function\" && callback(res, data.guids);\n };\n element_interface.clone_element(data.guids);\n } else {\n typeof callback == \"function\" && callback([]);\n }\n };\n element_interface.ObjectEdit(handler.CommandType.ElementCommand_Pick);\n const earth =\n StampUtil.getLibax().player.webRtcController.videoPlayer.videoElement;\n earth.oncontextmenu = () => {\n earth.oncontextmenu = null;\n StampUtil.closeSelectState();\n StampUtil.closePick();\n };\n }\n /**\n * 编辑:移动顶点\n */\n movePoint(callback: any) {\n const handler = StampUtil.getLibax().handlers.get(\n StampAPI.LibAx.StampPixelStreamingHandleType.StampType_Element\n );\n const element_interface = StampAPI.LibAx.element_interface(\n StampUtil.getLibax()\n );\n element_interface.ObjectEdit(handler.CommandType.ElementCommand_MovePoint);\n element_interface.OnPositionChanged = (data: any) => {\n if (data && data.selectSet && data.selectSet.length > 0) {\n typeof callback == \"function\" && callback(data);\n }\n };\n }\n /**\n * 编辑:增加顶点\n */\n insertPoint(callback: any) {\n const handler = StampUtil.getLibax().handlers.get(\n StampAPI.LibAx.StampPixelStreamingHandleType.StampType_Element\n );\n const element_interface = StampAPI.LibAx.element_interface(\n StampUtil.getLibax()\n );\n element_interface.ObjectEdit(handler.CommandType.ElementCommand_AddPoint);\n element_interface.OnPositionChanged = (data: any) => {\n if (data && data.selectSet && data.selectSet.length > 0) {\n typeof callback == \"function\" && callback(data);\n }\n };\n }\n /**\n * 编辑:删除顶点\n */\n deletePoint(callback: any) {\n const handler = StampUtil.getLibax().handlers.get(\n StampAPI.LibAx.StampPixelStreamingHandleType.StampType_Element\n );\n const element_interface = StampAPI.LibAx.element_interface(\n StampUtil.getLibax()\n );\n element_interface.ObjectEdit(\n handler.CommandType.ElementCommand_DeletePoint\n );\n element_interface.OnPositionChanged = (data: any) => {\n if (data && data.selectSet && data.selectSet.length > 0) {\n typeof callback == \"function\" && callback(data);\n }\n };\n }\n\n //#endregion\n\n //#region 场景功能\n /**\n * 视频录制开始\n * @param videoName\n * @param videoExt mp4或者webm\n */\n recordVideoStart(videoName = \"capture\", videoExt = \"webm\") {\n const video = document.getElementById(\"streamingVideo\") as any;\n const stream = video.captureStream(30);\n let options = {\n mimeType: \"video/webm; codecs=vp9\", // 输出格式; 编码格式\n videoBitsPerSecond: 8 * 1024 * 1024, //推荐8Mbps 8K画质\n timeSlice: 1000, // 分段存储(毫秒)\n frameInterval: 10, //采集关键帧间隔\n };\n if (videoExt && videoExt.toLowerCase() == \"mp4\") {\n options = {\n mimeType: \"video/mp4; codecs=vp9\", // 输出格式; 编码格式\n videoBitsPerSecond: 8 * 1024 * 1024, //推荐8Mbps 8K画质\n timeSlice: 1000, // 分段存储(毫秒)\n frameInterval: 10, //采集关键帧间隔\n };\n }\n\n this.recordedChunks = [];\n this.mediaRecorder = new MediaRecorder(stream, options);\n this.mediaRecorder.ondataavailable = (event: any) => {\n if (event.data.size > 0) {\n this.recordedChunks.push(event.data);\n const blob = new Blob(this.recordedChunks, {\n type: `video/${videoExt}`,\n });\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = `${videoName}.${videoExt}`;\n a.click();\n window.URL.revokeObjectURL(url);\n }\n };\n this.mediaRecorder.start();\n }\n /**\n * 视频录制结束\n */\n recordVideoStop() {\n if (this.mediaRecorder) {\n this.mediaRecorder.stop();\n }\n }\n /**\n * 出图\n * @param filename 图片名称\n */\n screenShot(filename: any, width?: any, height?: any) {\n const video = document.querySelector(\"#streamingVideo\") as HTMLVideoElement;\n const canvas = document.createElement(\"canvas\") as HTMLCanvasElement;\n canvas.width = width || video.videoWidth;\n canvas.height = height || video.videoHeight;\n const cContext = canvas.getContext(\"2d\") as any;\n if (cContext) {\n cContext.drawImage(video, 0, 0, canvas.width, canvas.height); // 图片大小和视频分辨率一致\n }\n\n canvas.toBlob(\n function (blob: any) {\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.style.display = \"none\";\n a.href = url;\n a.download = filename;\n document.body.appendChild(a);\n a.click();\n setTimeout(function () {\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n }, 1000);\n },\n \"image/jpeg\",\n 1\n );\n }\n\n /**\n * 独立场景\n */\n independentScene() {\n this.clearTerrainResult();\n StampUtil.createPolygon().then((data: any) => {\n StampUtil.getLibax().shape_creator_interface.clear();\n if (data.Points == undefined || data.Points.length < 3) {\n return;\n }\n const terrain_manager_interface =\n StampAPI.LibAx.terrain_manager_interface(StampUtil.getLibax());\n const pointsArr = [];\n for (let i = 0; i < data.Points.length; i++) {\n pointsArr.push({\n x: data.Points[i].X,\n y: data.Points[i].Y,\n z: data.Points[i].Z,\n });\n }\n const polygon = pointsArr;\n const need_fill = true;\n const depth = -10;\n const b_use_dom = false;\n terrain_manager_interface.get_terrain_by_polygon(\n polygon,\n need_fill,\n \"\",\n \"\",\n depth,\n b_use_dom\n );\n });\n }\n\n /**\n * 遮罩\n */\n maskScreenByPolygon(transparentValue = 1) {\n this.clearTerrainResult();\n StampUtil.createPolygon().then((data: any) => {\n StampUtil.getLibax().shape_creator_interface.clear();\n if (data.Points == undefined || data.Points.length < 3) {\n return;\n }\n const terrain_manager_interface =\n StampAPI.LibAx.terrain_manager_interface(StampUtil.getLibax());\n const pointsArr = [];\n for (let i = 0; i < data.Points.length; i++) {\n pointsArr.push({\n x: data.Points[i].X,\n y: data.Points[i].Y,\n z: data.Points[i].Z,\n });\n }\n const polygon = [pointsArr];\n terrain_manager_interface.mask_screen_by_polygon(\n polygon,\n transparentValue\n );\n });\n }\n\n /**\n * 遮罩扩展版(基于 element guid)\n * @param maskEnable 是否启用遮罩\n * @param fillColor 外层颜色(含透明度),默认 0x80000000\n * @param borderColor 边框颜色(不使用颜色上的透明度,透明度跟 fillColor 一致),默认 0xffffffff\n * @param borderWidth 边框宽度,默认 5\n * @param shapeType 形状类型:polygon(多边形)| circle(圆形),默认 polygon\n */\n maskScreenByPolygonEx(\n maskEnable: boolean,\n fillColor = 0x80000000,\n borderColor = 0xffffffff,\n borderWidth = 5,\n shapeType: \"polygon\" | \"circle\" = \"polygon\"\n ) {\n if (!maskEnable) {\n if (this._maskScreenExGuid) {\n const environment_interface = StampAPI.LibAx.environment_interface(\n StampUtil.getLibax()\n );\n environment_interface.mask(\n false,\n this._maskScreenExGuid,\n fillColor,\n borderColor,\n borderWidth\n );\n this._maskScreenExGuid = null;\n }\n return;\n }\n const drawFn =\n shapeType === \"circle\"\n ? StampUtil.createElementCircle()\n : StampUtil.createElementPolygon();\n drawFn.then((res: any) => {\n if (!res || !res.guid) return;\n this._maskScreenExGuid = res.guid;\n const environment_interface = StampAPI.LibAx.environment_interface(\n StampUtil.getLibax()\n );\n environment_interface.mask(\n true,\n res.guid,\n fillColor,\n borderColor,\n borderWidth\n );\n });\n }\n\n /**\n * 清除遮罩场景\n */\n clearMaskScreenEx() {\n if (this._maskScreenExGuid) {\n const environment_interface = StampAPI.LibAx.environment_interface(\n StampUtil.getLibax()\n );\n environment_interface.mask(\n false,\n this._maskScreenExGuid,\n 0x80000000,\n 0xffffffff,\n 5\n );\n this._maskScreenExGuid = null;\n }\n }\n\n /**\n * 场景漫游:开始漫游\n * @param roleid 角色ID\n */\n startRoamTrack(roleid: string, roamtype = 2) {\n return new Promise((resolve, reject) => {\n const roam_interface = StampUtil.getLibax().roam_interface;\n roam_interface.OnRoleLoaded = function (data: any) {\n roam_interface.OnRoleLoaded = undefined;\n StampUtil.getLibax().shape_creator_interface.clear();\n //第一次添加运动物体后漫游视角没有跟着动,暂时加个延时解决\n roam_interface.start_tracking(roleid, roamtype);\n resolve(data);\n };\n roam_interface.add_role(roleid);\n });\n }\n\n /**\n * 改变漫游人称视角\n * @param roleid 角色ID\n * @param roamType 人称视角: 1、第一人称;2:第三人称跟随模式\n */\n changeRoamType(roleid: string, roamType: number) {\n const roam_interface = StampAPI.LibAx.roam_interface(StampUtil.getLibax());\n roam_interface.start_tracking(roleid, roamType);\n }\n\n /**\n * 停止漫游\n */\n stopRoamTrack() {\n const roam_interface = StampAPI.LibAx.roam_interface(StampUtil.getLibax());\n roam_interface.stop_tracking();\n roam_interface.OnRoleLoaded = undefined;\n }\n removeRole(roleid: string) {\n const roam_interface = StampAPI.LibAx.roam_interface(StampUtil.getLibax());\n roam_interface.remove_role(roleid);\n }\n /**\n * 改变朝向\n */\n changeThirdTrackHeading(direction: number, roleid: string) {\n const roam_interface = StampAPI.LibAx.roam_interface(StampUtil.getLibax());\n roam_interface.change_third_track_heading(direction, roleid);\n }\n\n /**\n * 鼠标按键按下\n * @param event\n * @param type\n * @param is_animation\n * @param callback\n */\n location_key_down_func(\n event: any,\n type: number,\n is_animation: boolean,\n isDynamicPeople: boolean,\n dynamicName: string,\n walkSpeed: number,\n runSpeed: number,\n isGoing: boolean,\n callback: any\n ) {\n const roam_interface = StampAPI.LibAx.roam_interface(StampUtil.getLibax());\n if (type != 0) {\n if (event.shiftKey && event.which === 16) {\n // shift按下\n if (isGoing) {\n // 正在行走,改成跑步\n roam_interface.set_velocity(0.0, 0.0, runSpeed);\n }\n } else if (event.shiftKey && event.which === 87) {\n //同时按下shift和w键\n isGoing = true;\n roam_interface.set_velocity(0.0, 0.0, runSpeed);\n if (isDynamicPeople && !is_animation) {\n is_animation = true;\n roam_interface.play_animation(dynamicName + \"_Anim\");\n }\n } else if (event.shiftKey && event.which === 83) {\n //同时按下shift和s键\n isGoing = true;\n roam_interface.set_velocity(0.0, 0.0, -runSpeed);\n if (isDynamicPeople && !is_animation) {\n is_animation = true;\n roam_interface.play_animation(dynamicName + \"_Anim\");\n }\n } else {\n switch (event.keyCode) {\n case 87: //w前进\n isGoing = true;\n roam_interface.set_velocity(0.0, 0.0, walkSpeed);\n if (isDynamicPeople && !is_animation) {\n //前进和后退需要动作\n is_animation = true;\n roam_interface.play_animation(dynamicName + \"_Anim\");\n }\n break;\n case 65: //a左转\n roam_interface.set_rotation_velocity(-60);\n break;\n case 68: //d右转\n roam_interface.set_rotation_velocity(60);\n break;\n case 83: //s后退\n isGoing = true;\n roam_interface.set_velocity(0.0, 0.0, -walkSpeed);\n if (isDynamicPeople && !is_animation) {\n is_animation = true;\n roam_interface.play_animation(dynamicName + \"_Anim\");\n }\n break;\n }\n }\n }\n callback(is_animation, isGoing);\n }\n\n /**\n * 鼠标按键松开\n * @param event\n * @param type\n * @param is_animation\n * @param callback\n */\n location_key_up_func(\n event: any,\n type: number,\n is_animation: any,\n isDynamicPeople: boolean,\n dynamicName: string,\n walkSpeed: number,\n isGoing: boolean,\n callback: any\n ) {\n const roam_interface = StampAPI.LibAx.roam_interface(StampUtil.getLibax());\n if (type != 0) {\n if (!event.shiftKey && event.which === 16) {\n //shift按键抬起\n if (isGoing) {\n //运动中,改成慢行\n roam_interface.set_velocity(0.0, 0.0, walkSpeed);\n } else {\n //否则就停止\n roam_interface.set_velocity(0.0, 0.0, 0.0);\n }\n } else {\n switch (event.keyCode) {\n case 87: //w前进\n isGoing = false;\n roam_interface.set_velocity(0.0, 0.0, 0.0);\n if (isDynamicPeople && is_animation) {\n is_animation = false;\n roam_interface.stop_animation(dynamicName + \"_Anim\");\n }\n break;\n case 65: //a左转\n roam_interface.set_rotation_velocity(0.0);\n break;\n case 68: //d右转\n roam_interface.set_rotation_velocity(0.0);\n break;\n case 83: //s后退\n isGoing = false;\n roam_interface.set_velocity(0.0, 0.0, 0.0);\n if (isDynamicPeople && is_animation) {\n is_animation = false;\n roam_interface.stop_animation(dynamicName + \"_Anim\");\n }\n break;\n }\n }\n }\n callback(is_animation, isGoing);\n }\n /**\n * 多边形是否有点在工程范围内\n * @param polygonPoints\n * @param lonlatBox\n * @returns\n */\n isInProject(polygonPoints: any, lonlatBox: any) {\n if (!lonlatBox) {\n return true;\n }\n for (let i = 0; i < polygonPoints.length; i++) {\n const llBox = {\n West: 0,\n East: 0,\n North: 0,\n South: 0,\n };\n for (let j = 0; j < polygonPoints[i].length; j++) {\n if (\n parseFloat(polygonPoints[i][j].x) > lonlatBox.West &&\n parseFloat(polygonPoints[i][j].x) < lonlatBox.East &&\n parseFloat(polygonPoints[i][j].y) > lonlatBox.South &&\n parseFloat(polygonPoints[i][j].y) < lonlatBox.North\n ) {\n return true; //在范围内\n }\n llBox.East =\n llBox.East == 0\n ? parseFloat(polygonPoints[i][j].x)\n : Math.max(parseFloat(polygonPoints[i][j].x), llBox.East);\n llBox.West =\n llBox.West == 0\n ? parseFloat(polygonPoints[i][j].x)\n : Math.min(parseFloat(polygonPoints[i][j].x), llBox.West);\n llBox.North =\n llBox.North == 0\n ? parseFloat(polygonPoints[i][j].y)\n : Math.min(parseFloat(polygonPoints[i][j].y), llBox.North);\n llBox.South =\n llBox.South == 0\n ? parseFloat(polygonPoints[i][j].y)\n : Math.min(parseFloat(polygonPoints[i][j].y), llBox.South);\n }\n if (\n (lonlatBox.West > llBox.West &&\n lonlatBox.West < llBox.East &&\n lonlatBox.North < llBox.North &&\n lonlatBox.North > llBox.South) || //左上角\n (lonlatBox.West > llBox.West &&\n lonlatBox.West < llBox.East &&\n lonlatBox.South < llBox.North &&\n lonlatBox.South > llBox.South) || //左下角\n (lonlatBox.East > llBox.West &&\n lonlatBox.East < llBox.East &&\n lonlatBox.North < llBox.North &&\n lonlatBox.North > llBox.South) || //右上角\n (lonlatBox.East > llBox.West &&\n lonlatBox.East < llBox.East &&\n lonlatBox.South < llBox.North &&\n lonlatBox.South > llBox.South)\n ) {\n //右下角\n return true; //在范围内\n }\n }\n return false; //不在范围内\n }\n /**\n * 图层压平\n */\n async flattenLayerByRegionAndHeightWithGuid(\n params = {\n height: 0,\n layerids: \"\",\n polygonPoints: [] as Array<Array<any>>,\n }\n ) {\n if (params.layerids == undefined) {\n return;\n }\n if (Object.keys(this.projectModelLayerMap).length == 0) {\n await this.initProjectModelLayerMap(); //获取工程和模型图层对应关系\n }\n const layeridArr = params.layerids.split(\",\");\n //根据工程范围筛选图层\n for (const item in this.projectModelLayerMap) {\n //不在范围内则需要从guid列表里面剔除\n if (\n !this.isInProject(\n params.polygonPoints,\n this.projectModelLayerMap[item].lonlatBox\n )\n ) {\n const layerArr = this.projectModelLayerMap[item].layers;\n for (let i = 0; i < layerArr.length; i++) {\n const iIndex = layeridArr.indexOf(layerArr[i].guid);\n if (iIndex != -1) {\n layeridArr.splice(iIndex, 1); //剔除\n }\n }\n }\n }\n const layerids = layeridArr.join(\",\");\n return new Promise((resolve) => {\n const layer_manager_interface = StampAPI.LibAx.layer_manager_interface(\n StampUtil.getLibax()\n );\n layer_manager_interface.OnEffectFinish = function (data: any) {\n layer_manager_interface.OnEffectFinish = undefined;\n resolve(data);\n };\n const polygonPoints = params.polygonPoints;\n const height = params.height || 0;\n const paramsObj = [polygonPoints, layerids, height, true];\n layer_manager_interface.flatten_layer_by_region_and_height_with_guid(\n paramsObj\n );\n });\n }\n\n /**\n * 清除压平效果\n */\n async clearEffect(guid = \"\") {\n return new Promise((resolve) => {\n const layer_manager_interface = StampAPI.LibAx.layer_manager_interface(\n StampUtil.getLibax()\n );\n layer_manager_interface.OnEffectFinish = function (data: any) {\n layer_manager_interface.OnEffectFinish = undefined;\n resolve(data);\n };\n layer_manager_interface.clear_effect(guid);\n });\n }\n\n /**\n * 获取父节点图层\n * @param layerArr\n * @returns\n */\n getParentLayerNode(layerInfo: any, layerid: string) {\n const layerArr = layerInfo.sub_layers;\n if (!layerArr) {\n return null;\n }\n for (let i = 0; i < layerArr.length; i++) {\n if (layerArr[i].guid == layerid) {\n return layerInfo;\n } else if (layerArr[i].sub_layers && layerArr[i].sub_layers.length > 0) {\n //有子图层\n const tmpLayer = this.getParentLayerNode(layerArr[i], layerid) as any;\n if (tmpLayer) {\n return tmpLayer;\n }\n }\n }\n return null;\n }\n\n /**\n * 获取模型图层guids\n * @param layerArr\n * @returns\n */\n getUpdateModelLayerids(layerArr: any, planFolderGuid = \"\") {\n let modelArr = [] as any;\n for (let i = 0; i < layerArr.length; i++) {\n if (\n layerArr[i].sub_layers &&\n layerArr[i].sub_layers.length > 0 &&\n layerArr[i].rtti != STAMP_RTTI.SE_RTTI_PIPELINE_LAYER && //非管线图层\n layerArr[i].guid !== planFolderGuid\n ) {\n const demids = StampUtil.getUpdateModelLayerids(\n layerArr[i].sub_layers,\n planFolderGuid\n ) as any;\n modelArr = modelArr.concat(demids);\n } else {\n if (\n layerArr[i].rtti == STAMP_RTTI.SE_RTTI_MODEL_LOD_LAYER ||\n layerArr[i].rtti == STAMP_RTTI.SE_RTTI_BUILDING_LAYER\n ) {\n modelArr.push({\n guid: layerArr[i].guid,\n name: layerArr[i].name,\n rtti: layerArr[i].rtti,\n });\n }\n }\n }\n return modelArr;\n }\n\n /**\n * 获取模型图层guids\n * @param layerArr\n * @returns\n */\n getModelLayerids(layerArr: any, planFolderGuid = \"\") {\n let modelArr = [] as any;\n for (let i = 0; i < layerArr.length; i++) {\n if (\n layerArr[i].sub_layers &&\n layerArr[i].sub_layers.length > 0 &&\n layerArr[i].rtti != STAMP_RTTI.SE_RTTI_PIPELINE_LAYER && //非管线图层\n layerArr[i].guid !== planFolderGuid\n ) {\n const demids = StampUtil.getModelLayerids(\n layerArr[i].sub_layers,\n planFolderGuid\n ) as any;\n modelArr = modelArr.concat(demids);\n } else {\n if (\n layerArr[i].rtti == STAMP_RTTI.SE_RTTI_MODEL_LOD_LAYER ||\n layerArr[i].rtti == STAMP_RTTI.SE_RTTI_UE_MODEL_LAYER ||\n layerArr[i].rtti == STAMP_RTTI.SE_RTTI_BLOCK_LAYER ||\n layerArr[i].rtti == STAMP_RTTI.SE_RTTI_OBLIQUE_PHOTO_LAYER ||\n layerArr[i].rtti == STAMP_RTTI.SE_RTTI_BILLBOARD_LAYER ||\n layerArr[i].rtti == STAMP_RTTI.SE_RTTI_MATCH_MODEL_LAYER ||\n layerArr[i].rtti == STAMP_RTTI.SE_RTTI_BUILDING_LAYER ||\n layerArr[i].rtti == STAMP_RTTI.SE_RTTI_BIM_LAYER\n ) {\n modelArr.push({\n guid: layerArr[i].guid,\n name: layerArr[i].name,\n rtti: layerArr[i].rtti,\n });\n }\n }\n }\n return modelArr;\n }\n\n /**\n * 获取模型图层guids(除去树模型的)\n * @param layerArr\n * @returns\n */\n getBuildingModelLayerids(layerArr: any) {\n let modelArr = [] as any;\n for (let i = 0; i < layerArr.length; i++) {\n if (\n layerArr[i].sub_layers &&\n layerArr[i].sub_layers.length > 0 &&\n layerArr[i].rtti != STAMP_RTTI.SE_RTTI_PIPELINE_LAYER //非管线图层\n ) {\n const demids = StampUtil.getBuildingModelLayerids(\n layerArr[i].sub_layers\n ) as any;\n modelArr = modelArr.concat(demids);\n } else {\n if (\n layerArr[i].rtti == STAMP_RTTI.SE_RTTI_MODEL_LOD_LAYER ||\n layerArr[i].rtti == STAMP_RTTI.SE_RTTI_UE_MODEL_LAYER ||\n layerArr[i].rtti == STAMP_RTTI.SE_RTTI_BLOCK_LAYER ||\n layerArr[i].rtti == STAMP_RTTI.SE_RTTI_BUILDING_LAYER ||\n layerArr[i].rtti == STAMP_RTTI.SE_RTTI_BIM_LAYER\n ) {\n modelArr.push({\n guid: layerArr[i].guid,\n name: layerArr[i].name,\n rtti: layerArr[i].rtti,\n });\n }\n }\n }\n return modelArr;\n }\n\n /**\n * 获取图层对象\n * @param layerArr 图层数组\n * @param rtti 图层类型\n * @returns\n */\n getLayeridsByType(layerArr: any, rtti: number) {\n let modelArr = [] as any;\n for (let i = 0; i < layerArr.length; i++) {\n if (\n layerArr[i].sub_layers &&\n layerArr[i].sub_layers.length > 0 &&\n layerArr[i].rtti != STAMP_RTTI.SE_RTTI_PIPELINE_LAYER //非管线图层\n ) {\n const demids = StampUtil.getBuildingModelLayerids(\n layerArr[i].sub_layers\n ) as any;\n modelArr = modelArr.concat(demids);\n } else {\n if (layerArr[i].rtti == rtti) {\n modelArr.push({\n guid: layerArr[i].guid,\n name: layerArr[i].name,\n rtti: layerArr[i].rtti,\n });\n }\n }\n }\n return modelArr;\n }\n\n /**\n * 获取倾斜模型图层guids\n * @param layerArr\n * @returns\n */\n getObliquePhotoLayerids(layerArr: any) {\n let modelArr = [] as any;\n for (let i = 0; i < layerArr.length; i++) {\n if (\n layerArr[i].sub_layers &&\n layerArr[i].sub_layers.length > 0 &&\n layerArr[i].rtti != STAMP_RTTI.SE_RTTI_PIPELINE_LAYER //非管线图层\n ) {\n const demids = StampUtil.getObliquePhotoLayerids(\n layerArr[i].sub_layers\n ) as any;\n modelArr = modelArr.concat(demids);\n } else {\n if (layerArr[i].rtti == STAMP_RTTI.SE_RTTI_OBLIQUE_PHOTO_LAYER) {\n modelArr.push({\n guid: layerArr[i].guid,\n name: layerArr[i].name,\n rtti: layerArr[i].rtti,\n keyfield: layerArr[i].keyfield,\n });\n }\n }\n }\n return modelArr;\n }\n\n /**\n *双屏显示\n */\n doubleScreen(earthDomElement: any, errorDomElement: any) {\n return new Promise((resolve: any) => {\n const earthDiv = document.getElementById(\"earthDiv\");\n const earthDiv1 = document.getElementById(\"earthDiv1\");\n const earthDiv2 = document.getElementById(\"earthDiv2\");\n earthDiv?.classList.remove(\"whole\");\n earthDiv?.classList.add(\"half\");\n earthDiv1?.classList.add(\"half\");\n earthDiv1?.classList.remove(\"hide\");\n earthDiv?.classList.remove(\"three\");\n earthDiv1?.classList.remove(\"three\");\n earthDiv2?.classList.remove(\"three\");\n earthDiv2?.classList.add(\"hide\");\n\n if (StampAPI.lib_ax2 && StampAPI.lib_ax2.player != undefined) {\n StampAPI.lib_ax2.player.webRtcController.closeSignalingServer();\n StampAPI.lib_ax2.earthDomElement = null;\n }\n\n if (StampAPI.lib_ax1 && StampAPI.lib_ax1.earthDomElement != null) {\n resolve();\n } else {\n StampAPI.initVideoPlayer({\n earthDomElement: earthDomElement,\n errorDomElement: errorDomElement,\n iIndex: 1,\n }).then(() => {\n resolve();\n });\n }\n });\n }\n /**\n * 三屏显示\n */\n threeScreen(earthDomElement1: any, earthDomElement2: any) {\n return new Promise((resolve: any) => {\n const earthDiv = document.getElementById(\"earthDiv\");\n const earthDiv1 = document.getElementById(\"earthDiv1\");\n const earthDiv2 = document.getElementById(\"earthDiv2\");\n earthDiv?.classList.remove(\"whole\");\n earthDiv?.classList.add(\"three\");\n earthDiv1?.classList.add(\"three\");\n earthDiv1?.classList.remove(\"hide\");\n earthDiv2?.classList.add(\"three\");\n earthDiv2?.classList.remove(\"hide\");\n earthDiv?.classList.remove(\"half\");\n earthDiv1?.classList.remove(\"half\");\n\n if (StampAPI.lib_ax1 && StampAPI.lib_ax1.earthDomElement != null) {\n StampAPI.initVideoPlayer({\n earthDomElement: earthDomElement2.earthDiv2,\n errorDomElement: earthDomElement2.errorDiv2,\n iIndex: 2,\n }).then(() => {\n resolve();\n });\n } else {\n StampAPI.initVideoPlayer({\n earthDomElement: earthDomElement1.earthDiv1,\n errorDomElement: earthDomElement1.errorDiv1,\n iIndex: 1,\n }).then(() => {\n StampAPI.initVideoPlayer({\n earthDomElement: earthDomElement2.earthDiv2,\n errorDomElement: earthDomElement2.errorDiv2,\n iIndex: 2,\n }).then(() => {\n resolve();\n });\n });\n }\n });\n }\n /**\n *单屏显示\n */\n singleScreen() {\n const earthDiv = document.getElementById(\"earthDiv\");\n const earthDiv1 = document.getElementById(\"earthDiv1\");\n const earthDiv2 = document.getElementById(\"earthDiv2\");\n earthDiv?.classList.remove(\"half\");\n earthDiv?.classList.add(\"whole\");\n earthDiv1?.classList.add(\"hide\");\n earthDiv1?.classList.remove(\"half\");\n earthDiv?.classList.remove(\"three\");\n earthDiv1?.classList.remove(\"three\");\n earthDiv2?.classList.remove(\"three\");\n earthDiv2?.classList.add(\"hide\");\n if (StampAPI.lib_ax1 && StampAPI.lib_ax1.player != undefined) {\n StampAPI.lib_ax1.player.webRtcController.closeSignalingServer();\n StampAPI.lib_ax1.earthDomElement = null;\n }\n if (StampAPI.lib_ax2 && StampAPI.lib_ax2.player != undefined) {\n StampAPI.lib_ax2.player.webRtcController.closeSignalingServer();\n StampAPI.lib_ax2.earthDomElement = null;\n }\n this.updateEarthSize();\n }\n /**\n * 联动\n */\n syncControl(screen_num = 2) {\n const params = [1];\n const handlers = [] as any;\n handlers[0] = StampAPI.LibAx.global_control_interface(StampAPI.lib_ax);\n handlers[1] = StampAPI.LibAx.global_control_interface(StampAPI.lib_ax1);\n if (StampAPI.lib_ax2) {\n handlers[2] = StampAPI.LibAx.global_control_interface(StampAPI.lib_ax2);\n }\n\n for (let i = 0; i < screen_num; i++) {\n handlers[i].double_screen_sync(params);\n }\n\n StampAPI.LibAx.double_screen_sync = true;\n StampUtil.sync(screen_num);\n }\n\n sync(screen_num: number) {\n const observer_handlers = [] as any;\n const handlers = [] as any;\n const goto_lookat_finisheds = [] as any;\n let goto_lookat_all_finished = true;\n\n if (StampAPI.lib_ax) {\n observer_handlers[0] = StampAPI.LibAx.globe_observer_interface(\n StampAPI.lib_ax\n );\n }\n\n if (StampAPI.lib_ax1) {\n observer_handlers[1] = StampAPI.LibAx.globe_observer_interface(\n StampAPI.lib_ax1\n );\n }\n if (StampAPI.lib_ax2) {\n observer_handlers[2] = StampAPI.LibAx.globe_observer_interface(\n StampAPI.lib_ax2\n );\n }\n if (StampAPI.lib_ax) {\n handlers[0] = StampAPI.LibAx.global_control_interface(StampAPI.lib_ax);\n }\n if (StampAPI.lib_ax1) {\n handlers[1] = StampAPI.LibAx.global_control_interface(StampAPI.lib_ax1);\n }\n if (StampAPI.lib_ax2) {\n handlers[2] = StampAPI.LibAx.global_control_interface(StampAPI.lib_ax2);\n }\n\n for (let i = 0; i < screen_num; ++i) {\n goto_lookat_finisheds[i] = false;\n }\n for (let i = 0; i < screen_num; ++i) {\n handlers[i].OnFlytoFinished = function (data: any, handler: any) {\n if (!StampAPI.LibAx.double_screen_sync) {\n return;\n }\n\n getPose(handler);\n };\n\n handlers[i].OnObserverChanged = function (data: any, handler: any) {\n if (!StampAPI.LibAx.double_screen_sync || !goto_lookat_all_finished) {\n if (StampAPI.LibAx.double_screen_sync) {\n update_finish_status(handler);\n }\n\n return;\n }\n\n getPose(handler);\n };\n\n observer_handlers[i].OnGetPoseFinished = function (\n data: any,\n handler: any\n ) {\n if (StampAPI.LibAx.double_screen_sync) {\n const params = [];\n params[0] = data.lon;\n params[1] = data.lat;\n params[2] = data.alt;\n params[3] = data.heading;\n params[4] = data.tilt;\n params[5] = data.roll;\n params[6] = 0;\n\n for (\n let second_screen_index = 0;\n second_screen_index < screen_num;\n ++second_screen_index\n ) {\n if (observer_handlers[second_screen_index] != handler) {\n goto_lookat_finisheds[second_screen_index] = false;\n handlers[second_screen_index].go_to_lookat(params);\n } else {\n goto_lookat_finisheds[second_screen_index] = true;\n }\n }\n }\n };\n\n handlers[i].OnGotoLookAtFinished = function (data: any, handler: any) {};\n }\n\n observer_handlers[0].get_pose();\n\n function update_finish_status(handler: any) {\n const current_index = find_handler_index(handler);\n goto_lookat_finisheds[current_index] = true;\n goto_lookat_all_finished = check_goto_lookat_finshed();\n }\n\n function check_goto_lookat_finshed() {\n for (let i = 0; i < screen_num; ++i) {\n if (!goto_lookat_finisheds[i]) {\n return false;\n }\n }\n return true;\n }\n\n function getPose(handler: any) {\n const current_index = find_handler_index(handler);\n observer_handlers[current_index].get_pose();\n goto_lookat_all_finished = false;\n for (let i = 0; i < screen_num; ++i) {\n goto_lookat_finisheds[i] = false;\n }\n }\n\n function find_handler_index(handler: any) {\n for (let i = 0; i < screen_num; ++i) {\n if (handler == handlers[i]) {\n return i;\n }\n }\n\n return -1;\n }\n }\n\n /**\n * 返回左下角信息栏信息\n * @constructor\n */\n getObserverChangedEvent(callback: any) {\n const handler = StampUtil.getLibax().global_control_interface;\n const observer_handler = StampUtil.getLibax().globe_observer_interface;\n handler.double_screen_sync([1]); //开启监控\n handler.OnObserverChanged = function () {\n observer_handler.get_pose();\n };\n observer_handler.OnGetPoseFinished = function (data: any) {\n typeof callback == \"function\" && callback(data);\n };\n }\n\n /**\n * 取消联动\n */\n closeSyncControl() {\n try {\n const handler = StampAPI.lib_ax.global_control_interface;\n const handler1 = StampAPI.lib_ax1.global_control_interface;\n\n const params = [0];\n handler.double_screen_sync(params);\n handler1.double_screen_sync(params);\n\n if (StampAPI.lib_ax2) {\n const handler2 = StampAPI.lib_ax2.global_control_interface;\n handler2.double_screen_sync(params);\n }\n\n StampAPI.LibAx.double_screen_sync = false;\n const focus = StampAPI.LibAx.focus.focus_none;\n } catch (ex) {}\n }\n\n /**\n *创建GPS路径\n * @param guid\n * @param points\n * @param isSpherical 默认为true 经纬度坐标,false为平面投影坐标\n */\n createGpsTrack(guid: string, points: any, isSpherical: any = true) {\n const gps_interface = StampAPI.LibAx.gps_interface(StampUtil.getLibax());\n for (let i = 0; i < points.length - 1; i++) {\n gps_interface.add_pre_gps(\n guid,\n points[i].x,\n points[i].y,\n points[i].z,\n points[i + 1].x,\n points[i + 1].y,\n points[i + 1].z,\n 1.0,\n isSpherical\n );\n }\n }\n\n /**\n *开始运动\n * @param params\n * @param view 3:跟随;4:不跟随\n * @returns\n */\n playGps(\n params = {\n gpsTrackGuid: \"\", //gpstrack路径guid\n modelUrl: \"\", //运动物体guid\n attachModelGuid: \"\", //模型guid\n attachUePOIGuid: \"\", //附加UEPOI的guid\n elevationType: 0, //高程类型(0:数据高程;1:地形高程)\n } as any,\n view: any,\n keepTiltRoll: boolean //不穿就默认为false\n ) {\n return new Promise((resolve) => {\n const gps_id = params.gpsTrackGuid || \"\";\n const dynamic_id = params.modelUrl || \"\";\n const viewType = view;\n const gps_interface = StampAPI.LibAx.gps_interface(StampUtil.getLibax());\n const dynamic_system_interface = StampAPI.LibAx.dynamic_system_interface(\n StampUtil.getLibax()\n );\n dynamic_system_interface.OnLoadDynamicObject = async function (\n data: any\n ) {\n dynamic_system_interface.OnLoadDynamicObject = undefined;\n if (params.attachModelGuid) {\n //需要附加模型\n StampUtil.attachSubObject({\n modelGuid: data.guid, //运动物体guid\n subGuid: params.attachModelGuid, //Element对象guid\n posOffset: { x: 0, y: 0, z: 0 }, //位置偏移\n rotOffset: { x: 0, y: Math.PI / 2, z: 0 }, //旋转偏移\n });\n }\n if (params.elevationType == 2 && params.attachUePOIGuid) {\n const options = {\n guid: params.attachUePOIGuid,\n name: params.attachUePOIGuid,\n longitude: 121.571006,\n latitude: 29.878591,\n altitude: 22.663105,\n visible: true,\n type: 330,\n editable: 1,\n selectable: 1,\n widgetBlueprintName: \"/Engine/POI/POI_8.POI_8\",\n widgetPrivot: [0.5, 0.5],\n widgetSize: [199, 59],\n widgetSpace: 0,\n poi_texts: [\n 2,\n \"Text_CN\",\n \"\", //速度文本\n \"Light\",\n 22.5,\n 100,\n 0,\n 0,\n \"#FFE7E7E7\",\n \"#FFFFFFFF\",\n [1, 1],\n \"#00000000\",\n 0,\n \"Text_EN\",\n \"\", //底部文本\n \"Italic\",\n 11.25,\n 0,\n 0,\n 0,\n \"#FFFFFFFF\",\n \"#FFFFFFFF\",\n [1, 1],\n \"#00000000\",\n 0,\n ],\n poi_images: [1, \"Image_1\", \"T_POI_8.T_POI_8\", \"#FFFFFFFF\"],\n };\n const res: any = await StampUtil.createUEPoi(options);\n StampUtil.attachSubObject({\n modelGuid: data.guid, //运动物体guid\n subGuid: params.attachUePOIGuid, //Element对象guid\n posOffset: { x: 0, y: 12, z: 0 }, //位置偏移\n rotOffset: { x: 0, y: 0, z: 0 }, //旋转偏移\n });\n }\n gps_interface.set_height_type(\n gps_id,\n params.elevationType,\n params.attachUePOIGuid,\n [\"Text_CN\"]\n );\n gps_interface.play_track(gps_id, data.guid, viewType, keepTiltRoll);\n gps_interface.OnGPSTrackStart = function (gpsObj: any) {\n gps_interface.OnGPSTrackStart = null;\n if (gpsObj.guid == gps_id) {\n resolve(data);\n }\n };\n };\n dynamic_system_interface.load_dynamic_object(dynamic_id);\n });\n }\n setHeightType(\n gpsid: string,\n heightType: number,\n uepoiGuid: string,\n textid: Array<string>\n ) {\n const gps_interface = StampAPI.LibAx.gps_interface(StampUtil.getLibax());\n gps_interface.set_height_type(gpsid, heightType, uepoiGuid, textid);\n }\n setTrackType(guid: string, type: number) {\n const gps_interface = StampAPI.LibAx.gps_interface(StampUtil.getLibax());\n gps_interface.set_track_type(guid, type);\n }\n setMainTrack(guid: string, type: number) {\n const gps_interface = StampAPI.LibAx.gps_interface(StampUtil.getLibax());\n gps_interface.set_main_track(guid, type);\n }\n\n /**\n * 运动物体绑定一个Element对象\n * @param params\n */\n attachSubObject(\n params: any = {\n modelGuid: \"\", //运动物体guid\n subGuid: \"\", //Element对象guid\n posOffset: { x: 0, y: 0, z: 0 }, //位置偏移\n rotOffset: { x: 0, y: 0, z: 0 }, //旋转偏移\n }\n ) {\n const model_guid = params.modelGuid;\n const sub_guid = params.subGuid;\n const pos_offset = params.posOffset || { x: 0, y: 0, z: 0 };\n const rot_offset = params.rotOffset || { x: 0, y: 0, z: 0 };\n const dynamic_system_interface = StampAPI.LibAx.dynamic_system_interface(\n StampUtil.getLibax()\n );\n dynamic_system_interface.attach_sub_object(\n model_guid,\n sub_guid,\n pos_offset,\n rot_offset\n );\n }\n\n /**\n * 运动物体绑定一个Element对象\n * @param params\n */\n attachSubObjectBatch(\n params: any = [\n {\n modelGuid: \"\", //运动物体guid\n children: [\n {\n subGuid: \"\", //Element对象guid\n posOffset: { x: 0, y: 0, z: 0 }, //位置偏移\n rotOffset: { x: 0, y: 0, z: 0 }, //旋转偏移\n },\n ],\n },\n ]\n ) {\n const paramsArr = [];\n for (let i = 0; i < params.length; i++) {\n const children = [];\n for (let j = 0; j < params[i].children.length; j++) {\n children.push({\n sub_guid: params[i].children[j].subGuid,\n pos_offset: params[i].children[j].posOffset || { x: 0, y: 0, z: 0 },\n rot_offset: params[i].children[j].rotOffset || { x: 0, y: 0, z: 0 },\n });\n }\n paramsArr.push({\n model_guid: params[i].modelGuid,\n children: children,\n });\n }\n const dynamic_system_interface = StampAPI.LibAx.dynamic_system_interface(\n StampUtil.getLibax()\n );\n dynamic_system_interface.attach_sub_object_batch(paramsArr);\n }\n\n /**\n * 运动物体移除绑定的Element对象\n * @param modelGuid 运动物体guid\n * @param subGuid Element对象guid\n */\n detachSubObject(modelGuid: string, subGuid: string) {\n const dynamic_system_interface = StampAPI.LibAx.dynamic_system_interface(\n StampUtil.getLibax()\n );\n dynamic_system_interface.detach_sub_object(modelGuid, subGuid);\n }\n\n /**\n * 运动物体移除绑定的Element对象(批量)\n * @param [\n {\n modelGuid: \"\",\n children: [\"\"]\n }\n ]\n */\n detachSubObjectBatch(\n params: any = [\n {\n modelGuid: \"\",\n children: [\"\"],\n },\n ]\n ) {\n const pObj = [];\n for (let i = 0; i < params.length; i++) {\n const pObjChildren = [];\n for (let j = 0; j < params[i].children.length; j++) {\n pObjChildren.push(params[i].children[j]);\n }\n pObj.push({\n model_guid: params[i].modelGuid,\n children: pObjChildren,\n });\n }\n const dynamic_system_interface = StampAPI.LibAx.dynamic_system_interface(\n StampUtil.getLibax()\n );\n dynamic_system_interface.detach_sub_object_batch(pObj);\n }\n\n initGPSTrackEvent() {\n const gps_interface = StampAPI.LibAx.gps_interface(StampUtil.getLibax());\n gps_interface.OnGPSTrackLoaded = function (data: any) {\n if (data.guid in StampUtil.gpsTrackMap) {\n StampUtil.gpsTrackMap[data.guid].OnGPSTrackLoaded &&\n StampUtil.gpsTrackMap[data.guid].OnGPSTrackLoaded(data);\n }\n };\n gps_interface.OnGPSTrackStart = function (data: any) {\n if (data.results && Array.isArray(data.results)) {\n StampUtil.gpsTrackMap[\"batch\"].OnGPSTrackStart &&\n StampUtil.gpsTrackMap[\"batch\"].OnGPSTrackStart(data.results);\n } else if (data.guid in StampUtil.gpsTrackMap) {\n StampUtil.gpsTrackMap[data.guid].OnGPSTrackStart &&\n StampUtil.gpsTrackMap[data.guid].OnGPSTrackStart(data);\n }\n };\n gps_interface.OnGPSTrackFinished = function (data: any) {\n const trackGuidTemp = data[\"track\"] || data[\"track:\"]; //底层属性写错了,多了个冒号\n data[\"track\"] = trackGuidTemp;\n if (trackGuidTemp in StampUtil.gpsTrackMap) {\n StampUtil.gpsTrackMap[trackGuidTemp].OnGPSTrackFinished &&\n StampUtil.gpsTrackMap[trackGuidTemp].OnGPSTrackFinished(data);\n }\n };\n gps_interface.OnGPSTrackPicked = function (data: any) {\n if (data.guid in StampUtil.gpsTrackMap) {\n StampUtil.gpsTrackMap[data.guid].OnGPSTrackPicked &&\n StampUtil.gpsTrackMap[data.guid].OnGPSTrackPicked(data);\n }\n };\n }\n\n /**\n * 创建GPSTrack路径\n * @param params\n * @returns\n */\n createRealtimeGps2(\n params: any = {\n trackGuid: \"\",\n trackName: \"\",\n bindObject: \"\",\n followType: 3,\n virtualTime: 1.0,\n heightType: 1,\n stackSize: 50,\n information: \"\",\n bShowPath: false,\n bShowName: false,\n bShowInformation: false,\n nameColor: 0xff00ff00,\n infoColor: 0xffffffff,\n pathColor: 0xffffff00,\n OnGPSTrackLoaded: (data: any) => {},\n OnGPSTrackStart: (data: any) => {},\n OnGPSTrackFinished: (data: any) => {},\n OnGPSTrackPicked: (data: any) => {},\n }\n ) {\n const gps_interface = StampAPI.LibAx.gps_interface(StampUtil.getLibax());\n const localTrack = {\n id: params.trackGuid,\n name: params.trackName,\n OnGPSTrackLoaded: function (data: any) {\n if (data.guid != this.id) return;\n gps_interface.gps_list = gps_interface.gps_list || {};\n gps_interface.gps_list[data.guid] = data;\n params.OnGPSTrackLoaded && params.OnGPSTrackLoaded(data);\n },\n OnGPSTrackStart: function (data: any) {\n if (data.guid != this.id) return;\n params.OnGPSTrackStart && params.OnGPSTrackStart(data);\n },\n OnGPSTrackFinished: function (data: any) {\n if (data.track != this.id) return;\n if (data.bind) {\n //路径结束就卸载模型\n StampUtil.getLibax().dynamic_system_interface.unload_dynamic_object(\n data.bind\n );\n }\n params.OnGPSTrackFinished && params.OnGPSTrackFinished(data);\n },\n OnGPSTrackPicked: function (data: any) {\n if (data.guid != this.id) return;\n params.OnGPSTrackPicked && params.OnGPSTrackPicked(data);\n },\n };\n StampUtil.gpsTrackMap[params.trackGuid] = localTrack;\n gps_interface.play_gps_track_real_time(\n params.trackGuid,\n params.trackName,\n params.bindObject,\n params.followType,\n params.virtualTime,\n params.heightType,\n params.stackSize,\n params.information,\n params.bShowPath,\n params.bShowName,\n params.bShowInformation,\n params.nameColor,\n params.infoColor,\n params.pathColor\n );\n return localTrack;\n }\n async createRealtimeGpsBatch(\n paramsArr: any = [\n {\n trackGuid: \"\",\n trackName: \"\",\n bindObject: \"\",\n followType: 3,\n virtualTime: 1.0,\n heightType: 1,\n stackSize: 50,\n information: \"\",\n bShowPath: false,\n bShowName: false,\n bShowInformation: false,\n nameColor: 0xff00ff00,\n attachModelGuid: \"\",\n attachUePOIGuid: \"\", //附加UEPOI的guid\n OnGPSTrackLoaded: (data: any) => {},\n OnGPSTrackStart: (data: any) => {},\n OnGPSTrackFinished: (data: any) => {},\n OnGPSTrackPicked: (data: any) => {},\n },\n ],\n callbackInfo: any = {\n OnGPSTrackLoaded: (data: any) => {},\n OnGPSTrackStart: (data: any) => {},\n OnGPSTrackFinished: (data: any) => {},\n OnGPSTrackPicked: (data: any) => {},\n }\n ) {\n const gps_interface = StampAPI.LibAx.gps_interface(StampUtil.getLibax());\n const dynamic_system_interface = StampAPI.LibAx.dynamic_system_interface(\n StampUtil.getLibax()\n );\n const pArr = [];\n const guidArr = [] as any;\n for (let i = 0; i < paramsArr.length; i++) {\n const params = paramsArr[i];\n // const localTrack = {\n // id: params.trackGuid,\n // name: params.trackName,\n // OnGPSTrackLoaded: function (data: any) {\n //\n // if (data.guid != this.id) return;\n // gps_interface.gps_list = gps_interface.gps_list || {};\n // gps_interface.gps_list[data.guid] = data;\n // params.OnGPSTrackLoaded && params.OnGPSTrackLoaded(data);\n // },\n // OnGPSTrackStart: function (data: any) {\n //\n // if (data.guid != this.id) return;\n // params.OnGPSTrackStart && params.OnGPSTrackStart(data);\n // },\n // OnGPSTrackFinished: function (data: any) {\n // if (data.track != this.id) return;\n // if (data.bind) {\n // //路径结束就卸载模型\n // StampUtil.getLibax().dynamic_system_interface.unload_dynamic_object(\n // data.bind\n // );\n // }\n // params.OnGPSTrackFinished && params.OnGPSTrackFinished(data);\n // },\n // OnGPSTrackPicked: function (data: any) {\n // if (data.guid != this.id) return;\n // params.OnGPSTrackPicked && params.OnGPSTrackPicked(data);\n // },\n // };\n // StampUtil.playGpsTrackItem(params);\n guidArr.push(params.trackGuid);\n // StampUtil.gpsTrackMap[params.trackGuid] = localTrack;\n pArr.push(\n params.trackGuid,\n params.trackName,\n params.bindObject,\n params.followType,\n params.virtualTime,\n params.heightType,\n params.stackSize,\n params.information,\n params.bShowPath,\n params.bShowName,\n params.bShowInformation,\n params.nameColor,\n params.infoColor,\n params.pathColor\n );\n }\n StampUtil.gpsTrackMap[\"batch\"] = callbackInfo;\n\n gps_interface.play_gps_track_real_time_batch(pArr);\n }\n\n async playGpsTrackItem(params: any) {\n const gps_interface = StampAPI.LibAx.gps_interface(StampUtil.getLibax());\n StampUtil.loadDynamicObject(params.bindObject).then(async (data: any) => {\n if (params.attachModelGuid) {\n //需要附加模型\n await StampUtil.attachSubObject({\n modelGuid: data.guid, //运动物体guid\n subGuid: params.attachModelGuid, //Element对象guid\n posOffset: { x: 0, y: 2, z: 5 }, //位置偏移\n rotOffset: { x: 0, y: 45, z: 0 }, //旋转偏移\n });\n }\n if (params.heightType == 2 && params.attachUePOIGuid) {\n const options = {\n guid: params.attachUePOIGuid,\n name: params.attachUePOIGuid,\n longitude: 121.571006,\n latitude: 29.878591,\n altitude: 22.663105,\n visible: true,\n type: 330,\n editable: 1,\n selectable: 1,\n widgetBlueprintName: \"/Engine/POI/POI_8.POI_8\",\n widgetPrivot: [0.5, 0.5],\n widgetSize: [199, 59],\n widgetSpace: 0,\n poi_texts: [\n 2,\n \"Text_CN\",\n \"\", //速度文本\n \"Light\",\n 22.5,\n 100,\n 0,\n 0,\n \"#FFE7E7E7\",\n \"#FFFFFFFF\",\n [1, 1],\n \"#00000000\",\n 0,\n \"Text_EN\",\n \"\", //底部文本\n \"Italic\",\n 11.25,\n 0,\n 0,\n 0,\n \"#FFFFFFFF\",\n \"#FFFFFFFF\",\n [1, 1],\n \"#00000000\",\n 0,\n ],\n poi_images: [1, \"Image_1\", \"T_POI_8.T_POI_8\", \"#FFFFFFFF\"],\n };\n await StampUtil.createUEPoi(options);\n await StampUtil.attachSubObject({\n modelGuid: data.guid, //运动物体guid\n subGuid: params.attachUePOIGuid, //Element对象guid\n posOffset: { x: 0, y: 12, z: 0 }, //位置偏移\n rotOffset: { x: 0, y: 0, z: 0 }, //旋转偏移\n });\n }\n await StampUtil.setHeightType(\n params.trackGuid,\n params.heightType,\n params.attachUePOIGuid,\n [\"Text_CN\"]\n );\n gps_interface.play_track(params.trackGuid, data.guid, 4, false);\n });\n }\n\n loadDynamicObject(guid: string) {\n return new Promise((resolve) => {\n const dynamic_system_interface = StampAPI.LibAx.dynamic_system_interface(\n StampUtil.getLibax()\n );\n dynamic_system_interface.OnLoadDynamicObject = async function (\n data: any\n ) {\n dynamic_system_interface.OnLoadDynamicObject = undefined;\n resolve(data);\n };\n dynamic_system_interface.load_dynamic_object(guid);\n });\n }\n stopGpsSync(gpsId: string) {\n const gps_interface = StampAPI.LibAx.gps_interface(StampUtil.getLibax());\n gps_interface.OnGPSTrackFinished = function (data: any) {\n gps_interface.OnGPSTrackFinished = undefined;\n StampUtil.getLibax().dynamic_system_interface.unload_dynamic_object(\n data.bind\n );\n };\n gps_interface.stop_track(gpsId);\n }\n\n /**\n * 跟随track\n */\n followTrack(options: any) {\n const gps_interface = StampAPI.LibAx.gps_interface(StampUtil.getLibax());\n gps_interface.OnGPSTrackFinished = function (data: any) {\n console.log(\"OnGPSTrackFinished\", data);\n gps_interface.OnGPSTrackFinished = undefined;\n };\n gps_interface.init_follow_track(\n options.guid,\n options.heading,\n options.tilt,\n options.range_scale,\n options.time,\n options.no_tracking_object_angle\n );\n }\n /**\n * 增加实时路径\n * @param name\n * @returns\n */\n createRealtimeGps(name: any) {\n return new Promise((resolve) => {\n const gps_interface = StampAPI.LibAx.gps_interface(StampUtil.getLibax());\n gps_interface.OnGPSTrackLoaded = function (data: any) {\n gps_interface.OnGPSTrackLoaded = undefined;\n gps_interface.gps_list = gps_interface.gps_list || {};\n gps_interface.gps_list[data.guid] = data;\n resolve(data);\n };\n gps_interface.create_gps_track_real_time(name, 1.0);\n });\n }\n /**\n * 动态添加路径坐标\n * @param params\n */\n addGPSPoint(params: any) {\n const gps_interface = StampAPI.LibAx.gps_interface(StampUtil.getLibax());\n const gps_id = params.gpsId;\n const curr_pt = params.currPt;\n const next_pt = params.nextPt;\n const lxTime = params.lxTime;\n const isSpherical =\n params.isSpherical == undefined ? true : params.isSpherical;\n if (params.isWithHeading) {\n gps_interface.add_pre_gps_with_heading(\n gps_id,\n Number(curr_pt.longitude),\n Number(curr_pt.latitude),\n Number(curr_pt.height),\n Number(curr_pt.heading) || 0, //以防万一没有朝向值\n Number(next_pt.longitude),\n Number(next_pt.latitude),\n Number(next_pt.height),\n Number(next_pt.heading) || 0, //以防万一没有朝向值\n lxTime,\n isSpherical\n );\n } else {\n gps_interface.add_pre_gps(\n gps_id,\n Number(curr_pt.longitude),\n Number(curr_pt.latitude),\n Number(curr_pt.height),\n Number(next_pt.longitude),\n Number(next_pt.latitude),\n Number(next_pt.height),\n lxTime,\n isSpherical\n );\n }\n }\n /**\n * 动态添加路径坐标\n * @param params\n */\n addGPSPointBatchPoint(params: any) {\n const gps_interface = StampAPI.LibAx.gps_interface(StampUtil.getLibax());\n const gps_id = params.gpsId;\n const points = params.points;\n const isSpherical =\n params.isSpherical == undefined ? true : params.isSpherical;\n const pointsArr = [];\n if (params.isWithHeading) {\n for (var i = 0; i < points.length; i++) {\n pointsArr.push(\n points[i].x_pre,\n points[i].y_pre,\n points[i].z_pre,\n points[i].heading_pre,\n points[i].x,\n points[i].y,\n points[i].z,\n points[i].heading,\n points[i].time\n );\n }\n gps_interface.add_pre_gps_pt_batch_with_heading(\n gps_id,\n pointsArr,\n isSpherical\n );\n } else {\n for (var i = 0; i < points.length; i++) {\n pointsArr.push(\n points[i].x_pre,\n points[i].y_pre,\n points[i].z_pre,\n points[i].x,\n points[i].y,\n points[i].z,\n points[i].time\n );\n }\n gps_interface.add_pre_gps_pt_batch(gps_id, pointsArr, isSpherical);\n }\n }\n /**\n * 批量添加路径和坐标点\n * @param params\n * @param isSpherical\n * @param isWithHeading\n */\n addGPSPointBatch(\n params = [\n {\n gpsId: \"\",\n points: [\n {\n x: 0,\n y: 0,\n z: 0,\n heading: 0,\n x_pre: 0,\n y_pre: 0,\n z_pre: 0,\n heading_pre: 0,\n time: 1000,\n },\n {\n x: 0,\n y: 0,\n z: 0,\n heading: 0,\n x_pre: 0,\n y_pre: 0,\n z_pre: 0,\n heading_pre: 0,\n time: 1000,\n },\n ],\n },\n ],\n isSpherical: true,\n isWithHeading: false\n ) {\n if (isWithHeading) {\n var paramsArr = [];\n for (var i = 0; i < params.length; i++) {\n const ptArr = [];\n for (var j = 0; j < params[i].points.length; j++) {\n ptArr.push(\n params[i].points[j].x_pre,\n params[i].points[j].y_pre,\n params[i].points[j].z_pre,\n params[i].points[j].heading_pre,\n params[i].points[j].x,\n params[i].points[j].y,\n params[i].points[j].z,\n params[i].points[j].heading,\n params[i].points[j].time * 1000\n );\n }\n paramsArr.push([params[i].gpsId, ptArr]);\n }\n const gps_interface = StampAPI.LibAx.gps_interface(StampUtil.getLibax());\n gps_interface.add_pre_gps_batch_with_heading(paramsArr, isSpherical);\n } else {\n var paramsArr = [];\n for (var i = 0; i < params.length; i++) {\n const ptArr = [];\n for (var j = 0; j < params[i].points.length; j++) {\n ptArr.push(\n params[i].points[j].x_pre,\n params[i].points[j].y_pre,\n params[i].points[j].z_pre,\n params[i].points[j].x,\n params[i].points[j].y,\n params[i].points[j].z,\n params[i].points[j].time * 1000\n );\n }\n paramsArr.push([params[i].gpsId, ptArr]);\n }\n const gps_interface = StampAPI.LibAx.gps_interface(StampUtil.getLibax());\n gps_interface.add_pre_gps_batch(paramsArr, isSpherical);\n }\n }\n /**\n * 暂停GPSTrack\n * @param gpsId\n */\n pauseGps(gpsId: string) {\n const gps_interface = StampAPI.LibAx.gps_interface(StampUtil.getLibax());\n gps_interface.pause_track(gpsId);\n }\n /**\n * 停止GPSTrack\n * @param gpsId\n */\n stopGps(gpsId: string) {\n const gps_interface = StampAPI.LibAx.gps_interface(StampUtil.getLibax());\n gps_interface.stop_track(gpsId);\n }\n\n /**\n * 删除GPSTrack\n * @param gpsId\n */\n deleteGps(gpsId: string) {\n const gps_interface = StampAPI.LibAx.gps_interface(StampUtil.getLibax());\n gps_interface.delete_track(gpsId);\n }\n\n /**\n * 批量删除GPSTrack\n * @param guids\n */\n stopGpsBatch(guids: Array<string>) {\n const gps_interface = StampAPI.LibAx.gps_interface(StampUtil.getLibax());\n gps_interface.stop_gps_track_real_time_batch(guids, true, true);\n }\n\n /**\n * 卸载GPSTrack角色\n * @param dynamicId\n */\n removeRoleGps(dynamicId: any) {\n const dynamic_system_interface = StampAPI.LibAx.dynamic_system_interface(\n StampUtil.getLibax()\n );\n\n dynamic_system_interface.unload_dynamic_object(dynamicId);\n }\n\n setTrackInfo(params: any) {\n const gps_interface = StampAPI.LibAx.gps_interface(StampUtil.getLibax());\n if (params.gpsId == \"\") {\n return;\n }\n const gps_id = params.gpsId;\n const information = params.information || \"\";\n const showTrack = params.showTrack == undefined ? true : !!params.showTrack;\n const showName = params.showName == undefined ? true : !!params.showName;\n const showInformation =\n params.showInformation == undefined ? true : !!params.showInformation;\n const nameColor = params.nameColor || 0xffffffff;\n const informationColor = params.informationColor || 0xffffff00;\n const pathColor = params.pathColor || 0xffffff00;\n\n gps_interface.set_track_info(\n gps_id,\n information,\n showTrack,\n showName,\n showInformation,\n nameColor,\n informationColor,\n pathColor\n );\n }\n\n /**\n * 更新地图大小\n */\n updateEarthSize() {\n StampUtil.getLibax()?.player?.webRtcController?.videoPlayer?.resizePlayerStyle();\n StampUtil.getLibax()?.player?.webRtcController?.videoPlayer?.updateVideoStreamSize();\n }\n //#endregion\n\n //#region 杆塔线路接口\n /**\n * 获取杆塔线路图层列表\n * @returns\n */\n getLayerList() {\n return new Promise((resolve) => {\n const powerline_interface = StampUtil.getLibax().powerline_interface;\n if (powerline_interface.layer_list == undefined) {\n powerline_interface.OnGetLayerList = function (data: any) {\n powerline_interface.OnGetLayerList = undefined;\n resolve(data);\n };\n powerline_interface.get_powerline_layer_list();\n } else {\n const data = powerline_interface.layer_list;\n resolve(data);\n }\n });\n }\n\n /**\n * 加载图层数据\n * @param layerid\n * @returns\n */\n loadLayer(layerid: string) {\n return new Promise((resolve) => {\n const powerline_interface = StampUtil.getLibax().powerline_interface;\n if (layerid in powerline_interface.layer_list) {\n powerline_interface.OnConductPowerLine = function (res: any) {\n powerline_interface.OnConductPowerLine = undefined;\n if (res.result == \"successful\") {\n resolve(\"success\");\n } else {\n resolve(\"fail\");\n }\n };\n powerline_interface.load_powerline_layer(layerid);\n }\n });\n }\n\n /**\n * 添加图层\n * @param name\n * @returns\n */\n addLayer(name: string) {\n return new Promise((resolve) => {\n const powerline_interface = StampUtil.getLibax().powerline_interface;\n powerline_interface.OnAddLayer = function (data: any) {\n resolve(data);\n };\n powerline_interface.add_powerline_layer(name);\n });\n }\n\n /**\n * 卸载图层(从内存)\n * @param layerid\n */\n unloadLayer(layerid: string) {\n const powerline_interface = StampUtil.getLibax().powerline_interface;\n if (layerid in powerline_interface.layer_list) {\n powerline_interface.unload_powerline_layer(layerid);\n }\n }\n\n /**\n * 删除图层(从库中)\n * @param layerid\n * @returns\n */\n deleteLayer(layerid: string) {\n return new Promise((resolve) => {\n const powerline_interface = StampUtil.getLibax().powerline_interface;\n if (layerid in powerline_interface.layer_list) {\n powerline_interface.OnConductPowerLine = function (res: any) {\n powerline_interface.OnConductPowerLine = undefined;\n if (res.result == \"successful\") {\n resolve(\"success\");\n } else {\n resolve(\"fail\");\n }\n };\n powerline_interface.delete_powerline_layer(layerid);\n }\n });\n }\n\n /**\n * 开始编辑\n * @param layerid\n */\n beginEditLayer(layerid: string) {\n const powerline_interface = StampUtil.getLibax().powerline_interface;\n if (layerid in powerline_interface.layer_list) {\n powerline_interface.unlock_powerline_layer(layerid);\n }\n }\n\n /**\n * 结束编辑\n * @param layerid\n */\n endEditLayer(layerid: string) {\n const powerline_interface = StampUtil.getLibax().powerline_interface;\n if (layerid in powerline_interface.layer_list) {\n powerline_interface.lock_powerline_layer(layerid);\n }\n }\n\n /**\n * 添加线路\n * @param layerid\n * @param lineid\n * @returns\n */\n addPowerLine(layerid: string, lineid: string) {\n return new Promise((resolve) => {\n const powerline_interface = StampUtil.getLibax().powerline_interface;\n if (layerid in powerline_interface.layer_list) {\n powerline_interface.OnConductPowerLine = function (res: any) {\n powerline_interface.OnConductPowerLine = undefined;\n if (res.result == \"successful\") {\n resolve(\"success\");\n } else {\n resolve(\"fail\");\n }\n };\n powerline_interface.add_line_to_layer(layerid, lineid);\n }\n });\n }\n\n /**\n * 移除线路\n * @param layerid\n * @param lineid\n * @returns\n */\n removePowerline(layerid: string, lineid: string) {\n return new Promise((resolve) => {\n const powerline_interface = StampUtil.getLibax().powerline_interface;\n if (layerid in powerline_interface.layer_list) {\n powerline_interface.OnConductPowerLine = function (res: any) {\n powerline_interface.OnConductPowerLine = undefined;\n if (res.result == \"successful\") {\n resolve(\"success\");\n } else {\n resolve(\"fail\");\n }\n };\n powerline_interface.remove_line_to_layer(layerid, lineid);\n }\n });\n }\n\n /**\n * 保存图层\n * @param layerid\n */\n saveLayer(layerid: string) {\n const powerline_interface = StampUtil.getLibax().powerline_interface;\n if (layerid in powerline_interface.layer_list) {\n powerline_interface.save_powerline_layer(layerid);\n }\n }\n\n /**\n * 保存所有图层\n */\n saveAllLayers() {\n const powerline_interface = StampUtil.getLibax().powerline_interface;\n powerline_interface.save_all_layers();\n }\n\n /**\n * 发布图层\n * @param layerid\n * @returns\n */\n publishLayer(layerid: string) {\n return new Promise((resolve) => {\n const powerline_interface = StampUtil.getLibax().powerline_interface;\n if (layerid in powerline_interface.layer_list) {\n powerline_interface.OnConductPowerLine = function (res: any) {\n if (!res.result) {\n resolve(res.line);\n } else {\n resolve(res.result);\n }\n };\n const isSimple = false;\n const is3Dtile = true;\n powerline_interface.publish_powerline_layer(\n layerid,\n \"\",\n isSimple,\n is3Dtile\n );\n }\n });\n }\n\n /**\n * 飞行定位到线路\n * @param layerid\n * @param lineid\n */\n flyToPowerline(layerid: string, lineid: string) {\n const powerline_interface = StampUtil.getLibax().powerline_interface;\n if (layerid in powerline_interface.layer_list) {\n if (lineid != undefined) {\n powerline_interface.goto_line(layerid, lineid);\n }\n }\n }\n //#endregion\n\n //#region 计算\n /**\n * 线线距离\n * @param params\n * @returns\n */\n calcLineLineDistance(\n params = {\n isElement: false,\n linePoints1: [] as Array<any>,\n linePoints2: [] as Array<any>,\n }\n ) {\n this.clearMeasure();\n return new Promise((resolve) => {\n const geometry_algorithm_interface =\n StampUtil.getLibax().geometry_algorithm_interface;\n geometry_algorithm_interface.OnGeometryAlgorithmFinished = (\n data: any\n ) => {\n geometry_algorithm_interface.OnGeometryAlgorithmFinished = undefined;\n resolve(data);\n };\n geometry_algorithm_interface.calculate_line_line_distance(\n params.isElement,\n params.linePoints1,\n params.linePoints2\n );\n });\n }\n\n calcPointLineDistance(\n params = {\n point: {} as any,\n linePoints: [] as Array<any>,\n }\n ) {\n this.clearMeasure();\n return new Promise((resolve) => {\n const geometry_algorithm_interface =\n StampUtil.getLibax().geometry_algorithm_interface;\n geometry_algorithm_interface.OnGeometryAlgorithmFinished = (\n data: any\n ) => {\n geometry_algorithm_interface.OnGeometryAlgorithmFinished = undefined;\n resolve(data);\n };\n geometry_algorithm_interface.distance_point_line(\n params.linePoints[0],\n params.linePoints[1],\n params.point\n );\n });\n }\n\n calcPointPolygonDistance(\n params = {\n isElement: false,\n point: {} as any,\n polygonPoints: [] as Array<any>,\n }\n ) {\n this.clearMeasure();\n return new Promise((resolve) => {\n const geometry_algorithm_interface =\n StampUtil.getLibax().geometry_algorithm_interface;\n geometry_algorithm_interface.OnGeometryAlgorithmFinished = (\n data: any\n ) => {\n geometry_algorithm_interface.OnGeometryAlgorithmFinished = undefined;\n resolve(data);\n };\n geometry_algorithm_interface.calculate_point_polygon_distance(\n params.isElement,\n params.polygonPoints,\n params.point\n );\n });\n }\n\n calcLinePolygonDistance(\n params = {\n isElement: false,\n linePoints: [] as Array<any>,\n polygonPoints: [] as Array<any>,\n }\n ) {\n this.clearMeasure();\n return new Promise((resolve) => {\n const geometry_algorithm_interface =\n StampUtil.getLibax().geometry_algorithm_interface;\n geometry_algorithm_interface.OnGeometryAlgorithmFinished = (\n data: any\n ) => {\n geometry_algorithm_interface.OnGeometryAlgorithmFinished = undefined;\n resolve(data);\n };\n geometry_algorithm_interface.calculate_line_line_distance(\n params.isElement,\n params.linePoints,\n params.polygonPoints\n );\n });\n }\n\n calcPolygonDistance(\n params = {\n isElement: false,\n polygonPoints1: [] as Array<any>,\n polygonPoints2: [] as Array<any>,\n }\n ) {\n this.clearMeasure();\n return new Promise((resolve) => {\n const geometry_algorithm_interface =\n StampUtil.getLibax().geometry_algorithm_interface;\n geometry_algorithm_interface.OnGeometryAlgorithmFinished = (\n data: any\n ) => {\n geometry_algorithm_interface.OnGeometryAlgorithmFinished = undefined;\n resolve(data);\n };\n geometry_algorithm_interface.calculate_polygon_distance(\n params.isElement,\n params.polygonPoints1,\n params.polygonPoints2\n );\n });\n }\n\n /**\n * 线线空间距离\n * @param params\n * @returns\n */\n calcLineLineSpaceDistance(\n params = {\n isElement: false,\n linePoints1: [],\n linePoints2: [],\n }\n ) {\n this.clearMeasure();\n return new Promise((resolve) => {\n const geometry_algorithm_interface =\n StampUtil.getLibax().geometry_algorithm_interface;\n geometry_algorithm_interface.OnGeometryAlgorithmFinished = (\n data: any\n ) => {\n geometry_algorithm_interface.OnGeometryAlgorithmFinished = undefined;\n resolve(data);\n };\n geometry_algorithm_interface.calculate_line_line_space_distance(\n params.isElement,\n params.linePoints1,\n params.linePoints2\n );\n });\n }\n\n /**\n * 计算两个点的距离\n * @param point1\n * @param point2\n * @returns\n */\n calcPointDistance(\n point1 = { x: 0, y: 0, z: 0 },\n point2 = { x: 0, y: 0, z: 0 }\n ) {\n const R = 6371000;\n const dLat = ((point2.y - point1.y) * Math.PI) / 180;\n const dLon = ((point2.x - point1.x) * Math.PI) / 180;\n const a =\n Math.sin(dLat / 2) * Math.sin(dLat / 2) +\n Math.cos((point1.y * Math.PI) / 180) *\n Math.cos((point2.y * Math.PI) / 180) *\n Math.sin(dLon / 2) *\n Math.sin(dLon / 2);\n const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n const d = R * c;\n return d;\n }\n\n /**\n * 计算两个点的距离\n * @param point1\n * @param point2\n * @returns\n */\n calcPointSpaceDistance(\n point1 = { x: 0, y: 0, z: 0 },\n point2 = { x: 0, y: 0, z: 0 }\n ) {\n const horDistance = StampUtil.calcPointDistance(point1, point2); //水平距离\n const verDistance = Math.abs(point1.z - point2.z); //垂直距离\n const distance = Math.sqrt(\n horDistance * horDistance + verDistance * verDistance\n ); //空间距离\n return distance;\n }\n\n /**\n * 计算平面坐标点串的面积\n * @param points\n * @returns\n */\n calcPolygonArea(points: Array<any>) {\n return new Promise((resolve) => {\n const geometry_algorithm_interface =\n StampUtil.getLibax().geometry_algorithm_interface;\n geometry_algorithm_interface.OnGeometryAlgorithmFinished = function (\n data: any\n ) {\n resolve(data);\n };\n geometry_algorithm_interface.calc_polygon_area(points);\n });\n }\n\n /**\n * 计算球面坐标点串的面积\n * @param points\n * @returns\n */\n calcPolygonAreaSphr(points: Array<any>) {\n return new Promise((resolve) => {\n const geometry_algorithm_interface =\n StampUtil.getLibax().geometry_algorithm_interface;\n geometry_algorithm_interface.OnGeometryAlgorithmFinished = function (\n data: any\n ) {\n resolve(data);\n };\n geometry_algorithm_interface.calc_polygon_area_sphr(points);\n });\n }\n //#endregion\n\n //#region 管线\n\n /**\n * 获取管线图层属性信息\n * @param pipelinelayerid 管线图层guid\n * @returns 图层属性\n */\n getPipelineLayerProperty(pipelinelayerid: string) {\n return new Promise((resolve) => {\n const stamp_frame = StampUtil.getLibax().stamp_frame;\n stamp_frame.OnGetPipelineLayerProperty = function (data: any) {\n stamp_frame.OnGetPipelineLayerProperty = undefined;\n resolve(data);\n };\n stamp_frame.GetPipelineLayerPropertyCommand(pipelinelayerid);\n });\n }\n\n /**\n * 获取BIM图层属性文件路径\n * @param layerid\n */\n async getBimPropertySDB(layerid: string) {\n return new Promise((resolve) => {\n const stamp_frame = StampUtil.getLibax().stamp_frame;\n stamp_frame.OnGetBimSDB = function (data: any) {\n stamp_frame.OnGetBimSDB = undefined;\n resolve(data);\n };\n stamp_frame.GetBimSDBCommand(layerid);\n });\n }\n\n //#endregion\n\n //#region WebUI接口\n /**\n * 创建一个图标的WebUI元素。\n * @param params 配置参数对象,包括:\n * - parentGuid: 父级元素的GUID,默认为空字符串。\n * - guid: 该元素的GUID,默认为空字符串。\n * - Text: 图标上的文本,默认为空字符串。\n * - TextColor: 文本颜色,默认为白色 (#FFFFFF)。\n * - FontSize: 文本字体大小,默认为24。\n * - FontStyle: 文本字体样式,默认为\"Black\"。\n * - longitude: 绑定位置的经度,默认为0。\n * - latitude: 绑定位置的纬度,默认为0。\n * - altitude: 绑定位置的高程,默认为0。\n * - align: 文本对齐方式,默认为2(左下对齐)。\n * - visible: 元素是否可见,默认为true。\n * @returns 返回配置参数对象。\n */\n createIconWebUI(\n params = {\n parentGuid: \"\",\n guid: \"\",\n Text: \"\",\n TextColor: \"#FFFFFF\",\n FontSize: 24,\n FontStyle: \"Black\",\n longitude: 0,\n latitude: 0,\n altitude: 0,\n align: 2,\n visible: true,\n }\n ) {\n //webui只能创建和删除,无法显隐\n if (StampUtil.createControlElementVisbile(params)) {\n //判断如果已存在,直接显示即可\n return params;\n }\n if (params.parentGuid == undefined) {\n params.parentGuid = StampUtil.createGuid();\n }\n if (params.guid == undefined) {\n params.guid = StampUtil.createGuid();\n }\n params.Text = params.Text || \"\";\n const htmlContent = `/icon/icon.html?text=${params.Text}&fontsize=${\n params.FontSize\n }&textColor=${params.TextColor.replace(\"#\", \"\")}&fontStyle=${\n params.FontStyle\n }`;\n const param = [\n params.parentGuid,\n params.guid,\n htmlContent,\n 0, //网页类型:0:相对路径的html网页,1:http网络路径, 2:本地路径,3:html字符串\n\n 0, //自适应:left\n 0, //自适应:top\n 0, //自适应:right\n 0, //自适应:bottom\n\n 0, //位置:left\n 0, //位置:top\n 310, //params.Text.length * 20, //位置:宽度\n 200, //40, //位置:高度\n\n 1, //是否POI:1:poi,0:非POI(窗口显示:一般不需要用到)\n\n params.longitude, //绑定位置:经度\n params.latitude, //绑定位置:纬度\n params.altitude, //绑定位置:高程\n params.align || 2, //align:0:左上、1:左中、2:左下、3:右上、4:右中、5:右下、6:上中、7:下中、8:居中\n ];\n const webui_interface = StampAPI.LibAx.webui_interface(\n StampUtil.getLibax()\n );\n webui_interface.create_webui(param);\n let isFind = false;\n for (let i = 0; i < this.webUIItems.length; i++) {\n if (this.webUIItems[i].guid == params.guid) {\n //找到对应webui,无需添加\n isFind = true;\n break;\n }\n }\n if (!isFind) {\n //没找到就添加\n this.webUIItems.push(params);\n }\n return params;\n }\n\n /**\n * 创建UI气泡:经测试大概平均10~20个1秒\n * @param params\n */\n createWebUI(\n params = {\n parentGuid: \"\",\n guid: \"\",\n htmlContent: \"<div>hello</div>\",\n htmlType: 3,\n width: 0,\n height: 0,\n longitude: 0,\n latitude: 0,\n altitude: 0,\n align: 0,\n }\n ) {\n if (params.parentGuid == undefined) {\n params.parentGuid = StampUtil.createGuid();\n }\n if (params.guid == undefined) {\n params.guid = StampUtil.createGuid();\n }\n const param = [\n params.parentGuid,\n params.guid,\n params.htmlContent,\n params.htmlType || 0, //网页类型:0:相对路径的html网页,1:http网络路径, 2:本地路径,3:html字符串\n\n 0, //自适应:left\n 0, //自适应:top\n 0, //自适应:right\n 0, //自适应:bottom\n\n 0, //位置:left\n 0, //位置:top\n params.width, //位置:宽度\n params.height, //位置:高度\n\n 1, //是否POI:1:poi,0:非POI(窗口显示:一般不需要用到)\n\n params.longitude, //绑定位置:经度\n params.latitude, //绑定位置:纬度\n params.altitude, //绑定位置:高程\n params.align || 0, //align:0:左上、1:左中、2:左下、3:右上、4:右中、5:右下、6:上中、7:下中、8:居中\n ];\n const webui_interface = StampAPI.LibAx.webui_interface(\n StampUtil.getLibax()\n );\n webui_interface.create_webui(param);\n return params;\n }\n\n /**\n * 添加UI\n * @param params\n */\n addWebUIItem(\n params = {\n parentGuid: \"\",\n guid: \"\",\n htmlContent: \"<div>hello</div>\",\n htmlType: 3,\n width: 0,\n height: 0,\n longitude: 0,\n latitude: 0,\n altitude: 0,\n align: 0,\n }\n ) {\n if (params.parentGuid == undefined) {\n params.parentGuid = StampUtil.createGuid();\n }\n if (params.guid == undefined) {\n params.guid = StampUtil.createGuid();\n }\n const param = [\n params.parentGuid,\n params.guid,\n params.htmlContent,\n params.htmlType || 0, //网页类型:0:相对路径的html网页,1:http网络路径, 2:本地路径,3:html字符串\n\n 0, //自适应:left\n 0, //自适应:top\n 0, //自适应:right\n 0, //自适应:bottom\n\n 0, //位置:left\n 0, //位置:top\n params.width, //位置:宽度\n params.height, //位置:高度\n\n 1, //是否POI:1:poi,0:非POI(窗口显示:一般不需要用到)\n\n params.longitude, //绑定位置:经度\n params.latitude, //绑定位置:纬度\n params.altitude, //绑定位置:高程\n params.align || 0, //align:0:左上、1:左中、2:左下、3:右上、4:右中、5:右下、6:上中、7:下中、8:居中\n ];\n const webui_interface = StampAPI.LibAx.webui_interface(\n StampUtil.getLibax()\n );\n webui_interface.add_web_interface(param);\n }\n\n /**\n * 面板子对象显隐\n * @param params\n */\n setWebUIItemVisible(\n params = {\n parentGuid: \"\",\n guid: \"\",\n visible: false,\n }\n ) {\n params.parentGuid = params.parentGuid || this.webUIRootGuid;\n const param = [params.parentGuid, params.guid, params.visible];\n const webui_interface = StampAPI.LibAx.webui_interface(\n StampUtil.getLibax()\n );\n webui_interface.set_web_interface_visible(param);\n }\n\n /**\n * 整个面板显隐\n * @param params\n */\n setWebUIContainerVisible(\n params = {\n guid: \"\",\n visible: false,\n }\n ) {\n const param = [params.guid, params.visible];\n const webui_interface = StampAPI.LibAx.webui_interface(\n StampUtil.getLibax()\n );\n webui_interface.set_web_interface_visible(param);\n }\n\n /**\n * 移除面板子对象\n * @param params\n */\n removeWebUIItem(\n params = {\n parentGuid: \"\", //面板根guid\n guid: \"\", //面板子节点guid\n }\n ) {\n const param = [params.parentGuid, params.guid];\n const webui_interface = StampAPI.LibAx.webui_interface(\n StampUtil.getLibax()\n );\n webui_interface.remove_web_interface(param);\n for (let i = 0; i < this.webUIItems.length; i++) {\n if (params.guid == this.webUIItems[i].guid) {\n this.webUIItems.splice(i, 1);\n break;\n }\n }\n }\n\n /**\n * 移除面板\n * @param guid 面板根guid\n */\n removeWebUI(guid: string) {\n const param = [guid];\n const webui_interface = StampAPI.LibAx.webui_interface(\n StampUtil.getLibax()\n );\n webui_interface.remove_user_widget(param);\n }\n /**\n * 移除所有面板\n * @param guid 面板根guid\n */\n removeWebUIAll() {\n const webui_interface = StampAPI.LibAx.webui_interface(\n StampUtil.getLibax()\n );\n for (let i = 0; i < this.webUIItems.length; i++) {\n webui_interface.remove_user_widget([this.webUIItems[i].parentGuid]);\n }\n }\n /**\n * 修改面板子对象位置\n * @param params\n */\n setWebUIItemPosition(\n params = {\n parentGuid: \"\",\n guid: \"\",\n longitude: 0,\n latitude: 0,\n altitude: 0,\n }\n ) {\n const param = [\n params.parentGuid,\n params.guid,\n params.longitude,\n params.latitude,\n params.altitude,\n ];\n const webui_interface = StampAPI.LibAx.webui_interface(\n StampUtil.getLibax()\n );\n webui_interface.set_web_interface_position(param);\n }\n\n /**\n * 修改面板子对象大小(自适应)\n * @param params\n */\n setWebUIItemAnchors(\n params = {\n parentGuid: \"\",\n guid: \"\",\n left: 0,\n top: 0,\n bottom: 1,\n right: 1,\n }\n ) {\n const param = [\n params.parentGuid,\n params.guid,\n params.left,\n params.top,\n params.right,\n params.bottom,\n ];\n const webui_interface = StampAPI.LibAx.webui_interface(\n StampUtil.getLibax()\n );\n webui_interface.set_web_interface_anchors(param);\n }\n\n /**\n * 修改面板子对象偏移\n * @param params\n */\n setWebUIItemOffset(\n params = {\n parentGuid: \"\",\n guid: \"\",\n left: 0,\n top: 0,\n width: 500,\n height: 200,\n }\n ) {\n const param = [\n params.parentGuid,\n params.guid,\n params.left,\n params.top,\n params.width,\n params.height,\n ];\n const webui_interface = StampAPI.LibAx.webui_interface(\n StampUtil.getLibax()\n );\n webui_interface.set_web_interface_offset(param);\n }\n\n /**\n * 修改面板子对象停靠位置\n * @param params\n */\n setWebUIItemAlign(\n params = {\n parentGuid: \"\",\n guid: \"\",\n align: 0,\n }\n ) {\n const param = [params.parentGuid, params.guid, params.align];\n const webui_interface = StampAPI.LibAx.webui_interface(\n StampUtil.getLibax()\n );\n webui_interface.set_web_interface_align(param);\n }\n //#endregion\n\n //#region 车流穿梭\n createTrackScheme(params: any) {\n return new Promise((resolve) => {\n const mass_interface = StampAPI.LibAx.mass_interface(\n StampUtil.getLibax()\n );\n const shape_creator_interface = StampAPI.LibAx.shape_creator_interface(\n StampUtil.getLibax()\n );\n const name = params.name;\n const left_width = params.leftWidth || 7.2;\n const right_width = params.rightWidth || 7.2;\n const lane_width = params.laneWidth || 3.6; // lane_width = -1时不设置道宽\n const is_loop = false;\n const fly_height = 0;\n const speed = 15;\n mass_interface.create_track(\n name,\n left_width,\n right_width,\n lane_width,\n is_loop,\n fly_height,\n speed\n );\n\n mass_interface.OnMassLoaded = function (data: any) {\n resolve(data);\n shape_creator_interface.clear();\n };\n });\n }\n\n createTrackSchemeFromJson(trackId: any, jsonStr: any) {\n return new Promise((resolve) => {\n const mass_interface = StampAPI.LibAx.mass_interface(\n StampUtil.getLibax()\n );\n mass_interface.load_track(trackId, JSON.stringify(jsonStr));\n mass_interface.OnMassLoaded = function (data: any) {\n resolve(data);\n };\n });\n }\n /**\n *增加方案\n * @param params\n */\n addScheme(params: any) {\n return new Promise((resolve) => {\n const mass_interface = StampAPI.LibAx.mass_interface(\n StampUtil.getLibax()\n );\n const track_id = params.trackId;\n const crowd_size = params.crowdSize || 100;\n const mass_type = params.trackType || 3;\n const crowd_resource = params.crowdResource;\n mass_interface.add_scheme(\n track_id,\n crowd_size,\n mass_type,\n crowd_resource\n );\n mass_interface.OnMassSchemeChanged = function (data: any) {\n if (data.type == \"added\") {\n params.schemeGuid = data.scheme_guid;\n resolve(params);\n } else {\n resolve(params);\n }\n };\n });\n }\n /**\n * 移除方案:删除路径的同时需要移除方案\n * @param schemeId 方案guid\n */\n removeScheme(schemeId: string) {\n return new Promise((resolve) => {\n const mass_interface = StampAPI.LibAx.mass_interface(\n StampUtil.getLibax()\n );\n mass_interface.OnMassSchemeChanged = function (data: any) {\n resolve(data); //删除成功\n };\n mass_interface.remove_scheme(schemeId);\n });\n }\n /**\n * 播放\n */\n playMass() {\n const mass_interface = StampAPI.LibAx.mass_interface(StampUtil.getLibax());\n mass_interface.play_mass();\n }\n /**\n * 停止\n */\n stopMass() {\n const mass_interface = StampAPI.LibAx.mass_interface(StampUtil.getLibax());\n mass_interface.stop_mass();\n }\n /**\n * 卸载路径\n */\n unloadTrackScheme(trackID: any) {\n const mass_interface = StampAPI.LibAx.mass_interface(StampUtil.getLibax());\n mass_interface.unload_track(trackID);\n }\n //#endregion\n\n //#region 地质体\n /**\n * 加载钻孔\n * @param layerGuid\n * @param projectName\n */\n loadDrill(layerGuid: any, projectName: any) {\n const geology_interface = StampAPI.LibAx.geology_interface(StampAPI.lib_ax);\n geology_interface.OnLoadDrillsFinished = function (data: any) {\n geology_interface.OnLoadDrillsFinished = undefined;\n };\n geology_interface.load_drills_by_project(layerGuid, projectName, 2);\n }\n\n /**\n * 隐藏钻孔\n * @param layerGuid\n * @param projectName\n */\n unloadProjectLayer(layerGuid: any, projectName: any) {\n const geology_interface = StampAPI.LibAx.geology_interface(StampAPI.lib_ax);\n geology_interface.unload_drills_by_project(layerGuid, projectName);\n }\n\n /**\n * 自定义构建地质体\n * @param layerGuid\n * @param xValue\n * @param yValue\n */\n createSoilLayerByCustom(layerGuid: any, xValue: any, yValue: any) {\n return new Promise((resolve) => {\n const shape_creator_interface = StampAPI.LibAx.shape_creator_interface(\n StampAPI.lib_ax\n );\n const geology_interface = StampAPI.LibAx.geology_interface(\n StampAPI.lib_ax\n );\n StampUtil.setMouseCursor(4);\n geology_interface.create_soil_layer_by_custom(\n layerGuid,\n xValue,\n yValue,\n 2,\n 0,\n false\n );\n geology_interface.OnCreateSoilLayerFinished = function (data: any) {\n shape_creator_interface.clear();\n StampUtil.setMouseCursor();\n resolve(data.body_id);\n };\n });\n }\n\n /**\n * 整体构建地质体\n * @param layerGuid\n * @param projectName\n * @param xValue\n * @param yValue\n */\n createSoilLayerByProject(\n layerGuid: any,\n projectName: any,\n xValue: any,\n yValue: any\n ) {\n return new Promise((resolve) => {\n const geology_interface = StampAPI.LibAx.geology_interface(\n StampAPI.lib_ax\n );\n geology_interface.create_soil_layer_by_project(\n layerGuid,\n projectName,\n xValue,\n yValue,\n 2,\n 0,\n false\n );\n geology_interface.OnCreateSoilLayerFinished = function (data: any) {\n resolve(data.body_id);\n };\n });\n }\n\n /**\n * 移除地质体\n * @param layerGuid\n * @param bodyID\n */\n removeGeologicalBody(layerGuid: any, bodyID: any) {\n const geology_interface = StampAPI.LibAx.geology_interface(StampAPI.lib_ax);\n geology_interface.remove_geological_body(layerGuid, bodyID);\n }\n\n /**\n * 地质体图层列表\n * @param layerGuid\n * @param bodyID\n */\n getSoilLayers(layerGuid: any, bodyID: any) {\n return new Promise((resolve) => {\n const geology_interface = StampAPI.LibAx.geology_interface(\n StampAPI.lib_ax\n );\n geology_interface.OnGetSoilLayers = function (data: any) {\n geology_interface.OnGetSoilLayers = undefined;\n resolve(data);\n };\n geology_interface.get_soil_layers(layerGuid, bodyID);\n });\n }\n\n /**\n * 设置土壤可见性\n * @param layerGuid\n * @param bodyID\n * @param soilID\n * @param Visible\n */\n setSoilVisible(layerGuid: any, bodyID: any, soilID: any, Visible: any) {\n const geology_interface = StampAPI.LibAx.geology_interface(StampAPI.lib_ax);\n geology_interface.set_drill_visible(layerGuid, bodyID, soilID, Visible);\n }\n\n /**\n * 地质体水平剖切\n * @param layerGuid\n * @param bodyID\n * @param positive\n * @param depth\n */\n horizontalCutSoilLayer(\n layerGuid: any,\n bodyID: any,\n positive: boolean,\n depth: number\n ) {\n return new Promise((resolve) => {\n const geology_interface = StampAPI.LibAx.geology_interface(\n StampAPI.lib_ax\n );\n StampUtil.setMouseCursor(4);\n geology_interface.horizontal_cut_soil_layer(layerGuid, positive, depth);\n geology_interface.OnCutSoilLayerFinished = function (data: any) {\n StampAPI.LibAx.shape_creator_interface(StampAPI.lib_ax).clear();\n StampUtil.setMouseCursor();\n resolve(data);\n };\n });\n }\n\n /**\n * 地质体垂直剖切\n * @param layerGuid\n * @param bodyID\n * @param positive\n */\n verticalCutSoilLayer(layerGuid: any, bodyID: any, positive: boolean) {\n return new Promise((resolve) => {\n const geology_interface = StampAPI.LibAx.geology_interface(\n StampAPI.lib_ax\n );\n StampUtil.setMouseCursor(4);\n geology_interface.vertical_cut_soil_layer(layerGuid, positive);\n geology_interface.OnCutSoilLayerFinished = function (data: any) {\n StampAPI.LibAx.shape_creator_interface(StampAPI.lib_ax).clear();\n StampUtil.setMouseCursor();\n resolve(data);\n };\n });\n }\n\n /**\n * 剥层分析\n * @param layerGuid\n * @param distance\n */\n separateSoilLayer(layerGuid: any, distance: number) {\n const geology_interface = StampAPI.LibAx.geology_interface(StampAPI.lib_ax);\n geology_interface.separate_soil_layer(layerGuid, distance);\n }\n\n getLayerProfile(layerGuid: any) {\n return new Promise((resolve) => {\n const geology_interface = StampAPI.LibAx.geology_interface(\n StampAPI.lib_ax\n );\n StampUtil.setMouseCursor(4);\n geology_interface.get_layer_profile(layerGuid);\n geology_interface.OnGetProfile = function (data: any) {\n StampAPI.LibAx.shape_creator_interface(StampAPI.lib_ax).clear();\n StampUtil.setMouseCursor();\n resolve(data);\n };\n });\n }\n\n /**\n * 判断地址图层是否有数据\n * @param layerGuid\n */\n geologyLayerHasData(layerGuid: any) {\n return new Promise((resolve) => {\n const geology_interface = StampAPI.LibAx.geology_interface(\n StampAPI.lib_ax\n );\n geology_interface.OnHasData = function (data: any) {\n resolve(data);\n };\n geology_interface.has_data(layerGuid);\n });\n }\n\n /**\n * 获取地质体相关表\n * @param layerGuid\n * @returns\n */\n getTableNames(layerGuid: any) {\n return new Promise((resolve) => {\n const geology_interface = StampAPI.LibAx.geology_interface(\n StampAPI.lib_ax\n );\n geology_interface.OnGetTableNames = function (data: any) {\n resolve(data);\n };\n geology_interface.get_table_names(layerGuid);\n });\n }\n\n /**\n * 剖切复原地质体\n * @param layerGuid\n */\n resetGeomodelVisible(layerGuid: any) {\n const geology_interface = StampAPI.LibAx.geology_interface(StampAPI.lib_ax);\n geology_interface.reset_geomodel_visible(layerGuid);\n }\n\n /**\n * 获取土壤信息列表\n * @param layerGuid\n * @param bodyID\n */\n getSoilInfos(layerGuid: any, bodyID: any) {\n return new Promise((resolve) => {\n const geology_interface = StampAPI.LibAx.geology_interface(\n StampAPI.lib_ax\n );\n geology_interface.OnGetSoilInfos = function (data: any) {\n geology_interface.OnGetSoilInfos = undefined;\n resolve(data);\n };\n geology_interface.get_soil_infos(layerGuid, bodyID);\n });\n }\n /**\n * 拾取查询钻孔\n * @param callbackSuccess\n * @param callbackCancel\n */\n pickDrill(callbackSuccess: any, callbackCancel: any) {\n const query_interface = StampAPI.LibAx.query_interface(StampAPI.lib_ax);\n query_interface.OnPickObject = function (data: any) {\n typeof callbackSuccess === \"function\" &&\n data.guid &&\n callbackSuccess(data);\n };\n query_interface.OnPickObjectEx = function (data: any) {\n typeof callbackSuccess === \"function\" && callbackSuccess(data);\n };\n const earth =\n StampAPI.lib_ax.player.webRtcController.videoPlayer.videoElement;\n query_interface.pick_sub_object_ex();\n earth.oncontextmenu = () => {\n earth.oncontextmenu = null;\n query_interface.OnPickObject = undefined;\n query_interface.OnPickObjectEx = undefined;\n query_interface.finish_pick();\n StampUtil.setMouseCursor();\n typeof callbackCancel == \"function\" && callbackCancel();\n };\n }\n\n /**\n * 钻孔接地\n * @param layerGuid\n * @param projectName\n * @returns\n */\n clampDrill(layerGuid: any, projectName: any) {\n return new Promise((resolve) => {\n const geology_interface = StampAPI.LibAx.geology_interface(\n StampAPI.lib_ax\n );\n geology_interface.OnGetHolesDemHeightByBH = function (data: any) {\n resolve(data);\n };\n geology_interface.get_holes_dem_height_by_bh(layerGuid, projectName);\n });\n }\n\n /**\n * 获取图层的地质体id\n * @param layerGuid\n * @returns\n */\n getGeologicalbodyList(layerGuid: any) {\n return new Promise((resolve) => {\n const geology_interface = StampAPI.LibAx.geology_interface(\n StampAPI.lib_ax\n );\n geology_interface.OnGetGeologicalbodyList = function (data: any) {\n resolve(data);\n };\n geology_interface.get_geologicalbody_list(layerGuid);\n });\n }\n\n /**\n * 设置钻孔半径\n * @param layer_guid\n * @param ratio\n */\n setHoleRatio(layer_guid: any, ratio: any) {\n const geology_interface = StampAPI.LibAx.geology_interface(StampAPI.lib_ax);\n geology_interface.set_hole_ratio(layer_guid, ratio); // 半径=0.2*2米\n }\n\n /**\n * 获取钻孔的节点坐标\n * @param layer\n * @param drills\n * @returns\n */\n createDrillsProfile(layer: any, drills: any) {\n return new Promise((resolve) => {\n const geology_interface = StampAPI.LibAx.geology_interface(\n StampAPI.lib_ax\n );\n geology_interface.OnGetProfile = function (data: any) {\n resolve(data);\n };\n geology_interface.create_drills_profile(layer, drills);\n });\n }\n\n /**\n * 获取钻孔profile\n * @param layer\n * @param drills_guid\n * @returns\n */\n GetDrillProfileLayers(layer: any, drills_guid: any) {\n return new Promise((resolve) => {\n const geology_interface = StampAPI.LibAx.geology_interface(\n StampAPI.lib_ax\n );\n geology_interface.OnGetProfile = function (data: any) {\n resolve(data);\n };\n geology_interface.get_drills_profile(layer, drills_guid);\n });\n }\n\n GetMainLayerLines(layer: any, index: any) {\n return new Promise((resolve) => {\n const geology_interface = StampAPI.LibAx.geology_interface(\n StampAPI.lib_ax\n );\n geology_interface.OnGetProfile = function (data: any) {\n resolve(data);\n };\n geology_interface.get_main_layer_lines(layer, index);\n });\n }\n\n /**\n * 生成隧道/管线(方形)\n * @param points\n * @param width\n * @param height\n */\n generateTunnel(\n points: Array<any>,\n textureOrColor: any,\n width: number,\n height: number,\n isTexture: boolean\n ) {\n return new Promise((resolve) => {\n const params = [\n points,\n \"tunnel\",\n textureOrColor,\n width,\n height,\n true,\n isTexture,\n 0,\n 1,\n true,\n ];\n const terrain_manager_interface =\n StampAPI.lib_ax.terrain_manager_interface;\n terrain_manager_interface.OnTerrainManagerResult = function (data: any) {\n resolve(data);\n };\n terrain_manager_interface.generate_tunnel(params);\n });\n }\n\n /**\n * 生成隧道/管线(圆形)\n * @param points\n * @param width\n * @param height\n */\n generateTunnelRound(\n points: Array<any>,\n textureOrColor: any,\n radius: number,\n edges = 32,\n isTexture: boolean\n ) {\n return new Promise((resolve) => {\n const params = [\n points,\n \"round\",\n textureOrColor,\n radius,\n edges,\n true,\n isTexture,\n 0,\n 1,\n true,\n ];\n const terrain_manager_interface =\n StampAPI.lib_ax.terrain_manager_interface;\n terrain_manager_interface.OnTerrainManagerResult = function (data: any) {\n resolve(data);\n };\n terrain_manager_interface.generate_round_tunnel(params);\n });\n }\n\n /**\n * 生成隧道/管线(拱形)\n * @param points\n * @param width\n * @param height\n */\n generateTunnelArch(\n points: Array<any>,\n textureOrColor: any,\n width: number,\n height: number,\n isTexture: boolean\n ) {\n return new Promise((resolve) => {\n const params = [\n points,\n \"arch\",\n textureOrColor,\n width,\n height,\n true,\n isTexture,\n 0,\n 1,\n true,\n ];\n const terrain_manager_interface =\n StampAPI.lib_ax.terrain_manager_interface;\n terrain_manager_interface.OnTerrainManagerResult = function (data: any) {\n resolve(data);\n };\n terrain_manager_interface.generate_arch_tunnel(params);\n });\n }\n\n /**\n * 获取管线图例\n */\n getBlockLayerSymbol(layerid: string) {\n return new Promise((resolve: any) => {\n const stamp_frame = StampAPI.lib_ax.stamp_frame;\n stamp_frame.OnGetBlockLayerSymbol = function (data: any) {\n stamp_frame.OnGetBlockLayerSymbol = undefined;\n resolve(data);\n };\n stamp_frame.GetBlockLayerSymbolCommand(layerid);\n });\n }\n\n /**\n * 创建3d热力图\n * @param options\n */\n createHeatMap3d(options: any) {\n const element_interface = StampAPI.LibAx.element_interface(\n StampUtil.getLibax()\n );\n const userdataObj = {} as any;\n userdataObj.type = 331;\n userdataObj.name = \"niagara heatmap\";\n userdataObj.guid = options.guid;\n userdataObj.action = \"add\";\n if (options.type == \"square\" || !options.type) {\n userdataObj.niagara_asset_path =\n \"/Engine/HeatMap/HeatMap_NiagaraSystem_square.HeatMap_NiagaraSystem_square\"; //柱状和锥形\n } else if (options.type == \"cone\") {\n userdataObj.niagara_asset_path =\n \"/Engine/HeatMap/HeatMap_NiagaraSystem_cone.HeatMap_NiagaraSystem_cone\";\n }\n userdataObj.float_params = [\"HeatMap_OffsetAlpha\", options.weight]; // 用来设置权重值 0-1之间\n userdataObj.selectable = 1;\n userdataObj.editable = 1;\n userdataObj.visible = 1;\n const params = [\n userdataObj,\n options.point.x,\n options.point.y,\n options.point.z,\n 0,\n 0,\n 0,\n options.scaleX || 1,\n options.scaleY || 1,\n options.scaleZ || 1,\n ];\n return new Promise((resolve) => {\n element_interface.OldOnAdded = element_interface.OnAdded;\n element_interface.OnAdded = () => {\n element_interface.OnAdded = element_interface.OldOnAdded;\n resolve(true);\n };\n StampUtil.addToUserDataArr(params[0]);\n element_interface.create_heatmap_params(params);\n });\n }\n\n /**\n * 创建3d热力图\n * @param options\n */\n createHeatMap3dBatch(optionsArr: any) {\n const element_interface = StampAPI.LibAx.element_interface(\n StampUtil.getLibax()\n );\n const userdataArr: Array<any> = [];\n for (let i = 0; i < optionsArr.length; i++) {\n const options = optionsArr[i];\n const userdataObj = {} as any;\n userdataObj.type = 331;\n userdataObj.name = \"niagara heatmap\";\n userdataObj.guid = options.guid;\n userdataObj.action = \"add\";\n if (options.type == \"square\" || !options.type) {\n userdataObj.niagara_asset_path =\n \"/Engine/HeatMap/HeatMap_NiagaraSystem_square.HeatMap_NiagaraSystem_square\"; //柱状和锥形\n } else if (options.type == \"cone\") {\n userdataObj.niagara_asset_path =\n \"/Engine/HeatMap/HeatMap_NiagaraSystem_cone.HeatMap_NiagaraSystem_cone\";\n }\n userdataObj.float_params = [\"HeatMap_OffsetAlpha\", options.weight]; // 用来设置权重值 0-1之间\n userdataObj.selectable = 1;\n userdataObj.editable = 1;\n userdataObj.visible = 1;\n const params = [\n userdataObj,\n options.point.x,\n options.point.y,\n options.point.z,\n 0,\n 0,\n 0,\n options.scaleX || 1,\n options.scaleY || 1,\n options.scaleZ || 1,\n ];\n userdataArr.push(params);\n }\n\n return new Promise((resolve) => {\n element_interface.OldOnAdded = element_interface.OnAdded;\n element_interface.OnAdded = () => {\n element_interface.OnAdded = element_interface.OldOnAdded;\n resolve(true);\n };\n for (let i = 0; i < userdataArr.length; i++) {\n StampUtil.addToUserDataArr(userdataArr[i][0]);\n }\n element_interface.create_batch(userdataArr);\n });\n }\n\n /**\n * 绘制线,获取线点串、朝向、俯仰角度、距离等信息\n * @returns\n */\n getLineViewAngle() {\n return new Promise((resolve) => {\n StampUtil.createLine(null).then((res: any) => {\n StampUtil.clearShapeCreator();\n if (res && res.Points && res.Points.length >= 2) {\n const points: Array<any> = [];\n for (let i = 0; i < res.Points.length; i++) {\n points.push({\n x: res.Points[i].Longitude,\n y: res.Points[i].Latitude,\n z: res.Points[i].Altitude,\n });\n }\n const distance = Number(\n StampUtil.calcPointDistance(points[0], points[1]).toFixed(2)\n );\n StampUtil.calcHeading(points[0], points[1]).then((res: any) => {\n resolve({\n points: points,\n distance: distance,\n heading: res.heading,\n tilt: res.tilt,\n });\n });\n } else {\n resolve(null);\n }\n });\n });\n }\n\n /**\n * 根据两个点计算朝向和俯仰角度\n * @param fromPoint\n * @param toPoint\n * @returns\n */\n calcHeading(fromPoint: any, toPoint: any) {\n return new Promise((resolve) => {\n const geometry_algorithm_interface =\n StampUtil.getLibax().geometry_algorithm_interface;\n geometry_algorithm_interface.OnGeometryAlgorithmFinished = function (\n data: any\n ) {\n resolve(data);\n };\n geometry_algorithm_interface.calc_heading(fromPoint, toPoint);\n });\n }\n\n /**\n * 获取umg资源\n * @param guid\n * @returns\n */\n getUmgResources(guid: string) {\n return new Promise((resolve, reject) => {\n const vector_tile_layer_interface =\n StampAPI.LibAx.vector_tile_layer_interface(StampUtil.getLibax());\n vector_tile_layer_interface.OnRespondGet = function (data: any) {\n resolve(data);\n };\n vector_tile_layer_interface.get_umg_resources(guid); // 图层guid\n });\n }\n\n /**\n * 获取widget配置\n */\n getWidgetConfig() {\n return new Promise((resolve, reject) => {\n const vector_tile_layer_interface =\n StampAPI.LibAx.vector_tile_layer_interface(StampUtil.getLibax());\n vector_tile_layer_interface.OnRespondGet = function (data: any) {\n resolve(data);\n };\n vector_tile_layer_interface.get_widget_config();\n });\n }\n\n /**\n * 设置umg样式\n * @param params\n * @returns\n */\n setUmgStyle(params: any) {\n return new Promise((resolve, reject) => {\n const vector_tile_layer_interface =\n StampAPI.LibAx.vector_tile_layer_interface(StampUtil.getLibax());\n vector_tile_layer_interface.OnRespondGet = function (data: any) {\n vector_tile_layer_interface.OnRespondGet = undefined;\n resolve(data);\n };\n vector_tile_layer_interface.add_or_update_umg_style(params);\n });\n }\n\n // 会返回当前配置的所有表达式,如果是单一值会返回\"null_expression\"\n getUmgNum(guid: string) {\n return new Promise((resolve, reject) => {\n const vector_tile_layer_interface =\n StampAPI.LibAx.vector_tile_layer_interface(StampUtil.getLibax());\n vector_tile_layer_interface.OnRespondGet = function (data: any) {\n vector_tile_layer_interface.OnRespondGet = undefined;\n resolve(data);\n };\n vector_tile_layer_interface.get_umg_style_num(guid);\n });\n }\n\n // 参数格式 var params = [\n // \"84093c04-ad87-4fc2-a679-de31ec6539b0\", // 图层guid\n // \"'[fcode]' = '230107'\", // 表达式字符串\n // ];\n getUmgStyle(params: any) {\n return new Promise((resolve, reject) => {\n const vector_tile_layer_interface =\n StampAPI.LibAx.vector_tile_layer_interface(StampUtil.getLibax());\n vector_tile_layer_interface.OnRespondGet = function (data: any) {\n vector_tile_layer_interface.OnRespondGet = undefined;\n resolve(data);\n };\n vector_tile_layer_interface.get_umg_style(params);\n });\n }\n\n // 参数格式 var params = [\n // \"84093c04-ad87-4fc2-a679-de31ec6539b0\", // 图层guid\n // 2, // 移除样式的条数\n // \"'[fcode]' = '230107'\", // 表达式字符串\n // \"'[fcode]' = '230117'\", // 表达式字符串\n // ];\n removeUmgStyle(params: string) {\n return new Promise((resolve, reject) => {\n const vector_tile_layer_interface =\n StampAPI.LibAx.vector_tile_layer_interface(StampUtil.getLibax());\n vector_tile_layer_interface.OnRespondGet = function (data: any) {\n vector_tile_layer_interface.OnRespondGet = undefined;\n resolve(data);\n };\n vector_tile_layer_interface.remove_umg_style(params);\n });\n }\n\n // 参数格式 var params = [\n // \"84093c04-ad87-4fc2-a679-de31ec6539b0\", // 图层guid\n // \"/data/stamp_tmp/a9101bf6-bf66-47dd-86ec-2c9deb5536db.umg\" // 路径\n // ];\n saveUmgStyle(params: any) {\n return new Promise((resolve, reject) => {\n const vector_tile_layer_interface =\n StampAPI.LibAx.vector_tile_layer_interface(StampUtil.getLibax());\n vector_tile_layer_interface.OnRespondGet = function (data: any) {\n vector_tile_layer_interface.OnRespondGet = undefined;\n resolve(data);\n };\n vector_tile_layer_interface.save_umg_style(params);\n });\n }\n\n setUseUmgStyle(guid: string, isUse: boolean) {\n return new Promise((resolve, reject) => {\n const vector_tile_layer_interface =\n StampAPI.LibAx.vector_tile_layer_interface(StampUtil.getLibax());\n vector_tile_layer_interface.OnRespondGet = function (data: any) {\n vector_tile_layer_interface.OnRespondGet = undefined;\n resolve(data);\n };\n const params = [guid, !!isUse];\n vector_tile_layer_interface.set_use_umg_style(params);\n });\n }\n\n getUseUmgStyle(guid: string) {\n return new Promise((resolve, reject) => {\n const vector_tile_layer_interface =\n StampAPI.LibAx.vector_tile_layer_interface(StampUtil.getLibax());\n vector_tile_layer_interface.OnRespondGet = function (data: any) {\n resolve(data.use_umg_style);\n };\n vector_tile_layer_interface.get_use_umg_style(guid);\n });\n }\n\n /**\n * 影像卷帘图层\n */\n setRoll(params: any) {\n return new Promise((resolve) => {\n const environment_interface = StampUtil.getLibax().environment_interface;\n environment_interface.OnEnvironmentGet = (res: any) => {\n resolve(res);\n };\n environment_interface.set_roll_dom_layers(params);\n });\n }\n\n /**\n * 设置影像卷帘大小\n * @param add_factor\n */\n setRollPos(add_factor: number) {\n return new Promise((resolve) => {\n const environment_interface = StampUtil.getLibax().environment_interface;\n environment_interface.OnEnvironmentGet = (res: any) => {\n resolve(res);\n };\n environment_interface.set_roll_dom_split_pos(add_factor);\n });\n }\n\n /**\n * 设置c键最小俯仰角\n * @param angle\n */\n setLookDownMinTilt(angle: number) {\n const global_control_interface =\n StampUtil.getLibax().global_control_interface;\n global_control_interface.OnLookDownMinTilt = function () {};\n global_control_interface.set_look_down_min_tilt([angle]);\n }\n\n /**\n * 获取c键最小俯仰角\n * @returns\n */\n getLookDownMinTilt() {\n return new Promise<void>((resolve, reject) => {\n const global_control_interface =\n StampUtil.getLibax().global_control_interface;\n global_control_interface.OnLookDownMinTilt = function (data: any) {\n resolve(data);\n };\n global_control_interface.get_look_down_min_tilt();\n });\n }\n\n /**\n * 添加WMS服务图层\n */\n createWMSLayer(params: any) {\n const obj = {\n guid: params.guid || StampUtil.createGuid(),\n name: params.name || \"wms\",\n url: params.url, //必传 不能为空\n order: params.order || 0,\n visible: params.visible || true,\n visibleMaxLevel: params.visibleMaxLevel || 23,\n layers: params.layers || \"\",\n transparent: params.transparent || \"true\",\n version: params.version || \"1.3.0\",\n styles: params.styles || \"\",\n width: params.width || 512,\n height: params.height || 512,\n subDomains: params.subDomains || \"18010,18081,18082\",\n rect: params.rect || \"\",\n shadowType: params.shadowType || \"None\",\n isWebmercator: params.isWebmercator || false,\n };\n const layer_manager_interface = StampAPI.LibAx.layer_manager_interface(\n StampAPI.lib_ax\n );\n layer_manager_interface.create_wms_layer(obj);\n }\n\n /**\n * 添加WMS服务图层\n */\n createWMTSLayer(params: any) {\n const obj = {\n guid: params.guid || StampUtil.createGuid(),\n name: params.name || \"wmts\",\n url: params.url, //必传 不能为空\n order: params.order || 0,\n visible: params.visible || true,\n spatialFile: params.spatialFile || \"\",\n levels: params.levels || { minLevel: 0, maxLevel: 13 },\n layerGroup: params.layerGroup || {},\n imageExt: params.imageExt || \"PNG\",\n visibleMaxLevel: params.visibleMaxLevel || 23,\n shadowType: params.shadowType || \"None\",\n };\n const layer_manager_interface = StampAPI.LibAx.layer_manager_interface(\n StampAPI.lib_ax\n );\n layer_manager_interface.create_wmts_layer(obj);\n }\n\n /**\n * 创建uePOI\n * @param options\n * @returns\n */\n createUEPoi(options: any) {\n if (!options.guid) {\n options.guid = StampUtil.createGuid();\n }\n const element_interface = StampAPI.lib_ax.element_interface;\n if (StampUtil.createControlElementVisbile(options)) {\n //判断如果已存在,直接显示即可\n return new Promise((resolve) => {\n resolve(options);\n });\n }\n const params = [\n options,\n options.longitude,\n options.latitude,\n options.altitude,\n 0,\n 0,\n 0,\n 1,\n 1,\n 1,\n ];\n if (options.action == \"modify\") {\n element_interface.modify_element(params);\n } else {\n element_interface.create_ue_poi_params(params);\n }\n element_interface.visible_range_element([params[0].guid, 0, 1000]);\n return StampUtil.createElementParams(params[0], options);\n }\n\n /**\n * 创建车流线\n * @param userdataObj\n * @returns\n */\n createElementTrafficFlowLine(\n userdataObj = {\n guid: StampUtil.createGuid(),\n type: 333,\n name: \"trafficFlowLine\",\n action: \"add\", //add:添加 modify:修改\n Radius: 5.0,\n SpeedY: 1.0,\n selectable: 1,\n editable: 1,\n visible: 1,\n drawOrder: 1, //渲染顺序\n } as any\n ) {\n return new Promise((resolve) => {\n this.createPolyline(\n {\n lineWidth: 2,\n lineColor: 0xffff0000,\n },\n null\n ).then((res: any) => {\n if (!res || !res.Points) {\n return;\n }\n userdataObj.SpeedX = 0;\n userdataObj.action = \"add\";\n const params = [userdataObj];\n const points = [];\n for (let i = 0; i < res.Points.length; i++) {\n points.push({\n x: res.Points[i].X,\n y: res.Points[i].Y,\n z: res.Points[i].Z + 5,\n });\n params.push(res.Points[i].X, res.Points[i].Y, res.Points[i].Z);\n }\n const element_interface = StampAPI.LibAx.element_interface(\n StampUtil.getLibax()\n );\n element_interface.OldOnAdded = element_interface.OnAdded;\n element_interface.OnAdded = (data: any) => {\n element_interface.OnAdded = element_interface.OldOnAdded;\n resolve(data);\n };\n element_interface.create_traffic_flow_line_params(params);\n userdataObj.points = points;\n StampUtil.addToUserDataArr(userdataObj);\n });\n });\n }\n\n /**\n * 参数化创建车流线\n * @param params\n * @returns\n */\n createElementTrafficFlowLineParams(params: any) {\n if (!params.guid) {\n params.guid = StampUtil.createGuid();\n }\n const element_interface = StampUtil.getLibax().element_interface;\n if (StampUtil.createControlElementVisbile(params)) {\n //判断如果已存在,直接显示即可\n return new Promise((resolve) => {\n resolve(params);\n });\n }\n //需要将后台服务参数转为接口参数\n let paramObj = [\n {\n guid: params.guid || StampUtil.createGuid(),\n name: params.name || \"\",\n type:\n Number(params.type) || STAMP_RTTI.SE_RTTI_ELEMENT_TRAFFIC_FLOW_LINE,\n action: params.action || \"add\",\n Radius: params.Radius || 1,\n SpeedX: 0,\n SpeedY: params.SpeedY || 1,\n selectable:\n params.selectable == undefined ? 1 : Number(params.selectable),\n editable: params.editable == undefined ? 1 : Number(params.editable),\n visible: params.visible == undefined || Number(params.visible),\n drawOrder: 1, //渲染顺序\n },\n ] as any;\n const pointsArr = [];\n for (let i = 0; i < params.points.length; i++) {\n pointsArr.push(params.points[i].x);\n pointsArr.push(params.points[i].y);\n pointsArr.push(params.points[i].z);\n }\n paramObj = paramObj.concat(pointsArr);\n if (params.action == \"modify\") {\n element_interface.modify_element(paramObj);\n } else {\n element_interface.create_traffic_flow_line_params(paramObj);\n }\n return StampUtil.createElementParams(paramObj[0], params);\n }\n\n /**\n * 创建od线\n * @param userdataObj\n * @returns\n */\n createElementODLine(\n userdataObj = {\n guid: StampUtil.createGuid(),\n type: 334,\n name: \"odLine\",\n action: \"add\", //add:添加 modify:修改\n DrawType: 1,\n Curvature: 0.5,\n Color: \"#FF00D6FF\",\n Speed: 0.5,\n LineScale: 1, //线宽缩放比\n BaseOpacity: 0.02, //背景透明度\n DrawSpline: 0, // 是否绘制辅助的样条线\n selectable: 1,\n editable: 1,\n visible: 1,\n drawOrder: 1, //渲染顺序\n } as any\n ) {\n return new Promise((resolve) => {\n this.createPolyline(\n {\n lineWidth: 2,\n lineColor: 0xffff0000,\n },\n null\n ).then((res: any) => {\n if (!res || !res.Points) {\n return;\n }\n userdataObj.action = \"add\";\n const params = [userdataObj];\n const points = [];\n for (let i = 0; i < res.Points.length; i++) {\n points.push({\n x: res.Points[i].X,\n y: res.Points[i].Y,\n z: res.Points[i].Z,\n });\n params.push(res.Points[i].X, res.Points[i].Y, res.Points[i].Z);\n }\n const element_interface = StampAPI.LibAx.element_interface(\n StampUtil.getLibax()\n );\n element_interface.OldOnAdded = element_interface.OnAdded;\n element_interface.OnAdded = (data: any) => {\n element_interface.OnAdded = element_interface.OldOnAdded;\n resolve(data);\n };\n element_interface.create_ue_spline_actor_params(params);\n userdataObj.points = points;\n StampUtil.addToUserDataArr(userdataObj);\n });\n });\n }\n\n /**\n * 参数化创建od线\n * @param params\n * @returns\n */\n createElementODLineParams(params: any) {\n if (!params.guid) {\n params.guid = StampUtil.createGuid();\n }\n const element_interface = StampUtil.getLibax().element_interface;\n if (StampUtil.createControlElementVisbile(params)) {\n //判断如果已存在,直接显示即可\n return new Promise((resolve) => {\n resolve(params);\n });\n }\n //需要将后台服务参数转为接口参数\n let paramObj = [\n {\n guid: params.guid || StampUtil.createGuid(),\n name: params.name || \"\",\n type: Number(params.type) || STAMP_RTTI.SE_RTTI_ELEMENT_OD_LINE,\n action: params.action || \"add\",\n DrawType: params.DrawType,\n Curvature: params.Curvature || 0.5,\n Color: params.Color || \"#FF00D6FF\",\n Speed: params.Speed || 0.5,\n LineScale: params.LineScale || 1, //线宽缩放比\n BaseOpacity: params.BaseOpacity || 0.02, //背景透明度\n DrawSpline: params.DrawSpline, // 是否绘制辅助的样条线\n selectable:\n params.selectable == undefined ? 1 : Number(params.selectable),\n editable: params.editable == undefined ? 1 : Number(params.editable),\n visible: params.visible == undefined || Number(params.visible),\n drawOrder: 1, //渲染顺序\n },\n ] as any;\n const pointsArr = [];\n for (let i = 0; i < params.points.length; i++) {\n pointsArr.push(params.points[i].x);\n pointsArr.push(params.points[i].y);\n pointsArr.push(params.points[i].z);\n }\n paramObj = paramObj.concat(pointsArr);\n if (params.action == \"modify\") {\n element_interface.modify_element(paramObj);\n } else {\n element_interface.create_ue_spline_actor_params(paramObj);\n }\n return StampUtil.createElementParams(paramObj[0], params);\n }\n\n /**\n * 创建od线圆环\n * @param userdataObj\n * @returns\n */\n createElementODLineCircle(\n userdataObj = {\n guid: StampUtil.createGuid(),\n type: 336,\n name: \"odLineCircle\",\n action: \"add\", //add:添加 modify:修改\n DrawType: 1,\n Curvature: 0.5,\n Color: \"#FF00D6FF\",\n Speed: 0.5,\n LineScale: 1, //线宽缩放比\n BaseOpacity: 0.02, //背景透明度\n DrawSpline: 0, // 是否绘制辅助的样条线\n CircleScale: 100,\n CircleAHide: 0,\n CircleBHide: 0,\n selectable: 1,\n editable: 1,\n visible: 1,\n drawOrder: 1, //渲染顺序\n } as any\n ) {\n return new Promise((resolve) => {\n this.createPolyline(\n {\n lineWidth: 2,\n lineColor: 0xffff0000,\n },\n null\n ).then((res: any) => {\n if (!res || !res.Points) {\n return;\n }\n userdataObj.action = \"add\";\n const params = [userdataObj];\n const points = [];\n for (let i = 0; i < res.Points.length; i++) {\n points.push({\n x: res.Points[i].X,\n y: res.Points[i].Y,\n z: res.Points[i].Z,\n });\n params.push(res.Points[i].X, res.Points[i].Y, res.Points[i].Z);\n }\n const element_interface = StampAPI.LibAx.element_interface(\n StampUtil.getLibax()\n );\n element_interface.OldOnAdded = element_interface.OnAdded;\n element_interface.OnAdded = (data: any) => {\n element_interface.OnAdded = element_interface.OldOnAdded;\n resolve(data);\n };\n element_interface.create_ue_spline_actor_params(params);\n userdataObj.points = points;\n StampUtil.addToUserDataArr(userdataObj);\n });\n });\n }\n\n /**\n * 参数化创建od线圆环\n * @param params\n * @returns\n */\n createElementODLineCircleParams(params: any) {\n if (!params.guid) {\n params.guid = StampUtil.createGuid();\n }\n const element_interface = StampUtil.getLibax().element_interface;\n if (StampUtil.createControlElementVisbile(params)) {\n //判断如果已存在,直接显示即可\n return new Promise((resolve) => {\n resolve(params);\n });\n }\n //需要将后台服务参数转为接口参数\n let paramObj = [\n {\n guid: params.guid || StampUtil.createGuid(),\n name: params.name || \"\",\n type: Number(params.type) || STAMP_RTTI.SE_RTTI_ELEMENT_OD_LINE,\n action: params.action || \"add\",\n DrawType: params.DrawType,\n Curvature: params.Curvature || 0.5,\n Color: params.Color || \"#FF00D6FF\",\n Speed: params.Speed || 0.5,\n LineScale: params.LineScale, //线宽缩放比\n BaseOpacity: params.BaseOpacity || 0.02, //背景透明度\n DrawSpline: params.DrawSpline, // 是否绘制辅助的样条线\n CircleScale: params.CircleScale || 100,\n CircleAHide: params.CircleAHide,\n CircleBHide: params.CircleBHide,\n selectable:\n params.selectable == undefined ? 1 : Number(params.selectable),\n editable: params.editable == undefined ? 1 : Number(params.editable),\n visible: params.visible == undefined || Number(params.visible),\n drawOrder: 1, //渲染顺序\n },\n ] as any;\n const pointsArr = [];\n for (let i = 0; i < params.points.length; i++) {\n pointsArr.push(params.points[i].x);\n pointsArr.push(params.points[i].y);\n pointsArr.push(params.points[i].z);\n }\n paramObj = paramObj.concat(pointsArr);\n if (params.action == \"modify\") {\n element_interface.modify_element(paramObj);\n } else {\n element_interface.create_ue_spline_actor_params(paramObj);\n }\n return StampUtil.createElementParams(paramObj[0], params);\n }\n\n /**\n * 创建流动线\n * @param userdataObj\n * @returns\n */\n createElementSplineFlowLine(\n userdataObj = {\n guid: StampUtil.createGuid(),\n type: 334,\n name: \"odLineCircle\",\n action: \"add\", //add:添加 modify:修改\n Style: 0,\n SplineType: 1,\n MeshDirection: 0,\n Width: 1.0,\n Tilling: 300, // 纹理重复系数\n Speed: 1.0, //\n Loop: 0, // 是否回环\n DrawSpline: 0, // 是否绘制辅助的样条线\n selectable: 1,\n editable: 1,\n visible: 1,\n } as any\n ) {\n return new Promise((resolve) => {\n this.createPolyline(\n {\n lineWidth: 2,\n lineColor: 0xffff0000,\n },\n null\n ).then((res: any) => {\n if (!res || !res.Points) {\n return;\n }\n userdataObj.action = \"add\";\n const params = [userdataObj];\n const points = [];\n for (let i = 0; i < res.Points.length; i++) {\n points.push({\n x: res.Points[i].X,\n y: res.Points[i].Y,\n z: res.Points[i].Z + 5,\n });\n params.push(res.Points[i].X, res.Points[i].Y, res.Points[i].Z);\n }\n const element_interface = StampAPI.LibAx.element_interface(\n StampUtil.getLibax()\n );\n element_interface.OldOnAdded = element_interface.OnAdded;\n element_interface.OnAdded = (data: any) => {\n element_interface.OnAdded = element_interface.OldOnAdded;\n resolve(data);\n };\n element_interface.create_ue_spline_actor_params(params);\n userdataObj.points = points;\n StampUtil.addToUserDataArr(userdataObj);\n });\n });\n }\n\n /**\n * 参数化创建流动线\n * @param params\n * @returns\n */\n createElementSplineFlowLineParams(params: any) {\n if (!params.guid) {\n params.guid = StampUtil.createGuid();\n }\n const element_interface = StampUtil.getLibax().element_interface;\n if (StampUtil.createControlElementVisbile(params)) {\n //判断如果已存在,直接显示即可\n return new Promise((resolve) => {\n resolve(params);\n });\n }\n //需要将后台服务参数转为接口参数\n let paramObj = [\n {\n guid: params.guid || StampUtil.createGuid(),\n name: params.name || \"\",\n type: Number(params.type) || STAMP_RTTI.SE_RTTI_ELEMENT_OD_LINE,\n action: params.action || \"add\",\n Style: params.Style,\n SplineType: params.SplineType,\n MeshDirection: params.MeshDirection,\n Width: params.Width || 1.0,\n Tilling: params.Tilling || 300, // 纹理重复系数\n Speed: params.Speed || 1.0, //\n Loop: params.Loop, // 是否回环\n DrawSpline: params.DrawSpline, // 是否绘制辅助的样条线\n selectable:\n params.selectable == undefined ? 1 : Number(params.selectable),\n editable: params.editable == undefined ? 1 : Number(params.editable),\n visible: params.visible == undefined || Number(params.visible),\n },\n ] as any;\n const pointsArr = [];\n for (let i = 0; i < params.points.length; i++) {\n pointsArr.push(params.points[i].x);\n pointsArr.push(params.points[i].y);\n pointsArr.push(params.points[i].z);\n }\n paramObj = paramObj.concat(pointsArr);\n if (params.action == \"modify\") {\n element_interface.modify_element(paramObj[0]);\n } else {\n element_interface.create_ue_spline_actor_params(paramObj);\n }\n return StampUtil.createElementParams(paramObj[0], params);\n }\n\n iconFlash(data: any) {\n const element_interface = StampUtil.getLibax().element_interface;\n const params = [\n data.guid,\n data.isFlash, // 是否闪烁\n data.flashTime, // 闪烁时间\n data.flashColor, // 闪烁颜色\n ];\n\n element_interface.icon_flash(params);\n }\n\n setBluePrintPlayState(guid: string, playState: boolean) {\n const layer_manager_interface = StampAPI.LibAx.layer_manager_interface(\n StampAPI.lib_ax\n );\n layer_manager_interface.set_blueprint_play_state([guid, playState]);\n }\n\n setTerrainAltitudeScale(value: number) {\n const terrain_manager_interface = StampAPI.lib_ax.terrain_manager_interface;\n terrain_manager_interface.set_terrain_altitude_scale(value);\n }\n //#endregion\n //#region 2.5D出图\n beginGenerate(options: any) {\n return new Promise((resolve) => {\n const global_control_interface = StampAPI.LibAx.global_control_interface(\n StampAPI.lib_ax\n );\n const image_generator_control = StampAPI.LibAx.image_generator_control(\n StampAPI.lib_ax\n );\n const stamp_frame = StampAPI.LibAx.stamp_frame(StampAPI.lib_ax);\n const zip = new JSZip();\n const imageFolder: any = zip.folder(\"2.5DImage\");\n let totalCount = options.totalCount || 0;\n let cur_num = options.currentNum || 0;\n global_control_interface.OnFlytoFinished = function () {\n global_control_interface.OnFlytoFinished = undefined;\n StampUtil.getRootPath().then((res: any) => {\n const path = res.root_path + \"temp\\\\pic2.5\";\n image_generator_control.OnBeginGenerateFinished = function (\n data: any\n ) {\n totalCount = parseInt(data.image_count);\n if (totalCount > 0) {\n stamp_frame.OnDownloadFinished = function () {\n image_generator_control.generate_one();\n cur_num++;\n };\n image_generator_control.goto_image(cur_num);\n }\n };\n image_generator_control.begin_generate(path, options.points);\n });\n };\n global_control_interface.fly_to_lookat(\n options.points[0].x,\n options.points[0].y,\n options.points[0].z,\n options.heading,\n options.tilt,\n 0,\n options.range,\n 1\n );\n image_generator_control.OnGenerateOneFinished = function (\n file_name: any,\n file_buffer: any,\n file_len: any\n ) {\n // todo save\n let newFileName = file_name.split(\"\\\\\");\n newFileName = newFileName[newFileName.length - 1];\n imageFolder.file(newFileName, file_buffer, { binary: true });\n if (options.onProcess && typeof options.onProcess === \"function\") {\n const process = cur_num + \"/\" + totalCount;\n options.onProcess(process);\n }\n if (cur_num < totalCount) {\n image_generator_control.goto_image(cur_num);\n } else {\n image_generator_control.end_generate();\n stamp_frame.OnDownloadFinished = undefined;\n }\n };\n let endGenerateFlag = false; //防止未知原因有时候执行两次\n image_generator_control.OnEndGenerateFinished = function (\n file_name: any,\n file_buffer: any,\n file_len: any\n ) {\n if (endGenerateFlag) {\n return;\n }\n if (options.onComplete && typeof options.onComplete === \"function\") {\n options.onComplete(cur_num, totalCount);\n }\n zip\n .generateAsync({ type: \"blob\" })\n .then((content: Blob) => {\n // 保存到本地\n saveAs(content, \"2.5D出图.zip\");\n })\n .catch((err) => {\n console.error(\"ZIP 生成失败:\", err);\n });\n endGenerateFlag = true;\n resolve(null);\n };\n });\n }\n\n pauseGenerate() {\n const image_generator_control = StampAPI.LibAx.image_generator_control(\n StampAPI.lib_ax\n );\n image_generator_control.pause_generate();\n }\n\n resumeGenerate() {\n const image_generator_control = StampAPI.LibAx.image_generator_control(\n StampAPI.lib_ax\n );\n image_generator_control.resume_generate();\n }\n\n endGenerate() {\n const image_generator_control = StampAPI.LibAx.image_generator_control(\n StampAPI.lib_ax\n );\n const stamp_frame = StampAPI.LibAx.stamp_frame(StampAPI.lib_ax);\n image_generator_control.end_generate();\n stamp_frame.OnDownloadFinished = undefined;\n }\n //#endregion\n\n //#region 全景720截图\n beginCapture(params: any) {\n const panorama_720_shot_interface =\n StampAPI.LibAx.panorama_720_shot_interface(StampAPI.lib_ax);\n const stamp_frame = StampAPI.LibAx.stamp_frame(StampAPI.lib_ax);\n\n let g_current_index = 0;\n\n const g_panorama_params = [\n {\n imageName: params.guid + \"_top.jpg\",\n heading: 0.0,\n pitch: -90.0,\n },\n {\n imageName: params.guid + \"_left.jpg\",\n heading: 270.0,\n pitch: 0.0,\n },\n {\n imageName: params.guid + \"_front.jpg\",\n heading: 0.0,\n pitch: 0.0,\n },\n {\n imageName: params.guid + \"_right.jpg\",\n heading: 90.0,\n pitch: 0.0,\n },\n {\n imageName: params.guid + \"_back.jpg\",\n heading: 180.0,\n pitch: 0.0,\n },\n {\n imageName: params.guid + \"_bottom.jpg\",\n heading: 0,\n pitch: 90.0,\n },\n ] as any[];\n\n stamp_frame.OnDownloadFinished = function (data: any) {\n if (1 == data.Status) {\n //1:超时,0:正常加载完成,可以获取图片\n panorama_720_shot_interface.set_rotation(\n g_panorama_params[g_current_index]\n );\n } else {\n panorama_720_shot_interface.capture_frame();\n }\n };\n panorama_720_shot_interface.OnCaptureFinished = function (data: any) {\n const blob = new Blob([data], { type: \"image/jpeg\" });\n const url = URL.createObjectURL(blob);\n\n g_panorama_params[g_current_index].image = url;\n ++g_current_index;\n if (g_current_index >= g_panorama_params.length) {\n panorama_720_shot_interface.end_capture();\n return;\n }\n\n panorama_720_shot_interface.set_rotation(\n g_panorama_params[g_current_index]\n );\n };\n panorama_720_shot_interface.OnBeginCaptureFinished = function (data: any) {\n panorama_720_shot_interface.set_rotation(\n g_panorama_params[g_current_index]\n ); //触发OnDownloadFinished\n };\n panorama_720_shot_interface.OnEndCaptureFinished = function () {\n for (let i = 0, len = g_panorama_params.length; i < len; ++i) {\n (function (index) {\n const link = document.createElement(\"a\");\n\n link.setAttribute(\"download\", g_panorama_params[index].imageName);\n link.setAttribute(\"href\", g_panorama_params[index].image);\n link.click();\n\n setTimeout(function () {\n window.URL.revokeObjectURL(g_panorama_params[index].image);\n }, 100);\n })(i);\n }\n };\n\n panorama_720_shot_interface.begin_capture(params);\n }\n //#endregion\n})();\n\nexport default StampUtil;\n","/**\n * 动态脚本加载器\n *\n * 核心能力:在运行时通过创建 <script> 标签的方式加载外部 JS 文件,\n * 并返回 Promise,支持同 URL 去重(不会重复加载同一脚本)。\n *\n * 这是封装私有地图 SDK 的关键 —— 因为 playerControl.js / pixelstreaming.js\n * 这类脚本在 window 上注册全局变量(StampAPI、StampPixelStreaming),\n * 无法通过 ES module import 引入。\n */\n\n/** 已加载脚本的缓存,key 为 URL,value 为加载 Promise */\nconst scriptCache = new Map<string, Promise<void>>();\n\n/**\n * 动态加载一个 JS 脚本\n *\n * @param url 脚本的 URL 地址\n * @returns Promise,resolve 表示加载完成,reject 表示加载失败\n */\nexport function loadScript(url: string): Promise<void> {\n const cached = scriptCache.get(url);\n if (cached) {\n return cached;\n }\n\n const promise = new Promise<void>((resolve, reject) => {\n const script = document.createElement('script');\n script.type = 'text/javascript';\n script.async = true;\n script.src = url;\n\n script.onload = () => resolve();\n script.onerror = () => {\n scriptCache.delete(url);\n reject(new Error(`[@stampgis/webrtc] 脚本加载失败: ${url}`));\n };\n\n const target =\n document.head || document.getElementsByTagName('head')[0] || document.body;\n target.appendChild(script);\n });\n\n scriptCache.set(url, promise);\n return promise;\n}\n\n/**\n * 等待全局变量就绪\n *\n * 脚本加载完成后,全局对象可能需要异步初始化。\n * 此函数轮询检查全局变量是否已挂载到 window 上。\n *\n * @param globalName 全局变量名\n * @param timeout 超时时间(毫秒),默认 10 秒\n * @param interval 轮询间隔(毫秒),默认 50 毫秒\n */\nexport function waitForGlobal(\n globalName: string,\n timeout = 10000,\n interval = 50,\n): Promise<unknown> {\n return new Promise((resolve, reject) => {\n const start = Date.now();\n\n function check() {\n const value = (window as unknown as Record<string, unknown>)[globalName];\n if (value !== undefined && value !== null) {\n resolve(value);\n return;\n }\n\n if (Date.now() - start >= timeout) {\n reject(\n new Error(\n `[@stampgis/webrtc] 等待全局变量 \"${globalName}\" 超时(${timeout}ms)`,\n ),\n );\n return;\n }\n\n setTimeout(check, interval);\n }\n\n check();\n });\n}\n","/**\n * @stampgis/webrtc 主入口\n *\n * 本包封装 StampGIS 私有地图 SDK,提供两个核心能力:\n *\n * 1. loadCore() —— 动态加载三个运行时脚本(config / pixelstreaming / playerControl)\n * 三个脚本已内置在包的 assets/ 目录,也可指向外部 CDN\n *\n * 2. StampUtil —— 接口封装库(从 StampUtil.ts 编译),直接 import 使用\n * 内部依赖 window.StampAPI 全局变量,需先调用 loadCore()\n *\n * 三种加载方式:\n * // 方式一:从包内 assets 加载(需打包器配合,推荐 Vite)\n * await loadCore({ useBundledAssets: true })\n *\n * // 方式二:从服务器/CDN 加载\n * await loadCore({ baseUrl: '/gis/' })\n *\n * // 方式三:精确指定每个脚本 URL\n * await loadCore({ configUrl: '...', pixelstreamingUrl: '...', playerControlUrl: '...' })\n */\n\nimport StampUtil from './StampUtil';\nimport { loadScript, waitForGlobal } from './loader';\nimport type { CoreLoadOptions, InitVideoPlayerOptions } from './types';\n\n// ============ 默认脚本路径 ============\n\n/**\n * 默认脚本相对路径(相对于 baseUrl 或包内 assets 目录)\n *\n * 对应项目中的目录结构:\n * config/stamp_core_config.js\n * core/pixelstreaming.js\n * core/playerControl.js\n */\nconst SCRIPT_PATHS = {\n config: 'config/stamp_core_config.js',\n pixelstreaming: 'core/pixelstreaming.js',\n playerControl: 'core/playerControl.js',\n} as const;\n\n// ============ 包内 assets 路径 ============\n\n/**\n * 包内 assets 脚本的导入路径\n *\n * 使用方需要通过打包器(Vite/Webpack)将这些路径解析为最终 URL。\n * Vite 默认支持,Webpack 需要 file-loader 或 asset/resource 配置。\n *\n * 示例(Vite):\n * import configUrl from '@stampgis/webrtc/assets/config/stamp_core_config.js'\n * // configUrl = '/node_modules/.vite/deps/assets/config/stamp_core_config.js'\n *\n * 示例(Webpack 5):\n * // vue.config.js 中配置:\n * // module: { rules: [{ test: /@stampgis\\/webrtc.*\\.js$/, type: 'asset/resource' }] }\n */\nconst ASSET_IMPORTS = {\n config: '@stampgis/webrtc/assets/config/stamp_core_config.js',\n pixelstreaming: '@stampgis/webrtc/assets/core/pixelstreaming.js',\n playerControl: '@stampgis/webrtc/assets/core/playerControl.js',\n} as const;\n\n// ============ 加载状态 ============\n\nlet coreLoaded = false;\n\n// ============ resolveBundledAssets ============\n\n/**\n * 解析包内 assets 的运行时 URL\n *\n * 使用 `new URL(path, import.meta.url)` 方式获取模块文件的实际 URL。\n * 这是 Vite / Webpack 5+ 推荐的静态资源引用方式。\n *\n * @param path 相对于包根目录的资源路径\n * @returns 运行时可访问的 URL 字符串\n */\nfunction resolveBundledAsset(path: string): string {\n try {\n // Vite 和 Webpack 5+ 都支持 new URL + import.meta.url 模式\n // https://vitejs.dev/guide/assets.html#new-url-url-import-meta-url\n const url = new URL(`../assets/${path}`, import.meta.url);\n return url.href;\n } catch {\n // 如果打包器不支持 import.meta.url,回退到路径拼接\n // 使用方需确保 assets 目录被复制到可访问的位置\n return `./assets/${path}`;\n }\n}\n\n// ============ loadCore ============\n\n/**\n * 动态加载三个核心脚本\n *\n * 加载顺序(严格按序,因为存在依赖):\n * 1. stamp_core_config.js → 注册 window.stamp_core_config\n * 2. pixelstreaming.js → 注册 window.StampPixelStreaming\n * 3. playerControl.js → 注册 window.StampAPI(依赖前两个脚本)\n *\n * 加载完成后,如果传入了 serverIp,会覆盖 stamp_core_config 中的服务器地址。\n *\n * @param options 加载配置\n *\n * @example\n * ```ts\n * // 方式一:从包内 assets 加载(Vite 推荐,无需手动复制文件)\n * await loadCore({ useBundledAssets: true });\n *\n * // 方式二:从服务器/CDN 加载\n * await loadCore({ baseUrl: '/gis/' });\n *\n * // 方式三:精确指定每个脚本 URL\n * await loadCore({\n * configUrl: 'https://cdn.example.com/config/stamp_core_config.js',\n * pixelstreamingUrl: 'https://cdn.example.com/core/pixelstreaming.js',\n * playerControlUrl: 'https://cdn.example.com/core/playerControl.js',\n * serverIp: '192.168.1.100',\n * });\n *\n * // 方式四:通过打包器 import 获取 URL(最大灵活性)\n * import configUrl from '@stampgis/webrtc/assets/config/stamp_core_config.js'\n * import pixelstreamingUrl from '@stampgis/webrtc/assets/core/pixelstreaming.js'\n * import playerControlUrl from '@stampgis/webrtc/assets/core/playerControl.js'\n * await loadCore({ configUrl, pixelstreamingUrl, playerControlUrl });\n * ```\n */\nexport async function loadCore(options: CoreLoadOptions = {}): Promise<void> {\n if (coreLoaded) return;\n\n const {\n baseUrl = '',\n configUrl,\n pixelstreamingUrl,\n playerControlUrl,\n serverIp,\n timeout = 30000,\n useBundledAssets = false,\n } = options;\n\n // 解析脚本 URL —— 优先级:显式 URL > useBundledAssets > baseUrl 拼接\n let configSrc: string;\n let pixelstreamingSrc: string;\n let playerControlSrc: string;\n\n if (configUrl && pixelstreamingUrl && playerControlUrl) {\n // 方式三/四:显式指定 URL\n configSrc = configUrl;\n pixelstreamingSrc = pixelstreamingUrl;\n playerControlSrc = playerControlUrl;\n } else if (useBundledAssets) {\n // 方式一:从包内 assets 加载\n configSrc = resolveBundledAsset(SCRIPT_PATHS.config);\n pixelstreamingSrc = resolveBundledAsset(SCRIPT_PATHS.pixelstreaming);\n playerControlSrc = resolveBundledAsset(SCRIPT_PATHS.playerControl);\n } else {\n // 方式二:baseUrl 拼接\n configSrc = baseUrl + SCRIPT_PATHS.config;\n pixelstreamingSrc = baseUrl + SCRIPT_PATHS.pixelstreaming;\n playerControlSrc = baseUrl + SCRIPT_PATHS.playerControl;\n }\n\n if (!configSrc || !pixelstreamingSrc || !playerControlSrc) {\n throw new Error(\n '[@stampgis/webrtc] 未配置脚本加载方式。\\n' +\n '请选择以下方式之一:\\n' +\n ' 1. loadCore({ useBundledAssets: true }) —— 从包内 assets 加载\\n' +\n ' 2. loadCore({ baseUrl: \"/gis/\" }) —— 从服务器加载\\n' +\n ' 3. loadCore({ configUrl, pixelstreamingUrl, playerControlUrl }) —— 精确 URL\\n',\n );\n }\n\n // 按顺序加载(playerControl 依赖 pixelstreaming 和 config)\n await loadScript(configSrc);\n await waitForGlobal('stamp_core_config', timeout);\n\n await loadScript(pixelstreamingSrc);\n await waitForGlobal('StampPixelStreaming', timeout);\n\n await loadScript(playerControlSrc);\n await waitForGlobal('StampAPI', timeout);\n\n // 覆盖服务器 IP 配置\n if (serverIp && window.stamp_core_config) {\n const httpOrHttps = window.location.protocol;\n const cfg = window.stamp_core_config;\n cfg.service_ip = `${httpOrHttps}//${serverIp}`;\n cfg.soService_ip = `${httpOrHttps}//${serverIp}`;\n cfg.gb28181ApacheUrl = `http://${serverIp}:8082`;\n }\n\n coreLoaded = true;\n}\n\n// ============ initVideoPlayer ============\n\n/**\n * 初始化视频播放器(地球渲染)\n *\n * 对应原项目中 Earth.vue 的调用:\n * StampAPI.initVideoPlayer({ earthDomElement, errorDomElement, iIndex })\n *\n * 必须在 loadCore() 之后调用。\n *\n * @param options 初始化参数\n *\n * @example\n * ```ts\n * await loadCore({ useBundledAssets: true });\n *\n * const earthDiv = document.getElementById('earth')!;\n * const errorDiv = document.getElementById('error')!;\n * initVideoPlayer({ earthDomElement: earthDiv, errorDomElement: errorDiv });\n * ```\n */\nexport function initVideoPlayer(options: InitVideoPlayerOptions): void {\n if (!window.StampAPI) {\n throw new Error('[@stampgis/webrtc] StampAPI 未就绪,请先调用 loadCore()');\n }\n\n if (!options.earthDomElement) {\n throw new Error('[@stampgis/webrtc] earthDomElement 是必填参数');\n }\n\n window.StampAPI.initVideoPlayer({\n earthDomElement: options.earthDomElement,\n errorDomElement: options.errorDomElement,\n iIndex: options.iIndex ?? 0,\n showTips: options.showTips ?? true,\n });\n}\n\n// ============ 导出 ============\n\n/**\n * StampUtil 接口库(默认导出)\n *\n * 包含数百个地图操作方法:量算、图层管理、标注、分析等。\n * 使用前需确保已调用 loadCore()。\n *\n * @example\n * ```ts\n * import StampUtil, { loadCore } from '@stampgis/webrtc';\n *\n * await loadCore({ useBundledAssets: true });\n * const result = await StampUtil.measureHorizontalDist(16, 0xffffffff);\n * ```\n */\nexport default StampUtil;\n\n// 命名导出\nexport { StampUtil };\n\n// 工具函数\nexport { loadScript, waitForGlobal } from './loader';\n\n// 类型导出\nexport type { CoreLoadOptions, InitVideoPlayerOptions, StampCoreConfig } from './types';\nexport { STAMP_RTTI } from './StampRtti';\n\n// 包内 assets 路径常量(供使用方 import 方式使用)\nexport const ASSET_PATHS = ASSET_IMPORTS;\n"],"mappings":"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","names":["STAMP_RTTI","data","index","param","handler","points","res"]}