首页 / 浏览问题 / 组件GIS / 问题详情
超图示例数据CBD三维模型在窗口的panel上无法显示
35EXP 2018年07月16日
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using SuperMap.Data;
using SuperMap.Realspace;
using SuperMap.UI;

namespace Import_CBD
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

       
        private void panel1_Paint(object sender, PaintEventArgs e)
        {

        }
        
        public  Workspace m_workspace;
        public   SceneControl m_sceneControl;
        private void MainForm_Load(object sender, EventArgs e)
        {
            // 打开工作空间,取出工作空间中名为“CBD场景”的数据集,查询其描述信息
 
            m_workspace = new SuperMap.Data.Workspace(this.components);
            m_sceneControl = new SuperMap.UI.SceneControl();
           
            m_sceneControl.Dock = DockStyle.Fill;
            panel1.Dock = DockStyle.Fill;
            
            panel1.Controls.Add(m_sceneControl);
               
            WorkspaceConnectionInfo workspaceConnectionInfo = new WorkspaceConnectionInfo();
            workspaceConnectionInfo.Type = WorkspaceType.SMWU;
            //String file = @"F:\B16\SampleData\CBD\CBDCache.smwu";
            String file = @"../../../../../CBD/CBDCache.smwu";
            workspaceConnectionInfo.Server = file;
            m_workspace.Open(workspaceConnectionInfo);
            m_sceneControl.Scene.Open("CBD场景");
            //FlyToModel(116.275357,39.544252,12.4495723647997, 0.0729635336123907, 82.6250751109261);
           
            FlyToModel(116.275357, 39.544252, 12.449572, 0.072963, 82.625075);          
            // 保存工作空间
            m_workspace.Save();    

        }


      public void FlyToModel(double dL, double dB, double dA, double dH, double dT)
        {  
            Camera camera = new Camera();
            camera.Longitude = dL;
            camera.Latitude = dB;
            camera.Altitude = dA;
            camera.Heading = dH;
            camera.Tilt = dT;
            m_sceneControl.Scene.Fly(camera, 1000);

        }

      private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
      {
            if(m_sceneControl != null)
            {
                m_sceneControl.Dispose();
            }
            if (m_workspace != null)
            {
                m_workspace.Dispose();
            }
      }

  }
}


 

2 个回答

scenecontrol里是根本没显示,还是一片绿呢?

如果是后者,可能是电脑显卡性能的限制。
698EXP 2018年07月16日
我的问题是我想在工作空间打开三维模型,但是每次打开之后是超图地球的模型
.NET我没有用过,不过我没有看到你的scenecontrol和workspace绑定。
谢谢,确实出现了这个问题

您好!首先,scenecontrol和workspace需绑定,代码如下:m_sceneControl.Scene.Workspace = m_workspace;

其次,无需FlyToModel(),删除即可 。因为您打开的是工作空间里已经保存的场景,无需让它飞行到该场景中,打开直接就是您保存这个场景时的位置。

您的代码简化后如下:

3,352EXP 2018年07月17日
谢谢,确实出现了这个问题
...