一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种IFC子模型提取方法与流程

2021-10-29 22:30:00 来源:中国专利 TAG:提取 模型 方法 信息化 建筑

一种ifc子模型提取方法
技术领域
1.本发明涉及建筑信息化领域,具体涉及一种ifc子模型提取方法。


背景技术:

2.ifc(industry foundation classes)标准是对建筑信息模型(bim)的开放式、标准化数据存储格式,bim建模软件创建的模型均可导出为ifc格式文件进行存储。ifc标准包含了各种类型的ifc实体c
i
,ifc标准以各种类型的ifc实体的实例存储各个建筑构件及其关系。每个ifc实体有很多属性,用于存储建筑的信息。一个ifc完整模型可以由一个ifc实体的实例列表表示lc={c
i
,{e
ij
}},e
ij
是实体c
i
的实例。
3.如图1所示,ifc实体可分为可独立交换实体和非独立交换实体(又称资源实体)。可独立交换实体,包括全局唯一标识globalid,可被单独检索、提取和共享;非独立交换实体只有临时id,不可被独立提取,不能在不同软件之间交换共享。如图1所示,可独立交换实体又分为基本实体和关系实体。基本实体又分为主体实体、属性集实体、类型实体和项目实体。主体实体又分为产品实体、过程实体、生产资料实体、组织实体、控制实体以及分组实体,构成ifc模型主要组成部分。其中产品实体用于描述建筑中物理构件,譬如梁、柱、墙等,包括几何属性和非几何属性。过程实体用于描述物理构件的设计、施工或安装的过程。生产资料实体用于描述物理构件或施工过程使用的人材机等生产资料,组织实体用于描述物理构件或施工过程的相关组织或人员,控制实体用于描述物理构件或施工过程的成本等外部约束,分组实体用于描述描述物理构件或施工过程的分区和组合等信息。类型实体用于定义同类型主体实体实例的共性特征,是对产品、过程和生产资料实体的信息的必要补充描述。属性集实体用于扩展描述主体实体的相关属性。项目实体是一个特殊的实体,每个ifc模型只有一个项目实体,定义模型的项目名称、地址等基础信息。
4.关系实体用于描述两个或多个基本实体之间的关系,基本实体之间一般不通过直接的相互引用建立关系。关系实体分为关联关系、聚合关系、定义关系、分配关系和外部关联关系五种。如图2所示,ifc的关系实体均为1:n型关系,即描述实体实例a与实体实例集合bs之间的关系。为方便描述,关系实体中定义a的属性为主要实体属性pa,定义bs的属性为次要实体属性pb。如图2所示,只有基本实体有反向属性,基本实体的反向属性的值是关系实体,用于查询与基本实体实例相关的关系实体实例,从而进一步查询与基本实体实例相关的其他基本实体实例。
5.ifc子模型指某个ifc模型的一个子集,一般用于某个建设过程,或某个建设过程创建的bim模型。ifc子模型视图(model view definition,简称,mvd)是描述一个ifc子模型的包含的ifc实体的方法。mvd包括一个ifc实体集合v={c
i
}和一个ifc实例过滤条件t。实例过滤条件不为空的mvd是实例级mvd,为空的mvd是实体级mvd。实体级mvd不包括实例过滤条件,因此提取的ifc子模型包括mvd中各个ifc实体的所有ifc实例;比如mvd包括梁实例(ifcbeam),则ifc子模型包括ifc模型的所有梁实例。而实例级mvd包括实例过滤条件,对应的ifc子模型包括的实例不但要求其实体在mvd中,且要求其满足实例过滤条件。过滤条件t
用三元组(ifc实体te,属性tp,取值范围tv)表示,即针对实体te定义的实例过滤条件,要求实例的tp属性等于或包含tv才可提取到ifc子模型中。譬如,针对ifcbeam实体定义过滤条件t=(ifcbeam,name,“钢”),要求ifcbeam实例的名称属性name包括“钢”,从而只提取钢梁,过滤混凝土、木材等其他材质的梁。过滤条件t的实体te一般为主体实体、类型实体、属性集实体等基本实体,不会是关系实体。
6.关于实例级ifc子模型提取需求十分大,但由于复杂性较高,目前尚未见有相关文献发表;譬如提取某种材料的建筑构件,某个系统的所有设备,某天施工的所有施工任务等应用场景。实例级ifc子模型提取方法的难点在于,ifc模型中各个实例通过关系实体实例相互关联,因此提取时若忽略所有关联的实例,将导致信息的不完整;反之,若提取所有关联的实例,则会包含大量不必要的实例。譬如,提取满足约束条件(ifctask,name,“土建施工”)的ifc模型,若只提取名称为“土建施工”的一个ifctask施工任务实例,而忽略该施工任务的所有子任务,则提取的ifc子模型不能完整描述该任务的所有信息;若将“土建施工”任务关联的子任务、前置任务和后置任务等均提出,则包括了多余的任务节点;甚至可能提取所有ifctask实例,达不到过滤的目的。


技术实现要素:

7.为了解决上述技术问题,本发明提供了一种ifc子模型提取方法,过滤不必要的实例,提取强相关的实例,以保证提取的ifc子模型是满足使用需求的最小ifc实例结合。
8.本发明的技术目的是通过以下技术方案实现的:
9.一种ifc子模型提取方法,该方法包括以下步骤:
10.步骤1、读入过滤条件t,t=(te,tp,tv),根据过滤条件t从ifc完整模型lc中提取核心实体e1,lc={c
i
,{e
ij
}},c
i
是实体名称,0={e
ij
}是实体类型为c
i
的ifc实例的集合;
11.步骤2、分析核心实体e1,若核心实体e1为空则结束提取;若te是产品实体,直接进入步骤3;若te是过程实体,则计算并提取核心实体e1中的过程实体的ifc实例集合;若te是组织、控制、生产资料和分组实体,则计算并提取核心实体e1中的组织、控制、生产资料和分组实体的ifc实例集合;若te是类型实体,则计算并提取核心实体e1中的类型实体的ifc实例集合;若te是项目实体,则根据mvd从ifc完整模型lc中提取实体级子模型,mvd={c
j
};若te是属性实体,则计算并提取核心实体e1中的属性实体的ifc实例集合;
12.步骤3、计算并提取核心实体e1的相关ifc实例,结束提取。
13.进一步地,提取核心实体e1时,包括以下步骤:
14.1.1、读入过滤条件t,t=(te,tp,tv);
15.1.2、条件从lc中提取c
i
=te的元素(te,{e
ij
});
16.1.3遍历{e
ij
}中各个实例e
ij
,如果e
ij
的tp属性的值等于tv或包含tv,则将e
ij
加入核心实体e1,e1={e
ij
};否则继续遍历{e
ij
};
17.进一步地,提取过程实体的ifc实例时包括以下步骤:
18.2.1、根据过滤条件t提取过程实体的ifc实例的集合p1,p1=e1,p1={p
i
};
19.2.2、递归遍历p1中各个实例p
i
,提取p
i
反向属性isnestedby的值rv={r
nj
},进入步骤2.3;遍历结束进入步骤2.4;
20.2.3、遍历rv中所有关系实例r
nj
,提取r
nj
的relatedobjects属性的值{p
j
}加入p2;
p2中实例为p1实例的子过程;设置p1=p1∪p2;遍历结束返回步骤2.2;
21.2.4、计算e1=e1∪p1,并将e1和步骤2.2提取的所有关系实例rv加入到子模型m1。
22.进一步地,计算并提取核心实体e1中的组织、控制、生产资料和分组实体的ifc实例时,包括以下步骤:
23.3.1、设置集合e
o
=e1,e
o
={e
i
};分析te实体类型,若为组织实体,进入步骤3.2;若为控制实体,进入步骤3.3;若为分组实体,进入步骤3.4;若为生产资料实体,进入步骤3.5;
24.3.2、遍历e
o
中各元素e
i
,提取e
i
的反向属性isactingupon的值{r
ij
}加入rv;遍历完后进入步骤3.6;
25.3.3、遍历e
o
中各元素e
i
,提取e
i
的反向属性controls的值{r
ij
}加入rv;遍历完后进入步骤3.6;
26.3.4、遍历e
o
中各元素e
i
,提取e
i
的反向属性isgroupedby的值{r
ij
}加入rv;遍历完后进入步骤3.6;
27.3.5、遍历e
o
中各元素e
i
,提取e
i
的反向属性resourceof的值{r
ij
}加入rv;遍历完后进入步骤3.6;
28.3.6、遍历rv中各关系实例r
ij
,提取r
ij
的次要实体属性relatedobjects值{e
i
}加入e
o
;遍历完成后进入步骤3.7;
29.3.7、根据实体类型将e
o
中实体分为产品实例集合e
oe
、过程实例集合e
op
和其他实体实例e
o
;e
o
=e
oe
e
op

30.3.8、递归计算并提取e
op
中过程实例p
i
的所有子过程p2,e
op
=e
op
∪p2;
31.3.9、计算并提取核心实体e1中的组织、控制、生产资料和分组实体的ifc实例集合e1=e
op
∪e
oe
∪e
o
,将e1和上述步骤3.2

3.5中提取的所有关系实例rv加入到m1中。
32.进一步地,计算并提取核心实体e1中的类型实体的ifc实例时,包括以下步骤:
33.4.1、设置类型实体实例集合t1=e1,t1={t
i
},e1设为空集;
34.4.2、遍历t1中各实例t
i
,提取t
i
的反向属性types的值rv={r
nj
},r
nj
是ifcreldefinesbytype实体的实例,进入步骤4.3;遍历完t1后,进入步骤4.4;
35.4.3、遍历rv的各个元素r
nj
,提取r
nj
的relatedobjects属性的值t2,全部加入实例集合e1,即e1=e1∪e2;rv遍历完成后,返回步骤4.2;
36.4.4、根据实体类型提取e1中过程实例集合e
1p
和生产资料实体实例集合e
rp

37.4.5、递归计算并提取e
1p
中过程实例p
i
的所有子过程p2,设置e
1p
=e
1p
∪p2;进入步骤4.7;
38.4.6、计算生产资料实体实例集合e
rp
中实例相关的核心实例结合p2,设置e
rp
=e
rp
∪p2;进入步骤4.7;
39.4.7、计算得到的核心实体集合e1=e1∪t1∪e
rp
∪e
ip
;将e1和过程中提取的关系实例rv添加到子模型m1。
40.进一步地,计算并提取核心实体e1中的属性实体的ifc实例时,包括以下步骤:
41.5.1、设置属性实体实例集合s1=e1,s1={s
i
},e1设为空集;
42.5.2、遍历s1中各实例s
i
,提取s
i
的反向属性definesoccurrence的值{r
nj
}加入rv,r
nj
是ifcreldefinesbyproperties实体的实例;遍历完进入步骤5.3;
43.5.3、遍历rv的各个元素r
nj
,提取r
nj
的relatedobjects属性的值p1,加入核心实体
集合e1,即e1=e1∪p1;遍历完成后,进入步骤5.4;
44.5.4、遍历s1中各实例s
i
,提取s
i
的反向属性的definestype的值t1={t
i
},t
i
是类型实体的实例;遍历完成后,进入步骤5.5;
45.5.5、提取t1中各个类型实例t
i
相关的核心实体t2,e1=e1∪t1∪t2;
46.5.6、计算得到核心实体集合e1=e1∪s1∪p1;将e1和过程中提取的关系实例rv添加到子模型m1。
47.进一步地,步骤3包括以下步骤:
48.6.1、遍历e1中各个e
i
,提取e
i
的所有反向属性的值{r
ij
}加入rv,把rv添加到子模型m1,进入步骤6.2;e1遍历完后,进入步骤6.7;
49.6.2、遍历rv中各个元素r
ij
;若r
ij
实体是关联关系实体或r
ij
的实体类型不在mvd中或m1中已包括r
ij
,则继续遍历;否则,把r
ij
添加到子模型m1;若e
i
是r
ij
的主要实体,进入步骤6.3;若e
i
是r
ij
的次要实体,且不是聚合关系,则进入步骤6.4;若e
i
是r
ij
的次要实体,且r
ij
是聚合关系实体,则继续遍历;rv遍历完后进入步骤6.6;
50.6.3、获得r
ij
的次要实体relatedobjects属性值p2={p
j
};进入步骤6.5;
51.6.4、获得r
ij
的主要实体relatingobject属性值p2={p1};进入步骤6.5;
52.6.5、遍历p2中各个元素p
j
,若p
j
的实体类型不属于mvd,则从p2删除;p2遍历完后返回步骤6.2;
53.6.6、设置e1=e1∪p2;设置m1=m1∪e1;返回步骤6.1;
54.6.7、提取m1中所有元素的资源实体类型的属性,提取结束。
55.相比现有技术,本发明的有益效果在于,可以综合考虑mvd和实例过滤条件,提取满足使用需求的实例级别子模型,过滤大量不必要实例信息,提取强相关的实例信息;具体体现在:
56.(1)根据约束条件提取核心实例时,不考虑mvd中实体限制,只考虑实例属性值的约束,保障提取的子模型满足用户需求;
57.(2)以产品实体和过程实体为核心实例的主要实体,避免核心实例过多,降低过滤效果;
58.(3)子模型提取时,会将与核心实例相关的定义数据、外部关联数据和分配使用数据,以及组成核心实例的子产品或子过程同步提取,保障子模型的完整性;
59.(4)子模型提取时,不会提取与核心实例关联的实例,或其组成的整体等信息,避免无关信息或低相关信息提取到子模型,影响数据过滤效果和数据安全性。
附图说明
60.图1是现有技术中实体分类示意图。
61.图2是现有技术中实体实例与实体实例集合之间的关系示意图。
62.图3是本发明中的ifc子模型提取方法流程示意图。
63.图4是本发明中过程实体的ifc实例提取流程示意图。
64.图5是本发明中组织、控制、生产资料和分组实体的ifc实例提取流程示意图。
65.图6是本发明中类型实体的ifc实例提取流程示意图。
66.图7是本发明中属性实体的ifc实例提取流程示意图。
67.图8是本发明中产品实体的ifc实例提取流程示意图。
68.图9是本发明中ifc子模型提取结果示意图。
具体实施方式
69.下面结合具体实施方式对本发明的技术方案进行进一步描述:
70.一种ifc子模型提取方法,如图3所示,该方法包括以下步骤:
71.步骤1、读入过滤条件t,根据过滤条件t从ifc完整模型lc中提取核心实体e1,具体包括:
72.1.1、读入过滤条件t,t=(te,tp,tv);
73.1.2、条件从lc中提取c
i
=te的元素(te,{e
ij
}),lc={c
i
,{e
ij
}},c
i
是实体名称,0={e
ij
}是实体类型为c
i
的ifc实例的集合;
74.1.3遍历遍历{e
ij
}中各个实例e
ij
,如果e
ij
的tp属性的值等于tv或包含tv,则将e
ij
加入核心实体e1,e1={e
ij
};否则继续遍历{e
ij
}。
75.步骤2、分析核心实体e1,若核心实体e1为空则结束提取;若te是产品实体,直接进入步骤3;若te是过程实体,则计算并提取核心实体e1中的过程实体的ifc实例集合;若te是组织、控制、生产资料和分组实体,则计算并提取核心实体e1中的组织、控制、生产资料和分组实体的ifc实例集合;若te是类型实体,则计算并提取核心实体e1中的类型实体的ifc实例集合;若te是项目实体,鉴于一个ifc模型只有一个项目实体,若过滤条件提取获得唯一的项目实例,相当于没有过滤约束条件,即为实体级子模型提取,因此只需要根据mvd从ifc完整模型lc中提取实体类型在mvd中的实例,mvd={c
j
};若te是属性实体,则计算并提取核心实体e1中的属性实体的ifc实例集合;
76.具体地,如图4所示,提取过程实体的ifc实例时包括以下步骤:
77.2.1、根据过滤条件t提取过程实体的ifc实例的集合p1,p1=e1,p1={p
i
};
78.2.2、递归遍历p1中各个实例p
i
,提取p
i
反向属性isnestedby的值rv={r
nj
},进入步骤2.3;遍历结束进入步骤2.4;
79.2.3、遍历rv中所有关系实例r
nj
,提取r
nj
的relatedobjects属性的值{p
j
}加入p2;p2中实例即为p1实例的子过程;设置p1=p1∪p2;遍历结束返回步骤2.2;
80.2.4、计算e1=e1∪p1,并将e1和步骤2.2提取的所有关系实例rv加入到子模型m1。
81.具体地,如图5所示,计算并提取核心实体e1中的组织、控制、生产资料和分组实体的ifc实例时,包括以下步骤:
82.3.1、设置集合e
o
=e1,e
o
={e
i
};分析te实体类型,若为组织实体,进入步骤3.2;若为控制实体,进入步骤3.3;若为分组实体,进入步骤3.4;若为生产资料实体,进入步骤3.5;
83.3.2、遍历e
o
中各元素e
i
,提取e
i
的反向属性isactingupon的值{r
ij
}加入rv;遍历完后进入步骤3.6;
84.3.3、遍历e
o
中各元素e
i
,提取e
i
的反向属性controls的值{r
ij
}加入rv;遍历完后进入步骤3.6;
85.3.4、遍历e
o
中各元素e
i
,提取e
i
的反向属性isgroupedby的值{r
ij
}加入rv;遍历完后进入步骤3.6;
86.3.5、遍历e
o
中各元素e
i
,提取e
i
的反向属性resourceof的值{r
ij
}加入rv;遍历完后
进入步骤3.6;
87.3.6、遍历rv中各关系实例r
ij
,提取r
ij
的次要实体属性relatedobjects值{e
i
}加入e
o
;遍历完成后进入步骤3.7;
88.3.7、根据实体类型将e
o
中实体分为产品实例集合e
oe
、过程实例集合e
op
和其他实体实例e
o
;e
o
=e
oe
e
op

89.3.8、递归计算并提取e
op
中过程实例p
i
的所有子过程p2,e
op
=e
op
∪p2;
90.3.9、计算并提取核心实体e1中的组织、控制、生产资料和分组实体的ifc实例集合e1=e
op
∪e
oe
∪e
o
,将e1和上述步骤3.2

3.5中提取的所有关系实例rv加入到m1中。
91.具体地,如图6所示,计算并提取核心实体e1中的类型实体的ifc实例时,包括以下步骤:
92.4.1、设置类型实体实例集合t1=e1,t1={t
i
},e1设为空集;
93.4.2、遍历t1中各实例t
i
,提取t
i
的反向属性types的值rv={r
nj
},r
nj
是ifcreldefinesbytype实体的实例,进入步骤4.3;遍历完t1后,进入步骤4.4;
94.4.3、遍历rv的各个元素r
nj
,提取r
nj
的relatedobjects属性的值t2,全部加入实例集合e1,即e1=e1∪e2;rv遍历完成后,返回步骤4.2;
95.4.4、根据实体类型提取e1中过程实例集合e
1p
和生产资料实体实例集合e
rp

96.4.5、递归计算并提取e
1p
中过程实例p
i
的所有子过程p2,设置e
1p
=e
1p
∪p2;进入步骤4.7;
97.4.6、计算生产资料实体实例集合e
rp
中实例相关的核心实例结合p2,设置e
rp
=e
rp
∪p2;进入步骤4.7;
98.4.7、计算得到的核心实体集合e1=e1∪t1∪e
rp
∪e
ip
;将e1和过程中提取的关系实例rv添加到子模型m1。
99.具体地,如图7所示,计算并提取核心实体e1中的属性实体的ifc实例时,包括以下步骤:
100.5.1、设置属性实体实例集合s1=e1,s1={s
i
},e1设为空集;
101.5.2、遍历s1中各实例s
i
,提取s
i
的反向属性definesoccurrence的值{r
nj
}加入rv,r
nj
是ifcreldefinesbyproperties实体的实例;遍历完进入步骤5.3;
102.5.3、遍历rv的各个元素r
nj
,提取r
nj
的relatedobjects属性的值p1,加入核心实体集合e1,即e1=e1∪p1;遍历完成后,进入步骤5.4;
103.5.4、遍历s1中各实例s
i
,提取s
i
的反向属性的definestype的值t1={t
i
},t
i
是类型实体的实例;遍历完成后,进入步骤5.5;
104.5.5、提取t1中各个类型实例t
i
相关的核心实体t2,e1=e1∪t1∪t2;
105.5.6、计算得到核心实体集合e1=e1∪s1∪p1;将过程中提取的关系实例rv添加到子模型m1。
106.步骤3、计算并提取核心实体e1的相关ifc实例,结束提取,如图8所示,包括以下步骤:
107.6.1、遍历e1中各个e
i
,提取e
i
的所有反向属性的值{r
ij
}加入rv,把rv添加到子模型m1,进入步骤6.2;e1遍历完后,进入步骤6.7;
108.6.2、遍历rv中各个元素r
ij
;若r
ij
实体是关联关系实体或r
ij
的实体类型不在mvd中
或m1中已包括r
ij
,则继续遍历;否则,把r
ij
添加到子模型m1;若e
i
是r
ij
的主要实体,进入步骤6.3;若e
i
是r
ij
的次要实体,且不是聚合关系,则进入步骤6.4;若e
i
是r
ij
的次要实体,且r
ij
是聚合关系实体,则继续遍历;rv遍历完后进入步骤6.6;
109.6.3、获得r
ij
的次要实体relatedobjects属性值p2={p
j
};进入步骤6.5;
110.6.4、获得r
ij
的主要实体relatingobject属性值p2={p1};进入步骤6.5;
111.6.5、遍历p2中各个元素p
j
,若p
j
的实体类型不属于mvd,则从p2删除;p2遍历完后返回步骤6.2;
112.6.6、设置e1=e1∪p2;设置m1=m1∪e1;返回步骤6.1;
113.6.7、提取m1中所有元素的资源实体类型的属性,提取结束。
114.如图9所示,图9是某值机岛工程的ifc子模型提取,包括主体钢结构构件、风管、配电柜、消火栓等各类产品实例,下面以图9为例对本发明的方法进行进一步说明:
115.步骤1、读入过滤条件t,根据过滤条件t从ifc完整模型lc中提取核心实体e1,具体包括:
116.表1各类型过滤条件的子模型提取
[0117][0118]
1.1、读入过滤条件t,t=(te,tp,tv);如表1所示,假设mvd包括{ifccolumn,ifcbeam,ifcwall,ifcslab,ifctask,ifccontrol,ifcductsegment,ifccablecarriersegment,ifcrelnests,ifcrelassignstoprocess,ifcrelsequence);t1=(ifctask,name,“主钢结构安装”);表示提取”主钢结构安装”施工任务相关的数据;t2=(ifcbuildingelementtype,name,“钢”),表示提取构件类型名称为”钢”的信息;t3=(ifcpropertyset,ifcpropertyset.loadbearing,“f”),表示柱的承重属性为“否”相关的信息;t4=(ifcactor,name,“机电总包”),表示提取“机电总包”相关的信息;
[0119]
1.2、根据过滤条件从ifc完整模型lc={c
i
,{e
ij
}}中提取c
i
=te的元素(te,{e
ij
});如表1所示,对于t1,lc=(ifctask,{e
ij
});t2,lc=(ifcbuildingelementtype,{e
ij
});t3,lc=(ifcpropertyset,{e
ij
});t4,lc=(ifcactor,{e
ij
});
[0120]
步骤1.3、遍历{e
ij
}中各个实例e
ij
;如果e
ij
的tp属性的值等于tv或包含tv,则将e
ij
加入核心实体e1,e1={e
ij
};否则继续遍历{e
ij
};遍历结束后,进入步骤2;如表1所示,对于t1,e1={e1=ifctask(主钢结构安装)};对于t2,e1={e1=ifcbuildingelementtype(钢梁),e2=ifcbuildingelementtype(钢柱)};对于t3,e1={e1=ifcpropertyset(非承重钢柱)};对于t4,e1={e1=ifcactor(机电总包)}。
[0121]
步骤2、分析核心实体e1,若核心实体e1为空则结束提取;若te是产品实体,直接进入步骤3;
[0122]
若te是项目实体,则根据mvd从ifc完整模型lc中提取实体级子模型,mvd={c
j
};
[0123]
若te是过程实体,进入如下步骤2.1至步骤2.4:
[0124]
2.1、步骤2.1:设置p1=e1,p1={p
i
};
[0125]
步骤2.2:递归遍历p1中各个实例p
i
,提取p
i
反向属性isnestedby的值rv={r
nj
},进入步骤2.3;遍历结束进入步骤2.4;如表1所示,p1=ifctask(主钢结构安装),其反向属性isnestedby的值rv={ifcrelnests(主钢结构安装)};
[0126]
步骤2.3:遍历将rv中所有关系实例r
nj
,提取r
nj
的relatedobjects属性的值{p
j
}加入p2;p2中实例即为p1实例的子过程;设置p1=p1∪p2;遍历结束返回步骤2.2;如表1所示,ifcrelnests(主钢结构安装)的relatedobjects属性的值p2={ifctask(钢柱安装),ifctask(钢梁安装),ifc(罗盘箱钢结构安装)};
[0127]
步骤2.4:计算e1=e1∪p1,并将e1和步骤2.2提取的所有关系实例rv加入到子模型m1;如表1所示,e1=(ifctask(主钢结构安装),ifctask(钢柱安装),ifctask(钢梁安装),ifc(罗盘箱钢结构安装));rv=(ifcrelnests(主钢结构安装));核心实体共四个。
[0128]
若te是组织、控制、生产资料和分组实体,进入步骤3.1至步骤3.9:
[0129]
步骤3.1:设置集合e
o
=e1,e
o
={e
i
};分析te实体类型,若为组织实体,进入步骤3.2;若为控制实体,进入步骤3.3;若为分组实体,进入步骤3.4;若为生产资料实体,进入步骤3.5;
[0130]
如表1所示,te为组织实体ifcactor,进入步骤3.2;e
o
=(ifcactor(机电总包))
[0131]
步骤3.2:遍历e
o
中各元素e
i
,提取e
i
的反向属性isactingupon的值{r
ij
}加入rv;遍历完后进入步骤3.6;
[0132]
如表1所示,提取ifcactor(机电总包)的反向属性isactingupon的值rv={ifcrelassignstoactor(机电总包)},加入rv;
[0133]
步骤3.3:遍历e
o
中各元素e
i
,提取e
i
的反向属性controls的值{r
ij
}加入rv;遍历完后进入步骤3.6;
[0134]
步骤3.4:遍历e
o
中各元素e
i
,提取e
i
的反向属性isgroupedby的值{r
ij
}加入rv;遍历完后进入步骤3.6;
[0135]
步骤3.5:遍历e
o
中各元素e
i
,提取e
i
的反向属性resourceof的值{r
ij
}加入rv;遍历完后进入步骤3.6;
[0136]
步骤3.6:遍历rv中各关系实例r
ij
,提取r
ij
的次要实体属性relatedobjects值{e
i
}加入e
o
;遍历完成后进入步骤3.7;
[0137]
如表1所示,提取ifcrelassignstoactor(机电总包)的次要实体属性relatedobjects值e
oo
={ifctask(机电安装),ifctask(风管安装),ifctask(配电柜安装),ifctask(电缆桥架安装),ifctask(线槽安装),ifctask(消火栓安装)};
[0138]
步骤3.7:根据实体类型将e
o
中实体分为产品实例集合e
oe
、过程实例集合e
op
和其他实体实例e
o
;e
o
=e
oe
e
op

[0139]
如表1所示,e
op
={ifctask(机电安装),ifctask(风管安装),ifctask(配电柜安装),ifctask(电缆桥架安装),ifctask(线槽安装),ifctask(消火栓安装)};
[0140]
步骤3.8:如步骤2所示,递归计算并提取e
op
中过程实例p
i
的所有子过程p2,e
op
=e
op
∪p2;
[0141]
如表1所示,由于e
op
下属子过程都有“机电总包”施工,都与ifcrelassignstoactor(机电总包)关联,因此e
op
不变;
[0142]
步骤3.9:最终计算满足条件的核心实体实例集合e1=e
op
∪e
oe
∪e
o
;将e1和上述步骤提取的所有关系实例rv加入到m1;
[0143]
如表1所示,e1={ifcactor(机电总包),ifctask(机电安装),ifctask(风管安装),ifctask(配电柜安装),ifctask(电缆桥架安装),ifctask(线槽安装),ifctask(消火栓安装)};rv包括(ifcrelassignstoactor(机电总包),ifcrelnests(机电安装))等。
[0144]
若te是类型实体,则进入步骤4.1至步骤4.7:
[0145]
步骤4.1:设置类型实体实例集合t1=e1,t1={t
i
},e1设为空集;如表1所示,t1={e1=ifcbuildingelementtype(钢梁),e2=ifcbuildingelementtype(钢柱),e3=ifcbuildingelementtype(罗盘箱钢柱)};
[0146]
步骤4.2:遍历t1中各实例t
i
,提取t
i
的反向属性types的值rv={r
nj
},r
nj
是ifcreldefinesbytype实体的实例,进入步骤4.3;遍历完t1后,进入步骤4.4;如表1所示,ifcbuildingelementtype(钢梁)的反向属性types的值rv={ifcreldefinesbytype(钢梁)};ifcbuildingelementtype(钢柱)的反向属性types的值rv={ifcreldefinesbytype(钢柱)};
[0147]
ifcbuildingelementtype(罗盘箱钢柱)的反向属性types的值rv={ifcreldefinesbytype(罗盘箱钢柱)};
[0148]
步骤4.3:遍历rv的各个元素r
nj
,提取r
nj
的relatedobjects属性的值t2,全部加入实例集合e1,即e1=e1∪e2;rv遍历完成后,返回步骤4.2;如表1所示,ifcreldefinesbytype(钢梁)的relatedobjects属性的值t2包括{ifcbeam(钢梁1),ifcbeam(钢梁2),ifcbeam(钢梁3),ifcbeam(钢梁4)}等;ifcreldefinesbytype(钢柱)的relatedobjects属性的值t2包括{ifccolumn(钢柱1),ifccolumn(钢柱2),ifccolumn(钢柱3),ifccolumn(钢柱4)}等;ifcreldefinesbytype(罗盘箱钢柱)的relatedobjects属性的值t2包括{ifccolumn(钢柱5),ifccolumn(钢柱6),ifccolumn(钢柱7),ifccolumn(钢柱8)}等;
[0149]
e1={ifcbeam(钢梁1),ifcbeam(钢梁2),ifcbeam(钢梁3),ifcbeam(钢梁4),ifccolumn(钢柱1),ifccolumn(钢柱2),ifccolumn(钢柱3),ifccolumn(钢柱4),ifcbuildingelementtype(钢梁),ifccolumn(钢柱5),ifccolumn(钢柱6),ifccolumn(钢柱7),ifccolumn(钢柱8),ifcbuildingelementtype(钢柱)};rv={ifcreldefinesbytype(钢梁),ifcreldefinesbytype(钢柱),ifcreldefinesbytype(罗盘箱钢柱)};
[0150]
步骤4.4:根据实体类型提取e1中过程实例集合e
1p
和生产资料实体实例集合e
rp
;如表1所示,e
1p
为空;e
rp
为空;
[0151]
步骤4.5:根据步骤2,递归计算并提取e
1p
中过程实例p
i
的所有子过程p2,设置e1=e1∪p2;进入步骤4.7;
[0152]
步骤4.6:根据步骤3,计算生产资料实体实例集合e
rp
中实例相关的核心实例结合p2,设置e1=e1∪p2;进入步骤4.7;
[0153]
步骤4.7:计算得到的核心实体集合e1=e1∪t1∪e
rp
∪e
ip
;进入步骤3;如表1的t2
所示,e1为空。
[0154]
若te是属性实体,则进入步骤5.1至步骤5.6:
[0155]
步骤5.1:设置属性实体实例集合s1=e1,s1={s
i
},e1设为空集;如表1所示,根据t4条件提取的s1={ifcpropertyset(非承重钢柱)};
[0156]
步骤5.2:遍历s1中各实例s
i
,提取s
i
的反向属性definesoccurrence的值{r
nj
}加入rv,r
nj
是ifcreldefinesbyproperties实体的实例;遍历完进入步骤5.3;如表1的t4所示,ifcpropertyset(非承重钢柱)的反向属性definesoccurrence的值rv={ifcreldefinesbyproperties(罗盘箱钢柱)};
[0157]
步骤5.3:遍历rv的各个元素r
nj
,提取r
nj
的relatedobjects属性的值p1,加入核心实体集合e1,即e1=e1∪p1;遍历完成后,进入步骤5.4;如表1的t4所示,ifcreldefinesbyproperties(罗盘箱钢柱)的relatedobjects属性的值p1={ifccolumn(钢柱5),ifccolumn(钢柱6),ifccolumn(钢柱7),ifccolumn(钢柱8)};
[0158]
步骤5.4:遍历s1中各实例s
i
,提取s
i
的反向属性的definestype的值t1={t
i
},t
i
是类型实体的实例;遍历完成后,进入步骤5.5;如表1的t4所示,ifcpropertyset(非承重钢柱)的反向属性definestype的值t1为空;
[0159]
步骤5.5:如步骤3所示,提取t1中各个类型实例t
i
相关的核心实体t2,e1=e1∪t1∪t2;
[0160]
步骤5.6:计算得到核心实体集合e1=e1∪s1∪p1;将过程中提取的关系实例rv添加到子模型m1;
[0161]
如表1的t4所示,e1=e1∪s1∪p1={ifccolumn(钢柱5),ifccolumn(钢柱6),ifccolumn(钢柱7),ifccolumn(钢柱8),ifcpropertyset(非承重钢柱)}。
[0162]
步骤3、结合5种关系实体语义特征,计算并提取核心实体e1的相关的且实体类型在mvd中的ifc实例,作为核心实例的相关实例,加入到子模型m1中,结束提取,具体包括以下步骤:
[0163]
步骤6.1:遍历e1中各个e
i
,提取e
i
的所有反向属性的值rv={r
ij
};剔除m1中已提取的实例,即rv=rv

m1;e1遍历完后,进入步骤6.7;
[0164]
以步骤2的结果e1=(ifctask(主钢结构安装),ifctask(钢柱安装),ifctask(钢梁安装),ifc(罗盘箱钢结构安装));rv=(ifcrelnests(主钢结构安装))为例,假如e
i
=ifctask(主钢结构安装),rv={ifcrelnests(主钢结构安装),ifcrelnests(结构安装),ifcrelassignstoprocess(主钢结构安装),ifcrelsequence(主钢结构安装),ifcrelassociatesdocument(主钢结构安装)};rv=rv

m1={ifcrelnests(结构安装),ifcrelassignstoprocess(主钢结构安装),ifcrelsequence(主钢结构安装),ifcrelassociatesdocument(主钢结构安装)}
[0165]
步骤6.2:遍历rv中各个元素r
ij
;若r
ij
实体是关联关系实体或r
ij
的实体类型不在mvd中或m1中已包括r
ij
,则继续遍历;否则,把r
ij
添加到子模型m1;若e
i
是r
ij
的主要实体,进入步骤6.3;若e
i
是r
ij
的次要实体,且不是聚合关系,则进入步骤6.4;若e
i
是r
ij
的次要实体,且r
ij
是聚合关系实体,则继续遍历;rv遍历完后进入步骤6.6;
[0166]
以e
i
=ifctask(主钢结构安装)为例,r
ij
=ifcrelnests(结构安装),e
i
是r
ij
的次要实体,且是聚合关系,不处理,继续循环;r
ij
=ifcrelassignstoprocess(主钢结构安装),
e
i
是r
ij
的主要实体,进入步骤6.3;r
ij
=ifcrelsequence(主钢结构安装),是关联关系实体,继续遍历;r
ij
=ifcrelassociatesdocument(主钢结构安装),ifcrelassociatesdocument不在mvd中,继续遍历;
[0167]
步骤6.3:获得r
ij
的次要实体relatedobjects属性值p2={p
j
};进入步骤6.5;
[0168]
以e
i
=ifctask(主钢结构安装)为例,r
ij
=ifcrelassignstoprocess(主钢结构安装),把r
ij
添加到m1;获得r
ij
的次要实体relatedobjects属性值p2={ifcbeam(钢梁1),ifcbeam(钢梁2),ifcbeam(钢梁3),ifcbeam(钢梁4),ifccolumn(钢柱1),ifccolumn(钢柱2),ifccolumn(钢柱3),ifccolumn(钢柱4),ifcbuildingelementtype(钢梁),ifccolumn(钢柱5),ifccolumn(钢柱6),ifccolumn(钢柱7),ifccolumn(钢柱8)};
[0169]
步骤6.4:获得r
ij
的主要实体relatingobject属性值p2={p1};进入步骤6.5;
[0170]
以e
i
=ifctask(主钢结构安装)为例,不存在该情况;
[0171]
步骤6.5:遍历p2中各个元素p
j
,若p
j
的实体类型不属于mvd,则从p2删除;p2遍历完后返回步骤6.2;
[0172]
以e
i
=ifctask(主钢结构安装)为例,各个元素的类型均属于mvd,不处理;
[0173]
步骤6.6:设置e1=e1∪p2;设置m1=m1∪e1;返回步骤6.1;以e
i
=ifctask(主钢结构安装)为例,e1=e1∪p2=(ifctask(主钢结构安装),ifctask(钢柱安装),ifctask(钢梁安装),ifc(罗盘箱钢结构安装),ifcbeam(钢梁1),ifcbeam(钢梁2),ifcbeam(钢梁3),ifcbeam(钢梁4),ifccolumn(钢柱1),ifccolumn(钢柱2),ifccolumn(钢柱3),ifccolumn(钢柱4),ifcbuildingelementtype(钢梁),ifccolumn(钢柱5),ifccolumn(钢柱6),ifccolumn(钢柱7),ifccolumn(钢柱8));继续遍历e1,完成后进入步骤6.7;
[0174]
步骤6.7:提取m1中所有元素的资源实体类型的属性;由于可独立交换实体的各个资源实体类型的属性的值完整序列化存储在一个数据块中,因此直接根据属性值的id提取即可;提取结束。
[0175]
以e
i
=ifctask(主钢结构安装)为例,对于ifctask(主钢结构安装)实例,需要提取其globalid、ownerhistory、name和description等属性信息,这些属性的值是资源实体,直接序列化存储,可以根据存储地址一次性提取。
[0176]
本实施例只是对本发明的进一步解释,并不是对本发明的限制,本领域技术人员在阅读完本说明书后可以根据需要对本实施例做出没有创造性的修改,但是只要在本发明的权利要求范围内都受到专利法的保护。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献

  • 日榜
  • 周榜
  • 月榜