KRBeckman Posted March 4, 2010 Posted March 4, 2010 Anybody know of a template that uses entmake functions to create a block, insert the block back into the drawing, and modify any attributes that are allready in the drawing and are created as part of the block? Quote
KRBeckman Posted March 4, 2010 Author Posted March 4, 2010 Thought it might help to provide what I'm trying to replace: (defun c:bb () (setq old_osm (getvar 'osmode)) (setvar 'osmode 0) (setq spn (getstring "\nPlease input the Specials Part Number: ") 2d "-2D" 3d "-3D") (command "-purge" "blocks" "*" "n") (setvar "clayer" "0") (command "ucs" "world") (command "-layer" "freeze" "A-FURN-P*" "freeze" "Temp" ""); hide everything that needs to be excluded from 3-d block (command "-block" (strcat spn 3d) '(0.0 0.0 0.0) "all" "") (command "-insert" (strcat spn 3d) '(0.0 0.0 0.0) "" "" "") (command "chprop" "l" "" "la" "Temp" ""); hide 3-d block so its not included in 2-d block (command "-layer" "thaw" "A-FURN-P*" ""); un-hide everything that needs to be in 2-d block (command "-block" (strcat spn 2d) '(0.0 0.0 0.0) "all" "") (command "-insert" (strcat spn 2d) '(0.0 0.0 0.0) "" "" "") (command "-layer" "thaw" "*" ""); un-hide 3-d block (command "chprop" "all" "" "la" "0" ""); put both blocks on 0 layer (setvar 'osmode old_osm) (princ)) This works probably 75% of the time flawlessly, however the other 25% of the time the blocks don't line up ontop of each other... the "-3d" block is inserted to (0,0,0), but I think when the block is first created its not selecting (0,0,0) as the basepoint (I've heard autolisp's point selection can be shotty). Any help would be greatly appriciated. Quote
Lee Mac Posted March 4, 2010 Posted March 4, 2010 Something like this but with attributes too? (defun c:obj2blk (/ ss bNme i pt ent) ;; Lee Mac ~ 11.02.10 (cond ( (not (setq ss (ssget '((-4 . "<NOT") (0 . "INSERT,POLYLINE,VIEWPORT") (-4 . "NOT>")))))) ( (while (progn (setq bNme (getstring t "\nSpecify Block Name: ")) (cond ( (not (snvalid bNme)) (princ "\n** Invalid Block Name **")) ( (tblsearch "BLOCK" bNme) (princ "\n** Block Already Exists **")))))) ( (not (setq i -1 pt (getpoint "\nSpecify Base Point: ")))) (t (entmake (list (cons 0 "BLOCK") (cons 10 pt) (cons 2 bNme) (cons 70 0))) (while (setq ent (ssname ss (setq i (1+ i)))) (entmake (entget ent)) (entdel ent)) (entmake (list (cons 0 "ENDBLK") (cons 8 "0"))) (entmake (list (cons 0 "INSERT") (cons 2 bNme) (cons 10 pt))))) (princ)) Quote
KRBeckman Posted March 4, 2010 Author Posted March 4, 2010 yeah, for the most part... a variable will allready be defined to the block name, the insertion point will always be (0,0,0), I need to be able to filter what goes into each block depending on what the first 9 charactures of the layer are (everything starting with "A-FURN-3-" go in the 3-d block and everything starting with "A-FURN-P-" go in the 2-d block), and like you said I need to be able to edit the attribute definitions after the block is created. I did look at this earlier today, I knew it was close... just don't know what/how to change to get it to work for me. Quote
KRBeckman Posted March 10, 2010 Author Posted March 10, 2010 Hey Lee, in this line: (cond ( (not (setq ss (ssget '((-4 . "<NOT") (0 . "INSERT,POLYLINE,VIEWPORT") (-4 . "NOT>")))))) What is the purpose of the (-4 . "")? Quote
Lee Mac Posted March 10, 2010 Posted March 10, 2010 Hey Lee, in this line: (cond ( (not (setq ss (ssget '((-4 . "<NOT") (0 . "INSERT,POLYLINE,VIEWPORT") (-4 . "NOT>")))))) What is the purpose of the (-4 . "")? I'm excluding those objects from the selection set You can use logical operators in ssget filter lists, including: Quote
David Bethel Posted March 10, 2010 Posted March 10, 2010 This should pick up the sequential entities as well: [b][color=BLACK]([/color][/b]defun c:ent2blk [b][color=FUCHSIA]([/color][/b]/ bn pt i ss en ed sn sd[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]while [b][color=NAVY]([/color][/b]or [b][color=MAROON]([/color][/b]not bn[b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]not [b][color=GREEN]([/color][/b]snvalid bn[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]tblsearch [color=#2f4f4f]"BLOCK"[/color] bn[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]setq bn [b][color=MAROON]([/color][/b]getstring [color=#2f4f4f]"\nSpecify New Unique Block Name: "[/color][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]initget 1[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]setq pt [b][color=NAVY]([/color][/b]getpoint [color=#2f4f4f]"\nSpecify Base Point: "[/color][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]and [b][color=NAVY]([/color][/b]setq i -1 ss [b][color=MAROON]([/color][/b]ssget '[b][color=GREEN]([/color][/b][b][color=BLUE]([/color][/b]0 . [color=#2f4f4f]"~VIEWPORT"[/color][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]entmake [b][color=MAROON]([/color][/b]list [b][color=GREEN]([/color][/b]cons 0 [color=#2f4f4f]"BLOCK"[/color][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]cons 10 pt[b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]cons 2 bn[b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]cons 70 0[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]while [b][color=MAROON]([/color][/b]setq en [b][color=GREEN]([/color][/b]ssname ss [b][color=BLUE]([/color][/b]setq i [b][color=RED]([/color][/b]1+ i[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]setq ed [b][color=GREEN]([/color][/b]entget en[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]entmake ed[b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]and [b][color=GREEN]([/color][/b]= 1 [b][color=BLUE]([/color][/b]cdr [b][color=RED]([/color][/b]assoc 66 ed[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]setq sn en[b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]while [b][color=BLUE]([/color][/b]/= [color=#2f4f4f]"SEQEND"[/color] [b][color=RED]([/color][/b]cdr [b][color=PURPLE]([/color][/b]assoc 0 [b][color=TEAL]([/color][/b]entget [b][color=OLIVE]([/color][/b]entnext sn[b][color=OLIVE])[/color][/b][b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]setq sn [b][color=RED]([/color][/b]entnext sn[b][color=RED])[/color][/b] sd [b][color=RED]([/color][/b]entget sn[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]entmake sd[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]entmake [b][color=BLUE]([/color][/b]entget [b][color=RED]([/color][/b]entnext sn[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]entdel en[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]entmake [b][color=MAROON]([/color][/b]list [b][color=GREEN]([/color][/b]cons 0 [color=#2f4f4f]"ENDBLK"[/color][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]cons 8 [color=#2f4f4f]"0"[/color][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]entmake [b][color=MAROON]([/color][/b]list [b][color=GREEN]([/color][/b]cons 0 [color=#2f4f4f]"INSERT"[/color][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]cons 2 bn[b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]cons 10 pt[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]princ[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b] Didn't quite understand th OP about the attributes. -David Quote
David Bethel Posted March 11, 2010 Posted March 11, 2010 Here 1 that would make an anonymous block: [b][color=BLACK]([/color][/b]defun c:ent2ann [b][color=FUCHSIA]([/color][/b]/ bn pt i ss en ed sn sd[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]initget 1[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]setq pt [b][color=NAVY]([/color][/b]getpoint [color=#2f4f4f]"\nSpecify Base Point: "[/color][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]and [b][color=NAVY]([/color][/b]setq i -1 ss [b][color=MAROON]([/color][/b]ssget '[b][color=GREEN]([/color][/b][b][color=BLUE]([/color][/b]0 . [color=#2f4f4f]"~VIEWPORT"[/color][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]entmake [b][color=MAROON]([/color][/b]list [b][color=GREEN]([/color][/b]cons 0 [color=#2f4f4f]"BLOCK"[/color][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]cons 10 pt[b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]cons 2 [color=#2f4f4f]"*U"[/color][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]cons 70 1[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]while [b][color=MAROON]([/color][/b]setq en [b][color=GREEN]([/color][/b]ssname ss [b][color=BLUE]([/color][/b]setq i [b][color=RED]([/color][/b]1+ i[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]setq ed [b][color=GREEN]([/color][/b]entget en[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]entmake ed[b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]and [b][color=GREEN]([/color][/b]= 1 [b][color=BLUE]([/color][/b]cdr [b][color=RED]([/color][/b]assoc 66 ed[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]setq sn en[b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]while [b][color=BLUE]([/color][/b]/= [color=#2f4f4f]"SEQEND"[/color] [b][color=RED]([/color][/b]cdr [b][color=PURPLE]([/color][/b]assoc 0 [b][color=TEAL]([/color][/b]entget [b][color=OLIVE]([/color][/b]entnext sn[b][color=OLIVE])[/color][/b][b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]setq sn [b][color=RED]([/color][/b]entnext sn[b][color=RED])[/color][/b] sd [b][color=RED]([/color][/b]entget sn[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]entmake sd[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]entmake [b][color=BLUE]([/color][/b]entget [b][color=RED]([/color][/b]entnext sn[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]entdel en[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]setq bn [b][color=MAROON]([/color][/b]entmake [b][color=GREEN]([/color][/b]list [b][color=BLUE]([/color][/b]cons 0 [color=#2f4f4f]"ENDBLK"[/color][b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]cons 8 [color=#2f4f4f]"0"[/color][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]entmake [b][color=MAROON]([/color][/b]list [b][color=GREEN]([/color][/b]cons 0 [color=#2f4f4f]"INSERT"[/color][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]cons 2 bn[b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]cons 10 pt[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]princ[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b] -David 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.