| 
今天做了一项工作,沿曲线有许多填充,要求在填充处打断。有几百个填充,临时写了个程序,很快完成了
×
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册 
     
  (defun C:w1 (/ E E0 EN N P1 P2 SS SS0)
  (_StartUndo *DOC*)
  (if (and
        (setq ss0 (LM:ssget "\n 选择曲线:" (list "_+.:E:S" '((0 . "LWPOLYLINE")))))
        (setq e0 (ssname ss0 0))
      )
    (while
      (setq ss (LM:ssget "\n 填充处画线:" (list ":S" '((0 . "HATCH")))))
       (repeat (setq n (sslength ss))
         (setq e (ssname ss (setq n (1- n))))
         (setq en (member '(2 . "SOLID") (entget e)))
         (setq p1 (cdr (assoc 10 en)))
         (setq p2 (vlax-curve-getClosestPointTo e0 p1))
         (command "._break" e0 "_non" (trans p2 0 1) "_non" (trans p2 0 1))
         ;;打断后,离曲线终点最近的曲线为e0,新产生的线由(entlast)取得
         ;;(vlax-curve-getEndPoint e0)
         
         ;(setq e0 (entlast))
         ;;记号
;;;         (if (equal p1 p2 0.0001)
;;;           (_EntmakeLine p1 (mapcar '+ p1 '(50000 0 0)) "0")
;;;           (_EntmakeLine p1 p2 "0")
;;;         )
         (entdel e)
       )
    )
  )
  (_EndUndo *DOC*)
  (princ)
)
 |