| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Elemente eines Blocks (1740 mal gelesen)
|
gmk Mitglied Dipl.-Ing.(FH) Vermessung
Beiträge: 667 Registriert: 23.10.2002 Autocad 2004, WS CadCompass, Normica V2000, WinXP Prof., AMD Athlon 64 X2, 2GB, NVIDIA GeForce 7600GS, HP1055CM
|
erstellt am: 22. Jul. 2008 10:30 <-- editieren / zitieren --> Unities abgeben:
Hallo! Endet die Schleife nach dem letzten Element mit NIL oder mit "ENDBLK"? (ENDBLK gibt's doch eigentlich gar nicht als entity, wird aber im DXF-Format als solches verwendet. Warum?) (DEFUN block-elemente ( / bl-obj bl )
(SETQ bl-obj (CDR (ASSOC -2 (tblsearch "BLOCK" (gc_dxf 2 (ENTGET (CAR (ENTSEL)))))))) (SETQ bl (ENTGET bl-obj)) (WHILE <------------------------------- nil oder ENDBLK?? (SETQ bl (ENTGET bl-obj)) (SETQ bl-obj (ENTNEXT bl-obj)) ) ) Ciao Georg ------------------ http://www.xx-tausend.info Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 22. Jul. 2008 10:42 <-- editieren / zitieren --> Unities abgeben: Nur für gmk
mal ein Codeschnipsel.. denke , die Formatierung bekommst du wieder hin (if(setq BLOCKDEF (tblsearch "BLOCK" BLOCKNAME)) ; Blockdefinition zum Blocknamen auslesen (progn (if(and (/=(logand(cdr(assoc 70 BLOCKDEF))4)4) ; ist Block kein kein XREF, und (or (/= (logand(cdr(assoc 70 BLOCKDEF))1)1) ; auch kein unbenannter Block wie (=(vl-string-search "*U" BLOCKNAME) 0) ; Bemassung , Schraffur ect. ... ) ) (progn (setq BLOCKELEMENT (cdr (assoc -2 BLOCKDEF))) ; Adresse der Blockelemente holen (while BLOCKELEMENT ; und solange nicht alle Blockelemente abgearbeitet sind ... ;"MACH WAS MIT BLOCKELEMENT" (setq BLOCKELEMENT (entnext BLOCKELEMENT)) ) ) ) ) ) ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
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: 22. Jul. 2008 11:02 <-- editieren / zitieren --> Unities abgeben: Nur für gmk
Hallo Georg, außerdem ist der Unterschied zwischen Block und Blockdefinition zu beachten. Wenn ich z.B. alle Attribute eines Blockes haben will, dann Code:
(setq obj (car (entsel))) (while(and(setq obj (entnext obj)) (/= (cdr(assoc 0 (entget obj)))"SEQEND")) (if (=(cdr(assoc 0 (entget obj)))"ATTRIB") (setq att_liste (cons obj att_liste))))
Wenn ich diese aber aus der Blockdefinition beziehen will, dann Code:
(setq obj (tblobjname "BLOCK" "Blockname")) (while (setq obj (entnext obj)) (if (=(cdr(assoc 0 (entget obj)))"ATTDEF") (setq att_liste (cons obj att_liste))))
Bei der Blockdefinion solange entnext bis nil zurückgegeben wird, dafür werden alle Blockelemente durchlaufen. Bei dem Block solange kein "SEQEND" auftaucht, es werden aber nur die Attribute durchlaufen, nicht die Geometrieobjekte. ------------------ viele Grüße Jörn Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
gmk Mitglied Dipl.-Ing.(FH) Vermessung
Beiträge: 667 Registriert: 23.10.2002 Autocad 2004, WS CadCompass, Normica V2000, WinXP Prof., AMD Athlon 64 X2, 2GB, NVIDIA GeForce 7600GS, HP1055CM
|
erstellt am: 22. Jul. 2008 11:42 <-- editieren / zitieren --> Unities abgeben:
Hallo! Das mit NIL dachte ich mir schon, war auch der Rückgabewert beim 1.Versuch, war mir blos nicht ganz sicher da im DXF und in der Hilfe immer von ENDBLK geschrieben wird. @Jörn Es gibt noch den dritten Fall dass in einem Block ein insert mit Attributen abgelegt ist. Dann befinden sich im übergeordneten Block auch Attribute und um das geht es mir eigentlich ..... Danke nochmal für die schnellen Infos! Ciao Georg
------------------ http://www.xx-tausend.info Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Hans-Leo Müller Mitglied Lehrer an Berufsbildenden Schulen
Beiträge: 30 Registriert: 24.09.2003
|
erstellt am: 08. Feb. 2021 11:34 <-- editieren / zitieren --> Unities abgeben: Nur für gmk
Hallo Forum, Ich habe ein Problem mit dem Auslesen von Blöcken. Kann zwar die Liste erstellen mit den Objekteinträgen "SEQEND", es fehlt mir aber die Möglichkeit auf die Geometriedaten (z.B Kreis oder Bogen zuzugreifen. Ich habe es schon versucht mit assoc und tblsearch, leider kein Erfolg. Kann mir jemand dabei helfen ? Gruß Hans-Leo
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 Alles
|
erstellt am: 08. Feb. 2021 11:43 <-- editieren / zitieren --> Unities abgeben: Nur für gmk
Hi, so wie du es beschreibst hast du wohl keinen Block, sondern eine Blockreferenz.. Eine Blockreferenz hat keine Geometrie (außer den vielleicht damit verknüpften Attributen). Eine Blockreferenz zeigt nur die grafischen Objekte eines Blockes.. An den Block und den darin enthaltenen Objekten kommst du wie es hier in der ersten Antwort bereits gezeigt wurde. https://ww3.cad.de/foren/ubb/Forum145/HTML/002535.shtml#000001 EDIT: Wo CADmium die Zeile ;"MACH WAS MIT BLOCKELEMENT" hat, ergänze doch um eine einfache Rückmeldung wie zB "alert Objekttyp" (alert (cdr(assoc 0 (entget BLOCKELEMENT)))) ;"MACH WAS MIT BLOCKELEMENT"
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |