快速书写,适用于任意数量的圆和任意数量的图案填充:
- (defun c:challenge001 ( / cil cir col cur enx fun hal hat idx )
- (setq fun '(( x ) (if (assoc 62 x) x (append x '((62 . 256))))))
- (cond
- ( (not (setq hat (ssget "_X" '((0 . "HATCH") (410 . "Model")))))
- (princ "\nNo hatches found.")
- )
- ( (not (setq cir (ssget "_X" '((0 . "CIRCLE") (410 . "Model")))))
- (princ "\nNo circles found.")
- )
- ( (repeat (setq idx (sslength hat))
- (setq hal (cons (fun (entget (ssname hat (setq idx (1- idx))))) hal))
- )
- (repeat (setq idx (sslength cir))
- (setq enx (fun (entget (ssname cir (setq idx (1- idx)))))
- cil (cons (list (cdr (assoc 10 enx)) (cdr (assoc 40 enx)) (assoc 62 enx)) cil)
- )
- )
- (while (= 5 (car (setq cur (grread t 13 0))))
- (setq cur (trans (cadr cur) 1 0)
- col (cond ((vl-some '(lambda ( x ) (if (< (distance cur (car x)) (cadr x)) (last x))) cil)) ('(62 . 7)))
- )
- (foreach enx hal (entmod (subst col (assoc 62 enx) enx)))
- )
- )
- )
- (princ)
- )
|