Jump to content

Convert block to point


nghiahuu

Recommended Posts

And just what would be the purpose of this? Wouldn't you like to assign some attributes to your block? Substituting a point for a block would not allow you to do this. Just thinking ahead.

Link to comment
Share on other sites

Just quickly:

 

(defun c:blk2pt (/ doc spc ss)
 (vl-load-com)
 (setq doc (vla-get-ActiveDocument (vlax-get-Acad-Object))
       spc (if (zerop (vla-get-activespace doc))
             (if (= (vla-get-mspace doc) :vlax-true)
               (vla-get-modelspace doc)
               (vla-get-paperspace doc))
             (vla-get-modelspace doc)))  
 (if (setq ss (ssget '((0 . "INSERT"))))
   (progn
     (mapcar
       (function
         (lambda (x)
           (vla-addPoint spc
             (vlax-3D-point x))))
       (mapcar
         (function
           (lambda (x)
             (cdr (assoc 10 (entget x)))))
         (vl-remove-if 'listp
           (mapcar 'cadr (ssnamex ss)))))
     (command "_.erase" ss "")))
 (princ))

 

But, out of interest, is this so that you can use the LISP I posted in this thread?

 

http://www.cadtutor.net/forum/showthread.php?t=37762

 

Lee

Link to comment
Share on other sites

Or something like this:

 

[b][color=BLACK]([/color][/b]defun c:ins2poi [b][color=FUCHSIA]([/color][/b]/ ss i en ed nd[b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]while [b][color=NAVY]([/color][/b]not ss[b][color=NAVY])[/color][/b]
        [b][color=NAVY]([/color][/b]princ [color=#2f4f4f]"\nSelect INSERTs To Convert To POINTs..."[/color][b][color=NAVY])[/color][/b]
        [b][color=NAVY]([/color][/b]setq ss [b][color=MAROON]([/color][/b]ssget [b][color=GREEN]([/color][/b]list [b][color=BLUE]([/color][/b]cons 0 [color=#2f4f4f]"INSERT"[/color][b][color=BLUE])[/color][/b]
                              [b][color=BLUE]([/color][/b]if [b][color=RED]([/color][/b]getvar [color=#2f4f4f]"CTAB"[/color][b][color=RED])[/color][/b]
                                  [b][color=RED]([/color][/b]cons 410 [b][color=PURPLE]([/color][/b]getvar [color=#2f4f4f]"CTAB"[/color][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b]
                                  [b][color=RED]([/color][/b]cons 67 [b][color=PURPLE]([/color][/b]- 1 [b][color=TEAL]([/color][/b]getvar [color=#2f4f4f]"TILEMODE"[/color][b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][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]setq i [b][color=NAVY]([/color][/b]sslength ss[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]while [b][color=NAVY]([/color][/b]not [b][color=MAROON]([/color][/b]minusp [b][color=GREEN]([/color][/b]setq i [b][color=BLUE]([/color][/b]1- i[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]setq en [b][color=MAROON]([/color][/b]ssname ss i[b][color=MAROON])[/color][/b]
              ed [b][color=MAROON]([/color][/b]entget en[b][color=MAROON])[/color][/b]
              nd [b][color=MAROON]([/color][/b]list [b][color=GREEN]([/color][/b]cons 10 [b][color=BLUE]([/color][/b]trans [b][color=RED]([/color][/b]cdr [b][color=PURPLE]([/color][/b]assoc 10 ed[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] en 0[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
                       [b][color=GREEN]([/color][/b]cons 0  [color=#2f4f4f]"POINT"[/color][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
        [b][color=NAVY]([/color][/b]foreach g '[b][color=MAROON]([/color][/b]6 8 39 48 62 210[b][color=MAROON])[/color][/b]
           [b][color=MAROON]([/color][/b]if [b][color=GREEN]([/color][/b]assoc g ed[b][color=GREEN])[/color][/b]
               [b][color=GREEN]([/color][/b]setq nd [b][color=BLUE]([/color][/b]cons [b][color=RED]([/color][/b]cons g [b][color=PURPLE]([/color][/b]cdr [b][color=TEAL]([/color][/b]assoc g ed[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] nd[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]entdel en[b][color=NAVY])[/color][/b]
        [b][color=NAVY]([/color][/b]entmake [b][color=MAROON]([/color][/b]reverse nd[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]redraw[b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]prin1[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]

-David

Link to comment
Share on other sites

Lee,

 

To be honest, I don't see where the vl approach is any better or easier to read / comprehend. It's just more typing and chances for typos My $0.02. -David

Link to comment
Share on other sites

To be honest, I don't see where the vl approach is any better or easier to read / comprehend. It's just more typing and chances for typos...

 

I'm not saying that the VL method is any better/worse, but just that when I thought about approaching the problem in that way, I couldn't see a concise way to do it. - but you could. :)

Link to comment
Share on other sites

Just quickly:

 

(defun c:blk2pt (/ doc spc ss)
 (vl-load-com)
 (setq doc (vla-get-ActiveDocument (vlax-get-Acad-Object))
       spc (if (zerop (vla-get-activespace doc))
             (if (= (vla-get-mspace doc) :vlax-true)
               (vla-get-modelspace doc)
               (vla-get-paperspace doc))
             (vla-get-modelspace doc)))  
 (if (setq ss (ssget '((0 . "INSERT"))))
   (progn
     (mapcar
       (function
         (lambda (x)
           (vla-addPoint spc
             (vlax-3D-point x))))
       (mapcar
         (function
           (lambda (x)
             (cdr (assoc 10 (entget x)))))
         (vl-remove-if 'listp
           (mapcar 'cadr (ssnamex ss)))))
     (command "_.erase" ss "")))
 (princ))

 

But, out of interest, is this so that you can use the LISP I posted in this thread?

 

http://www.cadtutor.net/forum/showthread.php?t=37762

 

Lee

 

Lee, just a suggestion... that might prove useful to these folks...

insert the "point" on a layer of its own, don't erase the blocks, leave them as is, and then the can run your ptsort.lsp on the layer containing the new "point(s)" (and retain their original dwg after possibly freezing the newly made layer)

just my 2 cents....

Steve

Link to comment
Share on other sites

  • 4 years later...

Thank You..

 

Just quickly:

 

(defun c:blk2pt (/ doc spc ss)
 (vl-load-com)
 (setq doc (vla-get-ActiveDocument (vlax-get-Acad-Object))
       spc (if (zerop (vla-get-activespace doc))
             (if (= (vla-get-mspace doc) :vlax-true)
               (vla-get-modelspace doc)
               (vla-get-paperspace doc))
             (vla-get-modelspace doc)))  
 (if (setq ss (ssget '((0 . "INSERT"))))
   (progn
     (mapcar
       (function
         (lambda (x)
           (vla-addPoint spc
             (vlax-3D-point x))))
       (mapcar
         (function
           (lambda (x)
             (cdr (assoc 10 (entget x)))))
         (vl-remove-if 'listp
           (mapcar 'cadr (ssnamex ss)))))
     (command "_.erase" ss "")))
 (princ))

 

But, out of interest, is this so that you can use the LISP I posted in this thread?

 

http://www.cadtutor.net/forum/showthread.php?t=37762

 

Lee

Link to comment
Share on other sites

  • 8 years later...

@Lee and/or others

How can the LISP be upgraded to insert the point on the same layer as the block is/was?

(setq LAYERNAME (vla-get-layer ??))

 

I wanne try this one myself :)

 

Link to comment
Share on other sites

44 minutes ago, B.N. said:

@Lee and/or others

How can the LISP be upgraded to insert the point on the same layer as the block is/was?

(setq LAYERNAME (vla-get-layer ??))

 

I wanne try this one myself :)

 

 

?? is where you would need to define the entity

 

If your using the last code posted.

(cdr (assoc 10 (entget x))) is pulling the point

(cdr (assoc 8 (entget x))) would pull the layer.

 

so maybe. untested.

        (mapcar
          (function
            (lambda (x) (cdr (assoc 10 (entget x))))
            (setvar 'clayer (cdr (assoc 8 (entget x))))
          )

 

i would just rewrite it like this easier to follow.

 

(defun c:blk2pt (/ doc spc ss)
  (vl-load-com)
  (setq doc (vla-get-ActiveDocument (vlax-get-Acad-Object))
    spc (if (zerop (vla-get-activespace doc))
          (if (= (vla-get-mspace doc) :vlax-true)
            (vla-get-modelspace doc)
            (vla-get-paperspace doc)
          )
          (vla-get-modelspace doc)
        )
  )
  (if (setq ss (ssget '((0 . "INSERT"))))
    (foreach blk (vl-remove-if 'listp (mapcar 'cadr (ssnamex SS)))
      (setq pt (cdr (assoc 10 (setq blk (entget blk)))))
      (setvar 'clayer (cdr (assoc 8 blk))) 
      (vla-addPoint spc (vlax-3D-point pt))
    )
  )
  (command "_.erase" ss "")
  (princ)
)

 

Link to comment
Share on other sites

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