1.5.2 响应器对象操作
响应器是指主动对外提供窗口交互功能的对象。比例拖动鼠标或者按下键盘按键时,窗口会做出相应反应,这个做出反应的对象就是响应器。
CooRun SDK提供了数据拾取、编辑,UI界面、截图、动态气泡等响应器对象,为客户提供了良好的窗口交互功能。
响应器提供创建、添加、更新、删除四种操作。
注意:一个场景中一种响应器只能存在一个。
响应器添加
一般来说,在添加响应器之前必须先创建响应器,因此响应器创建和添加是同时使用的。响应器添加分为4步操作:
1.调用场景map对象的CreateResponserOptions()接口进行响应器配置对象创建。
2.调用第一步创建的响应器配置对象的AddConfig()接口,添加配置信息。
3.调用场景map对象的CreateResponser()接口进行响应器创建。
4.调用场景map对象的AddResponser()接口将响应器添加到场景中。
对于响应器添加的四步操作来说,主要是第2和第3步操作会有所不同。针对第二步进行参数配置,后续的功能说明会一一讲解。
对于第3步的CreateResponser()
接口原型为:CreateResponser(BSTR type, IUnknown* opt)
。其中第一个参数代表创建的响应器类型,它的取值有以下几种
编号 | 响应器类型 | 配置值说明 |
---|---|---|
1 | PickModelResponser | 模型拾取响应器 |
2 | PickObliqueResponser | 单体化拾取响应器 |
3 | PickVectorResponser | 矢量拾取响应器 |
4 | VectorEditResponser | 矢量编辑响应器 |
5 | AxisEditResponser | 拖拽器 |
6 | UILogoResponser | Logo响应器 |
7 | UICrossResponser | 中心十字标响应器 |
8 | UICompassResponser | 罗盘响应器 |
9 | UITipsResponser | 提示文字响应器 |
10 | UIStateResponser | 状态栏响应器 |
11 | UICaptionResponser | 字幕响应器 |
12 | UIFullScreenResponser | 全屏按钮响应器(内置功能) |
13 | SceneshotResponser | 截图响应器 |
代码调用示例
Javascript调用
var resp = map.CreateResponserOptions("res");//1.创建响应器配置,名称任意
//2.设置配置参数
resp.AddConfig("PickLayerIdList", "-1");//作用图层Id列表
resp.AddConfig("PickColor", "1.0,0.0,0.0,0.5");//拾取颜色
resp.AddConfig("IsChangeColor", "true");//是否变色
Var pickRes= map.CreateResponser("PickModelResponser", resp);//3.创建响应器
pickRes.AddObserver();//添加事件监听
map.AddResponser(pickRes); //4.添加响应器
C++调用
ConfigOptionsCOMLib::IResponserOptionPtr resp =(ConfigOptionsCOMLib::IResponserOptionPtr)map->CreateResponserOptions("model");//1.创建响应器配置,参数任意名称
//2.设置配置参数
resp->AddConfig("PickLayerIdList", "-1");//传-1则默认遍历所有模型图层,若为多个图层,可使用xx,xx,xx此种格式
resp->AddConfig("PickColor", "1.0,0.0,0.0,0.5");//拾取颜色
resp->AddConfig("IsChangeColor", "true");//是否变色
resp->AddConfig("IsGetLayerID", "true");//是否需要获取节点所在图层ID
BaseObjectCOMLib::IResponserObjectPtr pickRes = map->CreateResponser("PickModelResponser", resp);//3.创建模型拾取响应器,第一参必须为PickModelResponser字符串
pickRes->AddObserver(); //添加监听
map->AddResponser(pickModelResponser); //4.添加响应器
C#调用
IResponserOption resp = (IResponserOption)map.CreateResponserOptions("model");//1.创建响应器配置对象,参数任意名称
//2.设置配置参数
resp.AddConfig("PickLayerIdList", "-1");//拾取图层Id。传-1则默认遍历所有模型图层,若为多个图层,可使用xx,xx,xx此种格式
resp.AddConfig("PickColor", "1.0,0.0,0.0,0.5");//拾取颜色
resp.AddConfig("IsChangeColor", "true");//是否变色
resp.AddConfig("IsGetLayerID", "true");//是否需要获取节点所在图层ID
IResponserObject pickRes = map.CreateResponser("PickModelResponser", resp);//3.创建响应器对象,PickModelResponser代表模型拾取响应器
pickRes.AddObserver();//添加监听
map.AddResponser(pickModelResponser);//4.添加响应器对象
响应器更新
响应器更新是对已经添加到场景中的响应器进行部分参数更新,以达到改变之前效果的操作。
更新响应器一般分为3步操作:
1.调用场景map对象的CreateResponserOptions()接口进行响应器配置对象创建。
2.调用第一步创建的响应器配置对象的AddConfig()接口,添加配置信息。
3.调用响应器对象的UpdateResponserOptions()接口进行响应器更新。
代码调用示例
Javascript调用
var resp = map.CreateResponserOptions("model");//1.创建响应器配置
//2.设置配置参数
resp.AddConfig("PickLayerIdList", "-1");//作用图层Id列表
resp.AddConfig("PickColor", "1.0,0.0,0.0,0.5");//拾取颜色
resp.AddConfig("IsChangeColor", "true");//是否变色
pickRes.UpdateResponserOptions(resp);//3.更新响应器对象
C++调用
ConfigOptionsCOMLib::IResponserOptionPtr resp =(ConfigOptionsCOMLib::IResponserOptionPtr)map->CreateResponserOptions("model");//1.创建响应器配置,参数任意名称
//2.设置配置参数
resp->AddConfig("PickLayerIdList", "-1");//传-1则默认遍历所有模型图层,若为多个图层,可使用xx,xx,xx此种格式
resp->AddConfig("PickColor", "1.0,1.0,0.0,0.5");//拾取颜色
resp->AddConfig("IsChangeColor", "true");//是否变色
resp->AddConfig("IsGetLayerID", "false");//是否需要获取节点所在图层ID
pickRes->UpdateResponserOptions(resp);//3.更新拾取响应器
C#调用
IResponserOption resp = (IResponserOption)map.CreateResponserOptions("model");//1.创建响应器配置对象,参数任意名称
//2.设置配置参数
resp.AddConfig("PickLayerIdList", "-1");//拾取图层Id。传-1则默认遍历所有模型图层,若为多个图层,可使用xx,xx,xx此种格式
resp.AddConfig("PickColor", "1.0,1.0,0.0,0.5");//拾取颜色
resp.AddConfig("IsChangeColor", "true");//是否变色
resp.AddConfig("IsGetLayerID", "false");//是否需要获取节点所在图层ID
pickRes.UpdateResponserOptions(resp);//3.更新响应器对象
响应器删除
响应器添加到场景中之后,如果需要移除,可以调用RemoveResponser()接口。
注意:同一类型的响应器对象在场景中有且只能有一个,因此在删除时,传递的参数是响应器类型。
代码调用示例
Javascript调用
map.RemoveResponser("PickModelResponser");//删除响应器对象
pickRes = null;
C++调用
map->RemoveResponser("PickModelResponser");//删除响应器对象
pickRes=NULL;
C#调用
map.RemoveResponser("PickModelResponser");//删除响应器对象
pickRes = null;