你好
根据tombu的建议,动态块是这个技巧的最佳选择,但如果你不想使用动态块选项,这里是我的lisp程序。
- (defun c:Test (/ _C rad spc len pt r p d)
- ;; Tharwat 04.07.2015 ;;
- (setq rad 3.5 spc 109.0 )
- (if
- (and (setq len (getdist "\nSpecify Length of Rectangle :"))
- (if (< 109 len)
- t
- (progn (princ "\nLength of rectangle is smaller than 109.0 !") nil )
- )
- (setq pt (getpoint "\nSpecify Rectangle Base point :"))
- )
- (progn
- (defun _C (n _p)
- (repeat n
- (entmakex (list '(0 . "CIRCLE") (cons 10 _p) (cons 40 rad)))
- (setq _p (polar _p 0. spc))
- )
- )
- (setq r (1+ (fix (/ len 109.0)))
- p (polar (polar pt 0. (setq d (/ (- len (* (fix r) 109.)) 2.))) (* pi 1.5) 12. )
- )
- (command "_.rectang" "_none" pt "_none" (polar (polar pt 0. len) (* pi 1.5) len))
- (_C r p)
- (_C r (setq p (polar (polar pt (* pi 1.5) (- len 12.)) 0. d))
- )
- )
- )
- (princ)
- )
|