| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | | | PNY präsentiert die neue NVIDIA RTX A400 und die A1000 Grafikkarte, eine Pressemitteilung
|
Autor
|
Thema: Wie Liste arrangieren für mit entmake erstellten Block? (1844 mal gelesen)
|
holgerka75 Mitglied
Beiträge: 15 Registriert: 19.03.2004
|
erstellt am: 28. Apr. 2004 14:01 <-- editieren / zitieren --> Unities abgeben:
Hallo Lisp´ler, ich erstelle einen Referenzpunkt mit entmake: (setq referenzpunkt (list '(0 . "INSERT") '(100 . "AcDbEntity") '(8 . "Layername") '(100 . "AcDbBlockReference") '(2 . "RefPkt") (assoc 10 (entget block1)) ) ) (entmake hauptrefpktliste) Aus "block1" kommen Koordinaten, aber das nur nebenher.... So, nun möchte ich in die zweite Stufe der Hierarchie gehen. (entget block = Stufe 1; entnext entget block = Stufe 2 usw....) In der zweiten Stufe wird nun die Punktnummer eingetragen. Also z.B. (list '(0."INSERT") ... ... ... '(2."PNR") usw... Jetzt meine schlaue Frage: Wie bekomme ich die ganzen Hierarchie-Stufen in eine einzige Liste geschrieben? Ich kann das doch nicht einfach zusammenfassen, die einzelnen Attribute (2. 100. usw. )kommen ja öfters vor....!? Oje oje, ich hoffe, Ihr habt verstanden was ich meine.... Gruß Holger
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 28. Apr. 2004 14:18 <-- editieren / zitieren -->
Zitat: Original erstellt von holgerka75: Oje oje, ich hoffe, Ihr habt verstanden was ich meine....
Nöö, eigentlich nicht :-) Du erzeugst eine Blockreferenz via ENTMAKE. Dazu verwendest Du die DXF-Liste so, wie sie benötigt wird. Die anderen zu erzeugenden Entities haben damit nix zu tun. Du erwähnst ganz, ganz nebenbei was von Attributen - soll Deine Blockreferenz auch Attribute aufweisen? Die Attribute einer Blockreferenz haben so gut wie gar nichts mit den ATTDEF Elementen einer Blockdefinition zu tun. Du kannst Referenzen ohne Attribute von Blöcken erzeugen, die ATTDEFs haben, udn Du kannst Attribute an Blockreferenzen anhängen, deren Blockdefinitionen keine ATTDEFs haben. Für das Erzeugen der ATTRIBs erzeugst Du erst mal die Blockreferenz selber mit dem passenden 70er Flag (Attribute folgen), und unmittelbar danach die ATTRIBs, die Du haben willst. Ob zum Abschluss ein SEQUEND nötig ist, weiss ich im Moment auch nicht, aber das kannst Du ja einfach durch ENTNEXT auf ein Attribut selber heraus finden. Tom Berger ------------------ Architekturwerkzeuge für AutoCAD: http://www.archtools.de |
holgerka75 Mitglied
Beiträge: 15 Registriert: 19.03.2004
|
erstellt am: 28. Apr. 2004 14:46 <-- editieren / zitieren --> Unities abgeben:
Hi Tom, danke erstmal für Deine Antwort! Aaalso, ja, ich will einen Block erstellen, und ja, der Block soll mehrere Attribute besitzen. Und das was ich nicht weiss, ist, wie ich die verschiedenen Attribute in diese Liste reinbekomme. Zur Erstellung des Blocks habe ich '(0. "INSERT"), dann kommen die Attribute, die ja immer mit '(0. "ATTRIB") anfangen, und dann hinten mit '(2. "PNR") oder "HOE" usw..(zusammen mit den Attributseigenschaften) aufhören! Wie fasse ich das alles zusammen? Ich kann doch nicht einfach alles hintereinander schreiben? z.B. '(0."ATTRIB") '(1.eigenschaften_pnr) '(2."PNR") '(0."ATTRIB") '(1.eigenschaften_hoe) '(2."HOE") usw... Oder doch? Gruß Holger Ist dieser von Dir genannte 70-Flag die Lösung? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9803 Registriert: 01.12.2003 One AutoCAD 2.5 - 2024, AutoCAD, Civil 3D, Win10/Win11
|
erstellt am: 28. Apr. 2004 16:25 <-- editieren / zitieren --> Unities abgeben: Nur für holgerka75
Wie kann ich eine eine Blockreferenz inklusive Attributen mit Entmake erzeugen. Ich hoffe, dass ist die gesuchte Antwort. Das Flag 66 im Hauptelement "INSERT" bestimmt, ob Attribute folgen. (DEFUN C:BLOCKTEST (/ ATTLISTE ATTPOS BLOCKNAME I PKT) ; Konstanten (SETQ Blockname "TESTBLOCK1" pkt '(0.0 0.0 0.0) ; Blockeinfügepunkt Vorgabe attliste '(("PKTNR" . "100") ("HÖHE" . "12.12")) i 0 ; Attributzähler für Attributversatz benutzt ) ; lokale Funktion (DEFUN CREATE_BLOCK (blkname) ; falls Block nicht defniert ist (ENTMAKE (LIST (CONS 0 "POINT") (CONS 8 "0") (LIST 10 0.0 0.0 0.0)) ) (COMMAND "_BLOCK" blkname (LIST 0.0 0.0 0.0) (ENTLAST) "") ) ; Beginn Hauptprogramm
(IF (NOT (TBLSEARCH "BLOCK" Blockname)) (CREATE_BLOCK Blockname) ) ; Hauptelement schreiben (ENTMAKE (LIST (CONS 0 "INSERT") (CONS 8 (GETVAR "CLAYER")) (CONS 2 Blockname) ; Blockname (CONS 41 1.0) ; ScaleX (CONS 42 1.0) ; ScaleY (CONS 43 1.0) ; ScaleZ (CONS 50 0.0) ; rotation (CONS 10 pkt) ; blkorigin (CONS 66 1) ; Attribs follows / Attribute folgen ) ) ; attliste ist Beschreibungsliste für alle einzuhängenden Attribute (FOREACH ele attliste (SETQ attpos (LIST (+ (NTH 0 pkt) 1.0) (- (NTH 1 pkt) (* (SETQ i (1+ i)) (GETVAR "TEXTSIZE") ) ) ) ) (ENTMAKE (LIST (CONS 0 "ATTRIB") (CONS 2 (CAR ele)) ; Attributname (CONS 1 (CDR ele)) ; Attributinhalt (CONS 8 (CAR ele)) ; Attributname als Layer (CONS 10 attpos) ; Textposition (CONS 40 (GETVAR "TEXTSIZE")) ; Texthöhe (CONS 70 0) ; Sichtbarkeit ) ) ) ; ende foreach ; Sequenzende-Element (ENTMAKE (LIST (CONS 0 "SEQEND"))) ;(PROMPT "Blockreferenz erzeugt!") ) ; ende DEFUN Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|