3dwannab Posted December 3, 2015 Posted December 3, 2015 (edited) Hi all, good day. I have this script below which copies along the x and y axis with two separate commands. CX and CY. 2 issues. I need it to regen every time I copy (There's a bug when I copy leaders at the moment) (command ".regen") has no effect. Copy multiple, After first copy the restraint no longer take effect. Thanks for any help. ;;----------------------------------------------------------------------;; (defun c:CX () (setq ss (ssget)) (command "._copy" ss "" "M" pause ".yz" "@" pause) (command ".regen") (setq ss nil);; add this line to clean the selection (princ) ) (defun c:CY () (setq ss (ssget)) (command "._copy" ss "" "M" pause ".xz" "@" pause) (command ".regen") (setq ss nil);; add this line to clean the selection (princ) ) ;;----------------------------------------------------------------------;; (vl-load-com) (princ (strcat "\n:: Lock_Copy_X&Y.lsp loaded ::" "\n:: Invoke by typing 'CX' (Copy on X-axis) or 'CY' (Copy on Y-axis) ::" ) ) (princ) ;;----------------------------------------------------------------------;; ;; End of File ;; ;;----------------------------------------------------------------------;; GOT IT ANSWERED HERE (POST NO.4) by Roy_043: http://www.cadtutor.net/forum/showthread.php?94798-Copy-on-X-axis-only-and-Y-axis-only&p=699099&viewfull=1#post699099 Edited March 14, 2018 by 3dwannab Quote
3dwannab Posted March 13, 2018 Author Posted March 13, 2018 Just giving this a little bump Thanks. Quote
BIGAL Posted March 14, 2018 Posted March 14, 2018 Hit you in the face message (Alert ":: Lock_Copy_X&Y.lsp loaded ::\n\n\n:: Invoke by typing 'CX' (Copy on X-axis) or 'CY' (Copy on Y-axis) ::" ) 2nd suggestion (defun c:CX ( / ss) this localises ss so no need for set nil If this is something your doing a lot you could use a smart reactor I would just type x100 it would then ask for objects and move accordingly type any number after the X x234 x45-6 there is a reason for 45-6 as the period causes an error in the routine. ; Enter the filet radius as part of a command line entry f100 offset O234 circle c123-45 ; note - is used for decimal point ; original code and methology by Alan H ; assistance and code that worked by Lee-Mac ; OCT 2015 ( (lambda nil (vl-load-com) (foreach obj (cdar (vlr-reactors :vlr-command-reactor)) (if (= "fillet-reactor" (vlr-data obj)) (vlr-remove obj) ) ) (vlr-command-reactor "fillet-reactor" '((:vlr-unknowncommand . fillet-reactor-callback))) ) ) (defun filletrad ( / rad) (setq rad (distof (substr com 2) 2)) (if (<= 0.0 rad) (progn (setvar 'filletrad rad) (vla-sendcommand fillet-reactor-acdoc "_.fillet ") ) ) ) (defun makecirc ( / rad radd) (setq rad (distof (substr com 2) 2)) (if (<= 0.0 rad) (progn (setvar 'circlerad rad) (setq pt (getpoint "Pick centre pt")) (vla-sendcommand fillet-reactor-acdoc "_.Circle !pt ") ) ) ) (defun offdist ( / dist) (setq dist (distof (substr com 2) 2)) (if (<= 0.0 dist) (progn (setvar 'offsetdist dist) (vla-sendcommand fillet-reactor-acdoc "_.Offset ") ) ) ) (defun pipeoff ( / dist) (setq dist (distof (substr com 2) 2)) (if (<= 0.0 dist) (progn (setq poff (strcat "P" (rtos dist 2 0))) (if (not poff)(load "Pipe offsets")) (vla-sendcommand fillet-reactor-acdoc poff) ) ) ) (defun projopen ( / Proj year) (setq year (atoi (substr com 2 4))) (if (< year 2014) (setq projno (strcat "EXPLORER \\\\cogg.local\\fs\\LCFC3\\DESIGN\\DATA\\" (substr com 2 4) " Projects\\" (substr com 2) "[url="file://\\Design\\"]\\Design\\[/url]")) (setq projno (strcat "EXPLORER P:\\" (rtos year 2 0) " Projects\\" (substr com 2) "[url="file://\\Design\\"]\\Design\\[/url]")) ) (vla-sendcommand fillet-reactor-acdoc (STARTAPP projno)) ) (defun fillet-reactor-callback ( obj com ) (setq com (vl-string-translate "-" "." (strcase (car com)))) (cond ( (and (wcmatch com "~*[~F.0-9]*") (wcmatch com "F*") (wcmatch com "~F*F*") (wcmatch com "~*.*.*") ) ; and (filletrad) ) ( (and (wcmatch com "~*[~C.0-9]*") (wcmatch com "C*") (wcmatch com "~C*C*") (wcmatch com "~*.*.*") ) ;and (makecirc) ) ( (and (wcmatch com "~*[~O.0-9]*") (wcmatch com "O*") (wcmatch com "~O*O*") (wcmatch com "~*.*.*") ) ; and (offdist) ) ( (and (wcmatch com "~*[~D.0-9]*") (wcmatch com "D*") (wcmatch com "~D*D*") (wcmatch com "~*.*.*") ) ; and (projopen) ) ( (and (wcmatch com "~*[~P.0-9]*") (wcmatch com "P*") (wcmatch com "~P*P*") (wcmatch com "~*.*.*") ) ; and (pipeoff) ) ) ; master cond ) ; defun (or fillet-reactor-acdoc (setq fillet-reactor-acdoc (vla-get-activedocument (vlax-get-acad-object))) ) Quote
Roy_043 Posted March 14, 2018 Posted March 14, 2018 When using the _Multiple option of the _Copy command you obviously cannot rely on a fixed number of arguments for the command function. (defun c:test ( / ss) (setq ss (ssget)) (command "._copy" ss "" "_multiple" pause) (while (/= 0 (getvar 'cmdactive)) (command ".yz" "@" pause) ) (princ) ) Quote
FranknBeans Posted March 14, 2018 Posted March 14, 2018 why not use the copy command normally with ortho mode on? Quote
3dwannab Posted March 14, 2018 Author Posted March 14, 2018 why not use the copy command normally with ortho mode on? Because see this. I have so many uses for it. Try snapping perpendicular to a point in x or y. Why did AD add-in a point filters for x, y & z if they didn't want us to use it? When using the _Multiple option of the _Copy command you obviously cannot rely on a fixed number of arguments for the command function. (defun c:test ( / ss) (setq ss (ssget)) (command "._copy" ss "" "_multiple" pause) (while (/= 0 (getvar 'cmdactive)) (command ".yz" "@" pause) ) (princ) ) This worked absolutly perfect. Thank you. Neat trick with the while. I'll keep this in mind. Hit you in the face message (Alert ":: Lock_Copy_X&Y.lsp loaded ::\n\n\n:: Invoke by typing 'CX' (Copy on X-axis) or 'CY' (Copy on Y-axis) ::" ) 2nd suggestion (defun c:CX ( / ss) this localises ss so no need for set nil If this is something your doing a lot you could use a smart reactor I would just type x100 it would then ask for objects and move accordingly type any number after the X x234 x45-6 there is a reason for 45-6 as the period causes an error in the routine. ; Enter the filet radius as part of a command line entry f100 offset O234 circle c123-45 ; note - is used for decimal point ; original code and methology by Alan H ; assistance and code that worked by Lee-Mac ; OCT 2015 ( (lambda nil (vl-load-com) (foreach obj (cdar (vlr-reactors :vlr-command-reactor)) (if (= "fillet-reactor" (vlr-data obj)) (vlr-remove obj) ) ) (vlr-command-reactor "fillet-reactor" '((:vlr-unknowncommand . fillet-reactor-callback))) ) ) (defun filletrad ( / rad) (setq rad (distof (substr com 2) 2)) (if (<= 0.0 rad) (progn (setvar 'filletrad rad) (vla-sendcommand fillet-reactor-acdoc "_.fillet ") ) ) ) (defun makecirc ( / rad radd) (setq rad (distof (substr com 2) 2)) (if (<= 0.0 rad) (progn (setvar 'circlerad rad) (setq pt (getpoint "Pick centre pt")) (vla-sendcommand fillet-reactor-acdoc "_.Circle !pt ") ) ) ) (defun offdist ( / dist) (setq dist (distof (substr com 2) 2)) (if (<= 0.0 dist) (progn (setvar 'offsetdist dist) (vla-sendcommand fillet-reactor-acdoc "_.Offset ") ) ) ) (defun pipeoff ( / dist) (setq dist (distof (substr com 2) 2)) (if (<= 0.0 dist) (progn (setq poff (strcat "P" (rtos dist 2 0))) (if (not poff)(load "Pipe offsets")) (vla-sendcommand fillet-reactor-acdoc poff) ) ) ) (defun projopen ( / Proj year) (setq year (atoi (substr com 2 4))) (if (< year 2014) (setq projno (strcat "EXPLORER \\\\cogg.local\\fs\\LCFC3\\DESIGN\\DATA\\" (substr com 2 4) " Projects\\" (substr com 2) "[url="file://\\Design\\"]\\Design\\[/url]")) (setq projno (strcat "EXPLORER P:\\" (rtos year 2 0) " Projects\\" (substr com 2) "[url="file://\\Design\\"]\\Design\\[/url]")) ) (vla-sendcommand fillet-reactor-acdoc (STARTAPP projno)) ) (defun fillet-reactor-callback ( obj com ) (setq com (vl-string-translate "-" "." (strcase (car com)))) (cond ( (and (wcmatch com "~*[~F.0-9]*") (wcmatch com "F*") (wcmatch com "~F*F*") (wcmatch com "~*.*.*") ) ; and (filletrad) ) ( (and (wcmatch com "~*[~C.0-9]*") (wcmatch com "C*") (wcmatch com "~C*C*") (wcmatch com "~*.*.*") ) ;and (makecirc) ) ( (and (wcmatch com "~*[~O.0-9]*") (wcmatch com "O*") (wcmatch com "~O*O*") (wcmatch com "~*.*.*") ) ; and (offdist) ) ( (and (wcmatch com "~*[~D.0-9]*") (wcmatch com "D*") (wcmatch com "~D*D*") (wcmatch com "~*.*.*") ) ; and (projopen) ) ( (and (wcmatch com "~*[~P.0-9]*") (wcmatch com "P*") (wcmatch com "~P*P*") (wcmatch com "~*.*.*") ) ; and (pipeoff) ) ) ; master cond ) ; defun (or fillet-reactor-acdoc (setq fillet-reactor-acdoc (vla-get-activedocument (vlax-get-acad-object))) ) Thanks. I didn't look into reactor as Roy_043 anwswered. Thanks Here's my CX and CY command. Thanks again Roy_043. ;;----------------------------------------------------------------------;; ; Answer on how to fix multiple copy by Roy_043 14.03.2018: http://www.cadtutor.net/forum/showthread.php?94798-Copy-on-X-axis-only-and-Y-axis-only&p=699099&viewfull=1#post699099 ; Credit to Roy_043 (defun c:CX ( / ss) (setq ss (ssget)) (command "._copy" ss "" "_multiple" pause) (while (/= 0 (getvar 'cmdactive)) (command ".yz" "@" pause) ) (princ) ) (defun c:CY ( / ss) (setq ss (ssget)) (command "._copy" ss "" "_multiple" pause) (while (/= 0 (getvar 'cmdactive)) (command ".xz" "@" pause) ) (princ) ) ;;----------------------------------------------------------------------;; (vl-load-com) (princ (strcat "\n:: Lock_Copy_X&Y.lsp loaded ::" "\n:: Invoke by typing 'CX' (Copy on X-axis) or 'CY' (Copy on Y-axis) ::" ) ) (princ) ;;----------------------------------------------------------------------;; ;; End of File ;; ;;----------------------------------------------------------------------;; Quote
DraftPunk Posted April 12, 2018 Posted April 12, 2018 Great Lisp! I just started to started studying autolisp programming, I'll try to modify including "CZ" function and "CXY", "CXZ", "CYZ". Do you think that it'll work also for the move just replacing the _copy with _move? Thanks a lot! Quote
3dwannab Posted April 12, 2018 Author Posted April 12, 2018 Here's my move LISP. ;;----------------------------------------------------------------------;; (defun c:MX ( / ss) (setq *error* SS:error) (SS:startundo) (setq cmde (getvar "cmdecho")) (setq os (getvar "osmode")) (setq orthom (getvar "orthomode")) (setvar 'cmdecho 0) (setvar 'osmode 83) (setvar 'orthomode 1) (setq ss (ssget)) (command "._move" ss "" pause ".yz" "@" pause) (setq ss nil) (*error* nil) (princ) ) (defun c:MY ( / ss) (setq *error* SS:error) (SS:startundo) (setq cmde (getvar "cmdecho")) (setq os (getvar "osmode")) (setq orthom (getvar "orthomode")) (setvar 'cmdecho 0) (setvar 'osmode 83) (setvar 'orthomode 1) (setq ss (ssget)) (command "._move" ss "" pause ".xz" "@" pause) (setq ss nil) (*error* nil) (princ) ) (defun SS:error (errmsg) (and acDoc (vla-EndUndoMark acDoc)) (and errmsg (not (wcmatch (strcase errmsg) "*CANCEL*,*EXIT*")) (princ (strcat "\n<< Error: " errmsg " >>")) ) (setvar 'cmdecho cmde) (setvar 'osmode os) (setvar 'orthomode orthom) ) (defun SS:startundo () (setq acDoc (vla-get-ActiveDocument (vlax-get-acad-object))) (or (vla-EndUndoMark acDoc) (vla-StartUndoMark acDoc)) ) (vl-load-com) (princ (strcat "\nLock_Move_X&Y.lsp loaded" "\nInvoke by typing 'MX' (Move on X-axis) or 'MY' (Move on Y-axis)" ) ) (princ) ;;----------------------------------------------------------------------;; ;; End of File ;; ;;----------------------------------------------------------------------;; Quote
3dwannab Posted April 12, 2018 Author Posted April 12, 2018 (edited) Here's my stretch one with other goodies in there. ; Stretch All X (defun c:SX ( / ss) (setq *error* SS:error) (SS:startundo) (setq cmde (getvar "cmdecho")) (setq os (getvar "osmode")) (setq orthom (getvar "orthomode")) (setvar 'cmdecho 0) (setvar 'osmode 83) (setvar 'orthomode 1) (progn (setq ss (last (ssgetfirst))) (if (not ss) (setq ss (ssget)) ) (if ss (progn (command "._stretch" ss "" PAUSE ".yz" "@") (setq ss nil) ) (princ "\nUser Cancelled Command") ) ) (*error* nil) (princ) ) ; Stretch All Y (defun c:SY ( / ss) (setq *error* SS:error) (SS:startundo) (setq cmde (getvar "cmdecho")) (setq os (getvar "osmode")) (setq orthom (getvar "orthomode")) (setvar 'cmdecho 0) (setvar 'osmode 83) (setvar 'orthomode 1) (progn (setq ss (last (ssgetfirst))) (if (not ss) (setq ss (ssget)) ) (if ss (progn (command "._stretch" ss "" PAUSE ".xz" "@") (setq ss nil) ) (princ "\nUser Cancelled Command") ) ) (*error* nil) (princ) ) ; Stretch All MLeaders (defun c:SL ( / ss) (setq *error* SS:error) (SS:startundo) (setq cmde (getvar "cmdecho")) (setq os (getvar "osmode")) (setq orthom (getvar "orthomode")) (setvar 'cmdecho 0) (setvar 'osmode 0) (setvar 'orthomode 1) (progn (setq ss (last (ssgetfirst))) (if (not ss) (setq ss (ssget '((0 . "MULTILEADER")))) ) (if ss (progn (command "_.stretch" ss "" "_non" PAUSE "_non" PAUSE) (setq ss nil) ) (princ "\nUser Cancelled Command") ) ) (*error* nil) (princ) ) ; Stretch All Leaders X (defun c:SLX ( / ss) (setq *error* SS:error) (SS:startundo) (setq cmde (getvar "cmdecho")) (setq os (getvar "osmode")) (setq orthom (getvar "orthomode")) (setvar 'cmdecho 0) (setvar 'osmode 83) (setvar 'orthomode 1) (progn (setq ss (last (ssgetfirst))) (if (not ss) (setq ss (ssget '((0 . "MULTILEADER")))) ) (if ss (progn (command "._stretch" ss "" PAUSE ".yz" "@") (setq ss nil) ) (princ "\nUser Cancelled Command") ) ) (*error* nil) (princ) ) ; Stretch All Leaders Y (defun c:SLY ( / ss) (setq *error* SS:error) (SS:startundo) (setq cmde (getvar "cmdecho")) (setq os (getvar "osmode")) (setq orthom (getvar "orthomode")) (setvar 'cmdecho 0) (setvar 'osmode 83) (setvar 'orthomode 1) (progn (setq ss (last (ssgetfirst))) (if (not ss) (setq ss (ssget '((0 . "MULTILEADER")))) ) (if ss (progn (command "._stretch" ss "" PAUSE ".xz" "@") (setq ss nil) ) (princ "\nUser Cancelled Command") ) ) (*error* nil) (princ) ) ; Stretch Important (defun c:SIM ( / ss) (setq *error* SS:error) (SS:startundo) (setq cmde (getvar "cmdecho")) (setq os (getvar "osmode")) (setq orthom (getvar "orthomode")) (setvar 'cmdecho 0) (setvar 'osmode 83) (setvar 'orthomode 1) (progn (setq ss (last (ssgetfirst))) (if (not ss) (setq ss (ssget '((0 . "~HATCH") (0 . "~TEXT") (0 . "~MTEXT") (8 . "~*text") (8 . "~*note") (8 . "~*dim")))) ) (if ss (progn (command "_.stretch" ss "" PAUSE PAUSE) (setq ss nil) ) (princ "\nUser Cancelled Command") ) ) (*error* nil) (princ) ) ; Stretch dims only (defun c:SD ( / ss) (setq *error* SS:error) (SS:startundo) (setq cmde (getvar "cmdecho")) (setq os (getvar "osmode")) (setq orthom (getvar "orthomode")) (setvar 'cmdecho 0) (setvar 'osmode 83) (setvar 'orthomode 1) (progn (setq ss (last (ssgetfirst))) (if (not ss) (setq ss (ssget '((0 . "DIMENSION")))) ) (if ss (progn (command "_.stretch" ss "" PAUSE PAUSE) (setq ss nil) ) (princ "\nUser Cancelled Command") ) ) (*error* nil) (princ) ) (defun SS:error (errmsg) (and acDoc (vla-EndUndoMark acDoc)) (and errmsg (not (wcmatch (strcase errmsg) "*CANCEL*,*EXIT*")) (princ (strcat "\n<< Error: " errmsg " >>")) ) (setvar 'cmdecho cmde) (setvar 'osmode os) (setvar 'orthomode orthom) ) (defun SS:startundo () (setq acDoc (vla-get-ActiveDocument (vlax-get-acad-object))) (or (vla-EndUndoMark acDoc) (vla-StartUndoMark acDoc)) ) (vl-load-com) (princ (strcat "\n3dwannab_Stretch_Commands.lsp Loaded" "\nInvoke by typing 'S*'" ) ) (princ) ;;----------------------------------------------------------------------;; ;; End of File ;; ;;----------------------------------------------------------------------;; Edited April 12, 2018 by 3dwannab 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.