发明内容
本发明实施例所要解决的技术问题在于,提供一种基于建筑图纸的地板自动识别方法,能够提高建筑对象地板的识别效率及识别精度。
为了解决上述技术问题,本发明实施例提供了一种基于建筑图纸的地板自动识别方法,包括以下步骤:
读取柱所在图层、墙所在图层、门和窗所在图层、阳台所在图层、变形缝所在图层以及井标识所在图层的信息以获取所有所述图层中所有图元的属性信息以及端点的坐标数据;
找出所述井标识所在图层中的线段中所有表示同一个井标识的线段;
根据每一个所述井标识找出所有所述图元的端点中组成井的端点的坐标数据对应写入一个井点集;
找出所有所述图元的端点中组成地板的外轮廓的端点的坐标数据写入外轮廓点集;
将每一个所述井点集中的所有端点按找出的顺序依次连接成的封闭线段作为地板内轮廓线输出,将所述外轮廓点集中的所有端点按找出的顺序依次连接成的封闭线段作为地板外轮廓线输出。
由于建筑图纸中所有的井都是由柱、墙、门和窗中的至少一种包围组成,地板的外轮廓是由柱、墙、门、窗、阳台和变形缝中的至少一种包围组成,因此,本发明实施例提供的一种基于建筑图纸的地板自动识别方法是以识别后的柱、墙、门、窗、阳台和变形缝为基础对地板进行识别。
每一个地板内轮廓线为一个井轮廓线,在实际建筑物中井是由上至下中空的,因此,地板内轮廓线包围的部分是中空的,没有地板,识别出的地板由地板内轮廓线的外部和地板外轮廓线的内部组成。
所有的地板内轮廓线和地板外轮廓线为本发明实施例提供的一种基于建筑图纸的地板自动识别方法的识别结果,而通过基于建筑图纸的地板自动识别方法处理得到所有的地板内轮廓线和地板外轮廓线的端点的坐标数据以用于建筑对象地板的三维建模。
与现有技术相比,本发明实施例提供了一种基于建筑图纸的地板自动识别方法,首先读取柱所在图层、墙所在图层、门和窗所在图层、阳台所在图层、变形缝所在图层以及井标识所在图层的信息,然后根据井标识所在图层的信息找出所有的井标识,并根据每一个井标识找出所有图元的端点中组成井的端点的坐标数据对应写入一个井点集,以及找出所有图元的端点中组成地板的外轮廓的端点的坐标数据写入外轮廓点集,最后分别根据每一个井点集生成地板内轮廓线并输出,根据外轮廓点集生成地板外轮廓线并输出,可以解决现有技术在建筑图纸的识别过程中对建筑对象的识别效率低,识别精度低的问题,从而提高了建筑对象地板的识别效率及识别精度。
进一步地,所述井标识包括中空线和对角线相交的矩形。
进一步地,所述井标识所在图层包括中空线所在图层和对角线相交的矩形所在图层。
进一步地,所述找出所述井标识所在图层中的线段中所有表示同一个井标识的线段,对于每一组所述中空线,通过以下步骤找出表示同一组所述中空线的线段:
S1201、找出所述中空线所在图层中的所有线段中只有一个端点重合的两条线段;
S1202、判断所述端点重合的两条线段是否与其他线段相交;
S1203、若所述端点重合的两条线段与其他线段相交,则返回S1201;以及,
S1204、若所述端点重合的两条线段不与其他线段相交,则判断所述端点重合的两条线段形成的夹角是否为钝角,若是,则所述端点重合的两条线段为表示同一组所述中空线的线段,若否,则返回S1201。
进一步地,所述找出所述井标识所在图层中的线段中所有表示同一个井标识的线段,对于每一个所述对角线相交的矩形,通过以下步骤找出表示同一个所述对角线相交的矩形的线段:
S1211、找出所述对角线相交的矩形所在图层中的所有线段中组成矩形的四条线段;
S1212、判断由所述四条线段组成的矩形是否存在相交的对角线,若是,则所述四条线段和表示所述相交的对角线的两条线段为表示同一个所述对角线相交的矩形的线段,若否,则返回S1211。
进一步地,所述根据每一个井标识找出所有所述图元的端点中组成井的端点的坐标数据对应写入一个井点集,对于每一个所述井标识为所述中空线的井,通过以下步骤找出所有所述图元的端点中组成所述井的端点的坐标数据对应写入一个井点集:
S1301、以所述中空线的不重合的两个端点中的一个端点作为初始起点,并将所述初始起点的坐标数据写入所述井点集;
S1302、以所述中空线的不重合的两个端点中的另一个端点作为辅助点,以所述初始起点为中心点,控制连接所述初始起点和所述辅助点的线段绕中心点顺时针或逆时针旋转;
S1303、找出所述线段旋转角度最小或最大时与所述线段重合且与中心点相连的线段,并将找出的线段的端点的坐标数据写入所述井点集;
S1304、计算当前写入所述井点集的所述端点到所述初始起点的距离;
S1305、当所述距离小于表示所述中空线的两条线段的长度之和时,判断当前写入所述井点集的所述端点是否为所述初始起点;
S1306、若当前写入所述井点集的所述端点不为所述初始起点,则以当前写入所述井点集的所述端点为中心点,控制连接当前写入所述井点集的所述端点和前一个写入所述井点集的端点的线段绕中心点继续顺时针或逆时针旋转,并返回S1303;以及,
S1307、若当前写入所述井点集的所述端点为所述初始起点,则找出所有所述图元的端点中组成所述井的端点的坐标数据写入所述井点集的过程结束。
进一步地,当所述距离不小于表示所述中空线的两条线段的长度之和时,则判定根据所述中空线找不到组成所述井的端点,所述中空线对应的所述井点集为空集。
进一步地,所述根据每一个井标识找出所有所述图元的端点中组成井的端点的坐标数据对应写入一个井点集,对于每一个所述井标识为所述对角线相交的矩形的井,通过以下步骤找出所有所述图元的端点中组成所述井的端点的坐标数据对应写入一个井点集:
S1311、以所述对角线相交的矩形的任意一条边作为基准线段,找出与所述基准线段平行且距离最小的墙线;
S1312、以所述墙线的任意一个端点作为初始起点,并将所述初始起点的坐标数据写入所述井点集;
S1313、以所述基准线段的任意一个端点作为辅助点,以所述初始起点为中心点,控制连接所述初始起点和所述辅助点的线段绕中心点顺时针或逆时针旋转;
S1314、找出所述线段旋转角度最小或最大时与所述线段重合且与中心点相连的线段,并将找出的线段的端点的坐标数据写入所述井点集;
S1315、判断当前写入所述井点集的所述端点是否为所述初始起点;
S1316、若当前写入所述井点集的所述端点不为所述初始起点,则以当前写入所述井点集的所述端点为中心点,控制连接当前写入所述井点集的所述端点和前一个写入所述井点集的端点的线段绕中心点继续顺时针或逆时针旋转,并返回S1314;以及,
S1317、若当前写入所述井点集的所述端点为所述初始起点,则找出所有所述图元的端点中组成所述井的端点的坐标数据写入所述井点集的过程结束。
进一步地,所述找出所有所述图元的端点中组成地板的外轮廓的端点的坐标数据写入外轮廓点集,具体包括:
S1401、找出所有所述图元的端点中横坐标或纵坐标最小或最大的端点作为初始起点,并将所述初始起点的坐标数据写入所述外轮廓点集;
S1402、以所述初始起点横坐标减X为横坐标,以所述初始起点纵坐标为纵坐标设一辅助点,以所述初始起点为中心点,控制连接所述初始起点和所述辅助点的线段绕中心点顺时针或逆时针旋转;其中,X为正数;
S1403、找出所述线段旋转角度最小或最大时与所述线段重合且与中心点相连的线段,并将找出的线段的端点的坐标数据写入所述外轮廓点集;
S1404、判断当前写入所述外轮廓点集的所述端点是否为所述初始起点;
S1405、若当前写入所述外轮廓点集的所述端点不为所述初始起点,则以当前写入所述外轮廓点集的所述端点为中心点,控制连接当前写入所述外轮廓点集的所述端点和前一个写入所述外轮廓点集的端点的线段绕中心点继续顺时针或逆时针旋转,并返回S1403;以及,
S1406、若当前写入所述外轮廓点集的所述端点为所述初始起点,则找出所有所述图元的端点中组成所述地板的外轮廓的端点的坐标数据写入所述外轮廓点集的过程结束。
进一步地,所述初始起点为横坐标或纵坐标最小或最大的端点,若有多个端点横坐标或纵坐标相等且都最小或最大,则所述初始起点为横坐标或纵坐标相等且都最小或最大的多个端点中纵坐标或横坐标最小或最大的端点。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本技术领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为了使本发明实施例描述的更加清楚,首先对本发明实施例中使用的标准以及技术术语进行定义和说明。
1、制图标准
建筑图纸中各建筑对象的画法是有一定标准的,基于建筑图纸的屋顶自动识别技术也是基于这一标准而开发,本发明实施例采用的国家建筑制图标准为《建筑制图统一标准》(GB50104-2010)。
2、Envelope对象
参见图1所示,是本发明实施例提供的一种基于建筑图纸的地板自动识别方法的关于Envelope对象的定义示意图,在本发明实施例中,每一个空间要素都对应一个Envelope对象,它定义了一个空间要素的空间范围,由(Xmin,Ymin)、(Xmin,Ymax)、(Xmax,Ymax)、(Xmax,Ymin)四个点构成,是每一个要素的最小外接矩形。
3、判断点是否在线段上
根据数学原理,已知直线的方程为A*x+B*y+C=0,点A坐标为(x,y),则点A到直线的距离为基于此判断点与线段的关系。
参见图2所示,是本发明实施例提供的一种基于建筑图纸的地板自动识别方法的关于判断点是否在线段上的说明示意图,首先判断点A(x,y)是否在线段的Envelope对象内,若点A(x,y)在线段的Envelope对象内,则根据公式求出点A(x,y)到线段的距离d值,若求得的距离d值小于阈值0.005m,则认为点A(x,y)在线段上。
4、线段相交
如果两条线段相交,则两条线段必然互相跨立,或两条线段中某条线段的某个端点正好落在另一条线段上。
参见图3A至图3B所示,是本发明实施例提供的一种基于建筑图纸的地板自动识别方法的关于线段相交的说明示意图,线段A1B1端点为A1(x1,y1)和B1(x2,y2),线段A2B2端点为A2(x3,y3)和B2(x4,y4)。
如图3A所示,定义向量a为(x2-x1,y2-y1),向量b为(x3-x1,y3-y1),计算向量a与向量b的叉积a*b=(x2-x1)*(y3-y1)-(x3-x1)*(y2-y1),若a*b>0,则向量a在向量b的顺时针方向;若a*b<0,则向量a在向量b的逆时针方向;若a*b=0,则向量a与向量b共线。
同理,如图3B所示,定义向量a为(x2-x1,y2-y1),向量c为(x4-x1,y4-y1),计算向量a与向量c的叉积a*c,若a*c>0,则向量a在向量c的顺时针方向;若a*c<0,则向量a在向量c的逆时针方向;若a*c=0,则向量a与向量c共线。
计算向量a与向量b的叉积和向量a与向量c的叉积的乘积(a*b)*(a*c),则有:
若(a*b)*(a*c)>0,则向量b与向量c均在向量a的同一侧,即线段A2B2的两个端点在线段A1B1的同一侧;
若(a*b)*(a*c)<0,则向量b与向量c均在向量a的不同侧,即线段A2B2的两个端点在线段A1B1的不同侧;
若(a*b)*(a*c)=0,则向量b与向量c中至少有一个向量与向量a同向,即线段A2B2的两个端点中至少有一个端点在线段A1B1所在的直线上,需要进一步判断线段A2B2是否有端点正好落在线段A1B1上。
同理,判断线段A1B1的两个端点是否在线段A2B2的不同侧。
若任意一条线段的两个端点在另一条线段的不同侧,则两条线段互相跨立,认为两条线段相交。
若两条线段中某条线段的某个端点正好落在另一条线段上,则认为两条线段相交。
否则,认为两条线段不相交。
5、线段共线
共线是指两条线段在同一条直线上或平行的两条线段之间的距离在一定阈值之内。
参见图4A至图4B所示,是本发明实施例提供的一种基于建筑图纸的地板自动识别方法的关于线段共线的说明示意图,线段A3B3端点为A3(x5,y5)和B3(x6,y6),线段A4B4端点为A4(x7,y7)和B4(x8,y8),端点A3(x5,y5)和B3(x6,y6)之间横坐标的差值的绝对值为d1=|x5-x6|,端点A4(x7,y7)和B4(x8,y8)之间横坐标的差值的绝对值为d2=|x7-x8|。
若d1和d2的值均小于或等于阈值0.0001m,则认为两条线段均垂直于X轴,如图4A所示,两条线段之间的距离为D=|x5-x7|。
若d1和d2的值均大于阈值0.0001m,则认为两条线段均不垂直于X轴,如图4B所示,计算出两条线段的斜率分别为和两条线段的截距分别为b1=y5-k1*x5和b2=y7-k2*x7,此时两条线段之间的距离即为线段A4B4的任一端点到线段A3B3的距离,即
若上述求得的距离D值小于阈值0.01m,且任意一条线段上的一点在另一条线段上,则认为两条线段共线。
6、具有共同端点的线段夹角
参见图5所示,是本发明实施例提供的一种基于建筑图纸的地板自动识别方法的关于具有共同端点的线段夹角的说明示意图,两条线段的端点分别为A5(x9,y9)和B51(x10,y10)、A5(x9,y9)和B52(x11,y11),具有共同端点A5(x9,y9),则两条线段的夹角为:
7、图元
图元是指建筑图纸中用于表示每一个建筑对象的图形。
8、属性信息
对于线段,其属性信息主要包括起点、终点和点数;对于弧线,其属性信息主要包括弧心、半径、起点和终点;对于圆,其属性信息主要包括圆心和半径。
9、点集
点集是指由具有坐标数据的点组成的集合。
10、中空线
中空线是指由只有一个端点重合的两条线段组成的一组线段。
定义并说明了上述标准以及技术术语后,下面对本发明实施例的技术方案进行具体介绍。
参见图6所示,是本发明提供的一种基于建筑图纸的地板自动识别方法的一个优选实施例的方法流程图,包括步骤S11至步骤S15,具体为:
步骤S11、读取柱所在图层、墙所在图层、门和窗所在图层、阳台所在图层、变形缝所在图层以及井标识所在图层的信息以获取所有所述图层中所有图元的属性信息以及端点的坐标数据;
步骤S12、找出所述井标识所在图层中的线段中所有表示同一个井标识的线段;
步骤S13、根据每一个所述井标识找出所有所述图元的端点中组成井的端点的坐标数据对应写入一个井点集;
步骤S14、找出所有所述图元的端点中组成地板的外轮廓的端点的坐标数据写入外轮廓点集;
步骤S15、将每一个所述井点集中的所有端点按找出的顺序依次连接成的封闭线段作为地板内轮廓线输出,将所述外轮廓点集中的所有端点按找出的顺序依次连接成的封闭线段作为地板外轮廓线输出。
具体的,步骤S11中图元的属性信息以及端点的坐标数据为组成图元的图形的属性信息以及端点的坐标数据,主要包括线段、弧线和圆的属性信息以及线段、弧线和圆的端点的坐标数据,根据图元的属性信息可以判断图元的形状。
具体的,步骤S12根据井标识所在图层中所有线段的端点的坐标数据判断哪些线段表示同一个井标识,将表示同一个井标识的线段归为一组,并按同样的方法找出所有的井标识。
具体的,步骤S13中一个井标识代表一个井,根据井标识找出所有图元的端点中组成井标识所代表的井的端点,并将找出的不同的井标识代表的不同的井的端点的坐标数据分别对应写入不同的井点集。
具体的,步骤S14将建筑图纸的最外围轮廓作为地板的外轮廓,并找出所有图元的端点中组成建筑图纸的最外围轮廓的端点的坐标数据写入外轮廓点集。
具体的,步骤S15分别将根据不同的井标识得到的不同的井点集中的所有端点按顺序依次连接生成不同的地板内轮廓线并输出,将找出的外轮廓点集中的所有端点按顺序依次连接生成地板外轮廓线并输出。
需要说明的是,由于建筑图纸中所有的井都是由柱、墙、门和窗中的至少一种包围组成,地板的外轮廓是由柱、墙、门、窗、阳台和变形缝中的至少一种包围组成,因此,本发明实施例提供的一种基于建筑图纸的地板自动识别方法是以识别后的柱、墙、门、窗、阳台和变形缝为基础对地板进行识别。
可以理解的,每一个地板内轮廓线为一个井轮廓线,在实际建筑物中井是由上至下中空的,因此,地板内轮廓线包围的部分是中空的,没有地板,识别出的地板由地板内轮廓线的外部和地板外轮廓线的内部组成。
需要说明的是,所有的地板内轮廓线和地板外轮廓线为本发明实施例提供的一种基于建筑图纸的地板自动识别方法的识别结果,而通过基于建筑图纸的地板自动识别方法处理得到所有的地板内轮廓线和地板外轮廓线的端点的坐标数据以用于建筑对象地板的三维建模。
在一个优选实施例中,所述井标识包括中空线和对角线相交的矩形。
在本实施例中,所述井标识所在图层包括中空线所在图层和对角线相交的矩形所在图层。
需要说明的是,若井为普通井,如天井、通风井、电井、水管井和管道井等,则井标识为中空线,步骤S11中读取井标识所在图层的信息相应为读取中空线所在图层的信息;若井为特殊井,主要指各类电梯间,如普通电梯、杂物梯和食梯等,则井标识为对角线相交的矩形,步骤S11中读取井标识所在图层的信息相应为读取对角线相交的矩形所在图层的信息。
参见图7所示,是本发明提供的一种基于建筑图纸的地板自动识别方法的步骤S12的一个优选实施例的具体流程图,所述找出所述井标识所在图层中的线段中所有表示同一个井标识的线段,对于每一组所述中空线,通过步骤S1201至步骤S1204找出表示同一组所述中空线的线段:
步骤S1201、找出所述中空线所在图层中的所有线段中只有一个端点重合的两条线段;
步骤S1202、判断所述端点重合的两条线段是否与其他线段相交;
步骤S1203、若所述端点重合的两条线段与其他线段相交,则返回步骤S1201;以及,
步骤S1204、若所述端点重合的两条线段不与其他线段相交,则判断所述端点重合的两条线段形成的夹角是否为钝角,若是,则所述端点重合的两条线段为表示同一组所述中空线的线段,若否,则返回步骤S1201。
具体的,步骤S1201根据所有线段的端点的坐标数据是否相同判断线段的端点是否重合,从而找出只有一个端点重合的两条线段。
需要说明的是,若中空线所在图层中的所有线段中存在只有一个端点重合的两条线段,这两条线段不与中空线所在图层中的其他任何线段相交,并且这两条线段形成的夹角为钝角,则将这两条线段归为一组中空线,对中空线所在图层中的所有线段均执行步骤S1201至步骤S1204以找出所有的表示同一组中空线的线段,从而识别出所有的中空线。
参见图8所示,是本发明提供的一种基于建筑图纸的地板自动识别方法的步骤S12的另一个优选实施例的具体流程图,所述找出所述井标识所在图层中的线段中所有表示同一个井标识的线段,对于每一个所述对角线相交的矩形,通过步骤S1211至步骤S1212找出表示同一个所述对角线相交的矩形的线段:
步骤S1211、找出所述对角线相交的矩形所在图层中的所有线段中组成矩形的四条线段;
步骤S1212、判断由所述四条线段组成的矩形是否存在相交的对角线,若是,则所述四条线段和表示所述相交的对角线的两条线段为表示同一个所述对角线相交的矩形的线段,若否,则返回步骤S1211。
需要说明的是,若对角线相交的矩形所在图层中的所有线段中存在组成矩形的四条线段,并且由这四条线段组成的矩形具有两条对角线且对角线相交,则将组成矩形的四条线段和矩形的两条对角线归为一组,表示同一个对角线相交的矩形,对对角线相交的矩形所在图层中的所有线段均执行步骤S1211至步骤S1212以找出所有的表示同一个对角线相交的矩形的线段,从而识别出所有的对角线相交的矩形。
参见图9所示,是本发明提供的一种基于建筑图纸的地板自动识别方法的步骤S13的一个优选实施例的具体流程图,所述根据每一个井标识找出所有所述图元的端点中组成井的端点的坐标数据对应写入一个井点集,对于每一个所述井标识为所述中空线的井,通过步骤S1301至步骤S1307找出所有所述图元的端点中组成所述井的端点的坐标数据对应写入一个井点集:
步骤S1301、以所述中空线的不重合的两个端点中的一个端点作为初始起点,并将所述初始起点的坐标数据写入所述井点集;
步骤S1302、以所述中空线的不重合的两个端点中的另一个端点作为辅助点,以所述初始起点为中心点,控制连接所述初始起点和所述辅助点的线段绕中心点顺时针或逆时针旋转;
步骤S1303、找出所述线段旋转角度最小或最大时与所述线段重合且与中心点相连的线段,并将找出的线段的端点的坐标数据写入所述井点集;
步骤S1304、计算当前写入所述井点集的所述端点到所述初始起点的距离;
步骤S1305、当所述距离小于表示所述中空线的两条线段的长度之和时,判断当前写入所述井点集的所述端点是否为所述初始起点;
步骤S1306、若当前写入所述井点集的所述端点不为所述初始起点,则以当前写入所述井点集的所述端点为中心点,控制连接当前写入所述井点集的所述端点和前一个写入所述井点集的端点的线段绕中心点继续顺时针或逆时针旋转,并返回步骤S1303;以及,
步骤S1307、若当前写入所述井点集的所述端点为所述初始起点,则找出所有所述图元的端点中组成所述井的端点的坐标数据写入所述井点集的过程结束。
具体的,步骤S1302中若控制连接初始起点和辅助点的线段绕中心点顺时针旋转,则后续执行步骤S1306时均控制连接当前写入井点集的端点和前一个写入井点集的端点的线段绕中心点继续顺时针旋转;步骤S1302中若控制连接初始起点和辅助点的线段绕中心点逆时针旋转,则后续执行步骤S1306时均控制连接当前写入井点集的端点和前一个写入井点集的端点的线段绕中心点继续逆时针旋转。
具体的,步骤S1303中若找出线段旋转角度最小时与线段重合且与中心点相连的线段,则后续执行步骤1303时均找出线段旋转角度最小时与线段重合且与中心点相连的线段;步骤S1303中若找出线段旋转角度最大时与线段重合且与中心点相连的线段,则后续执行步骤1303时均找出线段旋转角度最大时与线段重合且与中心点相连的线段。
需要说明的是,步骤S1303中找出线段旋转角度最小或最大时与线段重合且与中心点相连的线段,这里寻找与旋转线段重合的线段不包括旋转线段本身;找出的线段与中心点相连具体指找出的线段的一个端点的坐标数据与中心点的坐标数据相同,则将找出的线段的另一个端点的坐标数据写入井点集。
具体的,步骤S1304根据当前写入井点集的端点的坐标数据和初始起点的坐标数据计算当前写入井点集的端点到初始起点的距离。
具体的,步骤S1305在满足当前写入井点集的端点到初始起点的距离小于表示中空线的两条线段的长度之和时,根据当前写入井点集的端点的坐标数据和初始起点的坐标数据是否相同判断当前写入井点集的端点是否为初始起点。
需要说明的是,通过对每一组中空线所代表的井均执行步骤S1301至步骤S1307以找出所有中空线代表的井的端点的坐标数据分别对应写入一个井点集。
需要进一步说明的是,若任意一个井点集中的所有端点为按顺时针顺序找出并写入,则其他井点集中的所有端点均按顺时针顺序找出并写入;若任意一个井点集中的所有端点为按逆时针顺序找出并写入,则其他井点集中的所有端点均按逆时针顺序找出并写入。
结合图10A至图10E所示,是本发明提供的一种基于建筑图纸的地板自动识别方法的步骤S13的一个优选实施例的示意图,如图10A所示,图中的井为普通井,则井标识为中空线,找出的一组表示中空线的线段为线段01和线段02,其中,线段01和线段02只有一个端点重合,重合的端点为端点0,线段01和线段02不与中空线所在图层中的其他任何线段相交,并且线段01和线段02形成的夹角∠102为钝角。
由于图中的井为由柱、墙和窗包围组成的井,对井的识别是以识别后的柱、墙和窗为基础进行的,其中:
对于图中的墙线与柱的柱线共线的情况,比较共线的墙线和柱线的所有端点的横坐标或纵坐标的大小,由所有端点中横坐标最小的端点和横坐标最大的端点连接生成新线段或由所有端点中纵坐标最小的端点和纵坐标最大的端点连接生成新线段,则用生成的新线段相应代替图中共线的墙线和柱线,如图10B所示,用新线段AB代替原来共线的墙线和四个柱的柱线,其他墙线与柱的柱线共线的情况同理。
对于图中的表示直形窗的图元,首先找出表示直形窗的图元中的任意一条线段作为直形窗的初始窗线,这里找出与中空线的距离最小的线段作为初始窗线,然后找出所有墙线中与初始窗线垂直且分别与初始窗线的两端的距离最小的两段墙线,最后将初始窗线延长至与找出的两段墙线相交并求出两个交点,以连接两个交点的线段作为直形窗的窗线,则用生成的窗线相应代替图中表示直形窗的图元,如图10B所示,用窗线CD代替原来的表示直形窗的图元。
在对柱、墙和窗进行识别处理后,对井的识别的详细过程如下:
以中空线102的不重合的端点1和端点2中的一个端点作为初始起点,这里以端点1作为初始起点,并将初始起点1的坐标数据写入井点集。
以中空线102的不重合的端点1和端点2中的另一个端点2作为辅助点,以初始起点1为中心点,控制连接初始起点1和辅助点2的线段12绕中心点1顺时针旋转(逆时针旋转的情况同理)。
找到与线段12重合且与中心点1相连的线段包括线段13和线段14,并且线段12在顺时针旋转过程中形成夹角∠214和夹角∠213,比较两个夹角的大小,夹角∠214最小,则找出线段12旋转角度最小时(最大时的情况同理)与线段12重合且与中心点1相连的线段为线段14,将线段14的端点4的坐标数据写入井点集,如图10C所示。
计算端点4到初始起点1的距离,并与表示中空线102的线段01和线段02的长度之和进行比较,端点4到初始起点1的距离小于线段01和线段02的长度之和,则判断当前写入井点集的端点4是否为初始起点1。
当前写入井点集的端点4不为初始起点1,则以当前写入井点集的端点4为中心点,控制连接当前写入井点集的端点4和前一个写入井点集的端点1的线段41绕中心点4继续顺时针旋转。
找到与线段41重合且与中心点4相连的线段包括线段45、线段46和线段47,并且线段41在顺时针旋转过程中形成夹角∠145、夹角∠146和夹角∠147,比较三个夹角的大小,夹角∠145最小,则找出线段41旋转角度最小时与线段41重合且与中心点4相连的线段为线段45,将线段45的端点5的坐标数据写入井点集,如图10D所示。
计算端点5到初始起点1的距离,并与线段01和线段02的长度之和进行比较,端点5到初始起点1的距离小于线段01和线段02的长度之和,则判断当前写入井点集的端点5是否为初始起点1,若不是,则按同样的方法继续寻找下一个符合条件的端点的坐标数据写入井点集,并判断是否为初始起点1,直到当前写入井点集的端点为初始起点1为止。
若当前写入井点集的端点为初始起点1,则找出所有图元的端点中组成井的端点的坐标数据写入井点集的过程结束,找出的所有端点按顺序依次为端点1、端点4、端点5、端点8、端点9、端点2、端点3和端点1,如图10E所示。
同理,根据每一组中空线找出所有图元的端点中组成井的端点的坐标数据分别对应写入不同的井点集,最终将根据不同的中空线得到的不同的井点集中的所有端点按找出的顺序依次连接成的封闭线段作为不同的地板内轮廓线输出,完成对所有中空线代表的井的识别。
需要补充说明的是,当中空线的不重合的两个端点都不与roof图层(屋顶或天花板所在图层)中的任何线段相交时,需要读取柱所在图层、墙所在图层、门和窗所在图层以及roof图层的信息,并在此范围内找出所有组成井的端点以识别出井的轮廓线;否则,只需读取柱所在图层、墙所在图层以及门和窗所在图层的信息,在此范围内找出所有组成井的端点以识别出井的轮廓线;另外,如图11所示,当识别过程中出现独立柱(不与除了roof图层中的线段以外的任何图层中的线段相交的柱)时,同样需要读取柱所在图层、墙所在图层、门和窗所在图层以及roof图层的信息,并在此范围内找出所有组成井的端点以识别出井的轮廓线。
在一个优选实施例中,当所述距离不小于表示所述中空线的两条线段的长度之和时,则判定根据所述中空线找不到组成所述井的端点,所述中空线对应的所述井点集为空集。
可以理解的,若当前写入井点集的端点到初始起点的距离大于表示中空线的两条线段的长度之和,说明在建筑图纸上该中空线所在的位置处不构成井,应当舍弃,相应的,该中空线所对应的井点集为空集,不包括任何端点的坐标数据,最终也不会输出一个地板内轮廓线。
参见图11所示,是本发明提供的一种基于建筑图纸的地板自动识别方法的步骤S13的另一个优选实施例的具体流程图,所述根据每一个井标识找出所有所述图元的端点中组成井的端点的坐标数据对应写入一个井点集,对于每一个所述井标识为所述对角线相交的矩形的井,通过步骤S1311至步骤S1317找出所有所述图元的端点中组成所述井的端点的坐标数据对应写入一个井点集:
S1311、以所述对角线相交的矩形的任意一条边作为基准线段,找出与所述基准线段平行且距离最小的墙线;
S1312、以所述墙线的任意一个端点作为初始起点,并将所述初始起点的坐标数据写入所述井点集;
S1313、以所述基准线段的任意一个端点作为辅助点,以所述初始起点为中心点,控制连接所述初始起点和所述辅助点的线段绕中心点顺时针或逆时针旋转;
S1314、找出所述线段旋转角度最小或最大时与所述线段重合且与中心点相连的线段,并将找出的线段的端点的坐标数据写入所述井点集;
S1315、判断当前写入所述井点集的所述端点是否为所述初始起点;
S1316、若当前写入所述井点集的所述端点不为所述初始起点,则以当前写入所述井点集的所述端点为中心点,控制连接当前写入所述井点集的所述端点和前一个写入所述井点集的端点的线段绕中心点继续顺时针或逆时针旋转,并返回S1314;以及,
S1317、若当前写入所述井点集的所述端点为所述初始起点,则找出所有所述图元的端点中组成所述井的端点的坐标数据写入所述井点集的过程结束。
具体的,步骤S1311首先找出所有墙线中与基准线段平行的墙线,然后计算基准线段到与其平行的墙线的距离,从而找出与基准线段距离最小的墙线。
具体的,步骤S1313中若控制连接初始起点和辅助点的线段绕中心点顺时针旋转,则后续执行步骤S1316时均控制连接当前写入井点集的端点和前一个写入井点集的端点的线段绕中心点继续顺时针旋转;步骤S1313中若控制连接初始起点和辅助点的线段绕中心点逆时针旋转,则后续执行步骤S1316时均控制连接当前写入井点集的端点和前一个写入井点集的端点的线段绕中心点继续逆时针旋转。
具体的,步骤S1314中若找出线段旋转角度最小时与线段重合且与中心点相连的线段,则后续执行步骤1314时均找出线段旋转角度最小时与线段重合且与中心点相连的线段;步骤S1314中若找出线段旋转角度最大时与线段重合且与中心点相连的线段,则后续执行步骤1314时均找出线段旋转角度最大时与线段重合且与中心点相连的线段。
需要说明的是,步骤S1314中找出线段旋转角度最小或最大时与线段重合且与中心点相连的线段,这里寻找与旋转线段重合的线段不包括旋转线段本身;找出的线段与中心点相连具体指找出的线段的一个端点的坐标数据与中心点的坐标数据相同,则将找出的线段的另一个端点的坐标数据写入井点集。
具体的,步骤S1315根据当前写入井点集的端点的坐标数据和初始起点的坐标数据是否相同判断当前写入井点集的端点是否为初始起点。
需要说明的是,通过对每一个对角线相交的矩形所代表的井均执行步骤S1311至步骤S1317以找出所有对角线相交的矩形代表的井的端点的坐标数据分别对应写入一个井点集。
需要进一步说明的是,若任意一个井点集中的所有端点为按顺时针顺序找出并写入,则其他井点集中的所有端点均按顺时针顺序找出并写入;若任意一个井点集中的所有端点为按逆时针顺序找出并写入,则其他井点集中的所有端点均按逆时针顺序找出并写入。
结合图12A至图12E所示,是本发明提供的一种基于建筑图纸的地板自动识别方法的步骤S13的另一个优选实施例的示意图,如图12A所示,图中的井为特殊井,具体为电梯井,则井标识为对角线相交的矩形,找出一组表示对角线相交的矩形的线段为线段01、线段12、线段23、线段30、线段02和线段13,其中,线段01、线段12、线段23和线段30组成矩形,线段02和线段13为矩形的两条相交的对角线。
由于图中的井为由柱、墙和门包围组成的井,对井的识别是以识别后的柱、墙和门为基础进行的,其中:
对于图中的墙线与柱的柱线相交的情况,求出墙线和柱线的交点,若交点的个数为1个,则由交点和墙线在柱外的端点连接生成新线段,若交点的个数为2个,则由墙线的一个端点与距离较小的交点连接生成新线段,由墙线的另一个端点与另一个交点连接生成新线段,用生成的新线段相应代替图中与柱线相交的墙线,如图12B所示,用新线段AB代替原来与柱线相交的墙线,其他墙线与柱的柱线相交的情况同理。
对于图中表示推拉门的图元,两个矩形有共线边且相连且不与墙线相交,首先找出表示推拉门的图元中与两个矩形的共线边平行且与两个矩形的距离最小的一条线段,然后找出所有墙线中与该线段垂直且分别与该线段的两端的距离最小的两段墙线,将该线段的两端分别延长至与找出的两段墙线相交并求出两个交点,以连接两个交点的线段作为推拉门的门线,则用生成的门线相应代替图中表示推拉门的图元,如图12B所示,用门线CD代替原来的表示推拉门的图元。
在对柱、墙和门进行识别处理后,对井的识别的详细过程如下:
以对角线相交的矩形的任意一条边作为基准线段,这里以线段01作为基准线段,找出与基准线段01平行且距离最小的墙线为墙线45。
以墙线45的任意一个端点作为初始起点,这里以端点4作为初始起点,并将初始起点4的坐标数据写入井点集。
以基准线段01的任意一个端点作为辅助点,这里以端点0作为辅助点,以初始起点4为中心点,控制连接初始起点4和辅助点0的线段40绕中心点4顺时针旋转(逆时针旋转的情况同理)。
找到与线段40重合且与中心点4相连的线段包括线段45和线段46,并且线段40在顺时针旋转过程中形成夹角∠045和夹角∠046,比较两个夹角的大小,夹角∠045最大,则找出线段40旋转角度最大时(最小时的情况同理)与线段40重合且与中心点4相连的线段为线段45,将线段45的端点5的坐标数据写入井点集,如图12C所示。
判断当前写入井点集的端点5不为初始起点4,则以当前写入井点集的端点5为中心点,控制连接当前写入井点集的端点5和前一个写入井点集的端点4的线段54绕中心点4继续顺时针旋转。
找到与线段54重合且与中心点5相连的线段只有线段57,并且线段54在顺时针旋转过程中形成夹角∠457,则找出线段54旋转角度最大时与线段54重合且与中心点5相连的线段为线段57,将线段57的端点7的坐标数据写入井点集,如图12D所示。
判断当前写入井点集的端点7是否为初始起点4,若不是,则按同样的方法继续寻找下一个符合条件的端点的坐标数据写入井点集,并判断是否为初始起点4,直到当前写入井点集的端点为初始起点4为止。
若当前写入井点集的端点为初始起点4,则找出所有图元的端点中组成井的端点的坐标数据写入井点集的过程结束,找出的所有端点按顺序依次为端点4、端点5、端点7、端点8、端点9、端点10、端点11、端点6和端点4,如图12E所示。
同理,根据每一个对角线相交的矩形找出所有图元的端点中组成井的端点的坐标数据分别对应写入不同的井点集,最终将根据不同的对角线相交的矩形得到的不同的井点集中的所有端点按找出的顺序依次连接成的封闭线段作为不同的地板内轮廓线输出,完成对所有对角线相交的矩形代表的井的识别。
参见图13所示,是本发明提供的一种基于建筑图纸的地板自动识别方法的步骤S14的一个优选实施例的具体流程图,所述找出所有所述图元的端点中组成地板的外轮廓的端点的坐标数据写入外轮廓点集,具体包括步骤S1401至步骤S1406:
步骤S1401、找出所有所述图元的端点中横坐标或纵坐标最小或最大的端点作为初始起点,并将所述初始起点的坐标数据写入所述外轮廓点集;
步骤S1402、以所述初始起点横坐标减X为横坐标,以所述初始起点纵坐标为纵坐标设一辅助点,以所述初始起点为中心点,控制连接所述初始起点和所述辅助点的线段绕中心点顺时针或逆时针旋转;其中,X为正数;
步骤S1403、找出所述线段旋转角度最小或最大时与所述线段重合且与中心点相连的线段,并将找出的线段的端点的坐标数据写入所述外轮廓点集;
步骤S1404、判断当前写入所述外轮廓点集的所述端点是否为所述初始起点;
步骤S1405、若当前写入所述外轮廓点集的所述端点不为所述初始起点,则以当前写入所述外轮廓点集的所述端点为中心点,控制连接当前写入所述外轮廓点集的所述端点和前一个写入所述外轮廓点集的端点的线段绕中心点继续顺时针或逆时针旋转,并返回步骤S1403;以及,
步骤S1406、若当前写入所述外轮廓点集的所述端点为所述初始起点,则找出所有所述图元的端点中组成所述地板的外轮廓的端点的坐标数据写入所述外轮廓点集的过程结束。
在本实施例中,所述初始起点为横坐标或纵坐标最小或最大的端点,若有多个端点横坐标或纵坐标相等且都最小或最大,则所述初始起点为横坐标或纵坐标相等且都最小或最大的多个端点中纵坐标或横坐标最小或最大的端点。
具体的,步骤S1402中若控制连接初始起点和辅助点的线段绕中心点顺时针旋转,则后续执行步骤S1405时均控制连接当前写入外轮廓点集的端点和前一个写入外轮廓点集的端点的线段绕中心点继续顺时针旋转;步骤S1402中若控制连接初始起点和辅助点的线段绕中心点逆时针旋转,则后续执行步骤S1405时均控制连接当前写入外轮廓点集的端点和前一个写入外轮廓点集的端点的线段绕中心点继续逆时针旋转。
具体的,步骤S1403中若找出线段旋转角度最小时与线段重合且与中心点相连的线段,则后续执行步骤1403时均找出线段旋转角度最小时与线段重合且与中心点相连的线段;步骤S1403中若找出线段旋转角度最大时与线段重合且与中心点相连的线段,则后续执行步骤1403时均找出线段旋转角度最大时与线段重合且与中心点相连的线段。
需要说明的是,步骤S1403中找出线段旋转角度最小或最大时与线段重合且与中心点相连的线段,这里寻找与旋转线段重合的线段不包括旋转线段本身;找出的线段与中心点相连具体指找出的线段的一个端点的坐标数据与中心点的坐标数据相同,则将找出的线段的另一个端点的坐标数据写入外轮廓点集。
具体的,步骤S1404根据当前写入外轮廓点集的端点的坐标数据和初始起点的坐标数据是否相同判断当前写入外轮廓点集的端点是否为初始起点。
需要说明的是,本实施例提供的基于建筑图纸的地板自动识别方法的步骤S14的具体识别过程与图9和图11实施例提供的基于建筑图纸的地板自动识别方法的步骤S13的具体识别过程原理相同,这里不再赘述。
需要进一步说明的是,若任意一个井点集中的所有端点为按顺时针顺序找出并写入,则外轮廓点集中的所有端点为按逆时针顺序找出并写入;若任意一个井点集中的所有端点为按逆时针顺序找出并写入,则外轮廓点集中的所有端点为按顺时针顺序找出并写入。
综上,本发明实施例所提供的一种基于建筑图纸的地板自动识别方法,通过读取柱所在图层、墙所在图层、门和窗所在图层、阳台所在图层、变形缝所在图层以及井标识所在图层的信息,根据井标识所在图层的信息找出所有的井标识,并根据每一个井标识找出所有图元的端点中组成井的端点的坐标数据对应写入一个井点集,以及找出所有图元的端点中组成地板的外轮廓的端点的坐标数据写入外轮廓点集,最后分别根据每一个井点集生成地板内轮廓线并输出,根据外轮廓点集生成地板外轮廓线并输出,解决了现有技术在建筑图纸的识别过程中对建筑对象的识别效率低,识别精度低的问题,从而提高了建筑对象地板的识别效率及识别精度。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。