2.5.6 动态路径漫游
动态路径漫游
动态路径漫游是指根据指定路径进行场景漫游的功能。路径漫游是一个图层对象,因此它具备图层对象的添加、更新和删除功能。
- 添加路径漫游时,主要是对路径图层的初始参数进行设定,如跟随模型、播放状态、播放速度、路径线颜色、关键点等。
- 更新路径漫游时,主要是对路径进行再编辑和控制播放状态、观察视角等。
- 删除路径漫游时,是取消路径漫游状态和从场景中移除路径漫游图层。
一般来说,路径漫游的更新包含两个过程:路径编辑过程和路径播放过程。
路径编辑过程
路径编辑过程主要是创建路径的关键点列表,以及对关键点进行添加、更新、删除操作。
路径漫游播放的前提条件是需要有播放路径和播放参数,播放路径是由N个关键点组成的。路径的编辑过程就是在生成路径关键点以及播放参数。
一般播放路径有3种方式产生:
- 直接传入。 可以在创建路径图层时,通过
KeyPoints
参数直接传入播放路径(关键点列表)。这是常用的一种方式,也是导入路径漫游的使用方式。 - 手动传入。 可以先创建空的路径图层,然后通过更新图层的方式传入一个/一批关键点。传入的同时可设置单个关键点的播放参数。该方法需要更新
OperationName
,KeyPointIndex
,KeyPoints
等参数。 - 场景编辑。 可以开启场景编辑功能,开启后已有的关键点会有编号,在场景中点击可以添加新的关键点等。该方法需要更新
EditType
,EditObject
参数。
路径播放过程
路径播放过程是在路径关键点列表确定之后,进行路径的播放。播放时可切换播放状态、改变跟随模式、改变观察位置等。一般主要有以下几种方式切换。
- 切换播放状态。 可通过更新
PlayerState
参数, 控制路径漫游在播放、暂停和停止3个状态任意切换。 - 切换跟随移动状态。 可通过更新
NodeActive
参数, 控制场景是跟随移动还是不跟随。通过该方式可以达到第一人称视角观察(跟随)和第三人称视角观察(不跟随)。 - 切换播放类型。 可通过更新
PlayAsKeyPoint
参数, 控制路径漫游的播放类型。 当PlayAsKeyPoint
=true 时,播放类型切换成以关键点参数进行播放,后续无法再进行视角切换和播放速度控制;当PlayAsKeyPoint
=false 时,播放类型切换成以路径参数进行播放,在播放时可以随意更改观察视角和播放速度。 - 切换观察视角。 在播放的过程中,可以切换观察视角,达到左视、右视、前视、后视等多种效果。切换视角的前提是:
PlayAsKeyPoint
=false,NodeActive
=true。 - 控制播放速度。 在以路径参数进行播放的过程中,可以通过更新
Velocity
参数控制播放的速度。
下图是开启路径漫游的效果:
参数说明
路径漫游可配置的参数如下表所示:
配置项 | 配置说明 | 值类型 | 备注 |
---|---|---|---|
LayerOptionsName | 图层配置对象名称 | string | 动态路径图层需配置为:DynamicPathLayerOptions |
Url | 跟随模型路径 | string | 跟随模型路径地址 |
NodeXScale | 模型X轴缩放比例 | float | 跟随模型在X轴方向的缩放比例,默认1.0 |
NodeYScale | 模型Y轴缩放比例 | float | 跟随模型在Y轴方向的缩放比例,默认1.0 |
NodeZScale | 模型Z轴缩放比例 | float | 跟随模型在Z轴方向的缩放比例,默认1.0 |
ModelRoll | 模型X轴旋转量 | float | 跟随模型在X轴方向的旋转量,默认0.0。单位弧度 |
ModelPitch | 模型Y轴旋转量 | float | 跟随模型在Y轴方向的旋转量,默认0.0。单位弧度 |
ModelHeading | 模型Z轴旋转量 | float | 跟随模型在Z轴方向的旋转量,默认0.0。单位弧度 |
ModelLiftUp | 模型抬高值 | float | 跟随模型相对于关键点的抬高高度,默认0.0。单位m |
PlayerMode | 播放模式 | string | 路径漫游的播放模式。PLAYER_ONEWAY-播放一次; PLAYER_ONEWAY_LOOP-循环播放; PLAYER_ROUND_LOOP-往返播放; PLAYER_ONEWAY_STAY-实时播放。默认: PLAYER_ONEWAY |
PlayerState | 播放状态 | string | 路径漫游的播放状态。PLAYER_PLAY-播放; PLAYER_PAUSE-暂停; PLAYER_STOP停止。 默认:PLAYER_STOP |
ViewObjectMode | 设置视角对象 | string | 视角对象的格式为"水平方位角, 垂直俯仰角, 视点到关键点距离"。 默认:"0.0,-0.708,500" |
Velocity | 播放速度 | float | 路径漫游的播放速度,默认12.5。 单位m/s |
Accelerator | 加速度 | float | 路径漫游的播放时的加速度,当>0时会加速播放。默认0.0。 单位m/s |
CornerSpeedScale | 转角速度比例 | float | 在拐弯转角位置时速度比例, 实际速度= CornerSpeedScale * Velocity 。 默认1.0 |
Radius | 拐弯处平滑半径 | float | 路径拐弯位置平滑处理半径。 默认: 0 |
LineWidth | 线宽度 | float | 线宽度取值范围在1-10之间。 默认:1.0 |
LineColor | 线颜色 | R,G,B,A | 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0" |
LineStipple | 线样式 | short | 线显示样式,可控制实线/虚线显示。取值范围-32768-32767之间。-1-实线,其他-虚线。默认-1 |
InterpLineWidth | 差值线宽度 | float | 线宽度取值范围在1-10之间。 默认:1.0 |
InterpLineColor | 差值线颜色 | R,G,B,A | 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0" |
InterpLineStipple | 差值线样式 | short | 差值线显示样式,可控制实线/虚线显示。取值范围-32768-32767之间。-1-实线,其他-虚线。默认-1 |
KeyPointLiftUp | 关键点抬高 | float | 所有关键点的抬高高度,默认0.0。单位m |
PlayAsKeyPoint | 播放类型 | bool | 播放类型。true-以关键点参数进行播放; false-以路径参数进行播放。 默认:false |
IsOnGround | 是否保持视点在地面以上 | bool | 在跟随移动时,是否保证相机视点一直在地面以上。 默认为false |
IsSwerveControl | 是否弯道减速 | bool | 设置在弯道位置是否减速再加速播放, 该值需与CornerSpeedScale 配合使用。 默认为false |
NodeActive | 跟随状态 | bool | 场景相机的跟随状态。 true-跟随移动;false-不跟随。 默认为false |
KeyPoints | 关键点集 | x,y,z列表 | 路径线上的关键点列表。 需传入经度,纬度,高程坐标集,中间用;分隔,并以;结尾 |
OperationName | 更新操作类型 | string | 对关键点更新时的操作类型。 InsertKeyPoints-插入关键点; UpdateKeyPoints-更新关键点; GetKeyPoint-获取关键点; DeleteKeyPoint-删除关键点 |
KeyPointIndex | 关键点索引 | int | 需要更新的关键点索引值。默认:0 |
EditType | 编辑类型 | string | 开启场景编辑时的编辑类型。 ADD-添加操作; SELECT-拾取操作; MOVE-移动操作; NONE-关闭操作。 默认:NONE |
EditObject | 编辑对象 | string | 开启场景编辑时的编辑对象。 POINT-编辑关键点; PATH-整体编辑。 默认:PATH |
获取结果说明
路径漫游可以通过图层对象的GetLayerResult() 方法获取结果。
注意1: 在播放过程中,主要通过图层的回调获取播放信息,因此需要添加FireOnLayerNotify
事件处理。 在回调事件触发时,该方法会有两个回调参数,参数1是layerId
, 代表图层Id,参数2是type
,代表事件类型。在路径漫游里面,当type
=2时,代表路径漫游的编辑过程;当type
=3时,代表路径漫游的播放过程。
注意2: 在实际使用中,判断是否经过路径上的关键点,一般是通过判断PassKeyPointIndex
参数值来确定的。也可以通过判断RealTimePositionGeo
坐标与目标位置的距离来触发某些特殊操作。如调用当前位置的监控视频、加载周边的兴趣点位等等。
路径漫游获取的结果值对象参数如下表所示:
配置项 | 配置说明 | 值类型 | 备注 |
---|---|---|---|
DataSourceTypeName | 数据源类型 | string | dynamicpath代表路径漫游 |
EditState | 编辑状态 | string | 在编辑过程中的状态值。 Insert-插入; Update-更新; Get-获取; Load-导入; Delete-删除; Down-完成 |
PlayState | 播放状态 | string | 路径漫游的播放状态。PLAYER_PLAY-播放; PLAYER_PAUSE-暂停; PLAYER_STOP停止。 默认:PLAYER_STOP |
KeyPointsGeo | 关键点坐标 | x,y,z列表 | 路径图里里全部关键点的经度,纬度,高程坐标列表,中间用;分隔,并以;结尾 |
KeyPoints | 关键点信息 | string | 每个关键点的详细信息,包括关键点坐标、角度、速度等。 格式为:0:x坐标,y坐标,z坐标:方位角,俯仰角,视距:速度:加速度:插值半径:抬高; 。 每个参数中间用 : 分隔,每组参数用; 分隔 |
PassKeyPointIndex | 行驶位置索引 | int | 表示已经通过的关键点索引。 在第0和第1个关键点之间, 返回值一直是0 |
IsPlayForward | 是否正向行驶 | bool | 当播放类型为PLAYER_ROUND_LOOP 时,会反正当前是正向还是逆向行驶 |
RealTimePositionGeo | 实时位置坐标 | x,y,z | 当前播放位置的经度,纬度,高程坐标。 该坐标的高程值会受KeyPointLiftUp 参数影响, 高程值 = 路径线上点的高程 + KeyPointLiftUp |
代码调用示例
Javascript调用
//Html部分代码
图层控制:
<input id="Button1" type="button" value="创建路径图层" onclick="createDynamicPathLayer(true,keyPointList)" />
<input id="Button1" type="button" value="创建路径图层(无关键点)" onclick="createDynamicPathLayer(true,false)" />
<input id="Button3" type="button" value="删除路径漫游" onclick="RemoveDynamicPathLayer()" />
<input id="Button3" type="button" value="路径序列化" onclick="PathSerializer()" />
<input id="Button3" type="button" value="路径反序列化" onclick="PathDeserializer()" />
</Br>
关键点编辑:
<input id="Button1" type="button" value="获取关键点索引" onclick="AddOption()" />
<select id ="SelOption" style="width:60px;height= 44px " />
<input id="Button1" type="button" value="获取参数" onclick="FindDynamicPathPointByIndex()" />
坐标信息<input id="posInfo" style="width: 250px; type="text" value=""/>
视角参数<input id="viewInfo" style="width: 100px;" type="text" value=""/>
点位速度<input id="speed" style="width: 28px;" type="text" value=""/>
加速度<input id="accelerator" style="width: 28px;" type="text" value=""/>
拐弯半径<input id="radius" style="width: 28px;" type="text" value=""/>
抬高高度<input id="liftUp" style="width: 28px;" type="text" value=""/>
<input id="Button1" type="button" value="是否鼠标左键获取坐标" onclick="FindTransformation()" />
<input id="Button1" type="button" value="插入关键点" onclick="AddDynamicPathPointByIndex()" />
<input id="Button1" type="button" value="更新关键点" onclick="UpdateDynamicPathPointByIndex()" />
<input id="Button1" type="button" value="删除关键点" onclick="DeleteDynamicPathPointByIndex()" />
<input id="Button1" type="button" value="末尾追加关键点" onclick="LoadDynamicPathPoint()" />
</Br>
场景控制编辑:
<input id="Button1" type="button" value="创建关键点" onclick="AddDynamicPathPoint()" />
<input id="Button1" type="button" value="拾取关键点" onclick="SelectDynamicPathPoint()" />
<input id="Button1" type="button" value="更新拾取关键点" onclick="UpdateDynamicPathPoint()" />
<input id="Button1" type="button" value="移动关键点" onclick="MoveDynamicPathPoint()" />
<input id="Button1" type="button" value="删除关键点" onclick="DeleteDynamicPathPoint()" />
<input id="Button1" type="button" value="整体编辑" onclick="EditPath()" />
<input id="Button1" type="button" value="关键点编辑" onclick="EditPoint()" />
<input id="Button1" type="button" value="关闭编辑状态" onclick="CloseDynamicPathResponser()" />
</Br>
播放控制:
<input id="Button1" type="button" value="切换播放类型" onclick="UpdatePlayAsKeyPoint()" />
<input id="Button4" type="button" value="切换跟随移动" onclick="UpdateNodeActive()" />
<input id="Button6" type="button" value="切换路径显隐" onclick="SetVisibleRoamPath()" />
<input id="Button8" type="button" value="播放" onclick="Play()" />
<input id="Button9" type="button" value="暂停" onclick="Pause()" />
<input id="Button10" type="button" value="停止" onclick="Stop()" />
<input id="Button11" type="button" value="加速" onclick="Accelerate()" />
<input id="Button12" type="button" value="减速" onclick="SlowDown()" />
<input id="Button13" type="button" value="恢复速度" onclick="Restore()" />
<input id="Button14" type="button" value="左视" onclick="LeftView()" />
<input id="Button15" type="button" value="右视" onclick="RightView()" />
<input id="Button16" type="button" value="上视" onclick="UpView()" />
<input id="Button17" type="button" value="前视" onclick="FrontView()" />
<input id="Button18" type="button" value="后视" onclick="BackView()" />
//JS代码
var event = null;
var SelectIndex=null;
var dynamicPathLayer = null;
var preSetPoint = "";
var bIsFollow = true;
var bIsVisible = true;
var bIsFindTransformation=false;
var layermap = new Array();
var mKeyPointIndex=0;
var speed = 3;
var pickIndex = null;
var indexSize = 0;
var keyPointList = "120.219652381,30.2102796597,14.8471973008;120.219228677,30.2109204111,14.7999731209;120.219066611,30.2109525583,14.7999699935;120.218700324,30.2108002945,14.799943476;120.218728451,30.2106748092,14.7999742515;120.218952979,30.2100989073,14.7999547897;120.219026376,30.2098925768,14.799970909;120.218995824,30.2098632529,14.8299724646;120.218730274,30.2097854181,14.7999352217;";
var myPosInput = document.getElementById("posInfo");
var myViewInput = document.getElementById("viewInfo");
var mySpeednput = document.getElementById("speed");
var myAcceleratorInput = document.getElementById("accelerator");
var myRadiusInput = document.getElementById("radius");
var myLiftUpInput = document.getElementById("liftUp");
//回调实现函数
function callBackFun(layerId, type){
//layerID回调值为"窗口id|图层id"
var info = new Array();
info = layerId.split("|");//idinfo通过|进行分隔
var mapviewid = info[0].substr(10, info[0].length - 10);//MapviewId:
var layerId = info[1].substr(8, info[1].length - 8);//LayerId:
var layer = layermap[layerId];
var opt=layer.GetLayerResult();
SelectIndex = opt.GetConfigValueByKey("CurrentKeyPointIndex");//获取拾取的关键点索引
//非播放中事件
if((opt.GetConfigValueByKey("DataSourceTypeName") == "dynamicpath") && (type == 2))
{
var mEditState = opt.GetConfigValueByKey("EditState");//编辑状态,Insert-插入;Update:-更新;Get-获取;Load-导入;Delete-删除;Down-完成;
var mKeyPointsGeo = opt.GetConfigValueByKey("KeyPointsGeo");//所有关键点坐标
//所有关键点信息(包含参数),参数以":"划分,格式如下
//类型:x坐标,y坐标,z坐标:方位角,俯仰角,视距:速度:加速度:插值半径:抬高;
var mKeyPoints = opt.GetConfigValueByKey("KeyPoints");
//alert("关键点坐标:"+mKeyPointsGeo + "; 关键点信息:"+mKeyPoints + ";编辑状态:" + mEditState);
}
//播放中事件
if((opt.GetConfigValueByKey("DataSourceTypeName") == "dynamicpath") && (type == 3))
{
var mCurrentLinearPos = opt.GetConfigValueByKey("CurrentLinearPos");//当前路径行驶的位置
var mPassKeyPointIndex = opt.GetConfigValueByKey("PassKeyPointIndex");//已通过的关键点索引
var mIsPlayForward = opt.GetConfigValueByKey("IsPlayForward");//是否为正向行驶
var mRealTimePositionGeo = opt.GetConfigValueByKey("RealTimePositionGeo");//路径行驶的实时位置(经纬-高程)
var mPlayState = opt.GetConfigValueByKey("PlayState");//播放状态
if(mPassKeyPointIndex==0)
{
mKeyPointIndex=1;
}
//路径播放中返回
if(mPassKeyPointIndex==mKeyPointIndex)
{
mKeyPointIndex++;
//alert("当前行驶到第"+mPassKeyPointIndex+"个关键点" + "\n行驶位置:"+mCurrentLinearPos+";是否为正向:"+mIsPlayForward+";实时位置坐标:"+mRealTimePositionGeo);
}
}
}
function callBackFun1(x, y){
var transformate = map.CreateTransformation();
var destPos = transformate.ScreenPosToWorldPos(x, y);//将屏幕坐标点转换成经纬度坐标
if(bIsFindTransformation)
{
myPosInput.value = destPos.GetX() + "," + destPos.GetY() + "," + destPos.GetZ() + ";";
}
//console.log(destPos.GetX() + "," + destPos.GetY() + "," + destPos.GetZ() + ";");
}
//********************************************************
//1.图层对象操作
//********************************************************
//创建动态路径图层
function createDynamicPathLayer(bIsModel, bIsPreset){
if(event == null){
addEvent(obj, "FireOnLayerNotify", callBackFun);
}
if(dynamicPathLayer == null){
var tlo = map.CreateLayerOptions("dynamicpathlayer");//创建路径动画图层配置,给配置起个名称,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//创建配置类型,
if(bIsModel){//模型路径配置配置
tlo.AddConfig("Url", gModelDeviceFolderPath + "/car.wrl"); //配置的动画的模型
tlo.AddConfig("NodeXScale", "0.5");//模型x轴缩放大小
tlo.AddConfig("NodeYScale", "0.5");//模型Y轴缩放大小
tlo.AddConfig("NodeZScale", "0.5");//模型Z轴缩放大小
tlo.AddConfig("ModelRoll", "0");//模型x轴旋转量
tlo.AddConfig("ModelPitch", "3.116");//模型Y轴旋转量
tlo.AddConfig("ModelHeading", "0");//模型Z轴旋转量
}
tlo.AddConfig("PlayerMode", "PLAYER_ONEWAY");//播放模式. PLAYER_ONEWAY-播放一次; PLAYER_ONEWAY_LOOP-循环播放; PLAYER_ROUND_LOOP-往返播放; PLAYER_ONEWAY_STAY-实时播放
tlo.AddConfig("PlayerState", "PLAYER_STOP");//播放状态. PLAYER_PLAY-播放; PLAYER_PAUSE-暂停; PLAYER_STOP停止
tlo.AddConfig("ViewObjectMode", "0,-0.2,3");//设置视角对象;视角对象的格式为"水平方位角,垂直俯仰角,视点到关键点距离"
tlo.AddConfig("Velocity", String(speed));//速度. 单位m/s
tlo.AddConfig("Accelerator", "0.0");//加速度. 单位m/s,加速度大于0会进行加速行驶
tlo.AddConfig("CornerSpeedScale", "0.5");//转角速度比例(0-1之间)
tlo.AddConfig("LineWidth", "2.0");//线宽(0-10)
tlo.AddConfig("LineStipple", "-1");//线样式
tlo.AddConfig("LineColor", "1.0,1.0,0.0,1");//路径线颜色
tlo.AddConfig("Radius", "3.0");//拐弯处平滑半径(圆角)
if(bIsPreset){
tlo.AddConfig("KeyPoints", keyPointList);//输入关键点列表
}
tlo.AddConfig("InterpLineWidth", "2.0");//差值线线宽
tlo.AddConfig("InterpLineStipple", "500");//差值线线样式
tlo.AddConfig("InterpLineColor", "1.0,1.0,1.0,1.0");//差值线颜色,不需要差值线去掉颜色
tlo.AddConfig("KeyPointLiftUp", "0"); //关键点抬高
tlo.AddConfig("PlayAsKeyPoint", "false");//播放类型。true-以关键点参数进行播放;false-以路径参数进行播放
tlo.AddConfig("IsSwerveControl", "true");//是否弯道减速,需配合CornerSpeedScale来使用
tlo.AddConfig("NodeActive", String(bIsFollow));//跟随移动状态。true-跟随移动;false-不跟随
dynamicPathLayer = map.CreateLayer("DynamicPathLayer", tlo);//创建路径图层
map.AddLayer(dynamicPathLayer);//添加图层
layermap[dynamicPathLayer.GetLayerID()] = dynamicPathLayer;
dynamicPathLayer.AddObserver();//添加路径图层监视
AddOption();
}else{
alert("图层已创建,请勿重复创建!");
}
}
//删除动态路径图层
function RemoveDynamicPathLayer(){
if(dynamicPathLayer){
map.RemoveLayer(dynamicPathLayer);//移除图层
dynamicPathLayer = null;
}else{
alert("图层为空,无需移除!");
}
if(event){
delEvent(obj, "FireOnLayerNotify", callBackFun, event);
event = null;
}
}
//路径序列化
function PathSerializer()
{
dynamicPathLayer.SerializeLayer("E:\\Test\\path.xml");//序列化路径图层
}
//路径反序列化
function PathDeserializer()
{
dynamicPathLayer=map.DeserializeLayer("E:\\Test\\path.xml");//反序列化路径图层
}
//*************************************************************************
//2.关键点编辑
//*************************************************************************
//OperationName代表对关键点的更新操作类型,可选值为
//InsertKeyPoints - 插入关键点
//UpdateKeyPoints - 更新关键点
//GetKeyPoint - 获取关键点
//DeleteKeyPoint - 删除关键点
//获取关键点索引
function AddOption()
{
var opt = dynamicPathLayer.GetLayerResult();
var index = opt.GetConfigValueByKey("KeyPointSize");//获取关键点的个数
var Option = document.getElementById("SelOption");
Option.options.length=0;
if ( null != Option )
{
var TextNode;
var ElementOption;
for (var i = 0; i < index; ++i)
{
ElementOption = document.createElement("option");
TextNode = document.createTextNode(i);
ElementOption.appendChild( TextNode );
Option.appendChild(ElementOption);
}
}
}
//获取对应索引的关键点信息
function FindDynamicPathPointByIndex()
{
if(dynamicPathLayer){
var tlo = map.CreateLayerOptions("dynamicpathlayer");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo.AddConfig("OperationName","GetKeyPoint");//更新操作类型
tlo.AddConfig("KeyPointIndex", SelOption.selectedIndex);//将对应关键点的索引传入
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
var opt = dynamicPathLayer.GetLayerResult();//获取图层结果
var KeyPointValue = opt.GetConfigValueByKey("CurrentKeyPoint");//获取索引对应的关键点信息
if(!KeyPointValue)
{
return;
}
var KeyPoint = new Array();
KeyPoint=KeyPointValue.split(":");//将获取的信息以:划分
myPosInput.value = KeyPoint[1];
var ViewInput= KeyPoint[2];
var mViewInput = ViewInput.split(",");//将获取的信息以:划分
myazimuth.value =mViewInput[0];
mypitch.value =mViewInput[1];
myrange.value =mViewInput[2];
mySpeednput.value = KeyPoint[3];
myAcceleratorInput.value = KeyPoint[4];
myRadiusInput.value = KeyPoint[5];
myLiftUpInput.value = KeyPoint[6].substring(0, KeyPoint[6].indexOf(";"));
}else{
alert("图层为空,获取信息失败!");
}
}
//开关鼠标获取坐标信息
function FindTransformation()
{
bIsFindTransformation=!bIsFindTransformation;
}
//在对应索引的点前增加关键点
function AddDynamicPathPointByIndex()
{
var selOption = document.getElementById("SelOption");
var tlo = map.CreateLayerOptions("dynamicpathlayer");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo.AddConfig("OperationName","InsertKeyPoints"); //插入关键点
tlo.AddConfig("KeyPointIndex", SelOption.selectedIndex); //新增关键点会添加在该序号的点之前,-1代表添加在末尾
if(myPosInput.value)//如果未设置坐标参数,则不更新
{
tlo.AddConfig("KeyPoints",myPosInput.value+";");//插入的关键点坐标,最后一位必须为;
}
else
{
return;
}
//可设关键点自身参数,如果不设置,则默认使用图层参数
if(myazimuth.value &&mypitch.value&&myrange.value)//如果设置了参数
{
tlo.AddConfig("ViewObjectMode",myazimuth.value+","+mypitch.value+","+myrange.value);//设置视角
}
if(mySpeednput.value)//如果设置了参数
{
tlo.AddConfig("Velocity", mySpeednput.value);//速度 单位m/s
}
if(myAcceleratorInput.value)//如果设置了参数
{
tlo.AddConfig("Accelerator", myAcceleratorInput.value);//加速度 单位m/s,加速度大于0会进行加速行驶
}
if(myRadiusInput.value)//如果设置了参数
{
tlo.AddConfig("Radius", myRadiusInput.value);//拐弯处平滑半径(圆角)
}
if(myLiftUpInput.value)//如果设置了参数
{
tlo.AddConfig("KeyPointLiftUp", myLiftUpInput.value);//对于关键点抬高
}
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
}
//更换对应索引的关键点参数
function UpdateDynamicPathPointByIndex()
{
var selOption = document.getElementById("SelOption");
var tlo = map.CreateLayerOptions("dynamicpathlayer");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo.AddConfig("OperationName","UpdateKeyPoints");//对关键点进行更新
tlo.AddConfig("KeyPointIndex", SelOption.selectedIndex); //更新对应索引的关键点
//可设关键点自身参数,如果不设置,则默认使用图层参数
if(myazimuth.value &&mypitch.value&&myrange.value)//如果设置了参数
{
tlo.AddConfig("ViewObjectMode",myazimuth.value+","+mypitch.value+","+myrange.value);//设置视角
}
if(mySpeednput.value)//如果设置了参数
{
tlo.AddConfig("Velocity", mySpeednput.value);//速度 单位m/s
}
if(myAcceleratorInput.value)//如果设置了参数
{
tlo.AddConfig("Accelerator", myAcceleratorInput.value);//加速度 单位m/s,加速度大于0会进行加速行驶
}
if(myRadiusInput.value)//如果设置了参数
{
tlo.AddConfig("Radius", myRadiusInput.value);//拐弯处平滑半径(圆角)
}
if(myLiftUpInput.value)//如果设置了参数
{
tlo.AddConfig("KeyPointLiftUp", myLiftUpInput.value);//对于关键点抬高
}
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
}
//删除对应索引的关键点
function DeleteDynamicPathPointByIndex()
{
var selOption = document.getElementById("SelOption");
var tlo = map.CreateLayerOptions("dynamicpathlayer");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo.AddConfig("OperationName","DeleteKeyPoint");//删除关键点
tlo.AddConfig("KeyPointIndex", SelOption.selectedIndex);//删除该索引的关键点
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
}
//末尾追加关键点,以下配置要对添加的关键点生效,PlayAsKeyPoint必须为true
function LoadDynamicPathPoint()
{
var tlo = map.CreateLayerOptions("dynamicpathlayer");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo.AddConfig("OperationName","InsertKeyPoints");//插入关键点
tlo.AddConfig("KeyPointIndex", -1);//插入关键点,-1代表在末尾
tlo.AddConfig("KeyPoints","120.218982652,30.211800004,14.7999729766;");//插入的关键点坐标,最后一位必须为;
tlo.AddConfig("ViewObjectMode","0.0,-0.708,20.0");//设置视角对象;视角对象的格式为"水平方位角,垂直俯仰角,视点到关键点距离"
tlo.AddConfig("Velocity", "5.0"); //速度 单位m/s
tlo.AddConfig("Accelerator", "1.0");//加速度 单位m/s,加速度大于0会进行加速行驶
tlo.AddConfig("KeyPointLiftUp", "0.0");//对于关键点抬高
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
}
//*************************************************************************
//3.场景控制关键点编辑:
//*************************************************************************
//EditType代表内部响应器编辑操作,可选值为
//ADD - 添加操作
//SELECT - 拾取操作
//MOVE - 移动操作
//NONE - 关闭响应器操作
//EditObject代表编辑对象
//POINT - 编辑关键点
//PATH - 整体编辑
//开启响应器添加关键点
function AddDynamicPathPoint()
{
var tlo = map.CreateLayerOptions("dynamicpathlayer");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo.AddConfig("EditType", "ADD"); // //将响应器编辑状态改为添加
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
}
//拾取关键点
function SelectDynamicPathPoint()
{
var tlo = map.CreateLayerOptions("dynamicpathlayer");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo.AddConfig("EditType", "SELECT");//将响应器编辑状态改为拾取
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
}
//更新关键点
function UpdateDynamicPathPoint()
{
if(SelectIndex)
{
var selOption = document.getElementById("SelOption");
var tlo = map.CreateLayerOptions("dynamicpathlayer");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo.AddConfig("OperationName", "UpdateKeyPoints");//对关键点进行更新
tlo.AddConfig("KeyPointIndex", SelectIndex); //新增关键点会添加在该序号的点之前,-1代表添加在末尾
tlo.AddConfig("ViewObjectMode","0.0,-0.708,200.0");//设置视角对象;视角对象的格式为"水平方位角,垂直俯仰角,视点到关键点距离"
tlo.AddConfig("Velocity", "15.0"); ///速度 单位m/s
tlo.AddConfig("KeyPointLiftUp", "5.0"); ///对于关键点抬高
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
}
}
//移动拾取的关键点
function MoveDynamicPathPoint()
{
var tlo = map.CreateLayerOptions("dynamicpathlayer");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo.AddConfig("EditType", "MOVE"); //将响应器编辑状态改为移动
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
}
//删除拾取的关键点
function DeleteDynamicPathPoint()
{
if(SelectIndex)
{
var tlo = map.CreateLayerOptions("dynamicpathlayer");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo.AddConfig("OperationName","DeleteKeyPoint"); //设置对关键点的删除
tlo.AddConfig("KeyPointIndex", SelectIndex); //删除对应索引的点
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
SelectIndex=null;
}
}
//整体编辑
function EditPath()
{
var tlo = map.CreateLayerOptions("dynamicpathlayer");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo.AddConfig("EditObject", "PATH"); //编辑对象。 PATH-整体编辑
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
}
//关键点编辑
function EditPoint()
{
var tlo = map.CreateLayerOptions("dynamicpathlayer");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo.AddConfig("EditObject", "POINT"); //编辑对象。 POINT-单个关键点编辑 ,默认值为 POINT
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
}
//关闭路径编辑状态
function CloseDynamicPathResponser()
{
var tlo = map.CreateLayerOptions("dynamicpathlayer");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo.AddConfig("EditType", "NONE");//将响应器编辑状态关闭
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
SelectIndex=null;
}
//*************************************************************************
//4.播放控制:
//*************************************************************************
//切换播放类型
var IsPlayAsKeyPoint=true;
function UpdatePlayAsKeyPoint() {
var tlo = map.CreateLayerOptions("dynamicpathlayer");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
if(IsPlayAsKeyPoint)
{
tlo.AddConfig("PlayAsKeyPoint", "false");//播放类型。true-以关键点参数进行播放;false-以路径参数进行播放
IsPlayAsKeyPoint=false;
alert("当前以路径参数进行播放");
}
else{
tlo.AddConfig("PlayAsKeyPoint", "true");//播放类型。true-以关键点参数进行播放;false-以路径参数进行播放
IsPlayAsKeyPoint=true;
alert("当前以关键点参数进行播放");
}
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
}
//切换跟随移动状态
function UpdateNodeActive(){
if(dynamicPathLayer){
var tlo = map.CreateLayerOptions("dynamicpathlayer");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo.AddConfig("NodeActive", String(bIsFollow = !bIsFollow));//跟随移动状态
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
}else{
alert("图层为空,无法切换");
}
}
//显隐动态路径
function SetVisibleRoamPath(){
if(dynamicPathLayer){
dynamicPathLayer.SetVisible(bIsVisible = !bIsVisible);//修改路径线显隐
}else{
alert("图层为空,无法显隐");
}
}
//播放
function Play(){
if(dynamicPathLayer){
var tlo = map.CreateLayerOptions("dynamicpathlayer");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo.AddConfig("PlayerState", "PLAYER_PLAY");//设置播放状态
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
}else{
alert("图层为空,无法播放!");
}
}
//暂停
function Pause(){
if(dynamicPathLayer){
var tlo = map.CreateLayerOptions("dynamicpathlayer");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo.AddConfig("PlayerState", "PLAYER_PAUSE");//设置播放状态
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
}else{
alert("图层为空,无法暂停!");
}
}
//停止
function Stop(){
if(dynamicPathLayer){
var tlo = map.CreateLayerOptions("dynamicpathlayer");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo.AddConfig("PlayerState", "PLAYER_STOP");//设置播放状态
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
}else{
alert("图层为空,无法停止!");
}
}
//加速
function Accelerate(){//加速,PlayAsKeyPoint必须为false
if(dynamicPathLayer){
speed += 5;
var tlo = map.CreateLayerOptions("dynamicpathlayer");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo.AddConfig("Velocity", String(speed));//速度
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
}else{
alert("图层为空,无法加速!");
}
}
//减速
function SlowDown(){//减速,PlayAsKeyPoint必须为false
if(dynamicPathLayer){
speed -= 5;
if(speed < 0)
{
speed = 1;
}
var tlo = map.CreateLayerOptions("dynamicpathlayer");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo.AddConfig("Velocity", String(speed));//速度
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
}else{
alert("图层为空,无法减速!");
}
}
//恢复速度
function Restore(){//重置速度,PlayAsKeyPoint必须为false
if(dynamicPathLayer){
speed = 15;
var tlo = map.CreateLayerOptions("dynamicpathlayer");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo.AddConfig("Velocity", String(speed));//速度
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
}else{
alert("图层为空,无法恢复速度!");
}
}
//左视 ,PlayAsKeyPoint必须为false
function LeftView() {
var tlo = map.CreateLayerOptions("dynamicpathlayer");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions"); //动态路径配置信息 必须为DynamicPathLayerOptions
tlo.AddConfig("ViewObjectMode", "1.57,-0.708,100.0"); //设置视角对象;视角对象的格式为"水平方位角,垂直俯仰角,视点到关键点距离"
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
}
//右视 ,PlayAsKeyPoint必须为false
function RightView() {
var tlo = map.CreateLayerOptions("dynamicpathlayer");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions"); //动态路径配置信息 必须为DynamicPathLayerOptions
tlo.AddConfig("ViewObjectMode", "4.71,-0.708,100.0");//设置视角对象;视角对象的格式为"水平方位角,垂直俯仰角,视点到关键点距离"
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
}
//前视 ,PlayAsKeyPoint必须为false
function FrontView() {
var tlo = map.CreateLayerOptions("dynamicpathlayer");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions"); //动态路径配置信息 必须为DynamicPathLayerOptions
tlo.AddConfig("ViewObjectMode", "3.14,-0.708,100.0");//设置视角对象;视角对象的格式为"水平方位角,垂直俯仰角,视点到关键点距离"
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
}
//后视 ,PlayAsKeyPoint必须为false
function BackView() {
var tlo = map.CreateLayerOptions("dynamicpathlayer");
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions"); //动态路径配置信息 必须为DynamicPathLayerOptions
tlo.AddConfig("ViewObjectMode", "0,-0.708,100.0");//设置视角对象;视角对象的格式为"水平方位角,垂直俯仰角,视点到关键点距离"
dynamicPathLayer.UpdateLayerOptions(tlo);
}
//上视 ,PlayAsKeyPoint必须为false
function UpView() {
var tlo = map.CreateLayerOptions("dynamicpathlayer");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions"); //动态路径配置信息 必须为DynamicPathLayerOptions
tlo.AddConfig("ViewObjectMode", "0,-1.57,100.0");//设置视角对象;视角对象的格式为"水平方位角,垂直俯仰角,视点到关键点距离"
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
}
C++调用
BaseObjectCOMLib::ILayerObjectPtr dynamicPathLayer;//路径图层
CComboBox m_combo;//关键点索引下拉框对象
long keyPointsindex;//关键点个数
std::string keyPointindex;//关键点索引
bool bIsFindTransformation;//是否鼠标左键获取坐标
std::string SelectIndex;//拾取获取的关键点
bool IsPlayAsKeyPoint;//播放类型控制
bool bIsFollow;//是否跟随移动控制
bool bIsVisible;//路径显隐控制
int mKeyPointIndex;//行驶关键点索引
std::string myPosInput;//关键点坐标
std::string myViewInput;//视角信息
std::string mySpeednput;//速度
std::string myAcceleratorInput;//加速度
std::string myRadiusInput;//差值半径
std::string myLiftUpInput;//关键点抬高
CEdit PosInputEdit;//关键点坐标输入框对象
CEdit ViewInputEdit;//视角信息输入框对象
CEdit SpeedInputEdit;//速度输入框对象
CEdit AcceleratorInpuEdit;//加速度输入框对象
CEdit RadiusInputEdit;//差值半径输入框对象
CEdit LiftUpInputEdit;//关键点抬高输入框对象
//加载路径图层
void Cf4c5DynamicPathDlg::loadDynamicPathLayer(bool bIsModel,bool bIsPreset,std::string gModelDeviceFolderPath,std::string keyPointList)
{
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
tlo->AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//创建配置类型,
if(bIsModel){//模型路径配置配置
tlo->AddConfig("Url", gModelDeviceFolderPath.c_str()); //配置的动画的模型
tlo->AddConfig("NodeXScale", "0.5");//模型x轴缩放大小
tlo->AddConfig("NodeYScale", "0.5");//模型Y轴缩放大小
tlo->AddConfig("NodeZScale", "0.5");//模型Z轴缩放大小
tlo->AddConfig("ModelRoll", "0");//模型x轴旋转量
tlo->AddConfig("ModelPitch", "3.116");//模型Y轴旋转量
tlo->AddConfig("ModelHeading", "0");//模型Z轴旋转量
}
tlo->AddConfig("PlayerMode", "PLAYER_ONEWAY");//播放模式. PLAYER_ONEWAY-播放一次; PLAYER_ONEWAY_LOOP-循环播放; PLAYER_ROUND_LOOP-往返播放; PLAYER_ONEWAY_STAY-实时播放
tlo->AddConfig("PlayerState", "PLAYER_STOP");//播放状态. PLAYER_PLAY-播放; PLAYER_PAUSE-暂停; PLAYER_STOP停止
tlo->AddConfig("ViewObjectMode", "0,-0.2,3");//设置视角对象;视角对象的格式为"水平方位角,垂直俯仰角,视点到关键点距离"
tlo->AddConfig("Velocity", "5");//速度. 单位m/s
tlo->AddConfig("Accelerator", "0.0");//加速度. 单位m/s,加速度大于0会进行加速行驶
tlo->AddConfig("CornerSpeedScale", "0.5");//转角速度比例(0-1之间)
tlo->AddConfig("LineWidth", "2.0");//线宽(0-10)
tlo->AddConfig("LineStipple", "-1");//线样式
tlo->AddConfig("LineColor", "1.0,1.0,0.0,1");//路径线颜色
tlo->AddConfig("Radius", "3.0");//拐弯处平滑半径(圆角)
if(bIsPreset){
tlo->AddConfig("KeyPoints", keyPointList.c_str());//输入关键点列表
}
tlo->AddConfig("InterpLineWidth", "2.0");//差值线线宽
tlo->AddConfig("InterpLineStipple", "500");//差值线线样式
tlo->AddConfig("InterpLineColor", "1.0,1.0,1.0,1.0");//差值线颜色,不需要差值线去掉颜色
tlo->AddConfig("KeyPointLiftUp", "0"); //关键点抬高
tlo->AddConfig("PlayAsKeyPoint", "false");//播放类型。true-以关键点参数进行播放;false-以路径参数进行播放
tlo->AddConfig("IsSwerveControl", "true");//是否弯道减速,需配合CornerSpeedScale来使用
tlo->AddConfig("NodeActive", "true");//跟随移动状态。true-跟随移动;false-不跟随
dynamicPathLayer = map->CreateLayer("DynamicPathLayer", tlo);//创建路径图层
map->AddLayer(dynamicPathLayer);//添加图层
dynamicPathLayer->AddObserver();//添加路径图层监视
}
//设置输入框内容
void Cf4c5DynamicPathDlg::setDynamicPathPoint(std::string KeyPointValue)
{
std::vector<std::string> KeyPoint;
SplitString(KeyPointValue,KeyPoint,":");//分割结果
myPosInput = KeyPoint[1];
myViewInput = KeyPoint[2];
mySpeednput = KeyPoint[3];
myAcceleratorInput = KeyPoint[4];
myRadiusInput = KeyPoint[5];
myLiftUpInput = KeyPoint[6].substr(0, KeyPoint[6].find(";"));
_bstr_t t = myPosInput.c_str();
PosInputEdit.SetWindowText(t);
t = myViewInput.c_str();
ViewInputEdit.SetWindowText(t);
t = mySpeednput.c_str();
SpeedInputEdit.SetWindowText(t);
t = myAcceleratorInput.c_str();
AcceleratorInpuEdit.SetWindowText(t);
t = myRadiusInput.c_str();
RadiusInputEdit.SetWindowText(t);
t = myLiftUpInput.c_str();
LiftUpInputEdit.SetWindowText(t);
}
//创建路径图层
void Cf4c5DynamicPathDlg::OnBnClickedcreatedynamicpathlayer()
{
if(dynamicPathLayer)
{
return;
}
char temp_status[MAX_PATH];
GetPrivateProfileStringA("Path", "ModelDeviceFolderPath", "", temp_status, MAX_PATH, mIniPath.c_str());
std::string ModelPath(temp_status);
loadDynamicPathLayer(TRUE,TRUE, ModelPath, "120.219652381,30.2102796597,14.8471973008;120.219228677,30.2109204111,14.7999731209;120.219066611,30.2109525583,14.7999699935;120.218700324,30.2108002945,14.799943476;120.218728451,30.2106748092,14.7999742515;120.218952979,30.2100989073,14.7999547897;120.219026376,30.2098925768,14.799970909;120.218995824,30.2098632529,14.8299724646;120.218730274,30.2097854181,14.7999352217;");//加载路径图层
}
//创建路径图层(无关键点)
void Cf4c5DynamicPathDlg::OnBnClickedcreatedynamicpathlayernopoint()
{
if(dynamicPathLayer)
{
return;
}
char temp_status[MAX_PATH];
GetPrivateProfileStringA("Path", "ModelDeviceFolderPath", "", temp_status, MAX_PATH, mIniPath.c_str());
std::string ModelPath(temp_status);
loadDynamicPathLayer(TRUE,FALSE, ModelPath, "");//加载路径图层
}
//删除路径图层
void Cf4c5DynamicPathDlg::OnBnClickedRemovedynamicpathlayer()
{
if(!dynamicPathLayer)
{
return;
}
map->RemoveLayer(dynamicPathLayer);//删除图层
keyPointsindex = 0;
myPosInput.clear();
myViewInput.clear();
mySpeednput.clear();
myAcceleratorInput.clear();
myRadiusInput.clear();
myLiftUpInput.clear();
}
//路径序列化
void Cf4c5DynamicPathDlg::OnBnClickedPathserializer()
{
if(!dynamicPathLayer)
{
return;
}
dynamicPathLayer->SerializeLayer("E:\\Test\\path.xml");//序列化路径图层
}
//路径反序列化
void Cf4c5DynamicPathDlg::OnBnClickedPathdeserializer()
{
if(dynamicPathLayer)
{
return;
}
map->DeserializeLayer("E:\\Test\\path.xml");//序列化路径图层
}
//获取关键点索引个数
void Cf4c5DynamicPathDlg::OnBnClickedgetkeypointindex()
{
if(!dynamicPathLayer)
{
return;
}
ConfigOptionsCOMLib::ILayerOptionsPtr opt = dynamicPathLayer->GetLayerResult();
std::string index = opt->GetConfigValueByKey("KeyPointSize");//获取关键点的个数
keyPointsindex = atoi(index.c_str());
}
//获取下拉框内容
void Cf4c5DynamicPathDlg::OnCbnSetfocusCombo1()
{
m_combo.ResetContent();//清空下拉框
CString str;
for (long i = 0; i < keyPointsindex; ++i)
{
str.Format(_T("%d"),i);
m_combo.AddString(str);
}
m_combo.SetCurSel(-1);
}
//获取关键点索引
void Cf4c5DynamicPathDlg::OnCbnSelchangeCombo1()
{
CString m_paramname;
m_combo.GetLBText(m_combo.GetCurSel(),m_paramname);
keyPointindex = CT2A(m_paramname.GetBuffer());
}
//获取参数
void Cf4c5DynamicPathDlg::OnBnClickedFinddynamicpathpointbyindex()
{
if(!dynamicPathLayer)
{
return;
}
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
tlo->AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo->AddConfig("OperationName","GetKeyPoint");//更新操作类型
tlo->AddConfig("KeyPointIndex", keyPointindex.c_str());//将对应关键点的索引传入
dynamicPathLayer->UpdateLayerOptions(tlo);//更新路径漫游
ConfigOptionsCOMLib::ILayerOptionsPtr opt = dynamicPathLayer->GetLayerResult();
std::string KeyPointValue = opt->GetConfigValueByKey("CurrentKeyPoint");//获取索引对应的关键点信息
setDynamicPathPoint(KeyPointValue);
}
//是否鼠标左键获取坐标
void Cf4c5DynamicPathDlg::OnBnClickedFindtransformation()
{
bIsFindTransformation=!bIsFindTransformation;
}
//插入关键点
void Cf4c5DynamicPathDlg::OnBnClickedAdddynamicpathpointbyindex()
{
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
tlo->AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo->AddConfig("OperationName","InsertKeyPoints"); //插入关键点
tlo->AddConfig("KeyPointIndex", keyPointindex.c_str()); //新增关键点会添加在该序号的点之前,-1代表添加在末尾
if(!myPosInput.empty())//如果未设置坐标参数,则不更新
{
std::string myPosInput1 = myPosInput+";";
tlo->AddConfig("KeyPoints",myPosInput1.c_str());//插入的关键点坐标,最后一位必须为;
}
else
{
return;
}
//可设关键点自身参数,如果不设置,则默认使用图层参数
if(!myViewInput.empty())//如果设置了参数
{
tlo->AddConfig("ViewObjectMode",myViewInput.c_str());//设置视角
}
if(!mySpeednput.empty())//如果设置了参数
{
tlo->AddConfig("Velocity", mySpeednput.c_str());//速度 单位m/s
}
if(!myAcceleratorInput.empty())//如果设置了参数
{
tlo->AddConfig("Accelerator", myAcceleratorInput.c_str());//加速度 单位m/s,加速度大于0会进行加速行驶
}
if(!myRadiusInput.empty())//如果设置了参数
{
tlo->AddConfig("Radius", myRadiusInput.c_str());//拐弯处平滑半径(圆角)
}
if(!myLiftUpInput.empty())//如果设置了参数
{
tlo->AddConfig("KeyPointLiftUp", myLiftUpInput.c_str());//对于关键点抬高
}
dynamicPathLayer->UpdateLayerOptions(tlo);//更新路径漫游
}
//更换对应索引的关键点参数
void Cf4c5DynamicPathDlg::OnBnClickedUpdatedynamicpathpointbyindex()
{
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
tlo->AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo->AddConfig("OperationName","UpdateKeyPoints"); //更新关键点
tlo->AddConfig("KeyPointIndex", keyPointindex.c_str());
//可设关键点自身参数,如果不设置,则默认使用图层参数
if(!myViewInput.empty())//如果设置了参数
{
tlo->AddConfig("ViewObjectMode",myViewInput.c_str());//设置视角
}
if(!mySpeednput.empty())//如果设置了参数
{
tlo->AddConfig("Velocity", mySpeednput.c_str());//速度 单位m/s
}
if(!myAcceleratorInput.empty())//如果设置了参数
{
tlo->AddConfig("Accelerator", myAcceleratorInput.c_str());//加速度 单位m/s,加速度大于0会进行加速行驶
}
if(!myRadiusInput.empty())//如果设置了参数
{
tlo->AddConfig("Radius", myRadiusInput.c_str());//拐弯处平滑半径(圆角)
}
if(!myLiftUpInput.empty())//如果设置了参数
{
tlo->AddConfig("KeyPointLiftUp", myLiftUpInput.c_str());//对于关键点抬高
}
dynamicPathLayer->UpdateLayerOptions(tlo);//更新路径漫游
}
//删除对应索引的关键点
void Cf4c5DynamicPathDlg::OnBnClickedDeletedynamicpathpointbyindex()
{
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
tlo->AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo->AddConfig("OperationName","DeleteKeyPoint"); //删除关键点
tlo->AddConfig("KeyPointIndex", keyPointindex.c_str());
dynamicPathLayer->UpdateLayerOptions(tlo);//更新路径漫游
}
//末尾追加关键点,以下配置要对添加的关键点生效,PlayAsKeyPoint必须为true
void Cf4c5DynamicPathDlg::OnBnClickedLoaddynamicpathpoint()
{
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
tlo->AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo->AddConfig("OperationName","InsertKeyPoints");//插入关键点
tlo->AddConfig("KeyPointIndex", "-1");//插入关键点,-1代表在末尾
tlo->AddConfig("KeyPoints","120.218982652,30.211800004,14.7999729766;");//插入的关键点坐标,最后一位必须为;
tlo->AddConfig("ViewObjectMode","0.0,-0.708,20.0");//设置视角对象;视角对象的格式为"水平方位角,垂直俯仰角,视点到关键点距离"
tlo->AddConfig("Velocity", "5.0"); //速度 单位m/s
tlo->AddConfig("Accelerator", "1.0");//加速度 单位m/s,加速度大于0会进行加速行驶
tlo->AddConfig("KeyPointLiftUp", "0.0");//对于关键点抬高
dynamicPathLayer->UpdateLayerOptions(tlo);//更新路径漫游
}
//*************************************************************************
//场景控制关键点编辑:
//*************************************************************************
//EditType代表内部响应器编辑操作,可选值为
//ADD - 添加操作
//SELECT - 拾取操作
//MOVE - 移动操作
//NONE - 关闭响应器操作
//EditObject代表编辑对象
//POINT - 编辑关键点
//PATH - 整体编辑
//开启响应器添加关键点
void Cf4c5DynamicPathDlg::OnBnClickedAdddynamicpathpoint()
{
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
tlo->AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo->AddConfig("EditType", "ADD"); // //将响应器编辑状态改为添加
dynamicPathLayer->UpdateLayerOptions(tlo);//更新路径漫游
}
//拾取关键点
void Cf4c5DynamicPathDlg::OnBnClickedSelectdynamicpathpoint()
{
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
tlo->AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo->AddConfig("EditType", "SELECT"); //将响应器编辑状态改为拾取
dynamicPathLayer->UpdateLayerOptions(tlo);//更新路径漫游
}
//更新关键点
void Cf4c5DynamicPathDlg::OnBnClickedUpdatedynamicpathpoint()
{
if(SelectIndex.empty())
{
return;
}
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
tlo->AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo->AddConfig("OperationName", "UpdateKeyPoints");//对关键点进行更新
tlo->AddConfig("KeyPointIndex", SelectIndex.c_str()); //新增关键点会添加在该序号的点之前,-1代表添加在末尾
tlo->AddConfig("ViewObjectMode","0.0,-0.708,200.0");//设置视角对象;视角对象的格式为"水平方位角,垂直俯仰角,视点到关键点距离"
tlo->AddConfig("Velocity", "15.0"); ///速度 单位m/s
tlo->AddConfig("KeyPointLiftUp", "5.0"); ///对于关键点抬高
dynamicPathLayer->UpdateLayerOptions(tlo);//更新路径漫游
}
//移动拾取的关键点
void Cf4c5DynamicPathDlg::OnBnClickedMovedynamicpathpoint()
{
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
tlo->AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo->AddConfig("EditType", "MOVE"); //将响应器编辑状态改为移动
dynamicPathLayer->UpdateLayerOptions(tlo);//更新路径漫游
}
//删除拾取的关键点
void Cf4c5DynamicPathDlg::OnBnClickedDeletedynamicpathpoint()
{
if(SelectIndex.empty())
{
return;
}
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
tlo->AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo->AddConfig("OperationName","DeleteKeyPoint"); //设置对关键点的删除
tlo->AddConfig("KeyPointIndex", SelectIndex.c_str()); //删除对应索引的点
dynamicPathLayer->UpdateLayerOptions(tlo);//更新路径漫游
SelectIndex.clear();
}
//整体编辑
void Cf4c5DynamicPathDlg::OnBnClickedEditpath()
{
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
tlo->AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo->AddConfig("EditObject", "PATH"); //编辑对象。 PATH-整体编辑
dynamicPathLayer->UpdateLayerOptions(tlo);//更新路径漫游
}
//关键点编辑
void Cf4c5DynamicPathDlg::OnBnClickedEditpoint()
{
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
tlo->AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo->AddConfig("EditObject", "POINT"); //编辑对象。 POINT-单个关键点编辑,默认值为 POINT
dynamicPathLayer->UpdateLayerOptions(tlo);//更新路径漫游
}
//关闭路径编辑状态
void Cf4c5DynamicPathDlg::OnBnClickedClosedynamicpathresponser()
{
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
tlo->AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo->AddConfig("EditType", "NONE");//将响应器编辑状态关闭
dynamicPathLayer->UpdateLayerOptions(tlo);//更新路径漫游
SelectIndex.clear();
}
//*************************************************************************
//4.播放控制:
//*************************************************************************
//切换播放类型
void Cf4c5DynamicPathDlg::OnBnClickedUpdateplayaskeypoint()
{
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
tlo->AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
if(IsPlayAsKeyPoint)
{
tlo->AddConfig("PlayAsKeyPoint", "false");//播放类型。true-以关键点参数进行播放;false-以路径参数进行播放
IsPlayAsKeyPoint = FALSE;
}
else{
tlo->AddConfig("PlayAsKeyPoint", "true");//播放类型。true-以关键点参数进行播放;false-以路径参数进行播放
IsPlayAsKeyPoint = TRUE;
}
dynamicPathLayer->UpdateLayerOptions(tlo);//更新路径漫游
}
//切换跟随移动状态
void Cf4c5DynamicPathDlg::OnBnClickedUpdatenodeactive()
{
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
tlo->AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
if(IsPlayAsKeyPoint)
{
tlo->AddConfig("NodeActive", "false");//跟随移动状态
IsPlayAsKeyPoint = FALSE;
}
else{
tlo->AddConfig("NodeActive", "true");//跟随移动状态
IsPlayAsKeyPoint = TRUE;
}
dynamicPathLayer->UpdateLayerOptions(tlo);//更新路径漫游
}
//显隐动态路径
void Cf4c5DynamicPathDlg::OnBnClickedSetvisibleroampath()
{
dynamicPathLayer->SetVisible(bIsVisible = !bIsVisible);//修改路径线显隐
}
//播放
void Cf4c5DynamicPathDlg::OnBnClickedPlay()
{
if(!dynamicPathLayer)
{
return;
}
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
tlo->AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo->AddConfig("PlayerState", "PLAYER_PLAY");//设置播放状态
dynamicPathLayer->UpdateLayerOptions(tlo);//更新路径漫游
}
//暂停
void Cf4c5DynamicPathDlg::OnBnClickedPause()
{
if(!dynamicPathLayer)
{
return;
}
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
tlo->AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo->AddConfig("PlayerState", "PLAYER_PAUSE");//设置播放状态
dynamicPathLayer->UpdateLayerOptions(tlo);//更新路径漫游
}
//停止
void Cf4c5DynamicPathDlg::OnBnClickedStop()
{
if(!dynamicPathLayer)
{
return;
}
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
tlo->AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo->AddConfig("PlayerState", "PLAYER_STOP");//设置播放状态
dynamicPathLayer->UpdateLayerOptions(tlo);//更新路径漫游
}
//加速
void Cf4c5DynamicPathDlg::OnBnClickedAccelerate()
{
if(!dynamicPathLayer)
{
return;
}
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
tlo->AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo->AddConfig("Velocity", "30");//速度
dynamicPathLayer->UpdateLayerOptions(tlo);//更新路径漫游
}
//减速
void Cf4c5DynamicPathDlg::OnBnClickedSlowdown()
{
if(!dynamicPathLayer)
{
return;
}
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
tlo->AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo->AddConfig("Velocity", "5");//速度
dynamicPathLayer->UpdateLayerOptions(tlo);//更新路径漫游
}
//恢复速度
void Cf4c5DynamicPathDlg::OnBnClickedRestore()
{
if(!dynamicPathLayer)
{
return;
}
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
tlo->AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo->AddConfig("Velocity", "15");//速度
dynamicPathLayer->UpdateLayerOptions(tlo);//更新路径漫游
}
//左视 ,PlayAsKeyPoint必须为false
void Cf4c5DynamicPathDlg::OnBnClickedLeftview()
{
if(!dynamicPathLayer)
{
return;
}
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
tlo->AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo->AddConfig("ViewObjectMode", "1.57,-0.708,100.0"); //设置视角对象;视角对象的格式为"水平方位角,垂直俯仰角,视点到关键点距离"
dynamicPathLayer->UpdateLayerOptions(tlo);//更新路径漫游
}
//右视 ,PlayAsKeyPoint必须为false
void Cf4c5DynamicPathDlg::OnBnClickedRightview()
{
if(!dynamicPathLayer)
{
return;
}
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
tlo->AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo->AddConfig("ViewObjectMode", "4.71,-0.708,100.0"); //设置视角对象;视角对象的格式为"水平方位角,垂直俯仰角,视点到关键点距离"
dynamicPathLayer->UpdateLayerOptions(tlo);//更新路径漫游
}
//上视 ,PlayAsKeyPoint必须为false
void Cf4c5DynamicPathDlg::OnBnClickedUpview()
{
if(dynamicPathLayer)
{
return;
}
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
tlo->AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo->AddConfig("ViewObjectMode", "0,-1.57,100.0"); //设置视角对象;视角对象的格式为"水平方位角,垂直俯仰角,视点到关键点距离"
dynamicPathLayer->UpdateLayerOptions(tlo);//更新路径漫游
}
//前视 ,PlayAsKeyPoint必须为false
void Cf4c5DynamicPathDlg::OnBnClickedFrontview()
{
if(!dynamicPathLayer)
{
return;
}
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
tlo->AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo->AddConfig("ViewObjectMode", "3.14,-0.708,100.0"); //设置视角对象;视角对象的格式为"水平方位角,垂直俯仰角,视点到关键点距离"
dynamicPathLayer->UpdateLayerOptions(tlo);//更新路径漫游
}
//后视 ,PlayAsKeyPoint必须为false
void Cf4c5DynamicPathDlg::OnBnClickedBackview()
{
if(!dynamicPathLayer)
{
return;
}
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
tlo->AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo->AddConfig("ViewObjectMode", "3.14,-0.708,100.0"); //设置视角对象;视角对象的格式为"水平方位角,垂直俯仰角,视点到关键点距离"
dynamicPathLayer->UpdateLayerOptions(tlo);//更新路径漫游
}
//路径图层回调
void Cf4c5DynamicPathDlg::FireOnLayerNotifyVpsdkctrl1(long layerId, long layerType)
{
ConfigOptionsCOMLib::ILayerOptionsPtr opt = dynamicPathLayer->GetLayerResult();//获取图层结果
SelectIndex = opt->GetConfigValueByKey("CurrentKeyPointIndex"); //获取拾取的关键点索引
std::string DataSourceTypeName = opt->GetConfigValueByKey("DataSourceTypeName");
//非播放中事件
if((DataSourceTypeName == "dynamicpath") && (layerType == 2))
{
std::string mEditState = opt->GetConfigValueByKey("EditState");///编辑状态,Insert:插入;Update:更新;Get:获取;Load:导入;Delete:删除;Down:完成;
std::string mKeyPointsGeo = opt->GetConfigValueByKey("KeyPointsGeo");//关键点坐标
//关键点信息(包含参数),参数以":"划分,格式如下
//类型:x坐标,y坐标,z坐标:方位角,俯仰角,视距:速度:加速度:插值半径:抬高;
std::string mKeyPoints = opt->GetConfigValueByKey("KeyPoints");
}
//播放中事件
if((DataSourceTypeName == "dynamicpath") && (layerType == 3))
{
std::string mCurrentLinearPos = opt->GetConfigValueByKey("CurrentLinearPos");//当前路径行驶的位置
std::string mPassKeyPointIndex = opt->GetConfigValueByKey("PassKeyPointIndex");//已通过的关键点索引
std::string mIsPlayForward = opt->GetConfigValueByKey("IsPlayForward");//是否为正向行驶
std::string mRealTimePositionGeo = opt->GetConfigValueByKey("RealTimePositionGeo"); //路径行驶的实时位置(经纬-高程)
std::string mPlayState = opt->GetConfigValueByKey("PlayState");//播放状态
int iPassIndex = atoi(mPassKeyPointIndex.c_str());
if(iPassIndex==0)
{
mKeyPointIndex=1;
}
//路径播放中返回
if(iPassIndex==mKeyPointIndex)
{
mKeyPointIndex++;
std::cout << "当前行驶到第" << mPassKeyPointIndex.c_str() << "个关键点.\n是否为正向:" << mIsPlayForward.c_str() <<
";实时位置坐标:" << mRealTimePositionGeo.c_str() << std::endl;
}
}
}
void Cf4c5DynamicPathDlg::FireOnLButtonUpVpsdkctrl1(short xPos, short yPos)
{
CoordinateSystemCOMLib::ITransformatePtr transformate = map->CreateTransformation();
BaseObjectCOMLib::IPositionPtr destPos = transformate->ScreenPosToWorldPos(xPos, yPos);//将屏幕坐标点转换成经纬度坐标
if(bIsFindTransformation)
{
std::stringstream streamX,streamY,streamZ;
streamX << destPos->GetX();
streamY << destPos->GetY();;
streamZ << destPos->GetZ();
myPosInput = streamX.str() + "," + streamY.str() + "," + streamZ.str() + ";";
_bstr_t t = myPosInput.c_str();
PosInputEdit.SetWindowText(t);
}
}
void Cf4c5DynamicPathDlg::SplitString(const std::string& s,std::vector<std::string>& v,const std::string& c)
{
std::string::size_type pos1,pos2;
pos2 = s.find(c);
pos1 = 0;
while(std::string::npos !=pos2)
{
v.push_back(s.substr(pos1,pos2-pos1));
pos1 = pos2 + c.size();
pos2= s.find(c,pos1);
}
if(pos1 !=s.length())
{
v.push_back(s.substr(pos1));
}
}
C#调用
ILayerObject dynamicPathLayer;//路径图层
string SelectIndex;
int mKeyPointIndex = 0;
double speed = 30;
string gModelDeviceFolderPath = "E:\data\LocalData\Other\models";
private void axVPSDKCtrl1_FireOnLayerNotify(object sender, AxSDKCtrlLib._IVPSDKCtrlEvents_FireOnLayerNotifyEvent e)
{
var opt = dynamicPathLayer.GetLayerResult();
SelectIndex = opt.GetConfigValueByKey("CurrentKeyPointIndex"); //获取拾取的关键点索引
if ((opt.GetConfigValueByKey("DataSourceTypeName") == "dynamicpath") && (e.layerType == 2))
{
var mEditState = opt.GetConfigValueByKey("EditState");//编辑状态,Insert:插入;Update:更新;Get:获取;Load:导入;Delete:删除;Down:完成;
var mKeyPointsGeo = opt.GetConfigValueByKey("KeyPointsGeo");//关键点坐标
//关键点信息(包含参数),参数以":"划分,格式如下
//类型:x坐标,y坐标,z坐标:方位角,俯仰角,视距:速度:加速度:插值半径:抬高;
var mKeyPoints = opt.GetConfigValueByKey("KeyPoints");
MessageBox.Show("关键点坐标:" + mKeyPointsGeo + "; 关键点信息:" + mKeyPoints + ";编辑状态:" + mEditState);
}
//播放中事件
if ((opt.GetConfigValueByKey("DataSourceTypeName") == "dynamicpath") && (e.layerType == 3))
{
string mCurrentLinearPos = opt.GetConfigValueByKey("CurrentLinearPos");//当前路径行驶的位置
string mPassKeyPointIndex = opt.GetConfigValueByKey("PassKeyPointIndex");//已通过的关键点索引
string mIsPlayForward = opt.GetConfigValueByKey("IsPlayForward");//是否为正向行驶
string mRealTimePositionGeo = opt.GetConfigValueByKey("RealTimePositionGeo"); //路径行驶的实时位置(经纬-高程)
string mPlayState = opt.GetConfigValueByKey("PlayState");//播放状态
if (mPassKeyPointIndex == "0")
{
mKeyPointIndex = 1;
}
//路径播放中返回
if (mPassKeyPointIndex == mKeyPointIndex.ToString())
{
mKeyPointIndex++;
MessageBox.Show("当前行驶到第" + mPassKeyPointIndex + "个关键点" + "\n行驶位置:" + mCurrentLinearPos + ";是否为正向:" + mIsPlayForward + ";实时位置坐标:" + mRealTimePositionGeo);
}
}
}
//*************************************************************************
//1.图层对象操作
//*************************************************************************
//创建动态路径图层
private void createDynamicPathLayer_Click(object sender, EventArgs e)
{
if (dynamicPathLayer == null)
{
var tlo = map.CreateLayerOptions("");//创建路径动画图层配置,给配置起个名称,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//创建配置类型,
tlo.AddConfig("Url", gModelDeviceFolderPath+"/car.wrl"); //配置的动画的模型
tlo.AddConfig("NodeXScale", "0.5");//模型x轴缩放大小
tlo.AddConfig("NodeYScale", "0.5");//模型Y轴缩放大小
tlo.AddConfig("NodeZScale", "0.5");//模型Z轴缩放大小
tlo.AddConfig("ModelRoll", "0");//模型x轴旋转量
tlo.AddConfig("ModelPitch", "3.116");//模型Y轴旋转量
tlo.AddConfig("ModelHeading", "0");//模型Z轴旋转量
tlo.AddConfig("PlayerMode", "PLAYER_ONEWAY");//播放模式. PLAYER_ONEWAY-播放一次; PLAYER_ONEWAY_LOOP-循环播放; PLAYER_ROUND_LOOP-往返播放; PLAYER_ONEWAY_STAY-实时播放
tlo.AddConfig("PlayerState", "PLAYER_STOP");//播放状态. PLAYER_PLAY-播放; PLAYER_PAUSE-暂停; PLAYER_STOP停止
tlo.AddConfig("ViewObjectMode", "0,0,1");//设置视角对象;视角对象的格式为"水平方位角,垂直俯仰角,视点到关键点距离"
tlo.AddConfig("Velocity","30");//速度. 单位m/s
tlo.AddConfig("Accelerator", "0.0");//加速度. 单位m/s,加速度大于0会进行加速行驶
tlo.AddConfig("CornerSpeedScale", "0.5");//转角速度比例(0-1之间)
tlo.AddConfig("LineWidth", "2.0");//线宽(0-10)
tlo.AddConfig("LineStipple", "-1");//线样式
tlo.AddConfig("LineColor", "1.0,1.0,0.0,1");//路径线颜色
tlo.AddConfig("Radius", "3.0");//拐弯处平滑半径(圆角)
tlo.AddConfig("KeyPoints", "120.219652381,30.2102796597,14.8471973008;120.219228677,30.2109204111,14.7999731209;120.219066611,30.2109525583,14.7999699935;120.218700324,30.2108002945,14.799943476;120.218728451,30.2106748092,14.7999742515;120.218952979,30.2100989073,14.7999547897;120.219026376,30.2098925768,14.799970909;120.218995824,30.2098632529,14.8299724646;120.218730274,30.2097854181,14.7999352217;");//输入关键点列表
tlo.AddConfig("InterpLineWidth", "2.0");//差值线线宽
tlo.AddConfig("InterpLineStipple", "500");//差值线线样式
tlo.AddConfig("InterpLineColor", "1.0,1.0,1.0,1.0");//差值线颜色,不需要差值线去掉颜色
tlo.AddConfig("KeyPointLiftUp", "0"); //关键点抬高
tlo.AddConfig("PlayAsKeyPoint", "false");//播放类型。true-以关键点参数进行播放;false-以路径参数进行播放
tlo.AddConfig("IsSwerveControl", "true");//是否弯道减速,需配合CornerSpeedScale来使用
tlo.AddConfig("NodeActive", "true");//跟随移动状态。true-跟随移动;false-不跟随
dynamicPathLayer = map.CreateLayer("DynamicPathLayer", tlo);//创建路径图层
map.AddLayer(dynamicPathLayer);//添加图层
dynamicPathLayer.AddObserver();//添加路径图层监视
}
else
{
MessageBox.Show("图层已创建,请勿重复创建!");
}
}
//创建动态路径图层无关键点
private void createDynamicPathLayerNoPoint_Click(object sender, EventArgs e)
{
if (dynamicPathLayer == null)
{
var tlo = map.CreateLayerOptions("");//创建路径动画图层配置,给配置起个名称,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//创建配置类型,
tlo.AddConfig("Url", "http://192.168.1.50:8088/files/car.wrl"); //配置的动画的模型
tlo.AddConfig("NodeXScale", "0.5");//模型x轴缩放大小
tlo.AddConfig("NodeYScale", "0.5");//模型Y轴缩放大小
tlo.AddConfig("NodeZScale", "0.5");//模型Z轴缩放大小
tlo.AddConfig("ModelRoll", "0");//模型x轴旋转量
tlo.AddConfig("ModelPitch", "3.116");//模型Y轴旋转量
tlo.AddConfig("ModelHeading", "0");//模型Z轴旋转量
tlo.AddConfig("PlayerMode", "PLAYER_ONEWAY");//播放模式. PLAYER_ONEWAY-播放一次; PLAYER_ONEWAY_LOOP-循环播放; PLAYER_ROUND_LOOP-往返播放; PLAYER_ONEWAY_STAY-实时播放
tlo.AddConfig("PlayerState", "PLAYER_STOP");//播放状态. PLAYER_PLAY-播放; PLAYER_PAUSE-暂停; PLAYER_STOP停止
tlo.AddConfig("ViewObjectMode", "0,0,1");//设置视角对象;视角对象的格式为"水平方位角,垂直俯仰角,视点到关键点距离"
tlo.AddConfig("Velocity", "30");//速度. 单位m/s
tlo.AddConfig("Accelerator", "0.0");//加速度. 单位m/s,加速度大于0会进行加速行驶
tlo.AddConfig("CornerSpeedScale", "0.5");//转角速度比例(0-1之间)
tlo.AddConfig("LineWidth", "2.0");//线宽(0-10)
tlo.AddConfig("LineStipple", "-1");//线样式
tlo.AddConfig("LineColor", "1.0,1.0,0.0,1");//路径线颜色
tlo.AddConfig("Radius", "3.0");//拐弯处平滑半径(圆角)
tlo.AddConfig("InterpLineWidth", "2.0");//差值线线宽
tlo.AddConfig("InterpLineStipple", "500");//差值线线样式
tlo.AddConfig("InterpLineColor", "1.0,1.0,1.0,1.0");//差值线颜色,不需要差值线去掉颜色
tlo.AddConfig("KeyPointLiftUp", "0"); //关键点抬高
tlo.AddConfig("PlayAsKeyPoint", "false");//播放类型。true-以关键点参数进行播放;false-以路径参数进行播放
tlo.AddConfig("IsSwerveControl", "true");//是否弯道减速,需配合CornerSpeedScale来使用
tlo.AddConfig("NodeActive", "true");//跟随移动状态。true-跟随移动;false-不跟随
dynamicPathLayer = map.CreateLayer("DynamicPathLayer", tlo);//创建路径图层
map.AddLayer(dynamicPathLayer);//添加图层
dynamicPathLayer.AddObserver();//添加路径图层监视
}
else
{
MessageBox.Show("图层已创建,请勿重复创建!");
}
}
//删除动态路径图层
private void RemoveDynamicPathLayer_Click(object sender, EventArgs e)
{
if (dynamicPathLayer!=null)
{
map.RemoveLayer(dynamicPathLayer);//移除图层
dynamicPathLayer = null;
}
else
{
MessageBox.Show("图层为空,无需移除!");
}
}
//路径序列化
private void PathSerializer_Click(object sender, EventArgs e)
{
dynamicPathLayer.SerializeLayer("E:\\Test\\path.xml");//序列化路径图层
}
//路径反序列化
private void PathDeserializer_Click(object sender, EventArgs e)
{
dynamicPathLayer = map.DeserializeLayer("E:\\Test\\path.xml");//反序列化路径图层
}
//*************************************************************************
//2.关键点编辑
//*************************************************************************
//OperationName代表对关键点的更新操作类型,可选值为
//InsertKeyPoints - 插入关键点
//UpdateKeyPoints - 更新关键点
//GetKeyPoint - 获取关键点
//DeleteKeyPoint - 删除关键点
//获取关键点索引
private void AddOption_Click(object sender, EventArgs e)
{
comboBox1.Items.Clear();
var opt = dynamicPathLayer.GetLayerResult();
var index = opt.GetConfigValueByKey("KeyPointSize");//获取关键点的个数
for (int i = 0; i < Convert.ToInt32(index); ++i)
{
comboBox1.Items.Add(i.ToString());
}
}
//获取对应索引的关键点信息
private void FindDynamicPathPointByIndex_Click(object sender, EventArgs e)
{
Console.WriteLine("Text:" + comboBox1.SelectedItem.ToString());
if (dynamicPathLayer!=null)
{
var tlo = map.CreateLayerOptions("");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo.AddConfig("OperationName", "GetKeyPoint");//更新操作类型
tlo.AddConfig("KeyPointIndex", comboBox1.SelectedItem.ToString());//将对应关键点的索引传入
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
var opt = dynamicPathLayer.GetLayerResult();//获取图层结果
var KeyPointValue = opt.GetConfigValueByKey("CurrentKeyPoint");//获取索引对应的关键点信息
var KeyPoint = KeyPointValue.Split(':');//将获取的信息以:划分
textBox1.Text = KeyPoint[1];
textBox2.Text = KeyPoint[2];
textBox3.Text = KeyPoint[3];
textBox4.Text = KeyPoint[4];
textBox5.Text = KeyPoint[5];
textBox6.Text = KeyPoint[6].Substring(0, KeyPoint[6].IndexOf(";"));
}
else
{
MessageBox.Show("图层为空,获取信息失败!");
}
}
//开关鼠标获取坐标信息
bool bIsFindTransformation = false;
private void FindTransformation_Click(object sender, EventArgs e)
{
bIsFindTransformation = !bIsFindTransformation;
}
//在对应索引的点前增加关键点
private void AddDynamicPathPointByIndex_Click(object sender, EventArgs e)
{
Console.WriteLine("Text:" + comboBox1.SelectedItem.ToString());
var tlo = map.CreateLayerOptions("");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo.AddConfig("OperationName", "InsertKeyPoints"); //插入关键点
tlo.AddConfig("KeyPointIndex", comboBox1.SelectedItem.ToString()); //新增关键点会添加在该序号的点之前,-1代表添加在末尾
if (textBox1.Text!=null)//如果未设置坐标参数,则不更新
{
tlo.AddConfig("KeyPoints", textBox1.Text + ";");//插入的关键点坐标,最后一位必须为;
}
else
{
return;
}
//可设关键点自身参数,如果不设置,则默认使用图层参数
if (textBox2.Text!=null)//如果设置了参数
{
tlo.AddConfig("ViewObjectMode", textBox2.Text);//设置视角
}
if (textBox3.Text != null)//如果设置了参数
{
tlo.AddConfig("Velocity", textBox3.Text);//速度 单位m/s
}
if (textBox4.Text!=null)//如果设置了参数
{
tlo.AddConfig("Accelerator", textBox4.Text);//加速度 单位m/s,加速度大于0会进行加速行驶
}
if (textBox5.Text != null)//如果设置了参数
{
tlo.AddConfig("Radius", textBox5.Text);//拐弯处平滑半径(圆角)
}
if (textBox6.Text != null)//如果设置了参数
{
tlo.AddConfig("KeyPointLiftUp", textBox6.Text);//对于关键点抬高
}
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
}
//更换对应索引的关键点参数
private void UpdateDynamicPathPointByIndex_Click(object sender, EventArgs e)
{
Console.WriteLine("Text:" + comboBox1.SelectedItem.ToString());
var tlo = map.CreateLayerOptions("");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo.AddConfig("OperationName", "UpdateKeyPoints");//对关键点进行更新
tlo.AddConfig("KeyPointIndex", comboBox1.SelectedItem.ToString()); //更新对应索引的关键点
//可设关键点自身参数,如果不设置,则默认使用图层参数
if (textBox2.Text != null)//如果设置了参数
{
tlo.AddConfig("ViewObjectMode", textBox2.Text);//设置视角
}
if (textBox3.Text != null)//如果设置了参数
{
tlo.AddConfig("Velocity", textBox3.Text);//速度 单位m/s
}
if (textBox4.Text != null)//如果设置了参数
{
tlo.AddConfig("Accelerator", textBox4.Text);//加速度 单位m/s,加速度大于0会进行加速行驶
}
if (textBox5.Text != null)//如果设置了参数
{
tlo.AddConfig("Radius", textBox5.Text);//拐弯处平滑半径(圆角)
}
if (textBox6.Text != null)//如果设置了参数
{
tlo.AddConfig("KeyPointLiftUp", textBox6.Text);//对于关键点抬高
}
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
}
//删除对应索引的关键点
private void DeleteDynamicPathPointByIndex_Click(object sender, EventArgs e)
{
Console.WriteLine("Text:" + comboBox1.SelectedItem.ToString());
var tlo = map.CreateLayerOptions("");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo.AddConfig("OperationName", "DeleteKeyPoint");//删除关键点
tlo.AddConfig("KeyPointIndex", comboBox1.SelectedItem.ToString());//删除该索引的关键点
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
}
//末尾追加关键点,以下配置要对添加的关键点生效,PlayAsKeyPoint必须为true
private void LoadDynamicPathPoint_Click(object sender, EventArgs e)
{
var tlo = map.CreateLayerOptions("dynamicpathlayer");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo.AddConfig("OperationName", "InsertKeyPoints");//插入关键点
tlo.AddConfig("KeyPointIndex", "-1");//插入关键点,-1代表在末尾
tlo.AddConfig("KeyPoints", "120.218982652,30.211800004,14.7999729766;");//插入的关键点坐标,最后一位必须为;
tlo.AddConfig("ViewObjectMode", "0.0,-0.708,20.0");//设置视角对象;视角对象的格式为"水平方位角,垂直俯仰角,视点到关键点距离"
tlo.AddConfig("Velocity", "5.0"); //速度 单位m/s
tlo.AddConfig("Accelerator", "1.0");//加速度 单位m/s,加速度大于0会进行加速行驶
tlo.AddConfig("KeyPointLiftUp", "0.0");//对于关键点抬高
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
}
//*************************************************************************
//3.场景控制关键点编辑:
//*************************************************************************
//EditType代表内部响应器编辑操作,可选值为
//ADD - 添加操作
//SELECT - 拾取操作
//MOVE - 移动操作
//NONE - 关闭响应器操作
//EditObject代表编辑对象
//POINT - 编辑关键点
//PATH - 整体编辑
//开启响应器添加关键点
private void AddDynamicPathPoint_Click(object sender, EventArgs e)
{
var tlo = map.CreateLayerOptions("");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo.AddConfig("EditType", "ADD"); // //将响应器编辑状态改为添加
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
}
//拾取关键点
private void SelectDynamicPathPoint_Click(object sender, EventArgs e)
{
var tlo = map.CreateLayerOptions("");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo.AddConfig("EditType", "SELECT");//将响应器编辑状态改为拾取
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
}
//更新关键点
private void UpdateDynamicPathPoint_Click(object sender, EventArgs e)
{
if (SelectIndex !=null)
{
var tlo = map.CreateLayerOptions("dynamicpathlayer");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo.AddConfig("OperationName", "UpdateKeyPoints");//对关键点进行更新
tlo.AddConfig("KeyPointIndex", SelectIndex); //新增关键点会添加在该序号的点之前,-1代表添加在末尾
tlo.AddConfig("ViewObjectMode", "0.0,-0.708,200.0");//设置视角对象;视角对象的格式为"水平方位角,垂直俯仰角,视点到关键点距离"
tlo.AddConfig("Velocity", "15.0"); ///速度 单位m/s
tlo.AddConfig("KeyPointLiftUp", "5.0"); ///对于关键点抬高
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
}
}
//移动拾取的关键点
private void MoveDynamicPathPoint_Click(object sender, EventArgs e)
{
var tlo = map.CreateLayerOptions("dynamicpathlayer");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo.AddConfig("EditType", "MOVE"); //将响应器编辑状态改为移动
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
}
//删除拾取的关键点
private void DeleteDynamicPathPoint_Click(object sender, EventArgs e)
{
if (SelectIndex!=null)
{
var tlo = map.CreateLayerOptions("dynamicpathlayer");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo.AddConfig("OperationName", "DeleteKeyPoint"); //设置对关键点的删除
tlo.AddConfig("KeyPointIndex", SelectIndex); //删除对应索引的点
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
SelectIndex = null;
}
}
//整体编辑
private void EditPath_Click(object sender, EventArgs e)
{
var tlo = map.CreateLayerOptions("dynamicpathlayer");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo.AddConfig("EditObject", "PATH"); //编辑对象。 PATH-整体编辑
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
}
//关键点编辑
private void EditPoint_Click(object sender, EventArgs e)
{
var tlo = map.CreateLayerOptions("dynamicpathlayer");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo.AddConfig("EditObject", "POINT"); //编辑对象。 POINT-单个关键点编辑 ,默认值为 POINT
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
}
//关闭路径编辑状态
private void CloseDynamicPathResponser_Click(object sender, EventArgs e)
{
var tlo = map.CreateLayerOptions("dynamicpathlayer");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo.AddConfig("EditType", "NONE");//将响应器编辑状态关闭
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
SelectIndex = null;
}
//*************************************************************************
//4.播放控制:
//*************************************************************************
//切换播放类型
bool IsPlayAsKeyPoint = false;
private void UpdatePlayAsKeyPoint_Click(object sender, EventArgs e)
{
var tlo = map.CreateLayerOptions("dynamicpathlayer");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
if (IsPlayAsKeyPoint)
{
tlo.AddConfig("PlayAsKeyPoint", "false");//播放类型。true-以关键点参数进行播放;false-以路径参数进行播放
IsPlayAsKeyPoint = false;
MessageBox.Show("当前以路径参数进行播放");
}
else
{
tlo.AddConfig("PlayAsKeyPoint", "true");//播放类型。true-以关键点参数进行播放;false-以路径参数进行播放
IsPlayAsKeyPoint = true;
MessageBox.Show("当前以关键点参数进行播放");
}
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
}
//切换跟随移动状态
bool bIsFollow;
private void UpdateNodeActive_Click(object sender, EventArgs e)
{
if (dynamicPathLayer!=null)
{
var tlo = map.CreateLayerOptions("");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo.AddConfig("NodeActive", (bIsFollow = !bIsFollow).ToString());//跟随移动状态
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
}
else
{
MessageBox.Show("图层为空,无法切换");
}
}
//显隐动态路径
bool bIsVisible;
private void SetVisibleRoamPath_Click(object sender, EventArgs e)
{
if (dynamicPathLayer!=null)
{
dynamicPathLayer.SetVisible(bIsVisible = !bIsVisible);//修改路径线显隐
}
else
{
MessageBox.Show("图层为空,无法显隐");
}
}
//播放
private void Play_Click(object sender, EventArgs e)
{
if (dynamicPathLayer!=null)
{
var tlo = map.CreateLayerOptions("dynamicpathlayer");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo.AddConfig("PlayerState", "PLAYER_PLAY");//设置播放状态
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
}
else
{
MessageBox.Show("图层为空,无法播放!");
}
}
//暂停
private void Pause_Click(object sender, EventArgs e)
{
if (dynamicPathLayer!=null)
{
var tlo = map.CreateLayerOptions("dynamicpathlayer");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo.AddConfig("PlayerState", "PLAYER_PAUSE");//设置播放状态
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
}
else
{
MessageBox.Show("图层为空,无法暂停!");
}
}
//停止
private void Stop_Click(object sender, EventArgs e)
{
if (dynamicPathLayer!=null)
{
var tlo = map.CreateLayerOptions("dynamicpathlayer");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo.AddConfig("PlayerState", "PLAYER_STOP");//设置播放状态
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
}
else
{
MessageBox.Show("图层为空,无法停止!");
}
}
//加速
private void Accelerate_Click(object sender, EventArgs e)
{
if (dynamicPathLayer!=null)
{
speed += 5;
var tlo = map.CreateLayerOptions("dynamicpathlayer");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo.AddConfig("Velocity", speed.ToString());//速度
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
}
else
{
MessageBox.Show("图层为空,无法加速!");
}
}
//减速
private void SlowDown_Click(object sender, EventArgs e)
{
if (dynamicPathLayer!=null)
{
speed -= 5;
if (speed < 0)
{
speed = 1;
}
var tlo = map.CreateLayerOptions("dynamicpathlayer");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo.AddConfig("Velocity", speed.ToString());//速度
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
}
else
{
MessageBox.Show("图层为空,无法减速!");
}
}
//恢复速度
private void Restore_Click(object sender, EventArgs e)
{
if (dynamicPathLayer!=null)
{
speed = 30;
var tlo = map.CreateLayerOptions("dynamicpathlayer");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions");//图层配置对象名称, DynamicPathLayerOptions代表路径图层配置
tlo.AddConfig("Velocity", speed.ToString());//速度
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
}
else
{
MessageBox.Show("图层为空,无法恢复速度!");
}
}
//左视 ,PlayAsKeyPoint必须为false
private void LeftView_Click(object sender, EventArgs e)
{
var tlo = map.CreateLayerOptions("dynamicpathlayer");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions"); //动态路径配置信息 必须为DynamicPathLayerOptions
tlo.AddConfig("ViewObjectMode", "1.57,-0.708,100.0"); //设置视角对象;视角对象的格式为"水平方位角,垂直俯仰角,视点到关键点距离"
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
}
//右视 ,PlayAsKeyPoint必须为false
private void RightView_Click(object sender, EventArgs e)
{
var tlo = map.CreateLayerOptions("dynamicpathlayer");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions"); //动态路径配置信息 必须为DynamicPathLayerOptions
tlo.AddConfig("ViewObjectMode", "4.71,-0.708,100.0");//设置视角对象;视角对象的格式为"水平方位角,垂直俯仰角,视点到关键点距离"
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
}
//上视 ,PlayAsKeyPoint必须为false
private void UpView_Click(object sender, EventArgs e)
{
var tlo = map.CreateLayerOptions("dynamicpathlayer");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions"); //动态路径配置信息 必须为DynamicPathLayerOptions
tlo.AddConfig("ViewObjectMode", "0,-1.57,100.0");//设置视角对象;视角对象的格式为"水平方位角,垂直俯仰角,视点到关键点距离"
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
}
//前视 ,PlayAsKeyPoint必须为false
private void FrontView_Click(object sender, EventArgs e)
{
var tlo = map.CreateLayerOptions("dynamicpathlayer");//创建图层配置对象,任意名称
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions"); //动态路径配置信息 必须为DynamicPathLayerOptions
tlo.AddConfig("ViewObjectMode", "3.14,-0.708,100.0");//设置视角对象;视角对象的格式为"水平方位角,垂直俯仰角,视点到关键点距离"
dynamicPathLayer.UpdateLayerOptions(tlo);//更新路径漫游
}
//后视 ,PlayAsKeyPoint必须为false
private void BackView_Click(object sender, EventArgs e)
{
var tlo = map.CreateLayerOptions("dynamicpathlayer");
tlo.AddConfig("LayerOptionsName", "DynamicPathLayerOptions"); //动态路径配置信息 必须为DynamicPathLayerOptions
tlo.AddConfig("ViewObjectMode", "0,-0.708,100.0");//设置视角对象;视角对象的格式为"水平方位角,垂直俯仰角,视点到关键点距离"
dynamicPathLayer.UpdateLayerOptions(tlo);
}
private void axVPSDKCtrl1_FireOnLButtonUp(object sender, AxSDKCtrlLib._IVPSDKCtrlEvents_FireOnLButtonUpEvent e)
{
var transformate = map.CreateTransformation();
var destPos = transformate.ScreenPosToWorldPos(e.xPos, e.yPos);//将屏幕坐标点转换成经纬度坐标
if (bIsFindTransformation)
{
textBox1.Text = destPos.GetX() + "," + destPos.GetY() + "," + destPos.GetZ() + ";";
}
//console.log(destPos.GetX() + "," + destPos.GetY() + "," + destPos.GetZ() + ";");
}