一种基于CAD地形图快速绘制剖面图的方法与流程

文档序号:16323437发布日期:2018-12-19 05:48阅读:1474来源:国知局
一种基于CAD地形图快速绘制剖面图的方法与流程

本发明涉及工程绘图领域,特别是一种可快速获取剖面线与一系列等高线的交点及高程,并快速生成剖面图的一种基于cad地形图快速绘制剖面图的方法。

背景技术

地形图指的是地表起伏形态和地理位置、形状在水平面上的投影图。具体来讲,将地面上的地物和地貌按水平投影的方法(沿铅垂线方向投影到水平面上),并按一定的比例尺缩绘到图纸上,这种图称为地形图。在地形图上绘制一条剖面线,绘制出该剖面线与所相交的等高线的正投影所得到的图形为剖面图。

剖面图在水工环地质、公路市政工程、铁路、煤矿地质类工程设计报告编制中有广泛的应用,以及在已勘查的矿床中,当矿体被一系列断面(剖面)横切为若干块段,然后以这些剖面图为基础可以估算相邻两断面间的矿块储量以及整个矿床的储量,由此可见,剖面图在多个行业领域都有着重要的应用。

工程技术人员在绘制剖面图时需要逐个量算剖面线与等高线的交点距离及高程,然后展绘在图纸上,在绘制过程中,工作繁琐且工作量大,大量的占用技术人员的工作时间,效率极低,且繁多的工作量难以保证绘制结果的准确性。



技术实现要素:

有鉴于此,本发明的目的在于克服现有技术的不足,提供一种可快速获取剖面线与一系列等高线的交点及高程,快速生成剖面图的一种基于cad地形图快速绘制剖面图的方法。

本发明解决其技术问题所采用技术方案是:包括以下步骤:

步骤1:绘制一条剖面线。将需要绘制剖面图的cad地形图文件在cad打开,在cad地形图上需要绘制剖面图的位置绘制一条剖面线,将该剖面线的高程或z值设置为0;

步骤2:判断剖面线的类型。所述的剖面线的类型包括直线和多段线。

若剖面线为直线,记录剖面线的起点坐标和终点坐标;

若剖面线为多段线,则记录剖面线的起点坐标、拐点坐标、终点坐标。

步骤3:建立一个等高线的选择集并进行交点采集与排序。根据剖面线的起点坐标、拐点坐标、终点坐标,首先创建一个选择集,选择集里包括与剖面线相交的所有等高线,然后对选择集中的每一条等高线与剖面线进行交点的采集并排序。

步骤4:求取剖面线与各等高线交点的坐标、高程及绘制剖面图。求取剖面线与各等高线第i交点的坐标和高程,将第i交点的坐标和高程记录在一个数组中,根据数组中的数据绘制成剖面图。

进一步的,为更好地实现本发明,特别采用下述设置结构:在步骤2中通过name属性读取剖面线的名称来识别剖面线的类型。

进一步的,为更好地实现本发明,特别采用下述设置结构:在所述的步骤2中,

若剖面线为直线,则读取这条直线的起点坐标和终点坐标,记为(x1,y1),(x2,y2);

若剖面线多段线,则通过coordinates属性获取多段线的起点坐标、拐点坐标、终点坐标,并记录下来,起点坐标为(x1,y1),终点坐标为(xn,yn),拐点自左边为(x2,y2)…(xn-1,yn-1),程序在读取多段线的起点、拐点和终点坐标时会默认按照多段线各点的绘制顺序读取,从而会连续的按顺序将起点、拐点、终点坐标记录到数组中。

进一步的,为更好地实现本发明,特别采用下述设置结构:在步骤3中,

首先,根据剖面线为直线时的起点坐标、终点坐标,或者剖面线为多段线时的起点坐标、拐点坐标、终点坐标获取剖面线所占位置的x区域和y区域的极值,分别为xmin,ymin,xmax,ymax;

然后,绘制一个左下角坐标为(xmin,ymin),右上角坐标为(xmax,ymax)的矩形框;

最后:通过selectbypolygon方法将位于该矩形框内及穿过该矩形框的所有等高线定义一个新的选择集。

进一步的,为更好地实现本发明,特别采用下述设置结构:在步骤3中,

若剖面线为直线,通过count属性读取选择集中的项数,然后遍历选择集中的每个对象,求得每个对象与剖面线的交点;

若剖面线为多段线,通过count属性读取选择集中的项数,然后遍历选择集中的每个对象,多段线按照起点、拐点、终点的顺序,每相邻两点作为一条线段,依次与选择集中的每个对象求取交点。

进一步的,为更好地实现本发明,特别采用下述设置结构:在步骤3中,

若剖面线为直线则进行以下步骤:

步骤3.1:读取选择集中的第一个对象,并将该对象的高程值或z值记录在变量h中;

步骤3.2:将选择集中的第一个对象的高程值或z值设置为0,以此保证等高线和剖面线同时置于xoy平面内;

步骤3.3:使用intersectwith方法求取选择集中对象与剖面线的交点值,并将交点坐标记录在第一数组中,此时便得到了交点的(x,y)坐标,除一条等高线与剖面线有一个交点的情况外,一条等高线与剖面线还会有两个或多个交点的情况,intersectwith方法获取交点时会将等高线与剖面线有两个或多个交点的情况会依次记录在第一数组中;

步骤3.4:第一数组中所有交点的z值设置为h,该h即为步骤3.2中所述的选择集中对象的高程;

步骤3.5:将选择集中对象的高程值或z值重新设置为h;

步骤3.6:识别该对象与剖面线交点的个数,并将第一数组中所有的交点的x、y、z值记录在一个新的二维数组scj(a,b)中,数组scj(a,b)中的a维数为3,即分别代表x、y、z值,b的维数随着交点个数的增加而增加,即代表剖面线与选择集中对象所有交点的个数;

步骤3.7:将第一数组清空;

步骤3.8:返回步骤3.1,获取选择集中下一个对象与剖面线的交点。

步骤3.9:选择集中所有的对象遍历完毕后,即求得了与剖面线相交的所有等高线或者有高程对象的交点,将所有交点的x、y、z值记录在scj(a,b)中;

若剖面线为多段线,根据前述由coordinates属性获取多段线有n个坐标,则可知多段线是有n-1个线段组成,将起点、拐点、终点,依次连成直线,将每条直线依次执行步骤3.1-步骤3.9,则可得到n-1个记录交点的数组,即scj1(a,b),scj2(a,b),……,scjn-1(a,b)。

进一步的,为更好地实现本发明,特别采用下述设置结构:在步骤3中通过以下步骤对采集的交点进行排序:

如果是直线:

比较剖面线的x1与x2的大小,或者y1与y2的大小,然后根据确定的方向对scj(a,b)中的交点进行排序,排序结束后则scj(a,b)中的交点即为沿剖面线方向的所有交点。

如果是多段线:

比较剖面线x1,x2,……,xn-1,xn或y1,y2,……,yn-1,yn每相邻两点横坐标或纵坐标的大小,考虑到多段线的绘制方向,则需自左向右的比较两相邻点的坐标大小,如果xk<xk+1,或yk<yk+1(k∈n,且1≤k≤n-1),则按照自左往右的顺序对对应scjk(a,b)中的交点进行排序(反之,则按照自右往左的顺序对对应scjk(a,b)中的交点进行排序),将n-1个数组全部排序结束后则scjk(a,b)中的交点即为沿剖面线(多段线)绘制方向的所有交点。

进一步的,为更好地实现本发明,特别采用下述设置结构:在步骤4中通过以下步骤求取剖面线上的第i点坐标和高程:

若剖面线为直线:

用两点间的距离公式求scj(a,b)中的交点与剖面线的(x1,y1)的距离(如果是从(x2,y2)端开始排序的,则下式中的x1与y1替换为x2与y2):

所述的scj(0,i)为scj(a,b)中第i个点的x坐标;

所述的scj(1,i)为scj(a,b)中第i个点的y坐标;

求得的di即为剖面线反应在xoy二维平面上第i个点的x坐标,对应当b=i时,scj(a,i)中的z值(即scj(2,i))为剖面线反应在xoy二维平面上的高程,即剖面线反应在xoy二维平面上的y坐标。

若剖面线为多段线:

用两点间的距离公式求第k条线段中scjk(a,b)中的交点与剖面线的(xk,yk)的距离:

所述的scjk(0,i)为scjk(a,b)中第i个点的x坐标;

所述的scjk(1,i)为scjk(a,b)中第i个点的y坐标;

求得的dki即为剖面线第k条线段反应在xoy二维平面上第i个点相对于xk的x坐标,对应当b=i时,scjk(a,i)中的z值(即scjk(2,i))为剖面线反应在xoy二维平面上的高程,即剖面线反应在xoy二维平面上的y坐标。

进一步的,为更好地实现本发明,特别采用下述设置结构:在步骤4中,

若剖面线为直线:

将权利要求8求取的di作为x坐标,将scj(2,i)作为y坐标记录在一个新的数组spm(a,b)中,数组spm(a,b)中a的维数为2,即代表剖面线反应在xoy二维平面上的x坐标和y坐标,b的维数等于交点的个数。

若剖面线为多段线:

对于第一条线段,与直线的方法相同,但从第k条线段起,需将dki加上前面所有线段的长度作为x坐标,对应将scjk(2,i)作为y坐标记录在已包含前面线段数据的数组spm(a,b)中,且,b的维数也应随着线段及交点的个数增加而增加。最终数组spm(a,b)中a的维数为2,即代表剖面线反应在xoy二维平面上的x坐标和y坐标,b的维数等于整条多段线交点的个数。

进一步的,为更好地实现本发明,特别采用下述设置结构:在步骤4中,根据数组spm(a,b)中的数据并结合需要的比例尺即可绘制出被剖面线所切的地形图的剖面图,然后稍加修饰即可得到完整的剖面图。

本发明的有益效果是:本发明的一种基于cad地形图快速绘制剖面图的方法,用户只需在具有等高线的地形图基础之上,自行绘制一条剖面线,通过上述步骤可快速获取剖面线与等高线的交点及高程,交点的个数可以达到无限个,进而可快速生成剖面线,不仅适用于cad地形图,该方法同样适用于所有软件的地形图之上,且适用于任何线型的等高线。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明的一种基于cad地形图快速绘制剖面图的方法的一种流程示意图。

图2是实施例1中剖面线为直线的情况下的地形图。

图3是实施例1中剖面线为直线时得到的剖面图。

图4是实施例2中剖面线为多段线的情况下的地形图。

图5是实施例2中剖面线为多段线时得到的剖面图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面将对本发明的技术方案进行详细的描述。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全面的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所得到的所有其它实施方式,都属于本发明所保护的范围。

本发明的一种基于cad地形图快速绘制剖面图的方法最常用的情况包括两种,即剖面线为直线和剖面线为多段线两种情况。在水工环地质、煤矿地质或在计算矿床储量时,通常使用直线作为剖面线进行剖面图的绘制;在公路、铁路、隧道等行业中,因道路曲折,故常用多段线作为剖面线进行剖面图的绘制。

现根据两种情况以具体实施例并结合附图的形式对本发明进行进一步详细的描述。

实施例1:

根据图1、图2,剖面线为直线时,基于cad地形图快速绘制剖面图的方法包括以下步骤:

步骤1:如图2所示,在cad地形图上需要绘制剖面图的位置绘制一条剖面线,该实施例绘制的剖面线为直线,然后,将剖面线的高程或z值设置为0;

步骤2:判断剖面线的类型。本次实施例绘制的剖面线为直线,故经判断剖面线的类型为直线,然后记录剖面线的起点坐标和终点坐标。

步骤3:建立一个等高线的选择集并进行交点采集与排序。根据剖面线的起点坐标、终点坐标,首先创建一个选择集,选择集里包括与剖面线相交的所有等高线,然后对选择集中的每一条等高线与剖面线进行交点的采集并排序。

步骤4:求取剖面线与各等高线交点的坐标、高程及绘制剖面图。求取剖面线与各等高线第i交点的坐标和高程,将第i交点的坐标和高程记录在一个数组中,根据数组中的数据绘制成剖面图。

以下详细介绍各个步骤的具体实现过程:

1、在步骤2中通过name属性读取剖面线的名称来识别剖面线的类型。该实施例中,根据name属性读取的剖面线的名称为“acdbline”,故经判断剖面线的类型为直线。

2、读取这条直线的起点坐标和终点坐标,记为(x1,y1),(x2,y2);

3、在步骤3中,通过以下步骤建立等高线的选择集:

首先,获取剖面线所占位置的x区域和y区域的极值,分别为xmin,ymin,xmax,ymax;本实施例中的xmin=x1,ymin=y1,xmax=x2,ymax=y2。

然后,绘制一个左下角坐标为(x1,y1),右上角坐标为(x2,y2)的矩形框;

最后:通过selectbypolygon方法将位于该矩形框内及穿过该矩形框的所有等高线定义一个新的选择集。

4、在步骤3中,通过count方法读取选择集中的项数,然后遍历选择集中的每个对象,求得每个对象与剖面线的交点;

5、在步骤3中,通过以下步骤对选择集中的所有等高线与剖面线的交点进行采集:

步骤3.1:读取选择集中的第一个对象,并将该对象的高程值或z值记录在变量h中;

步骤3.2:将选择集中的第一个对象的高程值或z值设置为0,以此保证等高线和剖面线同时置于xoy平面内;

步骤3.3:使用intersectwith方法求取选择集中对象与剖面线的交点值,并将交点坐标记录在第一数组中,此时便得到了交点的(x,y)坐标,除一条等高线与剖面线有一个交点的情况外,一条等高线与剖面线还会有两个或多个交点的情况,intersectwith方法获取交点时会将等高线与剖面线有两个或多个交点的情况会依次记录在第一数组中;

步骤3.4:第一数组中所有交点的z值设置为h,该h即为步骤3.2中所述的选择集中对象的高程;

步骤3.5:将选择集中对象的高程值或z值重新设置为h;

步骤3.6:识别该对象与剖面线交点的个数,并将第一数组中所有的交点的x、y、z值记录在一个新的二维数组scj(a,b)中,数组scj(a,b)中的a维数为3,即分别代表x、y、z值,b的维数随着交点个数的增加而增加,即代表剖面线与选择集中对象所有交点的个数;

步骤3.7:将第一数组清空;

步骤3.8:返回步骤3.1,获取选择集中下一个对象与剖面线的交点。

步骤3.9:选择集中所有的对象遍历完毕后,即求得了与剖面线相交的所有等高线或者有高程对象的交点,将所有交点的x、y、z值记录在scj(a,b)中;

6、在步骤3中,通过以下步骤对采集的交点进行排序。

比较剖面线的x1与x2的大小,或者y1与y2的大小,然后根据确定的方向对scj(a,b)中的交点进行排序,排序结束后则scj(a,b)中的交点即为沿剖面线方向的所有交点。

7、在步骤4中通过以下步骤求取剖面线上的第i点坐标和高程:

用两点间的距离公式求scj(a,b)中的交点与剖面线的(x1,y1)的距离(如果是从(x2,y2)端开始排序的,则下式中的x1与y1替换为x2与y2):

所述的scj(0,i)为scj(a,b)中第i个点的x坐标;

所述的scj(1,i)为scj(a,b)中第i个点的y坐标;

求得的di即为剖面线反应在xoy二维平面上第i个点的x坐标,对应当b=i时,scj(a,i)中的z值(即scj(2,i))为剖面线反应在xoy二维平面上的高程,即剖面线反应在xoy二维平面上的y坐标。

8、在步骤4中,将di作为x坐标,将scj(2,i)作为y坐标记录在一个新的数组spm(a,b)中,数组spm(a,b)中a的维数为2,即代表剖面线反应在xoy二维平面上的x坐标和y坐标,b的维数等于交点的个数。

9、最后,在步骤4中,根据数组spm(a,b)中的数据并结合需要的比例尺即可绘制出被剖面线所切的地形图的剖面图,然后稍加修饰即可得到完整的剖面图(见图3)。

实施例2:

根据图1、图4,剖面线为多段线时,基于cad地形图快速绘制剖面图的方法包括以下步骤:

步骤1:如图4所示,在cad地形图上需要绘制剖面图的位置绘制一条剖面线,该实施例绘制的剖面线为多段线,然后,将剖面线的高程或z值设置为0;

步骤2:判断剖面线的类型。本次实施例绘制的剖面线为多段线,故经判断剖面线的类型为多段线,然后记录剖面线的起点坐标、拐点坐标、终点坐标。

步骤3:建立一个等高线的选择集并进行交点采集与排序。根据剖面线的起点坐标、拐点坐标、终点坐标,首先创建一个选择集,选择集里包括与剖面线相交的所有等高线,然后对选择集中的每一条等高线与剖面线进行交点的采集并排序。

步骤4:求取剖面线与各等高线交点的坐标、高程及绘制剖面图。求取剖面线与各等高线第i交点的坐标和高程,将第i交点的坐标和高程记录在一个数组中,根据数组中的数据绘制成剖面图。

以下详细介绍各个步骤的具体实现过程:

1、在步骤2中通过name属性读取剖面线的名称来识别剖面线的类型。该实施例中,根据name属性读取的剖面线的名称为“acdbpolyline”,故经判断剖面线的类型为多段线。

2、通过coordinates属性获取多段线的起点坐标、拐点坐标、终点坐标,并记录下来,根据图4,该实施例多段线除起点和终点外还有2个拐点,则起点坐标为(x1,y1),终点坐标为(x4,y4),拐点自左边为(x2,y2)、(x3,y3),程序在读取多段线的起点、终点和拐点坐标时会默认按照多段线各点的绘制顺序读取,从而会连续的按顺序将起点、拐点、终点坐标记录到数组中,该实施例中坐标的记录顺序为(x1,y1)、(x2,y2)、(x3,y3)、(x4,y4)。

3、在步骤3中,通过以下步骤建立等高线的选择集:

首先,获取剖面线所占位置的x区域和y区域的极值,分别为xmin,ymin,xmax,ymax;本实施例中的xmin=x1,ymin=y1,xmax=x4,ymax=y2。

然后,绘制一个左下角坐标为(x1,y1),右上角坐标为(x4,y2)的矩形框;

最后:通过selectbypolygon方法将位于该矩形框内及穿过该矩形框的所有等高线定义一个新的选择集。

4、在步骤3中,通过count属性读取选择集中的项数,然后遍历选择集中的每个对象,多段线按照起点、拐点、终点的顺序,每相邻两点作为一条线段,本次实施例中剖面线由三条线段组成,分别为线段ab、线段bc,线段cd,按照线段ab、bc、cd的顺序依次与选择集中的每个对象求取交点;

5、在步骤3中,通过以下步骤对选择集中的所有等高线与剖面线的交点进行采集:

步骤3.1:读取选择集中的第一个对象,并将该对象的高程值或z值记录在变量h中;

步骤3.2:将选择集中的第一个对象的高程值或z值设置为0,以此保证等高线和剖面线同时置于xoy平面内;

步骤3.3:使用intersectwith方法求取选择集中对象与线段ab的交点值,并将交点坐标记录在第一数组中,此时便得到了交点的(x,y)坐标,除一条等高线与线段ab有一个交点的情况外,一条等高线与线段ab还会有两个或多个交点的情况,intersectwith方法获取交点时会将等高线与线段ab有两个或多个交点的情况会依次记录在第一数组中;

步骤3.4:第一数组中所有交点的z值设置为h,该h即为步骤3.2中所述的选择集中对象的高程;

步骤3.5:将选择集中对象的高程值或z值重新设置为h;

步骤3.6:识别该对象与线段ab交点的个数,并将第一数组中所有的交点的x、y、z值记录在一个新的二维数组scj(a,b)中,数组scj(a,b)中的a维数为3,即分别代表x、y、z值,b的维数随着交点个数的增加而增加,即代表剖面线与选择集中对象所有交点的个数;

步骤3.7:将第一数组清空;

步骤3.8:返回步骤3.1,获取选择集中下一个对象与线段ab的交点。

步骤3.9:选择集中所有的对象遍历完毕后,即求得了与线段ab相交的所有等高线或者有高程对象的交点,将所有交点的x、y、z值记录在scj1(a,b)中;

然后再返回步骤3.1,对选择集中的所有等高线与线段bc及线段cd的交点进行采集,结束后则可得到3个记录交点的数组,即scj1(a,b),scj2(a,b),scj3(a,b)。

6、在步骤3中,通过以下步骤对采集的交点进行排序。

比较剖面线x1,x2,……,xn-1,xn或y1,y2,……,yn-1,yn每相邻两点横坐标或纵坐标的大小,考虑到多段线的绘制方向,则需自左向右的比较两相邻点的坐标大小,如果xk<xk+1,或yk<yk+1(k∈n,且1≤k≤n-1),则按照自左往右的顺序对对应scjk(a,b)中的交点进行排序(反之,则按照自右往左的顺序对对应scjk(a,b)中的交点进行排序),将n-1个数组全部排序结束后则scjk(a,b)中的交点即为沿剖面线(多段线)绘制方向的所有交点。

本实施例中以比较x坐标为例,通过比较相邻两点的大小可知,x1<x2,x2>x3,x3<x4,则对于线段ab应按照自左往右的顺序对scj1(a,b)中的交点进行排序,对于线段bc应按照自右往左的顺序对scj2(a,b)中的交点进行排序,对于线段cd应按照自左往右的顺序对scj3(a,b)中的交点进行排序,将3个数组全部排序结束后,则scj1(a,b)、scj2(a,b)、scj3(a,b)中的交点即为多段线绘制方向即abcd方向的所有交点。

7、在步骤4中通过以下步骤求取剖面线上的第i点坐标和高程:

用两点间的距离公式求第k条线段中scjk(a,b)中的交点与剖面线的(xk,yk)的距离:

所述的scjk(0,i)为scjk(a,b)中第i个点的x坐标;

所述的scjk(1,i)为scjk(a,b)中第i个点的y坐标;

求得的dki即为剖面线第k条线段反应在xoy二维平面上第i个点相对于xk的x坐标,对应当b=i时,scjk(a,i)中的z值(即scjk(2,i))为剖面线反应在xoy二维平面上的高程,即剖面线反应在xoy二维平面上的y坐标。

8、在步骤4中,对于第一条线段(即线段ab),与直线的方法相同,对于第2条线段(即线段bc),需将d2i加上第一条线段(即线段ab)的长度作为x坐标,对应将scj2(2,i)作为y坐标记录在已包含前面线段(即线段ab)数据的数组spm(a,b)中,对于第三条线段(即线段cd),需将d3i加上第一条线段(即线段ab)和第二条线段(即线段bc)的长度的和作为x坐标,对应将scj2(2,i)作为y坐标记录在已包含前面线段(即线段ab和先点bc)数据的数组spm(a,b)中,且,b的维数也应随着线段及交点的个数增加而增加。最终数组spm(a,b)中a的维数为2,即代表剖面线反应在xoy二维平面上的x坐标和y坐标,b的维数等于整条多段线(即线段ab、线段bc、线段cd)交点的个数。

9、最后,在步骤4中,根据数组spm(a,b)中的数据并结合需要的比例尺即可绘制出被剖面线所切的地形图的剖面图,然后稍加修饰即可得到完整的剖面图(见图5)。

通过本发明的一种基于cad地形图快速绘制剖面图的方法,用户在具有等高线的地形图基础之上,由用户自行绘制一条剖面线,通过上述步骤可快速获取剖面线与等高线的交点即高程,交点的个数可以达到无限个,进而可快速生成剖面线。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1