Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Attribute umbenennen

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
Autor Thema:   Attribute umbenennen (2032 mal gelesen)
Manuel Sauter
Mitglied



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

Beiträge: 28
Registriert: 29.10.2003

erstellt am: 22. Mrz. 2004 15: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

Hallo Zusammen,

ich habe mehrere hundert Zeichnungen in denen ein Attribut geändert werden soll. Beispiel:
Ich habe die Zeichnung eines Tisches mit einem Attribut, das beim Einfügen versteckt bleibt, welches die Bezeichnung und Artikelnummer beinhaltet. Tisch_00-111-22. Jetzt würde ich gerne das Attribut ändern in Tisch_00-111-22_N_K.
Gibt es hier eine Möglichkeit eine Routine zu erstellen das mir alle Zeichnungen öffnet, das Attribut ändert und anschließend wieder schließt? Ich habe im Forum gelesen das das für Layer zum Beispiel über ein Script möglich ist. Leider kenne ich mich mit Scripten überhaupt nicht aus. Also wenn eine Möglichkeit besteht, wäre ein kleines Beispiel nicht schlecht.
Im Voraus schon mal Danke für Eure Unterstützung.

Gruß Manuel

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

CADmium
Moderator
Maschinenbaukonstrukteur




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

Beiträge: 13435
Registriert: 30.11.2003

.

erstellt am: 22. Mrz. 2004 16:04    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 Manuel Sauter 10 Unities + Antwort hilfreich

Der Code hier für dein Beispiel :

(defun ATTRIB_UPDATE ( INSERT / OBJEKTDATEN SKALIERUNG ROTATION ORIGIN ATTRIBNAME ATTRIBINHALT)
  (if (and(=(type INSERT) 'ENAME)         
  (=(cdr(assoc 0 (setq OBJEKTDATEN (entget INSERT)))) "INSERT") 
      )
    (progn     
      (if (assoc 66 OBJEKTDATEN)
        (while (/= (cdr (assoc 0 OBJEKTDATEN)) "SEQEND") 
          (setq OBJEKTDATEN (entget (entnext (cdr (assoc -1 OBJEKTDATEN)))))
          (if (= (cdr (assoc 0 OBJEKTDATEN)) "ATTRIB")
            (progn     
              (setq ATTRIBNAME  (cdr(assoc 2 OBJEKTDATEN)))
              (setq ATTRIBINHALT (cdr(assoc 1 OBJEKTDATEN)))
     
              (if (=  ATTRIBINHALT "Tisch_00-111-22" )
                (progn                 
                  (setq ATTRIBINHALT "Tisch_00-111-22_N_K")
                   
                  (setq OBJEKTDATEN (subst(cons  1 ATTRIBINHALT)
                                          (assoc 1 OBJEKTDATEN)
                                          OBJEKTDATEN
                                    )
                  )
                  (entmod OBJEKTDATEN)
                )     
              )
            )
          )    
        )
      )     
    )
  ) 
)
;; --------------------------------------------------------------------------------- ;;
(defun C:ATTRIB_UPDATE ( / OBJEKT OBJEKTDATEN NAME AUSWAHL INDEX)
  (if (and(setq OBJEKT (ssget "_:S" '((0 . "INSERT")))) (setq OBJEKT (ssname OBJEKT 0)))
    (progn     
      (setq OBJEKTDATEN (entget OBJEKT))
      (setq NAME            (cdr(assoc 2 OBJEKTDATEN)))
      (setq AUSWAHL (ssget "_X"  '((0 . "INSERT"))))
      (setq INDEX 0)
      (if AUSWAHL
        (repeat (sslength AUSWAHL)
          (if (=(strcase(cdr(assoc 2 (entget(ssname AUSWAHL INDEX)))))(strcase NAME))
            (INSERT_UPDATE(ssname AUSWAHL INDEX))
          ) 
          (setq INDEX(1+ INDEX))
        )
      )
      (while (setq BLOCKDEF (tblnext "BLOCK" (null BLOCKDEF)))
        (if (and(/=(logand(cdr(assoc 70 BLOCKDEF))4)4)
                (or(/= (logand(cdr(assoc 70 BLOCKDEF))1)1)
                  (=(substr NAME 1 2) "*U")
                )
            )   
          (progn
            (setq OBJEKT (cdr (assoc -2 BLOCKDEF)))
            (while OBJEKT
              (if (and (=(cdr(assoc 0 (entget OBJEKT))) "INSERT")
                      (=(cdr(assoc 2 (entget OBJEKT)))    NAME))
                (INSERT_UPDATE (ssname AUSWAHL INDEX)VEKTOR MOD2)
              )
              (setq OBJEKT (entnext OBJEKT))
            )
            (entupd (cdr (assoc -2 BLOCKDEF)))
          )
        )
      )
      (command "._regen")
    ) 
    (princ "\nKeine Blockreferenz gewählt!\n")
  )
  (princ)
)


Kann natürlich noooch viel variabler gestaltet werden ...
... in dem hier wird geguckt, ob der Attributwert der Vorgabe entspricht.. Attributname wäre sinnvoller. Genauso, das diese Abfragen in der Hauproutine erfragt und dann als Parameter weitergegeben werden, aber vielleicht hilfts dir erstmal.

------------------
- Thomas -

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

Manuel Sauter
Mitglied



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

Beiträge: 28
Registriert: 29.10.2003

erstellt am: 23. Mrz. 2004 09:58    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 Thomas,

Erst einmal Danke für Deinen Eintrag.
Dein Code funktioniert bei eingefügten Blöcken. Ich jedoch suche eine Routine für die Originalzeichnung. Ich habe also das Attribut noch nicht im Block und kann es somit nicht über assoc darauf zugreifen.

Gruss Manuel

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

CADmium
Moderator
Maschinenbaukonstrukteur




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

Beiträge: 13435
Registriert: 30.11.2003

.

erstellt am: 23. Mrz. 2004 10:07    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 Manuel Sauter 10 Unities + Antwort hilfreich

.. das war aus deiner Fragestellung nicht ersichtlich ...

Du hast also eine Zeichnung mit Zeichnungselementen und Attributdefinitionen , welche du dann mit den "_ddinsert" bzw. "einfüge" -Befehl als Block(referenz)in deine anderen Zeichnungen einfügen willst? - Wie ist dann die Benennung der Attributdefinition ? - Oder ist nur der Vorgabeinhalt gleich ? ...
.. Willst du den Vorgabeinhalt ändern .. ? Warum dann 500 Zeichnungen mit den gleichen Elementen und Attributdefinitionen ? usw

Erstmal auf Antworten harrend ..

------------------
- Thomas -

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

Brischke
Moderator
CAD on demand GmbH




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

Beiträge: 4136
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools (d-tools.eu)

erstellt am: 23. Mrz. 2004 10:07    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 Manuel Sauter 10 Unities + Antwort hilfreich

Hallo Manuel,

deine Aufgabenbeschreibung ist etwas ungenau. In der Programmierung muss man ganz hart unterscheiden, ob es sich um die Benennung einer Attributdefinition handelt, oder um den Wert eines Attributes.

Handelt es sich um die Benennung, dann sind die Attributdefinition in der Blockdeifinition UND die Attributsbezeichnungen der Blockreferenzen (INSERT's, eingefügte Blöcke) zu ändern.

Das Ändern ist in beiden fällen möglich, auch in der Originalzeichnung, falls dieser Block als Zeichnungsdatei vorliegt, dann ist es jedoch keine in einer Blockdefinition verschachtelte Attributsdefinition, was dann auch zu beachten wäre.

Zusammengefasst, beantworte die Frage
Soll die Attributbenennung oder der Attributwert geändert werden?

Grüße Holger

------------------
Holger Brischke
(defun - Lisp over night!
AutoLISP-Programmierung für AutoCAD
Da weiß man, wann man's hat!

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

Manuel Sauter
Mitglied



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

Beiträge: 28
Registriert: 29.10.2003

erstellt am: 23. Mrz. 2004 10: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 Thomas,
sorry für die ungenaue beschreibung meiner Aufgabe.
Ich habe hunderte Originalzeichnungen mit einer Attributsdefinition die bei einfügen unsichtbar bleibt. Die Attributsdefinition hat Bezeichnung: ARTICLENUMBER und die Vorgabe: TISCH_11-222-33. Da ich  mehrere "Tische" habe ändert sich also in der nächsten Originalzeichnung die Vorgabe auf z.B. TISCH_11-222-44. Die Bezeichnung und die Vorgabe bleiben beim Einfügen immer gleich. Da ich in die Vorgabe noch mehr Informationen einbringen möchte, soll die Vorgabe jeder Zeichnung abgeändert werden. Und zwar soll an TISCH_11-222-33, ....-44 usw. "_N_K" angehängt werden. Ich hoffe meine Aufgabe ist nun eindeutiger.
Gruss Manuel

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

Brischke
Moderator
CAD on demand GmbH




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

Beiträge: 4136
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools (d-tools.eu)

erstellt am: 23. Mrz. 2004 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 Manuel Sauter 10 Unities + Antwort hilfreich

ich darf auch antworten? 

Du willst also in vielen Vorgabezeichnungen die Attributdefinition mit dem Namen ARTICLENUMBER die Vorgabewerte, wenn sie einem Suchmuster TISCH_11-222-## entsprechen, mit der Zeichenkette _N_K erweitern?

In bereits eingefügten Blöcken soll sich nichts ändern?

Grüße Holger

------------------
Holger Brischke
(defun - Lisp over night!
AutoLISP-Programmierung für AutoCAD
Da weiß man, wann man's hat!

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

Manuel Sauter
Mitglied



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

Beiträge: 28
Registriert: 29.10.2003

erstellt am: 23. Mrz. 2004 10:52    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 Holger,

Natürlich darfst Du auch antworten :-). Du hast es richtig erkannt. Eines muss ich jedoch noch anbringen. Das Suchmuster beschränkt sich allerdings nicht auf die letzten zwei Zeichen der Vorgabe, sondern wie folgt "TISCH_##-###-##". Generrell besteht meine Vorgabe aus diesen 15 Zeichen. An diese Zeichen sollen nun "_N_K" angehängt werden. Am schönsten wäre es wenn ich den "Anhang noch variieren könnt. Also so eine Art Abfrage was ich den anhängen möchte (Statt "_N_K" z.B. _N_M). Aber das ist nicht so wichtig. Ich kann ja die Routine abändern.

Gruss Manuel

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

Brischke
Moderator
CAD on demand GmbH




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

Beiträge: 4136
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools (d-tools.eu)

erstellt am: 23. Mrz. 2004 11:05    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 Manuel Sauter 10 Unities + Antwort hilfreich

die Frage ist, welche Abhängigkeit besteht, um Programmtechnisch die Entscheidung des Anhängsels treffen zu können.
Wenn das jedoch notwendig ist,
dann sollte dir folgende Zeilen helfen
Code:

(defun chg:attdef_vg (/ aws)
  (setq aws (ssget "_X" '((0 . "ATTDEF")(2 . "ARTICLENUMBER")(1 . "TISCH_##-###-##"))))
  (if aws (mapcar '(lambda (AD)
                    (entmod
                      (subst
                        (cons 1 (strcat (cdr(assoc 1 AD)) "_N_K"))
                        (assoc 1 AD)
                        AD)
                      )
                    )
                  (mapcar 'entget (bau_elemli aws))
                  )
    )
  )
(defun bau_elemli (asatz / n elemli)
  (setq n 0)
  (repeat (sslength asatz)
    (setq elemli(cons (ssname asatz n) elemli)
  n (1+ n))
    )
  elemli
  )
(chg:attdef_vg)

Dieses Tool dann am besten per Script auf die ganzen Zeichnungen anwenden. Im Script dann die Ladeanweisung (load "XYZ.lsp") rein, dann passiert der Rest von allein.

Ich würde das mit ScriptPro machen.

Bei Fragen ...

Grüße Holger

------------------
Holger Brischke
(defun - Lisp over night!
AutoLISP-Programmierung für AutoCAD
Da weiß man, wann man's hat!

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

Manuel Sauter
Mitglied



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

Beiträge: 28
Registriert: 29.10.2003

erstellt am: 23. Mrz. 2004 12: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 Holger,

funktioniert prima.

Danke

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)2020 CAD.de | Impressum | Datenschutz