Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Attributeinhalte mit Vorgabe per entmod ändern

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:  Attributeinhalte mit Vorgabe per entmod ändern (468 / mal gelesen)
Peter2
Ehrenmitglied V.I.P. h.c.




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

Beiträge: 3709
Registriert: 15.10.2003

Win 10/64 Pro
AutoCAD MAP 3D 2023
BricsCAD 22

erstellt am: 13. Mrz. 2023 12:12    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 habe mein altes Programm ausgegraben, mit dem ich Attributinhalte ändern kann. Hat immer schön geklappt ..

- Block mit (Command-s "_insert ..") einfügen
- (entlast) durchgehen
- wenn gesuchte Attributdefinition gefunden, dann

Code:
(setq neuwert (subst (cons 1 attribtext) (assoc 1 attf_elliste) attf_elliste))
(entmod neuwert)

Jetzt habe ich da aber Blöcke, deren Attribute diverse Defaultwerte haben (meist 0). Da funktioniert die Geschichte nicht - kein Fehler in Lisp, aber Default bleiben trotzdem. Testweise habe ich einen Block umdefiniert und alle Vorgaben in den ATTDEF gelöscht - da geht's wieder.

Was ist da anders? Was muss ich da noch einbauen?

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: 1365
Registriert: 11.01.2006

WIN 10
ACAD 2022

erstellt am: 13. Mrz. 2023 13:41    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 Peter2 10 Unities + Antwort hilfreich

Hallo Peter2,
stell mal so einen Block hier rein.
Das muss eigentlich gehen, hab momentan keine Idee wo das hängt.

------------------
Geht nicht, gibts nicht

Gruß
Andreas

http://kraus-cad.de

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

spider_dd
Mitglied



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

Beiträge: 1114
Registriert: 27.11.2003

Win 10Pro
Intel(R) Core(TM) i7-7700
NVIDIA Quadro P1000
ACAD, Civil-3D 2018

erstellt am: 13. Mrz. 2023 13:51    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 Peter2 10 Unities + Antwort hilfreich

Da wir Dein Programm ober- und unterhalb des Schnipsels nicht kennen, ... müsste es nichr heißen

Code:

(setq attf_elliste) (subst ..)
(entmod attf_elliste)

Habe ich zumindest bei mir immer so.

Gruß
Thomas

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

Peter2
Ehrenmitglied V.I.P. h.c.




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

Beiträge: 3709
Registriert: 15.10.2003

Win 10/64 Pro
AutoCAD MAP 3D 2023
BricsCAD 22

erstellt am: 13. Mrz. 2023 13: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


pkt_0.zip

 
Hier die Subroutine:

Code:
(defun attrib_fill (attribname attribtext)
    ; gehe jedes Attribut durch
    (setq attf_unterelement (entnext (entlast)))
    (setq attf_elliste (entget attf_unterelement))
   
    ; gehe im Block jedes Attribut durch
    (while (/= (cdr (assoc 0 attf_elliste)) "SEQEND")
        (setq attf_elliste (entget attf_unterelement))
        (if (= (cdr (assoc 0 attf_elliste)) "ATTRIB") ; wenn es noch Attributbezeichnungen gibt
            (progn
                (setq attf_attbez (cdr (assoc 2 attf_elliste))) ; lese die Attributbezeichnung

                ; Wenn das gefundene Attribut der gesuchten Definition entspricht
                (if (= (strcase attf_attbez) (strcase attribname))
                    (progn
                        ; schreibe die Werte ins Attribut
                        (setq neuwert (subst (cons 1 attribtext) (assoc 1 attf_elliste) attf_elliste))
                        (entmod neuwert)
                        (princ (strcat "\n    Attribut " attf_attbez " wurde befüllt mit:\t" attribtext ))
                    )
                )
            ) ;_ end of progn
        ) ;_ end of if
        ; ein Schritt weiter in der Elementliste des Blocks
        (setq attf_unterelement (entnext attf_unterelement))
    )
    (princ)
)


Nutzung z.B. um das Attribut CODE zu füllen:
(attrib_fill "CODE" "Test")

Datei beiliegend.

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: 1735
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: 13. Mrz. 2023 14:37    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 Peter2 10 Unities + Antwort hilfreich


AttributListeMehrzeilig.jpg

 
Hallo Peter,
bei Deinem Block hast Du mehrzeilige Attribute enthalten, dadurch ist in der Gruppencodeliste der GC 1 mehrfach vorhanden, und somit geht das SUBST auf den falschen Wert => siehe Bild

Anbei eine VLA-Variante, damit sollte es funktionieren:

Code:

(defun attrib_fill_vla (AttName TextWert / ATTNAME TEXTWERT VLA-ATT VLA-OBJ)
  (setq vla-obj (vlax-ename->vla-object(entlast)));;;Objekt in VLA-Objekt
  ;;;wenn Objekt Attribute enthält
  (if (and(vlax-property-available-p vla-obj 'hasattributes)
          (=(vla-get-hasattributes vla-obj):vlax-true))   
    ;;;VLA-Attribute in Mapcar-Schleife durchgehen
    (mapcar '(lambda(vla-Att)
              (if (=(vla-get-TagString vla-Att)AttName)
                (progn
                  (vla-put-TextString vla-Att TextWert)
                  (princ (strcat
                            "\n    Attribut "
                            AttName
                            " wurde befüllt mit:\t"
                            TextWert))
                  )
                )
              )
      ;;;VLA-Attribute in Liste
      (vlax-safearray->list
        (vlax-variant-value
          (vla-getattributes vla-obj)
          )
        )
      )
    (alert "Das Objekt hatte keine Attribte")
    )
    (princ)
  )

Zu starten genau wie Deine Funktion, bloss der Funktionsname ist anders:
(attrib_fill_vla "CODE" "TEST")

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

Jörn
http://www.bosse-engineering.com

das Flächenstempel_Tool

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

Peter2
Ehrenmitglied V.I.P. h.c.




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

Beiträge: 3709
Registriert: 15.10.2003

Win 10/64 Pro
AutoCAD MAP 3D 2023
BricsCAD 22

erstellt am: 13. Mrz. 2023 14: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

Danke, Jörn

aber so auf die schnelle tut sich da nichts.

Im Swamp gibt es Beiträge, da werde ich mal schauen:

http://www.theswamp.org/index.php?topic=57910.msg611978#msg611978
http://www.theswamp.org/index.php?topic=56315.msg601930#msg601930

--

Schnellbericht:
Anscheinend klappt es auch mit Lee Macs Fragmenten nicht. Schaut nach Ärger aus - oder Blockwechsel ...

[Diese Nachricht wurde von Peter2 am 13. Mrz. 2023 editiert.]

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

spider_dd
Mitglied



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

Beiträge: 1114
Registriert: 27.11.2003

Win 10Pro
Intel(R) Core(TM) i7-7700
NVIDIA Quadro P1000
ACAD, Civil-3D 2018

erstellt am: 13. Mrz. 2023 15:12    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 Peter2 10 Unities + Antwort hilfreich

Hallo Peter,
Dein beigefügter Block hat keine Attribute, da kann es nicht klappen.
Wenn man aus den mitgelieferten Daten einen Block mit Attributen macht, passiert etwas, aber nicht das erwartete. Bei einem selbst erstellten Block mit einem "normalen" Attribut funktioniert es bei mir einwandfrei, egal ob das Attribut eine Vorgabe hat oder keine. Ich habe mir daraufhin mal den GC-Code der Atrribute angesehen und festgestellt, dass Deine irgendwie noch anders sind. Das macht sich auch schon beim Einfügen bemerkbar, die Abfrage ist irgendwie anders. Hier mal die GC-Codes:

Code:

Attribut von mir: (einfach mit attdef erzeugt ohne "Schnickschnack"
((-1 . <Objektname: 2e4dddf4d90>) (0 . "ATTRIB") (330 . <Objektname: 2e4dddf4d80>) (5 . "15E1") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbText") (10 53.1655 245.462 0.0) (40 . 0.25) (1 . "willi") (50 . 0.0) (41 . 1.0) (51 . 0.0) (7 . "ARI025_V_100") (71 . 0) (72 . 0) (11 0.0 0.0 0.0) (210 0.0 0.0 1.0) (100 . "AcDbAttribute") (280 . 0) (2 . "TEXT_O") (70 . 0) (73 . 0) (74 . 0) (280 . 1))

Code:

Hier Dein Attribute CODE
((-1 . <Objektname: 2e5133d0a50>) (0 . "ATTRIB") (330 . <Objektname: 2e5133d0a10>) (5 . "1625") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "$P_INF_FL") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "AcDbText") (10 77.1504 257.315 0.0) (40 . 2.0) (1 . "Test") (50 . 0.0) (41 . 1.0) (51 . 0.0) (7 . "Standard") (71 . 0) (72 . 1) (11 77.1504 256.649 0.0) (210 0.0 0.0 1.0) (100 . "AcDbAttribute") (280 . 0) (2 . "CODE") (70 . 0) (73 . 0) (74 . 1) (280 . 0) (71 . 2) (72 . 0) (11 77.1504 256.649 0.0) (101 . "Embedded Object") (10 77.1504 256.649 0.0) (40 . 2.0) (41 . 0.0) (46 . 0.0) (71 . 8) (72 . 1) (1 . "aa") (7 . "Standard") (210 0.0 0.0 1.0) (11 1.0 0.0 0.0) (42 . 2.88813) (43 . 2.03274) (50 . 0.0) (73 . 1) (44 . 1.0) (90 . 3) (63 . 9) (421 . 13158600) (45 . 1.1) (441 . 0))

Unterschiede mal fett gemacht
Wie erstellst Du die Attribute? Der angezeigte Text ist bei Dir im zweiten fett gedruckten Abschnitt bei (1 . "aa")

HTH
Gruß
Thomas


-edit-
OK zu lange gebraucht, Hinweis auf mehrzeilige Attribute schon gekommen.
-edit ende-

[Diese Nachricht wurde von spider_dd am 13. Mrz. 2023 editiert.]

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

Peter2
Ehrenmitglied V.I.P. h.c.




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

Beiträge: 3709
Registriert: 15.10.2003

Win 10/64 Pro
AutoCAD MAP 3D 2023
BricsCAD 22

erstellt am: 13. Mrz. 2023 15:51    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

Zitat:
Original erstellt von spider_dd:
..Wie erstellst Du die Attribute? ..

Gar nicht. Aus Bestand übernommen.

Und ja - die zusätzlichen GC sind mir aufgefallen, aber ich kann sie - abgesehen von der Mehrzeiligkeit, die ich gern wegkriege würde - nicht erklären.

[Diese Nachricht wurde von Peter2 am 13. Mrz. 2023 editiert.]

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



Konstrukteur Maschinenbau (m/w/d)

Firmenbeschreibung

ORANGE Engineering steht für Karriere mit innovativen Engineering-Projekten mit Standorten sowohl in Deutschland als auch in den Niederlanden. Zu unseren Kunden zählen erfolgreiche Unternehmen aus zahlreichen Branchen, durch die unsere Mitarbeiterinnen und Mitarbeiter an tagesaktuellen technologischen Entwicklungen beteiligt sind ? eine ausgezeichnete Perspektive für Ihre Karriere....

Anzeige ansehenKonstruktion, Visualisierung
Peter2
Ehrenmitglied V.I.P. h.c.




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

Beiträge: 3709
Registriert: 15.10.2003

Win 10/64 Pro
AutoCAD MAP 3D 2023
BricsCAD 22

erstellt am: 13. Mrz. 2023 19:33    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

Habe die Vorlage umgebaut auf einfache Attribute - läuft jetzt.

Danke für die Beiträge.

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