模型数据处理之实例化处理

作者:翔翔

  上一篇博客说的是移除重复点和重复面,下面就来介绍如何实例化处理。何为实例化?实例化有什么作用呢?
  实例化:在面向对象的编程语言中,new一个类出来,这个就叫实例化。而本文的实例化和这个类似,new出来的这个类被无限复用。超图中的实例化:一个重复的对象只存储一次,然后将该对象重复使用多次。减少了存储空间;在场景中渲染时,内存也只需要存储一个对象,与之复用的就只需要更改位置和旋转缩放等状态即可。
  在SuperMap iDesktop中,找到实例化处理的按钮然后选择一个对象即可。
在这里插入图片描述

实例化处理

  实例化话即可在对象属性的窗口中查看共用了多少次,如下图所示:

在这里插入图片描述

实例化处理结果

   实现的代码如下:
	//实例化存储需要用到实体管理器 ModelEntityManager  虽然实体管理器提供的追加Model的功能,但是Model没有Name属性,不能用于实例化
    //GeoModel3D、Model实际上都是壳,真正的数据是骨架Skeleton
    ModelEntityManager em = new ModelEntityManager(dv);
    string filename = Path.GetFileNameWithoutExtension(filesetting.FilePath);
    //定义字典,模型文件名称,对应的骨架名称集合;公用的对象直接取骨架名称构建Model即可
    Dictionary<string, List<string>> m_ModelAndSkeletons = new Dictionary<string, List<string>>();
    //模型获取骨架,存储到实体管理器中ModelEntityManager
    if (!m_ModelAndSkeletons.Keys.Contains(filename))
    {
    		m_ModelAndSkeletons[filename] = new List<string>();
    }
    int skeletoncount = resultModelRemove.GetSkeletonCount(-1);//-1代表精细层,如果有lod 获取lod数量 再获取每个lod层对应的骨架
    for (int i = 0; i < skeletoncount; i++)
    {
    		SkeletonID skeletonID = new SkeletonID(-1, i);
    		Skeleton skeleton = resultModelRemove.GetSkeleton(skeletonID);
    		Skeleton newskeleton = em.Append(skeleton);
    		m_ModelAndSkeletons[filename].Add(newskeleton.Name);
        	newskeleton.Dispose();
        	skeleton.Dispose();
    }
    resultModelRemove.Dispose();
    //所有骨架存储完后,em存储一下
    em.Save();
    //实例化对象,公用的对象
    Model _model = new Model();
    foreach (string skeletonName in m_ModelAndSkeletons[filename])
    {
           _model.AddSkeleton(em, skeletonName);
	}
	//新建geomodel3d最后保存到数据集中去
    GeoModel3D model3d = new GeoModel3D();
	//这是模型的位置
    model3d.Position = new Point3D(115, 30, 1);
   	model3d.IsLonLat = true;
   	model3d.Model = _model;
   	//添加到记录集中,保存更新
   	recordset.AddNew(model3d);
   	model3d.Dispose();
    recordset.Batch.Update();
	recordset.Dispose();

      以上就是实例化的代码,如有不对还请批正。
    转载请注明出处:https://blog.youkuaiyun.com/u012874078/article/details/93898926

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值