CN117077256A - 从rvt格式到b3d格式的转换方法及其插件和系统 - Google Patents

从rvt格式到b3d格式的转换方法及其插件和系统 Download PDF

Info

Publication number
CN117077256A
CN117077256A CN202311045833.5A CN202311045833A CN117077256A CN 117077256 A CN117077256 A CN 117077256A CN 202311045833 A CN202311045833 A CN 202311045833A CN 117077256 A CN117077256 A CN 117077256A
Authority
CN
China
Prior art keywords
format
data
attribute
rvt
converting
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202311045833.5A
Other languages
English (en)
Inventor
李大平
田华
刘振宇
谭建荣
赵庆祥
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhejiang University ZJU
China Construction Fifth Engineering Bureau Co Ltd
Original Assignee
Zhejiang University ZJU
China Construction Fifth Engineering Bureau Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Zhejiang University ZJU, China Construction Fifth Engineering Bureau Co Ltd filed Critical Zhejiang University ZJU
Priority to CN202311045833.5A priority Critical patent/CN117077256A/zh
Publication of CN117077256A publication Critical patent/CN117077256A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/10Geometric CAD
    • G06F30/13Architectural design, e.g. computer-aided architectural design [CAAD] related to design of buildings, bridges, landscapes, production plants or roads
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T17/00Three dimensional [3D] modelling, e.g. data description of 3D objects

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Geometry (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Structural Engineering (AREA)
  • Computational Mathematics (AREA)
  • Civil Engineering (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Evolutionary Computation (AREA)
  • General Engineering & Computer Science (AREA)
  • Architecture (AREA)
  • Computer Graphics (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开一种从rvt格式到b3d格式的转换方法及其插件和系统,该方法通过B3DExportContext对象;获取待转换的rvt格式文件,依次将rvt格式文件中的准备开始导出文件中的数据内容;从rvt格式文件视图开始确定需要导出的数据;获取rvt格式文件中的场景元数据并按照b3d格式转换后导出;获取待转换的rvt格式文件中的核心数据并按照b3d格式转换后导出;本方法能将rvt格式完整地转化成b3d格式,为rvt格式文件的查看、分享和应用提供基础。该方法在转化过程中不会遗漏构件,因为本发明使用了IModelExportContext接口,可以遍历到场景中的所有元素,在几何类型上支持所有的实体、表面、线框和点等类型,也支持房间、楼层等虚拟构件信息。

Description

从rvt格式到b3d格式的转换方法及其插件和系统
技术领域
本发明涉及建筑信息处理技术领域,特别是一种从rvt格式到b3d格式的转换方法及其插件和系统。
背景技术
建筑信息模型BIM是指在计算机中对建筑及其设施的物理和功能特性的数字化表达,在建筑工程全生命期内提供共享的信息资源,并为各种决策提供基础信息的技术,在建筑业广泛使用。
大型建筑BIM模型包含的构建数以万计,模型文件体积巨大,主要包括两方面的信息:几何模型信息和BIM属性信息,以BIM模型格式为主,包括.rvt、.dgn、fbx、obj、step等,rvt格式是美国欧特克公司开发的Revit软件的内部封闭格式,在建筑工程领域应用广泛,只能使用Revit软件才能打开,无法实现数据互通互融,无法通过网页在线应用;b3d格式是一种开放的建筑数字孪生格式,具有文件体积小、存储速度快、传输性能好、绘制效率高、扩展性强、支持增量传输、虚实结合等特点,适合开发建筑数字孪生应用。
因此,需要一种能将rvt格式模型完整无误地转换成用b3d表示的数字孪生格式的方法。
发明内容
有鉴于此,本发明的目的在于提供一种从rvt格式到b3d格式的转换方法及其插件和系统,该方法能将rvt格式模型转换成用b3d表示的数字孪生格式。
为达到上述目的,本发明提供如下技术方案:
本发明提供的从rvt格式到b3d格式的转换方法,包括以下步骤:
构造B3DExportContext对象;
获取待转换的rvt格式文件;
确定rvt格式文件中需要导出的数据;
获取rvt格式文件中的场景元数据并按照b3d格式转换后导出;
获取待转换的rvt格式文件中的核心数据并按照b3d格式转换后导出;
获取待转换的rvt格式文件的生成资产列表并按照b3d格式转换后导出;
将导出的b3d格式的数据进行压缩并完成文件格式转换过程。
进一步,所述核心数据包括图形数据和BIM属性;所述图形数据包括相机数据、灯光数据、几何数据、材质数据、纹理数据、片段数据中的任一项或任意组成;所述BIM属性包括基础属性、族属性、实例属性。
进一步,所述资产列表包括id、类型、路径和大小信息。
进一步,所述场景元数据包括GUID、local属性、doubleSidedGeometry属性、导航属性、包围盒、参考坐标系、单位、视图变换模式、默认相机编号、GIS位置参考点、光照贴图、自定义属性中任一项或多项组合;
所述GUID通过自定义一个字符串类型的属性存储生成的GUID,并直接从这个属性中读取,实现GUID的获取和转换。
进一步,所述图形数据中的相机数据按照以下步骤进行格式转化:
配置对应视图的相机列表,遍历不同视图,分别调用每个视图的GetOrientation方法获取每个视图的相机数据,形成相机定义列表;
所述图形数据中的灯光数据按照以下步骤进行格式转化:
在IModelExportContext的OnLight接口中,获取每个灯光数据,形成灯光定义列表;
对每个灯光,通过LightNode类型的node参数,调用GetTransform方法可以获取其局部变换,得到其位置和方向信息;
根据当前的ElementID,获取到LightType对象;
调用GetInitialColor获取灯光颜色,调用GetInitialIntensity获取灯光强度,调用GetLightDistribution得到灯光的类型和分布参数,
通过OnInstanceBegin接口获取灯光的实例列表,通过InstanceNode类型的node,获取该实例的变换。
进一步,所述图形数据中的几何数据按照以下步骤进行格式转化:
将一对OnElementBegin和OnElementEnd之间的所有几何数据组合成一个网格,网格数据在OnPolymesh中获取,形成几何数据;
在OnPolymesh中,通过PolymeshTopology类型的node参数,获取到网格的面片数、顶点数、纹理坐标数、法向量数,根据上述不同分量的数量和法向分布类型,获取网格的顶点坐标列表、法向量列表、纹理坐标列表;
使用几何哈希算法给每个结合体生成一个哈希值,通过该哈希值找到几何形状相同的构件,实现几何重用;
几何哈希算法首先构造一个编码字符串,字符串包括包围盒尺寸、中心点位置、材质索引、每个面的信息、每条边的信息,然后对该编码字符串取哈希。
进一步,所述BIM属性中的族属性或实例属性按照以下步骤进行格式转化:
第一种是包括扩展属性,通过Element的Parameters属性集合,遍历该集合,对于每个Parameter,属性名通过该对象的Definition的Name属性的Intern()方法获取,其目录则通过该对象的Definition的ParameterGroup属性的GetLabel()方法获取,其值需要根据不同的存储类型使用不同的方法获取;
第二种是不需要包含扩展属性,通过Element的GetOrderedParameters()或者ParametersMap属性,获取到参数集合,然后遍历该集合,对于内置属性,则先遍历用户设置的需要获取的内置参数名称,通过Element的get_Parameter()方法获取到内置属性对应的参数,得到参数后,采用和第一种情况同样的方法即可获取参数对应的属性名称、目录和值。
本发明还提供了一种插件,通过插件的形式集成于Revit软件中,所述插件基于RevitSDK的IModelExportContext接口,按照上述方法将r将rvt格式文件中的场景元数据、核心数据、资产列表信息一对一的映射至b3d格式,并通过唯一ID对构件进行标记。
进一步,所述场景元数据包括文档的GUID、local属性、doubleSidedGeometry属性、导航属性、包围盒、参考坐标系、单位、视图变换模式、默认相机编号、GIS位置参考点、光照贴图、自定义属性中的任一项或多项组合。
本发明从rvt格式到b3d格式的转换系统,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述方法。
本发明的有益效果在于:
本发明提供的从rvt格式到b3d格式的转换方法及其插件和系统,该方法通过B3DExportContext对象;获取待转换的rvt格式文件,依次将rvt格式文件中的准备开始导出文件中的数据内容;从rvt格式文件视图开始确定需要导出的数据;获取rvt格式文件中的场景元数据并按照b3d格式转换后导出;获取待转换的rvt格式文件中的核心数据并按照b3d格式转换后导出;本方法能将rvt格式完整地转化成b3d格式,为rvt格式文件的查看、分享和应用提供基础。该方法在转化过程中不会遗漏构件,因为本发明使用了IModelExportContext接口,可以遍历到场景中的所有元素,在几何类型上支持所有的实体、表面、线框和点等类型,也支持房间、楼层等虚拟构件信息。
层级结构更完善,本方法支持外连接,可以承载超大模型,通过OnLinkBegin和OnLinkEnd接口,并通过设置外连接堆栈,同时按需加载和及时卸载外连接所占内存,可以处理任意数量和任意层级的外连接,对整体模型的体量没有限制。有缓存机制和实例化机制,转换速度快,输出的数据量小。对于灯光、几何、材质、纹理、片段等数据,都根据其数据特点设计相应的哈希算法,对实际数据进行缓存,根据哈希算法进行匹配,匹配成功后直接导出,无需重新生成,提高转换速度。实例化包括两个方面,一是直接使用族和实例的关系生成实例化数据,二是通过几何哈希匹配计算实例关系,生成实例化数据,通过实例化可以剔除冗余数据,减小数据量。
支持各类bim属性的转换,包括1)内置BIM属性,如名称、ID、族属性、实例属性等,2)自定义属性,3)衍生属性,如所属楼层、所属房间等。
原始rvt格式的BIM模型体积大、难以解析和展示,只能在专用的软件中打开使用,对硬件要求高,转换成b3d之后体积更小,可以直接在网页上浏览查看,便于在各类BIM业务系统中展示,可充分释放BIM模型的价值,降低BIM应用的门槛。
本发明的其他优点、目标和特征在某种程度上将在随后的说明书中进行阐述,并且在某种程度上,基于对下文的考察研究对本领域技术人员而言将是显而易见的,或者可以从本发明的实践中得到教导。本发明的目标和其他优点可以通过下面的说明书来实现和获得。
附图说明
为了使本发明的目的、技术方案和有益效果更加清楚,本发明提供如下附图进行说明:
图1为从rvt格式到b3d格式的转换原理框图。
图2为从rvt格式到b3d格式的转换方法流程图。
具体实施方式
下面结合附图和具体实施例对本发明作进一步说明,以使本领域的技术人员可以更好的理解本发明并能予以实施,但所举实施例不作为对本发明的限定。
如图1所示,本实施例提供的从rvt格式到b3d格式的转换方法,将Revit软件创建的rvt格式模型,完整无误地转换成用b3d表示的数字孪生格式,便于查看、分享和应用,本实施例提供的从rvt格式到b3d格式的转换方法,采用Revit插件形式实现,基于RevitSDK的IModelExportContext接口,将rvt格式文件中的场景元数据、核心数据(图形数据和BIM属性)、资产列表等信息一对一的映射至b3d格式,并通过唯一ID对构件进行标记,可以实现增量转换;包括以下步骤:
构造B3DExportContext对象;
获取待转换的rvt格式文件,准备开始导出文件中的数据内容;
从rvt格式文件视图开始确定需要导出的数据;
获取rvt格式文件中的场景元数据并按照b3d格式转换后导出;
获取待转换的rvt格式文件中的核心数据并按照b3d格式转换后导出;
所述核心数据包括图形数据和BIM属性;
所述图形数据包括相机数据、灯光数据、几何数据、材质数据、纹理数据、片段数据、实例中的任一项或任意组成;
所述BIM属性包括基础属性、族属性、实例属性;
获取待转换的rvt格式文件的生成资产列表并按照b3d格式转换后导出;
所述资产列表包括id、类型、路径和大小信息;
将导出的b3d格式的数据进行压缩并完成文件格式转换过程。
本实施例提供的转换方法具有以下特点:
数据无损输出,基于IModelExportContext开发,可以遍历到场景中的所有元素,在几何类型上支持所有的实体、表面、线框和点等类型,也支持房间、楼层等虚拟构件信息;
无数据量限制,通过OnLinkBegin和OnLinkEnd接口,并通过设置外连接堆栈,同时按需加载和及时卸载外连接所占内存,可以处理任意数量和任意层级的外连接,对整体模型的体量没有限制;
多级LOD生成,在开始导出时,设置LOD层级,网格导出后,可以使用网格简化算法生成其它LOD层级,实现多级LOD数据生成;
支持增量转换等特点,通过监听Application的DocumentChanged,可以实时获取文档改变信息,对发生改变的构件进行转换,实现增量导出;
可满足轻量化转换系统,从rvt格式转换成b3d格式,实现了BIM模型的轻量化;
同时,可以满足协同建模系统等应用的使用要求。
基于C#语言,使用Revit提供的SDK,在Visual Studio中开发插件;开发Revit插件,在插件中调用各类Revit提供的API,实现数据收集、数据转换和文件生成。
建立C#的.NET类库,引用Autodesk.Revit.SDK组件,包括RevitNET.dll、RevitAPI.dll等。
从IExternalCommand类派生自定义导出类B3DConvertCommand,在其Execute接口中构造导出接口类,并调用其导出方法。
生成该类库工程,得到dll文件,并按照Revit的规则编写B3DConvert.addin文件,指定dll路径和命令类的名称,将B3DConvert.addin文件放入Revit的插件目录如下:
(默认为C:\ProgramData\Autodesk\Revit\Addins\<Revit版本>)。
启动Revit时,即可通过手动触发或者自动触发命令的执行,启动导出流程。
导出接口类:从IModelExportContext类派生自定义的导出接口类B3DExportContext,实现其约定的17个接口函数,如下所述:
1)Finish(),该接口在每次导出过程的最后,当所有的实体都被处理完毕时被调用,或者在导出过程被取消时调用。
2)IsCanceled(),该接口在开始处理每个元素时被调用,用于查询导出操作是否被取消。
3)OnElementBegin(),该接口用于标记一个元素将要被导出。
4)OnElementEnd(),该接口用于标记当前元素的导出过程已经完成。
5)OnFaceBegin(),该接口用于标记一个面将要被导出。
6)OnFaceEnd(),该接口用于标记当前面的导出过程已经完成。
7)OnInstanceBegin(),该接口用于标记一个实例将要被导出。
8)OnInstanceEnd(),该接口用于标记当前实例的导出过程已经完成。
9)OnLight(),该接口用于标记一个灯光将要被导出。
10)OnLinkBegin(),该接口用于标记一个连接将要被导出。
11)OnLinkEnd(),该接口用于标记当前连接的导出过程已经完成。
12)OnMaterial(),该接口用于标记当前材质已发生改变。
13)OnPolymesh(),该接口在一个3D面的离散几何网格被导出时被调用。
14)OnRPC(),该接口用于标记一个RPC对象将要被导出。
15)OnViewBegin(),该接口用于标记一个3D视图对象将要被导出。
16)OnViewEnd(),该接口用于标记当前3D视图对象的导出过程已经完成。
17)Start(),该接口在导出过程的开始时,在所有实体被处理前被调用。
(1)在Start接口中,进行导出初始化工作,对模型进行检查,根据检查结果询问用户是否继续导出,并设置进度条为0%。
(2)在Finish接口中,进行导出收尾工作,释放临时资源,将导出过程统计数据输出,并设置进度为100%。
(3)在IsCanceled接口中,根据用户操作,决定是否中途取消导出过程。
(4)在OnViewBegin、OnViewEnd等接口中,实现对核心数据的转换和导出。
导出命令执行时,新建CustomExporter类型的对象,传入当前的文档、B3DExportContext类型的实例和需要被导出的视图实例,再调用CustomExporter类型对象的Export方法。
场景元数据:在OnViewBegin接口中获取和转换场景元数据,主要有文档的GUID、local属性、doubleSidedGeometry属性、导航属性、包围盒、参考坐标系、单位、视图变换模式、默认相机编号、GIS位置参考点、光照贴图、自定义属性等。
Revit本身不提供文档的GUID,本实施例通过自定义一个字符串类型的属性存储生成的GUID,并直接从这个属性中读取,实现GUID的获取和转换。
local属性直接根据是否增量转换模式设置,如果是增量转换则为true,否则为false。
对于Revit,内部模型均为实体模型,doubleSidedGeometry设置为false。
导航属性设置为Turnable,允许视图旋转。
包围盒通过视图的BoundingBox属性获取。
参考坐标系通过视图的GetOrientation方法获取。
默认单位通过文档的GetUnits获取。默认相机编号设置为0,下文相机部分根据用户设置情况生成0号相机的数据。视图变换模式设置为4,和下文的变换类型对应。
GIS位置参考点根据用户设置或者根据联网地图获取,主要用于将BIM模型定位到GIS系统中。
对于Revit,光照贴图为空。自定义属性根据用户设置在View上的属性获取。
核心数据:核心数据包括图形数据和BIM属性,使用不同的方式获取。
图形数据:图形数据包括相机、灯光、几何、材质、纹理、片段等。
针对相机数据,可以通过遍历不同视图,分别调用每个视图的GetOrientation方法获取每个视图的相机数据,形成相机定义列表。对于Revit,不存在相机实例的情况,因此相机实例列表中的数量和相机定义列表一致,序号从0开始。由于场景元数据中的默认相机编号为0,需要根据用户配置,将对应视图的相机排在相机列表的首位。
针对灯光数据,在IModelExportContext的OnLight接口中,实现每个灯光的获取,形成灯光定义列表。对每个灯光,通过LightNode类型的node参数,调用GetTransform方法可以获取其局部变换,得到其位置和方向信息。根据当前的ElementID,可以获取到LightType对象。调用GetInitialColor获取灯光颜色,调用GetInitialIntensity获取灯光强度,调用GetLightDistribution得到灯光的类型和分布参数。灯光的实例列表通过OnInstanceBegin接口获取,通过InstanceNode类型的node,可获取该实例的变换。
针对几何数据,将一对OnElementBegin和OnElementEnd之间的所有几何数据组合成一个网格,网格数据主要在OnPolymesh中获取,形成几何数据。在OnPolymesh中,通过PolymeshTopology类型的node参数,可以获取到网格的面片数、顶点数、纹理坐标数、法向量数,根据上述不同分量的数量和法向分布类型,获取网格的顶点坐标列表、法向量列表、纹理坐标列表。为了消除几何冗余性,使用几何哈希算法给每个结合体生成一个哈希值,通过该哈希值找到几何形状相同的构件,实现几何重用。几何哈希算法首先构造一个编码字符串,字符串包括包围盒尺寸、中心点位置、材质索引、每个面的信息、每条边的信息等,然后对该编码字符串取哈希。
针对材质数据,在一对OnElementBegin和OnElementEnd之间,通过node的MaterialId属性获取材质Id,然后调用document.GetElement()方法获取材质节点,根据材质节点的颜色属性、纹理属性、显示状态等,转换为b3d材质。
针对纹理数据,在材质中调用材质节点的GetAppearance()或GetAppearanceOverride()方法,获取资产对象,再调用资产的GetProperty函数获取属性值,属性名称为unifiedbitmap_Bitmap,属性类型为AssetPropertyString,即可获得纹理路径,然后在材质文件下即可找到匹配的文件。
针对片段数据,将一对OnElementBegin和OnElementEnd之间的构件信息提取,获取几何、变换、材质等属性,生成片段列表。通过几何网格的哈希匹配,即可找到其对应的几何索引,并计算偏移向量。通过调用node的MaterialId获取构件的材质Id,然后调用document.GetElement()方法获取材质节点,根据材质节点的颜色属性和纹理属性,转换为b3d材质。
BIM属性:从Revit导出到b3d中的BIM属性主要包括三类:基础属性、族属性和实例属性。
基础属性包括名称、id、唯一id、层次关系、实例关系、组、楼层、房间等;
族属性和实例属性均包括标识数据、尺寸标注、阶段化、结构、数据、图形、文字、约束、材质和装饰、分析属性、构造等类别。
对于名称,直接通过Element类的Name属性获取。
对于Id,可以通过Element类的Id属性的IntegerValue属性获取用整数标识的Id;
对于唯一Id,可以采用和视图的唯一Id类似的方法,通过自定义一个字符串类型的属性存储生成的GUID,并直接从这个属性中读取,实现唯一Id的获取和转换。通常情况下,几何数据量比较大,需要按照最大一个文件4M的大小进行拆分,当当前文件体积超过4M时,则重新生成新的数据文件,文件名用自增整数命名,从1开始。
对于层次关系,需要综合运用多种方法获取,使用父子属性进行存储。B3d中的完整的层次关系从顶层到最低层依次为:根节点、工作集、文件夹、文档、楼层、类别、族名称、族类型、构件。其中工作集、文件夹、文档、层是可选的,其余为必需的。根节点即层次关系的起始。
对于工作集,通过Element的WorksetId属性可得到工作集Id,然后调用Document的GetWorksetTable().GetWorkset()方法,获取Workset对象,该对象的Name属性即Workset层的名称。
对于文件夹,通过Document的PathName属性,可以获取文档对应的文件路径,通过计算文件路径和当前文档的相对路径,即可得到文件夹层的名称。
对于文档,直接使用Document的Title属性作为文档层的名称。
对于楼层,有两种方法获取。
第一种是通过Element的LevelId方法获取对应的楼层Id,然后调用Document的GetElement()方法获取对应的楼层,对于某些特殊的构件,如FlexDuct、MEPCurve等,直接使用其ReferenceLevel属性获取楼层。
第二种是在如果无法直接获取楼层信息时,可以使用包围盒信息,通过判断包围盒是否在某一楼层的空间范围内来获取构件的楼层。获取到楼层对象之后,使用其属性即可,使用其Name属性作为楼层的名称。
对于类别,通过Element的Category属性获取类别对象,然后使用其Name属性作为类别层的名称。
对于族名称,通过Element的GetTypeId()方法,可以获取构件类型的Id,然后通过Document的GetElement()方法获取构件类型对象,该对象的FamilyName属性即可作为族名称层的名称。
对于族类型,方法和族名称类似,只是后得到构件类型对象后,该对象的Name即可作为族类型层的名称。
对于构件,直接使用Element的Name属性作为其名称即可。
对于实例关系,直接使用前述构件类型对象对应的属性即可。
对于组,使用Element的GroupId属性得到组Id,然后调用Document的GetElement方法获取组对象,使用该对象的属性即可。
对于房间,有两种获取方法。第一种是通过Element的Room方法获取对应的房间对象。第二种是在如果无法直接获取房间信息时,可以先遍历模型中的所有空间单元,生成房间列表,然后使用构件中心点判断其是否位于某一房间内部,从而获取到房间对象。获取到房间对象之后,则可以使用其属性即可。
对于族属性和实例属性,获取方法是一样的,分两种情况。
第一种是如果需要包括扩展属性,则可以直接通过Element的Parameters属性集合,遍历该集合,对于每个Parameter,属性名通过该对象的Definition的Name属性的Intern()方法获取,其目录则通过该对象的Definition的ParameterGroup属性的GetLabel()方法获取,其值需要根据不同的存储类型使用不同的方法获取,比如,对于Integer的存储类型,通过该对象的AsInteger()方法获取,对于Double的存储类型,通过该对象的AsValueString()方法获取,对于String的存储类型,通过该对象的AsString()方法获取,对于ElementId的存储类型,同样通过该对象的AsValueString()方法获取,等等。
第二种是不需要包含扩展属性,则可以通过Element的GetOrderedParameters()或者ParametersMap属性,获取到参数集合,然后遍历该集合,对于内置属性,则先遍历用户设置的需要获取的内置参数名称,通过Element的get_Parameter()方法获取到内置属性对应的参数。得到参数后,采用和第一种情况同样的方法即可获取参数对应的属性名称、目录和值。
特殊处理:某些特殊需求下,层级信息和对应的节点属性不以构件为单位进行获取。
第一种是需要融合模型组,在该情况下,忽略构件节点,直接通过Element的GroupId属性获取模型组Id,然后调用Document的GetElement()方法获取对应的组对象,直接处理当前节点所属的模型组。
第二种是需要融合部件,在该情况下,忽略构件节点,直接通过Element的AssemblyInstanceId属性获取部件Id,然后调用Document的GetElement()方法获取对应的部件对象,直接处理当前节点所属的部件。
当文档中存在外部链接时,在IModelExportContext的OnLinkBegin和OnLinkEnd接口中处理链接信息。通过设置一个堆栈存储当前文档的处理状态,然后切换到链接文档处理流程。链接文档的处理和普通文档处理流程一致,处理完毕后从堆栈中恢复文档处理状态,继续往下处理即可。
资产列表:资产列表的数据内容相对固定,只有几何数据文件和纹理文件的数量不定,只需要根据前述步骤中得到的几何文件列表和纹理文件列表进行相应调整即可。每一个资产包括id、类型、路径和大小信息,id即文件名,类型直接根据b3d格式规范中的类型定义取值,路径为相对于导出文件夹的路径,大小为单个文件的大小,可以直接使用操作系统API计算。
文件压缩:b3d中存在多种形式的压缩,包括网格压缩、属性文件压缩、元信息与资产文件压缩,以及整体文件包压缩。网格压缩使用Draco压缩方法,对顶点属性(包括坐标、法向、UV等)、面片索引进行压缩。属性文件压缩采用zip压缩算法。元信息与资产文件压缩也是采用zip压缩算法。整体文件包压缩同样采用zip压缩算法。
通过遍历视图,判断模型显隐关系,即可获取到所有的模型,通过获取视图的图形显示属性,并映射到具体的选项,可实现视图显示效果真实还原,保证数据无损输出。
通过文档层次关系,支持无限层级的文档链接,导出过程中及时关闭文档,释放内存,做到无数据量限制。
通过网格简化算法,可以自动实现多级LOD生成。
通过监听Application的DocumentChanged,可以实时获取文档改变信息,对发生改变的构件进行转换,实现增量导出。
以上所述实施例仅是为充分说明本发明而所举的较佳的实施例,本发明的保护范围不限于此。本技术领域的技术人员在本发明基础上所作的等同替代或变换,均在本发明的保护范围之内。本发明的保护范围以权利要求书为准。

Claims (10)

1.从rvt格式到b3d格式的转换方法,其特征在于:包括以下步骤:
构造B3DExportContext对象;
获取待转换的rvt格式文件;
确定rvt格式文件中需要导出的数据;
获取rvt格式文件中的场景元数据并按照b3d格式转换后导出;
获取待转换的rvt格式文件中的核心数据并按照b3d格式转换后导出;
获取待转换的rvt格式文件的生成资产列表并按照b3d格式转换后导出;
将导出的b3d格式的数据进行压缩并完成文件格式转换过程。
2.如权利要求1所述的从rvt格式到b3d格式的转换方法,其特征在于:所述核心数据包括图形数据和BIM属性;所述图形数据包括相机数据、灯光数据、几何数据、材质数据、纹理数据、片段数据中的任一项或任意组成;所述BIM属性包括基础属性、族属性、实例属性。
3.如权利要求1所述的从rvt格式到b3d格式的转换方法,其特征在于:所述资产列表包括id、类型、路径和大小信息。
4.如权利要求1所述的从rvt格式到b3d格式的转换方法,其特征在于:所述场景元数据包括GUID、local属性、doubleSidedGeometry属性、导航属性、包围盒、参考坐标系、单位、视图变换模式、默认相机编号、GIS位置参考点、光照贴图、自定义属性中任一项或多项组合;
所述GUID通过自定义一个字符串类型的属性存储生成的GUID,并直接从这个属性中读取,实现GUID的获取和转换。
5.如权利要求2所述的从rvt格式到b3d格式的转换方法,其特征在于:所述图形数据中的相机数据按照以下步骤进行格式转化:
配置对应视图的相机列表,遍历不同视图,分别调用每个视图的GetOrientation方法获取每个视图的相机数据,形成相机定义列表;
所述图形数据中的灯光数据按照以下步骤进行格式转化:
在IModelExportContext的OnLight接口中,获取每个灯光数据,形成灯光定义列表;
对每个灯光,通过LightNode类型的node参数,调用GetTransform方法可以获取其局部变换,得到其位置和方向信息;
根据当前的ElementID,获取到LightType对象;
调用GetInitialColor获取灯光颜色,调用GetInitialIntensity获取灯光强度,调用GetLightDistribution得到灯光的类型和分布参数,
通过OnInstanceBegin接口获取灯光的实例列表,通过InstanceNode类型的node,获取该实例的变换。
6.如权利要求1所述的从rvt格式到b3d格式的转换方法,其特征在于:所述图形数据中的几何数据按照以下步骤进行格式转化:
将一对OnElementBegin和OnElementEnd之间的所有几何数据组合成一个网格,网格数据在OnPolymesh中获取,形成几何数据;
在OnPolymesh中,通过PolymeshTopology类型的node参数,获取到网格的面片数、顶点数、纹理坐标数、法向量数,根据上述不同分量的数量和法向分布类型,获取网格的顶点坐标列表、法向量列表、纹理坐标列表;
使用几何哈希算法给每个结合体生成一个哈希值,通过该哈希值找到几何形状相同的构件,实现几何重用;
几何哈希算法首先构造一个编码字符串,字符串包括包围盒尺寸、中心点位置、材质索引、每个面的信息、每条边的信息,然后对该编码字符串取哈希。
7.如权利要求1所述的从rvt格式到b3d格式的转换方法,其特征在于:所述BIM属性中的族属性或实例属性按照以下步骤进行格式转化:
第一种是包括扩展属性,通过Element的Parameters属性集合,遍历该集合,对于每个Parameter,属性名通过该对象的Definition的Name属性的Intern()方法获取,其目录则通过该对象的Definition的ParameterGroup属性的GetLabel()方法获取,其值需要根据不同的存储类型使用不同的方法获取;
或/和
第二种是不需要包含扩展属性,通过Element的GetOrderedParameters()或者ParametersMap属性,获取到参数集合,然后遍历该集合,对于内置属性,则先遍历用户设置的需要获取的内置参数名称,通过Element的get_Parameter()方法获取到内置属性对应的参数,得到参数后,采用和第一种情况同样的方法即可获取参数对应的属性名称、目录和值。
8.b3d格式转换插件,其特征在于:通过插件的形式集成于Revit软件中,所述插件基于RevitSDK的IModelExportContext接口,按照权利要求1指示7中任一项所述的方法将rvt格式文件中的场景元数据、核心数据、资产列表信息一对一的映射至b3d格式,并通过唯一ID对构件进行标记。
9.如权利要求8所述的b3d格式转换插件,其特征在于:所述场景元数据包括文档的GUID、local属性、doubleSidedGeometry属性、导航属性、包围盒、参考坐标系、单位、视图变换模式、默认相机编号、GIS位置参考点、光照贴图、自定义属性中的任一项或多项组合。
10.从rvt格式到b3d格式的转换系统,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现上述权利要求1至7任一项所述的方法。
CN202311045833.5A 2023-08-18 2023-08-18 从rvt格式到b3d格式的转换方法及其插件和系统 Pending CN117077256A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311045833.5A CN117077256A (zh) 2023-08-18 2023-08-18 从rvt格式到b3d格式的转换方法及其插件和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311045833.5A CN117077256A (zh) 2023-08-18 2023-08-18 从rvt格式到b3d格式的转换方法及其插件和系统

Publications (1)

Publication Number Publication Date
CN117077256A true CN117077256A (zh) 2023-11-17

Family

ID=88714702

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311045833.5A Pending CN117077256A (zh) 2023-08-18 2023-08-18 从rvt格式到b3d格式的转换方法及其插件和系统

Country Status (1)

Country Link
CN (1) CN117077256A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117785801A (zh) * 2024-02-27 2024-03-29 北京点聚信息技术有限公司 一种基于数据分析的版式文件转换方法及系统

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117785801A (zh) * 2024-02-27 2024-03-29 北京点聚信息技术有限公司 一种基于数据分析的版式文件转换方法及系统
CN117785801B (zh) * 2024-02-27 2024-04-19 北京点聚信息技术有限公司 一种基于数据分析的版式文件转换方法及系统

Similar Documents

Publication Publication Date Title
US8612040B2 (en) Automated derivative view rendering system
US9286297B1 (en) System and method for flexible path handling
Digne et al. Feature-preserving surface reconstruction and simplification from defect-laden point sets
CN112182699B (zh) 一种基于revit图元模型的信息提取方法
Taubin et al. Geometry coding and VRML
US8352443B1 (en) Representing scene description in databases
KR100503789B1 (ko) 렌더링시스템, 렌더링방법 및 그 기록매체
CN110021070B (zh) FBX三维模型转换为glTF三维模型的方法、设备以及系统
WO2005119496A2 (en) Dependency graph-based aggregate asset status reporting methods and apparatus
CN117077256A (zh) 从rvt格式到b3d格式的转换方法及其插件和系统
EP1217547A2 (en) Object integrated management system
CN114969586A (zh) 基于web端的bim图形引擎加载方法及装置
US20090295806A1 (en) Dynamic Scene Descriptor Method and Apparatus
CN116340260A (zh) 建筑模型数据渲染方法、装置、电子设备及可读存储介质
CN109858059B (zh) 基于cad超大模型的虚拟现实技术在水电站仿真的应用方法
CN114201793B (zh) 基于Sketchup的BIM模型轻量化方法及系统
CN115062188A (zh) 一种建筑数字孪生数据的存储方法
US8219637B2 (en) Storage management for renderfarm
CN113486421A (zh) 海上风电数字可视化展示方法、系统、介质及装置
US7683904B2 (en) Manual component asset change isolation methods and apparatus
Vidal et al. MEPP2: a generic platform for processing 3D meshes and point clouds
CN114443158B (zh) 基于Navisworks软件处理BIM文件的方法、装置、设备和存储介质
CN115221133A (zh) 一种面向3d打印的stl文件处理方法
CN113961512B (zh) 一种将max文件转换为glTF文件的转换方法
Shikhare et al. Compression Techniques for Distributed Use of 3D Data--An Emerging Media Type on the Internet

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination