20
94
86
初露锋芒
;;-----------------------=={ Draw Grid }==--------------------;;;; ;;;; Dynamically generates a grid with a specified number of ;;;; rows and columns. ;;;; Works in all UCS/Views. ;;;;------------------------------------------------------------;;;; Author: Lee Mac, Copyright © 2011 - www.lee-mac.com ;;;;------------------------------------------------------------;;;; Version 1.1 - 13-10-2011 ;;;;------------------------------------------------------------;;(defun c:dgrid nil(command "_.ucs" "_ob" pause) (LM:grid nil)(command "_.ucs" "_p")) ;; Standard(defun c:dgridd nil(command "_.ucs" "_ob" pause) (LM:grid t)(command "_.ucs" "_p")) ;; Dynamic ;;------------------------------------------------------------;;(defun LM:grid (dyn / *error*_getIntwithDefault _getosmode _parsepoint _makegrid _grX g1 gr ls ms os p1 p3 st ) (defun *error* ( msg ) (if (not (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")) (princ (strcat "\nError: " msg)) ) (redraw) (princ) ) (defun _getIntwithDefault ( msg sym ) (initget 6) (set sym (cond ( (getint (strcat msg "<" (itoa (set sym (cond ((eval sym)) ( 2 )) ) ) ">: " ) ) ) ( (eval sym) ) ) ) ) (defun _getosmode ( os / lst ) (foreach mode '( (0001 . "_end") (0002 . "_mid") (0004 . "_cen") (0008 . "_nod") (0016 . "_qua") (0032 . "_int") (0064 . "_ins") (0128 . "_per") (0256 . "_tan") (0512 . "_nea") (1024 . "_qui") (2048 . "_app") (4096 . "_ext") (8192 . "_par") ) (if (not (zerop (logand (car mode) os))) (setq lst (cons "," (cons (cdr mode) lst))) ) ) (apply 'strcat (cdr lst)) ) (defun _parsepoint ( pt str / _str->lst lst ) (defun _str->lst ( str / pos ) (if (setq pos (vl-string-position 44 str)) (cons (substr str 1 pos) (_str->lst (substr str (+ pos 2)))) (list str) ) ) (if (wcmatch str "`@*") (setq str (substr str 2)) (setq pt '(0.0 0.0 0.0)) ) (if (and (setq lst (mapcar 'distof (_str->lst str))) (vl-every 'numberp lst) (< 1 (length lst) 4) ) (mapcar '+ pt lst) ) )(defun _makegrid ( p1 p3 mode / hd vd hs vs pt k ) (setq hd (- (car p3) (car p1)) vd (- (cadr p3) (cadr p1)) hs (/ hd *cols*) vs (/ vd *rows*) ) (cond ( (= 5 mode) (setq pt p1) (repeat (1+ *cols*) (grdraw pt (list (car pt) (+ (cadr pt) vd)) 1 1) (setq pt (list (+ (car pt) hs) (cadr pt))) ) (setq pt p1) (repeat (1+ *rows*) (grdraw pt (list (+ (car pt) hd) (cadr pt)) 1 1) (setq pt (list (car pt) (+ (cadr pt) vs))) ) t )