比较2个图形的所有系统变量,找到不同的值。 我们在使用编程时,自己的图形没任何问题,可在别人的图中使用时就用会遇到好多莫名奇妙的问题,不知那里出错了。 我编的程序,从2个图的系统变量入手,找到不同值,有益于分析原因。 系统变量的基本参数文件.txt 中共有382个系统变量,当然您还可以再往里加入新的变量(具体操作见文件内的说明)。 分两部: 第一步,JLxitong.LSP 根据所选的同一个“系统变量的基本参数文件.txt”,分别建立两个要比较的系统变量文件; 第二步,bijiao.LS P根据两个系统变量文件进行比较,并把结果存入新文件中。 当然每个系统变量代表的含义,还需要您自己查参考书。 JLxitong.LSP: ;;;;;;;;;;;在AutoCAD 2004 版以上版本运行 ;;;功能:取出CAD图中的所有系统变量 (Defun C:JLxitong (/ dir f name fname textal fnn fn a1www cmd88 fila fnnn aw11) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;来源dwj88.lsp (setq dir (getvar "dwgprefix")) ;(setq cmd (getvar "cmdecho")) (setvar "cmdecho" 0) (setq f (getfiled "选择一个系统变量的基本参数文件" "E:\\cadaa\\cx\\" "" 8));系统变量的基本参数文件.txt (setq f(findfile f)) ;; (while (or (= (setq name (getstring "请输入新生成的系统变量文件名<自动加上后缀.txt>:")) "") (findfile (strcat name ".txt")) ) ) (setq fname (strcat dir name ".txt")) (setq textal(strcat "您准备生成一个文件作为系统变量数据文件: " fname "\n" "\n" "文件中每行加入了括号()" )) (Alert textal) ;; (SetQ aw11 0) (SetQ fn (Open f "r") ) (SetQ fnn (Open fname "w") ) (while (/= (SetQ a1www (Read-Line fn)) !END ) ;(SetQ a1www (Read-Line faa)) (if (and (/= a1www "") (/= a1www " ")) (progn (if (or (and (>= (vl-string-elt a1www 0) (ascii "A") ) (<= (vl-string-elt a1www 0) (ascii "Z") ) ) (and (>= (vl-string-elt a1www 0) (ascii "a") ) (<= (vl-string-elt a1www 0) (ascii "z") ) ) );end or (progn (setq a1www(vl-string-right-trim " " a1www)) (setq cmd88 (getvar a1www)) (setq cmd88 (vl-princ-to-string cmd88)) (setq fila (strcat "(" a1www " " cmd88 ")" ) ) (SetQ fnnn (write-line fila fnn )) ; (SetQ aw11 (+ aw11 1)) );end progn ) ;end if );end progn ) ;end if );end while (Close fn) (Close fnn) (setq aw11 (itoa aw11)) (setq textal(strcat "您参照的系统变量的基本参数文件: " "\n" f "\n" "\n" "您已经生成一个文件作为系统变量数据文件: " "\n" fname "\n" "(文件中每行加入了括号,每行一个系统变量)" "\n" "\n" "由JLxitong.lsp程序建立的文件"name"中共有: " aw11 " 个系统变量" )) (Alert textal) (princ "\n END JLxitong.lsp" ) (princ "\n ") );end bijiao.LSP: ;;;;;;;;;;;在autocad 2004 版以上版本运行 ;;功能:比较2个系统变量文件,这2个系统变量文件,必须由同一个系统变量的基本参数文件生成的。 (Defun C:biJiao (/ dir f ff name fname textal fnn fn ffn a1www cmd88 fila fnnn a1w a1w1 a2w a2w2 ss1 s001 sss1 sssaa1 ss2 s002 sss2 sssaa2 a1waa aw11 ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;来源dwj88.lsp (setq dir (getvar "dwgprefix")) ;(setq cmd (getvar "cmdecho")) (setvar "cmdecho" 0) (setq f (getfiled "选择第一个文件(由JLxitong.lsp程序生成的文件)" "" "" 8)) (setq f(findfile f)) (setq fn (open f "r")) (setq ff (getfiled (strcat "您选择第一个文件是" f " " "请选择第二个文件:" ) f "" 8)) (setq ff(findfile ff)) (setq ffn (open ff "r")) ;; (while (or (= (setq name (getstring "请输入比较系统变量文件后,所得结果的文件名<自动加上后缀.txt>:")) "") (findfile (strcat name ".txt")) ) ) (setq fname (strcat dir name ".txt")) (setq textal(strcat "您已经选好一个文件作为系统变量数据文件: " fname "\n" "\n" "文件中每行加入了括号()" )) (Alert textal) ;; (SetQ aw11 0) (SetQ fnn (Open fname "w") )
(setq fila "下面是两个文件中不一样的系统变量值" ) (SetQ fnnn (write-line fila fnn )) ; (setq fila (strcat f "系统变量值:" " " ff "系统变量值:" ) ) (SetQ fnnn (write-line fila fnn )) ; (setq fila " ") (SetQ fnnn (write-line fila fnn )) ; (SetQ fnnn (write-line fila fnn )) ; ;(setq fila (strcat "(" a1www " " cmd88 ")" ) ) ;(SetQ fnnn (write-line fila fnn )) ; (while (progn(SetQ a1w1 (Read-Line fn)) (and (/= a1w1 nil) (/= a1w1 "")(/= a1w1 " ") ) ) ;(SetQ a1w1 (Read-Line fn)) (SetQ a2w2 (Read-Line ffn)) (setq a1w(vl-string->list a1w1)) (setq a2w(vl-string->list a2w2)) ;;; (progn (setq ss1(length a1w)) (setq s001 0 ) (setq sss1 0 ) (repeat ss1 (setq sss01 (nth s001 a1w)) (setq sss1 (+ sss1 sss01)) (setq s001 (+ s001 1) ) ) (setq sssaa1 sss1) );end progn (progn (setq ss2(length a2w)) (setq s002 0 ) (setq sss2 0 ) (repeat ss2 (setq sss02 (nth s002 a2w)) (setq sss2 (+ sss2 sss02)) (setq s002 (+ s002 1) ) ) (setq sssaa2 sss2) );end progn ;;; (if (/= sssaa1 sssaa2 ) (progn (cond ((>= (length a1w) 40) (progn (setq fila (strcat a1w1 " " a2w2 ) ) (SetQ fnnn (write-line fila fnn )) ; );enf progn ) ((< (length a1w) 40) (progn (setq a1waa (substr " " (+ (length a1w) 1) (- 40 (length a1w)) )) (setq fila (strcat a1w1 a1waa a2w2 ) ) (SetQ fnnn (write-line fila fnn )) ; );enf progn ) );end cond (SetQ aw11 (+ aw11 1)) );end progn );enf if );end while (Close fn)(Close ffn)(Close fnn) (setq aw11 (itoa aw11)) (setq textal(strcat "您选择的第一个文件是: " "\n" f "\n" "您选择的第二个文件是:" "\n" ff "\n" "\n" "您已经生成一个文件作为系统变量数据文件经比较后所得到的信息文件: " "\n" fname "\n" "(每行一个系统变量)" "\n" "\n" "由biJiao.lsp程序建立的文件"name"中共有: " aw11 " 个系统变量不同" )) (Alert textal) (princ "\n END biJiao.lsp" ) (princ "\n ") );end |