首页 / 浏览问题 / 组件GIS / 问题详情
怎么刷新清除跟踪图层的选中对象
28EXP 2018年04月10日

我添加了一个长方体并转化成模型对象添加到跟踪图层中,然后对其选中进行一些操作后再清除,模型对象确实是清除了,但是选中后变色的模型对象仍然存在在场景中。如果鼠标在场景中选中其他对象或者点击其他区域,选中的模型对象就消失了,感觉就像是模型对象被临时存储在一个跟踪图层选择集中一样。

1个回答

您好,删除对象之后需要刷新一下跟踪图层。
5,985EXP 2018年04月10日
怎么刷新跟踪图层呢,这个是刷新场景的,好像没有效果:m_sceneControl.Scene.Refresh();
你给我一段代码,我试试会出现你说的情况不
// 构造 GeoBox 对象
                    GeoBox geoBox = new GeoBox();
                    // 设置长方体的底面大小
                    geoBox.BottomSize = new Size2D(300, 300);
                    // 设置长方体的高度
                    geoBox.Height = 390;
                    // 设置长方体所在的位置
                    geoBox.Position = point3d;
                    // 获取按 GeoModel 的方式重新构建的模型对象
                    GeoModel geoModel = geoBox.GetGeoModel(1000, 1000);
                    
                    GeoStyle3D style3d = new GeoStyle3D();
                    style3d.FillMode = FillMode3D.LineAndFill;
                    style3d.LineWidth = 2;
                    style3d.LineColor = Color.Black;
                    style3d.FillForeColor = Color.FromArgb(150, 42, 242, 255);
                    style3d.AltitudeMode = AltitudeMode.ClampToGround;
                    style3d.IsMarkerSizeFixed = true;
                    geoModel.Style3D = style3d;

                    // 向跟踪图层上添加长方体
                    PropertyHelper.Mymainwindow.m_sceneControl.Scene.TrackingLayer.Add(geoModel, “”);

这是往跟踪图层添加长方体对象,然后如果选中后,再进行跟踪图层的清除,选中对象就不会消失
您好,我试了一下,不会出现此现象的,代码是:

            scenecontrol.Scene.TrackingLayer.Clear();
            scenecontrol.Scene.Refresh();

另外您这边组件是哪个版本的?
是9D的
我这边确实重现不出来问题,要不您写一个小demo看能否重现问题,能的话麻烦把demo上传百度云,我这边下载试试。附上我这边的代码:

workspace = new Workspace();
                string path = @"G:\Download\Scala学习\SMO_DotNET_811_14428_59859_CHS_Zip\SampleData\BeijingDEM\BeijingDEM.smwu";
                WorkspaceConnectionInfo info = new WorkspaceConnectionInfo(path);
                workspace.Open(info);

                scenecontrol = new SceneControl();
                scenecontrol.Dock = DockStyle.Fill;
                panel2.Controls.Add(scenecontrol);
                scenecontrol.Scene.Workspace = workspace;
                scenecontrol.Scene.Open("test");

                Point3D point3d = new Point3D(120,40,0);

                GeoBox geoBox = new GeoBox();
                    // 设置长方体的底面大小
                    geoBox.BottomSize = new Size2D(300, 300);
                    // 设置长方体的高度
                    geoBox.Height = 390;
                    // 设置长方体所在的位置
                    geoBox.Position = point3d;
                    // 获取按 GeoModel 的方式重新构建的模型对象
                    GeoModel geoModel = geoBox.GetGeoModel(1000, 1000);
                    
                    GeoStyle3D style3d = new GeoStyle3D();
                    style3d.FillMode = FillMode3D.LineAndFill;
                    style3d.LineWidth = 2;
                    style3d.LineColor = Color.Black;
                    style3d.FillForeColor = Color.FromArgb(150, 42, 242, 255);
                    style3d.AltitudeMode = AltitudeMode.ClampToGround;
                    style3d.IsMarkerSizeFixed = true;
                    geoModel.Style3D = style3d;

                    // 向跟踪图层上添加长方体
                scenecontrol.Scene.TrackingLayer.Add(geoModel,"model");

                scenecontrol.Scene.Fly(geoModel,100);

 private void button1_Click(object sender, EventArgs e)
        {
            scenecontrol.Scene.TrackingLayer.Clear();
            scenecontrol.Scene.Refresh();
        }
嗯嗯,好,我去试试
...