Lisp应用于坐标标注中的若干问题解析

来源 :城市建设理论研究 | 被引量 : 0次 | 上传用户:gyl5667661
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:随着CAD的广泛应用,设计师们对CAD的要求也越来越高。通过二次开发工具Lisp语言能够很好地解决日常工作中的许多小型问题。坐标标注这一程序在设计过程中,要充分考虑到图层、捕捉、坐标取位精度和引线位置计算等方面的问题,切实做到程序正确实用、操作方便、不破坏原图的参数环境,使CAD不仅是绘图工具,同时也是得心应手的高效设计平台。
   关键词:图层捕捉控制取位精度引线方向加载
  
   Autocad软件应用已经在建筑设计、城市规划、工程制图、机械设计、电子电路等单位普及,它为我们的工作带来了很大的便利。随着工作的不断细化,广大设计师对CAD的要求也在不断地增强,有些工作中需要的功能,在CAD软件中并没有提供,需要通过二次开发的功能来实现。Autocad二次开发的主要工具有LISP、VB/VBA的Activex及C/C++的ObjectARX。LISP以其简单、易于掌握的特点深受设计师的喜爱。LISP语言是人工智能学科领域中广泛采用的一种程序设计符号语言,这种语言在参数化绘图中有很大的灵活性。LISP开发出的程序可以像运行CAD普通命令一样在命令行中直接键入自己定义的命令运行,保持了用户的绘图习惯。
   在设计中我们经常会遇到对图纸上的坐标进行标注的问题。对于市面上的专业软件如CASS软件、天正软件均具有该项功能,但对于广大设计师,他们使用的是普通CAD而非专业版的,并不具备这一功能,需要通过LISP语言进行二次开发来实现。一个好的LISP程序至少要保证三个条件:1、程序本身运行的正确性2、程序操作简单、界面清晰3、程序执行完后要还原所有改动过的CAD运行环境参数。因此在编写坐标标注这一程序时要考虑以下相关问题。
   一、图层控制
   程序执行所生成的坐标标注信息应该放在同一层内(如ZBBZ层),且不应破坏原有图层,这样便于对ZBBZ这一层进行开、关、冻结、删除等层控操制。
   首先用(setq old-layer (getvar "clayer"))命令将程序执行前的当前图层名提取出来存入old-layer这个变量。由于同一张图可能会分几个时间段进行标注,先判断ZBBZ图层是否存在,如果存在,将它设为当前层,如果不存在,则新建层名,确定层的颜色。
   (setq Labz (tblsearch "Layer" "ZBBZ"))
   (IF (=Labz nil)
   (progn (command "layer" "n" "ZBBZ" "" )
   (command "layer" "s" "ZBBZ" "c" "1" "" ""))
   (setvar "clayer" "ZBBZ"));;if结束
   在程序执行完退出之前,需要将程序执行前的图层进行还原
   (setvar "clayer" old-layer)
   二、标注的字体样式
   首先要清楚想要标注的字体样式如HZ、FS在windows系统的字库中是否存在(正常情况下都有),然后将当前字体样式名提取出来存入old-style这个变量,如果字体已加载到图形中,将其定为当前字体,如果字体未加载,则加载字体并确定字的宽度、倾斜角度等属性,最后在程序执行完退出之前将字体样式还原。
   (setq old-style (getvar "textstyle"))
   (setq newstyle (tblsearch "style" "hz"))
   (IF (= newstyle nil)
   (command "style" "hz" "rs,hztxt" "0.0" "0.8" "0" "n" "n" "n")
   (setvar "textstyle" "hz"))
   (setvar "textstyle" old-style);;还原字体
   三、捕捉控制
   在程序执行中,经常会遇到程序是正确的,但运行结果却不太符合自己的意愿,这其中一个主要原因是没有把对象捕捉关掉。坐标标注一般都需要捕捉到特征点上,要合理控制好捕捉的开与关才能达到想要的效果。CAD常用的捕捉及对应的位码设置有以下几种:
   0 NON(无) 1 END(端点) 2 MID(中点)
   4 CEN(圆心) 8 NOD(节点) 16 QUA(象限点)
   32 INT(交点)64 INS(插入点)128 PER(垂足)
   256 TAN(切点) 512 NEA(最近点) 1024 QUI(快速)
   通过位码值的累加可以实现多个对象捕捉的打开。
   首先要把程序执行前的捕捉模式提取出来,在捕捉的状态下点取需要标注的特征点,然后关闭对象捕捉,点取标注位置,进行标注引线及X、Y标注位置的计算,退出程序前将捕捉模式还原。
   (setq pzyms (getvar "osmode"));;提取捕捉模式
   (setvar "osmode" 0);;关闭捕捉
   (setvar "osmode" pzyms) ;;还原
   四、引线方向
   点取标注点和标注位置后,用(setq ang (angle 标注点标注位置))计算两点连线与横轴之间的夹角,当ang的值处于0~1.57(π/2)和4.71(3π/2)~6.28(2π)之间,从标注位置这个点向东水平画一段引线,否则向西水平画一段引线,引线的长短视所标注坐标的位数来确定,即读取坐标的字符数。根据引线和标注字的高度计算出X和Y标注时的起点位置。
  
  
   五、坐标取位精度并标注
   由于CAD显示坐标的位数的限制,造成直接读取出来的X、Y测量坐标小数位数不够或采用了科学计数法,一则精度达不到二则表现不直观,需要用RTOS函数进行小数位数的控制并将X、Y值转换成字符型,在图上进行标注。
   (setq 标注点 (getpoint " 点取标注点:"))
   (setq Y (car 標注点))
   (setq X (nth 1 标注点))(PRINC)
   (setq bzX(strcat "X=" (rtos X 2 3))) ;;取3位小数
   (setq bzY(strcat "Y=" (rtos Y 2 3)))
   (command "text" "s" "hz" "j" "c" X的起点标注位置 "1.5" "0" bzX)
   (command "text" "s" "hz" "j" "c" Y的起点标注位置 "1.5" "0" bzY)
   ;;在图上展标X、Y坐标值
  
   六、lisp程序加载
   假设坐标标注程序的文件名为“坐标标注.lsp”,程序名为“BZ”,存放在D盘根目录下。 Lisp程序加载一般有4种方式,主要采用第三种和第四种的加载方式。
   ⑴ 自动加载
   用记事本建立一个名为acad.lsp文件,放在CAD的安装目录下的support目录中,文件内容为(LOAD "d:/坐标标注")。设置好以后,当每次启动CAD时都会自动加载acad.lsp中定义的程序命令。由于目前一些CAD病毒是通过acad.lsp文件来进行传播的,对电脑的安全会产生危害,故不赞成采用这一加载方式。
   ⑵ 手工加載
   启动CAD,在command命令行内输入语句(load "d:/坐标标注"),即可将程序加载到CAD中。在使用时,只需在command命令行内输入程序名BZ即可。在不退出CAD运行平台的情况下,程序只需加载一次,BZ命令可以随时反复调用,就相当于运行CAD本身的命令一样方便,但缺点是需要知道文件名存放的目录,或将程序拷贝到CAD支持的搜索目录下。
   ⑶ 拖动加载
   用鼠标左键点击应用程序文件,按住鼠标不放,将文件直接拖放至AutoCAD绘图窗口后再松开鼠标,实现程序的加载。在不退出CAD运行平台的情况下,程序可反复调用。采用这种方式不受程序所存放的目录的限制,通过拖动能自动读取目录名,加载程序,比较实用可行。
   ⑷ 用菜单或工具条加载
   用记事本建立一个名为add.mns的菜单文件,与CAD菜单文件放在同一目录下,将程序拷入CAD支持的搜索目录下。
   菜单加载格式:
   ***MENUGROUP=用户菜单
   ***POP1
   [用户菜单]
   [坐标标注]^C^C(load "坐标标注");bz
   ……
   // [--]
  
  
   工具条加载格式:
   ***TOOLBARS
   **用户工具条
   ID__1_0 [_Toolbar("用户工具条", _Left, _Show, 1, 0, 1)]
   ID_UserButton_1 [_Button("坐标标注", "图标.bmp", "ICON_16_NEW")]
   ^C^C(load "坐标标注"); bz (接上行)
   ……
  
   // [--]
   在command命令行内输入menuload命令进行add.mns菜单的加载。
   这种方式适合于需要加载的应用程序较多,将它们放在同一个add.mns菜单中,进行一次性加载,方便实用。
   七、结束语
   Lisp语言具有坚固的理论基础,丰富的表达能力,较强的可塑性,但LISP程序的运行离不开CAD的平台,限制了它的应用。Lisp的交互运行方式非常适合于小型功能的开发。
   采用LISP语言编写出适合工作需要的工具,可以有效减轻设计人员的劳动强度,使autocad不仅仅是绘图工具,同时也是设计人员得心应手的高效设计平台。
  注:文章内所有公式及图表请用PDF形式查看。
其他文献
煤矿作为我国的主要能源,每年开采量都很大,但是由于煤矿安全预警系统的不完善或者性能不高等问题,每年因井下瓦斯爆炸等事故造成的人员伤亡很多,因此为了保障井下工作人员的生命
摘要:钢板及碳纤维增强塑料在混凝土结构加固中的应用是目前的热点。本文从应用材料、加固技术等角度,对国内混凝土结构加固修复现状作了回顾,并对钢板及碳纤维增强塑料复合加固的应用前景进行了展望。  关键词:钢板;碳纤维;复合加固    Present Status of Research and Application of Composite Rehabilitation with CFRP and
期刊
光载无线通信ROF(Radio-over-Fiber)系统是光纤通信和无线通信相结合的产物,它不但具有光纤通信大容量、抗干扰能力强等优点,还兼具了无线通信移动性、灵活性等优点,是未来宽
在数字化电力监测系统中,电力数据信息的传递必须遵循一定的通信规约。由于不同的终端设备生产厂家存在技术上和利益上的不同,通信规约的统一还将是一长期的过程。实现不同型
CDMA技术、多载波调制技术和MIMO技术是第四代移动通信系统中的几项关键技术,三者的结合能很大程度的提升系统性能,适合未来移动通信的需求。因而论文主要针对不同MIMO技术应用
在多媒体信息中,视频信息是一种比较特殊的媒体,数据量大,信息丰富。视频数据的表达、组织、存储和传输都有很大难度。帧间预测编码可以用来消除视频序列中大量的时间和空间冗余
当前,大多数码产品都包含图片浏览器,本文所设计的图片浏览器是基于S3C2440的GPS导航设备中的一个必要组成部分。本图片浏览器由三个模块组成:显示模块、操作模块、加载图片
GSM-R作为铁路专用的通信技术,正在世界铁路范围内得到越来越广泛的应用,推动着各国铁路行业的发展。发展GSM-R已经成为中国铁路的技术政策。初期分别在高原、重载运输线和繁忙
容量估算是移动通信系统无线网络规划中的关键技术之一。论文针对3G分组域,特别是HSDPA系统,提出了一种基于仿真的混合分组数据业务无线网络容量估算方法。 本文首先介绍了
摘要:本文将根据低应变反射波法测桩工作原理,结合某工程建设中的现场检测实例,对嵌岩桩的桩基低应变反射波法适用性进行探讨。  关键词:低应变反射波法原理、嵌岩桩、波形分析、完整性    1.引言  随着近几年基础建设的迅速发展,大直径嵌岩灌注桩因承载力高、施工噪声小等优点,而被广泛应用于高层建筑、桥梁基础等。它通常是由人工开挖或钻机成孔后在地下或水下灌注成桩。其质量受施工工艺、地层、尤其是混凝土灌注
期刊