Author Topic: Find total number of Objects  (Read 2580 times)

0 Members and 1 Guest are viewing this topic.

GDF

  • Water Moccasin
  • Posts: 2081
Find total number of Objects
« on: September 06, 2007, 10:28:37 AM »
Fellow lispers, in the code below by Fatty posted here in this forum, how do I get the total number of objects on the layer selected that are to be deleted?
I need an integer number. If I can get this number I will post a revised version with a progress bar.

Code: [Select]
;;;Fatty
(defun C:DEL-LAYER-old  (/ ent acapp acsp adoc allrs layer_name)
  ;;(setq layer_name (getstring t "\n* Enter Layer name to Delete : "))
  (setq ent        (entsel)
        layer_name (cdr (assoc 8 (entget (CAR ent)))))
  (vl-load-com)
  (setq acapp (vlax-get-acad-object)
        adoc  (vla-get-activedocument acapp)
        acsp  (vla-get-block (vla-get-activelayout adoc))
        allrs (vla-get-layers adoc))
  (vlax-for
         lt  (vla-get-layouts adoc)
    (vlax-for
           ob  (vla-get-block lt)
      (if (eq (vla-get-layer ob) layer_name)
        (progn (if (eq (vla-get-freeze (vla-item allrs (vla-get-layer ob))) :vlax-true)
                 (vla-put-freeze (vla-item allrs (vla-get-layer ob)) :vlax-false))
               (if (eq (vla-get-lock (vla-item allrs (vla-get-layer ob))) :vlax-true)
                 (vla-put-lock (vla-item allrs (vla-get-layer ob)) :vlax-false))
               (if (eq (vla-get-layeron (vla-item allrs (vla-get-layer ob))) :vlax-false)
                 (vla-put-layeron (vla-item allrs (vla-get-layer ob)) :vlax-true))
               (vla-delete ob)
               (vlax-release-object ob)))))
  (vla-regen adoc acallviewports)
  (princ))

Thanks

Gary
Why is there never enough time to do it right, but always enough time to do it over?
BricsCAD 2020x64 Windows 10x64

ronjonp

  • Needs a day job
  • Posts: 7529
Re: Find total number of Objects
« Reply #1 on: September 06, 2007, 11:13:14 AM »
Perhaps:

(setq lngth (sslength (ssget "x" (list (cons 8 layer_name)))))

Windows 11 x64 - AutoCAD /C3D 2023

Custom Build PC

VVA

  • Newt
  • Posts: 166
Re: Find total number of Objects
« Reply #2 on: September 06, 2007, 11:14:31 AM »
Somehow so
Code: [Select]
;;;Fatty
(defun C:C:DEL-LAYER-old  (/ ent acapp acsp adoc allrs layer_name TotNumber CurrNumber)
  ;;(setq layer_name (getstring t "\n* Enter Layer name to Delete : "))
  (setq ent   (entsel "\nSelect object on Delete Layer")
layer_name (cdr (assoc 8 (entget (CAR ent))))
  )
  (vl-load-com)
  (setq acapp (vlax-get-acad-object)
adoc  (vla-get-activedocument acapp)
acsp  (vla-get-block (vla-get-activelayout adoc))
allrs (vla-get-layers adoc)
  )
  (if (eq (vla-get-freeze (vla-item allrs layer_name)) :vlax-true)
    (vla-put-freeze (vla-item allrs layer_name) :vlax-false)
  )
  (if (eq (vla-get-lock (vla-item allrs layer_name)) :vlax-true)
    (vla-put-lock  (vla-item allrs layer_name) :vlax-false)
  )
  (if (eq (vla-get-layeron (vla-item allrs layer_name)) :vlax-false)
    (vla-put-layeron (vla-item allrs layer_name) :vlax-true)
  )
  (setq TotalNumber (sslength (ssget "_X" (list(cons 8 layer_name))))
CurrNumber 1)
  (princ "\nTotal deleted object - ")(princ TotalNumber)(terpri)
  (vlax-for lt (vla-get-layouts adoc)
    (vlax-for ob (vla-get-block lt)
      (if (eq (vla-get-layer ob) layer_name)
(progn
 (grtext -1 (strcat "Deleted " (itoa CurrNumber) " of " (itoa Totalnumber)))
 (vla-delete ob)
 (vlax-release-object ob)
)
      )
    )
  )
  (vla-regen adoc acallviewports)
  (princ)
)

Patrick_35

  • Guest
Re: Find total number of Objects
« Reply #3 on: September 06, 2007, 12:13:22 PM »
Hello
Try this

Code: [Select]
(defun C:DEL-LAYER-old  (/ sel ent acapp acsp adoc allrs layer_name)
  ;;(setq layer_name (getstring t "\n* Enter Layer name to Delete : "))
  (setq ent    (entsel "\nSelect object on Delete Layer ")
layer_name (cdr (assoc 8 (entget (CAR ent))))
  )
  (vl-load-com)
  (setq acapp (vlax-get-acad-object)
adoc  (vla-get-activedocument acapp)
acsp  (vla-get-block (vla-get-activelayout adoc))
allrs (vla-get-layers adoc)
  )
  (or (eq (vla-get-freeze (vla-item allrs layer_name)) :vlax-false)
    (vla-put-freeze (vla-item allrs layer_name) :vlax-false)
  )
  (or (eq (vla-get-lock (vla-item allrs layer_name)) :vlax-false)
    (vla-put-lock  (vla-item allrs layer_name) :vlax-false)
  )
  (or (eq (vla-get-layeron (vla-item allrs layer_name)) :vlax-true)
    (vla-put-layeron (vla-item allrs layer_name) :vlax-true)
  )
  (ssget "_X" (list(cons 8 layer_name)))
  (setq sel (vla-get-activeselectionset adoc))
  (princ (strcat "\nTotal deleted object - " (itoa (vla-get-count sel)) "\n"))
  (vla-erase sel)
  (vla-delete sel)
;  (vlax-for lt (vla-get-layouts adoc)
;    (vlax-for ob (vla-get-block lt)
;      (if (eq (vla-get-layer ob) layer_name)
; (progn
;   (grtext -1 (strcat "Deleted " (itoa CurrNumber) " of " (itoa Totalnumber)))
;   (vla-delete ob)
;   (vlax-release-object ob)
; )
;      )
;    )
;  )
  (vla-regen adoc acallviewports)
  (princ)
)

@+

GDF

  • Water Moccasin
  • Posts: 2081
Re: Find total number of Objects
« Reply #4 on: September 06, 2007, 12:48:07 PM »
Thanks guys

I quess I'm way over my head. Here are the two version you guy have posted with my trying to add the ACET-UI-PROGRESS progress bar.
So far I'm not getting it to work properly.

Code: [Select]
;;;Fatty
(defun C:DEL-LAYER-old-1  (/ n ent acapp acsp adoc allrs layer_name TotNumber CurrNumber)
  (vl-load-com)
  (setq n 1)
  ;;(setq layer_name (getstring t "\n* Enter Layer name to Delete : "))
  (setq ent   (entsel "\nSelect object on Delete Layer")
layer_name (cdr (assoc 8 (entget (CAR ent))))
  )
  (setq acapp (vlax-get-acad-object)
adoc  (vla-get-activedocument acapp)
acsp  (vla-get-block (vla-get-activelayout adoc))
allrs (vla-get-layers adoc)
  )
  (if (eq (vla-get-freeze (vla-item allrs layer_name)) :vlax-true)
    (vla-put-freeze (vla-item allrs layer_name) :vlax-false)
  )
  (if (eq (vla-get-lock (vla-item allrs layer_name)) :vlax-true)
    (vla-put-lock  (vla-item allrs layer_name) :vlax-false)
  )
  (if (eq (vla-get-layeron (vla-item allrs layer_name)) :vlax-false)
    (vla-put-layeron (vla-item allrs layer_name) :vlax-true)
  )
  (setq TotalNumber (sslength (ssget "_X" (list(cons 8 layer_name))))
CurrNumber 1)
  ;;(princ "\nTotal deleted object - ")(princ TotalNumber)(terpri)

  (if (member "acetutil.arx" (arx))
    (ACET-UI-PROGRESS-INIT
      "Please Wait while the Program is Running"
      TotalNumber
      )
    )
    ;;added progress bar start

   
  (vlax-for lt (vla-get-layouts adoc)
    (vlax-for ob (vla-get-block lt)

     
      (if (member "acetutil.arx" (arx))(ACET-UI-PROGRESS-SAFE n)(ARCH:WORKING))
      ;;added progress bar running
      (setq n (+ n 1))
      ;;added progress bar count marker


      (if (eq (vla-get-layer ob) layer_name)
(progn
(grtext -1 (strcat "Deleted " (itoa CurrNumber) " of " (itoa Totalnumber)))
(vla-delete ob)
(vlax-release-object ob)
)
      )
    )
  )
  (vla-regen adoc acallviewports)

  (if (member "acetutil.arx" (arx))(ACET-UI-PROGRESS-DONE))
  ;;added progress bar finish

  (princ)
)
 
 
 




(defun C:DEL-LAYER-old-2  ();(/ n sel ent acapp acsp adoc allrs layer_name)
  (setq n 1)
  ;;(setq layer_name (getstring t "\n* Enter Layer name to Delete : "))
  (setq ent    (entsel "\nSelect object on Delete Layer ")
layer_name (cdr (assoc 8 (entget (CAR ent))))
  )
  (vl-load-com)
  (setq acapp (vlax-get-acad-object)
adoc  (vla-get-activedocument acapp)
acsp  (vla-get-block (vla-get-activelayout adoc))
allrs (vla-get-layers adoc)
  )
  (or (eq (vla-get-freeze (vla-item allrs layer_name)) :vlax-false)
    (vla-put-freeze (vla-item allrs layer_name) :vlax-false)
  )
  (or (eq (vla-get-lock (vla-item allrs layer_name)) :vlax-false)
    (vla-put-lock  (vla-item allrs layer_name) :vlax-false)
  )
  (or (eq (vla-get-layeron (vla-item allrs layer_name)) :vlax-true)
    (vla-put-layeron (vla-item allrs layer_name) :vlax-true)
  )
  (ssget "_X" (list(cons 8 layer_name)))
  (setq sel (vla-get-activeselectionset adoc))
  (princ (strcat "\nTotal deleted object - " (itoa (vla-get-count sel)) "\n"))



  (if (member "acetutil.arx" (arx))
    (ACET-UI-PROGRESS-INIT
      "Please Wait while the Program is Running"
      (vla-get-count sel)
      )
    )
  ;;added progress bar start


      (if (member "acetutil.arx" (arx))(ACET-UI-PROGRESS-SAFE n)(ARCH:WORKING))
      ;;added progress bar running
      (setq n (+ n 1))
      ;;added progress bar count marker



  (vla-erase sel)
  (vla-delete sel)

  (vla-regen adoc acallviewports)
  (if (member "acetutil.arx" (arx))(ACET-UI-PROGRESS-DONE))
  ;;added progress bar finish
  (princ)
)


Thanks

Gary
Why is there never enough time to do it right, but always enough time to do it over?
BricsCAD 2020x64 Windows 10x64

GDF

  • Water Moccasin
  • Posts: 2081
Re: Find total number of Objects
« Reply #5 on: September 06, 2007, 02:13:19 PM »
This one seems to be working ok? Need the experts to verify...

Code: [Select]
;;;Fatty
(defun C:Dx1  (/ n ent acapp acsp adoc allrs layer_name TotalNumber CurrNumber)
  (vl-load-com)
  (setq n 1)
  ;;(setq layer_name (getstring t "\n* Enter Layer name to Delete : "))
  (setq ent   (entsel "\nSelect object on Delete Layer")
layer_name (cdr (assoc 8 (entget (CAR ent))))
  )
  (setq acapp (vlax-get-acad-object)
adoc  (vla-get-activedocument acapp)
acsp  (vla-get-block (vla-get-activelayout adoc))
allrs (vla-get-layers adoc)
  )
  (if (eq (vla-get-freeze (vla-item allrs layer_name)) :vlax-true)
    (vla-put-freeze (vla-item allrs layer_name) :vlax-false)
  )
  (if (eq (vla-get-lock (vla-item allrs layer_name)) :vlax-true)
    (vla-put-lock  (vla-item allrs layer_name) :vlax-false)
  )
  (if (eq (vla-get-layeron (vla-item allrs layer_name)) :vlax-false)
    (vla-put-layeron (vla-item allrs layer_name) :vlax-true)
  )
  (setq TotalNumber (sslength (ssget "_X" (list(cons 8 layer_name))))
CurrNumber 1)
  ;;(princ "\n Total deleted object - ")(princ TotalNumber)(terpri)
  (if (member "acetutil.arx" (arx))
    (ACET-UI-PROGRESS-INIT
      "Please Wait while the Program is Running"
      TotalNumber
      )
    )
    ;;added progress bar start   
  (vlax-for lt (vla-get-layouts adoc)
    (vlax-for ob (vla-get-block lt)
      (if (eq (vla-get-layer ob) layer_name)
(progn
(grtext -1 (strcat "Deleted " (itoa CurrNumber) " of " (itoa Totalnumber)))
         (if (member "acetutil.arx" (arx))(ACET-UI-PROGRESS-SAFE n)(ARCH:WORKING))
         ;;added progress bar running
         (setq n (+ n 1))
         ;;added progress bar count marker
(vla-delete ob)
(vlax-release-object ob)
)
      )
    )
  )
  (vla-regen adoc acallviewports)
  (if (member "acetutil.arx" (arx))(ACET-UI-PROGRESS-DONE))
  ;;added progress bar finish
  (princ)
)

Gary
Why is there never enough time to do it right, but always enough time to do it over?
BricsCAD 2020x64 Windows 10x64

VVA

  • Newt
  • Posts: 166
Re: Find total number of Objects
« Reply #6 on: September 07, 2007, 02:46:19 AM »
It is possible and not to use ACET-UI-PROGRESS-*. grtext-1 writes the text in a status line. After (vla-regen adoc acallviewports) it disappears.
Or if to use ACET-UI-PROGRESS - *, (grtext-1 (strcat "Deleted" (itoa CurrNumber) "of" (itoa Totalnumber))) a superfluous line
Code: [Select]
;;;Fatty
(defun C:Dx1  (/ n ent acapp acsp adoc allrs layer_name TotalNumber CurrNumber)
  (vl-load-com)
  (setq n 1)
  ;;(setq layer_name (getstring t "\n* Enter Layer name to Delete : "))
  (setq ent   (entsel "\nSelect object on Delete Layer")
layer_name (cdr (assoc 8 (entget (CAR ent))))
  )
  (setq acapp (vlax-get-acad-object)
adoc  (vla-get-activedocument acapp)
acsp  (vla-get-block (vla-get-activelayout adoc))
allrs (vla-get-layers adoc)
  )
  (if (eq (vla-get-freeze (vla-item allrs layer_name)) :vlax-true)
    (vla-put-freeze (vla-item allrs layer_name) :vlax-false)
  )
  (if (eq (vla-get-lock (vla-item allrs layer_name)) :vlax-true)
    (vla-put-lock  (vla-item allrs layer_name) :vlax-false)
  )
  (if (eq (vla-get-layeron (vla-item allrs layer_name)) :vlax-false)
    (vla-put-layeron (vla-item allrs layer_name) :vlax-true)
  )
  (setq TotalNumber (sslength (ssget "_X" (list(cons 8 layer_name))))
CurrNumber 1)
  ;;(princ "\n Total deleted object - ")(princ TotalNumber)(terpri)
;;;  (if (member "acetutil.arx" (arx))
;;;    (ACET-UI-PROGRESS-INIT
;;;      "Please Wait while the Program is Running"
;;;      TotalNumber
;;;      )
;;;    )
    ;;added progress bar start   
  (vlax-for lt (vla-get-layouts adoc)
    (vlax-for ob (vla-get-block lt)
      (if (eq (vla-get-layer ob) layer_name)
(progn
(grtext -1 (strcat "Deleted " (itoa CurrNumber) " of " (itoa Totalnumber)))
    ;     (if (member "acetutil.arx" (arx))(ACET-UI-PROGRESS-SAFE n)(ARCH:WORKING))
         ;;added progress bar running
         (setq n (+ n 1))
         ;;added progress bar count marker
(vla-delete ob)
(vlax-release-object ob)
)
      )
    )
  )
  (vla-regen adoc acallviewports)
 ;; (if (member "acetutil.arx" (arx))(ACET-UI-PROGRESS-DONE))
  ;;added progress bar finish
  (princ)
)
« Last Edit: September 07, 2007, 02:48:23 AM by VVA »

GDF

  • Water Moccasin
  • Posts: 2081
Re: Find total number of Objects
« Reply #7 on: September 07, 2007, 06:45:52 PM »
Thanks...I will look into it.

Gary
Why is there never enough time to do it right, but always enough time to do it over?
BricsCAD 2020x64 Windows 10x64