Visual LISP, AutoLISP and General Customization

Visual LISP, AutoLISP and General Customization

Reply
Active Member
6 Posts
0 Kudos
Registered: ‎09-16-2010
Post 1 of 10
Accepted Solution

DELETE DIMENSIONS INSIDE BLOCKS

678 Views, 9 Replies
12-02-2010 01:29 AM

Hi all,

 

I need a lisp routine which will delete all the dimensions inside selected block or blocks, including nested blocks inside.

 

Can anybody help please?

 

Thanx...

Today is your lucky day..

 

on my way to overcoming my fear of recursive programming, earlier

I happen to be playing around on a code for eradicating unwanted entities oinside a block

 

 

I tweaked it a lttle to fit your neeeds

 

;; Credit to Jummy BergMark ;;
;; For DeleteObjectFromBlock Routine ;;
;; Manusoft for the Recursive Routine ;;
;; Me for tweaking it for you ;;
(defun C:FXB (/ ELST ENAM ESEL BNAM FLST)
(vl-load-com)
(setq Dsdwg (vla-get-activedocument (vlax-get-acad-object)))
(setq ESEL (entsel "\nSelect block: ")
ENAM (car ESEL)
ELST (entget ENAM)
BNAM (cdr (assoc 2 ELST))
FLST nil
)
(fix1 BNAM)
(vl-cmdf "regen")
(prin1)
)
(defun FIX1 (BNAM / BENAM)
(if (not (member BNAM FLST))
(progn
(setq FLST (cons BNAM FLST)
BENAM (tblobjname "block" BNAM)
)
(while (setq BENAM (entnext BENAM))
;(print (entget BENAM))
(if (= (cdr (assoc 0 (entget BENAM))) "INSERT")
(fix1 (cdr (assoc 2 (entget BENAM))))
(if (= (cdr (assoc 0 (entget BENAM))) "DIMENSION")
(progn
(setq Dim2Del (vlax-ename->vla-object BENAM)
blk (vla-ObjectIdToObject
Dsdwg
(vla-get-ownerID Dim2Del)
)
)
(vla-delete Dim2Del)
(vla-get-count blk)
)
)
)
)
)
)
(princ)
)

 Hope this helps

 

*Expert Elite*
2,535 Posts
306 Kudos
Registered: ‎11-24-2009
Post 2 of 10

Re: DELETE DIMENSIONS INSIDE BLOCKS

12-02-2010 03:30 AM in reply to: NESSEL

Today is your lucky day..

 

on my way to overcoming my fear of recursive programming, earlier

I happen to be playing around on a code for eradicating unwanted entities oinside a block

 

 

I tweaked it a lttle to fit your neeeds

 

;;	Credit to Jummy BergMark		;;
;;	For DeleteObjectFromBlock Routine	;;
;;	Manusoft for the Recursive Routine	;;
;;	Me for tweaking it for you		;;


(defun C:FXB (/ ELST ENAM ESEL BNAM FLST)
  (vl-load-com)
  (setq Dsdwg (vla-get-activedocument (vlax-get-acad-object)))
  (setq	ESEL (entsel "\nSelect block: ")
	ENAM (car ESEL)
	ELST (entget ENAM)
	BNAM (cdr (assoc 2 ELST))
	FLST nil
  )
  (fix1 BNAM)
  (vl-cmdf "regen")
  (prin1)
)


(defun FIX1 (BNAM / BENAM)
  (if (not (member BNAM FLST))
    (progn
      (setq FLST  (cons BNAM FLST)
	    BENAM (tblobjname "block" BNAM)
      )
      (while (setq BENAM (entnext BENAM))
					;(print (entget BENAM))
	(if (= (cdr (assoc 0 (entget BENAM))) "INSERT")
	  (fix1 (cdr (assoc 2 (entget BENAM))))
	  (if (= (cdr (assoc 0 (entget BENAM))) "DIMENSION")
	    (progn
	      (setq Dim2Del (vlax-ename->vla-object BENAM)
		    blk	    (vla-ObjectIdToObject
			      Dsdwg
			      (vla-get-ownerID Dim2Del)
			    )
	      )
	      (vla-delete Dim2Del)
	      (vla-get-count blk)
	    )
	  )
	)
      )
    )
  )
  (princ)
)

 Hope this helps

 

Active Member
6 Posts
0 Kudos
Registered: ‎09-16-2010
Post 3 of 10

Re: DELETE DIMENSIONS INSIDE BLOCKS

12-02-2010 06:03 AM in reply to: pbejse

Hi again,

 

Really my lucky day! :smileyhappy: thank you for your help.

 

Great work :smileyhappy:

Active Member
10 Posts
0 Kudos
Registered: ‎11-24-2010
Post 4 of 10

Re: DELETE DIMENSIONS INSIDE BLOCKS

12-06-2010 10:56 AM in reply to: pbejse

that is cool. thanks for sharing! :smileyhappy:

Valued Contributor
58 Posts
0 Kudos
Registered: ‎06-15-2012
Post 5 of 10

Re: DELETE DIMENSIONS INSIDE BLOCKS

06-15-2012 01:11 PM in reply to: pbejse

There is another way to eliminate the dimensions without selecting the block?

Distinguished Mentor
654 Posts
63 Kudos
Registered: ‎07-02-2010
Post 6 of 10

Re: DELETE DIMENSIONS INSIDE BLOCKS

06-15-2012 02:07 PM in reply to: NESSEL

My version with multiple selection set .....

 

(defun c:Test (/ ss i sn name lst)
  (vl-load-com)
;;;        ------ Tharwat 15. June. 2012 -----      ;;;
;;; codes to delete all dimensions entities in the  ;;;
;;;                selected blocks                  ;;;
  (if (not acdoc)
    (setq acdoc (vla-get-activedocument (vlax-get-acad-object)))
  )
  (if (setq ss (ssget "_:L" '((0 . "INSERT"))))
    (repeat (setq i (sslength ss))
      (setq sn (ssname ss (setq i (1- i))))
      (if (not (member (setq name (cdr (assoc 2 (entget sn)))) lst))
        (progn
          (setq lst (cons name lst))
          (vlax-for each (vla-item (vla-get-blocks acdoc) name)
            (if (eq (vla-get-objectname each) "AcDbRotatedDimension")
              (vla-delete each))
          )
        )
      )
    )
    (princ)
  )
  (if ss (vla-regen acdoc AcAllviewports))
  (princ)
)

 

____________________________________________________
Get learn and learn and practice , to become experienced guy .
Valued Contributor
58 Posts
0 Kudos
Registered: ‎06-15-2012
Post 7 of 10

Re: DELETE DIMENSIONS INSIDE BLOCKS

06-15-2012 05:28 PM in reply to: _Tharwat

The code I'm looking for is more complex.
I need to remove all types of dimensions including the angular dimensions and aligned dimensions, without selecting the blocks.
Also, the dimensions in nested blocks have to be deleted.

Valued Mentor
362 Posts
34 Kudos
Registered: ‎06-02-2005
Post 8 of 10

Re: DELETE DIMENSIONS INSIDE BLOCKS

06-15-2012 09:31 PM in reply to: jjorovi

Hi,

not sure what you mean by without selecting blocks.

If it means you want to remove dimensions from

all defined blocks, you could try:

 

(defun c:blitz-all-dims ( / tbl ent dlist)
 (while (setq tbl (tblnext "BLOCK" (not tbl)))
  (if (and
        (not (assoc 1 tbl))
        (setq ent (cdr (assoc -2 tbl)))
      )
      (while ent
        (if (= (cdr (assoc 0 (entget ent))) "DIMENSION")
            (setq dlist (cons ent dlist))
        )
        (setq ent (entnext ent))
      )
  )
 )
 (foreach n dlist (vla-delete (vlax-ename->vla-object n)))
 (princ)
)

Ian

 

*Expert Elite*
2,535 Posts
306 Kudos
Registered: ‎11-24-2009
Post 9 of 10

Re: DELETE DIMENSIONS INSIDE BLOCKS

06-15-2012 10:52 PM in reply to: jjorovi

Another

 

(defun c:blitz2  (/ aDoc)
      (vl-load-com)
      (setq aDoc (vla-get-ActiveDocument (vlax-get-acad-object)))
      (vlax-for blk (vla-get-blocks aDoc)
      (if
            (and
                  (eq :vlax-false (vla-get-isXref blk))
                  (eq :vlax-false (vla-get-isLayout blk))
                  (not (wcmatch (vla-get-name blk) "`*D*"))
                  )
                 (vlax-for dim blk
                       (if (wcmatch
                                 (vla-get-ObjectName dim)
                                 "AcDb*Dimension")
                             (vla-delete dim))
                       )
                 )
            )
      (vla-regen aDoc acAllViewports)
      (princ)
      )

Valued Contributor
58 Posts
0 Kudos
Registered: ‎06-15-2012
Post 10 of 10

Re: DELETE DIMENSIONS INSIDE BLOCKS

06-18-2012 08:04 AM in reply to: pbejse
pbejse, you're amazing. This code is exactly what I've been looking for. I added a couple of lines to remove all outside dimensions of the blocks. (defun c:dimdel (/ aDoc BNAM) (vl-load-com) (setq aDoc (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-for blk (vla-get-blocks aDoc) (if (and (eq :vlax-false (vla-get-isXref blk)) (eq :vlax-false (vla-get-isLayout blk)) (not (wcmatch (vla-get-name blk) "`*D*")) ) (vlax-for dim blk (if (wcmatch (vla-get-ObjectName dim) "AcDb*Dimension") (vla-delete dim)) ) ) ) (FIX1 BNAM) (vla-regen aDoc acAllViewports) (prin1) ) (defun FIX1 (BNAM) (command "erase" (ssget "x" '((0 . "DIMENSION"))) "") (princ) ) Ian, thanks for your help too. Both codes work fine.
Post to the Community

Have questions about Autodesk products? Ask the community.

New Post
Announcements
Are you interested in helping shape the future of the Autodesk Community? To participate in this brief usability study, please click here. Your time and input is greatly appreciated!