2.5.1 各类漫游模式展示
各类漫游模式展示
CooRun SDK中支持直接切换的漫游模式主要有:普通漫游、地下漫游、自定义漫游、自动旋转模式漫游和旋转模式漫游五种漫游模式。其中:
- 普通漫游模式 是CooRun SDK默认的漫游模式。它是指通过鼠标和键盘直接操作场景漫游。
- 地下漫游模式 会先将地形半透明显示,然后进行地下数据的浏览,可以随意穿地进行漫游。具体方法可见: SetUnderGroundRoamMode()。
- 自定义滑行模式 是指锁定漫游的高度、俯仰角度和速度进行场景浏览。具体方法可见: SetCustomGlideRoamMode()。
- 自动滑行模式 是模型在场景中进行自动滑行的效果。它是通过鼠标左键点击场景相应方位即可实现场景拖动的效果。具体方法可见: SetAutoGlideRoamMode()。
- 自动旋转模式 是指在锁定观察点位置的情况下,通过鼠标点击(拖动)围绕观察点进行旋转的漫游效果。具体方法可见: SetAutoRotateRoamMode()。
- 旋转漫游模式 是指在一定时间内,通过改变相机的目标点、观察点、视角等参数,达到模拟场景旋转的效果。具体方法可见: SetViewRotateRoamMode()。
- 步行模式 是模拟用户在三维场景中以人步行的速度进行场景的漫游。在该漫游模式下,用户可以通过键盘操作、鼠标操作在场景中进行交互漫游。具体方法可见: SetWalkRoamMode()。
- 车行模式 是模拟用户在三维场景中以车辆行驶的速度进行场景的漫游。在该漫游模式下,用户可以通过键盘操作、鼠标操作在场景中进行交互漫游。具体方法可见: SetWalkRoamMode()。
- 飞行模式 是模拟用户在三维场景中以飞行的速度进行场景的漫游。在该漫游模式下,用户可以通过键盘操作、鼠标操作在场景中进行交互漫游。具体方法可见: SetWalkRoamMode()。
注意:大多数漫游模式之间是互斥的,即开启一个漫游模式之后,会替换之前的漫游模式。因此进行漫游模式切换之后,需要退出最后一个漫游模式才能回到普通漫游。
互斥的漫游模式主要有:地下漫游、自定义漫游、自动旋转模式漫游和室内漫游。
下图是开启地下漫游的效果:
代码调用示例
Javascript调用
//Html部分代码
<select id="select">
<option value="underGround">地下漫游模式</option><option value="customGlide">自定义滑行漫游模式</option>
<option value="autoRotate">自动旋转模式</option>
<option value="AutoGlideModeOn">自动滑动模式</option>
<option value="WalkRoamMode">步行</option><option value="DriveRoamMode">车行</option><option value="FlyRoamMode">飞行</option>
</select>
<input id="Button0" type="button" value="打开模式" onclick="turnModeOn()" />
<input id="Button1" type="button" value="关闭模式" onclick="turnModeOff()" />
<input id="Button1" type="button" value="视点逆时针旋转" onclick="viewRotateRoamMode(true, 0, -20, 1000)" />
<input id="Button1" type="button" value="视点顺时针旋转" onclick="viewRotateRoamMode(true, 0, 20, 1000)" />
<input id="Button1" type="button" value="目标点逆时针旋转" onclick="viewRotateRoamMode(false, 0, -20, 1000)" />
<input id="Button1" type="button" value="目标点顺时针旋转" onclick="viewRotateRoamMode(false, 0, 20, 1000)" />
<input id="Button2" type="button" value="视点复位" onclick="viewReset()" />
<input id="Button27" type="button" value="设置漫游相交类型" onclick="SetIntersectTypeAndLayer()" />
//JS代码
var mySelect = document.getElementById("select");
var roam = map.CreateRoam();//创建漫游接口对象
var modeState = false;
//开启模式
function turnModeOn(){
var value = mySelect.options[mySelect.selectedIndex].value;//从下拉框中获取漫游模式类型
if(value == "underGround"){
underGroundRoamMode(true,100);//进入地下漫游模式
}else if(value == "autoRotate"){
autoRotateRoamMode(true);//进入自动旋转模式
}else if(value == "customGlide"){
customGlideRoamMode(true, 18, 1, -10);//进入自定义滑行漫游模式
}else if(value == "AutoGlideModeOn"){
AutoGlideModeOn(true);//自动滑动模式
}else if(value == "WalkRoamMode"){
WalkRoamMode(true);//步行
}else if(value == "DriveRoamMode"){
DriveRoamMode(true);//车行
}else if(value == "FlyRoamMode"){
FlyRoamMode(true);//飞行
}else{}
}
//关闭模式
function turnModeOff(){
var value = mySelect.options[mySelect.selectedIndex].value;//从下拉框中获取漫游模式类型
if(value == "underGround"){
underGroundRoamMode(false,0);//关闭地下漫游模式
}else if(value == "autoRotate"){
autoRotateRoamMode(false);//关闭自动旋转模式
}else if(value == "customGlide"){
customGlideRoamMode(false, 18, 1, -10);//关闭自定义滑行漫游模式
}else if(value == "AutoGlideModeOn"){
AutoGlideModeOn(false);//自动滑动模式
}else if(value == "WalkRoamMode"){
WalkRoamMode(false);//步行
}else if(value == "DriveRoamMode"){
DriveRoamMode(false);//车行
}else if(value == "FlyRoamMode"){
FlyRoamMode(false);//飞行
}else{}
}
//地下模式
function underGroundRoamMode(state,value){
roam.SetUnderGroundRoamMode(state,value);//开启地下漫游模式,参数1:开启状态,参数2:地下网格与地面高度
}
//自动旋转模式
function autoRotateRoamMode(state){
roam.SetAutoRotateRoamMode(state);//进入自动旋转模式
}
//自定义滑动模式
function customGlideRoamMode(state, height, speed, pitch){
//参数1:开启状态
//参数2:漫游高度。>=0 ,取0为默认设置为当前高度
//参数3:漫游速度。基准值为1.0,类似步行速度。可根据实际情况增加或减小
//参数4:漫游俯仰角度。范围-89到89之间,0代表平视场景,大于0时代表抬头
roam.SetCustomGlideRoamMode(state, height, speed, pitch);
}
//自定义旋转模式
function viewRotateRoamMode(state, pitch, angle, time){
//参数1:是否绕视点旋转。true-按视点;false-按目标点
//参数2:目的俯仰角(绝对值)。范围-89到89,单位角度。当为0时,为默认取当前俯仰角,不进行垂直转动
//参数3:旋转角(相对值)。范围-180到180,单位角度,负为逆时针旋转,正为顺时针旋转。为0时不进行水平转动
//参数4:转动时间。单位毫秒,范围1-无穷大。不可取0
roam.SetViewRotateRoamMode(state, pitch, angle, time);//
}
//设置漫游相交类型及图层
function SetIntersectTypeAndLayer() {
//设置漫游相交类型及图层,该方法需要在步行、车行、飞行之前调用,可设置这三种漫游模式是否与模型图层相交
//参数1:相交类型。0-与所有模型图层不相交;1-与所有模型图层相交;2-与列表中模型图层相交;3-与列表之外模型图层相交
//参数2:相交图层列表。
roam.SetIntersectTypeAndLayer(1, 0);//设置漫游相交类型及图层
}
//步行漫游模式
function WalkRoamMode(state) {
roam.SetWalkRoamMode(state);//开启步行漫游模式
}
//车行漫游模式
function DriveRoamMode(state) {
roam.SetDriveRoamMode(state);//开启车行漫游模式
}
//飞行漫游模式
function FlyRoamMode(state) {
roam.SetFlyRoamMode(state);//开启飞行漫游模式
}
//自动滑动模式
function AutoGlideModeOn(state) {
roam.SetAutoGlideRoamMode(state);//开启自动滑动模式
}
//视点复位
function viewReset(){
locateGlobalPosition();
}
C++调用
NavigationCOMLib::IRoamPtr roam;//漫游对象
//获得漫游类型
void Cf4c0RoamDlg::OnCbnSelchangeCombo1()
{
CString m_paramname;
m_combo.GetLBText(m_combo.GetCurSel(),m_paramname);
value = CT2A(m_paramname.GetBuffer());
}
//获得下拉框内容
void Cf4c0RoamDlg::OnCbnSetfocusCombo1()
{
m_combo.ResetContent();//清空下拉框
m_combo.AddString(L"地下漫游模式");
m_combo.AddString(L"自动旋转模式");
m_combo.AddString(L"自定义滑行漫游模式");
m_combo.AddString(L"视点旋转模式");
m_combo.AddString(L"目标点旋转模式");
m_combo.AddString(L"自动滑动模式");
m_combo.AddString(L"步行");
m_combo.AddString(L"车行");
m_combo.AddString(L"飞行");
m_combo.SetCurSel(-1);
}
//打开模式
void Cf4c0RoamDlg::OnBnClickedturnmodeon()
{
if(value == "地下漫游模式")
{
underGroundRoamMode(TRUE, 100);//开启地下漫游模式
}
else if(value == "自动旋转模式")
{
autoRotateRoamMode(TRUE);//开启自动旋转模式
}
else if(value == "自定义滑行漫游模式")
{
customGlideRoamMode(TRUE, 18, 1, -10);//开启自定义滑行漫游模式
}
else if(value == "视点旋转模式")
{
viewRotateRoamMode(TRUE, 0, -60, 1);//绕视点进行旋转
}
else if(value == "目标点旋转模式")
{
viewRotateRoamMode(FALSE, 0, 60, 1000);//绕目标点进行旋转
}
else if(value == "自动滑动模式")
{
roam->SetAutoGlideRoamMode(true);//开启自动滑动模式
}
else if(value == "步行")
{
roam->SetWalkRoamMode(true);//开启步行漫游模式
}
else if(value == "车行")
{
roam->SetDriveRoamMode(true);//开启车行漫游模式
}
else if(value == "飞行")
{
roam->SetFlyRoamMode(true);//开启飞行漫游模式
}
}
//关闭模式
void Cf4c0RoamDlg::OnBnClickedturnmodeoff()
{
if(value == "地下漫游模式")
{
underGroundRoamMode(FALSE, 100);//关闭地下漫游模式
}
else if(value == "自动旋转模式")
{
autoRotateRoamMode(FALSE);//关闭自动旋转模式
}
else if(value == "自定义滑行漫游模式")
{
customGlideRoamMode(FALSE, 18, 1, -10);//关闭自定义滑行漫游模式
}
else if(value == "视点旋转模式")
{
viewRotateRoamMode(TRUE, 0, 60, 1);//绕视点进行旋转
}
else if(value == "目标点旋转模式")
{
viewRotateRoamMode(FALSE, 0, -60, 1000);//绕目标点进行旋转
}
else if(value == "自动滑动模式")
{
roam->SetAutoGlideRoamMode(false);//关闭自动滑动模式
}
else if(value == "步行")
{
roam->SetWalkRoamMode(false);//关闭步行漫游模式
}
else if(value == "车行")
{
roam->SetDriveRoamMode(false);//关闭车行漫游模式
}
else if(value == "飞行")
{
roam->SetFlyRoamMode(false);//关闭飞行漫游模式
}
}
//视点复位
void Cf4c0RoamDlg::OnBnClickedviewreset()
{
NavigationCOMLib::INavigatePtr navigation = map->CreateNavigation();
BaseObjectCOMLib::IPositionPtr desP = map->CreatePosition(120.218608772, 30.2106631565, 82.869460539);//创建坐标对象
navigation->FlyToDest(desP, 2.353695059417249, -0.698866291490859, 387.2143505720326, 3);//飞行定位。坐标、方位旋转角、垂直俯仰角、距离、飞行时间
}
void Cf4c0RoamDlg::OnBnClickedSetintersecttypeandlayer()
{
//设置漫游相交类型及图层,该方法需要在步行、车行、飞行之前调用,可设置这三种漫游模式是否与模型图层相交
//参数1:相交类型。0-与所有模型图层不相交;1-与所有模型图层相交;2-与列表中模型图层相交;3-与列表之外模型图层相交
//参数2:相交图层列表。
roam->SetIntersectTypeAndLayer(1, "0");//设置漫游相交类型及图层
}
//地下模式
void Cf4c0RoamDlg::underGroundRoamMode(bool state, DOUBLE height)
{
roam->SetUnderGroundRoamMode(state, height);//开启地下漫游模式,参数1:开启状态,参数2:地下网格与地面高度
}
//自动旋转模式
void Cf4c0RoamDlg::autoRotateRoamMode(bool state)
{
roam->SetAutoRotateRoamMode(state);//进入地下漫游模式
}
//自定义滑动模式
void Cf4c0RoamDlg::customGlideRoamMode(bool state,DOUBLE height,DOUBLE speed,DOUBLE pitch)
{
//参数1:开启状态
//参数2:漫游高度。>=0 ,取0为默认设置为当前高度
//参数3:漫游速度。基准值为1.0,类似步行速度。可根据实际情况增加或减小
//参数4:漫游俯仰角度。范围-89到89之间,0代表平视场景,大于0时代表抬头
roam->SetCustomGlideRoamMode(state, height, speed, pitch);
}
//自定义旋转模式
void Cf4c0RoamDlg::viewRotateRoamMode(bool state,DOUBLE pitch,DOUBLE angle,DOUBLE time)
{
//参数1:是否绕视点旋转。true-按视点;false-按目标点
//参数2:目的俯仰角(绝对值)。范围-89到89,单位角度。当为0时,为默认取当前俯仰角,不进行垂直转动
//参数3:旋转角(相对值)。范围-180到180,单位角度,绕视点时,向左为负,向右为正;绕目标点时,向右为负,向左为正。为0时不进行水平转动
//参数4:转动时间。单位毫秒,范围1-无穷大。不可取0
roam->SetViewRotateRoamMode(state, pitch, angle, time);
}
C#调用
IRoam roam;//漫游对象
roam = map.CreateRoam();//创建漫游接口对象
//开启模式
private void turnModeOn_Click(object sender, EventArgs e)
{
Console.WriteLine("Text:" + comboBox1.SelectedItem.ToString());
switch (comboBox1.SelectedItem.ToString())
{
case "地下漫游模式":
roam.SetUnderGroundRoamMode(true,100);//进入地下漫游模式
break;
case "自定义滑行漫游模式":
//参数1:开启状态
//参数2:漫游高度。>=0 ,取0为默认设置为当前高度
//参数3:漫游速度。基准值为1.0,类似步行速度。可根据实际情况增加或减小
//参数4:漫游俯仰角度。范围-89到89之间,0代表平视场景,大于0时代表抬头
roam.SetCustomGlideRoamMode(true, 18, 1, -10);//进入自定义滑行漫游模式
break;
case "自动旋转模式":
roam.SetAutoRotateRoamMode(true);//进入自动旋转模式
break;
case "视点旋转模式":
//参数1:是否绕视点旋转。true-按视点;false-按目标点
//参数2:目的俯仰角(绝对值)。范围-89到89,单位角度。当为0时,为默认取当前俯仰角,不进行垂直转动
//参数3:旋转角(相对值)。范围-180到180,单位角度,绕视点时,向左为负,向右为正;绕目标点时,向右为负,向左为正。为0时不进行水平转动
//参数4:转动时间。单位毫秒,范围1-无穷大。不可取0
roam.SetViewRotateRoamMode(true, 0, -60, 1);
break;
case "目标点旋转模式":
//参数1:是否绕视点旋转。true-按视点;false-按目标点
//参数2:目的俯仰角(绝对值)。范围-89到89,单位角度。当为0时,为默认取当前俯仰角,不进行垂直转动
//参数3:旋转角(相对值)。范围-180到180,单位角度,绕视点时,向左为负,向右为正;绕目标点时,向右为负,向左为正。为0时不进行水平转动
//参数4:转动时间。单位毫秒,范围1-无穷大。不可取0
roam.SetViewRotateRoamMode(false, 0, 60, 1000);
break;
case "自动滑动模式":
roam.SetAutoGlideRoamMode(true);//自动滑动模式
break;
case "车行":
roam.SetDriveRoamMode(true);//开启车行漫游模式
break;
case "步行":
roam.SetWalkRoamMode(true);//开启车行漫游模式
break;
case "飞行":
roam.SetFlyRoamMode(true);//开启车行漫游模式
break;
}
}
//关闭模式
private void turnModeOff_Click(object sender, EventArgs e)
{
Console.WriteLine("Text:" + comboBox1.SelectedItem.ToString());
switch (comboBox1.SelectedItem.ToString())
{
case "地下漫游模式":
roam.SetUnderGroundRoamMode(false,0);//关闭地下漫游模式
break;
case "自定义滑行漫游模式":
//参数1:开启状态
//参数2:漫游高度。>=0 ,取0为默认设置为当前高度
//参数3:漫游速度。基准值为1.0,类似步行速度。可根据实际情况增加或减小
//参数4:漫游俯仰角度。范围-89到89之间,0代表平视场景,大于0时代表抬头
roam.SetCustomGlideRoamMode(false, 18, 1, -10);//关闭自定义滑行漫游模式
break;
case "自动旋转模式":
roam.SetAutoRotateRoamMode(false);//关闭自动旋转模式
break;
case "视点旋转模式":
//参数1:是否绕视点旋转。true-按视点;false-按目标点
//参数2:目的俯仰角(绝对值)。范围-89到89,单位角度。当为0时,为默认取当前俯仰角,不进行垂直转动
//参数3:旋转角(相对值)。范围-180到180,单位角度,绕视点时,向左为负,向右为正;绕目标点时,向右为负,向左为正。为0时不进行水平转动
//参数4:转动时间。单位毫秒,范围1-无穷大。不可取0
roam.SetViewRotateRoamMode(true, 0, 60, 1);
break;
case "目标点旋转模式":
//参数1:是否绕视点旋转。true-按视点;false-按目标点
//参数2:目的俯仰角(绝对值)。范围-89到89,单位角度。当为0时,为默认取当前俯仰角,不进行垂直转动
//参数3:旋转角(相对值)。范围-180到180,单位角度,绕视点时,向左为负,向右为正;绕目标点时,向右为负,向左为正。为0时不进行水平转动
//参数4:转动时间。单位毫秒,范围1-无穷大。不可取0
roam.SetViewRotateRoamMode(false, 0, -60, 1000);
break;
case "自动滑动模式":
roam.SetAutoGlideRoamMode(false);//关闭自动滑动模式
break;
case "车行":
roam.SetDriveRoamMode(false);//关闭车行漫游模式
break;
case "步行":
roam.SetWalkRoamMode(false);//关闭车行漫游模式
break;
case "飞行":
roam.SetFlyRoamMode(false);//关闭车行漫游模式
break;
}
}
//视点复位
private void viewReset_Click(object sender, EventArgs e)
{
var navigation = map.CreateNavigation();
var desP = map.CreatePosition(120.218608772, 30.2106631565, 82.869460539);//创建坐标对象
navigation.FlyToDest(desP, 2.353695059417249, -0.698866291490859, 387.2143505720326, 3);//飞行定位。坐标、方位旋转角、垂直俯仰角、距离、飞行时间
}
//设置漫游相交类型及图层
private void SetIntersectTypeAndLayer_Click(object sender, EventArgs e)
{
//设置漫游相交类型及图层,该方法需要在步行、车行、飞行之前调用,可设置这三种漫游模式是否与模型图层相交
//参数1:相交类型。0-与所有模型图层不相交;1-与所有模型图层相交;2-与列表中模型图层相交;3-与列表之外模型图层相交
//参数2:相交图层列表。
roam.SetIntersectTypeAndLayer(1,"0");//设置漫游相交类型及图层
}