SuperMap iObjects.NET 模型编辑之拆分打散

文章介绍了在iObjects.NET框架下如何实现模型的打散和拆分功能。模型打散用于处理顶点数过多的问题,而模型拆分则用于检查BIM模型的详细构造。文章详细阐述了这两个功能的实现思路,包括获取骨架、遍历子对象以及使用ModelEntityManagerSplitSkeleton接口进行拆分,并提供了相应的代码示例。
摘要由CSDN通过智能技术生成

模型合并,拆分,打散是模型编辑中较为常见的功能。近期遇到一些小伙伴咨询在iObjects.NET中中如何实现模型拆分和打散呢?接下来我们就来看看具体的实现思路吧。模型合并可参考该篇文档: iObjects.Net模型合并

目录

  • 一、打散和拆分介绍。
  • 二、重要接口介绍
  • 三、实现思路
    • 3.1 模型打散
    • 3.2 模型拆分
  • 四、实现效果

一、打散和拆分介绍。

模型打散:有时模型数据子对象太多,可能会导致模型数据中顶点数及三角面过多,此类数据在生成缓存时有时会导致崩溃,此时需要将模型打散后进行操作。实现把模型对象中的每个“子对象”另存为模型对象,保证各个单独模型的尺寸等信息不变。
模型拆分:在完成BIM模型的搭建后,有时需要对诸如层高、墙厚、板厚、平面布置等反复核查,即需要获得模型子对象的对象。通过BIM子对象拆分可以得到这些构件的尺寸,避免自动拆分后造成预制构件尺寸不对,现场无法组装的情况。模型拆分后的对象比模型打散更加精细。

二、重要接口介绍

模型打散:

属性或方法介绍
ModelGetSkeleton获取指定的骨架
ModelGetSkeletonCount获取骨架数量
ModelAddSkeleton向精细层添加骨架
ModelGetSkeleton获取指定的骨架

模型拆分:

属性或方法介绍
ModelEntityManagerSplitSkeleton对模型的骨架进行拆分

三、实现思路

3.1 模型打散

模型打散没有直接的接口可以用,需要自行通过model.GetSkeleton获取到原始模型的骨架后,存入一个新的独立的model。具体的步骤如下:
1、获取到原始数据集的记录集,新建一个模型数据集以存储打散后的数据
2、遍历原始记录集,获取到每个对象的model
3、通过model.GetSkeletonCount遍历其中的子对象。
4、通过 model.GetSkeleton获取每一个子对象的骨架。
5、新建model类,将上一步获取到的骨架存入新建的model中。
代码如下:

                //获取原始数据集
                DatasetVector datasetVector = m_workspace.Datasources[0].Datasets["单个模型"] as DatasetVector;
                Recordset recordset = datasetVector.GetRecordset(false, CursorType.Dynamic);


                //创建新模型数据集
                DatasetVectorInfo datasetVectorInfo = new DatasetVectorInfo();
                datasetVectorInfo.Type = DatasetType.Model;
                datasetVectorInfo.IsFileCache = false;
                datasetVectorInfo.Name = "模型打散706";
                m_datasource = m_workspace.Datasources[0];
                m_datasource.Datasets.Create(datasetVectorInfo);
                DatasetVector datasetVectorNew = m_workspace.Datasources[0].Datasets["模型打散706"] as DatasetVector;
                datasetVectorNew.PrjCoordSys = datasetVector.PrjCoordSys;//为新建的数据集赋坐标系

                Recordset recordsetNew = datasetVectorNew.GetRecordset(false, CursorType.Dynamic);
                recordsetNew.MoveFirst();
                recordsetNew.Edit();
                recordset.MoveFirst();


                for (int i = 0; i < recordset.RecordCount; i++)//遍历记录集
                {

                    GeoModel3D geoModel3D = recordset.GetGeometry() as GeoModel3D;
                    Model model = geoModel3D.Model;

                    for (int j = 0; j < model.GetSkeletonCount(-1); j++)//遍历子对象
                    {
                        int hh = model.GetSkeletonCount(-1);
                        SkeletonID skeletonID = new SkeletonID(-1, j);//-1代表LOD层,j代表骨骼编号(即子对象编号)
                        Skeleton skeletonNew = model.GetSkeleton(skeletonID);

                        Model modelNew = new Model();
                        modelNew.Add(skeletonNew);//将骨架存入模型
                        GeoModel3D geoModelNew = new GeoModel3D(modelNew)
                        {
                            Position = geoModel3D.Position,
                        };
                        geoModelNew.Position = geoModel3D.Position;
                        geoModelNew.Model = modelNew;
                        recordsetNew.AddNew(geoModelNew);//将模型数据集存入新记录集
                        recordsetNew.Update();

                    }
                    recordset.MoveNext();

                }
                datasetVectorNew.Close();

3.2 模型拆分

模型拆分使用的是ModelBuilder3D.SplitSkeleton()方法。具体的步骤如下:
1、获取到原始数据集的记录集,新建一个模型数据集以存储拆分后的数据
2、遍历原始记录集,获取到每个对象的model
3、通过ModelBuilder3D.SplitSkeleton()拆分每一个model,并将结果存入新的model
5、将新的model存入新数据集即可。
代码如下:

                DatasetVector datasetVector = m_workspace.Datasources[0].Datasets["单个模型"] as DatasetVector;
                Recordset recordset = datasetVector.GetRecordset(false, CursorType.Dynamic);

                //创建新模型数据集
                DatasetVectorInfo datasetVectorInfo = new DatasetVectorInfo();
                datasetVectorInfo.Type = DatasetType.Model;
                datasetVectorInfo.IsFileCache = false;
                datasetVectorInfo.Name = "模型拆分";
                m_datasource = m_workspace.Datasources[0];
                m_datasource.Datasets.Create(datasetVectorInfo);
                DatasetVector datasetVectorNew = m_workspace.Datasources[0].Datasets["模型拆分706114"] as DatasetVector;
                datasetVectorNew.PrjCoordSys = datasetVector.PrjCoordSys;

                Recordset recordsetNew = datasetVectorNew.GetRecordset(false, CursorType.Dynamic);

                recordsetNew.MoveFirst();
                recordsetNew.Edit();
                recordset.MoveFirst();

                for (int i = 0; i < recordset.RecordCount; i++)//遍历记录集
                {
                    GeoModel3D geoModel3D = recordset.GetGeometry() as GeoModel3D;
                    Model model = geoModel3D.Model;
                    Model modelNew = new Model();
                    Boolean result = ModelBuilder3D.SplitSkeleton(model, modelNew, true);//对模型的骨架进行拆分
                    int count = modelNew.GetSkeletonCount(-1);//获取lod层级为-1的骨架数量
                    GeoModel3D geoModelNew = new GeoModel3D();
                    geoModelNew.Model = modelNew;
                    geoModelNew.Position = geoModel3D.Position;
                    recordsetNew.AddNew(geoModelNew);//将模型数据集存入新记录集
                    recordsetNew.Update();
                    recordset.MoveNext();

                }

四、实现效果

接下来让我们在桌面看一下具体的实现效果吧。
首先展示的是原始数据,该数据有1个对象,1个对象中包含了9个子对象。
在这里插入图片描述
通过模型打散后将所有的子对象存储成了对象,如下图所示,有9个对象,且每个对象只有一个子对象:

在这里插入图片描述
通过模型拆分以后,虽然还是1个对象,但子对象的个数却增加了,变成19个。如下图所示:
在这里插入图片描述

supermapsupport
关注 关注
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SuperMap iObjects .NET 帮助文档
03-21
SuperMap iObjects .NET 帮助文档》是一份专为开发者设计的详细参考资料,主要聚焦于使用SuperMap iObjects .NET进行GIS(地理信息系统)开发的技术细节和实践指导。SuperMap iObjects .NET是超图软件公司推出的一...
SuperMap iObjects .NET Help.chm
05-20
supmap iobject 帮助手册
SuperMap iPortal如何使用处理自动化建模
SuperMap技术控
12-26 373
SuperMap iPortal 提供了处理自动化建模(GPAModelBuilder) WebApp。它是一款可视化构建处理自动化模型的web应用。通过处理自动化工具(以下简称工具)构建处理自动化模型(以下简称模型)并运行,可实现空间数据处理与分析过程的自动化。SuperMap iPortal 作为 GIS 门户软件平台,支持了GPA 模型资源的保存、查询和分享。
SuperMap iObjects .NET 11i二次开发(八)——小白进阶之交互式编辑绘制
小天地
03-05 1026
上一篇博文简单介绍了有关属性查图与图查属性的相关操作,这个部分主要认识下交互式编辑绘制的相关操作。
SuperMap iObjects .NET 11i二次开发(五)——小白进阶之有关数据集操作
小天地
01-08 1408
上一篇博文简单介绍了有关于数据源的操作,这个部分主要认识下有关数据集的相关操作。
SuperMap iObjects .NET 11i二次开发(二)——小白进阶之控件关联与释放资源
小天地
01-02 1225
上一篇博文简单介绍了SuperMap iObjects .NET 11i的初始化环境配置,这个部分主要认识下常用控件以及控件与控件之间如何关联并且如何释放资源。
SuperMap iObjects .NET 11i二次开发(一)——小白进阶之初始化环境配置
小天地
12-20 2029
SuperMap iObjects .NET 11i是由超图软件推出的一套基于.NET Framework的大型组件式GIS开发平台,功能完备、开发便捷,易于构建通用GIS平台以及基于地理空间信息的行业应用系统。
基于超图supermap iobjects .net 10i的管线管理(Pipeline management based on hypermap ioobjects. net 10i)
专注GIS软件开发。
12-12 295
基于超图supermap iobjects 10i的管线管理
SuperMap iObjects .NET 11i二次开发(三)——小白进阶之有关文件型工作空间操作
小天地
01-02 1861
上一篇博文简单介绍了控件与控件之间如何关联并且如何释放资源,这个部分主要认识下有关于文件型工作空间的操作。
【超图】SuperMap iObjects .NET之批量导出含坐标信息模型
冰美式当作酒
05-23 1047
作者:taco 前言:在使用超图桌面产品的时候,会发现我的模型只能导入成超图的格式,也就是模型数据集格式,在处理成缓存后也不是通用的模型格式,再想导出成通用的时候就发了愁了。模型数据集中的对象确实可以导出成标准的格式,但是每次导出却只能导出一个,我是一个一个的导出呢?还是全都合并后再去导出呢?而且最要命的是,导出后的模型竟然没有了坐标信息!地理信息中最重要的就是模型的坐标信息,导出后竟然都消失不见了。那我后面怎么继续使用呢。基于这个问题,其实靠iObjects提供的组件产品是完完全全可以实现的。只不过暂时
SuperMap iObjects .NET 11i二次开发(七)——小白进阶之属性查图与图查属性
小天地
01-17 794
上一篇博文简单介绍了有关地图加载与地图浏览的相关操作,这个部分主要认识下属性查图与图查属性的相关操作。
SuperMap iObjects .NET 7C地图网格线生成
12-15
在IT行业中,SuperMap iObjects .NET是一款强大的GIS(地理信息系统)开发框架,它由SuperMap公司提供,专为.NET开发者设计,用于构建基于地图的应用程序。7C是该产品的某一版本,通常会包含一系列新功能和性能优化...
SuperMap iObjects .NET 自定义鼠标右键移动地图
12-14
在GIS(地理信息系统)开发中,SuperMap iObjects .NET 是一个强大的组件库,它提供了丰富的功能,使得开发者能够构建高效、灵活的GIS应用程序。本示例主要关注如何利用SuperMap iObjects .NET 自定义鼠标右键来实现...
SuperMap iObjects .NET 8C 三维缓冲区分析结果保存为三维模型对象
12-07
例如,使用SuperMap iObjects .NET提供的`Buffer3D`类进行缓冲区构建,使用`SaveAsModel`方法将结果保存为模型文件,再通过`Scene`对象加载模型到场景中显示。 总结来说,SuperMap iObjects .NET 8C 三维缓冲区分析...
.Net自动更新程序GeneralUpdate,适用于wpf,winfrom,控制台应用
qq565221961的博客
10-16 830
Option(UpdateOption.MainApp, "your application name").//指定更新完成后需要启动的主程序名称不需要加.exe直接写名称即可。Console.WriteLine($"下载速度:{e.Speed},剩余时间:{e.Remaining.Minute}:{e.Remaining.Second}");version=1.0.0.1").//指定更新地址。
.net 根据html的input type=“week“控件的值获取星期一和星期日的日期
最新发布
代码笔记
10-18 194
.net 根据html的input type="week"控件的值获取星期一和星期日的日期 说明: ①我选中了week控件的:第42周(即2024年的第42个周,值为:2024-W42,格式为:yyyy-WW) ②截取字符串,获得年:2024,和年度第几周:42,开始计算日期,见js部分 ③计算获得:第42周的,星期一是“2024-10-14”,星期日是“2024-10-20” ④传递着两个日期值到MVC后台,对数据库进行日期范围的SQL查询
.NET 通过C#设置Excel工作表的页面设置
Eiceblue的专栏
10-12 773
本文演示如何在.NET平台使用C#设置Excel工作表页面常用设置。
【CS常见问题】你用的是VS2019,最高支持.NET5.0,但是项目将.NET6.0设为目标无法运行,怎么办?
敖丙007的博客
10-15 522
【CS常见问题】你用的是VS2019,最高支持.NET5.0,但是项目将.NET6.0设为目标无法运行,怎么办?
SuperMap iObjects.NET 7c开发入门指南:C#实战教程
SuperMap iObjects.NET 7c入门文档是北京超图软件股份有限公司为初学者准备的一份教程,专为具备C#编程基础并希望开始使用SuperMap iObjects.NET组件进行开发的读者设计。该文档强调版权归属,所有内容受《中华人民...
写文章

热门文章

  • MongoDB集群搭建及使用 76619
  • 倾斜摄影模型生成DSM、DOM操作流程 60551
  • 菜鸟都应该知道的倾斜摄影测量知识 59484
  • 常见3DMAX插件导出模型丢失贴图问题 53132
  • BIM与三维GIS结合 47708

分类专栏

  • 大数据GIS调优
  • 云GIS 326篇
  • MongoDB 1篇
  • WebGIS 136篇
  • SuperMap开发者大会 2篇
  • 专项答疑 30篇
  • 桌面GIS 313篇
  • 组件GIS 172篇
  • 移动GIS 57篇
  • 三维GIS 418篇
  • 空间数据引擎 13篇
  • 行业案例 75篇
  • GIS大赛 8篇
  • GIS教育培训 1篇
  • 畅想+杂谈 31篇

最新评论

  • SuperMap GIS基础产品FAQ集锦(202407)

    Chinagototo: 【iDesktopx】桌面无法连接postgis数据源,PG启动失败报错:replication checkpoint has wrong magic 0 instead of 307747550? 帮了大忙,差点就重装集群的PostGreSQL了...

  • 银河麒麟V10部署iServer

    hi_chap: 能在来个链接么 失效了

  • SuperMap iClient3D for Cesium 如何使用白模数据与抽屉效果结合,展示白模内部结构

    何生GIS: 矢量轮廓数据要求不高的可以自己去osm下

  • SuperMap iObjects Java 之多任务生成地图瓦片

    CSDN-Ada助手: 不知道 Java 技能树是否可以帮到你:https://edu.csdn.net/skill/java?utm_source=AI_act_java

  • SuperMap iDesktop 8C使用KingbaseES数据库

    JavaMinNoob: 大佬,能再提供一份网盘链接吗,以前的失效了 百度云盘:http://pan.baidu.com/s/1i5NgzUt 密码:cclk

大家在看

  • 基于django+vue+Vue基于web的智慧云医疗的设计与实现【开题报告+程序+论文】-计算机毕设
  • python+flask框架的基于Android的智慧物流系统 (开题+程序+论文) 计算机毕业设计
  • python+flask框架的基于Android的智慧物流系统 8(开题+程序+论文) 计算机毕业设计
  • Redis入门到精通(二):入门Redis看这一篇就够了 339
  • 基于django+vue+Vue基于Web的玉米病虫害诊疗系统ax6wo【开题报告+程序+论文】-计算机毕设

最新文章

  • SuperMap GIS基础产品FAQ集锦(20241014)
  • 华为GaussDB数据库之Yukon安装与使用
  • 华为GaussDB数据库(单机版)在ARM环境下的安装指南
2024
10月 1篇
09月 10篇
08月 8篇
07月 11篇
06月 11篇
05月 6篇
04月 8篇
03月 3篇
01月 2篇
2023年199篇
2022年225篇
2021年131篇
2020年164篇
2019年334篇
2018年67篇
2017年212篇
2016年97篇
2015年40篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

玻璃钢生产厂家玻璃钢香蕉雕塑电话咨询天津玻璃钢红军雕塑佛山玻璃钢雕塑品北京特色商场美陈价格玻璃钢公仔雕塑评语莆田玻璃钢卡通雕塑规格临江玻璃钢关公雕塑许昌校园玻璃钢雕塑价格石家庄玻璃钢仿真水果雕塑厂家常见商场美陈生产企业很好的玻璃钢雕塑设计乐山玻璃钢广场雕塑定制浙江欧式玻璃钢雕塑优势玻璃钢雕塑厂家批发零售韦陀天尊玻璃钢雕塑摆件商场美陈比赛兰州仿铜玻璃钢雕塑景洪玻璃钢座椅雕塑抚顺动物玻璃钢雕塑定做户外商场美陈价格深圳玻璃钢雕塑厂电话专业的商场美陈公司廊坊杭州玻璃钢雕塑衡阳户外景观玻璃钢雕塑丽江市玻璃钢雕塑收费青岛玻璃钢雕塑订购主题玻璃钢雕塑报价表漳州形象玻璃钢雕塑阿拉尔商场美陈石家庄学校玻璃钢雕塑公司香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化