(if (setq pc (getpoint pa "\n指定偏移点: "))
(progn
(setq yn (vl-remove-if-not ''((one) (or (equal (distance (dxf 10 one) pa) 0 5) (equal (distance (dxf 11 one) pa) 0 5))) ss1))
(do_offset)
)
)
(ssdraw ss 4)
(ssdraw ss1 4)
(command "undo" "e")
(c:oll)
)
)
(princ)
)
(defun do_offset()
(setq ang (angle pa pc))
(setq dist (distance pa pc))
(setq pd (polar pb ang dist))
(setq pd (per_po pb pc pd))
(if yn
(setq pc (per_po pa pc pd))
)
(entmodone line 10 pc)
(entmodone line 11 pd)
;|
(setq pa (list (car pa) (cadr pa)))
(setq pb (list (car pb) (cadr pb)))
(setq pc (list (car pc) (cadr pc)))
(setq pd (list (car pd) (cadr pd)))
|;
(foreach linef ss1
(setq pm (dxf 10 linef)
pn (dxf 11 linef)
)
;;(setq pm (list (car pm) (cadr pm)))
;;(setq pn (list (car pn) (cadr pn)))
(setq px (inters pa pb pm pn NIL))
(cond
((equal (distance pm px) 0 5) (setq dxfnm 10))
((equal (distance pn px) 0 5) (setq dxfnm 11))
( T (setq dxfnm NIL))
)
(setq px (inters pc pd pm pn NIL))
(if (and px dxfnm)
(entmodone linef dxfnm px)
)
)
)
;;公共函数
;999获取图元某个dxf组码
(defun dxf( ent n / temp )
(if (and (= (type ent) 'int) (= (type n) 'ename))
(setq temp ent
ent n
n temp
)
)
(cdr (assoc n (entget ent)))
)
;999按指定的模式重画一个选择集的全部物体<改模式时,需要先反绘。1-2 3-4.(1->4=1->2->4)> 【支持模型多视口,支持布局中视口】
;; 1:显示 2:消隐 3:高亮 4:低亮
(defun ssdraw( ss mode / i ent )
(if (= (strcase (getvar "ctab")) "MODEL")
(if (member mode '(1 2 3 4))
(foreach vp (reverse (vports))
(setvar "cvport" (car vp))
(cond
((= (type ss) 'PICKSET)
(foreach ent (ss2list ss)
(redraw ent mode)
)
)
((= (type ss) 'list)
(foreach ent ss
(redraw ent mode)
)
)
((= (type ss) 'ename)
(redraw ss mode)
)
)
)
)
(cond
((= (type ss) 'PICKSET)
(foreach ent (ss2list ss)
(redraw ent mode)
)
)
((= (type ss) 'list)
(foreach ent ss
(redraw ent mode)
)
)
((= (type ss) 'ename)
(redraw ss mode)
)
)
)
(princ)
)
;;;选集转图元名表
;;;(ss2list (SSGET))
;;;(<图元名称: 7ef14230> <图元名称: 7ef14228> <图元名称: 7ef14220>)
(defun ss2list ( ss / i l )
(if ss
(repeat (setq i (sslength ss))
(setq l (cons (ssname ss (setq i (1- i))) l))
)
)
)