本帖最后由 mandala 于 2011-1-9 23:12 编辑
画一条pline,剪切掉被pline围住的多段线、直线、圆弧或者曲线,如图:
 - (defun c:trm (/ e1 elist trn en p1 p2 ss p3 n )
-
- (setvar "osmode" 0)
- (command "_.pline")
- (while (= 1 (getvar "cmdactive"))(command pause))
- (setq e1 (entlast))
- (setq elist (entget e1))
- (setq trn (cdr (assoc -1 elist)))
- (setq en (vlax-ename->vla-object trn))
- (vla-getboundingbox en 'p1 'p2)
- (setq p1 (vlax-safearray->list p1)
- p2 (vlax-safearray->list p2)
- )
- (setq ss (ssget "c" p1 p2))
- (setq p3 (mapcar '(lambda (x y) (/ (+ x y) 2.0)) (vlax-curve-getEndPoint e1) (vlax-curve-getstartPoint e1)));;p3为pline头尾连线的中点
- (setq n -1)
- (repeat (sslength ss)
- (setq en (ssname ss (setq n (1+ n))))
- (if (not (eq en trn))
- (command "trim" e1 "" (list en p3) "")
- )
- )
- (entdel e1)
- )
问题是这个lisp有时候灵有时候不灵,汗一个。应该是通过ssget来获取与pline相交的图元时,方式不对,因为如果pline画得比较斜的话,trim就剪切得不对。请帮我看看问题出在哪里呢?另外有没有更好的方法来实现呢?
|