[求助]奇怪.LSP程序有时能用,但提示intersect 所选对象太多
本帖最后由 作者 于 2008-11-23 14:43:34 编辑 <br /><br /> <p>做了个插入参照程序,一般情况运行正常,但有时候CAD老是提示intersect 所选对象太多 导致程序出错 不知道怎么回事?是插入的块太多么?</p><p>怎么解决?各位大大帮帮忙啊</p> <p>我是想把以前非参照图框改为参照的,但图框有些内容还要保留..批量修改时.多选几个就会出现intersect 所选对象太多 导致程序出错,</p><p>以下是源码:</p><p>(defun c:tk ( / inspt xa-ent plst nlst ent inspt pt len sca newent x y pt1 pt2 pt3 pt4 pt5 pt6 pt7 pt8 ss-oldtk oldla ptcmp1 ptcmp2 fileflag)<br/> (command "undo" "be")<br/> (setvar "cmdecho" 0)<br/> (princ"\n支持当前坐标系,选择要替划的图框")<br/> (if (setq ss-oldtk (ssget '((8 . "市政图框"))))<br/> (progn <br/> (setq pliness (ssget "P" '((0 . "LWPOLYLINE") (40 . 0.0) (90 . 4) (70 . 1)))) ;;;;70为闭合,90为四边形 40为线宽为0<br/> <br/> (initget "S" )<br/> (setq fileflag (getkword "\n选取要参照的图框<S更改> <回车默认>"))<br/> (setq filename "E:\\cad简化命令<a href="file://Tyt//A3sztk.dwg">\\Tyt\\A3sztk.dwg</a>") <br/> (if (or (= fileflag "S") (= (findfile filename) nil) )<br/> (setq filename (getfiled "选取要参照的图框" "" "dwg" 2))<br/> )<br/> (setq fileflag nil)<br/> (if filename<br/> (progn<br/> <br/> (setq olderr *error*)<br/> ;;;;错误函数;;;<br/> (defun *error* (msg)<br/> (princ "\n程序出错!")<br/> (command "layer" "S" oldla "")<br/> (command "undo" "end")<br/> (setq *error* olderr)<br/> (princ)<br/> )<br/> ;;; <br/> (setq oldla (getvar "clayer")) <br/> (command "layer" "S" "市政图框" "")<br/> (setq i 0 )<br/> (repeat (sslength pliness)<br/> (setq plst '() nlst '())<br/> (setq ent (entget (ssname pliness i)))<br/> (mapcar '(lambda (x) <br/> (if (= (car x) 10)<br/> (setq plst (cons (trans (cdr x) 0 1 ) plst) ) )<br/> ) <br/> ent <br/> );mapcar<br/> ;;;根据坐标x轴大小排列;;;<br/> (setq nlst (vl-sort plst<br/> (function (lambda (e1 e2)<br/> (< (car e1) (car e2) )<br/> ) ) )<br/> )<br/> ;;;寻找左下角点;<br/> (setq ptcmp1 (nth 0 nlst))<br/> (setq ptcmp2 (nth 1 nlst))<br/> (if (< (cadr ptcmp1) (cadr ptcmp2))<br/> (setq inspt ptcmp1)<br/> (setq inspt ptcmp2)<br/> )<br/> (setq pt (nth 2 nlst))<br/> (setq len (abs(- (car pt) (car inspt) )) )<br/> (setq sca (/ len 410 ))<br/> (setq x (car inspt))<br/> (setq y (cadr inspt))</p><p> (setq pt1 (list (+ x (* sca 120)) (+ y (* sca 5))) )<br/> (setq pt2 (list (+ x (* sca 195)) (+ y (* sca 12))) )<br/> (setq pt3 (list (+ x (* sca 335)) (+ y (* sca 12))) )<br/> (setq pt4 (list (+ x (* sca 360)) (+ y (* sca 18))) ) <br/> (setq pt5 (list (+ x (* sca 375)) (+ y (* sca 5))) ) <br/> (setq pt6 (list (+ x (* sca 405)) (+ y (* sca 12))) )<br/> (setq pt7 (list (+ x (* sca 355)) (+ y (* sca 268))) )<br/> (setq pt8 (list (+ x (* sca 405)) (+ y (* sca 280))) )<br/> (setq pt9 (list (+ x (* sca 405)) (+ y (* sca 266))) )<br/> (setq pt10 (list (+ x (* sca 20)) (+ y (* sca 22))) )</p><p> (setq ss1 (ssget "w" pt1 pt2 '((8 . "市政图框")) ))<br/> (setq ss2 (ssget "w" pt3 pt4 '((8 . "市政图框")) ))<br/> (setq ss3 (ssget "w" pt5 pt6 '((8 . "市政图框")) ))<br/> (setq ss4 (ssget "W" pt7 pt8 '((8 . "市政图框")) ))<br/> (setq ss5 (ssget "W" pt9 pt10 '((8 . "市政图框")) )) ;;图框内选择集<br/> ;;;;;<br/> (defun ss-del (ss-1 ss-2 / ss1 ss2 n ent ents newss);;;ss-2中删除ss-1<br/> (setq n 0)<br/> (repeat (sslength ss-1) <br/> (setq ents (entget (ssname ss-1 n)))<br/> (setq ent (cdr (assoc -1 ents)))<br/> (setq newss (ssdel ent ss-2))<br/> (setq n (+ n 1))<br/> )<br/> newss<br/> );;defun<br/> (if (/= ss1 nil)<br/> (setq ss-oldtk (ss-del ss1 ss-oldtk));;;图层中要保留的图框内容<br/> )<br/> (if (/= ss2 nil)<br/> (setq ss-oldtk (ss-del ss2 ss-oldtk))<br/> )<br/> (if (/= ss3 nil)<br/> (setq ss-oldtk (ss-del ss3 ss-oldtk))<br/> )<br/> (if (/= ss4 nil)<br/> (setq ss-oldtk (ss-del ss4 ss-oldtk))<br/> )<br/> (if (/= ss5 nil)<br/> (setq ss-oldtk (ss-del ss5 ss-oldtk))<br/> ) <br/> (command "_xref" "" filename inspt sca "" 0)<br/> (setq i (+ i 1))<br/> );repeat<br/> (command "erase" ss-oldtk "")<br/> );progn<br/> (alert "\n没找到参照图框!!!!")<br/> );if filename<br/> ) ;;pgogn ss-oldtk<br/> (alert "\n只适用于图框!!!!") <br/> ):if ss-oldtk<br/>(setq olderr *error*)<br/>(command "layer" "S" oldla "")<br/>(command "undo" "end")<br/>(princ)<br/>)</p> <p> 程式中用COMMAND函数运行时,当捕捉点打开时,图形缩放比较小时,就很容易出现这样的错误,</p><p>可以在COMMAND函数前面加上 (setvar "osmode" 0) 把捕捉点关闭.</p> 喽..原来如此啊..多谢楼上了.以前都不太注意..只是出错了才加上这句.. 真是太感谢了 昨天晚上弄了一晚上也没弄明在哪里错了 原来就在这里 哈哈 多谢 多谢 无比感谢 我都不知道该怎么谢啦 哈哈哈哈哈 <p>大侠啊 太感谢了 昨天晚上捣鼓一晚上没弄明白 今天一看茅塞顿开 太感谢啦 无比感谢 哈哈哈哈哈</p> <p>谢谢大侠。 </p> 祥子 发表于 2008-11-25 21:39 程式中用COMMAND函数运行时,当捕捉点打开时,图形缩放比较小时,就很容易出现这样的错误,可以在COMM ...
谢谢大哥,真的有效果
页:
[1]