Jump to content

Recommended Posts

Posted

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?

Posted

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.

Posted

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))

Posted

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.

Posted

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 . "")?

Posted
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:

 

Posted

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

Posted

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

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...