首页 / 浏览问题 / 组件GIS / 问题详情
超图组件开发初始化场景后需要点击一下场景才显示经纬度
216EXP 2018年10月25日

超图9D组件开发中,初始化场景后,总是需要鼠标点击一下场景,才能在场景左下角才显示经纬度信息,也就是说初始化后没有聚焦鼠标焦点。

初始化场景时显示:

点击场景后显示:

这个是什么原因呢?

1个回答

您好!请问您初始化场景是在哪儿写得?最好将代码贴上来。还有您用的是910组件还是901组件?
3,362EXP 2018年10月26日

我用的是SuperMap Objects.NET9.01版本。

 bool bOpen = false;
            //TODO:打开数据源
            string path = new DirectoryInfo("../../../../").FullName + @"Data\" + ClsStaticFields.workspace + ".smwu";
            WorkspaceConnectionInfo wsConn = null;
            if (File.Exists(path))
            {
                wsConn = new WorkspaceConnectionInfo(path);
                wsConn.Type=WorkspaceType.SMWU;
            }
            else
            {
                //路径不存在的操作
                MessageBox.Show("该路径不存在名为" + ClsStaticFields.workspace + "的工作空间!");

            }

            if (wsConn != null)
            {
                bOpen = m_workspace.Open(wsConn);
            }
            if (!bOpen)
            {
                if (SuperMap.Data.Environment.CurrentCulture == "zh-CN")
                {
                    //MessageBox.Show("打开工作空间失败!");
                    return false;
                }
                else
                {
                    //MessageBox.Show("Open the workspace failed.");
                    return false;
                }
            }
            else
            {
                return true;
            }

我先把SceneControl放在一个form里面,然后把此form加载到主窗体里面,在程序初始化的时候不显示经纬度,只有在鼠标点击一下场景才会显示经纬度了。

我理解的是您有两个form窗口,您的SceneControl定义是在子窗口里,在主窗口初始化时调用子窗口,是这样吗?而且您贴的代码是工作空间,并没有看到sceneControl.Scene.Workspace = workspace;这行代码。

您理解的正确。

        /// <summary>
        /// 根据workspace和sceneControl构造 SampleRun对象
        /// Build SampleRun according to workspace and sceneControl
        /// </summary>
        public ClsMsdiSuperMap(Workspace workspace, SceneControl sceneControl)
        {
            try
            {
                m_workspace = workspace;
                m_sceneControl = sceneControl;
                m_sceneControl.Scene.Workspace = workspace;
                InitializeScene();
            }
            catch (Exception ex)
            {
                Trace.WriteLine(ex.Message);
            }
        }

你上面的代码没有问题。我的代码里面也是这样写的,但是不行,问题依然存在。

下面代码是我新建的一个demo。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SuperMap.UI;

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

        private void Form1_Load(object sender, EventArgs e)
        {
            LoadSceneControl();
        }

        private void LoadSceneControl()
        {
            SceneControl sceneControl=new SceneControl();
            sceneControl.Dock = DockStyle.Fill;
            this.Controls.Add(sceneControl);
        }
    }
}

以上代码出现一个SceneControl,没有经纬度信息。

双击场景控件,才出现经纬度。

请问,用代码添加场景的话需要设置其他属性吗?才会显示经纬度信息???

您好!这个是正常合理的。您可以用iDesktop测试一下,新建一个球面场景,不做任何操作,左下角是没有经纬度信息的。只有鼠标第一次在球面上单击时,才有经纬度信息,之后如果鼠标移动到球体之外,也就是太空之中,是不显示经纬度信息的,而鼠标再移动到场景上左下角的经纬度又显示了。经纬度只是用来描述地球上某点的坐标位置,外太空是无法用这个单位的。
...