CN112182698B - 一种基于revit墙体构件的深度提取方法 - Google Patents
一种基于revit墙体构件的深度提取方法 Download PDFInfo
- Publication number
- CN112182698B CN112182698B CN202010981262.6A CN202010981262A CN112182698B CN 112182698 B CN112182698 B CN 112182698B CN 202010981262 A CN202010981262 A CN 202010981262A CN 112182698 B CN112182698 B CN 112182698B
- Authority
- CN
- China
- Prior art keywords
- information
- wall
- revit
- acquiring
- parameter
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/10—Geometric CAD
- G06F30/13—Architectural design, e.g. computer-aided architectural design [CAAD] related to design of buildings, bridges, landscapes, production plants or roads
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/31—Indexing; Data structures therefor; Storage structures
- G06F16/316—Indexing structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/35—Clustering; Classification
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/15—Correlation function computation including computation of convolution operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/20—Design optimisation, verification or simulation
- G06F30/23—Design optimisation, verification or simulation using finite element methods [FEM] or finite difference methods [FDM]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
- G06T17/20—Finite element generation, e.g. wire-frame surface description, tesselation
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Geometry (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Computational Mathematics (AREA)
- Pure & Applied Mathematics (AREA)
- Databases & Information Systems (AREA)
- Computer Hardware Design (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Evolutionary Computation (AREA)
- Mathematical Physics (AREA)
- Computer Graphics (AREA)
- Algebra (AREA)
- Computing Systems (AREA)
- Architecture (AREA)
- Civil Engineering (AREA)
- Structural Engineering (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明涉及一种基于revit墙体构件的深度提取方法,属于建筑信息模型技术领域,解决BIM软件平台间绘图逻辑与需求信息不同导致的墙体信息丢失的技术问题。解决方案为:采用BIM主流软件revit,基于其API进行二次开发,创建提取构件模型信息的插件,方便信息的读取和一键导出;利用所提取的信息可进行软件间的无缝互导,使revit模型信息的提取和交互更加简单高效;结合本平台与其他平台对整体建筑模型进行展示进行实例对比。本发明不再局限于软件间格式转换,利用携带参数的原始图元模型去进行信息交互与数据传递,能有效解决各方软件之间信息割裂断层的问题,为解决目前BIM应用技术中数据交互效率低的问题提供了新思路。
Description
技术领域
本发明属于建筑信息模型技术领域,具体涉及的是一种基于revit墙体构件的深度提取方法。
背景技术
建筑信息模型(BIM) 是对建筑模型数字化,信息化的表达,可实现建筑信息的知识资源共享, BIM也逐步从建模型信息的理念走向建筑全生命周期内提供可靠决策的依据以及信息共享的平台,所以BIM的发展方向为:实现BIM技术应用的普及,打破专业壁垒开展三维模式下的协同设计,提高设计效率和质量;推进施工现场BIM技术的应用,实现基于BIM的施工管理,提高管理效率;研究基于BIM的项目成果交付、检查、存储模式等。
未来,建设各方将广泛地采用 BIM 技术,并且直接基于模型开展全周期工作,各建筑软件之间的交互成为行业关注的终点。目前,BIM 模型已在某些软件上实现模型转换接口,但若要对复杂的建筑结构进行精细分析,仍需重新建模,这样耗费时间人力,还存在模型查错困难等问题,基于BIM的复杂建筑结构模型需要涉及到多类型构件的物理信息查询、提取和赋值等工作,工作量大且容易出错。因此通过编写提取以及反建程序,实现 BIM模型自动转换生成精细模型,既可保证不同模型的一致性,还可提高建模效率,具有良好的工程应用前景和使用价值。
发明内容
为了克服现有技术的不足,解决BIM软件平台间绘图逻辑与需求信息不同导致的墙体信息丢失的技术问题,本发明提供一种基于revit墙体构件的深度提取方法,在现有技术的基础上,提出了较为高效可行的数据提取与传递的新方法。
本发明的设计构思为:本发明采用BIM主流软件revit,基于其API进行二次开发,创建提取构件模型信息的插件,方便信息的读取和一键导出;利用所提取的信息可进行软件间的无缝互导,使revit模型信息的提取和交互更加简单高效;结合本平台与其他平台对墙体建筑模型进行实例对比。
本发明通过以下技术方案予以实现。
一种基于revit墙体构件的深度提取方法,包括以下步骤:
S1、Revit三维建模:利用建筑信息模型软件REVIT建立三维墙体模型;
S2、Revit二次开发平台搭建:
Revit API实现软件功能拓展的操作为以下两种模式中的任一种:
A、通过外部命令的接口完成:外部命令的接口有且只有一个抽象函数Excute,当插件运行时被当作主函数调用,通过在主函数中添加所需要实现的功能代码完成插件创建;
B、通过外部应用的接口完成:外部应用的接口有两个抽象函数OnStartup和OnShutdown,使用外部命令时通过重载上述OnStartup和OnShutdown抽象函数,完成功能的创建;
S3、revit图元模型信息提取:
所述revit图元模型信息包括项目信息参数和构件参数,项目信息参数包括项目基准信息、项目材质库参数信息,revit图元模型信息提取执行以下操作:
S31、获取项目参数:
第一步,获取项目基本属性:包括项目名称、项目编号、项目发布日期和项目地址;
第二步:获取项目基准图元信息:包括标高轴网和参考平面,标高对应的类是Level,继承自Element类,通过Level.Elevation属性获取标高高度,Level.Elevation属性对应的是BuiltInParameter,继承自LEVEL-ELEV;
S32、获取基础墙体属性参数:
①获取构件方法分类:依次获取单个墙体构件信息、两个相邻墙体及其倒角信息以及项目所有墙体信息;
②参数信息提取:
构件参数信息包括实例参数和类型参数,首先,使用LookUp查看对应图元实例的参数信息,将遍历或点选到的元素element转换为wall;其次,调用Parameter get _Parameter (BuiltInParameter parameterId)以及IList<Parameter> GetParameters(string name)方法,获取墙体构件所需要的关键信息;再次,从 BIM 模型中提取构件所包含的参数信息,包括墙体起点终点、厚度、底部高层,顶部高层,剖面框坐标,主体构件ID,唯一ID,墙体所属类别ID以及体积;最后,将构件的属性参数信息进行完整提取并封装,通过主函数调用;
③墙体基础几何参数信息提取:通过Element.Geometry属性获取实体对象的几何数据;
A、对于墙体主体构件:墙体主体构件geometry属性直接包含该实例的几何实体,可在选项细节opt.DetailLevel = ViewDetailLevel.Fine直接遍历几何实体中的元素,获取该实例的几何数据;
B、对于墙体附属构件:墙体附属构件几何信息需要在选项细节不做设定情况下,结合GeometryInstance.GetSymbolGeometry方法,然后将主体构件几何信息与附属构件几何信息在此情况下进行分割处理;在进行几何数据获取时,首先获取族类型的几何元素symbolgeometry,再通过逐层遍历族类型的几何元素依次获取构件的边,面,体;
S33、获取构件三角网格图形信息
①首先定义两个列表集合对数据进行分类储存,定义XYZ列表用于存放三角面片的顶点坐标,定义Int列表存放三角面片的面索引;
②遍历实体中的每一个面将其转化为三角面片;
③获取三角面片的顶点坐标,将其放入XYZ列表中;
④创建字典,通过遍历XYZ列表将三角面片顶点坐标存放到字典中,并去除重复的顶点坐标,最后通过遍历字典中的顶点坐标获取对应点坐标的索引值,将顶点坐标与索引值对应;
S34、获取弧形墙扩展属性参数信息:通过对弧形墙的起点、终点以及半径等已经提取到信息进行二次数学运算得到凸度信息;
S35、获取多面层墙体扩展参数信息:进入墙类别信息层中,通过HostObjAttributes中public CompoundStructure GetCompoundStructure()的方法进入到复合结构层,然后再遍历每一层的信息,获取各个面层的参数和厚度信息;
S36、获取墙体附属构件扩展参数信息
从Element.Geometry属性中锁定几何对象,获取WallSweep类的成员参数,最后通过二次计算,可以获得附属构建的定位点,距离墙的垂直距离、水平距离和长度信息;
S37、获取墙体上门窗洞构件参数信息
首先,创建两个单元素收集器,分别通过BuiltInCategory.OST_Windows和BuiltIn Category. OST_Doors收集门和窗;其次,创建一个多元素收集器,通过BuiltInCategory . OST _ WallRect Opening和BuiltInCategory.OST_ArcWallRectOpening收集矩形洞和圆形洞;再次,通过.Host.Id定位到相关墙体,获取BuiltInParameter.INSTANCE_SILL_HEIGHT_PARAM中参数信息;最后,结合二次计算后可以获得门、窗的底部高程,整体定位点和局部定位点,以及洞的底部高程、整体起点终点坐标和相对起点终点坐标信息;
S38、异形墙、基础墙开异形洞
①通过获取底面、顶面、侧面的点线面信息进行墙体形状的判断;
②获取相关面后,会出现PlannerFace、CylindricalFace以及RuledFace三种类型面,其中一个椭圆环形面会有两个RuledFace,一个圆环形面会有两个CylindricalFace,而这两个面都不是所能进行判断计算的面,需要将所有face强转为PlannerFace,过滤出所有平面,对平面所包含的线组进行二次计算,在这里用一个集合对线组进行收集,通过集合的大小进行形状判断,集合成员个数大于等于3的为多边形,对多边形线组的点进行提取收集,过滤重复的点,获取每个线组对应的坐标点;对于集合成员个数等于2的通过AsCurve()进行圆形Arc、椭圆形Ellipse判断,最后可获得异性墙、异性洞的轮廓形状、坐标、定位点信息;
S39、相邻墙体倒角信息
从Location属性中获取相邻墙体的两条定位线,利用SetComparisonResult.Disjoint对两条定位线进行相交判定,再通过交集计算方法获取到倒角参数信息;
S4、创建信息提取插件
①创建类库并添加引用:创建类库,并根据所需要实现的功能依次添加数据库API、界面API、应用服务API、属性API、选择功能API、Windows窗体控件和数据流操作的命名空间;
②创建事务:将一系列修改Revit模型的操作提交至文档的对象;
③主代码编制:将上述提取信息的主体功能代码写入;
④创建插件按钮“墙信息提取”:首先增加一个嵌入面板,然后调用PushButton类增加一个按钮控件,最后调用Uri类把相应图标导入到按钮中;
⑤注册并运行拓展模块:按钮制作完毕后,写Add-in文件作为内部启动文件,使该按钮可以导入到Revit软件内部中;
⑥将上述提取构件信息插件功能程序编程生成的.dll文件的路径和.dll的ID写入文件中,打开Revit软件即可获得“墙信息提取”的插件,点击该按钮便可进行BIM墙体模型构件信息提取操作。
进一步地,在所述步骤S1中,所述三维墙体模型包括基础墙、异形墙、异形墙开门、窗、洞、异形墙开异性洞、相邻墙体、分层墙、弧形墙、墙饰条、分割条以及多面层墙。
进一步地,在所述步骤S2中,Revit插件调用需要通过加载Revit.addin文件完成注册。
进一步地,在所述步骤S2中,Revit二次开发平台搭建使用的工具包括VisualStudio 2017、Revit SDK、Revit Lookup与AddinManager。
本发明具有如下有益效果:
本发明不再局限于软件间格式转换,利用携带参数的原始图元模型去进行信息交互与数据传递,能有效解决各方软件之间信息割裂断层的问题,为解决目前BIM应用技术中数据交互效率低的问题提供了新思路。
附图说明
图1为本发明墙体数据提取总流程图;
图2为本发明二次开发平台搭建流程图;
图3为本发明插件应用实例图;
图4为本发明建筑实例图;
图5为本发明提取文件详图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细描述。
如图1至图5所示的一种基于revit墙体构件的深度提取方法,包括以下步骤:
S1、Revit三维建模:利用建筑信息模型软件REVIT建立三维墙体模型,所述三维墙体模型包括基础墙、异形墙、异形墙开门、窗、洞、异形墙开异性洞、相邻墙体(自动生成倒角)、分层墙、弧形墙、墙饰条、分割条以及多面层墙(如图4所示);
S2、Revit二次开发平台搭建:Revit插件调用需要通过加载Revit.addin文件完成注册,Revit二次开发平台搭建使用的工具包括Visual Studio 2017、Revit SDK、RevitLookup与AddinManager;
Revit API实现软件功能拓展的操作为以下两种模式中的任一种:
A、通过外部命令的接口完成:外部命令的接口有且只有一个抽象函数Excute,当插件运行时被当作主函数调用,通过在主函数中添加所需要实现的功能代码完成插件创建;
B、通过外部应用的接口完成:外部应用的接口有两个抽象函数OnStartup和OnShutdown,使用外部命令时通过重载上述OnStartup和OnShutdown抽象函数,完成功能的创建;
S3、revit图元模型信息提取:
所述revit图元模型信息包括项目信息参数和构件参数,项目信息参数包括项目基准信息、项目材质库参数信息,revit图元模型信息提取执行以下操作:
S31、获取项目参数:
第一步,获取项目基本属性:包括项目名称、项目编号、项目发布日期和项目地址;
第二步:获取项目基准图元信息:包括标高轴网和参考平面,标高对应的类是Level,继承自Element类,通过Level.Elevation属性获取标高高度,Level.Elevation属性对应的是BuiltInParameter,继承自LEVEL-ELEV;
S32、获取基础墙体属性参数:
①获取构件方法分类:依次获取单个墙体构件信息、两个相邻墙体及其倒角信息以及项目所有墙体信息;
核心代码如下:
Selection sel = uiDoc.Selection;
IList<Reference> reflists = sel.PickObjects(ObjectType.Element, "select elements");
获得单个墙体
if (reflists.Count == 1)
获取两个相邻墙体及其倒角信息
if (reflists.Count == 2)
获得所有墙体
if (reflists.Count == 0|| reflists.Count>=3)
ElementClassFilter wallFilter = new ElementClassFilter(typeof(Wall));
②参数信息提取:
构件参数信息包括实例参数和类型参数,首先,使用LookUp查看对应图元实例的参数信息,将遍历或点选到的元素element转换为wall;其次,调用Parameter get _Parameter (BuiltInParameter parameterId)以及IList<Parameter> GetParameters(string name)方法,获取墙体构件所需要的关键信息;再次,从 BIM 模型中提取构件所包含的参数信息,包括墙体起点终点、厚度、底部高层,顶部高层,剖面框坐标,主体构件ID,唯一ID,墙体所属类别ID以及体积;最后,将构件的属性参数信息进行完整提取并封装,通过主函数调用;
核心代码如下:
Parameter gparameter = wall.GetParameters("无连接高度").FirstOrDefault();
height = gparameter.AsDouble();
double dpara = wall.get_Parameter(BuiltInParameter.WALL_BASE_OFFSET).AsDouble();
string dig = (dpara * 304.8).ToString();
wallModel.bottomheight = dig
string dingg = ((height + dpara) * 304.8).ToString();
wallModel.topheight = dingg;
View3D view = element as View3D;
BoundingBoxXYZ box = element.get_BoundingBox(view);
string maxxyz = Kjl(box.Max);
string minxyz = Kjl(box.Min);
string boxxyz = maxxyz + "|" + minxyz;
.....
wallModel.boxcoordinate = boxxyz;
...
③墙体基础几何参数信息提取:通过Element.Geometry属性获取实体对象的几何数据;
A、对于墙体主体构件:墙体主体构件geometry属性直接包含该实例的几何实体solid,可在选项细节opt.DetailLevel = ViewDetailLevel.Fine直接遍历几何实体solid中的元素,获取该实例的几何数据;
B、对于墙体附属构件:墙体附属构件几何信息需要在选项细节不做设定情况下,结合GeometryInstance.GetSymbolGeometry方法,然后将主体构件几何信息与附属构件几何信息在此情况下进行分割处理;在进行几何数据获取时,首先获取族类型的几何元素symbolgeometry,再通过逐层遍历族类型的几何元素依次获取构件的边edge,面face,体solid;
提取流程图及核心代码如下:
Options opt1 = new Options();
opt1.ComputeReferences = true;
Autodesk.Revit.DB.GeometryElement geometryElement1 = wall.get_Geometry(opt1);
foreach (GeometryObject geometryObject in geometryElement1)
{
Graph graph = new Graph();
Solid solid = geometryObject as Solid;
if (solid != null && solid.Faces.Size > 0)
{
FindBottomFace(solid);
FindTopFace(solid);
FindsideFace(solid);
FindMesh(solid);
....
}
GeometryInstance geometryInstance = geometryObject asGeometryInstance;
if (geometryInstance != null)
{
GeometryElement geometryElement01 = geometryInstance.SymbolGeometryas GeometryElement;
foreach (GeometryObject geometryObject01 in geometryElement01)
{
Solid solid01 = geometryObject01 as Solid;
....
S33、获取构件三角网格图形信息
三维模型本质上是以三角网格(mesh)形式呈现,且需要通过三角面片点坐标(vertices)和面索引(faces)两个属性创建几何体。故获取三角网格的点坐标和面索引是实现数据跨平台传递的关键。图形信息的提取仍以图元为中心,将信息通过ID关联到每个图元构件,具体步骤如下:
①首先定义两个列表集合对数据进行分类储存,定义XYZ列表用于存放三角面片的顶点坐标,定义Int列表存放三角面片的面索引;
核心代码如下:
List<XYZ>triangularPoints=new List<XYZ>();
List<int> index= new List<int>();
②遍历实体中的每一个面将其转化为三角面片;
核心代码如下:
foreach (Face face in solid.Faces)
{
Mesh mesh = face.Triangulate();
//...
③获取三角面片的顶点坐标,将其放入XYZ列表中;
核心代码如下:
For(int n=0;n<3;n++)
{
XYZ point =triangular.get_Vertex(n);
triangularPoints.Add(point);
}
④创建字典,通过遍历XYZ列表将三角面片顶点坐标存放到字典中,并去除重复的顶点坐标,最后通过遍历字典中的顶点坐标获取对应点坐标的索引值,将顶点坐标与索引值对应;
核心代码如下:
if (!pairs.ContainsKey(pp))
{
int intIndex = pairs.Keys.Count;
pairs.Add(pp, intIndex);
}
int intIndexOfPt = pairs[pp];
Index.Add(intIndexOfPt);
S34、获取弧形墙扩展属性参数信息:
Revit二次开发中由于API的开放程度有限,有部分信息是未能直接提取的。弧形墙通过Parameter get_Parameter(BuiltInParameter parameterId)以及IList<Parameter> GetParameters(string name)方法只能获得相关起点和终点信息,不能获得凸度信息,而大部分平台的建模软件需要加上凸度的伪四维坐标点才能生成弧形墙。通过对弧形墙的起点、终点以及半径等已经提取到信息进行二次数学运算得到凸度信息;
核心代码如下:
XYZ center = arc.Center;
string radius = (arc.Radius * 304.8).ToString();
ouble zhouchang = arc.Length;
double r = arc.Radius;
double hu = zhouchang / (3.1415926 * 2 * Math.Sqrt((a.X * 304.8 -center.X * 304.8) * (a.X * 304.8 - center.X * 304.8) + (a.Y * 304.8 -center.Y * 304.8) * (a.Y * 304.8 - center.Y * 304.8) + (a.Z * 304.8 -center.Z * 304.8) * (a.Z * 304.8 - center.Z * 304.8)));
double jiaodu = hu * 360;
string tudu = (Math.Sin(jiaodu / 4) / Math.Cos(jiaodu / 4)).ToString();
...
S35、获取多面层墙体扩展参数信息:
墙体是Revit中复杂且经典的构件,以其为代表的系统族构件与标准构件有着明显的区别。系统族因只能参数定义,却不能新建的特性,使得其具有全面且难以扩展的参数信息框架。在墙体获得多面层墙的过程中,进入墙类别信息层中,通过 HostObjAttributes中public CompoundStructure GetCompoundStructure()的方法进入到复合结构层,然后再遍历每一层的信息,获取各个面层的参数和厚度信息;
核心代码如下:
if (compoundStructure.LayerCount > 0)
{
foreach (CompoundStructureLayer compoundStructureLayer incompoundStructure.GetLayers())
{
ElementId materialId = compoundStructureLayer.MaterialId;
Material material = document.GetElement(materialId) asMaterial;
string materialName = material.Name;
int comindex = wallModel.Attachs.ComMaterialNameDic.Keys.Count;
wallModel.Attachs.ComMaterialNameDic.Add(comindex,materialName);
string layerWidth = (compoundStructureLayer.Width * 304.8).ToString();
...
S36、获取墙体附属构件扩展参数信息
墙的附属构件主要包含墙饰条和分割条,其中墙饰条是实体构件,比如踢脚板、冠顶饰或其他类型的装饰,而分割条是空心构件,可以用来对墙体进行分割条纹绘制。在对附属构建进行信息提取时,需要先从Element.Geometry属性中锁定几何对象,获取WallSweep类的成员参数,最后通过二次计算,可以获得附属构建的定位点,距离墙的垂直距离、水平距离和长度信息;
核心代码如下:
GeometryInstance geometryInstance1 = geometryObject1 asGeometryInstance;
if (null != geometryInstance1)
{
int wasindex = wallModel.Attachs.snameDic.Keys.Count;
WallSweep wallSweep = geometryInstance1.Symbol as WallSweep;
Parameter parameter5 =wallSweep.get_Parameter(BuiltInParameter.ELEM_CATEGORY_PARAM);
wallModel.Attachs.snameDic.Add(wasindex, parameter5.AsValueString());
Parameter parameter2 = wallSweep.get_Parameter(BuiltInParameter.WALL_SWEEP_OFFSET_PARAM);
wallModel.Attachs.soffzDic.Add(wasindex, parameter2.AsValueString());
...
S37、获取墙体上门窗洞构件参数信息
首先,创建两个单元素收集器,分别通过BuiltInCategory.OST_Windows和BuiltIn Category. OST_Doors收集门和窗;其次,创建一个多元素收集器,通过BuiltInCategory . OST _ WallRect Opening和BuiltInCategory.OST_ArcWallRectOpening收集矩形洞和圆形洞(异性洞不能在此获得);再次,通过.Host.Id定位到相关墙体,获取BuiltInParameter. INSTANCE_SILL_HEIGHT_ PARAM中参数信息;最后,结合二次计算后可以获得门、窗的底部高程,整体定位点和局部定位点,以及洞的底部高程、整体起点终点坐标和相对起点终点坐标信息;
核心代码如下:
if (collector1.OfClass(typeof(FamilyInstance)).OfCategory(BuiltInCategory.OST_Windows) != null)
{
var wallWindows = from c1 in collector1 where ((FamilyInstance)c1).Host.Id == elementId select c1;
foreach (Element el in wallWindows.ToList())
{
FamilyInstance windows = el as FamilyInstance;
Parameter pwindows =windows.get_Parameter(BuiltInParameter.INSTANCE_SILL_HEIGHT_PARAM);
string windowsSllHeight = "\n" + "底部高度:" + pwindows.AsValueString();
string windowspoint = "\n" + "定位点" + Kjl((windows.Location asLocationPoint).Point);
.....
Opening opening = el as Opening;
if (opening.IsRectBoundary)
{
Parameter pdong = opening.get_Parameter(BuiltInParameter.WALL_BASE_OFFSET);
string dongSllHeight = "\n" + "底部高度:"+ pdong.AsValueString();
...
S38、异形墙、基础墙开异形洞
①通过获取底面、顶面、侧面的点线面信息进行墙体形状的判断;在Revit中是通过编辑轮廓对墙体侧面进行异形墙和开异性洞的操作,但也有通过体量和分割条对墙体进行绘制编辑。API中并不开放对编辑轮廓的信息获取,需要开发者直接通过对截面的计算来获得相关信息;
核心代码如下:
Face FindBottomFace(Solid solid)
{
string point1 = null;
List<XYZ> points1 = new List<XYZ>();
PlanarFace pf1 = null;
foreach (Face face in solid.Faces)
{
Face FindTopFace(Solid solid)
{
....
Face FindsideFace(Solid solid)
{
...
②获取相关面后,会出现PlannerFace、CylindricalFace以及RuledFace三种类型面,其中一个椭圆环形面会有两个RuledFace,一个圆环形面会有两个CylindricalFace,而这两个面都不是所能进行判断计算的面,需要将所有face强转为PlannerFace,过滤出所有平面,对平面所包含的线组进行二次计算,在这里用一个集合对线组进行收集,通过集合的大小进行形状判断,集合成员个数大于等于3的为多边形,对多边形线组的点进行提取收集,过滤重复的点,获取每个线组对应的坐标点;对于集合成员个数等于2的通过AsCurve()进行圆形Arc、椭圆形Ellipse判断,最后可获得异性墙、异性洞的轮廓形状、坐标、定位点信息;
核心代码如下:
PlanarFace pf4 = face as PlanarFace;
List<EdgeArray> ts1 = new List<EdgeArray>();
List<Edge> ts2 = new List<Edge>();
foreach (EdgeArray edgeArray4 in pf4.EdgeLoops)
{
ts1.Add(edgeArray4);
continue;
}
List<XYZ> points4 = new List<XYZ>();
string xingzhuang = string.Empty;
for (int i = 0; i < ts1.Count(); i++) //一圈一圈传进来
{
foreach (Edge edge4 in ts1[i]) //主要来分别多边形和圆
{
ts2.Add(edge4);
...
S39、相邻墙体倒角信息
在revit中,墙体的倒角是根据相邻的两面墙自动生成,但在其他平台就需要相关信息才能进行反建生成。Revit API中不提供倒角相关信息,开发者可以利用SetComparisonResult.Disjoint对两条定位线进行相交判定,再用交集计算方法publicSetComparisonResult Intersect(Curve curve, out IntersectionResultArrayresultArray)获得倒角信息;
核心代码如下:
LocationCurve locationCurve2 = wall2.Location as LocationCurve;
line1 = locationCurve1.Curve as Line;
line2 = locationCurve2.Curve as Line;
if (line1 != null && line2 != null)
{
SetComparisonResult result = line1.Intersect(line2, outresultArray);
if (SetComparisonResult.Disjoint != result)
{
XYZ hhxyz = resultArray.get_Item(0).XYZPoint;
...
if (line1 != null && line2 == null)
{
arc2 = locationCurve2.Curve as Arc;
...
S4、创建信息提取插件
在Revit软件上通过自定义编程接口制作自动提取建筑信息模型的功能插件,本文在Visual Studio2017平台上,引用Revit2016版的接口定义文件RevitAPI.DLL和RevitAPIUI.DLL,同时引用部分Revit API提供的命名空间,使用C#语言实现插件开发。
本发明信息提取功能插件是通过基于外部应用(External Application)扩展功能的方式,提取构件信息是通过Add-in文件从Revit软件内部启动,随着Revit软件的启动而调用,随着关闭而停止,具体步骤如下:
①创建类库并添加引用:创建类库,并根据所需要实现的功能依次添加数据库API、界面API、应用服务API、属性API、选择功能API、Windows窗体控件和数据流操作的命名空间;
核心代码如下:
Using Autodesk.Revit.UI;
Using Autodesk.Revit.DB;
Using System.Windows.Forms;
Using System.IO;
...
②创建事务:将一系列修改Revit模型的操作提交至文档的对象;任何一个文档修改的操作都需要包含在子一个打开的属于该文档的事务中,否则就会异常抛出;
核心代码如下:
[Transaction(TransactionMode.Manual)]
[Regeneration(RegenerationOption.Manual)]
public class GetWallBFace : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, refstring messages, ElementSet elements)
{
UIApplication app = commandData.Application;
Document doc = app.ActiveUIDocument.Document;
//...
return Result.Succeeded;
}
}
③主代码编制:将上述提取信息的主体功能代码写入;
④创建插件按钮“墙信息提取”:首先增加一个嵌入面板,然后调用PushButton类增加一个按钮控件,最后调用Uri类把相应图标导入到按钮中;
⑤注册并运行拓展模块:按钮制作完毕后,写Add-in文件作为内部启动文件,使该按钮可以导入到Revit软件内部中;
⑥将上述提取构件信息插件功能程序编程生成的.dll文件的路径和.dll的ID写入文件中,打开Revit软件即可获得“墙信息提取”的插件,点击该按钮便可进行BIM墙体模型构件信息提取操作。将本文实现的提取构件信息插件功能程序编程生成的.dll文件的路径和.dll的ID写入文件中,打开Revit软件即可看到本文实现的提取构件信息方法的插件(如图所示),点击该按钮便可进行BIM墙体模型构件提取操作。
以上所述仅为本发明的优选实施例而并不用于限制本发明,在实施例技术方案中对单个或者多个技术参数进行同等替换形成新的技术方案,同样都在本发明要求保护的范围内;对于本领域的技术人员来说,本发明可以进行各种更改和变化。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (4)
1.一种基于revit墙体构件的深度提取方法,其特征在于包括以下步骤:
S1、Revit三维建模:利用建筑信息模型软件REVIT建立三维墙体模型;
S2、Revit二次开发平台搭建:
Revit API实现软件功能拓展的操作为以下两种模式中的任一种:
A、通过外部命令的接口完成:外部命令的接口有且只有一个抽象函数Excute,当插件运行时被当作主函数调用,通过在主函数中添加所需要实现的功能代码完成插件创建;
B、通过外部应用的接口完成:外部应用的接口有两个抽象函数OnStartup和OnShutdown,使用外部命令时通过重载上述OnStartup和OnShutdown抽象函数,完成功能的创建;
S3、revit图元模型信息提取:
所述revit图元模型信息包括项目信息参数和构件参数,项目信息参数包括项目基准信息、项目材质库参数信息,revit图元模型信息提取执行以下操作:
S31、获取项目参数:
第一步,获取项目基本属性:包括项目名称、项目编号、项目发布日期和项目地址;
第二步:获取项目基准图元信息:包括标高轴网和参考平面,标高对应的类是Level,继承自Element类,通过Level.Elevation属性获取标高高度,Level.Elevation属性对应的是BuiltInParameter,继承自LEVEL-ELEV;
S32、获取基础墙体属性参数:
①获取构件方法分类:依次获取单个墙体构件信息、两个相邻墙体及其倒角信息以及项目所有墙体信息;
②参数信息提取:
构件参数信息包括实例参数和类型参数,首先,使用LookUp查看对应图元实例的参数信息,将遍历或点选到的元素element转换为wall;其次,调用Parameter get_Parameter(BuiltInParameter parameterId)以及IList<Parameter>GetParameters(string name)方法,获取墙体构件所需要的关键信息;再次,从BIM模型中提取构件所包含的参数信息,包括墙体起点终点、厚度、底部高层,顶部高层,剖面框坐标,主体构件ID,唯一ID,墙体所属类别ID以及体积;最后,将构件的属性参数信息进行完整提取并封装,通过主函数调用;
③墙体基础几何参数信息提取:通过Element.Geometry属性获取实体对象的几何数据;
A、对于墙体主体构件:墙体主体构件geometry属性直接包含该实例的几何实体,可在选项细节opt.DetailLevel=ViewDetailLevel.Fine直接遍历几何实体中的元素,获取该实例的几何数据;
B、对于墙体附属构件:墙体附属构件几何信息需要在选项细节不做设定情况下,结合GeometryInstance.GetSymbolGeometry方法,然后将主体构件几何信息与附属构件几何信息在此情况下进行分割处理;在进行几何数据获取时,首先获取族类型的几何元素symbolgeometry,再通过逐层遍历族类型的几何元素依次获取构件的边,面,体;
S33、获取构件三角网格图形信息
①首先定义两个列表集合对数据进行分类储存,定义XYZ列表用于存放三角面片的顶点坐标,定义Int列表存放三角面片的面索引;
②遍历实体中的每一个面将其转化为三角面片;
③获取三角面片的顶点坐标,将其放入XYZ列表中;
④创建字典,通过遍历XYZ列表将三角面片顶点坐标存放到字典中,并去除重复的顶点坐标,最后通过遍历字典中的顶点坐标获取对应点坐标的索引值,将顶点坐标与索引值对应;
S34、获取弧形墙扩展属性参数信息:通过对弧形墙的起点、终点以及半径等已经提取到信息进行二次数学运算得到凸度信息;
S35、获取多面层墙体扩展参数信息:进入墙类别信息层中,通过HostObjAttributes中public CompoundStructure GetCompoundStructure()的方法进入到复合结构层,然后再遍历每一层的信息,获取各个面层的参数和厚度信息;
S36、获取墙体附属构件扩展参数信息
从Element.Geometry属性中锁定几何对象,获取WallSweep类的成员参数,最后通过二次计算,可以获得附属构件的定位点,距离墙的垂直距离、水平距离和长度信息;
S37、获取墙体上门窗洞构件参数信息
首先,创建两个单元素收集器,分别通过BuiltInCategory.OST_Windows和BuiltInCategory.OST_Doors收集门和窗;其次,创建一个多元素收集器,通过BuiltInCategory.OST_WallRect Opening和BuiltInCategory.OST_ArcWallRectOpening收集矩形洞和圆形洞;再次,通过.Host.Id定位到相关墙体,获取BuiltInParameter.INSTANCE_SILL_HEIGHT_PARAM中参数信息;最后,结合二次计算后可以获得门、窗的底部高程,整体定位点和局部定位点,以及洞的底部高程、整体起点终点坐标和相对起点终点坐标信息;
S38、异形墙、基础墙开异形洞
①通过获取底面、顶面、侧面的点线面信息进行墙体形状的判断;
②获取相关面后,会出现PlannerFace、CylindricalFace以及RuledFace三种类型面,其中一个椭圆环形面会有两个RuledFace,一个圆环形面会有两个CylindricalFace,而这两个面都不是所能进行判断计算的面,需要将所有face强转为PlannerFace,过滤出所有平面,对平面所包含的线组进行二次计算,在这里用一个集合对线组进行收集,通过集合的大小进行形状判断,集合成员个数大于等于3的为多边形,对多边形线组的点进行提取收集,过滤重复的点,获取每个线组对应的坐标点;对于集合成员个数等于2的通过AsCurve()进行圆形Arc、椭圆形Ellipse判断,最后可获得异性墙、异性洞的轮廓形状、坐标、定位点信息;
S39、相邻墙体倒角信息
从Location属性中获取相邻墙体的两条定位线,利用SetComparisonResult.Disjoint对两条定位线进行相交判定,再通过交集计算方法获取到倒角参数信息;
S4、创建信息提取插件
①创建类库并添加引用:创建类库,并根据所需要实现的功能依次添加数据库API、界面API、应用服务API、属性API、选择功能API、Windows窗体控件和数据流操作的命名空间;
②创建事务:将一系列修改Revit模型的操作提交至文档的对象;
③主代码编制:将提取信息的主体功能代码写入;
④创建插件按钮“墙信息提取”:首先增加一个嵌入面板,然后调用PushButton类增加一个按钮控件,最后调用Uri类把相应图标导入到按钮中;
⑤注册并运行拓展模块:按钮制作完毕后,写Add-in文件作为内部启动文件,使该按钮可以导入到Revit软件内部中;
⑥将提取构件信息插件功能程序编程生成的.dll文件的路径和.dll的ID写入文件中,打开Revit软件即可获得“墙信息提取”的插件,点击该按钮便可进行BIM墙体模型构件信息提取操作。
2.根据权利要求1所述的一种基于revit墙体构件的深度提取方法,其特征在于:在所述步骤S1中,所述三维墙体模型包括基础墙、异形墙、异形墙开门、窗、洞、异形墙开异性洞、相邻墙体、分层墙、弧形墙、墙饰条、分割条以及多面层墙。
3.根据权利要求1所述的一种基于revit墙体构件的深度提取方法,其特征在于:在所述步骤S2中,Revit插件调用需要通过加载Revit.addin文件完成注册。
4.根据权利要求1所述的一种基于revit墙体构件的深度提取方法,其特征在于:在所述步骤S2中,Revit二次开发平台搭建使用的工具包括Visual Studio 2017、Revit SDK、Revit Lookup与AddinManager。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010981262.6A CN112182698B (zh) | 2020-09-17 | 2020-09-17 | 一种基于revit墙体构件的深度提取方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010981262.6A CN112182698B (zh) | 2020-09-17 | 2020-09-17 | 一种基于revit墙体构件的深度提取方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112182698A CN112182698A (zh) | 2021-01-05 |
CN112182698B true CN112182698B (zh) | 2022-08-16 |
Family
ID=73921622
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010981262.6A Active CN112182698B (zh) | 2020-09-17 | 2020-09-17 | 一种基于revit墙体构件的深度提取方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112182698B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112860701B (zh) * | 2021-03-01 | 2023-06-30 | 成都理工大学 | 一种基于Revit的非模态框数据传输的系统和方法 |
CN113392438B (zh) * | 2021-06-15 | 2022-02-08 | 广东省城乡规划设计研究院有限责任公司 | 一种基于revit的不同阶段bim模型的差异比较的方法 |
CN113642070A (zh) * | 2021-07-28 | 2021-11-12 | 广州易达建信科技开发有限公司 | 基于Revit的实物量计算方法、装置及存储介质 |
CN113674436B (zh) * | 2021-08-09 | 2023-08-25 | 南通大学 | 一种基于Revit API的建筑楼层外立面提取方法 |
CN113902877B (zh) * | 2021-09-30 | 2024-05-17 | 中北大学 | 一种基于revit族图元模型互导的方法 |
CN114896671A (zh) * | 2022-06-09 | 2022-08-12 | 中国电建集团成都勘测设计研究院有限公司 | 一种基于catia软件包络体模型bim几何属性信息导出的方法 |
CN115618468B (zh) * | 2022-10-24 | 2023-09-29 | 广州优比建筑咨询有限公司 | 基于Revit的门窗大样图快速出图方法、存储介质及设备 |
CN115659477B (zh) * | 2022-11-14 | 2023-04-14 | 深圳市地铁集团有限公司 | 一种基于bim模型的数据提取方法、装置、设备及存储介质 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE4326676A1 (de) * | 1992-08-21 | 1994-02-24 | Pioneer Electronic Corp | Befestigungsverfahren |
CN104102765A (zh) * | 2014-06-23 | 2014-10-15 | 金刚幕墙集团有限公司 | 一种基于bim的幕墙参数化设计方法 |
CN105844017A (zh) * | 2016-03-24 | 2016-08-10 | 中国十七冶集团有限公司 | 一种用bim技术优化地下管网和景观绿化设计的方法 |
CN106204745A (zh) * | 2016-08-31 | 2016-12-07 | 中国电建集团昆明勘测设计研究院有限公司 | 一种基于标准图集管理的监测bim模型快速加载交互方法及系统 |
CN106250638A (zh) * | 2016-08-04 | 2016-12-21 | 中建三局第建设工程有限责任公司 | 一种基于bim的顶模综合设计及应用方法 |
CN106354937A (zh) * | 2016-08-30 | 2017-01-25 | 江苏国泰新点软件有限公司 | 基于Revit平台的结构件构造方法和装置 |
CN106547941A (zh) * | 2016-09-23 | 2017-03-29 | 中冶集团武汉勘察研究院有限公司 | 一种基于revit体量模型构建BIM工程勘察信息系统的方法 |
CN107180069A (zh) * | 2017-03-27 | 2017-09-19 | 徐照 | 基于ifc数据交互的工程项目信息交付集成管理系统 |
CN107315868A (zh) * | 2017-06-20 | 2017-11-03 | 广州市建筑科学研究院有限公司 | 一种基于Revit二次开发的基坑工程稳定性的设计方法及系统 |
CN109408044A (zh) * | 2018-10-19 | 2019-03-01 | 宁波睿峰信息科技有限公司 | 一种基于glTF的BIM数据与GIS数据的整合方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9782936B2 (en) * | 2014-03-01 | 2017-10-10 | Anguleris Technologies, Llc | Method and system for creating composite 3D models for building information modeling (BIM) |
US10949805B2 (en) * | 2015-11-06 | 2021-03-16 | Anguleris Technologies, Llc | Method and system for native object collaboration, revision and analytics for BIM and other design platforms |
-
2020
- 2020-09-17 CN CN202010981262.6A patent/CN112182698B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE4326676A1 (de) * | 1992-08-21 | 1994-02-24 | Pioneer Electronic Corp | Befestigungsverfahren |
CN104102765A (zh) * | 2014-06-23 | 2014-10-15 | 金刚幕墙集团有限公司 | 一种基于bim的幕墙参数化设计方法 |
CN105844017A (zh) * | 2016-03-24 | 2016-08-10 | 中国十七冶集团有限公司 | 一种用bim技术优化地下管网和景观绿化设计的方法 |
CN106250638A (zh) * | 2016-08-04 | 2016-12-21 | 中建三局第建设工程有限责任公司 | 一种基于bim的顶模综合设计及应用方法 |
CN106354937A (zh) * | 2016-08-30 | 2017-01-25 | 江苏国泰新点软件有限公司 | 基于Revit平台的结构件构造方法和装置 |
CN106204745A (zh) * | 2016-08-31 | 2016-12-07 | 中国电建集团昆明勘测设计研究院有限公司 | 一种基于标准图集管理的监测bim模型快速加载交互方法及系统 |
CN106547941A (zh) * | 2016-09-23 | 2017-03-29 | 中冶集团武汉勘察研究院有限公司 | 一种基于revit体量模型构建BIM工程勘察信息系统的方法 |
CN107180069A (zh) * | 2017-03-27 | 2017-09-19 | 徐照 | 基于ifc数据交互的工程项目信息交付集成管理系统 |
CN107315868A (zh) * | 2017-06-20 | 2017-11-03 | 广州市建筑科学研究院有限公司 | 一种基于Revit二次开发的基坑工程稳定性的设计方法及系统 |
CN109408044A (zh) * | 2018-10-19 | 2019-03-01 | 宁波睿峰信息科技有限公司 | 一种基于glTF的BIM数据与GIS数据的整合方法 |
Non-Patent Citations (2)
Title |
---|
基于IFC的建筑模型信息提取研究及应用;薛建英 等;《施工与管理》;20191231;第49卷;382-386 * |
基于Revit的复杂形体坑道工程BIM模型构建技术研究;周邹 等;《防护工程》;20181231;第40卷(第6期);52-55 * |
Also Published As
Publication number | Publication date |
---|---|
CN112182698A (zh) | 2021-01-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112182698B (zh) | 一种基于revit墙体构件的深度提取方法 | |
CN112182699B (zh) | 一种基于revit图元模型的信息提取方法 | |
CN109918526B (zh) | 一种面向规划管理的bim与3dgis融合方法 | |
US20230274045A1 (en) | Building information modeling (bim)-based intelligent drafting method for prefabricated buildings | |
US7492364B2 (en) | System and method for creating and updating a three-dimensional model and creating a related neutral file format | |
CN109977162A (zh) | 一种城乡规划数据转换方法、系统和计算机可读存储介质 | |
CN113051650B (zh) | 一种建筑信息模型构件数据实时采集方法和装置 | |
CN110111410A (zh) | 一种基于空间数据库的二三维管网数据组织及显示方法 | |
CN106709980B (zh) | 一种基于形式化的复杂三维场景建模方法 | |
CN113360965A (zh) | 一种基于Revit的装配式剪力墙自动建模的方法及系统 | |
CN110083872A (zh) | 一种面向bim模型的数据提取方法 | |
CN116126809B (zh) | 一种基于国标的建筑信息模型数据存储转换方法 | |
CN110909450A (zh) | 一种输电线路智能设计造价一体化获取方法 | |
CN110782522A (zh) | 一种基于bim的基坑围护工程剖面出图方法 | |
CN108170855B (zh) | 一种CityGML与IFC数据统一查询及数据抽取方法 | |
CN112651711A (zh) | 基于xdb文件在bs架构下的协同设计管理平台的搭建系统 | |
CN111581700A (zh) | 基于catia模型添加bim属性并输出bim属性表的方法 | |
CN109858059B (zh) | 基于cad超大模型的虚拟现实技术在水电站仿真的应用方法 | |
CN115981659B (zh) | 一种基于ifc的范围性结构树重构方法 | |
CN111784192A (zh) | 一种基于动态演化的工业园区应急预案可执行化系统 | |
LU501781B1 (en) | Revit-based deep extraction method for wall component | |
CN116186831A (zh) | 建筑工程设计语义结构化描述及合规性审查方法、系统 | |
CN114398694A (zh) | 一种基于Dynamo程序实现建筑信息模型快速创建的方法 | |
CN112764741A (zh) | 一种可视化编辑界面的方法、装置及电子设备 | |
Nour | Using Bounding Volumes for BIM based electronic code checking for Buildings in Egypt |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |