测量点的分类及展绘在AutoCAD软件中的实现原理

发表时间:2021/6/15   来源:《基层建设》2021年第6期   作者:杨建文 梁琼
[导读] 摘要:测量点在CASS软件中的展绘似乎是很简单的一个命令就能完成,但是对于AutoCAD软件的系统内部来说,其实是由一些预先编辑好的程序语言来实现的。
        云南玉溪宇晟测绘有限公司  云南玉溪  653100
        摘要:测量点在CASS软件中的展绘似乎是很简单的一个命令就能完成,但是对于AutoCAD软件的系统内部来说,其实是由一些预先编辑好的程序语言来实现的。点的分类有地形地貌点、界址点、高程点、独立地物点等。点的类型和大小的设置。点的分类和展绘的实现主要是依靠Auto lisp程序函数的编译来完成。我们应该了解一下最基本的程序编译知识和AutoCAD软件的二次开发。
        关键词:测量点;展点绘图;计算机的自动化实现功能;程序语言;AutoCAD软件;点的类型和大小;Auto lisp语句;二次开发
        1 引言
        在测量工作中,我们通过辛苦的外业工作得到了“几个”数字,接下来的步骤就是展点绘图。测量点的展绘有很多种方法,手绘、机绘、摄影扫描、计算机辅助制图等,它们各有优点与缺点,现在比较通用的就是南方CASS软件,我们将外业采集回来的数据文件直接导入其中,便可以展绘出点号、点位、高程。
        随着测绘技术的发展,我们越来越依赖于计算机的自动化实现功能,比如现在逐渐兴起的无人机摄影测量技术,其可以直接采集测区地表的数据,经过相关软件处理建模之后,就能生成测区的正射与倾斜影像,然后将该影像导入EPS软件中,我们直接用鼠标点击需要采集数据的地方,坐标、高程便自动出现了,在建立相应的地理模型之后,等高线也能自动生成,然后经过图形处理整饰之后,便可以用打印机打印出成果图了。
        从表面上看,测量点在CASS软件中的展绘似乎是很简单的一个命令就能完成,但是对于AutoCAD软件的系统内部来说,其实是由一些预先编辑好的程序语言来实现的,其中凝聚了许多编程人员的心血。因此,我们有必要来讨论一下在AutoCAD软件中各种测量点的分类及展绘的实现原理和方法。
        2 点的分类原则
        2.1 在地形图中,有许多用来作为表示地形、地貌、地物、特殊要求等的单一点,它们的实现相对来说简单一些,就是在手绘中也并不算太难。这一类点在AutoCAD软件中可以通过好几种方法来绘制,如:直接在绘图窗口中用鼠标来点击;从Command中输入Point命令及坐标;或者从Draw的工具栏、下拉菜单选择Point命令来画点。
        2.2 其次,有一些点是用来表示地形起伏、地貌变化、特定表示等,这些点常常要加上高程注记和坐标,就是我们所说的高程点。在图纸上我们要用特殊符号来表示,以示区别。这些点在展绘时,需要在适当的位置加注高程,也就涉及到了绘制特殊符号的问题,而用AutoCAD软件的特殊符号库及图形绘制功能即可实现。
        2.3宗地界址点在宗地图的绘制中是十分重要的,它主要的功能就是划清各宗地的界线,从某种意义上来说是具有法律效力的,所以它的绘制是很重要的。在绘图中它的用途基本上是为了构成宗地界线,因此,这些点需要加上适当的点号注记。
        2.4当我们绘制一些平面的时候,也需要加一些点来表示高程的变化情况。特别是在完成一些重要的工程测量任务时,更应当注意。在用AutoCAD软件绘图时,除了要加一些符号标志外,也还要有点名注记等,同时注意有适当的注记密度。
        2.5还有独立地物,虽然它们均系实地上的较小物体,但一般都是具有突出高大、目标明显的共同点,如:工厂烟囱、古塔、亭、塔形建筑物、独立树等,均是重要的方位标志物。因此,在绘制地形图时要详细明确地表示。在AutoCAD软件制图中要绘制一些特殊符号来作标记。
        3 测量点展绘的实现
        3.1点的类型和大小的设置
        从format下拉菜单中选择Point Style选项会弹出Point Style对话框,从中选择点的类型和大小后关闭对话框,点的类型和大小设置完毕。通过以上步骤,我们用直接或手工的方法完成了需要的图层、字体和点样式的设定。现在就可应用展点程序zd了。其命令序列及说明如下:Command:zd
        用键盘输入(y,x)或用鼠标从屏幕上指定点:从屏幕上指定一点并输其高程
        输入该点的高程:1236.33
        用键盘输入(y,x)或用鼠标从屏幕上指定点:从屏幕上又指定一点并输其高程
        输入该点的高程:1272.52
        用键盘输入(y,x)或用鼠标从屏幕上指定点:从屏幕上又指定一点并输其高程
        输入该点的高程:1253.31
        用键盘输入(y,x)或用鼠标从屏幕上指定点:空响应结束
        3.2调用point命令展点
        在命令行下,执行point命令的命令序列为:Command:point
        Current  point  modes:PDMODE=33  PDSIZE=0.3000
        Specify  a  point:
        即要求输入一个点的坐标或从屏幕上指定点的位置。
        如果希望用Auto lisp语句来实现已经取得值的点p的展点,
        则可用类似下面的例子来实现:
        (setq  p(list 165.223  210.552  1895.225))
        (command “._pline”)
        3.3 getpoint
        一般形式:(getpoint [pt][msg]),本函数暂停程序执行,等待用户用键盘输入或屏幕图形区域指定一个点。Mag为在等待输入时设定的提示信息,可以是任意字符串,包括汉字。[pt]参数为一个三维点表,如果提供了该参数,执行此句时,在该点和当前鼠标之间就会出现橡皮线条,而且随光标移动也不断变化,为某些输入点的位置起到直观的提示作用。当用键盘输入点的坐标可以输入(x y),也可以输入(x y z),其输入格式为“x,y”或“x,y,z”。用键盘输入一个数,回车也能接受,但其提供的三维坐标是毫无意义的。当从屏幕上指定点,除非使用精确定点能获得点的z坐标外,一般只能获得平面坐标。不论使用何种方法,输入点的最后返回形式为(x y z),如果没有输入z值,系统自动用系统变量elevation的值代替,由于elevation的默认值为0,因此在大多数情况下不输入z时其z就等于零,但这不表示不输入z就一定等于零。
        本函数和initget函数配合使用时只能接受的位置为1(不能空输入)和8(不检查绘图界限)。

例如:(setq  pt(154  207  0))
        (setq  x(getpoint  pt“输入点:”))
        本命令接受屏幕上指定或键盘输入点,也可直接回车。若执行它:
        输入点:178,202                 输入x,y回车
        (178.0  202.0  888.0)       x,y和elevation的值组成三维点表
        再执行它:
        输入点:(159.948  211.513  888.0)获得三维点表
        *除此之外还可键入a、b、c、yes、no、y(=yes)、n(=no)的输入,这时的x得到的就是由关键词组成的字符了。
        4 程序设计实例
        4.1 设计的目标
        在测量工作中,已知点的平面坐标(x,y)和点的高程H,需要将点位展绘到图上,并在适当位置注记其高程。假设设计要求,在屏幕或键盘上每输完一个点的坐标和高程,就能立即在图形中自动展绘其点位,同时在点位的水平方向左移1.2,垂直方向下移1.0的地方作为高程注记的起点,字体高度要求为2.4。
        4.2 附加条件或要求
        所展点和注记均在“GCD”图层,层的颜色设定为红色,字体要求为等线体,点位为0.3大小的小圆点。
        展一般高程点,循环展点
        (defun c:zd/ynn yn h p)
        (setvar "dimzin"0);零抑制 否则rots精度可能失败
        (vl-load-com);加载适用的值给yun
        (while ynn;如果ynn为真值ynn=1 则进行下面的循环
        (setq yn(getpoint"\n请用键盘输入(y,x)或用鼠标从屏幕上指定点:“))
        ;输入点的坐标并赋值给yn
        (if(=yn nil);条件判断开始 如果yn=nil 则执行第一部分,否则执行第二部分
        ;第一部分
        (progn(setq  ynn nil));将nil赋值给yn
        ;第二部分
        (progn
        (initget1);限制get类函数的输入方式,为1则禁止空格输入(setq h(getr“\n请输入该点高程:”))从键盘得到一个实数并赋给h
        (setq p(list(nth 0 yu)h));构成一个点表并赋值给p
        (zhangaochengdian p);调用自定义的函数)
        );条件结束括号
        );循环结束括号
        (print);输出一个空格符
        );结束本函数
        ;根据(x,y,h)展点注记高程同时赋予属性x,y,h为CAD坐标
        (defun zhangaocheng(p/ve kh hh p2)
        (command".point"p);用命令point展p点
        (setq ve(vlax-ename->vla-object(entlastentlast)));将最后的一个绘制对象实体转换为vla对象,同时赋值给ve
        (vlax-put ve"layer""高程注记
        (vlac-put ve"color"256)
        (setq h 2.4)
        (setq hh(rtos(nth 2 p)2 2);将要注记的高程以十进制的方式保留两位小数,并转换为字符赋值给hh
        (setq p2(list(+(nth 0 p)1.2)(_(nth 1 p)1.0)));计算文字注记起点并赋值给P2点
        (setq ve(vlax-ename->vla-object(entlastentlast)));
        (command".text"s""hz",p2 h 0 hh)
        (valx-put ve "layer""高程注记")
        valx-put ve "color"256)
        (print))
        5 总结
        在AutoCAD软件中,各种点的分类和展绘的实现主要是依靠Auto lisp程序函数的编译来完成,其功能强大,为了使测量的内业工作能轻松一些,就需要我们开动脑筋,学习一些Auto lisp的编译知识,充分地发掘AutoCAD软件的更深层次的功能,做好其的二次开发,完成一些小插件的制作,以此来节约我们的工作时间和减少人工操作的错误,虽然CASS软件已经为我们提供了很多的操作功能,但了解一下最基本的程序编译知识和AutoCAD软件的二次开发,还是很有必要的,亦可检查CASS软件的完整与否,不至于程序出错了还不知道。
        用Autolisp的特点:程序函数组成,函数由defun开始;每个函数均为一个表的形式;为增加程序的可读性,可以在程序任何位置加入注释;Autolisp与VB、VC++等程序语言在表达书写、函数调用上有很大的区别;Autolisp程序可以直接执行,也可以编译后运行。
投稿 打印文章 转寄朋友 留言编辑 收藏文章
  期刊推荐
1/1
转寄给朋友
朋友的昵称:
朋友的邮件地址:
您的昵称:
您的邮件地址:
邮件主题:
推荐理由:

写信给编辑
标题:
内容:
您的昵称:
您的邮件地址: