Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Rund um AutoCAD
  hierarchische Anordnung der Block-Attribute beim Export

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  hierarchische Anordnung der Block-Attribute beim Export (1402 mal gelesen)
kakoin
Mitglied



Sehen Sie sich das Profil von kakoin an!   Senden Sie eine Private Message an kakoin  Schreiben Sie einen Gästebucheintrag für kakoin

Beiträge: 10
Registriert: 04.08.2009

erstellt am: 04. Aug. 2009 14:48    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


Attribute.pdf

 
Hallo Zusammen,
folgendes Problem hat sich aus unserer Büropraxis ergeben - zum besseren Verständnis angehängt ein Beispiel als PDF:

Eine Baugruppe besteht aus verschiedenen Bauteilen.
- Baugruppe ist definiert als Block mit den Attributen "Baugruppenbezeichnung" (Outer Mast Type 2) und "Positionsnummer" (Pos. 001 bzw. 002).
- die Baugruppen bestehen aus teilweise gleichen Bauteilen (der obere Teil beider Positonen besteht aus lediglich 3 unterschiedlichen Blechen, der untere Teil ist unterschiedlich).
- alle gleichen Bauteile bestehen aus dem selben Block (um Veränderungen, bspw. Blechdicken über alle Positionen hinweg anpassen zu können).

Das Problem: lese ich die Attribute mit Hilfe von EATTEXT aus, habe ich keine Möglichkeit die Attribute der "eingelagerten" (nested) Blocks (Bauteile) den beiden "haupt" Blöcken (Baugruppen) zuzuordnen -
quasi eine hierarchische Anordnung der Attribute.
Eine nachträgliche Zuordnung in Excel scheidet bei komplexeren Zeichnungen aus.

Welche Möglichkeiten gibt es den Export wie vorgesehen vorzunehmen?  Ggf Scripte, externe Programme - alles ist willkommen!
So ungewöhnlich dürfte das Problem nicht sein - gefunden in den Weiten des Netzes habe ich zu diesem Thema nichts. Wie wird das Problem gelöst werden?

Dank Euch schon mal für die Hilfe,
Gruß kakoin

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Andreas Kraus
Mitglied
Elektrotechniker


Sehen Sie sich das Profil von Andreas Kraus an!   Senden Sie eine Private Message an Andreas Kraus  Schreiben Sie einen Gästebucheintrag für Andreas Kraus

Beiträge: 1356
Registriert: 11.01.2006

Win 10
ACAD 2022

erstellt am: 04. Aug. 2009 15:45    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für kakoin 10 Unities + Antwort hilfreich

Hallo kakoin,
blos daß ichs richtig verstanden hab:

1. Eine Baugruppe ist ein Block mit Attributen
2. Eine Baugruppe besteht aus Bauteilen
3. Ein Bauteil ist auch ein Block mit Attributen

Du möchtest eine Liste die Informationen (Blockname, Attribute) über die Baugruppe und deren Bauteile enthält.

Daß das mit EATEXT nicht geht hast du schon bemerkt.

Mit Lisp machbar  .
Sind denn alle Infos in Attributen oder muß z.B. der Blockname auch erfasst werden ?
Gib mal ne Info, ich glaub da hätt ich Spass dabei 

------------------
Gruß
Andreas

http://kraus-cad.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

kakoin
Mitglied



Sehen Sie sich das Profil von kakoin an!   Senden Sie eine Private Message an kakoin  Schreiben Sie einen Gästebucheintrag für kakoin

Beiträge: 10
Registriert: 04.08.2009

erstellt am: 04. Aug. 2009 16:24    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Andreas,

jop - stimmt so.

Alle wesentlichen Infos wären als Attribute hinterlegt, der Blockname könnte aber optional erfasst werden (ist aber nicht zwingend notwendig).

Jedes Element in ACAD hat doch eine eindeutige Nummer, vielleicht kann die Zuordnung darüber geschen?

Danke vorab!
(wenn ich noch irgendwie helfen kann...?)

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Andreas Kraus
Mitglied
Elektrotechniker


Sehen Sie sich das Profil von Andreas Kraus an!   Senden Sie eine Private Message an Andreas Kraus  Schreiben Sie einen Gästebucheintrag für Andreas Kraus

Beiträge: 1356
Registriert: 11.01.2006

Win 10
ACAD 2022

erstellt am: 05. Aug. 2009 17:53    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für kakoin 10 Unities + Antwort hilfreich

Hallo kakoin,
probier mal diese Lisp.
Bei mir gehts, bei dir hoffentlich auch.

Erzeugt eine Textdatei die du dann im Excel einlesen kannst.

(defun c:get_natt (/ satz ent_name att_list)

  (defun get_attlist (ent_name / obj_name att_list)
    (setq obj_name (vlax-ename->vla-object ent_name))
    (if (and (vlax-property-available-p obj_name "hasattributes")
    (= (vla-get-hasattributes obj_name) :vlax-true)
)
      (progn
(setq att_list
      (mapcar
'(lambda (obj)
    (list (vla-get-tagstring obj)
  (vla-get-textstring obj)
    )
  )
(vlax-safearray->list
  (vlax-variant-value
    (vla-getattributes (vlax-ename->vla-object ent_name))
  )
)
      )
)
(setq att_bez_list
      (append att_bez_list (mapcar 'car att_list))
)
      )
    )
    att_list
  )

  (defun get_nested_att (ent_name / ent_data b_att_list)
    (setq ent_data (entget ent_name))
    (setq blk_bez (cdr (assoc 2 ent_data)))
    (setq blk_data (tblsearch "BLOCK" blk_bez))
    (setq e_name (cdr (assoc -2 blk_data)))
    (while e_name
      (setq e_data (entget e_name))
      (if (= (cdr (assoc 0 e_data)) "INSERT")
(setq b_att_list (cons (get_attlist e_name) b_att_list))
      )
      (setq e_name (entnext e_name))
    )
    (reverse b_att_list)
  )

  (defun purge_list (liste / dummy_list ent)
    (setq dummy_list (list))
    (foreach ent liste
      (if (not (member ent dummy_list))
(setq dummy_list (cons ent dummy_list))
      )
    )
    (reverse dummy_list)
  )

  (if (setq satz (ssget))
    (progn
      (setq att_bez_list (list "Objektreferenz"))
      (setq n (1- (sslength satz)))
      (repeat (sslength satz)
(setq ent_name (ssname satz n))
(setq ent_data (entget ent_name))
(setq
  att_list
  (append att_list
  (append (list (cons (list "Objektreferenz"
    (cdr (assoc 5 ent_data))
      )
      (get_attlist ent_name)
)
  )
  (get_nested_att ent_name)
  )
  (list 'nil)
  )
)
      )
      (setq n (1- n))
    )
  )
  (setq att_bez_list (purge_list att_bez_list))
  (setq pfad (getfiled (getvar "dwgprefix") "sichern" "txt" 3))
  (setq datei (open pfad "w"))
  (write-line
    (apply 'strcat
  (mapcar '(lambda (att_bez) (strcat att_bez (chr 9)))
  att_bez_list
  )
    )
    datei
  )
  (foreach txt
  (mapcar
    '(lambda (data)
(print data)
(if data
  (progn
    (apply
      'strcat
      (mapcar '(lambda (att_bez)
(if (assoc att_bez data)
  (strcat (nth 1 (assoc att_bez data))
  (chr 9)
  )
  (chr 9)
)
      )
      att_bez_list
      )
    )
  )
  ""
)
      )
    att_list
  )
    (write-line txt datei)
  )
  (close datei)
  (princ)
)

------------------
Gruß
Andreas

http://kraus-cad.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

kakoin
Mitglied



Sehen Sie sich das Profil von kakoin an!   Senden Sie eine Private Message an kakoin  Schreiben Sie einen Gästebucheintrag für kakoin

Beiträge: 10
Registriert: 04.08.2009

erstellt am: 06. Aug. 2009 11:21    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Super - Vielen Dank! 

leider bekomme ich bei sowohl bei ACAD 2007 und bei ACAD 2010 eine Fehlermeldung.

Den Code habe ich in eine txt Datei kopiert, als ANSI gespeichert und "BlockAttribute.lsp" benannt.
Nach Einbinden in Autocad und Ausführen mit dem Befehl GET_NATT und Anwählen des Schatelblocks wird folgende Fehlermeldung angezeigt:

ACAD2007 (english):
Select objects:
; error: ActiveX Server returned an error: Invalid index

ACAD2010 (deutsch):
Objekte wählen:
; Fehler: no function definition: VLAX-ENAME->VLA-OBJECT


VLA bedeutet vermutlich "visual lisp application"? Hängts in mit der .dll zusammen?

Habe nach

(defun c:get_natt (/ satz ent_name att_list)

zum Aufrufen von vla folgende Zeilen eingefügt:

(vl-load-com)
(setq *thisdrawing* (vla-get-activedocument
(vlax-get-acad-object)
) ;_ end of vla-get-activedocument
*modelspace* (vla-get-ModelSpace *thisdrawing*)
) ;_ end of setq

leider ergebinslos.
Kannst du mir auf Grund meiner Beschreibung weiterhelfen?

Gruß und Danke!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Andreas Kraus
Mitglied
Elektrotechniker


Sehen Sie sich das Profil von Andreas Kraus an!   Senden Sie eine Private Message an Andreas Kraus  Schreiben Sie einen Gästebucheintrag für Andreas Kraus

Beiträge: 1356
Registriert: 11.01.2006

Win 10
ACAD 2022

erstellt am: 06. Aug. 2009 12:18    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für kakoin 10 Unities + Antwort hilfreich

Hm ...
also (vl-load-com) ist gut, das vergess ich immer wieder gern 

aber warum VLAX-ENAME->VLA-OBJECT unbekannt ist will mir nicht in den Kopf 

Kennt sich damit jemand aus ?
Ich kann den Fehler bei mir leider nicht nachvollziehen, hab hier nur 2009 und bei mir läufts.

------------------
Gruß
Andreas

http://kraus-cad.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

kakoin
Mitglied



Sehen Sie sich das Profil von kakoin an!   Senden Sie eine Private Message an kakoin  Schreiben Sie einen Gästebucheintrag für kakoin

Beiträge: 10
Registriert: 04.08.2009

erstellt am: 06. Aug. 2009 12:57    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


BlockAttribute.zip

 
Hallo Andreas,

Habs jetzt auch mit ACAD2009 probiert - mit gleichem negativen Ergebnis.

Zur Kontrolle, dass wir mit der gleichen Basis testen, anbei beide Dateien - die *.dwg mit den Schachtelblöcken und Attributen und deine *.lsp Datei, zusätzlich mit (vl-load-com).

Wie immer wahrscheinlich nur eine Kleinigkeit.... bin gespannt was die Lösung ist!

Gruß

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Dorfy
Mitglied
Double-Dipl.-Ing. Bleistiftanspitzer


Sehen Sie sich das Profil von Dorfy an!   Senden Sie eine Private Message an Dorfy  Schreiben Sie einen Gästebucheintrag für Dorfy

Beiträge: 900
Registriert: 21.07.2006

AutoCad2007, ProE, HiCad

erstellt am: 06. Aug. 2009 14:53    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für kakoin 10 Unities + Antwort hilfreich

hi,
@Andreas läuft aber

ich werf mal
(vla-GetConstantAttributes Block)
in die Runde und
noch (vl-catch-all...
(Andreas weiß sicher bescheid  )

------------------
Mfg Heiko

Elefantenjagd in Afrika
"... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..."   (www.uni-leipzig.de/~rotheh/elefant.htm)

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Andreas Kraus
Mitglied
Elektrotechniker


Sehen Sie sich das Profil von Andreas Kraus an!   Senden Sie eine Private Message an Andreas Kraus  Schreiben Sie einen Gästebucheintrag für Andreas Kraus

Beiträge: 1356
Registriert: 11.01.2006

Win 10
ACAD 2022

erstellt am: 06. Aug. 2009 16:50    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für kakoin 10 Unities + Antwort hilfreich

Ha !!!
Kontante Attribute !!!
Danke Heiko, man kann ja nicht an alles denken 

Ich bau das mal um, wird aber heut wahrscheinlich nix mehr.

------------------
Gruß
Andreas

http://kraus-cad.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Andreas Kraus
Mitglied
Elektrotechniker


Sehen Sie sich das Profil von Andreas Kraus an!   Senden Sie eine Private Message an Andreas Kraus  Schreiben Sie einen Gästebucheintrag für Andreas Kraus

Beiträge: 1356
Registriert: 11.01.2006

Win 10
ACAD 2022

erstellt am: 10. Aug. 2009 10:42    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für kakoin 10 Unities + Antwort hilfreich

So - jetzt müsts laufen.
Geht sicher noch etwas eleganter als mit den If-Abfragen aber ich möcht erst mal ne Rückmeldung obs läuft.

(defun c:get_natt (/ satz ent_name att_list)
  (vl-load-com)
  (defun get_attlist (ent_name / obj_name att_list)
    (setq obj_name (vlax-ename->vla-object ent_name))
    (if (and (vlax-property-available-p obj_name "hasattributes")
    (= (vla-get-hasattributes obj_name) :vlax-true)
)
      (progn
(if (and (>= (vlax-safearray-get-l-bound
      (vlax-variant-value
(vla-getattributes obj_name)
      )
      1
    )
    0
)
(>= (vlax-safearray-get-u-bound
      (vlax-variant-value
(vla-getattributes obj_name)
      )
      1
    )
    0
)
    )
  (setq att_list
(mapcar
  '(lambda (obj)
      (list (vla-get-tagstring obj)
    (vla-get-textstring obj)
      )
    )
  (vlax-safearray->list
    (vlax-variant-value
      (vla-getattributes obj_name)
    )
  )
)
  )
)

(if (and (>= (vlax-safearray-get-l-bound
      (vlax-variant-value
(vla-GetConstantAttributes obj_name)
      )
      1
    )
    0
)
(>= (vlax-safearray-get-u-bound
      (vlax-variant-value
(vla-GetConstantAttributes obj_name)
      )
      1
    )
    0
)
    )
  (setq att_list
(append att_list
(mapcar
  '(lambda (obj)
      (list (vla-get-tagstring obj)
    (vla-get-textstring obj)
      )
    )
  (vlax-safearray->list
    (vlax-variant-value
      (vla-GetConstantAttributes obj_name)
    )
  )
)
)
  )
)
(setq att_bez_list
      (append att_bez_list (mapcar 'car att_list))
)
      )
    )
    att_list
  )

  (defun get_nested_att (ent_name / ent_data b_att_list)
    (setq ent_data (entget ent_name))
    (setq blk_bez (cdr (assoc 2 ent_data)))
    (setq blk_data (tblsearch "BLOCK" blk_bez))
    (setq e_name (cdr (assoc -2 blk_data)))
    (while e_name
      (setq e_data (entget e_name))
      (if (= (cdr (assoc 0 e_data)) "INSERT")
(setq b_att_list (cons (get_attlist e_name) b_att_list))
      )
      (setq e_name (entnext e_name))
    )
    (reverse b_att_list)
  )

  (defun purge_list (liste / dummy_list ent)
    (setq dummy_list (list))
    (foreach ent liste
      (if (not (member ent dummy_list))
(setq dummy_list (cons ent dummy_list))
      )
    )
    (reverse dummy_list)
  )

  (if (setq satz (ssget))
    (progn
      (setq att_bez_list (list "Objektreferenz"))
      (setq n (1- (sslength satz)))
      (repeat (sslength satz)
(setq ent_name (ssname satz n))
(setq ent_data (entget ent_name))
(setq
  att_list
  (append att_list
  (append (list (cons (list "Objektreferenz"
    (cdr (assoc 5 ent_data))
      )
      (get_attlist ent_name)
)
  )
  (get_nested_att ent_name)
  )
  (list 'nil)
  )
)
      )
      (setq n (1- n))
    )
  )
  (setq att_bez_list (purge_list att_bez_list))
  (setq pfad (getfiled (getvar "dwgprefix") "sichern" "txt" 3))
  (setq datei (open pfad "w"))
  (write-line
    (apply 'strcat
  (mapcar '(lambda (att_bez) (strcat att_bez (chr 9)))
  att_bez_list
  )
    )
    datei
  )
  (foreach txt
  (mapcar
    '(lambda (data)
(print data)
(if data
  (progn
    (apply
      'strcat
      (mapcar '(lambda (att_bez)
(if (assoc att_bez data)
  (strcat (nth 1 (assoc att_bez data))
  (chr 9)
  )
  (chr 9)
)
      )
      att_bez_list
      )
    )
  )
  ""
)
      )
    att_list
  )
    (write-line txt datei)
  )
  (close datei)
  (princ)
)

------------------
Gruß
Andreas

http://kraus-cad.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

kakoin
Mitglied



Sehen Sie sich das Profil von kakoin an!   Senden Sie eine Private Message an kakoin  Schreiben Sie einen Gästebucheintrag für kakoin

Beiträge: 10
Registriert: 04.08.2009

erstellt am: 10. Aug. 2009 11:36    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Andreas,

die Blockattribute können herausgeschrieben werden - klappt sehr gut!

Aber: beim Auswählen mehrerer, unterschiedlicher Blöcke werden nur die Attribute eines Blocks herausgeschrieben - dafür aber mehrfach.

Beipiel dwg Datei von weiter oben (nicht irritieren lassen - die Spalten stimmen):

Objektreferenz    DESCRIPTION    FINISHING    POS    THIKNESS    VOLUMEN    MATERIAL 
16A    Outer Mast Type 2    hot dip galvanized and coated    POS. 001             
                10    30    S355 
                10    28    S355 
                10    28    S355 
                10    21    S355 
                10    21    S355 
                10    26    S355 

16A    Outer Mast Type 2    hot dip galvanized and coated    POS. 001             
                10    30    S355 
                10    28    S355 
                10    28    S355 
                10    21    S355 
                10    21    S355 
                10    26    S355


Gruß - und tausend Dank!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Andreas Kraus
Mitglied
Elektrotechniker


Sehen Sie sich das Profil von Andreas Kraus an!   Senden Sie eine Private Message an Andreas Kraus  Schreiben Sie einen Gästebucheintrag für Andreas Kraus

Beiträge: 1356
Registriert: 11.01.2006

Win 10
ACAD 2022

erstellt am: 10. Aug. 2009 12:10    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für kakoin 10 Unities + Antwort hilfreich

Mann binn ich dabbisch 
den Zähler an die falsche Stelle gesetzt.

(defun c:get_natt (/ satz ent_name att_list)
  (vl-load-com)
  (defun get_attlist (ent_name / obj_name att_list)
    (setq obj_name (vlax-ename->vla-object ent_name))
    (if (and (vlax-property-available-p obj_name "hasattributes")
    (= (vla-get-hasattributes obj_name) :vlax-true)
)
      (progn
(if (and (>= (vlax-safearray-get-l-bound
      (vlax-variant-value
(vla-getattributes obj_name)
      )
      1
    )
    0
)
(>= (vlax-safearray-get-u-bound
      (vlax-variant-value
(vla-getattributes obj_name)
      )
      1
    )
    0
)
    )
  (setq att_list
(mapcar
  '(lambda (obj)
      (list (vla-get-tagstring obj)
    (vla-get-textstring obj)
      )
    )
  (vlax-safearray->list
    (vlax-variant-value
      (vla-getattributes obj_name)
    )
  )
)
  )
)

(if (and (>= (vlax-safearray-get-l-bound
      (vlax-variant-value
(vla-GetConstantAttributes obj_name)
      )
      1
    )
    0
)
(>= (vlax-safearray-get-u-bound
      (vlax-variant-value
(vla-GetConstantAttributes obj_name)
      )
      1
    )
    0
)
    )
  (setq att_list
(append att_list
(mapcar
  '(lambda (obj)
      (list (vla-get-tagstring obj)
    (vla-get-textstring obj)
      )
    )
  (vlax-safearray->list
    (vlax-variant-value
      (vla-GetConstantAttributes obj_name)
    )
  )
)
)
  )
)
(setq att_bez_list
      (append att_bez_list (mapcar 'car att_list))
)
      )
    )
    (print att_list)
    att_list
  )

  (defun get_nested_att (ent_name / ent_data b_att_list)
    (setq ent_data (entget ent_name))
    (setq blk_bez (cdr (assoc 2 ent_data)))
    (setq blk_data (tblsearch "BLOCK" blk_bez))
    (setq e_name (cdr (assoc -2 blk_data)))
    (while e_name
      (setq e_data (entget e_name))
      (if (= (cdr (assoc 0 e_data)) "INSERT")
(setq b_att_list (cons (get_attlist e_name) b_att_list))
      )
      (setq e_name (entnext e_name))
    )
    (reverse b_att_list)
  )

  (defun purge_list (liste / dummy_list ent)
    (setq dummy_list (list))
    (foreach ent liste
      (if (not (member ent dummy_list))
(setq dummy_list (cons ent dummy_list))
      )
    )
    (reverse dummy_list)
  )

  (if (setq satz (ssget))
    (progn
      (setq att_bez_list (list "Objektreferenz"))
      (setq n (1- (sslength satz)))
      (repeat (sslength satz)
(setq ent_name (ssname satz n))
(setq ent_data (entget ent_name))
(setq
  att_list
  (append att_list
  (append (list (cons (list "Objektreferenz"
    (cdr (assoc 5 ent_data))
      )
      (get_attlist ent_name)
)
  )
  (get_nested_att ent_name)
  )
  (list 'nil)
  )
)
(setq n (1- n))
      )
    )
  )
  (setq att_bez_list (purge_list att_bez_list))
  (setq pfad (getfiled (getvar "dwgprefix") "sichern" "txt" 3))
  (setq datei (open pfad "w"))
  (write-line
    (apply 'strcat
  (mapcar '(lambda (att_bez) (strcat att_bez (chr 9)))
  att_bez_list
  )
    )
    datei
  )
  (foreach txt
  (mapcar
    '(lambda (data)
(print data)
(if data
  (progn
    (apply
      'strcat
      (mapcar '(lambda (att_bez)
(if (assoc att_bez data)
  (strcat (nth 1 (assoc att_bez data))
  (chr 9)
  )
  (chr 9)
)
      )
      att_bez_list
      )
    )
  )
  ""
)
      )
    att_list
  )
    (write-line txt datei)
  )
  (close datei)
  (princ)
)

------------------
Gruß
Andreas

http://kraus-cad.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

kakoin
Mitglied



Sehen Sie sich das Profil von kakoin an!   Senden Sie eine Private Message an kakoin  Schreiben Sie einen Gästebucheintrag für kakoin

Beiträge: 10
Registriert: 04.08.2009

erstellt am: 10. Aug. 2009 13:13    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

WOW!
funktioniert - tadellos!

Schachtelblöcke mit Attributen werden hierarchisch ausgelesen - genau was ich mir gewünscht habe.

Andreas, super!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz