首页 / 浏览问题 / 组件GIS / 问题详情
超图用C#加载场景没有及时刷新
54EXP 2019年04月10日
使用产品:SuperMap iDesktop .NET 9D 操作系统win10 x64
软件名称:supermap-idesktop.net-9.1.1-36767-win64-zip-chs

组件:supermap-iobjectsdotnet-9.1.1-16828-70590-win64-all-Bin
问题详细描述:超图用C#加载场景没有及时刷新
问题重述步骤:1、用C#来遍历每个文件夹下的文件来导入到场景中
                       2、想要每次遍历一个就画一个图,同时延时一段时间

                       问题是过程没有出来,只显示最后面遍历的那个文件的图形
主要代码如下:

System.Threading.Thread.Sleep(300);
            foreach (FileInfo file in newfiles)
            {
                System.Threading.Thread.Sleep(300);
                string filepath = file.FullName;
                //删除场景图层和数据集
                Layer3Ds layer3Ds2 = m_sceneControl.Scene.Layers;
                if (layer3Ds2.Count > 2)
                {
                    layer3Ds2.Remove(3);
                    layer3Ds2.Remove(2);
                }
                if (m_workspace.Datasources[0].Datasets.Count > 5)
                {
                    m_workspace.Datasources[0].Datasets.Delete(6);
                    m_workspace.Datasources[0].Datasets.Delete(5);
                }

                //导入CAD
                ImportSettingDWG importsettingdwg = new ImportSettingDWG();
                importsettingdwg.SourceFilePath = filepath;
                importsettingdwg.ImportMode = ImportMode.Overwrite;
                importsettingdwg.ImportingAsCAD = false;
                importsettingdwg.IsImportAs3D = true;

                //设置投影
                PrjCoordSys prjcoordsys = new PrjCoordSys();
                GeoCoordSys geocoordsys = new GeoCoordSys();
                geocoordsys.Type = GeoCoordSysType.Wgs1984;
                prjcoordsys.GeoCoordSys = geocoordsys;
                importsettingdwg.TargetPrjCoordSys = prjcoordsys;
                importsettingdwg.TargetDatasource = m_workspace.Datasources[0];

                //导入到数据源中
                DataImport m_DataImport = new DataImport();
                m_DataImport.ImportSettings.Clear();
                m_DataImport.ImportSettings.Add(importsettingdwg);
                m_DataImport.Run();

                //导入到场景中
                Dataset dataset0 = m_workspace.Datasources[0].Datasets[5];
                Dataset dataset1 = m_workspace.Datasources[0].Datasets[6];

                Layer3Ds layer3Ds = m_sceneControl.Scene.Layers;
                Layer3DSettingVector layer3DSettingVector = new Layer3DSettingVector();
                GeoStyle3D style = new GeoStyle3D();
                style.AltitudeMode = AltitudeMode.Absolute;    //高度模式
                style.LineColor = System.Drawing.Color.Red;
                style.LineWidth = 2.5;
                style.MarkerColor = System.Drawing.Color.Red;
                layer3DSettingVector.Style = style;

                Layer3DDataset layer3DDataset0 = layer3Ds.Insert(2, dataset0, layer3DSettingVector);
                layer3DDataset0.UpdateData();
                Layer3DDataset layer3DDataset1 = layer3Ds.Insert(3, dataset1, layer3DSettingVector);
                layer3DDataset1.UpdateData();

                camera = new Camera()
                {
                    AltitudeMode = AltitudeMode.RelativeToGround,
                    Altitude = 5779.44118825533,
                    Heading = 244.353707497597,
                    Latitude = 26.4163171297286,
                    Longitude = 119.952620267425,
                    Tilt = 68.3336350574725
                };
                m_sceneControl.Scene.Fly(camera, 100);
                m_sceneControl.Scene.Refresh();
            }

1个回答

您好,你用一个button,每点一次就加载一次文件就行了啊,你说的过程是什么意思?
2,432EXP 2019年04月10日
每点一次是可以,但是效率太低了,文件多的话,我想截图每个文件的图形就会花很多时间了。。。

我想要通过遍历每个文件的方式,逐个加载文件到场景中,然后延时一段时间,而不是卡住不动,最后出来的场景只是最后一个文件。
你的意思是说打开一次,自动关闭,重复到最后只剩最后一个
对啊,我是想要遍历每个文件的过程中都能看到每个文件加载到场景的情况
这个思路是这样的,你那边写个timer,然后定义事件,设置好时间间隔,在事件里面先写个判断如果场景里面有图层,就删除图层,否则就导入新的数据集,这样就可以实现你那个需求
我不能在遍历文件的时候延时吗,为什么这样实现不了呢,就是场景不能及时刷新
可以刷新呀,scenecontrol.scene.refresh() ,你说的那个延时就用timer去控制就行了
我有刷新,也有延时,但就是卡在那边不动。。。
我在QQ上给你看一下
...