Hi & Willkommen,
tip1: "Nutze Autocad 2025" und es geht um Lisp, du fragst aber in einem "AutoCAD LT" Board um Hilfe!?
Besser wäre es im "#Rund um AutoCAD", aber da Programmierung nunmal nicht zum Standardhandwerk eines AutoCAD-Users gehört,
dann wäre das "LISP" Board die noch bessere Wahl!
https://ww3.cad.de/cgi-bin/ubb/forumdisplay.cgi?action=topics&forum=Rund+um+AutoCAD&number=54
https://ww3.cad.de/cgi-bin/ubb/forumdisplay.cgi?action=topics&forum=Lisp&number=145
tip2: Besser eine DWG mit den entsprechenden Blockreferenzen bereitstellen,
so machst du es potentiellen Helfern nicht unnötig schwer,
damit beteiligen sich dann tendenziell mehr aktiv an der Frage
und viel wichtiger: Deine Testdatei muss nicht vergleichbar sein
was die wenigen verbliebenen Helfer sich selbst zurechtbasteln!
Beste Prüfgrundlage ist immmer dieselbe Grundlage für alle.
tip3: Falls du selbst den Block als so eine .dwg-Vorlage auch zum "entwickeln" dieser Blöcke nutzt:
Einen "echten 100% realen Test" kann man ohnehin nur in der Modellbereich-Umgebung mit einer Blockreferenz machen,
die im BEDIT zur Verfügung stehende "TestBlock"-Umgebung kann in einigen Fällen andere Ergebnisse liefern.
Aus diesem Grund würde ich ausschließlich in einer DWG Blöcke definieren, aber auch hier:
Für einen 100%igen Test, immer mit einer neu erzeugten Blockreferenz testen.
tip4: Wenn du ein Problem hast und es dazu eine Hinweis-, Warn- oder Fehlermeldung gibt,
dann beschreibe auch das in deinem Post, so kann der eine oder andere schon entscheiden ob das was
für ihn ist oder nicht, oder es wird damit auch direkt klar was das Problem ist.
Nach ausführen von ExportBlockAttr in meiner Testdatei, wird nach dem .csv Speicherort/Dateinamen gefragt,
danach erfolgt eine Fehlermeldung:
Befehl: EXPORTBLOCKATTR
; Fehler: Fehlerhafter Argumenttyp: lentityp (70 . 0)
Was ganz eindeutig aussagt: Programm erwartet ein Objekt (entity), wird aber mit der dottetpair Liste (70 . 0) gefüttert.
Ein Blick in den Code wo denn mit dem Code 70 hantiert wird:
;; Get the block's attributes
(if (setq attlst (vl-remove-if-not
'(lambda (x) (= (car x) 70))
(entget block)
)
)
Dieser Part ist "völlig falsch", da mußt du noch einmal ran.
DXF 70 eines Inserts hat nichts mit Attributen zutun, Attributdaten sind nicht direkt in der Entityliste eines Insert zu finden.
Schau mal in die Hilfe, DXF INSERT , Gruppencode 66 wäre etwas für den ssgget-Filter.
Ist Code 66 vorhanden bzw. 1, dann folgen der Blockreferenz Attribute, ENTNEXT hilft uns zum nächsten Objekt zu kommen.
Nutze das mal:
Befehl: (car(entsel)) Ename deiner Blockreferenz
Befehl: (entget(car(entsel))) Entity-Liste deiner Blockreferenz
Befehl: (entget(entnext(car(entsel)))'("*")) Entity-Liste des ersten Attributes
das geht immer soc weiter (nächstes Objekte), bis ein Objekt SEQEND kommt.
>>"ich habe probiert, dies mit einem Lisp zu automatisieren"
>>"Irgendwas ist was nicht korrekt. Ich arbeite mit lisp zum ersten Mal"
Daraus leite ich ab: Du hast den Code nicht selbst geschrieben und auch nicht als funktionierenden Code irgendwoher kopiert,
schade. Diesen Umstand habe ich zu spät verstanden und meine Hilfestellung hilft dir überhaupt nicht weiter.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP