发明内容
本发明实施例所要解决的技术问题在于,提供一种基于建筑图纸的阳台自动识别方法,能够提高建筑对象阳台的识别效率及识别精度。
为了解决上述技术问题,本发明实施例提供了一种基于建筑图纸的阳台自动识别方法,所述方法适用于外阳台和内阳台,其中,
适用于所述外阳台的基于建筑图纸的阳台自动识别方法包括以下步骤:
读取柱所在图层、墙所在图层、门和窗所在图层以及外阳台所在图层的信息以获取所有所述图层中所有图元的属性信息以及端点的坐标数据;
找出所述外阳台所在图层中所有表示同一组外阳台线的线段;
根据每一组所述外阳台线找出所有所述外阳台的栏杆线;
根据每一条所述栏杆线找出所有所述图元的端点中组成外阳台板的端点的坐标数据对应写入一个点集;
将每一个所述点集中的所有端点按写入的顺序依次连接成的封闭线段作为外阳台板轮廓线输出。
进一步地,所述找出所述外阳台所在图层中所有表示同一组外阳台线的线段,对于每一组所述外阳台线,具体包括:
S1201、找出所述外阳台所在图层中的所有线段中相互平行且间距小于预设的距离阈值的三条线段;
S1202、判断所述三条线段的两端的所有端点是否在柱线或墙线上;
S1203、若所述三条线段的两端的所有端点均在柱线或墙线上,则所述三条线段为表示同一组所述外阳台线的线段;
S1204、若所述三条线段的两端的所有端点中只有一端的所有端点在柱线或墙线上,则找出一端的所有端点与所述三条线段的另一端的所有端点对应重合的第一组平行线段;
S1205、判断所述第一组平行线段的另一端的所有端点是否在柱线或墙线上,若是,则所述三条线段和所述第一组平行线段为表示同一组所述外阳台线的线段,若否,则找出一端的所有端点与所述第一组平行线段的另一端的所有端点对应重合的第二组平行线段;
S1206、判断所述第二组平行线段的另一端的所有端点是否在柱线或墙线上,若是,则所述三条线段、所述第一组平行线段和所述第二组平行线段为表示同一组所述外阳台线的线段,若否,则返回S1201;
S1207、若所述三条线段的两端的所有端点均不在柱线或墙线上,则找出一端的所有端点与所述三条线段的一端的所有端点对应重合的第三组平行线段以及一端的所有端点与所述三条线段的另一端的所有端点对应重合的第四组平行线段;
S1208、判断所述第三组平行线段和所述第四组平行线段的另一端的所有端点是否在柱线或墙线上,若是,则所述三条线段、所述第三组平行线段和所述第四组平行线段为表示同一组所述外阳台线的线段,若否,则返回S1201。
进一步地,所述根据每一组所述外阳台线找出所有所述外阳台的栏杆线,对于每一条所述栏杆线,具体包括:
判断表示同一组所述外阳台线的线段包括几组平行线段;
若包括一组平行线段,则找出与所述一组平行线段平行且距离最小的第一门线或第一窗线,并找出所述一组平行线段的所有线段中到所述第一门线或所述第一窗线的距离最小的线段作为所述栏杆线;
若包括两组或三组平行线段,则计算所述两组或三组平行线段的所有线段的长度,分别找出每组平行线段的所有线段中长度最小的线段,将找出的线段对应连接成的折线段作为所述栏杆线。
进一步地,所述根据每一条所述栏杆线找出所有所述图元的端点中组成外阳台板的端点的坐标数据对应写入一个点集,对于每一个外阳台板,通过以下步骤找出所有所述图元的端点中组成所述外阳台板的端点的坐标数据对应写入一个点集:
S1401、以所述栏杆线在柱线或墙线上的两个端点中的任意一个端点作为初始起点,并将所述初始起点的坐标数据写入所述点集;
S1402、找出与所述栏杆线的距离最小的第二门线或第二窗线,以所述第二门线或所述第二窗线的任意一个端点作为辅助点,以所述初始起点为中心点,控制连接所述初始起点和所述辅助点的线段绕中心点顺时针或逆时针旋转;
S1403、找出所述线段旋转角度最小或最大时与所述线段重合且与中心点相连的线段,并将找出的线段的端点的坐标数据写入所述点集;
S1404、判断当前写入所述点集的所述端点是否为所述初始起点;
S1405、若当前写入所述点集的所述端点不为所述初始起点,则以当前写入所述点集的所述端点为中心点,控制连接当前写入所述点集的所述端点和前一个写入所述点集的端点的线段绕中心点继续顺时针或逆时针旋转,并返回S1403;以及,
S1406、若当前写入所述点集的所述端点为所述初始起点,则找出所有所述图元的端点中组成所述外阳台板的端点的坐标数据写入所述点集的过程结束。
适用于所述内阳台的基于建筑图纸的阳台自动识别方法包括以下步骤:
读取柱所在图层、墙所在图层、门和窗所在图层以及内阳台所在图层的信息以获取所有所述图层中所有图元的属性信息以及端点的坐标数据;
找出所述内阳台所在图层中所有表示同一个阳台组的线段;其中,所述阳台组由N个所述内阳台连接组成,N为大于1的整数;
根据每一组表示同一个所述阳台组的线段求出所有所述阳台组的Envelope对象;
根据每一个所述阳台组的Envelope对象找出所有所述图元的端点中组成所述阳台组的N个内阳台板的端点的坐标数据分别对应写入N个点集;
将每一个所述点集中的所有端点按写入的顺序依次连接成的封闭线段作为内阳台板轮廓线输出。
进一步地,所述找出所述内阳台所在图层中所有表示同一个阳台组的线段,对于每一组表示同一个所述阳台组的线段,具体包括:
S2201、找出所述内阳台所在图层中的所有线段中一端的所有端点在柱线或墙线上、相互平行且间距小于预设的距离阈值的两条线段;
S2202、找出与所述两条线段分别相连的所有线段;
S2203、判断当前找出的所有线段中是否有端点在柱线或墙线上的线段;
S2204、若当前找出的所有线段中没有端点在柱线或墙线上的线段,则找出与当前找出的所有线段分别相连的所有线段,并返回S2203;
S2205、若当前找出的所有线段中有端点在柱线或墙线上的线段,则找出与端点不在柱线或墙线上的线段分别相连的所有线段,并返回S2203;
S2206、若当前找出的所有线段的端点均在柱线或墙线上,则所有找出的线段为一组表示同一个所述阳台组的线段。
进一步地,所述根据每一组表示同一个所述阳台组的线段求出所有所述阳台组的Envelope对象,对于每一个所述阳台组的Envelope对象,具体包括:
找出表示同一个所述阳台组的所有线段的端点的坐标数据中的最小横坐标、最大横坐标、最小纵坐标和最大纵坐标;
分别以所述最小横坐标为横坐标、以所述最小纵坐标为纵坐标生成第一辅助点,以所述最小横坐标为横坐标、以所述最大纵坐标为纵坐标生成第二辅助点,以所述最大横坐标为横坐标、以所述最大纵坐标为纵坐标生成第三辅助点,以所述最大横坐标为横坐标、以所述最小纵坐标为纵坐标生成第四辅助点;
则所述第一辅助点、所述第二辅助点、所述第三辅助点和所述第四辅助点依次连接生成的矩形为所述阳台组的Envelope对象。
进一步地,所述根据每一个所述阳台组的Envelope对象找出所有所述图元的端点中组成所述阳台组的N个内阳台板的端点的坐标数据分别对应写入N个点集,对于每一个所述阳台组,通过以下步骤找出所有所述图元的端点中组成所述阳台组的N个所述内阳台板的端点的坐标数据分别对应写入N个点集:
S2401、找出第一个所述内阳台板的初始起点和第一个所述内阳台板的辅助点;
S2402、根据第一个所述内阳台板的初始起点和第一个所述内阳台板的辅助点找出组成第一个所述内阳台板的所有端点的坐标数据写入第一个所述点集;
S2403、根据当前完成的所述点集中的所有端点找出下一相邻内阳台板的初始起点,并根据下一相邻内阳台板的初始起点找出下一相邻内阳台板的辅助点;
S2404、判断下一相邻内阳台板的辅助点的坐标数据是否超出所述阳台组的Envelope对象的范围,若是,则找出所有所述图元的端点中组成所述阳台组的N个所述内阳台板的端点的坐标数据分别对应写入N个所述点集的过程结束;若否,则以下一相邻内阳台板的初始起点为中心点,控制连接下一相邻内阳台板的初始起点和下一相邻内阳台板的辅助点的线段绕中心点顺时针或逆时针旋转;
S2405、找出线段旋转角度最小或最大时与线段重合且与中心点相连的线段;
S2406、判断找出的线段的端点的坐标数据是否超出所述阳台组的Envelope对象的范围或属于当前完成的所述点集,若超出所述阳台组的Envelope对象的范围或属于当前完成的所述点集,则找出所有所述图元的端点中组成所述阳台组的N个所述内阳台板的端点的坐标数据分别对应写入N个所述点集的过程结束;若未超出所述阳台组的Envelope对象的范围且不属于当前完成的所述点集,则根据下一相邻内阳台板的初始起点和下一相邻内阳台板的辅助点找出组成下一相邻内阳台板的所有端点的坐标数据写入下一个所述点集,并返回S2403。
进一步地,所述找出第一个所述内阳台板的初始起点和第一个所述内阳台板的辅助点,具体包括:
找出所述阳台组的所有端点中在柱线或墙线上且横坐标最小的第一端点;
找出表示所述阳台组的所有线段中与所述第一端点所在的第一线段平行且距离最小的第二线段,并找出所述第二线段的端点中与所述第一端点距离最小的第二端点;
找出与所述第一端点或所述第二端点的距离最小的第一门线或第一窗线的端点作为第一个所述内阳台板的辅助点;
分别计算所述第一端点和所述第二端点到第一个所述内阳台板的辅助点的距离,以到第一个所述内阳台板的辅助点的距离最小的端点作为第一个所述内阳台板的初始起点。
进一步地,对于每一个所述内阳台板,根据所述内阳台板的初始起点和辅助点找出组成所述内阳台板的所有端点的坐标数据对应写入一个所述点集,具体包括:
S2421、将所述初始起点的坐标数据写入所述点集,并以所述初始起点为中心点,控制连接所述初始起点和所述辅助点的线段绕中心点顺时针或逆时针旋转;
S2422、找出线段旋转角度最小或最大时与线段重合且与中心点相连的线段,并将找出的线段的端点的坐标数据写入所述点集;
S2423、判断当前写入所述点集的所述端点是否为所述初始起点;
S2424、若当前写入所述点集的所述端点不为所述初始起点,则以当前写入所述点集的所述端点为中心点,控制连接当前写入所述点集的所述端点和前一个写入所述点集的端点的线段绕中心点继续顺时针或逆时针旋转,并返回S2422;以及,
S2425、若当前写入所述点集的所述端点为所述初始起点,则根据所述内阳台板的所述初始起点和所述辅助点找出组成所述内阳台板的所有端点的坐标数据写入所述点集的过程结束。
进一步地,所述根据当前完成的所述点集中的所有端点找出下一相邻内阳台板的初始起点,并根据下一相邻内阳台板的初始起点找出下一相邻内阳台板的辅助点,具体包括:
找出所述阳台组的所有端点中属于当前完成的所述点集、在柱线或墙线上且不为当前完成的所述点集的初始起点的第三端点;
找出表示所述阳台组的所有线段中与所述第三端点所在的第三线段平行且距离最小的第四线段,并找出所述第四线段的端点中与所述第三端点距离最小的端点作为下一相邻内阳台板的初始起点;
找出与所述第三端点或下一相邻内阳台板的初始起点的距离最小的下一门线或下一窗线的端点作为下一相邻内阳台板的辅助点。
由于建筑图纸中所有阳台的一部分是由柱、墙、门和窗中的至少一种组成的,因此,本发明实施例提供的一种基于建筑图纸的阳台自动识别方法是以识别后的柱、墙、门和窗为基础对阳台进行识别。
所有的外阳台板轮廓线和内阳台板轮廓线为本发明实施例提供的一种基于建筑图纸的阳台自动识别方法的识别结果,而通过基于建筑图纸的阳台自动识别方法处理得到所有的外阳台板轮廓线和内阳台板轮廓线的端点的坐标数据以用于建筑对象外阳台和内阳台的三维建模。
与现有技术相比,本发明实施例提供了一种基于建筑图纸的阳台自动识别方法,首先读取柱所在图层、墙所在图层、门和窗所在图层、外阳台所在图层以及内阳台所在图层的信息;对于外阳台,根据每一组表示同一组外阳台线的线段找出外阳台的栏杆线,根据每一条栏杆线找出组成外阳台板的端点的坐标数据对应写入一个点集;对于内阳台,将所有内阳台划分为不同的阳台组,根据每一个阳台组的Envelope对象找出组成阳台组的N个内阳台板的端点的坐标数据分别对应写入N个点集;最后将每一个点集中的所有端点按找出的顺序依次连接成的封闭线段作为外阳台板轮廓线或内阳台板轮廓线输出;可以解决现有技术在建筑图纸的识别过程中对建筑对象的识别效率低,识别精度低的问题,从而提高了建筑对象阳台的识别效率及识别精度。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本技术领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为了使本发明实施例描述的更加清楚,首先对本发明实施例中使用的标准以及技术术语进行定义和说明。
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、点集
点集是指由具有坐标数据的点组成的集合。
定义并说明了上述标准以及技术术语后,下面对本发明实施例的技术方案进行具体介绍。
参见图6所示,是本发明提供的一种基于建筑图纸的阳台自动识别方法的一个优选实施例的方法流程图,适用于外阳台,包括步骤S11至步骤S15:
步骤S11、读取柱所在图层、墙所在图层、门和窗所在图层以及外阳台所在图层的信息以获取所有所述图层中所有图元的属性信息以及端点的坐标数据;
步骤S12、找出所述外阳台所在图层中所有表示同一组外阳台线的线段;
步骤S13、根据每一组所述外阳台线找出所有所述外阳台的栏杆线;
步骤S14、根据每一条所述栏杆线找出所有所述图元的端点中组成外阳台板的端点的坐标数据对应写入一个点集;
步骤S15、将每一个所述点集中的所有端点按写入的顺序依次连接成的封闭线段作为外阳台板轮廓线输出。
具体的,步骤S11中图元的属性信息以及端点的坐标数据为组成图元的图形的属性信息以及端点的坐标数据,主要包括线段、弧线和圆的属性信息以及线段、弧线和圆的端点的坐标数据。
具体的,步骤S12根据外阳台所在图层中的所有线段的端点的坐标数据判断哪些线段表示同一组外阳台线,将表示同一组外阳台线的线段归为一组,并按同样的方法找出每一组外阳台线。
具体的,步骤S13根据表示同一组外阳台线的线段找出外阳台的栏杆线,并按同样的方法找出所有的栏杆线。
具体的,步骤S14中一条栏杆线代表一个外阳台,根据栏杆线找出所有图元的端点中组成栏杆线所代表的外阳台的外阳台板的端点,并将找出的不同的栏杆线代表的不同的外阳台的外阳台板的端点的坐标数据分别对应写入不同的点集。
具体的,步骤S15分别将根据不同的栏杆线得到的不同的点集中的所有端点按顺序依次连接生成不同的外阳台板轮廓线并输出。
需要说明的是,由于建筑图纸中所有外阳台的一部分是由柱、墙、门和窗中的至少一种组成的,因此,本发明实施例提供的一种基于建筑图纸的阳台自动识别方法是以识别后的柱、墙、门和窗为基础对外阳台进行识别。
需要说明的是,所有的外阳台板轮廓线为本发明实施例提供的一种基于建筑图纸的阳台自动识别方法的识别结果,而通过基于建筑图纸的阳台自动识别方法处理得到所有的外阳台板轮廓线的端点的坐标数据以用于建筑对象外阳台的三维建模。
参见图7所示,是本发明提供的一种基于建筑图纸的阳台自动识别方法的步骤S12的一个优选实施例的具体流程图,所述找出所述外阳台所在图层中所有表示同一组外阳台线的线段,对于每一组所述外阳台线,具体包括步骤S1201至步骤S1208:
步骤S1201、找出所述外阳台所在图层中的所有线段中相互平行且间距小于预设的距离阈值的三条线段;
步骤S1202、判断所述三条线段的两端的所有端点是否在柱线或墙线上;
步骤S1203、若所述三条线段的两端的所有端点均在柱线或墙线上,则所述三条线段为表示同一组所述外阳台线的线段;
步骤S1204、若所述三条线段的两端的所有端点中只有一端的所有端点在柱线或墙线上,则找出一端的所有端点与所述三条线段的另一端的所有端点对应重合的第一组平行线段;
步骤S1205、判断所述第一组平行线段的另一端的所有端点是否在柱线或墙线上,若是,则所述三条线段和所述第一组平行线段为表示同一组所述外阳台线的线段,若否,则找出一端的所有端点与所述第一组平行线段的另一端的所有端点对应重合的第二组平行线段;
步骤S1206、判断所述第二组平行线段的另一端的所有端点是否在柱线或墙线上,若是,则所述三条线段、所述第一组平行线段和所述第二组平行线段为表示同一组所述外阳台线的线段,若否,则返回步骤S1201;
步骤S1207、若所述三条线段的两端的所有端点均不在柱线或墙线上,则找出一端的所有端点与所述三条线段的一端的所有端点对应重合的第三组平行线段以及一端的所有端点与所述三条线段的另一端的所有端点对应重合的第四组平行线段;
步骤S1208、判断所述第三组平行线段和所述第四组平行线段的另一端的所有端点是否在柱线或墙线上,若是,则所述三条线段、所述第三组平行线段和所述第四组平行线段为表示同一组所述外阳台线的线段,若否,则返回步骤S1201。
具体的,步骤S1201中的距离阈值一般设为0.5m,首先在外阳台所在图层中找出任意一条线段,然后找出与这条线段平行且端点间的距离小于0.5m的两条线段,从而找出符合条件的三条线段。
具体的,步骤S1202根据三条线段的所有端点的坐标数据判断端点是否在柱线或墙线上。
具体的,步骤S1204找出的第一组平行线段包括三条相互平行的线段,且每条线段的同一端的端点的坐标数据与步骤S1201中找出的三条线段的不在柱线或墙线上的一端的端点的坐标数据对应相同。
具体的,步骤S1205找出的第二组平行线段包括三条相互平行的线段,且每条线段的同一端的端点的坐标数据与步骤S1204中找出的第一组平行线段的不在柱线或墙线上的一端的端点的坐标数据对应相同。
具体的,步骤S1207找出的第三组平行线段和第四组平行线段均包括三条相互平行的线段,且第三组平行线段的每条线段的同一端的端点的坐标数据与步骤S1201中找出的三条线段的不在柱线或墙线上的一端的端点的坐标数据对应相同,第四组平行线段的每条线段的同一端的端点的坐标数据与步骤S1201中找出的三条线段的不在柱线或墙线上的另一端的端点的坐标数据对应相同。
需要说明的是,通过对外阳台所在图层中的所有线段均执行步骤S1201至步骤S1208以找出每一组表示同一组外阳台线的线段,从而识别出所有的外阳台线。
结合图8A至图8C所示,是本发明提供的一种基于建筑图纸的阳台自动识别方法的步骤S12的一个优选实施例的示意图,下面对找出表示同一组外阳台线的线段的具体过程进行详细说明:
如图8A所示,图中线段L11、线段L12和线段L13为步骤S1201找出的相互平行且间距小于预设的距离阈值的三条线段,且线段L11、线段L12和线段L13的两端的所有端点均在墙线上,则线段L11、线段L12和线段L13为表示同一组外阳台线的线段。
如图8B所示,图中线段L11、线段L12和线段L13为步骤S1201找出的相互平行且间距小于预设的距离阈值的三条线段,并且线段L11、线段L12和线段L13的两端的所有端点中只有一端的所有端点在墙线上,则找出一端的所有端点与线段L11、线段L12和线段L13的另一端的所有端点对应重合的第一组平行线段,包括线段L21、线段L22和线段L23,图中第一组平行线段的另一端的所有端点在墙线上,则线段L11、线段L12、线段L13、线段L21、线段L22和线段L23为表示同一组外阳台线的线段。
如图8C所示,图中线段L11、线段L12和线段L13为步骤S1201找出的相互平行且间距小于预设的距离阈值的三条线段,并且线段L11、线段L12和线段L13的两端的所有端点中只有一端的所有端点在墙线上,则找出一端的所有端点与线段L11、线段L12和线段L13的另一端的所有端点对应重合的第一组平行线段,包括线段L21、线段L22和线段L23,图中第一组平行线段的另一端的所有端点不在柱线或墙线上,则找出一端的所有端点与第一组平行线段的另一端的所有端点对应重合的第二组平行线段,包括线段L31、线段L32和线段L33,图中第二组平行线段的另一端的所有端点在墙线上,则线段L11、线段L12、线段L13、线段L21、线段L22、线段L23、线段L31、线段L32和线段L33为表示同一组外阳台线的线段。
如图8C所示,图中线段L21、线段L22和线段L23为步骤S1201找出的相互平行且间距小于预设的距离阈值的三条线段,且线段L11、线段L12和线段L13的两端的所有端点均不在柱线或墙线上,则找出一端的所有端点与线段L11、线段L12和线段L13的一端的所有端点对应重合的第三组平行线段以及一端的所有端点与线段L11、线段L12和线段L13的另一端的所有端点对应重合的第四组平行线段,第三组平行线段包括线段L11、线段L12和线段L13,第四组平行线段包括线段L31、线段L32和线段L33,并且第三组平行线段和第四组平行线段的另一端的所有端点在墙线上,则线段L11、线段L12、线段L13、线段L21、线段L22、线段L23、线段L31、线段L32和线段L33为表示同一组外阳台线的线段。
参见图9所示,是本发明提供的一种基于建筑图纸的阳台自动识别方法的步骤S13的一个优选实施例的具体流程图,所述根据每一组所述外阳台线找出所有所述外阳台的栏杆线,对于每一条所述栏杆线,具体包括步骤S1301至步骤S1303:
步骤S1301、判断表示同一组所述外阳台线的线段包括几组平行线段;
步骤S1302、若包括一组平行线段,则找出与所述一组平行线段平行且距离最小的第一门线或第一窗线,并找出所述一组平行线段的所有线段中到所述第一门线或所述第一窗线的距离最小的线段作为所述栏杆线;
步骤S1303、若包括两组或三组平行线段,则计算所述两组或三组平行线段的所有线段的长度,分别找出每组平行线段的所有线段中长度最小的线段,将找出的线段对应连接成的折线段作为所述栏杆线。
具体的,步骤S1302中若表示同一组外阳台线的线段包括一组平行线段,首先找出与该组平行线段平行的门线或窗线,然后计算该组平行线段的任意一条线段到找出的门线或窗线的距离,从而找出与该组平行线段平行且距离最小的第一门线或第一窗线,接着计算该组平行线段的每一条线段到第一门线或第一窗线的距离,最终找出该组平行线段的所有线段中到第一门线或第一窗线的距离最小的线段作为栏杆线。
具体的,步骤S1303中若表示同一组外阳台线的线段包括两组或三组平行线段,根据线段的端点的坐标数据计算每组平行线段的所有线段的长度并比较大小,从而找出每组平行线段的所有线段中长度最小的线段,将每组平行线段的所有线段中长度最小的线段对应连接成的折线段作为栏杆线。
需要说明的是,通过对每一组表示同一组外阳台线的线段均执行步骤S1301至步骤S1303以找出每一组表示同一组外阳台线的线段中的栏杆线,从而识别出所有的栏杆线。
参见图10所示,是本发明提供的一种基于建筑图纸的阳台自动识别方法的步骤S14的一个优选实施例的具体流程图,所述根据每一条所述栏杆线找出所有所述图元的端点中组成外阳台板的端点的坐标数据对应写入一个点集,对于每一个外阳台板,通过步骤S1401至步骤S1406找出所有所述图元的端点中组成所述外阳台板的端点的坐标数据对应写入一个点集:
步骤S1401、以所述栏杆线在柱线或墙线上的两个端点中的任意一个端点作为初始起点,并将所述初始起点的坐标数据写入所述点集;
步骤S1402、找出与所述栏杆线的距离最小的第二门线或第二窗线,以所述第二门线或所述第二窗线的任意一个端点作为辅助点,以所述初始起点为中心点,控制连接所述初始起点和所述辅助点的线段绕中心点顺时针或逆时针旋转;
步骤S1403、找出所述线段旋转角度最小或最大时与所述线段重合且与中心点相连的线段,并将找出的线段的端点的坐标数据写入所述点集;
步骤S1404、判断当前写入所述点集的所述端点是否为所述初始起点;
步骤S1405、若当前写入所述点集的所述端点不为所述初始起点,则以当前写入所述点集的所述端点为中心点,控制连接当前写入所述点集的所述端点和前一个写入所述点集的端点的线段绕中心点继续顺时针或逆时针旋转,并返回步骤S1403;以及,
步骤S1406、若当前写入所述点集的所述端点为所述初始起点,则找出所有所述图元的端点中组成所述外阳台板的端点的坐标数据写入所述点集的过程结束。
具体的,步骤S1402中若控制连接初始起点和辅助点的线段绕中心点顺时针旋转,则后续执行步骤S1405时均控制连接当前写入点集的端点和前一个写入点集的端点的线段绕中心点继续顺时针旋转;步骤S1402中若控制连接初始起点和辅助点的线段绕中心点逆时针旋转,则后续执行步骤S1405时均控制连接当前写入点集的端点和前一个写入点集的端点的线段绕中心点继续逆时针旋转。
具体的,步骤S1403中若找出线段旋转角度最小时与线段重合且与中心点相连的线段,则后续执行步骤1403时均找出线段旋转角度最小时与线段重合且与中心点相连的线段;步骤S1403中若找出线段旋转角度最大时与线段重合且与中心点相连的线段,则后续执行步骤1403时均找出线段旋转角度最大时与线段重合且与中心点相连的线段。
需要说明的是,步骤S1403中找出线段旋转角度最小或最大时与线段重合且与中心点相连的线段,这里寻找与旋转线段重合的线段不包括旋转线段本身;找出的线段与中心点相连具体指找出的线段的一个端点的坐标数据与中心点的坐标数据相同,则将找出的线段的另一个端点的坐标数据写入点集。
具体的,步骤S1404根据当前写入点集的端点的坐标数据和初始起点的坐标数据是否相同判断当前写入点集的端点是否为初始起点。
需要说明的是,通过对每一条栏杆线所代表的外阳台均执行步骤S1401至步骤S1406以找出所有栏杆线代表的外阳台的外阳台板的端点的坐标数据分别对应写入一个点集。
结合图11A至图11E所示,是本发明提供的一种基于建筑图纸的阳台自动识别方法的步骤S14的一个优选实施例的示意图,如图11A所示,表示同一组外阳台线的线段包括三组平行线段,线段L11、线段L12和线段L13为第一组平行线段,线段L21、线段L22和线段L23为第二组平行线段,线段L31、线段L32和线段L33为第三组平行线段,找出每组平行线段的所有线段中长度最小的线段分别为线段L11、线段L21和线段L31,则以线段L11、线段L21和线段L31对应连接成的折线段L11-L21-L31作为栏杆线。
由于图中外阳台的一部分由墙、门和窗组成,对外阳台的识别是以识别后的墙、门和窗为基础进行的,其中:
对于图中墙线与墙线相连且共线的情况,比较相连且共线的墙线的所有端点的横坐标的大小,由所有端点中横坐标最小的端点和横坐标最大的端点连接生成新墙线,则用生成的新墙线相应代替图中相连且共线的墙线,如图11B所示,用新墙线AB代替原来相连且共线的墙线。
对于图中的表示扇形门的图元,首先以连接弧线不与线段相连的一端和线段不与弧线相连的一端的线段作为扇形门的初始门线,然后找出所有墙线中与初始门线垂直且分别与初始门线的两端的距离最小的两段墙线,最后将初始门线延长至与找出的两段墙线相交并求出两个交点,以连接两个交点的线段作为扇形门的门线,则用生成的门线相应代替图中表示扇形门的图元,如图11B所示,用门线CD代替原来的表示扇形门的图元。
对于图中的表示直形窗的图元,首先找出表示直形窗的图元中的任意一条线段作为直形窗的初始窗线,这里找出与栏杆线的距离最小的线段作为初始窗线,然后找出所有墙线中与初始窗线垂直且分别与初始窗线的两端的距离最小的两段墙线,最后将初始窗线延长至与找出的两段墙线相交并求出两个交点,以连接两个交点的线段作为直形窗的窗线,则用生成的窗线相应代替图中表示直形窗的图元,如图11B所示,用窗线EA代替原来的表示直形窗的图元。
在对墙、门和窗进行识别处理后,对外阳台的识别的详细过程如下:
栏杆线1234在墙线上的两个端点分别为端点1和端点4,这里以端点1作为初始起点,并将初始起点1的坐标数据写入点集。
找出与栏杆线1234的距离最小的第二门线为门线56,门线56的两个端点分别为端点5和端点6,这里以端点5作为辅助点,以初始起点1为中心点,控制连接初始起点1和辅助点5的线段15绕中心点1逆时针旋转(顺时针旋转的情况同理)。
找到与线段15重合且与中心点1相连的线段包括线段12、线段17和线段18,并且线段15在逆时针旋转过程中形成夹角∠512、夹角∠517和夹角∠518,比较三个夹角的大小,夹角∠512最小,则找出线段15旋转角度最小时(最大时的情况同理)与线段15重合且与中心点1相连的线段为线段12,将线段12的端点2的坐标数据写入点集,如图11C所示。
判断当前写入点集的端点2不为初始起点1,则以当前写入点集的端点2为中心点,控制连接当前写入点集的端点2和前一个写入点集的端点1的线段21绕中心点2继续逆时针旋转。
找到与线段21重合且与中心点2相连的线段只有线段23,并且线段21在逆时针旋转过程中形成夹角∠123,则找出线段21旋转角度最小时与线段21重合且与中心点2相连的线段为线段23,将线段23的端点3的坐标数据写入点集,如图11D所示。
判断当前写入点集的端点3是否为初始起点1,若不是,则按同样的方法继续寻找下一个符合条件的端点的坐标数据写入点集,并判断是否为初始起点1,直到当前写入点集的端点是初始起点1为止。
若当前写入点集的端点为初始起点1,则找出所有图元的端点中组成外阳台板的端点的坐标数据写入点集的过程结束,找出的所有端点按顺序依次为端点1、端点2、端点3、端点4、端点9、端点10、端点11、端点6、端点5、端点12、端点8和端点1,如图11E所示。
同理,根据每一条栏杆线找出所有图元的端点中组成外阳台板的端点的坐标数据分别对应写入不同的点集,最终将根据不同的栏杆线得到的不同的点集中的所有端点按找出的顺序依次连接成的封闭线段作为不同的外阳台板轮廓线输出,完成对所有栏杆线代表的外阳台的外阳台板的识别。
参见图12所示,是本发明提供的一种基于建筑图纸的阳台自动识别方法的另一个优选实施例的方法流程图,适用于内阳台,包括步骤S21至步骤S25:
步骤S21、读取柱所在图层、墙所在图层、门和窗所在图层以及内阳台所在图层的信息以获取所有所述图层中所有图元的属性信息以及端点的坐标数据;
步骤S22、找出所述内阳台所在图层中所有表示同一个阳台组的线段;其中,所述阳台组由N个所述内阳台连接组成,N为大于1的整数;
步骤S23、根据每一组表示同一个所述阳台组的线段求出所有所述阳台组的Envelope对象;
步骤S24、根据每一个所述阳台组的Envelope对象找出所有所述图元的端点中组成所述阳台组的N个内阳台板的端点的坐标数据分别对应写入N个点集;
步骤S25、将每一个所述点集中的所有端点按写入的顺序依次连接成的封闭线段作为内阳台板轮廓线输出。
具体的,步骤S21中图元的属性信息以及端点的坐标数据为组成图元的图形的属性信息以及端点的坐标数据,主要包括线段、弧线和圆的属性信息以及线段、弧线和圆的端点的坐标数据。
具体的,步骤S22根据内阳台所在图层中的所有线段的端点的坐标数据判断哪些线段表示同一个阳台组,将表示同一个阳台组的线段归为一组,并按同样的方法找出每一个阳台组。
具体的,步骤S23根据表示同一个阳台组的线段的端点的坐标数据求出阳台组的Envelope对象,并按同样的方法求出所有的阳台组的Envelope对象。
具体的,步骤S24中由于一个阳台组包括N个内阳台,则根据阳台组的Envelope对象找出所有图元的端点中组成N个内阳台的内阳台板的端点的坐标数据,并将找出的不同的N个内阳台板的端点的坐标数据分别对应写入N个不同的点集。
具体的,步骤S25分别将根据不同的阳台组得到的不同的点集中的所有端点按顺序依次连接生成不同的内阳台板轮廓线并输出。
需要说明的是,由于建筑图纸中所有内阳台的一部分是由柱、墙、门和窗中的至少一种组成的,因此,本发明实施例提供的一种基于建筑图纸的阳台自动识别方法均是以识别后的柱、墙、门和窗为基础对内阳台进行识别。
需要说明的是,所有的内阳台板轮廓线为本发明实施例提供的一种基于建筑图纸的阳台自动识别方法的识别结果,而通过基于建筑图纸的阳台自动识别方法处理得到所有的内阳台板轮廓线的端点的坐标数据以用于建筑对象内阳台的三维建模。
参见图13所示,是本发明提供的一种基于建筑图纸的阳台自动识别方法的步骤S22的一个优选实施例的具体流程图,所述找出所述内阳台所在图层中所有表示同一个阳台组的线段,对于每一组表示同一个所述阳台组的线段,具体包括步骤S2201至步骤S2206:
步骤S2201、找出所述内阳台所在图层中的所有线段中一端的所有端点在柱线或墙线上、相互平行且间距小于预设的距离阈值的两条线段;
步骤S2202、找出与所述两条线段分别相连的所有线段;
步骤S2203、判断当前找出的所有线段中是否有端点在柱线或墙线上的线段;
步骤S2204、若当前找出的所有线段中没有端点在柱线或墙线上的线段,则找出与当前找出的所有线段分别相连的所有线段,并返回步骤S2203;
步骤S2205、若当前找出的所有线段中有端点在柱线或墙线上的线段,则找出与端点不在柱线或墙线上的线段分别相连的所有线段,并返回步骤S2203;
步骤S2206、若当前找出的所有线段的端点均在柱线或墙线上,则所有找出的线段为一组表示同一个所述阳台组的线段。
具体的,步骤S2201中的距离阈值一般设为0.5m,首先在内阳台所在图层中找出任意一条一个端点在柱线或墙线上的线段,然后找出与这条线段平行且端点间的距离小于0.5m的一条线段,从而找出符合条件的两条线段。
具体的,步骤S2202找出内阳台所在图层中的所有线段中与两条线段分别相连的所有线段。
具体的,步骤S2203根据线段的端点的坐标数据判断端点是否在柱线或墙线上。
具体的,步骤S2204至步骤S2206根据找出的所有线段的是否有端点在柱线或墙线上判断是否找出表示同一个阳台组的线段,对于没有端点在柱线或墙线上的所有线段,找出内阳台所在图层中与这些线段分别相连的所有线段,并判断当前找出的所有线段是否有端点在柱线或墙线上,直到当前找出的所有线段都有端点在柱线或墙线上为止,则步骤S2201至步骤S2205中所有找出的线段为一组表示同一个阳台组的线段。
需要说明的是,表示同一个阳台组的线段为内阳台所在图层中的所有线段中连接在一起的一组线段,并且该组线段不相连的一端的端点都在柱线或墙线上。
需要说明的是,通过对内阳台所在图层中的所有线段均执行步骤S2201至步骤S2206以找出每一组表示同一个阳台组的线段,从而识别出所有的阳台组。
参见图14所示,是本发明提供的一种基于建筑图纸的阳台自动识别方法的步骤S23的一个优选实施例的具体流程图,所述根据每一组表示同一个所述阳台组的线段求出所有所述阳台组的Envelope对象,对于每一个所述阳台组的Envelope对象,具体包括步骤S2301至步骤S2303:
步骤S2301、找出表示同一个所述阳台组的所有线段的端点的坐标数据中的最小横坐标、最大横坐标、最小纵坐标和最大纵坐标;
步骤S2302、分别以所述最小横坐标为横坐标、以所述最小纵坐标为纵坐标生成第一辅助点,以所述最小横坐标为横坐标、以所述最大纵坐标为纵坐标生成第二辅助点,以所述最大横坐标为横坐标、以所述最大纵坐标为纵坐标生成第三辅助点,以所述最大横坐标为横坐标、以所述最小纵坐标为纵坐标生成第四辅助点;
步骤S2303、则所述第一辅助点、所述第二辅助点、所述第三辅助点和所述第四辅助点依次连接生成的矩形为所述阳台组的Envelope对象。
需要说明的是,通过对每一组表示同一个阳台组的线段均执行步骤S2301至步骤S2303以找出每一个阳台组的Envelope对象,从而识别出所有的阳台组的Envelope对象。
结合图15A至图15B所示,是本发明提供的一种基于建筑图纸的阳台自动识别方法的步骤S23的一个优选实施例的示意图,如图15A所示,图中的阳台组由4个内阳台连接组成,分别为内阳台B1、内阳台B2、内阳台B3和内阳台B4。
找出表示该阳台组的所有线段的端点的坐标数据,分别比较所有端点的横坐标的大小和纵坐标的大小,则找出所有端点的坐标数据中的最小横坐标Xmin为端点1的横坐标,最大横坐标Xmax为端点4的横坐标,最小纵坐标Ymin为端点3的纵坐标,最大纵坐标Ymax为端点2的纵坐标。
以端点1的横坐标为横坐标、以端点3的纵坐标为纵坐标生成第一辅助点A(Xmin,Ymin),以端点1的横坐标为横坐标、以端点2的纵坐标为纵坐标生成第二辅助点B(Xmin,Ymax),以端点4的横坐标为横坐标、以端点2的纵坐标为纵坐标生成第三辅助点C(Xmax,Ymax),以端点4的横坐标为横坐标、以端点3的纵坐标为纵坐标生成第四辅助点D(Xmax,Ymin)。
则第一辅助点A(Xmin,Ymin)、第二辅助点B(Xmin,Ymax)、第三辅助点C(Xmax,Ymax)和第四辅助点D(Xmax,Ymin)依次连接生成的矩形ABCD为该阳台组的Envelope对象,如图15B所示。
同理,根据每一组表示同一个阳台组的线段的端点的坐标数据求出每一个阳台组的Envelope对象,完成对所有的阳台组的Envelope对象的识别。
参见图16所示,是本发明提供的一种基于建筑图纸的阳台自动识别方法的步骤S24的一个优选实施例的具体流程图,所述根据每一个所述阳台组的Envelope对象找出所有所述图元的端点中组成所述阳台组的N个内阳台板的端点的坐标数据分别对应写入N个点集,对于每一个所述阳台组,通过步骤S2401至步骤S2406找出所有所述图元的端点中组成所述阳台组的N个所述内阳台板的端点的坐标数据分别对应写入N个点集:
步骤S2401、找出第一个所述内阳台板的初始起点和第一个所述内阳台板的辅助点;
步骤S2402、根据第一个所述内阳台板的初始起点和第一个所述内阳台板的辅助点找出组成第一个所述内阳台板的所有端点的坐标数据写入第一个所述点集;
步骤S2403、根据当前完成的所述点集中的所有端点找出下一相邻内阳台板的初始起点,并根据下一相邻内阳台板的初始起点找出下一相邻内阳台板的辅助点;
步骤S2404、判断下一相邻内阳台板的辅助点的坐标数据是否超出所述阳台组的Envelope对象的范围,若是,则找出所有所述图元的端点中组成所述阳台组的N个所述内阳台板的端点的坐标数据分别对应写入N个所述点集的过程结束;若否,则以下一相邻内阳台板的初始起点为中心点,控制连接下一相邻内阳台板的初始起点和下一相邻内阳台板的辅助点的线段绕中心点顺时针或逆时针旋转;
步骤S2405、找出线段旋转角度最小或最大时与线段重合且与中心点相连的线段;
步骤S2406、判断找出的线段的端点的坐标数据是否超出所述阳台组的Envelope对象的范围或属于当前完成的所述点集,若超出所述阳台组的Envelope对象的范围或属于当前完成的所述点集,则找出所有所述图元的端点中组成所述阳台组的N个所述内阳台板的端点的坐标数据分别对应写入N个所述点集的过程结束;若未超出所述阳台组的Envelope对象的范围且不属于当前完成的所述点集,则根据下一相邻内阳台板的初始起点和下一相邻内阳台板的辅助点找出组成下一相邻内阳台板的所有端点的坐标数据写入下一个所述点集,并返回步骤S2403。
需要说明的是,由于一个阳台组包括N个内阳台,以横坐标最小的端点(若有多个端点横坐标相等且都最小,则取其中纵坐标最小的端点)所在的内阳台作为第一个内阳台,首先识别出第一个内阳台的内阳台板,然后基于当前识别完成的内阳台板识别出下一相邻的内阳台的内阳台板,直到识别出阳台组所包含的N个内阳台的内阳台板为止。
具体的,步骤S2401根据表示阳台组的线段的端点的坐标数据找出第一个内阳台板的初始起点和辅助点。
具体的,步骤S2402将找出的组成第一个内阳台板的所有端点的坐标数据写入第一个内阳台板所对应的点集。
具体的,步骤S2403根据当前已经识别出的内阳台板所对应的点集中的端点找出与当前已经识别出的内阳台板相邻的下一个内阳台的内阳台板的初始起点。
具体的,步骤S2404至步骤S2406首先通过判断找出的下一相邻内阳台板的辅助点的坐标数据是否超出阳台组的Envelope对象的范围从而判断阳台组的N个内阳台的内阳台板是否识别完成,若超出,则说明识别完成;若没有超出,则根据下一相邻内阳台板的初始起点和辅助点找出第一个符合条件的端点,并判断该端点的坐标数据是否超出阳台组的Envelope对象的范围或属于当前已经识别完成的内阳台板所对应的点集,若该端点的坐标数据超出阳台组的Envelope对象的范围或该端点的坐标数据属于当前已经识别完成的内阳台板所对应的点集,则说明识别完成;若该端点的坐标数据既没有超出阳台组的Envelope对象的范围,也不属于当前已经识别完成的内阳台板所对应的点集,则根据下一相邻内阳台板的初始起点和辅助点找出组成下一相邻内阳台板的所有端点的坐标数据写入下一相邻内阳台板所对应的点集;以下一相邻内阳台板所对应的点集作为当前已经识别出的内阳台板所对应的点集,接着识别下一相邻的内阳台的内阳台板,直到识别到第N个内阳台的内阳台板为止,说明识别完成。
需要说明的是,步骤S2405中找出的线段与中心点相连具体指找出的线段的一个端点的坐标数据与中心点的坐标数据相同。
需要说明的是,通过对每一个阳台组的Envelope对象均执行步骤S2401至步骤S2406从而找出所有阳台组所包含的内阳台的内阳台板所对应的点集。
参见图17所示,是本发明提供的一种基于建筑图纸的阳台自动识别方法的步骤S2401的一个优选实施例的具体流程图,所述找出第一个所述内阳台板的初始起点和第一个所述内阳台板的辅助点,具体包括步骤S2411至步骤S2414:
步骤S2411、找出所述阳台组的所有端点中在柱线或墙线上且横坐标最小的第一端点;
步骤S2412、找出表示所述阳台组的所有线段中与所述第一端点所在的第一线段平行且距离最小的第二线段,并找出所述第二线段的端点中与所述第一端点距离最小的第二端点;
步骤S2413、找出与所述第一端点或所述第二端点的距离最小的第一门线或第一窗线的端点作为第一个所述内阳台板的辅助点;
步骤S2414、分别计算所述第一端点和所述第二端点到第一个所述内阳台板的辅助点的距离,以到第一个所述内阳台板的辅助点的距离最小的端点作为第一个所述内阳台板的初始起点。
具体的,步骤S2411找出表示阳台组的线段的所有端点中在柱线或墙线上的端点,并比较这些端点的横坐标的大小,以横坐标最小的端点作为第一端点。
需要说明的是,若有多个端点横坐标相等且都最小,则取其中纵坐标最小的端点作为第一端点。
具体的,步骤S2412首先找出表示阳台组的所有线段中第一端点所在的线段作为第一线段,然后找出表示阳台组的所有线段中与第一线段平行且距离最小的线段作为第二线段,分别计算第二线段的两个端点到第一端点的距离,以两个端点中到第一端点的距离最小的端点作为第二端点。
具体的,步骤S2413首先找出与第一端点或第二端点的距离最小的第一门线或第一窗线,然后计算第一端点或第二端点到这些第一门线或第一窗线的端点的距离,选择其中最小的距离所对应的第一门线或第一窗线的端点作为第一个内阳台板的辅助点。
需要说明的是,通过对每一个阳台组的Envelope对象均执行步骤S2411至步骤S2414从而找出所有阳台组中第一个内阳台的内阳台板的初始起点和辅助点。
结合图18A至图18B所示,是本发明提供的一种基于建筑图纸的阳台自动识别方法的步骤S2401的一个优选实施例的示意图,如图18A所示,图中已经对墙线与柱的柱线共线的情况和直形窗分别进行了识别处理,用生成的新线段相应代替图中共线的墙线和柱线,用生成的窗线相应代替图中表示直形窗的图元。
如图18B所示,找出表示阳台组的线段的所有端点中在柱线或墙线上的端点,并比较这些端点的横坐标的大小,横坐标最小的端点为端点1,则第一端点为端点1。
在表示阳台组的所有线段中第一端点1所在的线段作为线段L1,则第一线段为线段L1,找出表示阳台组的所有线段中与第一线段L1平行且距离最小的线段为线段L2,则第二线段为线段L2,分别计算第二线段L2的两个端点到第一端点1的距离,两个端点中到第一端点1的距离最小的端点为端点2,则第二端点为端点2。
找到与第一端点1(第二端点2的情况同理)的距离最小的第一窗线包括窗线W1、窗线W2、窗线W3和窗线W4,分别计算第一端点1到窗线W1、窗线W2、窗线W3和窗线W4的端点的距离,其中距离最小的为窗线W1的端点3,则以端点3作为第一个内阳台板的辅助点。
分别计算第一端点1和第二端点2到辅助点3的距离,其中距离最小的为第一端点1,则以第一端点1作为第一个内阳台板的初始起点。
同理,对于每一个阳台组,按同样的方法可以找出所有阳台组对应的第一个内阳台的内阳台板的初始起点和辅助点。
参见图19所示,是本发明提供的一种基于建筑图纸的阳台自动识别方法的根据内阳台板的初始起点和辅助点找出组成内阳台板的所有端点的坐标数据对应写入一个点集的一个优选实施例的具体流程图,对于每一个所述内阳台板,根据所述内阳台板的初始起点和辅助点找出组成所述内阳台板的所有端点的坐标数据对应写入一个所述点集,具体包括步骤S2421至步骤S2425:
步骤S2421、将所述初始起点的坐标数据写入所述点集,并以所述初始起点为中心点,控制连接所述初始起点和所述辅助点的线段绕中心点顺时针或逆时针旋转;
步骤S2422、找出线段旋转角度最小或最大时与线段重合且与中心点相连的线段,并将找出的线段的端点的坐标数据写入所述点集;
步骤S2423、判断当前写入所述点集的所述端点是否为所述初始起点;
步骤S2424、若当前写入所述点集的所述端点不为所述初始起点,则以当前写入所述点集的所述端点为中心点,控制连接当前写入所述点集的所述端点和前一个写入所述点集的端点的线段绕中心点继续顺时针或逆时针旋转,并返回步骤S2422;以及,
步骤S2425、若当前写入所述点集的所述端点为所述初始起点,则根据所述内阳台板的所述初始起点和所述辅助点找出组成所述内阳台板的所有端点的坐标数据写入所述点集的过程结束。
具体的,步骤S2421中若控制连接初始起点和辅助点的线段绕中心点顺时针旋转,则后续执行步骤S2424时均控制连接当前写入点集的端点和前一个写入点集的端点的线段绕中心点继续顺时针旋转;步骤S2421中若控制连接初始起点和辅助点的线段绕中心点逆时针旋转,则后续执行步骤S2424时均控制连接当前写入点集的端点和前一个写入点集的端点的线段绕中心点继续逆时针旋转。
具体的,步骤S2422中若找出线段旋转角度最小时与线段重合且与中心点相连的线段,则后续执行步骤2422时均找出线段旋转角度最小时与线段重合且与中心点相连的线段;步骤S2422中若找出线段旋转角度最大时与线段重合且与中心点相连的线段,则后续执行步骤2422时均找出线段旋转角度最大时与线段重合且与中心点相连的线段。
需要说明的是,步骤S2422中找出线段旋转角度最小或最大时与线段重合且与中心点相连的线段,这里寻找与旋转线段重合的线段不包括旋转线段本身;找出的线段与中心点相连具体指找出的线段的一个端点的坐标数据与中心点的坐标数据相同,则将找出的线段的另一个端点的坐标数据写入点集。
具体的,步骤S2423根据当前写入点集的端点的坐标数据和初始起点的坐标数据是否相同判断当前写入点集的端点是否为初始起点。
需要说明的是,通过对每一个内阳台板均执行步骤S2421至步骤S2425以找出所有内阳台板的端点的坐标数据分别对应写入一个点集。
参见图20所示,是本发明提供的一种基于建筑图纸的阳台自动识别方法的步骤S2403的一个优选实施例的具体流程图,所述根据当前完成的所述点集中的所有端点找出下一相邻内阳台板的初始起点,并根据下一相邻内阳台板的初始起点找出下一相邻内阳台板的辅助点,具体包括步骤S2431至步骤S2433:
步骤S2431、找出所述阳台组的所有端点中属于当前完成的所述点集、在柱线或墙线上且不为当前完成的所述点集的初始起点的第三端点;
步骤S2432、找出表示所述阳台组的所有线段中与所述第三端点所在的第三线段平行且距离最小的第四线段,并找出所述第四线段的端点中与所述第三端点距离最小的端点作为下一相邻内阳台板的初始起点;
步骤S2433、找出与所述第三端点或下一相邻内阳台板的初始起点的距离最小的下一门线或下一窗线的端点作为下一相邻内阳台板的辅助点。
具体的,步骤S2431首先找出表示阳台组的线段的所有端点中属于当前已经识别完成的点集的端点,然后找出属于当前已经识别完成的点集的端点中在柱线或墙线上的端点,最后找出在柱线或墙线上的端点中不是当前已经识别完成的点集所对应的初始起点的端点作为第三端点。
具体的,步骤S2432首先找出表示阳台组的所有线段中第三端点所在的线段作为第三线段,然后找出表示阳台组的所有线段中与第三线段平行且距离最小的线段作为第四线段,分别计算第四线段的两个端点到第三端点的距离,以两个端点中到第三端点的距离最小的端点作为下一相邻内阳台板的初始起点。
具体的,步骤S2433首先找出与第三端点或下一相邻内阳台板的初始起点的距离最小的下一门线或下一窗线,然后计算第三端点或下一相邻内阳台板的初始起点到这些下一门线或下一窗线的端点的距离,选择其中最小的距离所对应的下一门线或下一窗线的端点作为下一相邻内阳台板的辅助点。
需要说明的是,通过对每一个阳台组中除了第一个内阳台板之外的内阳台板均执行步骤S2431至步骤S2433从而找出所有阳台组中除了第一个内阳台板之外的所有内阳台板的初始起点和辅助点。
综上,本发明实施例所提供的一种基于建筑图纸的阳台自动识别方法,通过读取柱所在图层、墙所在图层、门和窗所在图层、外阳台所在图层以及内阳台所在图层的信息;对于外阳台,根据每一组表示同一组外阳台线的线段找出外阳台的栏杆线,根据每一条栏杆线找出组成外阳台板的端点的坐标数据对应写入一个点集;对于内阳台,将所有内阳台划分为不同的阳台组,根据每一个阳台组的Envelope对象找出组成阳台组的N个内阳台板的端点的坐标数据分别对应写入N个点集;最后将每一个点集中的所有端点按找出的顺序依次连接成的封闭线段作为外阳台板轮廓线或内阳台板轮廓线输出;解决了现有技术在建筑图纸的识别过程中对建筑对象的识别效率低,识别精度低的问题,从而提高了建筑对象阳台的识别效率及识别精度。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。