2.5.1 各类漫游模式展示


各类漫游模式展示

CooRun SDK中支持直接切换的漫游模式主要有:普通漫游、地下漫游、自定义漫游、自动旋转模式漫游和旋转模式漫游五种漫游模式。其中:

  1. 普通漫游模式 是CooRun SDK默认的漫游模式。它是指通过鼠标和键盘直接操作场景漫游。
  2. 地下漫游模式 会先将地形半透明显示,然后进行地下数据的浏览,可以随意穿地进行漫游。具体方法可见: SetUnderGroundRoamMode()
  3. 自定义滑行模式 是指锁定漫游的高度、俯仰角度和速度进行场景浏览。具体方法可见: SetCustomGlideRoamMode()
  4. 自动滑行模式 是模型在场景中进行自动滑行的效果。它是通过鼠标左键点击场景相应方位即可实现场景拖动的效果。具体方法可见: SetAutoGlideRoamMode()
  5. 自动旋转模式 是指在锁定观察点位置的情况下,通过鼠标点击(拖动)围绕观察点进行旋转的漫游效果。具体方法可见: SetAutoRotateRoamMode()
  6. 旋转漫游模式 是指在一定时间内,通过改变相机的目标点、观察点、视角等参数,达到模拟场景旋转的效果。具体方法可见: SetViewRotateRoamMode()
  7. 步行模式 是模拟用户在三维场景中以人步行的速度进行场景的漫游。在该漫游模式下,用户可以通过键盘操作、鼠标操作在场景中进行交互漫游。具体方法可见: SetWalkRoamMode()
  8. 车行模式 是模拟用户在三维场景中以车辆行驶的速度进行场景的漫游。在该漫游模式下,用户可以通过键盘操作、鼠标操作在场景中进行交互漫游。具体方法可见: SetWalkRoamMode()
  9. 飞行模式 是模拟用户在三维场景中以飞行的速度进行场景的漫游。在该漫游模式下,用户可以通过键盘操作、鼠标操作在场景中进行交互漫游。具体方法可见: 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");//设置漫游相交类型及图层
}

results matching ""

    No results matching ""