资源预览内容
第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
亲,该文档总共4页全部预览完了,如果喜欢就下载吧!
资源描述
浅谈批量 CAD 图形文件自动修改的实现方法黄晓计(广西第一测绘院,广西 南宁 530023)摘要 在大比例尺地形图、地籍图生产制作过程中,制作标准分幅图是一个必需的工作环节,而对标准分幅图进行图廓整饰是一个批量处理的过程。文章结合工作实例简单介绍以南方软件为基础,利用 CAD二次开发语言 AutoLISP,并结合脚本文件实现批量标准 1:500 地形、地籍分幅图的图幅名称、图号注记的修 改方法。关键词 标准分幅图;AutoLISP 语言;脚本;批量处理南方 CASS 软件是南方测绘公司基于 AutoCAD 平台上进行开发的软件,是测绘行业常用的绘图软件。在 地形图、地籍图生产制作过程中,制作标准地形、地籍分幅图是一个必不可少的工作环节。南方 CASS 软件具有较强的地形、地籍图绘制功能和批量标准分幅制作的功 能。笔者结合工作实例简单介绍利用 CAD 二次开发语言 AutoLISP 和脚本文件相结合实现批量 1:500 标准地 形、地籍分幅图的图幅名称、图幅号注记的自动修改方 法。容,编写 g_tfmc.lsp、du_nextname.lsp、f_close.lsp 程序文件和图形批处理.scr 脚本文件;第三个组成部分的任务 是执行图形批处理.scr 脚本文件。整个程序设计结构如 图 1 所示。(1) 第一部分编写 du_tm.lsp 文件,定义了两个函 数,即 texver 函数和 C:du_tm 函数。texver 函数的功能是 获取每个标准分幅内图框的 4 个角点坐标。源代码如 下:(defun texver (a / bb n i)(setq bb (entget a) n (length bb) i 0 po () (while ( i n) (setq b (nth i bb)(if (= (car b) 10) (setq po (cons (cdr b) po) (setq i(1+ i)C:du_tm 的功能是在图幅接合表中根据每个标准 分幅内图框的 4 个角点坐标逐个获取图幅号、图名信 息,生成图幅信息.txt 文本文件。源代码如下:(DEFUN C:du_tm(/ FNAME SS1 II ENAME po S2 wbth s3 tm )(setq FNAME (open d:/ 图幅信息.txt w)(setq ss1 (ssget (8 . tk)(0 . LWPOLYLINE) (if ss1 (progn (setq ii 0) (while ( y 2000000.0) (setq fth (strcat(substr (rtos (/ (- y 2000000) 1000) 2 2)2) - (substr (rtos (/ x 1000) 2 2) 2)(setq fth (strcat (substr (rtos (/ y(setq s2 (ssget wp po (8 . tk)(0 . TEXT)(if (/= s2 nil) (progn(setq wb (cdr (assoc 1 (entget (SSNAME S2 0) (setq th (strcat (substr wb 2 6)(substr wb 10 5) ) ) (setq s3 (ssget wp po (8 . tuming)(0 . TEXT) (if (= s3 nil) (setq tm th)(if (/= s3 nil) (setq tm (cdr (assoc 1 (entget (ssname s30)(setq str (strcat th , tm ) (write- line str fNAME) (setq ii (+ ii 1) (CLOSE fNAME)(2) 第二部分由 3 个 lsp 文件和一个脚本文件组成。g_tfmc.lsp 文件包括一个主程序和一个子程序,子 程序中定义了一个 read_tfmc 函数,函数可实现的功能 是读入图幅信息 .txt,获得当前图形的图幅名称 。 read_tfmc 函数代码如下:(defun read_tfmc (tfh / f waa)(setq f (open d:/ 图幅信息.txt r) (while waa (progn(if (= (substr waa 1 11) tfh) (setq tm (substr waa 13) waa nil)(setq waa (read- line f) ) (close f) )主程序定义了一个 C:G_tfmc 函数,函数可实现的功 能是根据当前图形的坐标,计算当前图形的图幅号,通1000) 2 2) 2) - (substr (rtos (/ x 1000) 2 2) 2) (read_tfmc fth)(if ( (atof tm) 0.1) (setq tm ) (setq tm tm)(setq p3 (list (+ x 140) (+ y 266) p4 (list (+ x 113) (+ y263)(setq s1 (ssget _C p3 p4 (8 . tk) (0 . text) (if s1 (progn (setq en1 (entget (ssname s1 0)(setq en1 (subst (cons 1 tm) (assoc 1 en1) en1)(entmod en1) )(setq p5 (list (+ x 135) (+ y 260) p6 (list (+ x 115) (+ y258)(setq s5 (ssget _C p5 p6 (8 . tk) (0 . text) (if s5 (progn (setq en5 (entget (ssname s5 0)(setq en5 (subst (cons 1 fth) (assoc 1 en5) en5) (entmod en5) ) )du_nextname.lsp 文件只有一个 C:dU_nextname 函数, 函数可实现的功能是读取当前工作目录中所有的dwg 文件,查找相对当前已打开的图形文件的下一个图 形文件的名称, 在当前工作目录中制作一个文件名为 iopen.scr 的脚本文件,脚本文件内容为用“open”命令打 开下一个图形文件,用“script”命令执行图形批处理.scr 文件内容。编写文件名为 iopen.scr 的脚本文件是整个图 2 原始图件样图图 3 批处理后的图件样图批处理过程的关键所在,需要在 iopen.scr 中用“open”命令打开下一个图形文件。因为 AutoCAD 二次开发中定制的open 函数是用来读文件的,不能当成 AutoCAD 内置命令函 数 open 来打开一个图形文件。要用“open”命令打开一个图 形文件只能在脚本文件中以向命令行中输入命令的形式打开,而用“script”命令执行图形批处理.scr 文件内容可以实 现。C:dU_nextname 函数代码如下:(defun C:dU_nextname (/ ss pt x y j0 tm)(setq path (getvar dwgprefix) DWG_NAME (getvar dwgNAME)(setq aadwgn (vl- directory- files path)(setq ii 0 idwgn () ) (repeat (length aadwgn) (setq adwgna (nth ii aadwgn)(if (= .dwg (vl- filename- extension adwgna)(setq idwgn (cons adwgna idwgn) (setq ii (+ ii 1) ) (SETQ idwgn (REVERSE idwgn) (SETQ N 0 M 0) (repeat (length idwgn) (SETQ AAA (NTH N idwgn) (IF (= AAA DWG_NAME) (setq m (+ n 1)(IF (= M (length idwgn)(command ._vbastmt Thisdrawing.close true ) (setq n (+ n 1)C:f_close 文件定义一个 C:f_close 函数,函数功能是关闭上一个图形文件,只保留当 前图形窗口。 C:f_close 函数代码如下:(Defun C:f_close(/ ACADOB
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号