;按比例复制
;用于多个实体的连续不等距离的整体copy，仅限于正交方向（0，90，180，270）
;要求首先设置比例（bl变量）。
(defun c:copy1()
(if (= bl  nil)(setq bl (getreal "\ninput bl---:")))(setvar "userr1" bl)
(setq s (ssget))
(setq p1 (getpoint "\ninpurt base point:"))
(setq p2 (getpoint "\ninpurt direction:"))
(setq x1 (car p1) y1 (cadr p1) x2 (car p2) y2 (cadr p2))
(setq  xx (- x2 x1) yy (- y2 y1))
(setq xa (abs xx) ya (abs yy) xxx (- ya xa))
(setq dis1 (getreal "\ninput distance:"))(setq last1 dis1)
(setq dis3 dis1)(setq ddd 1)
(while (/= ddd nil)
   (if (< xxx 0)(progn
       (if (> x2 x1)(progn
           (setq base p1)
           (setq dis2 (/ dis1 bl))
           (setq p3 (polar p1 0 dis2))
           (command "copy" s "" base p3)
           (setq base p3)
           (setq dis1 (getreal "\ninput distance<exit><0-last>:"))
           (if (/= dis1 nil)(progn
             (if (= dis1 0) (setq dis1 last1))
             (setq dis1 (+ dis1 0.001))
             (setq last1 dis1)
             (setq dis3 (+ dis3 dis1)) (setq dis1 dis3)
             ))
           (if (= dis1 nil)(setq ddd nil))
           ))
       (if (< x2 x1)(progn
           (setq base p1)
           (setq dis2 (/ dis1 bl) dis2 (- 0 dis2))
           (setq p3 (polar p1 0 dis2))
           (command "copy" s "" base p3)
           (setq base p3)
           (setq dis1 (getreal "\ninput distance<exit><0-last>:"))
           (if (/= dis1 nil)(progn
             (if (= dis1 0) (setq dis1 last1))
             (setq dis1 (+ dis1 0.001))
             (setq last1 dis1)
             (setq dis3 (+ dis3 dis1)) (setq dis1 dis3)
             ))
           (if (= dis1 nil)(setq ddd nil))
           ))
        ))
   (if (> xxx 0)(progn
       (if (> y2 y1)(progn
           (setq base p1)
           (setq dis2 (/ dis1 bl))
           (setq p3 (polar p1 (/ pi 2) dis2))
           (command "copy" s "" base p3)
           (setq base p3)
           (setq dis1 (getreal "\ninput distance<exit><0-last>:"))
           (if (/= dis1 nil)(progn
             (if (= dis1 0) (setq dis1 last1))
             (setq dis1 (+ dis1 0.001))
             (setq last1 dis1)
             (setq dis3 (+ dis3 dis1)) (setq dis1 dis3)
             ))
           (if (= dis1 nil)(setq ddd nil))
           ))
       (if (< y2 y1)(progn
           (setq base p1)
           (setq dis2 (/ dis1 bl) dis2 (- 0 dis2))
           (setq p3 (polar p1 (/ pi 2) dis2))
           (command "copy" s "" base p3)
           (setq base p3)
           (setq dis1 (getreal "\ninput distance<exit><0-last>:"))
           (if (/= dis1 nil)(progn
             (if (= dis1 0) (setq dis1 last1))
             (setq dis1 (+ dis1 0.001))
             (setq last1 dis1)
             (setq dis3 (+ dis3 dis1)) (setq dis1 dis3)
             ))
           (if (= dis1 nil)(setq ddd nil))
           ))
        ))
)
)
