首页 / 浏览问题 / 组件GIS / 问题详情
桌面插件开发,代码新建场景,添加数据,选择集不高亮显示
34EXP 2023年03月09日

功能实现: 通过代码新建场景,自动添加数据,添加选择集,视图缩放到图层,高亮显示选择集

存在问题:选择集在场景中不是高亮显示,测试在视图中是存在选择集的,没找到选择集不高亮显示的原因

private void addSelectedFeatureToNewScene(DatasetVector datasetVector, String filter, String sceneName) {
        IFormScene formScene = (IFormScene) FormUtilities.fireNewWindowEvent(WindowType.SCENE, sceneName);
        if (formScene == null){
            return ;
        }
        formScene.openScene("");
        Scene scene = formScene.getSceneControl().getScene();

        //设置样式
        Layer3DSettingVector layer3DSettingVector = new Layer3DSettingVector();
        GeoStyle3D geoStyle3D = new GeoStyle3D();
        geoStyle3D.setAltitudeMode(AltitudeMode.ABSOLUTE);
        geoStyle3D.setFillMode(FillMode3D.FILL);
        geoStyle3D.setLineWidth(1.0D);

        scene.getLayers().add(datasetVector, layer3DSettingVector, true);

        Recordset rt = datasetVector.query(filter, CursorType.STATIC);
        int[] ids = new int[rt.getRecordCount()];
        rt.moveFirst();
        int num = 0;
        while (!rt.isEOF()){
            ids[num] = rt.getID();

            rt.moveNext();
            num++;
        }
        if (rt != null){
            rt.close();
            rt.dispose();
        }


        for (int i = 0; i < scene.getLayers().getCount(); i++) {
            Layer3DDataset layer3DDataset = (Layer3DDataset)scene.getLayers().get(i);
            Selection3D selection3D = layer3DDataset.getSelection();
            selection3D.clear();
            if(layer3DDataset.getDataset().getName().equals(datasetVector.getName())){
                selection3D.addRange(ids);
            }
            selection3D.updateData();
        }
        
        Rectangle2D rectangle2D = datasetVector.getBounds();
        double maxZ = datasetVector.getMaxZ();
        scene.ensureVisible(rectangle2D, 2000, maxZ);
        scene.refresh();
    }

1个回答

您好,选择集建议您通过Scenecontrol的Scene的findSelection方法来获得选择集集合。

findSelection传入参数为false时,场景中每拥有一个矢量数据集的图层则会返回一个选择集。

希望可以帮助到您。
10,513EXP 2023年03月09日

我测试了选择集使用这个方法获取,scene.findSelection(false),然后再添加要素进去,还是在场景里面不高亮。代码如下:

Selection3D[] selection3DS = scene.findSelection(false);
Selection3D selection3D = selection3DS[0];
selection3D.addRange(ids);
selection3D.updateData();

但是我测试发现实际在场景中是有选中对象的,只是看着不高亮,直接在场景右键查看属性是可以看到对象的属性信息的。通过代码测试也可以获取到选中对象的相关信息。

同样的代码我在已经有的场景里添加选择集是可以的。现在就是通过代码新建场景之后,代码添加数据,代码添加选择集,选择集不高亮显示

设置一下选择集的选择风格再加对象,Selection3D.setStyle
选择集的高亮显示是对每一个选择集都要设置显示风格吗?是否可以针对场景设置选择集的显示分格,没找到这样的方法
选择集倒确实是一个个图层相互独立的,没有批量一键设置成相同的接口。

测试发现给选择集加上选择风格,还是没有实现高亮显示。但是我直接右键查看属性显示的是选中对象的属性。在当前场景鼠标去选择要素也是高亮显示的。很奇怪不知道哪里有问题

GeoStyle3D geoStyle3DSelected = new GeoStyle3D();
geoStyle3DSelected.setAltitudeMode(AltitudeMode.ABSOLUTE);
geoStyle3DSelected.setFillForeColor(new Color(178,178,255));
geoStyle3DSelected.setLineColor(new Color(0,0,255));
geoStyle3DSelected.setLineWidth(1.5D);
geoStyle3DSelected.setMarkerColor(new Color(0,0,255));
geoStyle3DSelected.setMarkerSize(5.0);
geoStyle3DSelected.setFillMode(FillMode3D.LINE_AND_FILL);

Selection3D[] selection3DS = scene.findSelection(false);
Selection3D selection3D = selection3DS[0];
selection3D.setStyle(geoStyle3DSelected);
selection3D.addRange(ids);
selection3D.getLayer()
selection3D.updateData();

Rectangle2D rectangle2D = datasetVector.getBounds();
double maxZ = datasetVector.getMaxZ();
scene.ensureVisible(rectangle2D, 2000, maxZ);
scene.refresh();

您这边具体是什么数据集呢,数据源是什么类型。
...