whosa Posted May 3, 2017 Posted May 3, 2017 Hi I would like to divide a Rectangle Into Equal small rectangles by lisp. Should be work like: 1st click: select the rectangle 2nd click: ask n. of divisions and after the lisp should draw the small rectangles inside the original one and delete the original rectangle Thanks Quote
Dadgad Posted May 3, 2017 Posted May 3, 2017 I can't help you with the lisp, but I believe, that you will need to specify the number of divisions along each axis. Quote
whosa Posted May 3, 2017 Author Posted May 3, 2017 Thanks, This work quite well but, before to use it, I need to change each time the ucs to object. Quote
Dadgad Posted May 3, 2017 Posted May 3, 2017 Thanks, This work quite well but, before to use it, I need to change each time the ucs to object. On Lee's site, it says that it works in all UCS/Views. I suspect that you may be mistaken about having to reset your UCS to OBject. You do understand that you can also run it without a pre-existing rectangle, or other geometry? Quote
whosa Posted May 3, 2017 Author Posted May 3, 2017 It is true. This lisp put the grid orthogonal to the current Ucs There is a problem. For example: You have 30 rectangles with different orientations/rotations to divide. You need to set the ucs object in each rectangle and then use the DGrid / DGridD lisp. This mean 30 times to type: ucs -> object -> pick the rectangle -> DGrid and after again ucs -> object -> pick the rectangle -> DGrid etc.... Quote
Dadgad Posted May 3, 2017 Posted May 3, 2017 Now I understand what you meant, you need to reset your UCS for subsequent rectangles, which are not in the same UCS. That makes more sense. Quote
whosa Posted May 3, 2017 Author Posted May 3, 2017 (edited) I fixed the UCS problem.... Now I can choose the UCS before to draw the grid and, after that, going back to the last UCS. Maybe this code format it is not "nice" but work well. My knowledge of the lisp code is limited. Now I would like to: 1. just remove the the external line of the grid I don't understand what I have to do ;;-----------------------=={ 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[color="red"](command "_.ucs" "_ob" pause)[/color] (LM:grid nil)[color="red"](command "_.ucs" "_p")[/color]) ;; Standard (defun c:dgridd nil[color="red"](command "_.ucs" "_ob" pause)[/color] (LM:grid t)[color="red"](command "_.ucs" "_p")[/color]) ;; 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 ) (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 ) ( (= 3 mode) (setq pt p1) (repeat (1+ *cols*) (entmakex (list (cons 0 "LINE") (cons 10 (trans pt 1 0)) (cons 11 (trans (list (car pt) (+ (cadr pt) vd)) 1 0)) ) ) (setq pt (list (+ (car pt) hs) (cadr pt))) ) (setq pt p1) (repeat (1+ *rows*) (entmakex (list (cons 0 "LINE") (cons 10 (trans pt 1 0)) (cons 11 (trans (list (+ (car pt) hd) (cadr pt)) 1 0)) ) ) (setq pt (list (car pt) (+ (cadr pt) vs))) ) nil ) ) ) (defun _grX ( p s c / -s r q ) (setq -s (- s) r (/ (getvar 'VIEWSIZE) (cadr (getvar 'SCREENSIZE))) p (trans p 1 3) ) (grvecs (list c (list -s -s) (list s s) (list -s (1+ -s)) (list (1- s) s) (list (1+ -s) -s) (list s (1- s)) (list -s s) (list s -s) (list -s (1- s)) (list (1- s) -s) (list (1+ -s) s) (list s (1+ -s)) ) (list (list r 0. 0. (car p)) (list 0. r 0. (cadr p)) (list 0. 0. r 0.) (list 0. 0. 0. 1.) ) ) p ) (_getIntwithDefault "\nSpecify Number of Rows " '*rows*) (_getIntwithDefault "\nSpecify Number of Columns " '*cols*) (if (setq p1 (getpoint "\nSpecify Base Point: ")) (cond ( dyn (setq os (_getosmode (getvar 'OSMODE)) st "" ) (princ (setq ms "\nSpecify Opposite Corner: ")) (while (progn (setq gr (grread t 15 0) g1 (car gr) p3 (cadr gr)) (cond ( (member g1 '(3 5)) (redraw) (if (and (zerop (logand 16384 (getvar 'OSMODE))) (setq op (osnap p3 os)) ) (_grX (setq p3 op) 6 20) ) (_makegrid p1 p3 g1) ) ( (= g1 2) (cond ( (= 6 p3) (if (zerop (logand 16384 (setvar 'OSMODE (boole 6 16384 (getvar 'OSMODE))))) (princ (strcat "\n<Osnap on>" ms st)) (princ (strcat "\n<Osnap off>" ms st)) ) ) ( (= 8 p3) (if (< 0 (strlen st)) (progn (princ (vl-list->string '(8 32 )) (setq st (substr st 1 (1- (strlen st)))) ) ) t ) ( (< 32 p3 127) (setq st (strcat st (princ (chr p3)))) ) ( (member p3 '(13 32)) (if (< 0 (strlen st)) (if (setq p3 (_parsepoint p1 st)) (_makegrid p1 p3 3) (princ (strcat (setq st "") "\n2D / 3D Point Required." ms)) ) ) ) ) ) ) ) ) ) ( (setq p3 ((if (zerop (getvar 'WORLDUCS)) getpoint getcorner) p1 "\nSpecify Opposite Corner: ")) (_makegrid p1 p3 3) ) ) ) (redraw) (princ) ) (vl-load-com) (princ) ;;------------------------------------------------------------;; ;; End of File ;; ;;------------------------------------------------------------;; Edited May 3, 2017 by whosa Quote
marko_ribar Posted May 3, 2017 Posted May 3, 2017 Replace (_makegrid) sub function with this : (defun _makegrid ( p1 p3 mode / hd vd hs vs pt [color=red]k[/color] ) (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 ) ( (= 3 mode) (setq pt p1) [color=red] (setq k 0) [/color] (repeat (1+ *cols*) [color=red] (setq k (1+ k)) (if (or (/= k 1) (/= k (1+ *cols*))) [/color] (entmakex (list (cons 0 "LINE") (cons 10 (trans pt 1 0)) (cons 11 (trans (list (car pt) (+ (cadr pt) vd)) 1 0)) ) ) [color=red] ) [/color] (setq pt (list (+ (car pt) hs) (cadr pt))) ) (setq pt p1) [color=red] (setq k 0) [/color] (repeat (1+ *rows*) [color=red] (setq k (1+ k)) (if (or (/= k 1) (/= k (1+ *rows*))) [/color](entmakex (list (cons 0 "LINE") (cons 10 (trans pt 1 0)) (cons 11 (trans (list (+ (car pt) hd) (cadr pt)) 1 0)) ) ) [color=red] ) [/color] (setq pt (list (car pt) (+ (cadr pt) vs))) ) nil ) ) ) Quote
whosa Posted May 3, 2017 Author Posted May 3, 2017 I tried your code but seems didn't work. The red lines (external lines of the grid) are still there. ;;-----------------------=={ 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 ) ( (= 3 mode) (setq pt p1) (setq k 0) (repeat (1+ *cols*) (setq k (1+ k)) (if (or (/= k 1) (/= k (1+ *cols*))) (entmakex (list (cons 0 "LINE") (cons 10 (trans pt 1 0)) (cons 11 (trans (list (car pt) (+ (cadr pt) vd)) 1 0)) ) ) ) (setq pt (list (+ (car pt) hs) (cadr pt))) ) (setq pt p1) (setq k 0) (repeat (1+ *rows*) (setq k (1+ k)) (if (or (/= k 1) (/= k (1+ *rows*))) (entmakex (list (cons 0 "LINE") (cons 10 (trans pt 1 0)) (cons 11 (trans (list (+ (car pt) hd) (cadr pt)) 1 0)) ) ) ) (setq pt (list (car pt) (+ (cadr pt) vs))) ) nil ) ) ) (defun _grX ( p s c / -s r q ) (setq -s (- s) r (/ (getvar 'VIEWSIZE) (cadr (getvar 'SCREENSIZE))) p (trans p 1 3) ) (grvecs (list c (list -s -s) (list s s) (list -s (1+ -s)) (list (1- s) s) (list (1+ -s) -s) (list s (1- s)) (list -s s) (list s -s) (list -s (1- s)) (list (1- s) -s) (list (1+ -s) s) (list s (1+ -s)) ) (list (list r 0. 0. (car p)) (list 0. r 0. (cadr p)) (list 0. 0. r 0.) (list 0. 0. 0. 1.) ) ) p ) (_getIntwithDefault "\nSpecify Number of Rows " '*rows*) (_getIntwithDefault "\nSpecify Number of Columns " '*cols*) (if (setq p1 (getpoint "\nSpecify Base Point: ")) (cond ( dyn (setq os (_getosmode (getvar 'OSMODE)) st "" ) (princ (setq ms "\nSpecify Opposite Corner: ")) (while (progn (setq gr (grread t 15 0) g1 (car gr) p3 (cadr gr)) (cond ( (member g1 '(3 5)) (redraw) (if (and (zerop (logand 16384 (getvar 'OSMODE))) (setq op (osnap p3 os)) ) (_grX (setq p3 op) 6 20) ) (_makegrid p1 p3 g1) ) ( (= g1 2) (cond ( (= 6 p3) (if (zerop (logand 16384 (setvar 'OSMODE (boole 6 16384 (getvar 'OSMODE))))) (princ (strcat "\n<Osnap on>" ms st)) (princ (strcat "\n<Osnap off>" ms st)) ) ) ( (= 8 p3) (if (< 0 (strlen st)) (progn (princ (vl-list->string '(8 32 )) (setq st (substr st 1 (1- (strlen st)))) ) ) t ) ( (< 32 p3 127) (setq st (strcat st (princ (chr p3)))) ) ( (member p3 '(13 32)) (if (< 0 (strlen st)) (if (setq p3 (_parsepoint p1 st)) (_makegrid p1 p3 3) (princ (strcat (setq st "") "\n2D / 3D Point Required." ms)) ) ) ) ) ) ) ) ) ) ( (setq p3 ((if (zerop (getvar 'WORLDUCS)) getpoint getcorner) p1 "\nSpecify Opposite Corner: ")) (_makegrid p1 p3 3) ) ) ) (redraw) (princ) ) (vl-load-com) (princ) ;;------------------------------------------------------------;; ;; End of File ;; ;;------------------------------------------------------------;; Quote
marko_ribar Posted May 3, 2017 Posted May 3, 2017 I see now... Change in my mod this : (if (or (/= k 1) (/= k (1+ *cols*))) ... (if (or (/= k 1) (/= k (1+ *rows*))) To this : (if ([b][color=red]and[/color][/b] (/= k 1) (/= k (1+ *cols*))) ... (if ([b][color=red]and[/color][/b] (/= k 1) (/= k (1+ *rows*))) Sorry for mistake, I was hurrying... Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.