Info über alle Objekte auf dem Layer

Was für ein Lisp-Tool sucht ihr? Oder welches Problem bedarf einer Lösung?

Moderator: Moderator

Antworten
Benutzeravatar
Zeichenartist
Newbie
Beiträge: 2
Registriert: Mo 3. Apr 2006, 14:32

Info über alle Objekte auf dem Layer

Beitrag von Zeichenartist » Mo 3. Apr 2006, 14:53

Ich würde immer mal wieder gerne wissen, wieviele von welchen Objekten
auf einem Layer sind. Also ganz einfach gesagt:

z.B: 2 Punkte, 3 Linien, 1 Kreis, 2 Blöcke ....

Ich suche eine Info über z.B. Punkte die ich nicht sehe auf dem Bildschirm
oder Elemente, die außerhalb liegen oder sehr klein sind.

:?:

Benutzeravatar
CADwiesel
Administrator
Beiträge: 386
Registriert: Mo 11. Jun 2018, 13:07
Kontaktdaten:

Beitrag von CADwiesel » Mo 3. Apr 2006, 16:33

Code: Alles auswählen

(defun c:elemsliste ( / elemli gesliste i item)
(defun bau_elemli (asatz / n elemli)
  (setq n 0)
  (repeat (sslength asatz)
    (setq elemli (cons (ssname asatz n) elemli)
          n      (1+ n)
          ) ;_ end of setq
    ) ;_ end of repeat
  elemli
  )
(vlax-for layer(vla-get-layers(vla-get-activedocument(vlax-get-acad-object)))

  (mapcar '(lambda (y / c)
                      (if(member(setq c(cdr(assoc 0(entget y))))(mapcar 'car elemli))
                        (setq elemli (subst(cons c(+ 1 (cdr(assoc c elemli))))(assoc c elemli)elemli))
                        (setq elemli(cons (cons c 1)elemli))
                        )
                      )
           (if(setq as (ssget "_X" (list(cons 8 (vla-get-name layer)))))
             (bau_elemli as)
             )
           )
  (setq gesliste(cons(apply 'list (cons (vla-get-name layer)elemli))gesliste))
  )
  (if
  gesliste
  (foreach item gesliste
  (princ (strcat "\nLayername: "(car item))"\nElemente: \n")
    (foreach i (cdr item)
      (prin1 i)(terpri)
      )
    )
  )
  (princ)
)
sowas z.b?
Gruß
BildCADwiesel
Besucht uns im CHAT

Benutzeravatar
Zeichenartist
Newbie
Beiträge: 2
Registriert: Mo 3. Apr 2006, 14:32

Da funzt was nicht

Beitrag von Zeichenartist » Mo 3. Apr 2006, 16:52

Danke für die Hyperschnelle Antwort. :o
Aber: :shock:

Das krieg ich leider nicht aufgerufen.
Wo liegt der Fehler.
Wie lautet der Befehlsaufruf?

Benutzeravatar
CADwiesel
Administrator
Beiträge: 386
Registriert: Mo 11. Jun 2018, 13:07
Kontaktdaten:

Beitrag von CADwiesel » Di 4. Apr 2006, 08:26

per _appload laden und dann starten durch eingabe in der Befehlszeile von:

elemsliste
Gruß
BildCADwiesel
Besucht uns im CHAT

Benutzeravatar
CADwiesel
Administrator
Beiträge: 386
Registriert: Mo 11. Jun 2018, 13:07
Kontaktdaten:

Beitrag von CADwiesel » Di 4. Apr 2006, 12:20

oops kleiner Klammer-Fehler
Hier nochmal überarbeitet

Code: Alles auswählen

(defun c:elemsliste ( / elemli gesliste i item) 
(defun bau_elemli (asatz / n elemli) 
(setq n 0) 
(repeat (sslength asatz) 
(setq elemli (cons (ssname asatz n) elemli) 
n (1+ n) 
) ;_ end of setq 
) ;_ end of repeat 
elemli 
) 
(vlax-for layer(vla-get-layers(vla-get-activedocument(vlax-get-acad-object))) 

(mapcar '(lambda (y / c) 
(if(member(setq c(cdr(assoc 0(entget y))))(mapcar 'car elemli)) 
(setq elemli (subst(cons c(+ 1 (cdr(assoc c elemli))))(assoc c elemli)elemli)) 
(setq elemli(cons (cons c 1)elemli)) 
) 
) 
(if(setq as (ssget "_X" (list(cons 8 (vla-get-name layer))))) 
(bau_elemli as) 
) 
) 
(setq gesliste(cons(apply 'list (cons (vla-get-name layer)elemli))gesliste)) 
) 
(if 
gesliste 
(foreach item gesliste 
(princ (strcat "\n\nLayername: "(car item)"\nElemente . Anzahl \n")) 
(foreach i (cdr item) 
(prin1 i)(terpri) 
) 
) 
) 
(princ) 
)
Gruß
BildCADwiesel
Besucht uns im CHAT

Antworten