如何选择快内圆进行修剪?
本帖最后由 chenjieq1990 于 2017-10-18 17:14 编辑一条直线,多段线或者直线,在中点插入一个圆形的块,块里面有多个图元,现在插完了需要用块里面的最外的圆修剪这个直线,虽然我的块做了遮挡,但是还是想修剪了,现在我插入块了之后,不知道如何获得块里面的图元名,很是头疼,看了论坛里面的帖子,好像是用tblobjname和entnext,但是有点不懂,希望有人指点一二,或者有什么更方便的方法,用vlisp。(defun C:gp(/)
(defun C:gp(/)
(vl-load-com)
(setq cm (getvar "cmdecho"))
(setq os (getvar "osmode"))
(setvar "cmdecho" 0)
(setvar "osmode" 0)
(setq ss (car (cdr (ssgetfirst))))
(while (= ss nil) (setq ss (ssget '((-4 . "<or")(0 . "LINE") (0 . "LWPOLYLINE")(-4 . "or>")))))
(setq plst nil)
(setq n 0)
(repeat(sslength ss)
(setq ent(ssname ss n))
(setq ent(entget ent))
(if(= (cdr (assoc 0 ent)) "LWPOLYLINE")
(progn
(foreach n ent
(if(= (car n) 10)
(setq plst(cons (cdr n) plst)))
)
(setq p1(car plst)
p1(list (car p1) (cadr p1))
p2(cadr plst)
p2(list (car p2) (cadr p2))
)
)
)
(if(= (cdr (assoc 0 ent)) "LINE")
(setq p1(cdr (assoc 10 ent))
p1(list (car p1) (cadr p1))
p2(cdr (assoc 11 ent))
p2(list (car p2) (cadr p2)))
)
(setq p0(mapcar '(lambda(x y) (/ (+ x y) 2) ) p1 p2))
;|(setq r(getreal"输入半径<0.2>:"))
(if(= r nil)(setq r 0.2))
(vl-cmdf "circle" p0 r "")
(setq yp(entlast))
(vl-cmdf "trim" yp "" (list (ssname ss n) p0) "")|;
(entmake (list (cons 0 "INSERT")
(cons 10 p0)
(cons 2 "溢流口")
)
)
(setq ylk(entlast))
(setq ylkvlx(vlax-ename->vla-object ylk))
(setq ylk1(entget ylk))
(setq n(+ 1 n))
);end repeat
(prin1)
(setvar "cmdecho" cm)
(setvar "osmode" os)
) nentsel试试 学习了
页:
[1]