用于CAD中无法面域化的多段线重合判定方法
技术领域
本发明属于多段线重合分析技术领域,特别是涉及用于CAD中无法面域化的多段线重合判定方法。
背景技术
在建筑设计领域,常采用CAD等设计软件进行施工图纸设计。在工程预算、施工等阶段,需要对图纸上的信息进行算量、检查等工作,这就需要在设计图纸中识别出不同的图例,根据图例进行后续的算量等操作。尤其是设计图纸中梁、墙体信息的准确性,在后续的算量、施工等操作中尤为重要。
CAD图形中的矩形在判定是否重合的过程中,受限于设计师的绘图习惯不一致,或者各类绘图工具绘制的图形精度不一致等等情况,会出现CAD图形无法面域化的情况。无法面域化则无法执行布尔操作,不能采用传统的布尔操作方法来进行判定。
因此,针对这一情况,提出一种,在CAD矩形因其他因素导致无法正确面域化下,进行重合判定的一种方法。
发明内容
本发明的目的在于提供用于CAD中无法面域化的多段线重合判定方法,通过采用模糊精度的算法,大致根据面积比去进行矩形重合判定,使得整体系统在处理不同的图纸时,有较好的适应能力,可以获得较为准确的结果,尽可能的减少不利因素的干扰。
为解决上述技术问题,本发明是通过以下技术方案实现的:
本发明为用于CAD中无法面域化的多段线重合判定方法,包括以下步骤:
步骤S1:获取多段线pl1、多段线pl2的交点集Ins;
步骤S2:判断交点的数量:若交点数量为0,则多段线pl1、多段线pl2不重合,否则,开始创建公共区域;
步骤S3:若创建公共区域失败,则多段线pl1、多段线pl2不重合,若成功创建公共区域,则进行以下判断:
或
则多段线pl1、多段线pl2重合,否则不重合,其中,Area为公共区域的面积,pl1.Area、pl2.Area为多段线pl1、多段线pl2的面积。
进一步地,所述步骤S2中,创建公共区域时执行以下算法:
S01:以交点集Ins中的第一个点Ins[0]作为起始点Fp,以起始点Fp初始化一个面积为0的封闭矩形Rec;
S02:在CAD二维环境中初始化起始查找点Po,令Po=Fp;
S03:通过右手定则,在方向向量值集合VecLists中匹配正确的方向向量Fv;
S04:若匹配不到正确的方向向量Fv,则返回无结果;
S05:若匹配到正确的方向向量Fv,则检索获取交点集Ins中位于方向向量Fv上的点,并将起始查找点Po的值更新为该点;
S06:判定更新后的起始查找点Po与起始点Fp是否一致,如果一致,则跳出循环,返回形成的封闭矩形Rec;
S07:更新后的起始查找点Po与起始点Fp不一致,则将更新后的起始查找点Po添加至封闭矩形Rec的点集合中,继续循环S03-S07。
进一步地,所述S05中,获取交点集Ins中位于方向向量Fv上的点时执行以下算法:
S041:分别提取多段线pl1、多段线pl2的点集合pl1pos、点集合pl2pos;
S042:将交点集Ins、点集合pl1pos、点集合pl2pos合并,去重后形成点集合Allpos;
S043:遍历点集合Allpos中的所有点,分别计算点集合Allpos中的每一个点P与起始查找点Po之间形成的向量CheckVector;
S044:判断向量CheckVector与方向向量Fv是否平行且同向,若是,则将点集合Allpos中对应的点添加至点集合Mpos;
S045:将点集合Mpos中与起始查找点Po距离最小的点定义为更新点Pg,返回更新点Pg至调用函数中,并将起始查找点Po更新为更新点Pg。
进一步地,所述S045中,若更新点Pg与起始点Fp相同,则返回形成的封闭矩形Rec;
否则,将更新点Pg添加至封闭矩形Rec的点集合中。
进一步地,还包括在先分析,在先分析步骤为:
S11:在CAD中对多段线pl1、多段线pl2进行面域化操作;
S12:若多段线pl1、多段线pl2面域化失败,则进行步骤S1-S3;若多段线pl1、多段线pl2面域化成功,则进行S13;
S13:对多段线pl1、多段线pl2纸箱布尔操作剪切,获得公共面积Area;
S14:若
或
则多段线pl1、多段线pl2重合,否则不重合。
进一步地,所述方向向量值集合VecLists包括四个单位向量,四个单位向量分别为:
单位向量VR:水平向右、单位向量VU:水平向上、单位向量VL:水平向左、单位向量VD:水平向下。
进一步地,所述S03中,通过右手定则,在方向向量值集合VecLists中匹配正确的方向向量Fv的方法为:
步骤S031:令方向向量Vec=单位向量VL,暂定正确的方向向量Fvo=单位向量VU;
步骤S032:创建新点:将起始查找点Po沿着方向向量Fvo的方向移动方向向量Fvo的长度形成新点CheckPoint;
步骤S033:判断新点CheckPoint是否在多段线pl1和多段线pl2内;
若新点CheckPoint在多段线pl1和多段线pl2内,则暂定的方向向量Fvo即为匹配正确的方向向量Fv;
否则,匹配不到正确的方向向量Fv并进行步骤S034;
步骤S034:按照步骤S031原理依次令方向向量Vec=单位向量VR、单位向量VU、单位向量VD,对应的依次暂定正确的方向向量Fvo=单位向量VD、单位向量VR、单位向量VL,再分别重复步骤S032-步骤S033原理,若匹配到正确的方向向量Fv则结束,若均匹配不到正确的方向向量Fv,则返回无结果。
进一步地,若匹配正确的方向向量Fv为单位向量VU,则起始查找点Po对应的方向为单位向量VL对应的方向;
若匹配正确的方向向量Fv为单位向量VD,则起始查找点Po对应的方向为单位向量VR对应的方向;
若匹配正确的方向向量Fv为单位向量VR,则起始查找点Po对应的方向为单位向量VU对应的方向;
若匹配正确的方向向量Fv为单位向量VL,则起始查找点Po对应的方向为单位向量VD对应的方向。
进一步地,所述的方法用于建筑中判断墙体上方是否有梁,判断墙体上方是否有梁时,多段线1为墙体,多段线2为梁,若多段线1、多段线2重合,则墙体上部有梁。
本发明具有以下有益效果:
本发明在初始化方向时,需要根据初始点与方向单位向量形成的点是否在矩形内,判定方向向量是否正确;后续则根据右手定则进行方向向量轮换查找符合要求的点集合;在点集合中需要根据距离去判定最近点,以找出正确的点,使得图纸上的矩形处理更加灵活,适应范围更广,而且准确度提高。也一定程度上提升了用户的体验感。
当然,实施本发明的任一产品并不一定需要同时达到以上所述的所有优点。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明用于CAD中无法面域化的多段线重合判定的流程图;
图2为图1中CheckMethod(pl1、pl2)算法对应的流程图;
图3a为图2中CreatPublicArea(Ins、pl1、pl2)算法对应的流程图(上半部分);
图3b为图2中CreatPublicArea(Ins、pl1、pl2)算法对应的流程图(下半部分);
图4为图3b中FindPoint3d(Po、Fv、Ins、pl1、pl2)算法对应的流程图;
图5a为匹配正确的方向向量Fv的算法对应的流程图(左半部分);
图5b为匹配正确的方向向量Fv的算法对应的流程图(右半部分);
图6为本申请中判断两个多段线重合的示意图;
图7为本申请中判断两个多段线不重合的示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
在本发明的描述中,需要理解的是,术语“左”、“上”、“下”、“右”、“顶”等指示方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的组件或元件必须具有特定的方位,以特定的方位构造和操作,因此不能理解为对本发明的限制。
实施例一:
在CAD矩形因其他因素导致无法正确面域化下,进行重合判定,如在建筑图中,判断墙体上方是否有梁存在,具体的:多段线1是墙体,多段线2是梁,如图2所示:进行以下判断步骤:
步骤S1:获取多段线pl1、多段线pl2的交点集Ins;
步骤S2:判断交点的数量:若交点数量为0,则多段线pl1、多段线pl2不重合,否则,开始创建公共区域;
步骤S3:若创建公共区域失败,则多段线pl1、多段线pl2不重合,若成功创建公共区域,则进行以下判断:
或
考虑精度误差,在面积比值达到90%以上时,认定重合,则多段线pl1、多段线pl2重合,否则不重合,其中,Area为公共区域的面积,pl1.Area、pl2.Area为多段线pl1、多段线pl2的面积。
如图3a、3b所示,作为本发明提供的一个实施例,优选的,所述步骤S2中,创建公共区域时执行以下算法:
S01:以交点集Ins中的第一个点Ins[0]作为起始点Fp,以起始点Fp初始化一个面积为0的封闭矩形Rec;
S02:在CAD二维环境中初始化起始查找点Po,令Po=Fp;
S03:通过右手定则,在方向向量值集合VecLists中匹配正确的方向向量Fv;如图5a、5b所示,作为本发明提供的一个实施例,优选的,所述方向向量值集合VecLists包括四个单位向量,四个单位向量分别为:单位向量VR:水平向右、单位向量VU:水平向上、单位向量VL:水平向左、单位向量VD:水平向下;
如图5a、5b所示,作为本发明提供的一个实施例,优选的,所述S03中,通过右手定则,在方向向量值集合VecLists中匹配正确的方向向量Fv的方法为:
步骤S031:令方向向量Vec=单位向量VL,暂定正确的方向向量Fvo=单位向量VU;
步骤S032:创建新点:将起始查找点Po沿着方向向量Fvo的方向移动方向向量Fvo的长度形成新点CheckPoint;
步骤S033:判断新点CheckPoint是否在多段线pl1和多段线pl2内;
若新点CheckPoint在多段线pl1和多段线pl2内,则暂定的方向向量Fvo即为匹配正确的方向向量Fv;
否则,匹配不到正确的方向向量Fv并进行步骤S034;
步骤S034:按照步骤S031原理,令方向向量Vec=单位向量VR,暂定正确的方向向量Fvo=单位向量VD,重复步骤S032-步骤S033原理,若匹配到正确的方向向量Fv则结束,若匹配不到正确的方向向量,则令方向向量Vec=单位向量VU、暂定正确的方向向量Fvo=单位向量VR,重复步骤S032-步骤S033原理,若匹配到正确的方向向量Fv则结束,若匹配不到正确的方向向量,则令方向向量Vec=单位向量VD,暂定正确的方向向量Fvo=单位向量VL,重复步骤S032-步骤S033原理,若匹配到正确的方向向量Fv则结束,若匹配不到正确的方向向量Fv,则返回无结果;
作为本发明提供的一个实施例,优选的,若匹配正确的方向向量Fv为单位向量VU,则起始查找点Po对应的方向为单位向量VL对应的方向;
若匹配正确的方向向量Fv为单位向量VD,则起始查找点Po对应的方向为单位向量VR对应的方向;
若匹配正确的方向向量Fv为单位向量VR,则起始查找点Po对应的方向为单位向量VU对应的方向;
若匹配正确的方向向量Fv为单位向量VL,则起始查找点Po对应的方向为单位向量VD对应的方向;
S04:若匹配不到正确的方向向量Fv,则返回无结果;
S05:若匹配到正确的方向向量Fv,则检索获取交点集Ins中位于方向向量Fv上的点,并将起始查找点Po的值更新为该点;
S06:判定更新后的起始查找点Po与起始点Fp是否一致,如果一致(一致则表示找到符合要求的封闭矩形),则跳出循环,返回形成的封闭矩形Rec;
S07:更新后的起始查找点Po与起始点Fp不一致,则将更新后的起始查找点Po添加至封闭矩形Rec的点集合中,继续循环S03-S07。
如图4所示,作为本发明提供的一个实施例,优选的,所述S05中,获取交点集Ins中位于方向向量Fv上的点时执行以下算法:
S041:分别提取多段线pl1、多段线pl2的点集合pl1pos、点集合pl2pos;
S042:将交点集Ins、点集合pl1pos、点集合pl2pos合并,去重后形成点集合Allpos;
S043:遍历点集合Allpos中的所有点,分别计算点集合Allpos中的每一个点P与起始查找点Po之间形成的向量CheckVector;
S044:判断向量CheckVector与方向向量Fv是否平行且同向,若是,则将点集合Allpos中对应的点添加至点集合Mpos;
S045:将点集合Mpos中与起始查找点Po距离最小的点定义为更新点Pg,返回更新点Pg至调用函数(即图2中的CreatPublicArea函数)中,并将起始查找点Po更新为更新点Pg。
作为本发明提供的一个实施例,优选的,所述S045中,若更新点Pg与起始点Fp相同,则返回形成的封闭矩形Rec;
否则,将更新点Pg添加至封闭矩形Rec的点集合中。
实施例二:
在CAD图纸中,利用右手定则与匹配算法来进行图形重合判定的原理,在建筑图中判断墙体上方是否有梁存在,扣减墙体高度,进行工程量提取。
如图1所示,处理CAD图形中不能形成面域的矩形是否重合的问题:
S11:在CAD中对多段线pl1、多段线pl2进行面域化操作;
S12:若多段线pl1、多段线pl2面域化失败,则进行步骤S1-S3;若多段线pl1、多段线pl2面域化成功,则进行S13;
S13:对多段线pl1、多段线pl2纸箱布尔操作剪切,获得公共面积Area;
S14:若
或
则多段线pl1、多段线pl2重合,否则不重合。
作为本发明提供的再一个实施例,优选的,所述的方法用于建筑中判断墙体上方是否有梁,判断墙体上方是否有梁时,多段线1为墙体,多段线2为梁,若多段线1、多段线2重合,则墙体上部有梁,如图6所示,判定为多段线1、多段线2重合,如图7所示的多段线1、多段线2不重合,即多段线1、多段线2重合,判定的就是墙体上部有梁。
用于CAD中无法面域化的多段线重合判定方法,在初始化方向时,需要根据初始点与方向单位向量形成的点是否在矩形内,判定方向向量是否正确;后续则根据右手定则进行方向向量轮换查找符合要求的点集合;在点集合中需要根据距离去判定最近点,以找出正确的点,使得图纸上的矩形处理更加灵活,适应范围更广,而且准确度提高。也一定程度上提升了用户的体验感。
在本说明书的描述中,参考术语“一个实施例”、“示例”、“具体示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
以上公开的本发明优选实施例只是用于帮助阐述本发明。优选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本说明书的内容,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本发明的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本发明。本发明仅受权利要求书及其全部范围和等效物的限制。