zhongguola 发表于 2005-8-12 13:43:00

[LISP] 关于圆内剪切的问题

<P>各位大哥:</P>
<P>erasec.lsp这个程序好像并不能自动的剪除图形里面的多个圆中与圆相交的线段。怎样才能自动剪除呢?</P>
<P>;圆内删除<BR>(DEFUN C:ERASEC (/ SS SL SN PC R N)<BR>&nbsp;(SETVAR "BLIPMODE" 0)<BR>&nbsp;(SETVAR "CMDECHO" 0)<BR>&nbsp;(IF (SETQ SS (SSGET "X" '((0 . "CIRCLE")))) (PROGN<BR>&nbsp; (SETQ SL (SSLENGTH SS) I 0)<BR>&nbsp; (REPEAT SL<BR>&nbsp;&nbsp; (SETQ SN (SSNAME SS I) I (1+ I)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PC (CDR (ASSOC 10 (ENTGET SN)))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; R&nbsp; (CDR (ASSOC 40 (ENTGET SN)))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; N 0<BR>&nbsp;&nbsp; )<BR>&nbsp;&nbsp; (COMMAND "ZOOM" "C" PC (* 3 R))<BR>&nbsp;&nbsp; (COMMAND "TRIM" SN "" "F")<BR>&nbsp;&nbsp; (REPEAT 180<BR>&nbsp;&nbsp;&nbsp; (COMMAND (POLAR PC (/ (* 2 N PI) 180) (* R 0.9)))<BR>&nbsp;&nbsp;&nbsp; (setq N (1+ N))<BR>&nbsp;&nbsp; )<BR>&nbsp;&nbsp; (COMMAND "" "")<BR>&nbsp;&nbsp; (SETQ N 0)<BR>&nbsp;&nbsp; (COMMAND "ERASE" "WP")<BR>&nbsp;&nbsp; (REPEAT 180<BR>&nbsp;&nbsp;&nbsp; (COMMAND (POLAR PC (/ (* 2 N PI) 180) (* R 0.9)))<BR>&nbsp;&nbsp;&nbsp; (setq N (1+ N))<BR>&nbsp;&nbsp; )<BR>&nbsp;&nbsp; (COMMAND "" "" "ZOOM" "P")<BR>&nbsp; )<BR>&nbsp;))<BR>&nbsp;(SETVAR "BLIPMODE" 1)<BR>&nbsp;(SETVAR "CMDECHO" 1)<BR>&nbsp;(PRINC)<BR>)</P>
<P>(princ "\nType ERASEC to start.")<BR>(princ)</P>

ZZXXQQ 发表于 2005-8-12 16:46:00

为什么不行?你将捕捉关了就行了。

zhongguola 发表于 2005-8-12 18:15:00

<P>感谢大师指点弥津!!!</P>
<P>谢谢啊!!!。。。。。。</P>

meflying 发表于 2005-8-12 19:19:00

还是老问题,怎么又发一个新帖????????????????????????????????????

zhongguola 发表于 2005-8-12 19:36:00

<P>不好意思。那是在您理我之前发的。</P>
<P>以后就不会出现相同的情况了!</P>

jxphklibin 发表于 2007-2-23 20:03:00

有一点小问题:就是如若是多义线来回穿过圆内,则执行一次只能剪切其中的一段,其余字段则没有裁剪。如何解决这一问题?

ZZXXQQ 发表于 2007-2-24 12:27:00

这样试试。

(DEFUN C:ERASEC (/ SS SL SN PC R N)
(SETVAR "BLIPMODE" 0)
(SETVAR "CMDECHO" 0)
(SETQ OLDOS (GETVAR "OSMODE"))
(SETVAR "OSMODE" 0)
(IF (SETQ SS (SSGET "X" '((0 . "CIRCLE")))) (PROGN
(SETQ SL (SSLENGTH SS) I 0)
(REPEAT SL
   (SETQ SN (SSNAME SS I) I (1+ I)
         PC (CDR (ASSOC 10 (ENTGET SN)))
         R(CDR (ASSOC 40 (ENTGET SN)))
         N 0
   )
   (COMMAND "ZOOM" "C" PC (* 3 R))
   (COMMAND "TRIM" SN "")
   (REPEAT 180
    (COMMAND "F" (POLAR PC (/ (* 2 N PI) 180) (* R 0.9))
               (POLAR PC (/ (* 2 (SETQ N (1+ N)) PI) 180) (* R 0.9)) "")
   )
   (COMMAND "")
   (SETQ N 0)
   (COMMAND "ERASE" "WP")
   (REPEAT 180
    (COMMAND (POLAR PC (/ (* 2 N PI) 180) (* R 0.9)))
    (setq N (1+ N))
   )
   (COMMAND "" "" "ZOOM" "P")
)
))
(SETVAR "OSMODE" OLDOS)
(SETVAR "BLIPMODE" 1)
(SETVAR "CMDECHO" 1)
(PRINC)
)
(princ "\nType ERASEC to start.")
(princ)
页: [1]
查看完整版本: [LISP] 关于圆内剪切的问题