SuperMap iObjects .NET 点外挂模型缓存

171 篇文章 54 订阅

翔翔

  什么叫点外挂模型?顾名思义,三维点与外部模型文件进行关联。那么是如何关联的呢?三维点数据中可以存在很多属性,其中有一个字段存储的是模型文件的绝对路径,还有一个字段存储的是模型旋转缩放平移的矩阵,这样就将三维点和外部模型关联上了。
  在超图的三维平台中,模型数据都要生成缓存,这样是为了在场景中提升性能。iDesktop 10i中可以已经集成该功能,在桌面的右上角搜索“点集生成缓存外挂模型”就能找到该功能的具体地方从而进行操作。但是本文主要说的是iObjects .NET组件中是如何实现点外挂模型生成缓存的。
  在iObjects .NET中,用到的类是Point3DLinkModelCacheBuilder。使用方法如下代码:

public static void Point3DLinkModelToCache()
        {
            Workspace m_workspace = new Workspace();
            DatasourceConnectionInfo info = new DatasourceConnectionInfo(@"E:\1、工作\Code\Point3DAndModelToCache\Data\Point3D.udbx", "Point3D", "");
            info.EngineType = EngineType.UDBX;
            Datasource m_datasource = m_workspace.Datasources.Open(info);
            DatasetVector m_datasetVector = m_datasource.Datasets["Position"] as DatasetVector;

            //三维点外挂模型生成缓存
            Point3DLinkModelCacheBuilder m_Point3DLinkModelCacheBuilder = new Point3DLinkModelCacheBuilder();
            List<DatasetSetting> datasets = new List<DatasetSetting>();
            DatasetSetting ds = new DatasetSetting();
            ds.Dataset = m_datasetVector;
            ds.UserIDField = "SmID";
            datasets.Add(ds);
            //m_Point3DLinkModelCacheBuilder.Dataset = m_datasetVector;  //点数据集
            m_Point3DLinkModelCacheBuilder.DatasetSettingArray = datasets;//批量点数据集生成缓存外挂模型
            m_Point3DLinkModelCacheBuilder.Bounds = m_datasetVector.Bounds;  //缓存范围大小
            m_Point3DLinkModelCacheBuilder.LODSize = 4; //LOD层级数
            m_Point3DLinkModelCacheBuilder.ObjectFiltrateThreshold = 2;  //过滤阈值
            m_Point3DLinkModelCacheBuilder.ModelFilePathField = "ModelPath";  //模型文件路劲,给定字段名
            m_Point3DLinkModelCacheBuilder.ProcessThreadsCount = 4;  //线程数
            m_Point3DLinkModelCacheBuilder.TileWidth = 600;  //瓦片边长,单位:米
            ///设置矩阵
            m_Point3DLinkModelCacheBuilder.MatrixField = "Matrix";

            m_Point3DLinkModelCacheBuilder.FileType = CacheFileType.S3MB;  //缓存文件类型,建议生成S3MB;
            m_Point3DLinkModelCacheBuilder.CacheName = "Point3D";   //缓存名称     
            m_Point3DLinkModelCacheBuilder.OutputFolder = @"E:\1、工作\Code\Point3DAndModelToCache\Data";  //缓存输出路径
            m_Point3DLinkModelCacheBuilder.Build(); //执行生成缓存

            Console.WriteLine("缓存成功");
            Console.ReadLine();
        }

  下面详细解析上诉代码。
  Dataset:如果单个数据集生成一个scp配置文件,那么就设置该属性。
  DatasetSettingArray:批量点数据集生成缓存,是将多个点数据集添加到List,最后生成一个scp配置文件,也就是将多个图层合并成一个图层。
  Bounds:缓存的范围,也就是数据集的范围。
  LODSize:LOD层级,按照层级对模型进行简化。
  ObjectFiltrateThreshold:过滤阈值,当模型显示的像素值小于该值时,模型对象将会被隐藏,有效提升性能。
  ModelFilePathField: 模型文件路径字段,一个文本型字段,里面存储的是模型的全路径,模型文件格式建议用s3m或者s3mb格式。
  ProcessThreadsCount:生成缓存时使用的线程数,线程数设置的越多,生成速度越快。
  TileWidth:瓦片边长,根据数据来确定瓦片边长范围,范围不能太大也不能太小,当太大了之后一块上的模型久越多,此时加载性能会较差。当太小了之后,tiles文件夹越多,加载性能也会较差。此值需要根据当前使用数据来尝试。
  MatrixField: 矩阵字段,每个值以#隔开。主要表示当前模型的旋转、缩放和平移的效果。如果模型没有旋转、缩放和平移,那么就按照默认的矩阵设置。默认矩阵:1#0#0#0#0#1#0#0#0#0#1#0#0#0#0#1 。如果需要自己计算矩阵可以参考组件帮助文档中的Matrix类。
  FileType:缓存文件类型,支持S3MB、S3M、OSGB等,但是建议使用S3MB。
  CacheName:缓存文件名字。
  OutputFolder:缓存输出路径。
  Build():开始生成缓存。
  通过以上代码生成的缓存效果如下图:
!在这里插入图片描述
本文转载地址:https://blog.csdn.net/u012874078/article/details/105198007

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值