chenjieq1990 发表于 2017-10-18 17:14:49

如何选择快内圆进行修剪?

本帖最后由 chenjieq1990 于 2017-10-18 17:14 编辑

一条直线,多段线或者直线,在中点插入一个圆形的块,块里面有多个图元,现在插完了需要用块里面的最外的圆修剪这个直线,虽然我的块做了遮挡,但是还是想修剪了,现在我插入块了之后,不知道如何获得块里面的图元名,很是头疼,看了论坛里面的帖子,好像是用tblobjname和entnext,但是有点不懂,希望有人指点一二,或者有什么更方便的方法,用vlisp。(defun C:gp(/)


chenjieq1990 发表于 2017-10-18 17:15:54

(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)
)

fan_zh 发表于 2017-10-19 13:13:55

nentsel试试

LIULISHENG 发表于 2018-2-6 14:50:06

学习了
页: [1]
查看完整版本: 如何选择快内圆进行修剪?