2.7.4 网页气泡弹窗
网页气泡弹窗
网页气泡弹窗是指在场景上弹出网页页面进行展示的功能。支持静态弹窗和动态弹窗两种弹窗功能。
网页气泡弹窗形成的子页面与主场景可以实现交互功能。两者之间的交互实现方式如下:
1.子窗口与主场景交互。 子窗口可以调用 window.external.PushData()
方法向主场景发送消息,该方法的参数为字符串类型。主场景接收到消息之后,会通过回调将消息发送回来。
2.主场景与子窗口交互。 前端应用程序在创建弹窗之后,可以调用对象的更新操作将参数传递给子窗口。更新时,需要设置FunctionName
和FunctionParam
参数发送消息。
下图是网页弹窗效果:
1.动态弹窗
动态弹窗是指弹窗的窗口会跟随场景移动。动态弹窗会生成一个指示箭头,该箭头会一直指向场景中某个坐标位置;当场景拖动时,该位置会跟随场景移动,动态弹窗也会跟随移动。
动态弹窗是通过更新机制实现的,可以在场景内创建多个动态弹窗窗口。
参数说明
动态弹窗可配置的参数如下表所示:
配置项 | 配置说明 | 值类型 | 备注 |
---|---|---|---|
Longitude | 经度坐标 | double | 目标位置的经度坐标 |
Latitude | 纬度坐标 | double | 目标位置的纬度坐标 |
PosHeight | 高程坐标 | double | 目标位置的高程坐标 |
ShowDistance | 最大显示高度 | double | 气泡在高度方向与相机位置最远可见距离。默认:0.0 |
Width | 窗口宽度 | double | 气泡窗口的宽度。默认:0.0 |
Height | 窗口高度 | double | 气泡窗口的高度。默认:0.0 |
Radial | 圆角直径 | double | 气泡窗口四个角的圆角直径。默认:0.0 |
ArrowSize | 箭头大小 | double | 指示目标位置的三角箭头大小。默认:0.0 |
IsShow | 是否可见 | bool | 窗口是否可见。默认true |
IsOverShow | 超出是否可见 | bool | 当目标超出屏幕范围是否显示,默认显示 |
BKColor | 箭头背景颜色 | R,G,B,A | 颜色取值范围在0-255.0之间,如 "255,0,0,255" |
MoveDelay | 更新帧率 | int | 气泡窗口位置的更新帧率。默认:1, 代表每帧都更新 |
Url | 页面访问路径 | string | 窗口子页面访问路径。可以是本地绝对路径,也可以是网络路径 |
CloseButtonUrl | 关闭图片路径 | string | 关闭按钮图片路径,必须是本地绝对路径 |
CloseButtonState | 是否显示关闭按钮 | bool | true显示,false不显示。默认不显示 |
CloseBtnPosX | 关闭按钮x坐标 | double | 关闭按钮位于子窗口x方向坐标。默认:0.0 |
CloseBtnPosY | 关闭按钮y坐标 | double | 关闭按钮位于子窗口y方向坐标。默认:0.0 |
CloseBtnPosW | 关闭按钮宽度 | double | 关闭按钮的宽度。默认:0.0 |
CloseBtnPosH | 关闭按钮高度 | double | 关闭按钮的高度。默认:0.0 |
FunctionName | 交互函数名 | string | 主窗口调用子窗口函数名称 |
FunctionParam | 交互参数 | string | 主窗口调用子窗口函数时传递的参数 |
代码调用示例
Javascript调用
//tool回调实现函数
function callBackFunTools(toolsID, notifyType) {
//动态弹窗1
if (multiDynamicPop1 && toolsID == multiDynamicPop1.GetToolsID()) {
var param = multiDynamicPop1.GetToolsResult().GetConfigValueByKey("Param");
if (param == "123") {
alert("动态弹窗动态框:123");
}
if (param == "456") {
alert("关闭弹窗:456");
removeMultiDynamicPop(1);
}
if (param == "Close") {
alert("准备关闭窗口");
removeMultiDynamicPop(1);
}
}
//动态弹窗2
if (multiDynamicPop2 && toolsID == multiDynamicPop2.GetToolsID()) {
var param = multiDynamicPop2.GetToolsResult().GetConfigValueByKey("Param");
if (param == "123") {
alert("动态弹窗动态框1:123");
}
if (param == "456") {
alert("动态弹窗动态框1:456");
}
if (param == "Close") {
alert("准备关闭窗口");
removeMultiDynamicPop(2);
}
}
}
var tools = obj.GetIToolsCOMPtr();//使用对象前,务必初始化
var operaEvent = addEvent(obj, "FireOnToolsNotify", callBackFunTools);//添加回调
var multiDynamicPop1 = null;
var multiDynamicPop2 = null;
var gPrjIndexPath = "E:/SDK应用级示例/CooGisSDKDemoApplication-V6.1/data";
var dataPath = gPrjImagesFolderPath + "/close.bmp";//关闭按钮图片路径
//创建动态弹窗
function createMultiDynamicPop() {
if (multiDynamicPop1 == null) {
var pOption = tools.CreateToolsOptions("dynamicPop");;//创建工具类配置项
pOption.AddConfig("Longitude", "120.219458309298");//指向经纬度坐标经度,示例配置成杭州地区的经纬度
pOption.AddConfig("Latitude", "30.211521625606");//指向经纬度坐标维度,示例配置成杭州地区的经纬度
pOption.AddConfig("PosHeight", "90.451804557815");//指向经纬度坐标高度
pOption.AddConfig("ShowDistance", "2000000");//最大显示垂直距离
pOption.AddConfig("Width", "300");//窗口宽度
pOption.AddConfig("Height", "280");//窗口高度
pOption.AddConfig("ArrowSize", "3");//箭头大小
pOption.AddConfig("Radial", "2");//圆角直径
pOption.AddConfig("Url", gPrjIndexPath + "/pages/pop.htm");//指向网页url
pOption.AddConfig("MoveDelay", "10");//坐标更新频率,例如1表示每10ms更新一次,60表示每10ms*60更新一次
pOption.AddConfig("IsShow", "true");//是否可见,默认可见
pOption.AddConfig("CloseButtonState", "true");//是否显示关闭按钮
pOption.AddConfig("CloseButtonUrl", dataPath);//关闭按钮图片路径
pOption.AddConfig("CloseBtnPosX", "180"); //关闭按钮所在窗口x位置
pOption.AddConfig("CloseBtnPosY", "10"); //关闭按钮所在窗口y位置
pOption.AddConfig("CloseBtnPosW", "20"); //关闭按钮宽度
pOption.AddConfig("CloseBtnPosH", "20"); //关闭按钮高度
pOption.AddConfig("BKColor", "65,177,255,200");//箭头背景颜色
pOption.AddConfig("IsOverShow", "false");//当目标超出屏幕是否显示,默认显示
multiDynamicPop1 = tools.CreateToolsObject("DynamicWindowTool", pOption);//创建工具类型。DynamicWindowTool代表动态弹窗
multiDynamicPop1.Active();//激活工具类
multiDynamicPop1.AddObserver();
}
if (multiDynamicPop2 == null) {
var pOption = tools.CreateToolsOptions("dynamicPop");;//创建工具类配置项
pOption.AddConfig("OptionsTypeName", "DynamicPopWindowOptions");
pOption.AddConfig("Longitude", "120.218832919919");//指向经纬度坐标经度,示例配置成杭州地区的经纬度
pOption.AddConfig("Latitude", "30.210110643972");//指向经纬度坐标维度,示例配置成杭州地区的经纬度
pOption.AddConfig("PosHeight", "25.849885681644");//指向经纬度坐标高度
pOption.AddConfig("ShowDistance", "2000000");//最大显示垂直距离
pOption.AddConfig("Width", "80");//窗口宽度
pOption.AddConfig("Height", "80");//窗口高度
pOption.AddConfig("ArrowSize", "3");//箭头大小
pOption.AddConfig("Radial", "0");//圆角直径
pOption.AddConfig("Url", gPrjIndexPath + "/pages/pop1.htm");//指向网页url
pOption.AddConfig("MoveDelay", "1");//坐标更新频率,例如1表示每10ms更新一次,60表示每10ms*60更新一次
pOption.AddConfig("IsShow", "true");//是否可见,默认可见
pOption.AddConfig("CloseButtonState", "false");//是否显示关闭按钮
pOption.AddConfig("CloseButtonUrl", dataPath);//关闭按钮图片路径
pOption.AddConfig("BKColor", "65,177,255,200");//箭头背景颜色
pOption.AddConfig("IsOverShow", "false");//当目标超出屏幕是否显示,默认显示
multiDynamicPop2 = tools.CreateToolsObject("DynamicWindowTool", pOption);//创建工具类型。DynamicWindowTool代表动态弹窗
multiDynamicPop2.Active();//激活工具类
multiDynamicPop2.AddObserver();
}
}
//更新动态弹窗
function updateMultiDynamicPop() {
if (multiDynamicPop1) {
var pOption = tools.CreateToolsOptions("dynamicPop");;//创建工具类配置项
pOption.AddConfig("Width", "100");//窗口宽度
pOption.AddConfig("Height", "80");//窗口高度
pOption.AddConfig("MoveDelay", "1");//坐标更新频率,例如1表示每10ms更新一次,60表示每10ms*60更新一次
multiDynamicPop1.UpdateToolsOptions(pOption);//更新接口
}
if (multiDynamicPop2) {
var pOption = tools.CreateToolsOptions("dynamicPop");;//创建工具类配置项
pOption.AddConfig("Width", "80");//窗口宽度
pOption.AddConfig("Height", "100");//窗口高度
pOption.AddConfig("FunctionName", "Test");//交互函数
pOption.AddConfig("FunctionParam", "320");//交互参数
multiDynamicPop2.UpdateToolsOptions(pOption);//更新接口
}
}
var bShow = true;
//显隐动态弹窗
function visibleMultiDynamicPop() {
bShow = !bShow;
var bShowStr = "";
if (bShow) {
bShowStr = "true";
} else {
bShowStr = "false";
}
if (multiDynamicPop1) {
var pOption = tools.CreateToolsOptions("dynamicPop");;//创建工具类配置项
pOption.AddConfig("IsShow", bShowStr);
multiDynamicPop1.UpdateToolsOptions(pOption);//更新接口
}
if (multiDynamicPop2) {
var pOption = tools.CreateToolsOptions("dynamicPop");;//创建工具类配置项
pOption.AddConfig("IsShow", bShowStr);
multiDynamicPop2.UpdateToolsOptions(pOption);//更新接口
}
}
//移除动态弹窗
function removeMultiDynamicPop(type) {
if (multiDynamicPop1 && (type == 1 || type == 0)) {
tools.DestoryTools(multiDynamicPop1);//移除工具对象
multiDynamicPop1 = null;
}
if (multiDynamicPop2 && (type == 2 || type == 0)) {
tools.DestoryTools(multiDynamicPop2);//移除工具对象
multiDynamicPop2 = null;
}
}
C++调用
ToolsCOMLib::IToolsManagerPtr tools;//工具类对象
BaseObjectCOMLib::IToolsObjectPtr multiDynamicPop1;//动态弹窗对象1
BaseObjectCOMLib::IToolsObjectPtr multiDynamicPop2;//动态弹窗对象2
CString strPath = "E:/SDK应用级示例/CooGisSDKDemoApplication-V6.1/data";
std::string IconFolderPath = "E:/SDK应用级示例/CooGisSDKDemoApplication-V6.1/data";
bool state;//显隐控制开关
//创建网页动态气泡
void Cf6c3TipsDialogDlg::OnBnClickedcreatedynamicpop()
{
if (multiDynamicPop1 == NULL) {
ConfigOptionsCOMLib::IToolsOptionsPtr pOption = tools->CreateToolsOptions("dynamicPop");;//创建工具类配置项
pOption->AddConfig("Longitude", "120.219458309298");//指向经纬度坐标经度,示例配置成杭州地区的经纬度
pOption->AddConfig("Latitude", "30.211521625606");//指向经纬度坐标维度,示例配置成杭州地区的经纬度
pOption->AddConfig("PosHeight", "90.451804557815");//指向经纬度坐标高度
pOption->AddConfig("ShowDistance", "2000000");//最大显示垂直距离
pOption->AddConfig("Width", "300");//窗口宽度
pOption->AddConfig("Height", "280");//窗口高度
pOption->AddConfig("ArrowSize", "3");//箭头大小
pOption->AddConfig("Radial", "2");//圆角直径
pOption->AddConfig("Url", strPath + "pop.htm");//指向网页url
pOption->AddConfig("MoveDelay", "10");//坐标更新频率,例如1表示每10ms更新一次,60表示每10ms*60更新一次
pOption->AddConfig("IsShow", "true");//是否可见,默认可见
pOption->AddConfig("CloseButtonState", "true");//是否显示关闭按钮
pOption->AddConfig("CloseButtonUrl", (IconFolderPath+"\close.bmp").c_str());//关闭按钮图片路径
pOption->AddConfig("CloseBtnPosX", "180"); //关闭按钮所在窗口x位置
pOption->AddConfig("CloseBtnPosY", "10"); //关闭按钮所在窗口y位置
pOption->AddConfig("CloseBtnPosW", "20"); //关闭按钮宽度
pOption->AddConfig("CloseBtnPosH", "20"); //关闭按钮高度
pOption->AddConfig("BKColor", "65,177,255,200");//箭头背景颜色
pOption->AddConfig("FunctionName", "Test");//函数名
pOption->AddConfig("FunctionParam", "20");//函数参数
pOption->AddConfig("IsOverShow", "false");//当目标超出屏幕是否显示,默认显示
multiDynamicPop1 = tools->CreateToolsObject("DynamicWindowTool", pOption);//创建工具类型。DynamicWindowTool代表动态弹窗
multiDynamicPop1->Active();//激活工具类
multiDynamicPop1->AddObserver();
}
if (multiDynamicPop2 == NULL) {
ConfigOptionsCOMLib::IToolsOptionsPtr pOption = tools->CreateToolsOptions("dynamicPop");;//创建工具类配置项
pOption->AddConfig("OptionsTypeName", "DynamicPopWindowOptions");
pOption->AddConfig("Longitude", "120.218832919919");//指向经纬度坐标经度,示例配置成杭州地区的经纬度
pOption->AddConfig("Latitude", "30.210110643972");//指向经纬度坐标维度,示例配置成杭州地区的经纬度
pOption->AddConfig("PosHeight", "25.849885681644");//指向经纬度坐标高度
pOption->AddConfig("ShowDistance", "2000000");//最大显示垂直距离
pOption->AddConfig("Width", "80");//窗口宽度
pOption->AddConfig("Height", "80");//窗口高度
pOption->AddConfig("ArrowSize", "3");//箭头大小
pOption->AddConfig("Radial", "0");//圆角直径
pOption->AddConfig("Url", strPath + "pop1.htm");//指向网页url
pOption->AddConfig("MoveDelay", "1");//坐标更新频率,例如1表示每10ms更新一次,60表示每10ms*60更新一次
pOption->AddConfig("IsShow", "true");//是否可见,默认可见
pOption->AddConfig("CloseButtonState", "false");//是否显示关闭按钮
pOption->AddConfig("CloseButtonUrl", (IconFolderPath+"\close.bmp").c_str());//关闭按钮图片路径
pOption->AddConfig("BKColor", "65,177,255,200");//箭头背景颜色
pOption->AddConfig("FunctionName", "Test");//函数名
pOption->AddConfig("FunctionParam", "20");//函数参数
pOption->AddConfig("IsOverShow", "false");//当目标超出屏幕是否显示,默认显示
multiDynamicPop2 = tools->CreateToolsObject("DynamicWindowTool", pOption);//创建工具类型。DynamicWindowTool代表动态弹窗
multiDynamicPop2->Active();//激活工具类
multiDynamicPop2->AddObserver();
}
}
//更新网页动态气泡
void Cf6c3TipsDialogDlg::OnBnClickedupdatedynamicpop()
{
if (multiDynamicPop1) {
ConfigOptionsCOMLib::IToolsOptionsPtr pOption = tools->CreateToolsOptions("dynamicPop");;//创建工具类配置项
pOption->AddConfig("Width", "100");//窗口宽度
pOption->AddConfig("Height", "80");//窗口高度
pOption->AddConfig("MoveDelay", "1");//坐标更新频率,例如1表示每10ms更新一次,60表示每10ms*60更新一次
multiDynamicPop1->UpdateToolsOptions(pOption);//更新接口
}
if (multiDynamicPop2) {
ConfigOptionsCOMLib::IToolsOptionsPtr pOption = tools->CreateToolsOptions("dynamicPop");;//创建工具类配置项
pOption->AddConfig("Width", "80");//窗口宽度
pOption->AddConfig("Height", "100");//窗口高度
pOption->AddConfig("FunctionName", "Test");//交互函数
pOption->AddConfig("FunctionParam", "320");//交互参数
multiDynamicPop2->UpdateToolsOptions(pOption);//更新接口
}
}
void Cf6c3TipsDialogDlg::OnBnClickedvisiblemultidynamicpop()
{
bShow = !bShow;
std::string bShowStr = "";
if (bShow) {
bShowStr = "true";
} else {
bShowStr = "false";
}
if (multiDynamicPop1) {
ConfigOptionsCOMLib::IToolsOptionsPtr pOption = tools->CreateToolsOptions("dynamicPop");;//创建工具类配置项
pOption->AddConfig("IsShow", bShowStr.c_str());//设置显隐状态
multiDynamicPop1->UpdateToolsOptions(pOption);//更新接口
}
if (multiDynamicPop2) {
ConfigOptionsCOMLib::IToolsOptionsPtr pOption = tools->CreateToolsOptions("dynamicPop");;//创建工具类配置项
pOption->AddConfig("IsShow", bShowStr.c_str());
multiDynamicPop2->UpdateToolsOptions(pOption);//更新接口
}
}
//删除网页动态气泡
void Cf6c3TipsDialogDlg::OnBnClickedremovedynamicpop()
{
removeMultiDynamicPop(0);
}
void Cf6c3TipsDialogDlg::removeMultiDynamicPop(int type)
{
if (multiDynamicPop1 && (type == 1 || type == 0)) {
tools->DestoryTools(multiDynamicPop1);//移除工具对象
multiDynamicPop1 = NULL;
}
if (multiDynamicPop2 && (type == 2 || type == 0)) {
tools->DestoryTools(multiDynamicPop2);//移除工具对象
multiDynamicPop2 = NULL;
}
}
//回调
void Cf6c3TipsDialogDlg::FireOnToolsNotifyVpsdkctrl1(long ToolsID, long notifyType)
{
//动态弹窗1
if (multiDynamicPop1 && ToolsID == multiDynamicPop1->GetToolsID()) {
ConfigOptionsCOMLib::IToolsOptionsPtr opt = multiDynamicPop1->GetToolsResult();
std::string param = opt->GetConfigValueByKey("Param");
if (param == "123") {
MessageBox(L"动态弹窗动态框:123");
}
if (param == "456") {
MessageBox(L"关闭弹窗:456");
removeMultiDynamicPop(1);
}
if (param == "Close") {
MessageBox(L"准备关闭窗口");
removeMultiDynamicPop(1);
}
}
//动态弹窗2
if (multiDynamicPop2 && ToolsID == multiDynamicPop2->GetToolsID()) {
ConfigOptionsCOMLib::IToolsOptionsPtr opt = multiDynamicPop2->GetToolsResult();
std::string param = opt->GetConfigValueByKey("Param");
if (param == "123") {
MessageBox(L"动态弹窗动态框1:123");
}
if (param == "456") {
MessageBox(L"动态弹窗动态框1:456");
}
if (param == "Close") {
MessageBox(L"准备关闭窗口");
removeMultiDynamicPop(2);
}
}
}
C#调用
string gPagesPath ="E:/data/LocalData/html/pop.htm";
string gIconFolderPath = "E:/data/LocalData/Other/images";
var dataPath = gPrjImagesFolderPath + "/close.bmp";//关闭按钮图片路径
bool state;//显隐控制开关
IToolsObject multiDynamicPop1;//动态弹窗对象1
IToolsObject multiDynamicPop2;//动态弹窗对象2
//创建网页动态气泡
private void createDynamicPop_Click(object sender, EventArgs e)
{
if (multiDynamicPop1 == null)
{
var pOption = tools.CreateToolsOptions("dynamicPop"); ;//创建工具类配置项
pOption.AddConfig("Longitude", "120.219458309298");//指向经纬度坐标经度,示例配置成杭州地区的经纬度
pOption.AddConfig("Latitude", "30.211521625606");//指向经纬度坐标维度,示例配置成杭州地区的经纬度
pOption.AddConfig("PosHeight", "90.451804557815");//指向经纬度坐标高度
pOption.AddConfig("ShowDistance", "2000000");//最大显示垂直距离
pOption.AddConfig("Width", "300");//窗口宽度
pOption.AddConfig("Height", "280");//窗口高度
pOption.AddConfig("ArrowSize", "3");//箭头大小
pOption.AddConfig("Radial", "2");//圆角直径
pOption.AddConfig("Url", path + "/pop.htm");//指向网页url
pOption.AddConfig("MoveDelay", "10");//坐标更新频率,例如1表示每10ms更新一次,60表示每10ms*60更新一次
pOption.AddConfig("IsShow", "true");//是否可见,默认可见
pOption.AddConfig("CloseButtonState", "true");//是否显示关闭按钮
pOption.AddConfig("CloseButtonUrl", gIconFolderPath + "\\close.bmp");//关闭按钮图片路径
pOption.AddConfig("CloseBtnPosX", "180"); //关闭按钮所在窗口x位置
pOption.AddConfig("CloseBtnPosY", "10"); //关闭按钮所在窗口y位置
pOption.AddConfig("CloseBtnPosW", "20"); //关闭按钮宽度
pOption.AddConfig("CloseBtnPosH", "20"); //关闭按钮高度
pOption.AddConfig("BKColor", "65,177,255,200");//箭头背景颜色
pOption.AddConfig("FunctionName", "Test");//函数名
pOption.AddConfig("FunctionParam", "20");//函数参数
pOption.AddConfig("IsOverShow", "false");//当目标超出屏幕是否显示,默认显示
multiDynamicPop1 = tools.CreateToolsObject("DynamicWindowTool", pOption);//创建工具类型。DynamicWindowTool代表动态弹窗
multiDynamicPop1.Active();//激活工具类
multiDynamicPop1.AddObserver();
}
if (multiDynamicPop2 == null)
{
var pOption = tools.CreateToolsOptions("dynamicPop"); ;//创建工具类配置项
pOption.AddConfig("OptionsTypeName", "DynamicPopWindowOptions");
pOption.AddConfig("Longitude", "120.218832919919");//指向经纬度坐标经度,示例配置成杭州地区的经纬度
pOption.AddConfig("Latitude", "30.210110643972");//指向经纬度坐标维度,示例配置成杭州地区的经纬度
pOption.AddConfig("PosHeight", "25.849885681644");//指向经纬度坐标高度
pOption.AddConfig("ShowDistance", "2000000");//最大显示垂直距离
pOption.AddConfig("Width", "80");//窗口宽度
pOption.AddConfig("Height", "80");//窗口高度
pOption.AddConfig("ArrowSize", "3");//箭头大小
pOption.AddConfig("Radial", "0");//圆角直径
pOption.AddConfig("Url", path + "/pop1.htm");//指向网页url
pOption.AddConfig("MoveDelay", "1");//坐标更新频率,例如1表示每10ms更新一次,60表示每10ms*60更新一次
pOption.AddConfig("IsShow", "true");//是否可见,默认可见
pOption.AddConfig("CloseButtonState", "false");//是否显示关闭按钮
pOption.AddConfig("CloseButtonUrl", gIconFolderPath + "\\close.bmp");//关闭按钮图片路径
pOption.AddConfig("BKColor", "65,177,255,200");//箭头背景颜色
pOption.AddConfig("FunctionName", "Test");//函数名
pOption.AddConfig("FunctionParam", "20");//函数参数
pOption.AddConfig("IsOverShow", "false");//当目标超出屏幕是否显示,默认显示
multiDynamicPop2 = tools.CreateToolsObject("DynamicWindowTool", pOption);//创建工具类型。DynamicWindowTool代表动态弹窗
multiDynamicPop2.Active();//激活工具类
multiDynamicPop2.AddObserver();
}
}
//更新网页动态气泡
private void updateDynamicPop_Click(object sender, EventArgs e)
{
if (multiDynamicPop1 != null)
{
var pOption = tools.CreateToolsOptions("dynamicPop"); ;//创建工具类配置项
pOption.AddConfig("Width", "100");//窗口宽度
pOption.AddConfig("Height", "80");//窗口高度
pOption.AddConfig("MoveDelay", "1");//坐标更新频率,例如1表示每10ms更新一次,60表示每10ms*60更新一次
multiDynamicPop1.UpdateToolsOptions(pOption);//更新接口
}
if (multiDynamicPop2 != null)
{
var pOption = tools.CreateToolsOptions("dynamicPop"); ;//创建工具类配置项
pOption.AddConfig("Width", "80");//窗口宽度
pOption.AddConfig("Height", "100");//窗口高度
pOption.AddConfig("FunctionName", "Test");//交互函数
pOption.AddConfig("FunctionParam", "320");//交互参数
multiDynamicPop2.UpdateToolsOptions(pOption);//更新接口
}
}
//显隐动态弹窗
bool bShow = true;
private void visibleMultiDynamicPop_Click(object sender, EventArgs e)
{
bShow = !bShow;
var bShowStr = "";
if (bShow)
{
bShowStr = "true";
}
else
{
bShowStr = "false";
}
if (multiDynamicPop1 != null)
{
var pOption = tools.CreateToolsOptions("dynamicPop");//创建响应器配置项
pOption.AddConfig("IsShow", bShowStr);//配置响应器显隐状态
multiDynamicPop1.UpdateToolsOptions(pOption);//更新相应器操作
}
if (multiDynamicPop2 != null)
{
var pOption = tools.CreateToolsOptions("dynamicPop");//创建响应器配置项
pOption.AddConfig("IsShow", bShowStr);//配置响应器显隐状态
multiDynamicPop2.UpdateToolsOptions(pOption);//更新相应器操作
}
}
//删除网页动态气泡
private void removeDynamicPop_Click(object sender, EventArgs e)
{
removemMultiDynamicPop(0);
}
//移除动态弹窗
private void removemMultiDynamicPop(int type)
{
if (multiDynamicPop1 != null && (type == 1 || type == 0))
{
tools.DestoryTools(multiDynamicPop1);//移除工具对象
multiDynamicPop1 = null;
}
if (multiDynamicPop2 != null && (type == 2 || type == 0))
{
tools.DestoryTools(multiDynamicPop2);//移除工具对象
multiDynamicPop2 = null;
}
}
//tool回调实现函数
private void axVPSDKCtrl1_FireOnToolsNotify(object sender, AxSDKCtrlLib._IVPSDKCtrlEvents_FireOnToolsNotifyEvent e)
{
//动态弹窗1
if (multiDynamicPop1 != null && e.toolsID == multiDynamicPop1.GetToolsID())
{
var param = multiDynamicPop1.GetToolsResult().GetConfigValueByKey("Param");
if (param == "123")
{
MessageBox.Show("动态弹窗动态框:123");
}
if (param == "456")
{
MessageBox.Show("关闭弹窗:456");
removemMultiDynamicPop(1);
}
if (param == "Close")
{
MessageBox.Show("准备关闭窗口");
removemMultiDynamicPop(1);
}
}
//动态弹窗2
if (multiDynamicPop2 != null && e.toolsID == multiDynamicPop2.GetToolsID())
{
var param = multiDynamicPop2.GetToolsResult().GetConfigValueByKey("Param");
if (param == "123")
{
MessageBox.Show("动态弹窗动态框1:123");
}
if (param == "456")
{
MessageBox.Show("动态弹窗动态框1:456");
}
if (param == "Close")
{
MessageBox.Show("准备关闭窗口");
removemMultiDynamicPop(2);
}
}
}
2.静态弹窗
静态弹窗是指在窗口固定位置弹出一个子窗口。该子窗口的位置不会跟随场景的移动而移动的。
静态弹窗是通过工具类实现的,它类似图层对象功能,可以进行添加(创建)、更新、显隐和删除操作。
注意: 静态弹窗可以设置窗口透明度,但是子窗口中的内容会跟随透明。因此建议透明度不要设置太低,一般设为200左右。
参数说明
静态弹窗可配置的参数如下表所示:
配置项 | 配置说明 | 值类型 | 备注 |
---|---|---|---|
Left | 左边边距 | double | 窗口距离左边边距。默认:0.0 |
Top | 顶部边距 | double | 窗口距离顶部边距。默认:0.0 |
Width | 窗口宽度 | double | 窗口的宽度。默认:0.0 |
Height | 窗口高度 | double | 窗口的高度。默认:0.0 |
Alpha | 窗口透明度 | double | 窗口的透明度。取值在0-255之间。默认:255 |
Url | 页面访问路径 | string | 窗口子页面访问路径。可以是本地绝对路径,也可以是网络路径 |
IsShow | 是否可见 | bool | 窗口是否可见。默认true |
IsScreenPos | 是否相对屏幕 | bool | 是否相对屏幕。true-相对电脑屏幕;false-相对地图界面 |
FunctionName | 交互函数名 | string | 主窗口调用子窗口函数名称 |
FunctionParam | 交互参数 | string | 主窗口调用子窗口函数时传递的参数 |
代码调用示例
Javascript调用
//tool回调实现函数
function callBackFunTools(toolsID, notifyType) {
//静态弹窗
if (staticPop && toolsID == staticPop.GetToolsID()) {
var param = staticPop.GetToolsResult().GetConfigValueByKey("Param");
if (param == "123") {
alert("接收成功!参数:" + param);
}
if (param == "456") {
alert("准备关闭窗口。参数:" + param);
removeStaticPop();
}
}
}
var tools = obj.GetIToolsCOMPtr();//使用对象前,务必初始化
var operaEvent = addEvent(obj, "FireOnToolsNotify", callBackFunTools);//添加回调
var staticPop = null;
var gPrjIndexPath = "E:/SDK应用级示例/CooGisSDKDemoApplication-V6.1/data";
//创建静态弹窗
function createStaticPop() {
if (staticPop == null) {
var opt = tools.CreateToolsOptions("web");//创建配置项
opt.AddConfig("Url", gPrjIndexPath + "/pages/pop.htm");//网页链接地址
opt.AddConfig("Left", "10");//屏幕位置x
opt.AddConfig("Top", "10");//屏幕位置y
opt.AddConfig("Width", "350");//页面宽度
opt.AddConfig("Height", "500");//页面高度
opt.AddConfig("Alpha", "100");//窗口透明度
opt.AddConfig("Radial", "20");//圆角直径
opt.AddConfig("IsShow", "true");//是否显示
opt.AddConfig("IsScreenPos", "false");//是否相对屏幕,false则为相对地图界面
staticPop = tools.CreateToolsObject("WebInfoTool", opt);//创建工具类型。WebInfoTool代表静态弹窗
staticPop.AddObserver();//打开事件绑定功能
staticPop.Active();//激活工具类
} else {
alert("已存在弹窗对象,请勿重复创建!");
}
}
//更新静态弹窗
//更新时可以与子窗口交互,但是不能同时更新子窗口路径和交互参数
function updateStaticPop() {
if (staticPop) {
var opt = tools.CreateToolsOptions("web");//创建配置项
opt.AddConfig("Left", "200");//屏幕位置x
opt.AddConfig("Top", "300");//屏幕位置y
opt.AddConfig("Width", "350");//页面宽度
opt.AddConfig("Height", "500");//页面高度
opt.AddConfig("Alpha", "180");//窗口透明度
opt.AddConfig("IsShow", "true");//是否显示
opt.AddConfig("IsScreenPos", "true");//是否相对屏幕,false则为相对地图界面
opt.AddConfig("FunctionName", "Test");//交互函数
opt.AddConfig("FunctionParam", "320");//交互参数
staticPop.UpdateToolsOptions(opt);//更新接口
} else {
alert("请创建对象后再更新!");
}
}
//删除静态弹窗
function removeStaticPop() {
if (staticPop) {
tools.DestoryTools(staticPop);//移除工具对象
staticPop = null;
} else {
alert("不存在对象,无需移除!");
}
}
C++调用
ToolsCOMLib::IToolsManagerPtr tools;//工具类对象
BaseObjectCOMLib::IToolsObjectPtr staticPop;//静态弹窗
CString strPath = "E:/SDK应用级示例/CooGisSDKDemoApplication-V6.1/data";
//创建网页静态弹窗
void Cf6c3TipsDialogDlg::OnBnClickedcreatestaticpop()
{
if (staticPop == NULL) {
ConfigOptionsCOMLib::IToolsOptionsPtr opt = tools->CreateToolsOptions("web");//创建配置项
opt->AddConfig("Url", (strPath + "pop.htm"));//网页链接地址
opt->AddConfig("Left", "10");//屏幕位置x
opt->AddConfig("Top", "10");//屏幕位置y
opt->AddConfig("Width", "350");//页面宽度
opt->AddConfig("Height", "500");//页面高度
opt->AddConfig("Alpha", "100");//窗口透明度
opt->AddConfig("Radial", "20");//圆角直径
opt->AddConfig("IsShow", "true");//是否显示
opt->AddConfig("IsScreenPos", "false");//是否相对屏幕,false则为相对地图界面
staticPop = tools->CreateToolsObject("WebInfoTool", opt);//创建工具类型。WebInfoTool代表静态弹窗
staticPop->AddObserver();//打开事件绑定功能
staticPop->Active();//激活工具类
}
}
//更新网页静态弹窗
void Cf6c3TipsDialogDlg::OnBnClickedupdatestaticpop()
{
if (staticPop != NULL) {
ConfigOptionsCOMLib::IToolsOptionsPtr opt = tools->CreateToolsOptions("web");//创建配置项
opt->AddConfig("Left", "200");//屏幕位置x
opt->AddConfig("Top", "300");//屏幕位置y
opt->AddConfig("Width", "350");//页面宽度
opt->AddConfig("Height", "500");//页面高度
opt->AddConfig("Alpha", "180");//窗口透明度
opt->AddConfig("IsShow", "true");//是否显示
opt->AddConfig("IsScreenPos", "true");//是否相对屏幕,false则为相对地图界面
opt->AddConfig("FunctionName", "Test");//交互函数
opt->AddConfig("FunctionParam", "320");//交互参数
staticPop->UpdateToolsOptions(opt);//更新接口
}
}
//删除网页静态弹窗
void Cf6c3TipsDialogDlg::OnBnClickedremovestaticpop()
{
if (staticPop!= NULL) {
tools->DestoryTools(staticPop);//移除工具对象
staticPop = NULL;
}
}
void Cf6c3TipsDialogDlg::FireOnToolsNotifyVpsdkctrl1(long ToolsID, long notifyType)
{
//静态弹窗
if (staticPop && ToolsID == staticPop->GetToolsID())
{
ConfigOptionsCOMLib::IToolsOptionsPtr opt = staticPop->GetToolsResult();
std::string param = opt->GetConfigValueByKey("Param");
if (param == "123") {
MessageBox(L"接收成功");
}
if (param == "456") {
MessageBox(L"关闭窗口");
OnBnClickedremovestaticpop();
}
}
}
C#调用
string path ="E:/data/LocalData/html";
IToolsObject staticPop;//网页静态弹窗对象
bool state;//显隐控制开关
//创建网页静态弹窗
private void createStaticPop_Click(object sender, EventArgs e)
{
if (staticPop == null)
{
var opt = tools.CreateToolsOptions("web");//创建配置项
opt.AddConfig("Url", path+"/pop.htm");//网页链接地址
opt.AddConfig("Left", "10");//屏幕位置x
opt.AddConfig("Top", "10");//屏幕位置y
opt.AddConfig("Width", "350");//页面宽度
opt.AddConfig("Height", "500");//页面高度
opt.AddConfig("Alpha", "100");//窗口透明度
opt.AddConfig("Radial", "20");//圆角直径
opt.AddConfig("IsShow", "true");//是否显示
opt.AddConfig("IsScreenPos", "false");//是否相对屏幕,false则为相对地图界面
staticPop = tools.CreateToolsObject("WebInfoTool", opt);//创建工具类型。WebInfoTool代表静态弹窗
staticPop.AddObserver();//打开事件绑定功能
staticPop.Active();//激活工具类
}
else
{
MessageBox.Show("已存在弹窗对象,请勿重复创建!");
}
}
//更新网页静态弹窗
private void updateStaticPop_Click(object sender, EventArgs e)
{
if (staticPop!=null)
{
var opt = tools.CreateToolsOptions("web");//创建配置项
opt.AddConfig("Left", "200");//屏幕位置x
opt.AddConfig("Top", "300");//屏幕位置y
opt.AddConfig("Width", "350");//页面宽度
opt.AddConfig("Height", "500");//页面高度
opt.AddConfig("Alpha", "180");//窗口透明度
opt.AddConfig("IsShow", "true");//是否显示
opt.AddConfig("IsScreenPos", "true");//是否相对屏幕,false则为相对地图界面
opt.AddConfig("FunctionName", "Test");//交互函数
opt.AddConfig("FunctionParam", "320");//交互参数
staticPop.UpdateToolsOptions(opt);//更新接口
}
else
{
MessageBox.Show("请创建对象后再更新!");
}
}
//删除网页静态弹窗
private void removeStaticPop_Click(object sender, EventArgs e)
{
removemStaticPop();
}
private void removemStaticPop()
{
if (staticPop!=null)
{
tools.DestoryTools(staticPop);//移除网页弹窗
staticPop = null;
}
else
{
MessageBox.Show("不存在对象,无需移除!");
}
}
//tool回调实现函数
private void axVPSDKCtrl1_FireOnToolsNotify(object sender, AxSDKCtrlLib._IVPSDKCtrlEvents_FireOnToolsNotifyEvent e)
{
//静态弹窗
if (staticPop != null && e.toolsID == staticPop.GetToolsID())
{
var param = staticPop.GetToolsResult().GetConfigValueByKey("Param");
if (param == "123")
{
MessageBox.Show("接收成功!参数:" + param);
}
if (param == "456")
{
MessageBox.Show("准备关闭窗口。参数:" + param);
removemStaticPop();
}
}
}
3.静态窗口
静态窗口是指在窗口上方覆盖一个子窗口。该子窗口在设定之后,会固定在场景上,并且在子窗口透明区域,可以直接拖动场景。
静态弹窗是通过工具类实现的,它类似图层对象功能,可以进行添加(创建)、更新、显隐和删除操作。
注意: 静态窗口可以通过DIV布局,将显示子窗口内容部分设置半透背景,显示三维场景区域设置全透背景,以达到多块内容浮在三维场景上的效果。
参数说明
静态窗口可配置的参数如下表所示:
配置项 | 配置说明 | 值类型 | 备注 |
---|---|---|---|
Left | 左边边距 | double | 窗口距离左边边距。单位:像素,也可用百分比表示:x% |
Top | 顶部边距 | double | 窗口距离顶部边距。单位:像素,也可用百分比表示:x% |
Width | 窗口宽度 | double | 窗口的宽度。单位:像素,也可用百分比表示:x% |
Height | 窗口高度 | double | 窗口的高度。单位:像素,也可用百分比表示:x% |
Url | 页面访问路径 | string | 窗口子页面访问路径。可以是本地绝对路径,也可以是网络路径 |
IsShow | 是否可见 | bool | 窗口是否可见。默认true |
IsScreenPos | 是否相对屏幕 | bool | 是否相对屏幕。true-相对电脑屏幕;false-相对地图界面 |
FunctionName | 交互函数名 | string | 主窗口调用子窗口函数名称 |
FunctionParam | 交互参数 | string | 主窗口调用子窗口函数时传递的参数 |
代码调用示例
Javascript调用
//tool回调实现函数
function callBackFunTools(toolsID, notifyType) {
//静态窗口
if (staticWindow && toolsID == staticWindow.GetToolsID()) {
var param = staticWindow.GetToolsResult().GetConfigValueByKey("Param");
if (param == "123") {
alert("动态弹窗静态框:123");
}
if (param == "456") {
alert("动态弹窗静态框:456");
}
}
}
var tools = obj.GetIToolsCOMPtr();//使用对象前,务必初始化
var operaEvent = addEvent(obj, "FireOnToolsNotify", callBackFunTools);//添加回调
var staticWindow = null;
var gPrjIndexPath = "E:/SDK应用级示例/CooGisSDKDemoApplication-V6.1/data";
//创建静态窗口
//静态窗口是通过cef插件做的,可以覆盖全屏幕,需要覆盖全屏的网页保留地图区域为透明即可
function createStaticWindow() {
if (staticWindow == null) {
var opt = tools.CreateToolsOptions("web");//创建配置项
opt.AddConfig("Url", gPrjIndexPath + "/pages/pop2.htm");//网页路径,可本地可网络
opt.AddConfig("Left", "0");//左上角水平相对位置,单位:像素,也可用百分比表示:x%
opt.AddConfig("Top", "0");//左上角垂直相对位置,单位:像素,也可用百分比表示:x%
opt.AddConfig("Width", "90%");//页面宽度,单位:像素,也可用百分比表示:x%
opt.AddConfig("Height", "90%");//页面高度,单位:像素,也可用百分比表示:x%
opt.AddConfig("IsScreenPos", "false");//是否相对屏幕,false则为相对地图界面
opt.AddConfig("IsShow", "true");//显隐状态
staticWindow = tools.CreateToolsObject("StaticWindowTool", opt);//创建工具类型。StaticWindowTool代表静态窗口
staticWindow.AddObserver();//打开事件绑定功能
staticWindow.Active();//激活工具类
}
}
//更新静态窗口
function updateStaticWindow() {
if (staticWindow) {
var opt = tools.CreateToolsOptions("web");//创建配置项
opt.AddConfig("Left", "10%");//左上角水平相对位置,单位:像素,也可用百分比表示:x%
opt.AddConfig("Top", "10%");//左上角垂直相对位置,单位:像素,也可用百分比表示:x%
opt.AddConfig("Width", "90%");//页面宽度,单位:像素,也可用百分比表示:x%
opt.AddConfig("Height", "80%");//页面高度,单位:像素,也可用百分比表示:x%
opt.AddConfig("IsScreenPos", "true");//是否相对屏幕,false则为相对地图界面
opt.AddConfig("IsShow", "true");//显隐状态
opt.AddConfig("FunctionName", "Test");
opt.AddConfig("FunctionParam", "20");
staticWindow.UpdateToolsOptions(opt);//更新接口
}
}
//删除静态窗口
function removeStaticWindow() {
if (staticWindow) {
tools.DestoryTools(staticWindow);//移除工具对象
staticWindow = null;
}
}
C++调用
ToolsCOMLib::IToolsManagerPtr tools;//工具类对象
BaseObjectCOMLib::IToolsObjectPtr staticWindow;//静态窗口
CString strPath = "E:/SDK应用级示例/CooGisSDKDemoApplication-V6.1/data";
void Cf6c3TipsDialogDlg::OnBnClickedcreatestaticwindow()
{
if (staticWindow == NULL) {
ConfigOptionsCOMLib::IToolsOptionsPtr opt = tools->CreateToolsOptions("web");//创建配置项
opt->AddConfig("Url", strPath + "/pop2.htm");//网页路径,可本地可网络
opt->AddConfig("Left", "0");//左上角水平相对位置,单位:像素,也可用百分比表示:x%
opt->AddConfig("Top", "0");//左上角垂直相对位置,单位:像素,也可用百分比表示:x%
opt->AddConfig("Width", "90%");//页面宽度,单位:像素,也可用百分比表示:x%
opt->AddConfig("Height", "90%");//页面高度,单位:像素,也可用百分比表示:x%
opt->AddConfig("IsScreenPos", "false");//是否相对屏幕,false则为相对地图界面
opt->AddConfig("IsShow", "true");//显隐状态
staticWindow = tools->CreateToolsObject("StaticWindowTool", opt);//创建工具类型。StaticWindowTool代表静态窗口
staticWindow->AddObserver();//打开事件绑定功能
staticWindow->Active();//激活工具类
}
}
void Cf6c3TipsDialogDlg::OnBnClickedupdatestaticwindow()
{
if (staticWindow) {
ConfigOptionsCOMLib::IToolsOptionsPtr opt = tools->CreateToolsOptions("web");//创建配置项
opt->AddConfig("Left", "10%");//左上角水平相对位置,单位:像素,也可用百分比表示:x%
opt->AddConfig("Top", "10%");//左上角垂直相对位置,单位:像素,也可用百分比表示:x%
opt->AddConfig("Width", "90%");//页面宽度,单位:像素,也可用百分比表示:x%
opt->AddConfig("Height", "80%");//页面高度,单位:像素,也可用百分比表示:x%
opt->AddConfig("IsScreenPos", "true");//是否相对屏幕,false则为相对地图界面
opt->AddConfig("IsShow", "true");//显隐状态
opt->AddConfig("FunctionName", "Test");
opt->AddConfig("FunctionParam", "20");
staticWindow->UpdateToolsOptions(opt);//更新接口
}
}
void Cf6c3TipsDialogDlg::OnBnClickedremovestaticwindow()
{
if (staticWindow) {
tools->DestoryTools(staticWindow);//移除工具对象
staticWindow = NULL;
}
}
void Cf6c3TipsDialogDlg::FireOnToolsNotifyVpsdkctrl1(long ToolsID, long notifyType)
{
//静态窗口
if (staticWindow && ToolsID == staticWindow->GetToolsID()) {
ConfigOptionsCOMLib::IToolsOptionsPtr opt = staticWindow->GetToolsResult();
std::string param = opt->GetConfigValueByKey("Param");
if (param == "123") {
MessageBox(L"动态弹窗静态框:123");
}
if (param == "456") {
MessageBox(L"动态弹窗静态框:456");
}
}
}
C#调用
string path ="E:/data/LocalData/html";
bool state;//显隐控制开关
//创建静态窗口
//静态窗口是通过cef插件做的,可以覆盖全屏幕,需要覆盖全屏的网页保留地图区域为透明即可
IToolsObject staticWindow;
private void createStaticWindow_Click(object sender, EventArgs e)
{
if (staticWindow == null)
{
var opt = tools.CreateToolsOptions("web");//创建配置项
opt.AddConfig("Url", path + "/pop2.htm");//网页路径,可本地可网络
opt.AddConfig("Left", "0");//左上角水平相对位置,单位:像素,也可用百分比表示:x%
opt.AddConfig("Top", "0");//左上角垂直相对位置,单位:像素,也可用百分比表示:x%
opt.AddConfig("Width", "90%");//页面宽度,单位:像素,也可用百分比表示:x%
opt.AddConfig("Height", "90%");//页面高度,单位:像素,也可用百分比表示:x%
opt.AddConfig("IsScreenPos", "false");//是否相对屏幕,false则为相对地图界面
opt.AddConfig("Radial", "10");//弹窗四角弧度
opt.AddConfig("IsShow", "true");//显隐状态
staticWindow = tools.CreateToolsObject("StaticWindowTool", opt);//创建工具类型。StaticWindowTool代表静态窗口
staticWindow.AddObserver();//打开事件绑定功能
staticWindow.Active();//激活工具类
}
}
//更新静态窗口
private void updateStaticWindow_Click(object sender, EventArgs e)
{
if (staticWindow !=null)
{
var opt = tools.CreateToolsOptions("web");//创建配置项
opt.AddConfig("Left", "10%");//左上角水平相对位置,单位:像素,也可用百分比表示:x%
opt.AddConfig("Top", "10%");//左上角垂直相对位置,单位:像素,也可用百分比表示:x%
opt.AddConfig("Width", "90%");//页面宽度,单位:像素,也可用百分比表示:x%
opt.AddConfig("Height", "80%");//页面高度,单位:像素,也可用百分比表示:x%
opt.AddConfig("IsScreenPos", "true");//是否相对屏幕,false则为相对地图界面
opt.AddConfig("Radial", "50");//弹窗四角弧度
opt.AddConfig("IsShow", "true");//显隐状态
opt.AddConfig("FunctionName", "Test");
opt.AddConfig("FunctionParam", "20");
staticWindow.UpdateToolsOptions(opt);//更新接口
}
}
//删除静态窗口
private void removeStaticWindow_Click(object sender, EventArgs e)
{
if (staticWindow !=null)
{
tools.DestoryTools(staticWindow);//移除工具对象
staticWindow = null;
}
}
//tool回调实现函数
private void axVPSDKCtrl1_FireOnToolsNotify(object sender, AxSDKCtrlLib._IVPSDKCtrlEvents_FireOnToolsNotifyEvent e)
{
//静态窗口
if (staticWindow != null && e.toolsID == staticWindow.GetToolsID())
{
var param = staticWindow.GetToolsResult().GetConfigValueByKey("Param");
if (param == "123")
{
MessageBox.Show("动态弹窗静态框:123");
}
if (param == "456")
{
MessageBox.Show("动态弹窗静态框:456");
}
}
}