 - ;;;可处理线段、弧、多段线、样条曲线
- ;;;将blockname替换为图块名
- (vl-load-com)
- (defun C:aaa ()
- (setq cmdbak (getvar "cmdecho"))
- (setvar "cmdecho" 0)
-
- (initget 7)
- (setq len1 (getreal "\n输入端距: ")
- )
- (initget 7)
- (setq len2 (getreal "\n输入最大间距:"))
-
- (setq ss nil)
- (while (not ss)
- (princ "\n选择曲线(线段/圆弧/多段线/样条曲线):")
- (setq ss (ssget '((-4 . "<OR")
- (0 . "LINE")
- (0 . "ARC")
- (0 . "LWPOLYLINE")
- (0 . "POLYLINE")
- (0 . "SPLINE")
- (-4 . "OR>")
- )
- )
- )
- )
- (setq i 0)
- (repeat (sslength ss)
- (setq ent (ssname ss i))
- (setq obj (vlax-ename->vla-object ent))
- (setq obj_len (vlax-curve-getDistAtPoint
- obj
- (vlax-curve-getEndPoint obj)
- )
- )
- (if (> (setq eff_len (- obj_len (* 2 len1))))
- (progn
- ;;; (setq eff_len (/ (fix (* eff_len 10000)) 10000)) ;如有误差,可使用此处消除误差
- (setq n (1+ (fix (/ eff_len len2))))
- (setq len len1)
- (setq dlt (/ eff_len n))
- (repeat (1+ n)
- (setq pnt (vlax-curve-getPointAtDist obj len))
- (entmake (list '(0 . "insert")
- (cons 10 pnt)
- (cons 2 "blockname")
- )
- )
- (setq len (+ len dlt))
- )
- )
- )
- (setq i (1+ i))
- )
- (setvar "cmdecho" cmdbak)
- (princ)
- )
|