首页 / 浏览问题 / 组件GIS / 问题详情
如何根据宽高创建自定三维线(立方柱形)符号?
8EXP 2024年10月28日

使用产品:iOBjectsJava 11.1.1 操作系统:win11 x64

数据类型:PostgreSQL

问题详细描述:如何根据宽高创建自定三维线(立方柱形)符号?

问题关闭原因: 已解决

2 个回答

您好,可以参考:

   GeoStyle3D geoStyle3D = new GeoStyle3D();
   geoStyle3D.setAltitudeMode(com.supermap.data.AltitudeMode.ABSOLUTE);
   geoStyle3D.setLineWidth(3);
   geoStyle3D.setLineColor(Color.YELLOW);
   layer3DSettingVector.setStyle (geoStyle3D);
    //将矢量数据集显示在三维场景中
   Layer3DDataset layer3DDataset=sceneObject.getLayers().add(tempDatasetVector, layer3DSettingVector, true);
   layer3DDataset.updateData();
   sceneObject.refresh();
1,015EXP 2024年10月28日
我要实现沟渠管线的三维符号化,沟渠管线一般为方管,为宽X高的一个管径,想实现根据不同的宽高比生成相应的符号。

现在系统只能提前设计好符号,然后使用符号符号化。

如何实现根据宽高比创建不同的符号,然后实现不同管径管线的符号化。

其实我们计划用代码实现desktop里的这个功能。就不需要用户手动操作desktop去创建了。

给后来者一点参考吧,咨询了多次技术客服,最终转到研发,终于解决了。

    public static int createLine3DSymbol(double width, double height) {
        double max = width > height ? width : height;
        int length = SwingUtils.countDigits(max);
        double bf = length > 2 ? Math.pow(10, length - 2) : 1;
        int w = (int) (width / bf);
        int h = (int) (height / bf);
        w = w == 0 ? 1 : w;
        h = h == 0 ? 1 : h;
        String name = "方管截面:" + w + ":" + h, groupname = "自定义符号[John]";
        SymbolMarkerLibrary libMarker = SysBaseVarInfo.G_SysDataWorkSpace.getResources().getMarkerLibrary();
        SymbolLineLibrary libLine = SysBaseVarInfo.G_SysDataWorkSpace.getResources().getLineLibrary();
        Symbol sLine = libLine.findSymbol(name);
        if (sLine != null) return sLine.getID();
        Symbol sMarker = libMarker.findSymbol(name);
        if (sMarker == null) {
            int groupIndex = libMarker.getRootGroup().getChildGroups().indexOf(groupname);
            SymbolGroup groupMarker = groupIndex == -1 ? libMarker.getRootGroup().getChildGroups().create(groupname) : libMarker.getRootGroup().getChildGroups().get(groupIndex);
            SymbolMarker marker = new SymbolMarker();
            Geometry g = new GeoRectangle(new Point2D(w / 2, h / 2), w, h, 0);
            marker.fromGeometry(g, new Rectangle2D(0, 0, w, h));
            marker.setName(name);
            marker.setSize(w > h ? w : h);
            int symbolidMarker = libMarker.add(marker, groupMarker);
            sMarker = libMarker.findSymbol(symbolidMarker);
        }
        if (sMarker == null) return -1;//表示创建截面点符号失败
        SymbolLine line = new SymbolLine();
        SymbolLineBase lineBase = new SymbolLineBase();
        lineBase.setType(SymbolLineBaseType.CUSTOMIZATION3D);
        lineBase.setCode(sMarker.getID());
        line.add(lineBase);
        line.setName(name);
        int groupindex = libLine.getRootGroup().getChildGroups().indexOf(groupname);
        SymbolGroup group = groupindex == -1 ? libLine.getRootGroup().getChildGroups().create(groupname) : libLine.getRootGroup().getChildGroups().get(groupindex);
        return libLine.add(line, group);
    }
8EXP 2024年11月18日
...