npu349 发表于 2008-11-21 16:32:00

[求助]奇怪.LSP程序有时能用,但提示intersect 所选对象太多

本帖最后由 作者 于 2008-11-23 14:43:34 编辑 <br /><br /> <p>做了个插入参照程序,一般情况运行正常,但有时候CAD老是提示intersect 所选对象太多 导致程序出错&nbsp;不知道怎么回事?是插入的块太多么?</p><p>怎么解决?各位大大帮帮忙啊</p>

npu349 发表于 2008-11-23 15:26:00

<p>我是想把以前非参照图框改为参照的,但图框有些内容还要保留..批量修改时.多选几个就会出现intersect 所选对象太多 导致程序出错,</p><p>以下是源码:</p><p>(defun c:tk ( / inspt&nbsp; xa-ent&nbsp; 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/>&nbsp; (command "undo" "be")<br/>&nbsp; (setvar "cmdecho" 0)<br/>&nbsp; (princ"\n支持当前坐标系,选择要替划的图框")<br/>&nbsp; (if (setq ss-oldtk (ssget '((8 . "市政图框"))))<br/>&nbsp; (progn&nbsp;&nbsp;&nbsp; <br/>&nbsp; (setq pliness (ssget "P" '((0 . "LWPOLYLINE") (40 . 0.0) (90 . 4) (70 . 1))))&nbsp; ;;;;70为闭合,90为四边形 40为线宽为0<br/>&nbsp; <br/>&nbsp; (initget "S" )<br/>&nbsp; (setq fileflag&nbsp; (getkword "\n选取要参照的图框&lt;S更改&gt; &lt;回车默认&gt;"))<br/>&nbsp; (setq filename "E:\\cad简化命令<a href="file://Tyt//A3sztk.dwg">\\Tyt\\A3sztk.dwg</a>") <br/>&nbsp; (if (or (=&nbsp; fileflag "S")&nbsp; (= (findfile filename) nil) )<br/>&nbsp; (setq filename (getfiled "选取要参照的图框" "" "dwg" 2))<br/>&nbsp; )<br/>&nbsp; (setq fileflag nil)<br/>&nbsp; (if filename<br/>&nbsp; (progn<br/>&nbsp;<br/>&nbsp; (setq olderr *error*)<br/>&nbsp;;;;;错误函数;;;<br/>&nbsp;(defun *error* (msg)<br/>&nbsp; (princ "\n程序出错!")<br/>&nbsp; (command "layer" "S"&nbsp; oldla&nbsp; "")<br/>&nbsp; (command "undo" "end")<br/>&nbsp; (setq *error* olderr)<br/>&nbsp; (princ)<br/>&nbsp; )<br/>&nbsp;;;; <br/>&nbsp; (setq oldla (getvar "clayer")) <br/>&nbsp; (command "layer" "S"&nbsp; "市政图框"&nbsp; "")<br/>&nbsp; (setq i 0&nbsp; )<br/>&nbsp; (repeat (sslength pliness)<br/>&nbsp; (setq plst '() nlst '())<br/>&nbsp; (setq ent (entget (ssname pliness i)))<br/>&nbsp; (mapcar '(lambda (x) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (= (car x) 10)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq plst&nbsp; (cons&nbsp; (trans (cdr x) 0 1 ) plst) ) )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ent <br/>&nbsp; );mapcar<br/>&nbsp;&nbsp; ;;;根据坐标x轴大小排列;;;<br/>&nbsp; (setq nlst (vl-sort plst<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (function (lambda (e1 e2)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (&lt; (car e1)&nbsp; (car e2) )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ) ) )<br/>&nbsp; )<br/>&nbsp; ;;;寻找左下角点;<br/>&nbsp;&nbsp; (setq ptcmp1 (nth 0 nlst))<br/>&nbsp;&nbsp; (setq ptcmp2&nbsp; (nth 1 nlst))<br/>&nbsp;&nbsp; (if (&lt; (cadr ptcmp1) (cadr ptcmp2))<br/>&nbsp;&nbsp; (setq inspt ptcmp1)<br/>&nbsp;&nbsp; (setq inspt ptcmp2)<br/>&nbsp;&nbsp; )<br/>&nbsp;&nbsp; (setq pt (nth 2 nlst))<br/>&nbsp;&nbsp; (setq len (abs(- (car pt) (car inspt) )) )<br/>&nbsp;&nbsp; (setq sca (/ len 410 ))<br/>&nbsp;&nbsp; (setq x (car inspt))<br/>&nbsp;&nbsp; (setq y (cadr inspt))</p><p>&nbsp;&nbsp; (setq pt1 (list (+ x (* sca 120)) (+ y (* sca 5))) )<br/>&nbsp;&nbsp; (setq pt2 (list (+ x (* sca 195)) (+ y (* sca 12)))&nbsp; )<br/>&nbsp;&nbsp; (setq pt3 (list (+ x (* sca 335)) (+ y (* sca 12)))&nbsp; )<br/>&nbsp;&nbsp; (setq pt4 (list (+ x (* sca 360)) (+ y (* sca 18))) ) <br/>&nbsp;&nbsp; (setq pt5&nbsp; (list (+ x (* sca 375)) (+ y (* sca 5))) ) <br/>&nbsp;&nbsp; (setq pt6&nbsp; (list (+ x (* sca 405)) (+ y (* sca 12))) )<br/>&nbsp;&nbsp; (setq pt7&nbsp; (list (+ x (* sca 355)) (+ y (* sca 268))) )<br/>&nbsp;&nbsp; (setq pt8&nbsp; (list (+ x (* sca 405)) (+ y (* sca 280))) )<br/>&nbsp;&nbsp; (setq pt9&nbsp;&nbsp; (list (+ x (* sca 405)) (+ y (* sca 266))) )<br/>&nbsp;&nbsp; (setq pt10&nbsp;&nbsp; (list (+ x (* sca 20)) (+ y (* sca 22))) )</p><p>&nbsp;&nbsp; (setq ss1 (ssget "w" pt1 pt2 '((8 . "市政图框")) ))<br/>&nbsp;&nbsp; (setq ss2 (ssget "w" pt3 pt4 '((8 . "市政图框")) ))<br/>&nbsp;&nbsp; (setq ss3 (ssget "w" pt5 pt6 '((8 . "市政图框")) ))<br/>&nbsp;&nbsp; (setq ss4 (ssget "W" pt7 pt8 '((8 . "市政图框")) ))<br/>&nbsp;&nbsp; (setq ss5 (ssget "W" pt9 pt10 '((8 . "市政图框")) )) ;;图框内选择集<br/>&nbsp;&nbsp;&nbsp; ;;;;;<br/>&nbsp;&nbsp; (defun ss-del (ss-1 ss-2 / ss1 ss2 n ent ents newss);;;ss-2中删除ss-1<br/>&nbsp;&nbsp; (setq n 0)<br/>&nbsp;&nbsp; (repeat (sslength ss-1)&nbsp;&nbsp; <br/>&nbsp;&nbsp; (setq ents (entget (ssname&nbsp; ss-1 n)))<br/>&nbsp;&nbsp; (setq ent (cdr (assoc -1 ents)))<br/>&nbsp;&nbsp; (setq newss (ssdel ent ss-2))<br/>&nbsp;&nbsp; (setq n (+ n 1))<br/>&nbsp;&nbsp; )<br/>&nbsp;&nbsp; newss<br/>&nbsp;&nbsp; );;defun<br/>&nbsp;&nbsp; (if (/= ss1 nil)<br/>&nbsp;&nbsp; (setq ss-oldtk (ss-del ss1 ss-oldtk));;;图层中要保留的图框内容<br/>&nbsp;&nbsp; )<br/>&nbsp;&nbsp; (if (/= ss2 nil)<br/>&nbsp;&nbsp; (setq ss-oldtk (ss-del ss2 ss-oldtk))<br/>&nbsp;&nbsp; )<br/>&nbsp;&nbsp; (if (/= ss3 nil)<br/>&nbsp;&nbsp; (setq ss-oldtk (ss-del ss3 ss-oldtk))<br/>&nbsp;&nbsp; )<br/>&nbsp;&nbsp; (if (/= ss4 nil)<br/>&nbsp;&nbsp; (setq ss-oldtk (ss-del ss4 ss-oldtk))<br/>&nbsp;&nbsp; )<br/>&nbsp;&nbsp; (if (/= ss5 nil)<br/>&nbsp;&nbsp;&nbsp; (setq ss-oldtk (ss-del ss5 ss-oldtk))<br/>&nbsp;&nbsp; )&nbsp; <br/>&nbsp;&nbsp; (command "_xref" "" filename inspt sca "" 0)<br/>&nbsp;&nbsp; (setq i (+ i 1))<br/>&nbsp;&nbsp;&nbsp; );repeat<br/>&nbsp; (command "erase" ss-oldtk&nbsp; "")<br/>&nbsp; );progn<br/>&nbsp;&nbsp; (alert "\n没找到参照图框!!!!")<br/>&nbsp; );if filename<br/>&nbsp;&nbsp; ) ;;pgogn ss-oldtk<br/>&nbsp;(alert "\n只适用于图框!!!!") <br/>&nbsp;):if ss-oldtk<br/>(setq&nbsp; olderr *error*)<br/>(command "layer" "S"&nbsp; oldla&nbsp; "")<br/>(command "undo" "end")<br/>(princ)<br/>)</p>

祥子 发表于 2008-11-25 21:39:00

<p>&nbsp;程式中用COMMAND函数运行时,当捕捉点打开时,图形缩放比较小时,就很容易出现这样的错误,</p><p>可以在COMMAND函数前面加上 (setvar "osmode" 0) 把捕捉点关闭.</p>

npu349 发表于 2008-11-25 23:26:00

喽..原来如此啊..多谢楼上了.以前都不太注意..只是出错了才加上这句..

客人 发表于 2009-11-7 12:42:00

真是太感谢了 昨天晚上弄了一晚上也没弄明在哪里错了 原来就在这里 哈哈 多谢 多谢 无比感谢 我都不知道该怎么谢啦 哈哈哈哈哈

jdjb 发表于 2009-11-7 12:45:00

<p>大侠啊&nbsp; 太感谢了 昨天晚上捣鼓一晚上没弄明白 今天一看茅塞顿开 太感谢啦 无比感谢 哈哈哈哈哈</p>

heartwind 发表于 2010-5-12 15:40:00

<p>谢谢大侠。&nbsp; </p>

zj20190405 发表于 2025-3-26 21:16:03

祥子 发表于 2008-11-25 21:39
&nbsp;程式中用COMMAND函数运行时,当捕捉点打开时,图形缩放比较小时,就很容易出现这样的错误,可以在COMM ...

谢谢大哥,真的有效果
页: [1]
查看完整版本: [求助]奇怪.LSP程序有时能用,但提示intersect 所选对象太多