首页 / 浏览问题 / 组件GIS / 问题详情
桌面二次开发:查询模型信息中的纹理大小,内存居高不下
77EXP 2021年05月19日

1、supermap-idesktopx-10.1.2-0330-5260-86195-win64-bin-zip-chs

代码操作 查询模型纹理信息  内存居高不下:

DatasetVector datasetVector = (DatasetVector) selectedDataset;
                Recordset recordset = datasetVector.getRecordset(false, CursorType.STATIC);
                recordset.moveFirst();
                long l1 = System.currentTimeMillis();
                ModelEntityManager modelEntityManager = new ModelEntityManager(datasetVector);
                long l2 = System.currentTimeMillis();
                System.out.println("ModelEntityManager构建耗时:" + (l2-l1) + "ms");
                while (!recordset.isEOF()){
                    Geometry geometry = recordset.getGeometry();
                    GeoModel3D geoModel3D = (GeoModel3D) geometry;
                    Model model = geoModel3D.getModel();

//                    ModelEntityManager modelEntityManager = new ModelEntityManager();
//                    Model append = modelEntityManager.append(model);
                    ArrayList<String> materialNames = modelEntityManager.getMaterialNames();
                    System.out.println(materialNames.size());
                    for (String materialName : materialNames) {
                        Material3D material = model.getMaterial(materialName);
                        if (material==null){
                            continue;
                        }
                        TextureData texture = material.getTexture();
                        if (texture != null){
                            BufferedImage data = texture.getData();
                            int height = texture.getHeight();
                            int width = texture.getWidth();



                            data.flush();
                            data = null;
                            texture.dispose();
                            System.out.println(height + "===" + width);
                        }
                        material.dispose();
                    }

                    //append.dispose();
                    //modelEntityManager.dispose();
                    model.dispose();
                    geoModel3D.dispose();
                    geometry.dispose();
                    recordset.moveNext();
                }
//                modelEntityManager.reset();
                modelEntityManager.dispose();
                recordset.dispose();
                recordset.close();
                datasetVector.close();
                selectedDataset.close();

2、然后我尝试用桌面打开 去查看模型信息--结果也是一样的内存逐渐升高,

桌面打开平面场景后,右键属性  查看模型信息   内存居高不下。 关掉场景窗口后仍然高的一匹

咋解决。。。。。。。。。。。。。。。。。。。。。。。。

或者有啥办法能够获取到模型的大小

1个回答

您好,我这边使用10.1.2版本的iDesktopX没有重现您那边的问题,您那边是要获取模型的大小吗?具体获取什么值呢
9,197EXP 2021年05月20日
是导入的倾斜。  主要是想要获取模型的大小
您那边是将倾斜数据通过导入数据集的方式导入的吗?麻烦具体说一下应用场景。
将倾斜数据  .obj结尾的   导入到数据集。 然后打开到场景,

主要是模型有的太大了 ,想要代码判断  检查一些异常大小的模型
您好,您那边为啥不直接通过桌面工具将obj转换为osgb,再通过生成配置文件添加到场景
...