网上到是有个内偏的,但是处理的是连续 - ;;;******内缩偏移 程序开始*****
- (princ "\n★内缩偏移命令:ns ★\n")
- (defun c:ns ()
- (setvar "blipmode" 0)
- (setvar "pickfirst" 1)
- (setvar "osmode" 15359)
- (setvar "cmdecho" 0)
- (princ "\n★功能:批量将多段线、圆弧、圆进行内缩偏移.\n")
- (command "ucs" "w")
- (command "undo" "be")
- (initget 6)
- (setq dist (getreal "\n输入要内缩偏移的距离<0.004>:"))
- (if (not dist)
- (setq dist 0.004)
- )
- (princ "\n选择要内缩偏移的对象:\n")
- (setq ss (ssget '((0 . "CIRCLE,ARC,LWPOLYLINE"))))
- (if (not ss)
- (exit)
- )
- (setq num (sslength ss))
- (setvar "osmode" 0)
- (setq i 0
- j 0
- )
- (command "LAYER" "M" "标记层" "C" "1" "标记层" "")
- (command "LAYER" "M" "内缩" "C" "6" "内缩" "")
- (vl-load-com)
- (repeat num
- (setq entnam (ssname ss i))
- (setq obj (vlax-ename->vla-object entnam))
- (setq len (vlax-curve-getdistatparam
- obj
- (vlax-curve-getendparam obj)
- )
- )
- (vla-offset obj 0.00001)
- (setq objlast (entlast))
- (setq lenlast (vlax-curve-getdistatparam
- objlast
- (vlax-curve-getendparam objlast)
- )
- )
- (entdel objlast)
- (cond ((< lenlast len)
- (progn
- (vla-offset obj dist)
- (setq en (entget (entlast)))
- (entmod (subst (cons 8 "内缩") (assoc 8 en) en))
- )
- )
- ((> lenlast len)
- (progn
- (vla-offset obj (* -1 dist))
- (setq en (entget (entlast)))
- (entmod (subst (cons 8 "内缩") (assoc 8 en) en))
- )
- )
- ((= lenlast len)
- (progn
- (setq en (entget entnam))
- (entmod (subst (cons 8 "标记层") (assoc 8 en) en))
- (setq j (+ 1 j))
- )
- )
- )
- (setq i (1+ i))
- )
- (command "undo" "e")
- (princ "\n★将选取对象进行内缩偏移成功.\n")
- (if (> j 0) (princ (strcat "★提示:有" (itoa j) "个对象因无法判定偏移方向,未进行内缩偏移,已将其置于“标记层”。\n")))
- (setvar "osmode" 15359)
- (princ)
- )
- ;;;******内缩偏移 程序结束******
的单条的线 |