马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本帖最后由 /db_自贡黄明儒_ 于 2014-4-29 13:18 编辑
 - (defun C:w1 (/ CMD1 FIL OSM1 P1 P2 SS)
- (defun *error* (msg)
- (vl-bt)
- (if *DOC*
- (_EndUndo *DOC*) ;块内图元增减
- )
- (while (not (equal (getvar "cmdnames") "")) (command nil))
- (cond (cmd1 (setvar "cmdecho" cmd1)))
- (princ "\n 出错啦!")
- (princ)
- )
- (setq fil '((-4 . "<or")
- (-4 . "<and")
- (0 . "LWPOLYLINE")
- (90 . 2)
- (-4 . "and>")
- (0 . "LINE")
- (-4 . "or>")
- )
- )
- (cond
- ((and
- (setq p1 (getpoint))
- (setq p2 (getpoint p1))
- (setq ss (ssget "_C" p1 p2 fil))
- (> (sslength ss) 1)
- )
- (vl-load-com)
- (or *DOC*
- (setq *DOC* (vla-get-ActiveDocument (vlax-get-acad-object)))
- )
- (_StartUndo *DOC*)
- (HH:ayOSMode nil)
- (setq cmd1 (getvar "cmdecho"))
- (setvar "cmdecho" 0)
- (VL-CATCH-ALL-APPLY 'HH::pmDo (list p1 p2 ss))
- (setvar "cmdecho" cmd1)
- (HH:ayOSMode T)
- (_EndUndo *DOC*)
- (gc)
- )
- )
- (princ)
- )
- (defun HH::pmDo (p1 p2 ss / ANG DIST E E1 E2 EP EP1 EP2 LENT1 LENT2 LST N SP SP1 SP2)
- (repeat (setq n (sslength ss))
- (setq e (ssname ss (setq n (1- n))))
- (setq sp (vlax-curve-getStartPoint e))
- (setq Ep (vlax-curve-getEndPoint e))
- (setq dist (car (trans (mapcar '- p1 sp) 0 (mapcar '- Ep sp))))
- (setq lst (cons (list (abs dist) e) lst))
- (setq lst (HH:ssPts:Sort lst "x" 0.1)) ;排序
- )
- (setq e1 (cadar lst))
- (setq e2 (cadr (last lst)))
- (setq ang (angle p1 p2))
- (setq dist (* (distance p1 p2) 0.25))
- (setq sp1 (vlax-curve-getStartPoint e1))
- (setq Ep1 (vlax-curve-getEndPoint e1))
- (setq sp2 (vlax-curve-getStartPoint e2))
- (setq Ep2 (vlax-curve-getEndPoint e2))
- (setq sp (polar p1 (+ ang (* pi 0.5)) dist))
- (setq Ep (polar p2 (+ ang (* pi 0.5)) dist))
- (HH::pmDo2P (inters sp1 Ep1 sp Ep T) (inters sp2 Ep2 sp Ep T) ang)
- (setq Lent1 (entlast))
- (setq ang (+ ang pi))
- (setq sp (polar p1 (+ ang (* pi 0.5)) dist))
- (setq Ep (polar p2 (+ ang (* pi 0.5)) dist))
- (HH::pmDo2P (inters sp2 Ep2 sp Ep T) (inters sp1 Ep1 sp Ep T) ang)
- (setq Lent2 (entlast))
- (command "_.trim" Lent1 Lent2 "" (list e1 (inters sp1 Ep1 p1 p2 T)) "")
- (command "_.trim" Lent1 Lent2 "" (list e2 (inters sp2 Ep2 p1 p2 T)) "")
- )
- ;;两点画剖面线
- (defun HH::pmDo2P (p1 p2 ang / AN DIST PT)
- (setq dist (distance p1 p2))
- (setq an (* 180 (/ ang pi)))
- (setq pt (polar p1 ang (* 0.5 dist)))
- (command "_.pline" p1 "a" "d" (+ an -45) pt p2 "d" (+ an 180 45) pt "")
- )
|