Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Attributswerte übertragen

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:  Attributswerte übertragen (2596 mal gelesen)
Ian_K
Mitglied



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

Beiträge: 40
Registriert: 22.06.2006

erstellt am: 01. Apr. 2008 09:34    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

Hab da mal eine Frage:
Das folgende, sehr nützliche Tool, kann Attributinhaltswerte von einem Block zum anderen übertragen.
Vorraussetzung, die Attributebezeichnungen sind gleich.
Nun habe ich im alten Quellblock einige gleiche Attributbezeichnungen..
Im neuen habe ich diese schon eindeutig gemacht, damit es zukünftig keine Probleme mehr gibt.

Trotz dessen, kann man das Tool erweitern, dass die nicht eindeutigen Attribute nacheinanderfolgend in
die neu definierten Attribute geschrieben werden können?

Beispiel (abgesehen von den eindeutigen Attributen):
Block alt:
BESCHREIBUNG
DAT
NAME
BESCHREIBUNG
DAT
NAME
BESCHREIBUNG
DAT
NAME

Block neu:
BESCHREIBUNG-A
DAT-A
NAME-A
BESCHREIBUNG-B
DAT-B
NAME-A
BESCHREIBUNG-C
DAT-C
NAME-C

Hat da jemand eine Idee?

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

Ian_K
Mitglied



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

Beiträge: 40
Registriert: 22.06.2006

erstellt am: 01. Apr. 2008 09: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

Hatte den Quelltext vergessen, auf dem ich mir das vorstellen könnte:

;;; ***********************************************************************
;;; * ATT-CLONE dient zum Übertragen von Attributwerten eines Blockes auf *
;;; * beleibige andere Blöcke.                                            *
;;; * Bei identischen "Feldnamen" (also AttributNAMEN) wird der Wert des  *
;;; * Quellblocks als Wert des zu klickenden Zielblocks eingetragen.      *
;;; * Versuch's mit der dem Original-Zip Archiv beiliegenden              *
;;; * "Test-Att-Clone.dwg"                                                *
;;; *                                                                    *
;;; * Written by Marc Scherer in 2002                                    *
;;; *                                                                    *
;;; * Anregungen/Kritik an "marc.scherer@zvo.com"                        *
;;; *                                                                    *
;;; * Dieses Programm folgt der "Better than Nothing" Philosophie des    *
;;; * Leonid Nemirovsky: (http://home.pacifier.com/~nemi/)                *
;;; * Zitat:                                                              *
;;; * The AutoLISP programs you are about to check - are NOT shareware    *
;;; * or freeware. They are BTN - Better Than Nothing Software.          *
;;; * You can freely use them in any way you choose.                      *
;;; * Just remember one thing.......                                      *
;;; * If they do not perform the way you expect -                        *
;;; *                                it is still BETTER THAN NOTHING !!!  *
;;; * I wrote those programs for my every day work.                      *
;;; * Some of them are more useful, some - are SO SO.                    *
;;; * ... Good Luck !                                                    *
;;; ***********************************************************************


;;; Funktionsaufruf zum Pinselübertragen
;;; Überträgt Attributwerte von einem Quellblock auf beliebig
;;; viele Zielblöcke
(defun C:ATT-CLONE (/ ATT-LST CHK OBJ OBJ-DATA)
  (while
    (/= (if (setq OBJ
                  (car
                    (entsel
                      "\nBitte Quellblock für Attributwert-Übertragung wählen: "
                    ) ;_ end of entsel
                  ) ;_ end of car
            ) ;_ end of setq
          (progn
            (setq CHK (cdr (assoc 0 (setq OBJ-DATA (entget OBJ)))))
            (if (/= CHK "INSERT")
              (princ "\nKein BLOCK-Objekt geklickt, versuch's noch einmal...")
            ) ;_ end if
            CHK
          ) ;_ end of progn
          (princ "\nNICHTS geklickt, versuch's noch einmal...")
        ) ;_ end of if
        "INSERT"
    ) ;_ end of /=
  ) ;_ end of while
  (if OBJ-DATA
    (progn
      (if (CHK-ENT OBJ)
        (progn
          (setq ATT-LST (ALL-BL-TXT OBJ))
          (if (not ATT-LST)
            (princ
              "\nQuell-Block enthält keinerlei Attributsdaten... Funktionsende !"
            ) ;_ end princ
            (progn
              (while (setq OBJ
                            (car
                              (entsel
                                "\nBitte Zielblock für Attributwert-Übertragung wählen (R.Klick=Ende): "
                              ) ;_ end of entsel
                            ) ;_ end of car
                    ) ;_ end of setq
                (if (CHK-ENT OBJ)
                  (progn
                    (if (assoc 66 (entget OBJ))
                      (progn
                        (foreach ELEM ATT-LST
                          (princ (ED-ATT ELEM OBJ))
                        ) ;_ end foreach
                      ) ;_ end progn
                      (princ "\nZielblock enthält keine Attribute !")
                    ) ;_ end if
                  ) ;_ end progn
                  (princ "\nObjekt war KEIN Block oder UNGÜLTIG!")
                ) ;_ end of if
              ) ;_ end of while             
            ) ;_ end progn
          ) ;_ end if
        ) ;_ end progn
        (princ "\nObjekt war KEIN Block oder UNGÜLTIG!")
      ) ;_ end of if
    ) ;_ end of progn
  ) ;_ end of if
  (princ)
) ;_ end defun


;;; Funktion checkt, ob Objekt ein regulärer Block oder'n Xref
;;; ist, bzw. ob's überhaupt 'n Insert ist...
;;; Rückgabe: Wenn kein Block, dann nil, ansonsten Ausgabe wie Eingabe
(defun CHK-ENT (ENT / ENT-DATA)
  (if (= (type ent) 'ENAME)
    (setq ent-data (entget ent))
    (setq ent-data (entget (car ent)))
  ) ;_ end of if
  (cond
    ((= (cdr (assoc 0 ENT-DATA))
        "INSERT"
    ) ;_ end =
    (if
      (>= (cdr (assoc 70 (tblsearch "BLOCK" (cdr (assoc 2 ENT-DATA))))
          ) ;_ end cdr
          4
      ) ;_ Wenn T dann Xref!!!
        (progn
          (princ
            "\nGeklicktes Objekt war ein XREF. Versuch's noch mal..."
          ) ;_ end princ
          (setq ENT NIL)
        ) ;_ end progn
        (setq ENT ENT)
    ) ;_ end if
    )
    (t
    (princ
      "\nGeklicktes Objekt war KEIN Block. Versuch's noch mal..."
    ) ;_ end princ
    (setq ENT NIL)
    )
  ) ;_ end cond
  ENT
) ;_ end defun


;;; Funktion tauscht Attributwerte aus.
;;; Zu übergeben ist eine cons List aus
;;; ("ATTBEZEICHNUNG" . "NEUER TEXTWERT")
;;; sowie der Elementname des Blocks, dessen Werte verändert werden sollen
(defun ED-ATT (CHANGELST OBJNAME / ATTNAME BACK CHK OBJDATA TXTWRT)
  (setq ATTNAME (car CHANGELST)
        TXTWRT  (cdr CHANGELST)
        OBJDATA (entget OBJNAME)
  ) ;_ end of setq
  (while (/= (cdr (assoc 0 OBJDATA)) "SEQEND")
    (setq OBJDATA (entget (entnext (cdr (assoc -1 OBJDATA)))))
    (if (eq (cdr (assoc 2 OBJDATA)) ATTNAME)
      (progn
        (setq OBJDATA (subst (cons 1 TXTWRT) (assoc 1 OBJDATA) OBJDATA))
        (entmod OBJDATA)
        (setq CHK (entupd OBJNAME)
              OBJDATA (list (cons 0 "SEQEND"))
        ) ;_ end setq
      ) ;_ end progn
    ) ;_ end if
  ) ;_ end while
  (if CHK
    (setq BACK (strcat "\nWert: \""      TXTWRT
                      "\" für: \""      ATTNAME
                      "\" eingesetzt..."
                      ) ;_ end strcat
    ) ;_ end of setq
    (setq BACK
          (strcat "\nFeld: \"" ATTNAME "\" im Zielblock nicht vorhanden...")
    ) ;_ end of setq
  ) ;_ end of if
  BACK
) ;_ end of defun


;;; Funktion durchsucht den Block, der über ename übergeben wird,
;;; nach ATTRIB's und erzeugt 'ne Textliste
;;; Retval: Liste der Texte oder nil
(defun ALL-BL-TXT (ENAME / EDATA RETVAL)
  (setq RETVAL '() ;_ Liste initialiseren
        EDATA  (entget ENAME)
  ) ;_ end setq
  (if (assoc 66 EDATA) ;_ GC 66 fehlt, wenn Block keine Attrib's hat
    (progn
      (while (/= (cdr (assoc 0 EDATA)) "SEQEND") ;_ Solange die Sequenz nicht endet...
        (setq EDATA (entget (entnext (cdr (assoc -1 EDATA)))))
        (if (= (cdr (assoc 0 EDATA)) "ATTRIB")
          (setq RETVAL
                (cons
                  (cons (cdr (assoc 2 EDATA)) (cdr (assoc 1 EDATA)))
                  RETVAL
                ) ;_ end cons
          ) ;_ end setq
        ) ;_ end if
      ) ;_ end while
      (setq RETVAL (reverse RETVAL))
    ) ;_ end progn
  ) ;_ end if
  RETVAL
) ;_ end defun

(princ "\n\"ATT-CLONE\"->\"Pinselübertragung\" von Attribut-WERTEN...")

(princ)

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

joern bosse
Ehrenmitglied
Dipl.-Ing. Vermessung


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

Beiträge: 1734
Registriert: 11.10.2004

Window 10
ACAD 2021
CIVIL 2021
BricsCAD V14-V22
Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz
16.0GB RAM
NVIDIA GeForce GTX 1050<P>

erstellt am: 01. Apr. 2008 10:28    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 Ian_K 10 Unities + Antwort hilfreich

Hallo Ian,
wäre es nicht einfacher, den Block mit neuen, eindeutigen Attributsnamen zu definieren, und die vorhandenen Blöcke über den AutoCAD-Befehl "attsync" zu aktualieren, und dann Marc sein Programm durchlaufen zu lassen???

------------------
viele Grüße

Jörn

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

Wolfgang S
Mitglied
CADaver


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

Beiträge: 270
Registriert: 06.03.2006

AC 2009, C3D 2009, AC 2010, C3D 2010, AC 2011, C3D 2011, RVT 2010, RVT 2011, ASD 2011 und alles darunter bis R14 +
Win XP, Win XP64, Win 7/64

erstellt am: 01. Apr. 2008 10: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 Nur für Ian_K 10 Unities + Antwort hilfreich

Zitat:
wäre es nicht einfacher, den Block mit neuen, eindeutigen Attributsnamen zu definieren, und die vorhandenen Blöcke über den AutoCAD-Befehl "attsync" zu aktualieren

an dem Problem häng ich auch, weil ja nach der sauberen Definition der Attributsnamen die Referenzen nicht synchron zur Definition sind.
Dadurch werden alle Value rausgeschmissen und die alten Attribute mit neuen Attributen ausgetauscht.

Was hier angebracht wär ist eine Art Übersetzer

BLOCK1->ATT_ALT  Werte übertragen auf BLOCK2->ATT_NEU usw.

erst dann könnte man den alten Block kübeln und den neuen evt. sogar umbenennen

ich habe schon angedacht sowas zu schreiben, bin aber noch nie dazu gekommen

lg
Wolfgang S

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

Ian_K
Mitglied



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

Beiträge: 40
Registriert: 22.06.2006

erstellt am: 01. Apr. 2008 10:59    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

Hmm, habe ich das richtig verstanden?
Ich nehme den alten Block und mache die falschen Attribute so wie die des neuen Blocks?
Und dann den Block in alle Zeichnungen einfügen wo der alte Block mit den alten Attributen drin ist und dann "attsync" drüber her laufen lassen?
Tauscht er dann den Block aus und behält die Werte bei?
Danach den neuen Block rein und Marc sein Programm nutzen?
Viel zig Zeichnungen ist das ein ganz schöner Workflow der da zu stande kommt...
Die Mitarbeiter werden das nicht mitmachen.

Es geht darum, ich hab ein alte Schriftfeld als Block mit Attributen in sehr vielen Zeichnungen.
Nun hat sich das Schriftfelddesign etwas geändert, die dargestellte Atribute sind jedoch gleich.
Marc sein Programm kommt da sehr gelegen: Neuen Schriftfeldblock in die Zeichnung einfügen und Marcs Funktion benutzen. Das war es... Alles sauber, bis auf die Attribute die vor vor Jahren leider nicht als Eindeutig definiert wurden... Die doppelt vorhandenen Attributnamen werden leider nicht übertragen bzw. wieder überschrieben...

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

CAD-Huebner
Ehrenmitglied V.I.P. h.c.
Verm.- Ing., ATC-Trainer



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

Beiträge: 9732
Registriert: 01.12.2003

One AutoCAD 2.5 - 2023, Civil 3D, Win10/win11

erstellt am: 01. Apr. 2008 11:19    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 Ian_K 10 Unities + Antwort hilfreich

Also ist es da nicht einfacher, das neue Schriftrfeld wie das alte zu benennen und zu ersetzen? Einfach via -EINFÜGE alterSchriftfeldblock=C:\irgendwo\NeuerSchriftfeldblock.dwg ersetzen/ aktualisieren? Dabei werden die Attribute gar nicht angefasst. (allerdings sitzen sie dann noch an den voehrigenen Positionen).
Zur Positionsanpassung an die nue Blockdefinition ein ATTSYNC oder BATTMAN>synchronisieren ausführen.

------------------
Mit freundlichem Gruß

Udo Hübner
www.CAD-Huebner.de

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

Ian_K
Mitglied



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

Beiträge: 40
Registriert: 22.06.2006

erstellt am: 01. Apr. 2008 12:01    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

Das führt leider zu unerwarteten Problem, da die Änderungen im Schriftfeld zu komplex sind.

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

CAD-Huebner
Ehrenmitglied V.I.P. h.c.
Verm.- Ing., ATC-Trainer



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

Beiträge: 9732
Registriert: 01.12.2003

One AutoCAD 2.5 - 2023, Civil 3D, Win10/win11

erstellt am: 01. Apr. 2008 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 Ian_K 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Ian_K:
...Nun hat sich das Schriftfelddesign etwas geändert, die dargestellte Atribute sind jedoch gleich.
...

Zitat:
Original erstellt von Ian_K:
Das führt leider zu unerwarteten Problem, da die Änderungen im Schriftfeld zu komplex sind.

Was wurde denn jetzt geändert, das Nur das Design oder die Attributsdefinitionen im erheblichen Umfang?


------------------
Mit freundlichem Gruß

Udo Hübner
www.CAD-Huebner.de

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

Ian_K
Mitglied



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

Beiträge: 40
Registriert: 22.06.2006

erstellt am: 01. Apr. 2008 12: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

Ich würde eigentlich ehrlich gesagt gern mit dem Vorschlag von Wolfgang S weitermachen...
Das entwickelt sich langsam wieder zu einer Unterhaltung zur Sinnigkeit.
Diese Übertragungsmodi könnte man nämlich auch noch in anderen Bereichen einsetzen.

Die Funktion mit dem Reinkopieren oder Neueinfügen von geänderten Blöcken kenne ich wohl, kenne jedoch auch deren Probleme und dass das nicht immer klappt und man weiß häufig nie woran das genau liegt - der Normalnutzer sowieso nicht. Eindeutige Funktionalitäten wie der Vorschlag von Wolfgang S in einer separaten Funktion sind da glaub eher für den Mitarbeiter erlernbar.

Außerdem sind diese hier angesprochenen Schriftfeldblöcke mit der Jahreszahl belegt. Das neue Schriftfeld müsste somit dem alten Jahr entsprechen...

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

joern bosse
Ehrenmitglied
Dipl.-Ing. Vermessung


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

Beiträge: 1734
Registriert: 11.10.2004

Window 10
ACAD 2021
CIVIL 2021
BricsCAD V14-V22
Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz
16.0GB RAM
NVIDIA GeForce GTX 1050<P>

erstellt am: 01. Apr. 2008 12:35    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 Ian_K 10 Unities + Antwort hilfreich

Hallo Ian,
ist denn die Reihenfolge der Attribute immer fest eingehalten??
Dann könnte man nämlich Grundsätzlich sagen:
1. Attribut wird BESCHREIBUNG-A
2. Attribut wird DAT-A
3. Attribut wird NAME-A
4. Attribut wird BESCHREIBUNG-B  ....

Das in eine Funktion gepackt, die Marc seiner Funktion vorgeschaltet ist.
Wenn die Reihenfolge aber nicht immer gleich ist gibt das ein großes Durcheinander.

------------------
viele Grüße

Jörn

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

Ian_K
Mitglied



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

Beiträge: 40
Registriert: 22.06.2006

erstellt am: 01. Apr. 2008 13: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

Jupp! Das kann ich bestätigen. Genauso wie ich es eingangs dargestellt habe.
Obwohl ich das Script bei Bedürftigkeit bestimmt noch etwas selbst anpassen können - Namen ändern oder drehen.
Bin von Haus aus eigentlich VBA´ler. Mit Lisp hab ich so meine Schwierigkeiten, aber das schöne Script von Marc gibts ja nun schon mal. Eine kleine Erweiterung in der Schleife oder nach der Schleife, wo man die von der Funktion erstellte Liste der Texte mit einigen Variablen erweitern könnte wäre nicht schlecht nach dem Motto:
Lies BESCHREIBUNG aus und trage ein bei BESCHREINUNG-A
dann weiter
Lies BESCHREIBUNG aus und trage ein bei BESCHREINUNG-B
etc C und D
dann weiter
Lies DAT aus und trage ein bei DAT-A
dann weiter

oder nach dem Reihenfolgenmusster wie Eingangs...

oder sogar in einer separten Funktion wiederum auslagern, dann kann man das auch alleinig für was anderem benutzen...

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

joern bosse
Ehrenmitglied
Dipl.-Ing. Vermessung


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

Beiträge: 1734
Registriert: 11.10.2004

Window 10
ACAD 2021
CIVIL 2021
BricsCAD V14-V22
Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz
16.0GB RAM
NVIDIA GeForce GTX 1050<P>

erstellt am: 01. Apr. 2008 13:29    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 Ian_K 10 Unities + Antwort hilfreich

Hallo Ian,
Du kannst ja mal folgende Funktion ausprobieren:
starten mit "attnames"
Code:

(defun c:attnames ( / LISTE N OBJ)
  (setq liste '("BESCHREIBUNG-A"
"DAT-A"
"NAME-A"
"BESCHREIBUNG-B"
"DAT-B"
"NAME-B"
"BESCHREIBUNG-C"
"DAT-C"
"NAME-C"))
  (if (setq obj (car(entsel "\nBlock auswählen:")))
    (progn
      (setq n 0)
      (mapcar '(lambda(A)
(if (<= n 6)
      (entmod(subst (cons 2 (nth n liste))(assoc 2 A)A)))
(setq n (+ n 1)))
      (attnames:liste obj)))))


(defun attnames:liste(obj / list_att)
  (if (and (entnext obj)(=(cdr(assoc 0(entget (entnext obj))))"ATTRIB"))
    (while (and(setq obj (entnext obj))
      (/= "SEQEND" (cdr(assoc 0(entget obj)))))
      (if (=(cdr(assoc 0(entget obj)))"ATTRIB")
(setq list_att (cons (entget obj)list_att)))))
  (if list_att
    (reverse list_att)
    nil))


------------------
viele Grüße

Jörn

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

Ian_K
Mitglied



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

Beiträge: 40
Registriert: 22.06.2006

erstellt am: 01. Apr. 2008 13:55    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

Hmmm, ich habe das mal in eigenständigen lsp Datei getestet und da kommt folgendes bei raus:
Befehl: attnames
Block auswählen 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
25 26 27 28 29)

Ich kann das leider nicht interpretieren. Wie baut man das denn in Marcs Code ein?
Ich vermute mal, hinsichtlich meiner VBA Kenntnisse:
setq liste
erstellt ein 2dimensionalen Array. Eine Dimension wird mit den ZielAttributen belegt.
Dann die Blockwahl als Wenn dann Prüfung
N<=6 ? Keine Ahnung
Dann werden irgendwann alle Attribute des Blocks einzeln durchgegangen und der
zweiten Dimension des Arrays geschrieben.
Nur wo werden die in den Zielblock bzw.  in den Zielattributen geschrieben und wo ist die Ziel Blockauswahl.

Kleine Anmerkung noch. Einige Attribute des Quellblocks sind eindeutig und Konform mit dem Zielblock.
Diese Konformen bräuchten hier nicht berücksichtigt werden, da das ja das Script von Marc übernimmt.

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

joern bosse
Ehrenmitglied
Dipl.-Ing. Vermessung


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

Beiträge: 1734
Registriert: 11.10.2004

Window 10
ACAD 2021
CIVIL 2021
BricsCAD V14-V22
Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz
16.0GB RAM
NVIDIA GeForce GTX 1050<P>

erstellt am: 01. Apr. 2008 14: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 Ian_K 10 Unities + Antwort hilfreich

Hallo Ian,
viel wichtiger als die Rückgabe ist doch, ob das Ergebnis passt. Haben sich die Attributsnamen von dem Block, den Du ausgewählt hast geändert?

------------------
viele Grüße

Jörn

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

Ian_K
Mitglied



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

Beiträge: 40
Registriert: 22.06.2006

erstellt am: 01. Apr. 2008 14:15    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

Achso, du Zäumst das Pferd von der anderen Seite auf.
Ne, die Attributnamen haben sich leider nicht geändert.

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

joern bosse
Ehrenmitglied
Dipl.-Ing. Vermessung


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

Beiträge: 1734
Registriert: 11.10.2004

Window 10
ACAD 2021
CIVIL 2021
BricsCAD V14-V22
Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz
16.0GB RAM
NVIDIA GeForce GTX 1050<P>

erstellt am: 01. Apr. 2008 14:47    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 Ian_K 10 Unities + Antwort hilfreich

Hallo Ian,
ich glaube wir verstehen uns falsch:
Das Programm ändert von einem Block der ausgewählt wird die ersten 6 Attributsnamen, mehr passiert nicht. Wie hast Du das überprüft? Ich habe bei mir einen Testblock genommen, und mit einem Doppelklick den Attributseditor aufgerufen. Die Attributsnamen waren geändert.
Wie auch immer, wenn diese Attributsnamen geändert sind könntest Du das Programm von Marc verwenden. Das einbinden in Marc's Routine würde ich erst machen wenn es auch funktioniert.

Vielleicht solltest Du es mit VBA probieren, dann kannst Du die VBA-Funktion von LISP aus starten, mit folgenden Zeilen:
(vl-vbaload "c:/test/meine_VBA_datei.dvb")
(vl-vbarun "meine_VBA_Funktion")


   

------------------
viele Grüße

Jörn

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

Ian_K
Mitglied



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

Beiträge: 40
Registriert: 22.06.2006

erstellt am: 01. Apr. 2008 15:02    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

Ich hab es gerade nochmal probiert.
Hatte versucht den Block anschließend zu sprengen und dann zu schauen, ob die Parameter geändert sind.
Als ich in dessen Koniguration geschaut habe ohne sprengen, da waren die Werte geändert.
Die Attribute werden wohl nur im Speicher geändert - ähnlich wie bei JavaScript.
Sorry.
Nun brauch ich diese Anpassung aber leider nur für die Attribute, die mehr als doppelt vorhanden sind - sprich nicht eindeutig sind.

[Diese Nachricht wurde von Ian_K am 01. Apr. 2008 editiert.]

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

joern bosse
Ehrenmitglied
Dipl.-Ing. Vermessung


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

Beiträge: 1734
Registriert: 11.10.2004

Window 10
ACAD 2021
CIVIL 2021
BricsCAD V14-V22
Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz
16.0GB RAM
NVIDIA GeForce GTX 1050<P>

erstellt am: 01. Apr. 2008 15:14    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 Ian_K 10 Unities + Antwort hilfreich

Hallo Ian,
da muss ich dann leider passen, das würde den Rahmen der Forenhilfe sprengen, vielleicht hift Dir da ja noch ein anderer weiter. Vielleicht solltest Du Dich ein bisschen mit dem Code beschäftigen, daraus lernen ist das Ziel dieses Forum's.

Falls Du Dich in LISP ein bißchen einarbeiten möchstest kann ich Dir das Kochbuch AutoLISP empfehlen.

------------------
viele Grüße

Jörn

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

Wolfgang S
Mitglied
CADaver


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

Beiträge: 270
Registriert: 06.03.2006

AC 2009, C3D 2009, AC 2010, C3D 2010, AC 2011, C3D 2011, RVT 2010, RVT 2011, ASD 2011 und alles darunter bis R14 +
Win XP, Win XP64, Win 7/64

erstellt am: 01. Apr. 2008 16:43    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 Ian_K 10 Unities + Antwort hilfreich

Die Idee mit dem << attnames >> Code gefällt mir gut.

damit kann man im vorhinein die Att. der Referenzen umstellen und erst danach auf eine neue Blockdef synchronisieren!

beginnt von der anderen Richtung (von mir aus gesehen) ist aber sehr reizvoll.


lg
wolfgang

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