完成错误处理。
自然,它与直线引线一起工作。
真正的挑战是将反应堆(用于清除)连接到mleader,但这是大师的工作,而不是我的工作。
- (defun c:demo (/ s s1 ss space pntlst pntlst1 w pntlst zv
- s_name TempL TempL1 TempL2 Lv L1v L2v )
- (vl-load-com)
- (setq space (vlax-get
- (vla-get-ActiveLayout
- (vla-get-activedocument
- (vlax-get-acad-object)
- )
- )
- 'Block
- )
- )
- (if (and
- (princ "\nSelect Leader or MLeader")
- (setq s (ssget "_+.:S:L" '((0 . "*LEADER"))))
- (setq s (vlax-ename->vla-object (setq s1 (ssname s 0))))
- (setq s_name (vlax-get s 'ObjectName))
- (setq width (cond
- ((getdist (strcat "\nEnter width "
- (if width (strcat " <" (rtos width) ">: ") ": ")
- )))(width))
- )
- (setq w (* 0.5 width))
- )
- (progn
- (cond
- (
- (eq s_name "AcDbMLeader" )
- (setq pntlst (vlax-invoke
- s 'GetLeaderLineVertices 0
- )
- ;zv (nth 2 pntlst)
- )
- (setq pntlst1 nil)
- (repeat (/ (length pntlst) 3)
- (setq pntlst1 (cons (list (car pntlst) (cadr pntlst)) pntlst1))
- (setq pntlst (cdddr pntlst))
- )
- (setq pntlst pntlst1)
- )
- (
- (eq s_name "AcDbLeader" )
- (mapcar '(lambda (x)
- (if (eq (car x) 10)
- (setq pntlst (cons (list (cadr x) (caddr x)) pntlst))
- )
- )
- (entget s1)
- )
- )
- )
- (setq TempL
- (vlax-ename->vla-object
- (entmakex
- (append
- (list
- (cons 0 "LWPOLYLINE")
- (cons 100 "AcDbEntity")
- (cons 100 "AcDbPolyline")
- (cons 90 (length pntlst))
- )
- (mapcar '(lambda (x) (cons 10 x)) pntlst)
- )
- )
- )
- )
- (vlax-invoke TempL 'offset (- (* 0.5 width)))
- (setq TempL1 (entlast))
- (vlax-invoke TempL 'offset (* 0.5 width))
- (setq TempL2 (entlast))
- (setq
- Lv1 (coo TempL1)
- Lv2 (coo TempL2)
- Lv (append Lv1 (reverse Lv2))
- )
- (setq os (getvar 'osmode))
- (setvar 'osmode 0)
- (command "_.wipeout")
- (apply 'command Lv)
- (command "")
- (setvar 'osmode os)
- (command "_.draworder" s1 "" "_F")
- (vla-delete TempL)
- (entdel TempL1)
- (entdel TempL2)
- )
- )
- )
- (defun Coo ( a / coor)
- (mapcar '(lambda (x)
- (if (eq (car x) 10)
- (setq coor (cons (list (cadr x) (caddr x)) coor))
- )
- )
- (entget a)
- )
- coor
- )
|