SELFCAD Posted May 17, 2012 Posted May 17, 2012 Hi guys, I found this lisp here on the site. I usually work with groups, and i need some modification to this lisp, if possible. I already added a command, REGROUP - RGP, and i need a new command ADD TO GROUP - i mean, to add some objects to an existing group - can be the same initial group (the same name), or can be a new group, but this new group not to have inside the old group and only to creat a group that will incorporate the old group and some new objects. Also, to remove objects from an existing group... Thanks! Quote
pBe Posted May 17, 2012 Posted May 17, 2012 Hi guys,I found this lisp here on the site. I usually work with groups, and i need some modification to this lisp, .... Where's the lisp code SELFCAD? Would it be better if we can HELP you modify with what you already have? rather than asking questions back and forth till somebody here get it right Quote
SELFCAD Posted May 17, 2012 Author Posted May 17, 2012 First half of the code - cannot attach other way, sorry .... ; ============================================================ ; ; Group-UnGroup.Lsp v1.01 (03-30-2011) /by kruuger/ ; ; Included subroutine: ; ; jk: -> by kojacek (http://kojacek.republika.pl/) ; ; LM: -> by Lee Mac (http://lee-mac.com/) ; ; ============================================================ ; ; ; ; History of changes: ; ; ------------------- ; ; 1.00 [03-30-2011] - first release ; ; 1.01 [03-31-2011] - fixed object highlight issue (by kojacek); ; ============================================================ ; (vl-load-com) ; ============================================================ ; ; FUNCTION SYNTAX: ; ; - GRP - group selected objects ; ; - URP - ungroup selected objects ; ; ============================================================ ; (defun C:GP (/ SS AG) (princ "\nSelect object(s) to make an anonymous group: ") (if (setq SS (kr:SSX_SS->VLA (ssget))) (progn (SETQ SELI SS) (vla-AppendItems (setq AG (kr:GRP_CreateAnonymousGroup)) (vlax-Make-Variant (vlax-SafeArray-Fill (vlax-Make-SafeArray vlax-VbObject (cons 0 (1- (length SS))) ) SS ) ) ) (princ (strcat "\n>> Group " (vla-Get-Name AG) " created. <<")) ) (princ "\n** Nothing selected **") ) (princ) (SETQ S SS) ) ; ============================================================ ; (defun C:XGP (/ OLDERR PIC) ;EXPLODE GROUP (setq OLDERR *error* *error* UGR_Error) (if (kr:GRP_GroupList) (progn (kr:SYS_StartUndo) (setq PIC (getvar 'PICKSTYLE)) (setvar 'PICKSTYLE 0) (kr:UGR_GrreadObjectSelect) (kr:SYS_EndUndo) ) (princ "\n** No group(s) in current drawing **") ) (redraw) (if OLDERR (setq *error* OLDERR)) (if PIC (setvar 'PICKSTYLE PIC)) (princ) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ============================================================ ; (defun C:RGP (/ SS AG) ; REGROUP (if SELI (progn (vla-AppendItems (setq AG (kr:GRP_CreateAnonymousGroup)) (vlax-Make-Variant (vlax-SafeArray-Fill (vlax-Make-SafeArray vlax-VbObject (cons 0 (1- (length SELI))) ) SELI ) ) ) (princ (strcat "\n>> Group " (vla-Get-Name AG) " created. <<")) ) (princ "\n** Nothing selected **") ) (princ) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ============================================================ ; ; Error handling ; ; ============================================================ ; (defun UGR_Error (msg) (if (= 8 (logand 8 (getvar "UNDOCTL"))) (kr:SYS_EndUndo) ) (if (or (= msg "Function cancelled")(= msg "quit / exit abort")) (princ (strcat "\nError: " msg)) (princ " *Cancel*") ) (redraw) (if OLDERR (setq *error* OLDERR)) (if PIC (setvar 'PICKSTYLE PIC)) (princ) ) ; ============================================================ ; ; Grread object select ; ; ============================================================ ; (defun kr:UGR_GrreadObjectSelect (/ C GR GD GP EN LST OL) (setq C 1) (while (progn (setq GR (grread nil 13 2) GD (cadr GR) ) (redraw) (if EN (redraw EN 4)) (cond ( (= 25 (car GR)) (princ "\n>> End of UGR routine. <<") nil ) ( (= 5 (car GR)) (setq GP (cadr GR)) (if (setq SS (jk:SSX_SelectByPickBox GP)) (progn (setq SSL (sslength SS)) (cond ( (= SSL 1) ; --- redraw --- kojacek (setq EN (jk:UGR_RedrawObj (ssname SS 0) (car (nentselp GP)) ) ) (if (not (zerop (length (setq LST (kr:GRP_GroupNames EN))))) (progn (LM:DisplayGrText GP (strcat "Belongs to group(s) <Exit>: " "\n" (LM:lst->str LST "/") ) 3 8 8 ) ) (LM:DisplayGrText GP "** Object not belongs to any group(s) <Exit>: **" 2 8 ) ) ( (> SSL 1) ; --- redraw --- kojacek (setq EN (jk:UGR_RedrawObj (setq EN (ssname SS (1- C))) (car (nentselp gp)) ) ) (LM:DisplayGrText GP (strcat "Overlaped object(s): " (itoa SSL) "\nObject selected: " (itoa C) ) 3 8 8 ) (LM:DisplayGrText GP "\n\n+/- Next/Previous object" 94 8 (if (not (zerop (length (setq LST (kr:GRP_GroupNames EN))))) (progn (LM:DisplayGrText GP (strcat "\n\n\nBelongs to group(s) <Exit>: " "\n" (LM:lst->str LST "/") ) 3 8 8 ) ) (progn (LM:DisplayGrText GP "\n\n\n** Not belongs to any group <Exit>: **" 2 8 8 ) ) ) ) ) ) (progn (setq C 1) ; --- redraw --- kojacek (setq EN (jk:UGR_RedrawObj EN (car (nentselp GP)) ) ) (LM:DisplayGrText GP "Select object to explode group <Exit>: " 1 8 ) ) T ) ( (= 3 (car GR)) (if (and EN LST) (progn (kr:UGR_CommandLineUngroup LST) nil ) T ) ) ( (= 2 (car GR)) (cond ( (or (= GD 13) ; Enter (= GD 32) ; Space (= GD 69) ; E (= GD 101) ; e ) (princ "\n>> End of UGR routine. <<") nil ) ( (= GD 43) ; + (if EN (progn (setq C (1+ C)) (if (> C SSL) (setq C 1) ) ) ) T ) ( (= GD 45) ; - (if EN (progn (setq C (1- C)) (if (zerop C) (setq C SSL) ) ) ) T ) ( T ) ) ) ( T ) ) ) ) ) ; ============================================================ ; ; Redraw selected object (by kojacek) ; ; ============================================================ ; (defun jk:UGR_RedrawObj (e n) (if n (progn (if e (redraw e 3)) e) (progn (if e (redraw e 4)) nil) ) ) ; ============================================================ ; ; Command line ungroup ; ; ============================================================ ; (defun kr:UGR_CommandLineUngroup (Lst / GK) (kr:SYS_StartUndo) (if (= (length Lst) 1) (progn (kr:GRP_DeleteGroupbyName (car Lst)) (princ (strcat "\n>> Group " (car Lst) " exploded. <<")) ) (progn (initget (strcat (LM:lst->str Lst " ") " All")) (setq GK (getkword (strcat "\nEnter group name: [" (LM:lst->str Lst "/") "/All] <All>: "))) (if (not GK) (setq GK "All")) (cond ( (= GK "All") (foreach % Lst (kr:GRP_DeleteGroupbyName %) (princ (strcat "\n>> Group " % " exploded. <<")) ) ) ( (member GK Lst) (kr:GRP_DeleteGroupbyName GK) (princ (strcat "\n>> Group " GK " exploded. <<")) ) ) ) ) (kr:SYS_EndUndo) ) ; ************************************************************ ; ; LIBRARY FUNCTION ; ; ************************************************************ ; ; ============================================================ ; ; Retrieves pointers to the active document ; ; ============================================================ ; (defun kr:ACX_ADoc () (or *kr-ADoc (setq *kr-ADoc (vla-Get-ActiveDocument (vlax-Get-Acad-Object))) ) *kr-ADoc ) Quote
SELFCAD Posted May 17, 2012 Author Posted May 17, 2012 And the second half of the code... sorry for the trouble, guys... ; ============================================================ ; ; Create anonymous group ; ; ============================================================ ; (defun kr:GRP_CreateAnonymousGroup () (vla-Add (vla-Get-Groups (kr:ACX_ADoc)) "*" ) ) ; ============================================================ ; ; Delete anonymous group by name ; ; Name [sTR] - group name to delete ; ; ============================================================ ; (defun kr:GRP_DeleteGroupbyName (Name) (vl-Catch-All-Apply '(lambda () (vla-Delete (vla-Item (vla-Get-Groups (kr:ACX_ADoc)) Name ) ) ) ) ) ; ============================================================ ; ; Group list ; ; ============================================================ ; (defun kr:GRP_GroupList (/ LST) (reverse (vlax-for % (vla-get-Groups (kr:ACX_ADoc)) (setq LST (cons (vla-Get-Name %) LST)) ) ) ) ; ============================================================ ; ; Returns a list of group names the ename is a child of, ; ; innermost first in the list (by Michael Puckett) ; ; En [ENAME] - object ename ; ; ============================================================ ; (defun kr:GRP_GroupNames (En / DCT RET) (setq DCT (dictsearch (namedobjdict) "acad_group")) (while (setq DCT (member (assoc 3 DCT) DCT)) (if (member (cons 340 En) (entget (cdadr DCT))) (setq RET (cons (cdar DCT) RET)) ) (setq DCT (cddr DCT)) ) (reverse RET) ) ; ============================================================ ; ; Convert selection set to a list of VLA objects ; ; ============================================================ ; (defun kr:SSX_SS->VLA (Sel / N L#) (repeat (setq N (sslength Sel)) (setq N (1- N) L# (cons (vlax-Ename->vla-Object (ssname Sel N)) L#) ) ) ) ; =============================================================== ; ; Selection set by PICKBOX around point Pt ; ; =============================================================== ; (defun jk:SSX_SelectByPickBox (Pt / c pts) (setq c (/ (* (* (getvar "PICKBOX") (/ (getvar "VIEWSIZE") (cadr (getvar "SCREENSIZE")) ) ) (sqrt 2) ) 2 ) pts (mapcar (function (lambda (%)(trans (polar (trans pt 1 0) (* % pi) c) 0 1)) ) (list 0.25 0.75 1.25 1.75 0.25) ) ) (ssget "_F" pts) ) ; ============================================================ ; ; Start undo mark ; ; ============================================================ ; (defun kr:SYS_StartUndo () (vla-StartUndoMark (kr:ACX_ADoc)) ) ; ============================================================ ; ; End undo mark ; ; ============================================================ ; (defun kr:SYS_EndUndo () (vla-EndUndoMark (kr:ACX_ADoc)) ) ;;-------------------=={ List to String }==-------------------;; ;; ;; ;; Constructs a string from a list of strings separating ;; ;; each element by a specified delimiter ;; ;;------------------------------------------------------------;; ;; Author: Lee Mac, Copyright Š 2010 - www.lee-mac.com ;; ;;------------------------------------------------------------;; ;; Arguments: ;; ;; lst - a list of strings to process ;; ;; del - delimiter by which to separate each list element ;; ;;------------------------------------------------------------;; ;; Returns: String containing each string in the list ;; ;;------------------------------------------------------------;; (defun LM:lst->str ( lst del ) ;; Š Lee Mac 2010 (if (cdr lst) (strcat (car lst) del (LM:lst->str (cdr lst) del)) (car lst) ) ) ;;-----------------------=={ GrText }==-----------------------;; ;; ;; ;; Returns a grvecs pixel vector list relative to the origin ;; ;; encoding the supplied String. ;; ;;------------------------------------------------------------;; ;; Author: Lee Mac, Copyright © 2011 - www.lee-mac.com ;; ;;------------------------------------------------------------;; ;; With thanks to ElpanovEvgeniy for the method of vector ;; ;; encoding to save me a lot of typing ;; ;;------------------------------------------------------------;; ;; Arguments: ;; ;; str - String to be expressed in vector list format. ;; ;; col - Colour of Text (ACI Colour). ;; ;;------------------------------------------------------------;; ;; Returns: GrVecs Pixel Vector List relative to the Origin ;; ;;------------------------------------------------------------;; ;; Version 1.0 - 19-03-2011 ;; ;;------------------------------------------------------------;; (defun LM:GrText ( str col / c i l v y ) (setq v '( (" ") ("\t") ("!" 45 45 65 135) ("\"" 104 134 107 137) ("#" 43 63 46 66 84 94 87 97 115 135 118 138 72 78 103 109) ("$" 25 35 52 52 43 47 58 78 83 87 92 112 123 127 118 118 135 135) ("%" 52 52 63 63 74 74 85 85 96 96 107 107 118 118 129 129 47 48 67 68 56 56 59 59 113 114 133 134 122 122 125 125) ("&" 43 46 49 49 52 72 57 58 67 68 76 76 79 79 83 83 85 85 94 94 103 123 134 136 127 127) ("'" 105 135) ("(" 17 17 26 36 45 105 116 126 137 137) (")" 14 14 25 35 46 106 115 125 134 134) ("*" 73 74 76 77 84 86 92 98 104 106 113 114 116 117) ("+" 55 115 82 84 86 88) ("," 34 35 45 46 55 57) ("-" 83 88) ("." 45 46 55 56) ("/" 52 52 63 63 74 74 85 85 96 96 107 107 118 118 129 129) ("0" 44 47 134 137 53 123 58 128) ("1" 44 48 124 125 56 136) ("2" 43 48 53 53 64 64 75 75 86 86 97 97 108 128 134 137 123 123) ("3" 53 53 44 47 58 88 95 97 108 128 134 137 123 123) ("4" 46 48 57 137 78 78 73 76 83 83 94 94 105 115 126 126) ("5" 53 53 44 47 58 88 94 97 93 133 134 138) ("6" 44 47 58 88 95 97 84 84 53 113 124 124 135 137) ("7" 44 54 65 75 86 96 107 117 128 138 133 137 123 123) ("8" 44 47 94 97 134 137 53 83 58 88 103 123 108 128) ("9" 44 46 57 57 68 128 97 97 84 86 134 137 93 123) (":" 45 46 55 56 95 96 105 106) (";" 34 35 45 46 55 57 95 96 105 106) ("<" 47 47 56 56 65 65 74 74 83 83 94 94 105 105 116 116 127 127) ("=" 73 78 93 98) (">" 43 43 54 54 65 65 76 76 87 87 96 96 105 105 114 114 123 123) ("?" 45 45 65 75 86 86 97 97 108 128 134 137 123 123) ("@" 34 38 43 43 52 112 123 123 134 137 128 128 79 119 68 68 65 66 105 106 77 107 74 94) ("A" 41 43 47 49 52 62 58 68 73 77 83 93 87 97 104 114 106 116 125 135 133 134) ("B" 42 47 53 123 58 88 108 128 94 97 132 137) ("C" 44 47 53 53 58 58 62 112 123 123 134 136 127 127 108 138) ("D" 42 46 57 57 127 127 132 136 68 118 53 123) ("E" 42 48 58 58 94 95 86 106 132 137 128 138 53 123) ("F" 42 45 94 95 86 106 132 137 128 138 53 123) ("G" 44 47 53 53 58 78 86 89 62 112 123 123 134 136 127 127 108 138) ("H" 41 43 47 49 131 133 137 139 93 97 52 122 58 128) ("I" 43 47 133 137 55 125) ("J" 52 62 43 46 57 127 135 139) ("K" 42 44 48 49 132 134 136 138 53 123 84 85 95 95 106 116 127 127 76 76 67 67 58 58) ("L" 42 47 48 58 53 123 132 135) ("M" 41 43 47 49 52 122 58 128 131 132 138 139 103 113 107 117 84 94 86 96 65 75) ("N" 41 44 131 132 136 139 52 122 48 128 113 113 94 104 85 85 66 76 57 57) ("O" 44 46 53 53 57 57 123 123 127 127 134 136 62 112 68 118) ("P" 42 45 84 87 132 137 53 123 98 128) ("Q" 134 136 123 123 127 127 112 62 118 68 53 53 57 57 44 46 35 36 23 24 27 28) ("R" 42 44 48 49 132 137 123 53 128 98 84 87 76 76 67 67 58 58) ("S" 42 62 53 53 44 47 58 78 86 87 93 95 102 122 133 136 127 127 118 138) ("T" 43 47 55 125 132 138 131 121 139 129) ("U" 44 46 52 53 57 58 62 122 68 128 131 133 137 139) ("V" 45 55 64 74 66 76 83 103 87 107 112 122 118 128 131 133 137 139) ("W" 43 63 47 67 72 92 74 94 76 96 78 98 101 121 105 115 109 129 131 132 138 139) ("X" 41 43 47 49 131 133 137 139 52 52 58 58 63 63 67 67 74 74 76 76 85 95 104 104 106 106 113 113 117 117 122 122 128 128) ("Y" 43 47 55 85 94 94 96 96 103 113 107 117 122 122 128 128 131 133 137 139) ("Z" 122 122 58 58 132 138 42 48 128 128 52 52 63 63 74 74 85 95 106 106 117 117) ("[" 15 17 135 137 25 125) ("\\" 122 122 113 113 104 104 95 95 86 86 77 77 68 68 59 59) ("]" 14 16 134 136 26 126) ("^" 102 102 113 113 124 124 135 135 126 126 117 117 108 108) ("_" 21 29) ("`" 125 125 134 134) ("a" 43 46 48 48 52 72 57 97 83 86 103 106) ("b" 42 43 45 46 54 54 57 58 68 98 97 97 105 106 94 94 132 132 53 133) ("c" 44 46 53 53 57 58 52 92 93 93 104 106 97 98 108 108) ("d" 44 45 47 48 52 92 53 53 56 56 93 93 104 105 96 96 136 136 57 137) ("e" 44 46 53 53 57 58 52 92 93 93 104 106 97 98 88 88 73 78) ("f" 43 46 54 124 93 93 95 96 135 137 128 128) ("g" 13 16 22 32 27 97 107 108 66 66 96 96 54 55 104 105 63 63 93 93 62 92) ("h" 42 44 46 48 57 97 53 133 132 132 94 94 105 106) ("i" 43 47 55 105 103 104 135 135) ("j" 22 22 13 15 26 106 104 105 136 136) ("k" 42 44 46 48 53 133 132 132 57 57 66 66 74 75 85 85 96 106 107 108) ("l" 43 47 55 135 133 134) ("m" 41 43 45 46 48 49 52 102 55 105 58 108 101 101 93 93 104 104 96 96 107 107) ("n" 42 44 46 48 53 103 57 97 102 102 94 94 105 106) ("o" 44 46 104 106 53 53 57 57 93 93 97 97 52 92 58 98) ("p" 12 15 23 103 102 102 54 54 94 94 45 46 105 106 57 58 97 98 68 88) ("q" 15 18 27 107 108 108 56 56 96 96 44 45 104 105 52 53 92 93 62 82) ("r" 42 46 54 104 102 103 95 95 106 108 99 99) ("s" 52 52 43 47 58 68 73 77 82 92 103 107 98 98) ("t" 45 47 58 58 54 124 102 103 105 107) ("u" 102 102 106 106 53 103 56 56 44 45 47 107 48 48) ("v" 45 45 54 64 56 66 73 83 77 87 92 92 98 98 101 103 107 109) ("w" 43 53 47 57 62 92 64 84 66 86 68 98 101 103 95 105 107 109) ("x" 42 44 46 48 102 104 106 108 53 53 57 57 93 93 97 97 64 64 66 66 84 84 86 86 75 75) ("y" 12 13 24 24 35 45 54 64 56 66 73 83 77 87 92 92 98 98 101 103 107 109) ("z" 92 92 58 58 102 108 42 48 97 97 86 86 75 75 64 64 53 53) ("{" 16 17 25 65 73 74 85 125 136 137) ("|" 15 135) ("}" 14 15 26 66 77 78 86 126 134 135) ("~" 112 122 133 134 125 125 116 117 128 138) ) ) (eval (list 'defun 'LM:GrText '( str col / c i l v y ) (list 'setq 'v (list 'quote (mapcar (function (lambda ( b ) (cons (car b) (mapcar '(lambda ( a ) (if a (list (rem a 10) (/ a 10)))) (cdr b))) ) ) v ) ) ) '(setq i 0 y 0) '(repeat (strlen str) (cond ( (eq (setq c (substr str 1 1)) " ") (setq i (+ i 9) str (substr str 2)) ) ( (eq c "\t") (setq i (+ i 36) str (substr str 2)) ) ( (eq c "\n") (setq i 0 y (- y 16) str (substr str 2)) ) ( (setq l (cons (mapcar (function (lambda ( a ) (if a (list (+ (car a) i) (+ (cadr a) y))) ) ) (cdr (assoc c v)) ) l ) str (substr str 2) i (+ i 9) ) ) ) ) '(cons col (apply 'append l)) ) ) (LM:GrText str col) ) ; ============================================================ ; ; Display grread text ; ; Point [list] - cursor Point in UCS ; ; String [sTR] - text to display ; ; Color [iNT] - color of text ; ; Xoffset [REAL] - offset from cursor in +ve x-direction ; ; Yoffset [REAL] - offset from cursor in -ve y-direction ; ; ============================================================ ; (defun LM:DisplayGrText (Point String Color Xoffset Yoffset) ( (lambda (s p) (grvecs (LM:GrText String Color) ( (lambda (s x y) (list (list s 0. 0. x ) (list 0. s 0. y ) (list 0. 0. s 0.) (list 0. 0. 0. 1.) ) ) s (+ (car p) (* Xoffset s)) (- (cadr p) (* (+ 16 Yoffset) s)) ) ) ) (/ (getvar 'VIEWSIZE) (cadr (getvar 'SCREENSIZE))) (trans Point 1 3) ) ) (princ "\n>> Loaded Group-UnGroup.lsp (03-2011) /by kruuger/. Type GRP, UGR to invoke <<") (princ) Quote
pBe Posted May 17, 2012 Posted May 17, 2012 First half of the code - cannot attach other way, sorry .... ; ============================================================ ; ; Group-UnGroup.Lsp v1.01 (03-30-2011) /by kruuger/ ; ; Included subroutine: ; ; jk: -> by [b]kojacek [/b](http://kojacek.republika.pl/) ; ; LM: -> by [b]Lee Mac[/b] (http://lee-mac.com/) ; ; kruuger ; MP ; ============================================================ ; ) Oh my, I guess we'll let the original author/s take the first crack at it. I bet it wouldnt take them long to figure out what to do. Quote
Guest kruuger Posted May 25, 2012 Posted May 25, 2012 hi SELFCAD ooo, old stuff i will see what i can do. i'm a liitle busy last few weeks. k. 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.