我也试了一下。但我的代码有点凌乱,没有pBe的那么清晰。而且它的兼容性没有经过测试。
干杯
- ; Covert multiple lines or plines to rectangles with given width
- ; 21 MAR 2014 @ MELBOURNE
- ; [email="yxinst@gmail.com"]yxinst@gmail.com[/email]
- (vl-load-com)
- (princ)
- (defun c:L2REC (/ _ss->lst subl2rec ss obs odist )
- (defun _ss->lst (sset / i lst)
- (setq i 0)
- (while (< i (sslength sset))
- (setq lst (cons (vlax-ename->vla-object (ssname sset i)) lst))
- (setq i (+ i 1))
- )
- lst
- )
- ;offset in 2 directions and link ends
- (defun subl2rec (oblst dist / l1 l2 l3 l4 temp pt11 pt12 pt21 pt22)
- (mapcar '(lambda (x)
- (setq l1 (vlax-vla-object->ename
- (car (vlax-safearray->list
- (vlax-variant-value (vla-offset x dist))
- )
- )
- )
- l2 (vlax-vla-object->ename
- (car (vlax-safearray->list
- (vlax-variant-value (vla-offset x (- 0 dist)))
- )
- )
- )
- )
- (if (/= "LINE" (cdr (assoc 0 (entget l1))))
- (progn (command "_explode" l1)
- (setq l1 (entlast))
- (command "_explode" l2)
- (setq l2 (entlast))
- )
- )
- (setq pt11 (cdr (assoc 10 (entget l1)))
- pt12 (cdr (assoc 11 (entget l1)))
- pt21 (cdr (assoc 10 (entget l2)))
- pt22 (cdr (assoc 11 (entget l2)))
- )
- (if (equal (distance pt11 pt22) (* 2 dist))
- (setq temp pt22
- pt22 pt21
- pt21 temp
- )
- )
- (command "_line" pt11 pt21 "")
- (setq l3 (entlast))
- (command "_line" pt12 pt22 "")
- (setq l4 (entlast))
- (command "_pedit" l1 "y" "j" l3 "" "j" l2 "" "j" l4 "" "")
- )
- oblst
- )
- )
- (princ "Select multiple lines or plines please.")
- (setq ss (ssget))
- (setq obs (_ss->lst ss))
- (setq odist (/ (getreal "Width?: ") 2))
- (subl2rec obs odist)
- (command "erase" ss "")
- (princ)
- )
|